forked from axiom-team/astroport
11 lines
826 KiB
JavaScript
11 lines
826 KiB
JavaScript
/* 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,m,E){E=E||{},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=E.auth,e.okText=E.okText,e.title=E.title||(e.isAuth?"AUTH.TITLE":"LOGIN.TITLE"),e.showMethods=!angular.isDefined(E.showMethods)||E.showMethods,e.showNewAccountLink=!angular.isDefined(E.showNewAccountLink)||E.showNewAccountLink,e.expectedPubkey=E.expectedPubkey,e.expectedUid=E.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=u.data.rememberMe,e.formData.keepAuthIdle=u.data.keepAuthIdle,e.formData.keepAuth=e.formData.keepAuthIdle==u.constants.KEEP_AUTH_IDLE_SESSION;var t=E.method||u.data.login&&u.data.login.method||"SCRYPT_DEFAULT",i=u.data.login&&u.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 E.expectedPubkey&&E.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&&u.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 E.expectedPubkey&&E.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 m=e.formData.pubkey&&e.formData.pubkey.trim(),p=e.formData.uid&&e.formData.uid.trim()||void 0;if(!m)return;var b=c.regexp.PUBKEY.exec(m);if(b)a=l.loading.show().then((function(){return{pubkey:m,uid:p}}));else{if(!(b=c.regexp.PUBKEY_WITH_CHECKSUM.exec(m)))return e.showWotLookupModal(m);m=b[1],b[2]!=r.util.pkChecksum(m)?e.form.pubkey.$error={checksum:!0}:a=l.loading.show().then((function(){return{pubkey:m,uid:p}}))}}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(u.data.rememberMe,e.formData.rememberMe),o=!angular.equals(u.data.keepAuthIdle,s),r=!angular.equals(u.data.login&&u.data.login.method,n),c=!angular.equals(u.data.login&&u.data.login.params,i.params);return(a||o||r||c)&&(u.data.rememberMe=e.formData.rememberMe,u.data.keepAuthIdle=s,u.data.useLocalStorage=!!u.data.rememberMe||u.data.useLocalStorage,u.data.login=u.data.login||{},u.data.login.method=n,u.data.login.params=i.params,t(u.store,500)),E.success&&E.success(e.formData),E.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(),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){angular.extend(this,t("LoginModalCtrl",{$scope:e,parameters:{auth:!0}})),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,m,E){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||(m.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,e.startWalletNoLoginTour(0,!0).then((function(t){return!!t&&(!E.isLogin()||e.startWalletTour(0,!0).then((function(t){return!!t&&(c.data.helptip.wallet=t,c.store(),e.continue)})))})).then((function(t){return!!t&&(!E.isLogin()||e.startWalletCertTour(0,!0).then((function(t){return!!t&&(c.data.helptip.walletCerts=t,c.store(),e.continue)})))})).then((function(t){return!!t&&(!E.isLogin()||e.startTxTour(0,!0).then((function(t){return!!t&&(c.data.helptip.tx=t,c.store(),e.continue)})))})).then((function(t){return!!t&&(!E.isLogin()||e.startWalletsTour(0,!0).then((function(t){return!!t&&(c.data.helptip.wallets=t,c.store(),e.continue)})))})).then((function(t){return!!t&&e.startHeaderTour(0,!0)})).then((function(t){return!!t&&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&&e.finishTour()}))},e.startCurrencyTour=function(i,a){var o,l=[function(){return n.toggleLeft(!0),e.showHelpTip("helptip-menu-btn-currency",{bindings:{content:"HELP.TIP.MENU_BTN_CURRENCY",icon:{position:s.screen.isSmall()?"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",l,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)},m=[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()?"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",m,o)}))},e.startWotLookupTour=function(o,r){var l=[function(){return n.toggleLeft(!0),e.showHelpTip("helptip-menu-btn-wot",{bindings:{content:"HELP.TIP.MENU_BTN_WOT",icon:{position:s.screen.isSmall()?"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",l,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,o){var r=[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:o}})}];return e.executeStep("certs",r,n)},e.startWalletNoLoginTour=function(t,i){if(E.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(!E.isLogin())return o.when(!0);var l=E.data.isMember||E.data.requirements&&E.data.requirements.pendingMembership,c=[function(){return n.toggleLeft(!0),e.showHelpTip("helptip-menu-btn-account",{bindings:{content:E.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(!E.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(!E.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,l){if(s.screen.isSmall())return o.when(!0);function c(){var e=i.document.querySelectorAll("#helptip-header-bar-btn-profile");return e&&e.length?_.find(e,(function(e){return e.offsetWidth>0})):null}var d=[function(){if(s.screen.isSmall())return!0;var i=c();if(!i)return!0;var n=t.is("app.home")?"margin-right: 60px":void 0;return e.showHelpTip(i,{bindings:{content:"HELP.TIP.HEADER_BAR_BTN_PROFILE",icon:{position:"right",style:n}}})},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:l},timeout:1e3});var t=c();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:l},timeout:1e3}).then((function(t){return e.closeProfilePopover(),t})))}];return e.executeStep("header",d,r)},e.startSettingsTour=function(i,a){var o,r=[function(){return!s.screen.isSmall()||(n.toggleLeft(!0),e.showHelpTip("helptip-menu-btn-settings",{bindings:{content:"HELP.TIP.MENU_BTN_SETTINGS",icon:{position:"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),E.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:"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,m,E,p={STORAGE_KEY:"settings",KEEP_AUTH_IDLE_SESSION:9999},b={timeout:4e3,cacheTimeMs:6e4,timeWarningExpireMembership:5184e3,timeWarningExpire:7776e3,minVersion:"1.1.0",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:(m=r.defaultLanguage||o.use(),E=c(m),m!==E&&console.debug("[settings] Fix locale [{0}] -> [{1}]".format(m,E)),E)},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))},v=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)}},O=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."),v(T),void h();v(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(O).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"),v(T),{isStarted:function(){return g},ready:function(){return g?t.when():u||R()},start:R,data:f,apply:v,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]})),v(T),N.data.raisePromise.reset(f).then(I)},store:I,restore:O,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 m,E="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=[];m&&a.cancel(m),m=a((function(){t.length?R(t):b.loading&&!b.searchingPeersOnNetwork&&(b.loading=!1,a.cancel(m),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=v(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(O(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}))},v=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(v(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]},O=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||!E||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),O(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 m(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 m("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))?E(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 E(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),m=a.slice(5,21),E=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(m),o=n.decrypt(E);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?m(t.content,i):e((function(e,n){if(!t)return n("Argument [file] is missing");var a=new FileReader;a.onload=function(t){m(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(),E(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),m=d.encrypt(c);u=new Uint8Array(u),m=new Uint8Array(m);var E=new Uint8Array(1);return E[0]=2,E=l(E,o),E=l(E,u),E=l(E,m),E=l(E,n.util.crypto_hash_sha256(n.util.crypto_hash_sha256(E)).slice(0,2)),n.util.encode_base58(E)}))}(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,m,E,p){var b,T=null,f={smallscreen:p.bind("xs, sm",E)},g={};function N(e,i){return e?o((function(n){a([e,i,"ERROR.POPUP_TITLE","ERROR.UNKNOWN_ERROR","COMMON.BTN_OK"]).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:a[i],buttons:[{text:"<b>"+a["COMMON.BTN_OK"]+"</b>",type:"button-assertive",onTap:function(e){n(e)}}]})}))})):o.when()}function h(e,i){return o((function(n){a([e,"INFO.POPUP_TITLE","COMMON.BTN_OK"].concat(i?[i]:[])).then((function(a){t.show({template:"<p>"+a[e]+"</p>",title:a["INFO.POPUP_TITLE"],subTitle:i&&a[i]||void 0,buttons:[{text:a["COMMON.BTN_OK"],type:"button-positive",onTap:function(e){n(e)}}]})}))}))}function I(t){return t?c((function(){return e.hide()}),t):e.hide()}function v(t){return T?((t=t||{}).template=t.template||T,e.show(t)):a("COMMON.LOADING").then((function(e){return T=e,v(t)}))}function O(){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||E,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=O()?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||(O()?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")}},loading:{show:v,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 v(t)}))}},toast:{show:function(t,i,n){return 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})}))}},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:O,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}),E.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||m.href(m.current,m.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","UIUtils","csHttp",function(e,t,i){e.openLink=function(e,n,a){return(a=a||{}).onError=function(){return t.popover.copy(e,n)},i.uri.open(n,a)}}]).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,m,E=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,E,r);var p={$scope:l.scope,parameters:r},b=(u={isControllerAs:!1,controllerName:"",propName:""},m=((d=o)||"").trim().split(/\s+/),u.isControllerAs=3===m.length&&"as"===(m[1]||"").toLowerCase(),u.isControllerAs?(u.controllerName=m[0],u.propName=m[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,E,r),t.modal=e}return e.show()}),(function(e){E.reject(e)})),E.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 m(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 E(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){E(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){m(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),E(T,i,a,(function(i,a){e.get(i,a).success((function(e){t(e)})).error((function(e,t){m(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){E(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){m(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 m(e,t,i){return e.delegate||(e.path=o,e.callbacks=[],e.waitDuration=0,e.waitRetryDelay=200,E(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,m(e,null,i)):t&&(console.debug("[http] Unexpected close of websocket [{0}]: error code: ".format(o),t&&t.code||t),e.delegate=null,m(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 m(this,null,e)},on:function(e,t){return m(this,e,t)},onListener:function(e,t){var i=this;return m(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,m=new o(this,"csCurrency");function E(){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,m.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})),m.data.raisePromise.load(d)]).catch((function(e){throw E(),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),m.data.raise.newBlock(i)}function g(){console.debug("[currency] Stopping..."),_.forEach(l,(function(e){e()})),l=[],E()}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,m.data.raise.ready(d)})).then((function(){return d}))}var I=T("currentBlock");function v(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 m.registerEvent("data","ready"),m.registerEvent("data","load"),m.registerEvent("data","reset"),m.registerEvent("data","newBlock"),E(),{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:v,lastValid:function(){return r.data.blockValidityWindow<=0?v(!0):v(!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:m,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 m(r,m,E,p){var b,T=r?"{0}:{1}".format(r,m||(E?"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"},v={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]+))?(?: (.+))?"},O={PROTOCOL_VERSION:10,ROOT_BLOCK_HASH:"E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855",LIMIT_REQUEST_COUNT:5,LIMIT_REQUEST_DELAY:1e3,regexp:v,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 k(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 P(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,m,E),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,P,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:O,regexp:{USER_ID:C(v.USER_ID),COMMENT:C(v.COMMENT),PUBKEY:C(v.PUBKEY),PUBKEY_WITH_CHECKSUM:C(v.PUBKEY_WITH_CHECKSUM),CURRENCY:C(v.CURRENCY),URI:C(v.URI),BMA_ENDPOINT:C(v.BMA_ENDPOINT),BMAS_ENDPOINT:C(v.BMAS_ENDPOINT),WS2P_ENDPOINT:C(v.WS2P_ENDPOINT),BMATOR_ENDPOINT:C(v.BMATOR_ENDPOINT),WS2PTOR_ENDPOINT:C(v.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(v.PUBKEY).test(t))e({pubkey:t});else if(C(v.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,m=-1!==c.host.indexOf(".")?c.host:null;if(c.username&&(c.password?(l=c.username,n=c.password):n=c.username),c.pathname){var E=c.pathname.split("/"),p=E?E.length:0,b=0;if(!d&&p>b&&(d=E[b++]),!n&&p>b&&(n=E[b++]),!l&&p>b&&(l=E[b++]),p>b)return void i({message:"Bad Duniter URI format. Invalid path (incomplete or redundant): "+c.pathname})}if(d)return m||e({uid:l,pubkey:n,currency:d}),u.get(m+"/blockchain/parameters")().then((function(t){t.currency===d?e({uid:l,pubkey:n,host:m,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(!m)return void i({message:"Bad Duniter URI format. Missing currency name (or node address)."});u.get(m+"/blockchain/parameters")().then((function(t){e({uid:l,pubkey:n,host:m,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(v.PUBKEY).test(e.pubkey))throw{message:"Invalid pubkey format ["+e.pubkey+"]"};if(e.uid&&!C(v.USER_ID).test(e.uid))throw{message:"Invalid uid format ["+e.uid+"]"};if(e.currency&&!C(v.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:k("/ws/block"),peer:k("/ws/peer"),close:L},angular.merge(R,M)}var E=new m;return E.instance=function(e,t,i,n){return new m(e,t,i,n=!!angular.isDefined(n)&&n)},E.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)}}}},E}]),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"),m=d.get("csWot-idty-",d.constants.MEDIUM),E=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?E.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)}))),E.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}}))},v=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 v(t.pubkey,t.uid,n);var n=angular.copy(n||{});return n.force=!0,v(e,i,n)}));if(e){if((o=!1!==a.cache?m.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 m.put(o.pubkey,o),console.debug("[wot] Identity "+o.pubkey.substring(0,8)+" loaded in "+(Date.now()-c)+"ms"),o}))},O=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(O(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:v,loadRequirements:N,search:O,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,m=(d=b(d,e,i)).reduce((function(e,t){return e.concat(t.block)}),[]);return t.all([n.blockchain.blocks(_.uniq(m)).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 m=new s(this,"csTx");function E(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=[],m=t.outputs.reduce((function(i,n,a){var m="string"==typeof n?n.split(":",3):[n.amount,n.base,n.conditions];o=parseInt(m[1]);var E=b(parseInt(m[0]),o),p=m[2],T=r.regexp.TX_OUTPUT_SIG.exec(p);if(T){var f=T[1];if(f===e){if(!l)return i+E;null===t.block_number&&u.push({amount:parseInt(m[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-E}else if(-1!==p.indexOf("SIG("+e+")")){var g=r.tx.parseUnlockCondition(p);if(g)return u.push(angular.merge({amount:parseInt(m[0]),base:o,type:"T",identifier:t.hash,noffset:a,conditions:p,consumed:!1},g)),g.amount=E,(s=s||[]).push(g),console.debug("[tx] has locked output:",g),i+E}return i}),0),E=m>0?c:d,p=t.time||t.blockstampTime,T=0!==m&&m+":"+t.hash+":"+p;if(T&&!n[T]){n[T]=!0;var f={time:p,amount:m,pubkey:1===E.length?E[0]:void 0,pubkeys:E.length>1?E: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){E(t,e.history.sending,s.pendings,l,!0),E(t,e.history.pending,s.pendings,l,!0)}))];if("pending"!==i){var p=function(e){E(t,e.history.sent,s.history,l,!1),E(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(m.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 m.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:m}}]),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,m,E,p,b,T,f,g,N,h,I,v){var O,R=b;function A(b,A){var C,S,L,D,y,k,P=(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={},x=!1,F=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?F.data.raise.init(H):(G()&&S&&!S.useLocalStorage&&f.reset(),F.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},j=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)}))},z=function(t){if(!D)return(y||Ye()).then((function(){return z(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):m.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 F.data.raisePromise.loginCheck(H).catch((function(e){throw W(),e})).then((function(){if(i)return F.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),F.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 z(t)}),300);throw e}))},q=function(){var t=J();return e((function(e,i){var n=H.pubkey;W(),ae(n),F.data.raise.logout(),t&&F.data.raise.unauth(),we(!1),r.clearCache(),e()}))},X=function(){return!!H.pubkey},$=function(t){return D?!J()||t&&t.forceAuth?((t=t||{}).expectedPubkey=X()&&H.pubkey,t.auth=!0,z(t)):e.when(H):(y||Ye()).then((function(){return $(t)}))},Q=function(){return e((function(e,t){Y(),ne(),F.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",E.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([E.util.random_nonce(),E.box.keypair.fromSignKeypair(H.keypair),u.put(a,o||null)]).then((function(e){var n=e[0],o=e[1];return E.box.pack(JSON.stringify(i),n,o.boxPk,o.boxSk).then((function(e){return t=angular.merge(t||{},{encryptedData:{nonce:E.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:E.util.decode_base58(i),signSk:E.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([F.data.raisePromise.login(H),we(!0),F.data.raisePromise.auth(H)]).catch((function(e){console.warn("Error during extension call [wallet.api.data.on.auth]",e)})):X()?F.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=Pe();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: Will retrying... ",i),s.loading.update({template:"COMMON.LOADING_WAIT"}),ce(e,!0);throw 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"})))},me=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}}))},Ee=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=!v.data.initPhase&&(!f.data.wallet||f.data.wallet.alertIfUnusedWallet)&&!H.loaded&&(!t||!t.minData||!t.silent);return k?k.then((function(){return ee(t)?H:_e(t)})):(k=t&&t.minData?Te(t):t||H.loaded?_e(t):be(),e.all([k,Ee()]).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(k=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.substr(0,8))),e.all([ce(!0).then((function(e){if(e.requirements&&(e.requirements.isMember||e.requirements.wasMember))return me();e.sigStock=0})),de(t||"pending")]).then((function(){return ue(),F.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.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(me()),(i.length?e.all(i):e.when()).then((function(){return angular.isDefined(t.api)&&!t.api?H:F.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: ".format(H.loaded?"Refreshing":"Loading"),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})}))):k?k.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(),v.get(),d&&e.when(d)||v.blockchain.current(!0)]).then((function(e){var u=e[0],m=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 E={amount:0,minBase:d.unitbase,maxBase:d.unitbase+1,sources:[]},p=[];p.push("[wallet] amount="+i);for(var b=0;E.amount<i&&b<=d.unitbase;)(E=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(E.amount<i){if(H.balance<i)throw{message:"ERROR.NOT_ENOUGH_CREDIT"};if(0===E.amount)throw{message:"ERROR.ALL_SOURCES_USED"};return a("COMMON.UD").then((function(e){var t;return t=l?{amount:o("formatDecimal")(E.amount/m.currentUD),unit:e,subUnit:o("abbreviate")(m.name)}:{amount:o("formatDecimal")(E.amount/100),unit:o("abbreviate")(m.name),subUnit:""},a("ERROR.NOT_ENOUGH_SOURCES",t).then((function(e){throw{message:e}}))}))}return b<E.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,E.minBase)?(i=function(e,t){var i=Math.pow(10,t);return e<i?i:Math.trunc(e/i)*i}(i,E.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+")")),ve(m,d,u,t,i,E,r,c||H.pubkey,p).then((function(e){H.balance-=e.amount,H.balance<0&&(H.balance=0),_.forEach(E.sources,(function(e){e.consumed=!0})),e&&e.sources.length&&(console.debug("[wallet-service] New sources to be add after the TX: ",e.sources),j(e.sources));var n={time:v.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),F.data.raise.balanceChanged(H),F.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 F.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}))}))},ve=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)})),ve(e,t,n,H.pubkey,d.amount,d,void 0,H.pubkey,c).then((function(i){_.forEach(d.sources,(function(e){e.consumed=!0})),j(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)})),ve(e,t,n,a,o,u,s,l,c)}))}var u="Version: "+P+"\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 m,p=o,b=r.maxBase,T=0,f=[];if(a!==H.pubkey){for(;p>0;)p-=m=ge(p,b),m>0&&(m=0===b?m:m/Math.pow(10,b),u+=m+":"+b+":SIG("+a+")\n",T++),b--;p=r.amount-o,b=r.maxBase}for(;p>0;)p-=m=ge(p,b),m>0&&(m=0===b?m:m/Math.pow(10,b),u+=m+":"+b+":SIG("+l+")\n",H.pubkey===l&&f.push({type:"T",noffset:T,amount:m,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")),E.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 E.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}}))}))},Oe=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 E.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(),v.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",E.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 E.scryptKeypair(i,n).then((function(t){return e.pubkey=E.util.encode_base58(t.signPk),e.keypair=t,e}))},Se=function(){return e.all([Z(),v.get()]).then((function(e){var t=e[0],i=e[1];return Oe(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 E.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},ke=function(e){return _.find(H.children||[],(function(t){return t.isUserPubkey(e)}))},Pe=function(){var e=(H.children||[]).reduce((function(e,t){return Math.max(e,t.id)}),0)+1;return O.instance(e,A)},Me=function(){return Ue().then((function(){return H.children}))},Ue=function(t){return K()?J()?E.box.keypair.fromSignKeypair(H.keypair).then((function(e){var t=E.util.decode_base58(H.encryptedData.nonce);return E.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=x!=t;i?(t?(console.debug("[wallet] Start idle (delay: {0}s)".format(S.keepAuthIdle)),c.setIdle(S.keepAuthIdle),c.watch()):x&&(console.debug("[wallet] Stop idle"),c.unwatch()),x=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",E.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 xe(){_.forEach(L,(function(e){e()})),L=[]}function Fe(){console.debug("[wallet] Stopping..."),xe(),W()}function We(){return Fe(),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)})),v.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 F.registerEvent("data","init"),F.registerEvent("data","loginCheck"),F.registerEvent("data","login"),F.registerEvent("data","auth"),F.registerEvent("data","unauth"),F.registerEvent("data","load"),F.registerEvent("data","logout"),F.registerEvent("data","reset"),F.registerEvent("data","store"),F.registerEvent("error","send"),F.registerEvent("data","balanceChanged"),F.registerEvent("data","newTx"),F.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:Fe,login:z,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:Ee,internal:{addListener:function(e){(L=L||[]).push(e)},removeListeners:xe},store:ne,storeData:oe,transfer:Ie,transferAll:function(t,i,n,a,o){return X()?o&&t!=o?v.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(),v.get(),v.blockchain.lastValid()]).then((function(e){var i=e[0],a=e[1];return n=e[2],Oe(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(),v.get(),v.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 E.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 F.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 E.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(E.util.random_nonce).then((function(i){return t.nonce=E.util.encode_base58(i),e.all([E.box.pack(t.salt,i,t.keypair.boxPk,t.keypair.boxSk),E.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=E.util.decode_base58(e.cypherNonce);return Ce(e).then((function(e){return E.box.open(e.cypherSalt,t,e.keypair.boxPk,e.keypair.boxSk)})).then((function(i){return e.salt=i,E.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([v.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([v.get(),p.keyfile.generateContent(H.keypair,{type:t,password:function(){return s.loading.hide(),m.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:ke(e)},membership:{inside:Re(!0),out:Re(!1)},events:{add:Ae,cleanByContext:Le},children:{create:function(e){var t=Pe();return De(t,e),t},add:De,remove:function(e,t){H.children=H.children||[];var i=_.findIndex(H.children,(function(t){return t.id===e}));if(-1!==i)return H.children.splice(i,1)[0].stop(),!t||angular.isUndefined(t.store)||t.store?oe():void 0;console.warn("[wallet] Unable to remove child wallet {"+e+"} (not found)")},get:function(e){return"default"!==e&&_.find(H.children||[],(function(t){return t.id===+e}))||void 0},getByPubkey:ke,all:Me,setParent:function(i){var n;L=L||[],_.forEach(["load","reset"],(function(a){n=F.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!!ke(e)},instance:Pe,downloadFile:function(){return e.all([Me(),v.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:F}}return(O=A("default",b)).instance=A,O}]),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","csSettings","Device","parameters"],r.$inject=["$scope","$controller"],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/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.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"> </small> {{:peer:$root.currency.node.host}}{{:peer:$root.currency.node.port != 80 && $root.currency.node.port != 443 ? \':\'+$root.currency.node.port : \'\'}} <small> </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-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></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> {{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" 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"></div><a menu-close class="item item-icon-left" 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" 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" 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"></div><cs-extension-point name="menu-user"></cs-extension-point><ion-item class="item hidden-xs hidden-sm"><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"></div><div class="item item-divider"></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 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/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}} <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="$root.config.build" class="gray">{{\'COMMON.APP_BUILD\'|translate:$root.config}}</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, \'https://git.duniter.org/clients/cesium-grp/cesium\')">https://git.duniter.org/clients/cesium-grp/cesium</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/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"> </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"> </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}} </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"> </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><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> {{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"> </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/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\'}} % / {{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> / {{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\'}} % / {{formData.dt | formatPeriod}}</span><span class="badge badge-stable" ng-if="!loading && formData.udReevalTime0">{{formData.c*100 | formatNumeral: \'0,0.00\'}} % / {{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">(Δ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.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/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/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/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/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> {{\'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/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/popover_copy.html",'<ion-popover-view class="popover-copy" style="height: {{(!rows || rows <= 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 <= 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> </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}}&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}}&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}}&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/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}} </span> <span class="dark" ng-if=":rebind:block.activesCount" class="gray"><i class="gray ion-refresh"></i> {{:rebind:block.activesCount}} </span> <span class="dark" ng-if=":rebind:block.certificationsCount"><i class="ion-ribbon-a"></i> {{:rebind:block.certificationsCount}} </span> <span class="dark" ng-if=":rebind:block.dividend" class="gray"><i class="gray ion-arrow-up-c"></i> {{\'COMMON.UD\'|translate}} </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/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> </ng-if><span ng-if=":rebind:block.revokedCount" class="assertive"><i class="ion-minus-circled"></i> -{{:rebind:block.revokedCount}} </span> <span ng-if=":rebind:block.activesCount"><i class="ion-refresh"></i> {{:rebind:block.activesCount}} </span> <span ng-if=":rebind:block.certificationsCount"><i class="ion-ribbon-a"></i> {{:rebind:block.certificationsCount}} </span> <span ng-if=":rebind:block.dividend"><i class="gray ion-arrow-up-c"></i> {{:rebind:\'COMMON.UD\'|translate}} </span> <span ng-if=":rebind:block.transactionsCount"><i class="ion-card">{{:rebind:block.transactionsCount}}</i> </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/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}} </span> <span class="gray" ng-class="{\'hidden-xs hidden-sm\': identity.uid}"><i class="icon ion-key"></i> {{::identity.pubkey|formatPubkey}}</span></a>'),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/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/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/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/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}} </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"> </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/help/help.html",'<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><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><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>'),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/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"><div class="item item-complex card stable-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><i class="icon dark ion-ios-arrow-right"></i></div></div><cs-extension-point name="select-account-type"></cs-extension-point><div 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><i class="icon dark ion-ios-arrow-right"></i></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-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/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> {{: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> <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> <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 <= 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> <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"> </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"> </div></div></ion-content></ion-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> <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.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/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/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/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="positive-900-bg circle-bg-dark"><div class="row padding-horizontal no-padding-xxs responsive-lg"><div class="col col-30 no-padding hidden-xs hidden-sm"> </div><div class="col text-center no-padding-xs main-container"><div id="helptip-home-logo" class="logo"></div><h4><span class="hidden-xs" translate>HOME.WELCOME</span> <b ng-show="!loading" translate-values=":currency:{currency: $root.currency.name}" translate>HOME.MESSAGE</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()">{{\'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 hidden-xs" ng-show="login" ng-click="startHelpTour($event)">{{\'COMMON.BTN_HELP_TOUR\'|translate}}</button> <button type="button" class="button button-block button-positive button-raised ink-dark" ng-click="showJoinModal()" ng-if="!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> {{\'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-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="!login" translate>COMMON.BTN_LOGIN</button><div class="text-center no-padding visible-xs stable"><br>{{\'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}"> </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> {{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/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">{{\'SETTINGS.AUTHENTICATION_SETTINGS\' | translate}}</span><div class="item item-toggle item-text-wrap"><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"><div class="input-label hidden-xs"><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></div><span class="visible-xs" translate>SETTINGS.KEEP_AUTH_SHORT</span><select ng-model="formData.keepAuthIdle" 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">{{\'SETTINGS.WALLETS_SETTINGS\' | translate}}</span><div class="item item-toggle item-text-wrap dark"><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" translate>SETTINGS.HISTORY_SETTINGS</span><div class="item item-toggle item-text-wrap dark"><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"><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/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}} </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.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/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)"> </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> <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/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/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" 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" ng-if="canSelectAndCertify" ng-click="selectAndCertify()"><i class="icon ion-plus"></i></button></div></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" ng-click="certify()" ng-if=":rebind:formData.hasSelf" title="{{\'WOT.BTN_CERTIFY\' | translate}}" ng-disabled="disableCertifyButton"></button> <button class="button button-calm ink" 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" 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"> </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"> </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" ng-click="showTransferModal({pubkey:formData.pubkey, uid: formData.uid})"><i class="icon ion-android-send"></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"> </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"> </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"> </div></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> {{::pubkey | formatPubkey}} </a><span ng-if="::tx.pubkeys.length > 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/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><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" ng-click="selectOption(\'revocation\')" 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><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(\'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><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 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><i class="icon dark ion-android-archive"></i></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></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></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></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"> </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"> </h4><ng-include src="::\'templates/wallet/transfer_form.html\'"></ng-include></div><div class="col col-20 hidden-xs hidden-sm"> </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/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> <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 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)) }"><ion-spinner icon="android" ng-show="!walletData.pubkey"></ion-spinner><span ng-if="walletData.pubkey && !walletData.isMember"><i class="ion-key"></i> {{walletData.pubkey| formatPubkey}} </span><span ng-if="walletData.isMember"><i class="ion-person"></i> {{walletData.name||walletData.uid}} </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><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> <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> <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 > 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}" 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}} </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.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> <button id="helptip-wallet-options" class="button button-stable icon-right ink" ng-click="showActionsPopover($event)"> <i class="icon ion-android-more-vertical"></i> {{: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"> </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"> </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"> </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> <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"> </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"> </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"> </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_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"> </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"> </div></div></ion-content></ion-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/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/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}} </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/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}} </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/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> <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/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><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" 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><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" 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><i class="icon dark ion-ios-arrow-right"></i></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>')}]),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!",MESSAGE:"Receive and send libre currency {{currency|abbreviate}}",BTN_CURRENCY:"Explore currency",BTN_ABOUT:"about",BTN_HELP:"Help",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.",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>"},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 (“<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”) 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 “<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”).",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 “<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”, 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 >></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 (“<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”) 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> {{'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."}},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("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!",MESSAGE:"Receive and send libre currency {{currency|abbreviate}}",BTN_CURRENCY:"Explore currency",BTN_ABOUT:"about",BTN_HELP:"Help",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.",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>"},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 (“<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”) 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 “<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”).",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 “<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”, 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 >></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 (“<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”) 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> {{'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."}},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 (“<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”) 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 “<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”).",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 “<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”, 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 >></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 (“<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”) 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> {{'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 una transferencia",BTN_SEND_MONEY_SHORT:"Transferencia",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 las 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:"Connectarse",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:"Descubrir esta pantalla",BTN_DOWNLOAD:"Descargar",BTN_DOWNLOAD_ACCOUNT_STATEMENT:"Descargar el estado de cuenta",BTN_MODIFY:"Modificar",CHOOSE_FILE:"Deposite archivo<br/>o clique 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:"Validación en progreso..."}},SYSTEM:{PICTURE_CHOOSE_TYPE:"Elegir la fuente:",BTN_PICTURE_GALLERY:"Galería",BTN_PICTURE_CAMERA:"<b>Cámara</b>"},MENU:{HOME:"Recepción",WOT:"Directorio",CURRENCY:"Moneda",ACCOUNT:"Mi cuenta",WALLETS:"Mis monederos",SETTINGS:"Configuraciones",NETWORK:"Red",TRANSACTIONS:"Mis operaciones"},ABOUT:{TITLE:"A propósito ",LICENSE:"Aplicación <b>libre</b> (licencia GNU AGPLv3).",LATEST_RELEASE:"Hay 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:",DEVELOPERS:"Desarrollado por:",FORUM:"Foro:",PLEASE_REPORT_ISSUE:"No dude en informarnos de las anomalías encontradas",REPORT_ISSUE:"Reportar un problema"},HOME:{TITLE:"Cesium",WELCOME:"Bienvenido(a) a la aplicación Cesium !",MESSAGE:"Seguir las cuentas de {{currency|abbreviate}} fácilmente",BTN_CURRENCY:"Explorar la moneda",BTN_ABOUT:"Acerca de:",BTN_HELP:"Ayuda en línea",REPORT_ISSUE:"anomalía",NOT_YOUR_ACCOUNT_QUESTION:'¿Usted no es dueño de la cuenta <<b><i class="ion-key"></i> {{pubkey|formatPubkey}}</b>?',BTN_CHANGE_ACCOUNT:"Desconectar esta cuenta",CONNECTION_ERROR:'Nodo <b>{{servidor}}</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 la configuración</a>.'},SETTINGS:{TITLE:"Configuración",DISPLAY_DIVIDER:"Visualización",STORAGE_DIVIDER:"Almacenamiento",NETWORK_SETTINGS:"Red",PEER:"Dirección del nodo Duniter",PEER_CHANGED_TEMPORARY:"Dirección utilizada temporalmente",PERSIST_CACHE:"Mantener 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 el ahorro de almacenamiento local",WALLETS_SETTINGS:"Mis monederos",USE_WALLETS_ENCRYPTION:"¿Asegurar la lista?",ENABLE_HELPTIP:"Activar las ayudas contextuales",ENABLE_UI_EFFECTS:"Activar los efectos visuales",HISTORY_SETTINGS:"Operaciones de cuentas",DISPLAY_UD_HISTORY:"¿Publicar los dividendos producidos?",TX_HISTORY_AUTO_REFRESH:"Activar actualización automática?",TX_HISTORY_AUTO_REFRESH_HELP:"Actualice el saldo y las operaciones automáticamente, en cada nuevo bloque.",AUTHENTICATION_SETTINGS:"Autenticación",KEEP_AUTH:"Caducidad de la autenticación",KEEP_AUTH_SHORT:"Caducidad",KEEP_AUTH_HELP:"Definir cuándo limpiar la memoria de autenticació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 llavero",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:"Activar el modo experto",EXPERT_MODE_HELP:"Permite una visualización más detallada",POPUP_PEER:{TITLE:"Nodo Duniter",HOST:"Dirección",HOST_HELP:"Dirección: servidor:puerto",USE_SSL:"¿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 corriente",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 el {{firstBlockTime|formatFromNow}}. Ella cuenta actualmente <b>{{N}} miembros</b>, que producen y recibir 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:"variaciones del último DU",MONEY_DIVIDER:"Moneda",MASS:"Masa monetaria",SHARE:"Masa por miembro",UD:"Dividendo universal",C_ACTUAL:"Crecimiento actual",MEDIAN_TIME:"Hora de la blockchain",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:"Número de certificaciones requeridas para ser miembro",SIG_STOCK:"Número máximo de certificaciones emitidas por miembros",SIG_PERIOD:"Plazo mínimo de espera entre 2 certificaciones sucesivas emitidas por la misma persona",SIG_WINDOW:"Plazo límite para tomar en cuenta una certificación",SIG_VALIDITY:"Duración de una certificación que se ha tenido en cuenta.",MS_WINDOW:"Duración límite para toma en cuenta de una adhesión",MS_VALIDITY:"Duración de una certificación",STEP_MAX:"Distancia máxima entre un nuevo entrante y los miembros referentes",WOT_RULES_DIVIDER:"Reglas de la red de confianza",SENTRIES:"Cantidad de certificaciones necesarias para ser miembro referente",SENTRIES_FORMULA:"Cantidad de certificaciones necesarias para ser miembro referente (fórmula)",XPERCENT:"Porcentaje mínimo de miembros referentes necesario para respetar la regla de distancia",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:"Descagar el fichero",NO_LICENSE_FILE:"Fichero de licencia no encontrado."}},NETWORK:{VIEW:{MEDIAN_TIME:"Hora de la blockchain",LOADING_PEERS:"Cargando los 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 mapa de red",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 inscripciones en espera <b>puede ser largo</b>. Gracias por su paciencia...",REGISTERED_SINCE:"Registrado en",REGISTERED_SINCE_BLOCK:"Registrado 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 el",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 simple monedero, sin solicitud de adhesión en espera.",TECHNICAL_DIVIDER:"Informaciones técnicas",BTN_CERTIFY:"Certificar",BTN_YES_CERTIFY:"Sí, certificar",BTN_SELECT_AND_CERTIFY:"Nueva certificación",ACCOUNT_OPERATIONS:"Operaciones de 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:"Inscrito {{sigDate | formatFromNow}}",MEMBER_FROM:"Miembro desde {{memberDate|medianFromNowShort}}",BTN_NEWCOMERS:"Nuevos miembros",BTN_PENDING:"Inscripciones en espera",SHOW_MORE:"Mostrar más",SHOW_MORE_COUNT:"(límite actual a {{limit}})",NO_PENDING:"Ninguna inscripción en espera.",NO_NEWCOMERS:"Ningun miembro."},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}} - Operaciones"},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 verificar que la clave pública es su cuenta.",PUBKEY_FORM_HELP:"Por favor ingrese una clave de cuenta pública:",FILE_FORM_HELP:"Elija el archivo de llavero para usar:",SCAN_FORM_HELP:"Escanee el código QR de la monedero.",SALT:"Identificador secreto",SALT_HELP:"Identificador secreto",SHOW_SALT:"¿Visualizar el identificador secreto?",PASSWORD:"Frase secreta",PASSWORD_HELP:"Frase secreta",PUBKEY_HELP:"llave pública",NO_ACCOUNT_QUESTION:"¿Aún no tiene cuenta?",HAVE_ACCOUNT_QUESTION:"¿Ya tienes una cuenta?",CREATE_ACCOUNT:"Crear una cuenta",CREATE_FREE_ACCOUNT:"Crear una cuenta gratis",FORGOTTEN_ID:"¿Olvidó su frase secreta?",ASSOCIATED_PUBKEY:"Clave pública del llavero:",BTN_METHODS:"Otros métodos",BTN_METHODS_DOTS:"Método de cambio...",METHOD_POPOVER_TITLE:"Métodos",MEMORIZE_AUTH_FILE:"Recuerda este llavero al momento de la sesión de navegación",SCRYPT_PARAMETERS:"Configuraciones (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:"Se desconectará en... {{countdown}}"},METHOD:{SCRYPT_DEFAULT:"Identificación predeterminada",SCRYPT_ADVANCED:"Sallaje avanzado",FILE:"Archivo llavero",PUBKEY:"Solo clave pública",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)."}},AUTH:{TITLE:'<i class="icon ion-locked"></i> AAutenticació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, autentifíquese en la monedero <i class="ion-key"></i> {{pubkey|formatPubkey}} :',SCAN_FORM_HELP:"Escanee el código QR de la <b>clave privada</b> de la monedero."},ACCOUNT:{TITLE:"Mi cuenta",BALANCE:"Saldo",LAST_TX:"última validadas transacción",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:"(límite actual a {{fromTime|medianFromNowShort}})",PENDING_TX:"Transacciones en proceso de se procesadas",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 adhesión emitida. En espera de aceptación.",WAITING_CERTIFICATIONS:"Debe obtener {{needCertificationCount}} certificación(es) para ser miembro.",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:"No es miembro porque su adhesión <b>ha expirado</b>. Piense en <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 adhesión...",BTN_MEMBERSHIP_RENEW:"Renovar la adhesión",BTN_MEMBERSHIP_RENEW_DOTS:"Renovar la adhesión...",BTN_MEMBERSHIP_OUT_DOTS:"Cancelar la adhesión...",BTN_SECURITY_DOTS:"Cuenta y securidad...",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:"Inscripción",INTRO_WARNING_TIME:"Crear una cuenta en {{name|capitalize}} es muy simple. Sin embargo, por favor tome el tiempo suficiente para dar correctamente este paso (no olvidar los identificadores, frase secreta, etc.).",INTRO_WARNING_SECURITY:"Asegúrece de que el equipo que utiliza actualmente (ordenador, tableta, teléfono) <b>es seguro y digno de confianza</b>.",INTRO_WARNING_SECURITY_HELP:"Actualizaciones de antivirus, firewall activado, sesión protegidos por contraseña o código 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 usted no confía en este nodo, <a ng-click=\"doQuickFix('settings')\">cambie la configuración</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 aún no está inscrito como un individuo (Solamente una cuenta posible por individuo).",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>Retenga bien este identificador secreto</b>.<br/>¡En caso de pérdida, nadie podrá acceder a su cuenta!",PASSWORD_WARNING:"Elija su frase secreta.<br/>Se solicitará cada vez que se conectará con esta cuenta.<br/><br/><b>Retenga bien esta frase secreta</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 frase secreta",SLIDE_6_TITLE:"Confirmación:",COMPUTING_PUBKEY:"Cálculo en proceso...",LAST_SLIDE_CONGRATULATION:"<b>¡Bien!</b> Ha introducido todas los datos necesarias.<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 sus pagos.<br/>Sin embargo, <b>no es útil</b> anotarla aquí.",CONFIRMATION_MEMBER_ACCOUNT:'<b class="assertive">Advertencia:</b> el identificador secreto, la frase secreta y el seudónimo no podrán estar modificados.<br/><b>¡Asegúrese siempre de recordarlos!</b><br/><br/><b>¿Está usted seguro</b> de querer solicitar la inscripción?',CONFIRMATION_WALLET_ACCOUNT:'<b class="assertive">Advertencia:</b> el identificador secreto y la frase secreta no podrán estar modificados.<br/><b>¡Asegúrese de recordarlos siempre!</b><br/><br/><b>¿Está usted seguro</b> de querer continuar con estos identificadores?',CHECKING_PSEUDO:"Comprobar de disponibilidad...",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 clave 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:{TITLE:"Mis monederos",BTN_NEW:"Añadir un monedero",BTN_DOWNLOAD:"Descargue la lista",BTN_IMPORT_FILE_DOTS:"Importar desde un archivo...",NO_WALLET:"Sin monedero secundaria",BTN_DELETE:"Eliminar una monedero secundaria...",BTN_RENAME:"Renombrar el monedero",EXPORT_FILENAME:"monederos-{{pubkey|formatPubkey}}-{{currency}}.csv",EDIT_POPOVER:{TITLE:"Renombrar el monedero",HELP:"Completa el nuevo nombre",NAME_HELP:"Nombre de la monedero"}},SECURITY:{ADD_QUESTION:"Añadir una pregunta personalizada",BTN_CLEAN:"Limpiar",BTN_RESET:"Reinicializar",DOWNLOAD_REVOKE:"Grabar un fichero de revocación",HELP_LEVEL:"Para generar un fichero de respaldo de sus identificadores, elija <strong> al menos {{nb}} preguntas:</strong>",LEVEL:"Nivel de seguridad",LOW_LEVEL:'Bajo <span class="hidden-xs">(mínimo dos preguntas)</span>',MEDIUM_LEVEL:'Medio <span class="hidden-xs">(mínimo cuatro preguntas)</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 maestro favorito en la escuela primaria?",QUESTION_7:"¿Cuál sería para usted el mejor oficio?",QUESTION_8:"¿Cuál es su libro para niños preferido?",QUESTION_9:"¿Cuál fue el modelo de su primer vehículo?",QUESTION_10:"¿Cuál fue su sobrenombre cuando era niña(o)?",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/a cuando era estudiante?",QUESTION_13:"¿En qué ciudad sus padres se encontraron?",QUESTION_14:"¿Cómo se llamaba su primer jefe?",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 identificadores",REVOCATION_WITH_FILE:"Revocar una identidad a partir de un fichero",REVOCATION_WITH_FILE_DESCRIPTION:"Si ha perdido las credenciales de su cuenta de miembro de forma permanente (o la seguridad de la cuenta se ve comprometida), puede usar <b>el archivo de revocación de la cuenta</b> para forzar publicación final de la web de confianza.",REVOCATION_WITH_FILE_HELP:"Para <b>revocar permanentemente</b> una cuenta de miembro, arrastre el archivo de revocación en el cuadro siguiente o haga clic en el cuadro para buscar un archivo.",REVOCATION_FILENAME:"revocation-{{uid}}-{{pubkey|formatPubkey}}-{{currency}}.txt",REVOCATION_WALLET:"Revocar esta identidad",SAVE_ID:"Grabar sus identificadores",STRONG_LEVEL:'Alto <span class="hidden-xs ">(6 preguntas mínimo)</span>',TITLE:"Cuenta y seguridad"},FILE_NAME:"{{currency}} - Estado de cuenta {{pubkey|formatPubkey}} a {{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:{UNKNOWN_URI_FORMAT:"Formato URI desconocido",PUBKEY_INVALID_CHECKSUM:"Clave 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 llavero.",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:"Email no válido",PASSWORD_NOT_CONFIRMED:"No corresponde a la frase secreta.",SALT_NOT_CONFIRMED:"No corresponde al identificador secreto.",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 ya no es miembro.<br/><br/>Todavía faltan certificaciones, o ahora no son validas.",IDENTITY_TO_CERTIFY_HAS_NO_SELF:"Cuenta no certificable. No se ha solicitado la adhesión, o no fue renovada.",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 las configuración 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 clave 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 estar miembro.",IDENTITY_REVOKED_WITH_TIME:"Esta identidad <b>fue revocada {{revocationTime|medianFromNow}}</b> ({{revocationTime|medianDate}}). No puede estar 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>Paramètres</b>).",IDENTITY_NOT_FOUND:"Identidad no encontrada",IDENTITY_TX_FAILED:"Las operaciones de carga fallidos",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:"Error el la carga de los miembros nuevos.",LOAD_PENDING_FAILED:"Error el la carga de las inscripciones en espera.",ONLY_MEMBER_CAN_EXECUTE_THIS_ACTION:"Debe <b>estar 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 los identificadores",LOAD_FILE_FAILED:"Error en la carga del fichero",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:"Su frase secreta corresponde a una cuenta existente, la <a ng-click=\"showHelpModal('pubkey')\">clave pública</a> es:",EXISTING_ACCOUNT_REQUEST:"Por favor, cambie su frase secreta para que coincida con una cuenta sin usar.",GET_LICENSE_FILE_FAILED:"Error al obtener el archivo de licencia",CHECK_NETWORK_CONNECTION:"Ningún nodo parece alcanzable.<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 clave 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 piense que :<br/><br/><ul><li>1.) no corresponde a una persona <b>física y viviente</b>.<li>2.) su propietario <b>posee una 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>¿Está usted seguro</b> sin embargo querer certificar esta identidad?',TRANSFER:"<b>Recapitulativo 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>¿Está usted seguro de querer realizar esta transferencia?</b>",TRANSFER_ALL:"<b>Recapitulativo 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>¿Está usted seguro de querer realizar esta transferencia?</b>",MEMBERSHIP_OUT:"Esta operación es <b>irreversible</b>.<br/></br/>¿Está usted seguro querer <b>anular su cuenta miembro</b>?",MEMBERSHIP_OUT_2:"¡Esta operación es <b>irreversible</b>!<br/><br/>¿Está usted seguro querer <b>anular su adhesión</b> como miembro?",LOGIN_UNUSED_WALLET_TITLE:"¿Error de introducción de datos?",LOGIN_UNUSED_WALLET:"Está usted conectado a une cuenta que parece <b>inactiva</b>.<br/><br/>Si esta cuenta no corresponde a la suya, se trata probablemente de un <b>error al introducir los datos</b> de sus identificadores de conexión.<br/></br/><b>¿Quiere usted 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>¿Está usted seguro</b> de querer continuar?",FIX_MEMBERSHIP:"Su solicitud de adhesión como miembro va a ser enviada de nuevo.<br/></br/><b>¿Está usted seguro</b>de querer continuar?",MEMBERSHIP:"Se enviará su solicitud de membresía como miembro.<br/></br/><b>¿Está usted seguro</b>de querer continuar?",RENEW_MEMBERSHIP:"Su adhesión como miembro va a estar renovada.<br/></br/><b>¿Está usted seguro</b>de querer 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>¿Está usted seguro</b> de querer revocar definitivamente esta cuenta?",REVOKE_IDENTITY_2:"¡Esta operación es <b>irreversible</b>!<br/><br/>¿Está usted seguro de querer <b>revocar definitivamente</b> esta cuenta?",NOT_NEED_RENEW_MEMBERSHIP:"Su adhesión no necesita ser renovada (solo va a caducar en {{membershipExpiresIn|formatDuration}}).<br/></br/><b>¿Está usted segura(o)</b> de querer renovar su adhesión?",SAVE_BEFORE_LEAVE:"¿Quiere usted <b>guardar sus cambios</b> antes dejar la página?",SAVE_BEFORE_LEAVE_TITLE:"Cambios no registrados",LOGOUT:"¿Está usted segura(o) de querer desconectarse?",USE_FALLBACK_NODE:"Nodo <b>{{edad}}</ b> inalcanzable o no válido.<br/><br/>¿Desea utilizar temporalmente el nodo <b>{{nuevo}}</b>?"},DOWNLOAD:{POPUP_TITLE:"<b>Revocación del archivo</b>",POPUP_REVOKE_MESSAGE:"Para proteger su cuenta, descargar el <b>documento de revocación de cuenta</b>. Si se necesita cancelar su cuenta (en caso de robo, cambio de identificador, una cuenta falsa creada, 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 la frase secreta, antes de calcular la <span class="text-italic">llave pública</span> de su cuenta (su número) y la llave secreta para acceder a esta.<br/><b>Por favor, memorícelo muy bien</b> porque actualmente no existe ninguna manera para encontrarlo en caso de pérdida.<br/>Por otra parte, no puede ser modificado sin tener que crear una nueva cuenta.<br/><br/>Un buen identificador secreto debe ser suficientemente largo (al menos 8 carácteres) y lo más original posible.',PASSWORD:"La frase secreta es muy importante. Junto al identificador secreto, sirve a calcular el número (la llave pública) de su cuenta, y la llave secreta para acceder a ella.<br/><b>Por favor, memorícela muy bien</b> porque actualmente no existe ninguna manera para encontrarla en caso de pérdida (excepto el generar un fichero de respaldo).<br/>Por otra parte, no puede ser modificado sin deber creer una nueva cuenta.<br/><br/>Una buena frase secreta contiene (idealmente) al menos 8 carácteres, del que al menos una mayúscula y un número.",PSEUDO:'El seudónimo es solamente utilizado en caso de inscripción como <span class="text-italic">miembro</span>. Siempre es asociado a un monedero (vía su <span class="text-italic">llave pública</span>).<br/>El seudónimo se publica en la red para que los otros usuarios puedan identificarlo, certificarlo o enviar dinero a la cuenta.<br/>Un seudónimo debe ser único dentro de los miembros (<u>actuales</u> y antiguos).'},GLOSSARY:{SECTION:"Glosario",PUBKEY_DEF:"Una llave pública identifica un monedero. Puede identificar un miembro. En Cesium se calcula con el identificador y la frase secreta.",MEMBER:"Miembro",MEMBER_DEF:'Un miembro es una persona humana física y viviente, deseosa de participar libremente a la comunidad monetaria. Percibe un dividendo universal, dependiendo de un período y un 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 son definidas una sola vez por todas. 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 un miembro puede emitir, etc. <a href="#/app/currency">Ver las reglas actuales</a>.<br/> Una <span class="text-italic">BlockChain</span> que soporta y ejecuta estas reglas, y verifica continuamente su buena aplicación, hace posible que ellas no se modifiquen en el tiempo.',BLOCKCHAIN:'Cadena de bloques (<span class="text-italic">Blockchain</span>)',BLOCKCHAIN_DEF:'La BlockChain es un sistema descentralizado, que, para el caso de Duniter, sirve a mantener y ejecutar las <span class="text-italic">reglas de la moneda</span>.<br/><a href="http://duniter.org" target="_system">Saber más a proposito de Duniter</a> y el funcionamiento de su blockchain.',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 dinero.<br/><br/>El DU crece regularmente, para ser justo entre los miembros (actuales y futuros), calculado en función de la esperanza de vida media, como demostrado en la Théorie Relative de la Monnaie (TRM) = Teoría Relativa de la Moneda, aún no está traducida en español, contáctenos para contribuir a su traducción.<br/><a href="http://trm.creationmonetaire.info">Saber más a propósito de la TRM</a> y las monedas libres.'},TIP:{MENU_BTN_CURRENCY:"El menú <b>{{'MENU.CURRENCY'|translate}}</b> permite consultar las <b>reglas de la moneda</b> y su estado.",CURRENCY_WOT:"El <b>número de miembros</b> demuestra la importancia 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>importancia de un importe</b>, en relación con lo que <b>poseen los otros</b> en sus cuentas (como media).",CURRENCY_UNIT_RELATIVE:"La unidad utilizada (“<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”) 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 “<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”).",CURRENCY_CHANGE_UNIT_TO_RELATIVE:"Este botón permite <b>cambiar la unidad</b>, para visualizar los importes en “<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”, 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 operaciones de la moneda están registradas dentro de un grand libro de cuenta <b>público e infalsificable</b>, también llamado <b>cadena de bloques</b> (<em>BlockChain</em> en inglés).",NETWORK_PEERS:"Los <b>nodos</b> visibles aquí corresponden a los <b>ordenadores que actualizan y controlan</b> la cadena de bloques.<br/><br/>Entre más nodos estén 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 pagina escrita dentro del grand libro de cuentas).<br/><br/>El color verde indica que este bloque ha sido también validado por <b>la mayoría de los otros nodos</b>.",NETWORK_PEERS_PARTICIPATE:'<b>Cada miembro</b>, equipado de un ordenador conectador a Internet, <b>puede participar añadiendo un nodo</b>. Necesita <b>instalar el programa Duniter</b> (libre y gratis). <a href="{{installDocUrl}}" target="_system">Ver el manual de uso >></a>.',MENU_BTN_ACCOUNT:"El menú <b>{{'ACCOUNT.TITLE'|translate}}</b> permite acceder a la gestión 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 (“<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”) 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> {{'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/>Sólo usuarios <b>miembros</b> pueden certificar a otros.",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 sus transacciones y mandar un pago.",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, escribe 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, escribe las <b>primeras letras de un seudónimo</b> (o de una llave pública). <br/><br/>Luego, pulsa en la tecla <b>Entrada</b> para iniciar la búsqueda.",WOT_SEARCH_RESULT:"Visualiza la ficha detallada simplemente <b>haciendo un clic</b> sobre una línea.",WOT_VIEW_CERTIFICATIONS:"La línea <b>{{'ACCOUNT.CERTIFICATION_COUNT'|translate}}</b> muestra cuántos miembros han validado esta identidad.<br/><br/>Estas certificaciones atestiguan que la cuenta pertenece a <b>una persona humana viviente</b> y que no tenga <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> Certificar solamente <b>personas físicas vivas</b>, que no posean ninguna otra cuenta miembro.<br/><br/>¡La seguridad de la moneda depende de la vigilancia de cada uno!",MENU_BTN_SETTINGS:"Los <b>{{'MENU.SETTINGS'|translate}}</b> le permitirán configurar la aplicación.",HEADER_BAR_BTN_PROFILE:"Haga un clic aquí para acceder a su <b>perfil de usuario</b>",SETTINGS_CHANGE_UNIT:"Podrá <b>cambiar la unidad de visualización</b> de los importes haciendo un clic más arriba.<br/><br/>- Desactive la opción para visualizar los importes en {{currency|capitalize}}.<br/>- Active la opción para visualizar los importes relativos al {{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub> (todos los importes serán <b>dividido</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."}}}),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 !",MESSAGE:"Recevez et envoyez de la monnaie libre {{currency|abbreviate}}",BTN_CURRENCY:"Explorer la monnaie {{name|abbreviate}}",BTN_ABOUT:"à propos",BTN_HELP:"Aide en ligne",REPORT_ISSUE:"anomalie",NOT_YOUR_ACCOUNT_QUESTION:'Vous n\'êtes pas propriétaire du compte <b class="ion-key"> {{pubkey|formatPubkey}}</b> ?',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.",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>."},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 (“<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”) 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 “<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”).",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 “<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”, 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 >></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 (“<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”) 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> {{'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."}},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</a>."},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_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...",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:",DEVELOPERS:"Sviluppatori:",FORUM:"Forum:",DEV_WARNING:"Attenzione!",DEV_WARNING_MESSAGE:"Questa app è ancora in sviluppo attivo.<br/>Facci sapere se trovi dei bugs!",DEV_WARNING_MESSAGE_SHORT:"Questa app è tutt'ora instabile (in sviluppo)",REPORT_ISSUE:"Segnalare un bug"},HOME:{TITLE:"Cesium",WELCOME:"Benvenuti nell'{{'COMMON.APP_NAME'|translate}} App!",MESSAGE:"Scambiate in moneta libera. {{currency|abbreviate}}!",BTN_CURRENCY:"Esplorare la moneta",BTN_ABOUT:"a proposito",BTN_HELP:"Aiuto",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>.'},SETTINGS:{TITLE:"Impostazioni",NETWORK_SETTINGS:"Rete",PEER:"Indirizzo peer Duniter",PEER_CHANGED_TEMPORARY:"Indirizzo usato per un tempo determinato",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:{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.",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_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."},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 (“<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”) 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 “<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”).",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 “<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”, 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 >></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 (“<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”) 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> {{'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."}},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)."},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 (“<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”) 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 “<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”).",CURRENCY_CHANGE_UNIT_TO_RELATIVE:"This button allows to <b>switch the unit</b> to show amounts in “<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”, 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 >></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 (“<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”) 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> {{'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","csSettings","csCurrency","csPlatform","csTx","csWallet","csDemoWallet",function(e,t,i,n,a,o,r,s,l,c,d,u,m,E,p,b,T,_,f){function g(e){return 100*parseFloat((e||"0").trim().replace(new RegExp("[.,]"),".")).toFixed(2)}angular.extend(this,n("AuthCtrl",{$scope:e})),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=g(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=g(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 m=angular.copy(e.node);m.useSsl=!0,m.port=443,E.data.fallbackNodes=E.data.fallbackNodes||[],E.data.fallbackNodes.splice(0,0,m)}}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(p.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(m.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 m.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)})):m.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 m.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),m.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,m.loading.hide(),o.reject();if(!e.sending){e.sending=!0,delete e.transferData.error;var i=e.demo?f.instance(t):_.instance("api",d);m.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,m.loading.hide(),e.askTransferConfirm(t)})).then((function(t){if(t)return m.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 m.loading.hide(),e})).catch((function(e){return m.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,m.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,m,E,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 v(){g&&g(),g=null}function O(e){if(e)return!0;b=b||m.data.node;var t=m.data.fallbackNodes&&N<m.data.fallbackNodes.length&&m.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)),O()):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 O();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 m.data.node=t,m.data.node.temporary=!0,c.cache.clear(),s.copy(t).then(O)}))}))}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(),m.ready()])).then((function(){return s.ready().then(O)})).then(E.ready).then(p.ready).then((function(){v(),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(),E.stop(),s.stop(),o((function(){v(),h=!1,T=null}),500)):i.when()}return{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=m.data.latestReleaseUrl&&c.uri.parse(m.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,m,E,p,b){e.config=p,e.settings=E.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(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
|