1
0
Fork 0
astroport/www/cesium/dist_js/cesium.js

18 lines
1.6 MiB
JavaScript
Raw Normal View History

2020-03-29 14:59:00 +02:00
/* minified */
var e;function t(e){var t=this;Object.keys(e).forEach((function(n){t[n]=e[n]})),t.endpoints=t.endpoints||[]}function n(e,t){"use strict";var n=this;t&&t.length?_.forEach(t,(function(t){n[t]=e[t]})):["currency","issuer","medianTime","number","version","powMin","dividend","membersCount","hash","identities","joiners","actives","leavers","revoked","excluded","certifications","transactions","unitbase"].forEach((function(t){n[t]=e[t]})),n.identitiesCount=n.identities?n.identities.length:0,n.joinersCount=n.joiners?n.joiners.length:0,n.activesCount=n.actives?n.actives.length:0,n.leaversCount=n.leavers?n.leavers.length:0,n.revokedCount=n.revoked?n.revoked.length:0,n.excludedCount=n.excluded?n.excluded.length:0,n.certificationsCount=n.certifications?n.certifications.length:0,n.transactionsCount=n.transactions?n.transactions.length:0,n.empty=n.isEmpty(),n.id=[n.number,n.hash].join("-")}function a(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 n=t[0];if(n.length>4){var i=this.regexp.WS2P_PREFIX.exec(n);if(!i)throw Error("Invalid format: "+e);var a=i[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=i[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 o(e,t){e.extensionPoint=t.extensions.points.current.get()}function r(e,t,n,i,a,o,r,s,l,c,d,u,p,m,E,b,g,f,_,h){e.walletData=b.data,e.search={},e.login=b.isLogin(),e.auth=b.isAuth(),e.motion=m.motion.default,e.fullscreen=m.screen.fullscreen.isEnabled(),e.showHome=function(){return r.nextViewOptions({historyRoot:!0}),n.go("app.home").then(m.loading.hide)},e.createHelptipScope=function(n){if(n||!t.tour&&t.settings.helptip.enable&&!m.screen.isSmall()){var i=e.$new();return s("HelpTipCtrl",{$scope:i}),i}},e.startHelpTour=function(n,i){if(n&&n.defaultPrevented)return!1;if(t.tour=!0,!i)return r.clearHistory(),r.clearCache().then((function(){e.startHelpTour(null,!0)}));var a=e.createHelptipScope(!0);return a.startHelpTour().then((function(){a.$destroy(),delete t.tour})).catch((function(e){delete t.tour}))},e.disableHelpTour=function(e){e&&(e.preventDefault(),e.stopPropagation()),d.data.helptip&&d.data.helptip.enable&&(t.settings.helptip.enable=!1,d.store())},e.isLogin=function(){return e.login},e.loadWalletData=function(e){return console.warn("[app-controller] DEPRECATED - Please use csWallet.load() instead of $scope.loadWalletData()",new Error),((e=e||{}).wallet||b).loadData(e).then((function(e){if(!e)throw"CANCELLED";return e}))},e.loadWallet=function(t){if(console.warn("[app-controller] DEPRECATED - Please use csWallet.loginOrLoad() instead of $scope.loadWallet()",new Error),!c.isStarted())return c.ready().then((function(){return e.loadWallet(t)}));var n=(t=t||{}).wallet||b;return t.auth&&!n.isAuth()?n.auth(t).then((function(e){if(e)return e;throw"CANCELLED"})):n.isLogin()?n.isDataLoaded(t)?a.when(n.data):e.loadWalletData(t):n.login(t).then((function(e){if(e)return e;throw"CANCELLED"}))},e.loginAndGo=function(t,i){e.closeProfilePopover();var a=(i=i||{}).wallet||b;if(delete i.wallet,t=t||"app.view_wallet",a.isLogin())return n.go(t,i);if(_.httpsMode&&l.location&&"https:"!==l.location.protocol){var o=l.location.href,r=o.indexOf("#"),s=-1!=r?o.substr(0,r):o;if(o=(s="https"+s.substr(4))+n.href(t),!_.httpsModeDebug)return void(l.location.href=o);console.debug("[httpsMode] --- Should redirect to: "+o)}return a.login(i).then((function(){return n.go(t,i)})).then(m.loading.hide)},e.logout=function(t){var n=(t=t||{}).wallet||b;return!t.force&&e.profilePopover?e.profilePopover.hide().then((function(){return t.force=!0,e.logout(t)})):t.askConfirm?m.alert.confirm("CONFIRM.LOGOUT").then((function(n){if(n)return t.askConfirm=!1,e.logout(t)})):(m.loading.show(),n.logout().then((fun
return e.formData.node&&e.formData.node.host?u.getServer(e.formData.node.host,e.formData.node.port):""},e.cleanupHelpTip=function(){if(e.formData.helptip.enable!==E.data.helptip.enable){var t=e.formData.helptip.enable;e.formData.helptip=angular.merge({},E.defaultSettings.helptip),e.formData.helptip.enable=t}},e.showActionsPopover=function(t){l.popover.show(t,{templateUrl:"templates/settings/popover_actions.html",scope:e,autoremove:!0,afterShow:function(t){e.actionsPopover=t}})},e.hideActionsPopover=function(){e.actionsPopover&&(e.actionsPopover.hide(),e.actionsPopover=null)},e.startSettingsTour=function(){return e.hideActionsPopover(),e.showHelpTip(0,!0)},e.showHelpTip=function(t,n){if((e.isLogin()||n)&&!((t=angular.isDefined(t)?t:E.data.helptip.settings)<0)){0===t&&(t=1);var i=e.createHelptipScope(n);if(i)return i.startSettingsTour(t,!1).then((function(e){i.$destroy(),E.data.helptip.settings=e,E.store()}))}}}function K(e,t,i,a,o,r,s,l,c,d,u){e.search={result:[],total:0,loading:!0,loadingMore:!1,hasMore:!1,type:"last"},e.node={},e.currency=!1,e.entered=!1,e.searchTextId=null,e.ionItemClass="item-border-large",e.defaultSizeLimit=s.screen.isSmall()?50:100,e.helptipPrefix="helptip-network",e.listeners=[],e.enter=function(n,a){if(e.entered)e.addListeners();else{if(a&&a.stateParams&&a.stateParams.q&&(e.search.text=a.stateParams.q,e.search.text&&e.search.text.trim().length&&(e.search.type="text")),a&&a.stateParams&&a.stateParams.server){var o="true"==a.stateParams.ssl,r="true"==a.stateParams.tor,d={server:a.stateParams.server,host:a.stateParams.server,useSsl:o,useTor:r},p=a.stateParams.server.split(":");if(2===p.length&&(d.host=p[0],d.port=p[1]),!l.node.same(d))return e.node=r?l.instance(d.host+".to",443,!0,6e5):l.instance(d.host,d.port,d.useSsl),e.node.blockchain.parameters().then((function(t){e.currency=t.currency,e.enter()}));e.node=l}if(!e.currency)return c.get().then((function(t){e.currency=t?t.name:null,e.node=t.node?t.node:l,e.currency?e.enter():s.alert.error("ERROR.GET_CURRENCY_FAILED")})).catch(s.onError("ERROR.GET_CURRENCY_FAILED"));e.compactMode=!angular.isDefined(e.compactMode)||e.compactMode,e.expertMode=angular.isDefined(e.expertMode)?e.expertMode:!s.screen.isSmall()&&u.data.expertMode,e.doSearch(),e.searchTextId&&t((function(){i(e.searchTextId)}),100),e.addListeners(),e.entered=!0,e.showHelpTip()}},e.$on("$ionicParentView.enter",e.enter),e.leave=function(){e.removeListeners()},e.$on("$ionicParentView.leave",e.leave),e.$on("$destroy",e.leave),e.doSearchLast=function(){return e.search.type="last",e.doSearch()},e.doSearch=function(t){var i;if(t=angular.isDefined(t)?t:0,e.search.loading=0===t,e.search.hasMore=!1,0===t)i=e.node.blockchain.current(!1).then((function(t){var n=t.number<e.defaultSizeLimit?t.number:e.defaultSizeLimit;return e.node.blockchain.blocksSlice({count:n,from:t.number-n}).then((function(e){return e&&e.splice(0,0,t),e}))})).catch((function(e){if(e&&e.ucode==l.errorCodes.NO_CURRENT_BLOCK)return[];throw e}));else{var a=e.search.results[e.search.results.length-1].number,o=a<e.defaultSizeLimit?a:e.defaultSizeLimit;i=e.node.blockchain.blocksSlice({count:o,from:a-o})}return i.then((function(i){if(!i||!i.length)return e.doDisplayResult([],t,0),void(e.search.loading=!1);i=i.reduce((function(e,t){var i=new n(t);return i.cleanData(),e.concat(i)}),[]),i=_.sortBy(i,(function(e){return-1*e.number}));var a=(0===t?i[0].number:e.search.results[0].number)+1;return e.doPrepareResult(i,t).then((function(){e.doDisplayResult(i,t,a),e.search.loading=!1}))})).catch((function(t){s.onError("BLOCKCHAIN.ERROR.SEARCH_BLOCKS_FAILED")(t),e.search.loading=!1}))};var p=a("formatDateShort");e.doPrepareResult=function(t,n){if(n=angular.isDefined(n)?n:0,"last"==e.search.type){var i;if(n>0&&e.search.results.length){var a=e.search.results[e.search.results.length-1];i=a.empty?a.day:void 0}_.forEach(t,(function(e,t){if(e.empty){var a=p(e.medianTime),o=0!==t||0!==n,r=!i||i==a;e.compacted=o&&r,i=a}else i=void 0}))}return d.extendAll(t,"issuer")},e.doDisplayResult=function(t,n,i){e.search.results=n?e.search.results.concat(t):t||[],e.searc
;e.options.like.service=c.instance(e.options.like.index,e.options.like.type)}e.options.like.kinds||(e.options.like.kinds=_.filter(c.constants.KINDS,(function(t){var n=t.toLowerCase()+"s";return angular.isDefined(e.likeData[n])})))},e.loadLikes=function(n){if(e.likeData&&!e.likeData.loading){n=n||e.likeData.id,e.initLikes();var i=e.options.like.kinds||[];if(i.length){e.likeData.loading=!0;var a=Date.now();console.debug("[ES] Loading counter of {0}... ({1})".format(n.substring(0,8),i));var o=s.isLogin()?s.pubkeys():void 0;return t.all(_.map(i,(function(t){var i=t.toLowerCase()+"s";return e.options.like.service.count(n,{issuers:o,kind:t}).then((function(t){e.likeData[i]&&angular.merge(e.likeData[i],t)}))}))).then((function(){e.likeData.id=n,console.debug("[ES] Loading counter of {0} [OK] in {1}ms".format(n.substring(0,8),Date.now()-a)),_.contains(i,"VIEW")&&!e.canEdit&&e.markAsView(),e.$parent&&(console.debug("[ES] [likes] Adding data and functions to parent scope"),e.$parent.toggleLike=e.toggleLike,e.$parent.reportAbuse=e.reportAbuse),e.likeData.loading=!1})).catch((function(t){console.error(t&&t.message||t),e.likeData.loading=!1}))}}},e.toggleLike=function(i,a){if(e.initLikes(),!e.likeData.id)throw new Error("Missing 'likeData.id' in scope. Cannot apply toggle");(a=a||{}).kind=a.kind&&a.kind.toUpperCase()||"LIKE";var l=a.kind.toLowerCase()+"s";if(e.likeData[l]=e.likeData[l]||{},!0===e.likeData[l].loading||e.likeData.loading)return i.preventDefault(),t.reject();if(!a.pubkey)return(s.children.count()?r.showSelectWallet({displayBalance:!1}):t.when(s)).then((function(t){if(!t)throw"CANCELLED";return a.pubkey=t.data.pubkey,e.toggleLike(i,a)}));var c=s.getByPubkey(a.pubkey);return c?(e.likeData[l].loading=!0,c.auth({minData:!0}).then((function(t){if(t)return t.isMember,a.id=e.likeData.id,e.options.like.service.toggle(e.likeData.id,a);o.loading.hide()})).then((function(t){o.loading.hide(),0!==t&&(e.likeData[l].total=(e.likeData[l].total||0)+t,e.likeData[l].wasHitByPubkey=e.likeData[l].wasHitByPubkey||{},e.likeData[l].wasHitByPubkey[a.pubkey]=t>0,e.likeData[l].wasHitCount+=t),n((function(){e.likeData[l].loading=!1,e.$broadcast("$$rebind::like")}),1e3)})).catch((function(t){e.likeData[l].loading=!1,"CANCELLED"!==t&&(console.error(t),o.onError("LIKE.ERROR.FAILED_TOGGLE_LIKE")(t),i.preventDefault())}))):void 0},e.setAbuseForm=function(t){e.abuseForm=t},e.showAbuseCommentPopover=function(t){return i(["COMMON.REPORT_ABUSE.TITLE","COMMON.REPORT_ABUSE.SUB_TITLE","COMMON.BTN_SEND","COMMON.BTN_CANCEL"]).then((function(t){return o.loading.hide(),a.show({templateUrl:"plugins/es/templates/common/popup_report_abuse.html",title:t["COMMON.REPORT_ABUSE.TITLE"],subTitle:t["COMMON.REPORT_ABUSE.SUB_TITLE"],cssClass:"popup-report-abuse",scope:e,buttons:[{text:t["COMMON.BTN_CANCEL"],type:"button-stable button-clear gray"},{text:t["COMMON.BTN_SEND"],type:"button button-positive ink",onTap:function(t){if(e.abuseForm.$submitted=!0,e.abuseForm.$valid&&e.abuseData.comment)return e.abuseData;t.preventDefault()}}]})})).then((function(t){if(e.abuseData={},t&&t.comment)return t;o.loading.hide()}))},e.reportAbuse=function(n,i){if(e.likeData&&e.likeData.abuses&&!e.likeData.abuses.wasHitCount&&!e.likeData.abuses.wasHitCount){if(!(i=i||{}).pubkey)return(s.children.count()?r.showSelectWallet({displayBalance:!1}):t.when(s)).then((function(t){if(!t)throw"CANCELLED";return i.pubkey=t.data.pubkey,e.reportAbuse(n,i)}));var a=s.getByPubkey(i.pubkey);if(a&&a.isMember())return i.comment?(i.kind="ABUSE",e.toggleLike(n,i).then((function(){o.toast.show("COMMON.REPORT_ABUSE.CONFIRM.SENT")}))):e.showAbuseCommentPopover(n).then((function(t){if(t&&t.comment)return i.comment=t.comment,i.level=t.level||t.delete&&5||void 0,e.reportAbuse(n,i)}));o.alert.info("ERROR.ONLY_MEMBER_CAN_EXECUTE_THIS_ACTION")}},s.api.data.on.reset(e,(function(){_.forEach(e.options.like.kinds||[],(function(t){var n=t.toLowerCase()+"s";e.likeData[n]&&(e.likeData[n].wasHitByPubkey={},e.likeData[n].wasHitCount=0)})),e.$broadcast("$$rebind::like")}),this)}function je(e,t,n,i,a,o,r,s,l){function c(t){return mo
URI_WITH_AT:"duniter://(?:([A-Za-z0-9_-]+):)?("+h+"@([a-zA-Z0-9-.]+.[ a-zA-Z0-9-_:/;*?!^\\+=@&~#|<>%.]+)",URI_WITH_PATH:"duniter://([a-zA-Z0-9-.]+.[a-zA-Z0-9-_:.]+)/("+h+")(?:/([A-Za-z0-9_-]+))?",BMA_ENDPOINT:O.BMA+I,BMAS_ENDPOINT:O.BMAS+I,WS2P_ENDPOINT:O.WS2P+" ([a-f0-9]{8})"+I,BMATOR_ENDPOINT:O.BMATOR+" ([a-z0-9-_.]*|[0-9.]+|[0-9a-f:]+.onion)(?: ([0-9]+))?",WS2PTOR_ENDPOINT:O.WS2PTOR+" ([a-f0-9]{8}) ([a-z0-9-_.]*|[0-9.]+|[0-9a-f:]+.onion)(?: ([0-9]+))?(?: (.+))?"},R={PROTOCOL_VERSION:10,ROOT_BLOCK_HASH:"E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855",LIMIT_REQUEST_COUNT:5,LIMIT_REQUEST_DELAY:1e3,regexp:N,api:O},A=this;function S(e,t,n){A.started&&A.stop(),A.alive=!1,c.data&&c.data.node&&(e=e||c.data.node.host,t=t||c.data.node.port,n=angular.isDefined(n)?n:443==t||c.data.node.useSsl||A.forceUseSsl),e&&(A.host=e,A.port=t||80,A.useSsl=angular.isDefined(n)?n:443==A.port||A.forceUseSsl,A.server=u.getServer(e,t),A.url=u.getUrl(e,t,"",n))}function C(e){return new RegExp("^"+e+"$")}function L(e){return new RegExp(e)}function D(){A.raw&&(console.warn("[BMA] Closing all websockets..."),_.keys(A.raw.wsByPath||{}).forEach((function(e){A.raw.wsByPath[e].close()})),A.raw.wsByPath={})}function y(e,t){t=A.useCache&&t||0;var n=e+(t?"#"+t:""),a=function(o){if(!A.started)return A._startPromise||console.warn("[BMA] Trying to get [{0}] before start(). Waiting...".format(e)),A.ready().then((function(){return a(o)}));var r=A.raw.getByPath[n];r||(r=t?u.getWithCache(A.host,A.port,e,A.useSsl,t,null,null,f):u.get(A.host,A.port,e,A.useSsl),A.raw.getByPath[n]=r);var l=1;return r(o).catch((function(e){if(e&&e.ucode===w.errorCodes.HTTP_LIMITATION&&l<=w.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"})),i((function(){return l++,r(o)}),w.constants.LIMIT_REQUEST_DELAY);throw e}))};return a}function P(e){var t=function(n,i){if(!A.started)return A._startPromise||console.error("[BMA] Trying to post [{0}] before start()...".format(e)),A.ready().then((function(){return t(n,i)}));var a=A.raw.postByPath[e];return a||(a=u.post(A.host,A.port,e,A.useSsl),A.raw.postByPath[e]=a),a(n,i)};return t}function k(e){return function(){var t=A.raw.wsByPath[e];return t&&!t.isClosed()||((t=u.ws(A.host,A.port,e,A.useSsl)).onclose=function(){delete A.raw.wsByPath[e]},A.raw.wsByPath[e]=t),t}}function M(e){i((function(){w.copy(e.node)}),1e3)}A.raw={getByPath:{},postByPath:{},wsByPath:{}},A.api=new o(this,"BMA-"+g),A.started=!1,A.init=S,A.forceUseSsl=!!("true"===l.httpsMode||!0===l.httpsMode||"force"===l.httpsMode||t.location&&"https:"===t.location.protocol),A.forceUseSsl&&console.debug("[BMA] Enable SSL (forced by config or detected in URL)"),r&&S(r,p,m),A.useCache=!angular.isDefined(E)||E,A.isAlive=function(e){return e=e||A,u.get(e.host,e.port,"/node/summary",e.useSsl)().then((function(e){var t=e&&e.duniter&&e.duniter.software,n=!0;return"duniter"===t&&e.duniter.version?n=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||"?")),n||console.error("[BMA] Incompatible node [{0} v{1}]: expected at least v{2}".format(t,e.duniter.version,c.data.minVersion)),n})).catch((function(){return!1}))},A.isStarted=function(){return A.started},A.ready=function(){return A.started?e.when(!0):A._startPromise||A.start()},A.start=function(){if(A._startPromise)return A._startPromise;if(A.started)return e.when(A.alive);if(!A.host)return c.ready().then((function(){return A.init(),A.useCache=!0,A.start()}));console.debug("[BMA] Starting {0} {ssl: {1})...".format(A.server,A.useSsl));var t=Date.now();return A._startPromise=e.all([c.ready,A.isAlive()]).then((function(e){return A.alive=e[1],A.alive?(b&&b.length||function(){b=[c.api.data.on.changed(n,M,this)]}(),console.debug("[BMA] Started in "+(Date.now()-t)+"ms"),A.api.node.raise.start(),A.started=!0,delete A._startPromise,!0):(console.error("[BMA] Could not start {0} : unreachable".format(A.serve
e.put("templates/api/popover_locales.html",'<ion-popover-view class="fit popover-locales" style="height: {{locales.length*48}}px"><ion-content scroll="false"><div class="list item-text-wrap block"><a ng-repeat="l in locales track by l.id" class="item item-icon-left ink" ng-click="changeLanguage(l.id)"><i class="item-image avatar" style="background-image: url(../img/flag-{{l.flag}}.png)"></i> {{l.label | translate}}</a></div></ion-content></ion-popover-view>'),e.put("templates/api/transfer.html",'<ion-view class="circle-bg-dark"><ion-nav-buttons side="left"><button class="button button-clear visible-xs" ng-click="closeModal()" translate>COMMON.BTN_CANCEL</button></ion-nav-buttons><ion-nav-title><span class="title visible-xs" translate>API.TRANSFER.TITLE_SHORT</span></ion-nav-title><ion-nav-buttons side="right"><button class="button button-clear hidden-xs hidden-sm gray" ng-click="showLocalesPopover($event)" style="align-content: center"><img ng-hide="!$root.settings.locale.country" ng-src="https://www.countryflags.io/{{$root.settings.locale.country}}/shiny/32.png"> <span ng-hide="$root.settings.locale.country">{{$root.settings.locale.label}}&nbsp;</span> <small class="ion-arrow-down-b"></small></button> <button class="button button-positive button-icon button-clear icon ion-android-send visible-xs" ng-click="doLogin()"></button></ion-nav-buttons><ion-content class="no-padding-xs positive-900-bg"><br class="hidden-xs"><div class="row no-padding-xs"><div class="col col-20 hidden-xs hidden-sm">&nbsp;</div><div class="col no-padding-xs"><div class="light-bg"><h2 class="padding-top text-center hidden-xs" translate>API.TRANSFER.TITLE</h2><div class="no-padding energized-100-bg" ng-if="demo"><div class="item item-icon-left item-text-wrap no-border"><i class="icon ion-information-circled positive"></i><p translate>API.TRANSFER.DEMO.HELP</p></div></div><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 cl
e.put("templates/network/view_network.html",'<ion-view><ion-nav-title><span translate>MENU.NETWORK</span></ion-nav-title><ion-nav-buttons side="secondary"><button class="button button-icon button-clear icon ion-loop visible-xs visible-sm" ng-click="refresh()"></button></ion-nav-buttons><ion-content scroll="true" ng-init="enableFilter=true; ionItemClass=\'item-border-large\';"><div class="row responsive-sm responsive-md responsive-lg"><div class="col list col-border-right"><div class="padding padding-xs" style="display: block; height: 60px"><div class="pull-left"><h4><span ng-if="enableFilter && search.type==\'member\'" translate>PEER.MEMBER_PEERS</span> <span ng-if="enableFilter && search.type==\'mirror\'" translate>PEER.MIRROR_PEERS</span> <span ng-if="enableFilter && search.type==\'offline\'" translate>PEER.OFFLINE_PEERS</span> <span ng-if="!enableFilter || !search.type" translate>PEER.ALL_PEERS</span> <span ng-if="search.results.length">({{search.results.length}})</span><ion-spinner ng-if="search.loading" class="icon ion-spinner-small" icon="android"></ion-spinner></h4></div><div class="pull-right"><div class="pull-right" ng-if="enableFilter"><a class="button button-text button-small hidden-xs hidden-sm ink" ng-class="{\'button-text-positive\': compactMode}" ng-click="toggleCompactMode()"><i class="icon ion-navicon"></i> <b class="ion-arrow-down-b" style="position: absolute; top: -2px; left: 4px; font-size: 8px"></b> <b class="ion-arrow-up-b" style="position: absolute; top: 10px; left: 4px; font-size: 8px"></b> <span>{{:locale:\'BLOCKCHAIN.LOOKUP.BTN_COMPACT\'|translate}}</span> </a><a class="button button-text button-small hidden-xs hidden-sm ink" ng-class="{\'button-text-positive\': search.type==\'member\'}" title="{{:locale:\'PEER.MEMBER_PEERS\'|translate}}" ng-click="toggleSearchType(\'member\')"><i class="icon ion-person-stalker"></i> {{\'PEER.MEMBERS\'|translate}} </a>&nbsp; <a class="button button-text button-small hidden-xs hidden-sm ink" ng-class="{\'button-text-positive\': search.type==\'mirror\'}" title="{{\'PEER.MIRROR_PEERS\'|translate}}" ng-click="toggleSearchType(\'mirror\')"><i class="icon ion-radio-waves"></i> {{:locale:\'PEER.MIRRORS\'|translate}} </a><a class="button button-text button-small hidden-xs hidden-sm ink" ng-class="{\'button-text-positive\': search.type==\'offline\', \'button-text-stable\': search.type!=\'offline\'}" title="{{\'PEER.OFFLINE_PEERS\'|translate}}" ng-click="toggleSearchType(\'offline\')"><i class="icon ion-close-circled light-gray"></i> <span>{{:locale:\'PEER.OFFLINE\'|translate}}</span></a><cs-extension-point name="network-buttons"></cs-extension-point></div></div></div><div id="helptip-network-blockchain" style="display: block"></div><div id="helptip-network-peers" style="display: block"></div><ng-include src="::\'templates/network/items_peers.html\'"></ng-include></div><div class="col col-33" ng-controller="BlockLookupCtrl"><div class="padding padding-xs" style="display: block; height: 100px"><h4 translate>BLOCKCHAIN.LOOKUP.LAST_BLOCKS</h4><div class="pull-right hidden-xs hidden-sm"><a class="button button-text button-small ink" ng-class="{\'button-text-positive\': compactMode, \'button-text-stable\': !compactMode}" ng-click="toggleCompactMode()"><i class="icon ion-navicon"></i> <b class="icon-secondary ion-arrow-down-b" style="top: -8px; left: 5px; font-size: 8px"></b> <b class="icon-secondary ion-arrow-up-b" style="top: 4px; left: 5px; font-size: 8px"></b> <span>{{:locale:\'BLOCKCHAIN.LOOKUP.BTN_COMPACT\'|translate}}</span></a><cs-extension-point name="blockchain-buttons"></cs-extension-point></div></div><ng-include src="::\'templates/blockchain/list_blocks.html\'"></ng-include></div></div></ion-content></ion-view>'),e.put("templates/network/view_peer.html",'<ion-view><ion-nav-title><span translate>PEER.VIEW.TITLE</span></ion-nav-title><ion-content><div class="row no-padding"><div class="col col-20 hidden-xs hidden-sm">&nbsp;</div><div class="col list"><ion-item><h1><span translate>PEER.VIEW.TITLE</span> <span class="gray">{{node.host}}</span></h1><h2 class="gray"><i c
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:"Priva
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
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 rech
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
OPEN_GROUP_HELP:"Un groupe ouvert est accessible par n'importe quel membre de la monnaie.",MANAGED_GROUP:"Groupe administré",MANAGED_GROUP_HELP:"un groupe administré est géré par des administrateurs et des modérateurs, qui peuvent accepter, refuser ou exclure un membre en son sein.",ENUM:{OPEN:"Groupe ouvert",MANAGED:"Groupe administré"}},VIEW:{POPOVER_SHARE_TITLE:"{{title}}",MENU_TITLE:"Options",REMOVE_CONFIRMATION:"Êtes-vous sûr de vouloir supprimer ce groupe ?<br/><br/>Cette opération est irréversible."},EDIT:{TITLE:"Groupe",TITLE_NEW:"Nouveau groupe",RECORD_TITLE:"Titre",RECORD_TITLE_HELP:"Titre",RECORD_DESCRIPTION:"Description",RECORD_DESCRIPTION_HELP:"Description"},ERROR:{SEARCH_GROUPS_FAILED:"Échec de la recherche de groupes",REMOVE_RECORD_FAILED:"Erreur de la suppression du groupe"},INFO:{RECORD_REMOVED:"Groupe supprimé"}},REGISTRY:{CATEGORY:"Activité principale",GENERAL_DIVIDER:"Informations générales",LOCATION_DIVIDER:"Adresse",SOCIAL_NETWORKS_DIVIDER:"Réseaux sociaux et site web",TECHNICAL_DIVIDER:"Informations techniques",BTN_SHOW_WOT:"Personnes",BTN_SHOW_WOT_HELP:"Rechercher des personnes",BTN_SHOW_PAGES:"Pages",BTN_SHOW_PAGES_HELP:"Rechercher des pages",BTN_NEW:"Créer une page",MY_PAGES:"Mes pages",NO_PAGE:"Aucune page",SEARCH:{TITLE:"Pages",SEARCH_HELP:"Quoi, Qui : restaurant, Chez Marcel, ...",BTN_ADD:"Nouveau",BTN_LAST_RECORDS:"Pages récentes",BTN_ADVANCED_SEARCH:"Recherche avancée",BTN_OPTIONS:"Recherche avancée",TYPE:"Type de page",LOCATION_HELP:"Où : Code postal, Ville",RESULTS:"Résultats",RESULT_COUNT_LOCATION:"{{count}} résultat{{count>0?'s':''}}, près de {{location}}",RESULT_COUNT:"{{count}} résultat{{count>0?'s':''}}",LAST_RECORDS:"Pages récentes",LAST_RECORD_COUNT_LOCATION:"{{count}} page{{count>0?'s':''}} récente{{count>0?'s':''}}, près de {{location}}",LAST_RECORD_COUNT:"{{count}} page{{count>0?'s':''}} récente{{count>0?'s':''}}",POPOVER_FILTERS:{BTN_ADVANCED_SEARCH:"Options avancées ?"}},VIEW:{TITLE:"Annuaire",CATEGORY:"Activité principale :",LOCATION:"Adresse :",MENU_TITLE:"Options",POPOVER_SHARE_TITLE:"{{title}}",REMOVE_CONFIRMATION:"Êtes-vous sûr de vouloir supprimer cette page ?<br/><br/>Cette opération est irréversible."},TYPE:{TITLE:"Types",SELECT_TYPE:"Type de page :",ENUM:{SHOP:"Commerce local",COMPANY:"Entreprise",ASSOCIATION:"Association",INSTITUTION:"Institution"}},EDIT:{TITLE:"Edition",TITLE_NEW:"Nouvelle page",RECORD_TYPE:"Type de page",RECORD_TITLE:"Nom",RECORD_TITLE_HELP:"Nom",RECORD_DESCRIPTION:"Description",RECORD_DESCRIPTION_HELP:"Description de l'activité",RECORD_ADDRESS:"Rue",RECORD_ADDRESS_HELP:"Rue, bâtiment...",RECORD_CITY:"Ville",RECORD_CITY_HELP:"Ville",RECORD_SOCIAL_NETWORKS:"Réseaux sociaux et site web",RECORD_PUBKEY:"Clé publique",RECORD_PUBKEY_HELP:"Clé publique de réception des paiements"},WALLET:{PAGE_DIVIDER:"Pages",PAGE_DIVIDER_HELP:'Les pages référencent des activités acceptant la monnaie ou la favorisant : commerces, entreprises, associations, institutions. Elles sont stockées en dehors du réseau de la monnaie, dans <a ui-sref="app.es_network">le réseau des nœuds Cesium+</a>.'},ERROR:{LOAD_CATEGORY_FAILED:"Erreur de chargement de la liste des activités",LOAD_RECORD_FAILED:"Erreur lors du chargement de la page",LOOKUP_RECORDS_FAILED:"Erreur lors de l'exécution de la recherche",REMOVE_RECORD_FAILED:"Erreur lors de la suppression de la page",SAVE_RECORD_FAILED:"Erreur lors de la sauvegarde",RECORD_NOT_EXISTS:"Page inexistante",GEO_LOCATION_NOT_FOUND:"Ville ou code postal non trouvé"},INFO:{RECORD_REMOVED:"Page supprimée",RECORD_SAVED:"Page sauvegardée"}},PROFILE:{PROFILE_DIVIDER:"Profil Cesium+",PROFILE_DIVIDER_HELP:'Il s\'agit de données annexes, optionnelles. Elles sont stockées en dehors du réseau de la monnaie, dans <a ui-sref="app.es_network">le réseau Cesium+</a>.',NO_PROFILE_DEFINED:"Aucun profil saisi",BTN_ADD:"Saisir mon profil",BTN_EDIT:"Editer mon profil",BTN_DELETE:"Supprimer mon profil",BTN_REORDER:"Réordonner",UID:"Pseudonyme",TITLE:"Nom, Prénom",TITLE_HELP:"Nom, Prénom",DESCRIPTION:"A pr
e.put("plugins/es/templates/common/modal_location.html",'<ion-modal-view class="modal-full-height modal-search-location">\n <ion-header-bar class="bar-positive">\n <button class="button button-clear" ng-click="closeModal()" translate>COMMON.BTN_CANCEL</button>\n <h1 class="title" translate>LOCATION.MODAL.TITLE</h1>\n </ion-header-bar>\n\n <ion-content class="padding no-padding-xs no-padding-sm" scroll="true">\n\n\n \x3c!-- search text --\x3e\n <div class="item item-input">\n <i class="icon ion-search placeholder-icon"></i>\n\n <input type="text" class="visible-xs visible-sm" placeholder="{{\'LOCATION.MODAL.SEARCH_HELP\'|translate}}" ng-model="search.text" ng-model-options="{ debounce: 650 }" ng-change="doSearch()">\n <input type="text" class="hidden-xs hidden-sm" placeholder="{{\'LOCATION.MODAL.SEARCH_HELP\'|translate}}" ng-model="search.text" on-return="doSearch()">\n </div>\n\n <div class="padding-top padding-xs" style="display: block; height: 60px">\n <div class="pull-left" ng-if="!search.loading && search.results">\n <h4 translate>COMMON.RESULTS_LIST</h4>\n </div>\n\n <div class="pull-right hidden-xs hidden-sm">\n <button class="button button-small button-stable ink" ng-click="doSearch()">\n {{\'COMMON.BTN_SEARCH\' | translate}}\n </button>\n </div>\n\n </div>\n\n <div class="center padding" ng-if="search.loading">\n <ion-spinner icon="android"></ion-spinner>\n </div>\n\n <div ng-if="!search.loading && search.results && (!search.results.length || !search.results[0].address)" class="assertive padding">\n <span translate>COMMON.SEARCH_NO_RESULT</span>\n </div>\n\n <ion-list ng-if="!search.loading" class="padding-top {{::motion.ionListClass}}">\n <div ng-repeat="res in search.results" class="item item-border-large item-text-wrap ink" ng-class="::{\'item-divider\': !res.address, \'item-icon-left item-icon-right\': res.address}" ng-click="res.address ? closeModal(res) : false">\n\n \x3c!-- if divider --\x3e\n <h4 class="text-italic" ng-if="::!res.address" ng-bind-html="res.name"></h4>\n\n \x3c!-- if divider --\x3e\n <ng-if ng-if="::res.address">\n\n <i class="icon ion-location"></i>\n\n <h2 ng-if="res.address.road">\n {{::res.address.road}}\n </h2>\n <h3>\n <span ng-if="res.address.postcode">{{::res.address.postcode}}</span>\n {{::res.address.city||res.address.village}}\n <span class="gray">| {{::res.address.country}}</span>\n </h3>\n <h5 class="gray">\n {{\'LOCATION.MODAL.POSITION\'|translate:res }}\n </h5>\n\n <i class="icon ion-ios-arrow-right"></i>\n </ng-if>\n\n </div>\n </ion-list>\n </ion-content>\n\n <ion-footer-bar class="stable-bg padding-left padding-right block" ng-if="license">\n <div class="pull-right copyright">\n <span class="dark">© </span>\n <a class="positive" href="{{license.url}}" target="_blank">{{license.name}}</a>\n </div>\n </ion-footer-bar>\n</ion-modal-view>\n'),e.put("plugins/es/templates/common/popover_profile_extend.html",' \x3c!-- profile --\x3e\n <button ng-if=":state:enable && auth" class="button button-positive button-small ink" ng-click="showEditUserProfile()">\n {{\'PROFILE.BTN_EDIT\' | translate}}\n </button>\n\n'),e.put("plugins/es/templates/common/popup_report_abuse.html",'<form name="abuseForm" ng-submit="">\n <div class="list" ng-init="setAbuseForm(abuseForm)">\n\n \x3c!-- reason --\x3e\n <label class="item item-input" ng-class="{\'item-input-error\': abuseForm.$submitted && abuseForm.comment.$invalid}">\n <textarea class="padding" style="background-color: transparent" name="comment" type="text" placeholder="{{\'COMMON.REPORT_ABUSE.REASON_HELP\' | translate}}" rows="3" ng-model="abuseData.comment" ng-minlength="8" required></textarea>\n </label>\n <div class="form-errors" ng-if="abuseForm.$submitted && abuseForm.comme
e.put("plugins/es/templates/registry/lookup_form.html",'\n\x3c!-- selected location\n<a\n class="button button-small button-text button-stable button-icon-event stable-900-bg"\n style="margin-right: 10px;">\n &nbsp;<i class="icon ion-location"></i>\n {{search.location}}\n <i class="icon ion-close" ng-click="removeLocation2()">&nbsp;&nbsp;</i>\n</a>--\x3e\n<form ng-submit="doSearch()">\n <div class="item no-padding">\n\n <div class="item-input">\n <i class="icon ion-search placeholder-icon"></i>\n <input type="text" class="visible-xs visible-sm" placeholder="{{\'REGISTRY.SEARCH.SEARCH_HELP\'|translate}}" ng-model="search.text" ng-model-options="{ debounce: 650 }" ng-change="doSearch()" on-return="doSearchText()" select-on-click>\n <input type="text" class="hidden-xs hidden-sm" placeholder="{{\'REGISTRY.SEARCH.SEARCH_HELP\'|translate}}" id="registrySearchText" ng-model="search.text" on-return="doSearchText()">\n </div>\n\n <div class="row double-padding-x item-text-wrap animate-show-hide ng-hide hidden-xs hidden-sm" ng-show="entered" ng-if="search.geoPoint || search.type || search.category">\n\n \x3c!-- selected location --\x3e\n <div ng-show="search.geoPoint" class="button button-small button-text button-stable button-icon-event stable-900-bg" style="margin-right: 10px">\n &nbsp;<i class="icon ion-location"></i>\n <span ng-bind-html="search.location"></span>\n <i class="icon ion-close" ng-click="removeLocation()">&nbsp;&nbsp;</i>\n </div>\n\n \x3c!-- selected type --\x3e\n <div ng-show="search.type" class="button button-small button-text button-stable button-icon-event stable-900-bg" style="margin-right: 10px">\n &nbsp;<i class="icon cion-page-{{search.type}}"></i>\n <span>{{\'REGISTRY.TYPE.ENUM.\'+search.type|uppercase|translate}}</span>\n <i class="icon ion-close" ng-click="removeType()">&nbsp;&nbsp;</i>\n </div>\n\n \x3c!-- selected category --\x3e\n <div ng-show="search.category.name" class="button button-small button-text button-stable button-icon-event stable-900-bg" style="margin-right: 10px">\n &nbsp;<i class="icon ion-flag"></i>\n <span>{{search.category.name|truncText:40}}</span>\n <i class="icon ion-close" ng-click="removeCategory()">&nbsp;&nbsp;</i>\n </div>\n </div>\n </div>\n\n \x3c!-- location --\x3e\n <ng-include src="::\'plugins/es/templates/common/item_location_search.html\'" ng-if="entered && options.location.show && (!search.geoPoint || smallscreen)" ng-controller="ESSearchPositionItemCtrl"></ng-include>\n\n \x3c!-- options --\x3e\n <ng-include src="::\'plugins/es/templates/registry/lookup_form_options.html\'"></ng-include>\n\n\n\n<div class="padding-top hidden-xs hidden-sm" style="display: block; height: 60px">\n <div class="pull-left">\n\n <a class="button button-text button-small ink" ng-class="{\'button-text-stable\': !search.advanced, \'button-text-positive\': search.advanced}" ng-click="search.advanced=!search.advanced">\n {{\'REGISTRY.SEARCH.BTN_ADVANCED_SEARCH\' | translate}}\n <i class="icon" ng-class="{\'ion-arrow-down-b\': !search.advanced, \'ion-arrow-up-b\': search.advanced}"></i>\n </a>\n\n &nbsp;\n\n </div>\n\n <div class="pull-right">\n\n <a ng-if="enableFilter" class="button button-text button-small ink" ng-class="{\'button-text-positive\': search.lastRecords}" ng-click="doGetLastRecords()">\n <i class="icon ion-clock"></i>\n {{\'REGISTRY.SEARCH.BTN_LAST_RECORDS\' | translate}}\n </a>\n &nbsp;\n\n \x3c!-- Allow extension here --\x3e\n <cs-extension-point name="filter-buttons"></cs-extension-point>\n\n &nbsp;\n\n <button class="button button-small button-stable ink" ng-click="doSearchText()">\n {{\'COMMON.BTN_SEARCH\' | translate}}\n </button>\n </div>\n</div>\n\n<div class="padding-top padding-xs padding-sm" style="display: block; height: 60px">\n <div class="pull-left ng-hide" ng-show="!search.loading && search.results">\n <ng-if ng-if="search.lastRecords">\n <h4 t
certSent:!0,certReceived:!0,emitHtml5:!1},invitations:{readTime:!0},defaultCountry:void 0,enableGoogleApi:!1,googleApiKey:void 0,wot:{enableMixedSearch:!0},document:{index:"user,page,group",type:"profile,record,comment"},registry:{defaultSearch:{location:null,geoPoint:null}},geoDistance:"20km"}}},{plugins:{es:o.plugins&&o.plugins.es||{}}}),b=this,g=new i("esSettings"),f=!1,h=!1;function T(e,n){return n=n||t.defer(),angular.merge(e,E),h=!1,n.resolve(e),n.promise}function v(e,n){return n=n||t.defer(),e&&e.pubkey&&e.keypair&&e.keypair.signSk&&e.keypair.boxSk?(console.debug("[ES] [settings] Loading user settings..."),function(e,t){var n=Date.now();return b.get({id:e}).catch((function(e){if(e&&e.ucode&&404==e.ucode)return null;throw e})).then((function(e){if(e&&e._source){var i=e._source;if(i.time!==r.data.time){var a=s.util.decode_base58(i.nonce);return s.box.open(i.content,a,t.boxPk,t.boxSk).then((function(e){var t=JSON.parse(e||"{}");return t.time=i.time,console.debug("[ES] [settings] Loaded and decrypted in "+(Date.now()-n)+"ms"),t})).catch((function(e){return console.error("[ES] [settings] Could not load remote settings: "+(e&&e.message||"decryption error")),delete r.data.time,null}))}console.debug("[ES] [settings] Loaded in "+(Date.now()-n)+"ms, but already up to date")}}))}(e.pubkey,e.keypair).then((function(e){if(e)return angular.merge(r.data,e),u=e,console.debug("[ES] [settings] Applied"),O()})).then((function(){n.resolve(e)})).catch((function(e){n.reject(e)})),n.promise):(n.resolve(),n.promise)}function I(e){if(!f){var n=p&&p.length>0;!a.isStarted()||a.node.isFallback()||a.node.sameAsSettings(e)||(N(),a.stop()),R(),b.isEnable()&&d.isAuth()&&(n?function(e){var n=function e(t,n){var i={};return n.includes&&_.forEach(_.keys(n),(function(e){"includes"!=e&&"excludes"!=e&&n.includes.push(e)})),_.forEach(_.keys(t),(function(a){n.includes&&!_.contains(n.includes,a)||n.excludes&&_.contains(n.excludes,a)||(t[a]&&"object"==typeof t[a]&&n[a]&&"object"==typeof n[a]?i[a]=e(t[a],n[a]):i[a]=t[a])})),i}(e,m);if(u&&angular.equals(n,u))return t.when();if(!r.data.plugins.es.useRemoteStorage)return O();var i=moment().utc().unix();console.debug("[ES] [settings] Saving user settings remotely..."),t.all([d.getKeypair(),s.util.random_nonce()]).then((function(t){var a=t[0],o=t[1];if(a.boxPk&&a.boxSk){var r={issuer:d.data.pubkey,nonce:s.util.encode_base58(o),time:i},l=JSON.stringify(n);return s.box.pack(l,o,a.boxPk,a.boxSk).then((function(t){return r.content=t,angular.isUndefined(e.time)?b.add(r):b.update(r,{id:r.issuer}).catch((function(e){if(e&&404==e.ucode)return b.add(r);throw e}))})).then((function(){return!0}))}})).then((function(t){if(t)return e.time=i,u=n,console.debug("[ES] [settings] Saved user settings remotely in "+(moment().utc().unix()-i)+"ms"),O()})).catch((function(e){throw console.error(e),e}))}(e):v(d.data))}}function O(){return f?t.when():(f=!0,r.store().then((function(){f=!1})).catch((function(e){throw f=!1,e})))}function N(){_.forEach(p,(function(e){e()})),p=[]}function R(){var t=b.isEnable();return!t&&p&&p.length>0?(console.debug("[ES] [settings] Disable"),N(),a.stop().then((function(){g.state.raise.changed(t)}))):!t||p&&0!==p.length&&a.isStarted()?void 0:a.start().then((function(n){return n?(console.debug("[ES] [settings] Enable"),function(){p=[r.api.data.on.reset(e,T,this),d.api.data.on.auth(e,v,this)]}(),d.isAuth()?v(d.data).then((function(){g.state.raise.changed(t)})):void g.state.raise.changed(t)):(r.data.plugins.es.enable=!1,r.data.plugins.es.askEnable=!0,h=!0,g.state.raise.changed(!1),void console.error("[ES] [settings] Disable, has ES node could not be started"))}))}return b.api=g,b.get=a.get("/user/settings/:id"),b.add=a.record.post("/user/settings"),b.update=a.record.post("/user/settings/:id/_update"),b.isEnable=function(){return r.data.plugins&&r.data.plugins.es&&r.data.plugins.es.enable&&!!r.data.plugins.es.host},b.notifications={},b.notifications.isEmitHtml5Enable=function(){return!!(b.isEnable()&&r.data.plugins.es.notifications&&angular.isDefined(r.data.plugins.es.notifications.emitHtml5))&&r.data.plugins.
templateUrl:"plugins/graph/templates/account/view_wallet_tx_extend.html",controller:"ESExtensionCtrl"}}}).extendStates(["app.wot_identity_tx_uid","app.wot_identity_tx_uid_lg"],{points:{buttons:{templateUrl:"plugins/graph/templates/account/view_identity_tx_extend.html",controller:"ESExtensionCtrl"}}}),e.state("app.view_wallet_stats",{url:"/wallet/stats?t&stepUnit&hide&scale",views:{menuContent:{templateUrl:"plugins/graph/templates/account/view_stats.html"}},data:{auth:!0}}).state("app.view_wallet_stats_by_id",{url:"/wallets/:id/stats?t&stepUnit&hide&scale",views:{menuContent:{templateUrl:"plugins/graph/templates/account/view_stats.html"}},data:{auth:!0}}).state("app.wot_identity_stats",{url:"/wot/:pubkey/stats?t&stepUnit&hide&scale",views:{menuContent:{templateUrl:"plugins/graph/templates/account/view_stats.html"}}}))}]).controller("GpAccountBalanceCtrl",tt).controller("GpAccountSumTxCtrl",nt).controller("GpAccountCertificationCtrl",it),at.$inject=["$scope","$state","$controller","$q","$translate","gpColor","gpData","$filter"],angular.module("cesium.graph.docstats.controllers",["chart.js","cesium.graph.services","cesium.graph.common.controllers"]).config(["$stateProvider","PluginServiceProvider","csConfig",function(e,t,n){e.state("app.doc_stats_lg",{url:"/network/data/stats/:server?stepUnit&t&hide&scale&useSsl&useTor",views:{menuContent:{templateUrl:"plugins/graph/templates/docstats/view_stats.html",controller:"GpDocStatsCtrl"}}}).state("app.doc_stats_lg_old",{url:"/data/stats?stepUnit&t&hide&scale&useSsl&useTor",views:{menuContent:{templateUrl:"plugins/graph/templates/docstats/view_stats.html",controller:"GpDocStatsCtrl"}}}),n.plugins&&n.plugins.es}]).controller("GpDocStatsCtrl",at),ot.$inject=["$scope","$controller","$q","$translate","gpColor","gpData","$filter"],angular.module("cesium.graph.synchro.controllers",["chart.js","cesium.graph.services","cesium.graph.common.controllers"]).config(["$stateProvider","PluginServiceProvider","csConfig",function(e,t,n){e.state("app.doc_synchro_lg",{url:"/network/data/synchro/:server?stepUnit&t&hide&scale&useSsl&useTor",views:{menuContent:{templateUrl:"plugins/graph/templates/synchro/view_stats.html",controller:"GpSynchroCtrl"}}}).state("app.doc_synchro_lg_old",{url:"/data/synchro?stepUnit&t&hide&scale&useSsl&useTor",views:{menuContent:{templateUrl:"plugins/graph/templates/synchro/view_stats.html",controller:"GpSynchroCtrl"}}}),n.plugins&&n.plugins.es}]).controller("GpSynchroCtrl",ot),angular.module("cesium.map.plugin",["ui-leaflet","cesium.map.services","cesium.map.common.controllers","cesium.map.wot.controllers","cesium.map.registry.controllers","cesium.map.network.controllers","cesium.map.user.controllers","cesium.map.settings.controllers","cesium.map.help.controllers"]).config((function(){L.AwesomeMarkers.Icon.prototype.options.prefix="ion"})),angular.module("cesium.map.services",["cesium.map.wot.services","cesium.map.registry.services","cesium.map.utils.services"]),angular.module("cesium.map.wot.services",["cesium.services"]).factory("mapWot",["$q","csHttp","esHttp","esSettings","csWot","BMA","esGeo",function(e,t,n,i,a,o,r){var s=this,l=1e3,c={min:["title","geoPoint"],profile:["title","geoPoint","avatar._content_type","address","city"]};function d(e){var t={bool:{}};if((e=e||{}).searchAddress?t.bool.should=[{exists:{field:"geoPoint"}},{exists:{field:"city"}}]:t.bool.must=[{exists:{field:"geoPoint"}}],e.bounds&&e.bounds.northEast&&e.bounds.southWest){var n={geoPoint:{top_left:{lat:Math.max(Math.min(e.bounds.northEast.lat,90),-90),lon:Math.max(Math.min(e.bounds.southWest.lng,180),-180)},bottom_right:{lat:Math.max(Math.min(e.bounds.southWest.lat,90),-90),lon:Math.max(Math.min(e.bounds.northEast.lng,180),-180)}}};console.debug("[map] [wot] Filtering on bounds: ",e.bounds),t.bool.must=t.bool.must||[],t.bool.must.push({geo_bounding_box:n})}return t}function u(t,i,a,o){var s=new RegExp("[,]"),l=[],c=o.hits.hits.reduce((function(e,o){var r=o._id,c=i[r],d=c&&{uid:c}||a[r]||{};if(d.pubkey=r,d.index=o._index,d.city=o._source.city,d.address=o._source.address,d.geoPoint=o._source.geoPoint,
//# sourceMappingURL=../maps/dist_js/cesium.js.map