astroport/www/LOVELand/cesium/dist_js/cesium-api.js

11 lines
853 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* minified */
function e(e){var t=this;Object.keys(e).forEach((function(i){t[i]=e[i]})),t.endpoints=t.endpoints||[]}function t(e,t){"use strict";var i=this;t&&t.length?_.forEach(t,(function(t){i[t]=e[t]})):["currency","issuer","medianTime","number","version","powMin","dividend","membersCount","hash","identities","joiners","actives","leavers","revoked","excluded","certifications","transactions","unitbase"].forEach((function(t){i[t]=e[t]})),i.identitiesCount=i.identities?i.identities.length:0,i.joinersCount=i.joiners?i.joiners.length:0,i.activesCount=i.actives?i.actives.length:0,i.leaversCount=i.leavers?i.leavers.length:0,i.revokedCount=i.revoked?i.revoked.length:0,i.excludedCount=i.excluded?i.excluded.length:0,i.certificationsCount=i.certifications?i.certifications.length:0,i.transactionsCount=i.transactions?i.transactions.length:0,i.empty=i.isEmpty(),i.id=[i.number,i.hash].join("-")}function n(e){var t=e.split(":");if(t.length<3||!t[0].startsWith("WS2P"))throw Error("Invalid format: "+e);if("HEAD"==t[1]){if(t.length<4)throw Error("Invalid format: "+e);if(4==t.length)this.pubkey=t[2],this.buid=t[3];else if(t[2]>=1){var i=t[0];if(i.length>4){var n=this.regexp.WS2P_PREFIX.exec(i);if(!n)throw Error("Invalid format: "+e);var a=n[1];if(a){this.private={useTor:a.startsWith("T")};var o=a.substring(1);"A"==o?this.private.mode="all":"M"==o?this.private.mode="mixed":"S"==o&&(this.private.mode="strict")}var r=n[2];r&&(this.public={useTor:r.startsWith("T"),mode:"all"})}this.pubkey=t[3],this.buid=t[4],this.ws2pid=t[5],this.software=t[6],this.version=t[7],this.powPrefix=t[8]}}}function a(e,t,i,n){angular.extend(this,i("HomeCtrl",{$scope:e})),e.showLoginModal=function(){return e.loading?t(e.showLoginModal,500):n.isLogin()||e.error?void 0:t(n.login,300)},e.$on("$ionicView.enter",e.showLoginModal)}function o(e,t,i,n,a,o,r,s,l,c,d,u,E,m,p){p=p||{},u.demo&&(p.method="PUBKEY"),e.computing=!1,e.pubkey=null,e.formData={},e.showPubkey=!1,e.showComputePubkeyButton=!1,e.autoComputePubkey=!1,e.pubkeyPattern="^(:?{0}|{1})$".format(c.constants.regexp.PUBKEY,c.constants.regexp.PUBKEY_WITH_CHECKSUM),e.isAuth=p.auth,e.okText=p.okText,e.title=p.title||(e.isAuth?"AUTH.TITLE":"LOGIN.TITLE"),e.showMethods=!angular.isDefined(p.showMethods)||p.showMethods,e.showNewAccountLink=!angular.isDefined(p.showNewAccountLink)||p.showNewAccountLink,e.expectedPubkey=p.expectedPubkey,e.expectedUid=p.uid,e.scryptParamsValues=_.keys(o.constants.SCRYPT_PARAMS).reduce((function(e,t){return e.concat({id:t,label:"LOGIN.SCRYPT."+t,params:o.constants.SCRYPT_PARAMS[t]})}),[{id:"USER",label:"LOGIN.SCRYPT.USER",params:{}}]),e.init=function(){s().then((function(){e.autoComputePubkey="a"===ionic.Platform.grade.toLowerCase()&&!l.screen.isSmall()})),e.formData.rememberMe=E.data.rememberMe,e.formData.keepAuthIdle=E.data.keepAuthIdle,e.formData.keepAuth=e.formData.keepAuthIdle==E.constants.KEEP_AUTH_IDLE_SESSION;var t=p.method||E.data.login&&E.data.login.method||"SCRYPT_DEFAULT",i=E.data.login&&E.data.login.params;(e.isAuth&&"PUBKEY"===t||"SCAN"===t||"default"===t)&&(t="SCRYPT_DEFAULT"),e.changeMethod(t,i)},e.enter=function(){l.loading.hide(),l.ink({selector:".modal-login .ink"})},e.$on("modal.shown",e.enter),e.leave=function(){e.formData={},e.computing=!1,e.pubkey=null,e.methods=[]},e.$on("modal.hide",e.leave),e.doLogin=function(i){var n=e.formData.method;if(e.form.$valid||"SCAN"===n){var a,s=e.formData.keepAuthIdle;if("SCRYPT_DEFAULT"===n||"SCRYPT_ADVANCED"===n){if(!e.formData.username||!e.formData.password)return;var d=e.formData.scrypt&&e.formData.scrypt.params;l.loading.show(),a=o.scryptKeypair(e.formData.username,e.formData.password,d).then((function(t){if(!t)return l.loading.hide(10);var i=o.util.encode_base58(t.signPk);return p.expectedPubkey&&p.expectedPubkey!=i?(e.pubkey=i,e.showPubkey=!0,e.pubkeyError=!0,l.loading.hide(10)):(e.pubkeyError=!1,{pubkey:i,keypair:t,params:e.formData.scrypt&&"SCRYPT_DEFAULT"!=e.formData.scrypt.id?d:void 0})})).catch(l.onError("ERROR.CRYPTO_UNKNOWN_ERROR"))}else if("FILE"===n){if(!e.formData.file||!e.formData.file.valid||!e.formData.file.pubkey)return;s=e.formData.keepAuth&&E.constants.KEEP_AUTH_IDLE_SESSION||s,a=l.loading.show().then((function(){return e.readKeyFile(e.formData.file,{withSecret:e.isAuth||e.formData.keepAuth})})).then((function(t){if(!t)return l.loading.hide(10);var i=o.util.encode_base58(t.signPk);return p.expectedPubkey&&p.expectedPubkey!=i?(e.formData.file.valid=!1,l.loading.hide(10)):(e.pubkeyError=!1,{pubkey:i,keypair:t})})).catch(l.onError("ERROR.AUTH_FILE_ERROR"))}else if("PUBKEY"===n){var u=e.formData.pubkey&&e.formData.pubkey.trim(),m=e.formData.uid&&e.formData.uid.trim()||void 0;if(!u)return;var b=c.regexp.PUBKEY.exec(u);if(b)a=l.loading.show().then((function(){return{pubkey:u,uid:m}}));else{if(!(b=c.regexp.PUBKEY_WITH_CHECKSUM.exec(u)))return e.showWotLookupModal(u);u=b[1],b[2]!=r.util.pkChecksum(u)?e.form.pubkey.$error={checksum:!0}:a=l.loading.show().then((function(){return{pubkey:u,uid:m}}))}}else if("SCAN"===n){if(!e.formData.pubkey||e.isAuth&&!e.formData.keypair)return;a=l.loading.show().then((function(){return{pubkey:e.formData.pubkey,keypair:e.formData.keypair}}))}if(a)return a.then((function(i){if(i){var a=!angular.equals(E.data.rememberMe,e.formData.rememberMe),o=!angular.equals(E.data.keepAuthIdle,s),r=!angular.equals(E.data.login&&E.data.login.method,n),c=!angular.equals(E.data.login&&E.data.login.params,i.params);return(a||o||r||c)&&(E.data.rememberMe=e.formData.rememberMe,E.data.keepAuthIdle=s,E.data.useLocalStorage=!!E.data.rememberMe||E.data.useLocalStorage,E.data.login=E.data.login||{},E.data.login.method=n,E.data.login.params=i.params,t(E.store,500)),p.success&&p.success(e.formData),p.silent&&l.loading.hide(),e.closeModal(i)}}));console.warn("[login] unknown method: ",n)}},e.onScryptFormChanged=function(){e.computing||(e.pubkey=null,e.pubkeyError=!1,e.showPubkey=!!e.formData.username&&!!e.formData.password,e.autoComputePubkey&&e.showPubkey?(e.computePubkey(),e.showComputePubkeyButton=!1):e.showComputePubkeyButton=!e.autoComputePubkey&&e.showPubkey)},e.$watch("formData.username + formData.password",e.onScryptFormChanged,!0),e.computePubkey=function(){return e.showComputePubkeyButton=!1,e.computing=!0,e.pubkey=null,t((function(){var t=e.formData.username,i=e.formData.password,n=e.formData.scrypt&&e.formData.scrypt.params;return o.scryptSignPk(t,i,n).then((function(n){if(t!==e.formData.username||i!==e.formData.password)return e.computePubkey();e.pubkey=o.util.encode_base58(n),e.expectedPubkey&&e.expectedPubkey!=e.pubkey&&(e.pubkeyError=!0),e.computing=!1})).catch((function(t){l.onError("ERROR.CRYPTO_UNKNOWN_ERROR")(t),e.computing=!1,e.autoComputePubkey=!1,e.onScryptFormChanged()}))}),100)},e.showJoinModal=function(){e.closeModal(),t((function(){d.showJoin()}),300)},e.showAccountSecurityModal=function(){e.closeModal(),t((function(){d.showAccountSecurity()}),300)},e.showHelpModal=function(e){return d.showHelp(e)},e.doScan=function(){if(!e.computing)return e.computing=!0,e.formData.pubkey=null,e.formData.keypair=null,m.barcode.scan().then((function(t){if(t)return e.isAuth?i.when(t):c.uri.parse(t).then((function(e){if(!e||!e.pubkey)throw{message:"ERROR.SCAN_UNKNOWN_FORMAT"};return e})).catch((function(e){return console.debug("[login] Error while parsing as URI: "+(e&&e.message||e)),t}))})).then((function(e){if(e)return e&&e.pubkey?e:r.keyfile.parseData(e,{silent:!0}).then((function(e){if(!e||!e.signPk||!e.signSk)throw{message:"ERROR.SCAN_UNKNOWN_FORMAT"};return{pubkey:o.base58.encode(e.signPk),keypair:e}})).catch(l.onError("ERROR.SCAN_UNKNOWN_FORMAT"))})).then((function(t){t&&t.pubkey&&(e.pubkeyError=e.expectedPubkey&&e.expectedPubkey!=t.pubkey,e.formData.pubkey=t.pubkey,e.formData.keypair=t.keypair)})).then((function(){e.computing=!1,l.loading.hide(10)})).catch((function(t){e.computing=!1,l.onError("ERROR.SCAN_FAILED")(t)}))},e.changeMethod=function(t,i){if(e.hideMethodsPopover(),"PUBKEY"!==t&&u.demo)return l.alert.demo();if(t&&t!==e.formData.method)if(console.debug("[login] method is: "+t),e.formData.method=t,e.formData.uid=null,e.form&&delete e.form.$submitted,"SCRYPT_DEFAULT"===t||"SCRYPT_ADVANCED"===t){var n;e.pubkey=null,i?(n=_.find(e.scryptParamsValues,(function(e){return e.params&&angular.equals(e.params,i)})))||((n=_.findWhere(e.scryptParamsValues,{id:"USER"})||{}).params=i):n=_.findWhere(e.scryptParamsValues,{id:"DEFAULT"}),e.changeScrypt(n),e.autoComputePubkey=e.autoComputePubkey&&"SCRYPT_DEFAULT"===t}else{if("SCAN"===t)return e.doScan();e.formData.username=null,e.formData.password=null,e.formData.pubkey=null,e.pubkey=null,e.computing=!1}},e.changeScrypt=function(t){e.formData.scrypt=angular.copy(t||{}),e.onScryptFormChanged()},e.readKeyFile=function(i,n){return(n=n||{}).password=n.password||e.formData.file.password||function(){return e.formData.file.password=void 0,d.showPassword({title:"ACCOUNT.SECURITY.KEYFILE.PASSWORD_POPUP.TITLE",subTitle:"ACCOUNT.SECURITY.KEYFILE.PASSWORD_POPUP.HELP",error:n.error,scope:e}).then((function(i){return e.formData.file.password=i,t((function(){return i}),150)}))},r.keyfile.read(e.formData.file,n).catch((function(t){if(e.formData.file.password=void 0,"CANCELLED"===t&&l.loading.hide(10),t&&t.ucode==r.errorCodes.BAD_PASSWORD)return e.readKeyFile(e.formData.file,{withSecret:n.withSecret,error:"ACCOUNT.SECURITY.KEYFILE.ERROR.BAD_PASSWORD"});throw t}))},e.onFileChanged=function(i){i&&i.fileData?(e.formData.file={name:i.fileData.name,size:i.fileData.size,content:i.fileContent},e.validatingFile=!0,t((function(){return console.debug("[login] key file changed: ",e.formData.file),e.validatingFile=!0,e.readKeyFile(e.formData.file,{withSecret:!1,password:e.formData.file.password}).then((function(t){t&&t.signPk?(e.formData.file.pubkey=o.util.encode_base58(t.signPk),e.formData.file.valid=!e.expectedPubkey||e.expectedPubkey===e.formData.file.pubkey,e.validatingFile=!1):(e.formData.file.valid=!1,e.formData.file.pubkey=void 0)})).catch((function(t){t&&"CANCELLED"===t?e.removeKeyFile():(e.validatingFile=!1,e.formData.file.valid=!1,e.formData.file.pubkey=void 0,l.onError("ERROR.AUTH_FILE_ERROR")(t))}))}))):e.validatingFile=!1},e.removeKeyFile=function(){e.formData.file=void 0},e.showWotLookupModal=function(i){return d.showWotLookup({q:i}).then((function(i){if(i&&i.pubkey)return e.formData.pubkey=i.pubkey,e.formData.uid=i.uid||void 0,t(e.doLogin,300)}))},e.showMethodsPopover=function(t){t.defaultPrevented||l.popover.show(t,{templateUrl:"templates/login/popover_methods.html",scope:e,autoremove:!0,afterShow:function(t){e.methodsPopover=t,l.ink({selector:".popover-login-methods .item"})}})},e.hideMethodsPopover=function(){e.methodsPopover&&(e.methodsPopover.hide(),e.methodsPopover=null)},e.init()}function r(e,t,i){var n=angular.copy(i);n.demo=!1,n.readonly=!1,angular.extend(this,t("LoginModalCtrl",{$scope:e,parameters:{auth:!0},csConfig:n})),e.setForm=function(t){e.form=t}}function s(e,t,i,n,a){e.$on("$ionicView.enter",(function(o){e.locale=a.data.locale.id,t.stateParams&&t.stateParams.anchor&&(e.anchor=t.stateParams.anchor,i((function(){n(t.stateParams.anchor)}),100))}))}function l(e,t,i,n,a){e.itemsClass={},e.locale=n.data.locale.id,(a=a||{})&&"string"==typeof a&&(a={anchor:a}),a.anchor&&(t((function(){i(a.anchor)}),100),e.itemsClass={},e.itemsClass[a.anchor]="selected",e.listClass="selection")}function c(e,t,i,n,a,o,r,s,l,c,d,u,E,m){e.tour=!1,e.continue=!0,e.executeStep=function(t,i,n){if((n=angular.isDefined(n)?n:0)>=i.length)return o.when(!0);var a=i[n];if("function"!=typeof a)throw new Error("[helptip] Invalid step at index {0} of '{1}' tour: step must be a function".format(n,t));var r=a();return"boolean"==typeof r&&(r=o.when(r)),r.then((function(a){return angular.isUndefined(a)?(e.continue=!1,n):a&&n!==i.length-1?e.executeStep(t,i,n+1):a?-1:n+1})).catch((function(i){return i&&"transition prevented"===i.message?console.error("ERROR: in help tour [{0}], in step [{1}] -> use large if exists, to prevent [transition prevented] error".format(t,n)):console.error("ERROR: in help tour [{0}], in step [{1}] : {2}".format(t,n,i)),e.continue=!1,n}))},e.showHelpTip=function(t,i){return(i=i||{}).bindings=i.bindings||{},i.bindings.value=i.bindings.value||"",i.bindings.hasNext=!angular.isDefined(i.bindings.hasNext)||i.bindings.hasNext,i.timeout=i.timeout||(E.enable?900:500),i.autoremove=!0,i.bindings.tour=e.tour,i.backdropClickToClose=!e.tour,s.popover.helptip(t,i)},e.showHelpModal=function(e){Modals.showHelp({anchor:e})},e.startHelpTour=function(){return e.tour=!0,e.continue=!0,console.debug("[help] Starting help tour... {demo: {0}, readonly: {1}, isLogin: {2}}".format(l.demo,l.readonly,m.isLogin())),(!l.readonly&&m.isLogin()?e.startWalletNoLoginTour(0,!0):o.when(!0)).then((function(t){return!!t&&(!(!l.readonly&&m.isLogin())||e.startWalletTour(0,!0).then((function(t){return!!t&&(c.data.helptip.wallet=t,c.store(),e.continue)})))})).then((function(t){return!!t&&(!(!l.readonly&&m.isLogin())||e.startWalletCertTour(0,!0).then((function(t){return!!t&&(c.data.helptip.walletCerts=t,c.store(),e.continue)})))})).then((function(t){return!!t&&(!(!l.readonly&&m.isLogin())||e.startTxTour(0,!0).then((function(t){return!!t&&(c.data.helptip.tx=t,c.store(),e.continue)})))})).then((function(t){return!!t&&(!(!l.readonly&&m.isLogin())||e.startWalletsTour(0,!0).then((function(t){return!!t&&(c.data.helptip.wallets=t,c.store(),e.continue)})))})).then((function(t){return!!t&&(!!l.readonly||e.startHeaderTour(0,!0))})).then((function(t){return!!t&&(!!l.readonly||e.startSettingsTour(0,!0))})).then((function(t){return!!t&&e.startWotLookupTour(0,!0).then((function(t){return!(!t||e.cancelled)&&(c.data.helptip.wotLookup=t,c.store(),e.continue)}))})).then((function(t){return!!t&&e.startWotTour(0,!0).then((function(t){return!(!t||e.cancelled)&&(c.data.helptip.wot=t,c.store(),e.continue)}))})).then((function(t){return!!t&&e.startWotCertTour(0,!0).then((function(t){return!!t&&(c.data.helptip.wotCerts=t,c.store(),e.continue)}))})).then((function(t){return!!t&&e.startCurrencyTour(0,!0).then((function(t){return!(!t||e.cancelled)&&(c.data.helptip.currency=t,c.store(),e.continue)}))})).then((function(t){return!!t&&e.startNetworkTour(0,!0).then((function(t){return!(!t||e.cancelled)&&(c.data.helptip.network=t,c.store(),e.continue)}))})).then((function(t){return!!t&&(!l.readonly||e.startSettingsTour(0,!0))})).then((function(t){return!!t&&e.finishTour()}))},e.startCurrencyTour=function(i,a){var o,u=[function(){return n.toggleLeft(!0),e.showHelpTip("helptip-menu-btn-currency",{bindings:{content:"HELP.TIP.MENU_BTN_CURRENCY",icon:{position:s.screen.isSmall()||l.readonly?"left":"bottom-left"}}})},function(){return n.isOpen()&&n.toggleLeft(!1),t.go(s.screen.isSmall()?"app.currency":"app.currency_lg").then((function(){return e.showHelpTip("helptip-currency-mass-member",{bindings:{content:"HELP.TIP.CURRENCY_MASS",icon:{position:"center"}}})}))},function(){return!c.data.useRelative||e.showHelpTip("helptip-currency-mass-member-unit",{bindings:{content:"HELP.TIP.CURRENCY_UNIT_RELATIVE",contentParams:o,icon:{position:s.screen.isSmall()?"right":"center"}}})},function(){return r("helptip-currency-rules-anchor"),e.showHelpTip("helptip-currency-rules",{bindings:{content:"HELP.TIP.CURRENCY_RULES",icon:{position:"center",glyph:"ion-information-circled"}}})},function(){return t.is("app.currency.tab_parameters")&&t.go("app.currency.tab_wot"),r("helptip-currency-newcomers-anchor"),e.showHelpTip("helptip-currency-newcomers",{bindings:{content:"HELP.TIP.CURRENCY_WOT",icon:{position:"center"},hasNext:a},timeout:1200,retry:2})}];return d.get().then((function(t){return o=t.parameters,e.executeStep("currency",u,i)}))},e.startNetworkTour=function(o,r){var u=function(){t.is("app.currency")&&a((function(){var e=i.document.querySelectorAll("ion-tabs .tabs a");e&&3===e.length&&angular.element(e[2]).triggerHandler("click")}),100)},E=[function(){return!!s.screen.isSmall()||(n.toggleLeft(!0),e.showHelpTip("helptip-menu-btn-network",{bindings:{content:"HELP.TIP.MENU_BTN_NETWORK",icon:{position:s.screen.isSmall()||l.readonly?"left":"bottom-left"}}}))},function(){return n.isOpen()&&n.toggleLeft(!1),t.go(s.screen.isSmall()?"app.currency.tab_network":"app.network").then((function(){return u(),e.showHelpTip("helptip-network-peers",{bindings:{content:"HELP.TIP.NETWORK_BLOCKCHAIN",icon:{position:"center",glyph:"ion-information-circled"}},timeout:1200})}))},function(){return u(),e.showHelpTip("helptip-network-peer-0",{bindings:{content:"HELP.TIP.NETWORK_PEERS",icon:{position:s.screen.isSmall()?void 0:"center"}},timeout:1e3,retry:20})},function(){return u(),e.showHelpTip("helptip-network-peer-0-block",{bindings:{content:"HELP.TIP.NETWORK_PEERS_BLOCK_NUMBER",icon:{position:s.screen.isSmall()?void 0:"center"}}})},function(){u();var t=c.data.locale.id;return e.showHelpTip("helptip-network-peers",{bindings:{content:"HELP.TIP.NETWORK_PEERS_PARTICIPATE",contentParams:{installDocUrl:l.helptip&&l.helptip.installDocUrl?l.helptip.installDocUrl[t]?l.helptip.installDocUrl[t]:l.helptip.installDocUrl:"http://duniter.org"},icon:{position:"center",glyph:"ion-information-circled"},hasNext:r}})}];return d.parameters().then((function(t){return e.executeStep("network",E,o)}))},e.startWotLookupTour=function(o,r){var c=[function(){return n.toggleLeft(!0),e.showHelpTip("helptip-menu-btn-wot",{bindings:{content:"HELP.TIP.MENU_BTN_WOT",icon:{position:s.screen.isSmall()||l.readonly?"left":"bottom-left"}},onError:"continue"})},function(){return n.isOpen()&&n.toggleLeft(!1),t.go(s.screen.isSmall()?"app.wot_lookup.tab_search":"app.wot_lookup_lg").then((function(){return e.showHelpTip("helptip-wot-search-text",{bindings:{content:s.screen.isSmall()?"HELP.TIP.WOT_SEARCH_TEXT_XS":"HELP.TIP.WOT_SEARCH_TEXT",icon:{position:"center"}}})}))},function(){return e.showHelpTip("helptip-wot-search-result-0",{bindings:{content:"HELP.TIP.WOT_SEARCH_RESULT",icon:{position:"center"}},timeout:700,retry:15})},function(){var t=i.document.getElementById("helptip-wot-search-result-0");return!t||(a((function(){angular.element(t).triggerHandler("click")})),e.showHelpTip("helptip-wot-view-certifications",{bindings:{content:"HELP.TIP.WOT_VIEW_CERTIFICATIONS",hasNext:r},timeout:2500}))}];return e.executeStep("wotLookup",c,o)},e.startWotTour=function(t,i){var n,a=[function(){return e.showHelpTip("helptip-wot-view-certifications",{bindings:{content:"HELP.TIP.WOT_VIEW_CERTIFICATIONS_COUNT",contentParams:n,icon:{position:"center",glyph:"ion-information-circled"}}})},function(){return e.showHelpTip("helptip-wot-view-certifications-count",{bindings:{content:"HELP.TIP.WOT_VIEW_CERTIFICATIONS_CLICK",icon:{position:"center"},hasNext:i}})}];return d.get().then((function(i){return(n=i.parameters).currentUD=i.currentUD,e.executeStep("wot",a,t)}))},e.startWotCertTour=function(n,r){if(l.readonly)return o.when(!0);var c=[function(){if(t.is("app.wot_identity")){var n=i.document.getElementById("helptip-wot-view-certifications");if(!n)return!0;a((function(){angular.element(n).triggerHandler("click")}))}return e.showHelpTip(s.screen.isSmall()?"fab-certify":"helptip-certs-certify",{bindings:{content:"HELP.TIP.WOT_VIEW_CERTIFY",icon:{position:s.screen.isSmall()?"bottom-right":"center"}},timeout:s.screen.isSmall()?2e3:1e3,retry:10})},function(){return e.showHelpTip(s.screen.isSmall()?"fab-certify":"helptip-certs-certify",{bindings:{content:"HELP.TIP.CERTIFY_RULES",icon:{position:"center",glyph:"ion-alert-circled"},hasNext:r}})}];return e.executeStep("certs",c,n)},e.startWalletNoLoginTour=function(t,i){if(m.isLogin())return o.when(!0);var a=[function(){return n.toggleLeft(!0),e.showHelpTip("helptip-menu-btn-account",{bindings:{content:"HELP.TIP.MENU_BTN_ACCOUNT",icon:{position:"left"},hasNext:i}})},function(){return n.toggleLeft(!0),e.showHelpTip("helptip-menu-btn-tx",{bindings:{content:"HELP.TIP.MENU_BTN_TX",icon:{position:"left"},hasNext:i}})},function(){return n.toggleLeft(!0),e.showHelpTip("helptip-menu-btn-wallets",{bindings:{content:"HELP.TIP.MENU_BTN_WALLETS",icon:{position:"left"},hasNext:i}})}];return e.executeStep("wallet-no-login",a,t)},e.startWalletTour=function(i,a){if(!m.isLogin())return o.when(!0);var l=m.data.isMember||m.data.requirements&&m.data.requirements.pendingMembership,c=[function(){return n.toggleLeft(!0),e.showHelpTip("helptip-menu-btn-account",{bindings:{content:m.data.isMember?"HELP.TIP.MENU_BTN_ACCOUNT_MEMBER":"HELP.TIP.MENU_BTN_ACCOUNT",icon:{position:"left"}}})},function(){return n.isOpen()&&n.toggleLeft(!1),t.go("app.view_wallet").then((function(){return e.showHelpTip(s.screen.isSmall()?"helptip-wallet-options-xs":"helptip-wallet-options",{bindings:{content:"HELP.TIP.WALLET_OPTIONS",icon:{position:s.screen.isSmall()?"right":"center"}},timeout:s.screen.isSmall()?2e3:1e3,retry:10})}))},function(){return r("helptip-wallet-pubkey"),e.showHelpTip("helptip-wallet-pubkey",{bindings:{content:"HELP.TIP.WALLET_PUBKEY",icon:{position:"center"},hasNext:!l&&a},timeout:s.screen.isSmall()?2e3:500,retry:10})},function(){return l?(r("helptip-wallet-certifications"),e.showHelpTip("helptip-wallet-certifications",{bindings:{content:s.screen.isSmall()?"HELP.TIP.WALLET_RECEIVED_CERTIFICATIONS":"HELP.TIP.WALLET_CERTIFICATIONS",icon:{position:"center"},hasNext:a},timeout:500,onError:"continue"})):a}];return c.length!=u.wallet.stepCount&&console.error("[help] Invalid value of 'csHelpConstants.wallet.stepCount'. Please update to {0}".format(c.length)),d.get().then((function(t){return t.parameters.currentUD=t.currentUD,e.executeStep("wallet",c,i)}))},e.startWalletCertTour=function(n,r){if(!m.isLogin())return o.when(!0);var l=!1,c=[function(){if(t.is("app.view_wallet")){var n=i.document.getElementById("helptip-wallet-certifications");if(!n)return l=!0,!0;a((function(){angular.element(n).triggerHandler("click")}))}return!s.screen.isSmall()||e.showHelpTip("helptip-received-certs",{bindings:{content:"HELP.TIP.WALLET_RECEIVED_CERTS"}})},function(){return!(!l&&s.screen.isSmall())||t.go("app.view_wallet").then((function(){return e.showHelpTip("helptip-wallet-given-certifications",{bindings:{content:"HELP.TIP.WALLET_GIVEN_CERTIFICATIONS",icon:{position:"center"}},timeout:500})}))},function(){if(l)return!0;if(t.is("app.view_wallet")){var n=i.document.getElementById("helptip-wallet-given-certifications");if(!n)return l=!0,!0;a((function(){angular.element(n).triggerHandler("click")}),500)}return e.showHelpTip(s.screen.isSmall()?"fab-select-certify":"helptip-certs-select-certify",{bindings:{content:"HELP.TIP.WALLET_CERTIFY",icon:{position:s.screen.isSmall()?"bottom-right":"center"}},timeout:s.screen.isSmall()?2e3:500,retry:10})},function(){return e.tour||l?r:e.showHelpTip("helptip-certs-stock",{bindings:{content:"HELP.TIP.CERTIFY_RULES",icon:{position:"center",glyph:"ion-alert-circled"},hasNext:r}})}];return d.parameters().then((function(t){return e.executeStep("certs",c,n)}))},e.startTxTour=function(i,a){if(!m.isLogin())return o.when(!0);var r,s=[function(){return n.toggleLeft(!0),e.showHelpTip("helptip-menu-btn-tx",{bindings:{content:"HELP.TIP.MENU_BTN_TX",icon:{position:"left"}}})},function(){return n.isOpen()&&n.toggleLeft(!1),t.go("app.view_wallet_tx").then((function(){return e.showHelpTip("helptip-wallet-balance",{bindings:{content:c.data.useRelative?"HELP.TIP.WALLET_BALANCE_RELATIVE":"HELP.TIP.WALLET_BALANCE",contentParams:r,icon:{position:"center"}},retry:20})}))},function(){return e.showHelpTip("helptip-wallet-balance",{bindings:{content:"HELP.TIP.WALLET_BALANCE_CHANGE_UNIT",contentParams:r,icon:{position:"center",glyph:"ion-information-circled"}}})}];return d.get().then((function(t){return(r=t.parameters).currentUD=t.currentUD,e.executeStep("tx",s,i)}))},e.startWalletsTour=function(t,i){var a=[function(){return n.toggleLeft(!0),e.showHelpTip("helptip-menu-btn-wallets",{bindings:{content:"HELP.TIP.MENU_BTN_WALLETS",icon:{position:"left"},hasNext:i}})}];return e.executeStep("my-wallets",a,t)},e.startHeaderTour=function(r,c){if(s.screen.isSmall()||l.readonly)return o.when(!0);function d(){var e=i.document.querySelectorAll("#helptip-header-bar-btn-profile");return e&&e.length?_.find(e,(function(e){return e.offsetWidth>0})):null}var u=[function(){if(s.screen.isSmall())return!0;var i=d();return!i||e.showHelpTip(i,{bindings:{content:"HELP.TIP.HEADER_BAR_BTN_PROFILE",icon:{position:"right",style:t.is("app.home")?"margin-right: 60px":void 0}}})},function(){if(s.screen.isSmall())return n.toggleLeft(!0),e.showHelpTip("helptip-menu-btn-settings",{bindings:{content:"HELP.TIP.MENU_BTN_SETTINGS",icon:{position:"left"},hasNext:c},timeout:1e3});var t=d();return!t||(a((function(){angular.element(t).triggerHandler("click")})),e.showHelpTip("helptip-popover-profile-btn-settings",{bindings:{content:"HELP.TIP.MENU_BTN_SETTINGS",icon:{position:"center"},hasNext:c},timeout:1e3}).then((function(t){return e.closeProfilePopover(),t})))}];return e.executeStep("header",u,r)},e.startSettingsTour=function(i,a){var o,r=[function(){return!s.screen.isSmall()&&!l.readonly||(n.toggleLeft(!0),e.showHelpTip(s.screen.isSmall()?"helptip-menu-btn-settings":"menu-btn-settings",{bindings:{content:"HELP.TIP.MENU_BTN_SETTINGS",icon:{position:s.screen.isSmall()?"left":"bottom-left"}},timeout:1e3}))},function(){return n.isOpen()&&n.toggleLeft(!1),t.go("app.settings").then((function(){return e.showHelpTip("helptip-settings-btn-unit-relative",{bindings:{content:"HELP.TIP.SETTINGS_CHANGE_UNIT",contentParams:o,icon:s.screen.isSmall()?{position:"right",style:"margin-right: 60px"}:{position:"center"},hasNext:a},timeout:1e3})}))}];return d.parameters().then((function(t){return o=t,e.executeStep("settings",r,i)}))},e.finishTour=function(){return n.isOpen()&&n.toggleLeft(!1),m.isLogin()?t.go("app.view_wallet").then((function(){return e.showHelpTip("helptip-wallet-pubkey",{bindings:{content:"HELP.TIP.END_LOGIN",hasNext:!1},timeout:1200})})):o.all([e.showHome(),d.parameters().then((function(e){i=e}))]).then((function(){return e.showHelpTip("helptip-home-logo",{bindings:{content:l.readonly?"HELP.TIP.END_READONLY":"HELP.TIP.END_NOT_LOGIN",contentParams:i,hasNext:!1}})}));var i}}function d(e){e.$on("$ionicView.enter",(function(t,i){e.startHelpTour()}))}if(angular.module("cesium.settings.services",["ngApi","cesium.config"]).factory("csSettings",["$rootScope","$q","$window","Api","localStorage","$translate","csConfig",function(e,t,i,n,a,o,r){var s=[{id:"en",label:"English",flag:"us"},{id:"en-GB",label:"English (UK)",flag:"gb"},{id:"eo-EO",label:"Esperanto",flag:"eo"},{id:"fr-FR",label:"Français",flag:"fr"},{id:"nl-NL",label:"Nederlands",flag:"nl"},{id:"es-ES",label:"Spanish",flag:"es"},{id:"it-IT",label:"Italiano",flag:"it"}],l=r.fallbackLanguage?c(r.fallbackLanguage):"en";function c(e){if(!e)return l;if(_.findWhere(s,{id:e}))return e;var t=e.split("-");if(t.length>1)return c(t[0]);var i=_.find(s,(function(t){return String.prototype.startsWith.call(t.id,e)}));return i?i.id:l}var d,u,E,m,p={STORAGE_KEY:"settings",KEEP_AUTH_IDLE_SESSION:9999},b={timeout:4e3,cacheTimeMs:6e4,timeWarningExpireMembership:5184e3,timeWarningExpire:7776e3,minVersion:"1.1.0",sourceUrl:"https://git.duniter.org/clients/cesium-grp/cesium",sourceLicenseUrl:"https://git.duniter.org/clients/cesium-grp/cesium/-/raw/master/LICENSE",newIssueUrl:"https://git.duniter.org/clients/cesium-grp/cesium/issues/new",userForumUrl:"https://forum.monnaie-libre.fr",latestReleaseUrl:"https://api.github.com/repos/duniter/cesium/releases/latest",duniterLatestReleaseUrl:"https://api.github.com/repos/duniter/duniter/releases/latest",httpsMode:!1},T=angular.merge({useRelative:!1,useLocalStorage:!!i.localStorage,useLocalStorageEncryption:!1,persistCache:!1,walletHistoryTimeSecond:2592e3,walletHistorySliceSecond:432e3,walletHistoryAutoRefresh:!0,rememberMe:!0,keepAuthIdle:600,showUDHistory:!0,expertMode:!1,decimalCount:4,uiEffects:!0,blockValidityWindow:6,helptip:{enable:!0,installDocUrl:"https://duniter.org/en/wiki/duniter/install/",currency:0,network:0,wotLookup:0,wot:0,wotCerts:0,wallet:0,walletCerts:0,wallets:0,header:0,settings:0},currency:{allRules:!1,allWotRules:!1},wallet:{showPubkey:!0,alertIfUnusedWallet:!0},locale:{id:(E=r.defaultLanguage||o.use(),m=c(E),E!==m&&console.debug("[settings] Fix locale [{0}] -> [{1}]".format(E,m)),m)},license:{en:"license/license_g1-en","fr-FR":"license/license_g1-fr-FR","es-ES":"license/license_g1-es-ES"}},b,r),f={},g=!1,N=new n(this,"csSettings"),h=function(){if(angular.isUndefined(d)||!angular.equals(d,f))return d=angular.copy(f),N.data.raise.changed(f)},I=function(){return g?(f.useLocalStorage?!0===f.node.temporary?a.getObject(p.STORAGE_KEY).then((function(e){var t=angular.copy(f);return t.node=e&&e.node||{},delete t.temporary,a.setObject(p.STORAGE_KEY,t)})):a.setObject(p.STORAGE_KEY,f):a.setObject(p.STORAGE_KEY,null)).then((function(){return f.useLocalStorage&&console.debug("[setting] Saved locally"),N.data.raisePromise.store(f)})).then(h):(console.debug("[setting] Waiting start finished..."),(u||R()).then(I))},O=function(e){if(e){var t=!1;if(e.locale&&e.locale.id){var i=c(e.locale.id);e.locale=_.findWhere(s,{id:i}),t=!f.locale||e.locale.id!==f.locale.id||e.locale.id!==o.use()}_.keys(b).forEach((function(t){e[t]=T[t]})),angular.merge(f,e),(e&&e.node&&!e.node.temporary||!f.node.temporary)&&delete f.node.temporary,t&&o.use(f.locale.id)}},v=function(){var e=Date.now();return a.getObject(p.STORAGE_KEY).then((function(t){if(!t)return console.debug("[settings] No settings in local storage. Using defaults."),O(T),void h();O(t),console.debug("[settings] Loaded from local storage in "+(Date.now()-e)+"ms"),h()}))},R=function(){return console.debug("[settings] Starting..."),u=a.ready().then(v).then((function(){console.debug("[settings] Started"),g=!0,u=null,N.data.raise.ready(f)}))};return e.$on("$translateChangeSuccess",(function(){var e=o.use();console.debug("[settings] Locale ["+e+"]");try{moment.locale(e.toLowerCase())}catch(t){try{moment.locale(e.substr(0,2))}catch(e){moment.locale("en-gb"),console.warn("[settings] Unknown local for moment lib. Using default [en]")}}try{numeral.language(e.toLowerCase())}catch(t){try{numeral.language(e.substring(0,2))}catch(e){numeral.language("en-gb"),console.warn("[settings] Unknown local for numeral lib. Using default [en]")}}N.locale.raise.changed(e)})),N.registerEvent("data","reset"),N.registerEvent("data","changed"),N.registerEvent("data","store"),N.registerEvent("data","ready"),N.registerEvent("locale","changed"),O(T),{isStarted:function(){return g},ready:function(){return g?t.when():u||R()},start:R,data:f,apply:O,getByPath:function(e,t){var i=f;return _.each(e.split("."),(function(e){i=i[e],angular.isUndefined(i)&&(i=t)})),i},reset:function(){return _.keys(f).forEach((function(e){delete f[e]})),O(T),N.data.raisePromise.reset(f).then(I)},store:I,restore:v,getLicenseUrl:function(){var e=f.locale&&f.locale.id||r.defaultLanguage||"en";return r.license?r.license[e]?r.license[e]:T.license[r.defaultLanguage||"en"]||r.license:void 0},getFeedUrl:function(){var e=f.locale&&f.locale.id||r.defaultLanguage||"en";return r.feed&&r.feed.jsonFeed?r.feed.jsonFeed[e]?r.feed.jsonFeed[e]:T.feed.jsonFeed[r.defaultLanguage||"en"]||r.feed:void 0},defaultSettings:T,api:N,locales:s,constants:p}}]),angular.module("cesium.network.services",["ngApi","cesium.currency.services","cesium.http.services"]).factory("csNetwork",["$rootScope","$q","$interval","$timeout","$window","csConfig","BMA","csHttp","csCurrency","Api",function(t,i,a,o,r,s,l,c,d,u){var E,m="https:"===r.location.protocol,p=new u(this,"csNetwork"),b={bma:null,listeners:[],loading:!0,peers:[],filter:{member:!0,mirror:!0,endpoint:null,online:!1,bma:!1,ssl:void 0,tor:void 0},sort:{type:null,asc:!0,compact:!0},groupBy:"pubkey",expertMode:!1,knownBlocks:[],mainBlock:null,minOnlineBlockNumber:0,uidsByPubkeys:null,searchingPeersOnNetwork:!1,difficulties:null,ws2pHeads:null,timeout:s.timeout},T=function(e){return e&&[e.number,e.hash].join("-")},f=function(){return b.bma.network.ws2p.heads().then((function(e){b.ws2pHeads=e.heads?e.heads.reduce((function(e,t){if(t.message&&t.sig)try{var i=new n(t.message);e[[i.pubkey,i.ws2pid].join("-")]=i}catch(e){console.error("[network] Ignoring WS2P head.",e&&e.message||e)}return e}),{}):{}})).catch((function(e){if(e&&e.ucode==l.errorCodes.HTTP_LIMITATION)return o((function(){return f()}),3e3);console.error(e),b.ws2pHeads={}}))},g=function(){return b.bma.blockchain.stats.difficulties().then((function(e){b.difficulties=e.levels?e.levels.reduce((function(e,t){return t.uid&&t.level&&(e[t.uid]=t.level),e}),{}):{}})).catch((function(e){if(e&&e.ucode==l.errorCodes.HTTP_LIMITATION)return o((function(){return g()}),3e3);console.error(e),b.difficulties={}}))},N=function(){b.peers=[],b.searchingPeersOnNetwork=!0,b.loading=!0,b.bma=b.bma||l;var t=[];E&&a.cancel(E),E=a((function(){t.length?R(t):b.loading&&!b.searchingPeersOnNetwork&&(b.loading=!1,a.cancel(E),C(!0),console.debug("[network] Finish: {0} peers found.".format(b.peers.length)))}),1e3);var n=[b.bma.wot.member.uids().then((function(e){b.uidsByPubkeys=e})).catch((function(e){console.error(e),b.uidsByPubkeys={}})),f()];return b.expertMode&&n.push(g()),i.all(n).then((function(){return b.bma&&b.bma.network.peers()})).then((function(n){if(n&&n.peers&&n.peers.length){if(!b.filter.online)return i.all(_(n&&n.peers||[]).reduce((function(e,i){return e.concat(I(i,t))}),[]));var a=[];_.forEach(n.peers,(function(e){"UP"===e.status&&(e.blockNumber=e.block&&parseInt(e.block.split("-")[0]),e.blockNumber&&e.blockNumber<b.minOnlineBlockNumber?console.debug("[network] Exclude a too old peer document, on pubkey {0}".format(e.pubkey.substring(0,6))):(a.push(I(e,t)),_.forEach(e.endpoints||[],(function(t){if(t.startsWith("WS2P")){var i=e.pubkey+"-"+t.split(" ")[1];b.ws2pHeads[i]&&(b.ws2pHeads[i].hasEndpoint=!0)}}))))}));var o=_.values(b.ws2pHeads);if(o&&o.length){var r=0;_.forEach(o,(function(i){if(!i.hasEndPoint){var n=i.buid&&parseInt(i.buid.split("-")[0]);if(n&&n<b.minOnlineBlockNumber)return void console.debug("[network] Exclude a too old WS2P message, on pubkey {0}".format(i.pubkey.substring(0,6)));var a=new e({buid:i.buid,currentNumber:n,pubkey:i.pubkey,version:i.version,powPrefix:i.powPrefix,online:!0,uid:b.uidsByPubkeys[i.pubkey],bma:{useWs2p:!0,private:!0,ws2pid:i.ws2pid},endpoints:["WS2P "+i.ws2pid]});a.id=a.keyID(),a.uid&&b.expertMode&&b.difficulties&&(a.difficulty=b.difficulties[a.uid]),h(a)&&(t.push(a),r++)}})),r&&console.debug("[http] Found {0} WS2P endpoints without endpoint (private ?)".format(r))}return a.length?i.all(a):void 0}})).then((function(){b.searchingPeersOnNetwork=!1})).catch((function(e){console.error(e),b.searchingPeersOnNetwork=!1}))},h=function(e){return!(b.filter&&(b.filter.member&&!b.filter.mirror&&!e.uid||b.filter.mirror&&!b.filter.member&&e.uid||b.filter.endpoint&&!e.hasEndpoint(b.filter.endpoint)||b.filter.online&&"UP"!==e.status&&e.oldBlock||!b.filter.online&&"UP"===e.status&&!e.oldBlock||angular.isDefined(b.filter.bma)&&e.isBma()!=b.filter.bma||angular.isDefined(b.filter.ws2p)&&e.isWs2p()!=b.filter.ws2p||angular.isDefined(b.filter.ssl)&&e.isSsl()!=b.filter.ssl||angular.isDefined(b.filter.tor)&&e.isTor()!=b.filter.tor))},I=function(e,t){t=t||b.newPeers,e.blockNumber=e.block&&parseInt(e.block.split("-")[0]),e.oldBlock="UP"===e.status&&e.blockNumber&&e.blockNumber<b.minOnlineBlockNumber;var n=O(e),a=!1,o=n.reduce((function(e,i){var n=_.findWhere(b.peers,{id:i.id}),o=n?n.buid:null,r=!!n&&n.online;return e.concat(v(i).then((function(e){if(n)if(!e||e.online!==b.filter.online&&"all"!==b.filter.online){var s=b.peers.indexOf(n);-1!==s&&(console.debug("[network] Peer [{0}] removed (cause: {1})".format(i.server,e?e.online?"UP":"DOWN":"filtered")),b.peers.splice(s,1),a=!0)}else e.buid!==o?(console.debug("[network] {0} endpoint [{1}] new current block".format(e.bma&&(e.bma.useBma?"BMA":"WS2P")||"null",e.server)),a=!0):r!==e.online?(console.debug("[network] {0} endpoint [{1}] is now {2}".format(e.bma&&(e.bma.useBma?"BMA":"WS2P")||"null",e.server,e.online?"UP":"DOWN")),a=!0):console.debug("[network] {0} endpoint [{1}] unchanged".format(e.bma&&(e.bma.useBma?"BMA":"WS2P")||"null",e.server));else!e||e.online!==b.filter.online&&"all"!==b.filter.online||(console.debug("[network] {0} endpoint [{1}] is {2}".format(e.bma&&(e.bma.useBma?"BMA":"WS2P")||"null",e.server,e.online?"UP":"DOWN")),t.push(e),a=!0)})))}),[]);return(1===o.length?o[0]:i.all(o)).then((function(){return a}))},O=function(t,i){if(!t)return[];var n=new e(t);if(!i){var a=n.getEndpoints();if(!a)return[];var o=a.reduce((function(e,t){var i=l.node.parseEndPoint(t);return i?e.concat(i):e}),[]);if(o.length>1)return o.reduce((function(e,i){return e.concat(O(t,i))}),[]);i=o[0]}return n.bma=i,n.server=n.getServer(),n.dns=n.getDns(),n.buid=n.buid||n.block,n.blockNumber=n.buid&&parseInt(n.buid.split("-")[0]),n.uid=n.pubkey&&b.uidsByPubkeys[n.pubkey],n.id=n.keyID(),[n]},v=function(e){if(!h(e))return i.when();if(!b.filter.online||!b.filter.online&&"DOWN"===e.status||!e.getHost())return e.online=!1,i.when(e);if(e.bma.useWs2p&&b.ws2pHeads){var t=[e.pubkey,e.bma.ws2pid].join("-"),n=b.ws2pHeads[t];return delete b.ws2pHeads[t],n&&(e.buid=n.buid,e.currentNumber=n.buid&&parseInt(n.buid.split("-")[0]),e.version=n.version,e.powPrefix=n.powPrefix),e.online=!!e.buid,e.uid&&b.expertMode&&b.difficulties&&(e.difficulty=b.difficulties[e.uid]),i.when(e)}return e.bma.useWs2p||!m||e.bma.useSsl?e.bma.useTor||e.bma.useWs2p?(e.online="UP"===e.status,e.buid=-1,delete e.version,e.uid&&b.expertMode&&b.difficulties&&(e.difficulty=b.difficulties[e.uid]),i.when(e)):(e.api=e.api||l.lightInstance(e.getHost(),e.getPort(),e.isSsl(),b.timeout),e.api.blockchain.current(!1).then((function(t){if(!t)throw new Error("Wrong response for /blockchain/current (empty)");return e.currentNumber=t.number,e.online=!0,e.buid=T(t),e.medianTime=t.medianTime,-1===b.knownBlocks.indexOf(e.buid)&&b.knownBlocks.push(e.buid),e})).catch((function(t){if(t&&t.ucode==l.errorCodes.NO_CURRENT_BLOCK)return e.online=!0,e.buid=T({number:0,hash:l.constants.ROOT_BLOCK_HASH}),e.difficulty=0,e;if(!e.secondTry){var i=e.bma||e.getBMA();if(i.dns&&-1===e.server.indexOf(i.dns))return e.secondTry=!0,e.api=l.lightInstance(i.dns,i.port,i.useSsl),v(e)}return e.buid=null,e.blockNumber=null,e.currentNumber=null,e.online=!1,e.uid=b.uidsByPubkeys[e.pubkey],e})).then((function(e){if(!(b.filter.online&&e&&e.online&&b.expertMode))return e;var t=[];return e.uid&&t.push(e.api.blockchain.stats.hardship({pubkey:e.pubkey}).then((function(t){e.difficulty=t?t.level:null})).catch((function(){e.difficulty=null}))),t.push(e.api.node.summary().then((function(t){e.software=t&&t.duniter&&t.duniter.software||void 0,e.version=t&&t.duniter&&t.duniter.version||"?"})).catch((function(){e.software=void 0,e.version="?"}))),i.all(t).then((function(){return e}))}))):(e.online="UP"===e.status,e.buid=-1,delete e.version,e.uid&&b.expertMode&&b.difficulties&&(e.difficulty=b.difficulties[e.uid]),i.when(e))},R=function(e,t){if((e=e||b.newPeers).length){var i=_.map(b.peers,(function(e){return e.id})),n=!1,a=0;_.forEach(e.splice(0),(function(e){i[e.id]||(b.peers.push(e),i[e.id]=e,n=!0,a++)})),n&&(console.debug("[network] Flushing {0} new peers...".format(a)),C(t))}},A=function(e,t,i){if(!e)return 0;var n=0;t>(e=e.toLowerCase()).length&&(t=e.length),n+=e.charCodeAt(0);for(var a=1;a<t;a++)n+=Math.pow(.001,a)*e.charCodeAt(a);return i?1e3-n:n},C=function(e){var t={};b.memberPeersCount=0,_.forEach(b.peers,(function(e){if(e.buid){var i=t[e.buid];i&&i.medianTime?!i.medianTime&&e.medianTime&&(i.medianTime=e.medianTime):(i={buid:e.buid,medianTime:e.medianTime,count:0},t[e.buid]=i),-1!==i.buid&&i.count++}b.memberPeersCount+=e.uid?1:0}));var i,n=b.mainBlock;b.filter.online&&(_.forEach(_.values(t),(function(e){e.pct=100*e.count/b.peers.length})),n=_.max(t,(function(e){return e.count})),_.forEach(b.peers,(function(e){e.hasMainConsensusBlock=e.buid===n.buid,e.hasConsensusBlock=e.buid&&!e.hasMainConsensusBlock&&t[e.buid].count>1,e.hasConsensusBlock&&(e.consensusBlockDelta=t[e.buid].medianTime-n.medianTime)}))),b.peers=_.uniq(b.peers,!1,(function(e){return e.id})),b.peers=_.sortBy(b.peers,(function(e){var i=0;return b.sort.type&&(i+="uid"===b.sort.type?A(e.uid||e.pubkey,3,b.sort.asc):0,i+="api"===b.sort.type&&(e.isWs2p()&&(b.sort.asc?1:-1)||0)+(e.hasEndpoint("ES_USER_API")&&(b.sort.asc?.01:-.01)||0)+(e.isSsl()&&(b.sort.asc?.75:-.75)||0)||0,i+="difficulty"===b.sort.type&&e.difficulty?b.sort.asc?1e4-e.difficulty:e.difficulty:0,i+="current_block"===b.sort.type&&e.currentNumber?b.sort.asc?1e9-e.currentNumber:e.currentNumber:0),i*=1e10,i+=1e9*(e.online?1:0),i+=1e8*(e.hasMainConsensusBlock?1:0),i+=1e6*(e.hasConsensusBlock?t[e.buid].pct:0),b.expertMode?(i+=100*(e.difficulty?1e4-e.difficulty:0),i+=1*(e.uid?A(e.uid,2,!0):0),i+=.001*(e.uid?0:A(e.pubkey,3,!0))):(i+=100*(e.uid?A(e.uid,2,!0):0),i+=.001*(e.uid?0:A(e.pubkey,3,!0))),i+=1e-5*(e.isBma()?e.isSsl()?1:.5:0),e.score=i,-i})),b.groupBy&&b.peers.forEach((function(e){e.compacted=i&&e[b.groupBy]&&e[b.groupBy]===i[b.groupBy],i=e})),e&&n&&n.buid&&(!b.mainBlock||b.mainBlock.buid!==n.buid)&&(b.mainBlock=n,p.data.raise.mainBlockChanged(n)),p.data.raise.changed(b)},S=function(e,t){return t=t||{},l.ready().then((function(){if(L(),b.bma=e||l,b.filter=t.filter?angular.merge(b.filter,t.filter):b.filter,b.sort=t.sort?angular.merge(b.sort,t.sort):b.sort,b.expertMode=angular.isDefined(t.expertMode)?t.expertMode:b.expertMode,b.timeout=angular.isDefined(t.timeout)?t.timeout:s.timeout,b.minOnlineBlockNumber=b.mainBlock&&b.mainBlock.buid&&parseInt(b.mainBlock.buid.split("-")[0])-1e3||void 0,void 0===b.minOnlineBlockNumber)return d.blockchain.current(!0).then((function(e){b.minOnlineBlockNumber=e.number-1e3}))})).then((function(){console.info("[network] Starting network from [{0}]".format(e.server));var t=Date.now();return b.listeners=[b.bma.websocket.block().onListener((function(e){if(e&&!b.loading){var t=[e.number,e.hash].join("-");-1===b.knownBlocks.indexOf(t)&&(console.debug("[network] Receiving block: "+t.substring(0,20)),b.knownBlocks.push(t),1===b.knownBlocks.length||(b.loading=!0,o((function(){console.debug("[network] new block received by WS: will refresh peers"),N()}),2e3,!1)))}})),b.bma.websocket.peer().onListener((function(e){if(e&&!b.loading){var t=[];I(e,t).then((function(e){e&&(t.length>0?R(t,!0):(console.debug("[network] [ws] Peers updated received"),C(!0)))}))}}))],N().then((function(e){return console.debug("[network] Started in "+(Date.now()-t)+"ms"),e}))}))},L=function(){b.bma&&(console.info("[network-service] Stopping..."),_.forEach(b.listeners,(function(e){e()})),b.listeners=[],b.bma=null,b.listeners=[],b.peers.splice(0),b.filter={member:!0,mirror:!0,endpoint:null,online:!0,bma:!1,ssl:void 0,tor:void 0},b.sort={type:null,asc:!0},b.groupBy="pubkey",b.expertMode=!1,b.memberPeersCount=0,b.knownBlocks=[],b.mainBlock=null,b.minOnlineBlockNumber=0,b.uidsByPubkeys={},b.loading=!0,b.searchingPeersOnNetwork=!1,b.difficulties=null,b.ws2pHeads=null,b.timeout=s.timeout)},D=function(e){return b.bma?S().then((function(){return i(e)})):i(e)};return p.registerEvent("data","changed"),p.registerEvent("data","mainBlockChanged"),p.registerEvent("data","rollback"),{data:b,start:S,close:L,hasPeers:function(){return b.peers&&b.peers.length>0},getPeers:function(){return b.peers},sort:function(e){e=e||{},b.filter=e.filter?angular.merge(b.filter,e.filter):b.filter,b.sort=e.sort?angular.merge(b.sort,e.sort):b.sort,C(!1)},getTrustedPeers:function(){return D((function(e,t){e(b.peers.reduce((function(e,t){return t.hasMainConsensusBlock&&t.uid?e.concat(t):e}),[]))}))},getKnownBlocks:function(){return b.knownBlocks},getMainBlockUid:function(){return D((function(e,t){e(b.mainBuid)}))},loadPeers:N,isBusy:function(){return b.loading},api:p}}]),angular.module("cesium.desktop.services",["cesium.device.services","cesium.settings.services"]).factory("csDesktop",["$rootScope","Device",function(e,t){t.isDesktop()&&console.info("Starting desktop mode...")}]),angular.module("cesium.crypto.services",["cesium.utils.services"]).factory("CryptoUtils",["$q","$timeout","ionicReady",function(e,t,i){function n(){this.loaded=!1;var e=this;this.copy=function(t){_.forEach(_.keys(t),(function(i){e[i]=t[i]}))},this.isLoaded=function(){return this.loaded},this.util=this.util||{},this.util.array_to_string=function(e,t){var i=new Blob([new Uint8Array(e)]),n=new FileReader;n.onload=function(e){t(e.target.result)},n.readAsText(i)}}n.prototype.constants={crypto_sign_BYTES:64,crypto_secretbox_NONCEBYTES:24,crypto_box_MACBYTES:16,SEED_LENGTH:32,SCRYPT_PARAMS:{SIMPLE:{N:2048,r:8,p:1,memory:-1},DEFAULT:{N:4096,r:16,p:1,memory:-1}}},n.prototype.async_load_base58=function(e){var i=this;if(null!==Base58)return e(Base58);t((function(){i.async_load_base58(e)}),100)},n.prototype.async_load_scrypt=function(e,i){var n=this;null!==scrypt_module_factory?scrypt_module_factory(e,i):t((function(){n.async_load_scrypt(e,i)}),100)},n.prototype.async_load_nacl_js=function(e,i){var n=this;null!==nacl_factory?nacl_factory.instantiate(e,i):t((function(){n.async_load_nacl_js(e,i)}),100)},n.prototype.async_load_base64=function(e){var i=this;null!==Base64?e(Base64):t((function(){i.async_load_base64(e)}),100)},n.prototype.async_load_sha256=function(e){var i=this;if(null!==sha256)return e(sha256);t((function(){i.async_load_sha256(e)}),100)},n.prototype.seed_from_signSk=function(e){for(var t=new Uint8Array(this.constants.SEED_LENGTH),i=0;i<t.length;i++)t[i]=e[i];return t};var a=window.crypto||window.msCrypto||window.Crypto;function o(){this.id="FullJS",this.scrypt=null,this.nacl=null,this.base58=null,this.base64=null;var t=this;function i(e,t){if(0!==t)throw{message:"nacl_raw."+e+" signalled an error"}}function n(e,i,n,o,r){return function(e,t,i,n){if(i.length!==n)throw{message:"nacl."+e+" expected "+n+"-byte "+t+" but got length "+i.length}}(e,i,n,o),function(e,i){var n=i||0,o=a(e.length+n);t.nacl.nacl_raw.HEAPU8.set(e,o+n);for(var r=o;r<o+n;r++)t.nacl.nacl_raw.HEAPU8[r]=0;return o}(n,r)}function a(e){var i=t.nacl.nacl_raw._malloc(e);if(0===i)throw{message:"malloc() failed",nbytes:e};return i}function o(e){t.nacl.nacl_raw._free(e)}function r(e){this.length=e,this.address=a(e)}this.util=this.util||{},this.util.decode_utf8=function(e){var t,i=unescape(encodeURIComponent(e)),n=new Uint8Array(i.length);for(t=0;t<i.length;t++)n[t]=i.charCodeAt(t);return n},this.util.encode_utf8=function(e){return t.nacl.encode_utf8(e)},this.util.encode_base58=function(e){return t.base58.encode(e)},this.util.decode_base58=function(e){var i,n=t.base58.decode(e),a=new Uint8Array(n.length);for(i=0;i<n.length;i++)a[i]=n[i];return a},this.util.decode_base64=function(e){return t.base64.decode(e)},this.util.encode_base64=function(e){return t.base64.encode(e)},this.util.hash_sha256=function(i){return e((function(e){var n=t.util.decode_utf8(i);e(t.nacl.to_hex(t.nacl.crypto_hash_sha256(n)).toUpperCase())}))},this.util.random_nonce=function(){if(t.crypto&&t.crypto.getRandomValues){var i=new Uint8Array(t.constants.crypto_secretbox_NONCEBYTES);return t.crypto.getRandomValues(i),e.when(i)}return e.when(t.nacl.crypto_box_random_nonce())},this.util.crypto_hash_sha256=function(e){return t.nacl.crypto_hash_sha256(e)},this.util.crypto_scrypt=function(i,n,a,o,r,s){return e((function(e,l){try{e(t.scrypt.crypto_scrypt(i,n,a,o,r,s))}catch(e){l(e)}}))},this.box_keypair_from_sign=function(a){return a.boxSk&&a.boxPk?e.when(a):e((function(e,s){try{e((l=n("crypto_box_keypair_from_sign_sk","sk",a.signSk,t.nacl.nacl_raw._crypto_sign_secretkeybytes()),c=new r(t.nacl.nacl_raw._crypto_box_secretkeybytes()),i("_crypto_sign_ed25519_sk_to_curve25519",t.nacl.nacl_raw._crypto_sign_ed25519_sk_to_curve25519(c.address,l)),o(l),t.nacl.crypto_box_keypair_from_raw_sk(c.extractBytes())))}catch(e){s(e)}var l,c}))},this.box_pk_from_sign=function(a){return e((function(e,s){try{e((l=n("crypto_box_pk_from_sign_pk","pk",a,t.nacl.nacl_raw._crypto_sign_publickeybytes()),c=new r(t.nacl.nacl_raw._crypto_box_publickeybytes()),i("_crypto_sign_ed25519_pk_to_curve25519",t.nacl.nacl_raw._crypto_sign_ed25519_pk_to_curve25519(c.address,l)),o(l),c.extractBytes()))}catch(e){s(e)}var l,c}))},this.box_sk_from_sign=function(a){return e((function(e,s){try{e((l=n("crypto_box_sk_from_sign_sk","sk",a,t.nacl.nacl_raw._crypto_sign_secretkeybytes()),c=new r(t.nacl.nacl_raw._crypto_box_secretkeybytes()),i("_crypto_sign_ed25519_sk_to_curve25519",t.nacl.nacl_raw._crypto_sign_ed25519_sk_to_curve25519(c.address,l)),o(l),c.extractBytes()))}catch(e){s(e)}var l,c}))},this.box=function(i,n,a,o){return e((function(e,r){if(i){var s=t.nacl.encode_utf8(i);"string"==typeof a&&(a=t.util.decode_base58(a));try{var l=t.nacl.crypto_box(s,n,a,o);e(t.util.encode_base64(l))}catch(e){r(e)}}else e(i)}))},this.box_open=function(i,n,a,o){return e((function(e,r){if(i){var s=t.util.decode_base64(i);"string"==typeof a&&(a=t.util.decode_base58(a));try{var l=t.nacl.crypto_box_open(s,n,a,o);e(t.nacl.decode_utf8(l))}catch(e){r(e)}}else e(i)}))},this.scryptKeypair=function(e,i,n){return t.util.crypto_scrypt(t.util.encode_utf8(i),t.util.encode_utf8(e),n&&n.N||t.constants.SCRYPT_PARAMS.DEFAULT.N,n&&n.r||t.constants.SCRYPT_PARAMS.DEFAULT.r,n&&n.p||t.constants.SCRYPT_PARAMS.DEFAULT.p,t.constants.SEED_LENGTH).then((function(e){var i=t.nacl.crypto_sign_seed_keypair(e),n=t.nacl.crypto_box_seed_keypair(e);return{signPk:i.signPk,signSk:i.signSk,boxPk:n.boxPk,boxSk:n.boxSk}}))},this.seedKeypair=function(i){return e((function(e,n){var a=t.nacl.crypto_sign_seed_keypair(i),o=t.nacl.crypto_box_seed_keypair(i);e({signPk:a.signPk,signSk:a.signSk,boxPk:o.boxPk,boxSk:o.boxSk})}))},this.scryptSignPk=function(i,n,a){return e((function(e,o){try{var r=t.scrypt.crypto_scrypt(t.util.encode_utf8(n),t.util.encode_utf8(i),a&&a.N||t.constants.SCRYPT_PARAMS.DEFAULT.N,a&&a.r||t.constants.SCRYPT_PARAMS.DEFAULT.r,a&&a.p||t.constants.SCRYPT_PARAMS.DEFAULT.p,t.constants.SEED_LENGTH);e(t.nacl.crypto_sign_seed_keypair(r).signPk)}catch(e){o(e)}}))},this.verify=function(i,n,a){return e((function(e,o){var r,s=t.util.decode_utf8(i),l=t.util.decode_base64(n),c=t.util.decode_base58(a),d=new Uint8Array(t.constants.crypto_sign_BYTES+s.length);for(r=0;r<t.constants.crypto_sign_BYTES;r++)d[r]=l[r];for(r=0;r<s.length;r++)d[r+t.constants.crypto_sign_BYTES]=s[r];e(null!==t.nacl.crypto_sign_open(d,c))}))},this.sign=function(i,n){return e((function(e,a){for(var o=t.util.decode_utf8(i),r=n.signSk,s=t.nacl.crypto_sign(o,r),l=new Uint8Array(t.constants.crypto_sign_BYTES),c=0;c<l.length;c++)l[c]=s[c];e(t.base64.encode(l))}))},this.load=function(){var i=e.defer(),n={},a={};"a"!=ionic.Platform.grade.toLowerCase()&&(console.info("Reduce NaCl memory to 16mb, because plateform grade is not [a] but [{0}]".format(ionic.Platform.grade)),n.requested_total_memory=16777216);var o=0,r=function(){4==++o&&(t.loaded=!0,i.resolve())};return this.async_load_nacl_js((function(e){t.nacl=e,r()}),n),this.async_load_scrypt((function(e){t.scrypt=e,t.scrypt.requested_total_memory=a.requested_total_memory,r()}),a),this.async_load_base58((function(e){t.base58=e,r()})),t.async_load_base64((function(e){t.base64=e,r()})),i.promise},this.util.hash=t.util.hash_sha256,this.box={keypair:{fromSignKeypair:t.box_keypair_from_sign,skFromSignSk:t.box_sk_from_sign,pkFromSignPk:t.box_pk_from_sign},pack:t.box,open:t.box_open},r.prototype.extractBytes=function(e){var i=function(e,i){var n=new Uint8Array(i);return n.set(t.nacl.nacl_raw.HEAPU8.subarray(e,e+i)),n}(this.address+(e||0),this.length-(e||0));return o(this.address),this.address=null,i}}a&&a.getRandomValues&&(n.prototype.crypto=a,n.prototype.util={},n.prototype.util.random_nonce=function(){var t=new Uint8Array(crypto_secretbox_NONCEBYTES);return this.crypto.getRandomValues(t),e.when(t)}),o.prototype=new n,new n;var r=new n;return i().then((function(){console.debug("[crypto] Starting...");var e,t=Date.now();console.debug("[crypto] Loading 'FullJS' implementation..."),(e=new o).load().catch((function(e){throw console.error(e),e})).then((function(){r.copy(e),console.debug("[crypto] Loaded '{0}' implementation in {1}ms".format(r.id,Date.now()-t))}))})),r}]).factory("csCrypto",["$q","$rootScope","$timeout","CryptoUtils","UIUtils","Modals",function(e,t,i,n,a,o){function r(e){return new RegExp(e)}function s(e,t){for(var i=Math.max(e.length,t.length),n=new Uint8Array(i),a=0;a<i;++a)n[a]=e[a]^t[a];return n}function l(e,t){var i=new Uint8Array(e.byteLength+t.byteLength);return i.set(new Uint8Array(e),0),i.set(new Uint8Array(t),e.byteLength),i}var c={WIF:{DATA_LENGTH:35},EWIF:{SALT_LENGTH:4,DERIVED_HALF_LENGTH:16,DATA_LENGTH:39,SCRYPT_PARAMS:{N:16384,r:8,p:8}},REGEXP:{PUBKEY:"[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{43,44}",SECKEY:"[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{86,88}",FILE:{TYPE_LINE:"^Type: ([a-zA-Z0-9]+)\n",VERSION:"Version: ([0-9]+)\n",PUB:"[Pp]ub: ([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{43,44})\n",SEC:"[Ss]ec: ([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{86,88})(\n|$)",DATA:"[Dd]ata: ([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)(\n|$)"}}},d={FILE:{TYPE_LINE:r(c.REGEXP.FILE.TYPE_LINE),VERSION:r(c.REGEXP.FILE.VERSION),PUB:r(c.REGEXP.FILE.PUB),SEC:r(c.REGEXP.FILE.SEC),DATA:r(c.REGEXP.FILE.DATA)}},u={BAD_PASSWORD:3001,BAD_CHECKSUM:3002};function E(t,i){if(!t)return e.reject("Argument [content] is missing");var a;(i=i||{}).withSecret=!!angular.isDefined(i.withSecret)&&i.withSecret,i.defaultType=i.defaultType||"PubSec";var o=d.FILE.TYPE_LINE.exec(t),r=o&&o[1];if(!r&&i.defaultType)return E("Type: {0}\n{1}".format(i.defaultType,t),i);if("PubSec"==r){if(!(a=d.FILE.PUB.exec(t)))return e.reject("Missing [pub] field in file, or invalid public key value");var s={signPk:n.base58.decode(a[1])};return i.withSecret?(a=d.FILE.SEC.exec(t))?(s.signSk=n.base58.decode(a[1]),e.resolve(s)):e.reject("Missing [sec] field in file, or invalid secret key value"):e.resolve(s)}return"WIF"==r||"EWIF"==r?(a=d.FILE.DATA.exec(t))?m(a[1],{type:r,password:i.password}).then((function(e){return e&&!i.withSecret?{signPk:e.signPk}:e})):e.reject("Missing [Data] field in file. This is required for WIF or EWIF format"):i.defaultType?e.reject("Bad file format: missing Type field"):e.reject("Bad file format, unknown type ["+r+"]")}function m(t,i){i=i||{};var a=t&&n.base58.decode(t);return!a||a.length!=c.EWIF.DATA_LENGTH&&a.length!=c.WIF.DATA_LENGTH?e.reject("Invalid WIF or EWIF format (invalid bytes count)."):(i.type=i.type||1==a[0]&&"WIF"||2==a[0]&&"EWIF","WIF"==i.type?function(t){var i=n.util.decode_base58(t);if(1!=i[0])return e.reject({message:"Invalid WIF v1 format: expected [0x01] as first byte"});if(i.length!=c.WIF.DATA_LENGTH)return e.reject({message:"Invalid WIF v1 format: Data must be a "+c.WIF.DATA_LENGTH+" bytes array, encoded in base 58."});var a=i.slice(0,-2),o=i.slice(1,-2),r=i.slice(-2),s=n.util.crypto_hash_sha256(n.util.crypto_hash_sha256(a)).slice(0,2);return n.util.encode_base58(r)!=n.util.encode_base58(s)&&e.reject({message:"Invalid WIF format: bad checksum"}),n.seedKeypair(o)}(t):"EWIF"==i.type?"function"!=typeof i.password||(i.password=i.password(),i.password)?"object"==typeof i.password&&i.password.then?i.password.then((function(e){if(!e)throw"CANCELLED";return p(t,e)})):"string"==typeof i.password?p(t,i.password):e.reject({message:"Invalid EWIF options.password. Waiting a callback function, a promise or a string."}):e.reject({message:"Invalid callback result for 'options.password()': must return a promise or a string."}):e.reject({message:"Invalid WIF or EWIF format: unknown first byte identifier."}))}function p(t,i){var a=n.util.decode_base58(t);if(2!=a[0])return e.reject({message:"Invalid EWIF v1 format: Expected [0x02] as first byte"});if(a.length!=c.EWIF.DATA_LENGTH)return e.reject({message:"Invalid EWIF v1 format: Expected {0} bytes, encoded in base 58.".format(c.EWIF.DATA_LENGTH)});var o=a.slice(0,-2),r=a.slice(-2),d=a.slice(1,5),E=a.slice(5,21),m=a.slice(21,37);return n.util.crypto_scrypt(n.util.encode_utf8(i),d,c.EWIF.SCRYPT_PARAMS.N,c.EWIF.SCRYPT_PARAMS.r,c.EWIF.SCRYPT_PARAMS.p,64).then((function(e){var t=e.slice(0,32),i=e.slice(32,64),n=new aesjs.ModeOfOperation.ecb(i),a=n.decrypt(E),o=n.decrypt(m);return a=new Uint8Array(a),o=new Uint8Array(o),l(s(a,t.slice(0,16)),s(o,t.slice(16,32)))})).then(n.seedKeypair).then((function(e){var t=n.util.crypto_hash_sha256(n.util.crypto_hash_sha256(e.signPk)).slice(0,4);if(n.util.encode_base58(d)!==n.util.encode_base58(t))throw{ucode:u.BAD_PASSWORD,message:"ACCOUNT.SECURITY.KEYFILE.ERROR.BAD_PASSWORD"};var i=n.util.crypto_hash_sha256(n.util.crypto_hash_sha256(o)).slice(0,2);if(n.util.encode_base58(r)!=n.util.encode_base58(i))throw{ucode:u.BAD_CHECKSUM,message:"ACCOUNT.SECURITY.KEYFILE.ERROR.BAD_CHECKSUM"};return e}))}function b(t){if(!t)throw new Error("Missing keypair");return t.boxPk&&t.boxSk?e.when(t):e.all([n.box.keypair.skFromSignSk(t.signSk),n.box.keypair.pkFromSignPk(t.signPk)]).then((function(e){return{boxSk:e[0],boxPk:e[1]}}))}return{errorCodes:u,constants:c,util:angular.extend({pkChecksum:function(e){var t=n.util.decode_base58(e);return n.util.encode_base58(n.util.crypto_hash_sha256(n.util.crypto_hash_sha256(t))).substring(0,3)}},n.util),keyfile:{read:function(t,i){return t&&t.content?E(t.content,i):e((function(e,n){if(!t)return n("Argument [file] is missing");var a=new FileReader;a.onload=function(t){E(t.target.result,i).then(e).catch(n)},a.readAsText(t,"utf8")}))},parseData:function e(t,n){return(n=n||{}).withSecret=!angular.isDefined(n.withSecret)||n.withSecret,n.silent=!!angular.isDefined(n.withSecret)&&n.silent,n.password=function(){return a.loading.hide(100).then((function(){return o.showPassword({title:"ACCOUNT.SECURITY.KEYFILE.PASSWORD_POPUP.TITLE",subTitle:"ACCOUNT.SECURITY.KEYFILE.PASSWORD_POPUP.HELP",error:n.error,scope:n.scope})})).then((function(e){return i((function(){return e&&a.loading.show(),e}),150)}))},n.silent||a.loading.show(),m(t,n).then((function(e){return e})).catch((function(i){if(!i||"CANCELLED"!==i){if(i&&i.ucode==u.BAD_PASSWORD)return e(t,{withSecret:n.withSecret,error:"ACCOUNT.SECURITY.KEYFILE.ERROR.BAD_PASSWORD"});throw console.error("[crypto] Unable to parse as WIF or EWIF format: "+(i&&i.message||i)),i}}))},generateContent:function t(i,a){switch((a=a||{}).type=a.type||"PubSec",a.type){case"PubSec":return e.resolve("Type: PubSec\nVersion: 1\npub: "+n.base58.encode(i.signPk)+"\nsec: "+n.base58.encode(i.signSk)+"\n");case"WIF":return function(t){var i=n.seed_from_signSk(t.signSk);if(!i||i.byteLength!==n.constants.SEED_LENGTH)throw"Bad see format. Expected {0} bytes".format(n.constants.SEED_LENGTH);var a=new Uint8Array(1);a[0]=1;var o=l(a,i),r=l(o,n.util.crypto_hash_sha256(n.util.crypto_hash_sha256(o)).slice(0,2));return e.when(n.util.encode_base58(r))}(i).then((function(e){return"Type: WIF\nVersion: 1\nData: "+e+"\n"}));case"EWIF":return a.password?a.password&&"function"==typeof a.password&&(console.debug("[crypto] [EWIF] Executing 'options.password()' to resolve the password..."),a.password=a.password(),!a.password)?e.reject({message:"Invalid callback result for 'options.password()': must return a promise or a string."}):a.password&&"object"==typeof a.password&&a.password.then?a.password.then((function(e){if(!e)throw"CANCELLED";return t(i,angular.merge({},a,{password:e}))})):a.password&&"string"==typeof a.password?function(t,i){var a=n.seed_from_signSk(t.signSk);if(!a||a.byteLength!==n.constants.SEED_LENGTH)return e.reject({message:"Bad see format. Expected {0} bytes".format(n.constants.SEED_LENGTH)});var o=n.util.crypto_hash_sha256(n.util.crypto_hash_sha256(t.signPk)).slice(0,4);return n.util.crypto_scrypt(n.util.encode_utf8(i),o,c.EWIF.SCRYPT_PARAMS.N,c.EWIF.SCRYPT_PARAMS.r,c.EWIF.SCRYPT_PARAMS.p,64).then((function(e){var t=e.slice(0,32),i=e.slice(32,64),r=s(a.slice(0,16),t.slice(0,16)),c=s(a.slice(16,32),t.slice(16,32)),d=new aesjs.ModeOfOperation.ecb(i),u=d.encrypt(r),E=d.encrypt(c);u=new Uint8Array(u),E=new Uint8Array(E);var m=new Uint8Array(1);return m[0]=2,m=l(m,o),m=l(m,u),m=l(m,E),m=l(m,n.util.crypto_hash_sha256(n.util.crypto_hash_sha256(m)).slice(0,2)),n.util.encode_base58(m)}))}(i,a.password).then((function(e){return"Type: EWIF\nVersion: 1\nData: "+e+"\n"})):e.reject({message:"Invalid EWIF options.password. Waiting a callback function, a promise or a string."}):e.reject({message:"Missing EWIF options.password."});default:return e.reject({message:"Unknown keyfile format: "+a.type})}}},box:{getKeypair:b,pack:function(t,i,a,o,r){if(!t[a=a||"recipient"])return e.reject({message:"ES_WALLET.ERROR.RECIPIENT_IS_MANDATORY"});"string"==typeof(o=o||"content")&&(o=[o]),t=angular.copy(t);var s=n.util.decode_base58(t[a]);return e.all([b(i),n.box.keypair.pkFromSignPk(s),r?e.when(r):n.util.random_nonce()]).then((function(i){var a=i[0].boxSk,r=i[1],s=i[2];return e.all(o.reduce((function(e,i){return t[i]?e.concat(n.box.pack(t[i],s,r,a)):e}),[])).then((function(e){var i=0;return _.forEach(o,(function(n){t[n]?t[n]=e[i++]:t[n]=null})),t.nonce=n.util.encode_base58(s),t}))}))},open:function(t,i,a,o){a=a||"issuer","string"==typeof(o=o||"content")&&(o=[o]);var r=Date.now(),s={},l=[b(i)];return e.all(t.reduce((function(e,t){var i=t[a];if(!i)throw"Record has no "+a;return s[i]?res:e.concat(n.box.keypair.pkFromSignPk(n.util.decode_base58(i)).then((function(e){s[i]=e})))}),l)).then((function(i){var r=i[0];return e.all(t.reduce((function(e,t){var i=s[t[a]],l=n.util.decode_base58(t.nonce);return t.valid=!0,e.concat(o.reduce((function(e,a){return t[a]?e.concat(n.box.open(t[a],l,i,r.boxSk).then((function(e){t[a]=e})).catch((function(e){console.error(e),console.warn("[ES] [crypto] a record may have invalid cypher "+a),t.valid=!1}))):e}),[]))}),[]))})).then((function(){return console.debug("[ES] [crypto] All record decrypted in "+(Date.now()-r)+"ms"),t}))}}}}]),angular.module("cesium.utils.services",["angular-fullscreen-toggle"]).factory("ionicReady",["$ionicPlatform",function(e){var t;return function(){return t||(t=e.ready()),t}}]).factory("UIUtils",["$ionicLoading","$ionicPopup","$ionicConfig","$ionicHistory","$translate","$q","ionicMaterialInk","ionicMaterialMotion","$window","$timeout","Fullscreen","$ionicPopover","$state","$rootScope","screenmatch",function(e,t,i,n,a,o,r,s,l,c,d,u,E,m,p){var b,T=null,f={smallscreen:p.bind("xs, sm",m)},g={};function N(e,i){return e?o((function(n){a([e,"ERROR.POPUP_TITLE","ERROR.UNKNOWN_ERROR","COMMON.BTN_OK"].concat(i?[i]:[])).then((function(a){var o=e.message||a[e];return t.show({template:"<p>"+(o||a["ERROR.UNKNOWN_ERROR"])+"</p>",title:a["ERROR.POPUP_TITLE"],subTitle:i&&a[i]||void 0,buttons:[{text:"<b>"+a["COMMON.BTN_OK"]+"</b>",type:"button-assertive",onTap:function(e){n(e)}}]})}))})):o.when()}function h(e,i,n){return e?((n=n||{}).cssClass=n.cssClass||"info",n.okText=n.okText||"COMMON.BTN_OK",o((function(o){a([e,"INFO.POPUP_TITLE",n.okText].concat(i?[i]:[])).then((function(a){t.show({template:"<p>"+a[e]+"</p>",title:a["INFO.POPUP_TITLE"],subTitle:i&&a[i]||void 0,cssClass:n.cssClass,buttons:[{text:a[n.okText],type:"button-positive",onTap:function(e){o(e)}}]})}))}))):o.reject("Missing 'message' argument")}function I(t){return t?c((function(){return e.hide()}),t):e.hide()}function O(t){return T?((t=t||{}).template=t.template||T,e.show(t)):a("COMMON.LOADING").then((function(e){return T=e,O(t)}))}function v(){return f.smallscreen.active}function R(e,t,i){return function(t){var n,a=t.target.width,o=t.target.height,r=i?200:640,s=i?200:480,l=document.createElement("canvas");if(i){a>o?(a*=s/o,o=s):(o*=r/a,a=r),l.width=r,l.height=s,n=l.getContext("2d");var c=Math.trunc((r-a)/2+.5),d=Math.trunc((s-o)/2+.5);n.drawImage(t.target,c,d,r+-2*c,s+-2*d)}else a>o?a>r&&(o*=r/a,a=r):o>s&&(a*=s/o,o=s),l.width=a,l.height=o,(n=l.getContext("2d")).drawImage(t.target,0,0,l.width,l.height);var u=l.toDataURL();l.remove(),e(u)}}function A(e,t){var i=o.defer();(t=t||{}).templateUrl=t.templateUrl?t.templateUrl:"templates/common/popover_copy.html",t.scope=t.scope||m,t.scope.popovers=t.scope.popovers||{},t.autoselect=t.autoselect||!1,t.autoremove=!angular.isDefined(t.autoremove)||t.autoremove,t.backdropClickToClose=!angular.isDefined(t.backdropClickToClose)||t.backdropClickToClose,t.focusFirstInput=!!angular.isDefined(t.focusFirstInput)&&t.focusFirstInput;var n=function(n){(n=n||t.scope.popovers[t.templateUrl]).isResolved=!1,n.deferred=i,n.options=t,t.bindings&&angular.merge(n.scope,t.bindings),c((function(){n.show(e).then((function(){var e;t.autoselect?(e=document.querySelectorAll(t.autoselect)[0])&&(l.getSelection&&!l.getSelection().toString()?(e.setSelectionRange(0,e.value.length),e.focus()):e.focus()):t.autofocus&&(e=document.querySelectorAll(t.autofocus)[0])&&e.focus(),n.scope.$parent.$emit("popover.shown"),t.afterShow&&t.afterShow(n)}))}))},a=function(e){(e=e||t.scope.popovers[t.templateUrl])&&(delete t.scope.popovers[t.templateUrl],e.remove().then((function(){angular.element(l.document.querySelectorAll("body")[0]).removeClass("popover-open")})))},r=t.scope.popovers[t.templateUrl];return r?n(r):u.fromTemplateUrl(t.templateUrl,{scope:t.scope,backdropClickToClose:t.backdropClickToClose}).then((function(e){e.isResolved=!1,e.scope.closePopover=function(t){var i=e.options&&e.options.autoremove;e.options&&delete e.options.autoremove,e.hide().then((function(){if(i)return a(e)})).then((function(){e.deferred&&e.deferred.resolve(t),delete e.deferred,delete e.options}))},e.scope.$on("popover.hidden",(function(){e.options&&e.options.afterHidden&&e.options.afterHidden(),e.options&&e.options.autoremove&&a(e)})),t.scope.$on("$remove",(function(){e.deferred&&e.deferred.resolve(),a()})),t.scope.popovers[t.templateUrl]=e,n(e)})),i.promise}function C(e,t){var i=v()?100:10,n=".list.{0} .item, .list .{0} .item".format(t,t);return{ionListClass:t,show:function(t){return(t=t||{}).selector=t.selector||n,t.ink=!angular.isDefined(t.ink)||t.ink,t.startVelocity=t.startVelocity||(v()?1100:3e3),c((function(){t.ink&&b.ink(),e(t)}),t.timeout||i)}}}function S(e,t,i,n,a){a=a||"default",qrcode.stringToBytes=qrcode.stringToBytesFuncs[a];var o=qrcode(t||4,i||"M");return o.addData(e,n),o.make(),o}function L(e,t){if("string"==typeof e&&(e={selector:e}),void 0===e.selector||""===e.selector)return console.error("invalid toggleOn selector"),!1;c((function(){var t=document.querySelectorAll(e.selector);t&&_.forEach(t,(function(e){e.classList.toggle("on",!0)}))}),t||100)}function D(e,t){if("string"==typeof e&&(e={selector:e}),void 0===e.selector||""===e.selector)return console.error("invalid toggleOff selector"),!1;c((function(){var t=document.querySelectorAll(e.selector);t&&_.forEach(t,(function(e){e.classList.toggle("on",!1)}))}),t||900)}return g.motion={enable:!0,default:C(s.ripple,"animate-ripple"),blinds:C(s.blinds,"animate-blinds"),fadeSlideIn:C(s.fadeSlideIn,"animate-fade-slide-in"),fadeSlideInRight:C(s.fadeSlideInRight,"animate-fade-slide-in-right"),panInLeft:C(s.panInLeft,"animate-pan-in-left"),pushDown:C(s.pushDown,"push-down"),ripple:C(s.ripple,"animate-ripple"),slideUp:C(s.slideUp,"slide-up"),fadeIn:C((function(e){L(e)}),"fade-in"),toggleOn:L,toggleOff:D},b={alert:{error:N,info:h,confirm:function(e,i,n){return i=i||"CONFIRM.POPUP_TITLE",(n=n||{}).cssClass=n.cssClass||"confirm",n.okText=n.okText||"COMMON.BTN_OK",n.cancelText=n.cancelText||"COMMON.BTN_CANCEL",a([e,i,n.cancelText,n.okText]).then((function(a){return t.confirm({template:a[e],cssClass:n.cssClass,title:a[i],cancelText:a[n.cancelText],cancelType:n.cancelType,okText:a[n.okText],okType:n.okType})}))},notImplemented:function(){return h("INFO.FEATURES_NOT_IMPLEMENTED")},demo:function(){return a(["MODE.DEMO.FEATURE_NOT_AVAILABLE","MODE.DEMO.INSTALL_HELP"]).then((function(e){return h(e["MODE.DEMO.FEATURE_NOT_AVAILABLE"]+"<br/><br/>"+e["MODE.DEMO.INSTALL_HELP"],void 0,{cssClass:"large"})}))}},loading:{show:O,hide:I,update:function(t){return e._getLoader().then((function(e){if(e&&e.isShown)return t&&t.template?a(t&&t.template).then((function(i){return t.template=i,e})):void 0})).then((function(e){if(e&&e.isShown)return O(t)}))}},toast:{show:function(t,i,n){return t?(i=i||"short",n=n||"bottom",a([t]).then((function(n){return"string"==typeof i&&(i="short"==i?2e3:5e3),e.show({template:n[t],noBackdrop:!0,duration:i})}))):o.reject("Missing 'message' argument")}},onError:function(e,t){return function(i){var n,a=e;if(i&&i.message?(a=i.message,n=e):e||(a=i),!t)return"CANCELLED"===a?I(10):(I(10),N(a,n));t(a)}},screen:{isSmall:v,fullscreen:d},ink:r.displayEffect,motion:g.motion,setEffects:function(e){if(b.motion.enable!==e){if(console.debug("[UI] [effects] "+(e?"Enable":"Disable")),b.motion.enable=e,e)i.views.transition("platform"),angular.merge(b.motion,g.motion);else{i.views.transition("none");var t={class:void 0,show:function(){}};angular.merge(b.motion,{enable:!1,default:t,fadeSlideIn:t,fadeSlideInRight:t,panInLeft:t,pushDown:t,ripple:t,slideUp:t,fadeIn:t,toggleOn:L,toggleOff:D}),m.motion=t}n.clearCache()}},qrcode:{svg:function(e,t,i,n,a){return S(e,t,i,n,a).createSvgTag()},img:function(e,t,i,n,a){return S(e,t,i,n,a).createImgTag()}},fab:{show:function(e,t){t||(t=900),c((function(){var t=document.getElementsByClassName("button-fab");_.forEach(t,(function(t){t.id==e&&t.classList.toggle("on",!0)}))}),t)},hide:function(e,t){t||(t=10),c((function(){var t=document.getElementsByClassName("button-fab");_.forEach(t,(function(t){t.id==e&&t.classList.toggle("on",!1)}))}),t)}},popover:{show:A,copy:function(e,t){var i=t&&t.indexOf("\n")>=0?t.split("\n").length:1;return A(e,{templateUrl:"templates/common/popover_copy.html",bindings:{value:t,rows:i},autoselect:".popover-copy "+(i<=1?"input":"textarea")})},share:function(e,t){return(t=t||{}).templateUrl=t.templateUrl?t.templateUrl:"templates/common/popover_share.html",t.autoselect=t.autoselect||".popover-share input",t.bindings=t.bindings||{},t.bindings.value=t.bindings.value||t.bindings.url||E.href(E.current,E.params,{absolute:!0}),t.bindings.postUrl=t.bindings.postUrl||t.bindings.value,t.bindings.postMessage=t.bindings.postMessage||"",t.bindings.titleKey=t.bindings.titleKey||"COMMON.POPOVER_SHARE.TITLE",A(e,t)},helptip:function e(t,i){var n="string"==typeof t&&t?l.document.getElementById(t):t;t||n||!i.selector||(n=l.document.querySelector(i.selector));var a=(i=i||{}).deferred||o.defer();if(n&&!i.timeout)i.preAction&&n[i.preAction](),i.templateUrl=i.templateUrl?i.templateUrl:"templates/common/popover_helptip.html",i.autofocus=i.autofocus||"#helptip-btn-ok",i.bindings=i.bindings||{},i.bindings.icon=i.bindings.icon||{},i.bindings.icon.position=i.bindings.icon.position||!1,i.bindings.icon.glyph=i.bindings.icon.glyph||(i.bindings.icon.position&&i.bindings.icon.position.startsWith("bottom-")?"ion-arrow-down-c":"ion-arrow-up-c"),i.bindings.icon.class=i.bindings.icon.class||"calm icon "+i.bindings.icon.glyph,i.bindings.tour=!!angular.isDefined(i.bindings.tour)&&i.bindings.tour,A(n,i).then((function(e){i.postAction&&n[i.postAction](),a.resolve(e)})).catch((function(e){i.postAction&&n[i.postAction](),a.reject(e)}));else if(i.timeout){var r=i.timeout;i.retryTimeout=i.retryTimeout||r,delete i.timeout,i.deferred=a,c((function(){e(t,i)}),r)}else angular.isDefined(i.retry)&&!i.retry?"continue"===i.onError?c((function(){a.resolve(!0)})):c((function(){a.reject("[helptip] element now found: "+t)})):(i.retry=angular.isUndefined(i.retry)?2:i.retry-1,i.deferred=a,c((function(){e(t,i)}),i.timeout||i.retryTimeout||100));return a.promise}},selection:{select:function e(t){if(t.value||"text"==t.type||"textarea"==t.type)l.getSelection&&!l.getSelection().toString()&&t.setSelectionRange(0,t.value.length);else if(t.childNodes&&t.childNodes.length>0)e(t.childNodes[0]);else{var i=l.document.createRange();i.selectNodeContents(t);var n=l.getSelection();n.removeAllRanges(),n.addRange(i)}},get:function(){var e="";return window.getSelection&&(e=l.getSelection().toString()),e}},image:{resizeFile:function(e,t){var i=document.createElement("img");return o((function(n,a){if(e){var o=new FileReader;o.onload=function(e){i.onload=R(n,0,t),i.src=e.target.result},o.readAsDataURL(e)}else a("no file to resize")})).then((function(e){return i.remove(),e}))},resizeSrc:function(e,t){var i=document.createElement("img");return o((function(n,a){i.onload=R(n,0,t),i.src=e})).then((function(e){return i.remove(),e}))},rotateSrc:function(e,t){var i=document.createElement("img");return o((function(t,n){i.onload=function(e,t){var i=Math.PI/180*90;return function(t){var n=t.target.width,a=t.target.height;n>a?n>640&&(a*=640/n,n=640):a>480&&(n*=480/a,a=480);var o=document.createElement("canvas");o.width=a,o.height=n;var r=o.getContext("2d");r.rotate(i),r.drawImage(t.target,0,-1*o.width);var s=o.toDataURL();o.remove(),e(s)}}(t),i.src=e})).then((function(e){return i.remove(),e}))}},raw:g}}]).factory("$focus",["$timeout","$window",function(e,t){return function(i){e((function(){var e=t.document.getElementById(i);e&&e.focus()}))}}]),angular.module("cesium.cache.services",["angular-cache"]).factory("csCache",["$rootScope","$http","$window","csSettings","CacheFactory",function(e,t,i,n,a){var o={VERY_LONG:54e6,LONG:36e5,MEDIUM:3e5,SHORT:n.defaultSettings.cacheTimeMs},r=l(),s=[];function l(e){return(e=e||n.data)&&e.useLocalStorage&&e.persistCache&&i.localStorage?"localStorage":"memory"}function c(e){return(e=e||{}).storageMode=l(),e.deleteOnExpire="localStorage"===e.storageMode||e.onExpire?"aggressive":"passive",e.cacheFlushInterval="passive"===e.deleteOnExpire?36e5:null,e}function d(e){var t=l(e);t!==r&&(r=t,console.debug("[cache] Updating caches with {storageMode: {0}}".format(r)),_.forEach(_.keys(s),(function(e){var t=a.get(e);t&&t.setOptions(c(),!0)})))}return function(){listeners=[n.api.data.on.changed(e,d,this)]}(),{get:function(e,t,i){var n,r=(e=e||"")+((t=t||o.SHORT)/1e3+"s");if(i&&"function"==typeof i){for(var l=1;a.get(r+l);)l++;r+=l}else n=a.get(r);if(s[r]||(s[r]=!0),n)return n;var d=c({maxAge:t,onExpire:i||null});return console.debug("[cache] Creating cache {{0}} with {storageMode: {1}}...".format(r,d.storageMode)),a.createCache(r,d)},clear:function(e){_.forEach(_.keys(s),(function(t){if(t.startsWith(e)){var i=a.get(t);i&&i.removeAll()}}))},clearAll:function(){console.debug("[cache] Cleaning all caches..."),_.forEach(_.keys(s),(function(e){var t=a.get(e);t&&t.removeAll()}))},constants:o}}]),angular.module("cesium.modal.services",["cesium.utils.services"]).controller("EmptyModalCtrl",(function(){})).controller("AboutModalCtrl",["$scope","csConfig","UIUtils","csHttp","filterTranslations",function(e,t,i,n,a){e.openLink=function(e,t,a){return(a=a||{}).onError=function(){return i.popover.copy(e,t)},n.uri.open(t,a)},e.buildDate=moment(t.build).format(a.DATE_PATTERN||"YYYY-MM-DD HH:mm")}]).factory("ModalUtils",["$ionicModal","$rootScope","$q","$injector","$controller","$timeout","Device",function(e,t,i,n,a,o,r){function s(e,t,n){e.deferred=t||i.defer(),e.resolved=!1,e.openModal=function(){return e.modal.show()},e.hideModal=function(){return e.modal.hide()},e.closeModal=function(t){return e.resolved=!0,e.modal.remove().then((function(){return document.body.classList.remove("modal-open"),e.deferred.resolve(t),t}))},e.setForm=function(t,i){i?e[i]=t:e.form=t},e.getParameters=function(){return n},e.$on("modal.hidden",(function(){e.resolved||(e.resolved=!0,o((function(){return e.deferred.resolve(),e.modal.remove().then((function(){document.body.classList.remove("modal-open")}))}),(e.modal.hideDelay||320)+20))}))}return{show:function(n,o,r,l){var c,d,u,E,m=i.defer();if((l=l||{}).animation=l.animation||"slide-in-up",c=!!angular.isDefined(l.focusFirstInput)&&l.focusFirstInput,l.focusFirstInput=c,o){l.scope=l.scope?l.scope.$new():t.$new(),s.call({},l.scope,m,r);var p={$scope:l.scope,parameters:r},b=(u={isControllerAs:!1,controllerName:"",propName:""},E=((d=o)||"").trim().split(/\s+/),u.isControllerAs=3===E.length&&"as"===(E[1]||"").toLowerCase(),u.isControllerAs?(u.controllerName=E[0],u.propName=E[2]):u.controllerName=d,u),T=a(o,p);b.isControllerAs&&(T.openModal=l.scope.openModal,T.closeModal=l.scope.closeModal)}return e.fromTemplateUrl(n,l).then((function(e){if(o)e.scope.$parent.modal=e;else{var t=e.scope;s.call({},t,m,r),t.modal=e}return e.show()}),(function(e){m.reject(e)})),m.promise}}}]).factory("Modals",["$rootScope","$translate","$ionicPopup","$timeout","ModalUtils","UIUtils",function(e,t,i,n,a,o){function r(e){return a.show("templates/join/modal_join_member.html","JoinModalCtrl",e)}function s(e){return a.show("templates/join/modal_join_wallet.html","JoinModalCtrl",e)}return{showTransfer:function(e){var t=o.screen.isSmall();return a.show("templates/wallet/modal_transfer.html","TransferModalCtrl",e,{focusFirstInput:!t})},showLogin:function(e){return a.show("templates/login/modal_login.html","LoginModalCtrl",e,{focusFirstInput:!0,backdropClickToClose:!1})},showWotLookup:function(e){return a.show("templates/wot/modal_lookup.html","WotLookupModalCtrl",e||{},{focusFirstInput:!0})},showNetworkLookup:function(e){return a.show("templates/network/modal_network.html","NetworkLookupModalCtrl",e,{focusFirstInput:!0})},showAbout:function(e){return a.show("templates/modal_about.html","AboutModalCtrl",e)},showJoin:function(e){return a.show("templates/join/modal_choose_account_type.html","JoinChooseAccountTypeModalCtrl",e).then((function(e){if(e)return"member"==e.accountType?r(e):s(e)}))},showJoinMember:r,showJoinWallet:s,showHelp:function(e){return a.show("templates/help/modal_help.html","HelpModalCtrl",e)},showAccountSecurity:function(e){return a.show("templates/wallet/modal_security.html","WalletSecurityModalCtrl",e)},showLicense:function(e){return a.show("templates/currency/modal_license.html","CurrencyLicenseModalCtrl",e)},showSelectPubkeyIdentity:function(e){return a.show("templates/wot/modal_select_pubkey_identity.html","WotSelectPubkeyIdentityModalCtrl",e)},showSelectWallet:function(e){return a.show("templates/wallet/list/modal_wallets.html","WalletSelectModalCtrl",e)},showPassword:function(n){(n=n||{}).title=n.title||"COMMON.SET_PASSWORD_TITLE",n.subTitle=n.subTitle||"COMMON.SET_PASSWORD_SUBTITLE";var a=n.scope?n.scope.$new():e.$new();return a.formData={password:void 0},a.setForm=function(e){a.form=e},a.submit=function(e){a.form.$submitted=!0,e&&e.preventDefault&&e.preventDefault(),a.form.$valid&&a.formData.password&&n.popup.close(a.formData.password)},a.error=n.error||void 0,t([n.title,n.subTitle,"COMMON.BTN_OK","COMMON.BTN_CANCEL"]).then((function(e){return n.popup=i.show({templateUrl:"templates/common/popup_password.html",title:e[n.title],subTitle:e[n.subTitle],scope:a,buttons:[{text:e["COMMON.BTN_CANCEL"]},{text:e["COMMON.BTN_OK"],type:"button-positive",onTap:a.submit}]}),n.popup}))}}}]).factory("csPopovers",["$rootScope","$translate","$ionicPopup","$timeout","UIUtils","$controller",function(e,t,i,n,a,o){return{showSelectWallet:function(t,i){var n=(i=i||{}).parameters||{};delete i.parameters;var r=i.scope&&i.scope.$new()||e.$new(!0);i.scope=r,i.templateUrl="templates/wallet/list/popover_wallets.html",i.autoremove=!0,angular.extend(this,o("WalletSelectPopoverCtrl",{$scope:i.scope,parameters:n}));var s=i.afterShow;return i.afterShow=function(e){r.closePopover=function(t){e.scope.closePopover(t)},s&&s(e)},a.popover.show(t,i).then((function(e){return r.$destroy(),e}))}}}]),angular.module("cesium.http.services",["cesium.cache.services"]).factory("csHttp",["$http","$q","$timeout","$window","csSettings","csCache","Device",function(e,t,i,n,a,o,r){var s=a.data.timeout,l=[],c={};function d(e,t){return e?e+(t&&80!=t&&443!=t?":"+t:""):null}function u(e,t,i,n){return(443==t||n?"https":"http")+"://"+d(e,t)+(i||"")}function E(e,t,i,n){t&&t.message?e(t):403==n?e({ucode:403,message:"Resource is forbidden"+(i?" ("+i+")":"")}):404==n?e({ucode:404,message:"Resource not found"+(i?" ("+i+")":"")}):i?(console.error("[http] Get HTTP error {status: "+n+"} on ["+i+"]"),e("Error while requesting ["+i+"]")):e("Unknown error from node")}function m(e,t,i,n){var a=[],o={},r=e;return"object"==typeof t&&(a=_.keys(t)),_.forEach(a,(function(e){r===(r=r.replace(":"+e,t[e]))&&(o[e]=t[e])})),i.params=o,n(r,i)}function p(e){var t;e.startsWith("duniter://")&&(t="duniter",e=e.replace("duniter://","http://"));var i=document.createElement("a");i.href=e;var n=i.pathname;n&&n.startsWith("/")&&(n=n.substring(1));var a={protocol:t||i.protocol,hostname:i.hostname,host:i.host,port:i.port,username:i.username,password:i.password,pathname:n,search:i.search,hash:i.hash};return i.remove(),a}function b(e,t){var i=e.split("."),n=t.split(".");function a(e){for(var t=0;t<e.length;++t){if(i=e[t],!/^\d+$/.test(i))return!1;e[t]=parseInt(e[t])}var i;return!0}if(!a(i)||!a(n))return NaN;for(var o=0;o<i.length;++o){if(n.length===o)return 1;if(i[o]!==n[o])return i[o]>n[o]?1:-1}return i.length!=n.length?-1:0}return s||(s=4e3),{get:function(i,n,a,o,r){if(!i)return t.reject("[http] invalid URL from host: "+i);var l=u(i,n,a,o);return function(i){return t((function(t,n){m(l,i,{timeout:r||s,responseType:"json"},(function(i,a){e.get(i,a).success((function(e,i,n,a){t(e)})).error((function(e,t,a,o){E(n,e,i,t)}))}))}))}},getWithCache:function(i,n,a,r,l,d,p,b){var T=u(i,n,a,r);return b=b||"csHttp-",l=l||o.constants.LONG,c[b]=!0,function(i){return t((function(t,n){var a={timeout:p||s,responseType:"json"};a.cache=d?o.get(b,l,(function(t,i,n){console.debug("[http] Refreshing cache for {{0}} ".format(t)),e.get(t,a).success((function(e){a.cache.put(t,e),n&&n(t,e)}))})):o.get(b,l),m(T,i,a,(function(i,a){e.get(i,a).success((function(e){t(e)})).error((function(e,t){E(n,e,i,t)}))}))}))}},post:function(i,n,a,o,r){var l=u(i,n,a,o);return function(i,n){return t((function(t,a){m(l,n,{timeout:r||s,headers:{"Content-Type":"application/json;charset=UTF-8"}},(function(n,o){e.post(n,i,o).success((function(e){t(e)})).error((function(e,t){E(a,e,n,t)}))}))}))}},ws:function(e,n,o,r,s){if(!o)throw console.error("calling csHttp.ws without path argument"),"calling csHttp.ws without path argument";var c=function(e,t,i,n){return(443==t||n?"wss":"ws")+"://"+d(e,t)+(i||"")}(e,n,o,r);function u(e){if(!e.delegate)throw new Error("Websocket {0} was closed!".format(c));return 1==e.delegate.readyState?t.when(e.delegate):3==e.delegate.readyState?t.reject("Unable to connect to websocket ["+e.delegate.url+"]"):(e.waitDuration>=s?(e.waitRetryDelay=e.waitRetryDelay&&Math.min(e.waitRetryDelay+2e3,3e4)||2e3,console.debug("[http] Will retry websocket [{0}] in {1}s...".format(e.path,Math.round(e.waitRetryDelay/1e3)))):Math.round(e.waitDuration/1e3)%10==0&&console.debug("[http] Waiting websocket ["+e.path+"]..."),i((function(){return e.waitDuration+=e.waitRetryDelay,u(e)}),e.waitRetryDelay))}function E(e,t,i){return e.delegate||(e.path=o,e.callbacks=[],e.waitDuration=0,e.waitRetryDelay=200,m(c,i,{},(function(t){e.delegate=new WebSocket(t),e.delegate.onerror=function(t){e.delegate.readyState=3},e.delegate.onmessage=function(t){var i=JSON.parse(t.data);_.forEach(e.callbacks,(function(e){e(i)}))},e.delegate.onopen=function(t){console.debug("[http] Listening on websocket ["+e.path+"]..."),l.push(e),e.delegate.openTime=Date.now()},e.delegate.onclose=function(t){var n=_.findIndex(l,(function(t){return t.path===e.path}));n>=0&&l.splice(n,1),e.delegate.closing?e.delegate=null:e.delegate.openTime?(console.debug("[http] Unexpected close of websocket [{0}] (open {1} ms ago): re-opening...",o,Date.now()-e.delegate.openTime),e.delegate=null,E(e,null,i)):t&&(console.debug("[http] Unexpected close of websocket [{0}]: error code: ".format(o),t&&t.code||t),e.delegate=null,E(e,null,i))}}))),t&&e.callbacks.push(t),u(e)}function p(e){e.delegate&&(e.delegate.closing=!0,console.debug("[http] Closing websocket ["+e.path+"]..."),e.delegate.close(),e.callbacks=[],e.onclose&&e.onclose())}return s=s||a.data.timeout,{open:function(e){return E(this,null,e)},on:function(e,t){return E(this,e,t)},onListener:function(e,t){var i=this;return E(i,e,t),function(){!function(e,t){e.callbacks=_.reject(e.callbacks,(function(e){return e===t})),e.callbacks.length||p(e)}(i,e)}},send:function(e){var t=this;return u(t).then((function(){t.delegate&&t.delegate.send(e)}))},close:function(){p(this)},isClosed:function(){return!this.delegate||this.delegate.closing}}},closeAllWs:function(){l.length>0&&(console.debug("[http] Closing all websocket..."),_.forEach(l,(function(e){e.close()})),l=[])},getUrl:u,getServer:d,uri:{parse:p,open:function(e,t){if(t=t||{},!e.startsWith("http://")&&!e.startsWith("https://")){var i=p(e);if(!i.protocol&&t.type&&(i.protocol="email"==t.type?"mailto:":"phone"==t.type?"tel:":"",e=i.protocol+e),"mailto:"==i.protocol&&r.isDesktop())try{return void(void 0).Shell.openExternal(e)}catch(e){console.error("[http] Failed not open 'mailto:' URI into external tool.")}if("mailto:"!=i.protocol&&"tel:"!=i.protocol||!r.enable)return void(t.onError&&"function"==typeof t.onError&&t.onError(e))}var a,o=t.target||(r.enable?"_system":"_blank");if("_blank"===o||"_system"===o&&r.isDesktop())try{return void(void 0).Shell.openExternal(e)}catch(e){console.error("[http] Failed not open URI into external browser.")}"_blank"===o&&r.isDesktop()&&(a="location=1,titlebar=1,status=1,menubar=1,toolbar=1,resizable=1,scrollbars=1",n.screen&&n.screen.width&&n.screen.height&&(a+=",width={0},height={1}".format(Math.trunc(n.screen.width/2),Math.trunc(n.screen.height/2))));var s=n.open(e,o,a);a&&n.screen&&n.screen.width&&n.screen.height&&(s.moveTo(n.screen.width/2/2,n.screen.height/2/2),s.focus())}},date:{now:function(){return moment().utc().unix()}},version:{compare:b,isCompatible:function(e,t){return console.debug("[http] Checking actual version [{0}] is compatible with min expected version [{1}]".format(t,e)),b(e,t)<=0}},cache:angular.merge({clear:function(e){e=e||"csHttp-",console.debug("[http] Cleaning cache {prefix: '{0}'}...".format(e)),o.clear(e)},clearAll:function(){console.debug("[http] Cleaning all caches..."),_.keys(c).forEach((function(e){o.clear(e)}))}},o.constants)}}]),angular.module("cesium.storage.services",["cesium.config"]).factory("sessionStorage",["$window","$q",function(e,t){var i={storage:e.sessionStorage||{},put:function(e,n){return i.storage[e]=n,t.when()},get:function(e,n){return t.when(i.storage[e]||n)},setObject:function(e,n){return i.storage[e]=JSON.stringify(n),t.when()},getObject:function(e){return t.when(JSON.parse(i.storage[e]||"null"))}};return i}]).factory("localStorage",["$window","$q","$log","sessionStorage",function(e,t,i,n){var a,o=!1,r={standard:{storage:null},secure:{storage:null}};function s(){if(a)return a;var i=Date.now();return(e.localStorage?(console.debug("[storage] Starting {local} storage..."),r.standard.storage=e.localStorage,_.forEach(_.keys(r.standard),(function(e){r[e]=r.standard[e]}))):(console.debug("[storage] Starting {session} storage..."),_.forEach(_.keys(n),(function(e){r[e]=n[e]}))),a=t.when()).then((function(){console.debug("[storage] Started in "+(Date.now()-i)+"ms"),o=!0,a=null}))}return r.standard.put=function(e,i){return angular.isDefined(i)&&null!=i?r.standard.storage[e]=i:r.standard.storage.removeItem(e),t.when()},r.standard.remove=function(e,i){return r.standard.storage.removeItem(e),t.when()},r.standard.get=function(e,i){return t.when(r.standard.storage[e]||i)},r.standard.setObject=function(e,i){return r.standard.storage[e]=JSON.stringify(i),t.when()},r.standard.getObject=function(e){return t.when(JSON.parse(r.standard.storage[e]||"null"))},r.secure.put=function(e,n){return t((function(t,a){null!=n?r.secure.storage.set((function(e){t()}),(function(e){i.error(e),a(e)}),e,n):r.secure.storage.remove((function(){t()}),(function(e){i.error(e),t()}),e)}))},r.secure.get=function(e,n){return t((function(t,a){r.secure.storage.get((function(e){t(!e&&n?n:e)}),(function(e){i.error(e),t()}),e)}))},r.secure.setObject=function(e,n){return i.debug("[storage] Setting object into secure storage, using key="+e),t((function(t,i){r.secure.storage.set(t,i,e,n?JSON.stringify(n):void 0)}))},r.secure.getObject=function(e){return i.debug("[storage] Getting object from secure storage, using key="+e),t((function(t,n){r.secure.storage.get((function(e){t(JSON.parse(e||"null"))}),(function(e){i.error(e),t()}),e)}))},r.isStarted=function(){return o},r.ready=function(){return o?t.when():a||s()},s(),r}]),angular.module("cesium.device.services",["cesium.utils.services","cesium.settings.services"]).factory("Device",["$rootScope","$translate","$ionicPopup","$q","ionicReady",function(e,t,i,n,a){var o,r={enable:!0},s={},l=!1;function c(e){if(!r.enable)return n.reject("Barcode scanner not enable. Please call 'ionicReady()' once before use (e.g in app.js).");var t=n.defer();return cordova.plugins.barcodeScanner.scan((function(e){e.cancelled?(console.debug("[device] barcode scanner scan: CANCELLED"),t.resolve()):(console.debug("[device] barcode scanner scan: "+e.text),t.resolve(e.text))}),(function(e){console.error("[device] Error while using barcode scanner: "+e),t.reject(e)}),e),t.promise}return r.enable=!1,r.clipboard={copy:function(e,t){if(!r.enable)return n.reject("Device disabled");var i=n.defer();return $cordovaClipboard.copy(e).then((function(){t&&t(),i.resolve()}),(function(){i.reject({message:"ERROR.COPY_CLIPBOARD"})})),i.promise}},r.camera={getPicture:function(e){return r.camera.enable?(e&&"string"==typeof e&&(e={sourceType:e}),e=e||{},angular.isUndefined(e.sourceType)?t(["SYSTEM.PICTURE_CHOOSE_TYPE","SYSTEM.BTN_PICTURE_GALLERY","SYSTEM.BTN_PICTURE_CAMERA"]).then((function(t){return i.show({title:t["SYSTEM.PICTURE_CHOOSE_TYPE"],buttons:[{text:t["SYSTEM.BTN_PICTURE_GALLERY"],type:"button",onTap:function(e){return navigator.camera.PictureSourceType.PHOTOLIBRARY}},{text:t["SYSTEM.BTN_PICTURE_CAMERA"],type:"button button-positive",onTap:function(e){return navigator.camera.PictureSourceType.CAMERA}}]}).then((function(t){return console.info("[camera] User select sourceType:"+t),e.sourceType=t,r.camera.getPicture(e)}))})):(e.quality=e.quality||50,e.destinationType=e.destinationType||navigator.camera.DestinationType.DATA_URL,e.encodingType=e.encodingType||navigator.camera.EncodingType.PNG,e.targetWidth=e.targetWidth||400,e.targetHeight=e.targetHeight||400,$cordovaCamera.getPicture(e))):n.reject("Camera not enable. Please call 'ionicReady()' once before use (e.g in app.js).")},scan:function(e){return console.warn("Deprecated use of Device.camera.scan(). Use Device.barcode.scan() instead"),c(e)}},r.barcode={enable:!1,scan:c},r.keyboard={enable:!1,close:function(){r.keyboard.enable&&cordova.plugins.Keyboard.close()}},r.keyboard.digit={settings:{bindModel:function(t,i,n){t=t||e;var a=function(){return(i||"").split(".").reduce((function(e,t){return e?e[t]:void 0}),t)},o=function(e){var n=(i||"").split("."),a=n.length&&n[n.length-1];n.reduce((function(t,i){if(i!=a)return t[i];t[a]=e}),t)};return(n=n||{}).animation=n.animation||"pop",n.action=n.action||function(e){o((a()||"")+e)},n.decimal&&(n.decimalSeparator=n.decimalSeparator||".",n.leftButton={html:"<span>.</span>",action:function(){var e=a()||"";e.indexOf(n.decimalSeparator)>=0||(e.trim().length||(e="0"),o(e+n.decimalSeparator))}}),n.rightButton=n.rightButton||{html:'<i class="icon ion-backspace-outline"></i>',action:function(){var e=a();e&&e.length&&(e=e.slice(0,-1),o(e))}},n}}},r.isIOS=function(){return!!navigator.userAgent.match(/iPhone | iPad | iPod/i)||ionic.Platform.isIOS()},r.isOSX=function(){return!!navigator.userAgent.match(/Macintosh/i)||ionic.Platform.is("osx")},r.isDesktop=function(){if(!angular.isDefined(s.isDesktop))try{s.isDesktop=(r.enable||process,!1)}catch(e){s.isDesktop=!1}return s.isDesktop},r.isWeb=function(){return!r.enable&&!r.isDesktop()},r.ready=function(){return l?n.when():o||r.start()},r.start=function(){return o=a().then((function(){r.enable=window.cordova&&cordova&&cordova.plugins,r.enable?(r.camera.enable=!!navigator.camera,r.keyboard.enable=cordova&&cordova.plugins&&!!cordova.plugins.Keyboard,r.barcode.enable=cordova&&cordova.plugins&&!!cordova.plugins.barcodeScanner&&!r.isOSX(),r.clipboard.enable=cordova&&cordova.plugins&&!!cordova.plugins.clipboard,r.keyboard.enable&&angular.extend(r.keyboard,cordova.plugins.Keyboard),console.debug("[device] Ionic platform ready, with [camera: {0}] [barcode scanner: {1}] [keyboard: {2}] [clipboard: {3}]".format(r.camera.enable,r.barcode.enable,r.keyboard.enable,r.clipboard.enable)),cordova.InAppBrowser&&console.debug("[device] Enabling InAppBrowser")):console.debug("[device] Ionic platform ready - no device detected."),l=!0,o=null}))},r}]),angular.module("cesium.currency.services",["ngApi","cesium.bma.services"]).factory("csCurrency",["$rootScope","$q","$timeout","BMA","Api","csSettings",function(e,i,n,a,o,r){var s,l,c={WELL_KNOWN_CURRENCIES:{g1:{firstBlockTime:1488987127,medianTimeOffset:3600}}},d={},u=!1,E=new o(this,"csCurrency");function m(){d.name=null,d.parameters=null,d.firstBlockTime=null,d.membersCount=null,d.cache={},d.node=a,d.currentUD=null,d.medianTimeOffset=0,u=!1,s=void 0,E.data.raise.reset(d)}function p(){return i.all([a.blockchain.parameters().then((function(e){return d.name=e.currency,d.parameters=e,d.medianTimeOffset=e.avgGenTime*e.medianTimeBlocks/2,e})).then((function(e){return t=e.currency,c.WELL_KNOWN_CURRENCIES[t]?(angular.merge(d,c.WELL_KNOWN_CURRENCIES[t]),i.when()):a.blockchain.block({block:0}).then((function(e){d.firstBlockTime=e.medianTime})).catch((function(e){if(e&&e.ucode===a.errorCodes.BLOCK_NOT_FOUND)return d.firstBlockTime=0,d.initPhase=!0,void console.warn("[currency] Blockchain not launched: Enable init phase mode");throw e}));var t})),a.blockchain.stats.ud().then((function(e){return e.result.blocks.length?function e(t,i){if(!t.result.blocks.length||i<0)return d.currentUD=d.parameters?d.parameters.ud0:-1,d.currentUD;var n=t.result.blocks[i];return a.blockchain.block({block:n}).then((function(e){var t,i;return d.currentUD=(t=e.dividend,(i=e.unitbase)<=0?t:t*Math.pow(10,i)),d.currentUD})).catch((function(a){if(console.error("[currency] Unable to load last block with UD, with number {0}".format(n)),i>0)return console.error("[currency] Retrying to load UD from a previous block..."),e(t,i-1);throw d.currentUD=null,a}))}(e,e.result.blocks.length-1):(d.currentUD=d.parameters?d.parameters.ud0:-1,d.currentUD)})).catch((function(e){throw d.currentUD=null,e})),E.data.raisePromise.load(d)]).catch((function(e){throw m(),e}))}function b(){return u?i.when(d):s||h()}function T(e){return function(){return u?i.when(d[e]):s||h().then((function(){return d[e]}))}}function f(e){var i=new t(e);i.cleanData(),console.debug("[currency] Received new block {"+i.number+"-"+i.hash+"}"),d.currentBlock=i,d.currentBlock.receivedAt=moment().utc().unix(),d.medianTime=i.medianTime,d.membersCount=i.membersCount,i.dividend&&(d.currentUD=i.dividend),E.data.raise.newBlock(i)}function g(){console.debug("[currency] Stopping..."),_.forEach(l,(function(e){e()})),l=[],m()}function N(){return g(),n(h,200)}function h(t){if(s)return s;if(u)return i.when(d);if(!t)return a.ready().then((function(e){return e?h(e):n(h,500)}));console.debug("[currency] Starting...");var o=Date.now();return s=a.ready().then((function(e){return!!e||n((function(){return h(!0)}),500)})).then(p).then((function(){!function(){l=[a.api.node.on.restart(e,N,this),a.websocket.block().onListener(f)]}(),console.debug("[currency] Started in "+(Date.now()-o)+"ms"),u=!0,s=null,E.data.raise.ready(d)})).then((function(){return d}))}var I=T("currentBlock");function O(e){return I().then((function(t){var i=moment().utc().unix();if(e){if(t&&t.receivedAt&&i-t.receivedAt<60)return t;t||console.warn("[currency] No current block in cache: get it from network. Websocket [/ws/block] may not be started ?")}return a.blockchain.current(!1).catch((function(e){if(e&&e.ucode==a.errorCodes.NO_CURRENT_BLOCK)return{number:0,hash:a.constants.ROOT_BLOCK_HASH,medianTime:i};throw e})).then((function(e){return d.currentBlock=e,d.currentBlock.receivedAt=i,e}))}))}return E.registerEvent("data","ready"),E.registerEvent("data","load"),E.registerEvent("data","reset"),E.registerEvent("data","newBlock"),m(),{ready:function(){return u?i.when(d):s||h()},start:h,stop:g,data:d,get:b,name:T("name"),parameters:T("parameters"),currentUD:T("currentUD"),medianTimeOffset:T("medianTimeOffset"),blockchain:{current:O,lastValid:function(){return r.data.blockValidityWindow<=0?O(!0):O(!0).then((function(e){var t=e.number-r.data.blockValidityWindow;return t>0?a.blockchain.block({block:t}):e}))}},date:{now:function(){return moment().utc().unix()-(d.medianTimeOffset||c.WELL_KNOWN_CURRENCIES.g1.medianTimeOffset)}},api:E,default:function(){return console.warn("[currency] 'csCurrency.default()' has been DEPRECATED - Please use 'csCurrency.get()' instead."),b()}}}]),angular.module("cesium.bma.services",["ngApi","cesium.http.services","cesium.settings.services"]).factory("BMA",["$q","$window","$rootScope","$timeout","csCrypto","Api","Device","UIUtils","csConfig","csSettings","csCache","csHttp",function(e,t,i,n,a,o,r,s,l,c,d,u){function E(r,E,m,p){var b,T=r?"{0}:{1}".format(r,E||(m?"443":"80")):"default",f="[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{43,44}",g="SIG\\(("+f+")\\)",N="OBJ\\(([0-9]+)\\)",h="( ([a-z_][a-z0-9-_.ğĞ]*))?( ([0-9.]+))?( ([0-9a-f:]+))?( ([0-9]+))( (.+))?",I={BMA:"BASIC_MERKLED_API",BMAS:"BMAS",WS2P:"WS2P",BMATOR:"BMATOR",WS2PTOR:"WS2PTOR"},O={USER_ID:"[0-9a-zA-Z-_]+",CURRENCY:"[0-9a-zA-Z-_]+",PUBKEY:f,PUBKEY_WITH_CHECKSUM:"("+f+"):([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{3})",COMMENT:"[ a-zA-Z0-9-_:/;*\\[\\]()?!^\\+=@&~#{}|\\\\<>%.]*",INVALID_COMMENT_CHARS:"[^ a-zA-Z0-9-_:/;*\\[\\]()?!^\\+=@&~#{}|\\\\<>%.]*",URI_WITH_AT:"duniter://(?:([A-Za-z0-9_-]+):)?("+f+"@([a-zA-Z0-9-.]+.[ a-zA-Z0-9-_:/;*?!^\\+=@&~#|<>%.]+)",URI_WITH_PATH:"duniter://([a-zA-Z0-9-.]+.[a-zA-Z0-9-_:.]+)/("+f+")(?:/([A-Za-z0-9_-]+))?",BMA_ENDPOINT:I.BMA+h,BMAS_ENDPOINT:I.BMAS+h,WS2P_ENDPOINT:I.WS2P+" ([a-f0-9]{8})"+h,BMATOR_ENDPOINT:I.BMATOR+" ([a-z0-9-_.]*|[0-9.]+|[0-9a-f:]+.onion)(?: ([0-9]+))?",WS2PTOR_ENDPOINT:I.WS2PTOR+" ([a-f0-9]{8}) ([a-z0-9-_.]*|[0-9.]+|[0-9a-f:]+.onion)(?: ([0-9]+))?(?: (.+))?"},v={PROTOCOL_VERSION:10,ROOT_BLOCK_HASH:"E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855",LIMIT_REQUEST_COUNT:5,LIMIT_REQUEST_DELAY:1e3,regexp:O,api:I},R=this;function A(e,t,i){R.started&&R.stop(),R.alive=!1,c.data&&c.data.node&&(e=e||c.data.node.host,t=t||c.data.node.port,i=angular.isDefined(i)?i:443==t||c.data.node.useSsl||R.forceUseSsl),e&&(R.host=e,R.port=t||80,R.useSsl=angular.isDefined(i)?i:443==R.port||R.forceUseSsl,R.server=u.getServer(e,t),R.url=u.getUrl(e,t,"",i))}function C(e){return new RegExp("^"+e+"$")}function S(e){return new RegExp(e)}function L(){R.raw&&(console.warn("[BMA] Closing all websockets..."),_.keys(R.raw.wsByPath||{}).forEach((function(e){R.raw.wsByPath[e].close()})),R.raw.wsByPath={})}function D(e,t){t=R.useCache&&t||0;var i=e+(t?"#"+t:""),a=function(o){if(!R.started)return R._startPromise||console.warn("[BMA] Trying to get [{0}] before start(). Waiting...".format(e)),R.ready().then((function(){return a(o)}));var r=R.raw.getByPath[i];r||(r=t?u.getWithCache(R.host,R.port,e,R.useSsl,t,null,null,"BMA-"):u.get(R.host,R.port,e,R.useSsl),R.raw.getByPath[i]=r);var l=1;return r(o).catch((function(e){if(e&&e.ucode===M.errorCodes.HTTP_LIMITATION&&l<=M.constants.LIMIT_REQUEST_COUNT)return 1===l&&(console.warn("[BMA] Too many HTTP requests: Will wait then retry..."),s.loading.update({template:"COMMON.LOADING_WAIT"})),n((function(){return l++,r(o)}),M.constants.LIMIT_REQUEST_DELAY);throw e}))};return a}function y(e){var t=function(i,n){if(!R.started)return R._startPromise||console.error("[BMA] Trying to post [{0}] before start()...".format(e)),R.ready().then((function(){return t(i,n)}));var a=R.raw.postByPath[e];return a||(a=u.post(R.host,R.port,e,R.useSsl),R.raw.postByPath[e]=a),a(i,n)};return t}function P(e){return function(){var t=R.raw.wsByPath[e];return t&&!t.isClosed()||((t=u.ws(R.host,R.port,e,R.useSsl)).onclose=function(){delete R.raw.wsByPath[e]},R.raw.wsByPath[e]=t),t}}function k(e){n((function(){M.copy(e.node)}),1e3)}R.raw={getByPath:{},postByPath:{},wsByPath:{}},R.api=new o(this,"BMA-"+T),R.started=!1,R.init=A,R.forceUseSsl=!!("true"===l.httpsMode||!0===l.httpsMode||"force"===l.httpsMode||t.location&&"https:"===t.location.protocol),R.forceUseSsl&&console.debug("[BMA] Enable SSL (forced by config or detected in URL)"),r&&A(r,E,m),R.useCache=!angular.isDefined(p)||p,R.isAlive=function(e){return e=e||R,u.get(e.host,e.port,"/node/summary",e.useSsl)().then((function(e){var t=e&&e.duniter&&e.duniter.software,i=!0;return"duniter"===t&&e.duniter.version?i=u.version.isCompatible(c.data.minVersion,e.duniter.version):console.debug("[BMA] Unknown node software [{0} v{1}]: could not check compatibility.".format(t||"?",e.duniter.version||"?")),i||console.error("[BMA] Incompatible node [{0} v{1}]: expected at least v{2}".format(t,e.duniter.version,c.data.minVersion)),i})).catch((function(){return!1}))},R.isStarted=function(){return R.started},R.ready=function(){return R.started?e.when(R.alive):R._startPromise||R.start()},R.start=function(){if(R._startPromise)return R._startPromise;if(R.started)return e.when(R.alive);if(!R.host)return c.ready().then((function(){return R.init(),R.useCache=!0,R.start()}));console.debug("[BMA] Starting {0} {ssl: {1})...".format(R.server,R.useSsl));var t=Date.now();return R._startPromise=e.all([c.ready(),R.isAlive()]).then((function(e){return R.alive=e[1],R.alive?(b&&b.length||function(){b=[c.api.data.on.changed(i,k,this)]}(),console.debug("[BMA] Started in "+(Date.now()-t)+"ms"),R.api.node.raise.start(),R.started=!0,delete R._startPromise,!0):(console.error("[BMA] Could not start {0} : unreachable".format(R.server)),R.started=!0,delete R._startPromise,!1)})),R._startPromise},R.stop=function(){return R.started||R._startPromise?(console.debug("[BMA] Stopping..."),_.forEach(b,(function(e){e()})),b=[],delete R._startPromise,R.alive?(L(),console.debug("[BMA] Cleaning cache {prefix: '{0}'}...".format("BMA-")),d.clear("BMA-"),R.raw.getByPath={},R.raw.postByPath={},R.raw.wsByPath={},R.alive=!1,R.started=!1,R.api.node.raise.stop()):R.started=!1,e.when()):e.when()},R.restart=function(){return R.stop(),n(R.start,200).then((function(e){return e&&R.api.node.raise.restart(),e}))},R.api.registerEvent("node","start"),R.api.registerEvent("node","stop"),R.api.registerEvent("node","restart");var M={errorCodes:{REVOCATION_ALREADY_REGISTERED:1002,HTTP_LIMITATION:1006,IDENTITY_SANDBOX_FULL:1007,NO_MATCHING_IDENTITY:2001,UID_ALREADY_USED:2003,NO_MATCHING_MEMBER:2004,NO_IDTY_MATCHING_PUB_OR_UID:2021,WRONG_SIGNATURE_MEMBERSHIP:2006,MEMBERSHIP_ALREADY_SEND:2007,NO_CURRENT_BLOCK:2010,BLOCK_NOT_FOUND:2011,SOURCE_ALREADY_CONSUMED:2015,TX_INPUTS_OUTPUTS_NOT_EQUAL:2024,TX_OUTPUT_SUM_NOT_EQUALS_PREV_DELTAS:2025,TX_ALREADY_PROCESSED:2030},constants:v,regexp:{USER_ID:C(O.USER_ID),COMMENT:C(O.COMMENT),PUBKEY:C(O.PUBKEY),PUBKEY_WITH_CHECKSUM:C(O.PUBKEY_WITH_CHECKSUM),CURRENCY:C(O.CURRENCY),URI:C(O.URI),BMA_ENDPOINT:C(O.BMA_ENDPOINT),BMAS_ENDPOINT:C(O.BMAS_ENDPOINT),WS2P_ENDPOINT:C(O.WS2P_ENDPOINT),BMATOR_ENDPOINT:C(O.BMATOR_ENDPOINT),WS2PTOR_ENDPOINT:C(O.WS2PTOR_ENDPOINT),TX_OUTPUT_SIG:C(g),TX_OUTPUT_FUNCTION:S("SIG\\(([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{43,44})\\)|XHX\\(([A-F0-9]{1,64})\\)|CSV\\(([0-9]{1,8})\\)|CLTV\\(([0-9]{1,10})\\)"),TX_OUTPUT_OBJ_OPERATOR_AND:S(N+"([ ]*&&[ ]*("+N+"))+"),TX_OUTPUT_OBJ_OPERATOR_OR:S(N+"([ ]*\\|\\|[ ]*("+N+"))+"),TX_OUTPUT_OBJ:S(N),TX_OUTPUT_OBJ_OPERATOR:S("OBJ\\(([0-9]+)\\)[ ]*(&&)|(\\|\\|)[ ]*OBJ\\(([0-9]+)\\)"),TX_OUTPUT_OBJ_PARENTHESIS:S("\\(("+N+")\\)"),TX_OUTPUT_FUNCTIONS:S("SIG\\(([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{43,44})\\)|XHX\\(([A-F0-9]{1,64})\\)|CSV\\(([0-9]{1,8})\\)|CLTV\\(([0-9]{1,10})\\)([ ]*(&&)|(\\|\\|)[ ]*SIG\\(([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{43,44})\\)|XHX\\(([A-F0-9]{1,64})\\)|CSV\\(([0-9]{1,8})\\)|CLTV\\(([0-9]{1,10})\\))*")},node:{summary:D("/node/summary",d.constants.LONG),same:function(e){return(e=e||{}).useSsl=angular.isDefined(e.useSsl)?e.useSsl:e.port&&443==e.port,R.host===e.host&&(!R.port&&!e.port2||R.port==e.port2||80)&&R.useSsl===e.useSsl},forceUseSsl:R.forceUseSsl},network:{peering:{self:D("/network/peering"),peers:D("/network/peering/peers")},peers:D("/network/peers"),ws2p:{info:D("/network/ws2p/info"),heads:D("/network/ws2p/heads")}},wot:{lookup:D("/wot/lookup/:search"),certifiedBy:D("/wot/certified-by/:pubkey",d.constants.SHORT),certifiersOf:D("/wot/certifiers-of/:pubkey",d.constants.SHORT),member:{all:D("/wot/members",d.constants.LONG),pending:D("/wot/pending",d.constants.SHORT)},requirements:function(e,t){return!0!==t?M.raw.wot.requirements(e):M.raw.wot.requirementsWithCache(e)},add:y("/wot/add"),certify:y("/wot/certify"),revoke:y("/wot/revoke")},blockchain:{parameters:D("/blockchain/parameters",d.constants.VERY_LONG),block:D("/blockchain/block/:block",d.constants.SHORT),blocksSlice:D("/blockchain/blocks/:count/:from"),current:function(e){return!0!==e?M.raw.blockchain.current():M.raw.blockchain.currentWithCache()},membership:y("/blockchain/membership"),stats:{ud:D("/blockchain/with/ud",d.constants.MEDIUM),tx:D("/blockchain/with/tx"),newcomers:D("/blockchain/with/newcomers",d.constants.MEDIUM),hardship:D("/blockchain/hardship/:pubkey"),difficulties:D("/blockchain/difficulties")}},tx:{sources:D("/tx/sources/:pubkey",d.constants.SHORT),process:y("/tx/process"),history:{all:function(e){return M.raw.tx.history.all(e).then((function(e){return e.history=e.history||{},e.history.sending=[],e.history.pendings=[],e}))},times:function(e,t){return(!0!==t?M.raw.tx.history.times(e):M.raw.tx.history.timesWithCache(e)).then((function(e){return e.history=e.history||{},e.history.sending=[],e.history.pendings=[],e}))},blocks:D("/tx/history/:pubkey/blocks/:from/:to",d.constants.LONG),pending:D("/tx/history/:pubkey/pending")}},ud:{history:D("/ud/history/:pubkey")},uri:{},version:{},raw:{blockchain:{currentWithCache:D("/blockchain/current",d.constants.SHORT),current:D("/blockchain/current")},wot:{requirementsWithCache:D("/wot/requirements/:pubkey",d.constants.LONG),requirements:D("/wot/requirements/:pubkey")},tx:{history:{timesWithCache:D("/tx/history/:pubkey/times/:from/:to",d.constants.LONG),times:D("/tx/history/:pubkey/times/:from/:to"),all:D("/tx/history/:pubkey")}}}};M.tx.parseUnlockCondition=function(e){for(var t,i,n,a,o=e,r=[],s={},l=M.regexp.TX_OUTPUT_FUNCTION.exec(o);l;)t={},i="OBJ("+r.length+")",t.type=o.substr(l.index,l[0].indexOf("(")),t.value=l[1]||l[2]||l[3]||l[4],r.push(t),s[t.type]=s[t.type]++||1,o=o.replace(l[0],i),l=M.regexp.TX_OUTPUT_FUNCTION.exec(o);for(var c=!0;c;){for(c=!!(l=M.regexp.TX_OUTPUT_OBJ_OPERATOR_AND.exec(o));l;){for(t={},i="OBJ("+r.length+")",t.type="AND",t.children=[],r.push(t),n=l[0],a=M.regexp.TX_OUTPUT_OBJ.exec(n);a;)t.children.push(r[a[1]]),n=n.replace(a[0],""),a=M.regexp.TX_OUTPUT_OBJ.exec(n);o=o.replace(l[0],i),l=M.regexp.TX_OUTPUT_OBJ_OPERATOR_AND.exec(n)}for(l=M.regexp.TX_OUTPUT_OBJ_OPERATOR_OR.exec(o),c=c||!!l;l;){for(t={},i="OBJ("+r.length+")",t.type="OR",t.children=[],r.push(t),n=l[0],a=M.regexp.TX_OUTPUT_OBJ.exec(n);a;)t.children.push(r[a[1]]),n=n.replace(a[0],""),a=M.regexp.TX_OUTPUT_OBJ.exec(n);o=o.replace(l[0],i),l=M.regexp.TX_OUTPUT_OBJ_OPERATOR_AND.exec(o)}for(l=M.regexp.TX_OUTPUT_OBJ_PARENTHESIS.exec(o),c=c||!!l;l;)o=o.replace(l[0],l[1]),l=M.regexp.TX_OUTPUT_OBJ_PARENTHESIS.exec(o)}if(0!==(s=_.keys(s)).length)return console.debug("[BMA] Unlock conditions successfully parsed:",t),{unlockFunctions:s,unlockTree:t};console.error("[BMA] Unparseable unlock condition: ",output)},M.node.parseEndPoint=function(e,t){var i=M.regexp.BMA_ENDPOINT.exec(e);return i?{dns:i[2]||"",ipv4:i[4]||"",ipv6:i[6]||"",port:i[8]||80,useSsl:i[8]&&443==i[8],path:i[10],useBma:!0}:(i=M.regexp.BMAS_ENDPOINT.exec(e))?{dns:i[2]||"",ipv4:i[4]||"",ipv6:i[6]||"",port:i[8]||80,useSsl:!0,path:i[10],useBma:!0}:(i=M.regexp.BMATOR_ENDPOINT.exec(e))?{dns:i[1]||"",port:i[2]||80,useSsl:!1,useTor:!0,useBma:!0}:(i=M.regexp.WS2P_ENDPOINT.exec(e))?{ws2pid:i[1]||"",dns:i[3]||"",ipv4:i[5]||"",ipv6:i[7]||"",port:i[9]||80,useSsl:i[9]&&443==i[9],path:i[11]||"",useWs2p:!0}:(i=M.regexp.WS2PTOR_ENDPOINT.exec(e))?{ws2pid:i[1]||"",dns:i[2]||"",port:i[3]||80,path:i[4]||"",useSsl:!1,useTor:!0,useWs2p:!0}:t&&(i=C(t+h).exec(e))?{dns:i[2]||"",ipv4:i[4]||"",ipv6:i[6]||"",port:i[8]||80,useSsl:i[8]&&443==i[8],path:i[10],useBma:!1}:void 0},M.copy=function(e){if(u.getUrl(e.host,e.port,"",e.useSsl)!==R.url){var t=R.started;if(t&&R.stop(),R.init(e.host,e.port,e.useSsl,R.useCache),t)return n((function(){return R.start().then((function(e){return e&&R.api.node.raise.restart(),e}))}),200)}},M.wot.member.uids=function(){return M.wot.member.all().then((function(e){return e.results.reduce((function(e,t){return e[t.pubkey]=t.uid,e}),{})}))},M.wot.member.get=function(e){return M.wot.member.uids().then((function(t){var i=t[e];return{pubkey:e,uid:i||null}}))},M.wot.member.getByUid=function(e){return M.wot.member.all().then((function(t){return _.findWhere(t.results,{uid:e})}))},M.blockchain.blocks=function(e){return M.raw.getHttpRecursive(M.blockchain.block,"block",e)},M.network.peering.peersByLeaves=function(e){return M.raw.getHttpRecursive(M.network.peering.peers,"leaf",e,0,10)},M.raw.getHttpRecursive=function(t,i,a,o,r){return o=angular.isDefined(o)?o:0,r=r||M.constants.LIMIT_REQUEST_COUNT,e((function(s,l){var c=[],d=[];_.each(a.slice(o,o+r),(function(e){var n={};n[i]=e,d.push(t(n).then((function(e){e&&c.push(e)})))})),e.all(d).then((function(){o<a.length-1?n((function(){M.raw.getHttpRecursive(t,i,a,o+r,r).then((function(e){e&&e.length?s(c.concat(e)):s(c)})).catch((function(e){l(e)}))}),M.constants.LIMIT_REQUEST_DELAY):s(c)})).catch((function(e){e&&e.ucode===M.errorCodes.HTTP_LIMITATION?s(c):l(e)}))}))},M.raw.getHttpWithRetryIfLimitation=function(e){return e().catch((function(t){if(t&&t.ucode==M.errorCodes.HTTP_LIMITATION)return n((function(){return M.raw.getHttpWithRetryIfLimitation(e)}),M.constants.LIMIT_REQUEST_DELAY)}))},M.blockchain.lastUd=function(){return M.blockchain.stats.ud().then((function(e){if(!e.result.blocks||!e.result.blocks.length)return null;var t=e.result.blocks[e.result.blocks.length-1];return M.blockchain.block({block:t}).then((function(e){return e.unitbase>0?e.dividend*Math.pow(10,e.unitbase):e.dividend}))}))},M.uri.parse=function(t){return e((function(e,i){var n;if(C(O.PUBKEY).test(t))e({pubkey:t});else if(C(O.PUBKEY_WITH_CHECKSUM).test(t)){console.debug("[BMA.parse] Detecting a pubkey with checksum: "+t);var o=M.regexp.PUBKEY_WITH_CHECKSUM.exec(t);n=o[1];var r=o[2];console.debug("[BMA.parse] Detecting a pubkey {"+n+"} with checksum {"+r+"}");var s=a.util.pkChecksum(n);console.debug("[BMA.parse] Expecting checksum for pubkey is {"+s+"}"),r!=s?i({message:"ERROR.PUBKEY_INVALID_CHECKSUM"}):e({pubkey:n})}else if(t.startsWith("duniter://")){var l,c=u.uri.parse(t),d=-1===c.host.indexOf(".")?c.host:null,E=-1!==c.host.indexOf(".")?c.host:null;if(c.username&&(c.password?(l=c.username,n=c.password):n=c.username),c.pathname){var m=c.pathname.split("/"),p=m?m.length:0,b=0;if(!d&&p>b&&(d=m[b++]),!n&&p>b&&(n=m[b++]),!l&&p>b&&(l=m[b++]),p>b)return void i({message:"Bad Duniter URI format. Invalid path (incomplete or redundant): "+c.pathname})}if(d)return E||e({uid:l,pubkey:n,currency:d}),u.get(E+"/blockchain/parameters")().then((function(t){t.currency===d?e({uid:l,pubkey:n,host:E,currency:d}):i({message:"Node's currency ["+t.currency+"] does not matched URI's currency ["+d+"]."})})).catch((function(e){console.error(e),i({message:"Could not get node parameter. Currency could not be retrieve"})}));if(!E)return void i({message:"Bad Duniter URI format. Missing currency name (or node address)."});u.get(E+"/blockchain/parameters")().then((function(t){e({uid:l,pubkey:n,host:E,currency:t.currency})})).catch((function(e){console.error(e),i({message:"Could not get node parameter. Currency could not be retrieve"})}))}else console.debug("[BMA.parse] Could not parse URI: "+t),i({message:"ERROR.UNKNOWN_URI_FORMAT"})})).then((function(e){if(e){if(e.pubkey&&!C(O.PUBKEY).test(e.pubkey))throw{message:"Invalid pubkey format ["+e.pubkey+"]"};if(e.uid&&!C(O.USER_ID).test(e.uid))throw{message:"Invalid uid format ["+e.uid+"]"};if(e.currency&&!C(O.CURRENCY).test(e.currency))throw{message:"Invalid currency format ["+e.currency+"]"};return e}}))};var U=c.data.duniterLatestReleaseUrl&&u.uri.parse(c.data.duniterLatestReleaseUrl);M.raw.getLatestRelease=U?u.getWithCache(U.host,U.port,"/"+U.pathname,443==+U.port||"https:"===U.protocol||R.forceUseSsl,d.constants.LONG):function(){return e.when()},M.version.latest=function(){return M.raw.getLatestRelease().then((function(e){if(e)return e.name&&e.html_url?{version:e.name,url:e.html_url}:e.tag_name&&e.html_url?{version:e.tag_name.substring(1),url:e.html_url}:void 0})).catch((function(e){console.error("[BMA] Failed to get Duniter latest version",e)}))},M.websocket={block:P("/ws/block"),peer:P("/ws/peer"),close:L},angular.merge(R,M)}var m=new E;return m.instance=function(e,t,i,n){return new E(e,t,i,n=!!angular.isDefined(n)&&n)},m.lightInstance=function(e,t,i,n){return{host:e,port:t=t||80,useSsl:i=angular.isDefined(i)?i:443==t,url:u.getUrl(e,t,"",i),node:{summary:u.getWithCache(e,t,"/node/summary",i,d.constants.MEDIUM,!1,n)},network:{peering:{self:u.get(e,t,"/network/peering",i,n)},peers:u.get(e,t,"/network/peers",i,n)},blockchain:{current:u.get(e,t,"/blockchain/current",i,n),stats:{hardship:u.get(e,t,"/blockchain/hardship/:pubkey",i,n)}}}},m}]),angular.module("cesium.wot.services",["ngApi","cesium.bma.services","cesium.crypto.services","cesium.utils.services","cesium.settings.services"]).factory("csWot",["$rootScope","$q","$timeout","BMA","Api","CacheFactory","UIUtils","csConfig","csCurrency","csSettings","csCache",function(e,t,i,n,a,o,r,s,l,c,d){var u=new a(this,"csWot"),E=d.get("csWot-idty-",d.constants.MEDIUM),m=d.get("csWot-requirements-",d.constants.MEDIUM),p=function(e){var t={};return e.reduce((function(e,i){return i.id=i.id||i.uid+"-"+i.pubkey,t[i.id]?e:(t[i.id]=!0,e.concat(i))}),[])},b=function(e,t,i){return t=t||0,e=p(e),e=_.sortBy(e,(function(e){var t=1;return t+=1e6*e.block,-(t+=10*(900-e.uid.toLowerCase().charCodeAt(0)))})),angular.isDefined(i)&&e.length>i&&(e=e.slice(t,t+i)),e},T=function(e){e.requirements={loaded:!1,meta:{},hasSelf:!1,needSelf:!0,needMembership:!0,canMembershipOut:!1,needRenew:!1,pendingMembership:!1,isMember:!1,wasMember:!1,certificationCount:0,needCertifications:!1,needCertificationCount:0,willNeedCertificationCount:0,alternatives:void 0},e.blockUid=null,e.isMember=!1,e.sigDate=null,e.hasSelf=!1},f=function(e,t){if(e.hasSelf=!!e.meta.timestamp,e.needSelf=!e.hasSelf||e.meta.invalid,e.wasMember=!!angular.isDefined(e.wasMember)&&e.wasMember,e.needMembership=!e.revoked&&e.membershipExpiresIn<=0&&e.membershipPendingExpiresIn<=0&&!e.wasMember,e.needRenew=!e.needMembership&&!e.revoked&&e.membershipExpiresIn<=c.data.timeWarningExpireMembership&&e.membershipPendingExpiresIn<=0||e.wasMember&&!e.revoked&&0===e.membershipExpiresIn&&0===e.membershipPendingExpiresIn,e.canMembershipOut=!e.revoked&&e.membershipExpiresIn>0,e.pendingMembership=!e.revoked&&e.membershipExpiresIn<=0&&e.membershipPendingExpiresIn>0,e.isMember=!e.revoked&&e.membershipExpiresIn>0,e.blockUid=e.meta.timestamp,e.certificationCount=(e.isMember||e.wasMember&&!e.expired)&&e.certifications?e.certifications.length:0,e.willExpireCertificationCount=e.certifications?e.certifications.reduce((function(e,t){return e+(t.expiresIn<=c.data.timeWarningExpire?1:0)}),0):0,e.willExpire=e.willExpireCertificationCount>0,e.pendingRevocation=!e.revoked&&!!e.revocation_sig,e.isMember||e.wasMember)e.pendingCertificationCount=angular.isDefined(e.pendingCerts)?e.pendingCerts.length:0;else{var i=_.union(_.pluck(e.pendingCerts||[],"from"),_.pluck(e.certifications||[],"from"));e.pendingCertificationCount=_.size(i)}return e.needCertificationCount=!e.needSelf&&e.certificationCount<t.sigQty?t.sigQty-e.certificationCount:0,e.willNeedCertificationCount=!e.needMembership&&!e.needCertificationCount&&e.certificationCount-e.willExpireCertificationCount<t.sigQty?t.sigQty-e.certificationCount+e.willExpireCertificationCount:0,e.loaded=!0,e},g=function(e){if(!e)return t.when(e);var i=[];return _.forEach(e,(function(e){var t=e.meta.timestamp.split("-",2);e.meta.number=parseInt(t[0]),e.meta.hash=t[1],e.meta.sig=e.meta.sig||e.sig,delete e.sig,i.push(e.meta.number)})),n.blockchain.blocks(_.uniq(i)).then((function(t){return _.forEach(e,(function(e){var i=_.findWhere(t,{number:e.meta.number});e.meta.time=i&&i.medianTime,i&&0!==e.meta.number&&e.meta.hash!==i.hash&&(e.meta.invalid=!0)})),e})).catch((function(t){if(t&&t.ucode==n.errorCodes.BLOCK_NOT_FOUND)return _.forEach(e,(function(e){0===e.number&&(e.meta.time=moment().utc().unix())})),e;throw t}))},N=function(e,a){if(!e||!e.pubkey&&!e.uid)return t.when(e);var o=e.pubkey||e.uid,s=!1!==a?m.get(o):null;if(s)return console.debug("[wot] Requirements "+o+" found in cache"),angular.merge(e,s),t.when(s);s={pubkey:e.pubkey,uid:e.uid},i((function(){s.requirements&&s.requirements.loaded||r.loading.update({template:"COMMON.LOADING_WAIT"})}),2e3);var c=Date.now();return t.all([l.get(),n.wot.requirements({pubkey:s.pubkey||s.uid},!1).then((function(e){return g(e&&e.identities)}))]).then((function(t){var i=t[0],n=t[1];if(n&&n.length)return n.length>1&&(n=_.sortBy(n,(function(e){var t=0;t+=1e12*(s.uid&&e.uid===s.uid?1:0),t+=1e11*(e.meta.invalid?0:1),t+=1e10*(s.blockUid&&e.meta.timestamp&&e.meta.timestamp===s.blockUid?1:0),t+=1e9*(e.membershipExpiresIn>0?1:0),t+=1e8*(e.membershipPendingExpiresIn>0?1:0),t+=1e7*(e.expired?0:1),t+=1e6*(e.outdistanced?0:1),t+=1e5*(e.wasMember?1:0);var i=!e.expired&&e.certifications?e.certifications.length:0;return t+=1*(i||0),-(t+=1*(!i&&e.membershipPendingExpiresIn>0?e.membershipPendingExpiresIn/1e3:0))})),console.debug("[wot] Found {0} identities (in requirements). Will selected the best one".format(n.length))),s.requirements=f(n[0],i.parameters),s.pubkey=s.requirements.pubkey,s.uid=s.requirements.uid,s.isMember=s.requirements.isMember,s.blockUid=s.requirements.meta&&s.requirements.meta.timestamp,s.hasSelf=s.requirements.hasSelf,s.sigDate=s.requirements.meta&&s.requirements.meta.time,!s.requirements.isMember&&!s.requirements.wasMember&&n.length>1&&(s.requirements.alternatives=n.splice(1),_.forEach(s.requirements.alternatives,(function(e){f(e,i.parameters)}))),m.put(o,s),angular.merge(e,s),console.debug("[wot] Requirements for '{0}' loaded in {1}ms".format(s.pubkey&&s.pubkey.substring(0,8)||s.uid,Date.now()-c)),e})).catch((function(t){if(s.requirements={loaded:!0},T(e),t&&(t.ucode==n.errorCodes.NO_MATCHING_MEMBER||t.ucode==n.errorCodes.NO_IDTY_MATCHING_PUB_OR_UID))return e.requirements.loaded=!0,e;throw t}))},h=function(e,t){var i={pubkey:e,uid:t,hasSelf:!1};return n.wot.lookup({search:e||t}).then((function(e){var t=e.results.reduce((function(e,t){return e.concat(t.uids.reduce((function(e,i){var n=i.meta.timestamp.split("-",2),a=parseInt(n[0]);return e.concat({uid:i.uid,pubkey:t.pubkey,meta:{timestamp:i.meta.timestamp,number:a,hash:n[1],sig:i.self},revoked:i.revoked,revoked_on:i.revoked_on})}),[]))}),[]);return g(t).then((function(t){return{identities:t,results:e.results}}))})).then((function(e){var t=e.identities;t.length>1&&(e.identities=_.sortBy(t,(function(e){var t=0;return t+=1e11*(i.uid&&e.uid===i.uid?1:0),t+=1e10*(e.meta.invalid?0:1),t+=1e9*(i.blockUid&&e.meta.timestamp&&e.meta.timestamp===i.blockUid?1:0),t+=1e8*(e.revoked?0:1),-(t+=1*(e.meta.number?e.meta.number:0)/1e3)})),console.debug("[wot] Found {0} identities (in lookup). Will selected the best one".format(t.length))),_.forEach(t,(function(e){e.hasSelf=!!(e.uid&&e.meta.timestamp&&e.meta.sig)})),i.requirements=t[0],i.pubkey=i.requirements.pubkey,i.uid=i.requirements.uid,i.blockUid=i.requirements.meta&&i.requirements.meta.timestamp,i.hasSelf=i.requirements.hasSelf,
i.sigDate=i.requirements.meta&&i.requirements.meta.time,t.length>1&&(i.requirements.alternatives=t.splice(1)),i.lookup={};var n={};return i.lookup.certifications=(e.results||[]).reduce((function(e,t){return t.uids.reduce((function(e,t){var i=t.uid+"-"+(t.meta?t.meta.timestamp:"");return e[i]=(t.others||[]).reduce((function(e,t){var a=i+"-"+t.pubkey,o={pubkey:t.pubkey,uid:t.uids[0],cert_time:{block:t.meta&&t.meta.block_number?t.meta.block_number:0,block_hash:t.meta&&t.meta.block_hash?t.meta.block_hash:null},isMember:t.isMember,wasMember:t.wasMember};return n[a]?o.cert_time.block>n[a].cert_time.block?(n[a]=o,e.splice(_.findIndex(e,{pubkey:t.pubkey}),1,o),e):e:(n[a]=o,e.concat(o))}),[]),e}),e)}),{}),n={},i.lookup.givenCertifications=(e.results||[]).reduce((function(e,t){return(t.signed||[]).reduce((function(e,t){var i={pubkey:t.pubkey,uid:t.uid,cert_time:{block:t.cert_time&&t.cert_time.block?t.cert_time.block:0,block_hash:t.cert_time&&t.cert_time.block_hash?t.cert_time.block_hash:null},sigDate:t.meta?t.meta.timestamp:null,isMember:t.isMember,wasMember:t.wasMember};if(n[t.pubkey]){if(!(i.block>n[t.pubkey].block))return e;n[t.pubkey]=i}else n[t.pubkey]=i;return e.concat(i)}),e)}),[]),i})).catch((function(e){if(e&&e.ucode==n.errorCodes.NO_MATCHING_IDENTITY)return T(i),i;throw e}))},I=function(e,t,i,a,o,r){function s(e,t){return e+"-"+t}var d=!0,u=i?i.reduce((function(e,t){var i=s(t.pubkey,t.cert_time?t.cert_time.block:t.sigDate);return t.cert_time||(d=!1),e[i]=t,e}),{}):{};return e({pubkey:t}).then((function(e){return(e&&e.certifications||[]).reduce((function(e,t){var i=!t.written,n=t.cert_time?t.cert_time.medianTime:null,r=n?i?n+a.sigWindow-o:n+a.sigValidity-o:0;r=r<0?0:r;var l=s(t.pubkey,d&&t.cert_time?t.cert_time.block:t.sigDate);return delete u[l],e.concat({pubkey:t.pubkey,uid:t.uid,time:n,isMember:t.isMember,wasMember:t.wasMember,expiresIn:r,willExpire:r&&r<=c.data.timeWarningExpire,pending:i,block:null!==t.written?t.written.number:t.cert_time?t.cert_time.block:null,valid:r>0})}),[])})).catch((function(e){if(e&&e.ucode==n.errorCodes.NO_MATCHING_MEMBER)return[];if(e&&1002==e.ucode)return console.warn("[wallet-service] Detecting Duniter issue #1309 ! Applying workaround... "),[];throw e})).then((function(e){var t=_.values(u);if(!t.length)return e;if(l.data.initPhase)return t.reduce((function(e,t){return e.concat({pubkey:t.pubkey,uid:t.uid,isMember:t.isMember,wasMember:t.wasMember,time:null,expiresIn:a.sigWindow,willExpire:!1,pending:!0,block:0,valid:!0})}),e);var i=t.reduce((function(e,t){var i=d&&t.cert_time?t.cert_time.block:t.sigDate?t.sigDate.split("-")[0]:null;return angular.isDefined(i)&&(e[i]?e[i].push(t):e[i]=[t]),e}),{});return n.blockchain.blocks(_.keys(i)).then((function(t){return e=t.reduce((function(e,t){return e.concat(i[t.number].reduce((function(e,i){var n=t.medianTime,s=Math.max(0,n+a.sigWindow-o),l=!i.cert_time||!i.cert_time.block_hash||i.cert_time.block_hash==t.hash;l||console.debug("[wot] Invalid cert {0}: block hash changed".format(i.pubkey.substring(0,8)));var u=s>0&&(!r||i.isMember)&&l;return e.concat({pubkey:i.pubkey,uid:i.uid,isMember:i.isMember,wasMember:i.wasMember,time:n,expiresIn:s,willExpire:s&&s<=c.data.timeWarningExpire,pending:!0,block:d&&i.cert_time?i.cert_time.block:i.sigDate?i.sigDate.split("-")[0]:null,valid:u})}),[]))}),e)}))})).then((function(e){var t=e.reduce((function(e,t){return!t.pending&&t.valid&&t.expiresIn>=a.sigWindow&&(e[t.pubkey]=!0),e}),{});e=function(e){return _.sortBy(e,(function(e){var t=1;return t+=1e12*(e.expiresIn?e.expiresIn:0),t+=1e7*(e.isMember?1:0),-(t+=10*(e.block?e.block:0))}))}(e);var i=[],n=[];return{valid:e.reduce((function(e,a){return a.pending?(a.valid&&!t[a.pubkey]?i.push(a):a.valid||t[a.pubkey]||n.push(a),e):e.concat(a)}),[]),pending:i,error:n}}))},O=function(e,i,a){var o;if(a=a||{},!e&&i&&!a.force)return n.wot.member.getByUid(i).then((function(t){if(t)return O(t.pubkey,t.uid,n);var n=angular.copy(n||{});return n.force=!0,O(e,i,n)}));if(e){if((o=!1!==a.cache?E.get(e):null)&&(!i||o.uid===i)&&(!a.blockUid||o.blockUid===a.blockUid))return console.debug("[wot] Identity {{0}} found in cache".format(e.substring(0,8))),t.when(o);console.debug("[wot] Loading identity {{0}}...".format(e.substring(0,8))),o={pubkey:e,uid:i}}else console.debug("[wot] Loading identity from uid {{0}}...".format(i)),o={uid:i};a.blockUid&&(o.blockUid=a.blockUid);var r,s,c=Date.now();return t.all([l.parameters().then((function(e){r=e})),l.blockchain.current(!0).then((function(e){s=e.medianTime})).catch((function(e){if(!e||e.ucode!=n.errorCodes.NO_CURRENT_BLOCK)throw e;s=moment.utc().unix()})),N(o,!1!==a.cache),h(e,i)]).then((function(e){var i=e[3];if(!o.requirements.uid)return console.debug("[wot] No requirements found: using data from lookup"),angular.merge(o,i),void delete o.lookup;var a=o.requirements.uid+"-"+o.requirements.meta.timestamp;return t.all([I(n.wot.certifiersOf,o.pubkey,i.lookup?i.lookup.certifications[a]:null,r,s,!0).then((function(e){o.received_cert=e.valid,o.received_cert_pending=e.pending,o.received_cert_error=e.error})),I(n.wot.certifiedBy,o.pubkey,i.lookup?i.lookup.givenCertifications:null,r,s,!1).then((function(e){o.given_cert=e.valid,o.given_cert_pending=e.pending,o.given_cert_error=e.error}))])})).then((function(){return o.requirements.pendingCertificationCount=o.received_cert_pending?o.received_cert_pending.length:o.requirements.pendingCertificationCount,o.requirements.revoked=angular.isDefined(o.requirements.revoked)?o.requirements.revoked:o.revoked,function(e){e.requirements.revoked?(delete e.requirements.meta.invalid,e.requirements.revoked_on?(S(e,{type:"error",message:"ERROR.IDENTITY_REVOKED_WITH_TIME",messageParams:{revocationTime:e.requirements.revoked_on}}),console.debug("[wot] Identity [{0}] has been revoked on {1}".format(e.uid,e.requirements.revoked_on))):(S(e,{type:"error",message:"ERROR.IDENTITY_REVOKED"}),console.debug("[wot] Identity [{0}] has been revoked".format(e.uid)))):e.requirements.pendingRevocation?(delete e.requirements.meta.invalid,S(e,{type:"error",message:"ERROR.IDENTITY_PENDING_REVOCATION"}),console.debug("[wot] Identity [{0}] has pending revocation".format(e.uid))):e.requirements.meta&&e.requirements.meta.invalid?e.isMember||(S(e,{type:"error",message:"ERROR.IDENTITY_INVALID_BLOCK_HASH"}),console.debug("[wot] Invalid membership for uid {0}: block hash changed".format(e.uid))):e.requirements.expired?(S(e,{type:"error",message:"ERROR.IDENTITY_EXPIRED"}),console.debug("[wot] Identity {0} expired (in sandbox)".format(e.uid))):e.requirements.willNeedCertificationCount>0?(S(e,{type:"error",message:"INFO.IDENTITY_WILL_MISSING_CERTIFICATIONS",messageParams:e.requirements}),console.debug("[wot] Identity {0} will need {1} certification(s)".format(e.uid,e.requirements.willNeedCertificationCount))):!e.requirements.needSelf&&e.requirements.needMembership&&(S(e,{type:"error",message:"INFO.IDENTITY_NEED_MEMBERSHIP"}),console.debug("[wot] Identity {0} has a self but no membership".format(e.uid))),!e.isMember&&e.requirements.alternatives&&S(e,{type:"info",message:"INFO.HAS_ALTERNATIVE_IDENTITIES"})}(o),u.data.raisePromise.load(o).catch((function(e){console.debug("Error while loading identity data, on extension point."),console.error(e)}))})).then((function(){if(o.pubkey)return E.put(o.pubkey,o),console.debug("[wot] Identity "+o.pubkey.substring(0,8)+" loaded in "+(Date.now()-c)+"ms"),o}))},v=function(e,i){if(!e||e.trim()!==e)return t.when(void 0);var a=e.replace(/(^|\s)#\w+/g,"");return a=(a=a.replace(/[^a-zA-Z0-9_-\s]+/g,"")).replace(/\s+/g," ").trim(),(i=i||{}).addUniqueId=!angular.isDefined(i.addUniqueId)||i.addUniqueId,i.allowExtension=!angular.isDefined(i.allowExtension)||i.allowExtension,i.excludeRevoked=!!angular.isDefined(i.excludeRevoked)&&i.excludeRevoked,(a?t.all(a.split(" ").reduce((function(e,t){return console.debug("[wot] Will search on: '"+t+"'"),e.concat(n.wot.lookup({search:t}))}),[])).then((function(e){return e.reduce((function(e,t){return e.concat(t.results.reduce((function(e,t){return e.concat(t.uids.reduce((function(e,n){var a=n.meta.timestamp.split("-",2),o=!n.revoked&&n.revocation_sig;return i.excludeRevoked&&o?e:e.concat({uid:n.uid,pubkey:t.pubkey,number:a[0],hash:a[1],revoked:o})}),[]))}),[]))}),[])})).catch((function(e){if(e&&e.ucode==n.errorCodes.NO_MATCHING_IDENTITY)return[];throw e})):t.when([])).then((function(t){if(!i.allowExtension)return i.addUniqueId?p(t):t;var a=t.length;return u.data.raisePromise.search(e,t,"pubkey").then((function(){if(t.length>a&&_.filter(t,(function(e){return!e.uid&&e.pubkey})).length)return n.wot.member.uids().then((function(e){_.forEach(t,(function(t){!t.uid&&t.pubkey&&(t.uid=e[t.pubkey])}))}))})).then((function(){return i.addUniqueId?p(t):t}))}))},R=function(e,a,o,r){return t((function(s,l){var c=[],d=[];_.each(e.slice(a,a+o),(function(e){d.push(n.blockchain.block({block:e}).then((function(e){e&&e.joiners&&_.each(e.joiners,(function(t){var i=t.split(":"),n=i[i.length-1]+"-"+i[0];c.push({id:n,uid:i[i.length-1],pubkey:i[0],memberDate:e.medianTime,block:e.number})}))})))})),t.all(d).then((function(){c.length<r&&a<e.length-1?i((function(){R(e,a+o,o,r-c.length).then((function(e){s(c.concat(e))})).catch((function(e){l(e)}))}),1e3):s(c)})).catch((function(e){e&&e.ucode===n.errorCodes.HTTP_LIMITATION?s(c):l(e)}))}))},A=function(e,a,o){return t((function(r,s){var l=[],c={},d=[];_.each(e.slice(a,a+o),(function(e){d.push(v(e,{addUniqueId:!1,allowExtension:!1}).then((function(e){e&&e.length&&(l=e.reduce((function(e,t){return c[t.pubkey]?e:(c[t.pubkey]=!0,e.concat(t))}),l))})))})),t.all(d).then((function(){a<e.length-1?i((function(){A(e,a+o,o).then((function(e){e&&e.length?r(e.reduce((function(e,t){return c[t.pubkey]?e:(c[t.pubkey]=!0,e.concat(t))}),l)):r(l)})).catch((function(e){s(e)}))}),n.constants.LIMIT_REQUEST_DELAY):r(l)})).catch((function(e){e&&e.ucode===n.errorCodes.HTTP_LIMITATION?r(l):s(e)}))}))},C=function(e,i,a){i=i||"pubkey";var o=[];return a||o.push(n.wot.member.uids()),o.push(u.data.raisePromise.search(null,e,i).catch((function(e){console.debug("Error while search identities, on extension point."),console.error(e)}))),t.all(o).then((function(t){if(!a){var n=t[0];_.forEach(e,(function(e){!e.uid&&e[i]&&(e.uid=n[e[i]],e.uid&&e.uid==e.name&&delete e.name)}))}return e}))},S=function(e,t){(t=t||{}).type=t.type||"info",t.message=t.message||"",t.messageParams=t.messageParams||{},e.events=e.events||[],e.events.push(t)};return u.registerEvent("data","load"),u.registerEvent("data","search"),n.api.node.on.stop(e,(function(){console.debug("[wot] Cleaning cache..."),d.clear("csWot-")}),this),{load:O,loadRequirements:N,search:v,newcomers:function(e,i){var a;return e=e||0,i=i||20,t.all([l.blockchain.current(!0).then((function(e){a=e.membersCount||0})),n.blockchain.stats.newcomers()]).then((function(t){if(!((t=t[1])&&t.result&&t.result.blocks&&t.result.blocks.length))return null;var n=_.sortBy(t.result.blocks,(function(e){return-e}));return R(n,0,5,e+i)})).then((function(t){return t&&t.length?(t=b(t,e,i),C(t,"pubkey",!0)):null})).then((function(e){return{hits:e,total:a}}))},pending:function(e,i){e=e||0,i=i||20;var a=Date.now();return t.all([n.wot.member.uids(),n.wot.member.pending().then((function(e){return e.memberships&&e.memberships.length?e.memberships:void 0}))]).then((function(o){var r=o[0],s=o[1];if(s){var l={},c={};_.forEach(s,(function(e){if("IN"==e.membership&&!r[e.pubkey]){var t={uid:e.uid,pubkey:e.pubkey,block:e.blockNumber,blockHash:e.blockHash},i=c[e.pubkey];if(i&&t.block>i.block)return;c[t.pubkey]=t,l[t.block]?l[t.block].push(t):l[t.block]=[t],i&&(l[i.block]=l[i.block].reduce((function(e,t){return t.pubkey==i.pubkey?e:(e||[]).concat(t)}),null),null===l[i.block]&&delete l[i.block])}}));var d=_.values(c),u=d.length,E=(d=b(d,e,i)).reduce((function(e,t){return e.concat(t.block)}),[]);return t.all([n.blockchain.blocks(_.uniq(E)).then((function(e){_.forEach(e,(function(e){_.forEach(l[e.number],(function(t){t.sigDate=e.medianTime,0!==e.number&&t.blockHash!==e.hash&&(S(t,{type:"error",message:"ERROR.WOT_PENDING_INVALID_BLOCK_HASH"}),console.debug("Invalid membership for uid={0}: block hash changed".format(t.uid)))}))}))})),C(d,"pubkey",!0)]).then((function(){return console.debug("[ES] [wot] Loaded {0}/{1} pending identities in {2} ms".format(d&&d.length||0,u,Date.now()-a)),{hits:d,total:u}}))}}))},all:function(){return A(["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","u","v","w","x","y","z"],0,n.constants.LIMIT_REQUEST_COUNT).then((function(e){return C(e,"pubkey",!0)})).then(p).then((function(){return{hits:idties,total:idties.length}}))},extend:function(e,t,i){return C([e],t,i).then((function(e){return e[0]}))},extendAll:C,api:u}}]),angular.module("cesium.tx.services",["ngApi","cesium.bma.services","cesium.settings.services","cesium.wot.services"]).factory("csTx",["$q","$timeout","$filter","$translate","FileSaver","UIUtils","BMA","Api","csConfig","csSettings","csWot","csCurrency",function(e,t,i,n,a,o,r,s,l,c,d,u){var E=new s(this,"csTx");function m(e,t,i,n,a){t&&t.length&&_.forEach(t,(function(t){if(null!==t.block_number||a){var o,s,l=!1,c=t.issuers.reduce((function(t,i){return l=l||i===e,i!==e?t.concat(i):t}),[]),d=[],u=[],E=t.outputs.reduce((function(i,n,a){var E="string"==typeof n?n.split(":",3):[n.amount,n.base,n.conditions];o=parseInt(E[1]);var m=b(parseInt(E[0]),o),p=E[2],T=r.regexp.TX_OUTPUT_SIG.exec(p);if(T){var f=T[1];if(f===e){if(!l)return i+m;null===t.block_number&&u.push({amount:parseInt(E[0]),base:o,type:"T",identifier:t.hash,noffset:a,consumed:!1,conditions:p})}else if(""===f||_.contains(c,f)||d.push(f),l)return i-m}else if(-1!==p.indexOf("SIG("+e+")")){var g=r.tx.parseUnlockCondition(p);if(g)return u.push(angular.merge({amount:parseInt(E[0]),base:o,type:"T",identifier:t.hash,noffset:a,conditions:p,consumed:!1},g)),g.amount=m,(s=s||[]).push(g),console.debug("[tx] has locked output:",g),i+m}return i}),0),m=E>0?c:d,p=t.time||t.blockstampTime,T=0!==E&&E+":"+t.hash+":"+p;if(T&&!n[T]){n[T]=!0;var f={time:p,amount:E,pubkey:1===m.length?m[0]:void 0,pubkeys:m.length>1?m:void 0,comment:t.comment,isUD:!1,hash:t.hash,locktime:t.locktime,block_number:t.block_number};l&&null===t.block_number&&(f.inputs=t.inputs,f.sources=u),s&&(f.lockedOutputs=s),i.push(f)}}}))}function p(t,i){return e((function(n,a){var o=moment().utc().unix();i=i||o-c.data.walletHistoryTimeSecond;var s={pendings:[],validating:[],history:[],errors:[]},l={},d=[u.blockchain.current(!0),r.tx.history.pending({pubkey:t}).then((function(e){m(t,e.history.sending,s.pendings,l,!0),m(t,e.history.pending,s.pendings,l,!0)}))];if("pending"!==i){var p=function(e){m(t,e.history.sent,s.history,l,!1),m(t,e.history.received,s.history,l,!1)};if(i>0){for(var b=c.data.walletHistorySliceSecond,T=i-=i%b;T-b<o;T+=b)d.push(r.tx.history.times({pubkey:t,from:T,to:T+b-1},!0).then(p));d.push(r.tx.history.times({pubkey:t,from:o-o%b,to:o+999999999},!1).then(p))}else d.push(r.tx.history.all({pubkey:t}).then(p));c.data.showUDHistory&&i>0&&d.push(E.data.raisePromise.loadUDs({pubkey:t,fromTime:i}).then((function(e){e&&e.length&&_.forEach(e,(function(e){s.history.push(e)}))})).catch((function(e){console.debug("Error while loading UDs history, on extension point."),console.error(e)})))}e.all(d).then((function(e){var t=e[0];s.history.sort((function(e,t){return t.time-e.time}));var a=_.findIndex(s.history,(function(e){return e.block_number<=t.number-c.data.blockValidityWindow}));s.validating=a>0?s.history.splice(0,a):[],s.fromTime="pending"!==i&&i||void 0,s.toTime=s.history.length?s.history[0].time:s.fromTime,n(s)})).catch(a)}))}function b(e,t){return t<=0?e:e*Math.pow(10,t)}function T(e,t){_(t).forEach((function(t){!function(e,t,i){var n=e.type+":"+e.identifier+":"+e.noffset;angular.isUndefined(i[n])&&(t.push(e),i[n]=t.length-1)}(t,e.sources,e.sourcesIndexByKey)}))}function f(e){return r.tx.sources({pubkey:e}).then((function(e){var t={sources:[],sourcesIndexByKey:[],balance:0};return e.sources&&e.sources.length&&(_.forEach(e.sources,(function(e){e.consumed=!1,t.balance+=b(e.amount,e.base)})),T(t,e.sources)),t})).catch((function(e){throw console.warn("[tx] Error while getting sources...",e),e}))}function g(i,n){var a,r=Date.now();return t((function(){a||o.loading.update({template:"COMMON.LOADING_WAIT"})}),2e3),e.all([f(i),p(i,n)]).then((function(e){(a=e[0]).tx=e[1];var t=[],i=[],n=a.balance,o=a.balance;function s(e){var n=[],r=!0;e.amount>0?r=!1:(_.find(e.inputs,(function(e){var t=e.split(":").slice(2).join(":"),i=a.sourcesIndexByKey[t];if(!angular.isDefined(i))return r=!1,!0;n.push(a.sources[i])})),e.sources&&T(a,e.sources),delete e.sources,delete e.inputs),r?(o+=e.amount,t.push(e),_.forEach(n,(function(e){e.consumed=!0}))):i.push(e)}for(var l=a.tx.pendings,c=!0;l&&l.length;)_.forEach(l,s),i.length>0&&t.length>0&&c?(l=i,i=[],c=!1):l=null;a.tx=a.tx||{},a.tx.pendings=t.sort((function(e,t){return t.time-e.time})),a.tx.errors=i.sort((function(e,t){return t.time-e.time})),a.balance=o<0?n:o;var u=(a.tx.history||[]).concat(a.tx.validating||[],a.tx.pendings||[],a.tx.errors||[]);return d.extendAll(u,"pubkey").then((function(){return console.debug("[tx] TX and sources loaded in "+(Date.now()-r)+"ms"),a}))})).catch((function(e){throw console.warn("[tx] Error while getting sources and tx...",e),e}))}return E.registerEvent("data","loadUDs"),{load:g,loadSources:function(e){return console.debug("[tx] Loading sources for "+e.substring(0,8)),g(e,"pending")},downloadHistoryFile:function(t,r){return(r=r||{}).fromTime=r.fromTime||-1,console.debug("[tx] Exporting TX history for pubkey [{0}]".format(t.substr(0,8))),e.all([n(["ACCOUNT.HEADERS.TIME","COMMON.UID","COMMON.PUBKEY","COMMON.UNIVERSAL_DIVIDEND","ACCOUNT.HEADERS.AMOUNT","ACCOUNT.HEADERS.COMMENT"]),u.blockchain.current(!0),g(t,r.fromTime)]).then((function(e){var r=e[0],s=e[1],l=s&&s.medianTime||moment().utc().unix(),c=s&&s.currency,d=e[2];return d&&d.tx&&d.tx.history?n("ACCOUNT.FILE_NAME",{currency:c,pubkey:t,currentTime:l}).then((function(e){var t=i("formatDecimal"),n=i("medianDate"),o=i("currencySymbolNoHtml"),s=[r["ACCOUNT.HEADERS.TIME"],r["COMMON.UID"],r["COMMON.PUBKEY"],r["ACCOUNT.HEADERS.AMOUNT"]+" ("+o(c)+")",r["ACCOUNT.HEADERS.COMMENT"]],l=d.tx.history.concat(d.tx.validating).reduce((function(e,i){return e.concat([n(i.time),i.uid,i.pubkey,t(i.amount/100),'"'+(i.isUD?r["COMMON.UNIVERSAL_DIVIDEND"]:i.comment)+'"'].join(";")+"\n")}),[s.join(";")+"\n"]),u=new Blob(l,{type:"text/plain; charset=utf-8"});a.saveAs(u,e)})):o.toast.show("INFO.EMPTY_TX_HISTORY")}))},api:E}}]),angular.module("cesium.wallet.services",["ngApi","ngFileSaver","cesium.bma.services","cesium.crypto.services","cesium.utils.services","cesium.settings.services"]).factory("csWallet",["$q","$rootScope","$timeout","$translate","$filter","$ionicHistory","UIUtils","Api","Idle","localStorage","sessionStorage","Modals","CryptoUtils","csCrypto","BMA","csConfig","csSettings","FileSaver","Blob","csWot","csTx","csCurrency",function(e,t,n,a,o,r,s,l,c,d,u,E,m,p,b,T,f,g,N,h,I,O){var v,R=b;function A(b,A){var C,S,L,D,y,P,k=(A=A||R).constants.PROTOCOL_VERSION,M=A.constants.PROTOCOL_VERSION,U=A.constants.PROTOCOL_VERSION,w=A.constants.PROTOCOL_VERSION,B=A.constants.PROTOCOL_VERSION,H={},F=!1,x=new l(this,"csWallet-"+b),W=function(e){H.loaded=!1,H.pubkey=null,H.qrcode=null,H.uid=null,H.localName=null,H.isNew=null,H.sourcesIndexByKey=null,H.medianTime=null,H.requirements={},H.blockUid=null,H.sigDate=null,H.sigStock=null,H.isMember=!1,H.events=[],H.children=[],H.encryptedData=null,Y(),V(),D=!1,y=void 0,e?x.data.raise.init(H):(G()&&S&&!S.useLocalStorage&&f.reset(),x.data.raise.reset(H))},Y=function(){H.keypair={signSk:null,signPk:null}},V=function(){H.sources=void 0,H.sourcesIndexByKey=void 0,H.balance=0,H.tx=H.tx||{},H.tx.history=[],H.tx.pendings=[],H.tx.validating=[],H.tx.errors=[],delete H.tx.fromTime,delete H.tx.toTime},G=function(){return"default"===b},K=function(){return H.encryptedData&&H.encryptedData.nonce&&H.encryptedData.content},z=function(e){H.sources=H.sources||[],H.sourcesIndexByKey=H.sourcesIndexByKey||{},_(e).forEach((function(e){!function(e,t,i){var n=e.type+":"+e.identifier+":"+e.noffset;angular.isUndefined(i[n])&&(e.conditions||console.warn("Trying to add a source without output condition !",e),t.push(e),i[n]=t.length-1)}(e,H.sources,H.sourcesIndexByKey)}))},j=function(t){if(!D)return(y||Ye()).then((function(){return j(t)}));var i=!X(),a=t&&(t.auth&&!J()||t.forceAuth);if(!i&&!a)return ee(t)?e.when(H):pe(t);var o,r=f.data.keepAuthIdle>0;return(t&&t.authData?e.when(t.authData):E.showLogin(t)).then((function(e){if(!e||!e.pubkey||!i&&e.pubkey!==H.pubkey||a&&(!e.keypair||!e.keypair.signPk||!e.keypair.signSk))throw"CANCELLED";if(o=e,H.pubkey=o.pubkey,H.uid=o.uid||H.uid,H.isNew=t&&angular.isDefined(t.isNew)?t.isNew:H.isNew,r&&(H.keypair=o.keypair||{signSk:null,signPk:null}),i)return x.data.raisePromise.loginCheck(H).catch((function(e){throw W(),e})).then((function(){if(i)return x.data.raisePromise.login(H).catch((function(e){console.warn("Error during extension call [wallet.api.data.on.login]",e)}))}))})).then((function(){return i?se():a?Ue():void 0})).then((function(){if(i&&ne(),a||J())return we(!0),x.data.raisePromise.auth(r?H:o)})).then((function(){var e=!i&&t&&t.minData?{minData:!0}:void 0;if(!ee(e))return pe(e)})).then((function(){return t&&t.silent?s.loading.hide(10):s.loading.hide(1e3),r?H:angular.merge({},H,o)})).catch((function(e){if(!("RETRY"!==e||t&&t.authData))return n((function(){return j(t)}),300);throw e}))},q=function(){var t=J();return e((function(e,i){var n=H.pubkey;W(),ae(n),x.data.raise.logout(),t&&x.data.raise.unauth(),we(!1),r.clearCache(),e()}))},X=function(){return!!H.pubkey},$=function(t){return D?T.readonly||T.demo?s.alert.demo().then((function(){throw"CANCELLED"})):!J()||t&&t.forceAuth?((t=t||{}).expectedPubkey=X()&&H.pubkey,t.auth=!0,j(t)):e.when(H):(y||Ye()).then((function(){return $(t)}))},Q=function(){return e((function(e,t){Y(),ne(),x.data.raise.unauth(),we(!1),r.clearCache(),e()}))},J=function(){return H.pubkey&&H.keypair&&H.keypair.signSk&&!0},Z=function(t){return D?J()?e.when(H.keypair):((t=t||{}).silent=!angular.isDefined(t.silent)||t.silent,$(t).then((function(){return H.keypair}))):(y||Ye()).then((function(){return Z(t)}))},ee=function(e){if(e){if(e.minData&&!e.sources)return H.loaded&&!0;if(e.requirements&&!H.requirements.loaded)return!1;if(e.tx&&e.tx.enable&&(!H.tx.fromTime||"pending"===H.tx.fromTime))return!1;if(e.sigStock&&!H.sigStock)return!1}return H.loaded&&H.sources&&!0},te=function(){if(H.loaded)return!H.pubkey||!(H.isMember||H.requirements.pendingMembership||H.requirements.revoked||!H.requirements.needSelf||H.requirements.wasMember||H.sources&&H.sources.length>0||H.tx.history.length>0||H.tx.validating.length>0||H.tx.pendings.length>0||H.localName||H.name||H.avatar)},ie=function(){return!!H.isNew},ne=function(t){if(t=t&&"string"==typeof t?t:H.pubkey,S&&S.useLocalStorage){if(X()&&S.rememberMe){var i=Date.now();console.debug("[wallet] Storing...");var n=[];return S.keepAuthIdle==f.constants.KEEP_AUTH_IDLE_SESSION&&J()?n.push(u.put("seckey",m.util.encode_base58(H.keypair.signSk))):n.push(u.put("seckey",null)),n.push(d.put("pubkey",H.pubkey)),H.uid?n.push(d.put("uid",H.uid)):n.push(d.put("uid",null)),e.all(n).then((function(){console.debug("[wallet] Stored in "+(Date.now()-i)+"ms")}))}return e.all([u.put("seckey",null),d.put("pubkey",null),d.put("uid",null),t?u.put("data-"+t,null):e.when()])}return e.all([u.put("seckey",null),d.put("pubkey",null),d.put("uid",null),t?u.put("data-"+t,null):e.when(),t?d.put("data-"+t,null):e.when()])},ae=function(t){return console.debug("[wallet] Resetting stored pubkey (and uid) in local storage..."),u.put("seckey",null),d.put("pubkey",null),d.put("uid",null),S&&S.useLocalStorage?t?u.put("data-"+t,null):e.when():(console.debug("[wallet] Resetting stored data in local storage..."),e.all([t?u.put("data-"+t,null):e.when(),t?d.put("data-"+t,null):e.when()]))},oe=function(){if(!X())throw{message:"ERROR.NEED_LOGIN_FIRST"};var t,i,n=S&&S.useLocalStorageEncryption,a="data-"+H.pubkey;H.notifications&&H.notifications.time&&((t=t||{}).notifications={time:H.notifications.time}),H.invitations&&H.invitations.time&&((t=t||{}).invitations={time:H.invitations.time}),H.children&&H.children.length&&((t=t||{}).childrenCount=H.children.length,(i=i||{}).children=_.map(H.children,(function(e){return{pubkey:e.data.pubkey,uid:e.data.uid,localName:e.data.localName}})));var o=(t||i)&&JSON.stringify(angular.merge({},t||{},i||{}));return n&&i?J()?e.all([m.util.random_nonce(),m.box.keypair.fromSignKeypair(H.keypair),u.put(a,o||null)]).then((function(e){var n=e[0],o=e[1];return m.box.pack(JSON.stringify(i),n,o.boxPk,o.boxSk).then((function(e){return t=angular.merge(t||{},{encryptedData:{nonce:m.util.encode_base58(n),content:e}}),d.put(a,JSON.stringify(t))}))})):u.put(a,o||null):e.all([u.put(a,null),d.put(a,o||null)])},re=function(){return e.all([u.get("seckey"),d.get("pubkey"),d.get("uid")]).then((function(e){var t=e[0],i=e[1],n=e[2];if(i&&"null"!=i){var a;if(console.debug("[wallet] Restore {"+i.substring(0,8)+"} from local storage"),t&&t.length&&"null"!=t)try{a={signPk:m.util.decode_base58(i),signSk:m.util.decode_base58(t)}}catch(e){console.warn("[wallet] Secret key restoration failed: ",e),a=void 0}return H.pubkey=i,H.uid=n&&"null"!=n?n:void 0,H.keypair=a||{signPk:void 0,signSk:void 0},se()}})).then((function(){return J()?e.all([x.data.raisePromise.login(H),we(!0),x.data.raisePromise.auth(H)]).catch((function(e){console.warn("Error during extension call [wallet.api.data.on.auth]",e)})):X()?x.data.raisePromise.login(H).catch((function(e){console.warn("Error during extension call [wallet.api.data.on.login]",e)})):void 0})).then((function(){return H}))},se=function(){if(!X())throw{message:"ERROR.NEED_LOGIN_FIRST"};return ie()?e.when(H):e.all([u.getObject("data-"+H.pubkey),d.getObject("data-"+H.pubkey)]).then((function(e){var t=e[0],i=e[1];return t&&t.children&&t.children.length===i.childrenCount?le(t).catch((function(e){return console.error("[wallet] Failed to restore from the session storage ! Retrying from the local storage...",e),le(i)})):le(i)}))},le=function(t){if(!t)return e.when();if(t.children){var i=H.childrenCount,n=ye({stop:!1,store:!1});try{var a={};_.forEach(t.children,(function(e){if(!a[e.pubkey]){a[e.pubkey]=!0;var t=ke();t.data.pubkey=e.pubkey,t.data.localName=e.localName,t.data.uid=e.uid,De(t,{store:!1})}})),delete t.children,delete H.childrenCount}catch(t){return console.error("[wallet] Failed to restore children wallet.",t),H.childrenCount=i,H.children=n,e.reject({message:"ERROR.RESTORE_WALLET_LIST_FAILED"})}_.forEach(n||[],(function(e){e.stop()}))}return delete t.pubkey,delete t.uid,angular.merge(H,t),K()&&J()?Ue({store:!1}).then((function(){return H})):e.when(H)},ce=function(e,t){return Le("requirements"),h.loadRequirements(H,e).catch((function(i){if(!t)return console.error("[wallet] Unable to load requirements (first try): {0}. Retrying once...".format(i&&i.message||i),i),s.loading.update({template:"COMMON.LOADING_WAIT"}),ce(e,!0);throw console.error("[wallet] Unable to load requirements (after a second try): {0}".format(i&&i.message||i),i),i}))},de=function(e){return I.load(H.pubkey,e).then((function(e){V(),angular.merge(H,e)})).catch((function(e){throw V(),e}))},ue=function(){H.requirements.revoked?(delete H.requirements.meta.invalid,Ae({type:"info",message:"ERROR.WALLET_REVOKED",context:"requirements"})):H.requirements.pendingRevocation?(delete H.requirements.meta.invalid,Ae({type:"pending",message:"INFO.REVOCATION_SENT_WAITING_PROCESS",context:"requirements"})):(!H.isMember&&H.requirements.meta&&H.requirements.meta.invalid?(Ae({type:"error",message:"ERROR.WALLET_INVALID_BLOCK_HASH",context:"requirements"}),console.debug("Invalid membership for uid={0}: block hash changed".format(H.uid))):!H.isMember&&H.requirements.expired?(Ae({type:"error",message:"ERROR.WALLET_IDENTITY_EXPIRED",context:"requirements"}),console.debug("Identity expired for uid={0}.".format(H.uid))):H.requirements.pendingMembership?(Ae({type:"pending",message:"ACCOUNT.WAITING_MEMBERSHIP",context:"requirements"}),!H.requirements.needCertificationCount&&H.requirements.outdistanced&&Ae({type:"warn",message:"ACCOUNT.OUT_DISTANCED",context:"requirements"})):!H.requirements.needSelf&&H.requirements.needMembership&&Ae({type:"warn",message:"ACCOUNT.NO_WAITING_MEMBERSHIP",context:"requirements"}),H.requirements.needRenew?H.isMember&&H.requirements.membershipExpiresIn>0?Ae({type:"warn",message:"ACCOUNT.WILL_NEED_RENEW_MEMBERSHIP",messageParams:H.requirements,context:"requirements"}):!H.isMember&&H.requirements.membershipExpiresIn>0&&H.requirements.needCertificationCount>0?Ae({type:"warn",message:"ACCOUNT.NEED_RENEW_MEMBERSHIP_AFTER_CANCELLED",messageParams:H.requirements,context:"requirements"}):Ae({type:"warn",message:"ACCOUNT.NEED_RENEW_MEMBERSHIP",messageParams:H.requirements,context:"requirements"}):(H.requirements.needCertificationCount>0&&(Ae({type:"info",message:"ACCOUNT.WAITING_CERTIFICATIONS",messageParams:H.requirements,context:"requirements"}),H.requirements.wasMember||Ae({type:"help",message:"ACCOUNT.WAITING_CERTIFICATIONS_HELP",messageParams:H.requirements,context:"requirements"})),H.requirements.willNeedCertificationCount>0&&Ae({type:"warn",message:"ACCOUNT.WILL_MISSING_CERTIFICATIONS",messageParams:H.requirements,context:"requirements"}),H.requirements.wasMember&&H.requirements.needMembership&&Ae({type:"warn",message:"ACCOUNT.NEED_RENEW_MEMBERSHIP",messageParams:H.requirements,context:"requirements"}),H.requirements.needCertificationCount||H.requirements.willNeedCertificationCount||!H.requirements.outdistanced||Ae({type:"warn",message:"ACCOUNT.OUT_DISTANCED",context:"requirements"})))},Ee=function(){return A.wot.certifiedBy({pubkey:H.pubkey}).then((function(e){H.sigStock=e.certifications?e.certifications.reduce((function(e,t){return null===t.written?e:e+1}),0):0})).catch((function(e){if(e&&e.ucode==A.errorCodes.NO_MATCHING_MEMBER)H.sigStock=0;else{if(!e||1002!=e.ucode)throw e;console.warn("[wallet-service] Detecting Duniter issue #1309 ! Applying workaround... "),H.sigStock=0}}))},me=function(){return!H.pubkey||H.qrcode?e.when(H.qrcode):(console.debug("[wallet] Creating SVG QRCode..."),n((function(){return H.qrcode=s.qrcode.svg(H.pubkey),H.qrcode})))},pe=function(t){var i=!O.data.initPhase&&(!f.data.wallet||f.data.wallet.alertIfUnusedWallet)&&!H.loaded&&(!t||!t.minData||!t.silent);return P?P.then((function(){return ee(t)?H:_e(t)})):(P=t&&t.minData?Te(t):t||H.loaded?_e(t):be(),e.all([P,me()]).then((function(){var e=te();return!(i&&!ie()&&!0===e)||s.loading.hide().then((function(){return s.alert.confirm("CONFIRM.LOGIN_UNUSED_WALLET","CONFIRM.LOGIN_UNUSED_WALLET_TITLE",{cancelText:"COMMON.BTN_CONTINUE",okText:"COMMON.BTN_RETRY"})})).then((function(e){return e?q().then((function(){throw"RETRY"})):(f.data.wallet.alertIfUnusedWallet&&(f.data.wallet.alertIfUnusedWallet=!1,f.store()),!0)}))})).then((function(e){if(P=null,e)return H;throw"CANCELLED"})))},be=function(t){H.loaded=!1;var i=Date.now();return console.debug("[wallet] Loading {{0}} full data...".format(H.pubkey&&H.pubkey.substr(0,8))),e.all([ce(!0).then((function(e){if(e.requirements&&(e.requirements.isMember||e.requirements.wasMember))return Ee();e.sigStock=0})),de(t||"pending")]).then((function(){return ue(),x.data.raisePromise.load(H).catch((function(e){console.error("[wallet] Error during load API extension point. Try to continue",e)}))})).then((function(){return H.loaded=!0,console.debug("[wallet] Loaded {{0}} full data in {1}ms".format(H.pubkey&&H.pubkey.substr(0,8),Date.now()-i)),s.loading.hide(1e3),H})).catch((function(e){throw H.loaded=!1,e}))},Te=function(t){return(t=t||{}).requirements=angular.isDefined(t.requirements)?t.requirements:!H.requirements.loaded||angular.isUndefined(H.requirements.needSelf),t.requirements?_e(t).then((function(e){return e.loaded=!0,e})):e.when(H)},_e=function(t){(t=t||{requirements:!0,sources:!0,tx:{enable:!0,fromTime:H.tx&&"pending"!==H.tx.fromTime?H.tx.fromTime:void 0},sigStock:!0,api:!0}).requirements=angular.isDefined(t.requirements)?t.requirements:!H.requirements.loaded,angular.isUndefined(t.sources)&&t.tx&&t.tx.enable&&(t.sources=!0);var i=[],n=Date.now();return console.debug("[wallet] {0} {{1}} data, with options: ".format(H.loaded?"Refreshing":"Loading",H.pubkey.substr(0,8)),t),t.requirements&&(Le("requirements"),i.push(ce(!0).then(ue))),!t.sources||t.tx&&!t.tx.enable?t.sources&&t.tx&&!t.tx.enable&&i.push(de("pending")):i.push(de(t.tx?t.tx.fromTime:void 0)),t.sigStock&&i.push(Ee()),(i.length?e.all(i):e.when()).then((function(){return angular.isDefined(t.api)&&!t.api?H:x.data.raisePromise.load(H).then((function(){return console.debug("[wallet] {0} {{1}} data in {2}ms".format(H.loaded?"Refreshed":"Loaded",H.pubkey.substr(0,8),Date.now()-n)),H.loaded||(H.loaded=H.requirements.loaded&&H.sources&&!0),H}))})).catch((function(e){throw console.error("[wallet] Error while {0} data: {1}".format(H.loaded?"Refreshing":"Loading",e&&e.message||e),e),H.loaded=H.requirements.loaded&&H.sources&&!0,e}))},fe=function(t,i){return H.uid!=t||i&&H.blockUid!=i?H.loaded?(H.uid=t,H.blockUid=i,_e({requirements:!0,sigStock:!0}).then((function(){return ne({skipData:!0})}))):P?P.then((function(){return fe(t,i)})):e.when():e.when()},ge=function(e,t){var i=Math.pow(10,t);return e<i?0:Math.trunc(e/i)*i},Ne=function(e,t){return t<=0?e:e*Math.pow(10,t)},he=function(e,t,i){angular.isUndefined(i)&&(i=t);var n=0,a=[],o=i,r=i;if(_.find(H.sources||[],(function(t){return!t.consumed&&t.base===i&&A.regexp.TX_OUTPUT_SIG.exec(t.conditions)&&(n+=Ne(t.amount,t.base),a.push(t)),n>=e})),n<e&&i>0){var s=he(e-n,t,i-=1);s.amount>0&&(o=s.minBase,n+=s.amount,[].push.apply(a,s.sources))}return{minBase:o,maxBase:r,amount:n,sources:a}},Ie=function(t,i,r,l,c,d){return e.all([Z(),O.get(),d&&e.when(d)||O.blockchain.current(!0)]).then((function(e){var u=e[0],E=e[1];if(d=e[2],!A.regexp.PUBKEY.test(t))throw{message:"ERROR.INVALID_PUBKEY"};if(!A.regexp.COMMENT.test(r))throw{message:"ERROR.INVALID_COMMENT"};if(!X())throw{message:"ERROR.NEED_LOGIN_FIRST"};if(t===H.pubkey)throw{message:"ERROR.SAME_TX_RECIPIENT"};if(!i)throw{message:"ERROR.AMOUNT_REQUIRED"};if(i<=0)throw{message:"ERROR.AMOUNT_NEGATIVE"};i=Math.floor(i);var m={amount:0,minBase:d.unitbase,maxBase:d.unitbase+1,sources:[]},p=[];p.push("[wallet] amount="+i);for(var b=0;m.amount<i&&b<=d.unitbase;)(m=he(i,d.unitbase)).amount<i&&++b<=d.unitbase&&(i=ge(i,b),p.push("[wallet] inputs not found. Retrying with amount ="+i+" be compatible with amountBase="+b));if(m.amount<i){if(H.balance<i)throw{message:"ERROR.NOT_ENOUGH_CREDIT"};if(0===m.amount)throw{message:"ERROR.ALL_SOURCES_USED"};return a("COMMON.UD").then((function(e){var t;return t=l?{amount:o("formatDecimal")(m.amount/E.currentUD),unit:e,subUnit:o("abbreviate")(E.name)}:{amount:o("formatDecimal")(m.amount/100),unit:o("abbreviate")(E.name),subUnit:""},a("ERROR.NOT_ENOUGH_SOURCES",t).then((function(e){throw{message:e}}))}))}return b<m.minBase&&!function(e,t){if(!t)return!0;if(e<Math.pow(10,t))return!1;var i="00000000"+e;return 0===parseInt(i.substring(i.length-t))}(i,m.minBase)?(i=function(e,t){var i=Math.pow(10,t);return e<i?i:Math.trunc(e/i)*i}(i,m.minBase),console.debug("[wallet] Amount has been truncate to "+i),p.push("[wallet] Amount has been truncate to "+i)):b>0&&(console.debug("[wallet] Amount has been truncate to "+i),p.push("[wallet] Will use amount truncated to "+i+" (amountBase="+b+")")),Oe(E,d,u,t,i,m,r,c||H.pubkey,p).then((function(e){H.balance-=e.amount,H.balance<0&&(H.balance=0),_.forEach(m.sources,(function(e){e.consumed=!0})),e&&e.sources.length&&(console.debug("[wallet-service] New sources to be add after the TX: ",e.sources),z(e.sources));var n={time:O.date.now(),amount:-i,pubkey:t,comment:r,isUD:!1,hash:e.hash,locktime:0,block_number:null};return h.extendAll([n],"pubkey").then((function(){return H.tx.pendings.unshift(n),x.data.raise.balanceChanged(H),x.data.raise.newTx(H),{hash:e.hash}}))})).catch((function(e){if(e&&e.ucode===A.errorCodes.SOURCE_ALREADY_CONSUMED)return console.debug("[wallet] TX rejected by node with error [{0}]. Reloading sources then retry...".format(e.message||"Source already consumed")),n(de,500).then((function(){return Ie(t,i,r,l,c,d)}));if(e&&e.ucode===A.errorCodes.TX_INPUTS_OUTPUTS_NOT_EQUAL&&f.data.plugins&&f.data.plugins.es&&f.data.plugins.es.enable)return s.loading.hide(),s.alert.confirm("CONFIRM.ISSUE_524_SEND_LOG","ERROR.POPUP_TITLE",{cssClass:"warning",okText:"COMMON.BTN_OK",cancelText:"COMMON.BTN_NO"}).then((function(e){if(e)return x.error.raise.send({title:"Issue #524 logs",content:"App version: "+T.version+"\nApp build: "+T.build+"\nLogs:\n\n"+p.join("\n")}),n((function(){throw{message:"ERROR.ISSUE_524_TX_FAILED"}}),1500);throw{message:"ERROR.SEND_TX_FAILED"}}));throw e}))}))},Oe=function(e,t,n,a,o,r,s,l,c){if(r.sources.length>40){console.debug("[Wallet] TX has to many sources. Will chain TX...");var d={minBase:t.unitbase,maxBase:0,amount:0,sources:r.sources.slice(0,40)};return _.forEach(d.sources,(function(e){e.base<d.minBase&&(d.minBase=e.base),e.base>d.maxBase&&(d.maxBase=e.base),d.amount+=Ne(e.amount,e.base)})),Oe(e,t,n,H.pubkey,d.amount,d,void 0,H.pubkey,c).then((function(i){_.forEach(d.sources,(function(e){e.consumed=!0})),z(i.sources);var u={minBase:t.unitbase,maxBase:0,amount:0,sources:r.sources.slice(40).concat(i.sources)};return _.forEach(u.sources,(function(e){e.base<u.minBase&&(u.minBase=e.base),e.base>u.maxBase&&(u.maxBase=e.base),u.amount+=Ne(e.amount,e.base)})),Oe(e,t,n,a,o,u,s,l,c)}))}var u="Version: "+k+"\nType: Transaction\nCurrency: "+e.name+"\nBlockstamp: "+t.number+"-"+t.hash+"\nLocktime: 0\nIssuers:\n"+H.pubkey+"\nInputs:\n";for(_.forEach(r.sources,(function(e){u+=[e.amount,e.base,e.type,e.identifier,e.noffset].join(":")+"\n"})),u+="Unlocks:\n",i=0;i<r.sources.length;i++)u+=i+":SIG(0)\n";u+="Outputs:\n";var E,p=o,b=r.maxBase,T=0,f=[];if(a!==H.pubkey){for(;p>0;)p-=E=ge(p,b),E>0&&(E=0===b?E:E/Math.pow(10,b),u+=E+":"+b+":SIG("+a+")\n",T++),b--;p=r.amount-o,b=r.maxBase}for(;p>0;)p-=E=ge(p,b),E>0&&(E=0===b?E:E/Math.pow(10,b),u+=E+":"+b+":SIG("+l+")\n",H.pubkey===l&&f.push({type:"T",noffset:T,amount:E,base:b,conditions:"SIG("+l+")",consumed:!1}),T++),b--;return u+="Comment: "+(s||"")+"\n",c&&(a==H.pubkey?c.push("[wallet] Creating new TX, using inputs:\n - minBase: "+r.minBase+"\n - maxBase: "+r.maxBase):c.push("[wallet] Creating new TX, using inputs:\n - minBase: "+r.minBase+"\n - maxBase: "+r.maxBase+"\n - sources (=TX inputs):"),_.forEach(r.sources,(function(e){c.push([e.amount,e.base,e.type,e.identifier,e.noffset].join(":"))})),c.push("\n[wallet] generated TX document (without signature) :\n------ START ------\n"+u+"------ END ------\n")),m.sign(u,n).then((function(e){var t=u+e+"\n";return A.tx.process({transaction:t}).catch((function(e){if(!e||e.ucode!==A.errorCodes.TX_ALREADY_PROCESSED)throw e})).then((function(){return m.util.hash(t)})).then((function(e){return _.forEach(f,(function(t){t.identifier=e,t.consumed=!1,t.pending=!0})),{amount:H.pubkey===a?0:H.pubkey===l?o:r.amount,tx:t,hash:e,sources:f}}))}))},ve=function(e,t,i,n){if(i=i||H.uid,n=n||H.blockUid,!i||!n)throw{message:"ERROR.WALLET_HAS_NO_SELF"};if(H.requirements.expired)throw{message:"ERROR.WALLET_IDENTITY_EXPIRED"};var a="Version: "+M+"\nType: Identity\nCurrency: "+e.name+"\nIssuer: "+H.pubkey+"\nUniqueID: "+i+"\nTimestamp: "+n+"\n";return m.sign(a,t).then((function(e){return a+=e+"\n",console.debug("Has generate an identity document:\n----\n"+a+"----"),a}))},Re=function(t){return function(){var i;return e.all([Z(),O.blockchain.lastValid()]).then((function(e){var n=e[0],a=e[1];return i="Version: "+U+"\nType: Membership\nCurrency: "+a.currency+"\nIssuer: "+H.pubkey+"\nBlock: "+a.number+"-"+a.hash+"\nMembership: "+(t?"IN":"OUT")+"\nUserID: "+H.uid+"\nCertTS: "+H.blockUid+"\n",m.sign(i,n)})).then((function(e){var t=i+e+"\n";return A.blockchain.membership({membership:t})})).then((function(){return n((function(){return ce(!1)}),1e3)})).then(ue)}},Ae=function(e,t){(e=e||{}).type=e.type||"info",e.message=e.message||"",e.messageParams=e.messageParams||{},e.context=e.context||"undefined",e.message.trim().length?t?H.events.splice(0,0,e):H.events.push(e):console.debug("Event without message. Skipping this event")},Ce=function(e){var t=Math.round(e.answer.length/2),i=e.answer.substr(0,t),n=e.answer.substr(t);return m.scryptKeypair(i,n).then((function(t){return e.pubkey=m.util.encode_base58(t.signPk),e.keypair=t,e}))},Se=function(){return e.all([Z(),O.get()]).then((function(e){var t=e[0],i=e[1];return ve(i,t).then((function(e){var n=e.trim().split("\n"),a=n[n.length-1],o="Version: "+B+"\nType: Revocation\nCurrency: "+i.name+"\nIssuer: "+H.pubkey+"\nIdtyUniqueID: "+H.uid+"\nIdtyTimestamp: "+H.blockUid+"\nIdtySignature: "+a+"\n";return m.sign(o,t).then((function(e){return o+=e+"\n",console.debug("Has generate an revocation document:\n----\n"+o+"----"),o}))}))}))},Le=function(e){H.events=H.events.reduce((function(t,i){return i.context&&i.context==e?t:t.concat(i)}),[])},De=function(t,i){return t.children.setParent(C),H.children=H.children||[],H.children.push(t),!i||angular.isUndefined(i.store)||i.store?oe():e.when()},ye=function(e){e&&!e.stop||_.forEach(H.children||[],(function(e){e.stop()}));var t=H.children.splice(0,H.children.length);return!e||angular.isUndefined(e.store)||e.store?oe():t},Pe=function(e){return _.find(H.children||[],(function(t){return t.isUserPubkey(e)}))},ke=function(){var e=(H.children||[]).reduce((function(e,t){return Math.max(e,t.id)}),0)+1;return v.instance(e,A)},Me=function(){return Ue().then((function(){return H.children}))},Ue=function(t){return K()?J()?m.box.keypair.fromSignKeypair(H.keypair).then((function(e){var t=m.util.decode_base58(H.encryptedData.nonce);return m.box.open(H.encryptedData.content,t,e.boxPk,e.boxSk)})).then((function(e){H.encryptedData=null;var i=le(JSON.parse(e));return(!t||angular.isUndefined(t.store)||t.store)&&i.then((function(){return oe()})),i})):$().then(Ue):e.when()},we=function(e){var t=(e=angular.isDefined(e)?e:J())&&S&&S.keepAuthIdle>0&&S.keepAuthIdle!=f.constants.KEEP_AUTH_IDLE_SESSION,i=F!=t;i?(t?(console.debug("[wallet] Start idle (delay: {0}s)".format(S.keepAuthIdle)),c.setIdle(S.keepAuthIdle),c.watch()):F&&(console.debug("[wallet] Stop idle"),c.unwatch()),F=t):t&&c.getIdle()!==S.keepAuthIdle&&(console.debug("[idle] Updating auth idle (delay: {0}s)".format(S.keepAuthIdle)),c.setIdle(S.keepAuthIdle)),e&&S&&S.keepAuthIdle==f.constants.KEEP_AUTH_IDLE_SESSION?u.put("seckey",m.util.encode_base58(H.keypair.signSk)):i&&u.put("seckey",null)};function Be(e){return e&&{useLocalStorage:e.useLocalStorage,useLocalStorageEncryption:e.useLocalStorageEncryption,rememberMe:e.rememberMe,keepAuthIdle:e.keepAuthIdle}}function He(e){var t=Be(e);if(!angular.equals(S,t)&&S){var i=!angular.equals(S.useLocalStorageEncryption,t.useLocalStorageEncryption),n=!angular.equals(S.useLocalStorage,t.useLocalStorage)||i,a=!angular.equals(S.keepAuthIdle,t.keepAuthIdle);if(S=t,a&&we(),n){if(S.useLocalStorage)return ne().then((function(){if(H.childrenCount>0&&i&&S.useLocalStorageEncryption)return $({minData:!0,silent:!0}).catch((function(e){if("CANCELLED"===e)return f.apply({useLocalStorageEncryption:!1}),f.store();throw e}))})).then(oe);ae(H.pubkey)}}}function Fe(){_.forEach(L,(function(e){e()})),L=[]}function xe(){console.debug("[wallet] Stopping..."),Fe(),W()}function We(){return xe(),n(Ye,200)}function Ye(i){(i=i||{}).restore=angular.isDefined(i.restore)?i.restore:"default"===b,console.debug("[wallet] Starting...");var n=Date.now();return y=e.all([f.ready().then((function(){S=Be(f.data)})),O.ready(),A.ready()]),i.restore&&(y=y.then(re)),y.then((function(){!function(){L=[f.api.data.on.changed(t,He,this),A.api.node.on.restart(t,We,this)],t.$on("IdleStart",Q)}(),console.debug("[wallet] Started in "+(Date.now()-n)+"ms"),D=!0,y=null})).then((function(){return H})),y}return x.registerEvent("data","init"),x.registerEvent("data","loginCheck"),x.registerEvent("data","login"),x.registerEvent("data","auth"),x.registerEvent("data","unauth"),x.registerEvent("data","load"),x.registerEvent("data","logout"),x.registerEvent("data","reset"),x.registerEvent("data","store"),x.registerEvent("error","send"),x.registerEvent("data","balanceChanged"),x.registerEvent("data","newTx"),x.registerEvent("action","certify"),W(!0),"default"!==b&&(ne=e.when,re=e.when,se=e.when),C={id:b,data:H,ready:function(){return D?e.when():y||Ye()},start:Ye,stop:xe,login:j,logout:q,auth:$,unauth:Q,isLogin:X,isAuth:J,getKeypair:Z,hasSelf:function(){return!!H.pubkey&&!H.requirements.needSelf},setSelf:fe,isMember:function(){return H.isMember},isDataLoaded:ee,isDefault:G,isNeverUsed:te,isNew:ie,isUserPubkey:function(e){return X()&&H.pubkey===e},getData:function(){return H},loadData:pe,refreshData:_e,loadQrCode:me,internal:{addListener:function(e){(L=L||[]).push(e)},removeListeners:Fe},store:ne,storeData:oe,transfer:Ie,transferAll:function(t,i,n,a,o){return X()?o&&t!=o?O.blockchain.lastValid().then((function(e){return console.debug("[wallet] Using last valid block as TX reference (to avoid network fork): ",e),Ie(t,i,n,a,o,e).then((function(){if(H.balance>0&&o)return console.debug("[wallet] Wallet has some more money: transfering fund to [{0}]".format(o.substring(0,8))),Ie(o,H.balance,void 0,!1,o,e)}))})):e.reject({message:"Could not have same pubkey for 'destPub' and 'restPub'"}):e.reject({message:"ERROR.NEED_LOGIN_FIRST"})},self:function(t,i){return A.regexp.USER_ID.test(t)?e.all([Z(),O.get(),O.blockchain.lastValid()]).then((function(e){var i=e[0],a=e[1];return n=e[2],ve(a,i,t,n.number+"-"+n.hash)})).then((function(e){return A.wot.add({identity:e})})).then((function(){if(i)return ce(!1).then(ue);H.uid=t,H.blockUid=n.number+"-"+n.hash})).catch((function(e){if(e&&e.ucode===A.errorCodes.IDENTITY_SANDBOX_FULL)throw{ucode:A.errorCodes.IDENTITY_SANDBOX_FULL,message:"ERROR.IDENTITY_SANDBOX_FULL"};throw e})):e.reject({message:"ERROR.INVALID_USER_ID"});var n},revoke:function(){return Le("revocation"),Se().then((function(e){return A.wot.revoke({revocation:e})})).then((function(){return n((function(){return ce(!1)}),1e3)})).then(ue).catch((function(e){if(!e||e.ucode!=A.errorCodes.REVOCATION_ALREADY_REGISTERED)throw e;Ae({type:"pending",message:"INFO.REVOCATION_SENT_WAITING_PROCESS",context:"requirements"},!0)}))},revokeWithFile:function(t){return e.all([A.wot.revoke({revocation:t})]).then((function(e){if(X())return n((function(){return ce(!1)}),1e3).then(ue).catch((function(e){if(!e||e.ucode!=A.errorCodes.REVOCATION_ALREADY_REGISTERED)throw e;Ae({type:"pending",message:"INFO.REVOCATION_SENT_WAITING_PROCESS",context:"requirements"},!0)}));Ae({type:"pending",message:"INFO.REVOCATION_SENT_WAITING_PROCESS",context:"requirements"},!0)}))},certify:function(t,i,n,a,o,r){return e.all([Z(),O.get(),O.blockchain.lastValid()]).then((function(e){var s=e[0],l=e[1],c=e[2];if(!H.isMember&&!T.initPhase)throw{message:"ERROR.ONLY_MEMBER_CAN_EXECUTE_THIS_ACTION"};var d="Version: "+w+"\nType: Certification\nCurrency: "+l.name+"\nIssuer: "+H.pubkey+"\nIdtyIssuer: "+i+"\nIdtyUniqueID: "+t+"\nIdtyTimestamp: "+n+"\nIdtySignature: "+a+"\nCertTimestamp: "+c.number+"-"+c.hash+"\n";return m.sign(d,s).then((function(e){var t=d+e+"\n";return A.wot.certify({cert:t})})).then((function(){var e={pubkey:i,uid:t,time:c.medianTime,isMember:o,wasMember:r,expiresIn:l.parameters.sigWindow,pending:!0,block:c.number,valid:!0};return x.action.raise.certify(e),e}))}))},downloadSaveId:function(e){return function(e){var t="Version: 10 \nType: SaveID\nQuestions: \n"+e.questions+"Issuer: "+H.pubkey+"\nCrypted-Nonce: "+e.nonce+"\nCrypted-Pubkey: "+e.pubkey+"\nCrypted-Salt: "+e.salt+"\nCrypted-Pwd: "+e.pwd+"\n";return m.sign(t,H.keypair).then((function(e){return t+=e+"\n",console.debug("Has generate an SaveID document:\n----\n"+t+"----"),t}))}(e).then((function(e){var t=new N([e],{type:"text/plain; charset=utf-8"});g.saveAs(t,"{0}-recover_ID.txt".format(H.pubkey.substring(0,8)))}))},getCryptedId:function(t){return Ce(t).then(m.util.random_nonce).then((function(i){return t.nonce=m.util.encode_base58(i),e.all([m.box.pack(t.salt,i,t.keypair.boxPk,t.keypair.boxSk),m.box.pack(t.pwd,i,t.keypair.boxPk,t.keypair.boxSk)])})).then((function(e){return t.salt=e[0],t.pwd=e[1],t}))},recoverId:function(e){if(!(e&&e.cypherNonce&&e.cypherSalt&&e.cypherPwd))throw{message:"ERROR.INVALID_FILE_FORMAT"};var t=m.util.decode_base58(e.cypherNonce);return Ce(e).then((function(e){return m.box.open(e.cypherSalt,t,e.keypair.boxPk,e.keypair.boxSk)})).then((function(i){return e.salt=i,m.box.open(e.cypherPwd,t,e.keypair.boxPk,e.keypair.boxSk)})).then((function(t){return e.pwd=t,e})).catch((function(e){throw console.warn("Incorrect answers: unable to recover identifiers",e),new Error("Incorrect answers: unable to recover identifiers")}))},downloadRevocation:function(){return e.all([O.get(),Se()]).then((function(e){var t=e[0],i=e[1],n=new N([i],{type:"text/plain; charset=utf-8"});return a("ACCOUNT.SECURITY.REVOCATION_FILENAME",{uid:H.uid,currency:t.name,pubkey:H.pubkey}).then((function(e){g.saveAs(n,e)}))}))},downloadKeyFile:function(t){return J()?e.all([O.get(),p.keyfile.generateContent(H.keypair,{type:t,password:function(){return s.loading.hide(),E.showPassword({title:"ACCOUNT.SECURITY.KEYFILE.PASSWORD_POPUP.TITLE",subTitle:"ACCOUNT.SECURITY.KEYFILE.PASSWORD_POPUP.HELP"}).then((function(e){return s.loading.show(10).then((function(){return e}))}))}})]).then((function(e){var i=e[0],n=e[1];return a("ACCOUNT.SECURITY.KEYFILE_FILENAME",{currency:i.name,pubkey:H.pubkey,format:t}).then((function(e){var t=new N([n],{type:"text/plain; charset=utf-8"});g.saveAs(t,e)}))})):e.reject("user not authenticated")},pubkeys:function(){if(!H.pubkey)throw new Error("User not login!");return(H.children||[]).reduce((function(e,t){return t.data.pubkey?e.concat(t.data.pubkey):e}),[H.pubkey])},getByPubkey:function(e){if(!e)throw new Error("Missing 'pubkey' argument !");if(!H.pubkey)throw new Error("User not login!");return H.pubkey===e?C:Pe(e)},membership:{inside:Re(!0),out:Re(!1)},events:{add:Ae,cleanByContext:Le},children:{create:function(e){var t=ke();return De(t,e),t},add:De,remove:function(t,i){H.children=H.children||[];var n=_.findIndex(H.children,(function(e){return e.id===t}));if(-1===n)throw console.warn("[wallet] Unable to remove child wallet {{0}} (not found)".format(t)),new Error("Wallet with id {{0}} not found".format(t));return H.children.splice(n,1)[0].stop(),i&&!1===i.store?e.when():oe()},get:function(e){return"default"!==e&&_.find(H.children||[],(function(t){return t.id===+e}))||void 0},getByPubkey:Pe,all:Me,setParent:function(i){var n;L=L||[],_.forEach(["load","reset"],(function(a){n=x.data.on[a](t,(function(t,n){return n=n||e.defer(),i.api.data.raisePromise[a](t).then(n.resolve).catch(n.reject),n.promise}),this),L.push(n)})),n=i.api.data.on.unauth(t,(function(){J()&&Q()}),this),L.push(n)},count:function(){return angular.isDefined(H.childrenCount)?H.childrenCount:H.children&&H.children.length||0},hasPubkey:function(e){return!!Pe(e)},instance:ke,downloadFile:function(){return e.all([Me(),O.get()]).then((function(e){var t=e[0],i=e[1],n=(t||[]).reduce((function(e,t){return e+[t.data.pubkey,t.data.uid,t.data.localName||t.data.name].join("\t")+"\n"}),""),o=new N([n],{type:"text/plain; charset=utf-8"});return a("ACCOUNT.WALLET_LIST.EXPORT_FILENAME",{pubkey:H.pubkey,currency:i.name}).then((function(e){g.saveAs(o,e)}))}))}},api:x}}return(v=A("default",b)).instance=A,v}]),angular.module("cesium.help.services",[]).constant("csHelpConstants",{wallet:{stepCount:4}}).factory("csHelp",["$rootScope","csSettings","UIUtils","csHelpConstants","$controller",function(e,t,i,n,a){function o(o,r){if(o=angular.isDefined(o)?o:t.data.helptip.wallet,r=!!angular.isDefined(r)&&r,!(o<0||o>=n.wallet.stepCount)){var s=function(n,o){if(n||!e.tour&&t.data.helptip.enable&&!i.screen.isSmall()){var r=e.$new();return a("HelpTipCtrl",{$scope:r}),r}}(r);if(s)return s.tour=r,s.startWalletTour(o,!1).then((function(e){s.$destroy(),r||(t.data.helptip.wallet=e,t.store())}))}}return{wallet:{tour:function(){return o(0,!0)},helptip:o}}}]),angular.module("cesium.plugin.services",[]).provider("PluginService",(function(){var e=[],t={};this.registerEagerLoadingService=function(t){return e.push(t),this},this.extendState=function(e,i){return angular.isDefined(e)&&angular.isDefined(i)&&(t[e]||(t[e]=[]),t[e].push(i)),this},this.extendStates=function(e,t){var i=this;return e.forEach((function(e){i.extendState(e,t)})),this},this.$get=["$injector","$state",function(i,n){var a;return{start:function(){e.length>0&&_.forEach(e,(function(e){i.get(e)}))},extensions:{points:{getActivesByName:function(e){return _.keys(t).reduce((function(e,i){return n.includes(i)?e.concat(t[i]):e}),[]).reduce((function(t,i){return i.points&&i.points[e]?t.concat(i.points[e]):t}),[])},current:{get:function(){return a},set:function(e){a=e}}}}}}]})),angular.module("cesium.services",["cesium.desktop.services","cesium.settings.services","cesium.http.services","cesium.network.services","cesium.bma.services","cesium.crypto.services","cesium.utils.services","cesium.modal.services","cesium.storage.services","cesium.device.services","cesium.currency.services","cesium.wot.services","cesium.tx.services","cesium.wallet.services","cesium.help.services","cesium.plugin.services"]),angular.module("cesium.api.demo.services",["cesium.bma.services","cesium.crypto.services","cesium.utils.services","cesium.settings.services"]).factory("csDemoWallet",["$rootScope","$timeout","$controller","$state","$q","$translate","$filter","BMA","CryptoUtils",function(e,t,i,n,a,o,r,s,l){return{instance:function(e){var t;return{start:function(){return a.when()},login:function(){var i=this;return o("API.TRANSFER.DEMO.PUBKEY").then((function(n){if(t=n,!e||e.pubkey!=t)throw{message:"API.TRANSFER.DEMO.BAD_CREDENTIALS"};return i.data={keypair:e.keypair},{uid:"Demo",pubkey:t}}))},transfer:function(e,i,n){var o=this;return s.blockchain.current().then((function(r){var c="Version: "+s.constants.PROTOCOL_VERSION+"\nType: Transaction\nCurrency: "+r.currency+"\nBlockstamp: "+r.number+"-"+r.hash+"\nLocktime: 0\nIssuers:\n"+t+"\nInputs:\n"+[i,r.unitbase,"T","FakeId27jQMAf3jqL2fr75ckZ6Jgi9TZL9fMf9TR9vBvG",0].join(":")+"\nUnlocks:\n0:SIG(0)\nOutputs:\n"+[i,r.unitbase,"SIG("+e+")"].join(":")+"\nComment: "+(n||"")+"\n";return l.sign(c,o.data.keypair).then((function(e){var t=c+e+"\n";return l.util.hash(t).then((function(e){return a.when({tx:t,hash:e})}))}))}))}}}}}]),e.prototype.regexp={BMA:/^BASIC_MERKLED_API[ ]?/,BMAS:/^BMAS[ ]?/,WS2P:/^WS2P[ ]?/,BMA_REGEXP:/^BASIC_MERKLED_API([ ]+([a-z_][a-z0-9-_.ğĞ]*))?([ ]+([0-9.]+))?([ ]+([0-9a-f:]+))?([ ]+([0-9]+))$/,BMAS_REGEXP:/^BMAS([ ]+([a-z_][a-z0-9-_.ğĞ]*))?([ ]+([0-9.]+))?([ ]+([0-9a-f:]+))?([ ]+([0-9]+))$/,WS2P_REGEXP:/^WS2P[ ]+([a-z0-9]+)([ ]+([a-z_][a-z0-9-_.ğĞ]*))?([ ]+([0-9.]+))?([ ]+([0-9a-f:]+))?([ ]+([0-9]+))([ ]+([a-z0-9/.&#!]+))?$/,LOCAL_IP_ADDRESS:/^127[.]0[.]0.|192[.]168[.]|10[.]0[.]0[.]|172[.]16[.]/},e.prototype.regex=e.prototype.regexp,e.prototype.keyID=function(){var e=this.bma||this.getBMA();return e.useBma?[this.pubkey||"Unknown",e.dns,e.ipv4,e.ipv6,e.port,e.useSsl,e.path].join("-"):[this.pubkey||"Unknown",e.ws2pid,e.path].join("-")},e.prototype.copyValues=function(e){var t=this;["version","currency","pub","endpoints","hash","status","block","signature"].forEach((function(i){e[i]=t[i]}))},e.prototype.copyValuesFrom=function(e){var t=this;["version","currency","pub","endpoints","block","signature"].forEach((function(i){t[i]=e[i]}))},e.prototype.json=function(){var e=this,t={};return["version","currency","endpoints","status","block","signature"].forEach((function(i){t[i]=e[i]})),t.raw=this.raw&&this.getRaw(),t.pubkey=this.pubkey,t},e.prototype.getBMA=function(){if(this.bma)return this.bma;var e=null,t=this.regexp.BMA_REGEXP,i=this.regexp.BMAS_REGEXP;return this.endpoints.forEach((function(n){var a=!e&&t.exec(n);a&&(e={dns:a[2]||"",ipv4:a[4]||"",ipv6:a[6]||"",port:a[8]||80,useSsl:443==a[8],useBma:!0}),(a=!e&&i.exec(n))&&(e={dns:a[2]||"",ipv4:a[4]||"",ipv6:a[6]||"",port:a[8]||80,useSsl:!0,useBma:!0})})),e||{}},e.prototype.getEndpoints=function(e){return e?this.endpoints.reduce((function(t,i){return i.match(e)?t.concat(i):t}),[]):this.endpoints},e.prototype.hasEndpoint=function(e){var t=this.regexp[e]||new RegExp("^"+e);return!!this.getEndpoints(t).length},e.prototype.getDns=function(){var e=this.bma||this.getBMA();return e.dns?e.dns:null},e.prototype.getIPv4=function(){var e=this.bma||this.getBMA();return e.ipv4?e.ipv4:null},e.prototype.getIPv6=function(){var e=this.bma||this.getBMA();return e.ipv6?e.ipv6:null},e.prototype.getPort=function(){var e=this.bma||this.getBMA();return e.port?e.port:null},e.prototype.getHost=function(e){return bma=e||this.bma||this.getBMA(),(443==bma.port||bma.useSsl)&&bma.dns?bma.dns:this.hasValid4(bma)?bma.ipv4:bma.dns?bma.dns:bma.ipv6?"["+bma.ipv6+"]":""},e.prototype.getURL=function(e){e=e||this.bma||this.getBMA();var t=this.getHost(e);return(443==e.port||e.useSsl?"https":"http")+"://"+t+(e.port?":"+e.port:"")},e.prototype.getServer=function(e){e=e||this.bma||this.getBMA();var t=this.getHost(e);return t+(t&&e.port?":"+e.port:"")},e.prototype.hasValid4=function(e){return!(!e.ipv4||e.ipv4.match(this.regexp.LOCAL_IP_ADDRESS))},e.prototype.isReachable=function(){return!!this.getServer()},e.prototype.isSsl=function(){return(this.bma||this.getBMA()).useSsl},e.prototype.isTor=function(){return(this.bma||this.getBMA()).useTor},e.prototype.isWs2p=function(){return(this.bma||this.getBMA()).useWs2p},e.prototype.isBma=function(){var e=this.bma||this.getBMA();return!e.useWs2p&&!e.useTor},e.prototype.hasBma=function(){return this.hasEndpoint("(BASIC_MERKLE_API|BMAS|BMATOR)")},t.prototype.isEmpty=function(){"use strict";return!(this.transactionsCount||this.certificationsCount||this.joinersCount||this.dividend||this.activesCount||this.identitiesCount||this.leaversCount||this.excludedCount||this.revokedCount)},t.prototype.parseData=function(){this.identities=this.parseArrayValues(this.identities,["pubkey","signature","buid","uid"]),this.joiners=this.parseArrayValues(this.joiners,["pubkey","signature","mBuid","iBuid","uid"]),this.actives=this.parseArrayValues(this.actives,["pubkey","signature","mBuid","iBuid","uid"]),this.leavers=this.parseArrayValues(this.leavers,["pubkey","signature","mBuid","iBuid","uid"]),this.revoked=this.parseArrayValues(this.revoked,["pubkey","signature"]),this.excluded=this.parseArrayValues(this.excluded,["pubkey"]),this.certifications=this.parseArrayValues(this.certifications,["from","to","block","signature"]),this.transactions=this.parseTransactions(this.transactions),delete this.raw},t.prototype.cleanData=function(){delete this.identities,delete this.joiners,delete this.actives,delete this.leavers,delete this.revoked,delete this.excluded,delete this.certifications,delete this.transactions,delete this.raw},t.prototype.parseArrayValues=function(e,t){return e&&e.length?e.reduce((function(e,i){var n=i.split(":");if(n.length!=t.length)return console.debug("[block] Bad format for '{0}': [{1}]. Expected {1} parts. Skipping".format(arrayProperty,i,t.length)),e;for(var a={},o=0;o<t.length;o++)a[t[o]]=n[o];return e.concat(a)}),[]):[]},t.prototype.regexp={TX_OUTPUT_SIG:("SIG\\(([0-9a-zA-Z]{43,44})\\)",new RegExp("^SIG\\(([0-9a-zA-Z]{43,44})\\)$"))},t.prototype.parseTransactions=function(e){return e&&e.length?e.reduce((function(e,i){var n={issuers:i.issuers,time:i.time};return n.outputs=i.outputs.reduce((function(e,n){var a=n.split(":");if(3!=a.length)return console.debug("[block] Bad format a 'transactions': [{0}]. Expected 3 parts. Skipping".format(n)),e;var o=a[0],r=a[1],s=a[2],l=t.prototype.regexp.TX_OUTPUT_SIG.exec(a[2]);if(l){var c=l[1];return i.issuers&&-1==i.issuers.indexOf(c)?e.concat({amount:r<=0?o:o*Math.pow(10,r),unitbase:r,pubkey:c}):e}return e.concat({amount:r<=0?o:o*Math.pow(10,r),unitbase:r,unlockCondition:s})}),[]),n.error||n.outputs.length||(n.toHimself=!0),e.concat(n)}),[]):[]},n.prototype.regexp={WS2P_PREFIX:/^WS2P(?:O([CT][SAM]))?(?:I([CT]))?$/},a.$inject=["$scope","$timeout","$controller","csWallet"],o.$inject=["$scope","$timeout","$q","$ionicPopover","$window","CryptoUtils","csCrypto","ionicReady","UIUtils","BMA","Modals","csConfig","csSettings","Device","parameters"],r.$inject=["$scope","$controller","csConfig"],angular.module("cesium.login.controllers",["cesium.services"]).config(["$stateProvider",function(e){e.state("app.login",{url:"/login",views:{menuContent:{templateUrl:"templates/home/home.html",controller:"LoginCtrl"}}})}]).controller("LoginCtrl",a).controller("LoginModalCtrl",o).controller("AuthCtrl",r),s.$inject=["$scope","$state","$timeout","$anchorScroll","csSettings"],l.$inject=["$scope","$timeout","$anchorScroll","csSettings","parameters"],c.$inject=["$scope","$state","$window","$ionicSideMenuDelegate","$timeout","$q","$anchorScroll","UIUtils","csConfig","csSettings","csCurrency","csHelpConstants","Device","csWallet"],d.$inject=["$scope"],angular.module("cesium.help.controllers",["cesium.services"]).config(["$stateProvider",function(e){e.state("app.help_tour",{url:"/tour",views:{menuContent:{templateUrl:"templates/home/home.html",controller:"HelpTourCtrl"}}}).state("app.help",{url:"/help?anchor",views:{menuContent:{templateUrl:"templates/help/view_help.html",controller:"HelpCtrl"}}}).state("app.help_anchor",{url:"/help/:anchor",views:{menuContent:{templateUrl:"templates/help/view_help.html",controller:"HelpCtrl"}}})}]).controller("HelpCtrl",s).controller("HelpModalCtrl",l).controller("HelpTipCtrl",c).controller("HelpTourCtrl",d),angular.module("cesium.templates",[]).run(["$templateCache",function(e){e.put("templates/api/doc.html",'<h2 class="padding" translate>API.DOC.TRANSFER.TITLE</h2><div class="list padding no-padding-xs no-padding-top"><div class="item item-divider no-border"><p translate>API.DOC.DESCRIPTION_DIVIDER</p></div><div class="item item-text-wrap"><p translate>API.DOC.TRANSFER.DESCRIPTION</p></div><div class="item item-divider no-border"><p translate>API.DOC.URL_DIVIDER</p></div><div class="item item-text-wrap"><p class="gray text-right">{{$root.rootPath}}#/v1/payment/:pubkey?amount=<span class="text-italic" translate>API.DOC.TRANSFER.PARAM_AMOUNT</span></p></div><div class="item item-divider no-border"><p translate>API.DOC.PARAMETERS_DIVIDER</p></div><div class="item item-text-wrap"><p translate>API.DOC.AVAILABLE_PARAMETERS</p><div class="row"><div class="col col-20 text-italic">pubkey</div><div class="col gray" translate>API.DOC.TRANSFER.PARAM_PUBKEY_HELP</div></div><div class="row stable-bg"><div class="col col-20 text-italic dark">amount</div><div class="col gray" translate>API.DOC.TRANSFER.PARAM_AMOUNT_HELP</div></div><div class="row"><div class="col col-20 text-italic">comment</div><div class="col gray" translate>API.DOC.TRANSFER.PARAM_COMMENT_HELP</div></div><div class="row stable-bg"><div class="col col-20 text-italic dark">name</div><div class="col gray" translate>API.DOC.TRANSFER.PARAM_NAME_HELP</div></div><div class="row"><div class="col col-20 text-italic">preferred_node</div><div class="col gray" translate>API.DOC.TRANSFER.PARAM_PREFERRED_NODE_HELP</div></div><div class="row stable-bg"><div class="col col-20 text-italic dark">redirect_url</div><div class="col gray" translate>API.DOC.TRANSFER.PARAM_REDIRECT_URL_HELP</div></div><div class="row"><div class="col col-20 text-italic">cancel_url</div><div class="col gray" translate>API.DOC.TRANSFER.PARAM_CANCEL_URL_HELP</div></div></div><div class="item item-divider no-border"><p translate>API.DOC.DEMO_DIVIDER</p></div><div class="item item-button-right item-text-wrap padding-bottom"><p class="item-icon-right-padding" translate>API.DOC.DEMO_HELP</p><span class="badge" ng-if="loading"><ion-spinner class="icon" icon="android"></ion-spinner></span><a ng-if="!loading" href="{{transferDemoUrl}}" class="button button-raised button-positive icon ion-play"></a></div><div class="item item-text-wrap" ng-if="result.type === \'payment\' && !result.cancelled"><h2 class="text-right balanced" translate>API.DOC.DEMO_SUCCEED</h2><h4 class="gray" translate>API.DOC.DEMO_RESULT</h4><p class="balanced-100-bg padding dark text-keep-lines">{{result.content}}</p><h4 class="gray"><span translate>API.DOC.DEMO_RESULT_PEER</span> <b>{{result.node}}</b></h4></div><div class="item item-text-wrap" ng-if="result.type === \'payment\' && result.cancelled"><h2 class="text-right assertive" translate>API.DOC.DEMO_CANCELLED</h2></div><div class="item item-divider no-border"><p translate>API.DOC.INTEGRATE_DIVIDER</p></div><div class="item item-text-wrap"><p translate>API.DOC.TRANSFER.EXAMPLES_HELP</p><div class="row responsive-sm"><div class="col col-20 text-italic"><span translate>API.DOC.TRANSFER.EXAMPLE_BUTTON</span></div><div class="col gray no-border"><p><i class="icon ion-code"></i> <span translate>API.DOC.INTEGRATE_CODE</span></p><div class="item item-input"><textarea class="gray" select-on-click rows="5" ng-model="transferButton.html" ng-model-options="{ debounce: 650 }"></textarea></div><p class="padding-top"><i class="icon ion-eye"></i> <span translate>API.DOC.INTEGRATE_RESULT</span></p><div class="padding-left" bind-notifier="{ notifierKey:watchedExpression }"><ng-bind-html ng-bind-html="transferButton.html|trustAsHtml"></ng-bind-html></div></div></div><div class="row responsive-sm"><div class="col col-20 hidden-xs hidden-sm">&nbsp;</div><div class="col gray no-border"><p class="padding-top"><a class="positive" ng-click="transferButton.showParameters=!transferButton.showParameters"><i class="icon ion-wrench"></i> <span translate>API.DOC.INTEGRATE_PARAMETERS</span> <i class="icon" ng-class="{\'ion-arrow-down-b\': !transferButton.showParameters, \'ion-arrow-up-b\': transferButton.showParameters}"></i></a></p><div ng-if="transferButton.showParameters" class="padding-left"><form id="transferForm" class="stable-bg padding"><p class="padding-top"><i class="icon ion-key"></i> {{\'API.DOC.TRANSFER.PARAM_PUBKEY\' | translate}} :</p><label class="item item-input"><input type="text" autocomplete="off" ng-model="transferData.pubkey" ng-model-options="{ debounce: 650 }" placeholder="{{\'API.DOC.TRANSFER.PARAM_PUBKEY_HELP\'|translate}}"></label><p class="padding-top"><i class="icon ion-pricetag"></i> {{\'API.DOC.TRANSFER.PARAM_AMOUNT\' | translate}} :</p><label class="item item-input"><input type="text" autocomplete="off" ng-model="transferData.amount" ng-model-options="{ debounce: 650 }" placeholder="{{\'API.DOC.TRANSFER.PARAM_AMOUNT_HELP\'|translate}}"></label><p class="padding-top"><i class="icon ion-flag"></i> {{\'API.DOC.TRANSFER.PARAM_COMMENT\' | translate}} :</p><label class="item item-input"><input type="text" autocomplete="off" ng-model="transferData.comment" placeholder="{{\'API.DOC.TRANSFER.PARAM_COMMENT\'|translate}}"></label><p class="padding-top"><i class="icon ion-ios-world-outline"></i> {{\'API.DOC.TRANSFER.PARAM_NAME\' | translate}} :</p><label class="item item-input"><input type="text" ng-model="transferData.name" ng-model-options="{ debounce: 650 }" placeholder="{{\'API.DOC.TRANSFER.PARAM_NAME\'|translate}}"></label><p class="padding-top"><i class="icon ion-key"></i> {{\'API.DOC.TRANSFER.PARAM_PREFERRED_NODE\' | translate}} :</p><label class="item item-input"><input type="text" ng-model="transferData.preferred_node" ng-model-options="{ debounce: 650 }" placeholder="{{\'API.DOC.TRANSFER.PARAM_PREFERRED_NODE_HELP\'|translate}}"></label><p class="padding-top"><i class="icon ion-arrow-return-left"></i> {{\'API.DOC.TRANSFER.PARAM_REDIRECT_URL\' | translate}} :</p><label class="item item-input"><input type="text" ng-model="transferData.redirect_url" ng-model-options="{ debounce: 650 }" placeholder="{{\'API.DOC.TRANSFER.PARAM_REDIRECT_URL\'|translate}}"></label><p class="padding-top"><i class="icon ion-backspace"></i> {{\'API.DOC.TRANSFER.PARAM_CANCEL_URL\' | translate}} :</p><label class="item item-input"><input type="text" ng-model="transferData.cancel_url" ng-model-options="{ debounce: 650 }" placeholder="{{\'API.DOC.TRANSFER.PARAM_CANCEL_URL\'|translate}}"></label><p class="padding-top"><a class="positive" ng-click="transferButton.style.enable=!transferButton.style.enable"><i class="icon" ng-class="{\'ion-android-checkbox-outline\': transferButton.style.enable, \'ion-android-checkbox-outline-blank\': !transferButton.style.enable}"></i> <span translate>API.DOC.TRANSFER.EXAMPLE_BUTTON_DEFAULT_STYLE</span></a></p><div ng-if="transferButton.style.enable"><p class="padding-top"><i class="icon ion-image"></i> {{\'API.DOC.TRANSFER.EXAMPLE_BUTTON_TEXT_ICON\' | translate}} :</p><label class="item item-input item-select"><select class="stable-bg dark" ng-model="transferButton.style.icon" style="width: 100%; max-width: 100%;" ng-options="l as (l.label | translate) for l in transferButton.icons track by l.filename"></select></label><p class="padding-top"><i class="icon ion-quote"></i> {{\'API.DOC.TRANSFER.EXAMPLE_BUTTON_TEXT_HELP\' | translate}} :</p><label class="item item-input"><input type="text" ng-model="transferButton.style.text" ng-model-options="{ debounce: 650 }" placeholder="{{\'API.DOC.TRANSFER.EXAMPLE_BUTTON_TEXT_HELP\'|translate}}"></label><p class="padding-top"><i class="icon ion-paintbucket"></i> {{\'API.DOC.TRANSFER.EXAMPLE_BUTTON_BG_COLOR\' | translate}} :</p><label class="item item-input"><input type="text" ng-model="transferButton.style.bgColor" ng-model-options="{ debounce: 650 }" placeholder="{{\'API.DOC.TRANSFER.EXAMPLE_BUTTON_BG_COLOR_HELP\'|translate}}"></label><p class="padding-top"><i class="icon ion-paintbrush"></i> {{\'API.DOC.TRANSFER.EXAMPLE_BUTTON_FONT_COLOR\' | translate}} :</p><label class="item item-input"><input type="text" ng-model="transferButton.style.fontColor" ng-model-options="{ debounce: 650 }" placeholder="{{\'API.DOC.TRANSFER.EXAMPLE_BUTTON_FONT_COLOR_HELP\'|translate}}"></label><p class="padding-top"><i class="icon ion-ios-crop-strong"></i> {{\'API.DOC.TRANSFER.EXAMPLE_BUTTON_TEXT_WIDTH\' | translate}} :</p><label class="item item-input"><input type="text" ng-model="transferButton.style.width" ng-model-options="{ debounce: 650 }" placeholder="{{\'API.DOC.TRANSFER.EXAMPLE_BUTTON_TEXT_WIDTH_HELP\'|translate}}"></label></div></form></div></div></div></div></div>'),e.put("templates/api/home.html",'<ion-view class="circle-bg-dark"><ion-nav-title><span class="title visible-xs visible-sm" translate>API.HOME.TITLE</span></ion-nav-title><ion-nav-buttons side="right"><button class="button button-clear hidden-xs hidden-sm flag" ng-click="showLocalesPopover($event)" style="align-content: center"><i class="flag-image" ng-if="$root.settings.locale" style="background-image: url(../img/flag-{{$root.settings.locale.flag}}.png);"></i> <b class="ion-arrow-down-b gray"></b></button></ion-nav-buttons><ion-content class="no-padding-xs no-padding-sm positive-900-bg"><br class="hidden-xs"><div class="light text-center"><h4 class="hidden-xs" translate>API.HOME.MESSAGE</h4><h4 class="visible-xs padding" translate>API.HOME.MESSAGE_SHORT</h4></div><br class="hidden-xs"><div class="row no-padding-xs"><div class="col col-20 hidden-xs hidden-sm">&nbsp;</div><div class="col"><div class="light-bg no-padding"><ng-include src="::\'templates/api/doc.html\'"></ng-include></div></div><div class="col col-20 hidden-xs hidden-sm text-center" id="home"><div style="display: block; width: 100%;"><div class="logo"></div><small class="gray padding-top">v{{$root.config.version}}</small></div></div></div><p class="visible-xs visible-sm light padding-top text-center">{{\'COMMON.APP_NAME\'|translate}} API - <a href="#" ng-click="showAboutModal($event)">v{{$root.config.version}}</a></p><p class="hidden-xs hidden-sm gray padding-top text-center">{{\'COMMON.APP_NAME\'|translate}} API v{{$root.config.version}} - <a href="#" ng-click="showAboutModal($event)" title="{{\'HOME.BTN_ABOUT\'|translate}}">{{\'HOME.BTN_ABOUT\'|translate}}</a> - <a href="../" title="{{\'API.COMMON.LINK_STANDARD_APP_HELP\'|translate}}">{{\'API.COMMON.LINK_STANDARD_APP\'|translate}}</a></p></ion-content></ion-view>'),e.put("templates/api/menu.html",'<ion-nav-bar class="bar-dark" title-align="left"><ion-nav-back-button class="no-text"></ion-nav-back-button><ion-nav-buttons side="left"></ion-nav-buttons><ion-nav-buttons side="right"></ion-nav-buttons></ion-nav-bar><ion-nav-view name="menuContent"></ion-nav-view>'),e.put("templates/api/popover_locales.html",'<ion-popover-view class="fit popover-locales" style="height: {{locales.length*48}}px;"><ion-content scroll="false"><div class="list item-text-wrap block"><a ng-repeat="l in locales track by l.id" class="item item-icon-left ink" ng-click="changeLanguage(l.id)"><i class="item-image avatar" style="background-image: url(../img/flag-{{l.flag}}.png)"></i> {{l.label | translate}}</a></div></ion-content></ion-popover-view>'),e.put("templates/api/transfer.html",'<ion-view class="circle-bg-dark"><ion-nav-buttons side="left"><button class="button button-clear visible-xs" ng-click="closeModal()" translate>COMMON.BTN_CANCEL</button></ion-nav-buttons><ion-nav-title><span class="title visible-xs" translate>API.TRANSFER.TITLE_SHORT</span></ion-nav-title><ion-nav-buttons side="right"><button class="button button-clear hidden-xs hidden-sm gray" ng-click="showLocalesPopover($event)" style="align-content: center"><img ng-hide="!$root.settings.locale.country" ng-src="https://www.countryflags.io/{{$root.settings.locale.country}}/shiny/32.png"> <span ng-hide="$root.settings.locale.country">{{$root.settings.locale.label}}&nbsp;</span> <small class="ion-arrow-down-b"></small></button> <button class="button button-positive button-icon button-clear icon ion-android-send visible-xs" ng-click="doLogin()"></button></ion-nav-buttons><ion-content class="no-padding-xs positive-900-bg"><br class="hidden-xs"><div class="row no-padding-xs"><div class="col col-20 hidden-xs hidden-sm">&nbsp;</div><div class="col no-padding-xs"><div class="light-bg"><h2 class="padding-top text-center hidden-xs" translate>API.TRANSFER.TITLE</h2><div class="no-padding energized-100-bg" ng-if="demo"><div class="item item-icon-left item-text-wrap no-border"><i class="icon ion-information-circled positive"></i><p translate>API.TRANSFER.DEMO.HELP</p></div></div><div class="no-padding energized-100-bg" ng-if="$root.config.demo"><div class="item item-icon-left item-text-wrap no-border"><i class="icon ion-android-alert assertive"></i><p translate>MODE.DEMO.INSTALL_HELP</p></div></div><ng-include src="::\'templates/login/form_login.html\'"></ng-include></div><br class="hidden-xs"><br class="hidden-xs"><div class="list padding no-padding-xs light-bg"><div class="item"><p translate>API.TRANSFER.SUMMARY</p></div><div class="item item-icon-left-padding item-tx no-border" ng-if="!transferData.amounts" style="min-height: 56px;"><h2 translate>API.TRANSFER.AMOUNT</h2><ion-spinner class="badge item-note" icon="android" ng-show="loading"></ion-spinner><div class="badge badge-calm ng-hide" ng-show="!loading" ng-bind-html="transferData.amount|formatAmount:{useRelative: false, currency: currency.name}"></div><div class="badge badge-secondary ng-hide" ng-show="!loading" ng-bind-html="transferData.amount|formatAmount:{useRelative: true, currency: currency.name, currentUD: currency.currentUD}"></div></div><label ng-if="transferData.amounts" style="min-height: 58px;" class="item item-icon-left-padding item-input item-select item-tx no-border" ng-class="{ \'item-input-error\': form.$submitted && !transferData.amount}"><div class="input-label"><span translate>API.TRANSFER.AMOUNT</span><h4 class="assertive hidden-xs hidden-sm" ng-if="!transferData.amount"><span translate>API.TRANSFER.AMOUNTS_HELP</span></h4></div><select ng-model="transferData.amount" required="true" ng-options="(amount |formatAmount:{useRelative: false, currency: currency.name}) for amount in transferData.amounts"></select> <span class="badge badge-secondary ng-hide" ng-show="transferData.amount" ng-bind-html="transferData.amount|formatAmount:{useRelative: true, currency: currency.name, currentUD: currency.currentUD}"></span></label><div class="form-errors" ng-if="form.$submitted && !transferData.amount"><div class="form-error"><span translate="ERROR.FIELD_REQUIRED"></span></div></div><div class="item item-icon-left-padding"><h2 translate>API.TRANSFER.NAME</h2><div class="badge item-note">{{transferData.name}}</div></div><div class="item item-icon-left-padding item-text-wrap"><h2 translate>API.TRANSFER.PUBKEY</h2><div class="badge"><span class="hidden-xs"><br class="visible-sm visible-md"><i class="icon ion-key"></i>{{transferData.pubkey}}</span> <span class="visible-xs" copy-on-click="{{transferData.pubkey}}"><br class="visible-xs"><i class="icon ion-key"></i> {{transferData.pubkey|formatPubkey}}</span></div></div><div class="item item-icon-left-padding"><h2 translate>API.TRANSFER.COMMENT</h2><div class="badge item-note"><span class="hidden-xs"><br class="visible-sm visible-md">{{::transferData.comment}}</span> <span class="visible-xs" copy-on-click="{{transferData.comment}}"><br>{{::transferData.comment}}</span></div></div><div class="item item-icon-left-padding" ng-hide="error"><h2 translate>API.TRANSFER.NODE</h2><div class="badge item-note" ng-if="!loading"><br class="visible-sm visible-md"><i class="icon ion-locked" ng-if="node.useSsl"></i>&nbsp;{{node.server}}</div></div><div class="center padding animate-fade-in animate-show-hide ng-hide" ng-show="!loading && error"><div class="card card-item padding"><p class="item-content item-text-wrap"><i class="icon ion-android-alert assertive"></i> <span class="dark" trust-as-html="\'API.COMMON.CONNECTION_ERROR\'|translate:node"></span></p><button type="button" class="button button-positive icon icon-left ion-refresh ink" ng-click="start()">{{\'COMMON.BTN_REFRESH\'|translate}}</button></div></div><div class="padding-bottom visible-xs">&nbsp;</div></div></div><div class="col col-20 hidden-xs hidden-sm text-center" id="home"><div style="display: block; width: 100%;"><div class="logo text-center"></div><small class="gray padding-top">v{{$root.config.version}}</small></div></div></div><p class="visible-xs visible-sm light padding-top text-center">{{\'COMMON.APP_NAME\'|translate}} - <a href="#" ng-click="showAboutModal($event)">v{{$root.config.version}}</a></p><p class="hidden-xs hidden-sm gray padding-top text-center">{{\'COMMON.APP_NAME\'|translate}} API v{{$root.config.version}} - <a href="#" ng-click="showAboutModal($event)" title="{{\'HOME.BTN_ABOUT\'|translate}}">{{\'HOME.BTN_ABOUT\'|translate}}</a> - <a ui-sref="app.home" target="_system" title="{{\'API.COMMON.LINK_DOC_HELP\'|translate}}">{{\'API.COMMON.LINK_DOC\'|translate}}</a> - <a href="../" title="{{\'API.COMMON.LINK_STANDARD_APP_HELP\'|translate}}">{{\'API.COMMON.LINK_STANDARD_APP\'|translate}}</a></p></ion-content></ion-view>'),e.put("templates/blockchain/item_block_empty_lg.html",'<a name="block-{{::block.number}}"></a><div id="block-{{::block.number}}" class="item item-block item-icon-left item-block-empty" ng-class=":rebind:{\'compacted\': block.compacted && compactMode}" ng-click="selectBlock(block)"><div class="row no-padding" ng-if=":rebind:!block.compacted || !compactMode"><div class="col"><h3 class="gray"><i class="ion-clock"></i> {{:rebind:block.medianTime|medianDate}}</h3></div><div class="col"><h3><span class="gray" ng-if=":rebind:expertMode"><i class="ion-key"></i> {{:rebind:block.issuer|formatPubkey}} </span><span class="positive"><i class="ion-person"></i> {{:rebind:block.name||block.uid}}</span></h3></div><div class="col col-20"></div><div class="col col-20"><span class="badge" ng-class="{\'badge-balanced\': !$index && search.type==\'last\'}">{{block.number|formatInteger}}</span></div></div></div>'),e.put("templates/blockchain/item_block_lg.html",'<ion-item id="block-{{::block.number}}" class="item item-block item-icon-left ink {{::ionItemClass}}" ng-class="{{::ionItemClass}}" ng-click="selectBlock(block)"><i class="icon ion-cube stable" ng-if=":rebind:!block.avatar"></i> <i class="avatar" ng-if=":rebind:!block.empty && block.avatar" style="background-image: url(\'{{:rebind:block.avatar.src}}\')"></i><div class="row no-padding"><div class="col"><h3 class="dark"><i class="ion-clock"></i> {{:rebind:block.medianTime|medianDate}}</h3><h4 class="gray">{{:rebind:\'BLOCKCHAIN.HASH\'|translate}} {{:rebind:block.hash|formatHash}}</h4></div><div class="col"><h3><span class="gray" ng-if=":rebind:expertMode"><i class="ion-key"></i> {{:rebind:block.issuer|formatPubkey}} </span><span class="positive"><i class="ion-person"></i> {{:rebind:block.name||block.uid}}</span></h3></div><div class="col col-20"><small><ng-if ng-if=":rebind:block.joinersCount||(block.excludedCount-block.revokedCount)"><i class="ion-person"></i> <span ng-if=":rebind:block.joinersCount">+{{:rebind:block.joinersCount}}</span> <span ng-if=":rebind:block.excludedCount">-{{:rebind:block.excludedCount-block.revokedCount}}</span> &nbsp;&nbsp;</ng-if><span ng-if=":rebind:block.revokedCount" class="assertive"><i class="ion-minus-circled"></i> -{{:rebind:block.revokedCount}}&nbsp;&nbsp;</span> <span ng-if=":rebind:block.activesCount"><i class="ion-refresh"></i> {{:rebind:block.activesCount}}&nbsp;&nbsp;</span> <span ng-if=":rebind:block.certificationsCount"><i class="ion-ribbon-a"></i> {{:rebind:block.certificationsCount}}&nbsp;&nbsp;</span> <span ng-if=":rebind:block.dividend"><i class="gray ion-arrow-up-c"></i> {{:rebind:\'COMMON.UD\'|translate}}&nbsp;&nbsp;</span> <span ng-if=":rebind:block.transactionsCount"><i class="ion-card">{{:rebind:block.transactionsCount}}</i>&nbsp;&nbsp;</span></small></div><div class="col col-20"><span class="badge" ng-class="{\'badge-balanced\': !$index && search.type==\'last\', \'badge-calm\': ($index || search.type!=\'last\')&& !block.compacted && !block.empty}">{{:rebind:block.number}}</span></div></div></ion-item>'),e.put("templates/blockchain/item_block.html",'<a name="block-{{::block.number}}"></a><ion-item id="block-{{::block.number}}" class="item item-icon-left item-block {{::ionItemClass}}" ng-class=":rebind:{\'ink\': !block.empty||!block.compacted, \'item-block-empty\': block.empty, \'compacted\': block.compacted && compactMode}" ng-click="selectBlock(block)"><i class="icon ion-cube stable" ng-if="(!block.empty && !block.avatar)"></i> <i class="avatar" ng-if="!block.empty && block.avatar" style="background-image: url(\'{{block.avatar.src}}\')"></i><div class="row no-padding" ng-if=":rebind:!block.compacted || !compactMode"><div class="col" style="min-width: 110px; max-width: 130px;"><h4 ng-class=":rebind:{\'gray\': block.compacted, \'dark\': !block.compacted}"><i class="ion-clock"></i> {{:rebind:block.medianTime|medianDate}}</h4><h4 ng-if=":rebind:!block.empty"><ng-if ng-if=":rebind:block.joinersCount||(block.excludedCount-block.revokedCount)"><i class="dark ion-person"></i> <span class="dark" ng-if=":rebind:block.joinersCount">+{{:rebind:block.joinersCount}}</span> <span class="dark" ng-if=":rebind:block.excludedCount">-{{:rebind:block.excludedCount-block.revokedCount}}</span></ng-if><span class="dark" ng-if=":rebind:block.revokedCount" class="assertive"><i class="ion-minus-circled"></i> {{:rebind:block.revokedCount}}&nbsp;&nbsp;</span> <span class="dark" ng-if=":rebind:block.activesCount" class="gray"><i class="gray ion-refresh"></i> {{:rebind:block.activesCount}}&nbsp;&nbsp;</span> <span class="dark" ng-if=":rebind:block.certificationsCount"><i class="ion-ribbon-a"></i> {{:rebind:block.certificationsCount}}&nbsp;&nbsp;</span> <span class="dark" ng-if=":rebind:block.dividend" class="gray"><i class="gray ion-arrow-up-c"></i> {{\'COMMON.UD\'|translate}}&nbsp;&nbsp;</span> <span class="dark" ng-if=":rebind:block.transactionsCount"><i class="ion-card">{{:rebind:block.transactionsCount}}</i></span></h4></div><div class="col positive hidden-md"><h4><i class="ion-person"></i> {{:rebind:block.name||block.uid}}</h4></div><div class="col col-20"><span class="badge" ng-class=":rebind:{\'badge-balanced\': !$index , \'badge-calm\': $index && !block.compacted && !block.empty}">{{::block.number|formatInteger}}</span></div></div></ion-item>'),e.put("templates/blockchain/items_blocks.html",'<div class="center padding" ng-if="search.loading"><ion-spinner icon="android"></ion-spinner></div><ion-list class="animate-ripple padding padding-xs"><div class="padding gray" ng-if="!search.loading && !search.results.length" translate>BLOCKCHAIN.LOOKUP.NO_BLOCK</div><ng-repeat ng-repeat="block in search.results track by block.number" ng-include="::\'templates/blockchain/item_block.html\'"></ng-repeat></ion-list><ion-infinite-scroll ng-if="search.hasMore" icon="android" on-infinite="showMore()" distance="1%"></ion-infinite-scroll>'),e.put("templates/blockchain/link_identity.html",'<a ui-sref="app.wot_identity({pubkey: identity.pubkey, uid: identity.uid})"><span class="positive" ng-if="identity.uid"><i class="icon ion-person"></i> {{::identity.uid}}&nbsp;</span> <span class="gray" ng-class="{\'hidden-xs hidden-sm\': identity.uid}"><i class="icon ion-key"></i>&nbsp;{{::identity.pubkey|formatPubkey}}</span></a>'),e.put("templates/blockchain/list_blocks_lg.html",'<div class="padding padding-xs" style="display: block; height: 100px;"><h4 translate>BLOCKCHAIN.LOOKUP.LAST_BLOCKS</h4><div class="pull-right"><a class="button button-text button-small ink" ng-class="{\'button-text-positive\': compactMode, \'button-text-stable\': !compactMode}" ng-click="toggleCompactMode()"><i class="icon ion-navicon"></i> <b class="ion-arrow-down-b" style="position: absolute; top: -2px; left: 4px; font-size: 8px;"></b> <b class="ion-arrow-up-b" style="position: absolute; top: 10px; left: 4px; font-size: 8px;"></b> <span>{{:locale:\'BLOCKCHAIN.LOOKUP.BTN_COMPACT\'|translate}}</span></a></div></div><div class="center padding" ng-if="search.loading"><ion-spinner icon="android"></ion-spinner></div><ion-list class="padding padding-xs list-blocks {{::motion.ionListClass}}"><div class="padding gray" ng-if="!search.loading && !search.results.length">{{:locale:\'BLOCKCHAIN.LOOKUP.NO_BLOCK\'|translate}}</div><ng-repeat ng-repeat="block in search.results track by block.id" ng-include="!block.empty ? \'templates/blockchain/item_block_lg.html\' : \'templates/blockchain/item_block_empty_lg.html\'"></ng-repeat></ion-list><ion-infinite-scroll ng-if="search.hasMore" spinner="android" on-infinite="showMore()" distance="1%"></ion-infinite-scroll>'),e.put("templates/blockchain/list_blocks.html",'<div class="center padding" ng-if="search.loading"><ion-spinner icon="android"></ion-spinner></div><ion-list class="padding padding-xs list-blocks {{::motion.ionListClass}}"><div class="padding gray" ng-if="!search.loading && !search.results.length" translate>BLOCKCHAIN.LOOKUP.NO_BLOCK</div><ng-repeat ng-repeat="block in search.results track by block.number" ng-include="::\'templates/blockchain/item_block.html\'"></ng-repeat></ion-list><ion-infinite-scroll ng-if="search.hasMore" spinner="android" on-infinite="showMore()" distance="1%"></ion-infinite-scroll>'),e.put("templates/blockchain/lookup_lg.html",'<ion-view><ion-nav-title><span translate>BLOCKCHAIN.LOOKUP.TITLE</span></ion-nav-title><ion-content class="padding no-padding-xs no-padding-sm" scroll="true"><ng-include src="::\'templates/blockchain/list_blocks_lg.html\'"></ng-include></ion-content></ion-view>'),e.put("templates/blockchain/lookup.html",'<ion-view><ion-nav-title><span translate>BLOCKCHAIN.LOOKUP.TITLE</span></ion-nav-title><ion-content class="padding no-padding-xs" scroll="true"><ng-include src="::\'templates/blockchain/list_blocks.html\'"></ng-include></ion-content></ion-view>'),e.put("templates/blockchain/unlock_condition_popover.html",'<ion-popover-view class="fit"><ion-header-bar><h1 class="title" translate>BLOCKCHAIN.VIEW.TX_OUTPUT_UNLOCK_CONDITIONS</h1></ion-header-bar><ion-content scroll="true"><div class="row" ng-repeat="condition in popoverData.unlockConditions track by $index" ng-style="::condition.style"><span class="gray" ng-if="::condition.operator">{{::\'BLOCKCHAIN.VIEW.TX_OUTPUT_OPERATOR.\'+condition.operator|translate}}&nbsp;</span><div ng-if="::condition.type==\'SIG\'"><i class="icon ion-key dark"></i> <span class="dark" ng-bind-html="::\'BLOCKCHAIN.VIEW.TX_OUTPUT_FUNCTION.SIG\' | translate"></span> <a ng-click="goState(\'app.wot_identity\', {pubkey:condition.value})" style="text-decoration: none;" class="positive">{{condition.value|formatPubkey}}</a></div><div ng-if="::condition.type==\'XHX\'"><i class="icon ion-lock-combination dark"></i> <span class="dark" ng-bind-html="::\'BLOCKCHAIN.VIEW.TX_OUTPUT_FUNCTION.XHX\' | translate"></span> <a copy-on-click="{{::condition.value}}" class="positive">{{::condition.value|formatPubkey}}...</a></div><div ng-if="condition.type==\'CSV\'"><i class="icon ion-clock dark"></i> <span class="dark" ng-bind-html="::\'BLOCKCHAIN.VIEW.TX_OUTPUT_FUNCTION.CSV\' | translate"></span> {{::condition.value|formatDuration}}</div><div ng-if="condition.type==\'CLTV\'"><i class="icon ion-clock dark"></i> <span class="dark" ng-bind-html="::\'BLOCKCHAIN.VIEW.TX_OUTPUT_FUNCTION.CLTV\' | translate"></span> {{::condition.value|medianDate}}</div></div></ion-content></ion-popover-view>'),e.put("templates/blockchain/view_block.html",'<ion-view><ion-nav-title><span class="title visible-xs visible-sm" ng-if="number==\'current\'">{{\'BLOCKCHAIN.VIEW.TITLE_CURRENT\'|translate}}</span> <span class="title visible-xs visible-sm" ng-if="number!=\'current\'">{{\'BLOCKCHAIN.VIEW.TITLE\'|translate:formData}}</span></ion-nav-title><ion-content class="no-padding-xs no-padding-sm" scroll="true"><div class="row no-padding"><div class="col col-15 hidden-xs hidden-sm">&nbsp;</div><div class="col no-padding"><div class="center padding" ng-if="loading"><ion-spinner icon="android"></ion-spinner></div><div class="list item-text-wrap no-padding-xs" ng-if="!loading"><div class="item item-text-wrap"><h1 class="padding-top hidden-xs hidden-sm"><span ng-if="number!=\'current\'">{{\'BLOCKCHAIN.VIEW.TITLE\'|translate:formData}}</span> <span ng-if="number==\'current\'">{{\'BLOCKCHAIN.VIEW.TITLE_CURRENT\'|translate}}</span></h1><h3><span class="dark"><i class="icon ion-clock"></i> {{formData.medianTime | medianFromNowAndDate}}</span></h3><h3><span class="dark"><i class="icon ion-lock-combination"></i> {{\'BLOCKCHAIN.VIEW.COMPUTED_BY\'|translate}} </span><a class="positive" ui-sref="app.wot_identity({pubkey:issuer.pubkey, uid: issuer.uid})"><i class="icon ion-person positive"></i> {{issuer.name||issuer.uid}} <span class="gray" ng-if="issuer.name">({{issuer.uid}})</span></a></h3><h3><a ng-click="openRawBlock($event)"><i class="icon ion-share"></i> {{\'BLOCKCHAIN.VIEW.SHOW_RAW\'|translate}}</a></h3></div><div class="item hidden-xs hidden-sm padding text-center"><div class="pull-right"><a class="button button-text button-small ink" ng-class="{\'button-text-positive\': compactMode, \'button-text-stable\': !compactMode}" ng-click="toggleCompactMode()"><i class="icon ion-navicon"></i> <b class="ion-arrow-down-b" style="position: absolute; top: -2px; left: 4px; font-size: 8px;"></b> <b class="ion-arrow-up-b" style="position: absolute; top: 10px; left: 4px; font-size: 8px;"></b> <span>{{\'BLOCKCHAIN.LOOKUP.BTN_COMPACT\'|translate}}</span></a></div><cs-extension-point name="buttons"></cs-extension-point></div><span class="item item-divider">{{\'BLOCKCHAIN.VIEW.TECHNICAL_DIVIDER\' | translate}}</span><ion-item class="item-icon-left item-text-wrap" ng-if="!compactMode || $root.settings.expertMode"><i class="icon ion-gear-b"></i> {{\'BLOCKCHAIN.VIEW.VERSION\'|translate}} <span class="badge badge-stable">{{::formData.version}}</span></ion-item><ion-item class="item-icon-left item-text-wrap" ng-if="!compactMode || $root.settings.expertMode" copy-on-click="{{::formData.powMin}}"><i class="icon ion-lock-combination"></i> {{\'BLOCKCHAIN.VIEW.POW_MIN\'|translate}}<h4 class="gray">{{\'BLOCKCHAIN.VIEW.POW_MIN_HELP\'|translate}}</h4><span class="badge badge-stable">{{::formData.powMin}}</span></ion-item><ion-item class="item-icon-left item-text-wrap" copy-on-click="{{::formData.hash}}"><i class="icon ion-pound"></i> {{\'BLOCKCHAIN.VIEW.HASH\'|translate}} <span class="item-note hidden-xs hidden-sm dark">{{::formData.hash}}</span><h5 class="visible-xs visible-sm dark">{{::formData.hash}}</h5></ion-item><ion-item class="hidden-sm hidden-xs"></ion-item><span class="item item-divider">{{\'BLOCKCHAIN.VIEW.DATA_DIVIDER\' | translate}}</span><ion-item ng-if="compactMode && formData.empty" class="item-icon-left item-text-wrap">{{\'BLOCKCHAIN.VIEW.EMPTY\'|translate}}</ion-item><ion-item ng-if="!compactMode || formData.dividend" class="item-icon-left item-text-wrap" copy-on-click="{{::formData.dividend/100}}"><i class="icon ion-arrow-up-c"></i><div class="col col-60">{{\'COMMON.UNIVERSAL_DIVIDEND\'|translate}}<h4 class="gray">{{\'BLOCKCHAIN.VIEW.UNIVERSAL_DIVIDEND_HELP\'|translate: {membersCount: formData.membersCount} }}</h4></div><span class="badge badge-balanced" ng-if="formData.dividend">+1 <span ng-bind-html="formData.currency|currencySymbol: {useRelative: true} "></span> / {{\'COMMON.MEMBER\'|translate|lowercase}} </span><span class="badge badge-stable" ng-if="!formData.dividend">0</span> <span class="badge badge-secondary" ng-if="formData.dividend">+ {{formData.dividend| formatAmount: {currency: formData.currency, useRelative: false} }} / {{\'COMMON.MEMBER\'|translate|lowercase}}</span></ion-item><ng-if ng-if="!compactMode || formData.identitiesCount"><ion-item class="item-icon-left"><i class="icon ion-person"></i> <b class="ion-clock" style="position: absolute; top: 16px; left: 39px; font-size: 12px;"></b> {{\'BLOCKCHAIN.VIEW.IDENTITIES_COUNT\'|translate}} <span class="badge badge-balanced" ng-if="formData.identitiesCount">+{{::formData.identitiesCount}}</span> <span class="badge badge-stable" ng-if="!formData.identitiesCount">0</span></ion-item><div class="padding-bottom item-icon-left-padding item-icon-right-padding" ng-if="formData.identitiesCount"><ion-item ng-repeat="identity in ::formData.identities" class="item-border-large item-small-height" ng-include="::\'templates/blockchain/link_identity.html\'"></ion-item></div></ng-if><ng-if ng-if="!compactMode || formData.joinersCount"><ion-item class="item-icon-left"><i class="icon ion-person-add"></i> {{\'BLOCKCHAIN.VIEW.JOINERS_COUNT\'|translate}} <span class="badge badge-balanced" ng-if="formData.joinersCount">+{{::formData.joinersCount}}</span> <span class="badge badge-stable" ng-if="!formData.joinersCount">0</span></ion-item><div class="padding-bottom item-icon-left-padding item-icon-right-padding" ng-if="formData.joinersCount"><ion-item ng-repeat="identity in ::formData.joiners" class="item-border-large item-small-height" ng-include="::\'templates/blockchain/link_identity.html\'"></ion-item></div></ng-if><ng-if ng-if="!compactMode || formData.activesCount"><ion-item class="item-icon-left"><i class="icon ion-person"></i> <b class="ion-refresh" style="position: absolute; top: 25px; left: 39px; font-size: 12px;"></b> {{\'BLOCKCHAIN.VIEW.ACTIVES_COUNT\'|translate}}<h4 class="gray">{{\'BLOCKCHAIN.VIEW.ACTIVES_COUNT_HELP\'|translate}}</h4><span class="badge badge-balanced" ng-if="formData.activesCount">{{::formData.activesCount}}</span> <span class="badge badge-stable" ng-if="!formData.activesCount">0</span></ion-item><div class="padding-bottom item-icon-left-padding item-icon-right-padding" ng-if="formData.activesCount"><ion-item ng-repeat="identity in ::formData.actives" class="item-border-large item-small-height" ng-include="::\'templates/blockchain/link_identity.html\'"></ion-item></div></ng-if><ng-if ng-if="!compactMode || (formData.excludedCount-formData.revokedCount)"><ion-item class="item-icon-left"><i class="icon ion-person"></i> <b class="ion-close dark" style="position: absolute; top: 25px; left: 39px; font-size: 12px;"></b> {{\'BLOCKCHAIN.VIEW.EXCLUDED_COUNT\'|translate}}<h4 class="gray">{{\'BLOCKCHAIN.VIEW.EXCLUDED_COUNT_HELP\'|translate}}</h4><span class="badge badge-assertive" ng-if="formData.excludedCount-formData.revokedCount">-{{::formData.excludedCount-formData.revokedCount}}</span> <span class="badge badge-stable" ng-if="!(formData.excludedCount-formData.revokedCount)">0</span></ion-item><div class="padding-bottom item-icon-left-padding item-icon-right-padding" ng-if="formData.excludedCount"><ion-item ng-repeat="identity in ::formData.excluded" class="item-border-large item-small-height" ng-include="::\'templates/blockchain/link_identity.html\'"></ion-item></div></ng-if><ng-if ng-if="!compactMode || formData.leaversCount"><ion-item class="item-icon-left" ng-if="!compactMode || formData.leaversCount"><i class="icon ion-person"></i> <b class="ion-minus" style="position: absolute; top: 25px; left: 39px; font-size: 12px;"></b> {{\'BLOCKCHAIN.VIEW.LEAVERS_COUNT\'|translate}}<h4 class="gray">{{\'BLOCKCHAIN.VIEW.LEAVERS_COUNT_HELP\'|translate}}</h4><span class="badge badge-assertive" ng-if="formData.leaversCount">-{{::formData.leaversCount}}</span> <span class="badge badge-stable" ng-if="!formData.leaversCount">0</span></ion-item><div class="padding-bottom item-icon-left-padding item-icon-right-padding" ng-if="formData.leaversCount"><ion-item ng-repeat="identity in ::formData.leavers" class="item-border-large item-small-height" ng-include="::\'templates/blockchain/link_identity.html\'"></ion-item></div></ng-if><ng-if ng-if="!compactMode || formData.revokedCount"><ion-item class="item-icon-left"><i class="icon ion-person"></i> <b class="ion-minus-circled assertive" style="position: absolute; top: 25px; left: 39px; font-size: 12px;"></b> {{\'BLOCKCHAIN.VIEW.REVOKED_COUNT\'|translate}}<h4 class="gray">{{\'BLOCKCHAIN.VIEW.REVOKED_COUNT_HELP\'|translate}}</h4><span class="badge badge-balanced" ng-if="formData.revokedCount">-{{::formData.revokedCount}}</span> <span class="badge badge-stable" ng-if="!formData.revokedCount">0</span></ion-item><div class="padding-bottom item-icon-left-padding item-icon-right-padding" ng-if="formData.revokedCount"><ion-item ng-repeat="identity in ::formData.revoked" class="item-border-large item-small-height" ng-include="::\'templates/blockchain/link_identity.html\'"></ion-item></div></ng-if><ng-if ng-if="!compactMode || formData.certificationsCount"><ion-item class="item-icon-left"><i class="icon ion-ribbon-a"></i> {{\'BLOCKCHAIN.VIEW.CERT_COUNT\'|translate}} <span class="badge badge-stable" ng-class="{\'badge-positive\':formData.certificationsCount}">{{::formData.certificationsCount}}</span></ion-item><div class="padding-bottom item-icon-left-padding item-icon-right-padding no-padding-xs" ng-if="formData.certificationsCount"><div ng-repeat="(key, certs) in formData.certifications" class="item item-border-large item-small-height"><div class="row no-padding"><div class="col col-center no-padding"><ng-repeat ng-repeat="cert in certs"><ng-include src="::\'templates/blockchain/link_identity.html\'" onload="identity=cert.from"></ng-include><br></ng-repeat></div><div class="col col-10 col-center gray text-center no-padding"><h2><i class="icon ion-arrow-right-a"></i></h2></div><div class="col col-40 col-center no-padding" ng-include="::\'templates/blockchain/link_identity.html\'" onload="identity=certs[0].to"></div></div></div></div></ng-if><ng-if ng-if="!compactMode || formData.transactionsCount"><ion-item class="item-icon-left"><i class="icon ion-card"></i> {{\'BLOCKCHAIN.VIEW.TX_COUNT\'|translate}} <span class="badge badge-stable" ng-class="{\'badge-positive\':formData.transactionsCount}">{{::formData.transactionsCount}}</span></ion-item><div class="padding-bottom item-icon-left-padding item-icon-right-padding no-padding-xs" ng-if="formData.transactionsCount"><div ng-repeat="tx in ::formData.transactions" class="item item-small-height item-border-large"><div class="row no-padding" style="padding-top: 3px;"><div class="col col-40 col-center no-padding list no-margin"><div ng-repeat="identity in ::tx.issuers" class="item no-padding item-small-height"><ng-include src="\'templates/blockchain/link_identity.html\'"></ng-include></div></div><div class="col col-10 col-center gray text-center no-padding"><h2><i class="icon ion-arrow-right-a"></i></h2></div><div class="col no-padding padding-right no-padding-xs col-text-wrap list no-margin"><span class="gray" class="gray" ng-if="tx.toHimself" translate>BLOCKCHAIN.VIEW.TX_TO_HIMSELF</span><div ng-repeat="output in ::tx.outputs" class="item no-padding item-small-height"><ng-include ng-if="::output.pubkey" src="\'templates/blockchain/link_identity.html\'" onload="identity=output"></ng-include><span ng-if="::!output.pubkey && output.unlockFunctions"><i class="icon ion-locked"></i> (<a ng-click="showUnlockConditionPopover(output, $event)"> <i ng-repeat="unlockFunction in ::output.unlockFunctions" ng-class="::{\'ion-key\': (unlockFunction==\'SIG\'), \'ion-clock\': (unlockFunction==\'CSV\' || unlockFunction==\'CLTV\'), \'ion-lock-combination\': (unlockFunction==\'XHX\') }" class="icon"></i> </a>) </span><span class="badge badge-balanced" ng-bind-html="::output.amount | formatAmount:{currency: formData.currency, useRelative: false} "></span></div></div></div></div></div></ng-if></div></div><div class="col col-15 hidden-sm hidden-xs"></div></div></ion-content></ion-view>'),e.put("templates/common/badge_certification_count.html",'<span ng-attr-id="{{$ctrl.csId}}" class="badge badge-balanced" ng-class="{\'badge-energized\': $ctrl.requirements.willNeedCertificationCount || ($ctrl.requirements.needCertificationCount + $ctrl.requirements.pendingCertificationCount >= $ctrl.parameters.sigQty),\n \'badge-assertive\': ($ctrl.requirements.needCertificationCount + $ctrl.requirements.pendingCertificationCount < $ctrl.parameters.sigQty)}"><span ng-if="$ctrl.requirements.certificationCount || !$ctrl.requirements.pendingCertificationCount"><i ng-if="!$ctrl.requirements.needCertificationCount" class="ion-android-done"></i> {{$ctrl.requirements.certificationCount}} <i ng-if="$ctrl.requirements.willNeedCertificationCount" class="ion-android-warning"></i> </span><span ng-if="$ctrl.requirements.pendingCertificationCount"><ng-if ng-if="$ctrl.requirements.certificationCount">+</ng-if><i class="ion-clock"></i> {{$ctrl.requirements.pendingCertificationCount}}</span></span>'),e.put("templates/common/badge_given_certification_count.html",'<div ng-attr-id="{{$ctrl.csId}}" class="badge badge-calm" ng-class="{\'badge-assertive\': $ctrl.identity.given_cert.length >= $ctrl.parameters.sigStock}"><span><i ng-if="$ctrl.identity.given_cert.length" class="ion-android-done"></i> {{$ctrl.identity.given_cert.length}} </span><span ng-if="$ctrl.identity.given_cert_pending.length">(<ng-if ng-if="$ctrl.identity.given_cert.length">+</ng-if><i class="ion-clock"></i> {{$ctrl.identity.given_cert_pending.length}}) </span><small>/ {{$ctrl.parameters.sigStock}}</small></div>'),e.put("templates/common/form_error_messages.html",'<div class="form-error" ng-message="minlength"><span translate="ERROR.FIELD_TOO_SHORT"></span></div><div class="form-error" ng-message="maxlength"><span translate="ERROR.FIELD_TOO_LONG"></span></div><div class="form-error" ng-message="pattern"><span translate="ERROR.FIELD_ACCENT"></span></div><div class="form-error" ng-message="required"><span translate="ERROR.FIELD_REQUIRED"></span></div>'),e.put("templates/common/note_feature_not_available.html",'<h4 class="assertive"><b class="ion-android-close"></b> <span translate>MODE.DEMO.FEATURE_NOT_AVAILABLE</span></h4>'),e.put("templates/common/popover_copy.html",'<ion-popover-view class="popover-copy" style="height: {{(!rows || rows &lt;= 1) ? 50 : rows*22}}px"><ion-content scroll="false"><div class="list"><div class="item item-input"><input type="text" autocomplete="off" ng-if="!rows || rows &lt;= 1" ng-model="value"> <textarea ng-if="rows && rows > 1" ng-model="value" rows="{{rows}}" cols="10">\n </textarea></div></div></ion-content></ion-popover-view>'),e.put("templates/common/popover_helptip.html",'<ion-popover-view class="popover-helptip"><ion-content scroll="false" class="list"><p><i ng-if="icon.position && !icon.position.startsWith(\'bottom-\')" class="{{icon.class}} icon-{{icon.position}} hidden-xs" style="{{icon.style}}"></i><a ng-click="closePopover()" class="pull-right button-close" ng-class="{\'pull-left\': icon.position === \'right\', \'pull-right\': icon.position !== \'right\'}"><i class="ion-close"></i> </a><span>&nbsp;</span></p><p class="padding light"><ng-bind-html ng-bind-html="content | translate:contentParams"></ng-bind-html><ng-bind-html ng-bind-html="trustContent"></ng-bind-html></p><div class="text-center" ng-if="!tour"><button class="button button-small button-stable" ng-if="!hasNext" ng-click="closePopover(true)" translate>COMMON.BTN_UNDERSTOOD</button> <button class="button button-small button-stable" id="helptip-btn-ok" ng-if="hasNext" ng-click="closePopover(false)" translate>COMMON.BTN_UNDERSTOOD</button> <button id="helptip-btn-ok" class="button button-small button-positive icon-right ink" ng-if="hasNext" ng-click="closePopover(true)"><i class="icon ion-chevron-right"></i></button></div><div class="text-center" ng-if="tour"><button class="button button-small button-positive" id="helptip-btn-ok" ng-if="!hasNext" ng-click="closePopover(false)" translate>COMMON.BTN_CLOSE</button> <button id="helptip-btn-ok" class="button button-small button-positive icon-right ink" ng-if="hasNext" ng-click="closePopover(true)">{{\'COMMON.BTN_CONTINUE\'|translate}} <i class="icon ion-chevron-right"></i></button></div><p><i ng-if="icon.position && icon.position.startsWith(\'bottom-\')" class="{{icon.class}} icon-{{icon.position}} hidden-xs"></i></p></ion-content></ion-popover-view>'),e.put("templates/common/popover_locales.html",'<ion-popover-view class="fit popover-locales" style="height: {{locales.length*48}}px;"><ion-content scroll="false"><div class="list item-text-wrap block"><a ng-repeat="l in locales track by l.id" class="item item-icon-left ink" ng-click="changeLanguage(l.id)"><i class="item-image avatar" style="background-image: url(./img/flag-{{l.flag}}.png)"></i> {{l.label | translate}}</a></div></ion-content></ion-popover-view>'),e.put("templates/common/popover_profile.html",'<ion-popover-view class="fit has-header popover-profile hidden-xs hidden-sm"><ion-content scroll="false"><div class="row"><div class="col col-33"><i class="avatar avatar-member" ng-if="!walletData.avatar" ng-class="{\'royal-bg\': login, \'stable-bg\': !login}"></i> <i class="avatar" ng-if="walletData.avatar" style="background-image: url(\'{{walletData.avatar.src}}\')"></i></div><div class="col col-66" ng-if="login"><h4>{{walletData.name||walletData.uid}}</h4><h4 class="gray" ng-if="!walletData.name && !walletData.uid" copy-on-click="{{walletData.pubkey}}"><i class="icon ion-key"></i> {{walletData.pubkey|formatPubkey}}</h4><span class="gray" ng-if="walletData.name||walletData.uid" copy-on-click="{{walletData.pubkey}}"><i class="icon ion-key"></i> {{walletData.pubkey|formatPubkey}}</span></div></div><div class="row" ng-show="login"><div class="col col-66 col-offset-33"><button ng-show="!auth" class="button button-assertive button-small ink" ng-click="doAuth()">{{\'AUTH.BTN_AUTH\' | translate}}</button><cs-extension-point name="profile-popover-user"></cs-extension-point></div></div><div class="row" ng-show="!login"><div class="col col-66 col-offset-33"><div class="text-center no-padding gray">{{\'LOGIN.NO_ACCOUNT_QUESTION\'|translate}}<br class="visible-xs"><b><button class="button button-calm button-small ink" ng-click="showJoinModal()">{{\'LOGIN.CREATE_ACCOUNT\'|translate}}</button></b></div></div></div></ion-content><ion-footer-bar class="stable-bg row"><div class="col"><button class="button button-raised button-block button-stable ink ink-dark" id="helptip-popover-profile-btn-settings" ng-click="showSettings()" ui-sref="app.settings"><i class="icon ion-android-settings"></i> {{\'MENU.SETTINGS\' | translate}}</button></div><div class="col"><button class="button button-raised button-block button-stable ink ink-dark" ng-show="login" ng-click="logout()" translate>COMMON.BTN_LOGOUT</button> <button class="button button-raised button-block button-positive ink" ng-show="!login" ng-click="loginAndGo(\'app.view_wallet\')" translate>COMMON.BTN_LOGIN</button></div></ion-footer-bar></ion-popover-view>'),e.put("templates/common/popover_share.html",'<ion-popover-view class="popover-share"><ion-content scroll="false"><div class="bar bar-header"><h1 class="title">{{titleKey|translate:titleValues}}</h1><span class="gray pull-right">{{time|formatDate}}</span></div><div class="list no-margin no-padding has-header has-footer block"><div class="item item-input"><input type="text" autocomplete="off" ng-model="value"></div></div><div class="bar bar-footer"><div class="button-bar"><a class="button button-icon positive icon ion-social-facebook" href="https://www.facebook.com/sharer/sharer.php?u={{postUrl|formatEncodeURI}}&amp;title={{postMessage|formatEncodeURI}}" onclick="window.open(this.href, \'facebook-share\',\'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,width=580,height=296\');return false;" title="{{\'COMMON.POPOVER_SHARE.SHARE_ON_FACEBOOK\'|translate}}"></a> <a class="button button-icon positive icon ion-social-twitter" href="https://twitter.com/intent/tweet?url={{postUrl|formatEncodeURI}}&amp;text={{postMessage|formatEncodeURI}}" onclick="window.open(this.href, \'twitter-share\',\'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,width=580,height=296\');return false;" title="{{\'COMMON.POPOVER_SHARE.SHARE_ON_TWITTER\'|translate}}"></a> <a class="button button-icon positive icon ion-social-googleplus" href="https://plus.google.com/share?url={{postUrl|formatEncodeURI}}" onclick="window.open(this.href, \'google-plus-share\', \'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=296,width=580\');return false;" title="{{\'COMMON.POPOVER_SHARE.SHARE_ON_GOOGLEPLUS\'|translate}}"></a> <a class="button button-icon positive icon ion-social-diaspora" href="https://sharetodiaspora.github.io/?title={{postMessage|formatEncodeURI}}&amp;url={{postUrl|formatEncodeURI}}" onclick="window.open(this.href, \'diaspora-share\',\'menubar=no,toolbar=no,resizable=yes,scrollbars=yes,width=580,height=296\');return false;" title="{{\'COMMON.POPOVER_SHARE.SHARE_ON_DIASPORA\'|translate}}"></a> <a class="button-close" title="{{\'COMMON.BTN_CLOSE\'|translate}}" ng-click="closePopover()"><i class="icon ion-close"></i></a></div></div></ion-content></ion-popover-view>'),e.put("templates/common/popup_password.html",'<form name="pwdForm" ng-submit="submit($event)"><div class="list" ng-init="setForm(pwdForm)"><label class="item item-input" ng-class="{\'item-input-error\': pwdForm.$submitted && pwdForm.password.$invalid}"><input name="password" type="password" placeholder="{{\'ACCOUNT.SECURITY.KEYFILE.PASSWORD_POPUP.PASSWORD_HELP\' | translate}}" ng-model="formData.password" ng-minlength="1" required></label><div class="form-errors" ng-if="pwdForm.$submitted && pwdForm.pseudo.$error" ng-messages="pwdForm.password.$error"><div class="form-error" ng-message="required"><span translate="ERROR.FIELD_REQUIRED"></span></div><div class="form-error" ng-message="minlength"><span translate="ERROR.FIELD_TOO_SHORT"></span></div></div><div class="form-errors" ng-if="error"><div class="form-error">{{error|translate}}</div></div></div></form>'),e.put("templates/common/qrcode.html",'<a ng-attr-id="{{ qrcodeId }}" ng-show="!loading" class="qrcode fade-in pull-right" ng-class="{\'active\': toggleQRCode}" ng-click="toggleQRCode = !toggleQRCode"><div class="content"></div><div class="footer item item-icon-left item-text-wrap ink" on-hold="copy(formData.pubkey)" copy-on-click="{{:rebind:formData.pubkey}}" ng-click="$event.stopPropagation()"><i class="icon ion-key"></i> <span>{{:locale:\'COMMON.PUBKEY\'|translate}}</span><h4 id="pubkey" class="dark">{{:rebind:formData.pubkey}}</h4></div></a>'),e.put("templates/common/view_passcode.html",'<ion-view left-buttons="leftButtons"><ion-nav-title><span class="visible-xs visible-sm" translate>COMMON.PASSCODE.TITLE</span></ion-nav-title><ion-content scroll="false"></ion-content></ion-view>'),e.put("templates/currency/items_network.html",'<ion-item id="helptip-network-blockchain" class="item-icon-left item-text-wrap"><i class="icon ion-clock"></i> <span class="col col-60" translate>CURRENCY.VIEW.MEDIAN_TIME</span> <span class="badge badge-stable">{{formData.medianTime | medianDate}}</span></ion-item><ion-item class="item-icon-left item-text-wrap"><i class="icon ion-lock-combination"></i> <span class="col col-75" translate>CURRENCY.VIEW.POW_MIN</span> <span class="badge badge-stable">{{formData.difficulty | formatInteger}}</span></ion-item><cs-extension-point name="network-actual"></cs-extension-point><div class="item item-divider"><span translate>CURRENCY.VIEW.NETWORK_RULES_DIVIDER</span></div><ion-item class="item-icon-left item-text-wrap"><i class="icon ion-clock" style="position: absolute; font-size: 20px; left: 16px; margin-top: 11px"></i> <b class="icon-secondary ion-lock-combination" style="left: 14px; margin-top: -4px;"></b> <b class="icon-secondary ion-arrow-right-c" style="font-size: 12px; left: 28px; margin-top: -4px;"></b> <b class="icon-secondary ion-lock-combination" style="left: 38px; margin-top: -4px;"></b> <span class="col col-75" translate>CURRENCY.VIEW.AVG_GEN_TIME</span> <span class="badge badge-stable">{{formData.avgGenTime | formatDuration}}</span></ion-item><div id="helptip-network-peers" class="item item-divider"><div class="pull-left"><span ng-if="search.type==\'member\'" translate>PEER.MEMBERS</span> <span ng-if="search.type==\'mirror\'" translate>PEER.MIRRORS</span> <span ng-if="search.type==\'offline\'" translate>PEER.OFFLINE</span> <span ng-if="!search.type" translate>PEER.PEERS</span> <span ng-if="!search.loading">({{search.results.length}})</span></div><div class="buttons pull-right"><ion-spinner class="icon" icon="android" ng-if="search.loading"></ion-spinner><a class="button button-icon button-small-padding icon ion-loop gray hidden-xs hidden-sm ink" ng-if="!search.loading" ng-click="refresh()"></a> <a class="button button-icon button-small-padding icon ion-android-more-vertical gray hidden-xs hidden-sm ink" ng-if="!search.loading" ng-click="showActionsPopover($event)"></a></div></div><ng-include src="::\'templates/network/items_peers.html\'"></ng-include>'),
e.put("templates/currency/items_parameters.html",'<div bind-notifier="{ rebind:formData.useRelative }"><ion-item class="item-icon-left item-text-wrap visible-xs visible-sm"><i class="icon ion-android-bookmark"></i> <span translate>CURRENCY.VIEW.CURRENCY_NAME</span><div class="item-note dark" ng-if="!loading">{{formData.currency}} (<span ng-bind-html=":rebind:formData.currency | currencySymbol:formData.useRelative"></span>)</div></ion-item><ion-item id="helptip-currency-mass-member" class="item-icon-left item-text-wrap"><i class="icon ion-pie-graph"></i><div class="col col-60"><span translate>CURRENCY.VIEW.SHARE</span> <span class="gray">(M<sub>t</sub>/N<sub>t</sub>)</span></div><span id="helptip-currency-mass-member-unit" ng-if="!loading" class="badge badge-calm" ng-bind-html=":rebind:formData.MoverN | formatAmount:{currency: formData.currency, useRelative: formData.useRelative, currentUD: formData.currentUD}"></span></ion-item><ion-item class="item-icon-left item-text-wrap"><i class="icon ion-record"></i><div class="col col-60"><span translate>CURRENCY.VIEW.MASS</span> <span class="gray">(M<sub>t</sub>)</span></div><span class="badge badge-energized" ng-if="!loading" ng-bind-html=":rebind:formData.M | formatAmount:{currency: formData.currency, useRelative: formData.useRelative, currentUD: formData.currentUD}"></span></ion-item><cs-extension-point name="parameters-actual"></cs-extension-point><ion-item class="item-icon-left item-text-wrap"><i class="icon ion-arrow-graph-up-right"></i><div class="col col-60"><span translate>CURRENCY.VIEW.C_ACTUAL</span> <span class="gray">(c<sub>{{\'CURRENCY.VIEW.CURRENT\'|translate}}</sub>)</span></div><span class="badge badge-stable">{{formData.cactual | formatNumeral: \'0,0.00\'}} %&nbsp;/&nbsp;{{formData.dt | formatPeriod}}</span></ion-item><ion-item class="item-icon-left item-text-wrap"><i class="icon ion-load-c"></i><div class="col col-60"><span translate>CURRENCY.VIEW.UD</span> <span class="gray">({{\'COMMON.UD\'|translate}}<sub>t</sub>)</span></div><div class="badge badge-royal" ng-if="!loading"><span ng-if="formData.useRelative">1<ng-bind-html ng-bind-html=":rebind:formData.currency| currencySymbol:true"></ng-bind-html></span><span ng-if="!formData.useRelative" ng-bind-html=":rebind:formData.currentUD | formatAmount:{currency: formData.currency, useRelative: formData.useRelative, currentUD: formData.currentUD}"></span> &nbsp;/&nbsp;{{formData.dt | formatPeriod}}</div></ion-item><div class="item item-toggle dark"><div class="item-label text-right gray" translate>COMMON.BTN_RELATIVE_UNIT</div><label class="toggle toggle-royal" id="helptip-currency-change-unit"><input type="checkbox" ng-model="formData.useRelative"><div class="track"><div class="handle"></div></div></label></div><a name="helptip-currency-rules-anchor"></a><div class="item item-divider" id="helptip-currency-rules"><span translate>CURRENCY.VIEW.MONEY_RULES_DIVIDER</span></div><ion-item class="item-icon-left item-text-wrap"><i class="icon ion-arrow-graph-up-right"></i><div class="col col-60"><span translate>CURRENCY.VIEW.C_RULE</span> <span class="gray">(c)</span></div><span class="item-note dark" ng-if="!loading && !formData.udReevalTime0">{{formData.c*100 | formatNumeral: \'0,0.00\'}} %&nbsp;/&nbsp;{{formData.dt | formatPeriod}}</span><span class="badge badge-stable" ng-if="!loading && formData.udReevalTime0">{{formData.c*100 | formatNumeral: \'0,0.00\'}} %&nbsp;/&nbsp;{{formData.dtReeval | formatDuration}}</span></ion-item><ion-item class="item-icon-left item-text-wrap" ng-if="formData.udReevalTime0 && formData.allRules"><i class="icon ion-load-c"></i> <b class="ion-clock icon-secondary" style="font-size: 18px; left: 36px; top: -12px;"></b><div class="col col-60"><span translate>CURRENCY.VIEW.DT_REEVAL</span> <span class="gray">(dt<sub>{{\'CURRENCY.VIEW.REEVAL_SYMBOL\'|translate}}</sub>)</span></div><span class="item-note dark" ng-if="!loading" translate="CURRENCY.VIEW.DT_REEVAL_VALUE" translate-values="formData"></span></ion-item><ion-item class="item-icon-left item-text-wrap" ng-if="formData.udReevalTime0 && formData.allRules"><i class="icon ion-load-c"></i> <b class="ion-calendar icon-secondary" style="font-size: 18px; left: 36px; top: -12px;"></b><div class="col col-60"><span translate>CURRENCY.VIEW.UD_REEVAL_TIME0</span> <span class="gray">(t0<sub>{{\'CURRENCY.VIEW.REEVAL_SYMBOL\'|translate}}</sub>)</span></div><span class="item-note dark" ng-if="!loading">{{formData.udReevalTime0|medianDate}}</span></ion-item><ion-item class="item-icon-left item-text-wrap" ng-if="formData.allRules"><i class="icon ion-load-c"></i> <b class="ion-calculator icon-secondary" style="font-size: 18px; left: 36px; top: -12px;"></b><div class="col col-60"><span translate>CURRENCY.VIEW.UD_RULE</span> <span class="gray" ng-if="formData.udReevalTime0">- {{\'COMMON.UD\'|translate}}<sub>{{formData.dt|formatPeriod}}</sub>(t<sub>{{\'CURRENCY.VIEW.REEVAL_SYMBOL\'|translate}}</sub>)</span></div><span class="item-note dark" ng-if="!loading && !formData.udReevalTime0">{{\'COMMON.UD\'|translate}}<sub>t-1</sub> + c<sup>2</sup> * M<sub>t-1</sub>/N<sub>t-1</sub></span><span class="item-note dark" ng-if="!loading && formData.udReevalTime0">{{\'COMMON.UD\'|translate}}<sub>{{formData.dt|formatPeriod}}</sub>(t<sub>{{\'CURRENCY.VIEW.REEVAL_SYMBOL\'|translate}}</sub> - dt<sub>{{\'CURRENCY.VIEW.REEVAL_SYMBOL\'|translate}}</sub>)+ c<sup>2</sup> * (M/N)(t<sub>{{\'CURRENCY.VIEW.REEVAL_SYMBOL\'|translate}}</sub> - dt<sub>{{\'CURRENCY.VIEW.REEVAL_SYMBOL\'|translate}}</sub>) / dt<sub>{{\'CURRENCY.VIEW.REEVAL_SYMBOL\'|translate}}</sub></span></ion-item><div class="item item-toggle dark"><div class="item-label text-right gray" translate>CURRENCY.VIEW.DISPLAY_ALL_RULES</div><label class="toggle toggle-royal"><input type="checkbox" ng-model="formData.allRules"><div class="track"><div class="handle"></div></div></label></div></div>'),e.put("templates/currency/items_wot.html",'<div bind-notifier="{ rebind:formData.useRelative }"><a name="helptip-currency-newcomers-anchor"></a><ion-item class="item-icon-left item-text-wrap"><i class="icon ion-person-stalker"></i><div class="col col-60"><span translate>CURRENCY.VIEW.MEMBERS</span> <span class="gray">(N<sub>{{\'CURRENCY.VIEW.CURRENT\'|translate}}</sub>)</span></div><span class="badge badge-calm" ng-if="!loading">{{formData.N | formatInteger}}</span></ion-item><ion-item id="helptip-currency-newcomers" class="item-icon-left item-text-wrap"><i class="icon ion-arrow-graph-up-right"></i><div class="col col-75"><span translate="CURRENCY.VIEW.MEMBERS_VARIATION" translate-values="{duration: formData.durationFromLastUD}"></span> <span class="gray">(&#916;N)</span></div><div class="badge" ng-if="!loading" ng-class="{\'badge-balanced\': (formData.N>formData.Nprev), \'badge-stable\': (formData.N==formData.Nprev) ,\'badge-assertive\': (formData.Nprev>formData.N)}">{{formData.N > formData.Nprev ? \'+\' : \'\'}}{{formData.N - formData.Nprev}}</div></ion-item><cs-extension-point name="wot-actual"></cs-extension-point><div class="item item-divider"><span translate>CURRENCY.VIEW.WOT_RULES_DIVIDER</span></div><ion-item class="item-icon-left item-text-wrap"><i class="icon ion-ribbon-b"></i> <span class="col col-75" translate>CURRENCY.VIEW.SIG_QTY_RULE</span> <span class="badge badge-balanced" ng-if="!loading">{{formData.sigQty}}</span></ion-item><ion-item class="item-icon-left item-text-wrap"><i class="icon ion-person"></i> <b class="ion-clock icon-secondary" style="font-size: 18px; left: 33px; top: -12px;"></b> <span class="col col-60" translate>CURRENCY.VIEW.MS_WINDOW</span> <span class="badge badge-assertive" ng-if="!loading">{{formData.msWindow | formatDuration}}</span></ion-item><ion-item class="item-icon-left item-text-wrap"><i class="icon ion-person"></i> <b class="ion-calendar icon-secondary" style="font-size: 18px; left: 33px; top: -12px;"></b> <span class="col col-60" translate>CURRENCY.VIEW.MS_VALIDITY</span> <span class="badge badge-balanced" ng-if="!loading">{{formData.msValidity | formatDuration}}</span></ion-item><ion-item class="item-icon-left item-text-wrap" ng-if="formData.allWotRules"><i class="icon ion-ribbon-b"></i> <b class="ion-clock icon-secondary" style="font-size: 18px; left: 33px; top: -12px;"></b> <span class="col col-60" translate>CURRENCY.VIEW.SIG_WINDOW</span> <span class="badge badge-stable" ng-if="!loading">{{formData.sigWindow | formatDuration}}</span></ion-item><ion-item class="item-icon-left item-text-wrap" ng-if="formData.allWotRules"><i class="icon ion-ribbon-b"></i> <b class="ion-calendar icon-secondary" style="font-size: 18px; left: 33px; top: -12px;"></b> <span class="col col-60" translate>CURRENCY.VIEW.SIG_VALIDITY</span> <span class="badge badge-balanced" ng-if="!loading">{{formData.sigValidity | formatDuration}}</span></ion-item><ion-item class="item-icon-left item-text-wrap" ng-if="formData.allWotRules"><i class="icon ion-ribbon-a"></i> <span class="col col-75" translate>CURRENCY.VIEW.SIG_STOCK</span> <span class="badge badge-stable" ng-if="!loading">{{formData.sigStock}}</span></ion-item><ion-item class="item-icon-left item-text-wrap" ng-if="formData.allWotRules"><i class="icon ion-clock" style="position: absolute; font-size: 20px; left: 16px;"></i> <b class="ion-ribbon-a icon-secondary" style="left: 16px; top: -15px;"></b> <b class="ion-arrow-right-c icon-secondary" style="left: 28px; top: -15px;"></b> <b class="ion-ribbon-a icon-secondary" style="left: 40px; top: -15px;"></b> <span class="col col-75" translate>CURRENCY.VIEW.SIG_PERIOD</span> <span class="badge badge-stable" ng-if="!loading">{{formData.sigPeriod | formatDuration}}</span></ion-item><ion-item class="item-icon-left item-text-wrap" ng-if="formData.allWotRules"><i class="icon ion-steam"></i> <b class="ion-person icon-secondary" style="left: 38px; top: -17px"></b><div class="col col-75"><span ng-bind-html="\'CURRENCY.VIEW.STEP_MAX\'|translate"></span> <span class="gray">(stepMax)</span></div><span class="badge badge-assertive" ng-if="!loading">{{formData.stepMax}}</span></ion-item><ion-item class="item-icon-left item-text-wrap" ng-if="formData.allWotRules"><i class="icon ion-ribbon-b"></i> <b class="ion-star icon-secondary" style="color: yellow; font-size: 16px; left: 25px; top: -7px;"></b> <span class="col col-75" translate>CURRENCY.VIEW.SENTRIES</span> <span class="badge badge-stable" ng-if="!loading">{{formData.sentries}}</span></ion-item><ion-item class="item-icon-left item-text-wrap" ng-if="formData.allWotRules"><i class="icon ion-ribbon-b"></i> <b class="ion-star icon-secondary" style="color: yellow; font-size: 16px; left: 25px; top: -7px;"></b> <span class="col col-75" translate>CURRENCY.VIEW.SENTRIES_FORMULA</span> <span class="item-note dark" ng-if="!loading">{{\'CURRENCY.VIEW.MATH_CEILING\'| translate}}( N<sub>t</sub><sup>^ (1 / stepMax)</sup>)</span></ion-item><ion-item class="item-icon-left item-text-wrap" ng-if="formData.allWotRules"><i class="icon ion-pull-request"></i> <span class="col col-75" translate>CURRENCY.VIEW.XPERCENT</span> <span class="badge badge-stable" ng-if="!loading">{{formData.xpercent*100| formatNumeral: \'0,0\'}} %</span></ion-item><div class="item item-toggle dark"><div class="item-label text-right gray" translate>CURRENCY.VIEW.DISPLAY_ALL_RULES</div><label class="toggle toggle-royal"><input type="checkbox" ng-model="formData.allWotRules"><div class="track"><div class="handle"></div></div></label></div></div>'),e.put("templates/currency/lookup_form.html",'<ion-list><div class="item center" ng-if="search.loading"><ion-spinner icon="android"></ion-spinner></div><div ng-repeat="currency in search.results" ng-class="{ selected: selectedCurrency == currency }"><a class="item card card-item stable-bg padding ink" ng-click="selectCurrency(currency)" ng-class="{ selected: selectedCurrency && selectedCurrency.name == currency.name }"><h2>{{currency.name}}</h2><h4 class="gray">{{currency.peer.server}}</h4><span class="badge badge-royal">{{\'CURRENCY.SELECT.MEMBERS_COUNT\'|translate:currency}}</span></a></div></ion-list>'),e.put("templates/currency/lookup.html",'<ion-view view-title="{{\'CURRENCY.SELECT.TITLE\' | translate}}"><ion-content class="padding no-padding-xs no-padding-sm"><h4 class="content double-padding-x" translate>CURRENCY.SELECT.CURRENCIES</h4><ng-include src="::\'templates/currency/lookup_form.html\'"></ion-content></ion-view>'),e.put("templates/currency/modal_license.html",'<ion-modal-view class="modal-full-height modal-license"><ion-header-bar class="bar-positive"><button class="button button-clear visible-xs" ng-click="closeModal()" translate>COMMON.BTN_CANCEL</button><h1 class="title" translate>CURRENCY.LICENSE.TITLE</h1><button class="button button-icon button-clear icon ion-android-send visible-xs" ng-click="doTransfer()"></button></ion-header-bar><ion-content scroll="false" style="bottom: 0px;"><p ng-if="!licenseUrl && !loading">translate>CURRENCY.LICENSE.NO_LICENSE_FILE</p><iframe ng-if="licenseUrl && !loading" class="padding-left padding-right no-padding-xs iframe-license" id="iframe-license" ng-src="{{licenseUrlHtml||licenseUrl}}"></iframe><div class="padding hidden-xs text-center"><button class="button button-stable ink" ng-click="downloadFile()">{{\'CURRENCY.LICENSE.BTN_DOWNLOAD\' | translate}}</button> <button class="button button-positive ink" type="submit" ng-click="closeModal()">{{\'COMMON.BTN_CLOSE\' | translate}}</button></div></ion-content></ion-modal-view>'),e.put("templates/currency/popover_actions.html",'<ion-popover-view class="fit has-header popover-wallet-actions"><ion-header-bar><h1 class="title" translate>COMMON.POPOVER_ACTIONS_TITLE</h1></ion-header-bar><ion-content scroll="false"><div class="list item-text-wrap"><a class="item item-icon-left ink hidden-sm hidden-xs" ng-click="startCurrencyTour()"><i class="icon ion-easel"></i> {{\'COMMON.BTN_HELP_TOUR_SCREEN\' | translate}}</a></div></ion-content></ion-popover-view>'),e.put("templates/currency/tabs/tab_blocks.html",'<ion-view><ion-nav-buttons side="secondary"><button class="button button-icon button-clear icon ion-navicon visible-xs visible-sm" ng-click="toggleCompactMode()"><b class="icon-secondary" ng-class="{\'ion-arrow-down-b\': !compactMode, \'ion-arrow-up-b\': compactMode}" style="top: -12px; left: 11px; font-size: 10px;"></b> <b class="icon-secondary" ng-class="{\'ion-arrow-up-b\': !compactMode,\'ion-arrow-down-b\': compactMode}" style="top: 12px; left: 11px; font-size: 10px;"></b></button><cs-extension-point name="nav-buttons"></cs-extension-point></ion-nav-buttons><ion-content><div class="item item-divider"><span translate>BLOCKCHAIN.LOOKUP.LAST_BLOCKS</span></div><cs-extension-point name="buttons"></cs-extension-point><ng-include src="::\'templates/blockchain/list_blocks.html\'"></ng-include></ion-content></ion-view>'),e.put("templates/currency/tabs/tab_network.html",'<ion-view><ion-nav-buttons side="secondary"><button class="button button-icon button-clear" ng-click="showExtendActionsPopover($event)"><i class="icon ion-android-funnel"></i></button></ion-nav-buttons><ion-content><ion-refresher pulling-text="{{\'COMMON.BTN_REFRESH\' | translate}}" on-refresh="refreshPeers()"></ion-refresher><div class="list"><ng-include src="::\'templates/currency/items_network.html\'"></ng-include></div></ion-content></ion-view>'),e.put("templates/currency/tabs/tab_parameters.html",'<ion-view><ion-nav-buttons side="secondary"><cs-extension-point name="nav-buttons"></cs-extension-point></ion-nav-buttons><ion-content><ion-refresher pulling-text="{{\'COMMON.BTN_REFRESH\' | translate}}" on-refresh="refresh()"></ion-refresher><div class="list"><ng-include src="::\'templates/currency/items_parameters.html\'"></ng-include></div></ion-content></ion-view>'),e.put("templates/currency/tabs/tab_wot.html",'<ion-view><ion-content><ion-refresher pulling-text="{{\'COMMON.BTN_REFRESH\' | translate}}" on-refresh="refresh()"></ion-refresher><div class="list"><ng-include src="::\'templates/currency/items_wot.html\'"></ng-include></div></ion-content></ion-view>'),e.put("templates/currency/view_currency_lg.html",'<ion-view left-buttons="leftButtons" cache-view="false"><ion-nav-title bind-notifier="{ rebind:formData.useRelative }"><span ng-if="!loading">{{\'CURRENCY.VIEW.TITLE\' | translate}} {{formData.currency|abbreviate}}</span></ion-nav-title><ion-nav-buttons side="secondary"><button class="button button-icon button-clear icon ion-loop visible-xs visible-sm" ng-click="refreshPeers()"></button><cs-extension-point name="nav-buttons"></cs-extension-point></ion-nav-buttons><ion-content><div class="hidden-xs hidden-sm padding text-center"><button class="button button-stable icon-right ink" ng-if="formData.licenseUrl" ng-click="showLicenseModal()"><i class="icon ion-document-text"></i>&nbsp; {{\'CURRENCY.VIEW.BTN_SHOW_LICENSE\' | translate}}</button> <button class="button button-stable button-small-padding icon ion-loop ink" ng-click="refresh()" title="{{\'COMMON.BTN_REFRESH\' | translate}}"></button> <button class="button button-stable button-small-padding icon ion-android-more-vertical ink" ng-click="showActionsPopover($event)"></button></div><div class="item item-text-wrap no-border no-padding pull-left"><div class="item-icon-left card padding stable-900-bg"><ion-spinner class="icon" icon="android" ng-if="loading"></ion-spinner><i class="icon ion-help-circled calm" ng-if="!loading"></i><div class="item-icon-left-padding" style="min-height: 26px;"><span ng-if="!loading" trust-as-html="\'CURRENCY.VIEW.CURRENCY_SHORT_DESCRIPTION\'|translate:formData"></span></div></div></div><div class="row responsive-sm"><div class="col list"><div class="item item-divider"><span translate>CURRENCY.VIEW.MONEY_DIVIDER</span></div><ng-include src="::\'templates/currency/items_parameters.html\'"></ng-include></div><div class="col list"><div class="item item-divider"><span translate>CURRENCY.VIEW.WOT_DIVIDER</span></div><ng-include src="::\'templates/currency/items_wot.html\'"></ng-include></div></div></ion-content></ion-view>'),e.put("templates/currency/view_currency.html",'<ion-view left-buttons="leftButtons" cache-view="false"><ion-tabs class="tabs-positive tabs-icon-top"><ion-tab title="{{\'CURRENCY.VIEW.TAB_CURRENCY\'|translate}}" icon="ion-stats-bars" ui-sref="app.currency.tab_parameters"><ion-nav-view name="tab-parameters"></ion-nav-view></ion-tab><ion-tab title="{{\'CURRENCY.VIEW.TAB_WOT\'|translate}}" icon="ion-person-stalker" ui-sref="app.currency.tab_wot"><ion-nav-view name="tab-wot"></ion-nav-view></ion-tab><ion-tab id="helptip-currency-tab-peers" title="{{\'CURRENCY.VIEW.TAB_NETWORK\'|translate}}" icon="ion-cloud" ui-sref="app.currency.tab_network"><ion-nav-view name="tab-network"></ion-nav-view></ion-tab><ion-tab title="{{\'CURRENCY.VIEW.TAB_BLOCKS\'|translate}}" icon="ion-lock-combination" ui-sref="app.currency.tab_blocks"><ion-nav-view name="tab-blocks"></ion-nav-view></ion-tab></ion-tabs></ion-view>'),e.put("templates/help/help.html",'<a name="demo"></a><div class="row responsive-sm" ng-if="::$root.config.demo" ng-class="itemsClass[\'demo\']"><div class="col col-20" translate>MODE.DEMO.MODE</div><div class="col"><span translate>MODE.DEMO.MODE_HELP</span><br><span translate>MODE.DEMO.INSTALL_HELP</span></div></div><a name="readonly"></a><div class="row responsive-sm" ng-if="::$root.config.readonly" ng-class="itemsClass[\'readonly\']"><div class="col col-20" translate>MODE.READONLY.MODE</div><div class="col"><span translate>MODE.READONLY.MODE_HELP</span><br><span translate>MODE.READONLY.INSTALL_HELP</span></div></div><div class="hidden-readonly"><a name="join"></a><h2 translate>HELP.JOIN.SECTION</h2><a name="join-salt"></a><div class="row responsive-sm" ng-class="itemsClass[\'join-salt\']"><div class="col col-20" translate>LOGIN.SALT</div><div class="col" translate>HELP.JOIN.SALT</div></div><a name="join-password"></a><div class="row responsive-sm" ng-class="itemsClass[\'join-password\']"><div class="col col-20" translate>LOGIN.PASSWORD</div><div class="col" translate>HELP.JOIN.PASSWORD</div></div><a name="join-pseudo"></a><div class="row responsive-sm" ng-class="itemsClass[\'join-pseudo\']"><div class="col col-20" translate>ACCOUNT.NEW.PSEUDO</div><div class="col" translate>HELP.JOIN.PSEUDO</div></div></div><div class="hidden-readonly"><a name="login"></a><h2 translate>HELP.LOGIN.SECTION</h2><a name="login-pubkey"></a><div class="row responsive-sm" ng-class="itemsClass[\'login-pubkey\']"><div class="col col-20" translate>HELP.LOGIN.PUBKEY</div><div class="col" translate>HELP.LOGIN.PUBKEY_DEF</div></div><a name="login-method"></a><div class="row responsive-sm" ng-class="itemsClass[\'login-method\']"><div class="col col-20" translate>HELP.LOGIN.METHOD</div><div class="col" translate>HELP.LOGIN.METHOD_DEF</div></div></div><div><a name="glossary"></a><h2 translate>HELP.GLOSSARY.SECTION</h2><a name="pubkey"></a><div class="row responsive-sm" ng-class="itemsClass.pubkey"><div class="col col-20" translate>COMMON.PUBKEY</div><div class="col" translate>HELP.GLOSSARY.PUBKEY_DEF</div></div><a name="blockchain"></a><div class="row responsive-sm" ng-class="itemsClass.blockchain"><div class="col col-20" translate>HELP.GLOSSARY.BLOCKCHAIN</div><div class="col" translate>HELP.GLOSSARY.BLOCKCHAIN_DEF</div></div><a name="universal_dividend"></a> <a name="ud"></a><div class="row responsive-sm" ng-class="itemsClass.ud"><div class="col col-20" translate>COMMON.UNIVERSAL_DIVIDEND</div><div class="col" translate>HELP.GLOSSARY.UNIVERSAL_DIVIDEND_DEF</div></div><a name="member"></a><div class="row responsive-sm" ng-class="itemsClass.member"><div class="col col-20" translate>HELP.GLOSSARY.MEMBER</div><div class="col" translate>HELP.GLOSSARY.MEMBER_DEF</div></div><a name="wot"></a><div class="row responsive-sm" ng-class="itemsClass.wot"><div class="col col-20" translate>HELP.GLOSSARY.WOT</div><div class="col" translate>HELP.GLOSSARY.WOT_DEF</div></div><a name="currency_rules"></a><div class="row responsive-sm" ng-class="itemsClass.currency_rules"><div class="col col-20" translate>HELP.GLOSSARY.CURRENCY_RULES</div><div class="col" translate>HELP.GLOSSARY.CURRENCY_RULES_DEF</div></div><a name="distance_rule"></a><div class="row responsive-sm" ng-class="itemsClass.distance_rule"><div class="col col-20" translate>HELP.GLOSSARY.DISTANCE_RULE</div><div class="col" translate>HELP.GLOSSARY.DISTANCE_RULE_DEF</div></div></div>'),e.put("templates/help/modal_help.html",'<ion-modal-view class="modal-full-height modal-help"><ion-header-bar class="bar-positive"><button class="button button-clear" ng-click="closeModal()" translate>COMMON.BTN_CLOSE</button><h1 class="title" translate>HELP.TITLE</h1></ion-header-bar><ion-content scroll="true" class="padding no-padding-xs"><div ng-class="listClass"><ng-include src="::\'templates/help/help.html\'"></ng-include></div><div class="padding hidden-xs text-center"><button class="button button-positive ink" type="submit" ng-click="closeModal()">{{\'COMMON.BTN_CLOSE\' | translate}}</button></div></ion-content></ion-modal-view>'),e.put("templates/help/view_help.html",'<ion-view left-buttons="leftButtons"><ion-nav-title><span class="visible-xs visible-sm" translate>HELP.TITLE</span></ion-nav-title><ion-content scroll="true" class="padding"><h1 class="hidden-xs hidden-sm" translate>HELP.TITLE</h1><ng-include src="::\'templates/help/help.html\'"></ng-include></ion-content></ion-view>'),e.put("templates/home/home.html",'<ion-view id="home"><ion-nav-title></ion-nav-title><ion-nav-buttons side="secondary"><button class="button button-clear hidden-xs hidden-sm flag" ng-click="showLocalesPopover($event)" style="align-content: center"><i class="flag-image" ng-if=":locale:$root.settings.locale" style="background-image: url(./img/flag-{{$root.settings.locale.flag}}.png);"></i> <b class="ion-arrow-down-b gray"></b></button></ion-nav-buttons><ion-content class="circle-bg-dark" ng-class="::{\'positive-900-bg\': !$root.config.readonly, \'balanced-900-bg\': $root.config.readonly}"><div class="ribbon" ng-if="::$root.config.demo || $root.config.readonly"><a class="badge badge-assertive" ng-if="$root.config.demo" ng-click="showHelpModal(\'demo\')">{{:locale:\'MODE.DEMO.BADGE\'|translate}}</a> <a class="badge badge-balanced" ng-if="$root.config.readonly" ng-click="showHelpModal(\'readonly\')">{{:locale:\'MODE.READONLY.BADGE\'|translate}}</a> <a class="badge badge-positive" ng-click="openLink($event, $root.settings.sourceUrl)" title="{{:locale:\'HOME.FORK_ME\'|translate}}">{{:locale:\'HOME.FREE_SOFTWARE\'|translate}}</a> <a class="badge badge-stable" ng-click="openLink($event, $root.settings.sourceLicenseUrl)" title="{{:locale:\'HOME.SHOW_LICENSE\'|translate}}">AGPL-3.0</a></div><div class="row padding-horizontal no-padding-xxs responsive-lg"><div class="col col-30 no-padding hidden-xs hidden-sm">&nbsp;</div><div class="col text-center no-padding-xs main-container"><div id="helptip-home-logo" class="logo"></div><h4 class="welcome" ng-if="::!$root.config.readonly"><p class="hidden-xs" translate>HOME.WELCOME</p><b ng-show="!loading" translate-values=":currency:{currency: $root.currency.name}" translate>HOME.MESSAGE</b></h4><h4 class="welcome" ng-if="::$root.config.readonly"><p translate>HOME.WELCOME_READONLY</p><b ng-show="!loading" translate-values=":currency:{currency: $root.currency.name}" translate>HOME.MESSAGE_READONLY</b></h4><div class="center padding" ng-if="loading"><ion-spinner icon="android"></ion-spinner></div><div class="center padding animate-fade-in animate-show-hide ng-hide" ng-show="!loading && error"><div class="card card-item padding"><p class="item-content item-text-wrap"><span class="dark" trust-as-html="\'HOME.CONNECTION_ERROR\'|translate:node"></span></p><button type="button" class="button button-positive icon icon-left ion-refresh ink" ng-click="reload()">{{:locale:\'COMMON.BTN_REFRESH\'|translate}}</button></div></div><div class="center animate-show-hide ng-hide" ng-show="!loading && !error"><button type="button" class="button button-block button-stable button-raised icon-left icon ion-easel ink-dark" ng-class="::{\'hidden-xs\': !$root.config.readonly}" ng-show="login || $root.config.readonly" ng-click="startHelpTour($event)">{{:locale:\'COMMON.BTN_HELP_TOUR\'|translate}}</button> <button type="button" class="item button button-block button-balanced button-raised icon icon-left ion-ios-world-outline ink-dark" ui-sref="app.currency" ng-if="::$root.config.readonly"><span translate-values=":currency:{currency: $root.currency.name}" translate>HOME.BTN_CURRENCY</span></button> <button type="button" class="item button button-block button-positive button-raised icon icon-left ion-cloud ink-dark" ui-sref="app.network" ng-if="::$root.config.readonly">{{:locale:\'HOME.BTN_NETWORK\'|translate}}</button> <button type="button" class="button button-block button-positive button-raised ink-dark" ng-click="showJoinModal()" ng-if="!$root.config.readonly && !login" translate>LOGIN.CREATE_FREE_ACCOUNT</button> <button type="button" class="item button button-block button-raised icon icon-left ion-person ink-dark" ng-class="{\'button-stable\': smallscreen, \'button-positive\': !smallscreen}" ui-sref="app.view_wallet" ng-show="login" translate>MENU.ACCOUNT</button> <button type="button" class="item button button-block button-stable button-raised icon icon-left ion-card ink-dark visible-xs" ui-sref="app.view_wallet_tx" ng-if="login"><b class="icon-secondary ion-clock" style="left: 52px; top: -2px; font-size: 10pt; display: block;"></b> {{:locale:\'MENU.TRANSACTIONS\'|translate}}</button> <button type="button" class="item button button-block button-positive button-raised icon icon-left ion-paper-airplane ink-dark visible-xs" ng-click="showTransferModal()" ng-if="login" translate>COMMON.BTN_SEND_MONEY</button><br class="visible-xs visible-sm"><div class="text-center no-padding" ng-if="::!$root.config.readonly" ng-show="!login"><br class="visible-xs visible-sm">{{\'LOGIN.HAVE_ACCOUNT_QUESTION\'|translate}} <b><a class="assertive hidden-xs hidden-sm" ui-sref="app.view_wallet" translate>COMMON.BTN_LOGIN</a></b></div><div class="text-center no-padding" ng-show="login"><br class="visible-xs visible-sm"><span ng-bind-html="\'HOME.NOT_YOUR_ACCOUNT_QUESTION\'|translate:{pubkey: walletData.pubkey}"></span><br><b><a class="assertive" ng-click="logout({askConfirm: true})" translate>HOME.BTN_CHANGE_ACCOUNT</a></b></div><button type="button" class="button button-block button-stable button-raised ink visible-xs visible-sm" ui-sref="app.view_wallet" ng-if="!$root.config.readonly && !login" translate>COMMON.BTN_LOGIN</button><div class="text-center visible-demo"><br><p class="text-center"><span class="light"><i class="icon ion-help-circled" style="font-size: 16pt;"></i></span> <span class="stable" translate>MODE.DEMO.MODE_HELP</span> <a href="#" ng-click="showHelpModal(\'demo\')" translate>HOME.READ_MORE</a></p></div><p class="text-center no-padding visible-readonly"><br><span class="light"><i class="icon ion-help-circled" style="font-size: 16pt;"></i></span> <span class="stable" translate>MODE.READONLY.INSTALL_HELP</span></p><div class="text-center no-padding visible-xs stable"><br>{{:locale:\'COMMON.APP_VERSION\'|translate:{version: config.version} }} | <a href="#" ng-click="showAboutModal()" translate>HOME.BTN_ABOUT</a></div></div></div><div class="col no-padding" ng-class="{\'col-30\': !feed, \'col-10\': feed}">&nbsp;</div><div class="col col-30 no-padding" ng-if="feed"><div class="feed padding-horizontal no-padding-xs padding-top"><h3 class="padding-left"><i class="icon ion-speakerphone"></i> {{feed.title}} <small><a ng-click="openLink($event, feed.home_page_url)" class="gray"><span translate>HOME.SHOW_ALL_FEED</span> <i class="icon ion-chevron-right"></i></a></small></h3><div class="animate-show-hide ng-hide" ng-show="feed"><div ng-repeat="item in feed.items" class="card padding no-margin-xs"><div class="header"><i ng-if="item.author.avatar" class="avatar" style="background-image: url({{item.author.avatar}});"></i> <a ng-class="{\'avatar-left-padding\': item.author.avatar}" class="author" ng-click="item.author.url && openLink($event, item.author.url)">{{item.author.name}} </a><a ng-if="item.time" title="{{item.time|formatDate}}" ng-click="openLink($event, item.url)" class="item-note"><small><i class="icon ion-clock"></i>&nbsp;{{item.time|formatFromNow}}</small></a></div><h2 class="title feed-title"><a ng-click="openLink($event, item.url)">{{item.title}}</a></h2><div ng-if="item.content" class="content feed-content" trust-as-html="item.content"></div><h4 class="card-footer feed-footer text-right positive-100"><a ng-click="openLink($event, item.url)"><span ng-if="item.truncated" translate>HOME.READ_MORE</span> <span ng-if="!item.truncated" translate>COMMON.BTN_SHOW</span> <i class="icon ion-chevron-right"></i></a></h4></div></div></div></div></div></ion-content></ion-view>'),e.put("templates/join/modal_choose_account_type.html",'<ion-modal-view class="modal-full-height"><ion-header-bar class="bar-positive"><button class="button button-clear visible-xs" ng-if="!slides.slider.activeIndex" ng-click="closeModal()" translate>COMMON.BTN_CANCEL</button> <button class="button button-icon button-clear icon ion-ios-arrow-back buttons header-item" ng-click="slidePrev()" ng-if="slides.slider.activeIndex"></button><h1 class="title" translate>ACCOUNT.NEW.TITLE</h1><button class="button button-clear icon-right visible-xs" ng-if="slides.slider.activeIndex === 0" ng-click="slideNext()"><span translate>COMMON.BTN_NEXT</span> <i class="icon ion-ios-arrow-right"></i></button></ion-header-bar><ion-slides options="slides.options" slider="slides.slider"><ion-slide-page><ion-content class="has-header padding"><div class="center padding" ng-if="loading"><ion-spinner class="icon" icon="android"></ion-spinner></div><div ng-if="!loading"><p ng-bind-html="\'ACCOUNT.NEW.INTRO_WARNING_TIME\'|translate:currency"></p><div class="row responsive-sm"><div class="col"><div class="item card item-icon-left padding item-text-wrap stable-bg"><i class="icon ion-android-warning assertive"></i><p class="item-content item-icon-left-padding"><span class="dark" translate>ACCOUNT.NEW.INTRO_WARNING_SECURITY</span><br><small translate>ACCOUNT.NEW.INTRO_WARNING_SECURITY_HELP</small></p></div></div><div class="col"><div class="item card item-icon-left padding item-text-wrap stable-bg"><i class="icon ion-information-circled positive"></i><p class="item-content item-icon-left-padding"><span class="dark" trust-as-html="\'ACCOUNT.NEW.REGISTRATION_NODE\'|translate:currency.node"></span><br><small trust-as-html="\'ACCOUNT.NEW.REGISTRATION_NODE_HELP\'|translate:currency.node"></small></p></div></div></div></div><p class="hidden-xs hidden-sm" ng-bind-html="\'ACCOUNT.NEW.INTRO_HELP\'|translate"></p><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" ng-click="closeModal()" type="button" translate>COMMON.BTN_CANCEL</button> <button class="button button-positive icon-right ion-chevron-right ink" ng-click="slideNext()" ng-disabled="loading" type="button" translate>COMMON.BTN_START</button></div></ion-content></ion-slide-page><ion-slide-page><ion-content class="has-header padding"><p translate>ACCOUNT.NEW.SELECT_ACCOUNT_TYPE</p><div class="list"><button class="item item-complex card stable-bg item-icon-left item-icon-right ink" ng-click="selectAccountTypeAndClose(\'wallet\')"><div class="item-content item-text-wrap"><i class="item-image icon dark ion-card"></i><h2 translate>ACCOUNT.NEW.WALLET_ACCOUNT</h2><h4 class="gray" translate>ACCOUNT.NEW.WALLET_ACCOUNT_HELP</h4><ng-if ng-if="::$root.config.demo" ng-include="::\'templates/common/note_feature_not_available.html\'"><i class="icon dark ion-ios-arrow-right"></i></ng-if></div></button> <button class="item item-complex card stable-100-bg item-icon-left item-icon-right ink" ng-click="selectAccountTypeAndClose(\'member\')"><div class="item-content item-text-wrap"><i class="item-image icon dark ion-person"></i><h2 translate>ACCOUNT.NEW.MEMBER_ACCOUNT</h2><h4 class="gray" ng-bind-html="\'ACCOUNT.NEW.MEMBER_ACCOUNT_HELP\'|translate:currency"></h4><ng-if ng-if="::$root.config.demo" ng-include="::\'templates/common/note_feature_not_available.html\'"><i class="icon dark ion-ios-arrow-right"></i></ng-if></div></button><cs-extension-point name="select-account-type"></cs-extension-point></div><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" ng-click="closeModal()" type="button" translate>COMMON.BTN_CANCEL</button></div></ion-content></ion-slide-page></ion-slides></ion-modal-view>'),e.put("templates/join/modal_join_member.html",'<ion-modal-view class="modal-full-height"><ion-header-bar class="bar-positive"><button class="button button-clear visible-xs" ng-if="!slides.slider.activeIndex" ng-click="closeModal()" translate>COMMON.BTN_CANCEL</button> <button class="button button-icon button-clear icon ion-ios-arrow-back buttons header-item" ng-click="doPrev()" ng-if="slides.slider.activeIndex && slideBehavior.hasPreviousButton"></button> <button class="button button-icon button-clear icon ion-ios-help-outline visible-xs" ng-if="slideBehavior.helpAnchor" ng-click="showHelpModal(slideBehavior.helpAnchor)"></button><h1 class="title" translate>ACCOUNT.NEW.MEMBER_ACCOUNT_TITLE</h1><button class="button button-clear icon-right visible-xs" ng-if="slideBehavior.hasNextButton" ng-click="doNext()"><span translate>COMMON.BTN_NEXT</span> <i class="icon ion-ios-arrow-right"></i></button> <button class="button button-clear icon-right visible-xs" ng-class="{\'button-text-stable\': !isLicenseRead}" ng-if="slideBehavior.hasAcceptButton" ng-click="isLicenseRead ? doNext() : undefined"><span translate>ACCOUNT.NEW.BTN_ACCEPT</span> <i class="icon ion-ios-arrow-right"></i></button> <button class="button button-clear icon-right visible-xs" ng-if="slideBehavior.hasSendButton" ng-click="doNewAccount()"><i class="icon ion-android-send"></i></button></ion-header-bar><ion-slides options="slides.options" slider="slides.slider"><ion-slide-page ng-if="licenseFileUrl"><ion-content class="has-header" scroll="false"><div class="padding" translate>ACCOUNT.NEW.INFO_LICENSE</div><div class="center padding" ng-if="loading"><ion-spinner class="icon" icon="android"></ion-spinner></div><iframe ng-if="!loading" class="padding-left padding-right no-padding-xs iframe-license" id="iframe-license" ng-src="{{licenseFileUrl}}"></iframe><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" ng-click="closeModal()" type="button" translate>COMMON.BTN_CANCEL</button> <button class="button button-calm icon-right ion-chevron-right ink" ng-click="doNext(\'licenceForm\')" ng-disabled="!isLicenseRead" type="button" translate>ACCOUNT.NEW.BTN_ACCEPT_LICENSE</button></div></ion-content></ion-slide-page><ion-slide-page><ion-content class="has-header" scroll="true"><form name="pseudoForm" novalidate="" ng-submit="doNext(\'pseudoForm\')"><div class="item item-text-wrap text-center padding"><a class="pull-right icon-help hidden-xs" ng-click="showHelpModal(\'join-pseudo\')"></a> <span translate>ACCOUNT.NEW.PSEUDO_WARNING</span></div><div class="list" ng-init="setForm(pseudoForm, \'pseudoForm\')"><div class="item item-input" ng-class="{\'item-input-error\': (pseudoForm.$submitted && pseudoForm.pseudo.$invalid) || (uiAlreadyUsed && formData.pseudo)}"><span class="input-label" translate>ACCOUNT.NEW.PSEUDO</span> <input id="pseudo" name="pseudo" type="text" placeholder="{{\'ACCOUNT.NEW.PSEUDO_HELP\' | translate}}" ng-model="formData.pseudo" autocomplete="off" ng-minlength="3" ng-maxlength="100" ng-pattern="userIdPattern" ng-model-options="{ debounce: 250 }" required></div><div class="form-errors" ng-show="pseudoForm.$submitted && pseudoForm.pseudo.$error" ng-messages="pseudoForm.pseudo.$error"><div class="form-error" ng-message="minlength"><span translate="ERROR.FIELD_TOO_SHORT_WITH_LENGTH" translate-values="{minLength: 3}"></span></div><div class="form-error" ng-message="maxlength"><span translate="ERROR.FIELD_TOO_LONG_WITH_LENGTH" translate-values="{maxLength: 100}"></span></div><div class="form-error" ng-message="required"><span translate="ERROR.FIELD_REQUIRED"></span></div><div class="form-error" ng-message="pattern"><span translate="ERROR.INVALID_USER_ID"></span></div></div><div class="text-right" style="min-height: 18px;"><div class="form-error gray" ng-if="formData.computing && formData.pseudo"><ion-spinner class="icon ion-spinner-small" icon="android" ng-if="formData.computing && formData.pseudo"></ion-spinner><span translate>ACCOUNT.NEW.CHECKING_PSEUDO</span></div><ng-if ng-if="!formData.computing && formData.pseudo"><div class="form-error balanced" ng-if="!uiAlreadyUsed "><i class="icon ion-checkmark balanced"></i> <span translate>ACCOUNT.NEW.PSEUDO_AVAILABLE</span></div><div class="form-error" ng-if="uiAlreadyUsed"><i class="icon ion-close-circled assertive"></i> <span translate>ACCOUNT.NEW.PSEUDO_NOT_AVAILABLE</span></div></ng-if></div><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" ng-click="closeModal()" type="button" translate>COMMON.BTN_CANCEL</button> <button class="button button-calm icon-right ion-chevron-right ink" type="submit" ng-disabled="uiAlreadyUsed" translate>COMMON.BTN_NEXT</button></div></div></form></ion-content></ion-slide-page><ion-slide-page ng-if="!formData.pubkey"><ion-content class="has-header" scroll="true"><form name="saltForm" novalidate="" ng-submit="doNext(\'saltForm\')"><div class="list" ng-init="setForm(saltForm, \'saltForm\')"><div class="item item-text-wrap text-center padding hidden-xs"><a class="pull-right icon-help" ng-click="showHelpModal(\'join-salt\')"></a> <span translate>ACCOUNT.NEW.SALT_WARNING</span></div><div class="item item-input" ng-class="{ \'item-input-error\': saltForm.$submitted && saltForm.username.$invalid}"><span class="input-label" translate>LOGIN.SALT</span> <input ng-if="!showUsername" name="username" type="password" placeholder="{{\'LOGIN.SALT_HELP\' | translate}}" ng-change="formDataChanged()" ng-model="formData.username" autocomplete="off" ng-minlength="8" different-to="formData.pseudo" required> <input ng-if="showUsername" name="username" type="text" placeholder="{{\'LOGIN.SALT_HELP\' | translate}}" ng-change="formDataChanged()" ng-model="formData.username" autocomplete="off" ng-minlength="8" different-to="formData.pseudo" required></div><div class="form-errors" ng-show="saltForm.$submitted && saltForm.username.$error" ng-messages="saltForm.username.$error"><div class="form-error" ng-message="minlength"><span translate="ERROR.FIELD_TOO_SHORT_WITH_LENGTH" translate-values="{minLength: 8}"></span></div><div class="form-error" ng-message="required"><span translate="ERROR.FIELD_REQUIRED"></span></div><div class="form-error" ng-message="differentTo"><span translate="ERROR.EQUALS_TO_PSEUDO"></span></div></div><div class="item item-input" ng-class="{ \'item-input-error\': saltForm.$submitted && saltForm.confirmSalt.$invalid}"><span class="input-label pull-right" translate>ACCOUNT.NEW.SALT_CONFIRM</span> <input ng-if="!showUsername" name="confirmUsername" type="password" placeholder="{{\'ACCOUNT.NEW.SALT_CONFIRM_HELP\' | translate}}" ng-model="formData.confirmUsername" autocomplete="off" compare-to="formData.username"> <input ng-if="showUsername" name="confirmUsername" type="text" placeholder="{{\'ACCOUNT.NEW.SALT_CONFIRM_HELP\' | translate}}" ng-model="formData.confirmUsername" autocomplete="off" compare-to="formData.username"></div><div class="form-errors" ng-show="saltForm.$submitted && saltForm.confirmUsername.$error" ng-messages="saltForm.confirmUsername.$error"><div class="form-error" ng-message="compareTo"><span translate="ERROR.SALT_NOT_CONFIRMED"></span></div></div><div class="item item-toggle dark"><span translate>COMMON.SHOW_VALUES</span> <label class="toggle toggle-royal"><input type="checkbox" ng-model="showUsername"><div class="track"><div class="handle"></div></div></label></div><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" ng-click="closeModal()" type="button" translate>COMMON.BTN_CANCEL</button> <button class="button button-calm icon-right ion-chevron-right ink" type="submit" translate>COMMON.BTN_NEXT <i class="icon ion-arrow-right-a"></i></button></div></div></form></ion-content></ion-slide-page><ion-slide-page ng-if="!formData.pubkey"><ion-content class="has-header" scroll="true"><form name="passwordForm" novalidate="" ng-submit="doNext(\'passwordForm\')"><div class="item item-text-wrap text-center padding hidden-xs"><a class="pull-right icon-help" ng-click="showHelpModal(\'join-password\')"></a> <span translate>ACCOUNT.NEW.PASSWORD_WARNING</span></div><div class="list" ng-init="setForm(passwordForm, \'passwordForm\')"><div class="item item-input" ng-class="{ \'item-input-error\': passwordForm.$submitted && passwordForm.password.$invalid}"><span class="input-label" translate>LOGIN.PASSWORD</span> <input ng-if="!showPassword" name="password" type="password" placeholder="{{\'LOGIN.PASSWORD_HELP\' | translate}}" ng-model="formData.password" autocomplete="off" ng-change="formDataChanged()" ng-minlength="8" different-to="formData.username" required> <input ng-if="showPassword" name="text" type="text" placeholder="{{\'LOGIN.PASSWORD_HELP\' | translate}}" ng-model="formData.password" autocomplete="off" ng-change="formDataChanged()" ng-minlength="8" different-to="formData.username" required></div><div class="form-errors" ng-show="passwordForm.$submitted && passwordForm.password.$error" ng-messages="passwordForm.password.$error"><div class="form-error" ng-message="minlength"><span translate="ERROR.FIELD_TOO_SHORT_WITH_LENGTH" translate-values="{minLength: 8}"></span></div><div class="form-error" ng-message="required"><span translate="ERROR.FIELD_REQUIRED"></span></div><div class="form-error" ng-message="differentTo"><span translate="ERROR.EQUALS_TO_SALT"></span></div></div><div class="item item-input" ng-class="{ \'item-input-error\': passwordForm.$submitted && passwordForm.confirmPassword.$invalid}"><span class="input-label" translate>ACCOUNT.NEW.PASSWORD_CONFIRM</span> <input ng-if="!showPassword" name="confirmPassword" type="password" placeholder="{{\'ACCOUNT.NEW.PASSWORD_CONFIRM_HELP\' | translate}}" ng-model="formData.confirmPassword" autocomplete="off" compare-to="formData.password"> <input ng-if="showPassword" name="confirmPassword" type="text" placeholder="{{\'ACCOUNT.NEW.PASSWORD_CONFIRM_HELP\' | translate}}" ng-model="formData.confirmPassword" autocomplete="off" compare-to="formData.password"></div><div class="form-errors" ng-show="passwordForm.$submitted && passwordForm.confirmPassword.$error" ng-messages="passwordForm.confirmPassword.$error"><div class="form-error" ng-message="compareTo"><span translate="ERROR.PASSWORD_NOT_CONFIRMED"></span></div></div><div class="item item-toggle dark"><span translate>COMMON.SHOW_VALUES</span> <label class="toggle toggle-royal"><input type="checkbox" ng-model="showPassword"><div class="track"><div class="handle"></div></div></label></div></div><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" ng-click="closeModal()" type="button" translate>COMMON.BTN_CANCEL</button> <button class="button button-calm icon-right ion-chevron-right ink" type="submit" ng-click="getRevocationDocument()" translate>COMMON.BTN_NEXT</button></div><div class="padding hidden-xs"></div></form></ion-content></ion-slide-page><ion-slide-page><ion-content class="has-header" scroll="true"><div class="center padding" ng-if="formData.computing"><ion-spinner icon="android"></ion-spinner></div><ng-if ng-if="!formData.computing"><div class="animate-fade-in animate-show-hide ng-hide" ng-show="accountAvailable"><div class="padding text-center" translate>ACCOUNT.NEW.LAST_SLIDE_CONGRATULATION</div><div class="list"><ion-item class="item text-center item-text-wrap"><h3 class="gray" translate>LOGIN.ASSOCIATED_PUBKEY</h3><h3 class="dark bold">{{formData.pubkey}}</h3></ion-item></div><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" ng-click="closeModal()" type="button" translate>COMMON.BTN_CANCEL</button> <button class="button button-positive ink" ng-click="doNewAccount()" translate>COMMON.BTN_SEND <i class="icon ion-android-send"></i></button></div></div><div class="animate-fade-in animate-show-hide ng-hide" ng-show="!accountAvailable"><ion-item class="item-icon-left item-text-wrap text-center"><i class="icon ion-minus-circled assertive"></i> <span id="modal-license" trust-as-html="\'ERROR.EXISTING_ACCOUNT\'|translate"></span></ion-item><div class="list"><ion-item class="item item-text-wrap item-border"><div class="padding text-center"><span class="gray text-no-wrap">{{formData.pubkey}}</span></div></ion-item><div class="padding text-center"><span translate>ERROR.EXISTING_ACCOUNT_REQUEST</span></div></div><div class="padding hidden-xs text-left"><button class="button button-assertive icon-left ion-chevron-left ink" ng-click="identifierRecovery()" translate>COMMON.BTN_MODIFY</button></div></div></ng-if></ion-content></ion-slide-page></ion-slides></ion-modal-view>'),e.put("templates/join/modal_join_wallet.html",'<ion-modal-view class="modal-full-height"><ion-header-bar class="bar-positive"><button class="button button-clear visible-xs" ng-if="!slides.slider.activeIndex" ng-click="closeModal()" translate>COMMON.BTN_CANCEL</button> <button class="button button-icon button-clear icon ion-ios-arrow-back buttons header-item" ng-click="slidePrev()" ng-if="slideBehavior.hasPreviousButton"></button> <button class="button button-icon button-clear icon ion-ios-help-outline visible-xs" ng-if="slideBehavior.helpAnchor" ng-click="showHelpModal(slideBehavior.helpAnchor)"></button><h1 class="title" translate>ACCOUNT.NEW.WALLET_ACCOUNT_TITLE</h1><button class="button button-clear icon-right visible-xs" ng-if="slideBehavior.hasNextButton" ng-click="doNext()"><span translate>COMMON.BTN_NEXT</span> <i class="icon ion-ios-arrow-right"></i></button> <button class="button button-clear icon-right visible-xs" ng-if="slideBehavior.hasSendButton" ng-click="doNewAccount()"><i class="icon ion-android-send"></i></button></ion-header-bar><ion-slides options="slides.options" slider="slides.slider"><ion-slide-page><ion-content class="has-header" scroll="false"><form name="saltForm" novalidate="" ng-submit="doNext(\'saltForm\')"><div class="list" ng-init="setForm(saltForm, \'saltForm\')"><div class="item item-text-wrap text-center padding hidden-xs"><a class="pull-right icon-help" ng-click="showHelpModal(\'join-salt\')"></a> <span translate>ACCOUNT.NEW.SALT_WARNING</span></div><div class="item item-input" ng-class="{ \'item-input-error\': saltForm.$submitted && saltForm.username.$invalid}"><span class="input-label" translate>LOGIN.SALT</span> <input ng-if="!showUsername" name="username" type="password" placeholder="{{\'LOGIN.SALT_HELP\' | translate}}" ng-change="formDataChanged()" ng-model="formData.username" ng-minlength="8" required> <input ng-if="showUsername" name="username" type="text" placeholder="{{\'LOGIN.SALT_HELP\' | translate}}" ng-change="formDataChanged()" ng-model="formData.username" ng-minlength="8" required></div><div class="form-errors" ng-show="saltForm.$submitted && saltForm.username.$error" ng-messages="saltForm.username.$error"><div class="form-error" ng-message="minlength"><span translate="ERROR.FIELD_TOO_SHORT_WITH_LENGTH" translate-values="{minLength: 8}"></span></div><div class="form-error" ng-message="required"><span translate="ERROR.FIELD_REQUIRED"></span></div></div><div class="item item-input" ng-class="{ \'item-input-error\': saltForm.$submitted && saltForm.confirmSalt.$invalid}"><span class="input-label pull-right" translate>ACCOUNT.NEW.SALT_CONFIRM</span> <input ng-if="!showUsername" name="confirmUsername" type="password" placeholder="{{\'ACCOUNT.NEW.SALT_CONFIRM_HELP\' | translate}}" ng-model="formData.confirmUsername" compare-to="formData.username"> <input ng-if="showUsername" name="confirmUsername" type="text" placeholder="{{\'ACCOUNT.NEW.SALT_CONFIRM_HELP\' | translate}}" ng-model="formData.confirmUsername" compare-to="formData.username"></div><div class="form-errors" ng-show="saltForm.$submitted && saltForm.confirmUsername.$error" ng-messages="saltForm.confirmUsername.$error"><div class="form-error" ng-message="compareTo"><span translate="ERROR.SALT_NOT_CONFIRMED"></span></div></div><div class="item item-toggle dark"><span translate>COMMON.SHOW_VALUES</span> <label class="toggle toggle-royal"><input type="checkbox" ng-model="showUsername"><div class="track"><div class="handle"></div></div></label></div><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" ng-click="closeModal()" type="button" translate>COMMON.BTN_CANCEL</button> <button class="button button-calm icon-right ion-chevron-right ink" type="submit" translate>COMMON.BTN_NEXT <i class="icon ion-arrow-right-a"></i></button></div></div></form></ion-content></ion-slide-page><ion-slide-page><ion-content class="has-header" scroll="false"><form name="passwordForm" novalidate="" ng-submit="doNext(\'passwordForm\')"><div class="item item-text-wrap text-center padding hidden-xs"><a class="pull-right icon-help" ng-click="showHelpModal(\'join-password\')"></a> <span translate>ACCOUNT.NEW.PASSWORD_WARNING</span></div><div class="list" ng-init="setForm(passwordForm, \'passwordForm\')"><div class="item item-input" ng-class="{ \'item-input-error\': passwordForm.$submitted && passwordForm.password.$invalid}"><span class="input-label" translate>LOGIN.PASSWORD</span> <input ng-if="!showPassword" name="password" type="password" placeholder="{{\'LOGIN.PASSWORD_HELP\' | translate}}" ng-model="formData.password" ng-change="formDataChanged()" ng-minlength="8" required> <input ng-if="showPassword" name="text" type="text" placeholder="{{\'LOGIN.PASSWORD_HELP\' | translate}}" ng-model="formData.password" ng-change="formDataChanged()" ng-minlength="8" required></div><div class="form-errors" ng-show="passwordForm.$submitted && passwordForm.password.$error" ng-messages="passwordForm.password.$error"><div class="form-error" ng-message="minlength"><span translate="ERROR.FIELD_TOO_SHORT_WITH_LENGTH" translate-values="{minLength: 8}"></span></div><div class="form-error" ng-message="required"><span translate="ERROR.FIELD_REQUIRED"></span></div></div><div class="item item-input" ng-class="{ \'item-input-error\': passwordForm.$submitted && passwordForm.confirmPassword.$invalid}"><span class="input-label" translate>ACCOUNT.NEW.PASSWORD_CONFIRM</span> <input ng-if="!showPassword" name="confirmPassword" type="password" placeholder="{{\'ACCOUNT.NEW.PASSWORD_CONFIRM_HELP\' | translate}}" ng-model="formData.confirmPassword" compare-to="formData.password"> <input ng-if="showPassword" name="confirmPassword" type="text" placeholder="{{\'ACCOUNT.NEW.PASSWORD_CONFIRM_HELP\' | translate}}" ng-model="formData.confirmPassword" compare-to="formData.password"></div><div class="form-errors" ng-show="passwordForm.$submitted && passwordForm.confirmPassword.$error" ng-messages="passwordForm.confirmPassword.$error"><div class="form-error" ng-message="compareTo"><span translate="ERROR.PASSWORD_NOT_CONFIRMED"></span></div></div><div class="item item-toggle dark"><span translate>COMMON.SHOW_VALUES</span> <label class="toggle toggle-royal"><input type="checkbox" ng-model="showPassword"><div class="track"><div class="handle"></div></div></label></div></div><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" ng-click="closeModal()" type="button" translate>COMMON.BTN_CANCEL</button> <button class="button button-calm icon-right ion-chevron-right ink" type="submit" translate>COMMON.BTN_NEXT</button></div><div class="padding hidden-xs"></div></form></ion-content></ion-slide-page><ion-slide-page><ion-content class="has-header" scroll="false"><div class="padding center" ng-if="formData.computing"><ion-spinner icon="android"></ion-spinner></div><div ng-if="accountAvailable && !formData.computing"><div class="padding text-center" translate>ACCOUNT.NEW.LAST_SLIDE_CONGRATULATION</div><div class="list"><ion-item class="item item-text-wrap item-border"><div class="dark pull-right padding-right" ng-if="formData.computing"><ion-spinner icon="android"></ion-spinner></div><span class="input-label" translate>COMMON.PUBKEY</span> <span class="gray text-no-wrap" ng-if="formData.computing" translate>ACCOUNT.NEW.COMPUTING_PUBKEY </span><span class="gray text-no-wrap" ng-if="formData.pubkey">{{formData.pubkey}}</span></ion-item></div><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" ng-click="closeModal()" type="button" translate>COMMON.BTN_CANCEL</button> <button class="button button-positive ink" ng-click="doNewAccount()" translate>COMMON.BTN_CREATE</button></div></div><div ng-if="!accountAvailable && !formData.computing"><ion-item class="item-icon-left item-text-wrap text-center"><i class="icon ion-android-close active"></i> <span id="modal-license" translate>ERROR.EXISTING_ACCOUNT</span></ion-item><div class="list"><ion-item class="item item-text-wrap item-border"><div class="dark pull-right padding-right" ng-if="formData.computing"><ion-spinner icon="android"></ion-spinner></div><span class="gray text-no-wrap" ng-if="formData.computing" translate>ACCOUNT.NEW.COMPUTING_PUBKEY</span><div class="padding text-center"><span class="gray text-no-wrap" ng-if="formData.pubkey">{{formData.pubkey}}</span></div></ion-item><div class="padding text-center"><span translate>ERROR.EXISTING_ACCOUNT_REQUEST</span></div></div><div class="padding hidden-xs text-left"><button class="button button-assertive icon-left ion-chevron-left ink" ng-click="identifierRecovery()" translate>COMMON.BTN_MODIFY</button></div></div></ion-content></ion-slide-page></ion-slides></ion-modal-view>'),e.put("templates/login/form_file_import.html",'<div class="item"><p class="item-text-wrap" translate>LOGIN.FILE_FORM_HELP</p></div><div class="item item-icon-left item-text-wrap"><i class="icon ion-ios-information-outline positive"></i> <span class="positive" translate>LOGIN.FILE.HELP</span></div><div drop-zone="onFileChanged(file)"><div ng-if="!formData.file" file-select="onFileChanged(file)" accept=".dunikey,.yml"><h2 class="gray" translate>COMMON.CHOOSE_FILE</h2></div><div class="item item-icon-left item-icon-right stable-bg" ng-if="formData.file"><i class="icon ion-document-text dark"></i><div class="item-content row"><div class="col"><h2>{{formData.file.name}}</h2><h4 class="dark" ng-if="formData.file.lastModified"><span class="gray" translate>COMMON.FILE.DATE</span> {{formData.file.lastModified/1000|formatDate}}</h4><h5 class="dark"><span class="gray" translate>COMMON.FILE.SIZE</span> {{formData.file.size|formatInteger}} Ko</h5></div><div class="col"><h3><span class="gray" translate>COMMON.PUBKEY</span></h3><h3 ng-if="validatingFile" translate>COMMON.FILE.VALIDATING</h3><h3 ng-if="!validatingFile"><span class="dark animate-show-hide ng-hide" ng-show="formData.file.pubkey">{{formData.file.pubkey}}</span> <span class="assertive animate-show-hide ng-hide" ng-show="!formData.file.valid"><br><i class="ion-close-circled assertive"></i> {{formData.file.pubkey ? \'ERROR.AUTH_INVALID_PUBKEY\' : \'ERROR.AUTH_INVALID_FILE\' |translate}}</span></h3></div></div><a class="ion-close-round gray pull-right" style="font-size: 10px; position: absolute; top: 6px; right: 6px;" ng-click="removeKeyFile()"></a></div></div><ion-checkbox ng-model="formData.keepAuth" class="item ink item-text-wrap"><div class="item-content dark" translate>LOGIN.MEMORIZE_AUTH_FILE</div></ion-checkbox>'),e.put("templates/login/form_login.html",'<form name="loginForm" novalidate="" ng-submit="doLogin()" autocomplete="off"><div class="list padding no-padding-xs" ng-init="setForm(loginForm)" ng-switch on="formData.method"><div class="item hidden-xs no-padding" ng-if="showMethods"><div class="pull-right"><a class="button button-text button-small-padding icon-right ink" ng-click="showMethodsPopover($event)"><i class="icon ion-wrench"></i> {{\'LOGIN.BTN_METHODS\'| translate}} </a>&nbsp; <a class="button button-icon positive button-small-padding icon ion-ios-help-outline" style="right: 8px;" ng-click="showHelpModal(\'login-method\')"></a></div></div><div class="item item-text-wrap" ng-if="::isAuth"><p ng-if="::expectedPubkey" ng-bind-html="::expectedUid ? \'AUTH.EXPECTED_UID_HELP\' : \'AUTH.EXPECTED_PUBKEY_HELP\' |translate: {uid: expectedUid, pubkey: expectedPubkey}"></p><p ng-if="::!expectedPubkey" ng-bind-html="::\'AUTH.GENERAL_HELP\'|translate"></p></div><div ng-switch-when="SCRYPT_DEFAULT"><ng-include src="::\'templates/login/form_scrypt.html\'"></ng-include></div><div ng-switch-when="SCRYPT_ADVANCED"><ng-include src="::\'templates/login/form_scrypt_advanced.html\'"></ng-include></div><div ng-switch-when="PUBKEY"><ng-include src="::\'templates/login/form_pubkey.html\'"></ng-include></div><div ng-switch-when="FILE"><ng-include src="::\'templates/login/form_file_import.html\'"></ng-include></div><div ng-switch-when="SCAN"><ng-include src="::\'templates/login/form_scan.html\'"></ng-include></div><div ng-switch-default><ng-include src="::\'templates/login/form_scrypt.html\'"></ng-include></div></div><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" ng-click="closeModal()" type="button" translate>COMMON.BTN_CANCEL</button> <button class="button button-positive ink" ng-class="{\'button-assertive\': isAuth, \'button-positive\': !isAuth}" type="submit">{{okText || (isAuth ? \'AUTH.BTN_AUTH\' : \'COMMON.BTN_LOGIN\') | translate}}</button></div><div class="text-center no-padding visible-xs"><button type="button" class="button button-small icon-right ink" ng-click="showMethodsPopover($event)"><i class="icon ion-loop"></i> <span translate>LOGIN.BTN_METHODS_DOTS</span></button><br><br></div><ng-if ng-if="!isAuth && showNewAccountLink"><div class="text-center no-padding">{{\'LOGIN.NO_ACCOUNT_QUESTION\'|translate}}<br class="visible-xs"><a ng-click="showJoinModal()" translate>LOGIN.CREATE_ACCOUNT</a></div><br class="visible-xs"><div class="text-center no-padding"><a ng-click="showAccountSecurityModal()" translate>LOGIN.FORGOTTEN_ID</a></div></ng-if></form>'),e.put("templates/login/form_pubkey.html",'<div class="item"><p class="item-text-wrap" translate>LOGIN.PUBKEY_FORM_HELP</p></div><div class="item item-input item-button-right" ng-class="{ \'item-input-error\': form.$submitted && form.pubkey.$invalid}"><span class="input-label hidden-xs" translate>COMMON.PUBKEY</span> <input name="pubkey" type="text" placeholder="{{\'LOGIN.PUBKEY_HELP\' | translate}}" autocomplete="off" ng-model="formData.pubkey" ng-model-options="{ debounce: 650 }" required> <a class="button button-stable icon ion-android-search ink" ng-click="showWotLookupModal(form.pubkey.$viewValue)"></a></div><div class="form-errors" ng-show="form.$submitted && form.pubkey.$error" ng-messages="form.pubkey.$error"><div class="form-error" ng-message="required"><span translate="ERROR.FIELD_REQUIRED"></span></div><div class="form-error" ng-message="checksum"><span translate="ERROR.INVALID_PUBKEY_CHECKSUM"></span></div></div>'),e.put("templates/login/form_scan.html",'<div class="item"><p class="item-text-wrap" ng-bind-html="::isAuth ? \'AUTH.SCAN_FORM_HELP\' : \'LOGIN.SCAN_FORM_HELP\' |translate"></p></div><div class="item item-icon-right item-text-wrap item-input" ng-class="{ \'item-input-error\': pubkeyError}"><span class="input-label" translate>COMMON.PUBKEY</span><div class="item-content text-wrap"><span class="gray animate-show-hide" ng-show="!computing && formData.pubkey">{{formData.pubkey}}</span><ion-spinner class="ion-spinner-small" icon="android" ng-if="computing"></ion-spinner><input type="hidden" ng-model="formData.pubkey" required></div><a class="button button-icon positive button-small-padding icon ion-qr-scanner animate-show-hide" ng-show="!computing && (!expectedPubkey || pubkeyError)" ng-click="doScan()"></a> <span class="button button-icon balanced button-small-padding icon ion-checkmark animate-show-hide" ng-if="expectedPubkey" ng-show="!computing && !pubkeyError"></span></div><div class="form-errors" ng-if="expectedPubkey"><div class="form-error" ng-show="pubkeyError"><span trust-as-html="::\'ERROR.AUTH_INVALID_PUBKEY\'|translate:{pubkey: expectedPubkey}"></span></div></div>'),e.put("templates/login/form_scrypt_advanced.html",'<div class="row responsive-md responsive-sm padding-left"><div class="col col-33 no-padding"><label class="item item-input item-select"><select ng-model="formData.scrypt" style="max-width: 100%" ng-change="changeScrypt(formData.scrypt)" ng-options="l as (l.label | translate) for l in scryptParamsValues track by l.id"></select></label></div><div class="col no-padding"><label class="item item-input"><span class="input-label" translate>LOGIN.SCRYPT.N</span> <input class="no-padding-right" type="number" placeholder="N" autocomplete="off" ng-model="formData.scrypt.params.N" ng-model-options="{ debounce: 650 }" ng-change="onScryptFormChanged()" required></label></div><div class="col no-padding"><label class="item item-input"><span class="input-label" translate>LOGIN.SCRYPT.r</span> <input class="no-padding-right" type="number" placeholder="r" ng-model="formData.scrypt.params.r" autocomplete="off" ng-model-options="{ debounce: 650 }" ng-change="onScryptFormChanged()" required></label></div><div class="col no-padding"><label class="item item-input"><span class="input-label" translate>LOGIN.SCRYPT.p</span> <input class="no-padding-right" type="number" placeholder="p" autocomplete="off" ng-model="formData.scrypt.params.p" ng-model-options="{ debounce: 650 }" ng-change="onScryptFormChanged()" required></label></div></div><p class="energized-100-bg padding dark"><i class="icon ion-android-warning"></i> <span translate>INFO.FEATURES_NOT_IMPLEMENTED</span></p><ng-include src="::\'templates/login/form_scrypt.html\'"></ng-include>'),e.put("templates/login/form_scrypt.html",'<div class="item item-text-wrap" ng-if="!isAuth"><p ng-bind-html="\'LOGIN.SCRYPT_FORM_HELP\'|translate"></p></div><input type="password" name="fake-password" autocomplete="off" style="visibility:hidden; position:absolute;"> <label class="item item-input" ng-class="{ \'item-input-error\': form.$submitted && form.username.$invalid}"><span class="input-label hidden-xs" translate>LOGIN.SALT</span> <input name="username" type="password" placeholder="{{\'LOGIN.SALT_HELP\' | translate}}" autocomplete="off" ng-model="formData.username" ng-model-options="{ debounce: 650 }" class="highlight-light" required></label><div class="form-errors" ng-show="form.$submitted && form.username.$error" ng-messages="form.username.$error"><div class="form-error" ng-message="required"><span translate="ERROR.FIELD_REQUIRED"></span></div></div><label class="item item-input" ng-class="{ \'item-input-error\': form.$submitted && form.password.$invalid}"><span class="input-label hidden-xs" translate>LOGIN.PASSWORD</span> <input name="password" type="password" placeholder="{{\'LOGIN.PASSWORD_HELP\' | translate}}" autocomplete="off" ng-model="formData.password" ng-model-options="{ debounce: 650 }" select-on-click required></label><div class="form-errors" ng-show="form.$submitted && form.password.$error" ng-messages="form.password.$error"><div class="form-error" ng-message="required"><span translate="ERROR.FIELD_REQUIRED"></span></div></div><div class="item item-icon-right item-text-wrap" ng-class="{ \'item-input-error\': pubkeyError, \'item-input\': showPubkey}"><span class="input-label hidden-xs animate-show-hide ng-hide" ng-show="showPubkey" translate>COMMON.PUBKEY</span><div class="item-content text-wrap"><a class="positive ink animate-show-hide ng-hide" ng-show="showComputePubkeyButton && !pubkey" ng-click="computePubkey()"><i class="ion-eye"></i> {{\'COMMON.BTN_SHOW_PUBKEY\' | translate}} </a><span class="gray animate-show-hide" ng-show="!computing && pubkey">{{pubkey}}</span><ion-spinner class="ion-spinner-small" icon="android" ng-if="computing"></ion-spinner></div><a class="button button-icon positive button-small-padding icon ion-ios-help-outline animate-show-hide" ng-click="showHelpModal(\'login-pubkey\')" ng-if="!expectedPubkey" ng-show="showPubkey"></a> <span class="button button-icon balanced button-small-padding icon ion-checkmark animate-show-hide" ng-if="expectedPubkey" ng-show="showPubkey && !showComputePubkeyButton && !computing && !pubkeyError"></span></div><div class="form-errors" ng-if="expectedPubkey"><div class="form-error" ng-show="pubkeyError"><span trust-as-html="::\'ERROR.AUTH_INVALID_PUBKEY\'|translate:{pubkey: expectedPubkey}"></span></div></div>'),e.put("templates/login/item_remember_me.html",'<ion-checkbox ng-model="formData.rememberMe" ng-if="!isAuth" class="item ink item-text-wrap"><div class="item-content dark" translate>SETTINGS.REMEMBER_ME</div></ion-checkbox>'),e.put("templates/login/modal_login.html",'<ion-modal-view class="modal-full-height modal-login"><ion-header-bar class="" ng-class="{\'bar-positive\': !isAuth, \'bar-assertive\': isAuth}"><button class="button button-clear visible-xs" ng-click="closeModal()" translate>COMMON.BTN_CANCEL</button><h1 class="title" ng-bind-html="title | translate"></h1><div class="buttons buttons-right"><div class="secondary-buttons"><button class="button button-icon button-clear icon ion-android-done visible-xs" ng-class="{\'button-positive\': !isAuth}" style="color: #fff;" ng-click="doLogin()"></button></div></div></ion-header-bar><ion-content scroll="true"><ng-include src="::\'templates/login/form_login.html\'"></ng-include></ion-content></ion-modal-view>'),e.put("templates/login/popover_methods.html",'<ion-popover-view class="fit has-header popover-login-methods" ng-class="{\'auth\': isAuth}"><ion-header-bar><h1 class="title" translate>LOGIN.METHOD_POPOVER_TITLE</h1></ion-header-bar><ion-content scroll="false"><div class="list item-text-wrap"><a class="item item-icon-left ink" ng-click="changeMethod(\'SCRYPT_DEFAULT\')"><i class="icon ion-shuffle" style="font-size: 22px;"></i> {{\'LOGIN.METHOD.SCRYPT_DEFAULT\' | translate}} </a><a class="item item-icon-left ink" ng-click="changeMethod(\'SCRYPT_ADVANCED\')"><i class="icon ion-shuffle" style="font-size: 22px;"></i> <i class="icon-secondary ion-plus" style="font-size: 13px; left: 40px; margin-top: -4px;"></i> {{\'LOGIN.METHOD.SCRYPT_ADVANCED\' | translate}} </a><a class="item item-icon-left ink hidden-xs" ng-click="changeMethod(\'FILE\')"><i class="icon ion-document-text"></i> {{\'LOGIN.METHOD.FILE\' | translate}}</a><div ng-if="!isAuth" class="item-divider hidden-xs hidden-sm"></div><a class="item item-icon-left ink" ng-if="$root.device.barcode.enable" ng-click="changeMethod(\'SCAN\')"><i class="icon ion-qr-scanner"></i> {{\'LOGIN.METHOD.SCAN\' | translate}} </a><a class="item item-icon-left ink" ng-if="!isAuth" ng-click="changeMethod(\'PUBKEY\')"><i class="icon ion-key"></i> {{\'LOGIN.METHOD.PUBKEY\' | translate}}</a></div></ion-content></ion-popover-view>'),e.put("templates/menu.html",'<ion-side-menus enable-menu-with-back-views="true" bind-notifier="{locale: $root.settings.locale.id, peer: $root.currency.node.url}"><ion-side-menu-content><ion-nav-bar class="bar-dark" title-align="left"><ion-nav-back-button class="no-text"></ion-nav-back-button><ion-nav-buttons side="left"><button class="button button-clear visible-nomenu" menu-toggle="left"><i class="icon ion-navicon"></i></button></ion-nav-buttons><ion-nav-buttons side="right"><button class="button button-clear button-peer hidden-xs hidden-sm gray" ng-if="$root.config.readonly || $root.settings.expertMode" style="max-width: 450px !important;" ng-click="showPeerInfoPopover($event)"><span style="display: inline-flex;"><small class="ion-locked" ng-if=":peer:$root.currency.node.useSsl">&nbsp;</small> {{:peer:$root.currency.node.host}}{{:peer:$root.currency.node.port != 80 && $root.currency.node.port != 443 ? \':\'+$root.currency.node.port : \'\'}} <small>&nbsp;</small> <small class="ion-arrow-down-b"></small></span></button><cs-extension-point name="nav-buttons-right"></cs-extension-point><a id="helptip-header-bar-btn-profile" class="button button-icon button-clear hidden-xs hidden-sm" ng-if="::!$root.config.readonly" ng-click="showProfilePopover($event)"><i class="avatar avatar-member" ng-if="!walletData.avatar" ng-class="{\'disable\': !login, \'royal-bg\': login}"></i> <i class="avatar" ng-if="walletData.avatar" style="background-image: url(\'{{walletData.avatar.src}}\')"></i> <span ng-if="login && !auth" class="badge badge-button badge-secondary badge-assertive ion-locked"></span></a></ion-nav-buttons></ion-nav-bar><ion-nav-view name="menuContent"></ion-nav-view></ion-side-menu-content><ion-side-menu id="menu" side="left" expose-aside-when="large" enable-menu-with-back-views="false" width="225"><ion-header-bar class="bar-title"><h1 class="title dark hidden-sm hidden-xs"><span class="animate-fade-in animate-show-hide ng-hide" ng-show="$root.currency.name">{{:locale:\'COMMON.APP_NAME\'|translate}} {{$root.currency.name|abbreviate}} </span><a class="badge badge-assertive badge-app-mode left visible-demo" ng-click="showHelpModal(\'demo\')">{{:locale:\'MODE.DEMO.BADGE\'|translate}}</a> <a class="badge badge-balanced badge-app-mode right visible-readonly" ng-click="showHelpModal(\'readonly\')">{{:locale:\'MODE.READONLY.BADGE\'|translate}}</a></h1><div class="visible-sm visible-xs hero"><div class="content"><i class="avatar avatar-member hero-icon" ng-if="!walletData.avatar" ng-class="{\'royal-bg\': login, \'stable-bg\': !login}" ng-click="!login ? showHome() : loginAndGo()" menu-close></i> <a class="avatar hero-icon" ng-if="walletData.avatar" style="background-image: url(\'{{walletData.avatar.src}}\')" ui-sref="app.view_wallet" menu-close></a><h4 ng-if="login"><a class="light" ui-sref="app.view_wallet" menu-close>{{walletData.name||walletData.uid}} <span ng-if="!walletData.name && !walletData.uid"><i class="icon ion-key"></i>&nbsp;{{walletData.pubkey|formatPubkey}}</span></a></h4><h4 ng-if="!login"><a class="light" ui-sref="app.login" menu-close>{{\'COMMON.BTN_LOGIN\'|translate}} <i class="ion-arrow-right-b"></i></a></h4><cs-extension-point name="menu-profile-user"></cs-extension-point></div><a ng-if="::$root.device.isWeb()" ng-click="toggleFullscreen()" class="button-icon" style="position: absolute; top: 5px; right: 5px; z-index: 999;"><i class="icon ion-arrow-expand dark" ng-class="{\'ion-arrow-shrink\': fullscreen}"></i></a></div></ion-header-bar><ion-content scroll="false" class="scroll-content ionic-scroll" ng-class="{\'overflow-scroll\': smallscreen, \'scroll-content-false\': !smallscreen}"><ion-list class="list" ng-class="{\'scroll\': smallscreen}"><ion-item menu-close class="item item-actions item-button-right visible-xs visible-sm hidden-readonly" ng-if="login" ng-class="::{\'item-button-left\': $root.device.barcode.enable}"><button class="button button-positive ink-dark" ng-click="showTransferModal()"><i class="icon ion-paper-airplane"></i></button> <button class="button button-stable ink" ng-if="$root.device.barcode.enable" ng-click="scanQrCodeAndGo()"><i class="icon ion-qr-scanner"></i></button></ion-item><ion-item menu-close class="item-icon-left hidden-xs" ui-sref="app.home" active-link="active"><i class="icon ion-home"></i> {{:locale:\'MENU.HOME\'|translate}}</ion-item><ion-item menu-close class="item-icon-left visible-xs" ui-sref="app.home" active-link="active"><i class="icon ion-home"></i> {{:locale:\'MENU.HOME\'|translate}}</ion-item><div class="item item-divider hidden-readonly"></div><a menu-close class="item item-icon-left hidden-readonly" active-link="active" active-link-path-prefix="#/app/account" ui-sref="app.view_wallet" ng-class="{\'item-menu-disable\': !login}"><i class="icon ion-person"></i> {{:locale:\'MENU.ACCOUNT\'|translate}} </a><a id="helptip-menu-btn-account"></a> <a menu-close class="item item-icon-left hidden-readonly" active-link="active" active-link-path-prefix="#/app/history" ui-sref="app.view_wallet_tx" ng-class="{\'item-menu-disable\': !login}"><i class="icon ion-clock" style="top: calc(100%/4); left: 25px; font-size: 10pt; display: block;"></i> <b class="icon-secondary ion-card" style="top: calc(100%/2.5); left: 19px; font-size: 17pt; background-color: whitesmoke; width:17px; height: 14px;"></b> {{:locale:\'MENU.TRANSACTIONS\'|translate}} </a><a id="helptip-menu-btn-tx"></a> <a menu-close class="item item-icon-left hidden-readonly" active-link="active" active-link-path-prefix="#/app/wallets" ui-sref="app.view_wallets" ng-class="{\'item-menu-disable\': !login}"><i class="icon ion-card" style="top: calc(100%/5); left: 22px; font-size: 16pt; display: block;"></i> <i class="icon-secondary ion-card" style="top: 20px; left: 19px; font-size: 16pt; background-color: whitesmoke; width:17px; height: 14px;"></i> {{:locale:\'MENU.WALLETS\'|translate}} </a><a id="helptip-menu-btn-wallets"></a><div class="item item-divider visible-xs visible-sm hidden-readonly"></div><cs-extension-point name="menu-user"></cs-extension-point><ion-item class="item hidden-xs hidden-sm hidden-readonly"><button class="button button-block button-small button-small-padding icon-left icon ion-paper-airplane no-margin" ng-class="{\'button-positive\': login, \'button-stable\': !login}" ng-click="showTransferModal()">{{:locale:\'COMMON.BTN_SEND_MONEY\'|translate}}</button></ion-item><div class="item-spacer hidden-readonly"></div><div class="item item-divider hidden-readonly"></div><a class="item item-icon-left item-closeable hidden-xs hidden-sm" ng-show="$root.settings.helptip.enable" title="{{:locale:\'SETTINGS.DISABLE_HELPTIP\'|translate}}" ng-click="startHelpTour($event)"><i class="icon ion-easel"></i> {{:locale:\'COMMON.BTN_HELP_TOUR\'|translate}} <span class="close" ng-click="disableHelpTour($event)"></span> </a><a menu-close class="item item-icon-left" id="helptip-menu-btn-wot" active-link="active" active-link-path-prefix="#/app/wot" ui-sref="app.wot_lookup.tab_search"><i class="icon ion-person-stalker"></i> {{:locale:\'MENU.WOT\'|translate}}</a><cs-extension-point name="menu-main"></cs-extension-point><a menu-close class="item item-icon-left" id="helptip-menu-btn-currency" active-link="active" active-link-path-prefix="#/app/currency" ui-sref="app.currency"><i class="icon ion-ios-world-outline"></i> {{:locale:\'MENU.CURRENCY\'|translate}} </a><a menu-close class="item item-icon-left hidden-xs hidden-sm" id="helptip-menu-btn-network" active-link="active" active-link-path-prefix="#/app/network" ui-sref="app.network"><i class="icon ion-cloud"></i> {{:locale:\'MENU.NETWORK\'|translate}}</a><cs-extension-point name="menu-discover"></cs-extension-point><div class="item-spacer visible-readonly"></div><div class="item item-divider visible-xs visible-sm"></div><a menu-close class="item item-icon-left visible-xs visible-sm" active-link="active" active-link-path-prefix="#/app/help" ui-sref="app.help"><i class="icon ion-ios-help-outline"></i> {{:locale:\'HOME.BTN_HELP\'|translate}} </a><a menu-close class="item item-icon-left visible-xs visible-sm visible-readonly" active-link="active" id="menu-btn-settings" active-link-path-prefix="#/app/settings" ui-sref="app.settings"><i class="icon ion-android-settings"></i> {{:locale:\'MENU.SETTINGS\'|translate}} </a><a id="helptip-menu-btn-settings"></a><div class="item item-divider visible-xs visible-sm margin-top" ng-if="login"></div><a menu-close ng-if="login" class="item item-icon-left visible-xs visible-sm" ng-click="logout({askConfirm: true})"><i class="icon ion-log-out assertive"></i> <span class="assertive" translate>{{:locale:\'COMMON.BTN_LOGOUT\'|translate}}</span></a></ion-list></ion-content><ion-footer-bar class="bar-stable footer hidden-xs hidden-sm"><a class="pull-left icon-help" menu-toggle="left" title="{{:locale:\'HOME.BTN_HELP\'|translate}}" ui-sref="app.help"></a> <a class="title gray" ng-click="showAboutModal()"><span title="{{:locale:\'HOME.BTN_ABOUT\'|translate}}" ng-class="{\'assertive\': $root.newRelease}"><i ng-if="$root.newRelease" class="ion-alert-circled assertive"></i> {{:locale:\'COMMON.APP_VERSION\'|translate:{version: config.version} }} </span>| <span title="{{:locale:\'HOME.BTN_ABOUT\'|translate}}">{{:locale:\'HOME.BTN_ABOUT\'|translate}}</span></a></ion-footer-bar></ion-side-menu></ion-side-menus>'),e.put("templates/modal_about.html",'<ion-modal-view class="about"><ion-header-bar class="bar-positive"><button class="button button-clear visible-xs" ng-click="closeModal()" translate>COMMON.BTN_CLOSE</button><h1 class="title" translate>ABOUT.TITLE</h1></ion-header-bar><ion-content class="text-center" scroll="true"><div class="list item-wrap-text"><ion-item class="item-icon-left item-text-wrap"><span>{{\'COMMON.APP_NAME\'|translate}}&nbsp;<b>{{\'COMMON.APP_VERSION\'|translate:$root.config}}</b> - <a ng-click="openLink($event, \'http://cesium.app\')">www.cesium.app</a></span> <i ng-if="$root.newRelease" class="assertive ion-alert-circled"></i><h3 ng-if="buildDate" class="gray">{{\'COMMON.APP_BUILD\'|translate:{build: buildDate} }}</h3><span translate>ABOUT.LICENSE</span></ion-item><ion-item class="item-icon-left" ng-if="$root.newRelease"><i class="item-image icon ion-alert-circled assertive"></i> <span ng-if="!$root.device.isWeb()" ng-bind-html="\'ABOUT.PLEASE_UPDATE\' | translate:$root.newRelease "></span> <span ng-if="$root.device.isWeb()" ng-bind-html="\'ABOUT.LATEST_RELEASE\' | translate:$root.newRelease "></span><h3 ng-if="!$root.device.enable"><a ng-click="openLink($event, $root.newRelease.url)" translate>{{::$root.newRelease.url}}</a></h3></ion-item><ion-item class="item-icon-left item-text-wrap"><i class="item-image icon ion-android-laptop"></i> <span translate>ABOUT.OFFICIAL_WEB_SITE</span><h3><a ng-click="openLink($event, \'https://www.cesium.app\')">https://www.cesium.app</a></h3></ion-item><ion-item class="item-icon-left"><i class="item-image icon ion-chatbubbles"></i> {{\'ABOUT.FORUM\' | translate}}<h3><a ng-click="openLink($event, $root.settings.userForumUrl)">{{::$root.settings.userForumUrl}}</a></h3></ion-item><ion-item class="item-icon-left item-text-wrap"><i class="item-image icon ion-bug"></i> <span translate>ABOUT.PLEASE_REPORT_ISSUE</span><h3><a ng-click="openLink($event, $root.settings.newIssueUrl)" translate>ABOUT.REPORT_ISSUE</a></h3></ion-item><ion-item class="item-icon-left"><i class="item-image icon ion-network"></i> {{\'ABOUT.CODE\' | translate}}<h3><a ng-click="openLink($event, $root.settings.sourceUrl)">{{$root.settings.sourceUrl}}</a></h3></ion-item><ion-item class="item-icon-left"><i class="item-image icon ion-person-stalker"></i> {{\'ABOUT.DEVELOPERS\' | translate}}<h3><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></h3></ion-item><div class="padding hidden-xs text-center"><button class="button button-stable icon-left ink" type="submit" ng-click="closeModal()" ui-sref="app.help"><i class="icon ion-ios-help-outline"></i> {{\'HOME.BTN_HELP\' | translate}}</button> <button class="button button-positive ink" type="submit" ng-click="closeModal()">{{\'COMMON.BTN_CLOSE\' | translate}}</button></div></div></ion-content></ion-modal-view>'),e.put("templates/network/item_content_peer.html",'<i class="icon ion-android-desktop" ng-class=":rebind:{\'balanced\': peer.online && peer.hasMainConsensusBlock, \'energized\': peer.online && peer.hasConsensusBlock, \'gray\': peer.online && !peer.hasConsensusBlock && !peer.hasMainConsensusBlock, \'stable\': !peer.online}" ng-if=":rebind:!peer.avatar"></i> <b class="icon-secondary ion-person" ng-if=":rebind:!peer.avatar" ng-class=":rebind:{\'balanced\': peer.online && peer.hasMainConsensusBlock, \'energized\': peer.online && peer.hasConsensusBlock, \'gray\': peer.online && !peer.hasConsensusBlock && !peer.hasMainConsensusBlock, \'stable\': !peer.online}" style="left: 26px; top: -3px;"></b> <i class="avatar" ng-if="::peer.avatar" style="background-image: url(\'{{::peer.avatar.src}}\')"></i> <b class="icon-secondary assertive ion-close-circled" ng-if=":rebind:!peer.online" style="left: 37px; top: -10px;"></b><div class="row no-padding"><div class="col no-padding"><h3 class="dark" ng-if=":rebind:!peer.bma.private">{{:rebind:peer.dns || peer.server}}</h3><h4 class="gray" ng-if=":rebind:peer.bma.private"><i class="ion-flash"></i> {{:locale:\'NETWORK.VIEW.PRIVATE_ACCESS\'|translate}}</h4><h4><span class="gray" ng-if=":rebind:!peer.uid"><i class="ion-key"></i> {{:rebind:peer.pubkey|formatPubkey}} </span><span class="positive" ng-if=":rebind:peer.uid"><i class="ion-person"></i> {{:rebind:peer.name || peer.uid}} </span><span class="gray" ng-if=":rebind:!compactMode">{{:rebind:peer.dns && (\' | \' + peer.server) + (peer.bma.path||\'\') }}</span></h4></div><div class="col col-15 no-padding text-center hidden-xs hidden-sm" ng-if="::expertMode"><div style="min-width: 50px; padding-top: 5px;" ng-if=":rebind:!compactMode"><span ng-if=":rebind:peer.isSsl()" title="SSL"><i class="ion-locked"></i><small class="hidden-md"> SSL</small> </span><span ng-if=":rebind:peer.isBma()" title="BMA"><i class="ion-cloud"></i><small class="hidden-md"> BMA</small> </span><span ng-if=":rebind:peer.isWs2p()" ng-click="showWs2pPopover($event, peer)" title="WS2P"><i class="ion-arrow-swap"></i><small class="hidden-md"> WS2P</small></span></div><div ng-if=":rebind:!peer.isWs2p()&&peer.hasEndpoint(\'ES_USER_API\')" ng-click="showEndpointsPopover($event, peer, \'ES_USER_API\')" title="Cesium+"><i class="ion-es-user-api"></i> <b class="ion-plus dark" style="position: relative; left: -14px; top:-17px; font-size : 16px;"></b></div><div ng-if=":rebind:!peer.isWs2p()&&peer.isTor()" ng-click="showEndpointsPopover($event, peer, \'BMATOR\')"><i class="ion-bma-tor-api"></i></div><div ng-if=":rebind:peer.isWs2p()&&peer.isTor()" ng-click="showWs2pPopover($event, peer)"><i class="ion-bma-tor-api"></i></div></div><div class="col col-20 no-padding text-center" ng-if="::expertMode && search.type != \'offline\'"><h3 class="hidden-sm hidden-xs gray"><span ng-if=":rebind:peer.uid"><i class="ion-lock-combination"></i>{{:rebind:peer.difficulty||\'?\'}}</span> <span ng-if=":rebind:!peer.uid" translate>PEER.MIRROR</span></h3><h4 class="hidden-sm hidden-xs gray">{{:rebind: peer.software !== \'duniter\' ? peer.software : \'\'}} {{:rebind: peer.version ? (\'v\'+peer.version) : \'\'}}</h4></div><div class="col col-20 no-padding text-center"><span id="{{$index === 0 ? helptipPrefix + \'-peer-0-block\' : \'\'}}" class="badge" ng-class=":rebind:{\'badge-balanced\': peer.hasMainConsensusBlock, \'badge-energized\': peer.hasConsensusBlock, \'ng-hide\': !peer.currentNumber && !peer.blockNumber }">{{:locale:!expertMode ? (\'COMMON.BLOCK\'|translate) : \'\' }} {{:rebind:(peer.currentNumber || peer.blockNumber) | formatInteger}}</span> <span class="badge badge-secondary" ng-if=":rebind:peer.consensusBlockDelta && expertMode"><i class="ion-clock"></i>&nbsp; {{:rebind:peer.consensusBlockDelta|formatDurationTime}}</span></div></div>'),e.put("templates/network/items_peers.html",'<div class="no-padding {{::motion.ionListClass}}"><div class="item item-text-wrap no-border done in gray no-padding-top no-padding-bottom inline text-italic" ng-if="::isHttps && expertMode"><small><i class="icon ion-alert-circled"></i> {{:locale:\'NETWORK.INFO.ONLY_SSL_PEERS\'|translate}}</small></div><div class="item row row-header hidden-xs hidden-sm done in" ng-if="::expertMode"><a class="col col-header no-padding dark" ng-click="toggleSort(\'uid\')"><cs-sort-icon asc="search.asc" sort="search.sort" toggle="\'uid\'"></cs-sort-icon>{{:locale:\'COMMON.UID\' | translate}} / {{:locale:\'COMMON.PUBKEY\' | translate}} </a><a class="no-padding dark hidden-md col col-15 col-header" ng-click="toggleSort(\'api\')" ng-if=":rebind:!compactMode"><cs-sort-icon asc="search.asc" sort="search.sort" toggle="\'api\'"></cs-sort-icon>{{:locale:\'PEER.API\' | translate}}</a><div class="no-padding dark hidden-md col col-15 col-header" ng-if=":rebind:compactMode"></div><a class="no-padding dark col col-20 col-header" ng-click="toggleSort(\'difficulty\')"><cs-sort-icon asc="search.asc" sort="search.sort" toggle="\'difficulty\'"></cs-sort-icon>{{:locale:\'PEER.DIFFICULTY\' | translate}} </a><a class="col col-20 col-header no-padding dark" ng-click="toggleSort(\'current_block\')"><cs-sort-icon asc="search.asc" sort="search.sort" toggle="\'current_block\'"></cs-sort-icon>{{:locale:\'PEER.CURRENT_BLOCK\' | translate}}</a></div><div ng-repeat="peer in search.results track by peer.id" class="item item-peer item-icon-left ink {{::ionItemClass}}" ng-class=":rebind:{\'compacted\': peer.compacted && compactMode}" ng-attr-id="{{::($index === 0 ? (helptipPrefix + \'-peer-0\') : undefined)}}" ng-click="selectPeer(peer)" ng-include="::\'templates/network/item_content_peer.html\'"></div></div>'),e.put("templates/network/lookup_popover_actions.html",'<ion-popover-view class="fit has-header"><ion-header-bar><h1 class="title" translate>PEER.POPOVER_FILTER_TITLE</h1></ion-header-bar><ion-content scroll="false"><div class="list item-text-wrap"><a class="item item-icon-left item-icon-right ink" ng-click="toggleSearchType(\'member\')"><i class="icon ion-person"></i> {{\'PEER.MEMBERS\' | translate}} <i class="icon ion-ios-checkmark-empty" ng-show="search.type==\'member\'"></i> </a><a class="item item-icon-left item-icon-right ink" ng-click="toggleSearchType(\'mirror\')"><i class="icon ion-radio-waves"></i> {{\'PEER.MIRRORS\' | translate}} <i class="icon ion-ios-checkmark-empty" ng-show="search.type==\'mirror\'"></i> </a><a class="item item-icon-left item-icon-right ink" ng-click="toggleSearchType(\'offline\')"><i class="icon ion-eye-disabled"></i> {{\'PEER.OFFLINE\' | translate}} <i class="icon ion-ios-checkmark-empty" ng-show="search.type==\'offline\'"></i></a></div></ion-content></ion-popover-view>'),e.put("templates/network/modal_network.html",'<ion-modal-view id="nodes" class="modal-full-height" cache-view="false"><ion-header-bar class="bar-positive"><button class="button button-clear" ng-click="closeModal()" translate>COMMON.BTN_CANCEL</button><h1 class="title" translate>PEER.PEER_LIST</h1><div class="buttons buttons-right header-item"><span class="secondary"><button class="button button-clear icon ion-loop button-clear" ng-click="refresh()"></button> <button class="button button-icon button-clear icon ion-android-more-vertical visible-xs visible-sm" ng-click="showActionsPopover($event)"></button></span></div></ion-header-bar><ion-content><div class="list"><div class="padding padding-xs" style="display: block; height: 60px;"><div class="pull-left"><h4><span ng-if="enableFilter && search.type==\'member\'" translate>PEER.MEMBER_PEERS</span> <span ng-if="enableFilter && search.type==\'mirror\'" translate>PEER.MIRROR_PEERS</span> <span ng-if="!enableFilter || !search.type" translate>PEER.ALL_PEERS</span> <span ng-if="!search.loading">({{search.results.length}})</span></h4></div><div class="pull-right"><ion-spinner class="icon" icon="android" ng-if="search.loading"></ion-spinner>&nbsp;<div class="pull-right"><a class="button button-text button-small hidden-xs hidden-sm ink" ng-if="enableFilter" ng-class="{\'button-text-positive\': search.type==\'member\'}" ng-click="toggleSearchType(\'member\')"><i class="icon ion-person"></i> {{\'PEER.MEMBERS\'|translate}} </a>&nbsp; <a class="button button-text button-small hidden-xs hidden-sm ink" ng-if="enableFilter" ng-class="{\'button-text-positive\': search.type==\'mirror\'}" ng-click="toggleSearchType(\'mirror\')"><i class="icon ion-ios-infinite"></i> {{\'PEER.MIRRORS\'|translate}}</a></div></div></div><ng-include src="::\'templates/network/items_peers.html\'"></ng-include></div></ion-content></ion-modal-view>'),e.put("templates/network/popover_endpoints.html",'<ion-popover-view class="popover-endpoints popover-light" style="height: {{(titleKey?30:0)+((!items || items.length &lt;= 1) ? 55 : 3+items.length*52)}}px"><ion-header-bar class="bar bar-header stable-bg" ng-if="titleKey"><div class="title">{{titleKey | translate:titleValues }}</div></ion-header-bar><ion-content scroll="false"><div class="list" ng-class="{\'has-header\': titleKey}"><div class="item item-text-wrap" ng-repeat="item in items"><div class="item-label" ng-if="item.label">{{item.label | translate}}</div><div id="endpoint_{{$index}}" class="badge item-note dark">{{item.value}}</div></div></div></ion-content></ion-popover-view>'),e.put("templates/network/popover_network.html",'<ion-popover-view class="fit hidden-xs hidden-sm popover-notification popover-network" ng-controller="NetworkLookupPopoverCtrl"><ion-header-bar class="stable-bg block"><div class="title">{{\'MENU.NETWORK\'|translate}}<ion-spinner class="ion-spinner-small" icon="android" ng-if="search.loading"></ion-spinner></div><div class="pull-right"><a ng-class="{\'positive\': search.type==\'member\', \'dark\': search.type!==\'member\'}" ng-click="toggleSearchType(\'member\')" translate>PEER.MEMBERS</a></div></ion-header-bar><ion-content scroll="true"><div class="list no-padding"><ng-include src="::\'templates/network/items_peers.html\'"></ng-include></div></ion-content><ion-footer-bar class="stable-bg block"><div class="pull-left"><a class="positive" ui-sref="app.settings" ng-click="closePopover()" translate>COMMON.NOTIFICATIONS.SETTINGS</a></div><div class="pull-right"><a class="positive" ui-sref="app.network" ng-click="closePopover()" translate>COMMON.NOTIFICATIONS.SHOW_ALL</a></div></ion-footer-bar></ion-popover-view>'),e.put("templates/network/popover_peer_info.html",'<ion-popover-view class="fit hidden-xs hidden-sm popover-notification popover-peer-info" ng-controller="PeerInfoPopoverCtrl"><ion-header-bar class="stable-bg block"><div class="title">{{\'PEER.VIEW.TITLE\'|translate}}</div></ion-header-bar><ion-content scroll="true"><div class="center padding" ng-if="loading"><ion-spinner icon="android"></ion-spinner></div><div class="list no-padding" ng-if="!loading"><div class="item" ng-if=":rebind:formData.software"><i class="ion-outlet"></i> {{\'NETWORK.VIEW.SOFTWARE\'|translate}}<div class="badge" ng-class=":rebind:{\'badge-energized\': formData.isPreRelease, \'badge-assertive\': formData.hasNewRelease }">{{formData.software}} v{{:rebind:formData.version}}</div><div class="gray badge badge-secondary" ng-if="formData.isPreRelease"><i class="ion-alert-circled"></i> <span ng-bind-html="\'NETWORK.VIEW.WARN_PRE_RELEASE\'|translate: formData.latestRelease"></span></div><div class="gray badge badge-secondary" ng-if="formData.hasNewRelease"><i class="ion-alert-circled"></i> <span ng-bind-html="\'NETWORK.VIEW.WARN_NEW_RELEASE\'|translate: formData.latestRelease"></span></div></div><div class="item"><i class="ion-locked"></i> {{\'NETWORK.VIEW.ENDPOINTS.BMAS\'|translate}}<div class="badge badge-balanced" ng-if=":rebind:formData.useSsl" translate>COMMON.BTN_YES</div><div class="badge badge-assertive" ng-if=":rebind:!formData.useSsl" translate>COMMON.BTN_NO</div></div><div class="item"><i class="ion-cube"></i> {{\'BLOCKCHAIN.VIEW.TITLE_CURRENT\'|translate}}<div class="badge badge-balanced">{{:rebind:formData.number | formatInteger}}</div></div><div class="item"><i class="ion-clock"></i> {{\'CURRENCY.VIEW.MEDIAN_TIME\'|translate}}<div class="badge dark">{{:rebind:formData.medianTime | medianDate}}</div></div><div class="item"><i class="ion-lock-combination"></i> {{\'CURRENCY.VIEW.POW_MIN\'|translate}}<div class="badge dark">{{:rebind:formData.powMin | formatInteger}}</div></div><cs-extension-point name="default"></cs-extension-point></div></ion-content><ion-footer-bar class="stable-bg block"><div class="pull-left"><a class="positive" ui-sref="app.settings" ng-click="closePopover()" translate>MENU.SETTINGS</a></div><div class="pull-right"><a class="positive" ui-sref="app.view_peer" ng-click="closePopover()" translate>PEER.BTN_SHOW_PEER</a></div></ion-footer-bar></ion-popover-view>'),e.put("templates/network/view_network.html",'<ion-view><ion-nav-title><span translate>MENU.NETWORK</span></ion-nav-title><ion-nav-buttons side="secondary"><button class="button button-icon button-clear icon ion-loop visible-xs visible-sm" ng-click="refresh()"></button></ion-nav-buttons><ion-content scroll="true" ng-init="enableFilter=true; ionItemClass=\'item-border-large\';"><div class="row responsive-sm responsive-md responsive-lg"><div class="col list col-border-right"><div class="padding padding-xs" style="display: block; height: 60px;"><div class="pull-left"><h4><span ng-if="enableFilter && search.type==\'member\'" translate>PEER.MEMBER_PEERS</span> <span ng-if="enableFilter && search.type==\'mirror\'" translate>PEER.MIRROR_PEERS</span> <span ng-if="enableFilter && search.type==\'offline\'" translate>PEER.OFFLINE_PEERS</span> <span ng-if="!enableFilter || !search.type" translate>PEER.ALL_PEERS</span> <span ng-if="search.results.length">({{search.results.length}})</span><ion-spinner ng-if="search.loading" class="icon ion-spinner-small" icon="android"></ion-spinner></h4></div><div class="pull-right"><div class="pull-right" ng-if="enableFilter"><a class="button button-text button-small hidden-xs hidden-sm ink" ng-class="{\'button-text-positive\': compactMode}" ng-click="toggleCompactMode()"><i class="icon ion-navicon"></i> <b class="ion-arrow-down-b" style="position: absolute; top: -2px; left: 4px; font-size: 8px;"></b> <b class="ion-arrow-up-b" style="position: absolute; top: 10px; left: 4px; font-size: 8px;"></b> <span>{{:locale:\'BLOCKCHAIN.LOOKUP.BTN_COMPACT\'|translate}}</span> </a><a class="button button-text button-small hidden-xs hidden-sm ink" ng-class="{\'button-text-positive\': search.type==\'member\'}" title="{{:locale:\'PEER.MEMBER_PEERS\'|translate}}" ng-click="toggleSearchType(\'member\')"><i class="icon ion-person-stalker"></i> {{\'PEER.MEMBERS\'|translate}} </a>&nbsp; <a class="button button-text button-small hidden-xs hidden-sm ink" ng-class="{\'button-text-positive\': search.type==\'mirror\'}" title="{{\'PEER.MIRROR_PEERS\'|translate}}" ng-click="toggleSearchType(\'mirror\')"><i class="icon ion-radio-waves"></i> {{:locale:\'PEER.MIRRORS\'|translate}} </a><a class="button button-text button-small hidden-xs hidden-sm ink" ng-class="{\'button-text-positive\': search.type==\'offline\', \'button-text-stable\': search.type!=\'offline\'}" title="{{\'PEER.OFFLINE_PEERS\'|translate}}" ng-click="toggleSearchType(\'offline\')"><i class="icon ion-close-circled light-gray"></i> <span>{{:locale:\'PEER.OFFLINE\'|translate}}</span></a><cs-extension-point name="network-buttons"></cs-extension-point></div></div></div><div id="helptip-network-blockchain" style="display: block"></div><div id="helptip-network-peers" style="display: block"></div><ng-include src="::\'templates/network/items_peers.html\'"></ng-include></div><div class="col col-33" ng-controller="BlockLookupCtrl"><div class="padding padding-xs" style="display: block; height: 100px;"><h4 translate>BLOCKCHAIN.LOOKUP.LAST_BLOCKS</h4><div class="pull-right hidden-xs hidden-sm"><a class="button button-text button-small ink" ng-class="{\'button-text-positive\': compactMode, \'button-text-stable\': !compactMode}" ng-click="toggleCompactMode()"><i class="icon ion-navicon"></i> <b class="icon-secondary ion-arrow-down-b" style="top: -8px; left: 5px; font-size: 8px;"></b> <b class="icon-secondary ion-arrow-up-b" style="top: 4px; left: 5px; font-size: 8px;"></b> <span>{{:locale:\'BLOCKCHAIN.LOOKUP.BTN_COMPACT\'|translate}}</span></a><cs-extension-point name="blockchain-buttons"></cs-extension-point></div></div><ng-include src="::\'templates/blockchain/list_blocks.html\'"></ng-include></div></div></ion-content></ion-view>'),e.put("templates/network/view_peer.html",'<ion-view><ion-nav-title><span translate>PEER.VIEW.TITLE</span></ion-nav-title><ion-content><div class="row no-padding"><div class="col col-20 hidden-xs hidden-sm">&nbsp;</div><div class="col list"><ion-item><h1><span translate>PEER.VIEW.TITLE</span> <span class="gray">{{node.host}}</span></h1><h2 class="gray"><i class="gray icon ion-android-globe"></i> {{node.bma.dns || node.server}} <span class="gray" ng-if="!loading && node.useSsl"><i class="gray ion-locked"></i> <small>SSL</small> </span><span class="gray" ng-if="!loading && node.useTor"><i class="gray ion-bma-tor-api"></i> </span><span class="assertive" ng-if="!loading && !node.uid">({{\'PEER.MIRROR\'|translate}})</span></h2><h3><span class="dark"><i class="icon ion-android-desktop"></i> {{\'PEER.VIEW.OWNER\'|translate}} </span><a class="positive" ng-if="node.uid" ui-sref="app.wot_identity({pubkey: node.pubkey, uid: node.uid})"><i class="ion-person"></i> {{node.name || node.uid}} <span class="gray" ng-if="node.name">({{node.uid}}) </span></a><span ng-if="!loading && !node.uid"><a class="gray" ui-sref="app.wot_identity({pubkey: node.pubkey})"><i class="ion-key"></i> {{node.pubkey|formatPubkey}} <span class="gray" ng-if="node.name">({{node.name}})</span></a></span></h3><h3><a ng-click="openRawPeering($event)"><i class="icon ion-share"></i> {{\'PEER.VIEW.SHOW_RAW_PEERING\'|translate}} </a><span class="gray" ng-if="!isReachable">| </span><a ng-if="!isReachable" ng-click="openRawCurrentBlock($event)"><i class="icon ion-share"></i> <span translate>PEER.VIEW.SHOW_RAW_CURRENT_BLOCK</span></a></h3></ion-item><div class="item item-divider" translate>PEER.VIEW.GENERAL_DIVIDER</div><ion-item class="item-icon-left item-text-wrap ink" copy-on-click="{{node.pubkey}}"><i class="icon ion-key"></i> <span translate>COMMON.PUBKEY</span><h4 class="dark text-left">{{node.pubkey}}</h4></ion-item><a class="item item-icon-left item-icon-right item-text-wrap ink" ng-if="isReachable" ui-sref="app.view_server_block_hash({server: node.server, ssl: node.useSsl, tor: node.useTor, number: current.number, hash: current.hash})"><i class="icon ion-cube"></i> <span translate>BLOCKCHAIN.VIEW.TITLE_CURRENT</span><div class="badge badge-calm" ng-if="!loading">{{current.number|formatInteger}}</div><i class="gray icon ion-ios-arrow-right"></i> </a><a class="item item-icon-left item-icon-right item-text-wrap ink" ng-if="isReachable" ui-sref="app.server_blockchain({server: node.server, ssl: node.useSsl, tor: node.useTor})"><i class="icon ion-cube" style="font-size: 25px;"></i> <i class="icon-secondary ion-clock" style="font-size: 18px; left: 33px; top: -12px;"></i> <span translate>PEER.VIEW.LAST_BLOCKS</span> <i class="gray icon ion-ios-arrow-right"></i></a><cs-extension-point name="general"></cs-extension-point><div class="item item-divider" ng-hide="loading || !isReachable" translate>PEER.VIEW.KNOWN_PEERS</div><ion-item class="item item-text-wrap no-border done in gray no-padding-top no-padding-bottom inline text-italic" ng-show="!loading && !isReachable"><small><i class="icon ion-alert-circled"></i> {{\'NETWORK.INFO.ONLY_SSL_PEERS\'|translate}}</small></ion-item><div class="item center" ng-if="loading"><ion-spinner class="icon" icon="android"></ion-spinner></div><div class="list no-padding {{::motion.ionListClass}}" ng-if="isReachable"><div ng-repeat="peer in :rebind:peers track by peer.id" class="item item-peer item-icon-left ink {{::ionItemClass}}" ng-click="selectPeer(peer)" ng-include="::\'templates/network/item_content_peer.html\'"></div></div></div><div class="col col-20 hidden-xs hidden-sm">&nbsp;</div></div></ion-content></ion-view>'),e.put("templates/settings/popover_actions.html",'<ion-popover-view class="fit has-header"><ion-header-bar><h1 class="title" translate>COMMON.POPOVER_ACTIONS_TITLE</h1></ion-header-bar><ion-content scroll="false"><div class="list item-text-wrap"><a class="item item-icon-left ink visible-xs visible-sm" ng-click="reset()"><i class="icon ion-refresh"></i> {{\'SETTINGS.BTN_RESET\' | translate}} </a><a class="item item-icon-left ink" ng-click="startSettingsTour()"><i class="icon ion-easel"></i> {{\'COMMON.BTN_HELP_TOUR_SCREEN\' | translate}}</a></div></ion-content></ion-popover-view>'),e.put("templates/settings/popup_node.html",'<form name="popupForm" ng-submit=""><div class="list no-padding" ng-init="setPopupForm(popupForm)"><div class="item item-input item-floating-label" ng-class="{\'item-input-error\': popupForm.$submitted && popupForm.newNode.$invalid}"><span class="input-label" ng-bind-html="\'SETTINGS.POPUP_PEER.HOST\'|translate"></span> <input name="newNode" type="text" placeholder="{{\'SETTINGS.POPUP_PEER.HOST_HELP\' | translate}}" ng-model="popupData.newNode" ng-minlength="3" required></div><div class="form-errors" ng-if="popupForm.$submitted && popupForm.newNode.$error" ng-messages="popupForm.newNode.$error"><div class="form-error" ng-message="required"><span translate="ERROR.FIELD_REQUIRED"></span></div><div class="form-error" ng-message="minlength"><span translate="ERROR.FIELD_TOO_SHORT"></span></div></div><div class="item item-toggle"><span class="input-label">{{\'SETTINGS.POPUP_PEER.USE_SSL\' | translate}}</span><h4><small class="gray" ng-bind-html="\'SETTINGS.POPUP_PEER.USE_SSL_HELP\' | translate"></small></h4><label class="toggle toggle-royal no-padding-right"><input type="checkbox" ng-model="popupData.useSsl"><div class="track"><div class="handle"></div></div></label></div><a class="button button-positive button-clear positive button-outline button-full button-small-padding icon-left ink no-padding" ng-click="showNodeList()"><i class="icon ion-search"></i> {{\'SETTINGS.POPUP_PEER.BTN_SHOW_LIST\' | translate}}</a></div><button type="submit" class="hide"></button></form>'),e.put("templates/settings/settings.html",'<ion-view left-buttons="leftButtons" cache-view="false" class="settings"><ion-nav-title translate>SETTINGS.TITLE</ion-nav-title><ion-nav-buttons side="secondary"><button class="button button-icon button-clear icon ion-android-more-vertical visible-xs visible-sm" ng-click="showActionsPopover($event)"></button></ion-nav-buttons><ion-content><div class="padding text-center hidden-xs hidden-sm"><button class="button button-raised button-stable ink" ng-click="reset()"><i class="icon ion-refresh"></i> {{\'SETTINGS.BTN_RESET\' | translate}}</button> <button class="button button-stable button-small-padding icon ion-android-more-vertical" ng-click="showActionsPopover($event)" title="{{\'COMMON.BTN_OPTIONS\' | translate}}"></button></div><div class="row no-padding responsive-sm responsive-md responsive-lg"><div class="col col-50 list item-border-large padding-left padding-right no-padding-xs no-padding-sm" style="margin-bottom: 2px;"><span class="item item-divider" translate>SETTINGS.DISPLAY_DIVIDER</span> <label class="item item-input item-select"><div class="input-label" translate>COMMON.LANGUAGE</div><select ng-model="formData.locale" ng-change="changeLanguage(formData.locale.id)" ng-options="l as l.label for l in locales track by l.id"></select></label><div class="item item-toggle dark"><div class="input-label">{{\'COMMON.BTN_RELATIVE_UNIT\' | translate}}</div><label class="toggle toggle-royal" id="helptip-settings-btn-unit-relative"><input type="checkbox" ng-model="formData.useRelative"><div class="track"><div class="handle"></div></div></label></div><div class="item item-toggle dark item-text-wrap"><div class="input-label" ng-bind-html="\'SETTINGS.ENABLE_HELPTIP\' | translate"></div><label class="toggle toggle-royal"><input type="checkbox" ng-model="formData.helptip.enable"><div class="track"><div class="handle"></div></div></label></div><span class="item item-divider" translate>SETTINGS.STORAGE_DIVIDER</span><div class="item item-text-wrap item-toggle dark"><div class="input-label">{{\'SETTINGS.USE_LOCAL_STORAGE\' | translate}}</div><h4 class="gray" ng-bind-html="\'SETTINGS.USE_LOCAL_STORAGE_HELP\' | translate"></h4><label class="toggle toggle-royal"><input type="checkbox" ng-model="formData.useLocalStorage"><div class="track"><div class="handle"></div></div></label></div><div class="item item-text-wrap item-toggle dark"><div class="input-label" ng-class="{\'gray\': !formData.useLocalStorage}" ng-bind-html="\'SETTINGS.PERSIST_CACHE\' | translate"></div><h4 class="gray" ng-bind-html="\'SETTINGS.PERSIST_CACHE_HELP\' | translate"></h4><label class="toggle toggle-royal"><input type="checkbox" ng-model="formData.persistCache" ng-if="formData.useLocalStorage"> <input type="checkbox" ng-model="formData.useLocalStorage" ng-if="!formData.useLocalStorage" disabled="disabled"><div class="track"><div class="handle"></div></div></label></div><cs-extension-point name="common"></cs-extension-point><span class="item item-divider hidden-readonly">{{\'SETTINGS.AUTHENTICATION_SETTINGS\' | translate}}</span><div class="item item-toggle item-text-wrap hidden-readonly"><div class="input-label" ng-class="{\'gray\': !formData.useLocalStorage}">{{\'SETTINGS.REMEMBER_ME\' | translate}}</div><h4 class="gray text-wrap" ng-bind-html="\'SETTINGS.REMEMBER_ME_HELP\' | translate"></h4><label class="toggle toggle-royal"><input type="checkbox" ng-model="formData.rememberMe" ng-if="formData.useLocalStorage"> <input type="checkbox" ng-model="formData.useLocalStorage" ng-if="!formData.useLocalStorage" disabled="disabled"><div class="track"><div class="handle"></div></div></label></div><label class="item item-input item-select item-text-wrap hidden-readonly"><div class="input-label hidden-xs" ng-class="::{\'gray\': $root.config.demo}"><span class="hidden-xs" translate>SETTINGS.KEEP_AUTH</span><h4 class="gray text-wrap hidden-xs" ng-bind-html="\'SETTINGS.KEEP_AUTH_HELP\' | translate"></h4><ng-if ng-if="::$root.config.demo" ng-include="::\'templates/common/note_feature_not_available.html\'"></ng-if></div><span class="visible-xs" ng-class="::{\'gray\': $root.config.demo}" translate>SETTINGS.KEEP_AUTH_SHORT</span> <select ng-model="formData.keepAuthIdle" ng-disabled="$root.config.demo" ng-options="i as (keepAuthIdleLabels[i].labelKey | translate:keepAuthIdleLabels[i].labelParams ) for i in keepAuthIdles track by i"></select></label><div class="item item-input hidden-xs hidden-sm" ng-class="{\'gray\': (!formData.useLocalStorage || !formData.rememberMe)}" ng-if="::$root.device.isDesktop()"><div class="input-label"><span class="input-label" translate>SETTINGS.KEYRING_FILE</span><h4 class="gray text-wrap" ng-bind-html="\'SETTINGS.KEYRING_FILE_HELP\' | translate"></h4></div><div class="item-note dark">{{formData.keyringFile}}</div></div></div><div class="col col-50 list item-border-large padding-left padding-right no-padding-xs no-padding-sm no-margin-xs no-margin-sm"><span class="item item-divider hidden-readonly">{{\'SETTINGS.WALLETS_SETTINGS\' | translate}}</span><div class="item item-toggle item-text-wrap dark hidden-readonly"><span class="input-label" ng-class="{\'gray\': !formData.useLocalStorage}" translate>SETTINGS.USE_WALLETS_ENCRYPTION</span><h4 class="gray text-wrap" ng-bind-html="\'SETTINGS.USE_WALLETS_ENCRYPTION_HELP\' | translate"></h4><label class="toggle toggle-royal"><input type="checkbox" ng-model="formData.useLocalStorageEncryption" ng-if="formData.useLocalStorage"> <input type="checkbox" ng-model="formData.useLocalStorage" ng-if="!formData.useLocalStorage" disabled="disabled"><div class="track"><div class="handle"></div></div></label></div><span class="item item-divider hidden-readonly" translate>SETTINGS.HISTORY_SETTINGS</span><div class="item item-toggle item-text-wrap dark hidden-readonly"><div class="input-label" translate>SETTINGS.DISPLAY_UD_HISTORY</div><label class="toggle toggle-royal"><input type="checkbox" ng-model="formData.showUDHistory"><div class="track"><div class="handle"></div></div></label></div><div class="item item-toggle dark hidden-xs hidden-sm hidden-readonly"><div class="input-label" translate>SETTINGS.TX_HISTORY_AUTO_REFRESH</div><h4 class="gray text-wrap" ng-bind-html="\'SETTINGS.TX_HISTORY_AUTO_REFRESH_HELP\' | translate"></h4><label class="toggle toggle-royal"><input type="checkbox" ng-model="formData.walletHistoryAutoRefresh"><div class="track"><div class="handle"></div></div></label></div><cs-extension-point name="history"></cs-extension-point><span class="item item-divider" translate>SETTINGS.NETWORK_SETTINGS</span><div class="item ink item-text-wrap item-icon-right hidden-xs hidden-sm" ng-click="changeNode()"><div class="input-label" translate>SETTINGS.PEER</div><ng-if ng-if="formData.node.temporary"><h4 class="gray text-wrap assertive"><i class="icon ion-alert-circled"></i> <span ng-bind-html="\'SETTINGS.PEER_CHANGED_TEMPORARY\' | translate "></span></h4><div class="item-note assertive text-italic">{{bma.server}}</div></ng-if><div class="badge badge-balanced" ng-if="!formData.node.temporary">{{bma.server}}</div><i class="icon ion-ios-arrow-right"></i></div><ion-item class="ink item-icon-right visible-xs visible-sm" ng-click="changeNode()"><div class="input-label hidden-xs" translate>SETTINGS.PEER</div><div class="input-label visible-xs" translate>SETTINGS.PEER_SHORT</div><ng-if ng-if="formData.node.temporary"><h4 class="gray text-wrap assertive"><b class="ion-alert-circled"></b> <span ng-bind-html="\'SETTINGS.PEER_CHANGED_TEMPORARY\' | translate "></span></h4><div class="badge badge-assertive">{{bma.server}}</div></ng-if><div class="badge badge-balanced" ng-if="!formData.node.temporary">{{bma.server}}</div><i class="icon ion-ios-arrow-right"></i></ion-item><div class="item item-text-wrap item-toggle dark hidden-xs hidden-sm"><div class="input-label" ng-bind-html="\'SETTINGS.EXPERT_MODE\' | translate"></div><h4 class="gray" ng-bind-html="\'SETTINGS.EXPERT_MODE_HELP\' | translate"></h4><label class="toggle toggle-royal"><input type="checkbox" ng-model="formData.expertMode"><div class="track"><div class="handle"></div></div></label></div><label class="item item-input item-select item-text-wrap"><div class="input-label hidden-xs"><span translate>SETTINGS.BLOCK_VALIDITY_WINDOW</span><h4 class="gray text-wrap hidden-xs" ng-bind-html="\'SETTINGS.BLOCK_VALIDITY_WINDOW_HELP\' | translate"></h4></div><div class="input-label visible-xs" translate>SETTINGS.BLOCK_VALIDITY_WINDOW_SHORT</div><select ng-model="formData.blockValidityWindow" ng-options="i as (blockValidityWindowLabels[i].labelKey | translate:blockValidityWindowLabels[i].labelParams ) for i in blockValidityWindows track by i"></select></label><cs-extension-point name="network"></cs-extension-point><span class="item item-divider" ng-if="$root.config.plugins" translate>SETTINGS.PLUGINS_SETTINGS</span><cs-extension-point name="plugins"></cs-extension-point></div></div></ion-content></ion-view>'),e.put("templates/wallet/item_tx.html",'<i class="icon item-image" ng-if="::!tx.avatar" ng-class="::{\'ion-person dark\': tx.uid, \'ion-card dark\': !tx.uid}"></i> <i class="avatar" ng-if="::tx.avatar" style="background-image: url({{::tx.avatar.src}})"></i><div class="row no-padding"><div class="col col-pubkey no-padding"><a class="" ui-sref="app.wot_identity({pubkey:tx.pubkey, uid:tx.uid})" ng-if="::tx.uid">{{::tx.name||tx.uid}} </a><a class="gray" ui-sref="app.wot_identity({pubkey:tx.pubkey, uid:tx.uid})" ng-if="::!tx.uid && tx.pubkey"><i class="ion-key gray"></i> {{::tx.pubkey | formatPubkey}} <span ng-if="::tx.name">- {{::tx.name | truncText:40}}</span></a><p ng-if="::tx.pubkeys" class="pubkeys"><a class="gray" ng-repeat="pubkey in ::tx.pubkeys.slice(0, 4)" ui-sref="app.wot_identity({pubkey:pubkey})"><i class="ion-key gray"></i>&nbsp;{{::pubkey | formatPubkey}} </a><span ng-if="::tx.pubkeys.length &gt; 4">...</span></p><p class="dark visible-xs comment text-italic" ng-if="::tx.comment" title="{{::tx.comment}}"><i class="ion-ios-chatbubble-outline"></i> {{::tx.comment}}<br></p><h4><a ng-if="::!pending" class="gray underline" ui-sref="app.view_block({number: tx.block_number})">{{::tx.time | medianFromNowAndDate: false}} </a><span ng-if="::pending" class="gray">{{::tx.time | medianFromNowAndDate: false}}</span></h4></div><div class="col col-50 col-comment no-padding padding-left hidden-xs" ng-if="::tx.comment"><p class="vertical-center gray text-italic" data-toggle="tooltip" title="{{::tx.comment}}">{{::tx.comment}}</p></div><div class="col col-10 no-padding"><span ng-if="::!tx.lockedOutputs" class="badge item-note" ng-class="{\'badge-calm\': tx.amount > 0, \'badge-white\': tx.amount <= 0}"><span ng-bind-html=":rebind:tx.amount| formatAmount:{currency:$root.currency.name}"></span> </span><a ng-if=":rebind:tx.lockedOutputs" class="badge item-note" ng-class="{\'badge-calm\': tx.amount > 0}" ng-click="showLockedOutputsPopover(tx, $event)"><b class="ion-locked"></b> <span ng-bind-html=":rebind:tx.amount| formatAmount:{currency:$root.currency.name}"></span></a><div class="badge badge-secondary" ng-if="$root.settings.expertMode">(<span ng-bind-html=":rebind:tx.amount| formatAmount:{useRelative: !$root.settings.useRelative, currency:$root.currency.name}"></span>)</div></div></div>'),e.put("templates/wallet/item_ud.html",'<i class="icon item-image ion-arrow-up-c energized"></i><div class="row no-padding"><div class="col no-padding"><span class="energized" translate>COMMON.UNIVERSAL_DIVIDEND</span><h4><a class="gray underline" ui-sref="app.view_block({number: tx.block_number})">{{::tx.time | medianFromNowAndDate}}</a></h4></div><div class="col col-10 no-padding"><span class="badge item-note badge-energized"><span ng-bind-html=":rebind:tx.amount| formatAmount:{currency:$root.currency.name}"></span></span><div class="badge badge-secondary" ng-if="$root.settings.expertMode">(<span ng-bind-html=":rebind:tx.amount| formatAmount:{useRelative: !$root.settings.useRelative, currency:$root.currency.name}"></span>)</div></div></div>'),e.put("templates/wallet/list/item_wallet_light.html",'<div class="item item-avatar item-icon-right item-border item-wallet" ng-click="select($event, wallet)" ng-init="walletData=wallet.data;"><i ng-if="::!walletData.avatar" class="item-image icon" ng-class="::{\'ion-card\': !walletData.isMember, \'ion-person\': walletData.isMember}"></i> <i ng-if="::walletData.avatar" class="item-image avatar" style="background-image: url({{::walletData.avatar.src}})"></i><div class="badge badge-button badge-avatar badge-assertive ion-locked" ng-hide="::wallet.isAuth()"></div><h2><ng-if ng-if="::walletData.localName||walletData.name||walletData.uid">{{::walletData.localName||walletData.name||walletData.uid}}</ng-if><ng-if ng-if="::!walletData.localName && !walletData.name && !walletData.uid">{{::walletData.pubkey|formatPubkey}}</ng-if></h2><h4 class="gray"><span class="positive" ng-if="::walletData.name && walletData.uid"><i class="ion-person"></i> {{::walletData.uid}}&nbsp; </span><b class="ion-key"></b> {{::walletData.pubkey | formatPubkey}} <span ng-if="::!walletData.uid" class="assertive" translate>WOT.NOT_MEMBER_PARENTHESIS</span></h4><div class="badge" ng-if="formData.showBalance" ng-class="{\'badge-calm\': (walletData.balance > 0) }"><span ng-bind-html="walletData.balance|formatAmount:{useRelative: formData.useRelative, currency: currency}"></span></div><i class="icon ion-ios-arrow-right"></i></div>'),e.put("templates/wallet/list/item_wallet.html",'<div class="item item-avatar item-icon-right item-border-large item-wallet ink" id="wallet-{{::wallet.id}}" ng-click="select($event, wallet)" ng-init="walletData=wallet.data;"><i ng-if=":rebind:!walletData.avatar" class="item-image icon" ng-class=":rebind:{\'ion-card\': !walletData.isMember, \'ion-person\': walletData.isMember}"></i> <i ng-if=":rebind:walletData.avatar" class="item-image avatar" style="background-image: url({{::walletData.avatar.src}})"></i><div class="badge badge-button badge-avatar badge-assertive ion-locked" ng-hide=":rebind:wallet.isAuth()"></div><h2><span class="text-editable" ng-click="editWallet($event, wallet)" title="{{\'ACCOUNT.WALLET_LIST.BTN_RENAME\'|translate}}"><ng-if ng-if=":rebind:walletData.localName||walletData.name||walletData.uid" ng-bind-html="::walletData.localName||walletData.name||walletData.uid"></ng-if><ng-if ng-if=":rebind:!walletData.localName && !walletData.name && !walletData.uid">{{::walletData.pubkey|formatPubkey}}</ng-if></span></h2><h4 class="gray"><span class="positive" ng-if="::walletData.name && walletData.uid"><i class="ion-person"></i> {{::walletData.uid}}&nbsp; </span><b class="ion-key"></b> {{::walletData.pubkey | formatPubkey}} <span ng-if="::!walletData.uid" class="assertive" translate>WOT.NOT_MEMBER_PARENTHESIS</span></h4><cs-extension-point name="item-wallet"></cs-extension-point><span class="badge" ng-if=":rebind:formData.showBalance && walletData.sources" ng-class=":rebind:{\'badge-calm\': (walletData.balance > 0) }"><ion-spinner class="ion-spinner-small" ng-if="formData.updatingWalletId==wallet.id" icon="android"></ion-spinner><span ng-bind-html=":rebind:walletData.balance|formatAmount:{useRelative: formData.useRelative, currency: currency}"></span> </span><i class="icon ion-ios-arrow-right"></i></div>'),
e.put("templates/wallet/list/modal_import_file.html",'<ion-modal-view id="transfer" class="modal-full-height"><ion-header-bar class="bar-positive"><button class="button button-clear visible-xs" ng-click="closeModal()" translate>COMMON.BTN_CANCEL</button><h1 class="title" translate>ACCOUNT.WALLET_LIST.IMPORT_MODAL.TITLE</h1></ion-header-bar><ion-content scroll="true" class="padding"><p translate>ACCOUNT.WALLET_LIST.IMPORT_MODAL.HELP</p><div drop-zone="onFileChanged(file)"><div ng-if="!hasContent" file-select="onFileChanged(file)" accept=".csv,.txt"><h2 class="gray" translate>COMMON.CHOOSE_FILE</h2></div><div ng-if="hasContent" class="item item-icon-left item-icon-right stable-bg"><i class="icon ion-document-text gray"></i><div class="item-content row"><div class="col"><h2>{{fileData.name}}</h2><h4 ng-if="fileData.lastModified"><span class="gray" translate>COMMON.FILE.DATE</span> {{fileData.lastModified/1000|formatDate}}</h4><h5><span class="gray" translate>COMMON.FILE.SIZE</span> {{fileData.size|formatInteger}} Ko</h5></div><div class="col padding-left"><h3 ng-if="validatingFile" translate>COMMON.FILE.VALIDATING</h3><h3 ng-if="!validatingFile"><span class="dark animate-show-hide ng-hide" ng-show="isValidFile && content.length" ng-bind-html="\'ACCOUNT.WALLET_LIST.IMPORT_MODAL.WALLET_COUNT\'|translate:{count: content.length}"></span> <span class="assertive animate-show-hide ng-hide" ng-show="isValidFile && !content.length"><br><i class="ion-close-circled assertive"></i> {{\'ACCOUNT.WALLET_LIST.IMPORT_MODAL.NO_NEW_WALLET\' |translate}} </span><span class="assertive animate-show-hide ng-hide" ng-show="!isValidFile"><br><i class="ion-close-circled assertive"></i> {{\'ERROR.INVALID_FILE_FORMAT\' |translate}}</span></h3></div></div><a class="ion-close-round gray pull-right" style="font-size: 10px; position: absolute; top: 6px; right: 6px;" ng-click="removeFile()"></a></div></div><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" ng-click="closeModal()" type="button" translate>COMMON.BTN_CANCEL</button> <button class="button button-positive ink" ng-disabled="loading || !content.length" ng-click="closeModal(content)" translate>COMMON.BTN_IMPORT</button></div></ion-content></ion-modal-view>'),e.put("templates/wallet/list/modal_wallets.html",'<ion-modal-view id="transfer" class="modal-full-height"><ion-header-bar class="bar-positive"><button class="button button-clear" ng-click="closeModal()" translate>COMMON.BTN_CANCEL</button><h1 class="title" translate>ACCOUNT.SELECT_WALLET_MODAL.TITLE</h1></ion-header-bar><ion-content scroll="true"><div class="center padding" ng-if="loading"><ion-spinner icon="android"></ion-spinner></div><div class="center padding gray" ng-if="!loading && !wallets.length && !defaultWallet">{{:locale:\'ACCOUNT.WALLET_LIST.NO_WALLET\'|translate}}</div><ion-list ng-if="!loading" class="{{::motion.ionListClass}}"><ng-include ng-if="defaultWallet" ng-init="wallet = defaultWallet" src="\'templates/wallet/list/item_wallet.html\'"></ng-include><ng-repeat ng-repeat="wallet in wallets track by wallet.id" ng-include="::\'templates/wallet/list/item_wallet_light.html\'"></ng-repeat></ion-list></ion-content></ion-modal-view>'),e.put("templates/wallet/list/popover_actions.html",'<ion-popover-view class="fit has-header"><ion-header-bar><h1 class="title" translate>COMMON.POPOVER_ACTIONS_TITLE</h1></ion-header-bar><ion-content scroll="false"><div class="list item-text-wrap"><button class="item item-icon-left ink" ng-class="{\'gray\': loading || !wallets.length, \'assertive\': !loading && wallets.length}" ng-disabled="loading || !wallets.length" ng-click="selectAndRemoveWallet()"><i class="icon ion-trash-a"></i> {{\'ACCOUNT.WALLET_LIST.BTN_DELETE\' | translate}}</button><div class="item-divider hidden-sm hidden-xs"></div><button class="item item-icon-left ink hidden-sm hidden-xs" ng-class="{\'gray\': loading || !wallets.length}" ng-disabled="loading || !wallets.length" ng-click="downloadAsFile()"><i class="icon ion-android-download"></i> {{\'ACCOUNT.WALLET_LIST.BTN_DOWNLOAD\' | translate}}</button> <button class="item item-icon-left ink hidden-sm hidden-xs" ng-class="{\'gray\': loading}" ng-disabled="loading" ng-click="showImportFileModal()"><i class="icon ion-android-upload"></i> {{\'ACCOUNT.WALLET_LIST.BTN_IMPORT_FILE_DOTS\' | translate}}</button></div></ion-content></ion-popover-view>'),e.put("templates/wallet/list/popover_wallets.html",'<ion-popover-view class="fit popover-wallets popover-light"><ion-header-bar class="stable-bg block"><div class="title" translate>ACCOUNT.SELECT_WALLET_MODAL.TITLE</div><div class="pull-right"><a class="positive" ng-click="showNewWalletModal()" translate>ACCOUNT.WALLET_LIST.BTN_NEW</a></div></ion-header-bar><ion-content scroll="true"><div class="center padding" ng-if="loading"><ion-spinner icon="android"></ion-spinner></div><div class="center padding gray" ng-if="!loading && !wallets.length && !defaultWallet">{{:locale:\'ACCOUNT.WALLET_LIST.NO_WALLET\'|translate}}</div><ion-list ng-if="!loading"><ng-include ng-if="defaultWallet" ng-init="wallet = defaultWallet" src="\'templates/wallet/list/item_wallet_light.html\'"></ng-include><ng-repeat ng-repeat="wallet in :rebind:wallets | filter:filterFn(formData) track by wallet.id" ng-include="::\'templates/wallet/list/item_wallet_light.html\'"></ng-repeat></ion-list></ion-content><ion-footer-bar class="stable-bg block"><div class="pull-right"><a class="positive" ui-sref="app.view_wallets" ng-click="closePopover()" translate>COMMON.NOTIFICATIONS.SHOW_ALL</a></div></ion-footer-bar></ion-popover-view>'),e.put("templates/wallet/list/popup_edit_name.html",'<form name="editForm" ng-submit=""><div class="list" ng-init="setEditForm(editForm)"><label class="item item-input" ng-class="{\'item-input-error\': editForm.$submitted && editForm.name.$invalid}"><input name="name" type="text" placeholder="{{\'ACCOUNT.WALLET_LIST.EDIT_POPOVER.NAME_HELP\' | translate}}" ng-model="formData.name" ng-minlength="3" required></label><div class="form-errors" ng-if="editForm.$submitted && editForm.name.$error" ng-messages="editForm.name.$error"><div class="form-error" ng-message="required"><span translate="ERROR.FIELD_REQUIRED"></span></div><div class="form-error" ng-message="minlength"><span translate="ERROR.FIELD_TOO_SHORT"></span></div></div></div></form>'),e.put("templates/wallet/list/view_wallets.html",'<ion-view left-buttons="leftButtons" class="view-wallet-list"><ion-nav-title></ion-nav-title><ion-nav-buttons side="secondary"><cs-extension-point name="nav-buttons"></cs-extension-point><button class="button button-icon button-clear icon ion-android-more-vertical visible-xs visible-sm" ng-click="showActionsPopover($event)"></button></ion-nav-buttons><ion-content scroll="true" class="padding no-padding-xs no-padding-sm" bind-notifier="{ rebind:formData.useRelative, locale:settings.locale.id}"><ion-refresher pulling-text="{{:locale:\'COMMON.BTN_REFRESH\' | translate}}" on-refresh="doUpdate(true, $event)"></ion-refresher><div class="hidden-xs hidden-sm padding text-center"><button class="button button-stable button-small-padding icon ion-loop ink" ng-click="doUpdate(true, $event)" title="{{:locale:\'COMMON.BTN_REFRESH\' | translate}}"></button><cs-extension-point name="buttons"></cs-extension-point><button class="button button-calm icon-left ink" ng-click="showNewWalletModal()">{{:locale:\'ACCOUNT.WALLET_LIST.BTN_NEW\' | translate}}</button> <button class="button button-stable button-small-padding icon ion-android-more-vertical ink" ng-click="showActionsPopover($event)" title="{{:locale:\'COMMON.BTN_OPTIONS\' | translate}}"></button></div><div class="padding-top padding-xs hidden-xs hidden-sm" style="display: block; height: 60px;"><div class="pull-left"><h4><span translate>ACCOUNT.WALLET_LIST.TITLE</span> <small class="gray" ng-if="formData.balance">(<span translate>ACCOUNT.WALLET_LIST.TOTAL_DOTS</span>&nbsp; <span ng-bind-html="formData.balance|formatAmount:{useRelative: formData.useRelative, currency: currency}"></span>)</small><ion-spinner class="ion-spinner-small" icon="android" ng-if="loading || formData.updatingWalletId"></ion-spinner></h4></div></div><div class="center padding gray" ng-if="!loading && wallets && !wallets.length && !defaultWallet">{{:locale:\'ACCOUNT.WALLET_LIST.NO_WALLET\'|translate}}</div><ion-list class="{{::motion.ionListClass}}"><ng-include ng-if="defaultWallet" ng-init="wallet = defaultWallet" src="\'templates/wallet/list/item_wallet.html\'"></ng-include><ng-include ng-repeat="wallet in wallets track by wallet.id" src="\'templates/wallet/list/item_wallet.html\'"></ng-include></ion-list><div class="center padding visible-xs visible-sm" ng-if="loading"><ion-spinner icon="android"></ion-spinner></div></ion-content><button id="fab-add-wallet" class="button button-fab button-fab-bottom-right button-assertive hidden-md hidden-lg drop ng-hide" ng-show="!loading" ng-click="showNewWalletModal()"><i class="icon ion-plus"></i></button></ion-view>'),e.put("templates/wallet/modal_security.html",'<ion-modal-view class="modal-full-height"><ion-header-bar class="bar-positive"><button class="button button-clear visible-xs" ng-if="!slides.slider.activeIndex" ng-click="closeModal()" translate>COMMON.BTN_CANCEL</button> <button class="button button-icon button-clear icon ion-ios-arrow-back buttons header-item" ng-click="slidePrev()" ng-if="slides.slider.activeIndex"></button><h1 class="title hidden-xs" translate>ACCOUNT.SECURITY.TITLE</h1><button class="button button-clear icon-right visible-xs" ng-if="!isLastSlide && slides.slider.activeIndex > 0" ng-click="doNext()"><span translate>COMMON.BTN_NEXT</span> <i class="icon ion-ios-arrow-right"></i></button> <button class="button button-positive button-icon button-clear icon ion-android-done visible-xs" ng-click="doNext()" ng-if="isLastSlide && option === \'saveID\'"></button></ion-header-bar><ion-slides options="slides.options" slider="slides.slider"><ion-slide-page><ion-content class="has-header padding"><div class="list"><div class="item item-complex card stable-bg item-icon-left item-icon-right ink" ng-click="selectOption(\'recoverID\')" ng-if="!login"><div class="item-content item-text-wrap"><i class="item-image dark icon ion-person"></i> <b class="ion-ios-undo icon-secondary dark" style="top: -8px; left: 39px; font-size: 12px;"></b><h2 translate>ACCOUNT.SECURITY.RECOVER_ID</h2><h4 class="gray" translate>ACCOUNT.SECURITY.RECOVER_ID_HELP</h4><ng-if ng-if="::$root.config.demo" ng-include="::\'templates/common/note_feature_not_available.html\'"><i class="icon dark ion-ios-arrow-right" ng-if="::!$root.config.demo"></i></ng-if></div></div><div class="item item-complex card stable-bg item-icon-left item-icon-right ink" ng-click="selectOption(\'revocation\', true)" ng-if="!login"><div class="item-content item-text-wrap"><i class="item-image dark icon ion-person"></i> <b class="ion-close icon-secondary dark" style="top: -8px; left: 39px; font-size: 12px;"></b><h2 translate>ACCOUNT.SECURITY.REVOCATION_WITH_FILE</h2><h4 class="gray" translate>ACCOUNT.SECURITY.REVOCATION_WITH_FILE_DESCRIPTION</h4><i class="icon dark ion-ios-arrow-right"></i></div></div><div class="item item-complex card stable-bg item-icon-left item-icon-right ink hidden-xs" ng-click="selectOption(\'saveID\')" ng-if="login && !$root.device.enable"><div class="item-content item-text-wrap"><i class="item-image dark icon ion-person"></i> <b class="ion-ios-redo icon-secondary dark" style="top: -8px; left: 39px; font-size: 12px;"></b> <b class="ion-locked icon-secondary dark" style="top: 0px; left: 40px; font-size: 8px;"></b><h2 translate>ACCOUNT.SECURITY.SAVE_ID</h2><h4 class="gray" translate>ACCOUNT.SECURITY.SAVE_ID_HELP</h4><ng-if ng-if="::$root.config.demo" ng-include="::\'templates/common/note_feature_not_available.html\'"><i class="icon dark ion-ios-arrow-right"></i></ng-if></div></div><div class="item item-complex card stable-bg item-icon-left item-icon-right ink hidden-xs" ng-click="selectOption(\'generateKeyfile\')" ng-if="login && !$root.device.enable"><div class="item-content item-text-wrap"><i class="item-image dark icon ion-document-text"></i> <b class="ion-key icon-secondary dark" style="top: -8px; left: 42px; font-size: 12px;"></b><h2 translate>ACCOUNT.SECURITY.GENERATE_KEYFILE</h2><h4 class="gray" translate>ACCOUNT.SECURITY.GENERATE_KEYFILE_HELP</h4><ng-if ng-if="::$root.config.demo" ng-include="::\'templates/common/note_feature_not_available.html\'"><i class="icon dark ion-ios-arrow-right"></i></ng-if></div></div><div class="item item-complex card stable-bg item-icon-left item-icon-right ink hidden-xs hidden-sm" ng-click="downloadRevokeFile()" ng-if="canRevoke && !$root.device.enable"><div class="item-content item-text-wrap"><i class="item-image dark icon ion-person"></i> <b class="ion-ios-redo icon-secondary dark" style="top: -8px; left: 39px; font-size: 12px;"></b> <b class="ion-close icon-secondary dark" style="top: 0px; left: 40px; font-size: 8px;"></b><h2 translate>ACCOUNT.SECURITY.DOWNLOAD_REVOKE</h2><h4 class="gray" translate>ACCOUNT.SECURITY.DOWNLOAD_REVOKE_HELP</h4><ng-if ng-if="::$root.config.demo" ng-include="::\'templates/common/note_feature_not_available.html\'"><i class="icon dark ion-android-archive"></i></ng-if></div></div><div class="item item-complex card stable-bg item-icon-left item-icon-right ink" ng-click="self()" ng-if="needSelf"><div class="item-content item-text-wrap"><i class="item-image icon ion-person dark"></i> <b class="ion-flag icon-secondary dark" style="top: -8px; left: 39px; font-size: 12px;"></b><h2 translate>ACCOUNT.SECURITY.SEND_IDENTITY</h2><h4 class="gray" ng-bind-html="::\'ACCOUNT.SECURITY.SEND_IDENTITY_HELP\' | translate"></h4><ng-if ng-if="::$root.config.demo" ng-include="::\'templates/common/note_feature_not_available.html\'"></ng-if></div></div><div class="item item-complex card stable-bg item-icon-left item-icon-right ink" ng-click="membershipIn()" ng-if="needMembership"><div class="item-content item-text-wrap"><i class="item-image icon ion-person dark"></i> <b class="ion-plus icon-secondary dark" style="top: -8px; left: 39px; font-size: 12px;"></b><h2 translate>ACCOUNT.SECURITY.MEMBERSHIP_IN</h2><h4 class="gray" ng-bind-html="::\'ACCOUNT.SECURITY.MEMBERSHIP_IN_HELP\' | translate"></h4><ng-if ng-if="::$root.config.demo" ng-include="::\'templates/common/note_feature_not_available.html\'"></ng-if></div></div><div class="item item-complex card stable-bg item-icon-left item-icon-right ink" ng-click="revokeWalletIdentity()" ng-if="canRevoke"><div class="item-content item-text-wrap"><i class="item-image icon ion-person assertive-900"></i> <b class="ion-close icon-secondary assertive-900" style="top: -8px; left: 39px; font-size: 12px;"></b><h2 translate>ACCOUNT.SECURITY.REVOCATION_WALLET</h2><h4 class="gray" translate>ACCOUNT.SECURITY.REVOCATION_WALLET_HELP</h4><ng-if ng-if="::$root.config.demo" ng-include="::\'templates/common/note_feature_not_available.html\'"></ng-if></div></div></div><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" ng-click="closeModal()" type="button" translate>COMMON.BTN_CANCEL</button></div></ion-content></ion-slide-page><ion-slide-page ng-if="option == \'revocation\'"><ng-include src="::\'templates/wallet/slides/slides_revocation_file.html\'"></ng-include></ion-slide-page><ion-slide-page ng-if="login && option == \'saveID\'"><ng-include src="::\'templates/wallet/slides/slides_saveID_1.html\'"></ng-include></ion-slide-page><ion-slide-page ng-if="login && option == \'saveID\'"><ng-include src="::\'templates/wallet/slides/slides_saveID_2.html\'"></ng-include></ion-slide-page><ion-slide-page ng-if="option == \'recoverID\'"><ng-include src="::\'templates/wallet/slides/slides_recoverID_1.html\'"></ng-include></ion-slide-page><ion-slide-page ng-if="option == \'recoverID\'"><ng-include src="::\'templates/wallet/slides/slides_recoverID_2.html\'"></ng-include></ion-slide-page><ion-slide-page ng-if="option == \'recoverID\'"><ng-include src="::\'templates/wallet/slides/slides_recoverID_3.html\'"></ng-include></ion-slide-page><ion-slide-page ng-if="login && option == \'generateKeyfile\'"><ng-include src="::\'templates/wallet/slides/slides_generate_keyfile.html\'"></ng-include></ion-slide-page></ion-slides></ion-modal-view>'),e.put("templates/wallet/modal_transfer.html",'<ion-modal-view id="transfer" class="modal-full-height modal-transfer"><ion-header-bar class="bar-positive"><button class="button button-clear visible-xs" ng-click="closeModal()" translate>COMMON.BTN_CANCEL</button><h1 class="title" translate>TRANSFER.MODAL.TITLE</h1><button class="button button-icon button-clear icon ion-android-send visible-xs" ng-click="doTransfer()"></button></ion-header-bar><ion-content><ng-include src="::\'templates/wallet/transfer_form.html\'"></ng-include></ion-content><ion-digit-keyboard settings="digitKeyboardSettings" ng-if="digitKeyboardVisible"></ion-digit-keyboard></ion-modal-view>'),e.put("templates/wallet/new_transfer.html",'<ion-view left-buttons="leftButtons" id="transfer"><ion-nav-title><span class="visible-xs visible-sm" translate>TRANSFER.TITLE</span></ion-nav-title><ion-nav-buttons side="secondary"><button class="button button-icon button-clear icon ion-android-send visible-xs" ng-click="doTransfer()"></button></ion-nav-buttons><ion-content scroll="true"><div class="row no-padding-xs"><div class="col col-20 hidden-xs hidden-sm">&nbsp;</div><div class="col no-padding-xs"><h2 class="hidden-xs hidden-sm" ng-if="formData">{{(formData.all ? \'TRANSFER.SUB_TITLE_ALL\' : \'TRANSFER.SUB_TITLE\')|translate}}</h2><h4 class="hidden-xs hidden-sm">&nbsp;</h4><ng-include src="::\'templates/wallet/transfer_form.html\'"></ng-include></div><div class="col col-20 hidden-xs hidden-sm">&nbsp;</div></div></ion-content><ion-digit-keyboard settings="digitKeyboardSettings" ng-if="digitKeyboardVisible"></ion-digit-keyboard></ion-view>'),e.put("templates/wallet/popover_actions.html",'<ion-popover-view class="fit has-header popover-wallet-actions"><ion-header-bar><h1 class="title" translate>COMMON.POPOVER_ACTIONS_TITLE</h1></ion-header-bar><ion-content scroll="false"><div class="list item-text-wrap"><a class="item item-icon-left ink visible-xs visible-sm" ng-click="showSharePopover($event)"><i class="icon ion-android-share-alt"></i> {{\'COMMON.BTN_SHARE\' | translate}} </a><a class="item item-icon-left ink" ng-if="walletData.requirements.alternatives" ng-click="showSelectIdentitiesModal()"><i class="icon ion-person"></i> <b class="icon-secondary ion-loop" style="margin-top: 4px; left: 15px;"></b> {{\'ACCOUNT.BTN_SELECT_ALTERNATIVES_IDENTITIES\' | translate}} </a><a class="item item-icon-left ink visible-xs visible-sm" ng-if="!walletData.requirements.needSelf && walletData.requirements.needRenew" ng-click="renewMembership()"><i class="icon ion-loop"></i> {{\'ACCOUNT.BTN_MEMBERSHIP_RENEW_DOTS\' | translate}} </a><a class="item item-icon-left ink hidden-xs hidden-sm" ng-if="!walletData.requirements.needSelf && !walletData.requirements.hasBadSelfBlock && !walletData.requirements.revoked" ng-class="{\'gray\':!walletData.requirements.needRenew}" ng-click="renewMembership()"><i class="icon ion-loop"></i> {{\'ACCOUNT.BTN_MEMBERSHIP_RENEW_DOTS\' | translate}} </a><a class="item item-icon-left ink hidden-xs hidden-sm" ng-if="walletData.requirements.hasBadSelfBlock" ng-click="fixMembership()"><i class="icon ion-loop"></i> {{\'ACCOUNT.BTN_FIX_MEMBERSHIP\' | translate}} </a><a class="item item-icon-left assertive ink" ng-if="walletData.requirements.canMembershipOut" ng-click="membershipOut()"><i class="icon ion-log-out"></i> {{\'ACCOUNT.BTN_MEMBERSHIP_OUT_DOTS\' | translate}} </a><a class="item item-icon-left ink" ng-click="showSecurityModal()"><i class="icon ion-locked"></i> <span ng-bind-html="\'ACCOUNT.BTN_SECURITY_DOTS\' | translate"></span></a><div class="item-divider hidden-sm hidden-xs"></div><a class="item item-icon-left ink hidden-sm hidden-xs" ng-if="isDefaultWallet" ng-click="startWalletTour()"><i class="icon ion-easel"></i> {{\'COMMON.BTN_HELP_TOUR_SCREEN\' | translate}}</a></div></ion-content></ion-popover-view>'),e.put("templates/wallet/popover_unit.html",'<ion-popover-view class="popover-unit"><ion-content scroll="false"><div class="list"><a class="item item-icon-left" ng-class="{ \'selected\': !formData.useRelative}" ng-click="closePopover(false)"><i class="icon" ng-class="{ \'ion-ios-checkmark-empty\': !formData.useRelative}"></i> <i ng-bind-html="$root.currency.name | currencySymbol:false"></i> </a><a class="item item-icon-left" ng-class="{ \'selected\': formData.useRelative}" ng-click="closePopover(true)"><i class="icon" ng-class="{ \'ion-ios-checkmark-empty\': formData.useRelative}"></i> <i ng-bind-html="$root.currency.name | currencySymbol:true"></i></a></div></ion-content></ion-popover-view>'),e.put("templates/wallet/popup_register.html",'<form name="registerForm" ng-submit=""><div class="list" ng-init="setRegisterForm(registerForm)"><label class="item item-input" ng-class="{\'item-input-error\': registerForm.$submitted && registerForm.pseudo.$invalid}"><input name="pseudo" type="text" placeholder="{{\'ACCOUNT.NEW.PSEUDO_HELP\' | translate}}" ng-model="formData.newUid" ng-minlength="3" required></label><div class="form-errors" ng-if="registerForm.$submitted && registerForm.pseudo.$error" ng-messages="registerForm.pseudo.$error"><div class="form-error" ng-message="required"><span translate="ERROR.FIELD_REQUIRED"></span></div><div class="form-error" ng-message="minlength"><span translate="ERROR.FIELD_TOO_SHORT"></span></div></div></div></form>'),e.put("templates/wallet/slides/slides_generate_keyfile.html",'<ion-content class="has-header padding"><h3 translate>ACCOUNT.SECURITY.GENERATE_KEYFILE</h3><div class="list"><div class="item item-complex card stable-bg item-icon-left item-icon-right ink" ng-click="downloadKeyFile(\'PubSec\')"><div class="item-content item-text-wrap"><i class="item-image dark icon ion-document-text"></i> <b class="ion-ios-redo icon-secondary dark" style="top: -8px; left: 42px; font-size: 12px;"></b><h2 translate>ACCOUNT.SECURITY.KEYFILE.PUBSEC_FORMAT</h2><h4 class="gray" translate>ACCOUNT.SECURITY.KEYFILE.PUBSEC_FORMAT_HELP</h4><ng-if ng-if="::$root.config.demo" ng-include="::\'templates/common/note_feature_not_available.html\'"><i class="icon dark ion-ios-arrow-right"></i></ng-if></div></div><div class="item item-complex card stable-bg item-icon-left item-icon-right ink" ng-click="downloadKeyFile(\'WIF\')"><div class="item-content item-text-wrap"><i class="item-image dark icon ion-document-text"></i> <b class="ion-ios-redo icon-secondary dark" style="top: -8px; left: 42px; font-size: 12px;"></b><h2 translate>ACCOUNT.SECURITY.KEYFILE.WIF_FORMAT</h2><h4 class="gray" translate>ACCOUNT.SECURITY.KEYFILE.WIF_FORMAT_HELP</h4><ng-if ng-if="::$root.config.demo" ng-include="::\'templates/common/note_feature_not_available.html\'"><i class="icon dark ion-ios-arrow-right"></i></ng-if></div></div><div class="item item-complex card stable-bg item-icon-left item-icon-right ink" ng-click="downloadKeyFile(\'EWIF\')"><div class="item-content item-text-wrap"><i class="item-image dark icon ion-document-text"></i> <b class="ion-ios-redo icon-secondary dark" style="top: -8px; left: 42px; font-size: 12px;"></b> <b class="ion-locked icon-secondary dark" style="top: 0px; left: 43px; font-size: 8px;"></b><h2 translate>ACCOUNT.SECURITY.KEYFILE.EWIF_FORMAT</h2><h4 class="gray" translate>ACCOUNT.SECURITY.KEYFILE.EWIF_FORMAT_HELP</h4><ng-if ng-if="::$root.config.demo" ng-include="::\'templates/common/note_feature_not_available.html\'"><i class="icon dark ion-ios-arrow-right"></i></ng-if></div></div></div></ion-content>'),e.put("templates/wallet/slides/slides_recoverID_1.html",'<ion-content class="has-header padding"><p translate>ACCOUNT.SECURITY.RECOVER_ID_SELECT_FILE</p><div drop-zone="onFileChanged(file)"><div ng-if="!hasContent" file-select="onFileChanged(file)" accept=".txt"><h2 class="gray" translate>COMMON.CHOOSE_FILE</h2></div><div ng-if="hasContent" class="item item-icon-left item-icon-right"><i class="icon ion-document-text dark"></i><div class="item-content row"><div class="col"><span>{{fileData.name}}</span><br><small>{{fileData.size}} Ko</small></div><div class="col-10"><b ng-class="{\'ion-close-circled assertive\': !isValidFile}" style="font-size: 28px; position: relative; top: 6px;"></b></div></div><a class="ion-close-round gray pull-right" style="font-size: 10px; position: absolute; top: 6px; right: 6px;" ng-click="restore()"></a></div></div><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" ng-click="closeModal()" type="button" translate>COMMON.BTN_CANCEL</button> <button class="button button-calm icon-right ion-chevron-right ink" ng-click="doNext()" translate>COMMON.BTN_NEXT <i class="icon ion-arrow-right-a"></i></button></div></ion-content>'),e.put("templates/wallet/slides/slides_recoverID_2.html",'<ion-content class="has-header padding"><h3 translate>ACCOUNT.SECURITY.RECOVER_ID</h3><form name="recoverForm" novalidate ng-submit="recoverId()"><div class="list" ng-init="setForm(recoverForm, \'recoverForm\')"><ng-repeat ng-repeat="question in recover.questions "><label class="item item-input {{smallscreen ? \'item-stacked-label\' : \'item-floating-label\'}}" ng-class="{\'item-input-error\': recoverForm.$submitted && recoverForm[\'question{{$index}}\'].$invalid}"><span class="input-label" style="{{smallscreen ? \'white-space: normal\' : \'\'}}">{{question.value }}</span> <input type="text" autocomplete="off" name="question{{$index}}" placeholder="{{smallscreen ? \'\' : question.value }}" ng-model="question.answer" required></label><div class="form-errors" ng-show="recoverForm.$submitted && recoverForm[\'question{{$index}}\'].$error" ng-messages="recoverForm[\'question{{$index}}\'].$error"><div class="form-error" ng-message="required"><span translate="ERROR.FIELD_REQUIRED"></span></div></div></ng-repeat><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" ng-click="closeModal()" type="button" translate>COMMON.BTN_CANCEL</button> <button class="button button-clear button-dark" ng-click="restore()" type="button" translate>ACCOUNT.SECURITY.BTN_CLEAN</button> <button class="button button-calm icon-right ion-chevron-right ink" type="submit" translate>COMMON.BTN_NEXT <i class="icon ion-arrow-right-a"></i></button></div></div></form></ion-content>'),e.put("templates/wallet/slides/slides_recoverID_3.html",'<ion-content class="has-header padding"><h3 translate>ACCOUNT.SECURITY.RECOVER_ID</h3><div class="item item-input"><span class="input-label">{{\'LOGIN.SALT\' | translate}} :</span> <span>{{recover.salt}}</span></div><div class="item item-input"><span class="input-label">{{\'LOGIN.PASSWORD\' | translate}} :</span> <span>{{recover.pwd}}</span></div><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" ng-click="closeModal()" type="button" translate>COMMON.BTN_CLOSE</button></div></ion-content>'),e.put("templates/wallet/slides/slides_revocation_file.html",'<ion-content class="has-header padding"><p translate>ACCOUNT.SECURITY.REVOCATION_WITH_FILE_HELP</p><div drop-zone="onFileChanged(file)"><div ng-if="!hasContent" file-select="onFileChanged(file)" accept=".txt"><h2 class="gray" translate>COMMON.CHOOSE_FILE</h2></div><div ng-if="hasContent" class="item item-icon-left item-icon-right"><i class="icon ion-document-text dark"></i><div class="row"><div class="col"><h2>{{fileData.name}}</h2><h4 ng-if="fileData.lastModified"><span class="gray" translate>COMMON.FILE.DATE</span> {{fileData.lastModified/1000|formatDate}}</h4><h5><span class="gray" translate>COMMON.FILE.SIZE</span> {{fileData.size|formatInteger}} Ko</h5></div><div class="col padding-left"><h3 class="assertive animate-show-hide ng-hide" ng-show="!isValidFile"><br><i class="ion-close-circled assertive"></i> {{revocationError|translate}}</h3></div></div><a class="ion-close-round gray pull-right" style="font-size: 10px; position: absolute; top: 6px; right: 6px;" ng-click="restore()"></a></div></div><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" ng-click="closeModal()" type="button" translate>COMMON.BTN_CANCEL</button> <button class="button button-calm icon-right ion-chevron-right ink" ng-click="revokeWithFile()" translate>COMMON.BTN_NEXT <i class="icon ion-arrow-right-a"></i></button></div></ion-content>'),e.put("templates/wallet/slides/slides_saveID_1.html",'<ion-content class="has-header padding"><h3 translate>ACCOUNT.SECURITY.SAVE_ID</h3><label class="item item-input item-select"><div class="input-label" translate>ACCOUNT.SECURITY.LEVEL</div><select ng-model="formData.level"><option value="2" ng-bind-html="\'ACCOUNT.SECURITY.LOW_LEVEL\' | translate"></option><option value="4" translate>ACCOUNT.SECURITY.MEDIUM_LEVEL</option><option value="6" translate>ACCOUNT.SECURITY.STRONG_LEVEL</option></select></label><div class="padding-top" translate="ACCOUNT.SECURITY.HELP_LEVEL" translate-values="{nb: {{formData.level}}}"></div><form name="questionsForm" novalidate ng-submit="doNext(\'questionsForm\')"><div class="list" ng-init="setForm(questionsForm, \'questionsForm\')"><ion-checkbox ng-repeat="question in formData.questions" ng-model="question.checked" ng-required="isRequired()"><span style="white-space: normal;">{{question.value | translate}}</span></ion-checkbox><div class="item item-icon-right no-padding-top"><a class="dark"><i class="icon ion-android-add" ng-click="addQuestion()"></i></a><div class="list list-inset"><label class="item item-input"><input type="text" autocomplete="off" placeholder="{{\'ACCOUNT.SECURITY.ADD_QUESTION\' | translate}}" ng-model="formData.addQuestion"></label></div></div></div><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" ng-click="closeModal()" type="button" translate>COMMON.BTN_CANCEL</button> <button class="button button-clear button-dark" ng-click="restore()" type="button" translate>ACCOUNT.SECURITY.BTN_RESET</button> <button class="button button-calm icon-right ion-chevron-right ink" ng-disabled="questionsForm.$invalid" type="submit" translate>COMMON.BTN_NEXT <i class="icon ion-arrow-right-a"></i></button></div></form></ion-content>'),e.put("templates/wallet/slides/slides_saveID_2.html",'<ion-content class="has-header padding"><h3 translate>ACCOUNT.SECURITY.SAVE_ID</h3><form name="answersForm" novalidate ng-submit="doNext(\'answersForm\')"><div class="list" ng-init="setForm(answersForm, \'answersForm\')"><ng-repeat ng-repeat="question in formData.questions |filter:true:checked"><label class="item item-input item-text-wrap {{smallscreen ? \'item-stacked-label\' : \'item-floating-label\'}}" ng-class="{\'item-input-error\': answersForm.$submitted && answersForm[\'question{{$index}}\'].$invalid}"><span class="input-label" style="width: 100%; max-width: inherit;">{{question.value | translate}}</span> <input type="text" autocomplete="off" name="question{{$index}}" placeholder="{{smallscreen ? \'\' : question.value | translate}}" ng-model="question.answer" required></label><div class="form-errors" ng-show="answersForm.$submitted && answersForm[\'question{{$index}}\'].$error" ng-messages="answersForm[\'question{{$index}}\'].$error"><div class="form-error" ng-message="required"><span translate="ERROR.FIELD_REQUIRED"></span></div></div></ng-repeat><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" ng-click="closeModal()" type="button" translate>COMMON.BTN_CANCEL</button> <button class="button button-clear button-dark" ng-click="restore()" type="button" translate>ACCOUNT.SECURITY.BTN_CLEAN</button> <button class="button button-positive ink" type="submit" translate>COMMON.BTN_CONTINUE <i class="icon ion-android-archive"></i></button></div></div></form></ion-content>'),e.put("templates/wallet/transfer_form.html",'<form name="transferForm" novalidate="" ng-submit="doTransfer()"><div class="list no-padding-xs" ng-init="setForm(transferForm)"><ion-item class="item-icon-right gray ink" ng-class="{\'item-input-error\': form.$submitted && !formData.destPub}" tabindex="1" ng-click="showWotLookupModal()"><span class="gray" translate="">TRANSFER.TO</span> <span class="badge badge-royal animate-fade-in animate-show-hide ng-hide" ng-show="destUid"><i class="ion-person"></i> {{destUid}} </span>&nbsp; <span class="badge badge-royal" ng-show="!destUid && formData.destPub"><i class="ion-key"></i> {{formData.destPub | formatPubkey}} </span><i class="gray icon ion-ios-arrow-right"></i></ion-item><div class="form-errors" ng-if="form.$submitted && !formData.destPub"><div class="form-error"><span translate="ERROR.FIELD_REQUIRED"></span></div></div><ion-item class="item-text-wrap ink" ng-class="{\'item-icon-right\': enableSelectWallet}" tabindex="2" ng-click="showSelectWalletModal()"><span class="gray" translate="">TRANSFER.FROM</span> <span class="badge item-note" ng-if="loading"><ion-spinner class="ion-spinner-small" icon="android"></ion-spinner></span><span class="badge animate-fade-in animate-show-hide ng-hide" ng-show="!loading" ng-class="{\'badge-assertive\': (convertedBalance <= 0 || form.amount.$error.max), \'badge-balanced\': (convertedBalance > 0 && (!form.amount.$error.max)) }"><span ng-if="walletData.pubkey && !walletData.isMember"><i class="ion-key"></i> {{walletData.pubkey| formatPubkey}}&nbsp;&nbsp; </span><span ng-if="walletData.isMember"><i class="ion-person"></i> {{walletData.name||walletData.uid}}&nbsp;&nbsp; </span><span ng-bind-html="walletData.balance|formatAmount:{useRelative: formData.useRelative, currency:currency}"></span> </span><i class="gray icon ion-ios-arrow-right" ng-if="enableSelectWallet"></i></ion-item><div class="form-errors ng-hide" ng-show="!loading && walletData.pubkey && walletData.balance <= 0"><div class="form-error"><span translate="ERROR.NOT_ENOUGH_CREDIT"></span></div></div><ion-item class="item-input item-floating-label item-button-right" ng-class="{\'item-input-error\': form.$submitted && form.amount.$invalid}"><div class="input-label"><span translate="">TRANSFER.AMOUNT</span> (<span ng-bind-html="$root.currency.name | currencySymbol:formData.useRelative"></span>)</div><input type="text" tabindex="3" autocomplete="off" class="hidden-device" name="amount" placeholder="{{::\'TRANSFER.AMOUNT_HELP\' | translate}}" ng-model="formData.amount" required number-float=""> <a class="button button-clear button-stable dark ink" tabindex="-1" style="z-index:110; padding: 0px 16px;" ng-click="showUnitPopover($event)"><span ng-bind-html="$root.currency.name | currencySymbol:formData.useRelative"></span> &nbsp;<b class="ion-arrow-down-b" style="font-size: 12pt;"></b></a></ion-item><div class="form-errors" ng-show="form.$submitted && form.amount.$error" ng-messages="form.amount.$error"><div class="form-error" ng-message="required"><span translate="ERROR.FIELD_REQUIRED"></span></div><div class="form-error" ng-message="numberFloat"><span translate="ERROR.FIELD_NOT_NUMBER"></span></div><div class="form-error" ng-message="numberInt"><span translate="ERROR.FIELD_NOT_INT"></span></div><div class="form-error" ng-message="min"><span translate="ERROR.FIELD_MIN" translate-values="{min: minAmount}"></span></div><div class="form-error" ng-message="max"><span translate="ERROR.NOT_ENOUGH_CREDIT"></span></div></div><a class="item item-icon-right gray ink" ng-class="{\'item-input-error\': form.$submitted && !formData.destPub}" ng-click="showWotLookupModal(\'restPub\')" tabindex="5" ng-if="formData.all && formData.restAmount"><span class="gray"><i translate="">TRANSFER.REST</i><ng-if ng-if="formData.restAmount">(<i ng-bind-html="formData.restAmount|formatAmount:{useRelative: formData.useRelative, currency:currency}"></i>)</ng-if><i translate="">TRANSFER.REST_TO</i> </span><span class="badge badge-royal animate-fade-in animate-show-hide ng-hide" ng-show="restUid"><i class="ion-person"></i> {{restUid}} </span>&nbsp; <span class="badge badge-royal" ng-show="!restUid && formData.restPub"><i class="ion-key"></i> {{formData.restPub | formatPubkey}} </span><i class="gray icon ion-ios-arrow-right"></i></a><div class="form-errors" ng-if="form.$submitted && formData.all && !formData.restPub && formData.restAmount &gt; 0"><div class="form-error"><span translate="ERROR.FIELD_REQUIRED"></span></div></div><div class="pull-right visible-xs visible-sm" ng-if="!formData.useComment"><a class="button button-text button-small ink" tabindex="-1" ng-click="addComment()"><i class="icon ion-plus"></i> <span translate="">TRANSFER.BTN_ADD_COMMENT</span></a></div><label class="item item-input item-floating-label hidden-xs hidden-sm" ng-class="{\'item-input-error\': form.$submitted && form.comment.$invalid}"><span class="input-label">{{\'TRANSFER.COMMENT\' | translate}}</span> <input type="text" placeholder="{{\'TRANSFER.COMMENT_HELP\' | translate}}" name="comment" tabindex="6" autocomplete="off" ng-model="formData.comment" ng-maxlength="255" ng-pattern="commentPattern"></label> <label class="item item-input item-floating-label visible-xs visible-sm" ng-if="formData.useComment" ng-class="{\'item-input-error\': form.$submitted && form.comment.$invalid}"><span class="input-label">{{\'TRANSFER.COMMENT\' | translate}}</span> <input type="text" placeholder="{{\'TRANSFER.COMMENT_HELP\' | translate}}" id="{{commentInputId}}" tabindex="7" name="comment" autocomplete="off" ng-model="formData.comment" ng-model-options="{ debounce: 650 }" ng-maxlength="255" ng-pattern="commentPattern" ng-focus="hideDigitKeyboard()"></label><div class="form-errors" ng-show="form.comment.$error" ng-messages="form.comment.$error"><div class="form-error" ng-message="maxlength"><span translate="ERROR.FIELD_TOO_LONG"></span></div><div class="form-error" ng-message="pattern"><span translate="ERROR.FIELD_ACCENT"></span></div></div><div class="item item-icon-left item-text-wrap item-no-border hidden-xs hidden-sm"><div class="animate-fade-in animate-show-hide ng-hide" ng-show="formData.comment && formData.comment.length || form.comment.$invalid"><i class="icon ion-android-alert positive"></i><h4 class="positive" translate="">TRANSFER.WARN_COMMENT_IS_PUBLIC</h4></div></div><div class="item item-icon-left item-text-wrap item-no-border visible-xs visible-sm" ng-if="formData.useComment"><i class="icon ion-android-alert positive"></i><h4 class="positive" translate="">TRANSFER.WARN_COMMENT_IS_PUBLIC</h4></div></div><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" tabindex="-1" ng-click="cancel()" type="button" translate="">COMMON.BTN_CANCEL</button> <button class="button ink" tabindex="8" ng-class="{\'button-assertive\': formData.all, \'button-positive\': !formData.all}" ng-disabled="loading" type="submit" translate="">TRANSFER.BTN_SEND</button></div></form>'),e.put("templates/wallet/tx_locked_outputs_popover.html",'<ion-popover-view class="fit popover-locked-outputs"><ion-header-bar><h1 class="title" translate>ACCOUNT.LOCKED_OUTPUTS_POPOVER.TITLE</h1></ion-header-bar><ion-content scroll="true"><div ng-if="popoverData.lockedOuputs.length == 1" class="item item-text-wrap no-border"><h4 class="positive" translate>ACCOUNT.LOCKED_OUTPUTS_POPOVER.DESCRIPTION</h4></div><div ng-if="popoverData.lockedOuputs.length > 1" class="item item-text-wrap no-border"><h4 class="positive" translate>ACCOUNT.LOCKED_OUTPUTS_POPOVER.DESCRIPTION_MANY</h4></div><div ng-repeat="output in popoverData.lockedOuputs track by $index" class="item"><h2 class="gray" ng-if="popoverData.lockedOuputs.length > 1" translate>ACCOUNT.LOCKED_OUTPUTS_POPOVER.LOCKED_AMOUNT</h2><div ng-if="popoverData.lockedOuputs.length > 1" class="badge item-note" ng-class="{\'badge-balanced\': output.amount > 0}"><i class="icon ion-locked"></i> <span ng-bind-html="::output.amount| formatAmount"></span> <span ng-bind-html="::unit"></span></div><div ng-repeat="condition in output.unlockConditions track by $index" class="row" ng-class="::{\'padding-top\': !$index && popoverData.lockedOuputs.length > 1}" ng-style="::condition.style"><span class="gray" ng-if="::condition.operator">{{::\'BLOCKCHAIN.VIEW.TX_OUTPUT_OPERATOR.\'+condition.operator|translate}}&nbsp;</span><div ng-if="::condition.type==\'SIG\'"><i class="icon ion-key dark"></i> <span class="dark" ng-bind-html="::\'BLOCKCHAIN.VIEW.TX_OUTPUT_FUNCTION.SIG\' | translate"></span> <a ng-click="goState(\'app.wot_identity\', {pubkey:condition.value})" style="text-decoration: none;" class="positive">{{condition.value|formatPubkey}}</a></div><div ng-if="::condition.type==\'XHX\'"><i class="icon ion-lock-combination dark"></i> <span class="dark" ng-bind-html="::\'BLOCKCHAIN.VIEW.TX_OUTPUT_FUNCTION.XHX\' | translate"></span> <a copy-on-click="{{::condition.value}}" class="positive">{{::condition.value|formatPubkey}}...</a></div><div ng-if="condition.type==\'CSV\'"><i class="icon ion-clock dark"></i> <span class="dark" ng-bind-html="::\'BLOCKCHAIN.VIEW.TX_OUTPUT_FUNCTION.CSV\' | translate"></span> {{::condition.value|formatDuration}}</div><div ng-if="condition.type==\'CLTV\'"><i class="icon ion-clock dark"></i> <span class="dark" ng-bind-html="::\'BLOCKCHAIN.VIEW.TX_OUTPUT_FUNCTION.CLTV\' | translate"></span> {{::condition.value|medianDate}}</div></div></div></ion-content></ion-popover-view>'),e.put("templates/wallet/view_wallet_tx_error.html",'<ion-view left-buttons="leftButtons" class="view-wallet-tx-error"><ion-nav-title></ion-nav-title><ion-nav-buttons side="secondary"><cs-extension-point name="nav-buttons"></cs-extension-point></ion-nav-buttons><ion-content scroll="true" class="refresher-top-bg" bind-notifier="{ rebind:settings.useRelative, locale:settings.locale.id}"><ion-refresher pulling-text="{{\'COMMON.BTN_REFRESH\' | translate}}" on-refresh="doUpdate(true)"></ion-refresher><div class="hidden-xs hidden-sm padding text-center"><button class="button button-stable button-small-padding icon ion-loop ink" ng-click="doUpdate()" title="{{\'COMMON.BTN_REFRESH\' | translate}}"></button></div><div class="row no-padding"><div class="col col-20 hidden-xs hidden-sm">&nbsp;</div><div class="col list {{::motion.ionListClass}}"><div class="item item-divider"><span><b class="ion-clock"></b> {{:locale:\'ACCOUNT.PENDING_TX_RECEIVED\'|translate}}</span><div class="badge item-note"><span ng-if="!$root.settings.useRelative">({{$root.currency.name | abbreviate}})</span> <span ng-if="$root.settings.useRelative">({{\'COMMON.UD\' | translate}}<sub>{{$root.currency.name | abbreviate}}</sub>)</span></div></div><span class="item padding" ng-if="!loading && !hasReceivedTx()"><span class="gray">{{:locale:\'ACCOUNT.NO_TX\'|translate}}</span></span><div class="item item-pending item-tx item-icon-left" ng-repeat="tx in formData.tx.errors | filter: filterReceivedTx" ng-init="pending=true;" ng-include="::\'templates/wallet/item_tx.html\'"></div><div class="item item-divider"><span><b class="ion-close-circled"></b> {{:locale:\'ACCOUNT.ERROR_TX_SENT\'|translate}}</span><div class="badge item-note"><span ng-if="!$root.settings.useRelative">({{$root.currency.name | abbreviate}})</span> <span ng-if="$root.settings.useRelative">({{\'COMMON.UD\' | translate}}<sub>{{$root.currency.name | abbreviate}}</sub>)</span></div></div><span class="item padding" ng-if="!loading && !hasSentTx()"><span class="gray">{{:locale:\'ACCOUNT.NO_TX\'|translate}}</span></span><div class="item item-pending item-tx item-icon-left" ng-repeat="tx in formData.tx.errors | filter: filterSentTx" ng-init="error=true;" ng-include="::\'templates/wallet/item_tx.html\'"></div></div><div class="col col-20 hidden-xs hidden-sm">&nbsp;</div></div></ion-content></ion-view>'),e.put("templates/wallet/view_wallet_tx.html",'<ion-view left-buttons="leftButtons" class="view-wallet-tx"><ion-nav-title><span class="visible-xs visible-sm" translate>MENU.TRANSACTIONS</span></ion-nav-title><ion-nav-buttons side="secondary"><cs-extension-point name="nav-buttons"></cs-extension-point></ion-nav-buttons><ion-content scroll="true" class="refresher-positive-900-bg" bind-notifier="{ rebind:settings.useRelative, locale:settings.locale.id}"><ion-refresher pulling-text="{{:locale:\'COMMON.BTN_REFRESH\' | translate}}" on-refresh="doUpdate(true)"></ion-refresher><div class="positive-900-bg hero"><div class="content" ng-if="!loading"><h1 class="light"><span ng-bind-html=":balance:rebind:formData.balance | formatAmount:{currency: $root.currency.name}"></span></h1><h4><ng-if ng-if="!loading && $root.settings.expertMode" style="font-style: italic;">(<span ng-bind-html=":balance:rebind:formData.balance | formatAmount:{useRelative:!$root.settings.useRelative, currency: $root.currency.name}"></span>)</ng-if><ng-if ng-if=":rebind:!enableSelectWallet" style="color: lightgray;"><span ng-if=":rebind:formData.name">{{:rebind:formData.name}}</span> <span ng-if=":rebind:!formData.name && formData.uid">{{:rebind:formData.uid}}</span> <span ng-if=":rebind:!formData.name && !formData.uid"><i class="ion-key"></i> {{:rebind:formData.pubkey | formatPubkey}}</span></ng-if><ng-if ng-if=":rebind:enableSelectWallet"><a class="hidden-xs hidden-sm" style="color: lightgray;" title="{{:locale:\'ACCOUNT.SELECT_WALLET_MODAL.TITLE\'|translate}}" ng-click="showSelectWalletPopover($event)"><span ng-if=":rebind:formData.name">{{:rebind:formData.name}}</span> <span ng-if=":rebind:!formData.name && formData.uid">{{:rebind:formData.uid}}</span> <span ng-if=":rebind:!formData.name && !formData.uid"><i class="ion-key"></i> {{:rebind:formData.pubkey | formatPubkey}}</span> <small><i class="ion-arrow-down-b"></i></small> </a><a class="visible-xs visible-sm" style="color: lightgray;" title="{{:locale:\'ACCOUNT.SELECT_WALLET_MODAL.TITLE\'|translate}}" ng-click="showSelectWalletModal($event)"><span ng-if=":rebind:formData.name">{{:rebind:formData.name}}</span> <span ng-if=":rebind:!formData.name && formData.uid">{{:rebind:formData.uid}}</span> <span ng-if=":rebind:!formData.name && !formData.uid"><i class="ion-key"></i> {{:rebind:formData.pubkey | formatPubkey}}</span> <small><i class="ion-arrow-down-b"></i></small></a></ng-if></h4><div class="helptip-anchor-center"><a id="helptip-wallet-balance">&nbsp;</a></div></div><h2 class="content light" ng-if="loading"><ion-spinner icon="android"></ion-spinner></h2></div><ng-include src="::\'templates/common/qrcode.html\'"></ng-include><div class="hidden-xs hidden-sm padding text-center" ng-if="!loading"><button class="button button-stable button-small-padding icon ion-loop ink" ng-click="doUpdate()" title="{{\'COMMON.BTN_REFRESH\' | translate}}"></button> <button class="button button-stable button-small-padding icon ion-android-download ink" ng-click="downloadHistoryFile()" title="{{\'COMMON.BTN_DOWNLOAD_ACCOUNT_STATEMENT\' | translate}}"></button><cs-extension-point name="buttons"></cs-extension-point>&nbsp;&nbsp; <button class="button button-calm ink" ng-click="showTransferModal()">{{:locale:\'COMMON.BTN_SEND_MONEY\' | translate}}</button></div><div class="row no-padding"><div class="col col-15 hidden-xs hidden-sm">&nbsp;</div><div class="col"><div class="list {{::motion.ionListClass}}"><a class="item item-icon-left item-icon-right ink" ng-if="formData.tx.errors && formData.tx.errors.length" ng-click="showTxErrors()"><i class="icon ion-alert-circled"></i> {{:locale:\'ACCOUNT.ERROR_TX\'|translate}}<div class="badge badge-assertive">{{formData.tx.errors.length}}</div><i class="gray icon ion-ios-arrow-right"></i></a><ng-if ng-if="formData.tx.pendings.length"><span class="item item-pending item-divider"><b class="ion-clock"></b> {{:locale:\'ACCOUNT.PENDING_TX\'|translate}}</span><div class="item item-pending item-tx item-icon-left" ng-repeat="tx in formData.tx.pendings" ng-init="pending=true;" ng-include="::\'templates/wallet/item_tx.html\'"></div></ng-if><ng-if ng-if="formData.tx.validating.length"><span class="item item-pending item-divider"><b class="icon ion-checkmark" style="font-size: 12px;"></b> <b class="icon-secondary ion-help" style="font-size: 12px; top: 2px; left: 11px;"></b> {{:locale:\'ACCOUNT.VALIDATING_TX\'|translate}}</span><div class="item item-pending item-tx item-icon-left" ng-repeat="tx in formData.tx.validating" ng-init="validating=true;" ng-include="::\'templates/wallet/item_tx.html\'"></div></ng-if><span class="item item-divider" ng-if="!loading"><b class="icon ion-checkmark"></b> {{:locale:\'ACCOUNT.LAST_TX\'|translate}} <a id="helptip-wallet-tx" style="position: relative; bottom: 0; right: 0px;">&nbsp;</a> </span><span class="item padding" ng-if="!loading && !formData.tx.history.length"><span class="gray">{{:locale:\'ACCOUNT.NO_TX\'|translate}}</span></span><div ng-repeat="tx in formData.tx.history" class="item item-tx item-icon-left" ng-include="::!tx.isUD ? \'templates/wallet/item_tx.html\' : \'templates/wallet/item_ud.html\'"></div><div class="item item-text-wrap text-center" ng-if="formData.tx.fromTime > 0"><p><a ng-click="showMoreTx()">{{:locale:\'ACCOUNT.SHOW_MORE_TX\'|translate}}</a> <span class="gray" translate="ACCOUNT.TX_FROM_DATE" translate-values="{fromTime: formData.tx.fromTime}"></span> <span class="gray">|</span> <a ng-click="showMoreTx(-1)" translate>ACCOUNT.SHOW_ALL_TX</a></p></div></div></div><div class="col col-15 hidden-xs hidden-sm">&nbsp;</div></div></ion-content><button id="fab-transfer" ng-show="!loading" class="button button-fab button-fab-bottom-right button-energized-900 hidden-md hidden-lg drop ng-hide" ng-click="showTransferModal()"><i class="icon ion-android-send"></i></button></ion-view>'),e.put("templates/wallet/view_wallet.html",'<ion-view left-buttons="leftButtons" class="view-wallet" id="wallet"><ion-nav-title></ion-nav-title><ion-nav-buttons side="secondary"><cs-extension-point name="nav-buttons"></cs-extension-point><button class="button button-icon button-clear icon ion-android-more-vertical visible-xs visible-sm" id="helptip-wallet-options-xs" ng-click="showActionsPopover($event)"></button></ion-nav-buttons><ion-content scroll="true" class="refresher-positive-900-bg" bind-notifier="{ rebind:settings.useRelative, locale:$root.settings.locale.id}"><ion-refresher pulling-text="{{\'COMMON.BTN_REFRESH\' | translate}}" on-refresh="doUpdate(true)"></ion-refresher><div class="positive-900-bg hero" style="max-width: 100%; display: block"><div class="content" ng-if="!loading" style="max-width: 100%"><i class="avatar" ng-if=":rebind:!formData.avatar" ng-class=":rebind:{\'avatar-wallet\': !formData.isMember, \'avatar-member\': formData.isMember}"></i> <i class="avatar" ng-if=":rebind:formData.avatar" style="background-image: url({{:rebind:formData.avatar.src}})"></i><h3 class="light" ng-if=":rebind:!enableSelectWallet"><span ng-if=":rebind:formData.name">{{:rebind:formData.name}}</span> <span ng-if=":rebind:!formData.name && formData.uid">{{:rebind:formData.uid}}</span> <span ng-if=":rebind:!formData.name && !formData.uid"><i class="ion-key"></i> {{:rebind:formData.pubkey | formatPubkey}}</span></h3><h3 class="light" ng-if=":rebind:enableSelectWallet"><a class="hidden-xs hidden-sm" style="color: lightgray;" title="{{:locale:\'ACCOUNT.SELECT_WALLET_MODAL.TITLE\'|translate}}" ng-click="showSelectWalletPopover($event)"><span ng-if=":rebind:formData.name">{{:rebind:formData.name}}</span> <span ng-if=":rebind:!formData.name && formData.uid">{{:rebind:formData.uid}}</span> <span ng-if=":rebind:!formData.name && !formData.uid"><i class="ion-key"></i> {{:rebind:formData.pubkey | formatPubkey}}</span> <small><i class="ion-arrow-down-b"></i></small> </a><a class="visible-xs visible-sm" style="color: lightgray;" title="{{:locale:\'ACCOUNT.SELECT_WALLET_MODAL.TITLE\'|translate}}" ng-click="showSelectWalletModal($event)"><span ng-if=":rebind:formData.name">{{:rebind:formData.name}}</span> <span ng-if=":rebind:!formData.name && formData.uid">{{:rebind:formData.uid}}</span> <span ng-if=":rebind:!formData.name && !formData.uid"><i class="ion-key"></i> {{:rebind:formData.pubkey | formatPubkey}}</span> <small><i class="ion-arrow-down-b"></i></small></a></h3><h4><span class="assertive" ng-if=":rebind:(formData.name || formData.uid) && !formData.isMember" translate>WOT.NOT_MEMBER_PARENTHESIS</span><cs-extension-point name="hero"></cs-extension-point></h4></div><h4 class="content light" ng-if="loading"><ion-spinner icon="android"></ion-spinner></h4></div><ng-include src="::\'templates/common/qrcode.html\'"></ng-include><a id="wallet-share-anchor"></a><div class="hidden-xs hidden-sm padding text-center" ng-if="!loading"><button class="button button-stable button-small-padding icon ion-android-share-alt ink" ng-disabled="loading" ng-click="showSharePopover($event)" title="{{\'COMMON.BTN_SHARE\' | translate}}"></button> <button class="button button-stable button-small-padding icon ion-loop ink" ng-click="doUpdate()" title="{{\'COMMON.BTN_REFRESH\' | translate}}"></button><cs-extension-point name="buttons"></cs-extension-point>&nbsp;&nbsp; <button id="helptip-wallet-options" class="button button-stable icon-right ink" ng-click="showActionsPopover($event)">&nbsp; <i class="icon ion-android-more-vertical"></i>&nbsp; {{:locale:\'COMMON.BTN_OPTIONS\' | translate}}</button><div ng-if="formData.requirements.needRenew"><br><button class="button button-raised button-stable ink" ng-click="renewMembership()"><i class="icon ion-alert-circled assertive"></i> <span class="assertive">{{:locale:\'ACCOUNT.BTN_MEMBERSHIP_RENEW\' | translate}}</span></button></div></div><div class="visible-xs visible-sm padding text-center" ng-if="!loading && formData.requirements.needRenew"><button class="button button-raised icon-left button-stable button-small-padding ink" ng-click="renewMembership()"><i class="icon ion-loop assertive"></i> <span class="assertive">{{:locale:\'ACCOUNT.BTN_MEMBERSHIP_RENEW\' | translate}}</span></button></div><div class="row no-padding"><div class="col col-20 hidden-xs hidden-sm">&nbsp;</div><div class="col"><div class="list {{::motion.ionListClass}}" ng-hide="loading"><span class="item item-divider" translate>WOT.GENERAL_DIVIDER</span><div id="helptip-wallet-pubkey" class="item item-icon-left item-text-wrap ink" on-hold="copy(formData.pubkey)" copy-on-click="{{:rebind:formData.pubkey}}"><i class="icon ion-key"></i> <span>{{:locale:\'COMMON.PUBKEY\'|translate}}</span><h4 id="pubkey" class="dark">{{:rebind:formData.pubkey}}</h4></div><ion-item class="item-icon-left" ng-if=":rebind:formData.sigDate||formData.uid"><i class="icon ion-calendar"></i> <span translate>COMMON.UID</span><h5 class="dark" ng-if=":rebind:formData.sigDate"><span translate>WOT.REGISTERED_SINCE</span> {{:rebind:formData.sigDate | medianDate}}</h5><span class="badge badge-stable">{{:rebind:formData.uid}}</span></ion-item><a id="helptip-wallet-certifications" class="item item-icon-left item-icon-right item-text-wrap ink" ng-if="formData.isMember||formData.requirements.pendingMembership||!formData.requirements.needSelf" ng-click="showCertifications()"><i class="icon ion-ribbon-b"></i> <b ng-if="formData.requirements.isSentry" class="ion-star icon-secondary" style="color: yellow; font-size: 16px; left: 25px; top: -7px;"></b> {{:locale:\'ACCOUNT.CERTIFICATION_COUNT\'|translate}}<cs-badge-certification requirements="formData.requirements" parameters="::currency.parameters"></cs-badge-certification><i class="gray icon ion-ios-arrow-right"></i> </a><a id="helptip-wallet-given-certifications" class="item item-icon-left item-text-wrap item-icon-right ink visible-xs visible-sm" ng-if="formData.isMember" ng-click="showGivenCertifications()"><i class="icon ion-ribbon-a"></i> <span translate>WOT.GIVEN_CERTIFICATIONS.SENT</span> <i class="gray icon ion-ios-arrow-right"></i> </a><a class="item item-icon-left item-icon-right ink" ng-click="showTxHistory()"><i class="icon ion-card"></i> <span translate>WOT.ACCOUNT_OPERATIONS</span> <i class="gray icon ion-ios-arrow-right"></i> </a><span class="item item-divider" ng-if="formData.events.length">{{:locale:\'ACCOUNT.EVENTS\' | translate}}</span><div class="item item-text-wrap item-icon-left item-wallet-event" ng-repeat="event in formData.events"><i class="icon" ng-class="{\'ion-information-circled royal\': event.type==\'info\',\'ion-alert-circled assertive\': event.type==\'warn\'||event.type==\'error\',\'assertive\': event.type==\'error\',\'ion-clock\': event.type==\'pending\'}"></i> <span trust-as-html="event.message | translate:event.messageParams"></span></div><cs-extension-point name="general"></cs-extension-point><cs-extension-point name="after-general"></cs-extension-point></div></div><div class="col col-20 hidden-xs hidden-sm">&nbsp;</div></div></ion-content></ion-view>'),e.put("templates/wot/item_certification.html",'<i class="item-image" ng-if="!cert.avatar" ng-class="{\'ion-card\': !cert.isMember, \'ion-person\': cert.isMember}"></i> <i class="item-image avatar" ng-if="cert.avatar" style="background-image: url({{::cert.avatar.src}})"></i> <span ng-if="cert.isMember"><h3><i class="icon ion-clock" ng-if="cert.pending"></i> <span class="positive">{{::cert.name||cert.uid}}</span></h3><h4 class="gray"><i class="ion-key"></i> {{::cert.pubkey | formatPubkey}} <span class="gray">| {{::cert.time|medianDate}}</span> <span class="gray" ng-if="$root.settings.expertMode">| {{::cert.pending ? \'WOT.SIGNED_ON_BLOCK\' : \'WOT.WRITTEN_ON_BLOCK\' | translate:cert}}</span></h4></span><span ng-if="!cert.isMember"><h3><i class="icon ion-clock" ng-if="cert.pending"></i> <span ng-if="cert.uid" class="dark">{{::cert.name||cert.uid}} </span><span ng-if="!cert.uid" class="gray"><i class="ion-key"></i> {{::cert.pubkey | formatPubkey}}</span></h3><h5 class="assertive">{{::\'WOT.NOT_MEMBER_PARENTHESIS\'|translate}}</h5><h4 class="gray"><span ng-if="cert.uid"><i class="ion-key"></i> {{::cert.pubkey | formatPubkey}} </span><span class="gray">| {{::cert.time|medianDate}}</span> <span class="gray" ng-if="$root.settings.expertMode">| {{::cert.pending ? \'WOT.SIGNED_ON_BLOCK\' : \'WOT.WRITTEN_ON_BLOCK\' | translate:cert}}</span></h4></span><div class="badge badge-stable" ng-class="{\'badge-energized\': cert.willExpire}" ng-if="cert.expiresIn">{{::cert.expiresIn | formatDurationTo}}</div><div class="badge badge-assertive" ng-if="!cert.expiresIn">{{::\'WOT.EXPIRED\' | translate}}</div>'),e.put("templates/wot/item_content_identity.html",'<i ng-if="::!item.avatar" class="item-image icon ion-person"></i> <i ng-if="::item.avatar" class="item-image avatar" style="background-image: url({{::item.avatar.src}})"></i><h2><ng-if ng-if="::item.name||item.uid" ng-bind-html="::item.name||item.uid"></ng-if><ng-if ng-if="::!item.name && !item.uid">{{::item.pubkey|formatPubkey}}</ng-if></h2><h4 class="gray" ng-class="{\'pull-right\': !smallscreen}" ng-if="::item.sigDate"><i class="ion-clock"></i> {{::\'WOT.LOOKUP.REGISTERED\' | translate:item }}</h4><h4 class="gray" ng-class="{\'pull-right\': !smallscreen}" ng-if="item.memberDate"><i class="ion-clock"></i> {{::\'WOT.LOOKUP.MEMBER_FROM\' | translate:item}}</h4><h4 class="gray"><span class="positive" ng-if="::item.name && item.uid"><i class="ion-person"></i> {{::item.uid}}&nbsp; </span><b class="ion-key"></b> {{::item.pubkey | formatPubkey}} <span ng-if="::(!item.uid && !item.revoked)" class="assertive" translate>WOT.NOT_MEMBER_PARENTHESIS</span> <span ng-if="::item.revoked" class="assertive" translate>WOT.IDENTITY_REVOKED_PARENTHESIS</span></h4><h4 ng-if="::item.events||item.tags"><span ng-repeat="event in ::item.events" class="assertive"><i class="ion-alert-circled" ng-if="::!item.valid"></i> <span ng-bind-html="::event.message|translate:event.messageParams"></span> </span><span ng-if="::item.tags" class="dark"><ng-repeat ng-repeat="tag in ::item.tags">#<ng-bind-html ng-bind-html="::tag"></ng-bind-html></ng-repeat></span></h4>'),e.put("templates/wot/items_given_certifications.html",'<div class="list given-certifications" ng-class="::motions.givenCertifications.ionListClass"><span class="item item-divider hidden-xs"><span translate>WOT.GIVEN_CERTIFICATIONS.SUMMARY</span></span><div id="helptip-certs-stock" class="item item-icon-left item-text-wrap ink"><i class="icon ion-ribbon-a"></i> <span translate>WOT.GIVEN_CERTIFICATIONS.SENT</span><cs-badge-given-certification identity="formData" parameters="$root.currency.parameters"></cs-badge-given-certification></div><div class="item item-icon-left item-text-wrap ink" ng-if="formData.given_cert_error.length"><i class="icon ion-alert-circled"></i> <span translate>WOT.GIVEN_CERTIFICATIONS.ERROR</span> <span class="badge badge-assertive">{{formData.given_cert_error.length}}</span></div><span class="item item-divider" ng-if="formData.given_cert_pending.length"><span translate>WOT.GIVEN_CERTIFICATIONS.PENDING_LIST</span><div class="badge item-note" style="text-align: right !important;" translate>WOT.NOT_WRITTEN_EXPIRE_IN</div></span><a class="item item-avatar ink" ng-repeat="cert in formData.given_cert_pending" ui-sref="app.wot_identity({pubkey:cert.pubkey, uid:cert.uid})" ng-include="::\'templates/wot/item_certification.html\'"></a><span class="item item-divider"><span translate>WOT.GIVEN_CERTIFICATIONS.LIST</span><div class="badge item-note" translate>WOT.EXPIRE_IN</div></span><span class="item gray" ng-if="!formData.given_cert.length" translate>WOT.NO_GIVEN_CERTIFICATION </span><a class="item item-avatar ink" ng-repeat="cert in formData.given_cert" ui-sref="app.wot_identity({pubkey:cert.pubkey, uid:cert.uid})" ng-include="::\'templates/wot/item_certification.html\'"></a></div>'),e.put("templates/wot/items_received_certifications.html",'<div class="list certifications" ng-class="::motions.receivedCertifications.ionListClass"><span class="item item-divider hidden-xs"><span translate>WOT.CERTIFICATIONS.SUMMARY</span></span><div id="helptip-received-certs" class="item item-icon-left item-text-wrap ink"><i class="icon ion-ribbon-b"></i> <b ng-if="formData.requirements.isSentry" class="ion-star icon-secondary" style="color: yellow; font-size: 16px; left: 25px; top: -7px;"></b> <span translate>WOT.CERTIFICATIONS.RECEIVED</span><h4 class="gray" ng-if="formData.requirements.isSentry" translate>WOT.CERTIFICATIONS.SENTRY_MEMBER</h4><cs-badge-certification cs-id="helptip-wot-view-certifications-count" requirements="formData.requirements" parameters="$root.currency.parameters"></cs-badge-certification></div><div class="item item-icon-left item-text-wrap ink" ng-if="formData.received_cert_error.length"><i class="icon ion-alert-circled"></i> <span translate>WOT.CERTIFICATIONS.ERROR</span> <span class="badge badge-assertive">{{formData.received_cert_error.length}}</span></div><span class="item item-divider" ng-if="formData.received_cert_pending.length"><span translate>WOT.CERTIFICATIONS.PENDING_LIST</span><div class="badge item-note" style="text-align: right !important;" translate>WOT.NOT_WRITTEN_EXPIRE_IN</div></span><a class="item item-avatar ink" ng-repeat="cert in formData.received_cert_pending" ui-sref="app.wot_identity({pubkey:cert.pubkey, uid:cert.uid})" ng-include="::\'templates/wot/item_certification.html\'"></a><span class="item item-divider"><span translate>WOT.CERTIFICATIONS.LIST</span><div class="badge item-note" translate>WOT.EXPIRE_IN</div></span><span class="item gray" ng-if="!formData.received_cert.length" translate>WOT.NO_CERTIFICATION</span> <a class="item item-avatar ink" ng-repeat="cert in formData.received_cert" ui-sref="app.wot_identity({pubkey:cert.pubkey, uid:cert.uid})" ng-include="::\'templates/wot/item_certification.html\'"></a></div>'),e.put("templates/wot/lookup_form.html",'<div class="lookupForm"><div class="item no-padding"><div class="double-padding-x padding-top-xs item-text-wrap" ng-if="::allowMultiple" style="height: 36px;"><div class="gray padding-top" ng-if="!selection.length && parameters.help">{{::parameters.help|translate}}</div><div ng-repeat="identity in selection track by identity.id" class="button button-small button-text button-stable button-icon-event ink" ng-class="{\'button-text-positive\': identity.selected}"><span ng-bind-html="identity.name||identity.uid||(identity.pubkey|formatPubkey)"></span> <i class="icon ion-close" ng-click="removeSelection(identity, $event)">&nbsp;&nbsp;</i></div></div><div class="item-input"><i class="icon ion-search placeholder-icon"></i> <input type="text" class="visible-xs visible-sm" placeholder="{{\'WOT.SEARCH_HELP\'|translate}}" ng-model="search.text" ng-model-options="{ debounce: 650 }" ng-change="doSearch()" on-return="doSearchText()" select-on-click> <input type="text" class="hidden-xs hidden-sm" id="{{wotSearchTextId}}" placeholder="{{\'WOT.SEARCH_HELP\'|translate}}" ng-model="search.text" on-return="doSearchText()"><div class="helptip-anchor-center"><a id="helptip-wot-search-text"></a></div></div></div><div class="padding-top padding-xs padding-sm" style="display: block; height: 60px;" ng-class="::{\'hidden-xs hidden-sm\': !showResultLabel}"><div class="pull-left" ng-if="!search.loading && showResultLabel"><ng-if ng-if="search.type==\'newcomers\'"><h4 translate>WOT.LOOKUP.NEWCOMERS</h4><small class="gray no-padding" ng-if="search.total">{{\'WOT.LOOKUP.NEWCOMERS_COUNT\'|translate:{count: search.total} }}</small></ng-if><ng-if ng-if="search.type==\'pending\'"><h4 translate>WOT.LOOKUP.PENDING</h4><small class="gray no-padding" ng-if="search.total">{{\'WOT.LOOKUP.PENDING_COUNT\'|translate:{count: search.total} }}</small></ng-if><h4 ng-if="search.type==\'text\'"><span translate>COMMON.RESULTS_LIST</span> <small class="gray" ng-if="search.total">({{search.total}})</small></h4></div><div class="pull-right hidden-xs hidden-sm"><a ng-if="enableFilter" class="button button-text button-small ink" ng-class="{\'button-text-positive\': search.type==\'newcomers\'}" ng-click="doGetNewcomers()"><i class="icon ion-person-stalker"></i> {{\'WOT.LOOKUP.BTN_NEWCOMERS\' | translate}} </a><a ng-if="enableFilter" class="button button-text button-small ink" ng-class="{\'button-text-positive\': search.type==\'pending\'}" ng-click="doGetPending()" class="badge-balanced"><i class="icon ion-clock"></i> {{\'WOT.LOOKUP.BTN_PENDING\' | translate}} </a><a ng-if="enableWallets" class="button button-text button-small ink" ng-class="{\'button-text-positive\': search.type==\'wallets\'}" ng-click="doGetWallets()" class="badge-balanced"><i class="icon ion-card" style="left: -1px; top: 4px; position: relative; padding-left: 3px; padding-right: 3px;"></i> <b class="icon-secondary ion-card" style="left: 10px; top: -4px; font-size: 14px;"></b> {{\'MENU.WALLETS\' | translate}}</a><cs-extension-point name="filter-buttons"></cs-extension-point>&nbsp; <button class="button button-small button-stable ink" ng-click="doSearch()">{{\'COMMON.BTN_SEARCH\' | translate}}</button> <button class="button button-small button-positive {{parameters.okType}} ink" ng-if="::allowMultiple" ng-disabled="!selection.length" ng-click="next()">{{parameters.okText||\'COMMON.BTN_NEXT\' | translate}}</button></div></div><div class="text-center padding-top" ng-if="search.loading"><p class="gray" ng-if="::$root.currency.initPhase" translate>WOT.SEARCH_INIT_PHASE_WARNING</p><ion-spinner icon="android"></ion-spinner></div><ng-if ng-if="!search.loading"><div class="assertive padding" ng-if="!search.results.length"><span ng-if="search.type==\'text\'" translate>COMMON.SEARCH_NO_RESULT</span> <span ng-if="search.type==\'pending\'" translate>WOT.LOOKUP.NO_PENDING</span> <span ng-if="search.type==\'newcomers\'" translate>WOT.LOOKUP.NO_NEWCOMERS</span></div><div ng-if="::!allowMultiple" class="list {{::motion.ionListClass}}"><div ng-repeat="item in search.results track by item.id" id="helptip-wot-search-result-{{$index}}" ng-class="::{\'item-avatar item-icon-right ink\': !item.divider, \'item-divider \': item.divider}" class="item item-border-large {{::item.ionItemClass}}" ng-click="::select(item)"><span ng-if="::item.divider">{{::(\'WOT.SEARCH.DIVIDER_\' + item.index)|upper|translate}}</span><ng-include ng-if="::!item.divider" src="item.templateUrl || \'templates/wot/item_content_identity.html\'"></ng-include><i ng-if="::!item.divider" class="icon ion-ios-arrow-right"></i></div></div><div ng-if="::allowMultiple" class="list {{::motion.ionListClass}}"><ion-checkbox ng-repeat="item in search.results track by item.id" ng-model="item.checked" class="item item-border-large item-avatar ink" ng-click="toggleCheck($index, $event)"><ng-include src="::\'templates/wot/item_content_identity.html\'"></ng-include></ion-checkbox></div><ion-infinite-scroll ng-if="search.hasMore" spinner="android" on-infinite="showMore()" distance="20%"></ion-infinite-scroll></ng-if></div>'),e.put("templates/wot/lookup_lg.html",'<ion-view><ion-nav-title>{{\'MENU.WOT\' | translate}}</ion-nav-title><ion-nav-buttons side="secondary"><button class="button button-icon button-clear visible-xs visible-sm" ng-click="showActionsPopover($event)"><i class="icon ion-android-funnel"></i></button></ion-nav-buttons><ion-content class="padding no-padding-x no-padding-sm" scroll="true"><cs-extension-point name="top"></cs-extension-point><ng-include src="::\'templates/wot/lookup_form.html\'"></ng-include></ion-content></ion-view>'),e.put("templates/wot/lookup_popover_actions.html",'<ion-popover-view class="fit has-header visible-sm visible-xs"><ion-header-bar><h1 class="title" translate>COMMON.POPOVER_FILTER_TITLE</h1></ion-header-bar><ion-content scroll="false"><div class="list item-text-wrap"><a class="item item-icon-left ink" ng-if="enableWallets" ng-click="doGetWallets()"><i class="icon ion-card"></i> {{\'MENU.WALLETS\' | translate}} </a><a class="item item-icon-left ink" ng-click="doGetNewcomers()"><i class="icon ion-person"></i> {{\'WOT.LOOKUP.BTN_NEWCOMERS\' | translate}} </a><a class="item item-icon-left ink" ng-click="doGetPending()"><i class="icon ion-clock"></i> {{\'WOT.LOOKUP.BTN_PENDING\' | translate}}</a></div></ion-content></ion-popover-view>'),e.put("templates/wot/lookup.html",'<ion-view left-buttons="leftButtons"><ion-tabs class="tabs-positive tabs-icon-top"><ion-tab title="{{\'WOT.LOOKUP.TITLE\'|translate}}" icon="ion-person-stalker" ui-sref="app.wot_lookup.tab_search"><ion-nav-view name="tab"></ion-nav-view></ion-tab><cs-extension-point name="tabs"></cs-extension-point></ion-tabs></ion-view>'),e.put("templates/wot/modal_lookup.html",'<ion-modal-view id="wotLookup" class="modal-full-height"><ion-header-bar class="bar-positive"><button class="button button-clear" ng-click="closeModal()" translate="">COMMON.BTN_CANCEL</button><h1 class="title hidden-xs">{{::parameters.title?parameters.title:\'WOT.MODAL.TITLE\'|translate}}</h1><button class="button button-clear icon-right visible-xs ink" ng-if="allowMultiple && selection.length" ng-click="closeModal(selection)">{{::parameters.okText||\'COMMON.BTN_NEXT\' | translate}} <i ng-if="::!parameters.okText||parameters.okIcon" class="icon {{::parameters.okIcon||\'ion-ios-arrow-right\'}}"></i></button></ion-header-bar><ion-content class="padding no-padding-xs no-padding-sm" scroll="true"><div class="visible-xs visible-sm text-right stable-bg stable"><button class="button button-icon button-small-padding dark ink" ng-click="showActionsPopover($event)"><i class="icon ion-android-funnel"></i></button></div><ng-include src="::\'templates/wot/lookup_form.html\'"></ng-include></ion-content></ion-modal-view>'),e.put("templates/wot/modal_select_pubkey_identity.html",'<ion-modal-view id="transfer" class="modal-full-height modal-transfer"><ion-header-bar class="bar-positive"><button class="button button-clear" ng-click="closeModal()" translate>COMMON.BTN_CANCEL</button><h1 class="title" translate>ACCOUNT.SELECT_IDENTITY_MODAL.TITLE</h1></ion-header-bar><ion-content scroll="true"><div class="padding"><p trust-as-html="\'ACCOUNT.SELECT_IDENTITY_MODAL.HELP\'|translate:{pubkey: pubkey}"></p></div><ion-list><ion-item class="item-avatar item-icon-right" ng-repeat="item in identities" ng-click="closeModal(item)"><i class="item-image icon ion-person"></i><h2>{{item.uid}}</h2><h4 class="gray"><b class="ion-key"></b> {{::item.pubkey | formatPubkey}} <span ng-if="::!item.revoked && !item.pendingRevocation && !item.isMember" class="assertive" translate>WOT.NOT_MEMBER_PARENTHESIS</span> <span ng-if="::item.revoked || item.pendingRevocation" class="assertive bold" translate>WOT.IDENTITY_REVOKED_PARENTHESIS</span> <span ng-if="::item.meta.invalid" class="assertive" translate>ERROR.WOT_PENDING_INVALID_BLOCK_HASH</span></h4><h4 class="dark" ng-if="::item.meta.time"><i class="ion-calendar"></i> <span translate>WOT.REGISTERED_SINCE</span> {{::item.meta.time|medianDate}}</h4><ng-if ng-if="::!item.revoked && !item.pendingRevocation && (item.certificationCount || item.pendingCertificationCount)"><cs-badge-certification requirements="item" parameters="$root.currency.parameters"></cs-badge-certification><div class="gray badge badge-secondary hidden-xs"><span translate>ACCOUNT.CERTIFICATION_COUNT</span></div></ng-if><i class="icon ion-ios-arrow-right"></i></ion-item></ion-list></ion-content></ion-modal-view>'),e.put("templates/wot/tabs/tab_given_certifications.html",'<ion-view><ion-nav-buttons side="secondary"><button class="button button-icon button-clear icon ion-loop" ng-click="doUpdate()"></button></ion-nav-buttons><ion-content ng-init="motions.receivedCertifications=false; motions.avatar=false"><div class="center padding" ng-if="loading"><ion-spinner icon="android"></ion-spinner></div><ng-include src="::\'templates/wot/items_given_certifications.html\'"></ng-include></ion-content><div class="visible-xs visible-sm"><button id="fab-select-certify" class="button button-fab button-fab-bottom-right button-energized-900 spin" ng-if="canSelectAndCertify || $root.tour" ng-click="selectAndCertify()"><i class="icon ion-plus"></i></button></div></ion-view>'),e.put("templates/wot/tabs/tab_lookup.html",'<ion-view><ion-nav-buttons side="secondary"><cs-extension-point name="nav-buttons"></cs-extension-point><button class="button button-icon button-clear" ng-click="showActionsPopover($event)"><i class="icon ion-android-funnel"></i></button></ion-nav-buttons><ion-content><ion-refresher pulling-text="{{\'COMMON.BTN_REFRESH\' | translate}}" on-refresh="doSearch()"></ion-refresher><cs-extension-point name="buttons"></cs-extension-point><ng-include src="::\'templates/wot/lookup_form.html\'"></ng-include></ion-content></ion-view>'),e.put("templates/wot/tabs/tab_received_certifications.html",'<ion-view><ion-nav-buttons side="secondary"><button class="button button-icon button-clear icon ion-loop" ng-click="doUpdate()"></button></ion-nav-buttons><ion-content ng-init="motions.givenCertifications=false; motions.avatar=false;"><div class="center padding" ng-if="loading"><ion-spinner icon="android"></ion-spinner></div><ng-include src="::\'templates/wot/items_received_certifications.html\'"></ng-include></ion-content><div class="visible-xs visible-sm"><button id="fab-certify" class="button button-fab button-fab-bottom-right button-energized-900 spin" ng-click="certify()" ng-if="(formData.hasSelf && canCertify && !alreadyCertified) || $root.tour"><i class="icon ion-ribbon-b"></i></button></div></ion-view>'),e.put("templates/wot/view_certifications.html",'<ion-view left-buttons="leftButtons"><ion-nav-title><span class="visible-xs visible-sm">{{::formData.name||formData.uid}}</span> <span class="hidden-xs hidden-sm" ng-if="!loading" translate="WOT.CERTIFICATIONS.TITLE" translate-values="{uid: formData.name || formData.uid}"></span></ion-nav-title><ion-nav-buttons side="secondary"><cs-extension-point name="nav-buttons"></cs-extension-point></ion-nav-buttons><ion-content class="certifications certifications-lg"><ion-refresher pulling-text="{{\'COMMON.BTN_REFRESH\' | translate}}" on-refresh="doUpdate()"></ion-refresher><div class="hidden-xs hidden-sm text-center padding"><button class="button button-stable button-small-padding icon ion-loop ink" ng-click="doUpdate()" title="{{\'COMMON.BTN_REFRESH\' | translate}}"></button> <button id="helptip-certs-certify" class="button button-raised button-calm icon-left ion-ribbon-b" ng-if="canCertify" ng-click="certify()" ng-disabled="disableCertifyButton">{{\'WOT.BTN_CERTIFY\' | translate}}</button> <button id="helptip-certs-select-certify" class="button button-raised button-calm icon-left" ng-if="canSelectAndCertify" ng-click="selectAndCertify()">{{\'WOT.BTN_SELECT_AND_CERTIFY\' | translate}}</button><cs-extension-point name="buttons"></cs-extension-point></div><div class="center padding" ng-if="loading"><ion-spinner icon="android"></ion-spinner></div><div class="row responsive-sm responsive-md responsive-lg"><div class="col no-padding" ng-if="motions.receivedCertifications.enable"><ng-include src="::\'templates/wot/items_received_certifications.html\'"></ng-include></div><div class="col col-20 col-avatar hidden-xs hidden-sm hidden-md no-padding" style="margin-top: 100px;" ng-if="motions.avatar.enable"><div class="row no-padding" ng-class="::motions.avatar.ionListClass"><div class="col text-center no-padding gray" style="margin-top: 30px;"><i class="icon ion-arrow-right-a" style="font-size:30px"></i></div><div class="col text-center no-padding"><a style="text-decoration: none;" ui-sref="app.wot_identity({pubkey: formData.pubkey, uid: formData.uid})"><i class="avatar avatar-large" ng-if="!formData.avatar" ng-class="{\'avatar-wallet\': !formData.isMember, \'avatar-member\': formData.isMember}"></i> <i class="avatar avatar-large" ng-if="formData.avatar" style="background-image: url({{::formData.avatar.src}})"></i><h4 class="text-center" ng-class="{\'positive\': formData.isMember, \'gray\': !formData.isMember}">{{::formData.name||formData.uid}}</h4><h5 class="text-center gray"><i class="icon ion-key"></i> {{formData.pubkey|formatPubkey}}</h5><h5 class="assertive"><span ng-if="::(formData.name || formData.uid) && !formData.isMember && !revoked" translate>WOT.NOT_MEMBER_PARENTHESIS</span> <b ng-if="::(formData.name || formData.uid) && !formData.isMember && revoked" translate>WOT.IDENTITY_REVOKED_PARENTHESIS</b> <b ng-if="::(formData.name || formData.uid) && formData.isMember && revoked" translate>WOT.MEMBER_PENDING_REVOCATION_PARENTHESIS</b></h5></a></div><div class="col text-center no-padding gray" style="margin-top: 30px;"><i class="icon ion-arrow-right-a" style="font-size:30px"></i></div></div></div><div class="col no-padding" ng-if="motions.givenCertifications.enable"><ng-include src="::\'templates/wot/items_given_certifications.html\'"></ng-include></div></div></ion-content><div class="visible-xs visible-sm"><button id="fab-certify" class="button button-fab button-fab-bottom-right button-energized-900 spin hidden-readonly" ng-if="canCertify && !alreadyCertified" ng-click="certify()"><i class="icon ion-ribbon-b"></i></button> <button id="fab-select-certify" class="button button-fab button-fab-bottom-right button-energized-900 spin hidden-readonly" ng-if="canSelectAndCertify" ng-click="selectAndCertify()"><i class="icon ion-plus"></i></button></div></ion-view>'),e.put("templates/wot/view_identity_tx.html",'<ion-view left-buttons="leftButtons" class="view-identity-tx"><ion-nav-title><span class="visible-xs visible-sm" ng-if="!loading"><span ng-if="formData.name || formData.uid">{{formData.name || formData.uid}} </span><span ng-if="!formData.name && !formData.uid"><i class="ion-key"></i> {{formData.pubkey|formatPubkey}}</span> </span><span class="hidden-xs hidden-sm" ng-if="!loading"><ng-if ng-if="formData.name || formData.uid">{{\'WOT.OPERATIONS.TITLE\'|translate: {uid: formData.name || formData.uid} }}</ng-if><ng-if ng-if="!formData.name && !formData.uid"><i class="ion-key"></i> {{formData.pubkey|formatPubkey}} {{\'WOT.OPERATIONS.TITLE\'|translate}}</ng-if></span></ion-nav-title><ion-content scroll="true"><ion-refresher pulling-text="{{\'COMMON.BTN_REFRESH\' | translate}}" on-refresh="doUpdate(true)"></ion-refresher><div class="hidden-xs hidden-sm padding text-center"><button class="button button-stable button-small-padding icon ion-loop ink" ng-click="doUpdate()" title="{{\'COMMON.BTN_REFRESH\' | translate}}"></button> <button class="button button-stable button-small-padding icon ion-android-download ink" ng-click="downloadHistoryFile()" title="{{\'COMMON.BTN_DOWNLOAD_ACCOUNT_STATEMENT\' | translate}}"></button><cs-extension-point name="buttons"></cs-extension-point></div><div class="center padding" ng-if="loading"><ion-spinner icon="android"></ion-spinner></div><div class="list {{motion.ionListClass}}" ng-if="!loading"><div class="row"><div class="col col-15 hidden-xs hidden-sm">&nbsp;</div><div class="col"><div class="item item-tx item-divider">{{:locale:\'ACCOUNT.BALANCE_ACCOUNT\'|translate}}<div class="badge item-note" ng-class=":balance:{\'badge-assertive\': formData.balance <= 0, \'badge-balanced\': formData.balance > 0 }" ng-bind-html=":balance:formData.balance|formatAmount:{currency: $root.currency.name}"></div><div class="badge badge-secondary" ng-if="$root.settings.expertMode">(<span ng-bind-html=":balance:formData.balance| formatAmount: {useRelative: !$root.settings.useRelative, currency: $root.currency.name} "></span>)</div></div><div class="item item-icon-left" ng-if="formData.tx.errors.length"><i class="icon ion-alert-circled"></i> {{:locale:\'ACCOUNT.ERROR_TX\'|translate}}<div class="badge badge-assertive">{{formData.tx.errors.length}}</div></div><ng-if ng-if="formData.tx.pendings.length"><span class="item item-pending item-divider"><i class="ion-clock"></i> {{:locale:\'ACCOUNT.PENDING_TX\'|translate}}</span><div class="item item-pending item-tx item-icon-left" ng-repeat="tx in formData.tx.pendings" ng-init="pending=true;" ng-include="::\'templates/wallet/item_tx.html\'"></div></ng-if><ng-if ng-if="formData.tx.validating.length"><span class="item item-pending item-divider">{{:locale:\'ACCOUNT.VALIDATING_TX\'|translate}}</span><div class="item item-pending item-tx item-icon-left" ng-repeat="tx in formData.tx.validating" ng-init="validating=true;" ng-include="::\'templates/wallet/item_tx.html\'"></div></ng-if><span class="item item-divider" ng-if="!loading">{{:locale:\'ACCOUNT.LAST_TX\'|translate}} <a id="helptip-wallet-tx" style="position: relative; bottom: 0; right: 0px;">&nbsp;</a></span><div ng-repeat="tx in formData.tx.history" class="item item-tx item-icon-left" ng-include="::!tx.isUD ? \'templates/wallet/item_tx.html\' : \'templates/wallet/item_ud.html\'"></div><div class="item item-text-wrap text-center" ng-if="formData.tx.fromTime > 0"><p><a ng-click="showMoreTx()">{{:locale:\'ACCOUNT.SHOW_MORE_TX\'|translate}}</a> <span class="gray" translate="ACCOUNT.TX_FROM_DATE" translate-values="{fromTime: formData.tx.fromTime}"></span> <span class="gray">|</span> <a ng-click="showMoreTx(-1)" translate>ACCOUNT.SHOW_ALL_TX</a></p></div></div><div class="col col-15 hidden-xs hidden-sm">&nbsp;</div></div></div></ion-content></ion-view>'),e.put("templates/wot/view_identity.html",'<ion-view left-buttons="leftButtons" class="view-identity"><ion-nav-title></ion-nav-title><ion-content scroll="true" ng-class="{\'member\': !loading && formData.isMember}"><ion-refresher pulling-text="{{\'COMMON.BTN_REFRESH\' | translate}}" on-refresh="doUpdate(true)"></ion-refresher><div class="hero"><div class="content" ng-if="!loading"><i class="avatar" ng-if=":rebind:!formData.avatar" ng-class="{\'avatar-wallet\': !formData.isMember, \'avatar-member\': formData.isMember}"></i> <i class="avatar" ng-if=":rebind:formData.avatar" style="background-image: url({{::formData.avatar.src}})"></i><ng-if ng-if=":rebind:formData.name"><h3 class="light">{{::formData.name}}</h3></ng-if><ng-if ng-if=":rebind:!formData.name"><h3 class="light" ng-if=":rebind:formData.uid">{{:rebind:formData.uid}}</h3><h3 class="light" ng-if=":rebind:!formData.uid"><i class="ion-key"></i> {{:rebind:formData.pubkey | formatPubkey}}</h3></ng-if><h4><ng-if class="assertive" ng-if=":rebind:(formData.name || formData.uid) && !formData.isMember && revoked" translate>WOT.IDENTITY_REVOKED_PARENTHESIS</ng-if><ng-if class="assertive" ng-if=":rebind:(formData.name || formData.uid) && formData.isMember && revoked" translate>WOT.MEMBER_PENDING_REVOCATION_PARENTHESIS</ng-if><cs-extension-point name="hero"></cs-extension-point></h4></div><h4 class="content light" ng-if="loading"><ion-spinner icon="android"></ion-spinner></h4></div><ng-include src="::\'templates/common/qrcode.html\'"></ng-include><a id="wot-share-anchor-{{::formData.pubkey}}"></a><div class="hidden-xs hidden-sm padding text-center"><button class="button button-stable button-small-padding icon ion-android-share-alt ink" ng-disabled="loading" ng-click="showSharePopover($event)" title="{{\'COMMON.BTN_SHARE\' | translate}}"></button><cs-extension-point name="buttons"></cs-extension-point><button class="button button-stable button-small-padding icon ion-ribbon-b ink hidden-readonly" ng-click="certify()" ng-if=":rebind:formData.hasSelf" title="{{\'WOT.BTN_CERTIFY\' | translate}}" ng-disabled="disableCertifyButton"></button> <button class="button button-calm ink hidden-readonly" ng-click="showTransferModal({pubkey:formData.pubkey, uid: formData.name||formData.uid})">{{\'COMMON.BTN_SEND_MONEY\' | translate}}</button><cs-extension-point name="after-buttons"></cs-extension-point></div><div class="visible-xs visible-sm"><button id="fab-certify-{{:rebind:formData.uid}}" class="button button-fab button-fab-top-left button-fab-hero button-calm spin hidden-readonly" ng-if=":rebind:(canCertify && !alreadyCertified)" ng-click="certify()"><i class="icon ion-ribbon-b"></i></button><cs-extension-point name="buttons-top-fab"></cs-extension-point></div><div class="row no-padding"><div class="col col-20 hidden-xs hidden-sm">&nbsp;</div><div class="col list {{::motion.ionListClass}}" bind-notifier="{ rebind:loading}"><span class="item item-divider" translate>WOT.GENERAL_DIVIDER</span><ion-item class="item-icon-left item-text-wrap ink" copy-on-click="{{:rebind:formData.pubkey}}"><i class="icon ion-key"></i> <span translate>COMMON.PUBKEY</span><h4 id="pubkey" class="dark text-left">{{:rebind:formData.pubkey}}</h4></ion-item><div class="item item-icon-left item-text-wrap" ng-if=":rebind:!formData.hasSelf"><i class="icon ion-ios-help-outline positive"></i> <span translate>WOT.NOT_MEMBER_ACCOUNT</span><h4 class="gray" translate>WOT.NOT_MEMBER_ACCOUNT_HELP</h4></div><ion-item class="item-icon-left" ng-if=":rebind:formData.sigDate||formData.uid"><i class="icon ion-calendar"></i> <span translate>COMMON.UID</span><h5 class="dark" ng-if=":rebind:formData.sigDate "><span translate>WOT.REGISTERED_SINCE</span> {{:rebind:formData.sigDate|medianDate}}</h5><span class="badge badge-energized">{{:rebind:formData.uid}}</span></ion-item><a id="helptip-wot-view-certifications" class="item item-icon-left item-text-wrap item-icon-right ink" ng-if=":rebind:formData.hasSelf" ng-click="showCertifications()"><i class="icon ion-ribbon-b"></i> <b ng-if=":rebind:formData.requirements.isSentry" class="ion-star icon-secondary" style="color: yellow; font-size: 16px; left: 25px; top: -7px;"></b> <span translate>ACCOUNT.CERTIFICATION_COUNT</span><cs-badge-certification cs-id="helptip-wot-view-certifications-count" requirements="formData.requirements" parameters="{sigQty: formData.sigQty}"></cs-badge-certification><i class="gray icon ion-ios-arrow-right"></i> </a><a class="item item-icon-left item-text-wrap item-icon-right ink visible-xs visible-sm" ng-if=":rebind:formData.hasSelf && formData.isMember" ng-click="showGivenCertifications()"><i class="icon ion-ribbon-a"></i> <span translate>WOT.GIVEN_CERTIFICATIONS.SENT</span><cs-badge-given-certification identity="formData" parameters="$root.currency.parameters"></cs-badge-given-certification><i class="gray icon ion-ios-arrow-right"></i> </a><a class="item item-icon-left item-icon-right ink" ng-if="!loading" ui-sref="app.wot_identity_tx_uid({uid:formData.uid,pubkey:formData.pubkey})"><i class="icon ion-card"></i> <span translate>WOT.ACCOUNT_OPERATIONS</span> <i class="gray icon ion-ios-arrow-right"></i></a><div class="item item-text-wrap item-icon-left item-wallet-event" ng-class="{\'assertive\': event.type==\'error\'}" ng-repeat="event in :rebind:formData.events"><i class="icon" ng-class="{\'ion-information-circled royal\': event.type==\'info\',\'ion-alert-circled\': event.type==\'warn\'||event.type==\'error\',\'assertive\': event.type==\'error\',\'ion-clock\': event.type==\'pending\'}"></i> <span trust-as-html="event.message | translate:event.messageParams"></span></div><cs-extension-point name="general"></cs-extension-point><cs-extension-point name="after-general"></cs-extension-point></div><div class="col col-20 hidden-xs hidden-sm">&nbsp;</div></div></ion-content><div class="visible-xs visible-sm" ng-hide="loading"><button id="fab-transfer" class="button button-fab button-fab-bottom-right button-assertive drop hidden-readonly" ng-click="showTransferModal({pubkey:formData.pubkey, uid: formData.uid})"><i class="icon ion-android-send"></i></button></div></ion-view>')}]),angular.module("cesium.translations",[]).config(["$translateProvider",function(e){e.translations("en-GB",{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|abbreviate}}",MESSAGE_READONLY:"Real-time monitoring of libre currency {{currency|abbreviate}}",BTN_CURRENCY:"Explore currency {{currency|abbreviate}}",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",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_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:"{{uid}} - 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:"If you are not yet registered as an individual (one account possible per individual).",WALLET_ACCOUNT:"Simple wallet",WALLET_ACCOUNT_TITLE:"Create a wallet",WALLET_ACCOUNT_HELP:"If you represent a company, association, etc. or simply need an additional wallet. No universal dividend will be created by this account.",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:{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|abbreviate}}</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|abbreviate}}</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|abbreviate}}</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|abbreviate}}</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|abbreviate}}</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|abbreviate}}",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)"}}}}),e.translations("en",{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:"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|abbreviate}}",MESSAGE_READONLY:"Real-time monitoring of libre currency {{currency|abbreviate}}",BTN_CURRENCY:"Explore currency {{currency|abbreviate}}",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",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_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:"{{uid}} - 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 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_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:"If you are not yet registered as an individual (one account possible per individual).",WALLET_ACCOUNT:"Simple wallet",WALLET_ACCOUNT_TITLE:"Create a wallet",WALLET_ACCOUNT_HELP:"If you represent a company, association, etc. or simply need an additional wallet. No universal dividend will be created by this account.",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:{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|abbreviate}}</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|abbreviate}}</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|abbreviate}}</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|abbreviate}}</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|abbreviate}}</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> Canceled 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|abbreviate}}",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)"}}}}),e.translations("eo-EO",{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!",MESSAGE:"Ricevu kaj sendu liberan monon {{currency|abbreviate}}",BTN_CURRENCY:"Esploru la monon {{name|abbreviate}}",BTN_ABOUT:"prie",BTN_HELP:"Reta helpo",REPORT_ISSUE:"fuŝaĵo",NOT_YOUR_ACCOUNT_QUESTION:'Vi ne posedas la konton <b><i class="ion-key"></i> {{pubkey|formatPubkey}}</b> ?',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>.'},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",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",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 sesio"},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 sesio").',REMEMBER_ME:"Memori min?",REMEMBER_ME_HELP:"Ebligas resti identigita de sesio 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|abbreviate}} 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:"Maso por 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 akcepti aliĝ-peton kiel membron",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:"{{uid}} - 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 sesio de retumado",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, sesio 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.",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.",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."},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:{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>."},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|abbreviate}}</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|abbreviate}}</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|abbreviate}}</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>{{'ACCOUNT.TITLE'|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|abbreviate}}</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_TX:"La menuo <b>{{'MENU.TRANSACTIONS'|translate}}</b> ebligas konsulti vian konton, la 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|abbreviate}}</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_ACCOUNT'|translate}}</b> ĉi-sube."}},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)"}}}}),e.translations("es-ES",{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:"¿Publicar los valores no codificados?",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|abbreviate}} 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 de conmutación <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|abbreviate}} 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 la misma persona",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:"{{uid}} - 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:"Identificador secreto",SALT_HELP:"Identificador secreto",SHOW_SALT:"Mostrar el identificador secreto",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:"Tansacciones 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 en persona)</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 conocerlos en persona 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 tiene membresía (solamente una cuenta miembro posible por persona).",WALLET_ACCOUNT:"Simple monedero",WALLET_ACCOUNT_TITLE:"Crear una cuenta simple",WALLET_ACCOUNT_HELP:"Monedero simple para todos los otros casos, por ejemplo si necesita una cuenta suplementaria.<br/>El Dividendo Universal no será producido para esta cuenta.",SALT_WARNING:"Elija su identificador secreto.<br/>Se solicitará cada vez que se conectará con esta cuenta.<br/><br/><b>Conserve bien este identificador secreto</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 del identificador secreto",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> el identificador secreto, 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> el identificador secreto 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> (e identificador secreto) 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 del identificador secreto.",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 al identificador secreto 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): esta persona debe renovelar su solicitud de adhesión <b>antes que</b> estar certificada.",IDENTITY_EXPIRED:"La publicación de esta identidad ha caducada: esta persona 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:"Identificador secreto 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 envió una solicitud de membresía. Ella tendrá que hacerlo si desea hacerse 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:{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 una persona <b>física y viva</b>.<li>2.) su propietario <b>posee otra cuenta</b> ya certificada.<li>3.) su propietario viola (voluntariamente o no) la regla 1 o 2 (por ejemplo certificando cuentas falsas o duplicadas).</ul><br/><b>¿Desea</b> todavía certificar esta identidad?',FULLSCREEN:"¿ Mostrar la aplicación en pantalla completa ?",EXIT_APP:"¿ Cerrar la aplicación ?",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>?",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>."},MODE:{DEMO:{BADGE:"Demo",MODE:"Modo de demostración",FEATURE_NOT_AVAILABLE:"Funcionalidad <b>no disponible</b> en este sitio de demostración.",MODE_HELP:"Cesium funciona en <b> modo de demostración </b>: la consulta está disponible, pero no se puede realizar ninguna operación.",INSTALL_HELP:"Por <b>razones de seguridad</b> recomendamos <b>instalar</b> su copia del software.<br/>Visite el sitio de Internet <a href='https://cesium.app'> www.cesium.app </a> para obtener ayuda."},READONLY:{BADGE:"Monit",MODE:"Modo de supervisión",MODE_HELP:"Cesium funciona en <b> modo de supervisión </b>: solo están disponibles las funciones de monitoreo de divisas.",INSTALL_HELP:"Si desea <b>crear una cuenta</b> para enviar o recibir dinero, le recomendamos <b>instalar</b> su copia del software.<br/>Visite el sitio de Internet <a href='https://cesium.app'> www.cesium.app </a> para obtener ayuda."}},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 identificador, 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:'El identificador secreto 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/>Un buen identificador secreto debe ser suficientemente largo (al menos 8 carácteres) y lo más original posible.',PASSWORD:'La contraseña es muy importante. Junto al identificador secreto, 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 identificador secreto, para limitar los intentos 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:{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 del identificador secreto y la contraseña.",MEMBER:"Miembro",MEMBER_DEF:'Cada miembro es una persona humana física y viva, 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.',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.",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."},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|abbreviate}}</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|abbreviate}}</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|abbreviate}}</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|abbreviate}}</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 las personas 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 otras personas.",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>una persona humana viva</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>personas físicas vivas</b>, que no posean ya ninguna otra cuenta miembro.<br/><br/>¡La seguridad de la red de la moneda depende del cuidado de cada persona!",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|abbreviate}}</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.",END_READONLY:"La visita guiada ha <b>terminado</b>.<br/><br/>{{'MODE.READONLY.INSTALL_HELP'|translate}}."}}}),e.translations("fr-FR",{COMMON:{APP_NAME:"Cesium",APP_VERSION:"v{{version}}",APP_BUILD:"date : {{build}}",PUBKEY:"Clé publique",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_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 trouvé",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|abbreviate}}",MESSAGE_READONLY:"Suivez l'état de la monnaie libre {{currency|abbreviate}} en temps réel.",BTN_CURRENCY:"Explorer la monnaie {{currency|abbreviate}}",BTN_ABOUT:"à propos",BTN_HELP:"Aide en ligne",BTN_NETWORK:"État du réseau",FREE_SOFTWARE:"Logiciel libre",FORK_ME:"Cloner 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|formatPubkey}}</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",PEER:"Nœud Duniter",PEER_SHORT:"Nœud Duniter",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",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|formatInteger}}",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",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|abbreviate}} 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_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:"Emise au bloc #{{block}}",WRITTEN_ON_BLOCK:"Ecrite 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:"{{uid}} - 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"}},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",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",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",SCAN:"Scanner un QR code"},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",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",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 executé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 suffisamment de membres, faites-le savoir 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_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|capitalize}} est très simple. Veuillez néanmoins prendre suffisament de temps pour faire correctement cette formalité (pour ne pas oublier les identifiants, mots de passe, etc.).",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>{{'COMMON.BTN_START'|translate}}</b> pour débuter la création de compte. Vous serez guidé étape par étape.",REGISTRATION_NODE:"Votre inscription sera enregistrée via le noeud Duniter <b>{{server}}</b>, qui le diffusera ensuite au reste du réseau de la monnaie.",REGISTRATION_NODE_HELP:"Si vous ne faites pas confiance en ce noeud, veuillez en changer <a ng-click=\"doQuickFix('settings')\">dans les paramètres</a> de Cesium.",SELECT_ACCOUNT_TYPE:"Choisissez le type de compte à créer :",MEMBER_ACCOUNT:"Compte membre",MEMBER_ACCOUNT_TITLE:"Création d'un compte membre",MEMBER_ACCOUNT_HELP:"Si vous n'êtes pas encore inscrit en tant qu'individu (un seul compte possible par individu). Ce compte permet de co-produire la monnaie, en recevant un <b>dividende universel</b> chaque {{parameters.dt|formatPeriod}}.",WALLET_ACCOUNT:"Simple portefeuille",WALLET_ACCOUNT_TITLE:"Création d'un portefeuille",WALLET_ACCOUNT_HELP:"Pour tous les autres cas, par exemple si vous avez besoin d'un compte supplémentaire.<br/>Aucun dividende universel ne sera créé par ce compte.",SALT_WARNING:"Choisissez votre identifiant secret.<br/>Il vous sera demandé à chaque connexion sur ce compte.<br/><br/><b>Retenez le bien</b> : en cas de perte, plus personne ne pourra accéder à votre compte !",PASSWORD_WARNING:"Choisissez un mot de passe.<br/>Il vous sera demandé à chaque connexion sur ce compte.<br/><br/><b>Retenez bien ce mot de passe</b : en cas de perte, plus personne ne pourra accéder à votre compte !",PSEUDO_WARNING:"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>",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"},POPUP_REGISTER:{TITLE:"Choisissez un pseudonyme",HELP:"Un pseudonyme est obligatoire pour devenir membre."},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_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",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.",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",BTN_SEND:"Envoyer",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).",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_NOT_INT:"Valeur entière attendue",FIELD_NOT_EMAIL:"Adresse email non valide",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é.",NOT_ENOUGH_CREDIT:"Crédit insuffisant.",INVALID_NODE_SUMMARY:"Nœud injoignable ou adresse invalide.",INVALID_USER_ID:"Le pseudonyme 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_DONE:"Certification envoyé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:{POPUP_TITLE:"<b>Confirmation</b>",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> : sono disponibili solo le funzionalità di monitoraggio della valuta.",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.'},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 recoivent sur leur compte la meme 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érorie 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|abbreviate}}</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|abbreviate}}</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|abbreviate}}</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|abbreviate}}</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érer.",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|abbreviate}}</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}}."}},API:{COMMON:{LINK_DOC:"Documentation API",LINK_DOC_HELP:"Documentation pour les développeurs",LINK_STANDARD_APP:"Version classique",LINK_STANDARD_APP_HELP:"Ouvrir la version classique de {{'COMMON.APP_NAME'|translate}}",CONNECTION_ERROR:"Nœud <b>{{server}}</b> injoignable ou adresse invalide.<br/><br/>Vérifiez votre connexion Internet, ou contactez l'administrateur du site."},HOME:{TITLE:"Documentation API {{'COMMON.APP_NAME'|translate}}",MESSAGE:'Bienvenue dans la <b>documentation de l\'API</b> {{\'COMMON.APP_NAME\'|translate}}.<br/>Connectez vos sites web à <a href="http://duniter.org" target="_system">Duniter</a> très simplement !',MESSAGE_SHORT:'Connectez vos sites à <a href="http://duniter.org" target="_system">Duniter</a> très simplement !',DOC_HEADER:"Services disponibles :"},TRANSFER:{TITLE:"{{'COMMON.APP_NAME'|translate}} - Paiement en ligne",TITLE_SHORT:"Paiement en ligne",SUMMARY:"Récapitulatif du paiement :",AMOUNT:"Montant :",AMOUNTS_HELP:"Veuillez choisir le montant :",NAME:"Nom :",PUBKEY:"Clé publique du destinataire :",COMMENT:"Référence de l'opération :",NODE:"Adresse du nœud :",DEMO:{SALT:"demo",PASSWORD:"demo",PUBKEY:"3G28bL6deXQBYpPBpLFuECo46d3kfYMJwst7uhdVBnD1",HELP:"<b>Mode démonstration</b> : Aucun paiement ne sera réellement envoyé pendant cette simulation.<br/>Veuillez utiliser les identifiants : <b>{{'API.TRANSFER.DEMO.SALT'|translate}} / {{'API.TRANSFER.DEMO.PASSWORD'|translate}}</b>",BAD_CREDENTIALS:"Vérifiez votre saisie.<br/>En mode démonstration, les identifiants sont : {{'API.TRANSFER.DEMO.SALT'|translate}} / {{'API.TRANSFER.DEMO.PASSWORD'|translate}}"},INFO:{SUCCESS_REDIRECTING_WITH_NAME:"Paiement envoyé.<br/>Redirection vers <b>{{name}}</b>...",SUCCESS_REDIRECTING:"Paiement envoyé.<br/>Redirection vers le site du vendeur...",CANCEL_REDIRECTING_WITH_NAME:"Paiement annulé.<br/>Redirection vers <b>{{name}}</b>...",CANCEL_REDIRECTING:"Paiement annulé.<br/>Redirection vers le site du vendeur..."},ERROR:{TRANSFER_FAILED:"Échec du paiement"}},DOC:{DESCRIPTION_DIVIDER:"Description",URL_DIVIDER:"Adresse d'appel",PARAMETERS_DIVIDER:"Paramètres",AVAILABLE_PARAMETERS:"Voici la liste des paramètres possibles :",DEMO_DIVIDER:"Tester",DEMO_HELP:"Pour tester ce service, cliquez sur le bouton ci-contre. Le résultat s'affichera en dessous.",DEMO_RESULT:"Résultat retourné par l'appel :",DEMO_RESULT_PEER:"Adresse du nœud utilisé :",DEMO_SUCCEED:'<i class="icon ion-checkmark"></i> Succès !',DEMO_CANCELLED:'<i class="icon ion-close"></i> Annulé par l\'utilisateur',INTEGRATE_DIVIDER:"Intégrer",INTEGRATE_CODE:"Code :",INTEGRATE_RESULT:"Prévisualisation du résultat :",INTEGRATE_PARAMETERS:"Paramètres",TRANSFER:{TITLE:"Paiements",DESCRIPTION:"Depuis un site (ex: vente en ligne) vous pouvez déléguer le paiement en monnaie libre à Cesium API. Pour cela, il vous suffit de déclencher l'ouverture d'une page sur l'adresse suivante :",PARAM_PUBKEY:"Clé publique du destinataire",PARAM_PUBKEY_HELP:"Clé publique du destinataire (obligatoire)",PARAM_AMOUNT:"Montant",PARAM_AMOUNT_HELP:"Montant de la transaction (obligatoire). Valeurs multiples autorisées, en utilisant un séparateur (point-virgule, barre verticale ou espace).",PARAM_COMMENT:"Référence (ou commentaire)",PARAM_COMMENT_HELP:"Référence ou commentaire. Vous permettra par exemple d'identifier le paiement dans la BlockChain.",PARAM_NAME:"Nom (du destinataire ou du site web)",PARAM_NAME_HELP:'Le nom du destinataire, ou du site web appelant. Cela peut être un nom lisible ("Mon site en ligne"), ou encore une pseudo-adresse web ("MonSite.com").',PARAM_REDIRECT_URL:"Adresse web de redirection",PARAM_REDIRECT_URL_HELP:'Adresse web (URL) de redirection, appelé quand le paiement a été envoyé. Peut contenir les chaînes suivantes, qui seront remplacées par les valeurs de la transaction : "{tx}", "{hash}", "{comment}", "{amount}", "{pubkey}" et "{node}".',PARAM_CANCEL_URL:"Adresse web d'annulation",PARAM_CANCEL_URL_HELP:'Adresse web (URL) en cas d\'annulation du paiement, par l\'utilisateur. Peut contenir les chaînes suivantes, qui seront remplacées dynamiquement : "{comment}", "{amount}" et "{pubkey}".',PARAM_PREFERRED_NODE:"Adresse du nœud préféré",PARAM_PREFERRED_NODE_HELP:'Adresse (URL) du nœud Duniter à utiliser de préférence ("g1.domaine.com:443" ou "https://g1.domaine.com").',EXAMPLES_HELP:"Voici des exemples d'intégration :",EXAMPLE_BUTTON:"Bouton HTML",EXAMPLE_BUTTON_DEFAULT_TEXT:"Payer en {{currency|currencySymbol}}",EXAMPLE_BUTTON_DEFAULT_STYLE:"Style personnalisé",EXAMPLE_BUTTON_TEXT_HELP:"Texte du bouton",EXAMPLE_BUTTON_BG_COLOR:"Couleur du fond",EXAMPLE_BUTTON_BG_COLOR_HELP:"Exemple : #fbc14c, black, lightgrey, rgb(180,180,180)",EXAMPLE_BUTTON_FONT_COLOR:"Couleur du texte",EXAMPLE_BUTTON_FONT_COLOR_HELP:"Exemple : black, orange, rgb(180,180,180)",EXAMPLE_BUTTON_TEXT_ICON:"Icône",EXAMPLE_BUTTON_TEXT_WIDTH:"Largeur",EXAMPLE_BUTTON_TEXT_WIDTH_HELP:"Exemple : 200px, 50%",EXAMPLE_BUTTON_ICON_NONE:"Aucune",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 (noir)"}}}}),e.translations("it-IT",{COMMON:{APP_NAME:"Cesium",APP_VERSION:"v{{version}}",APP_BUILD:"build {{build}}",PUBKEY:"Chiave privata",MEMBER:"Membro",BLOCK:"Blocco",BTN_OK:"OK",BTN_YES:"Si",BTN_NO:"No",BTN_SEND:"Inviare",BTN_SEND_MONEY:"Trasferire soldi",BTN_SEND_MONEY_SHORT:"Trasferire",BTN_SAVE:"Salvare",BTN_YES_SAVE:"Si, salvare",BTN_YES_CONTINUE:"Si, 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:"Importazione",BTN_CANCEL:"Cancellare",BTN_CLOSE:"Chiudere",BTN_LATER:"Più tardi",BTN_LOGIN:"Accedi",BTN_LOGOUT:"Log out",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 questo schermo",BTN_DOWNLOAD:"Scaricare",BTN_DOWNLOAD_ACCOUNT_STATEMENT:"Scaricare estratto conto",BTN_MODIFY:"Modificare",CHOOSE_FILE:"Trascini un file <br/>o cliccare 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 dal nodo peer 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:"eeseguit 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:"Home",WOT:"Annuario",CURRENCY:"Moneta",ACCOUNT:"Mio conto",WALLETS:"I miei portafogli",SETTINGS:"Impostazioni",NETWORK:"Rete",TRANSACTIONS:"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 esitate a parlarci delle anomalie riscontrate",REPORT_ISSUE:"Segnalare un bug"},HOME:{TITLE:"Cesium",WELCOME:"Benvenuti nell'Cesium App!",WELCOME_READONLY:"Benvenuti nell'Cesium <span class='badge badge-balanced'>Monit</span>!",MESSAGE:"Scambiate in moneta libera {{currency|abbreviate}}",MESSAGE_READONLY:"Monitoraggio in tempo reale di moneta libera {{currency|abbreviate}}",BTN_CURRENCY:"Esplorare la moneta {{currency|abbreviate}}",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:'Peer <b>{{server}}</b> irraggiungibile o indirizzo invalido. <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:"Conservazione",NETWORK_SETTINGS:"Rete",PEER:"Indirizzo peer Duniter",PEER_SHORT:"Indirizzo peer",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/a da una sessione all'altra, conservando la chiave localmente.",PLUGINS_SETTINGS:"Estensioni",BTN_RESET:"Ripristini valori predefiniti",EXPERT_MODE:"Abilitare modlità eseperto",EXPERT_MODE_HELP:"Permette di vedere più dettagli",POPUP_PEER:{TITLE:"Peer Duniter",HOST:"Indirizzo",HOST_HELP:"Indirizzo: server:port",USE_SSL:"Securizzato?",USE_SSL_HELP:"(SSL Encryption)",BTN_SHOW_LIST:"Lista dei peers"}},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 formatto",HASH:"Hash calcolato",UNIVERSAL_DIVIDEND_HELP:"Moneta co-prodotta da ciasciun dei {{membersCount}} membri",EMPTY:"Nessun dati in questo blocco",POW_MIN:"Difficoltà minimale",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:"",LEAVERS_COUNT_HELP:"Membri che si sono fatti escludere dalla 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 questi conti non siano più attivi",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:"Web of trust",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à a testa",UD:"Dividendo universale",C_ACTUAL:"Crescita attuale",MEDIAN_TIME:"Current blockchain time",POW_MIN:"Difficoltà commune",MONEY_RULES_DIVIDER:"Regole della moneta",C_RULE:"Obbietivo teorico di crescità",UD_RULE:"Dividendo universale (formula)",DT_REEVAL:"Periodo tra due re-evaluazioni del UD",REEVAL_SYMBOL:"reeval",DT_REEVAL_VALUE:"Ogni <b>{{dtReeval|formatDuration}}</b> ({{dtReeval/86400}} {{'COMMON.DAYS'|translate}})",UD_REEVAL_TIME0:"Data della prima re-evaluzione del UD",SIG_QTY_RULE:"Numero di certificazioni requisiti 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 certificazione venga studiata",SIG_VALIDITY:"Durata di vita di una certificazione che è state presa in conto",MS_WINDOW:"Periodo massimo prima che una certificazione pendente sia validata",MS_VALIDITY:"Durata di vita di un'adesione che è state presa in conto",STEP_MAX:"Distanza massima tra un nuovo membro e ogni membro referente.",WOT_RULES_DIVIDER:"Regole della Web of Trust",SENTRIES:"Numero di certificazioni (date <b>e</b> ricevute) per diventare membro referente ",SENTRIES_FORMULA:"Numero di certificazioni necessarie per diventare membro (formula)",XPERCENT:"Percentaggio minimino di membri referenti per rispettare la regola di distanza tra i membri",AVG_GEN_TIME:"Tempo medio tra due blocchi",CURRENT:"attuale",MATH_CEILING:"CEILING",DISPLAY_ALL_RULES:"Mostrare tutte le regole?",BTN_SHOW_LICENSE:"Mostrare licenza",WOT_DIVIDER:"Web of trust"},LICENSE:{TITLE:"Licensa attuale",BTN_DOWNLOAD:"Scaricare il file",NO_LICENSE_FILE:"File di licenza non trovato ."}},NETWORK:{VIEW:{MEDIAN_TIME:"Blockchain time",LOADING_PEERS:"Caricando peers...",NODE_ADDRESS:"Indirizzo del peer",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:"Peers-Nodi",SIGNED_ON_BLOCK:"Firmato nel blocco",MIRROR:"Specchio",MIRRORS:"Specchio",MIRROR_PEERS:"Peers specchio",PEER_LIST:"Lista dei peers",MEMBERS:"Membri",MEMBER_PEERS:"Peers membri",ALL_PEERS:"Tutti i peers",DIFFICULTY:"Difficoltà",API:"API",CURRENT_BLOCK:"Blocco #",POPOVER_FILTER_TITLE:"Filtro",OFFLINE:"Sconessi",OFFLINE_PEERS:"Peers sconessi",BTN_SHOW_PEER:"Mostrare peer",VIEW:{TITLE:"Peer",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:"Peers conosciuti :",GENERAL_DIVIDER:"Informazioni generali",ERROR:{LOADING_TOR_NODE_ERROR:"Impossibile ottenere i dati del peer, periodo di attesa scaduto.",LOADING_NODE_ERROR:"Impossibile ottenere i dati del peer"}}},WOT:{SEARCH_HELP:"Cercare (membro o chiave pubblica)",SEARCH_INIT_PHASE_WARNING:"La ricerca per le certificazioni pendenti <b>può essere lunga</b> durante la fase di pre-certificazione. La preghiamo di attendere...",REGISTERED_SINCE:"Certificato/a dal",REGISTERED_SINCE_BLOCK:"Certificato/a 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à pendente)",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 semplice portafoglio osservatore, 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 pendenti",PENDING_COUNT:"{{count}} inscrizioni pendenti",REGISTERED:"Registrato {{sigDate | formatFromNow}}",MEMBER_FROM:"Membro dal {{memberDate|medianFromNowShort}}",BTN_NEWCOMERS:"Ultimi membri",BTN_PENDING:"Registrazioni pendenti",SHOW_MORE:"Vedere di più",SHOW_MORE_COUNT:"(limite attuale di {{limit}})",NO_PENDING:"Nessuna certificazione pendente.",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 pendenti",RECEIVED:"Certificazioni ricevute",RECEIVED_BY:"Certifications ricevute da {{uid}}",ERROR:"Certificazioni ricevute per errore",SENTRY_MEMBER:"Membro referente"},OPERATIONS:{TITLE:"{{uid}} - 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 privata:",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:"Passsord",PASSWORD_HELP:"Password",PUBKEY_HELP:"Chiave pubblica, pseudonimo",NO_ACCOUNT_QUESTION:"Ancora non hai un conto?",HAVE_ACCOUNT_QUESTION:"Hai già un account?",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:"Salatura standard (imp. predefinita)",SCRYPT_ADVANCED:"Salatura avanzata",FILE:"File del portachiavi",PUBKEY:"Chiave pubblica soltanto",SCAN:"Scansiona un codice QR"},SCRYPT:{SIMPLE:"Salatura leggera",DEFAULT:"Salatura standard",SECURE:"Salatura sicura",HARDEST:"Salatura più sicura",EXTREME:"Salatura estrema",USER:"Salatura personalizzata",N:"N (Loop):",r:"r (RAM):",p:"p (CPU):"},FILE:{HELP:"Format 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 nell\'account <i class="ion-person"></i> {{uid}}:',EXPECTED_PUBKEY_HELP:'Si prega di autenticarsi sul portafoglio <i class="ion-key"></i> {{pubkey|formatPubkey}}:',SCAN_FORM_HELP:"Scansiona il codice QR della <b>chiave privata</b> del portafoglio."},ACCOUNT:{TITLE:"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 pendenti",VALIDATING_TX:"Transazioni in corso di convalida",ERROR_TX:"Transaction 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:"Mancherai a breve <b>di certificazioni</b> (occorrono almeno {{willNeedCertificationCount}} altre certificazioni)",WILL_NEED_RENEW_MEMBERSHIP:"Tua certificazione <b>scaderà{{membershipExpiresIn|formatDurationTo}}</b>. Ricordati di <a ng-click=\"doQuickFix('renew')\">rinnovarla</a> prima.",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>.",NO_WAITING_MEMBERSHIP:"Nessuna domanda di adesione pendente. 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 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:"Visualizzare dati tecnici",LOCKED_OUTPUTS_POPOVER:{TITLE:"Importo bloccata",DESCRIPTION:"Ecco le condizioni per sbloccare questo importo:",DESCRIPTION_MANY:"Questa transazione è fatta da diverse parti, di cui queste sono le condizioni di sblocco:",LOCKED_AMOUNT:"Condizioni per l'importo:"},NEW:{TITLE:"Registrazione",INTRO_WARNING_TIME:"Crearsi un conto su {{name|capitalize}} è molto semplice. E consigliato prendere il giusto tempo per farlo correttamente (per evitare di dimenticare passwords, pseudonimi etc.).",INTRO_WARNING_SECURITY:"Occorre verificare che il hardware che stai utilizzando (computer, tablet, cellulare) <b>è sicuro e affidabile</b>.",INTRO_WARNING_SECURITY_HELP:"Anti-virus aggiornato, firewall abilitato, session protteta da un password o codice PIN...",INTRO_HELP:"Cliccare <b> {{'COMMON.BTN_START'|translate}}</b> per avviare la creazione del conto. Ti accompagniamo passo alla volta.",REGISTRATION_NODE:"Tua iscrizione verrà salvata dal nodo peer Duniter <b>{{server}}</b>, è verrà poi condivisa nella rete della moneta.",REGISTRATION_NODE_HELP:"Se non ti fidi di questo peer, 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 a persona soltanto).",WALLET_ACCOUNT:"Semplice portafoglio",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/>E 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 communicata a chi ti deve pagare per esempio.<br/>Quando tuo conto verrà approvato potrai trovare la chiave qui <b>{{'ACCOUNT.TITLE'|translate}}</b>.",CONFIRMATION_MEMBER_ACCOUNT:'<b class="assertive">Warning:</b> tuo identificare segreto, tua password e 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> tuo identificare segreto, 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:"TPer 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:"Un 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 dei tuoi credenziali. Ti permette <b> di rimuovere tuo conto dalla Web Of Trust</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 in 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 quand eri studente ?",QUESTION_13:"In che città si sono conosciuti 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 tuo nonno ?",RECOVER_ID:"Ricuperare mia password...",RECOVER_ID_HELP:"Se hai un<b<file di backup dei tuoi 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 tuoi 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 Tela di Fiducia</b>.",REVOCATION_WITH_FILE_HELP:"Se hai <b>definitivamente perso tuoi credenziali (o se la sicurezza del tuo conto è compromessa), puoi usare <b>il file di revoca</b> del conto <b>per uscire dalla Web Of Trust</b>.",REVOCATION_WALLET:"Revocare questo conto subito",REVOCATION_WALLET_HELP:"Richiedere la cancellazione dell'identità <b>revocherà la tua adesione alla tua rete</ b> (con certezza per il pseudonimo e 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 miei credenziali...",SAVE_ID_HELP:"Creare un file di backup, per <b>ricuperare 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:"Date",AMOUNT:"Amount",COMMENT:"Comment"}},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 comento ?",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:"Suo navigatore non sembra compatibile con le funzionalità di cryptografia.",EQUALS_TO_PSEUDO:"Deve essere diverso dal pseudonimo",EQUALS_TO_SALT:"Deve essere diverso dal 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 al identificativo segreto.",SEND_IDENTITY_FAILED:"Iscrizione fallita.",SEND_CERTIFICATION_FAILED:"Certificazione fallita.",NEED_MEMBER_ACCOUNT_TO_CERTIFY:"Non puoi inviare certificazioni perche tuo conto <b>non è ancora un conto membro</b>.",NEED_MEMBER_ACCOUNT_TO_CERTIFY_HAS_SELF:"Non puoi inviare certificazioni adesso perche <b>non sei ancora membro</b>.<br/><br/>Devi ancora entrare nella WOT.",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 WOT fallito.",SEND_MEMBERSHIP_OUT_FAILED:"Errore nel 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 nel 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 ricuperare foto.",SCAN_FAILED:"Impossibile scansionare il codice QR.",SCAN_UNKNOWN_FORMAT:"Codice non riconosciuto.",WOT_LOOKUP_FAILED:"Ricerca fallita.",LOAD_PEER_DATA_FAILED:"Peer Duniter non accessibile. Riprovare più tardi.",NEED_LOGIN_FIRST:"Accedi al tuo conto prima.",AMOUNT_REQUIRED:"Importo necessario.",AMOUNT_NEGATIVE:"Importo negativo non consentito.",NOT_ENOUGH_CREDIT:"Saldo insufficiente",INVALID_NODE_SUMMARY:"Impossibile comunicare col peer o indirizzo non valido",INVALID_USER_ID:"Il campo del '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:"Checkum 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 evaluazione. 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 peers): 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 da Cesium non puo ricevere altre domande di certificazione per ora, la lista d'attesa è piena.<br/><br/>Riprova più tardi o scegli un'altro peer 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:"Tua domanda di certificazione non è più valida (perche si riferisce ad un blocco che è stato eliminato dai peers).<br/>Devi <a ng-click=\"doQuickFix('renew')\">rinnvoare la tua richiesta di adesione alla WOT</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>: ne tuo pseudonimo ne 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/>Tuo certificato è ancora valido (scade {{expiresIn|formatDuration}}).",IDENTITY_ALREADY_CERTIFY_PENDING:"Hai <b>già certificato</b> questa identità.<br/><br/>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 era un membro) per poter fare questo.",ONLY_SELF_CAN_EXECUTE_THIS_ACTION:"Devi aver <b>publiccato 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 ricuperare 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:"Tuoi 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 cambi tuoi credenziali in modo che corrispondino ad un conto non utilizzato.",GET_LICENSE_FILE_FAILED:"Impossibile caricare il file della licenza",CHECK_NETWORK_CONNECTION:"Nessun peer sembra disponibile.<br/><br/>Per favore <b>verifica la tua connessione Internet</b>.",ISSUE_524_TX_FAILED:"Bonifico .<br/><br/>Un message a été envoyé aux développeurs pour faciliter la résolution du problème. <b>Merci de votre aide</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à un membro.",IDENTITY_WILL_MISSING_CERTIFICATIONS:"Questa identità mancherà a breve di 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:{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 oersona 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/a 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> - Comento: <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/a di voler cancellare la tua presenza nella WOT?</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> mientre digitavi i tuoi credenziali. Per favore riprova, verificando che la <b>chiave pubblica sia 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:"Tua domanda di certificazione sarà inviata alla rete.<br/></br/><b>Sei sicuro/a?</b>",MEMBERSHIP:"Tua domanda per diventare membro sta per essere inviata alla rete.<br/></br/><b>Sei sicuro/a/b> di voler continuare ?",RENEW_MEMBERSHIP:"Tua adesione verrà rinnovata.<br/></br/><b>Sei sicuro/a?</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> (per un conto membro).<br/></br/><b>Sei sicuro/a</b> di voler revocare questa identità?",REVOKE_IDENTITY_2:"Questa operazione è <b>irreversibile</b>!<br/><br/>Sei sicuro/a di volern<b>revocare questa identità</b>?",NOT_NEED_RENEW_MEMBERSHIP:"Tua presenza nella rete non deve ancora essere rinnovata (scaderà tra {{membershipExpiresIn|formatDuration}}).<br/></br/><b>Sei sicuro/a</b> di voler rinnovare la tua presenza?",SAVE_BEFORE_LEAVE:"Vuoi <b>salvare tue modifiche</b> prima di uscira dalla pagina?",SAVE_BEFORE_LEAVE_TITLE:"Modifiche non salvate",LOGOUT:"Sei sicuro/a di voler chiudere la sessione?",USE_FALLBACK_NODE:"Peer <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 cesio funziona in <b>modalità dimostrativa</b>: è disponibile la consultazione per conto, ma non è possibile eseguire alcuna operazione per conto.",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 cesio 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 cancellazione 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 tuo conto (nel caso di violazione del conto, della tua identità, conto creato con errori, etc.).<br/><br/><b>Tiene questo document al sicuro.</b>"},HELP:{TITLE:"Aiuto online",JOIN:{SECTION:"Entrare nella rete",SALT:"Il tuo identificativo segreto è molto importante. E utilizzato per cryptare tua password che permette poi di calcolare tua <span class=\"text-italic\">chiave pubblica</span> (suo numero) è la chiave privata che ne consenta l'accesso.<br/><b>Ricordati bene di questo identificativo</b>, perche non ti potrà aiutare nessuno se lo perdi.<br/>Tra l'altro, non puo 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 tuo numero di conto (tua chiave pubblica) e la chiave privata che ne consento l'accesso.<br/><b>Ricordatila bene</b>, perche non ti potrà aiutare nessuno se lo 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 sua <span class="text-italic">chiave pubblica</span>).<br/>E pubblicato sulla rete perche gli altri membri possino identificarla, certificarla o invarle soldi. <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 dai 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>salatura (leggera o sicura)</b> tua password sarà cryptata dal tuo identificativo segreto per scoraggiare tentativi di attachi di 'brute force' (per esempio con passwords conosciute).<br/> - Accedendo con la <b>chiave pubblica</b> ti evita di dover digitare tuoi credenziali che ti saranno chiesti solo quando vorrai fare una operazione col conto.<br/> - Accedendo <b>con un portachiavi</b> che leggerà tue chiave pubbliche e private da un file esterno, senza che tu li debba entrare."},GLOSSARY:{SECTION:"Glossario",PUBKEY_DEF:"Una chiave pubblica permette di identificare un portafoglio. Puo anche identificare un membro. In 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 puo inviare, etc.<br/><br/>I parametri non possono essere modificati perche c\'è una<span class="text-italic">Blockchain</span> che implementa e 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 mathematiche definite nelle <span class="text-italic">regole della moneta</span>.<br/>Al inizio di ogni periodo, il conto di ogni membro riceve una quantità uguale della nuova moneta creata. <br/><br/>Il DU conosce una crescita costante per rimanere equo nei confronti dei membri (attuali e passati). Viene calcolato tenendo in conto la speranza di vità media, cosi come dimostrato nella Teoria Relativa della Moneta (TRM).<br/><a href="http://trm.creationmonetaire.info" target="_system">Saperne 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 WoT 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 <b>hanno gli altri</b> sul loro conto (in media).",CURRENCY_UNIT_RELATIVE:"L'unità usata qui (&ldquo;<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</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|abbreviate}}</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|abbreviate}}</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>peers</b> mostrati qui corrispondono a <b>dei computers che aggiornano e monitorano</b> la blockchain.<br/><br/>Più peers 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 peer (ultima pagina scritta nel regitro).<br/><br/>Il verda indica che il blocco è stato validato anche dalla <b>maggioranza degli altri peers</b>.",NETWORK_PEERS_PARTICIPATE:'<b>Ogni membro</b>, che dispone di un computer connesso a Internet <b>puo partecipare, aggiungendosi come peer 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 date</b>.",WALLET_BALANCE:"Il <b>soldo</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|abbreviate}}</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 perche possa identificare tuo conto.",WALLET_SEND:"Paghi in pochi clics.",WALLET_SEND_NO_MONEY:"Paghi in pochi clics.<br/>(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 di Cesium quando hai un attimo!",WALLET_RECEIVED_CERTS:"Questo mostra l'elenco delle persone che ti hanno fatto entrare nella WoT.",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:"Tuo stock di certificazioni da dare è limitato a <b>{{sigStock}} certificazioni</b>.<br/><br/>Questo stock si rifornisce col 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 nel annuario, 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 nel annuario, digita <b>le prime lettere dello pseudonimo o della chiave pubblica di un utente</b>.<br/><br/>Dopodichè calca <b>Enter</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> Certifichi <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:"Les <b>{{'MENU.SETTINGS'|translate}}</b> ti permettono di configurare 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|abbreviate}}</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 Web of Trust {{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:'Bienvenue dans la <b>documentation de l\'API</b> {{\'COMMON.APP_NAME\'|translate}}.<br/>Connecter vos sites web à <a href="http://duniter.org" target="_system">Duniter</a> très simplement !',MESSAGE_SHORT:'Connecter vos sites à <a href="http://duniter.org" target="_system">Duniter</a> très simplement !',DOC_HEADER:"Services disponibles :"},TRANSFER:{TITLE:"{{'COMMON.APP_NAME'|translate}} - Paiement en ligne",TITLE_SHORT:"Pagamento online",SUMMARY:"Récapitulatif de la commande :",AMOUNT:"Montant :",NAME:"Nom :",PUBKEY:"Clé publique du destinaire :",COMMENT:"Référence de la commande :",DEMO:{SALT:"demo",PASSWORD:"demo",PUBKEY:"3G28bL6deXQBYpPBpLFuECo46d3kfYMJwst7uhdVBnD1",HELP:"<b>Mode démonstration</b> : Aucun paiement ne sera réellement envoyé pendant cette simulation.<br/>Veuillez utiliser les identifiants : <b>{{'API.TRANSFER.DEMO.SALT'|translate}} / {{'API.TRANSFER.DEMO.PASSWORD'|translate}}</b>",BAD_CREDENTIALS:"Vérifiez votre saisie.<br/>En mode démonstration, les identifiants sont : {{'API.TRANSFER.DEMO.SALT'|translate}} / {{'API.TRANSFER.DEMO.PASSWORD'|translate}}"},INFO:{SUCCESS_REDIRECTING_WITH_NAME:"Paiement envoyé.<br/>Redirection vers <b>{{name}}</b>...",SUCCESS_REDIRECTING:"Paiement envoyé.<br/>Redirection vers le site du vendeur...",CANCEL_REDIRECTING_WITH_NAME:"Paiement annulé.<br/>Redirection vers <b>{{name}}</b>...",CANCEL_REDIRECTING:"Paiement annulé.<br/>Redirection vers le site du vendeur..."},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 dal 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 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 (obliggatoria)",PARAM_AMOUNT:"Importo",PARAM_AMOUNT_HELP:"Importo della transazione (obligatorio)",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 (de destinatario o del sito web)",PARAM_NAME_HELP:'Nom 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:"Ecco esempi di integrazione :",EXAMPLE_BUTTON:"Bottone HTML",EXAMPLE_BUTTON_DEFAULT_TEXT:"Pagare in {{currency|currencySymbol}}",EXAMPLE_BUTTON_DEFAULT_STYLE:"Stile personnalizzato",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)"}}}}),e.translations("nl-NL",{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|abbreviate}} 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"},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:{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/><bWeet 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|abbreviate}}</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|abbreviate}}</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|abbreviate}}</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|abbreviate}}</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|abbreviate}}</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."}}})}]),angular.module("cesium-api",["ionic","ionic-material","ngMessages","pascalprecht.translate","ngApi","angular-cache","angular.screenmatch","angular-fullscreen-toggle","cesium.filters","cesium.config","cesium.platform","cesium.templates","cesium.translations","cesium.directives","cesium.services","cesium.api.demo.services","cesium.login.controllers","cesium.help.controllers"]).config(["$stateProvider","$urlRouterProvider",function(e,t){e.state("app",{url:"/app",abstract:!0,templateUrl:"templates/api/menu.html",controller:"ApiCtrl"}).state("app.home",{url:"/home?result&service&cancel&node",views:{menuContent:{templateUrl:"templates/api/home.html",controller:"ApiDocCtrl"}}}).state("api",{url:"/v1",abstract:!0,templateUrl:"templates/api/menu.html",controller:"ApiCtrl"}).state("api.transfer",{cache:!1,url:"/payment/:pubkey?name&amount&udAmount&comment&preferred_node&redirect_url&cancel_url&demo&error",views:{menuContent:{templateUrl:"templates/api/transfer.html",controller:"ApiTransferCtrl"}}}),t.otherwise("/app/home")}]).controller("ApiCtrl",["$scope","$state","$translate","$ionicPopover","UIUtils","Modals","csSettings",function(e,t,i,n,a,o,r){e.locales=angular.copy(r.locales),e.showAboutModal=function(e){e.preventDefault(),o.showAbout()},e.showHome=function(){t.go("app.home")},e.changeLanguage=function(t){i.use(t),e.hideLocalesPopover(),r.data.locale=_.findWhere(e.locales,{id:t})},e.showLocalesPopover=function(t){a.popover.show(t,{templateUrl:"templates/api/popover_locales.html",scope:e,autoremove:!0,afterShow:function(t){e.localesPopover=t}})},e.hideLocalesPopover=function(){e.localesPopover&&(e.localesPopover.hide(),e.localesPopover=null)}}]).controller("ApiDocCtrl",["$scope","$rootScope","$state","$translate","$sce","csCurrency",function(e,t,i,n,a,o){e.loading=!0,e.transferData={pubkey:"G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU",amount:100,comment:"REFERENCE",name:"www.domain.com",preferred_node:void 0,redirect_url:"http://www.domain.com/payment?ref={comment}&tx={tx}&node={node}",cancel_url:"http://www.domain.com/payment?ref={comment}&cancel"},e.transferButton={html:void 0,showParameters:!1,icons:[{label:"API.DOC.TRANSFER.EXAMPLE_BUTTON_ICON_NONE"},{label:"API.DOC.TRANSFER.EXAMPLE_BUTTON_ICON_DUNITER",filename:"../img/logo_duniter_32px.png"},{label:"API.DOC.TRANSFER.EXAMPLE_BUTTON_ICON_CESIUM",filename:"../img/logo_32px.png"},{label:"API.DOC.TRANSFER.EXAMPLE_BUTTON_ICON_G1_COLOR",filename:"../img/logo_g1_32px.png"},{label:"API.DOC.TRANSFER.EXAMPLE_BUTTON_ICON_G1_BLACK",filename:"../img/logo_g1_32px_black.png"}],style:{enable:!1,text:"Ğ1 pubkey",bgColor:"#fbc14c",fontColor:"black",width:void 0}},e.transferButton.style.icon=e.transferButton.icons[1],e.transferDemoUrl=t.rootPath+i.href("api.transfer",angular.merge({},e.transferData,{demo:!0,redirect_url:t.rootPath+"#/app/home?service=payment&result={tx}&node={node}",cancel_url:t.rootPath+"#/app/home?service=payment&cancel"})),e.enter=function(t,i){e.loading&&(e.result={},i.stateParams&&i.stateParams.service&&(e.result.type=i.stateParams.service),i.stateParams&&i.stateParams.result&&(e.result.content=i.stateParams.result),i.stateParams&&i.stateParams.cancel&&(e.result.cancelled=!0),i.stateParams&&i.stateParams.node&&(e.result.node=i.stateParams.node),o.get().then((function(e){return n("API.DOC.TRANSFER.EXAMPLE_BUTTON_DEFAULT_TEXT",{currency:e.name})})).then((function(t){e.transferButton.style.text=t,e.loading=!1,e.computeTransferButtonHtml()})))},e.$on("$ionicView.enter",e.enter),e.computeTransferButtonHtml=function(){if(!e.loading){var n,a=t.rootPath+i.href("api.transfer",e.transferData);e.transferButton.style.enable?(n='<a href="'+a+'">\n <div style="border-radius: 5px; min-height: 42px; text-align: center; padding: 5px; line-height: 30px; ',e.transferButton.style.width&&(n+="max-width: "+e.transferButton.style.width+"; "),e.transferButton.style.bgColor&&(n+="background-color: "+e.transferButton.style.bgColor+"; "),e.transferButton.style.fontColor&&(n+="color: "+e.transferButton.style.fontColor+"; "),n+='">\n',e.transferButton.style.icon&&e.transferButton.style.icon.filename&&(n+=' <img style="vertical-align: middle;" src="'+t.rootPath+e.transferButton.style.icon.filename+'">\n'),n+=" "+e.transferButton.style.text+"\n </div>\n</a>"):n='<a href="'+a+'">\n <img src="'+t.rootPath+'../img/duniter_button.svg">\n</a>',e.transferButton.html!=n&&(e.transferButton.html=n,e.$broadcast("$$rebind::transferButton"))}},e.$watch("transferData",e.computeTransferButtonHtml,!0),e.$watch("transferButton.style",e.computeTransferButtonHtml,!0)}]).controller("ApiTransferCtrl",["$scope","$rootScope","$timeout","$controller","$state","$q","$translate","$filter","$window","$ionicHistory","BMA","CryptoUtils","UIUtils","csConfig","csSettings","csPlatform","csCurrency","csTx","csWallet","csDemoWallet",function(e,t,i,n,a,o,r,s,l,c,d,u,E,m,p,b,T,_,f,g){var N=m;function h(e){return 100*parseFloat((e||"0").trim().replace(new RegExp("[.,]"),".")).toFixed(2)}N.demo&&((N=angular.copy(N)).demo=!1,N.readonly=!1),angular.extend(this,n("AuthCtrl",{$scope:e,csConfig:N})),e.loading=!0,e.transferData={amount:void 0,amounts:void 0,comment:void 0,pubkey:void 0,name:void 0,redirect_url:void 0,cancel_url:void 0,node:void 0},e.enter=function(i,n){if(t.errorState=n.stateName,e.loading){if(n.stateParams&&n.stateParams.amount){var a=n.stateParams.amount.trim(),o=-1!==a.indexOf("|")&&a.split("|")||-1!==a.indexOf(" ")&&a.split(" ")||-1!==a.indexOf(";")&&a.split(";");o?(e.transferData.amounts=o.reduce((function(e,t){var i=h(t);return i>0?e.concat(i):e}),[]),1===e.transferData.amounts.length?(e.transferData.amount=e.transferData.amounts[0],delete e.transferData.amounts):e.transferData.amounts.sort()):e.transferData.amount=h(a)}if(n.stateParams&&n.stateParams.pubkey&&(e.transferData.pubkey=n.stateParams.pubkey),n.stateParams&&n.stateParams.name&&(e.transferData.name=n.stateParams.name),n.stateParams&&n.stateParams.comment&&(e.transferData.comment=n.stateParams.comment),n.stateParams&&n.stateParams.redirect_url&&(e.transferData.redirect_url=n.stateParams.redirect_url),n.stateParams&&n.stateParams.cancel_url&&(e.transferData.cancel_url=n.stateParams.cancel_url),n.stateParams&&n.stateParams.demo&&(e.demo=!0),n.stateParams&&n.stateParams.preferred_node){var r="https:"===l.location.protocol,s=n.stateParams.preferred_node,c=/^(?:(http[s]?:)\/\/)(.*)$/.exec(s);c&&(r="https:"===c[1],s=c[2]);var d=s.split(":");if(d.length>=1){var u=d[1]||(r?443:80);if(e.node={host:d[0],port:u,useSsl:r||443==u},!e.node.useSsl){var E=angular.copy(e.node);E.useSsl=!0,E.port=443,p.data.fallbackNodes=p.data.fallbackNodes||[],p.data.fallbackNodes.splice(0,0,E)}}else console.warn("[api] Invalid preferred node address: {0}. Using default node."+n.stateParams.preferred_node)}return e.start()}},e.$on("$ionicView.enter",e.enter),e.start=function(){if(!e.starting)return e.starting=!0,e.loading=!0,e.error||!e.node||d.node.same(e.node)||(console.debug("[api] Using preferred node: {0}:{1}".format(e.node.host,e.node.port)),d.stop(),d.copy(e.node),e.node.server=d.server),b.restart().then(T.get).then((function(t){e.currency=t,e.node=t.node,e.loading=!1,e.error=!1,e.starting=!1,c.clearCache()})).catch((function(t){console.error(t&&t.message||t),e.error=!0,e.loading=!1,e.starting=!1;var i=d.api.node.on.start(e,(function(){e.start(),i()}))}))},e.askTransferConfirm=function(i){return r(["COMMON.UD","COMMON.EMPTY_PARENTHESIS"]).then((function(n){return r("CONFIRM.TRANSFER",{from:i.isMember?i.uid:s("formatPubkey")(i.pubkey),to:e.transferData.name||s("formatPubkey")(e.transferData.pubkey),amount:e.transferData.amount/100,unit:s("abbreviate")(t.currency.name),comment:e.transferData.comment&&0!==e.transferData.comment.trim().length?e.transferData.comment:n["COMMON.EMPTY_PARENTHESIS"]})})).then(E.alert.confirm)},e.onSuccess=function(t){return e.transferData.redirect_url?(e.transferData.name?r("API.TRANSFER.INFO.SUCCESS_REDIRECTING_WITH_NAME",e.transferData):r("API.TRANSFER.INFO.SUCCESS_REDIRECTING")).then((function(e){return E.loading.show({template:e})})).then((function(){var i=e.transferData.redirect_url;return i=(i=(i=(i=(i=(i=i.replace(/\{pubkey\}/g,e.transferData.pubkey)).replace(/\{hash\}/g,t.hash||"")).replace(/\{comment\}/g,e.transferData.comment||"")).replace(/\{amount\}/g,e.transferData.amount&&(e.transferData.amount/100).toString()||"")).replace(/\{tx\}/g,encodeURI(t.tx))).replace(/\{node\}/g,encodeURI(d.host+":"+d.port)),e.redirectToUrl(i,2500)})):E.toast.show("INFO.TRANSFER_SENT")},e.onCancel=function(){return e.transferData.cancel_url?(e.transferData.name?r("API.TRANSFER.INFO.CANCEL_REDIRECTING_WITH_NAME",e.transferData):r("API.TRANSFER.INFO.CANCEL_REDIRECTING")).then((function(e){return E.loading.show({template:e})})).then((function(){var t=e.transferData.cancel_url;return t=(t=(t=t.replace(/\{pubkey\}/g,e.transferData.pubkey)).replace(/\{comment\}/g,e.transferData.comment||"")).replace(/\{amount\}/g,e.transferData.amount&&(e.transferData.amount/100).toString()||""),e.redirectToUrl(t,1500)})):(e.formData.salt=void 0,void(e.formData.password=void 0))},e.redirectToUrl=function(e,t){if(e)return i((function(){return window.top&&window.top.location?window.top.location.href=e:parent&&parent.document&&parent.document.location?parent.document.location.href=e:window.location.assign(e),E.loading.hide()}),t||0)},e.closeModal=function(t){if(!t)return e.onCancel();if(!e.transferData.amount||!e.transferData.pubkey)return e.form.$submitted=!0,E.loading.hide(),o.reject();if(!e.sending){e.sending=!0,delete e.transferData.error;var i=e.demo?g.instance(t):f.instance("api",d);E.loading.show(),i.start({restore:!1}).then((function(){return i.login({auth:!0,authData:t,minData:!0,sources:!0,tx:{enable:!1}})})).then((function(t){if(t)return e.login=!0,E.loading.hide(),e.askTransferConfirm(t)})).then((function(t){if(t)return E.loading.show().then((function(){var t=parseInt(e.transferData.amount);return i.transfer(e.transferData.pubkey,t,e.transferData.comment,!1)})).then((function(e){return E.loading.hide(),e})).catch((function(e){return E.onError()(e),!1}))})).then((function(t){if(t)return e.onSuccess(t);e.sending=!1})).catch((function(t){if(t&&"CANCELLED"===t)return e.onCancel();t&&"RETRY"===t?e.sending=!1:(e.sending=!1,E.onError()(t))}))}}}]).run(["csSettings",function(e){e.data.rememberMe=!1,e.data.useLocalStorage=!1,e.data.keepAuthIdle=30}]),angular.module("cesium.directives",[]).directive("compareTo",(function(){return{require:"?ngModel",link:function(e,t,i,n){n&&i.compareTo&&(n.$validators.compareTo=function(t){return t==e.$eval(i.compareTo)},e.$watch(i.compareTo,(function(){n.$validate()})))}}})).directive("differentTo",(function(){return{require:"?ngModel",link:function(e,t,i,n){n&&i.differentTo&&(n.$validators.differentTo=function(t){return t!=e.$eval(i.differentTo)},e.$watch(i.differentTo,(function(){n.$validate()})))}}})).directive("numberFloat",(function(){var e=new RegExp("^[0-9]+([.,][0-9]+)?$");return{require:"?ngModel",link:function(t,i,n,a){a&&(a.$validators.numberFloat=function(t){return a.$isEmpty(t)||e.test(t)})}}})).directive("numberInt",(function(){var e=new RegExp("^[0-9]+$");return{require:"ngModel",link:function(t,i,n,a){a&&(a.$validators.numberInt=function(t){return a.$isEmpty(t)||e.test(t)})}}})).directive("email",(function(){var e=new RegExp("^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$");return{require:"ngModel",link:function(t,i,n,a){a&&(a.$validators.email=function(t){return a.$isEmpty(t)||e.test(t)})}}})).directive("requiredIf",(function(){return{require:"?ngModel",link:function(e,t,i,n){n&&i.requiredIf&&(n.$validators.required=function(t){return!e.$eval(i.requiredIf)||!n.$isEmpty(t)},e.$watch(i.requiredIf,(function(){n.$validate()})))}}})).directive("geoPoint",(function(){return{require:"?ngModel",link:function(e,t,i,n){n&&(n.$validators.geoPoint=function(e){return n.$isEmpty(e)||angular.isDefined(e.lat)&&angular.isDefined(e.lon)||angular.isUndefined(e.lat)&&angular.isUndefined(e.lon)})}}})).directive("copyOnClick",["$window","Device","UIUtils",function(e,t,i){return{restrict:"A",link:function(e,n,a){var o=function(n){var o=a.copyOnClick;if(o&&t.clipboard.enable)t.clipboard.copy(o).then((function(){i.toast.show("INFO.COPY_TO_CLIPBOARD_DONE")})).catch(i.onError("ERROR.COPY_CLIPBOARD"));else if(o){var r=o&&o.indexOf("\n")>=0?o.split("\n").length:1;i.popover.show(n,{scope:e,templateUrl:"templates/common/popover_copy.html",bindings:{value:a.copyOnClick,rows:r},autoselect:".popover-copy "+(r<=1?"input":"textarea")})}};n.bind("click",o),n.bind("hold",o)}}}]).directive("selectOnClick",["$window",function(e){return{restrict:"A",link:function(t,i,n){i.bind("click",(function(){e.getSelection&&!e.getSelection().toString()&&this.value&&this.setSelectionRange(0,this.value.length)}))}}}]).directive("activeLink",["$location",function(e){return{restrict:"A",link:function(t,i,n,a){var o,r=n.activeLink;n.activeLinkPathPrefix?(o=n.activeLinkPathPrefix.substring(1),t.location=e,t.$watch("location.path()",(function(e){e&&0===e.indexOf(o)?i.addClass(r):i.removeClass(r)}))):n.href&&(o=n.href.substring(1),t.location=e,t.$watch("location.path()",(function(e){e&&e==o?i.addClass(r):i.removeClass(r)})))}}}]).directive("input",["$timeout",function(e){return{restrict:"E",scope:{returnClose:"=",onReturn:"&",onFocus:"&",onBlur:"&"},link:function(t,i,n){i.bind("focus",(function(i){t.onFocus&&e((function(){t.onFocus()}))})),i.bind("blur",(function(i){t.onBlur&&e((function(){t.onBlur()}))})),i.bind("keydown",(function(n){13==n.which&&(t.returnClose&&i[0].blur(),t.onReturn&&e((function(){t.onReturn()})))}))}}}]).directive("trustAsHtml",["$sce","$compile","$parse",function(e,t,i){return{restrict:"A",compile:function(n,a){var o=i(a.trustAsHtml),r=i(a.trustAsHtml,(function(e){return(e||"").toString()}));return t.$$addBindingClass(n),function(i,n,a){t.$$addBindingInfo(n,a.trustAsHtml),i.$watch(r,(function(){n.html(e.getTrustedHtml(e.trustAsHtml(o(i)))||""),t(n.contents())(i)}))}}}}]).directive("modalClose",["$ionicHistory","$timeout",function(e,t){return{restrict:"AC",link:function(i,n){n.bind("click",(function(){i.closeModal&&(e.nextViewOptions({historyRoot:!0,disableAnimate:!0,expire:300}),t((function(){e.nextViewOptions({historyRoot:!1,disableAnimate:!1})}),300),i.closeModal())}))}}}]).directive("csExtensionPoint",["$state","$compile","$controller","$templateCache","PluginService",function(e,t,i,n,a){return{restrict:"E",compile:function(e,t){if(angular.isDefined(t.name)){var i=a.extensions.points.getActivesByName(t.name);i.length>0&&(e.html(""),_.forEach(i,(function(t){e.append(function(e){var t=e.templateUrl?n.get(e.templateUrl):e.template;return t?(e.controller&&(t='<ng-controller ng-controller="'+e.controller+'">'+t+"</div>"),t):(console.error("[plugin] Could not found template for extension :"+(e.templateUrl?e.templateUrl:e.template)),"")}(t))})))}return{pre:function(e,t,i){a.extensions.points.current.set(i.name)},post:function(){a.extensions.points.current.set()}}},scope:{content:"="}}}]).directive("onReadFile",["$parse",function(e){return{restrict:"A",scope:!1,link:function(t,i,n){var a=e(n.onReadFile);i.on("change",(function(e){var i=new FileReader,n={name:this.files[0].name,size:this.files[0].size,type:this.files[0].type};i.onload=function(e){t.$applyAsync((function(){a(t,{file:{fileContent:e.target.result,fileData:n}})}))},i.readAsText((e.srcElement||e.target).files[0])}))}}}]).directive("dropZone",["$parse",function(e){return{restrict:"A",scope:!1,link:function(t,i,n){var a=e(n.dropZone);i.bind("dragover",(function(e){e.stopPropagation(),e.preventDefault()})),i.bind("dragenter",(function(e){e.stopPropagation(),e.preventDefault()})),i.bind("dragleave",(function(e){e.stopPropagation(),e.preventDefault()})),i.bind("drop",(function(e){e.stopPropagation(),e.preventDefault();var i=e.dataTransfer.files[0],n={name:i.name,size:i.size,type:i.type},o=new FileReader;o.onload=function(e){t.$apply((function(){a(t,{file:{file:i,fileContent:e.target.result,fileData:n}})}))},o.readAsText(e.dataTransfer.files[0])}))}}}]).directive("fileSelect",["$parse",function(e){"use strict";return{restrict:"A",scope:!1,template:'<input type="file" style="display: none;" /><ng-transclude></ng-transclude>',transclude:!0,link:function(t,i,n){var a=e(n.fileSelect),o=i.children("input[file]");n.accept&&(o[0].accept=n.accept),o.on("change",(function(e){var i=new FileReader,n=this.files[0],o={name:n.name,size:n.size,type:n.type};i.onload=function(e){t.$applyAsync((function(){a(t,{file:{file:n,fileContent:e.target.result,fileData:o}})}))},i.readAsText((e.srcElement||e.target).files[0])})),i.on("click",(function(){o[0].click()}))}}}]).directive("windowExitUnauth",["$window","csSettings","csWallet",function(e,t,i){return{restrict:"AE",link:function(n,a){(e.attachEvent||e.addEventListener)(e.attachEvent?"onunload":"unload",(function(e){if(t.data&&t.data.keepAuthIdle!=t.constants.KEEP_AUTH_IDLE_SESSION)return i.unauth()}))}}}]),angular.module("cesium.filters",["cesium.config","cesium.platform","pascalprecht.translate","cesium.translations"]).factory("filterTranslations",["$rootScope","$q","csPlatform","csSettings","csCurrency","$translate","$timeout",function(e,t,i,n,a,o,r){var s,l=!1,c=this;function d(){return console.debug("[filter] Loading translations for locale [{0}]".format(o.use())),o(["COMMON.DATE_PATTERN","COMMON.DATE_SHORT_PATTERN","COMMON.UD","COMMON.DAYS"]).then((function(e){c.DATE_PATTERN=e["COMMON.DATE_PATTERN"],"COMMON.DATE_PATTERN"===c.DATE_PATTERN&&(c.DATE_PATTERN="YYYY-MM-DD HH:mm"),c.DATE_SHORT_PATTERN=e["COMMON.DATE_SHORT_PATTERN"],"COMMON.DATE_SHORT_PATTERN"===c.DATE_SHORT_PATTERN&&(c.DATE_SHORT_PATTERN="YYYY-MM-DD"),c.DATE_MONTH_YEAR_PATTERN=e["COMMON.DATE_MONTH_YEAR_PATTERN"],"COMMON.DATE_MONTH_YEAR_PATTERN"===c.DATE_MONTH_YEAR_PATTERN&&(c.DATE_MONTH_YEAR_PATTERN="MMM YY"),c.DAYS=e["COMMON.DAYS"],"COMMON.DAYS"===c.DAYS&&(c.DAYS="days"),c.UD=e["COMMON.UD"],"COMMON.UD"===c.UD&&(c.UD="UD")}))}function u(){console.debug("[filter] Computing constants from currency parameters"),c.MEDIAN_TIME_OFFSET=a.data.medianTimeOffset||c.MEDIAN_TIME_OFFSET}return c.MEDIAN_TIME_OFFSET=3600,c.ready=function(){return l?t.when():s||c.start()},c.start=function(){return s=i.ready().then(d).then((function(){u(),l=!0,n.api.locale.on.changed(e,d,this),a.api.data.on.ready(e,u,this)}))},r((function(){c.start()})),c}]).filter("formatInteger",(function(){return function(e){return e?e<1e7?numeral(e).format("0,0"):numeral(e).format("0,0.000 a"):"0"}})).filter("formatAmount",["csConfig","csSettings","csCurrency","$filter",function(e,t,i,n){var a="0,0.0"+Array(e.decimalCount||4).join("0"),o=n("currencySymbol"),r=a+"0",s=1/Math.pow(10,(e.decimalCount||4)+1);return function(e,n){if(void 0!==e)return(n&&angular.isDefined(n.useRelative)?n.useRelative:t.data.useRelative)?function(e,t){var n=t&&t.currentUD?t.currentUD:i.data.currentUD;if(n){var a=e/n;return a=Math.abs(e)<s&&0!==e?"~ 0":numeral(a).format(r),t&&t.currency?a+" "+o(t.currency,!0):a}console.warn("formatAmount: currentUD not defined")}(e,n):function(e,t){var i=numeral(e/100).format(e<-1e9||e>1e9?"0,0.000 a":a);return t&&t.currency?i+" "+o(t.currency,!1):i}(e,n)}}]).filter("formatAmountNoHtml",["csConfig","csSettings","csCurrency","$filter",function(e,t,i,n){var a=1/Math.pow(10,e.decimalCount||4),o="0,0.0"+Array(e.decimalCount||4).join("0"),r=n("currencySymbolNoHtml");return function(e,n){if(void 0!==e)return(n&&angular.isDefined(n.useRelative)?n.useRelative:t.data.useRelative)?function(e,t){var n=t&&t.currentUD?t.currentUD:i.data.currentUD;if(n){var s=e/n;return s=Math.abs(s)<a&&0!==e?"~ 0":numeral(s).format(o),t&&t.currency?s+" "+r(t.currency,!0):s}console.warn("formatAmount: currentUD not defined")}(e,n):function(e,t){var i=numeral(e/100).format(e>-1e9&&e<1e9?"0,0.00":"0,0.000 a");return t&&t.currency?i+" "+r(t.currency,!1):i}(e,n)}}]).filter("currencySymbol",["filterTranslations","$filter","csSettings",function(e,t,i){return function(n,a){return n?(angular.isDefined(a)?a:i.data.useRelative)?e.UD+"<sub>"+t("abbreviate")(n)+"</sub>":t("abbreviate")(n):""}}]).filter("currencySymbolNoHtml",["filterTranslations","$filter","csSettings",function(e,t,i){return function(n,a){return n?(angular.isDefined(a)?a:i.data.useRelative)?e.UD+" "+t("abbreviate")(n):t("abbreviate")(n):""}}]).filter("formatDecimal",["csConfig","csCurrency",function(e,t){var i=1/Math.pow(10,e.decimalCount||4),n="0,0.0"+Array(e.decimalCount||4).join("0");return function(e){return void 0===e?"0":e===1/0||e===-1/0?(console.warn("formatDecimal: division by zero ? (is currentUD defined ?) = "+t.data.currentUD),"error"):Math.abs(e)<i?"~ 0":numeral(e).format(n)}}]).filter("formatNumeral",(function(){return function(e,t){return void 0===e?"0":Math.abs(e)<1e-4?"~ 0":numeral(e).format(t)}})).filter("formatDate",["filterTranslations",function(e){return function(t){return t?moment.unix(parseInt(t)).local().format(e.DATE_PATTERN||"YYYY-MM-DD HH:mm"):""}}]).filter("formatDateShort",["filterTranslations",function(e){return function(t){return t?moment.unix(parseInt(t)).local().format(e.DATE_SHORT_PATTERN||"YYYY-MM-DD"):""}}]).filter("formatDateMonth",["filterTranslations",function(e){return function(t){return t?moment.unix(parseInt(t)).local().format(e.DATE_MONTH_YEAR_PATTERN||"MMM YY"):""}}]).filter("formatDateForFile",["filterTranslations",function(e){return function(t){return t?moment.unix(parseInt(t)).local().format(e.DATE_FILE_PATTERN||"YYYY-MM-DD"):""}}]).filter("formatTime",(function(){return function(e){return e?moment.unix(parseInt(e)).local().format("HH:mm"):""}})).filter("formatFromNow",(function(){return function(e){return e?moment.unix(parseInt(e)).fromNow():""}})).filter("formatFromNowAndDate",["filterTranslations",function(e){return function(t,i){var n=t&&moment.unix(parseInt(t));return n&&n.fromNow()+(i&&i.separator||" | ")+n.local().format(e.DATE_PATTERN||"YYYY-MM-DD HH:mm")||""}}]).filter("formatDurationTo",(function(){return function(e){return e?moment.unix(moment().utc().unix()+parseInt(e)).fromNow():""}})).filter("formatDuration",(function(){return function(e){return e?moment(0).from(moment.unix(parseInt(e)),!0):""}})).filter("formatDurationTime",["filterTranslations",function(e){return function(t){if(!t)return"";var i=t&&t<0?"-":"+";t=Math.abs(t);var n=Math.trunc(t/3600/24),a=Math.trunc(t/3600-24*n),o=Math.trunc(t/60-24*n*60-60*a);return n>0?i+n+" "+e.DAYS+" "+a+"h "+o+"m":a>0?i+a+"h "+o+"m":i+o+"m"}}]).filter("formatDurationMs",(function(){return function(e){return e?e<1e3?e+"ms":e/1e3+"s":""}})).filter("formatPeriod",(function(){return function(e){return e?moment(0).from(moment.unix(parseInt(e)),!0).split(" ").slice(-1)[0]:null}})).filter("formatFromNowShort",(function(){return function(e){return e?moment.unix(parseInt(e)+offset).fromNow(!0):""}})).filter("medianDate",["filterTranslations",function(e){return function(t){return t?moment.unix(parseInt(t)+e.MEDIAN_TIME_OFFSET).local().format(e.DATE_PATTERN||"YYYY-MM-DD HH:mm"):""}}]).filter("medianDateShort",["filterTranslations",function(e){return function(t){return t?moment.unix(parseInt(t)+e.MEDIAN_TIME_OFFSET).local().format(e.DATE_SHORT_PATTERN||"YYYY-MM-DD"):""}}]).filter("medianTime",["filterTranslations",function(e){return function(t){return t?moment.unix(parseInt(t)+e.MEDIAN_TIME_OFFSET).local().format("HH:mm"):""}}]).filter("medianFromNow",["filterTranslations",function(e){return function(t){return t?moment.unix(parseInt(t)+e.MEDIAN_TIME_OFFSET).fromNow():""}}]).filter("medianFromNowShort",["filterTranslations",function(e){return function(t){return t?moment.unix(parseInt(t)+e.MEDIAN_TIME_OFFSET).fromNow(!0):""}}]).filter("medianFromNowAndDate",["filterTranslations",function(e){return function(t,i){var n=t&&moment.unix(parseInt(t)+e.MEDIAN_TIME_OFFSET);return n&&n.fromNow()+(i&&i.separator||" | ")+n.local().format(e.DATE_PATTERN||"YYYY-MM-DD HH:mm")||""}}]).filter("capitalize",(function(){return function(e){return e?(e=e.toLowerCase()).length>1?e.substring(0,1).toUpperCase()+e.substring(1):e:""}})).filter("abbreviate",(function(){var e={};return function(t){var i=t||"";if(e[i])return e[i];if(i.length>3){for(var n="",a=["-","_"," "],o=0;o<i.length;o++){var r=i[o];0===o?n="g"===r||"G"===r?"Ğ":r:o>0&&-1!=a.indexOf(i[o-1])&&(n+=r)}i=n.toUpperCase()}else"G"===(i=i.toUpperCase()).charAt(0)&&(i="Ğ"+(i.length>1?i.substr(1):""));return e[t]=i,i}})).filter("upper",(function(){return function(e){return e?e.toUpperCase():""}})).filter("formatPubkey",(function(){return function(e){return e?e.substr(0,8):""}})).filter("formatHash",(function(){return function(e){return e?e.substr(0,4)+e.substr(e.length-4):""}})).filter("formatCategory",(function(){return function(e){return e&&e.length>28?e.substr(0,25)+"...":e}})).filter("formatSlug",(function(){return function(e){return e?encodeURIComponent(e.toLowerCase().replace(/<[^>]+>/g,"").replace(/[^\w ]+/g,"").replace(/ +/g,"-")):""}})).filter("formatEncodeURI",(function(){return function(e){return e?encodeURIComponent(e):""}})).filter("truncText",(function(){return function(e,t){return t=t||500,!e||e.length<=t?e:e.substr(0,t)+"..."}})).filter("truncUrl",(function(){return function(e,t){t=t||25;var i=e.startsWith("http://")?7:e.startsWith("https://")?8:0;return i=e.startsWith("www.",i)?i+4:i,!e||e.length-i<=t?e.substr(i):e.substr(i,t)+"..."}})).filter("trustAsHtml",["$sce",function(e){return function(t){return e.trustAsHtml(t)}}]),angular.module("cesium.platform",["ngIdle","cesium.config","cesium.services"]).config(["$translateProvider","csConfig",function(e,t){e.uniformLanguageTag("bcp47").determinePreferredLanguage().useSanitizeValueStrategy(null).fallbackLanguage([t.fallbackLanguage?t.fallbackLanguage:"en"]).useLoaderCache(!0)}]).config(["$httpProvider","csConfig",function(e,t){e.defaults.timeout=t.timeout?t.timeout:3e5,e.defaults.useXDomain=!0,delete e.defaults.headers.common["X-Requested-With"]}]).config(["$compileProvider","csConfig",function(e,t){e.debugInfoEnabled(!0===t.debug),e.imgSrcSanitizationWhitelist(/^\s*(filesystem:resource|resource|moz-extension|chrome-extension|file|data):/)}]).config(["$animateProvider",function(e){e.classNameFilter(/\banimate-/)}]).config(["CacheFactoryProvider","csConfig",function(e,t){angular.extend(e.defaults,{recycleFreq:6e4,storagePrefix:"caches.",capacity:100,maxAge:t.cacheTimeMs||6e4,storageMode:"memory"})}]).config(["screenmatchConfigProvider",function(e){e.config.rules="bootstrap"}]).config(["$ionicConfigProvider",function(e){var t=ionic.Platform.isIOS();e.scrolling.jsScrolling(t),e.views.maxCache(5)}]).config(["IdleProvider","csConfig",function(e,t){e.idle(t.logoutIdle||600),e.timeout(t.logoutTimeout||15)}]).factory("$exceptionHandler",["$log",function(e){return function(t,i){i?e.error(t,i):e.error(t)}}]).factory("csPlatform",["ionicReady","$rootScope","$q","$state","$translate","$timeout","UIUtils","BMA","Device","csHttp","csConfig","csCache","csSettings","csCurrency","csWallet",function(e,t,i,n,a,o,r,s,l,c,d,u,E,m,p){var b,T,f,g,N=0,h=!1;function I(){if(!g){var e=t.$on("$stateChangeStart",(function(e,t,i,a){e.defaultPrevented||"app.home"===t.name||"app.settings"===t.name||(e.preventDefault(),T?T.then((function(){n.go(t.name,i)})):r.loading.hide())}));g=e}}function O(){g&&g(),g=null}function v(e){if(e)return!0;b=b||E.data.node;var t=E.data.fallbackNodes&&N<E.data.fallbackNodes.length&&E.data.fallbackNodes[N++];if(!t)throw"ERROR.CHECK_NETWORK_CONNECTION";var i=t.host+(t.port||80==t.port||443==t.port?"":":"+t.port);return s.node.same(t)?(console.debug("[platform] Skipping fallback node [{0}]: same as actual node".format(i)),v()):c.get(t.host,t.port,"/node/summary",443==t.port||s.node.forceUseSsl)().catch((function(e){console.error("[platform] Could not reach fallback node [{0}]: skipping".format(i))})).then((function(e){if(!e)return v();var n={old:s.server,new:i};return n.old===n.new&&(s.port!=t.port?n.new+=":"+t.port:0!=s.useSsl||!t.useSsl&&443!=t.port||(n.new+=" (SSL)")),a("CONFIRM.USE_FALLBACK_NODE",n).then((function(e){return r.alert.confirm(e)})).then((function(e){if(e)return E.data.node=t,E.data.node.temporary=!0,c.cache.clear(),s.copy(t).then(v)}))}))}function R(){return console.debug("[platform] restarting csPlatform"),C().then((function(){return o(A,200)}))}function A(){return I(),T=e().then(i.all([l.ready(),E.ready()])).then((function(){return s.ready().then(v)})).then(m.ready).then(p.ready).then((function(){O(),function(){f=[s.api.node.on.restart(t,R,this)]}(),T=null,h=!0})).catch((function(e){throw T=null,h=!1,n.current.name!==t.errorState&&n.go(t.errorState,{error:"peer"}),e}))}function C(){return h?(_.forEach(f,(function(e){e()})),f=[],p.stop(),m.stop(),s.stop(),o((function(){O(),h=!1,T=null}),500)):i.when()}return d.demo=!0===d.demo||"true"===d.demo||!1,d.readonly=!0===d.readonly||"true"===d.readonly||!1,{disableChangeState:I,isStarted:function(){return h},ready:function(){return h?i.when():T||A()},restart:R,start:A,stop:C,version:{latest:function(){var e=E.data.latestReleaseUrl&&c.uri.parse(E.data.latestReleaseUrl);return e?c.getWithCache(e.host,"https:"===e.protocol?443:e.port,"/"+e.pathname,void 0,u.constants.LONG)().then((function(e){if(e&&e.name&&e.tag_name&&e.html_url)return{version:e.name,url:e.html_url,isNewer:c.version.compare(d.version,e.name)<0}})).catch((function(e){console.error("[platform] Failed to get Cesium latest version",e)})):i.when()}}}}]).run(["$rootScope","$state","$window","$urlRouter","ionicReady","$ionicPlatform","$ionicHistory","Device","UIUtils","$ionicConfig","PluginService","csPlatform","csWallet","csSettings","csConfig","csCurrency",function(e,t,i,n,a,o,r,s,l,c,d,u,E,m,p,b){e.config=p,e.settings=m.data,e.currency=b.data,e.device=s,e.errorState="app.home",e.smallscreen=l.screen.isSmall();var T=i.location.href.indexOf("#");e.rootPath=-1!==T?i.location.href.substr(0,T):i.location.href,console.debug("[app] Root path is ["+e.rootPath+"]"),!0!==p.httpsMode&&"true"!=p.httpsMode&&"force"!==p.httpsMode||"https:"===i.location.protocol||e.$on("$stateChangeStart",(function(n,a,o,r){var s="https"+e.rootPath.substr(4)+t.href(a,o);p.httpsModeDebug?console.debug("[app] [httpsMode] --- Should redirect to: "+s):i.location.href=s})),a().then((function(){return s.keyboard.enable&&(s.keyboard.hideKeyboardAccessoryBar(!0),ionic.Platform.isIOS()&&s.keyboard.disableScroll(!0)),"a"!==ionic.Platform.grade.toLowerCase()&&(console.info("[app] Disabling UI effects, because plateform's grade is ["+ionic.Platform.grade+"]"),l.setEffects(!1)),window.StatusBar&&console.debug("[app] Status bar plugin enable"),u.version.latest().then((function(t){t&&t.isNewer?(console.info("[app] New release detected [{0}]".format(t.version)),e.newRelease=t):console.info("[app] Current version [{0}] is the latest release".format(p.version))})),o.registerBackButtonAction((function(e){return r.backView()?r.goBack():(e.preventDefault(),l.alert.confirm("CONFIRM.EXIT_APP").then((function(e){e&&ionic.Platform.exitApp()})))}),100),u.ready()}))}]),"function"!=typeof String.prototype.startsWith&&(console.debug("Adding String.prototype.startsWith() -> was missing on this platform"),String.prototype.startsWith=function(e,t){return 0===this.indexOf(e,t)}),"function"!=typeof String.prototype.trim){console.debug("Adding String.prototype.trim() -> was missing on this platform");var u=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;String.prototype.trim=function(){return this.replace(u,"")}}Math&&"function"!=typeof Math.trunc&&(console.debug("Adding Math.trunc() -> was missing on this platform"),Math.trunc=function(e){return parseInt((e-.5).toFixed())}),"function"!=typeof String.prototype.format&&(console.debug("Adding String.prototype.format() -> was missing on this platform"),String.prototype.format=function(){var e=arguments;return this.replace(/{(\d+)}/g,(function(t,i){return void 0!==e[i]?e[i]:t}))});
//# sourceMappingURL=../maps/dist_js/cesium-api.js.map