Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/passman.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPassman Bot <info@passman.cc>2016-12-28 14:30:23 +0300
committerPassman Bot <info@passman.cc>2016-12-28 14:30:23 +0300
commit6d05b1f2a44df3033e5c6ba7e2b374837f2620c9 (patch)
tree1bf677016f53a545f2d1483f3ba901f979de55ea
parenta0b5fa972d3e21a7260f8ce2a13df674de69029d (diff)
Passman 2.0.0-RC1
Remove double tag in info Signed-off-by: Passman Bot <info@passman.cc>
-rw-r--r--appinfo/info.xml1
-rw-r--r--appinfo/routes.php3
-rw-r--r--controller/internalcontroller.php6
-rw-r--r--js/passman.min.js4
-rw-r--r--l10n/de.js224
-rw-r--r--l10n/de.json224
-rw-r--r--l10n/de_DE.js224
-rw-r--r--l10n/de_DE.json224
-rw-r--r--l10n/es.js224
-rw-r--r--l10n/es.json224
-rw-r--r--l10n/fr.js184
-rw-r--r--l10n/fr.json184
-rw-r--r--l10n/it.js199
-rw-r--r--l10n/it.json199
-rw-r--r--l10n/nl.js224
-rw-r--r--l10n/nl.json224
-rw-r--r--l10n/pt_BR.js224
-rw-r--r--l10n/pt_BR.json224
18 files changed, 2986 insertions, 34 deletions
diff --git a/appinfo/info.xml b/appinfo/info.xml
index bb7ca8df..05234ca5 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -2,7 +2,6 @@
<info>
<id>passman</id>
<name>Passman</name>
- <name>Notifications</name>
<description><![CDATA[Passman is a full featured password manager.
Features:
- Vaults
diff --git a/appinfo/routes.php b/appinfo/routes.php
index b7f789ee..3af8fdf2 100644
--- a/appinfo/routes.php
+++ b/appinfo/routes.php
@@ -65,10 +65,11 @@ return [
['name' => 'share#getItemAcl', 'url' => '/api/v2/sharing/credential/{item_guid}/acl', 'verb' => 'GET'],
['name' => 'share#getFile', 'url' => '/api/v2/sharing/credential/{item_guid}/file/{file_guid}', 'verb' => 'GET'],
['name' => 'share#updateSharedCredentialACL', 'url' => '/api/v2/sharing/credential/{item_guid}/acl', 'verb' => 'PATCH'],
+ ['name' => 'internal#getAppVersion', 'url' => '/api/v2/version', 'verb' => 'GET'],
//Translations
- ['name' => 'translation#getLanguageStrings', 'url' => '/api/v2/language', 'verb' => 'GET'],
+ ['name' => 'translation#getLanguageStrings', 'url' => '/api/v2/language', 'verb' => 'GET'],
//Internal API
['name' => 'internal#remind', 'url' => '/api/internal/notifications/remind/{credential_id}', 'verb' => 'POST'],
diff --git a/controller/internalcontroller.php b/controller/internalcontroller.php
index defab3de..01a310a9 100644
--- a/controller/internalcontroller.php
+++ b/controller/internalcontroller.php
@@ -15,7 +15,7 @@ use OCP\IRequest;
use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\ApiController;
use OCA\Passman\Service\CredentialService;
-
+use \OCP\App;
class InternalController extends ApiController {
private $userId;
@@ -65,9 +65,11 @@ class InternalController extends ApiController {
/**
* @NoAdminRequired
+ * @NoCSRFRequired
*/
public function getAppVersion() {
- return new JSONResponse(array('version' => '1.0.2.25'));
+ $AppInstance = new App();
+ return new JSONResponse(array('version' => $AppInstance->getAppInfo("passman")["version"]));
}
/**
diff --git a/js/passman.min.js b/js/passman.min.js
index e54ce9e0..a1a0675a 100644
--- a/js/passman.min.js
+++ b/js/passman.min.js
@@ -1,4 +1,4 @@
-/*! Passman 2016-12-27 */
+/*! Passman 2016-12-28 */
function _a1(b,a){this.count=b,this._fc=a,this.__defineGetter__("Count",function(){return this.count}),this.__defineGetter__("_dm",function(){return this._fc})}function _a2(a,c,b){this._bm=a,b?this._do=new Array(c,b):this._do=new Array(c),this.__defineGetter__("_bo",function(){return this._bm}),this.__defineGetter__("_dn",function(){return this._bm*this._fo}),this.__defineGetter__("_fo",function(){for(var e=0,d=0;d<this._do.length;d++)e+=this._do[d].length;return e}),this._fb=function(){return this._do}}function _a3(k,l,h,g,f,e){this._bs=k,this._ar=l,this._do=new Array(h,g,f,e);for(var j=0,b=h._bo,a=h._fb(),d=0;d<a.length;d++){var c=a[d];j+=c.Count*(c._dm+b)}this._br=j,this.__defineGetter__("_fd",function(){return this._bs}),this.__defineGetter__("_as",function(){return this._ar}),this.__defineGetter__("_dp",function(){return this._br}),this.__defineGetter__("_cr",function(){return 17+4*this._bs}),this._aq=function(){var r=this._cr,o=new _ac(r);o._bq(0,0,9,9),o._bq(r-8,0,8,9),o._bq(0,r-8,9,8);for(var n=this._ar.length,m=0;m<n;m++)for(var q=this._ar[m]-2,s=0;s<n;s++)0==m&&(0==s||s==n-1)||m==n-1&&0==s||o._bq(this._ar[s]-2,q,5,5);return o._bq(6,9,1,r-17),o._bq(9,6,r-17,1),this._bs>6&&(o._bq(r-11,0,3,6),o._bq(0,r-11,6,3)),o},this._bu=function(i){return this._do[i.ordinal()]}}function _ay(){return new Array(new _a3(1,new Array,new _a2(7,new _a1(1,19)),new _a2(10,new _a1(1,16)),new _a2(13,new _a1(1,13)),new _a2(17,new _a1(1,9))),new _a3(2,new Array(6,18),new _a2(10,new _a1(1,34)),new _a2(16,new _a1(1,28)),new _a2(22,new _a1(1,22)),new _a2(28,new _a1(1,16))),new _a3(3,new Array(6,22),new _a2(15,new _a1(1,55)),new _a2(26,new _a1(1,44)),new _a2(18,new _a1(2,17)),new _a2(22,new _a1(2,13))),new _a3(4,new Array(6,26),new _a2(20,new _a1(1,80)),new _a2(18,new _a1(2,32)),new _a2(26,new _a1(2,24)),new _a2(16,new _a1(4,9))),new _a3(5,new Array(6,30),new _a2(26,new _a1(1,108)),new _a2(24,new _a1(2,43)),new _a2(18,new _a1(2,15),new _a1(2,16)),new _a2(22,new _a1(2,11),new _a1(2,12))),new _a3(6,new Array(6,34),new _a2(18,new _a1(2,68)),new _a2(16,new _a1(4,27)),new _a2(24,new _a1(4,19)),new _a2(28,new _a1(4,15))),new _a3(7,new Array(6,22,38),new _a2(20,new _a1(2,78)),new _a2(18,new _a1(4,31)),new _a2(18,new _a1(2,14),new _a1(4,15)),new _a2(26,new _a1(4,13),new _a1(1,14))),new _a3(8,new Array(6,24,42),new _a2(24,new _a1(2,97)),new _a2(22,new _a1(2,38),new _a1(2,39)),new _a2(22,new _a1(4,18),new _a1(2,19)),new _a2(26,new _a1(4,14),new _a1(2,15))),new _a3(9,new Array(6,26,46),new _a2(30,new _a1(2,116)),new _a2(22,new _a1(3,36),new _a1(2,37)),new _a2(20,new _a1(4,16),new _a1(4,17)),new _a2(24,new _a1(4,12),new _a1(4,13))),new _a3(10,new Array(6,28,50),new _a2(18,new _a1(2,68),new _a1(2,69)),new _a2(26,new _a1(4,43),new _a1(1,44)),new _a2(24,new _a1(6,19),new _a1(2,20)),new _a2(28,new _a1(6,15),new _a1(2,16))),new _a3(11,new Array(6,30,54),new _a2(20,new _a1(4,81)),new _a2(30,new _a1(1,50),new _a1(4,51)),new _a2(28,new _a1(4,22),new _a1(4,23)),new _a2(24,new _a1(3,12),new _a1(8,13))),new _a3(12,new Array(6,32,58),new _a2(24,new _a1(2,92),new _a1(2,93)),new _a2(22,new _a1(6,36),new _a1(2,37)),new _a2(26,new _a1(4,20),new _a1(6,21)),new _a2(28,new _a1(7,14),new _a1(4,15))),new _a3(13,new Array(6,34,62),new _a2(26,new _a1(4,107)),new _a2(22,new _a1(8,37),new _a1(1,38)),new _a2(24,new _a1(8,20),new _a1(4,21)),new _a2(22,new _a1(12,11),new _a1(4,12))),new _a3(14,new Array(6,26,46,66),new _a2(30,new _a1(3,115),new _a1(1,116)),new _a2(24,new _a1(4,40),new _a1(5,41)),new _a2(20,new _a1(11,16),new _a1(5,17)),new _a2(24,new _a1(11,12),new _a1(5,13))),new _a3(15,new Array(6,26,48,70),new _a2(22,new _a1(5,87),new _a1(1,88)),new _a2(24,new _a1(5,41),new _a1(5,42)),new _a2(30,new _a1(5,24),new _a1(7,25)),new _a2(24,new _a1(11,12),new _a1(7,13))),new _a3(16,new Array(6,26,50,74),new _a2(24,new _a1(5,98),new _a1(1,99)),new _a2(28,new _a1(7,45),new _a1(3,46)),new _a2(24,new _a1(15,19),new _a1(2,20)),new _a2(30,new _a1(3,15),new _a1(13,16))),new _a3(17,new Array(6,30,54,78),new _a2(28,new _a1(1,107),new _a1(5,108)),new _a2(28,new _a1(10,46),new _a1(1,47)),new _a2(28,new _a1(1,22),new _a1(15,23)),new _a2(28,new _a1(2,14),new _a1(17,15))),new _a3(18,new Array(6,30,56,82),new _a2(30,new _a1(5,120),new _a1(1,121)),new _a2(26,new _a1(9,43),new _a1(4,44)),new _a2(28,new _a1(17,22),new _a1(1,23)),new _a2(28,new _a1(2,14),new _a1(19,15))),new _a3(19,new Array(6,30,58,86),new _a2(28,new _a1(3,113),new _a1(4,114)),new _a2(26,new _a1(3,44),new _a1(11,45)),new _a2(26,new _a1(17,21),new _a1(4,22)),new _a2(26,new _a1(9,13),new _a1(16,14))),new _a3(20,new Array(6,34,62,90),new _a2(28,new _a1(3,107),new _a1(5,108)),new _a2(26,new _a1(3,41),new _a1(13,42)),new _a2(30,new _a1(15,24),new _a1(5,25)),new _a2(28,new _a1(15,15),new _a1(10,16))),new _a3(21,new Array(6,28,50,72,94),new _a2(28,new _a1(4,116),new _a1(4,117)),new _a2(26,new _a1(17,42)),new _a2(28,new _a1(17,22),new _a1(6,23)),new _a2(30,new _a1(19,16),new _a1(6,17))),new _a3(22,new Array(6,26,50,74,98),new _a2(28,new _a1(2,111),new _a1(7,112)),new _a2(28,new _a1(17,46)),new _a2(30,new _a1(7,24),new _a1(16,25)),new _a2(24,new _a1(34,13))),new _a3(23,new Array(6,30,54,74,102),new _a2(30,new _a1(4,121),new _a1(5,122)),new _a2(28,new _a1(4,47),new _a1(14,48)),new _a2(30,new _a1(11,24),new _a1(14,25)),new _a2(30,new _a1(16,15),new _a1(14,16))),new _a3(24,new Array(6,28,54,80,106),new _a2(30,new _a1(6,117),new _a1(4,118)),new _a2(28,new _a1(6,45),new _a1(14,46)),new _a2(30,new _a1(11,24),new _a1(16,25)),new _a2(30,new _a1(30,16),new _a1(2,17))),new _a3(25,new Array(6,32,58,84,110),new _a2(26,new _a1(8,106),new _a1(4,107)),new _a2(28,new _a1(8,47),new _a1(13,48)),new _a2(30,new _a1(7,24),new _a1(22,25)),new _a2(30,new _a1(22,15),new _a1(13,16))),new _a3(26,new Array(6,30,58,86,114),new _a2(28,new _a1(10,114),new _a1(2,115)),new _a2(28,new _a1(19,46),new _a1(4,47)),new _a2(28,new _a1(28,22),new _a1(6,23)),new _a2(30,new _a1(33,16),new _a1(4,17))),new _a3(27,new Array(6,34,62,90,118),new _a2(30,new _a1(8,122),new _a1(4,123)),new _a2(28,new _a1(22,45),new _a1(3,46)),new _a2(30,new _a1(8,23),new _a1(26,24)),new _a2(30,new _a1(12,15),new _a1(28,16))),new _a3(28,new Array(6,26,50,74,98,122),new _a2(30,new _a1(3,117),new _a1(10,118)),new _a2(28,new _a1(3,45),new _a1(23,46)),new _a2(30,new _a1(4,24),new _a1(31,25)),new _a2(30,new _a1(11,15),new _a1(31,16))),new _a3(29,new Array(6,30,54,78,102,126),new _a2(30,new _a1(7,116),new _a1(7,117)),new _a2(28,new _a1(21,45),new _a1(7,46)),new _a2(30,new _a1(1,23),new _a1(37,24)),new _a2(30,new _a1(19,15),new _a1(26,16))),new _a3(30,new Array(6,26,52,78,104,130),new _a2(30,new _a1(5,115),new _a1(10,116)),new _a2(28,new _a1(19,47),new _a1(10,48)),new _a2(30,new _a1(15,24),new _a1(25,25)),new _a2(30,new _a1(23,15),new _a1(25,16))),new _a3(31,new Array(6,30,56,82,108,134),new _a2(30,new _a1(13,115),new _a1(3,116)),new _a2(28,new _a1(2,46),new _a1(29,47)),new _a2(30,new _a1(42,24),new _a1(1,25)),new _a2(30,new _a1(23,15),new _a1(28,16))),new _a3(32,new Array(6,34,60,86,112,138),new _a2(30,new _a1(17,115)),new _a2(28,new _a1(10,46),new _a1(23,47)),new _a2(30,new _a1(10,24),new _a1(35,25)),new _a2(30,new _a1(19,15),new _a1(35,16))),new _a3(33,new Array(6,30,58,86,114,142),new _a2(30,new _a1(17,115),new _a1(1,116)),new _a2(28,new _a1(14,46),new _a1(21,47)),new _a2(30,new _a1(29,24),new _a1(19,25)),new _a2(30,new _a1(11,15),new _a1(46,16))),new _a3(34,new Array(6,34,62,90,118,146),new _a2(30,new _a1(13,115),new _a1(6,116)),new _a2(28,new _a1(14,46),new _a1(23,47)),new _a2(30,new _a1(44,24),new _a1(7,25)),new _a2(30,new _a1(59,16),new _a1(1,17))),new _a3(35,new Array(6,30,54,78,102,126,150),new _a2(30,new _a1(12,121),new _a1(7,122)),new _a2(28,new _a1(12,47),new _a1(26,48)),new _a2(30,new _a1(39,24),new _a1(14,25)),new _a2(30,new _a1(22,15),new _a1(41,16))),new _a3(36,new Array(6,24,50,76,102,128,154),new _a2(30,new _a1(6,121),new _a1(14,122)),new _a2(28,new _a1(6,47),new _a1(34,48)),new _a2(30,new _a1(46,24),new _a1(10,25)),new _a2(30,new _a1(2,15),new _a1(64,16))),new _a3(37,new Array(6,28,54,80,106,132,158),new _a2(30,new _a1(17,122),new _a1(4,123)),new _a2(28,new _a1(29,46),new _a1(14,47)),new _a2(30,new _a1(49,24),new _a1(10,25)),new _a2(30,new _a1(24,15),new _a1(46,16))),new _a3(38,new Array(6,32,58,84,110,136,162),new _a2(30,new _a1(4,122),new _a1(18,123)),new _a2(28,new _a1(13,46),new _a1(32,47)),new _a2(30,new _a1(48,24),new _a1(14,25)),new _a2(30,new _a1(42,15),new _a1(32,16))),new _a3(39,new Array(6,26,54,82,110,138,166),new _a2(30,new _a1(20,117),new _a1(4,118)),new _a2(28,new _a1(40,47),new _a1(7,48)),new _a2(30,new _a1(43,24),new _a1(22,25)),new _a2(30,new _a1(10,15),new _a1(67,16))),new _a3(40,new Array(6,30,58,86,114,142,170),new _a2(30,new _a1(19,118),new _a1(6,119)),new _a2(28,new _a1(18,47),new _a1(31,48)),new _a2(30,new _a1(34,24),new _a1(34,25)),new _a2(30,new _a1(20,15),new _a1(61,16))))}function _ae(i,f,c,h,e,b,g,d,a){this.a11=i,this.a12=h,this.a13=g,this.a21=f,this.a22=e,this.a23=d,this.a31=c,this.a32=b,this.a33=a,this._ad=function(w){for(var t=w.length,A=this.a11,z=this.a12,v=this.a13,r=this.a21,q=this.a22,o=this.a23,m=this.a31,k=this.a32,j=this.a33,n=0;n<t;n+=2){var u=w[n],s=w[n+1],l=v*u+o*s+j;w[n]=(A*u+r*s+m)/l,w[n+1]=(z*u+q*s+k)/l}},this._fp=function(m,k){for(var r=m.length,l=0;l<r;l++){var j=m[l],q=k[l],o=this.a13*j+this.a23*q+this.a33;m[l]=(this.a11*j+this.a21*q+this.a31)/o,k[l]=(this.a12*j+this.a22*q+this.a32)/o}},this._fr=function(){return new _ae(this.a22*this.a33-this.a23*this.a32,this.a23*this.a31-this.a21*this.a33,this.a21*this.a32-this.a22*this.a31,this.a13*this.a32-this.a12*this.a33,this.a11*this.a33-this.a13*this.a31,this.a12*this.a31-this.a11*this.a32,this.a12*this.a23-this.a13*this.a22,this.a13*this.a21-this.a11*this.a23,this.a11*this.a22-this.a12*this.a21)},this.times=function(j){return new _ae(this.a11*j.a11+this.a21*j.a12+this.a31*j.a13,this.a11*j.a21+this.a21*j.a22+this.a31*j.a23,this.a11*j.a31+this.a21*j.a32+this.a31*j.a33,this.a12*j.a11+this.a22*j.a12+this.a32*j.a13,this.a12*j.a21+this.a22*j.a22+this.a32*j.a23,this.a12*j.a31+this.a22*j.a32+this.a32*j.a33,this.a13*j.a11+this.a23*j.a12+this.a33*j.a13,this.a13*j.a21+this.a23*j.a22+this.a33*j.a23,this.a13*j.a31+this.a23*j.a32+this.a33*j.a33)}}function _bg(b,a){this.bits=b,this.points=a}function Detector(a){this.image=a,this._am=null,this._bi=function(m,l,c,b){var d=Math.abs(b-l)>Math.abs(c-m);if(d){var s=m;m=l,l=s,s=c,c=b,b=s}for(var j=Math.abs(c-m),i=Math.abs(b-l),q=-j>>1,v=l<b?1:-1,f=m<c?1:-1,e=0,h=m,g=l;h!=c;h+=f){var u=d?g:h,t=d?h:g;if(1==e?this.image[u+t*qrcode.width]&&e++:this.image[u+t*qrcode.width]||e++,3==e){var o=h-m,n=g-l;return Math.sqrt(o*o+n*n)}if(q+=i,q>0){if(g==b)break;g+=v,q-=j}}var k=c-m,r=b-l;return Math.sqrt(k*k+r*r)},this._bh=function(i,g,h,f){var b=this._bi(i,g,h,f),e=1,d=i-(h-i);d<0?(e=i/(i-d),d=0):d>=qrcode.width&&(e=(qrcode.width-1-i)/(d-i),d=qrcode.width-1);var c=Math.floor(g-(f-g)*e);return e=1,c<0?(e=g/(g-c),c=0):c>=qrcode.height&&(e=(qrcode.height-1-g)/(c-g),c=qrcode.height-1),d=Math.floor(i+(d-i)*e),b+=this._bi(i,g,d,c),b-1},this._bj=function(c,d){var b=this._bh(Math.floor(c.X),Math.floor(c.Y),Math.floor(d.X),Math.floor(d.Y)),e=this._bh(Math.floor(d.X),Math.floor(d.Y),Math.floor(c.X),Math.floor(c.Y));return isNaN(b)?e/7:isNaN(e)?b/7:(b+e)/14},this._bk=function(d,c,b){return(this._bj(d,c)+this._bj(d,b))/2},this.distance=function(c,b){return xDiff=c.X-b.X,yDiff=c.Y-b.Y,Math.sqrt(xDiff*xDiff+yDiff*yDiff)},this._bx=function(g,f,d,e){var b=Math.round(this.distance(g,f)/e),c=Math.round(this.distance(g,d)/e),h=(b+c>>1)+7;switch(3&h){case 0:h++;break;case 2:h--;break;case 3:throw"Error"}return h},this._bl=function(g,f,d,j){var k=Math.floor(j*g),h=Math.max(0,f-k),i=Math.min(qrcode.width-1,f+k);if(i-h<3*g)throw"Error";var b=Math.max(0,d-k),c=Math.min(qrcode.height-1,d+k),e=new _ak(this.image,h,b,i-h,c-b,g,this._am);return e.find()},this.createTransform=function(l,h,k,b,g){var i,f,e,c,j=g-3.5;null!=b?(i=b.X,f=b.Y,e=c=j-3):(i=h.X-l.X+k.X,f=h.Y-l.Y+k.Y,e=c=j);var d=_ae._ag(3.5,3.5,j,3.5,e,c,3.5,j,l.X,l.Y,h.X,h.Y,i,f,k.X,k.Y);return d},this._bz=function(e,b,d){var c=_aa;return c._af(e,d,b)},this._cd=function(r){var j=r._gq,h=r._gs,n=r._gp,d=this._bk(j,h,n);if(d<1)throw"Error";var s=this._bx(j,h,n,d),b=_a3._at(s),k=b._cr-7,l=null;if(b._as.length>0)for(var f=h.X-j.X+n.X,e=h.Y-j.Y+n.Y,c=1-3/k,u=Math.floor(j.X+c*(f-j.X)),t=Math.floor(j.Y+c*(e-j.Y)),q=4;q<=16;q<<=1){l=this._bl(d,u,t,q);break}var o,g=this.createTransform(j,h,n,l,s),m=this._bz(this.image,g,s);return o=null==l?new Array(n,j,h):new Array(n,j,h,l),new _bg(m,o)},this.detect=function(){var b=(new _cc)._ce(this.image);return this._cd(b)}}function _ax(a){this._cf=_cg.forBits(a>>3&3),this._fe=7&a,this.__defineGetter__("_cg",function(){return this._cf}),this.__defineGetter__("_dx",function(){return this._fe}),this.GetHashCode=function(){return this._cf.ordinal()<<3|_fe},this.Equals=function(c){var b=c;return this._cf==b._cf&&this._fe==b._fe}}function _cg(a,c,b){this._ff=a,this.bits=c,this.name=b,this.__defineGetter__("Bits",function(){return this.bits}),this.__defineGetter__("Name",function(){return this.name}),this.ordinal=function(){return this._ff}}function _ac(d,a){if(a||(a=d),d<1||a<1)throw"Both dimensions must be greater than 0";this.width=d,this.height=a;var c=d>>5;0!=(31&d)&&c++,this.rowSize=c,this.bits=new Array(c*a);for(var b=0;b<this.bits.length;b++)this.bits[b]=0;this.__defineGetter__("Width",function(){return this.width}),this.__defineGetter__("Height",function(){return this.height}),this.__defineGetter__("Dimension",function(){if(this.width!=this.height)throw"Can't call getDimension() on a non-square matrix";return this.width}),this._ds=function(e,g){var f=g*this.rowSize+(e>>5);return 0!=(1&_ew(this.bits[f],31&e))},this._dq=function(e,g){var f=g*this.rowSize+(e>>5);this.bits[f]|=1<<(31&e)},this.flip=function(e,g){var f=g*this.rowSize+(e>>5);this.bits[f]^=1<<(31&e)},this.clear=function(){for(var e=this.bits.length,f=0;f<e;f++)this.bits[f]=0},this._bq=function(g,j,f,m){if(j<0||g<0)throw"Left and top must be nonnegative";if(m<1||f<1)throw"Height and width must be at least 1";var l=g+f,e=j+m;if(e>this.height||l>this.width)throw"The region must fit inside the matrix";for(var i=j;i<e;i++)for(var h=i*this.rowSize,k=g;k<l;k++)this.bits[h+(k>>5)]|=1<<(31&k)}}function _dl(a,b){this._dv=a,this._dw=b,this.__defineGetter__("_du",function(){return this._dv}),this.__defineGetter__("Codewords",function(){return this._dw})}function _cl(a){var b=a.Dimension;if(b<21||1!=(3&b))throw"Error _cl";this._au=a,this._cp=null,this._co=null,this._dk=function(d,c,e){return this._au._ds(d,c)?e<<1|1:e<<1},this._cm=function(){if(null!=this._co)return this._co;for(var g=0,e=0;e<6;e++)g=this._dk(e,8,g);g=this._dk(7,8,g),g=this._dk(8,8,g),g=this._dk(8,7,g);for(var c=5;c>=0;c--)g=this._dk(8,c,g);if(this._co=_ax._ci(g),null!=this._co)return this._co;var f=this._au.Dimension;g=0;for(var d=f-8,e=f-1;e>=d;e--)g=this._dk(e,8,g);for(var c=f-7;c<f;c++)g=this._dk(8,c,g);if(this._co=_ax._ci(g),null!=this._co)return this._co;throw"Error _cm"},this._cq=function(){if(null!=this._cp)return this._cp;var h=this._au.Dimension,f=h-17>>2;if(f<=6)return _a3._av(f);for(var g=0,e=h-11,c=5;c>=0;c--)for(var d=h-9;d>=e;d--)g=this._dk(d,c,g);if(this._cp=_a3._aw(g),null!=this._cp&&this._cp._cr==h)return this._cp;g=0;for(var d=5;d>=0;d--)for(var c=h-9;c>=e;c--)g=this._dk(d,c,g);if(this._cp=_a3._aw(g),null!=this._cp&&this._cp._cr==h)return this._cp;throw"Error _cq"},this._gk=function(){var r=this._cm(),o=this._cq(),c=_dx._gl(r._dx),f=this._au.Dimension;c._dj(this._au,f);for(var k=o._aq(),n=!0,s=new Array(o._dp),m=0,q=0,h=0,e=f-1;e>0;e-=2){6==e&&e--;for(var l=0;l<f;l++)for(var g=n?f-1-l:l,d=0;d<2;d++)k._ds(e-d,g)||(h++,q<<=1,this._au._ds(e-d,g)&&(q|=1),8==h&&(s[m++]=q,h=0,q=0));n^=!0}if(m!=o._dp)throw"Error _gk";return s}}function _fg(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(b,a){return 0==(b+a&1)}}function _fh(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(b,a){return 0==(1&b)}}function _fi(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(b,a){return a%3==0}}function _fj(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(b,a){return(b+a)%3==0}}function _fk(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(b,a){return 0==(_ew(b,1)+a/3&1)}}function _fl(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(c,b){var a=c*b;return(1&a)+a%3==0}}function _fm(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(c,b){var a=c*b;return 0==((1&a)+a%3&1)}}function _fn(){this._dj=function(c,d){for(var b=0;b<d;b++)for(var a=0;a<d;a++)this._fw(b,a)&&c.flip(a,b)},this._fw=function(b,a){return 0==((b+a&1)+b*a%3&1)}}function _db(_fa){this._fa=_fa,this.decode=function(received,_fv){for(var poly=new _bp(this._fa,received),_dh=new Array(_fv),i=0;i<_dh.length;i++)_dh[i]=0;for(var _fq=!1,noError=!0,i=0;i<_fv;i++){var eval=poly.evaluateAt(this._fa.exp(_fq?i+1:i));_dh[_dh.length-1-i]=eval,0!=eval&&(noError=!1)}if(!noError)for(var _fu=new _bp(this._fa,_dh),_dg=this._eb(this._fa._ba(_fv,1),_fu,_fv),sigma=_dg[0],omega=_dg[1],_dz=this._ey(sigma),_ea=this._di(omega,_dz,_fq),i=0;i<_dz.length;i++){var position=received.length-1-this._fa.log(_dz[i]);if(position<0)throw"ReedSolomonException Bad error location";received[position]=_az._bd(received[position],_ea[i])}},this._eb=function(a,b,R){if(a._ec<b._ec){var temp=a;a=b,b=temp}for(var rLast=a,r=b,sLast=this._fa.One,s=this._fa.Zero,tLast=this._fa.Zero,t=this._fa.One;r._ec>=Math.floor(R/2);){var rLastLast=rLast,_ga=sLast,_gb=tLast;if(rLast=r,sLast=s,tLast=t,rLast.Zero)throw"r_{i-1} was zero";r=rLastLast;for(var q=this._fa.Zero,_df=rLast._ex(rLast._ec),_fy=this._fa.inverse(_df);r._ec>=rLast._ec&&!r.Zero;){var _fx=r._ec-rLast._ec,scale=this._fa.multiply(r._ex(r._ec),_fy);q=q._bd(this._fa._ba(_fx,scale)),r=r._bd(rLast._dc(_fx,scale))}s=q.multiply1(sLast)._bd(_ga),t=q.multiply1(tLast)._bd(_gb)}var _de=t._ex(0);if(0==_de)throw"ReedSolomonException sigmaTilde(0) was zero";var inverse=this._fa.inverse(_de),sigma=t.multiply2(inverse),omega=r.multiply2(inverse);return new Array(sigma,omega)},this._ey=function(_ez){var _fz=_ez._ec;if(1==_fz)return new Array(_ez._ex(1));for(var result=new Array(_fz),e=0,i=1;i<256&&e<_fz;i++)0==_ez.evaluateAt(i)&&(result[e]=this._fa.inverse(i),e++);if(e!=_fz)throw"Error locator degree does not match number of roots";return result},this._di=function(_fs,_dz,_fq){for(var s=_dz.length,result=new Array(s),i=0;i<s;i++){for(var _gc=this._fa.inverse(_dz[i]),_dr=1,j=0;j<s;j++)i!=j&&(_dr=this._fa.multiply(_dr,_az._bd(1,this._fa.multiply(_dz[j],_gc))));result[i]=this._fa.multiply(_fs.evaluateAt(_gc),this._fa.inverse(_dr)),_fq&&(result[i]=this._fa.multiply(result[i],_gc))}return result}}function _bp(f,e){if(null==e||0==e.length)throw"bad arguments";this._fa=f;var c=e.length;if(c>1&&0==e[0]){for(var d=1;d<c&&0==e[d];)d++;if(d==c)this._dd=f.Zero._dd;else{this._dd=new Array(c-d);for(var b=0;b<this._dd.length;b++)this._dd[b]=0;for(var a=0;a<this._dd.length;a++)this._dd[a]=e[d+a]}}else this._dd=e;this.__defineGetter__("Zero",function(){return 0==this._dd[0]}),this.__defineGetter__("_ec",function(){return this._dd.length-1}),this.__defineGetter__("Coefficients",function(){return this._dd}),this._ex=function(g){return this._dd[this._dd.length-1-g]},this.evaluateAt=function(h){if(0==h)return this._ex(0);var l=this._dd.length;if(1==h){for(var g=0,k=0;k<l;k++)g=_az._bd(g,this._dd[k]);return g}for(var j=this._dd[0],k=1;k<l;k++)j=_az._bd(this._fa.multiply(h,j),this._dd[k]);return j},this._bd=function(g){if(this._fa!=g._fa)throw"GF256Polys do not have same _az _fa";if(this.Zero)return g;if(g.Zero)return this;var o=this._dd,n=g._dd;if(o.length>n.length){var j=o;o=n,n=j}for(var h=new Array(n.length),k=n.length-o.length,m=0;m<k;m++)h[m]=n[m];for(var l=k;l<n.length;l++)h[l]=_az._bd(o[l-k],n[l]);return new _bp(f,h)},this.multiply1=function(o){if(this._fa!=o._fa)throw"GF256Polys do not have same _az _fa";if(this.Zero||o.Zero)return this._fa.Zero;for(var r=this._dd,g=r.length,l=o._dd,n=l.length,q=new Array(g+n-1),m=0;m<g;m++)for(var h=r[m],k=0;k<n;k++)q[m+k]=_az._bd(q[m+k],this._fa.multiply(h,l[k]));return new _bp(this._fa,q)},this.multiply2=function(g){if(0==g)return this._fa.Zero;if(1==g)return this;for(var j=this._dd.length,k=new Array(j),h=0;h<j;h++)k[h]=this._fa.multiply(this._dd[h],g);return new _bp(this._fa,k)},this._dc=function(l,g){if(l<0)throw"bad arguments";if(0==g)return this._fa.Zero;for(var j=this._dd.length,k=new Array(j+l),h=0;h<k.length;h++)k[h]=0;for(var h=0;h<j;h++)k[h]=this._fa.multiply(this._dd[h],g);return new _bp(this._fa,k)},this.divide=function(l){if(this._fa!=l._fa)throw"GF256Polys do not have same _az _fa";if(l.Zero)throw"Divide by 0";for(var j=this._fa.Zero,o=this,g=l._ex(l._ec),n=this._fa.inverse(g);o._ec>=l._ec&&!o.Zero;){var m=o._ec-l._ec,h=this._fa.multiply(o._ex(o._ec),n),i=l._dc(m,h),k=this._fa._ba(m,h);j=j._bd(k),o=o._bd(i)}return new Array(j,o)}}function _az(b){this._gh=new Array(256),this._gi=new Array(256);for(var a=1,e=0;e<256;e++)this._gh[e]=a,a<<=1,a>=256&&(a^=b);for(var e=0;e<255;e++)this._gi[this._gh[e]]=e;var d=new Array(1);d[0]=0,this.zero=new _bp(this,new Array(d));var c=new Array(1);c[0]=1,this.one=new _bp(this,new Array(c)),this.__defineGetter__("Zero",function(){return this.zero}),this.__defineGetter__("One",function(){return this.one}),this._ba=function(j,f){if(j<0)throw"bad arguments";if(0==f)return zero;for(var h=new Array(j+1),g=0;g<h.length;g++)h[g]=0;return h[0]=f,new _bp(this,h)},this.exp=function(f){return this._gh[f]},this.log=function(f){if(0==f)throw"bad arguments";return this._gi[f]},this.inverse=function(f){if(0==f)throw"System.ArithmeticException";return this._gh[255-this._gi[f]]},this.multiply=function(g,f){return 0==g||0==f?0:1==g?f:1==f?g:this._gh[(this._gi[g]+this._gi[f])%255]}}function _ew(a,b){return a>=0?a>>b:(a>>b)+(2<<~b)}function _cz(c,a,b){this.x=c,this.y=a,this.count=1,this._aj=b,this.__defineGetter__("_ei",function(){return this._aj}),this.__defineGetter__("Count",function(){return this.count}),this.__defineGetter__("X",function(){return this.x}),this.__defineGetter__("Y",function(){return this.y}),this._ek=function(){this.count++},this._ev=function(f,e,d){if(Math.abs(e-this.y)<=f&&Math.abs(d-this.x)<=f){var g=Math.abs(f-this._aj);return g<=1||g/this._aj<=1}return!1}}function _es(a){this._go=a[0],this._gu=a[1],this._gr=a[2],this.__defineGetter__("_gp",function(){return this._go}),this.__defineGetter__("_gq",function(){return this._gu}),this.__defineGetter__("_gs",function(){return this._gr})}function _cc(){this.image=null,this._cv=[],this._ge=!1,this._al=new Array(0,0,0,0,0),this._am=null,this.__defineGetter__("_da",function(){return this._al[0]=0,this._al[1]=0,this._al[2]=0,this._al[3]=0,this._al[4]=0,this._al}),this._ao=function(f){for(var b=0,d=0;d<5;d++){var e=f[d];if(0==e)return!1;b+=e}if(b<7)return!1;var c=Math.floor((b<<_el)/7),a=Math.floor(c/2);return Math.abs(c-(f[0]<<_el))<a&&Math.abs(c-(f[1]<<_el))<a&&Math.abs(3*c-(f[2]<<_el))<3*a&&Math.abs(c-(f[3]<<_el))<a&&Math.abs(c-(f[4]<<_el))<a},this._an=function(b,a){return a-b[4]-b[3]-b[2]/2},this._ap=function(a,j,d,g){for(var c=this.image,h=qrcode.height,b=this._da,f=a;f>=0&&c[j+f*qrcode.width];)b[2]++,f--;if(f<0)return NaN;for(;f>=0&&!c[j+f*qrcode.width]&&b[1]<=d;)b[1]++,f--;if(f<0||b[1]>d)return NaN;for(;f>=0&&c[j+f*qrcode.width]&&b[0]<=d;)b[0]++,f--;if(b[0]>d)return NaN;for(f=a+1;f<h&&c[j+f*qrcode.width];)b[2]++,f++;if(f==h)return NaN;for(;f<h&&!c[j+f*qrcode.width]&&b[3]<d;)b[3]++,f++;if(f==h||b[3]>=d)return NaN;for(;f<h&&c[j+f*qrcode.width]&&b[4]<d;)b[4]++,f++;if(b[4]>=d)return NaN;var e=b[0]+b[1]+b[2]+b[3]+b[4];return 5*Math.abs(e-g)>=2*g?NaN:this._ao(b)?this._an(b,f):NaN},this._ej=function(b,a,e,h){for(var d=this.image,i=qrcode.width,c=this._da,g=b;g>=0&&d[g+a*qrcode.width];)c[2]++,g--;if(g<0)return NaN;for(;g>=0&&!d[g+a*qrcode.width]&&c[1]<=e;)c[1]++,g--;if(g<0||c[1]>e)return NaN;for(;g>=0&&d[g+a*qrcode.width]&&c[0]<=e;)c[0]++,g--;if(c[0]>e)return NaN;for(g=b+1;g<i&&d[g+a*qrcode.width];)c[2]++,g++;if(g==i)return NaN;for(;g<i&&!d[g+a*qrcode.width]&&c[3]<e;)c[3]++,g++;if(g==i||c[3]>=e)return NaN;for(;g<i&&d[g+a*qrcode.width]&&c[4]<e;)c[4]++,g++;if(c[4]>=e)return NaN;var f=c[0]+c[1]+c[2]+c[3]+c[4];return 5*Math.abs(f-h)>=h?NaN:this._ao(c)?this._an(c,g):NaN},this._cu=function(c,f,e){var d=c[0]+c[1]+c[2]+c[3]+c[4],n=this._an(c,e),b=this._ap(f,Math.floor(n),c[2],d);if(!isNaN(b)&&(n=this._ej(Math.floor(n),Math.floor(b),c[2],d),!isNaN(n))){for(var l=d/7,m=!1,h=this._cv.length,g=0;g<h;g++){var a=this._cv[g];if(a._ev(l,b,n)){a._ek(),m=!0;break}}if(!m){var k=new _cz(n,b,l);this._cv.push(k),null!=this._am&&this._am._ep(k)}return!0}return!1},this._ee=function(){var a=this._cv.length;if(a<3)throw"Couldn't find enough finder patterns";if(a>3){for(var b=0,c=0;c<a;c++)b+=this._cv[c]._ei;for(var d=b/a,c=0;c<this._cv.length&&this._cv.length>3;c++){var e=this._cv[c];Math.abs(e._ei-d)>.2*d&&(this._cv.remove(c),c--)}}return this._cv.length>3&&this._cv.sort(function(g,f){return g.count>f.count?-1:g.count<f.count?1:0}),new Array(this._cv[0],this._cv[1],this._cv[2])},this._eq=function(){var b=this._cv.length;if(b<=1)return 0;for(var c=null,d=0;d<b;d++){var a=this._cv[d];if(a.Count>=_eg){if(null!=c)return this._ge=!0,Math.floor((Math.abs(c.X-a.X)-Math.abs(c.Y-a.Y))/2);c=a}}return 0},this._cx=function(){for(var g=0,c=0,a=this._cv.length,d=0;d<a;d++){var f=this._cv[d];f.Count>=_eg&&(g++,c+=f._ei)}if(g<3)return!1;for(var e=c/a,b=0,d=0;d<a;d++)f=this._cv[d],b+=Math.abs(f._ei-e);return b<=.05*c},this._ce=function(e){var o=!1;this.image=e;var n=qrcode.height,k=qrcode.width,a=Math.floor(3*n/(4*_eh));(a<_gf||o)&&(a=_gf);for(var g=!1,d=new Array(5),h=a-1;h<n&&!g;h+=a){d[0]=0,d[1]=0,d[2]=0,d[3]=0,d[4]=0;for(var b=0,f=0;f<k;f++)if(e[f+h*qrcode.width])1==(1&b)&&b++,d[b]++;else if(0==(1&b))if(4==b)if(this._ao(d)){var c=this._cu(d,h,f);if(c)if(a=2,this._ge)g=this._cx();else{var m=this._eq();m>d[2]&&(h+=m-d[2]-a,f=k-1)}else{do f++;while(f<k&&!e[f+h*qrcode.width]);f--}b=0,d[0]=0,d[1]=0,d[2]=0,d[3]=0,d[4]=0}else d[0]=d[2],d[1]=d[3],d[2]=d[4],d[3]=1,d[4]=0,b=3;else d[++b]++;else d[b]++;if(this._ao(d)){var c=this._cu(d,h,k);c&&(a=d[0],this._ge&&(g=_cx()))}}var l=this._ee();return qrcode._er(l),new _es(l)}}function _ai(c,a,b){this.x=c,this.y=a,this.count=1,this._aj=b,this.__defineGetter__("_ei",function(){return this._aj}),this.__defineGetter__("Count",function(){return this.count}),this.__defineGetter__("X",function(){return Math.floor(this.x)}),this.__defineGetter__("Y",function(){return Math.floor(this.y)}),this._ek=function(){this.count++},this._ev=function(f,e,d){if(Math.abs(e-this.y)<=f&&Math.abs(d-this.x)<=f){var g=Math.abs(f-this._aj);return g<=1||g/this._aj<=1}return!1}}function _ak(g,c,b,f,a,e,d){this.image=g,this._cv=new Array,this.startX=c,this.startY=b,this.width=f,this.height=a,this._ef=e,this._al=new Array(0,0,0),this._am=d,this._an=function(i,h){return h-i[2]-i[1]/2},this._ao=function(l){for(var k=this._ef,h=k/2,j=0;j<3;j++)if(Math.abs(k-l[j])>=h)return!1;return!0},this._ap=function(h,r,l,o){var k=this.image,q=qrcode.height,j=this._al;j[0]=0,j[1]=0,j[2]=0;for(var n=h;n>=0&&k[r+n*qrcode.width]&&j[1]<=l;)j[1]++,n--;if(n<0||j[1]>l)return NaN;for(;n>=0&&!k[r+n*qrcode.width]&&j[0]<=l;)j[0]++,n--;if(j[0]>l)return NaN;for(n=h+1;n<q&&k[r+n*qrcode.width]&&j[1]<=l;)j[1]++,n++;if(n==q||j[1]>l)return NaN;for(;n<q&&!k[r+n*qrcode.width]&&j[2]<=l;)j[2]++,n++;if(j[2]>l)return NaN;var m=j[0]+j[1]+j[2];return 5*Math.abs(m-o)>=2*o?NaN:this._ao(j)?this._an(j,n):NaN},this._cu=function(l,o,n){var m=l[0]+l[1]+l[2],u=this._an(l,n),k=this._ap(o,Math.floor(u),2*l[1],m);if(!isNaN(k)){for(var t=(l[0]+l[1]+l[2])/3,r=this._cv.length,q=0;q<r;q++){var h=this._cv[q];if(h._ev(t,k,u))return new _ai(u,k,t)}var s=new _ai(u,k,t);this._cv.push(s),null!=this._am&&this._am._ep(s)}return null},this.find=function(){for(var q=this.startX,t=this.height,r=q+f,s=b+(t>>1),m=new Array(0,0,0),k=0;k<t;k++){var o=s+(0==(1&k)?k+1>>1:-(k+1>>1));m[0]=0,m[1]=0,m[2]=0;for(var n=q;n<r&&!g[n+qrcode.width*o];)n++;for(var h=0;n<r;){if(g[n+o*qrcode.width])if(1==h)m[h]++;else if(2==h){if(this._ao(m)){var l=this._cu(m,o,n);if(null!=l)return l}m[0]=m[2],m[1]=1,m[2]=0,h=1}else m[++h]++;else 1==h&&h++,m[h]++;n++}if(this._ao(m)){var l=this._cu(m,o,r);if(null!=l)return l}}if(0!=this._cv.length)return this._cv[0];throw"Couldn't find enough alignment patterns"}}function QRCodeDataBlockReader(c,a,b){this._ed=0,this._cw=7,this.dataLength=0,this.blocks=c,this._en=b,a<=9?this.dataLengthMode=0:a>=10&&a<=26?this.dataLengthMode=1:a>=27&&a<=40&&(this.dataLengthMode=2),this._gd=function(f){var k=0;if(f<this._cw+1){for(var m=0,e=0;e<f;e++)m+=1<<e;return m<<=this._cw-f+1,k=(this.blocks[this._ed]&m)>>this._cw-f+1,this._cw-=f,k}if(f<this._cw+1+8){for(var j=0,e=0;e<this._cw+1;e++)j+=1<<e;return k=(this.blocks[this._ed]&j)<<f-(this._cw+1),this._ed++,k+=this.blocks[this._ed]>>8-(f-(this._cw+1)),this._cw=this._cw-f%8,this._cw<0&&(this._cw=8+this._cw),k}if(f<this._cw+1+16){for(var j=0,h=0,e=0;e<this._cw+1;e++)j+=1<<e;var g=(this.blocks[this._ed]&j)<<f-(this._cw+1);this._ed++;var d=this.blocks[this._ed]<<f-(this._cw+1+8);this._ed++;for(var e=0;e<f-(this._cw+1+8);e++)h+=1<<e;h<<=8-(f-(this._cw+1+8));var l=(this.blocks[this._ed]&h)>>8-(f-(this._cw+1+8));return k=g+d+l,this._cw=this._cw-(f-8)%8,this._cw<0&&(this._cw=8+this._cw),k}return 0},this.NextMode=function(){return this._ed>this.blocks.length-this._en-2?0:this._gd(4)},this.getDataLength=function(d){for(var e=0;;){if(d>>e==1)break;e++}return this._gd(qrcode._eo[this.dataLengthMode][e])},this.getRomanAndFigureString=function(h){var f=h,g=0,j="",d=new Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":");do if(f>1){g=this._gd(11);var i=Math.floor(g/45),e=g%45;j+=d[i],j+=d[e],f-=2}else 1==f&&(g=this._gd(6),j+=d[g],f-=1);while(f>0);return j},this.getFigureString=function(f){var d=f,e=0,g="";do d>=3?(e=this._gd(10),e<100&&(g+="0"),e<10&&(g+="0"),d-=3):2==d?(e=this._gd(7),e<10&&(g+="0"),d-=2):1==d&&(e=this._gd(4),d-=1),g+=e;while(d>0);return g},this.get8bitByteArray=function(g){var e=g,f=0,d=new Array;do f=this._gd(8),d.push(f),e--;while(e>0);return d},this.getKanjiString=function(j){var g=j,i=0,h="";do{i=_gd(13);var e=i%192,f=i/192,k=(f<<8)+e,d=0;d=k+33088<=40956?k+33088:k+49472,h+=String.fromCharCode(d),g--}while(g>0);return h},this.__defineGetter__("DataByte",function(){for(var g=new Array,e=1,f=2,d=4,n=8;;){var k=this.NextMode();if(0==k){if(g.length>0)break;throw"Empty data block"}if(k!=e&&k!=f&&k!=d&&k!=n)throw"Invalid mode: "+k+" in (block:"+this._ed+" bit:"+this._cw+")";if(dataLength=this.getDataLength(k),dataLength<1)throw"Invalid data length: "+dataLength;switch(k){case e:for(var l=this.getFigureString(dataLength),i=new Array(l.length),h=0;h<l.length;h++)i[h]=l.charCodeAt(h);g.push(i);break;case f:for(var l=this.getRomanAndFigureString(dataLength),i=new Array(l.length),h=0;h<l.length;h++)i[h]=l.charCodeAt(h);g.push(i);break;case d:var m=this.get8bitByteArray(dataLength);g.push(m);break;case n:var l=this.getKanjiString(dataLength);g.push(l)}}return g})}function C_Promise(workload,context){this.parent=context,this.update=null,this.finally=null,this.error_function=null,this.then=function(callback){return this.finally=callback,this},this.progress=function(callback){return this.update=callback,this},this.error=function(callback){return this.error_function=callback,this},this.call_then=function(data){null!==this.finally&&this.finally(data);
},this.call_progress=function(data){null!==this.update&&this.update(data)},this.call_error=function(data){null!==this.error_function&&this.error_function(data)},setTimeout(workload.bind(this),100)}!function(C){function N(a){return function(){var d,b=arguments[0];for(d="["+(a?a+":":"")+b+"] http://errors.angularjs.org/1.5.8/"+(a?a+"/":"")+b,b=1;b<arguments.length;b++){d=d+(1==b?"?":"&")+"p"+(b-1)+"=";var e,c=encodeURIComponent;e=arguments[b],e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e,d+=c(e)}return Error(d)}}function ta(a){if(null==a||Va(a))return!1;if(L(a)||G(a)||F&&a instanceof F)return!0;var b="length"in Object(a)&&a.length;return T(b)&&(0<=b&&(b-1 in a||a instanceof Array)||"function"==typeof a.item)}function q(a,b,d){var c,e;if(a)if(z(a))for(c in a)"prototype"==c||"length"==c||"name"==c||a.hasOwnProperty&&!a.hasOwnProperty(c)||b.call(d,a[c],c,a);else if(L(a)||ta(a)){var f="object"!=typeof a;for(c=0,e=a.length;c<e;c++)(f||c in a)&&b.call(d,a[c],c,a)}else if(a.forEach&&a.forEach!==q)a.forEach(b,d,a);else if(sc(a))for(c in a)b.call(d,a[c],c,a);else if("function"==typeof a.hasOwnProperty)for(c in a)a.hasOwnProperty(c)&&b.call(d,a[c],c,a);else for(c in a)ua.call(a,c)&&b.call(d,a[c],c,a);return a}function tc(a,b,d){for(var c=Object.keys(a).sort(),e=0;e<c.length;e++)b.call(d,a[c[e]],c[e]);return c}function uc(a){return function(b,d){a(d,b)}}function Yd(){return++pb}function Pb(a,b,d){for(var c=a.$$hashKey,e=0,f=b.length;e<f;++e){var g=b[e];if(D(g)||z(g))for(var h=Object.keys(g),k=0,l=h.length;k<l;k++){var m=h[k],n=g[m];d&&D(n)?da(n)?a[m]=new Date(n.valueOf()):Wa(n)?a[m]=new RegExp(n):n.nodeName?a[m]=n.cloneNode(!0):Qb(n)?a[m]=n.clone():(D(a[m])||(a[m]=L(n)?[]:{}),Pb(a[m],[n],!0)):a[m]=n}}return c?a.$$hashKey=c:delete a.$$hashKey,a}function S(a){return Pb(a,va.call(arguments,1),!1)}function Zd(a){return Pb(a,va.call(arguments,1),!0)}function Z(a){return parseInt(a,10)}function Rb(a,b){return S(Object.create(a),b)}function A(){}function Xa(a){return a}function ha(a){return function(){return a}}function vc(a){return z(a.toString)&&a.toString!==ma}function y(a){return"undefined"==typeof a}function w(a){return"undefined"!=typeof a}function D(a){return null!==a&&"object"==typeof a}function sc(a){return null!==a&&"object"==typeof a&&!wc(a)}function G(a){return"string"==typeof a}function T(a){return"number"==typeof a}function da(a){return"[object Date]"===ma.call(a)}function z(a){return"function"==typeof a}function Wa(a){return"[object RegExp]"===ma.call(a)}function Va(a){return a&&a.window===a}function Ya(a){return a&&a.$evalAsync&&a.$watch}function Ga(a){return"boolean"==typeof a}function $d(a){return a&&T(a.length)&&ae.test(ma.call(a))}function Qb(a){return!(!a||!(a.nodeName||a.prop&&a.attr&&a.find))}function be(a){var b={};a=a.split(",");var d;for(d=0;d<a.length;d++)b[a[d]]=!0;return b}function wa(a){return Q(a.nodeName||a[0]&&a[0].nodeName)}function Za(a,b){var d=a.indexOf(b);return 0<=d&&a.splice(d,1),d}function pa(a,b){function d(a,b){var e,d=b.$$hashKey;if(L(a)){e=0;for(var f=a.length;e<f;e++)b.push(c(a[e]))}else if(sc(a))for(e in a)b[e]=c(a[e]);else if(a&&"function"==typeof a.hasOwnProperty)for(e in a)a.hasOwnProperty(e)&&(b[e]=c(a[e]));else for(e in a)ua.call(a,e)&&(b[e]=c(a[e]));return d?b.$$hashKey=d:delete b.$$hashKey,b}function c(a){if(!D(a))return a;var b=f.indexOf(a);if(-1!==b)return g[b];if(Va(a)||Ya(a))throw xa("cpws");var b=!1,c=e(a);return void 0===c&&(c=L(a)?[]:Object.create(wc(a)),b=!0),f.push(a),g.push(c),b?d(a,c):c}function e(a){switch(ma.call(a)){case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Float32Array]":case"[object Float64Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return new a.constructor(c(a.buffer),a.byteOffset,a.length);case"[object ArrayBuffer]":if(!a.slice){var b=new ArrayBuffer(a.byteLength);return new Uint8Array(b).set(new Uint8Array(a)),b}return a.slice(0);case"[object Boolean]":case"[object Number]":case"[object String]":case"[object Date]":return new a.constructor(a.valueOf());case"[object RegExp]":return b=new RegExp(a.source,a.toString().match(/[^\/]*$/)[0]),b.lastIndex=a.lastIndex,b;case"[object Blob]":return new a.constructor([a],{type:a.type})}if(z(a.cloneNode))return a.cloneNode(!0)}var f=[],g=[];if(b){if($d(b)||"[object ArrayBuffer]"===ma.call(b))throw xa("cpta");if(a===b)throw xa("cpi");return L(b)?b.length=0:q(b,function(a,d){"$$hashKey"!==d&&delete b[d]}),f.push(a),g.push(b),d(a,b)}return c(a)}function na(a,b){if(a===b)return!0;if(null===a||null===b)return!1;if(a!==a&&b!==b)return!0;var c,d=typeof a;if(d==typeof b&&"object"==d){if(!L(a)){if(da(a))return!!da(b)&&na(a.getTime(),b.getTime());if(Wa(a))return!!Wa(b)&&a.toString()==b.toString();if(Ya(a)||Ya(b)||Va(a)||Va(b)||L(b)||da(b)||Wa(b))return!1;d=U();for(c in a)if("$"!==c.charAt(0)&&!z(a[c])){if(!na(a[c],b[c]))return!1;d[c]=!0}for(c in b)if(!(c in d)&&"$"!==c.charAt(0)&&w(b[c])&&!z(b[c]))return!1;return!0}if(!L(b))return!1;if((d=a.length)==b.length){for(c=0;c<d;c++)if(!na(a[c],b[c]))return!1;return!0}}return!1}function $a(a,b,d){return a.concat(va.call(b,d))}function ab(a,b){var d=2<arguments.length?va.call(arguments,2):[];return!z(b)||b instanceof RegExp?b:d.length?function(){return arguments.length?b.apply(a,$a(d,arguments,0)):b.apply(a,d)}:function(){return arguments.length?b.apply(a,arguments):b.call(a)}}function ce(a,b){var d=b;return"string"==typeof a&&"$"===a.charAt(0)&&"$"===a.charAt(1)?d=void 0:Va(b)?d="$WINDOW":b&&C.document===b?d="$DOCUMENT":Ya(b)&&(d="$SCOPE"),d}function bb(a,b){if(!y(a))return T(b)||(b=b?2:null),JSON.stringify(a,ce,b)}function xc(a){return G(a)?JSON.parse(a):a}function yc(a,b){a=a.replace(de,"");var d=Date.parse("Jan 01, 1970 00:00:00 "+a)/6e4;return isNaN(d)?b:d}function Sb(a,b,d){d=d?-1:1;var c=a.getTimezoneOffset();return b=yc(b,c),d*=b-c,a=new Date(a.getTime()),a.setMinutes(a.getMinutes()+d),a}function ya(a){a=F(a).clone();try{a.empty()}catch(b){}var d=F("<div>").append(a).html();try{return a[0].nodeType===Ma?Q(d):d.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+Q(b)})}catch(c){return Q(d)}}function zc(a){try{return decodeURIComponent(a)}catch(b){}}function Ac(a){var b={};return q((a||"").split("&"),function(a){var c,e,f;a&&(e=a=a.replace(/\+/g,"%20"),c=a.indexOf("="),-1!==c&&(e=a.substring(0,c),f=a.substring(c+1)),e=zc(e),w(e)&&(f=!w(f)||zc(f),ua.call(b,e)?L(b[e])?b[e].push(f):b[e]=[b[e],f]:b[e]=f))}),b}function Tb(a){var b=[];return q(a,function(a,c){L(a)?q(a,function(a){b.push(ea(c,!0)+(!0===a?"":"="+ea(a,!0)))}):b.push(ea(c,!0)+(!0===a?"":"="+ea(a,!0)))}),b.length?b.join("&"):""}function qb(a){return ea(a,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function ea(a,b){return encodeURIComponent(a).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,b?"%20":"+")}function ee(a,b){var d,c,e=Na.length;for(c=0;c<e;++c)if(d=Na[c]+b,G(d=a.getAttribute(d)))return d;return null}function fe(a,b){var d,c,e={};q(Na,function(b){b+="app",!d&&a.hasAttribute&&a.hasAttribute(b)&&(d=a,c=a.getAttribute(b))}),q(Na,function(b){b+="app";var e;!d&&(e=a.querySelector("["+b.replace(":","\\:")+"]"))&&(d=e,c=e.getAttribute(b))}),d&&(e.strictDi=null!==ee(d,"strict-di"),b(d,c?[c]:[],e))}function Bc(a,b,d){D(d)||(d={}),d=S({strictDi:!1},d);var c=function(){if(a=F(a),a.injector()){var c=a[0]===C.document?"document":ya(a);throw xa("btstrpd",c.replace(/</,"&lt;").replace(/>/,"&gt;"))}return b=b||[],b.unshift(["$provide",function(b){b.value("$rootElement",a)}]),d.debugInfoEnabled&&b.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]),b.unshift("ng"),c=cb(b,d.strictDi),c.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d),c(b)(a)})}]),c},e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;return C&&e.test(C.name)&&(d.debugInfoEnabled=!0,C.name=C.name.replace(e,"")),C&&!f.test(C.name)?c():(C.name=C.name.replace(f,""),ca.resumeBootstrap=function(a){return q(a,function(a){b.push(a)}),c()},void(z(ca.resumeDeferredBootstrap)&&ca.resumeDeferredBootstrap()))}function ge(){C.name="NG_ENABLE_DEBUG_INFO!"+C.name,C.location.reload()}function he(a){if(a=ca.element(a).injector(),!a)throw xa("test");return a.get("$$testability")}function Cc(a,b){return b=b||"_",a.replace(ie,function(a,c){return(c?b:"")+a.toLowerCase()})}function je(){var a;if(!Dc){var b=rb();(qa=y(b)?C.jQuery:b?C[b]:void 0)&&qa.fn.on?(F=qa,S(qa.fn,{scope:Oa.scope,isolateScope:Oa.isolateScope,controller:Oa.controller,injector:Oa.injector,inheritedData:Oa.inheritedData}),a=qa.cleanData,qa.cleanData=function(b){for(var c,f,e=0;null!=(f=b[e]);e++)(c=qa._data(f,"events"))&&c.$destroy&&qa(f).triggerHandler("$destroy");a(b)}):F=O,ca.element=F,Dc=!0}}function sb(a,b,d){if(!a)throw xa("areq",b||"?",d||"required");return a}function Pa(a,b,d){return d&&L(a)&&(a=a[a.length-1]),sb(z(a),b,"not a function, got "+(a&&"object"==typeof a?a.constructor.name||"Object":typeof a)),a}function Qa(a,b){if("hasOwnProperty"===a)throw xa("badname",b)}function Ec(a,b,d){if(!b)return a;b=b.split(".");for(var c,e=a,f=b.length,g=0;g<f;g++)c=b[g],a&&(a=(e=a)[c]);return!d&&z(a)?ab(e,a):a}function tb(a){for(var c,b=a[0],d=a[a.length-1],e=1;b!==d&&(b=b.nextSibling);e++)(c||a[e]!==b)&&(c||(c=F(va.call(a,0,e))),c.push(b));return c||a}function U(){return Object.create(null)}function ke(a){function b(a,b,c){return a[b]||(a[b]=c())}var d=N("$injector"),c=N("ng");return a=b(a,"angular",Object),a.$$minErr=a.$$minErr||N,b(a,"module",function(){var a={};return function(f,g,h){if("hasOwnProperty"===f)throw c("badname","module");return g&&a.hasOwnProperty(f)&&(a[f]=null),b(a,f,function(){function a(b,d,e,f){return f||(f=c),function(){return f[e||"push"]([b,d,arguments]),R}}function b(a,d){return function(b,e){return e&&z(e)&&(e.$$moduleName=f),c.push([a,d,arguments]),R}}if(!g)throw d("nomod",f);var c=[],e=[],p=[],u=a("$injector","invoke","push",e),R={_invokeQueue:c,_configBlocks:e,_runBlocks:p,requires:g,name:f,provider:b("$provide","provider"),factory:b("$provide","factory"),service:b("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),decorator:b("$provide","decorator"),animation:b("$animateProvider","register"),filter:b("$filterProvider","register"),controller:b("$controllerProvider","register"),directive:b("$compileProvider","directive"),component:b("$compileProvider","component"),config:u,run:function(a){return p.push(a),this}};return h&&u(h),R})}})}function ia(a,b){if(L(a)){b=b||[];for(var d=0,c=a.length;d<c;d++)b[d]=a[d]}else if(D(a))for(d in b=b||{},a)"$"===d.charAt(0)&&"$"===d.charAt(1)||(b[d]=a[d]);return b||a}function le(a){S(a,{bootstrap:Bc,copy:pa,extend:S,merge:Zd,equals:na,element:F,forEach:q,injector:cb,noop:A,bind:ab,toJson:bb,fromJson:xc,identity:Xa,isUndefined:y,isDefined:w,isString:G,isFunction:z,isObject:D,isNumber:T,isElement:Qb,isArray:L,version:me,isDate:da,lowercase:Q,uppercase:ub,callbacks:{$$counter:0},getTestability:he,$$minErr:N,$$csp:Ba,reloadWithDebugInfo:ge}),(Ub=ke(C))("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:ne}),a.provider("$compile",Fc).directive({a:oe,input:Gc,textarea:Gc,form:pe,script:qe,select:re,style:se,option:te,ngBind:ue,ngBindHtml:ve,ngBindTemplate:we,ngClass:xe,ngClassEven:ye,ngClassOdd:ze,ngCloak:Ae,ngController:Be,ngForm:Ce,ngHide:De,ngIf:Ee,ngInclude:Fe,ngInit:Ge,ngNonBindable:He,ngPluralize:Ie,ngRepeat:Je,ngShow:Ke,ngStyle:Le,ngSwitch:Me,ngSwitchWhen:Ne,ngSwitchDefault:Oe,ngOptions:Pe,ngTransclude:Qe,ngModel:Re,ngList:Se,ngChange:Te,pattern:Hc,ngPattern:Hc,required:Ic,ngRequired:Ic,minlength:Jc,ngMinlength:Jc,maxlength:Kc,ngMaxlength:Kc,ngValue:Ue,ngModelOptions:Ve}).directive({ngInclude:We}).directive(vb).directive(Lc),a.provider({$anchorScroll:Xe,$animate:Ye,$animateCss:Ze,$$animateJs:$e,$$animateQueue:af,$$AnimateRunner:bf,$$animateAsyncRun:cf,$browser:df,$cacheFactory:ef,$controller:ff,$document:gf,$exceptionHandler:hf,$filter:Mc,$$forceReflow:jf,$interpolate:kf,$interval:lf,$http:mf,$httpParamSerializer:nf,$httpParamSerializerJQLike:of,$httpBackend:pf,$xhrFactory:qf,$jsonpCallbacks:rf,$location:sf,$log:tf,$parse:uf,$rootScope:vf,$q:wf,$$q:xf,$sce:yf,$sceDelegate:zf,$sniffer:Af,$templateCache:Bf,$templateRequest:Cf,$$testability:Df,$timeout:Ef,$window:Ff,$$rAF:Gf,$$jqLite:Hf,$$HashMap:If,$$cookieReader:Jf})}])}function db(a){return a.replace(Kf,function(a,d,c,e){return e?c.toUpperCase():c}).replace(Lf,"Moz$1")}function Nc(a){return a=a.nodeType,1===a||!a||9===a}function Oc(a,b){var d,c,e=b.createDocumentFragment(),f=[];if(Vb.test(a)){for(d=e.appendChild(b.createElement("div")),c=(Mf.exec(a)||["",""])[1].toLowerCase(),c=ja[c]||ja._default,d.innerHTML=c[1]+a.replace(Nf,"<$1></$2>")+c[2],c=c[0];c--;)d=d.lastChild;f=$a(f,d.childNodes),d=e.firstChild,d.textContent=""}else f.push(b.createTextNode(a));return e.textContent="",e.innerHTML="",q(f,function(a){e.appendChild(a)}),e}function Pc(a,b){var d=a.parentNode;d&&d.replaceChild(b,a),b.appendChild(a)}function O(a){if(a instanceof O)return a;var b;if(G(a)&&(a=W(a),b=!0),!(this instanceof O)){if(b&&"<"!=a.charAt(0))throw Wb("nosel");return new O(a)}if(b){b=C.document;var d;a=(d=Of.exec(a))?[b.createElement(d[1])]:(d=Oc(a,b))?d.childNodes:[]}Qc(this,a)}function Xb(a){return a.cloneNode(!0)}function wb(a,b){if(b||eb(a),a.querySelectorAll)for(var d=a.querySelectorAll("*"),c=0,e=d.length;c<e;c++)eb(d[c])}function Rc(a,b,d,c){if(w(c))throw Wb("offargs");var e=(c=xb(a))&&c.events,f=c&&c.handle;if(f)if(b){var g=function(b){var c=e[b];w(d)&&Za(c||[],d),w(d)&&c&&0<c.length||(a.removeEventListener(b,f,!1),delete e[b])};q(b.split(" "),function(a){g(a),yb[a]&&g(yb[a])})}else for(b in e)"$destroy"!==b&&a.removeEventListener(b,f,!1),delete e[b]}function eb(a,b){var d=a.ng339,c=d&&fb[d];c&&(b?delete c.data[b]:(c.handle&&(c.events.$destroy&&c.handle({},"$destroy"),Rc(a)),delete fb[d],a.ng339=void 0))}function xb(a,b){var d=a.ng339,d=d&&fb[d];return b&&!d&&(a.ng339=d=++Pf,d=fb[d]={events:{},data:{},handle:void 0}),d}function Yb(a,b,d){if(Nc(a)){var c=w(d),e=!c&&b&&!D(b),f=!b;if(a=(a=xb(a,!e))&&a.data,c)a[b]=d;else{if(f)return a;if(e)return a&&a[b];S(a,b)}}}function zb(a,b){return!!a.getAttribute&&-1<(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+b+" ")}function Ab(a,b){b&&a.setAttribute&&q(b.split(" "),function(b){a.setAttribute("class",W((" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+W(b)+" "," ")))})}function Bb(a,b){if(b&&a.setAttribute){var d=(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");q(b.split(" "),function(a){a=W(a),-1===d.indexOf(" "+a+" ")&&(d+=a+" ")}),a.setAttribute("class",W(d))}}function Qc(a,b){if(b)if(b.nodeType)a[a.length++]=b;else{var d=b.length;if("number"==typeof d&&b.window!==b){if(d)for(var c=0;c<d;c++)a[a.length++]=b[c]}else a[a.length++]=b}}function Sc(a,b){return Cb(a,"$"+(b||"ngController")+"Controller")}function Cb(a,b,d){for(9==a.nodeType&&(a=a.documentElement),b=L(b)?b:[b];a;){for(var c=0,e=b.length;c<e;c++)if(w(d=F.data(a,b[c])))return d;a=a.parentNode||11===a.nodeType&&a.host}}function Tc(a){for(wb(a,!0);a.firstChild;)a.removeChild(a.firstChild)}function Db(a,b){b||wb(a);var d=a.parentNode;d&&d.removeChild(a)}function Qf(a,b){b=b||C,"complete"===b.document.readyState?b.setTimeout(a):F(b).on("load",a)}function Uc(a,b){var d=Eb[b.toLowerCase()];return d&&Vc[wa(a)]&&d}function Rf(a,b){var d=function(c,d){c.isDefaultPrevented=function(){return c.defaultPrevented};var f=b[d||c.type],g=f?f.length:0;if(g){if(y(c.immediatePropagationStopped)){var h=c.stopImmediatePropagation;c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0,c.stopPropagation&&c.stopPropagation(),h&&h.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};var k=f.specialHandlerWrapper||Sf;1<g&&(f=ia(f));for(var l=0;l<g;l++)c.isImmediatePropagationStopped()||k(a,c,f[l])}};return d.elem=a,d}function Sf(a,b,d){d.call(a,b)}function Tf(a,b,d){var c=b.relatedTarget;c&&(c===a||Uf.call(a,c))||d.call(a,b)}function Hf(){this.$get=function(){return S(O,{hasClass:function(a,b){return a.attr&&(a=a[0]),zb(a,b)},addClass:function(a,b){return a.attr&&(a=a[0]),Bb(a,b)},removeClass:function(a,b){return a.attr&&(a=a[0]),Ab(a,b)}})}}function Ca(a,b){var d=a&&a.$$hashKey;return d?("function"==typeof d&&(d=a.$$hashKey()),d):(d=typeof a,d="function"==d||"object"==d&&null!==a?a.$$hashKey=d+":"+(b||Yd)():d+":"+a)}function Ra(a,b){if(b){var d=0;this.nextUid=function(){return++d}}q(a,this.put,this)}function Wc(a){return a=(Function.prototype.toString.call(a)+" ").replace(Vf,""),a.match(Wf)||a.match(Xf)}function Yf(a){return(a=Wc(a))?"function("+(a[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function cb(a,b){function d(a){return function(b,c){return D(b)?void q(b,uc(a)):a(b,c)}}function c(a,b){if(Qa(a,"service"),(z(b)||L(b))&&(b=p.instantiate(b)),!b.$get)throw Ha("pget",a);return n[a+"Provider"]=b}function e(a,b){return function(){var c=B.invoke(b,this);if(y(c))throw Ha("undef",a);return c}}function f(a,b,d){return c(a,{$get:!1!==d?e(a,b):b})}function g(a){sb(y(a)||L(a),"modulesToLoad","not an array");var c,b=[];return q(a,function(a){function d(a){var b,c;for(b=0,c=a.length;b<c;b++){var e=a[b],f=p.get(e[0]);f[e[1]].apply(f,e[2])}}if(!m.get(a)){m.put(a,!0);try{G(a)?(c=Ub(a),b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):z(a)?b.push(p.invoke(a)):L(a)?b.push(p.invoke(a)):Pa(a,"module")}catch(e){throw L(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1==e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),Ha("modulerr",a,e.stack||e.message||e)}}}),b}function h(a,c){function d(b,e){if(a.hasOwnProperty(b)){if(a[b]===k)throw Ha("cdep",b+" <- "+l.join(" <- "));return a[b]}try{return l.unshift(b),a[b]=k,a[b]=c(b,e)}catch(f){throw a[b]===k&&delete a[b],f}finally{l.shift()}}function e(a,c,f){var g=[];a=cb.$$annotate(a,b,f);for(var h=0,k=a.length;h<k;h++){var l=a[h];if("string"!=typeof l)throw Ha("itkn",l);g.push(c&&c.hasOwnProperty(l)?c[l]:d(l,f))}return g}return{invoke:function(a,b,c,d){return"string"==typeof c&&(d=c,c=null),c=e(a,c,d),L(a)&&(a=a[a.length-1]),d=!(11>=Ea)&&("function"==typeof a&&/^(?:class\b|constructor\()/.test(Function.prototype.toString.call(a)+" ")),d?(c.unshift(null),new(Function.prototype.bind.apply(a,c))):a.apply(b,c)},instantiate:function(a,b,c){var d=L(a)?a[a.length-1]:a;return a=e(a,b,c),a.unshift(null),new(Function.prototype.bind.apply(d,a))},get:d,annotate:cb.$$annotate,has:function(b){return n.hasOwnProperty(b+"Provider")||a.hasOwnProperty(b)}}}b=!0===b;var k={},l=[],m=new Ra([],!0),n={$provide:{provider:d(c),factory:d(f),service:d(function(a,b){return f(a,["$injector",function(a){return a.instantiate(b)}])}),value:d(function(a,b){return f(a,ha(b),!1)}),constant:d(function(a,b){Qa(a,"constant"),n[a]=b,u[a]=b}),decorator:function(a,b){var c=p.get(a+"Provider"),d=c.$get;c.$get=function(){var a=B.invoke(d,c);return B.invoke(b,null,{$delegate:a})}}}},p=n.$injector=h(n,function(a,b){throw ca.isString(b)&&l.push(b),Ha("unpr",l.join(" <- "))}),u={},R=h(u,function(a,b){var c=p.get(a+"Provider",b);return B.invoke(c.$get,c,void 0,a)}),B=R;n.$injectorProvider={$get:ha(R)};var r=g(a),B=R.get("$injector");return B.strictDi=b,q(r,function(a){a&&B.invoke(a)}),B}function Xe(){var a=!0;this.disableAutoScrolling=function(){a=!1},this.$get=["$window","$location","$rootScope",function(b,d,c){function e(a){var b=null;return Array.prototype.some.call(a,function(a){if("a"===wa(a))return b=a,!0}),b}function f(a){if(a){a.scrollIntoView();var c;c=g.yOffset,z(c)?c=c():Qb(c)?(c=c[0],c="fixed"!==b.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):T(c)||(c=0),c&&(a=a.getBoundingClientRect().top,b.scrollBy(0,a-c))}else b.scrollTo(0,0)}function g(a){a=G(a)?a:d.hash();var b;a?(b=h.getElementById(a))?f(b):(b=e(h.getElementsByName(a)))?f(b):"top"===a&&f(null):f(null)}var h=b.document;return a&&c.$watch(function(){return d.hash()},function(a,b){a===b&&""===a||Qf(function(){c.$evalAsync(g)})}),g}]}function gb(a,b){return a||b?a?b?(L(a)&&(a=a.join(" ")),L(b)&&(b=b.join(" ")),a+" "+b):a:b:""}function Zf(a){G(a)&&(a=a.split(" "));var b=U();return q(a,function(a){a.length&&(b[a]=!0)}),b}function Ia(a){return D(a)?a:{}}function $f(a,b,d,c){function e(a){try{a.apply(null,va.call(arguments,1))}finally{if(R--,0===R)for(;B.length;)try{B.pop()()}catch(b){d.error(b)}}}function f(){t=null,g(),h()}function g(){r=K(),r=y(r)?null:r,na(r,E)&&(r=E),E=r}function h(){v===k.url()&&J===r||(v=k.url(),J=r,q(M,function(a){a(k.url(),r)}))}var k=this,l=a.location,m=a.history,n=a.setTimeout,p=a.clearTimeout,u={};k.isMock=!1;var R=0,B=[];k.$$completeOutstandingRequest=e,k.$$incOutstandingRequestCount=function(){R++},k.notifyWhenNoOutstandingRequests=function(a){0===R?a():B.push(a)};var r,J,v=l.href,fa=b.find("base"),t=null,K=c.history?function(){try{return m.state}catch(a){}}:A;g(),J=r,k.url=function(b,d,e){if(y(e)&&(e=null),l!==a.location&&(l=a.location),m!==a.history&&(m=a.history),b){var f=J===e;if(v===b&&(!c.history||f))return k;var h=v&&Ja(v)===Ja(b);return v=b,J=e,!c.history||h&&f?(h||(t=b),d?l.replace(b):h?(d=l,e=b.indexOf("#"),e=-1===e?"":b.substr(e),d.hash=e):l.href=b,l.href!==b&&(t=b)):(m[d?"replaceState":"pushState"](e,"",b),g(),J=r),t&&(t=b),k}return t||l.href.replace(/%27/g,"'")},k.state=function(){return r};var M=[],H=!1,E=null;k.onUrlChange=function(b){return H||(c.history&&F(a).on("popstate",f),F(a).on("hashchange",f),H=!0),M.push(b),b},k.$$applicationDestroyed=function(){F(a).off("hashchange popstate",f)},k.$$checkUrlChange=h,k.baseHref=function(){var a=fa.attr("href");return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""},k.defer=function(a,b){var c;return R++,c=n(function(){delete u[c],e(a)},b||0),u[c]=!0,c},k.defer.cancel=function(a){return!!u[a]&&(delete u[a],p(a),e(A),!0)}}function df(){this.$get=["$window","$log","$sniffer","$document",function(a,b,d,c){return new $f(a,c,b,d)}]}function ef(){this.$get=function(){function a(a,c){function e(a){a!=n&&(p?p==a&&(p=a.n):p=a,f(a.n,a.p),f(a,n),n=a,n.n=null)}function f(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(a in b)throw N("$cacheFactory")("iid",a);var g=0,h=S({},c,{id:a}),k=U(),l=c&&c.capacity||Number.MAX_VALUE,m=U(),n=null,p=null;return b[a]={put:function(a,b){if(!y(b)){if(l<Number.MAX_VALUE){var c=m[a]||(m[a]={key:a});e(c)}return a in k||g++,k[a]=b,g>l&&this.remove(p.key),b}},get:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;e(b)}return k[a]},remove:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;b==n&&(n=b.p),b==p&&(p=b.n),f(b.n,b.p),delete m[a]}a in k&&(delete k[a],g--)},removeAll:function(){k=U(),g=0,m=U(),n=p=null},destroy:function(){m=h=k=null,delete b[a]},info:function(){return S({},h,{size:g})}}}var b={};return a.info=function(){var a={};return q(b,function(b,e){a[e]=b.info()}),a},a.get=function(a){return b[a]},a}}function Bf(){this.$get=["$cacheFactory",function(a){return a("templates")}]}function Fc(a,b){function d(a,b,c){var d=/^\s*([@&<]|=(\*?))(\??)\s*(\w*)\s*$/,e=U();return q(a,function(a,f){if(a in n)e[f]=n[a];else{var g=a.match(d);if(!g)throw ga("iscp",b,f,a,c?"controller bindings definition":"isolate scope definition");e[f]={mode:g[1][0],collection:"*"===g[2],optional:"?"===g[3],attrName:g[4]||f},g[4]&&(n[a]=e[f])}}),e}function c(a){var b=a.charAt(0);if(!b||b!==Q(b))throw ga("baddir",a);if(a!==a.trim())throw ga("baddir",a)}function e(a){var b=a.require||a.controller&&a.name;return!L(b)&&D(b)&&q(b,function(a,c){var d=a.match(l);a.substring(d[0].length)||(b[c]=d[0]+c)}),b}var f={},g=/^\s*directive\:\s*([\w\-]+)\s+(.*)$/,h=/(([\w\-]+)(?:\:([^;]+))?;?)/,k=be("ngSrc,ngSrcset,src,srcset"),l=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,m=/^(on[a-z]+|formaction)$/,n=U();this.directive=function B(b,d){return Qa(b,"directive"),G(b)?(c(b),sb(d,"directiveFactory"),f.hasOwnProperty(b)||(f[b]=[],a.factory(b+"Directive",["$injector","$exceptionHandler",function(a,c){var d=[];return q(f[b],function(f,g){try{var h=a.invoke(f);z(h)?h={compile:ha(h)}:!h.compile&&h.link&&(h.compile=ha(h.link)),h.priority=h.priority||0,h.index=g,h.name=h.name||b,h.require=e(h),h.restrict=h.restrict||"EA",h.$$moduleName=f.$$moduleName,d.push(h)}catch(k){c(k)}}),d}])),f[b].push(d)):q(b,uc(B)),this},this.component=function(a,b){function c(a){function e(b){return z(b)||L(b)?function(c,d){return a.invoke(b,this,{$element:c,$attrs:d})}:b}var f=b.template||b.templateUrl?b.template:"",g={controller:d,controllerAs:Xc(b.controller)||b.controllerAs||"$ctrl",template:e(f),templateUrl:e(b.templateUrl),transclude:b.transclude,scope:{},bindToController:b.bindings||{},restrict:"E",require:b.require};return q(b,function(a,b){"$"===b.charAt(0)&&(g[b]=a)}),g}var d=b.controller||function(){};return q(b,function(a,b){"$"===b.charAt(0)&&(c[b]=a,z(d)&&(d[b]=a))}),c.$inject=["$injector"],this.directive(a,c)},this.aHrefSanitizationWhitelist=function(a){return w(a)?(b.aHrefSanitizationWhitelist(a),this):b.aHrefSanitizationWhitelist()},this.imgSrcSanitizationWhitelist=function(a){return w(a)?(b.imgSrcSanitizationWhitelist(a),this):b.imgSrcSanitizationWhitelist()};var p=!0;this.debugInfoEnabled=function(a){return w(a)?(p=a,this):p};var u=10;this.onChangesTtl=function(a){return arguments.length?(u=a,this):u},this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$sce","$animate","$$sanitizeUri",function(a,b,c,e,n,t,K,M,H,E){function I(){try{if(!--qa)throw Y=void 0,ga("infchng",u);K.$apply(function(){for(var a=[],b=0,c=Y.length;b<c;++b)try{Y[b]()}catch(d){a.push(d)}if(Y=void 0,a.length)throw a})}finally{qa++}}function Da(a,b){if(b){var d,e,f,c=Object.keys(b);for(d=0,e=c.length;d<e;d++)f=c[d],this[f]=b[f]}else this.$attr={};this.$$element=a}function P(a,b,c){pa.innerHTML="<span "+b+">",b=pa.firstChild.attributes;var d=b[0];b.removeNamedItem(d.name),d.value=c,a.attributes.setNamedItem(d)}function x(a,b){try{a.addClass(b)}catch(c){}}function aa(a,b,c,d,e){a instanceof F||(a=F(a));for(var f=/\S+/,g=0,h=a.length;g<h;g++){var k=a[g];k.nodeType===Ma&&k.nodeValue.match(f)&&Pc(k,a[g]=C.document.createElement("span"))}var l=s(a,b,a,c,d,e);aa.$$addScopeClass(a);var m=null;return function(b,c,d){sb(b,"scope"),e&&e.needsNewScope&&(b=b.$parent.$new()),d=d||{};var f=d.parentBoundTranscludeFn,g=d.transcludeControllers;if(d=d.futureParentElement,f&&f.$$boundTransclude&&(f=f.$$boundTransclude),m||(m=(d=d&&d[0])&&"foreignobject"!==wa(d)&&ma.call(d).match(/SVG/)?"svg":"html"),d="html"!==m?F(da(m,F("<div>").append(a).html())):c?Oa.clone.call(a):a,g)for(var h in g)d.data("$"+h+"Controller",g[h].instance);return aa.$$addScopeInfo(d,b),c&&c(d,b),l&&l(b,d,d,f),d}}function s(a,b,c,d,e,f){function g(a,c,d,e){var f,k,l,m,p,r,v;if(n)for(v=Array(c.length),m=0;m<h.length;m+=3)f=h[m],v[f]=c[f];else v=c;for(m=0,p=h.length;m<p;)k=v[h[m++]],c=h[m++],f=h[m++],c?(c.scope?(l=a.$new(),aa.$$addScopeInfo(F(k),l)):l=a,r=c.transcludeOnThisElement?za(a,c.transclude,e):!c.templateOnThisElement&&e?e:!e&&b?za(a,b):null,c(f,l,k,d,r)):f&&f(a,k.childNodes,void 0,e)}for(var k,l,m,p,n,h=[],r=0;r<a.length;r++)k=new Da,l=$b(a[r],[],k,0===r?d:void 0,e),(f=l.length?oa(l,a[r],k,b,c,null,[],[],f):null)&&f.scope&&aa.$$addScopeClass(k.$$element),k=f&&f.terminal||!(m=a[r].childNodes)||!m.length?null:s(m,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b),(f||k)&&(h.push(r,f,k),p=!0,n=n||f),f=null;return p?g:null}function za(a,b,c){function d(e,f,g,h,k){return e||(e=a.$new(!1,k),e.$$transcluded=!0),b(e,f,{parentBoundTranscludeFn:c,transcludeControllers:g,futureParentElement:h})}var f,e=d.$$slots=U();for(f in b.$$slots)e[f]=b.$$slots[f]?za(a,b.$$slots[f],c):null;return d}function $b(a,b,c,d,e){var f=c.$attr;switch(a.nodeType){case 1:O(b,Aa(wa(a)),"E",d,e);for(var g,k,l,m,p=a.attributes,n=0,r=p&&p.length;n<r;n++){var v=!1,u=!1;g=p[n],k=g.name,l=W(g.value),g=Aa(k),(m=Ba.test(g))&&(k=k.replace(Yc,"").substr(8).replace(/_(.)/g,function(a,b){return b.toUpperCase()})),(g=g.match(Ca))&&V(g[1])&&(v=k,u=k.substr(0,k.length-5)+"end",k=k.substr(0,k.length-6)),g=Aa(k.toLowerCase()),f[g]=k,!m&&c.hasOwnProperty(g)||(c[g]=l,Uc(a,g)&&(c[g]=!0)),ia(a,b,l,g,m),O(b,g,"A",d,e,v,u)}if(f=a.className,D(f)&&(f=f.animVal),G(f)&&""!==f)for(;a=h.exec(f);)g=Aa(a[2]),O(b,g,"C",d,e)&&(c[g]=W(a[3])),f=f.substr(a.index+a[0].length);break;case Ma:if(11===Ea)for(;a.parentNode&&a.nextSibling&&a.nextSibling.nodeType===Ma;)a.nodeValue+=a.nextSibling.nodeValue,a.parentNode.removeChild(a.nextSibling);ca(b,a.nodeValue);break;case 8:hb(a,b,c,d,e)}return b.sort(Z),b}function hb(a,b,c,d,e){try{var f=g.exec(a.nodeValue);if(f){var h=Aa(f[1]);O(b,h,"M",d,e)&&(c[h]=W(f[2]))}}catch(k){}}function N(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw ga("uterdir",b,c);1==a.nodeType&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--),d.push(a),a=a.nextSibling}while(0<e)}else d.push(a);return F(d)}function Zc(a,b,c){return function(d,e,f,g,h){return e=N(e[0],b,c),a(d,e,f,g,h)}}function ac(a,b,c,d,e,f){var g;return a?aa(b,c,d,e,f):function(){return g||(g=aa(b,c,d,e,f),b=c=f=null),g.apply(this,arguments)}}function oa(a,b,d,e,f,g,h,k,l){function m(a,b,c,d){a&&(c&&(a=Zc(a,c,d)),a.require=x.require,a.directiveName=I,(u===x||x.$$isolateScope)&&(a=ja(a,{isolateScope:!0})),h.push(a)),b&&(c&&(b=Zc(b,c,d)),b.require=x.require,b.directiveName=I,(u===x||x.$$isolateScope)&&(b=ja(b,{isolateScope:!0})),k.push(b))}function p(a,e,f,g,l){function m(a,b,c,d){var e;if(Ya(a)||(d=c,c=b,b=a,a=void 0),fa&&(e=t),c||(c=fa?I.parent():I),!d)return l(a,b,e,c,s);var f=l.$$slots[d];if(f)return f(a,b,e,c,s);if(y(f))throw ga("noslot",d,ya(I))}var n,E,x,M,B,t,P,I;b===f?(g=d,I=d.$$element):(I=F(f),g=new Da(I,d)),B=e,u?M=e.$new(!0):r&&(B=e.$parent),l&&(P=m,P.$$boundTransclude=l,P.isSlotFilled=function(a){return!!l.$$slots[a]}),v&&(t=ag(I,g,P,v,M,e,u)),u&&(aa.$$addScopeInfo(I,M,!0,!(H&&(H===u||H===u.$$originalDirective))),aa.$$addScopeClass(I,!0),M.$$isolateBindings=u.$$isolateBindings,E=ka(e,g,M,M.$$isolateBindings,u),E.removeWatches&&M.$on("$destroy",E.removeWatches));for(n in t){E=v[n],x=t[n];var Zb=E.$$bindings.bindToController;x.bindingInfo=x.identifier&&Zb?ka(B,g,x.instance,Zb,E):{};var K=x();K!==x.instance&&(x.instance=K,I.data("$"+E.name+"Controller",K),x.bindingInfo.removeWatches&&x.bindingInfo.removeWatches(),x.bindingInfo=ka(B,g,x.instance,Zb,E))}for(q(v,function(a,b){var c=a.require;a.bindToController&&!L(c)&&D(c)&&S(t[b].instance,ib(b,c,I,t))}),q(t,function(a){var b=a.instance;if(z(b.$onChanges))try{b.$onChanges(a.bindingInfo.initialChanges)}catch(d){c(d)}if(z(b.$onInit))try{b.$onInit()}catch(e){c(e)}z(b.$doCheck)&&(B.$watch(function(){b.$doCheck()}),b.$doCheck()),z(b.$onDestroy)&&B.$on("$destroy",function(){b.$onDestroy()})}),n=0,E=h.length;n<E;n++)x=h[n],la(x,x.isolateScope?M:e,I,g,x.require&&ib(x.directiveName,x.require,I,t),P);var s=e;for(u&&(u.template||null===u.templateUrl)&&(s=M),a&&a(s,f.childNodes,void 0,l),n=k.length-1;0<=n;n--)x=k[n],la(x,x.isolateScope?M:e,I,g,x.require&&ib(x.directiveName,x.require,I,t),P);q(t,function(a){a=a.instance,z(a.$postLink)&&a.$postLink()})}l=l||{};for(var x,I,P,s,w,n=-Number.MAX_VALUE,r=l.newScopeDirective,v=l.controllerDirectives,u=l.newIsolateScopeDirective,H=l.templateDirective,E=l.nonTlbTranscludeDirective,M=!1,B=!1,fa=l.hasElementTranscludeDirective,t=d.$$element=F(b),K=e,Fa=!1,za=!1,A=0,C=a.length;A<C;A++){x=a[A];var G=x.$$start,hb=x.$$end;if(G&&(t=N(b,G,hb)),P=void 0,n>x.priority)break;if((w=x.scope)&&(x.templateUrl||(D(w)?(X("new/isolated scope",u||r,x,t),u=x):X("new/isolated scope",u,x,t)),r=r||x),I=x.name,!Fa&&(x.replace&&(x.templateUrl||x.template)||x.transclude&&!x.$$tlb)){for(w=A+1;Fa=a[w++];)if(Fa.transclude&&!Fa.$$tlb||Fa.replace&&(Fa.templateUrl||Fa.template)){za=!0;break}Fa=!0}if(!x.templateUrl&&x.controller&&(w=x.controller,
v=v||U(),X("'"+I+"' controller",v[I],x,t),v[I]=x),w=x.transclude)if(M=!0,x.$$tlb||(X("transclusion",E,x,t),E=x),"element"==w)fa=!0,n=x.priority,P=t,t=d.$$element=F(aa.$$createComment(I,d[I])),b=t[0],ea(f,va.call(P,0),b),P[0].$$parentNode=P[0].parentNode,K=ac(za,P,e,n,g&&g.name,{nonTlbTranscludeDirective:E});else{var oa=U();if(P=F(Xb(b)).contents(),D(w)){P=[];var Q=U(),O=U();q(w,function(a,b){var c="?"===a.charAt(0);a=c?a.substring(1):a,Q[a]=b,oa[b]=null,O[b]=c}),q(t.contents(),function(a){var b=Q[Aa(wa(a))];b?(O[b]=!0,oa[b]=oa[b]||[],oa[b].push(a)):P.push(a)}),q(O,function(a,b){if(!a)throw ga("reqslot",b)});for(var V in oa)oa[V]&&(oa[V]=ac(za,oa[V],e))}t.empty(),K=ac(za,P,e,void 0,void 0,{needsNewScope:x.$$isolateScope||x.$$newScope}),K.$$slots=oa}if(x.template)if(B=!0,X("template",H,x,t),H=x,w=z(x.template)?x.template(t,d):x.template,w=xa(w),x.replace){if(g=x,P=Vb.test(w)?$c(da(x.templateNamespace,W(w))):[],b=P[0],1!=P.length||1!==b.nodeType)throw ga("tplrt",I,"");ea(f,t,b),C={$attr:{}},w=$b(b,[],C);var Z=a.splice(A+1,a.length-(A+1));(u||r)&&T(w,u,r),a=a.concat(w).concat(Z),$(d,C),C=a.length}else t.html(w);if(x.templateUrl)B=!0,X("template",H,x,t),H=x,x.replace&&(g=x),p=ba(a.splice(A,a.length-A),t,d,f,M&&K,h,k,{controllerDirectives:v,newScopeDirective:r!==x&&r,newIsolateScopeDirective:u,templateDirective:H,nonTlbTranscludeDirective:E}),C=a.length;else if(x.compile)try{s=x.compile(t,d,K);var Y=x.$$originalDirective||x;z(s)?m(null,ab(Y,s),G,hb):s&&m(ab(Y,s.pre),ab(Y,s.post),G,hb)}catch(ca){c(ca,ya(t))}x.terminal&&(p.terminal=!0,n=Math.max(n,x.priority))}return p.scope=r&&!0===r.scope,p.transcludeOnThisElement=M,p.templateOnThisElement=B,p.transclude=K,l.hasElementTranscludeDirective=fa,p}function ib(a,b,c,d){var e;if(G(b)){var f=b.match(l);b=b.substring(f[0].length);var g=f[1]||f[3],f="?"===f[2];if("^^"===g?c=c.parent():e=(e=d&&d[b])&&e.instance,!e){var h="$"+b+"Controller";e=g?c.inheritedData(h):c.data(h)}if(!e&&!f)throw ga("ctreq",b,a)}else if(L(b))for(e=[],g=0,f=b.length;g<f;g++)e[g]=ib(a,b[g],c,d);else D(b)&&(e={},q(b,function(b,f){e[f]=ib(a,b,c,d)}));return e||null}function ag(a,b,c,d,e,f,g){var k,h=U();for(k in d){var l=d[k],m={$scope:l===g||l.$$isolateScope?e:f,$element:a,$attrs:b,$transclude:c},p=l.controller;"@"==p&&(p=b[l.name]),m=t(p,m,!0,l.controllerAs),h[l.name]=m,a.data("$"+l.name+"Controller",m.instance)}return h}function T(a,b,c){for(var d=0,e=a.length;d<e;d++)a[d]=Rb(a[d],{$$isolateScope:b,$$newScope:c})}function O(b,e,g,h,k,l,m){if(e===k)return null;if(k=null,f.hasOwnProperty(e)){var p;e=a.get(e+"Directive");for(var n=0,r=e.length;n<r;n++)try{if(p=e[n],(y(h)||h>p.priority)&&-1!=p.restrict.indexOf(g)){if(l&&(p=Rb(p,{$$start:l,$$end:m})),!p.$$bindings){var u=p,v=p,x=p.name,H={isolateScope:null,bindToController:null};if(D(v.scope)&&(!0===v.bindToController?(H.bindToController=d(v.scope,x,!0),H.isolateScope={}):H.isolateScope=d(v.scope,x,!1)),D(v.bindToController)&&(H.bindToController=d(v.bindToController,x,!0)),D(H.bindToController)){var E=v.controller,M=v.controllerAs;if(!E)throw ga("noctrl",x);if(!Xc(E,M))throw ga("noident",x)}var t=u.$$bindings=H;D(t.isolateScope)&&(p.$$isolateBindings=t.isolateScope)}b.push(p),k=p}}catch(I){c(I)}}return k}function V(b){if(f.hasOwnProperty(b))for(var c=a.get(b+"Directive"),d=0,e=c.length;d<e;d++)if(b=c[d],b.multiElement)return!0;return!1}function $(a,b){var c=b.$attr,d=a.$attr;q(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))}),q(b,function(b,e){a.hasOwnProperty(e)||"$"===e.charAt(0)||(a[e]=b,"class"!==e&&"style"!==e&&(d[e]=c[e]))})}function ba(a,b,c,d,f,g,h,k){var m,p,l=[],n=b[0],r=a.shift(),u=Rb(r,{templateUrl:null,transclude:null,replace:null,$$originalDirective:r}),H=z(r.templateUrl)?r.templateUrl(b,c):r.templateUrl,E=r.templateNamespace;return b.empty(),e(H).then(function(e){var v,M;if(e=xa(e),r.replace){if(e=Vb.test(e)?$c(da(E,W(e))):[],v=e[0],1!=e.length||1!==v.nodeType)throw ga("tplrt",r.name,H);e={$attr:{}},ea(d,b,v);var B=$b(v,[],e);D(r.scope)&&T(B,!0),a=B.concat(a),$(c,e)}else v=n,b.html(e);for(a.unshift(u),m=oa(a,v,c,f,b,r,g,h,k),q(d,function(a,c){a==v&&(d[c]=b[0])}),p=s(b[0].childNodes,f);l.length;){e=l.shift(),M=l.shift();var t=l.shift(),I=l.shift(),B=b[0];if(!e.$$destroyed){if(M!==n){var P=M.className;k.hasElementTranscludeDirective&&r.replace||(B=Xb(v)),ea(t,F(M),B),x(F(B),P)}M=m.transcludeOnThisElement?za(e,m.transclude,I):I,m(p,e,B,d,M)}}l=null}),function(a,b,c,d,e){a=e,b.$$destroyed||(l?l.push(b,c,d,a):(m.transcludeOnThisElement&&(a=za(b,m.transclude,e)),m(p,b,c,d,a)))}}function Z(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function X(a,b,c,d){function e(a){return a?" (module: "+a+")":""}if(b)throw ga("multidir",b.name,e(b.$$moduleName),c.name,e(c.$$moduleName),a,ya(d))}function ca(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;return b&&aa.$$addBindingClass(a),function(a,c){var e=c.parent();b||aa.$$addBindingClass(e),aa.$$addBindingInfo(e,d.expressions),a.$watch(d,function(a){c[0].nodeValue=a})}}})}function da(a,b){switch(a=Q(a||"html")){case"svg":case"math":var c=C.document.createElement("div");return c.innerHTML="<"+a+">"+b+"</"+a+">",c.childNodes[0].childNodes;default:return b}}function ha(a,b){if("srcdoc"==b)return M.HTML;var c=wa(a);return"xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b||"ngSrc"==b)?M.RESOURCE_URL:void 0}function ia(a,c,d,e,f){var g=ha(a,e);f=k[e]||f;var h=b(d,!0,g,f);if(h){if("multiple"===e&&"select"===wa(a))throw ga("selmulti",ya(a));c.push({priority:100,compile:function(){return{pre:function(a,c,k){if(c=k.$$observers||(k.$$observers=U()),m.test(e))throw ga("nodomevents");var l=k[e];l!==d&&(h=l&&b(l,!0,g,f),d=l),h&&(k[e]=h(a),(c[e]||(c[e]=[])).$$inter=!0,(k.$$observers&&k.$$observers[e].$$scope||a).$watch(h,function(a,b){"class"===e&&a!=b?k.$updateClass(a,b):k.$set(e,a)}))}}}})}}function ea(a,b,c){var g,h,d=b[0],e=b.length,f=d.parentNode;if(a)for(g=0,h=a.length;g<h;g++)if(a[g]==d){a[g++]=c,h=g+e-1;for(var k=a.length;g<k;g++,h++)h<k?a[g]=a[h]:delete a[g];a.length-=e-1,a.context===d&&(a.context=c);break}for(f&&f.replaceChild(c,d),a=C.document.createDocumentFragment(),g=0;g<e;g++)a.appendChild(b[g]);for(F.hasData(d)&&(F.data(c,F.data(d)),F(d).off("$destroy")),F.cleanData(a.querySelectorAll("*")),g=1;g<e;g++)delete b[g];b[0]=c,b.length=1}function ja(a,b){return S(function(){return a.apply(null,arguments)},a,b)}function la(a,b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,ya(d))}}function ka(a,c,d,e,f){function g(b,c,e){z(d.$onChanges)&&c!==e&&(Y||(a.$$postDigest(I),Y=[]),m||(m={},Y.push(h)),m[b]&&(e=m[b].previousValue),m[b]=new Fb(e,c))}function h(){d.$onChanges(m),m=void 0}var m,k=[],l={};return q(e,function(e,h){var v,u,x,H,m=e.attrName,p=e.optional;switch(e.mode){case"@":p||ua.call(c,m)||(d[h]=c[m]=void 0),c.$observe(m,function(a){(G(a)||Ga(a))&&(g(h,a,d[h]),d[h]=a)}),c.$$observers[m].$$scope=a,v=c[m],G(v)?d[h]=b(v)(a):Ga(v)&&(d[h]=v),l[h]=new Fb(bc,d[h]);break;case"=":if(!ua.call(c,m)){if(p)break;c[m]=void 0}if(p&&!c[m])break;u=n(c[m]),H=u.literal?na:function(a,b){return a===b||a!==a&&b!==b},x=u.assign||function(){throw v=d[h]=u(a),ga("nonassign",c[m],m,f.name)},v=d[h]=u(a),p=function(b){return H(b,d[h])||(H(b,v)?x(a,b=d[h]):d[h]=b),v=b},p.$stateful=!0,p=e.collection?a.$watchCollection(c[m],p):a.$watch(n(c[m],p),null,u.literal),k.push(p);break;case"<":if(!ua.call(c,m)){if(p)break;c[m]=void 0}if(p&&!c[m])break;u=n(c[m]);var E=d[h]=u(a);l[h]=new Fb(bc,d[h]),p=a.$watch(u,function(a,b){if(b===a){if(b===E)return;b=E}g(h,a,b),d[h]=a},u.literal),k.push(p);break;case"&":if(u=c.hasOwnProperty(m)?n(c[m]):A,u===A&&p)break;d[h]=function(b){return u(a,b)}}}),{initialChanges:l,removeWatches:k.length&&function(){for(var a=0,b=k.length;a<b;++a)k[a]()}}}var Y,ta=/^\w/,pa=C.document.createElement("div"),qa=u;Da.prototype={$normalize:Aa,$addClass:function(a){a&&0<a.length&&H.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&H.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=ad(a,b);c&&c.length&&H.addClass(this.$$element,c),(c=ad(b,a))&&c.length&&H.removeClass(this.$$element,c)},$set:function(a,b,d,e){var f=Uc(this.$$element[0],a),g=bd[a],h=a;if(f?(this.$$element.prop(a,b),e=f):g&&(this[g]=b,h=g),this[a]=b,e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=e=Cc(a,"-")),f=wa(this.$$element),"a"===f&&("href"===a||"xlinkHref"===a)||"img"===f&&"src"===a)this[a]=b=E(b,"src"===a);else if("img"===f&&"srcset"===a&&w(b)){for(var f="",g=W(b),k=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,k=/\s/.test(g)?k:/(,)/,g=g.split(k),k=Math.floor(g.length/2),l=0;l<k;l++)var m=2*l,f=f+E(W(g[m]),!0),f=f+(" "+W(g[m+1]));g=W(g[2*l]).split(/\s/),f+=E(W(g[0]),!0),2===g.length&&(f+=" "+W(g[1])),this[a]=b=f}!1!==d&&(null===b||y(b)?this.$$element.removeAttr(e):ta.test(e)?this.$$element.attr(e,b):P(this.$$element[0],e,b)),(a=this.$$observers)&&q(a[h],function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=U()),e=d[a]||(d[a]=[]);return e.push(b),K.$evalAsync(function(){e.$$inter||!c.hasOwnProperty(a)||y(c[a])||b(c[a])}),function(){Za(e,b)}}};var ra=b.startSymbol(),sa=b.endSymbol(),xa="{{"==ra&&"}}"==sa?Xa:function(a){return a.replace(/\{\{/g,ra).replace(/}}/g,sa)},Ba=/^ngAttr[A-Z]/,Ca=/^(.+)Start$/;return aa.$$addBindingInfo=p?function(a,b){var c=a.data("$binding")||[];L(b)?c=c.concat(b):c.push(b),a.data("$binding",c)}:A,aa.$$addBindingClass=p?function(a){x(a,"ng-binding")}:A,aa.$$addScopeInfo=p?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:A,aa.$$addScopeClass=p?function(a,b){x(a,b?"ng-isolate-scope":"ng-scope")}:A,aa.$$createComment=function(a,b){var c="";return p&&(c=" "+(a||"")+": ",b&&(c+=b+" ")),C.document.createComment(c)},aa}]}function Fb(a,b){this.previousValue=a,this.currentValue=b}function Aa(a){return db(a.replace(Yc,""))}function ad(a,b){var d="",c=a.split(/\s+/),e=b.split(/\s+/),f=0;a:for(;f<c.length;f++){for(var g=c[f],h=0;h<e.length;h++)if(g==e[h])continue a;d+=(0<d.length?" ":"")+g}return d}function $c(a){a=F(a);var b=a.length;if(1>=b)return a;for(;b--;)8===a[b].nodeType&&bg.call(a,b,1);return a}function Xc(a,b){if(b&&G(b))return b;if(G(a)){var d=cd.exec(a);if(d)return d[3]}}function ff(){var a={},b=!1;this.has=function(b){return a.hasOwnProperty(b)},this.register=function(b,c){Qa(b,"controller"),D(b)?S(a,b):a[b]=c},this.allowGlobals=function(){b=!0},this.$get=["$injector","$window",function(d,c){function e(a,b,c,d){if(!a||!D(a.$scope))throw N("$controller")("noscp",d,b);a.$scope[b]=c}return function(f,g,h,k){var l,m,n;if(h=!0===h,k&&G(k)&&(n=k),G(f)){if(k=f.match(cd),!k)throw cg("ctrlfmt",f);m=k[1],n=n||k[3],f=a.hasOwnProperty(m)?a[m]:Ec(g.$scope,m,!0)||(b?Ec(c,m,!0):void 0),Pa(f,m,!0)}return h?(h=(L(f)?f[f.length-1]:f).prototype,l=Object.create(h||null),n&&e(g,n,l,m||f.name),S(function(){var a=d.invoke(f,l,g,m);return a!==l&&(D(a)||z(a))&&(l=a,n&&e(g,n,l,m||f.name)),l},{instance:l,identifier:n})):(l=d.instantiate(f,g,m),n&&e(g,n,l,m||f.name),l)}}]}function gf(){this.$get=["$window",function(a){return F(a.document)}]}function hf(){this.$get=["$log",function(a){return function(b,d){a.error.apply(a,arguments)}}]}function cc(a){return D(a)?da(a)?a.toISOString():bb(a):a}function nf(){this.$get=function(){return function(a){if(!a)return"";var b=[];return tc(a,function(a,c){null===a||y(a)||(L(a)?q(a,function(a){b.push(ea(c)+"="+ea(cc(a)))}):b.push(ea(c)+"="+ea(cc(a))))}),b.join("&")}}}function of(){this.$get=function(){return function(a){function b(a,e,f){null===a||y(a)||(L(a)?q(a,function(a,c){b(a,e+"["+(D(a)?c:"")+"]")}):D(a)&&!da(a)?tc(a,function(a,c){b(a,e+(f?"":"[")+c+(f?"":"]"))}):d.push(ea(e)+"="+ea(cc(a))))}if(!a)return"";var d=[];return b(a,"",!0),d.join("&")}}}function dc(a,b){if(G(a)){var d=a.replace(dg,"").trim();if(d){var c=b("Content-Type");(c=c&&0===c.indexOf(dd))||(c=(c=d.match(eg))&&fg[c[0]].test(d)),c&&(a=xc(d))}}return a}function ed(a){var d,b=U();return G(a)?q(a.split("\n"),function(a){d=a.indexOf(":");var e=Q(W(a.substr(0,d)));a=W(a.substr(d+1)),e&&(b[e]=b[e]?b[e]+", "+a:a)}):D(a)&&q(a,function(a,d){var f=Q(d),g=W(a);f&&(b[f]=b[f]?b[f]+", "+g:g)}),b}function fd(a){var b;return function(d){return b||(b=ed(a)),d?(d=b[Q(d)],void 0===d&&(d=null),d):b}}function gd(a,b,d,c){return z(c)?c(a,b,d):(q(c,function(c){a=c(a,b,d)}),a)}function mf(){var a=this.defaults={transformResponse:[dc],transformRequest:[function(a){return D(a)&&"[object File]"!==ma.call(a)&&"[object Blob]"!==ma.call(a)&&"[object FormData]"!==ma.call(a)?bb(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ia(ec),put:ia(ec),patch:ia(ec)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer"},b=!1;this.useApplyAsync=function(a){return w(a)?(b=!!a,this):b};var d=!0;this.useLegacyPromiseExtensions=function(a){return w(a)?(d=!!a,this):d};var c=this.interceptors=[];this.$get=["$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector",function(e,f,g,h,k,l){function m(b){function c(a,b){for(var d=0,e=b.length;d<e;){var f=b[d++],g=b[d++];a=a.then(f,g)}return b.length=0,a}function e(a,b){var c,d={};return q(a,function(a,e){z(a)?(c=a(b),null!=c&&(d[e]=c)):d[e]=a}),d}function f(a){var b=S({},a);return b.data=gd(a.data,a.headers,a.status,g.transformResponse),a=a.status,200<=a&&300>a?b:k.reject(b)}if(!D(b))throw N("$http")("badreq",b);if(!G(b.url))throw N("$http")("badreq",b.url);var g=S({method:"get",transformRequest:a.transformRequest,transformResponse:a.transformResponse,paramSerializer:a.paramSerializer},b);g.headers=function(b){var f,g,h,c=a.headers,d=S({},b.headers),c=S({},c.common,c[Q(b.method)]);a:for(f in c){g=Q(f);for(h in d)if(Q(h)===g)continue a;d[f]=c[f]}return e(d,ia(b))}(b),g.method=ub(g.method),g.paramSerializer=G(g.paramSerializer)?l.get(g.paramSerializer):g.paramSerializer;var h=[],m=[],p=k.when(g);return q(R,function(a){(a.request||a.requestError)&&h.unshift(a.request,a.requestError),(a.response||a.responseError)&&m.push(a.response,a.responseError)}),p=c(p,h),p=p.then(function(b){var c=b.headers,d=gd(b.data,fd(c),void 0,b.transformRequest);return y(d)&&q(c,function(a,b){"content-type"===Q(b)&&delete c[b]}),y(b.withCredentials)&&!y(a.withCredentials)&&(b.withCredentials=a.withCredentials),n(b,d).then(f,f)}),p=c(p,m),d?(p.success=function(a){return Pa(a,"fn"),p.then(function(b){a(b.data,b.status,b.headers,g)}),p},p.error=function(a){return Pa(a,"fn"),p.then(null,function(b){a(b.data,b.status,b.headers,g)}),p}):(p.success=hd("success"),p.error=hd("error")),p}function n(c,d){function g(a){if(a){var c={};return q(a,function(a,d){c[d]=function(c){function d(){a(c)}b?h.$applyAsync(d):h.$$phase?d():h.$apply(d)}}),c}}function l(a,c,d,e){function f(){n(c,a,d,e)}E&&(200<=a&&300>a?E.put(P,[a,c,ed(d),e]):E.remove(P)),b?h.$applyAsync(f):(f(),h.$$phase||h.$apply())}function n(a,b,d,e){b=-1<=b?b:0,(200<=b&&300>b?M.resolve:M.reject)({data:a,status:b,headers:fd(d),config:c,statusText:e})}function t(a){n(a.data,a.status,ia(a.headers()),a.statusText)}function R(){var a=m.pendingRequests.indexOf(c);-1!==a&&m.pendingRequests.splice(a,1)}var E,I,M=k.defer(),H=M.promise,Da=c.headers,P=p(c.url,c.paramSerializer(c.params));return m.pendingRequests.push(c),H.then(R,R),!c.cache&&!a.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(E=D(c.cache)?c.cache:D(a.cache)?a.cache:u),E&&(I=E.get(P),w(I)?I&&z(I.then)?I.then(t,t):L(I)?n(I[1],I[0],ia(I[2]),I[3]):n(I,200,{},"OK"):E.put(P,H)),y(I)&&((I=id(c.url)?f()[c.xsrfCookieName||a.xsrfCookieName]:void 0)&&(Da[c.xsrfHeaderName||a.xsrfHeaderName]=I),e(c.method,P,d,l,Da,c.timeout,c.withCredentials,c.responseType,g(c.eventHandlers),g(c.uploadEventHandlers))),H}function p(a,b){return 0<b.length&&(a+=(-1==a.indexOf("?")?"?":"&")+b),a}var u=g("$http");a.paramSerializer=G(a.paramSerializer)?l.get(a.paramSerializer):a.paramSerializer;var R=[];return q(c,function(a){R.unshift(G(a)?l.get(a):l.invoke(a))}),m.pendingRequests=[],function(a){q(arguments,function(a){m[a]=function(b,c){return m(S({},c||{},{method:a,url:b}))}})}("get","delete","head","jsonp"),function(a){q(arguments,function(a){m[a]=function(b,c,d){return m(S({},d||{},{method:a,url:b,data:c}))}})}("post","put","patch"),m.defaults=a,m}]}function qf(){this.$get=function(){return function(){return new C.XMLHttpRequest}}}function pf(){this.$get=["$browser","$jsonpCallbacks","$document","$xhrFactory",function(a,b,d,c){return gg(a,c,a.defer,b,d[0])}]}function gg(a,b,d,c,e){function f(a,b,d){a=a.replace("JSON_CALLBACK",b);var f=e.createElement("script"),m=null;return f.type="text/javascript",f.src=a,f.async=!0,m=function(a){f.removeEventListener("load",m,!1),f.removeEventListener("error",m,!1),e.body.removeChild(f),f=null;var g=-1,u="unknown";a&&("load"!==a.type||c.wasCalled(b)||(a={type:"error"}),u=a.type,g="error"===a.type?404:200),d&&d(g,u)},f.addEventListener("load",m,!1),f.addEventListener("error",m,!1),e.body.appendChild(f),m}return function(e,h,k,l,m,n,p,u,R,B){function r(){fa&&fa(),t&&t.abort()}function J(b,c,e,f,g){w(M)&&d.cancel(M),fa=t=null,b(c,e,f,g),a.$$completeOutstandingRequest(A)}if(a.$$incOutstandingRequestCount(),h=h||a.url(),"jsonp"===Q(e))var v=c.createCallback(h),fa=f(h,v,function(a,b){var d=200===a&&c.getResponse(v);J(l,a,d,"",b),c.removeCallback(v)});else{var t=b(e,h);if(t.open(e,h,!0),q(m,function(a,b){w(a)&&t.setRequestHeader(b,a)}),t.onload=function(){var a=t.statusText||"",b="response"in t?t.response:t.responseText,c=1223===t.status?204:t.status;0===c&&(c=b?200:"file"==Y(h).protocol?404:0),J(l,c,b,t.getAllResponseHeaders(),a)},e=function(){J(l,-1,null,null,"")},t.onerror=e,t.onabort=e,q(R,function(a,b){t.addEventListener(b,a)}),q(B,function(a,b){t.upload.addEventListener(b,a)}),p&&(t.withCredentials=!0),u)try{t.responseType=u}catch(K){if("json"!==u)throw K}t.send(y(k)?null:k)}if(0<n)var M=d(r,n);else n&&z(n.then)&&n.then(r)}}function kf(){var a="{{",b="}}";this.startSymbol=function(b){return b?(a=b,this):a},this.endSymbol=function(a){return a?(b=a,this):b},this.$get=["$parse","$exceptionHandler","$sce",function(d,c,e){function f(a){return"\\\\\\"+a}function g(c){return c.replace(n,a).replace(p,b)}function h(a,b,c,d){var e;return e=a.$watch(function(a){return e(),d(a)},b,c)}function k(f,k,p,n){function J(a){try{var b=a;a=p?e.getTrusted(p,b):e.valueOf(b);var d;if(n&&!w(a))d=a;else if(null==a)d="";else{switch(typeof a){case"string":break;case"number":a=""+a;break;default:a=bb(a)}d=a}return d}catch(g){c(Ka.interr(f,g))}}if(!f.length||-1===f.indexOf(a)){var v;return k||(k=g(f),v=ha(k),v.exp=f,v.expressions=[],v.$$watchDelegate=h),v}n=!!n;var q,t,K=0,M=[],H=[];v=f.length;for(var E=[],I=[];K<v;){if(-1==(q=f.indexOf(a,K))||-1==(t=f.indexOf(b,q+l))){K!==v&&E.push(g(f.substring(K)));break}K!==q&&E.push(g(f.substring(K,q))),K=f.substring(q+l,t),M.push(K),H.push(d(K,J)),K=t+m,I.push(E.length),E.push("")}if(p&&1<E.length&&Ka.throwNoconcat(f),!k||M.length){var Da=function(a){for(var b=0,c=M.length;b<c;b++){if(n&&y(a[b]))return;E[I[b]]=a[b]}return E.join("")};return S(function(a){var b=0,d=M.length,e=Array(d);try{for(;b<d;b++)e[b]=H[b](a);return Da(e)}catch(g){c(Ka.interr(f,g))}},{exp:f,expressions:M,$$watchDelegate:function(a,b){var c;return a.$watchGroup(H,function(d,e){var f=Da(d);z(b)&&b.call(this,f,d!==e?c:f,a),c=f})}})}}var l=a.length,m=b.length,n=new RegExp(a.replace(/./g,f),"g"),p=new RegExp(b.replace(/./g,f),"g");return k.startSymbol=function(){return a},k.endSymbol=function(){return b},k}]}function lf(){this.$get=["$rootScope","$window","$q","$$q","$browser",function(a,b,d,c,e){function f(f,k,l,m){function n(){p?f.apply(null,u):f(r)}var p=4<arguments.length,u=p?va.call(arguments,4):[],R=b.setInterval,q=b.clearInterval,r=0,J=w(m)&&!m,v=(J?c:d).defer(),fa=v.promise;return l=w(l)?l:0,fa.$$intervalId=R(function(){J?e.defer(n):a.$evalAsync(n),v.notify(r++),0<l&&r>=l&&(v.resolve(r),q(fa.$$intervalId),delete g[fa.$$intervalId]),J||a.$apply()},k),g[fa.$$intervalId]=v,fa}var g={};return f.cancel=function(a){return!!(a&&a.$$intervalId in g)&&(g[a.$$intervalId].reject("canceled"),b.clearInterval(a.$$intervalId),delete g[a.$$intervalId],!0)},f}]}function fc(a){a=a.split("/");for(var b=a.length;b--;)a[b]=qb(a[b]);return a.join("/")}function jd(a,b){var d=Y(a);b.$$protocol=d.protocol,b.$$host=d.hostname,b.$$port=Z(d.port)||hg[d.protocol]||null}function kd(a,b){var d="/"!==a.charAt(0);d&&(a="/"+a);var c=Y(a);b.$$path=decodeURIComponent(d&&"/"===c.pathname.charAt(0)?c.pathname.substring(1):c.pathname),b.$$search=Ac(c.search),b.$$hash=decodeURIComponent(c.hash),b.$$path&&"/"!=b.$$path.charAt(0)&&(b.$$path="/"+b.$$path)}function ka(a,b){if(0===b.lastIndexOf(a,0))return b.substr(a.length)}function Ja(a){var b=a.indexOf("#");return-1==b?a:a.substr(0,b)}function jb(a){return a.replace(/(#.+)|#$/,"$1")}function gc(a,b,d){this.$$html5=!0,d=d||"",jd(a,this),this.$$parse=function(a){var d=ka(b,a);if(!G(d))throw Gb("ipthprfx",a,b);kd(d,this),this.$$path||(this.$$path="/"),this.$$compose()},this.$$compose=function(){var a=Tb(this.$$search),d=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=fc(this.$$path)+(a?"?"+a:"")+d,this.$$absUrl=b+this.$$url.substr(1)},this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;return w(f=ka(a,c))?(g=f,g=w(f=ka(d,f))?b+(ka("/",f)||f):a+g):w(f=ka(b,c))?g=b+f:b==c+"/"&&(g=b),g&&this.$$parse(g),!!g}}function hc(a,b,d){jd(a,this),this.$$parse=function(c){var f,e=ka(a,c)||ka(b,c);y(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",y(e)&&(a=c,this.replace())):(f=ka(d,e),y(f)&&(f=e)),kd(f,this),c=this.$$path;var e=a,g=/^\/[A-Z]:(\/.*)/;0===f.lastIndexOf(e,0)&&(f=f.replace(e,"")),g.exec(f)||(c=(f=g.exec(c))?f[1]:c),this.$$path=c,this.$$compose()},this.$$compose=function(){var b=Tb(this.$$search),e=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=fc(this.$$path)+(b?"?"+b:"")+e,this.$$absUrl=a+(this.$$url?d+this.$$url:"")},this.$$parseLinkUrl=function(b,d){return Ja(a)==Ja(b)&&(this.$$parse(b),!0)}}function ld(a,b,d){this.$$html5=!0,hc.apply(this,arguments),this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;return a==Ja(c)?f=c:(g=ka(b,c))?f=a+d+g:b===c+"/"&&(f=b),f&&this.$$parse(f),!!f},this.$$compose=function(){var b=Tb(this.$$search),e=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=fc(this.$$path)+(b?"?"+b:"")+e,this.$$absUrl=a+d+this.$$url}}function Hb(a){return function(){return this[a]}}function md(a,b){return function(d){return y(d)?this[a]:(this[a]=b(d),this.$$compose(),this)}}function sf(){var a="",b={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(b){return w(b)?(a=b,this):a},this.html5Mode=function(a){return Ga(a)?(b.enabled=a,this):D(a)?(Ga(a.enabled)&&(b.enabled=a.enabled),Ga(a.requireBase)&&(b.requireBase=a.requireBase),Ga(a.rewriteLinks)&&(b.rewriteLinks=a.rewriteLinks),this):b},this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(d,c,e,f,g){function h(a,b,d){var e=l.url(),f=l.$$state;try{c.url(a,b,d),l.$$state=c.state()}catch(g){throw l.url(e),l.$$state=f,g}}function k(a,b){d.$broadcast("$locationChangeSuccess",l.absUrl(),a,l.$$state,b)}var l,m;m=c.baseHref();var p,n=c.url();if(b.enabled){if(!m&&b.requireBase)throw Gb("nobase");p=n.substring(0,n.indexOf("/",n.indexOf("//")+2))+(m||"/"),m=e.history?gc:ld}else p=Ja(n),m=hc;var u=p.substr(0,Ja(p).lastIndexOf("/")+1);l=new m(p,u,"#"+a),l.$$parseLinkUrl(n,n),l.$$state=c.state();var R=/^\s*(javascript|mailto):/i;f.on("click",function(a){if(b.rewriteLinks&&!a.ctrlKey&&!a.metaKey&&!a.shiftKey&&2!=a.which&&2!=a.button){for(var e=F(a.target);"a"!==wa(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var h=e.prop("href"),k=e.attr("href")||e.attr("xlink:href");D(h)&&"[object SVGAnimatedString]"===h.toString()&&(h=Y(h.animVal).href),R.test(h)||!h||e.attr("target")||a.isDefaultPrevented()||!l.$$parseLinkUrl(h,k)||(a.preventDefault(),l.absUrl()!=c.url()&&(d.$apply(),g.angular["ff-684208-preventDefault"]=!0))}}),jb(l.absUrl())!=jb(n)&&c.url(l.absUrl(),!0);var q=!0;return c.onUrlChange(function(a,b){y(ka(u,a))?g.location.href=a:(d.$evalAsync(function(){var f,c=l.absUrl(),e=l.$$state;a=jb(a),l.$$parse(a),l.$$state=b,f=d.$broadcast("$locationChangeStart",a,c,b,e).defaultPrevented,l.absUrl()===a&&(f?(l.$$parse(c),l.$$state=e,h(c,!1,e)):(q=!1,k(c,e)))}),d.$$phase||d.$digest())}),d.$watch(function(){var a=jb(c.url()),b=jb(l.absUrl()),f=c.state(),g=l.$$replace,m=a!==b||l.$$html5&&e.history&&f!==l.$$state;(q||m)&&(q=!1,d.$evalAsync(function(){var b=l.absUrl(),c=d.$broadcast("$locationChangeStart",b,a,l.$$state,f).defaultPrevented;l.absUrl()===b&&(c?(l.$$parse(a),l.$$state=f):(m&&h(b,g,f===l.$$state?null:l.$$state),k(a,f)))})),l.$$replace=!1}),l}]}function tf(){var a=!0,b=this;this.debugEnabled=function(b){return w(b)?(a=b,this):a},this.$get=["$window",function(d){function c(a){return a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line)),a}function e(a){var b=d.console||{},e=b[a]||b.log||A;a=!1;try{a=!!e.apply}catch(k){}return a?function(){var a=[];return q(arguments,function(b){a.push(c(b))}),e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){a&&c.apply(b,arguments)}}()}}]}function Sa(a,b){if("__defineGetter__"===a||"__defineSetter__"===a||"__lookupGetter__"===a||"__lookupSetter__"===a||"__proto__"===a)throw X("isecfld",b);return a}function ig(a){return a+""}function ra(a,b){if(a){if(a.constructor===a)throw X("isecfn",b);if(a.window===a)throw X("isecwindow",b);if(a.children&&(a.nodeName||a.prop&&a.attr&&a.find))throw X("isecdom",b);if(a===Object)throw X("isecobj",b)}return a}function nd(a,b){if(a){if(a.constructor===a)throw X("isecfn",b);if(a===jg||a===kg||a===lg)throw X("isecff",b)}}function Ib(a,b){if(a&&(a===(0).constructor||a===(!1).constructor||a==="".constructor||a==={}.constructor||a===[].constructor||a===Function.constructor))throw X("isecaf",b)}function mg(a,b){return"undefined"!=typeof a?a:b}function od(a,b){return"undefined"==typeof a?b:"undefined"==typeof b?a:a+b}function V(a,b){var d,c;switch(a.type){case s.Program:d=!0,q(a.body,function(a){V(a.expression,b),d=d&&a.expression.constant}),a.constant=d;break;case s.Literal:a.constant=!0,a.toWatch=[];break;case s.UnaryExpression:V(a.argument,b),a.constant=a.argument.constant,a.toWatch=a.argument.toWatch;break;case s.BinaryExpression:V(a.left,b),V(a.right,b),a.constant=a.left.constant&&a.right.constant,a.toWatch=a.left.toWatch.concat(a.right.toWatch);break;case s.LogicalExpression:V(a.left,b),V(a.right,b),a.constant=a.left.constant&&a.right.constant,a.toWatch=a.constant?[]:[a];break;case s.ConditionalExpression:V(a.test,b),V(a.alternate,b),V(a.consequent,b),a.constant=a.test.constant&&a.alternate.constant&&a.consequent.constant,a.toWatch=a.constant?[]:[a];break;case s.Identifier:a.constant=!1,a.toWatch=[a];break;case s.MemberExpression:V(a.object,b),a.computed&&V(a.property,b),a.constant=a.object.constant&&(!a.computed||a.property.constant),a.toWatch=[a];break;case s.CallExpression:d=!!a.filter&&!b(a.callee.name).$stateful,c=[],q(a.arguments,function(a){V(a,b),d=d&&a.constant,a.constant||c.push.apply(c,a.toWatch)}),a.constant=d,a.toWatch=a.filter&&!b(a.callee.name).$stateful?c:[a];break;case s.AssignmentExpression:V(a.left,b),V(a.right,b),a.constant=a.left.constant&&a.right.constant,a.toWatch=[a];break;case s.ArrayExpression:d=!0,c=[],q(a.elements,function(a){V(a,b),d=d&&a.constant,a.constant||c.push.apply(c,a.toWatch)}),a.constant=d,a.toWatch=c;break;case s.ObjectExpression:d=!0,c=[],q(a.properties,function(a){V(a.value,b),d=d&&a.value.constant&&!a.computed,a.value.constant||c.push.apply(c,a.value.toWatch)}),a.constant=d,a.toWatch=c;break;case s.ThisExpression:a.constant=!1,a.toWatch=[];break;case s.LocalsExpression:a.constant=!1,a.toWatch=[]}}function pd(a){if(1==a.length){a=a[0].expression;var b=a.toWatch;return 1!==b.length?b:b[0]!==a?b:void 0}}function qd(a){return a.type===s.Identifier||a.type===s.MemberExpression}function rd(a){if(1===a.body.length&&qd(a.body[0].expression))return{type:s.AssignmentExpression,left:a.body[0].expression,right:{type:s.NGValueParameter},operator:"="}}function sd(a){return 0===a.body.length||1===a.body.length&&(a.body[0].expression.type===s.Literal||a.body[0].expression.type===s.ArrayExpression||a.body[0].expression.type===s.ObjectExpression)}function td(a,b){this.astBuilder=a,this.$filter=b}function ud(a,b){this.astBuilder=a,this.$filter=b}function Jb(a){return"constructor"==a}function ic(a){return z(a.valueOf)?a.valueOf():ng.call(a)}function uf(){var c,e,a=U(),b=U(),d={true:!0,false:!1,null:null,undefined:void 0};this.addLiteral=function(a,b){d[a]=b},this.setIdentifierFns=function(a,b){return c=a,e=b,this},this.$get=["$filter",function(f){function g(c,d,e){var g,k,H;switch(e=e||J,typeof c){case"string":H=c=c.trim();var E=e?b:a;if(g=E[H],!g){":"===c.charAt(0)&&":"===c.charAt(1)&&(k=!0,c=c.substring(2)),g=e?r:B;var q=new jc(g);g=new kc(q,f,g).parse(c),g.constant?g.$$watchDelegate=p:k?g.$$watchDelegate=g.literal?n:m:g.inputs&&(g.$$watchDelegate=l),e&&(g=h(g)),E[H]=g}return u(g,d);case"function":return u(c,d);default:return u(A,d)}}function h(a){function b(c,d,e,f){var g=J;J=!0;try{return a(c,d,e,f)}finally{J=g}}if(!a)return a;b.$$watchDelegate=a.$$watchDelegate,b.assign=h(a.assign),b.constant=a.constant,b.literal=a.literal;for(var c=0;a.inputs&&c<a.inputs.length;++c)a.inputs[c]=h(a.inputs[c]);return b.inputs=a.inputs,b}function k(a,b){return null==a||null==b?a===b:("object"!=typeof a||(a=ic(a),"object"!=typeof a))&&(a===b||a!==a&&b!==b)}function l(a,b,c,d,e){var g,f=d.inputs;if(1===f.length){var h=k,f=f[0];return a.$watch(function(a){var b=f(a);return k(b,h)||(g=d(a,void 0,void 0,[b]),h=b&&ic(b)),g},b,c,e)}for(var l=[],m=[],p=0,n=f.length;p<n;p++)l[p]=k,m[p]=null;return a.$watch(function(a){for(var b=!1,c=0,e=f.length;c<e;c++){var h=f[c](a);(b||(b=!k(h,l[c])))&&(m[c]=h,l[c]=h&&ic(h))}return b&&(g=d(a,void 0,void 0,m)),g},b,c,e)}function m(a,b,c,d){var e,f;return e=a.$watch(function(a){return d(a)},function(a,c,d){f=a,z(b)&&b.apply(this,arguments),w(a)&&d.$$postDigest(function(){w(f)&&e()})},c)}function n(a,b,c,d){function e(a){var b=!0;return q(a,function(a){w(a)||(b=!1)}),b}var f,g;return f=a.$watch(function(a){return d(a)},function(a,c,d){g=a,z(b)&&b.call(this,a,c,d),e(a)&&d.$$postDigest(function(){e(g)&&f()})},c)}function p(a,b,c,d){var e;return e=a.$watch(function(a){return e(),d(a)},b,c)}function u(a,b){if(!b)return a;var c=a.$$watchDelegate,d=!1,c=c!==n&&c!==m?function(c,e,f,g){return f=d&&g?g[0]:a(c,e,f,g),b(f,c,e)}:function(c,d,e,f){return e=a(c,d,e,f),c=b(e,c,d),w(e)?c:e};return a.$$watchDelegate&&a.$$watchDelegate!==l?c.$$watchDelegate=a.$$watchDelegate:b.$stateful||(c.$$watchDelegate=l,d=!a.inputs,c.inputs=a.inputs?a.inputs:[a]),c}var R=Ba().noUnsafeEval,B={csp:R,expensiveChecks:!1,literals:pa(d),isIdentifierStart:z(c)&&c,isIdentifierContinue:z(e)&&e},r={csp:R,expensiveChecks:!0,literals:pa(d),isIdentifierStart:z(c)&&c,isIdentifierContinue:z(e)&&e},J=!1;return g.$$runningExpensiveChecks=function(){return J},g}]}function wf(){this.$get=["$rootScope","$exceptionHandler",function(a,b){return vd(function(b){a.$evalAsync(b)},b)}]}function xf(){this.$get=["$browser","$exceptionHandler",function(a,b){return vd(function(b){a.defer(b)},b)}]}function vd(a,b){function d(){this.$$state={status:0}}function c(a,b){return function(c){b.call(a,c)}}function e(c){!c.processScheduled&&c.pending&&(c.processScheduled=!0,a(function(){var a,d,e;e=c.pending,c.processScheduled=!1,c.pending=void 0;for(var f=0,g=e.length;f<g;++f){d=e[f][0],a=e[f][c.status];try{z(a)?d.resolve(a(c.value)):1===c.status?d.resolve(c.value):d.reject(c.value)}catch(h){d.reject(h),b(h)}}}))}function f(){this.promise=new d}var g=N("$q",TypeError),h=function(){var a=new f;return a.resolve=c(a,a.resolve),
@@ -17,7 +17,7 @@ if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must eit
a},n.save=function(){l.assign(a.$parent,n.useCopy?angular.copy(n.scope.$data):n.scope.$data)},n.handleEmpty=function(){var b=l(a.$parent),c=null===b||void 0===b||""===b||angular.isArray(b)&&0===b.length;d.toggleClass("editable-empty",c)},n.autosubmit=angular.noop,n.onshow=angular.noop,n.onhide=angular.noop,n.oncancel=angular.noop,n.onbeforesave=angular.noop,n.onaftersave=angular.noop}return c.$inject=["$scope","$attrs","$element","$parse","editableThemes","editableIcons","editableOptions","$rootScope","$compile","$q"],c}]),angular.module("xeditable").factory("editableDirectiveFactory",["$parse","$compile","editableThemes","$rootScope","$document","editableController","editableFormController","editableOptions",function(a,b,c,d,e,f,g,h){return function(b){return{restrict:"A",scope:!0,require:[b.directiveName,"?^form"],controller:f,link:function(c,f,i,j){var k,l=j[0],m=!1;if(j[1])k=j[1],m=void 0===i.eSingle;else if(i.eForm){var n=a(i.eForm)(c);if(n)k=n,m=!0;else if(f&&"function"==typeof f.parents&&f.parents().last().find("form[name="+i.eForm+"]").length)k=null,m=!0;else for(var o=0;o<e[0].forms.length;o++)if(e[0].forms[o].name===i.eForm){k=null,m=!0;break}}angular.forEach(b,function(a,b){void 0!==l[b]&&(l.parent[b]=l[b])}),angular.extend(l,b);var p=angular.isDefined(i.editDisabled)?c.$eval(i.editDisabled):h.isDisabled;if(!p)if(l.init(!m),c.$editable=l,f.addClass("editable"),m)if(k){if(c.$form=k,!c.$form.$addEditable)throw"Form with editable elements should have `editable-form` attribute.";c.$form.$addEditable(l)}else d.$$editableBuffer=d.$$editableBuffer||{},d.$$editableBuffer[i.eForm]=d.$$editableBuffer[i.eForm]||[],d.$$editableBuffer[i.eForm].push(l),c.$form=null;else c.$form=g(),c.$form.$addEditable(l),i.eForm&&(a(i.eForm).assign||angular.noop)(c.$parent,c.$form),(!i.eForm||i.eClickable)&&(f.addClass("editable-click"),f.bind(h.activationEvent,function(a){a.preventDefault(),a.editable=l,c.$apply(function(){c.$form.$show()})}))}}}}]),angular.module("xeditable").factory("editableFormController",["$parse","$document","$rootScope","editablePromiseCollection","editableUtils",function(a,b,c,d,e){var f=[],g=function(a,b){if(b==a)return!0;for(var c=b.parentNode;null!==c;){if(c==a)return!0;c=c.parentNode}return!1},h=function(a,b){var c=!0,d=a.$editables;return angular.forEach(d,function(a){var d=a.editorEl[0];g(d,b.target)&&(c=!1)}),c};b.bind("click",function(a){if(!a.which||1===a.which){for(var b=[],d=[],e=0;e<f.length;e++)f[e]._clicked?f[e]._clicked=!1:f[e].$waiting||("cancel"===f[e]._blur&&h(f[e],a)&&b.push(f[e]),"submit"===f[e]._blur&&h(f[e],a)&&d.push(f[e]));(b.length||d.length)&&c.$apply(function(){angular.forEach(b,function(a){a.$cancel()}),angular.forEach(d,function(a){a.$submit()})})}}),c.$on("closeEdit",function(){for(var a=0;a<f.length;a++)f[a].$hide()});var i={$addEditable:function(a){this.$editables.push(a),a.elem.bind("$destroy",angular.bind(this,this.$removeEditable,a)),a.scope.$form||(a.scope.$form=this),this.$visible&&a.catchError(a.show()),a.catchError(a.setWaiting(this.$waiting))},$removeEditable:function(a){for(var b=0;b<this.$editables.length;b++)if(this.$editables[b]===a)return void this.$editables.splice(b,1)},$show:function(){if(!this.$visible){this.$visible=!0;var a=d();a.when(this.$onshow()),this.$setError(null,""),angular.forEach(this.$editables,function(b){a.when(b.show())}),a.then({onWait:angular.bind(this,this.$setWaiting),onTrue:angular.bind(this,this.$activate),onFalse:angular.bind(this,this.$activate),onString:angular.bind(this,this.$activate)}),setTimeout(angular.bind(this,function(){this._clicked=!1,-1===e.indexOf(f,this)&&f.push(this)}),0)}},$activate:function(a){var b;if(this.$editables.length){if(angular.isString(a))for(b=0;b<this.$editables.length;b++)if(this.$editables[b].name===a)return void this.$editables[b].activate();for(b=0;b<this.$editables.length;b++)if(this.$editables[b].error)return void this.$editables[b].activate();this.$editables[0].activate(this.$editables[0].elem[0].selectionStart,this.$editables[0].elem[0].selectionEnd)}},$hide:function(){this.$visible&&(this.$visible=!1,this.$onhide(),angular.forEach(this.$editables,function(a){a.hide()}),e.arrayRemove(f,this))},$cancel:function(){this.$visible&&(this.$oncancel(),angular.forEach(this.$editables,function(a){a.cancel()}),this.$hide())},$setWaiting:function(a){this.$waiting=!!a,angular.forEach(this.$editables,function(b){b.setWaiting(!!a)})},$setError:function(a,b){angular.forEach(this.$editables,function(c){a&&c.name!==a||c.setError(b)})},$submit:function(){function a(a){var b=d();b.when(this.$onbeforesave()),b.then({onWait:angular.bind(this,this.$setWaiting),onTrue:a?angular.bind(this,this.$save):angular.bind(this,this.$hide),onFalse:angular.bind(this,this.$hide),onString:angular.bind(this,this.$activate)})}if(!this.$waiting){this.$setError(null,"");var b=d();angular.forEach(this.$editables,function(a){b.when(a.onbeforesave())}),b.then({onWait:angular.bind(this,this.$setWaiting),onTrue:angular.bind(this,a,!0),onFalse:angular.bind(this,a,!1),onString:angular.bind(this,this.$activate)})}},$save:function(){angular.forEach(this.$editables,function(a){a.save()});var a=d();a.when(this.$onaftersave()),angular.forEach(this.$editables,function(b){a.when(b.onaftersave())}),a.then({onWait:angular.bind(this,this.$setWaiting),onTrue:angular.bind(this,this.$hide),onFalse:angular.bind(this,this.$hide),onString:angular.bind(this,this.$activate)})},$onshow:angular.noop,$oncancel:angular.noop,$onhide:angular.noop,$onbeforesave:angular.noop,$onaftersave:angular.noop};return function(){return angular.extend({$editables:[],$visible:!1,$waiting:!1,$data:{},_clicked:!1,_blur:null},i)}}]),angular.module("xeditable").directive("editableForm",["$rootScope","$parse","editableFormController","editableOptions",function(a,b,c,d){return{restrict:"A",require:["form"],compile:function(){return{pre:function(b,d,e,f){var g,h=f[0];e.editableForm?b[e.editableForm]&&b[e.editableForm].$show?(g=b[e.editableForm],angular.extend(h,g)):(g=c(),b[e.editableForm]=g,angular.extend(g,h)):(g=c(),angular.extend(h,g));var i=a.$$editableBuffer,j=h.$name;j&&i&&i[j]&&(angular.forEach(i[j],function(a){g.$addEditable(a)}),delete i[j])},post:function(a,c,e,f){var g;g=e.editableForm&&a[e.editableForm]&&a[e.editableForm].$show?a[e.editableForm]:f[0],e.onshow&&(g.$onshow=angular.bind(g,b(e.onshow),a)),e.onhide&&(g.$onhide=angular.bind(g,b(e.onhide),a)),e.oncancel&&(g.$oncancel=angular.bind(g,b(e.oncancel),a)),e.shown&&b(e.shown)(a)&&g.$show(),g._blur=e.blur||d.blurForm,e.ngSubmit||e.submit||(e.onbeforesave&&(g.$onbeforesave=function(){return b(e.onbeforesave)(a,{$data:g.$data})}),e.onaftersave&&(g.$onaftersave=function(){return b(e.onaftersave)(a,{$data:g.$data})}),c.bind("submit",function(b){b.preventDefault(),a.$apply(function(){g.$submit()})})),c.bind("click",function(a){a.which&&1!==a.which||g.$visible&&(g._clicked=!0)})}}}}}]),angular.module("xeditable").factory("editablePromiseCollection",["$q",function(a){function b(){return{promises:[],hasFalse:!1,hasString:!1,when:function(b,c){if(b===!1)this.hasFalse=!0;else if(!c&&angular.isObject(b))this.promises.push(a.when(b));else{if(!angular.isString(b))return;this.hasString=!0}},then:function(b){function c(){h.hasString||h.hasFalse?!h.hasString&&h.hasFalse?e():f():d()}b=b||{};var d=b.onTrue||angular.noop,e=b.onFalse||angular.noop,f=b.onString||angular.noop,g=b.onWait||angular.noop,h=this;this.promises.length?(g(!0),a.all(this.promises).then(function(a){g(!1),angular.forEach(a,function(a){h.when(a,!0)}),c()},function(a){g(!1),f()})):c()}}}return b}]),angular.module("xeditable").factory("editableUtils",[function(){return{indexOf:function(a,b){if(a.indexOf)return a.indexOf(b);for(var c=0;c<a.length;c++)if(b===a[c])return c;return-1},arrayRemove:function(a,b){var c=this.indexOf(a,b);return c>=0&&a.splice(c,1),b},camelToDash:function(a){var b=/[A-Z]/g;return a.replace(b,function(a,b){return(b?"-":"")+a.toLowerCase()})},dashToCamel:function(a){var b=/([\:\-\_]+(.))/g,c=/^moz([A-Z])/;return a.replace(b,function(a,b,c,d){return d?c.toUpperCase():c}).replace(c,"Moz$1")},rename:function(a,b){var c=angular.element("<"+a+"/>");c.html(b.html());for(var d=b[0].attributes,e=0;e<d.length;++e)c.attr(d.item(e).nodeName,d.item(e).value);return c}}}]),angular.module("xeditable").factory("editableNgOptionsParser",[function(){function a(a){var c;if(!(c=a.match(b)))throw"ng-options parse error";var d,e=c[2]||c[1],f=c[4]||c[6],g=c[5],h=(c[3]||"",c[2]?c[1]:f),i=c[7],j=c[8],k=j?c[8]:null;return void 0===g?(d=f+" in "+i,void 0!==j&&(d+=" track by "+k)):d="("+g+", "+f+") in "+i,{ngRepeat:d,locals:{valueName:f,keyName:g,valueFn:h,displayFn:e}}}var b=/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/;return a}]),angular.module("xeditable").factory("editableCombodate",[function(){function a(a,b){if(this.$element=angular.element(a),"INPUT"!=this.$element[0].nodeName)throw"Combodate should be applied to INPUT element";var c=(new Date).getFullYear();this.defaults={format:"YYYY-MM-DD HH:mm",template:"D / MMM / YYYY H : mm",value:null,minYear:1970,maxYear:c,yearDescending:!0,minuteStep:5,secondStep:1,firstItem:"empty",errorClass:null,customClass:"",roundTime:!0,smartDays:!0},this.options=angular.extend({},this.defaults,b),this.init()}return a.prototype={constructor:a,init:function(){if(this.map={day:["D","date"],month:["M","month"],year:["Y","year"],hour:["[Hh]","hours"],minute:["m","minutes"],second:["s","seconds"],ampm:["[Aa]",""]},this.$widget=angular.element('<span class="combodate"></span>').html(this.getTemplate()),this.initCombos(),this.options.smartDays){var a=this;this.$widget.find("select").bind("change",function(b){(angular.element(b.target).hasClass("month")||angular.element(b.target).hasClass("year"))&&a.fillCombo("day")})}this.$widget.find("select").css("width","auto"),this.$element.css("display","none").after(this.$widget),this.setValue(this.$element.val()||this.options.value)},getTemplate:function(){var a=this.options.template,b=this.options.customClass;return angular.forEach(this.map,function(b,c){b=b[0];var d=new RegExp(b+"+"),e=b.length>1?b.substring(1,2):b;a=a.replace(d,"{"+e+"}")}),a=a.replace(/ /g,"&nbsp;"),angular.forEach(this.map,function(c,d){c=c[0];var e=c.length>1?c.substring(1,2):c;a=a.replace("{"+e+"}",'<select class="'+d+" "+b+'"></select>')}),a},initCombos:function(){for(var a in this.map){var b=this.$widget[0].querySelectorAll("."+a);this["$"+a]=b.length?angular.element(b):null,this.fillCombo(a)}},fillCombo:function(a){var b=this["$"+a];if(b){var c="fill"+a.charAt(0).toUpperCase()+a.slice(1),d=this[c](),e=b.val();b.html("");for(var f=0;f<d.length;f++)b.append('<option value="'+d[f][0]+'">'+d[f][1]+"</option>");b.val(e)}},fillCommon:function(a){var b,c=[];if("name"===this.options.firstItem){b=moment.relativeTime||moment.langData()._relativeTime;var d="function"==typeof b[a]?b[a](1,!0,a,!1):b[a];d=d.split(" ").reverse()[0],c.push(["",d])}else"empty"===this.options.firstItem&&c.push(["",""]);return c},fillDay:function(){var a,b,c=this.fillCommon("d"),d=-1!==this.options.template.indexOf("DD"),e=31;if(this.options.smartDays&&this.$month&&this.$year){var f=parseInt(this.$month.val(),10),g=parseInt(this.$year.val(),10);isNaN(f)||isNaN(g)||(e=moment([g,f]).daysInMonth())}for(b=1;e>=b;b++)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillMonth:function(){var a,b,c=this.fillCommon("M"),d=-1!==this.options.template.indexOf("MMMM"),e=-1!==this.options.template.indexOf("MMM"),f=-1!==this.options.template.indexOf("MM");for(b=0;11>=b;b++)a=d?moment().date(1).month(b).format("MMMM"):e?moment().date(1).month(b).format("MMM"):f?this.leadZero(b+1):b+1,c.push([b,a]);return c},fillYear:function(){var a,b,c=[],d=-1!==this.options.template.indexOf("YYYY");for(b=this.options.maxYear;b>=this.options.minYear;b--)a=d?b:(b+"").substring(2),c[this.options.yearDescending?"push":"unshift"]([b,a]);return c=this.fillCommon("y").concat(c)},fillHour:function(){var a,b,c=this.fillCommon("h"),d=-1!==this.options.template.indexOf("h"),e=(-1!==this.options.template.indexOf("H"),-1!==this.options.template.toLowerCase().indexOf("hh")),f=d?1:0,g=d?12:23;for(b=f;g>=b;b++)a=e?this.leadZero(b):b,c.push([b,a]);return c},fillMinute:function(){var a,b,c=this.fillCommon("m"),d=-1!==this.options.template.indexOf("mm");for(b=0;59>=b;b+=this.options.minuteStep)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillSecond:function(){var a,b,c=this.fillCommon("s"),d=-1!==this.options.template.indexOf("ss");for(b=0;59>=b;b+=this.options.secondStep)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillAmpm:function(){var a=-1!==this.options.template.indexOf("a"),b=(-1!==this.options.template.indexOf("A"),[["am",a?"am":"AM"],["pm",a?"pm":"PM"]]);return b},getValue:function(a){var b,c={},d=this,e=!1;return angular.forEach(this.map,function(a,b){if("ampm"!==b){var f="day"===b?1:0;return c[b]=d["$"+b]?parseInt(d["$"+b].val(),10):f,isNaN(c[b])?(e=!0,!1):void 0}}),e?"":(this.$ampm&&(12===c.hour?c.hour="am"===this.$ampm.val()?0:12:c.hour="am"===this.$ampm.val()?c.hour:c.hour+12),b=moment([c.year,c.month,c.day,c.hour,c.minute,c.second]),this.highlight(b),a=void 0===a?this.options.format:a,null===a?b.isValid()?b:null:b.isValid()?b.format(a):"")},setValue:function(a){function b(a,b){var c={};return angular.forEach(a.children("option"),function(a,d){var e=angular.element(a).attr("value");if(""!==e){var f=Math.abs(e-b);("undefined"==typeof c.distance||f<c.distance)&&(c={value:e,distance:f})}}),c.value}if(a){var c="string"==typeof a?moment(a,this.options.format,!0):moment(a),d=this,e={};c.isValid()&&(angular.forEach(this.map,function(a,b){"ampm"!==b&&(e[b]=c[a[1]]())}),this.$ampm&&(e.hour>=12?(e.ampm="pm",e.hour>12&&(e.hour-=12)):(e.ampm="am",0===e.hour&&(e.hour=12))),angular.forEach(e,function(a,c){d["$"+c]&&("minute"===c&&d.options.minuteStep>1&&d.options.roundTime&&(a=b(d["$"+c],a)),"second"===c&&d.options.secondStep>1&&d.options.roundTime&&(a=b(d["$"+c],a)),d["$"+c].val(a))}),this.options.smartDays&&this.fillCombo("day"),this.$element.val(c.format(this.options.format)).triggerHandler("change"))}},highlight:function(a){a.isValid()?this.options.errorClass?this.$widget.removeClass(this.options.errorClass):this.$widget.find("select").css("border-color",this.borderColor):this.options.errorClass?this.$widget.addClass(this.options.errorClass):(this.borderColor||(this.borderColor=this.$widget.find("select").css("border-color")),this.$widget.find("select").css("border-color","red"))},leadZero:function(a){return 9>=a?"0"+a:a},destroy:function(){this.$widget.remove(),this.$element.removeData("combodate").show()}},{getInstance:function(b,c){return new a(b,c)}}}]),angular.module("xeditable").factory("editableIcons",function(){var a={default:{bs2:{ok:"icon-ok icon-white",cancel:"icon-remove"},bs3:{ok:"glyphicon glyphicon-ok",cancel:"glyphicon glyphicon-remove"}},external:{"font-awesome":{ok:"fa fa-check",cancel:"fa fa-times"}}};return a}),angular.module("xeditable").factory("editableThemes",function(){var a={default:{formTpl:'<form class="editable-wrap"></form>',noformTpl:'<span class="editable-wrap"></span>',controlsTpl:'<span class="editable-controls"></span>',inputTpl:"",errorTpl:'<div class="editable-error" data-ng-if="$error" data-ng-bind="$error"></div>',buttonsTpl:'<span class="editable-buttons"></span>',submitTpl:'<button type="submit">save</button>',cancelTpl:'<button type="button" ng-click="$form.$cancel()">cancel</button>'},bs2:{formTpl:'<form class="form-inline editable-wrap" role="form"></form>',noformTpl:'<span class="editable-wrap"></span>',controlsTpl:'<div class="editable-controls controls control-group" ng-class="{\'error\': $error}"></div>',inputTpl:"",errorTpl:'<div class="editable-error help-block" data-ng-if="$error" data-ng-bind="$error"></div>',buttonsTpl:'<span class="editable-buttons"></span>',submitTpl:'<button type="submit" class="btn btn-primary"><span></span></button>',cancelTpl:'<button type="button" class="btn" ng-click="$form.$cancel()"><span></span></button>'},bs3:{formTpl:'<form class="form-inline editable-wrap" role="form"></form>',noformTpl:'<span class="editable-wrap"></span>',controlsTpl:'<div class="editable-controls form-group" ng-class="{\'has-error\': $error}"></div>',inputTpl:"",errorTpl:'<div class="editable-error help-block" data-ng-if="$error" data-ng-bind="$error"></div>',buttonsTpl:'<span class="editable-buttons"></span>',submitTpl:'<button type="submit" class="btn btn-primary"><span></span></button>',cancelTpl:'<button type="button" class="btn btn-default" ng-click="$form.$cancel()"><span></span></button>',buttonsClass:"",inputClass:"",postrender:function(){switch(this.directiveName){case"editableText":case"editableSelect":case"editableTextarea":case"editableEmail":case"editableTel":case"editableNumber":case"editableUrl":case"editableSearch":case"editableDate":case"editableDatetime":case"editableBsdate":case"editableTime":case"editableMonth":case"editableWeek":case"editablePassword":case"editableDatetimeLocal":if(this.inputEl.addClass("form-control"),this.theme.inputClass){if(this.inputEl.attr("multiple")&&("input-sm"===this.theme.inputClass||"input-lg"===this.theme.inputClass))break;this.inputEl.addClass(this.theme.inputClass)}break;case"editableCheckbox":this.editorEl.addClass("checkbox")}this.buttonsEl&&this.theme.buttonsClass&&this.buttonsEl.find("button").addClass(this.theme.buttonsClass)}},semantic:{formTpl:'<form class="editable-wrap ui form" ng-class="{\'error\': $error}" role="form"></form>',noformTpl:'<span class="editable-wrap"></span>',controlsTpl:'<div class="editable-controls ui fluid input" ng-class="{\'error\': $error}"></div>',inputTpl:"",errorTpl:'<div class="editable-error ui error message" data-ng-if="$error" data-ng-bind="$error"></div>',buttonsTpl:'<span class="mini ui buttons"></span>',submitTpl:'<button type="submit" class="ui primary button"><i class="ui check icon"></i></button>',cancelTpl:'<button type="button" class="ui button" ng-click="$form.$cancel()"><i class="ui cancel icon"></i></button>'}};return a}),function(T){function z(a,c,b){var g=0,f=[0],h="",l=null,h=b||"UTF8";if("UTF8"!==h&&"UTF16"!==h)throw"encoding must be UTF8 or UTF16";if("HEX"===c){if(0!==a.length%2)throw"srcString of HEX type must be in byte increments";l=B(a),g=l.binLen,f=l.value}else if("ASCII"===c||"TEXT"===c)l=J(a,h),g=l.binLen,f=l.value;else{if("B64"!==c)throw"inputFormat must be HEX, TEXT, ASCII, or B64";l=K(a),g=l.binLen,f=l.value}this.getHash=function(a,c,b,h){var p,l=null,d=f.slice(),n=g;if(3===arguments.length?"number"!=typeof b&&(h=b,b=1):2===arguments.length&&(b=1),b!==parseInt(b,10)||1>b)throw"numRounds must a integer >= 1";switch(c){case"HEX":l=L;break;case"B64":l=M;break;default:throw"format must be HEX or B64"}if("SHA-1"===a)for(p=0;p<b;p++)d=y(d,n),n=160;else if("SHA-224"===a)for(p=0;p<b;p++)d=v(d,n,a),n=224;else if("SHA-256"===a)for(p=0;p<b;p++)d=v(d,n,a),n=256;else if("SHA-384"===a)for(p=0;p<b;p++)d=v(d,n,a),n=384;else{if("SHA-512"!==a)throw"Chosen SHA variant is not supported";for(p=0;p<b;p++)d=v(d,n,a),n=512}return l(d,N(h))},this.getHMAC=function(a,b,c,l,s){var d,n,p,m,w=[],x=[];switch(d=null,l){case"HEX":l=L;break;case"B64":l=M;break;default:throw"outputFormat must be HEX or B64"}if("SHA-1"===c)n=64,m=160;else if("SHA-224"===c)n=64,m=224;else if("SHA-256"===c)n=64,m=256;else if("SHA-384"===c)n=128,m=384;else{if("SHA-512"!==c)throw"Chosen SHA variant is not supported";n=128,m=512}if("HEX"===b)d=B(a),p=d.binLen,d=d.value;else if("ASCII"===b||"TEXT"===b)d=J(a,h),p=d.binLen,d=d.value;else{if("B64"!==b)throw"inputFormat must be HEX, TEXT, ASCII, or B64";d=K(a),p=d.binLen,d=d.value}for(a=8*n,b=n/4-1,n<p/8?(d="SHA-1"===c?y(d,p):v(d,p,c),d[b]&=4294967040):n>p/8&&(d[b]&=4294967040),n=0;n<=b;n+=1)w[n]=909522486^d[n],x[n]=1549556828^d[n];return c="SHA-1"===c?y(x.concat(y(w.concat(f),a+g)),a+m):v(x.concat(v(w.concat(f),a+g,c)),a+m,c),l(c,N(s))}}function s(a,c){this.a=a,this.b=c}function J(a,c){var g,l,b=[],f=[],h=0;if("UTF8"===c)for(l=0;l<a.length;l+=1)for(g=a.charCodeAt(l),f=[],2048<g?(f[0]=224|(61440&g)>>>12,f[1]=128|(4032&g)>>>6,f[2]=128|63&g):128<g?(f[0]=192|(1984&g)>>>6,f[1]=128|63&g):f[0]=g,g=0;g<f.length;g+=1)b[h>>>2]|=f[g]<<24-h%4*8,h+=1;else if("UTF16"===c)for(l=0;l<a.length;l+=1)b[h>>>2]|=a.charCodeAt(l)<<16-h%4*8,h+=2;return{value:b,binLen:8*h}}function B(a){var g,f,c=[],b=a.length;if(0!==b%2)throw"String of HEX type must be in byte increments";for(g=0;g<b;g+=2){if(f=parseInt(a.substr(g,2),16),isNaN(f))throw"String of HEX type contains invalid characters";c[g>>>3]|=f<<24-g%8*4}return{value:c,binLen:4*b}}function K(a){var g,f,h,l,r,c=[],b=0;if(-1===a.search(/^[a-zA-Z0-9=+\/]+$/))throw"Invalid character in base-64 string";if(g=a.indexOf("="),a=a.replace(/\=/g,""),-1!==g&&g<a.length)throw"Invalid '=' found in base-64 string";for(f=0;f<a.length;f+=4){for(r=a.substr(f,4),h=l=0;h<r.length;h+=1)g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(r[h]),l|=g<<18-6*h;for(h=0;h<r.length-1;h+=1)c[b>>2]|=(l>>>16-8*h&255)<<24-b%4*8,b+=1}return{value:c,binLen:8*b}}function L(a,c){var f,h,b="",g=4*a.length;for(f=0;f<g;f+=1)h=a[f>>>2]>>>8*(3-f%4),b+="0123456789abcdef".charAt(h>>>4&15)+"0123456789abcdef".charAt(15&h);return c.outputUpper?b.toUpperCase():b}function M(a,c){var f,h,l,b="",g=4*a.length;for(f=0;f<g;f+=3)for(l=(a[f>>>2]>>>8*(3-f%4)&255)<<16|(a[f+1>>>2]>>>8*(3-(f+1)%4)&255)<<8|a[f+2>>>2]>>>8*(3-(f+2)%4)&255,h=0;4>h;h+=1)b=8*f+6*h<=32*a.length?b+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(l>>>6*(3-h)&63):b+c.b64Pad;return b}function N(a){var c={outputUpper:!1,b64Pad:"="};try{a.hasOwnProperty("outputUpper")&&(c.outputUpper=a.outputUpper),a.hasOwnProperty("b64Pad")&&(c.b64Pad=a.b64Pad)}catch(b){}if("boolean"!=typeof c.outputUpper)throw"Invalid outputUpper formatting option";if("string"!=typeof c.b64Pad)throw"Invalid b64Pad formatting option";return c}function U(a,c){return a<<c|a>>>32-c}function u(a,c){return a>>>c|a<<32-c}function t(a,c){var b=null,b=new s(a.a,a.b);return b=32>=c?new s(b.a>>>c|b.b<<32-c&4294967295,b.b>>>c|b.a<<32-c&4294967295):new s(b.b>>>c-32|b.a<<64-c&4294967295,b.a>>>c-32|b.b<<64-c&4294967295)}function O(a,c){var b=null;return b=32>=c?new s(a.a>>>c,a.b>>>c|a.a<<32-c&4294967295):new s(0,a.a>>>c-32)}function V(a,c,b){return a^c^b}function P(a,c,b){return a&c^~a&b}function W(a,c,b){return new s(a.a&c.a^~a.a&b.a,a.b&c.b^~a.b&b.b)}function Q(a,c,b){return a&c^a&b^c&b}function X(a,c,b){return new s(a.a&c.a^a.a&b.a^c.a&b.a,a.b&c.b^a.b&b.b^c.b&b.b)}function Y(a){return u(a,2)^u(a,13)^u(a,22)}function Z(a){var c=t(a,28),b=t(a,34);return a=t(a,39),new s(c.a^b.a^a.a,c.b^b.b^a.b)}function $(a){return u(a,6)^u(a,11)^u(a,25)}function aa(a){var c=t(a,14),b=t(a,18);return a=t(a,41),new s(c.a^b.a^a.a,c.b^b.b^a.b)}function ba(a){return u(a,7)^u(a,18)^a>>>3}function ca(a){var c=t(a,1),b=t(a,8);return a=O(a,7),new s(c.a^b.a^a.a,c.b^b.b^a.b)}function da(a){return u(a,17)^u(a,19)^a>>>10}function ea(a){var c=t(a,19),b=t(a,61);return a=O(a,6),new s(c.a^b.a^a.a,c.b^b.b^a.b)}function R(a,c){var b=(65535&a)+(65535&c);return((a>>>16)+(c>>>16)+(b>>>16)&65535)<<16|65535&b}function fa(a,c,b,g){var f=(65535&a)+(65535&c)+(65535&b)+(65535&g);return((a>>>16)+(c>>>16)+(b>>>16)+(g>>>16)+(f>>>16)&65535)<<16|65535&f}function S(a,c,b,g,f){var h=(65535&a)+(65535&c)+(65535&b)+(65535&g)+(65535&f);return((a>>>16)+(c>>>16)+(b>>>16)+(g>>>16)+(f>>>16)+(h>>>16)&65535)<<16|65535&h}function ga(a,c){var b,g,f;return b=(65535&a.b)+(65535&c.b),g=(a.b>>>16)+(c.b>>>16)+(b>>>16),f=(65535&g)<<16|65535&b,b=(65535&a.a)+(65535&c.a)+(g>>>16),g=(a.a>>>16)+(c.a>>>16)+(b>>>16),new s((65535&g)<<16|65535&b,f)}function ha(a,c,b,g){var f,h,l;return f=(65535&a.b)+(65535&c.b)+(65535&b.b)+(65535&g.b),h=(a.b>>>16)+(c.b>>>16)+(b.b>>>16)+(g.b>>>16)+(f>>>16),l=(65535&h)<<16|65535&f,f=(65535&a.a)+(65535&c.a)+(65535&b.a)+(65535&g.a)+(h>>>16),h=(a.a>>>16)+(c.a>>>16)+(b.a>>>16)+(g.a>>>16)+(f>>>16),new s((65535&h)<<16|65535&f,l)}function ia(a,c,b,g,f){var h,l,r;return h=(65535&a.b)+(65535&c.b)+(65535&b.b)+(65535&g.b)+(65535&f.b),l=(a.b>>>16)+(c.b>>>16)+(b.b>>>16)+(g.b>>>16)+(f.b>>>16)+(h>>>16),r=(65535&l)<<16|65535&h,h=(65535&a.a)+(65535&c.a)+(65535&b.a)+(65535&g.a)+(65535&f.a)+(l>>>16),l=(a.a>>>16)+(c.a>>>16)+(b.a>>>16)+(g.a>>>16)+(f.a>>>16)+(h>>>16),new s((65535&l)<<16|65535&h,r)}function y(a,c){var g,f,h,l,r,s,p,m,x,b=[],u=P,t=V,v=Q,d=U,n=R,w=S,q=[1732584193,4023233417,2562383102,271733878,3285377520];for(a[c>>>5]|=128<<24-c%32,a[(c+65>>>9<<4)+15]=c,x=a.length,p=0;p<x;p+=16){for(g=q[0],f=q[1],h=q[2],l=q[3],r=q[4],m=0;80>m;m+=1)b[m]=16>m?a[m+p]:d(b[m-3]^b[m-8]^b[m-14]^b[m-16],1),s=20>m?w(d(g,5),u(f,h,l),r,1518500249,b[m]):40>m?w(d(g,5),t(f,h,l),r,1859775393,b[m]):60>m?w(d(g,5),v(f,h,l),r,2400959708,b[m]):w(d(g,5),t(f,h,l),r,3395469782,b[m]),r=l,l=h,h=d(f,30),f=g,g=s;q[0]=n(g,q[0]),q[1]=n(f,q[1]),q[2]=n(h,q[2]),q[3]=n(l,q[3]),q[4]=n(r,q[4])}return q}function v(a,c,b){var g,f,h,l,r,t,u,v,z,d,n,p,m,w,x,q,y,C,D,E,F,G,H,I,e,B,A=[],k=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];if(d=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428],f=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],"SHA-224"===b||"SHA-256"===b)n=64,g=(c+65>>>9<<4)+15,w=16,x=1,e=Number,q=R,y=fa,C=S,D=ba,E=da,F=Y,G=$,I=Q,H=P,d="SHA-224"===b?d:f;else{if("SHA-384"!==b&&"SHA-512"!==b)throw"Unexpected error in SHA-2 implementation";n=80,g=(c+128>>>10<<5)+31,w=32,x=2,e=s,q=ga,y=ha,C=ia,D=ca,E=ea,F=Z,G=aa,I=X,H=W,k=[new e(k[0],3609767458),new e(k[1],602891725),new e(k[2],3964484399),new e(k[3],2173295548),new e(k[4],4081628472),new e(k[5],3053834265),new e(k[6],2937671579),new e(k[7],3664609560),new e(k[8],2734883394),new e(k[9],1164996542),new e(k[10],1323610764),new e(k[11],3590304994),new e(k[12],4068182383),new e(k[13],991336113),new e(k[14],633803317),new e(k[15],3479774868),new e(k[16],2666613458),new e(k[17],944711139),new e(k[18],2341262773),new e(k[19],2007800933),new e(k[20],1495990901),new e(k[21],1856431235),new e(k[22],3175218132),new e(k[23],2198950837),new e(k[24],3999719339),new e(k[25],766784016),new e(k[26],2566594879),new e(k[27],3203337956),new e(k[28],1034457026),new e(k[29],2466948901),new e(k[30],3758326383),new e(k[31],168717936),new e(k[32],1188179964),new e(k[33],1546045734),new e(k[34],1522805485),new e(k[35],2643833823),new e(k[36],2343527390),new e(k[37],1014477480),new e(k[38],1206759142),new e(k[39],344077627),new e(k[40],1290863460),new e(k[41],3158454273),new e(k[42],3505952657),new e(k[43],106217008),new e(k[44],3606008344),new e(k[45],1432725776),new e(k[46],1467031594),new e(k[47],851169720),new e(k[48],3100823752),new e(k[49],1363258195),new e(k[50],3750685593),new e(k[51],3785050280),new e(k[52],3318307427),new e(k[53],3812723403),new e(k[54],2003034995),new e(k[55],3602036899),new e(k[56],1575990012),new e(k[57],1125592928),new e(k[58],2716904306),new e(k[59],442776044),new e(k[60],593698344),new e(k[61],3733110249),new e(k[62],2999351573),new e(k[63],3815920427),new e(3391569614,3928383900),new e(3515267271,566280711),new e(3940187606,3454069534),new e(4118630271,4000239992),new e(116418474,1914138554),new e(174292421,2731055270),new e(289380356,3203993006),new e(460393269,320620315),new e(685471733,587496836),new e(852142971,1086792851),new e(1017036298,365543100),new e(1126000580,2618297676),new e(1288033470,3409855158),new e(1501505948,4234509866),new e(1607167915,987167468),new e(1816402316,1246189591)],d="SHA-384"===b?[new e(3418070365,d[0]),new e(1654270250,d[1]),new e(2438529370,d[2]),new e(355462360,d[3]),new e(1731405415,d[4]),new e(41048885895,d[5]),new e(3675008525,d[6]),new e(1203062813,d[7])]:[new e(f[0],4089235720),new e(f[1],2227873595),new e(f[2],4271175723),new e(f[3],1595750129),new e(f[4],2917565137),new e(f[5],725511199),new e(f[6],4215389547),new e(f[7],327033209)]}for(a[c>>>5]|=128<<24-c%32,a[g]=c,B=a.length,p=0;p<B;p+=w){for(c=d[0],g=d[1],f=d[2],h=d[3],l=d[4],r=d[5],t=d[6],u=d[7],m=0;m<n;m+=1)A[m]=16>m?new e(a[m*x+p],a[m*x+p+1]):y(E(A[m-2]),A[m-7],D(A[m-15]),A[m-16]),v=C(u,G(l),H(l,r,t),k[m],A[m]),z=q(F(c),I(c,g,f)),u=t,t=r,r=l,l=q(h,v),h=f,f=g,g=c,c=q(v,z);d[0]=q(c,d[0]),d[1]=q(g,d[1]),d[2]=q(f,d[2]),d[3]=q(h,d[3]),d[4]=q(l,d[4]),d[5]=q(r,d[5]),d[6]=q(t,d[6]),d[7]=q(u,d[7])}if("SHA-224"===b)a=[d[0],d[1],d[2],d[3],d[4],d[5],d[6]];else if("SHA-256"===b)a=d;else if("SHA-384"===b)a=[d[0].a,d[0].b,d[1].a,d[1].b,d[2].a,d[2].b,d[3].a,d[3].b,d[4].a,d[4].b,d[5].a,d[5].b];else{if("SHA-512"!==b)throw"Unexpected error in SHA-2 implementation";a=[d[0].a,d[0].b,d[1].a,d[1].b,d[2].a,d[2].b,d[3].a,d[3].b,d[4].a,d[4].b,d[5].a,d[5].b,d[6].a,d[6].b,d[7].a,d[7].b]}return a}"function"!=typeof define||(define.amd,0)?"undefined"!=typeof exports?"undefined"!=typeof module&&module.exports?module.exports=exports=z:exports=z:T.jsSHA=z:define(function(){return z})}(this),_aa={},_aa._ab=function(f,e){for(var d=qrcode.width,b=qrcode.height,c=!0,g=0;g<e.Length&&c;g+=2){var a=Math.floor(e[g]),h=Math.floor(e[g+1]);if(a<-1||a>d||h<-1||h>b)throw"Error._ab ";c=!1,a==-1?(e[g]=0,c=!0):a==d&&(e[g]=d-1,c=!0),h==-1?(e[g+1]=0,c=!0):h==b&&(e[g+1]=b-1,c=!0)}c=!0;for(var g=e.Length-2;g>=0&&c;g-=2){var a=Math.floor(e[g]),h=Math.floor(e[g+1]);if(a<-1||a>d||h<-1||h>b)throw"Error._ab ";c=!1,a==-1?(e[g]=0,c=!0):a==d&&(e[g]=d-1,c=!0),h==-1?(e[g+1]=0,c=!0):h==b&&(e[g+1]=b-1,c=!0)}},_aa._af=function(b,d,a){for(var l=new _ac(d),k=new Array(d<<1),g=0;g<d;g++){for(var h=k.length,j=g+.5,i=0;i<h;i+=2)k[i]=(i>>1)+.5,k[i+1]=j;a._ad(k),_aa._ab(b,k);try{for(var i=0;i<h;i+=2){var e=4*Math.floor(k[i])+Math.floor(k[i+1])*qrcode.width*4,f=b[Math.floor(k[i])+qrcode.width*Math.floor(k[i+1])];qrcode.imagedata.data[e]=f?255:0,qrcode.imagedata.data[e+1]=f?255:0,qrcode.imagedata.data[e+2]=0,qrcode.imagedata.data[e+3]=255,f&&l._dq(i>>1,g)}}catch(c){throw"Error._ab"}}return l},_aa._ah=function(h,o,l,k,r,q,b,a,f,e,n,m,t,s,d,c,j,i){var g=_ae._ag(l,k,r,q,b,a,f,e,n,m,t,s,d,c,j,i);return _aa._af(h,o,g)},_a3._bv=new Array(31892,34236,39577,42195,48118,51042,55367,58893,63784,68472,70749,76311,79154,84390,87683,92361,96236,102084,102881,110507,110734,117786,119615,126325,127568,133589,136944,141498,145311,150283,152622,158308,161089,167017),_a3.VERSIONS=_ay(),_a3._av=function(a){if(a<1||a>40)throw"bad arguments";return _a3.VERSIONS[a-1]},_a3._at=function(b){if(b%4!=1)throw"Error _at";try{return _a3._av(b-17>>2)}catch(a){throw"Error _av"}},_a3._aw=function(d){for(var b=4294967295,f=0,c=0;c<_a3._bv.length;c++){var a=_a3._bv[c];if(a==d)return this._av(c+7);var e=_ax._gj(d,a);e<b&&(f=c+7,b=e)}return b<=3?this._av(f):null},_ae._ag=function(q,e,o,d,n,c,m,b,h,r,l,f,a,j,i,s){var g=this._be(q,e,o,d,n,c,m,b),k=this._bf(h,r,l,f,a,j,i,s);return k.times(g)},_ae._bf=function(f,h,d,g,b,e,a,c){return dy2=c-e,dy3=h-g+e-c,0==dy2&&0==dy3?new _ae(d-f,b-d,f,g-h,e-g,h,0,0,1):(dx1=d-b,dx2=a-b,dx3=f-d+b-a,dy1=g-e,_dr=dx1*dy2-dx2*dy1,a13=(dx3*dy2-dx2*dy3)/_dr,a23=(dx1*dy3-dx3*dy1)/_dr,new _ae(d-f+a13*d,a-f+a23*a,f,g-h+a13*g,c-h+a23*c,h,a13,a23,1))},_ae._be=function(f,h,d,g,b,e,a,c){return this._bf(f,h,d,g,b,e,a,c)._fr()};var _ca=21522,_cb=new Array(new Array(21522,0),new Array(20773,1),new Array(24188,2),new Array(23371,3),new Array(17913,4),new Array(16590,5),new Array(20375,6),new Array(19104,7),new Array(30660,8),new Array(29427,9),new Array(32170,10),new Array(30877,11),new Array(26159,12),new Array(25368,13),new Array(27713,14),new Array(26998,15),new Array(5769,16),new Array(5054,17),new Array(7399,18),new Array(6608,19),new Array(1890,20),new Array(597,21),new Array(3340,22),new Array(2107,23),new Array(13663,24),new Array(12392,25),new Array(16177,26),new Array(14854,27),new Array(9396,28),new Array(8579,29),new Array(11994,30),new Array(11245,31)),_ch=new Array(0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4);
_ax._gj=function(d,c){return d^=c,_ch[15&d]+_ch[15&_ew(d,4)]+_ch[15&_ew(d,8)]+_ch[15&_ew(d,12)]+_ch[15&_ew(d,16)]+_ch[15&_ew(d,20)]+_ch[15&_ew(d,24)]+_ch[15&_ew(d,28)]},_ax._ci=function(a){var b=_ax._cj(a);return null!=b?b:_ax._cj(a^_ca)},_ax._cj=function(d){for(var b=4294967295,a=0,c=0;c<_cb.length;c++){var g=_cb[c],f=g[0];if(f==d)return new _ax(g[1]);var e=this._gj(d,f);e<b&&(a=g[1],b=e)}return b<=3?new _ax(a):null},_cg.forBits=function(a){if(a<0||a>=FOR_BITS.Length)throw"bad arguments";return FOR_BITS[a]};var L=new _cg(0,1,"L"),M=new _cg(1,0,"M"),Q=new _cg(2,3,"Q"),H=new _cg(3,2,"H"),FOR_BITS=new Array(M,L,H,Q);_dl._gn=function(c,h,s){if(c.length!=h._dp)throw"bad arguments";for(var k=h._bu(s),e=0,d=k._fb(),r=0;r<d.length;r++)e+=d[r].Count;for(var l=new Array(e),n=0,o=0;o<d.length;o++)for(var f=d[o],r=0;r<f.Count;r++){var m=f._dm,t=k._bo+m;l[n++]=new _dl(m,new Array(t))}for(var u=l[0]._dw.length,b=l.length-1;b>=0;){var w=l[b]._dw.length;if(w==u)break;b--}b++;for(var g=u-k._bo,a=0,r=0;r<g;r++)for(var o=0;o<n;o++)l[o]._dw[r]=c[a++];for(var o=b;o<n;o++)l[o]._dw[g]=c[a++];for(var q=l[0]._dw.length,r=g;r<q;r++)for(var o=0;o<n;o++){var v=o<b?r:r+1;l[o]._dw[v]=c[a++]}return l},_dx={},_dx._gl=function(a){if(a<0||a>7)throw"bad arguments";return _dx._dy[a]},_dx._dy=new Array(new _fg,new _fh,new _fi,new _fj,new _fk,new _fl,new _fm,new _fn),_az._bb=new _az(285),_az._bc=new _az(301),_az._bd=function(d,c){return d^c},Decoder={},Decoder.rsDecoder=new _db(_az._bb),Decoder.correctErrors=function(g,b){for(var d=g.length,f=new Array(d),e=0;e<d;e++)f[e]=255&g[e];var a=g.length-b;try{Decoder.rsDecoder.decode(f,a)}catch(c){throw c}for(var e=0;e<b;e++)g[e]=f[e]},Decoder.decode=function(r){for(var b=new _cl(r),o=b._cq(),c=b._cm()._cg,q=b._gk(),a=_dl._gn(q,o,c),f=0,k=0;k<a.Length;k++)f+=a[k]._du;for(var e=new Array(f),n=0,h=0;h<a.length;h++){var m=a[h],d=m.Codewords,g=m._du;Decoder.correctErrors(d,g);for(var k=0;k<g;k++)e[n++]=d[k]}var l=new QRCodeDataBlockReader(e,o._fd,c.Bits);return l},qrcode={},qrcode.imagedata=null,qrcode.width=0,qrcode.height=0,qrcode.qrCodeSymbol=null,qrcode.debug=!1,qrcode._eo=[[10,9,8,8],[12,11,16,10],[14,13,16,12]],qrcode.callback=null,qrcode.decode=function(d){if(0==arguments.length){var b=document.getElementById("qr-canvas"),a=b.getContext("2d");return qrcode.width=b.width,qrcode.height=b.height,qrcode.imagedata=a.getImageData(0,0,qrcode.width,qrcode.height),qrcode.result=qrcode.process(a),null!=qrcode.callback&&qrcode.callback(qrcode.result),qrcode.result}var c=new Image;c.onload=function(){var i=document.createElement("canvas"),h=i.getContext("2d"),f=document.getElementById("out-canvas");if(null!=f){var g=f.getContext("2d");g.clearRect(0,0,320,240),g.drawImage(c,0,0,320,240)}i.width=c.width,i.height=c.height,h.drawImage(c,0,0),qrcode.width=c.width,qrcode.height=c.height;try{qrcode.imagedata=h.getImageData(0,0,c.width,c.height)}catch(j){return qrcode.result="Cross domain image reading not supported in your browser! Save it to your computer then drag and drop the file!",void(null!=qrcode.callback&&qrcode.callback(qrcode.result))}try{qrcode.result=qrcode.process(h)}catch(j){console.log(j),qrcode.result="error decoding QR Code"}null!=qrcode.callback&&qrcode.callback(qrcode.result)},c.src=d},qrcode.decode_utf8=function(a){return decodeURIComponent(escape(a))},qrcode.process=function(r){var c=((new Date).getTime(),qrcode.grayScaleToBitmap(qrcode.grayscale()));if(qrcode.debug){for(var m=0;m<qrcode.height;m++)for(var n=0;n<qrcode.width;n++){var o=4*n+m*qrcode.width*4;qrcode.imagedata.data[o]=(c[n+m*qrcode.width],0),qrcode.imagedata.data[o+1]=(c[n+m*qrcode.width],0),qrcode.imagedata.data[o+2]=c[n+m*qrcode.width]?255:0}r.putImageData(qrcode.imagedata,0,0)}var h=new Detector(c),q=h.detect();qrcode.debug&&r.putImageData(qrcode.imagedata,0,0);for(var k=Decoder.decode(q.bits),g=k.DataByte,l="",f=0;f<g.length;f++)for(var e=0;e<g[f].length;e++)l+=String.fromCharCode(g[f][e]);(new Date).getTime();return qrcode.decode_utf8(l)},qrcode.getPixel=function(a,b){if(qrcode.width<a)throw"point error";if(qrcode.height<b)throw"point error";return point=4*a+b*qrcode.width*4,p=(33*qrcode.imagedata.data[point]+34*qrcode.imagedata.data[point+1]+33*qrcode.imagedata.data[point+2])/100,p},qrcode.binarize=function(d){for(var c=new Array(qrcode.width*qrcode.height),e=0;e<qrcode.height;e++)for(var b=0;b<qrcode.width;b++){var a=qrcode.getPixel(b,e);c[b+e*qrcode.width]=a<=d}return c},qrcode._em=function(d){for(var c=4,k=Math.floor(qrcode.width/c),j=Math.floor(qrcode.height/c),f=new Array(c),g=0;g<c;g++){f[g]=new Array(c);for(var e=0;e<c;e++)f[g][e]=new Array(0,0)}for(var o=0;o<c;o++)for(var a=0;a<c;a++){f[a][o][0]=255;for(var l=0;l<j;l++)for(var n=0;n<k;n++){var h=d[k*a+n+(j*o+l)*qrcode.width];h<f[a][o][0]&&(f[a][o][0]=h),h>f[a][o][1]&&(f[a][o][1]=h)}}for(var m=new Array(c),b=0;b<c;b++)m[b]=new Array(c);for(var o=0;o<c;o++)for(var a=0;a<c;a++)m[a][o]=Math.floor((f[a][o][0]+f[a][o][1])/2);return m},qrcode.grayScaleToBitmap=function(f){for(var j=qrcode._em(f),b=j.length,e=Math.floor(qrcode.width/b),d=Math.floor(qrcode.height/b),c=new Array(qrcode.height*qrcode.width),i=0;i<b;i++)for(var a=0;a<b;a++)for(var g=0;g<d;g++)for(var h=0;h<e;h++)c[e*a+h+(d*i+g)*qrcode.width]=f[e*a+h+(d*i+g)*qrcode.width]<j[a][i];return c},qrcode.grayscale=function(){for(var c=new Array(qrcode.width*qrcode.height),d=0;d<qrcode.height;d++)for(var b=0;b<qrcode.width;b++){var a=qrcode.getPixel(b,d);c[b+d*qrcode.width]=a}return c},Array.prototype.remove=function(c,b){var a=this.slice((b||c)+1||this.length);return this.length=c<0?this.length+c:c,this.push.apply(this,a)};var _gf=3,_eh=57,_el=8,_eg=2;qrcode._er=function(c){function b(l,k){return xDiff=l.X-k.X,yDiff=l.Y-k.Y,Math.sqrt(xDiff*xDiff+yDiff*yDiff)}function d(k,o,n){var m=o.x,l=o.y;return(n.x-m)*(k.y-l)-(n.y-l)*(k.x-m)}var a,j,h,i=b(c[0],c[1]),f=b(c[1],c[2]),e=b(c[0],c[2]);if(f>=i&&f>=e?(j=c[0],a=c[1],h=c[2]):e>=f&&e>=i?(j=c[1],a=c[0],h=c[2]):(j=c[2],a=c[0],h=c[1]),d(a,j,h)<0){var g=a;a=h,h=g}c[0]=a,c[1]=j,c[2]=h},function(root,factory){"function"==typeof define&&define.amd?define([],factory):"object"==typeof exports?module.exports=factory():root.download=factory()}(this,function(){return function download(data,strFileName,strMimeType){function dataUrlToBlob(strUrl){var parts=strUrl.split(/[:;,]/),type=parts[1],decoder="base64"==parts[2]?atob:decodeURIComponent,binData=decoder(parts.pop()),mx=binData.length,i=0,uiArr=new Uint8Array(mx);for(i;i<mx;++i)uiArr[i]=binData.charCodeAt(i);return new myBlob([uiArr],{type:type})}function saver(url,winMode){if("download"in anchor)return anchor.href=url,anchor.setAttribute("download",fileName),anchor.className="download-js-link",anchor.innerHTML="downloading...",anchor.style.display="none",jQuery(".detailsView").append(anchor),setTimeout(function(){anchor.click(),jQuery(".download-js-link").remove(),winMode===!0&&setTimeout(function(){self.URL.revokeObjectURL(anchor.href)},250)},66),!0;if(/(Version)\/(\d+)\.(\d+)(?:\.(\d+))?.*Safari\//.test(navigator.userAgent))return url=url.replace(/^data:([\w\/\-\+]+)/,defaultMime),window.open(url)||confirm("Displaying New Document\n\nUse Save As... to download, then click back to return to this page.")&&(location.href=url),!0;var f=document.createElement("iframe");document.body.appendChild(f),winMode||(url="data:"+url.replace(/^data:([\w\/\-\+]+)/,defaultMime)),f.src=url,setTimeout(function(){document.body.removeChild(f)},333)}var blob,reader,self=window,defaultMime="application/octet-stream",mimeType=strMimeType||defaultMime,payload=data,url=!strFileName&&!strMimeType&&payload,anchor=document.createElement("a"),toString=function(a){return String(a)},myBlob=self.Blob||self.MozBlob||self.WebKitBlob||toString,fileName=strFileName||"download";if(myBlob=myBlob.call?myBlob.bind(self):Blob,"true"===String(this)&&(payload=[payload,mimeType],mimeType=payload[0],payload=payload[1]),url&&url.length<2048&&(fileName=url.split("/").pop().split("?")[0],anchor.href=url,anchor.href.indexOf(url)!==-1)){var ajax=new XMLHttpRequest;return ajax.open("GET",url,!0),ajax.responseType="blob",ajax.onload=function(e){download(e.target.response,fileName,defaultMime)},setTimeout(function(){ajax.send()},0),ajax}if(/^data\:[\w+\-]+\/[\w+\-]+[,;]/.test(payload)){if(!(payload.length>2096103.424&&myBlob!==toString))return navigator.msSaveBlob?navigator.msSaveBlob(dataUrlToBlob(payload),fileName):saver(payload);payload=dataUrlToBlob(payload),mimeType=payload.type||defaultMime}if(blob=payload instanceof myBlob?payload:new myBlob([payload],{type:mimeType}),navigator.msSaveBlob)return navigator.msSaveBlob(blob,fileName);if(self.URL)saver(self.URL.createObjectURL(blob),!0);else{if("string"==typeof blob||blob.constructor===toString)try{return saver("data:"+mimeType+";base64,"+self.btoa(blob))}catch(y){return saver("data:"+mimeType+","+encodeURIComponent(blob))}reader=new FileReader,reader.onload=function(e){saver(this.result)},reader.readAsDataURL(blob)}return!0}}),angular.module("ui.sortable",[]).value("uiSortableConfig",{items:"> [ng-repeat],> [data-ng-repeat],> [x-ng-repeat]"}).directive("uiSortable",["uiSortableConfig","$timeout","$log",function(uiSortableConfig,$timeout,$log){return{require:"?ngModel",scope:{ngModel:"=",uiSortable:"="},link:function(scope,element,attrs,ngModel){function combineCallbacks(first,second){var firstIsFunc="function"==typeof first,secondIsFunc="function"==typeof second;return firstIsFunc&&secondIsFunc?function(){first.apply(this,arguments),second.apply(this,arguments)}:secondIsFunc?second:first}function getSortableWidgetInstance(element){var data=element.data("ui-sortable");return data&&"object"==typeof data&&"ui-sortable"===data.widgetFullName?data:null}function patchSortableOption(key,value){return callbacks[key]?("stop"===key&&(value=combineCallbacks(value,function(){scope.$apply()}),value=combineCallbacks(value,afterStop)),value=combineCallbacks(callbacks[key],value)):wrappers[key]&&(value=wrappers[key](value)),value||"items"!==key&&"ui-model-items"!==key||(value=uiSortableConfig.items),value}function patchUISortableOptions(newVal,oldVal,sortableWidgetInstance){function addDummyOptionKey(value,key){key in opts||(opts[key]=null)}angular.forEach(callbacks,addDummyOptionKey);var optsDiff=null;if(oldVal){var defaultOptions;angular.forEach(oldVal,function(oldValue,key){if(!(newVal&&key in newVal)){if(key in directiveOpts)return void("ui-floating"===key?opts[key]="auto":opts[key]=patchSortableOption(key,void 0));defaultOptions||(defaultOptions=angular.element.ui.sortable().options);var defaultValue=defaultOptions[key];defaultValue=patchSortableOption(key,defaultValue),optsDiff||(optsDiff={}),optsDiff[key]=defaultValue,opts[key]=defaultValue}})}return angular.forEach(newVal,function(value,key){return key in directiveOpts?("ui-floating"!==key||value!==!1&&value!==!0||!sortableWidgetInstance||(sortableWidgetInstance.floating=value),void(opts[key]=patchSortableOption(key,value))):(value=patchSortableOption(key,value),optsDiff||(optsDiff={}),optsDiff[key]=value,void(opts[key]=value))}),optsDiff}function getPlaceholderElement(element){var placeholder=element.sortable("option","placeholder");if(placeholder&&placeholder.element&&"function"==typeof placeholder.element){var result=placeholder.element();return result=angular.element(result)}return null}function getPlaceholderExcludesludes(element,placeholder){var notCssSelector=opts["ui-model-items"].replace(/[^,]*>/g,""),excludes=element.find('[class="'+placeholder.attr("class")+'"]:not('+notCssSelector+")");return excludes}function hasSortingHelper(element,ui){var helperOption=element.sortable("option","helper");return"clone"===helperOption||"function"==typeof helperOption&&ui.item.sortable.isCustomHelperUsed()}function getSortingHelper(element,ui,savedNodes){var result=null;return hasSortingHelper(element,ui)&&"parent"===element.sortable("option","appendTo")&&(result=savedNodes.last()),result}function isFloating(item){return/left|right/.test(item.css("float"))||/inline|table-cell/.test(item.css("display"))}function getElementScope(elementScopes,element){for(var result=null,i=0;i<elementScopes.length;i++){var x=elementScopes[i];if(x.element[0]===element[0]){result=x.scope;break}}return result}function afterStop(e,ui){ui.item.sortable._destroy()}function getItemIndex(item){return item.parent().find(opts["ui-model-items"]).index(item)}function wireUp(){scope.$watchCollection("ngModel",function(){$timeout(function(){getSortableWidgetInstance(element)&&element.sortable("refresh")},0,!1)}),callbacks.start=function(e,ui){if("auto"===opts["ui-floating"]){var siblings=ui.item.siblings(),sortableWidgetInstance=getSortableWidgetInstance(angular.element(e.target));sortableWidgetInstance.floating=isFloating(siblings)}var index=getItemIndex(ui.item);ui.item.sortable={model:ngModel.$modelValue[index],index:index,source:ui.item.parent(),sourceModel:ngModel.$modelValue,cancel:function(){ui.item.sortable._isCanceled=!0},isCanceled:function(){return ui.item.sortable._isCanceled},isCustomHelperUsed:function(){return!!ui.item.sortable._isCustomHelperUsed},_isCanceled:!1,_isCustomHelperUsed:ui.item.sortable._isCustomHelperUsed,_destroy:function(){angular.forEach(ui.item.sortable,function(value,key){ui.item.sortable[key]=void 0})}}},callbacks.activate=function(e,ui){savedNodes=element.contents();var placeholder=getPlaceholderElement(element);if(placeholder&&placeholder.length){var excludes=getPlaceholderExcludesludes(element,placeholder);savedNodes=savedNodes.not(excludes)}var connectedSortables=ui.item.sortable._connectedSortables||[];connectedSortables.push({element:element,scope:scope}),ui.item.sortable._connectedSortables=connectedSortables},callbacks.update=function(e,ui){if(!ui.item.sortable.received){ui.item.sortable.dropindex=getItemIndex(ui.item);var droptarget=ui.item.parent();ui.item.sortable.droptarget=droptarget;var droptargetScope=getElementScope(ui.item.sortable._connectedSortables,droptarget);ui.item.sortable.droptargetModel=droptargetScope.ngModel,element.sortable("cancel")}var sortingHelper=!ui.item.sortable.received&&getSortingHelper(element,ui,savedNodes);sortingHelper&&sortingHelper.length&&(savedNodes=savedNodes.not(sortingHelper)),savedNodes.appendTo(element),ui.item.sortable.received&&(savedNodes=null),ui.item.sortable.received&&!ui.item.sortable.isCanceled()&&scope.$apply(function(){ngModel.$modelValue.splice(ui.item.sortable.dropindex,0,ui.item.sortable.moved)})},callbacks.stop=function(e,ui){if(!ui.item.sortable.received&&"dropindex"in ui.item.sortable&&!ui.item.sortable.isCanceled())scope.$apply(function(){ngModel.$modelValue.splice(ui.item.sortable.dropindex,0,ngModel.$modelValue.splice(ui.item.sortable.index,1)[0])});else if((!("dropindex"in ui.item.sortable)||ui.item.sortable.isCanceled())&&!angular.equals(element.contents(),savedNodes)){var sortingHelper=getSortingHelper(element,ui,savedNodes);sortingHelper&&sortingHelper.length&&(savedNodes=savedNodes.not(sortingHelper)),savedNodes.appendTo(element)}savedNodes=null},callbacks.receive=function(e,ui){ui.item.sortable.received=!0},callbacks.remove=function(e,ui){"dropindex"in ui.item.sortable||(element.sortable("cancel"),ui.item.sortable.cancel()),ui.item.sortable.isCanceled()||scope.$apply(function(){ui.item.sortable.moved=ngModel.$modelValue.splice(ui.item.sortable.index,1)[0]})},wrappers.helper=function(inner){return inner&&"function"==typeof inner?function(e,item){var oldItemSortable=item.sortable,index=getItemIndex(item);item.sortable={model:ngModel.$modelValue[index],index:index,source:item.parent(),sourceModel:ngModel.$modelValue,_restore:function(){angular.forEach(item.sortable,function(value,key){item.sortable[key]=void 0}),item.sortable=oldItemSortable}};var innerResult=inner.apply(this,arguments);return item.sortable._restore(),item.sortable._isCustomHelperUsed=item!==innerResult,innerResult}:inner},scope.$watchCollection("uiSortable",function(newVal,oldVal){var sortableWidgetInstance=getSortableWidgetInstance(element);if(sortableWidgetInstance){var optsDiff=patchUISortableOptions(newVal,oldVal,sortableWidgetInstance);optsDiff&&element.sortable("option",optsDiff)}},!0),patchUISortableOptions(opts)}function init(){ngModel?wireUp():$log.info("ui.sortable: ngModel not provided!",element),element.sortable(opts)}function initIfEnabled(){return(!scope.uiSortable||!scope.uiSortable.disabled)&&(init(),initIfEnabled.cancelWatcher(),initIfEnabled.cancelWatcher=angular.noop,!0)}var savedNodes,opts={},directiveOpts={"ui-floating":void 0,"ui-model-items":uiSortableConfig.items},callbacks={receive:null,remove:null,start:null,stop:null,update:null},wrappers={helper:null};return angular.extend(opts,directiveOpts,uiSortableConfig,scope.uiSortable),angular.element.fn&&angular.element.fn.jquery?(initIfEnabled.cancelWatcher=angular.noop,void(initIfEnabled()||(initIfEnabled.cancelWatcher=scope.$watch("uiSortable.disabled",initIfEnabled)))):void $log.error("ui.sortable: jQuery should be included before AngularJS!")}}}]);var CRYPTO={paranoia_level:null,PASSWORD:{generate:function(length,callback,progress,start_string){return sjcl.random.isReady(paranoia_level)?(null==start_string&&(start_string=""),start_string.length<length?(start_string+=CRYPTO.RANDOM.getRandomASCII(),null!=progress&&progress(start_string.length/length*100),void setTimeout(this.generate(length,callback,progress,start_string),100)):(callback(start_string),void(null!=progress&&progress(100)))):void setTimeout(this.generate(length,callback,progress,start_string),500)},logRepeatedCharCount:function(str){var chars=[];for(i=0;i<str.length;i++)chars[str.charAt(i)]=null==chars[str.charAt(i)]?0:chars[str.charAt(i)]+1;return chars}},RANDOM:{getRandomASCII:function(){for(var ret="";ret.length<4;){var int=sjcl.random.randomWords(1,paranoia_level);int=int[0];var tmp=this._isASCII((4278190080&int)>>24);tmp&&(ret+=tmp),tmp=this._isASCII((16711680&int)>>16),tmp&&(ret+=tmp),tmp=this._isASCII((65280&int)>>8),tmp&&(ret+=tmp),tmp=this._isASCII(255&int),tmp&&(ret+=tmp)}return ret},_isASCII:function(data){return data>31&&data<127&&String.fromCharCode(data)}},initEngines:function(default_paranoia){paranoia_level=default_paranoia||10,sjcl.random.setDefaultParanoia(this.paranoia_level),sjcl.random.startCollectors(),console.warn("Crypto stuff initialized")}};CRYPTO.initEngines(),function(){angular.module("passmanApp",["ngAnimate","ngCookies","ngResource","ngRoute","ngSanitize","ngTouch","templates-main","LocalStorageModule","offClick","ngPasswordMeter","ngclipboard","xeditable","ngTagsInput","angularjs-datetime-picker","ui.sortable","pascalprecht.translate"]).config(function($routeProvider){$routeProvider.when("/",{templateUrl:"views/vaults.html",controller:"VaultCtrl"}).when("/vault/:vault_id",{templateUrl:"views/show_vault.html",controller:"CredentialCtrl"}).when("/vault/:vault_id/new",{templateUrl:"views/edit_credential.html",controller:"CredentialEditCtrl"}).when("/vault/:vault_id/edit/:credential_id",{templateUrl:"views/edit_credential.html",controller:"CredentialEditCtrl"}).when("/vault/:vault_id/:credential_id/share",{templateUrl:"views/share_credential.html",controller:"ShareCtrl"}).when("/vault/:vault_id/:credential_id/revisions",{templateUrl:"views/credential_revisions.html",controller:"RevisionCtrl"}).when("/vault/:vault_id/settings",{templateUrl:"views/settings.html",controller:"SettingsCtrl"}).otherwise({redirectTo:"/"})}).config(["$httpProvider",function($httpProvider){$httpProvider.defaults.headers.common.requesttoken=oc_requesttoken}]).config(function(localStorageServiceProvider){localStorageServiceProvider.setNotify(!0,!0)}).config(function($translateProvider){$translateProvider.useSanitizeValueStrategy("sanitize"),$translateProvider.useUrlLoader(OC.generateUrl("/apps/passman/api/v2/language")),$translateProvider.preferredLanguage("en")}),jQuery(document).ready(function(){var findItemByID=function(id){var credentials,foundItem=!1;return credentials=angular.element("#app-content-wrapper").scope().credentials,angular.forEach(credentials,function(credential){credential.credential_id===id&&(foundItem=credential)}),foundItem};jQuery(document).on("click",".undoDelete",function(){var credential=findItemByID($(this).attr("data-item-id"));angular.element("#app-content-wrapper").scope().recoverCredential(credential),angular.element("#app-content-wrapper").scope().$apply()}),jQuery(document).on("click",".undoRestore",function(){var credential=findItemByID($(this).attr("data-item-id"));angular.element("#app-content-wrapper").scope().deleteCredential(credential),angular.element("#app-content-wrapper").scope().$apply()})})}(),function(){angular.module("passmanApp").filter("as",function($parse){return function(value,context,path){return $parse(path).assign(context,value)}})}(),function(){angular.module("passmanApp").filter("bytes",function(){return function(bytes,precision){if(isNaN(parseFloat(bytes))||!isFinite(bytes))return"-";"undefined"==typeof precision&&(precision=1);var units=["bytes","kB","MB","GB","TB","PB"],number=Math.floor(Math.log(bytes)/Math.log(1024));return(bytes/Math.pow(1024,Math.floor(number))).toFixed(precision)+" "+units[number]}})}(),function(){angular.module("passmanApp").filter("credentialSearch",function(){return function(credentials,filter){var _credentials=[];if(credentials){if(!filter)return credentials;if(""===filter.filterText.trim())return credentials;for(var ci=0;ci<credentials.length;ci++)for(var c=credentials[ci],f=0;f<filter.fields.length;f++){var field=filter.fields[f];if("string"==typeof c[field]){if(c[field].toLowerCase().indexOf(filter.filterText.toLowerCase())>=0){_credentials.push(c);break}}else{var t=JSON.stringify(c[field]);if(t.indexOf(filter.filterText)>=0){_credentials.push(c);break}}}return _credentials}return[]}})}(),function(){angular.module("passmanApp").filter("propsFilter",function(){return function(items,props){var out=[];if(angular.isArray(items)){var keys=Object.keys(props);items.forEach(function(item){for(var itemMatches=!1,i=0;i<keys.length;i++){var prop=keys[i],text=props[prop].toLowerCase();if(item[prop].toString().toLowerCase().indexOf(text)!==-1){itemMatches=!0;break}}itemMatches&&out.push(item)})}else out=items;return out}})}(),function(){angular.module("passmanApp").filter("range",function(){return function(val,range){range=parseInt(range);for(var i=0;i<range;i++)val.push(i);return val}})}(),function(){angular.module("passmanApp").filter("tagFilter",function(){return function(credentials,tags){var _credentials=[];if(tags.length>0)for(var ci=0;ci<credentials.length;ci++){for(var c=credentials[ci],matches=0,ct=0;ct<c.tags_raw.length;ct++){var t=c.tags_raw[ct];tags.indexOf(t.text)!==-1&&matches++}matches===tags.length&&_credentials.push(c)}return 0===tags.length&&(_credentials=credentials),_credentials}})}(),function(){angular.module("passmanApp").service("CacheService",["localStorageService","EncryptService",function(localStorageService,EncryptService){return{get:function(name){return EncryptService.decryptString(localStorageService.get(name))},set:function(key,value){value=EncryptService.encryptString(value),localStorageService.set(key,value)}}}])}(),function(){angular.module("passmanApp").service("CredentialService",["$http","EncryptService","VaultService","FileService",function($http,EncryptService,VaultService,FileService){var credential={credential_id:null,guid:null,vault_id:null,label:null,description:null,created:null,changed:null,tags:[],email:null,username:null,password:null,url:null,favicon:null,renew_interval:null,expire_time:0,delete_time:0,files:[],custom_fields:[],otp:{},hidden:!1},_encryptedFields=["description","username","password","files","custom_fields","otp","email","tags","url"];return{newCredential:function(){return angular.copy(credential)},createCredential:function(credential){for(var _credential=angular.copy(credential),i=0;i<_encryptedFields.length;i++){var field=_encryptedFields[i],fieldValue=angular.copy(credential[field]);_credential[field]=EncryptService.encryptString(JSON.stringify(fieldValue))}_credential.expire_time=new Date(angular.copy(credential.expire_time)).getTime()/1e3;var queryUrl=OC.generateUrl("apps/passman/api/v2/credentials");return $http.post(queryUrl,_credential).then(function(response){return response.data?response.data:response})},getEncryptedFields:function(){return _encryptedFields},updateCredential:function(credential,skipEncyption){var _credential=angular.copy(credential);if(!skipEncyption)for(var i=0;i<_encryptedFields.length;i++){var field=_encryptedFields[i],fieldValue=angular.copy(credential[field]);_credential[field]=EncryptService.encryptString(JSON.stringify(fieldValue))}_credential.expire_time=new Date(angular.copy(credential.expire_time)).getTime()/1e3;var queryUrl=OC.generateUrl("apps/passman/api/v2/credentials/"+credential.guid);return $http.patch(queryUrl,_credential).then(function(response){return response.data?response.data:response})},getCredential:function(guid){var queryUrl=OC.generateUrl("apps/passman/api/v2/credentials/"+guid);return $http.get(queryUrl).then(function(response){return response.data?response.data:response})},destroyCredential:function(guid){var queryUrl=OC.generateUrl("apps/passman/api/v2/credentials/"+guid);return $http.delete(queryUrl).then(function(response){return response.data?response.data:response})},encryptCredential:function(credential,key){for(var i=0;i<_encryptedFields.length;i++){var field=_encryptedFields[i],fieldValue=angular.copy(credential[field]);credential[field]=EncryptService.encryptString(JSON.stringify(fieldValue),key)}return credential},decryptCredential:function(credential,key){for(var i=0;i<_encryptedFields.length;i++){var field_decrypted_value,field=_encryptedFields[i],fieldValue=angular.copy(credential[field]);try{field_decrypted_value=EncryptService.decryptString(fieldValue,key)}catch(e){throw e}try{credential[field]=JSON.parse(field_decrypted_value)}catch(e){console.warn("Field"+field+" in "+credential.label+" could not be parsed! Value:"+fieldValue)}}return credential},getRevisions:function(guid){var queryUrl=OC.generateUrl("apps/passman/api/v2/credentials/"+guid+"/revision");return $http.get(queryUrl).then(function(response){return response.data?response.data:response})},updateRevision:function(revision){var _revision=angular.copy(revision);_revision.credential_data=window.btoa(JSON.stringify(_revision.credential_data));var queryUrl=OC.generateUrl("apps/passman/api/v2/credentials/"+revision.credential_data.guid+"/revision/"+revision.revision_id);return $http.patch(queryUrl,_revision).then(function(response){return response.data?response.data:response})},deleteRevision:function(credential_guid,revision_id){var queryUrl=OC.generateUrl("apps/passman/api/v2/credentials/"+credential_guid+"/revision/"+revision_id);return $http.delete(queryUrl).then(function(response){return response.data?response.data:response})},reencryptCredential:function(credential_guid,old_password,new_password){var service=this,progress_datatype=function(current,total,process){this.process=process,this.current=current,this.total=total,this.calculated=current/total*100},promise_credential_update=function(){service.getCredential(credential_guid).then(function(credential){this.parent.plain_credential=service.decryptCredential(credential,this.parent.old_password);var tmp=angular.copy(this.parent.plain_credential);this.parent.new_credential_cryptogram=service.encryptCredential(tmp,this.parent.new_password),this.call_progress(new progress_datatype(1,2,"credential")),this.parent.new_credential_cryptogram.skip_revision=!0,service.updateCredential(this.parent.new_credential_cryptogram,!0).then(function(){this.call_progress(new progress_datatype(2,2,"credential")),this.call_then({plain_text:this.parent.plain_credential,cryptogram:this.parent.new_credential_cryptogram})}.bind(this))}.bind(this))},promise_files_update=function(){this.total=2*this.parent.plain_credential.files.length,this.current=0;for(var i=0;i<this.parent.plain_credential.files.length;i++){var _file=this.parent.plain_credential.files[i];FileService.getFile(_file).then(function(fileData){fileData.filename=EncryptService.decryptString(fileData.filename,this.parent.old_password),fileData.file_data=EncryptService.decryptString(fileData.file_data,this.parent.old_password),this.current++,this.call_progress(new progress_datatype(this.current,this.total,"files")),FileService.updateFile(fileData,this.parent.new_password).then(function(){this.current++,this.call_progress(new progress_datatype(this.current,this.total,"files")),this.current===this.total&&this.call_then("All files has been updated")}.bind(this))}.bind(this))}0===this.parent.plain_credential.files.length&&(this.call_progress(new progress_datatype(0,0,"files")),this.call_then("No files to update"))},promise_revisions_update=function(){service.getRevisions(this.parent.plain_credential.guid).then(function(revisions){this.total=2*revisions.length,this.upload=0,this.current=0,this.revisions=revisions;var revision_workload=function(){if(0===this.revisions.length)return this.call_progress(new progress_datatype(0,0,"revisions")),void this.call_then("No history to update");var _revision=revisions[this.current];_revision.credential_data=service.decryptCredential(_revision.credential_data,this.parent.old_password),_revision.credential_data=service.encryptCredential(_revision.credential_data,this.parent.new_password),this.current++,this.call_progress(new progress_datatype(this.current+this.upload,this.total,"revisions")),service.updateRevision(_revision).then(function(){this.upload++,this.call_progress(new progress_datatype(this.upload+this.current,this.total,"revisions")),this.current+this.upload===this.total&&this.call_then("History updated")}.bind(this)),this.current!==this.total/2&&setTimeout(revision_workload.bind(this),1)};setTimeout(revision_workload.bind(this),1)}.bind(this))},promise_workload=function(){this.old_password=angular.copy(old_password),this.new_password=angular.copy(new_password),this.promises=0;var master_promise=this,password_data=function(){this.old_password=master_promise.old_password,this.new_password=master_promise.new_password,this.plain_credential=master_promise.plain_credential};this.credential_data={},new C_Promise(promise_credential_update,new password_data).progress(function(data){master_promise.call_progress(data)}).then(function(data){console.warn("End credential update"),master_promise.plain_credential=data.plain_text,master_promise.promises++,master_promise.credential_data=data,new C_Promise(promise_files_update,new password_data).progress(function(data){master_promise.call_progress(data)}).then(function(){console.warn("End files update"),master_promise.promises--,0===master_promise.promises&&master_promise.call_then(master_promise.credential_data)}),master_promise.promises++,new C_Promise(promise_revisions_update,new password_data).progress(function(data){master_promise.call_progress(data)}).then(function(){console.warn("End revisions update"),master_promise.promises--,0===master_promise.promises&&master_promise.call_then(master_promise.credential_data)})})};return new C_Promise(promise_workload)}}}])}(),function(){angular.module("passmanApp").service("EncryptService",["VaultService",function(VaultService){var encryption_config={adata:"",iter:1e3,ks:256,mode:"ccm",ts:64};return{encryptString:function(string,_key){_key||(_key=VaultService.getActiveVault().vaultKey);var rp={},ct=sjcl.encrypt(_key,string,encryption_config,rp);return window.btoa(ct)},decryptString:function(ciphertext,_key){_key||(_key=VaultService.getActiveVault().vaultKey),ciphertext=window.atob(ciphertext);var rp={};try{return sjcl.decrypt(_key,ciphertext,encryption_config,rp)}catch(e){throw e}}}}])}(),function(){angular.module("passmanApp").service("FileService",["$http","EncryptService",function($http,EncryptService){return{uploadFile:function(file,key){var queryUrl=OC.generateUrl("apps/passman/api/v2/file"),_file=angular.copy(file);_file.filename=EncryptService.encryptString(_file.filename,key);
var data=EncryptService.encryptString(angular.copy(file.data),key);return _file.data=data,$http.post(queryUrl,_file).then(function(response){return response.data?response.data:response})},deleteFile:function(file){var queryUrl=OC.generateUrl("apps/passman/api/v2/file/"+file.file_id),_file=angular.copy(file);return $http.delete(queryUrl,_file).then(function(response){return response.data?response.data:response})},getFile:function(file){var queryUrl=OC.generateUrl("apps/passman/api/v2/file/"+file.file_id),_file=angular.copy(file);return $http.get(queryUrl,_file).then(function(response){return response.data?"[object Array]"===Object.prototype.toString.call(response.data)?response.data.pop():response.data:response})},updateFile:function(file,key){var queryUrl=OC.generateUrl("apps/passman/api/v2/file/"+file.file_id),_file=angular.copy(file);_file.filename=EncryptService.encryptString(_file.filename,key);var data=EncryptService.encryptString(angular.copy(file.file_data),key);return _file.file_data=data,$http.patch(queryUrl,_file).then(function(response){return response.data?response.data:response})},dataURItoBlob:function(dataURI,ftype){var byteString,ab,ia,bb,i;for(byteString=atob(dataURI.split(",")[1]),ab=new ArrayBuffer(byteString.length),ia=new Uint8Array(ab),i=0;i<byteString.length;i++)ia[i]=byteString.charCodeAt(i);return bb=new Blob([ab],{type:ftype}),URL.createObjectURL(bb)}}}])}(),function(){angular.module("passmanApp").service("NotificationService",["$timeout",function($timeout){var to;return{showNotification:function(text,time,closeCallback){var notification=OC.Notification.showHtml(text);return to=$timeout(function(){OC.Notification.hide(notification,closeCallback)},time),notification},hideNotification:function(notification){$timeout.cancel(to),OC.Notification.hide(notification)},hideAll:function(){OC.Notification.hide()}}}])}(),function(){angular.module("passmanApp").service("SettingsService",["localStorageService",function(localStorageService){var settings={defaultVault:null,defaultVaultPass:null},cookie=localStorageService.get("settings");return settings=angular.merge(settings,cookie),{getSettings:function(){return settings},getSetting:function(name){return settings[name]},setSetting:function(name,value){settings[name]=value,localStorageService.set("settings",settings)}}}])}(),function(){angular.module("passmanApp").service("ShareService",["$http","VaultService","EncryptService","CredentialService",function($http,VaultService,EncryptService,CredentialService){var paranoia_level=10;return sjcl.random.setDefaultParanoia(paranoia_level),sjcl.random.startCollectors(),{search:function(string){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/search");return $http.post(queryUrl,{search:string}).then(function(response){return response.data?response.data:response})},shareWithUser:function(credential,target_user_data){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/share");return $http.post(queryUrl,{item_id:credential.credential_id,item_guid:credential.guid,permissions:target_user_data.accessLevel,vaults:target_user_data.vaults})},getVaultsByUser:function(userId){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/vaults/"+userId);return $http.get(queryUrl,{search:userId}).then(function(response){if(response.data){for(var i=0;i<response.data.length;i++)response.data[i].public_sharing_key=forge.pki.publicKeyFromPem(response.data[i].public_sharing_key);return response.data}return response})},getPendingRequests:function(){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/pending");return $http.get(queryUrl).then(function(response){if(response.data)return response.data})},saveSharingRequest:function(request,crypted_shared_key){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/save");return $http.post(queryUrl,{item_guid:request.item_guid,target_vault_guid:request.target_vault_guid,final_shared_key:crypted_shared_key}).then(function(response){return response.data})},declineSharingRequest:function(request){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/decline/"+request.req_id);return $http.delete(queryUrl).then(function(response){return response.data})},unshareCredential:function(credential){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/credential/"+credential.guid);return $http.delete(queryUrl).then(function(response){return response.data})},unshareCredentialFromUser:function(credential,user_id){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/credential/"+credential.guid+"/"+user_id);return $http.delete(queryUrl).then(function(response){return response.data})},createPublicSharedCredential:function(shareObj){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/public");return $http.post(queryUrl,shareObj).then(function(response){return response.data})},getPublicSharedCredential:function(credential_guid){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/credential/"+credential_guid+"/public");return $http.get(queryUrl).then(function(response){return response.data?response:response},function(result){return result})},getSharedCredentialACL:function(credential){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/credential/"+credential.guid+"/acl");return $http.get(queryUrl).then(function(response){return response.data?response.data:response},function(result){return result})},updateCredentialAcl:function(credential,acl){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/credential/"+credential.guid+"/acl");return $http.patch(queryUrl,acl).then(function(response){return response.data})},getCredendialsSharedWithUs:function(vault_guid){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/vault/"+vault_guid+"/get");return $http.get(queryUrl).then(function(response){if(response.data)return response.data})},downloadSharedFile:function(credential,file){var queryUrl=OC.generateUrl("apps/passman/api/v2/sharing/credential/"+credential.guid+"/file/"+file.guid);return $http.get(queryUrl).then(function(response){if(response.data)return response.data})},encryptSharedCredential:function(credential,sharedKey){var _credential=angular.copy(credential);_credential.shared_key=EncryptService.encryptString(sharedKey);for(var encrypted_fields=CredentialService.getEncryptedFields(),i=0;i<encrypted_fields.length;i++){var field=encrypted_fields[i],fieldValue=angular.copy(credential[field]);_credential[field]=EncryptService.encryptString(JSON.stringify(fieldValue),sharedKey)}return _credential},decryptSharedCredential:function(credential,sharedKey){for(var _credential=angular.copy(credential),encrypted_fields=CredentialService.getEncryptedFields(),i=0;i<encrypted_fields.length;i++){var field_decrypted_value,field=encrypted_fields[i],fieldValue=angular.copy(_credential[field]);if(_credential.hasOwnProperty(field)){try{field_decrypted_value=EncryptService.decryptString(fieldValue,sharedKey)}catch(e){throw e}try{_credential[field]=JSON.parse(field_decrypted_value)}catch(e){throw console.warn("Field"+field+" in "+_credential.label+" could not be parsed! Value:"+fieldValue),e}}}return _credential},generateRSAKeys:function(key_length){var p=new C_Promise(function(){var state=forge.pki.rsa.createKeyPairGenerationState(key_length,65537),step=function(){forge.pki.rsa.stepKeyPairGenerationState(state,100)?this.call_then(state.keys):(null!==state.p?this.call_progress(50):this.call_progress(0),setTimeout(step.bind(this),1))};setTimeout(step.bind(this),100)});return p},generateSharedKey:function(size){return size=size||20,new C_Promise(function(){var t=this;CRYPTO.PASSWORD.generate(size,function(pass){t.call_then(pass)},function(progress){t.call_progress(progress)})})},rsaKeyPairToPEM:function(keypair){return{publicKey:forge.pki.publicKeyToPem(keypair.publicKey),privateKey:forge.pki.privateKeyToPem(keypair.privateKey)}},getSharingKeys:function(){var vault=VaultService.getActiveVault();return{private_sharing_key:EncryptService.decryptString(angular.copy(vault.private_sharing_key)),public_sharing_key:vault.public_sharing_key}},rsaPrivateKeyFromPEM:function(private_pem){return forge.pki.privateKeyFromPem(private_pem)},rsaPublicKeyFromPEM:function(public_pem){return forge.pki.publicKeyFromPem(public_pem)},cypherRSAStringWithPublicKeyBulkAsync:function(vaults,string){var workload=function(){if(this.current_index<this.vaults.length>0&&this.vaults.length>0){var _vault=angular.copy(this.vaults[this.current_index]);_vault.key=forge.util.encode64(_vault.public_sharing_key.encrypt(this.string)),this.data.push(_vault),this.current_index++,this.call_progress(this.current_index),setTimeout(workload.bind(this),1)}else this.call_then(this.data)};return new C_Promise(function(){this.data=[],this.vaults=vaults,this.string=string,this.current_index=0,setTimeout(workload.bind(this),0)})}}}])}(),function(){angular.module("passmanApp").service("TagService",["$filter",function($filter){var _tags=[];return{getTags:function(){return _tags},searchTag:function(string){return $filter("filter")(_tags,{text:string})},addTags:function(tags){for(var i=0;i<tags.length;i++)tags[i].text&&0===$filter("filter")(_tags,{text:tags[i].text}).length&&_tags.push(tags[i])}}}])}(),function(){angular.module("passmanApp").service("VaultService",["$http",function($http){var _activeVault,_this=this,service={getVaults:function(){var queryUrl=OC.generateUrl("apps/passman/api/v2/vaults");return $http.get(queryUrl).then(function(response){return response.data?response.data:response})},setActiveVault:function(vault){_activeVault=angular.copy(vault)},getActiveVault:function(){return _activeVault},getVaultSetting:function(key,default_value){return _activeVault.vault_settings&&void 0!==_activeVault.vault_settings[key]?_activeVault.vault_settings[key]:default_value},setVaultSetting:function(key,value){return!!_activeVault.vault_settings&&(_activeVault.vault_settings[key]=value,void _this.updateVault(_activeVault))},createVault:function(vaultName){var queryUrl=OC.generateUrl("apps/passman/api/v2/vaults");return $http.post(queryUrl,{vault_name:vaultName}).then(function(response){return response.data?response.data:response})},getVault:function(vault){var queryUrl=OC.generateUrl("apps/passman/api/v2/vaults/"+vault.guid);return $http.get(queryUrl).then(function(response){return response.data?(response.data.vault_settings?response.data.vault_settings=JSON.parse(window.atob(response.data.vault_settings)):response.data.vault_settings={},response.data):response})},updateVault:function(vault){var _vault=angular.copy(vault);delete _vault.defaultVaultPass,delete _vault.defaultVault,delete _vault.vaultKey,_vault.vault_settings=window.btoa(JSON.stringify(_vault.vault_settings));var queryUrl=OC.generateUrl("apps/passman/api/v2/vaults/"+_vault.guid);return $http.patch(queryUrl,_vault).then(function(response){return response.data?response.data:response})},updateSharingKeys:function(vault){var queryUrl=OC.generateUrl("apps/passman/api/v2/vaults/"+vault.guid+"/sharing-keys");return $http.post(queryUrl,vault).then(function(response){return response.data?response.data:response})},deleteVault:function(vault){var queryUrl=OC.generateUrl("apps/passman/api/v2/vaults/"+vault.vault_id);return $http.delete(queryUrl).then(function(response){return response.data?response.data:response})}};return service}])}(),function(){angular.module("passmanApp").factory("SharingACL",function(){function ACL(acl_permission){this.permission=acl_permission}return ACL.prototype.permissions={READ:1,WRITE:2,FILES:4,HISTORY:8,OWNER:128},ACL.prototype.hasPermission=function(permission){return permission===(this.permission&permission)},ACL.prototype.addPermission=function(permission){this.permission=this.permission|permission},ACL.prototype.removePermission=function(permission){this.permission=this.permission&~permission},ACL.prototype.togglePermission=function(permission){this.permission^=permission},ACL.prototype.getAccessLevel=function(){return this.permission},ACL})}(),function(){angular.module("passmanApp").directive("autoScroll",function(){return{restrict:"A",scope:{autoScroll:"="},link:function(scope){scope.$watch("autoScroll",function(){$("#import_log").scrollTop($("#import_log")[0].scrollHeight)},!0)}}})}(),function(){angular.module("passmanApp").directive("clearBtn",["$parse",function($parse){return{link:function(scope,elm,attr){elm.wrap("<div style='position: relative'></div>");var btn="<span id="+Math.round(1e9*Math.random())+' class="searchclear ng-hide fa fa-times-circle-o"></span>',angularBtn=angular.element(btn);elm.after(angularBtn),angularBtn.on("click",function(){elm.val("").trigger("change"),$parse(attr.ngModel).assign(scope,""),scope.$apply()}),elm.bind("focus keyup change paste propertychange",function(){elm.val()&&elm.val().length>0?angularBtn.removeClass("ng-hide"):angularBtn.addClass("ng-hide")})}}}])}(),function(){angular.module("passmanApp").directive("selectOnClick",["$window",function($window){return{restrict:"A",link:function(scope,element){element.on("click",function(){$window.getSelection().toString()||this.setSelectionRange(0,this.value.length)})}}}])}(),function(){angular.module("passmanApp").directive("colorFromString",[function(){return{restrict:"A",scope:{string:"=colorFromString"},link:function(scope,el){function genColor(str){for(var hash=0,i=0;i<str.length;i++)hash=str.charCodeAt(i)+((hash<<5)-hash);var c=(16777215&hash).toString(16).toUpperCase();return"#"+"00000".substring(0,6-c.length)+c}scope.$watch("string",function(){jQuery(el).css("border-color",genColor(scope.string))})}}}])}(),function(){angular.module("passmanApp").directive("credentialField",["$timeout","$translate",function($timeout,$translate){return{scope:{value:"=value",secret:"=secret"},restrict:"A",replace:"true",template:'<span class="credential_field"><div class="value" ng-class="{\'ellipsis\': isLink}"><span ng-repeat="n in [] | range:value.length" ng-if="!valueVisible">*</span><span ng-if="valueVisible">{{value}}</span></div><div class="tools"><div class="cell" ng-if="toggle" tooltip="tggltxt" ng-click="toggleVisibility()"><i class="fa" ng-class="{\'fa-eye\': !valueVisible, \'fa-eye-slash\': valueVisible }"></i></div><div class="cell" ng-if="isLink"><a ng-href="{{value}}" target="_blank"><i tooltip="\'Open in new window\'" class="link fa fa-external-link"></i></a></div><div class="cell" ngclipboard-success="onSuccess(e);" ngclipboard-error="onError(e);" ngclipboard data-clipboard-text="{{value}}"><i tooltip="copy_msg" class="fa fa-clipboard"></i></div></div></span>',link:function(scope){var expression=/(https?:\/\/(?:www\.|(?!www))[^\s\.]+\.[^\s]{2,}|www\.[^\s]+\.[^\s]{2,})/gi,regex=new RegExp(expression);$translate(["toggle.visibility","copy","copied"]).then(function(translations){scope.tggltxt=translations["toggle.visibility"],scope.copy_msg=translations["copy.field"]}),scope.$watch("value",function(){scope.value&&(scope.secret&&(scope.valueVisible=!1),scope.value.match(regex)&&(scope.isLink=!0))}),scope.toggle||scope.secret&&(scope.toggle=!0);var timer;scope.onSuccess=function(){scope.copy_msg=$translate.instant("copied"),$timeout.cancel(timer),timer=$timeout(function(){scope.copy_msg=$translate.instant("copy")},5e3)},scope.valueVisible=!0,scope.toggleVisibility=function(){scope.valueVisible=!scope.valueVisible}}}}])}(),function(){angular.module("passmanApp").directive("fileSelect",["$window",function($window){return{restrict:"A",scope:{success:"&success",error:"&error",progress:"&progress"},link:function(scope,el){scope.success=scope.success(),scope.error=scope.error(),scope.progress=scope.progress();var _currentFile,fileReader=new $window.FileReader;fileReader.onload=function(){_currentFile.data=fileReader.result,scope.success(_currentFile)},fileReader.onprogress=function(event){var percent=event.loaded/event.total*100;scope.$apply(scope.progress({file_total:event.total,file_loaded:event.loaded,file_percent:percent}))},fileReader.onerror=function(){scope.error()},el.bind("change",function(e){var i,_queueTotalFileSize=0;for(i=0;i<e.target.files.length;i++)_queueTotalFileSize+=e.target.files[i].size;for(i=0;i<e.target.files.length;i++){_currentFile=e.target.files[i];var mb_limit=5;_currentFile.size>1024*mb_limit*1024&&scope.error("TO_BIG",_currentFile),fileReader.readAsDataURL(_currentFile)}})}}}])}(),function(){angular.module("passmanApp").directive("ngEnter",function(){return function(scope,element,attrs){element.bind("keydown keypress",function(event){13===event.which&&(scope.$apply(function(){scope.$eval(attrs.ngEnter)}),event.preventDefault())})}})}(),function(){angular.module("passmanApp").directive("otpGenerator",["$compile","$timeout",function($compile,$timeout){function dec2hex(s){return(s<15.5?"0":"")+Math.round(s).toString(16)}function hex2dec(s){return parseInt(s,16)}function base32tohex(base32){if(base32){var i,base32chars="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bits="",hex="";for(i=0;i<base32.length;i++){var val=base32chars.indexOf(base32.charAt(i).toUpperCase());bits+=leftpad(val.toString(2),5,"0")}for(i=0;i+4<=bits.length;i+=4){var chunk=bits.substr(i,4);hex+=parseInt(chunk,2).toString(16)}return hex}}function leftpad(str,len,pad){return len+1>=str.length&&(str=Array(len+1-str.length).join(pad)+str),str}return{restrict:"A",template:'<span class="otp_generator"><span credential-field value="otp" secret="\'true\'"></span> <span ng-bind="timeleft"></span></span>',transclude:!1,scope:{secret:"="},replace:!0,link:function(scope){scope.otp=null,scope.timeleft=null,scope.timer=null;var updateOtp=function(){if(scope.secret){var key=base32tohex(scope.secret),epoch=Math.round((new Date).getTime()/1e3),time=leftpad(dec2hex(Math.floor(epoch/30)),16,"0"),hmacObj=new jsSHA(time,"HEX"),hmac=hmacObj.getHMAC(key,"HEX","SHA-1","HEX"),offset=hex2dec(hmac.substring(hmac.length-1)),otp=(hex2dec(hmac.substr(2*offset,8))&hex2dec("7fffffff"))+"";otp=otp.substr(otp.length-6,6),scope.otp=otp}},timer=function(){var epoch=Math.round((new Date).getTime()/1e3),countDown=30-epoch%30;epoch%30===0&&updateOtp(),scope.timeleft=countDown,scope.timer=$timeout(timer,1e3)};scope.$watch("secret",function(n){n?($timeout.cancel(scope.timer),updateOtp(),timer()):$timeout.cancel(scope.timer)},!0),scope.$on("$destroy",function(){$timeout.cancel(scope.timer)})}}}])}(),function(){angular.module("passmanApp").directive("passwordGen",function($timeout,$translate){function Arcfour(){this.j=this.i=0,this.S=[]}function ARC4init(r){var t,n,e;for(t=0;256>t;++t)this.S[t]=t;for(t=n=0;256>t;++t)n=n+this.S[t]+r[t%r.length]&255,e=this.S[t],this.S[t]=this.S[n],this.S[n]=e;this.j=this.i=0}function ARC4next(){var r;return this.i=this.i+1&255,this.j=this.j+this.S[this.i]&255,r=this.S[this.i],this.S[this.i]=this.S[this.j],this.S[this.j]=r,this.S[r+this.S[this.i]&255]}function prng_newstate(){return new Arcfour}function generatePassword(r,t,n,e,o,i,p,g){var _,a,s,f,d,h,u,l,c,v,w,y,m;if(void 0===r&&(r=8+get_random(0,1)),r>256&&(r=256,document.getElementById("length").value=256),i>256&&(i=256),void 0===t&&(t=!0),void 0===n&&(n=!0),void 0===e&&(e=!0),void 0===o&&(o=!1),void 0===i&&(i=0),void 0===p&&(p=!1),void 0===g&&(g=!0),_=0,a=0,s=0,g&&(_=a=s=1),f=[],n&&_>0)for(d=0;_>d;d++)f[f.length]="L";if(t&&a>0)for(d=0;a>d;d++)f[f.length]="U";if(e&&i>0)for(d=0;i>d;d++)f[f.length]="D";if(o&&s>0)for(d=0;s>d;d++)f[f.length]="S";for(;f.length<r;)f[f.length]="A";for(f.sort(function(){return 2*get_random(0,1)-1}),h="",u="abcdefghjkmnpqrstuvwxyz",p||(u+="ilo"),n&&(h+=u),l="ABCDEFGHJKMNPQRSTUVWXYZ",p||(l+="ILO"),t&&(h+=l),c="23456789",p||(c+="10"),e&&(h+=c),v="!@#$%^&*",o&&(h+=v),w="",y=0;r>y;y++){switch(f[y]){case"L":m=u;break;case"U":m=l;break;case"D":m=c;break;case"S":m=v;break;case"A":m=h}d=get_random(0,m.length-1),w+=m.charAt(d)}return w}function rng_seed_int(r){rng_pool[rng_pptr++]^=255&r,rng_pool[rng_pptr++]^=r>>8&255,rng_pool[rng_pptr++]^=r>>16&255,rng_pool[rng_pptr++]^=r>>24&255,rng_pptr>=rng_psize&&(rng_pptr-=rng_psize)}function rng_seed_time(){rng_seed_int((new Date).getTime())}function rng_get_byte(){if(null==rng_state){for(rng_seed_time(),rng_state=prng_newstate(),rng_state.init(rng_pool),rng_pptr=0;rng_pptr<rng_pool.length;++rng_pptr)rng_pool[rng_pptr]=0;rng_pptr=0}return rng_state.next()}function rng_get_bytes(r){var t;for(t=0;t<r.length;++t)r[t]=rng_get_byte()}function SecureRandom(){}function get_random(r,t){var n,e,o,i=t-r+1;for(rng_seed_time(),n=[],e=0;4>e;e++)n[e]=0;for(rng_get_bytes(n),o=0,e=0;4>e;e++)o*=256,o+=n[e];return o%=i,o+=r}var rng_psize,rng_state,rng_pool,rng_pptr,t,z,crypt_obj,num,buf,i;if(Arcfour.prototype.init=ARC4init,Arcfour.prototype.next=ARC4next,rng_psize=256,null==rng_pool){if(rng_pool=[],rng_pptr=0,"undefined"!=typeof navigator&&"Netscape"==navigator.appName&&navigator.appVersion<"5"&&"undefined"!=typeof window&&window.crypto)for(z=window.crypto.random(32),t=0;t<z.length;++t)rng_pool[rng_pptr++]=255&z.charCodeAt(t);try{if(crypt_obj=null,"undefined"!=typeof window&&void 0!==window.crypto?crypt_obj=window.crypto:"undefined"!=typeof window&&void 0!==window.msCrypto&&(crypt_obj=window.msCrypto),void 0!==crypt_obj&&"function"==typeof crypt_obj.getRandomValues&&rng_psize>rng_pptr)for(num=Math.floor((rng_psize-rng_pptr)/2)+1,buf=new Uint16Array(num),crypt_obj.getRandomValues(buf),i=0;i<buf.length;i++)t=buf[i],rng_pool[rng_pptr++]=t>>>8,rng_pool[rng_pptr++]=255&t}catch(e){}for(;rng_psize>rng_pptr;)t=Math.floor(65536*Math.random()),rng_pool[rng_pptr++]=t>>>8,rng_pool[rng_pptr++]=255&t;rng_pptr=0,rng_seed_time()}return SecureRandom.prototype.nextBytes=rng_get_bytes,{scope:{model:"=ngModel",length:"@",placeholder:"@",settings:"=settings",callback:"&callback"},restrict:"E",replace:"true",template:'<div class=" pw-gen "><div class="input-group "><input ng-show="!passwordVisible" type="password" ng-disabled="disabled" class="form-control " ng-model="password" placeholder="{{placeholder}}"><input ng-show="passwordVisible" type="text" ng-disabled="disabled" class="form-control " ng-model="password" placeholder="{{placeholder}}"><span class="generate_pw"><div class="cell" tooltip="gen_msg" ng-click="generatePasswordStart()"><i class="fa fa-refresh"></i></div><div class="cell" tooltip="tggltxt" ng-click="toggleVisibility()"><i class="fa" ng-class="{\'fa-eye\': passwordVisible, \'fa-eye-slash\': !passwordVisible }"></i></div><div class="cell" tooltip="\'Copy password to clipboard\'"><i class="fa fa-clipboard" ngclipboard-success="onSuccess(e);" ngclipboard-error="onError(e);" ngclipboard data-clipboard-text="{{password}}"></i></div></button></div></div>',link:function(scope){scope.callback=scope.callback(),scope.$watch("model",function(){scope.password=scope.model}),scope.passwordVisible=!1,scope.toggleVisibility=function(){scope.passwordVisible=!scope.passwordVisible},scope.passwordNotNull=!1,scope.$watch("settings",function(){scope.settings&&!scope.password&&scope.settings.generateOnCreate&&scope.generatePasswordStart()}),$translate(["password.gen","password.copy","copied","toggle.visibility"]).then(function(translations){scope.tggltxt=translations["toggle.visibility"],scope.copy_msg=translations["password.copy"],scope.gen_msg=translations["password.gen"]}),scope.$watch("password",function(){scope.model=scope.password,scope.password_repeat=scope.model}),scope.onSuccess=function(e){OC.Notification.showTemporary($translate.instant("password.copied")),e.clearSelection()},scope.onError=function(){OC.Notification.showTemporary("Press Ctrl+C to copy!")},scope.progressDivShow=!1,scope.generatePasswordStart=function(){scope.progressDivShow=!0,scope.progressValue=0,scope.progressWidth={width:scope.progressValue+"%"},scope.generatePasswordProgress()},scope.generatePasswordProgress=function(){$timeout(function(){scope.progressValue<100?(scope.password=scope._generatePassword(scope.settings),scope.progressValue+=10,scope.progressWidth={width:scope.progressValue+"%"},scope.disabled=!0,scope.generatePasswordProgress()):(scope.disabled=!1,scope.callback&&scope.callback(scope.password))},10)},scope._generatePassword=function(settings){var _settings={length:12,useUppercase:!0,useLowercase:!0,useDigits:!0,useSpecialChars:!0,minimumDigitCount:3,avoidAmbiguousCharacters:!1,requireEveryCharType:!0};settings=angular.merge(_settings,settings);var password=generatePassword(settings.length,settings.useUppercase,settings.useLowercase,settings.useDigits,settings.useSpecialChars,settings.minimumDigitCount,settings.avoidAmbiguousCharacters,settings.requireEveryCharType);return password}}}})}(),function(){angular.module("passmanApp").directive("progressBar",["$translate",function($translate){return{restrict:"A",template:'<div class="progress"><div class="progress-bar" role="progressbar" aria-valuenow="{{progress}}"aria-valuemin="0" aria-valuemax="100" style="width:{{progress}}%;" use-theme><span class="sr-only">{{progress}}% {{completed_text}}</span><span ng-if="index && total" class="progress-label" use-theme type="\'color\'" color="\'true\'">{{index}} / {{total}}</span><span ng-if="!index && !total" class="progress-label" use-theme type="\'color\'" color="\'true\'">{{progress}}%</span></div></div>',scope:{progress:"=progressBar",index:"=index",total:"=total"},link:function(scope){$translate(["complete"]).then(function(translations){scope.completed_text=translations.complete})}}}])}(),function(){angular.module("passmanApp").directive("qrread",["$parse",function($parse){return{scope:!0,link:function(scope,element,attributes){var invoker=$parse(attributes.onRead);scope.imageData=null,qrcode.callback=function(result){invoker(scope,{qrdata:{qrData:result,image:scope.imageData}})},element.bind("change",function(changeEvent){var reader=new FileReader,file=changeEvent.target.files[0];reader.readAsDataURL(file),reader.onload=function(){return function(e){scope.imageData=e.target.result,qrcode.decode(e.target.result)}}(file)})}}}])}(),function(){angular.module("passmanApp").directive("tooltip",[function(){return{restrict:"A",scope:{tooltip:"=tooltip"},link:function(scope,el){scope.$watch("tooltip",function(){scope.tooltip&&(jQuery(el).attr("title",scope.tooltip),jQuery(el).tooltip(),jQuery(el).attr("title",scope.tooltip).tooltip("fixTitle"),jQuery(".tooltip-inner").text(scope.tooltip),jQuery(el).is(":visible"))})}}}])}(),function(){angular.module("passmanApp").directive("useTheme",[function(){function invertColor(hexTripletColor){var color=hexTripletColor;return color=color.substring(1),color=parseInt(color,16),color^=16777215,color=color.toString(16),color=("000000"+color).slice(-6),color="#"+color}return{restrict:"A",scope:{type:"=type",color:"=",negative:"="},link:function(scope,el){var _color=jQuery("#header").css("background-color"),_bg=_color;scope.negative&&(_bg=invertColor(_bg)),scope.type?jQuery(el).css(scope.type,_bg):jQuery(el).css("background-color",_bg),scope.color&&jQuery(el).css("color",invertColor(_color))}}}])}();var PassmanImporter={};!function(window,$,PassmanImporter){PassmanImporter.parseRow_=function(row){row=row.trim();var isQuoted=!1;return'"'==row.charAt(0)&&(row=row.substring(1),isQuoted=!0),'"'==row.charAt(row.length-2)&&(row=row.substring(0,row.length-2),isQuoted=!0),row=isQuoted===!0?row.split('","'):row.split(",")},PassmanImporter.htmlDecode=function(input){var e=document.createElement("div");return e.innerHTML=input,e.childNodes[0].nodeValue},PassmanImporter.toObject_=function(headings,row){for(var result={},i=0,ii=row.length;i<ii;i++)headings[i]=headings[i].replace(",","_").toLowerCase().replace(" ","_").replace("(","").replace(")","").replace('"',""),result[headings[i]]=row[i];return result},PassmanImporter.join_=function(arr,sep){for(var parts=[],i=0,ii=arr.length;i<ii;i++)arr[i]&&parts.push(arr[i]);return parts.join(sep)},PassmanImporter.newCredential=function(){var credential={credential_id:null,guid:null,vault_id:null,label:null,description:null,created:null,changed:null,tags:[],email:null,username:null,password:null,url:null,favicon:null,renew_interval:null,expire_time:0,delete_time:0,files:[],custom_fields:[],otp:{},hidden:!1};return credential},PassmanImporter.readCsv=function(csv,hasHeadings){hasHeadings=void 0===hasHeadings||hasHeadings;var i,_row,lines=[],rows=csv.split("\n");if(hasHeadings){var headings=this.parseRow_(rows[0]);for(i=1;i<rows.length;i++)_row=this.toObject_(headings,this.parseRow_(rows[i])),lines.push(_row)}else for(i=1;i<rows.length;i++)_row=this.toObject_(null,this.parseRow_(rows[i])),lines.push(_row);return lines},PassmanImporter.readJson=function(string){return JSON.parse(string)}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.clippers={info:{name:"Clipperz.is",id:"clippers",description:"Go to menu -> Export -> Download HTML + JSON. Fields will be imported as custom fields."}},PassmanImporter.clippers.readFile=function(file_data){return new C_Promise(function(){var credential_list=[],re=/<textarea>(.*?)<\/textarea>/gi,matches=re.exec(file_data);if(matches){var raw_json=matches[0].substring(10);raw_json=PassmanImporter.htmlDecode(raw_json.slice(0,-11));for(var json_objects=PassmanImporter.readJson(raw_json),i=0;i<json_objects.length;i++){var card=json_objects[i];re=/(\w+)/gi;var tags=card.label.match(re);card.label=card.label.replace(tags.join(" "),"").trim(),tags=tags.map(function(item){return{text:item.replace("","")}});var _credential=PassmanImporter.newCredential();_credential.label=card.label,_credential.description=card.data.notes,_credential.tags=tags;for(var field in card.currentVersion.fields){var field_data=card.currentVersion.fields[field];_credential.custom_fields.push({label:field_data.label,value:field_data.value,secret:1==field_data.hidden})}_credential.label&&credential_list.push(_credential);var progress={percent:i/json_objects.length*100,loaded:i,total:json_objects.length};this.call_progress(progress)}}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.dashLaneCsv={info:{name:"Dashlane 4 csv",id:"dashLaneCsv",description:"Create an csv export. Go to File -> export -> Unsecured archive (readable) in CSV format"}},PassmanImporter.dashLaneCsv.readFile=function(file_data){return new C_Promise(function(){for(var rows=file_data.split("\n"),credential_list=[],i=0;i<rows.length;i++){var row=rows[i],row_data=row.split('","');'"'==row_data[0].charAt(0)&&(row_data[0]=row_data[0].substring(1)),'"'==row_data[row_data.length-1].toString().charAt(row_data[row_data.length-1].length-1)&&(row_data[row_data.length-1]=row_data[row_data.length-1].substring(0,row_data[row_data.length-1].length-1));var _credential=PassmanImporter.newCredential();_credential.label=row_data[0],_credential.username=row_data[2],_credential.password=row_data[row_data.length-2],_credential.url=row_data[0],_credential.description=row_data[row_data.length-1],_credential.label&&credential_list.push(_credential);var progress={percent:i/rows.length*100,loaded:i,total:rows.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.keepassCsv={info:{name:"KeePass csv",id:"keepassCsv",description:"Create an csv export with the following options enabled: http://i.imgur.com/CaeTA4d.png"}},PassmanImporter.keepassCsv.readFile=function(file_data){var p=new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=row.account,_credential.username=row.login_name,_credential.password=row.password,_credential.url=row.web_site,row.hasOwnProperty("expires")&&(row.expires=row.expires.replace('"',""),_credential.expire_time=new Date(row.expires).getTime()/1e3);var tags=[{text:row.group}];if(row.hasOwnProperty("group_tree"))for(var exploded_tree=row.group_tree.split("\\\\"),t=0;t<exploded_tree.length;t++)tags.push({
-text:exploded_tree[t]});_credential.tags=tags,credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)});return p}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.lastpassCsv={info:{name:"LastPass csv",id:"lastpassCsv",description:"Create an csv export. Go to More options -> Advanced -> Export -> Last Pass CSV File"}},PassmanImporter.lastpassCsv.readFile=function(file_data){return new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=PassmanImporter.htmlDecode(row.name),_credential.username=row.username,_credential.password=row.password,_credential.url=row.url,_credential.tags=[{text:row.grouping}],_credential.description=row.extra,_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.passmanJson={info:{name:"Passman JSON",id:"passmanJson",description:"Export the item in passman as passman json, with all fields enabled"}},PassmanImporter.passmanJson.readFile=function(file_data){return new C_Promise(function(){for(var parsed_json=PassmanImporter.readJson(file_data),credential_list=[],i=0;i<parsed_json.length;i++){var item=parsed_json[i],_credential=PassmanImporter.newCredential();if(_credential.label=item.label,_credential.username=item.account,_credential.password=item.password,_credential.email=item.email,_credential.url=item.url,_credential.tags=item.tags,_credential.description=item.description,item.hasOwnProperty("customFields")&&item.customFields.length>0)for(var cf=0;cf<item.customFields.length;cf++)_credential.custom_fields.push({label:item.customFields[cf].label,value:item.customFields[cf].value,secret:"1"==item.customFields[cf].clicktoshow});item.hasOwnProperty("otpsecret")&&item.otpsecret&&(_credential.otp={issuer:item.otpsecret.issuer,label:item.otpsecret.label,qr_uri:{image:item.otpsecret.qrCode,qrData:""},secret:item.otpsecret.secret,type:item.otpsecret.type}),_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_json.length*100,loaded:i,total:parsed_json.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.passpackCsv={info:{name:"Passpack csv",id:"passpackCsv",description:"Go to Tools -> Export. Select Comma Separated Values, All entries then continue."}},PassmanImporter.passpackCsv.readFile=function(file_data){return new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data,!1),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=row[0],_credential.username=row[1],_credential.password=row[2],_credential.url=row[3];var tags=row[4].split(" ");tags.length>0&&(_credential.tags=tags.map(function(item){if(item)return{text:item}}).filter(function(item){return item})),_credential.description=row[5],_credential.email=row[6],_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.randomData={info:{name:"Random data",id:"randomData",description:"Create's 50 random credentials for testing purposes."}},PassmanImporter.randomData.readFile=function(){return new C_Promise(function(){var label,tags=["Social media","Hosting","Forums","Webshops","FTP","SSH","Banking","Applications","Server stuff","mysql","Wifi","Games","Certificate","Serials"],credential_list=[],_this=this,generateCredential=function(max,i,callback){if(jQuery){var url=OC.generateUrl("apps/passman/api/internal/generate_person");$.ajax({url:url,dataType:"json",success:function(data){if(data){var _credential=PassmanImporter.newCredential();label=Math.random()>=.5?data.domain:data.email_d+" - "+data.email_u,_credential.label=label,_credential.username=data.username,_credential.password=data.password,_credential.url=data.url;for(var tag_amount=Math.floor(5*Math.random()),ta=0,_tags=[];ta<tag_amount;){var item=tags[Math.floor(Math.random()*tags.length)];_tags.indexOf(item)===-1&&(_tags.push(item),ta++)}if(_credential.tags=_tags.map(function(item){if(item)return{text:item}}).filter(function(item){return item}),credential_list.push(_credential),i<max){var progress={percent:i/max*100,loaded:i,total:max};_this.call_progress(progress),generateCredential(max,i+1,callback)}else callback(credential_list)}else generateCredential(max,i,callback)}})}};generateCredential(50,1,function(credential_list){_this.call_then(credential_list)})})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};if(function(window,$,PassmanImporter){PassmanImporter.zohoCsv={info:{name:"ZOHO csv",id:"zohoCsv",description:'Create an csv export. Go to Tools -> Export secrets -> Select "General CSV" and click "Export Secrets"'}},PassmanImporter.zohoCsv.readFile=function(file_data){return new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data,!1),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=row[0],_credential.username=row[3],_credential.password=row[4],_credential.url=row[1],_credential.description=row[2],_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter),!window.PassmanExporter)var PassmanExporter={};PassmanExporter.csv={info:{name:"CSV",id:"csv",description:"Export credentials as csv."}},PassmanExporter.csv.export=function(credentials){return new C_Promise(function(){for(var _this=this,headers=["label","username","password","email","description","tags"],file_data='"'+headers.join('","')+'"\n',i=0;i<credentials.length;i++){for(var _credential=credentials[i],row_data=[],h=0;h<headers.length;h++){var field=headers[h];if("tags"===field){for(var _tags=[],t=0;t<_credential[field].length;t++)_tags.push(_credential[field][t].text);var data="["+_tags.join(",")+"]";row_data.push('"'+data+'"')}else row_data.push('"'+_credential[field]+'"')}var progress={percent:i/credentials.length*100,loaded:i,total:credentials.length};_this.call_progress(progress),file_data+=row_data.join(",")+"\n"}_this.call_then(),download(file_data,"passman-export.csv")})},function(){angular.module("passmanApp").controller("BookmarkletCtrl",["$scope","$rootScope","$location","VaultService","CredentialService","SettingsService","NotificationService","EncryptService","TagService","FileService","ShareService","$translate",function($scope,$rootScope,$location,VaultService,CredentialService,SettingsService,NotificationService,EncryptService,TagService,FileService,ShareService,$translate){if($scope.active_vault=!1,$scope.http_warning_hidden=!0,"http"===$location.$$protocol&&($scope.using_http=!0),$scope.logout=function(){$scope.active_vault=!1},SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));VaultService.getVault(_vault).then(function(vault){vault.vaultKey=angular.copy(SettingsService.getSetting("defaultVaultPass")),VaultService.setActiveVault(vault),$scope.active_vault=vault,$scope.pwSettings=VaultService.getVaultSetting("pwSettings",{length:12,useUppercase:!0,useLowercase:!0,useDigits:!0,useSpecialChars:!0,minimumDigitCount:3,avoidAmbiguousCharacters:!1,requireEveryCharType:!0,generateOnCreate:!0})})}VaultService.getVaults().then(function(vaults){$scope.vaults=vaults}),$scope.default_vault=!1,$scope.remember_vault_password=!1,$scope.list_selected_vault=!1,$scope.toggleDefaultVault=function(){$scope.default_vault=!$scope.default_vault,$scope.default_vault===!0?SettingsService.setSetting("defaultVault",$scope.list_selected_vault):SettingsService.setSetting("defaultVault",null)},$scope.toggleRememberPassword=function(){$scope.remember_vault_password=!$scope.remember_vault_password,$scope.remember_vault_password&&(SettingsService.setSetting("defaultVault",$scope.list_selected_vault),$scope.default_vault=!0),$scope.remember_vault_password!==!0&&SettingsService.setSetting("defaultVault",null)},$scope.clearState=function(){$scope.list_selected_vault=!1,$scope.creating_vault=!1,$scope.error=!1},$scope.selectVault=function(vault){$scope.list_selected_vault=vault},$scope.sharing_keys={},$scope.newVault=function(){$scope.creating_vault=!0;var key_size=1024;ShareService.generateRSAKeys(key_size).progress(function(progress){var p=progress>0?2:1,msg=$translate.instant("generating.sharing.keys");msg=msg.replace("%step",p),$scope.creating_keys=msg,$scope.$digest()}).then(function(kp){var pem=ShareService.rsaKeyPairToPEM(kp);$scope.creating_keys=!1,$scope.sharing_keys.private_sharing_key=pem.privateKey,$scope.sharing_keys.public_sharing_key=pem.publicKey,$scope.$digest()})};var _loginToVault=function(vault,vault_key){var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),delete _vault.credentials,$scope.active_vault=_vault};$scope.vaultDecryptionKey="",$scope.loginToVault=function(vault,vault_key){$scope.error=!1;var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),VaultService.setActiveVault(_vault);try{EncryptService.decryptString(vault.challenge_password),$scope.remember_vault_password&&SettingsService.setSetting("defaultVaultPass",vault_key),_loginToVault(vault,vault_key)}catch(e){$scope.error=$translate.instant("invalid.vault.key")}},$scope.createVault=function(vault_name,vault_key,vault_key2){return vault_key!==vault_key2?void($scope.error=$translate.instant("password.do.not.match")):void VaultService.createVault(vault_name).then(function(vault){$scope.vaults.push(vault);var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),VaultService.setActiveVault(_vault);var test_credential=CredentialService.newCredential();test_credential.label="Test key for vault "+vault_name,test_credential.hidden=!0,test_credential.vault_id=vault.vault_id,test_credential.password="lorum ipsum",CredentialService.createCredential(test_credential).then(function(){_vault.public_sharing_key=angular.copy($scope.sharing_keys.public_sharing_key),_vault.private_sharing_key=EncryptService.encryptString(angular.copy($scope.sharing_keys.private_sharing_key)),VaultService.updateSharingKeys(_vault).then(function(){_loginToVault(vault,vault_key)})})})},$scope.storedCredential=CredentialService.newCredential();var QueryString=function(){for(var query_string={},query=window.location.search.substring(1),vars=query.split("&"),i=0;i<vars.length;i++){var pair=vars[i].split("=");if("undefined"==typeof query_string[pair[0]])query_string[pair[0]]=decodeURIComponent(pair[1]);else if("string"==typeof query_string[pair[0]]){var arr=[query_string[pair[0]],decodeURIComponent(pair[1])];query_string[pair[0]]=arr}else query_string[pair[0]].push(decodeURIComponent(pair[1]))}return query_string}(),query_string=QueryString;$scope.storedCredential.label=query_string.title,$scope.storedCredential.url=query_string.url,$scope.setHttpWarning=function(state){$scope.http_warning_hidden=state},$translate(["general","password","custom.fields","files","otp"]).then(function(translations){$scope.tabs=[{title:translations.general,url:"views/partials/forms/edit_credential/basics.html",color:"blue"},{title:translations.password,url:"views/partials/forms/edit_credential/password.html",color:"green"},{title:translations["custom.fields"],url:"views/partials/forms/edit_credential/custom_fields.html",color:"orange"},{title:translations.files,url:"views/partials/forms/edit_credential/files.html",color:"yellow"},{title:translations.otp,url:"views/partials/forms/edit_credential/otp.html",color:"purple"}],$scope.currentTab=$scope.tabs[0]}),$scope.getTags=function($query){return TagService.searchTag($query)},$scope.onClickTab=function(tab){$scope.currentTab=tab},$scope.isActiveTab=function(tab){return tab.url===$scope.currentTab.url},$scope.pwGenerated=function(pass){$scope.storedCredential.password_repeat=pass};var _customField={label:"",value:"",secret:!1,field_type:"text"};$scope.selected_field_type="text",$scope.new_custom_field=angular.copy(_customField),$scope.addCustomField=function(){var _field=angular.copy($scope.new_custom_field);if(_field.label||NotificationService.showNotification($translate.instant("error.no.label"),3e3),_field.value||NotificationService.showNotification($translate.instant("error.no.value"),3e3),_field.label&&_field.value)if($scope.selected_field_type="text",_field.secret=angular.copy("password"===$scope.selected_field_type),_field.field_type=angular.copy($scope.selected_field_type),"file"===_field.field_type){var _file=$scope.new_custom_field.value;FileService.uploadFile(_file).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename),_field.value=result,$scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)})}else $scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)},$scope.addFileToCustomField=function(file){var _file={filename:file.name,size:file.size,mimetype:file.type,data:file.data};$scope.new_custom_field.value=_file,$scope.$digest()},$scope.deleteCustomField=function(field){field.hasOwnProperty("field_type")&&"file"===field.field_type&&FileService.deleteFile(field.value);var idx=$scope.storedCredential.custom_fields.indexOf(field);$scope.storedCredential.custom_fields.splice(idx,1)},$scope.new_file={name:"",data:null},$scope.deleteFile=function(file){var idx=$scope.storedCredential.files.indexOf(file);FileService.deleteFile(file).then(function(){$scope.storedCredential.files.splice(idx,1)})},$scope.fileLoaded=function(file){var _file={filename:file.name,size:file.size,mimetype:file.type,data:file.data};FileService.uploadFile(_file).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename),$scope.storedCredential.files.push(result)}),$scope.$digest()},$scope.fileLoadError=function(error){return error},$scope.selected_file="",$scope.fileprogress=[],$scope.fileSelectProgress=function(progress){progress&&($scope.fileprogress=progress,$scope.$digest())},$scope.renewIntervalValue=0,$scope.renewIntervalModifier="0",$scope.updateInterval=function(renewIntervalValue,renewIntervalModifier){var value=parseInt(renewIntervalValue),modifier=parseInt(renewIntervalModifier);value&&modifier&&($scope.storedCredential.renew_interval=value*modifier)},$scope.parseQR=function(QRCode){var parsedQR,qrInfo,re=/otpauth:\/\/(totp|hotp)\/(.*)\?(secret|issuer)=(.*)&(issuer|secret)=(.*)/;parsedQR=QRCode.qrData.match(re),parsedQR&&(qrInfo={type:parsedQR[1],label:decodeURIComponent(parsedQR[2]),qr_uri:QRCode}),qrInfo[parsedQR[3]]=parsedQR[4],qrInfo[parsedQR[5]]=parsedQR[6],$scope.storedCredential.otp=qrInfo,$scope.$digest()},$scope.saveCredential=function(){delete $scope.storedCredential.password_repeat,$scope.storedCredential.credential_id||($scope.storedCredential.vault_id=$scope.active_vault.vault_id,CredentialService.createCredential($scope.storedCredential).then(function(){NotificationService.showNotification($translate.instant("credential.created"),5e3)}))}}])}(),function(){angular.module("passmanApp").controller("CredentialCtrl",["$scope","VaultService","SettingsService","$location","CredentialService","$rootScope","FileService","EncryptService","TagService","$timeout","NotificationService","CacheService","ShareService","SharingACL","$interval","$filter","$routeParams","$sce","$translate",function($scope,VaultService,SettingsService,$location,CredentialService,$rootScope,FileService,EncryptService,TagService,$timeout,NotificationService,CacheService,ShareService,SharingACL,$interval,$filter,$routeParams,$sce,$translate){if($scope.active_vault=VaultService.getActiveVault(),SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=angular.copy(SettingsService.getSetting("defaultVaultPass")),VaultService.setActiveVault(_vault),$scope.active_vault=_vault}}else $scope.active_vault||$location.path("/");$scope.show_spinner=!0;var fetchCredentials=function(){VaultService.getVault({guid:$routeParams.vault_id}).then(function(vault){var vaultKey=angular.copy($scope.active_vault.vaultKey),_credentials=angular.copy(vault.credentials);vault.credentials=[],$scope.active_vault=vault,$scope.active_vault.vaultKey=vaultKey,VaultService.setActiveVault($scope.active_vault);for(var i=0;i<_credentials.length;i++){var _credential=_credentials[i];try{if(_credential.shared_key){var enc_key=EncryptService.decryptString(_credential.shared_key);_credential=ShareService.decryptSharedCredential(angular.copy(_credential),enc_key)}else _credential=CredentialService.decryptCredential(angular.copy(_credential));_credential.tags_raw=_credential.tags}catch(e){NotificationService.showNotification($translate.instant("error.decrypt"),5e3)}_credential.tags&&TagService.addTags(_credential.tags),_credentials[i]=_credential}ShareService.getCredendialsSharedWithUs(vault.guid).then(function(shared_credentials){for(var c=0;c<shared_credentials.length;c++){var _shared_credential_data,_shared_credential=shared_credentials[c],decrypted_key=EncryptService.decryptString(_shared_credential.shared_key);try{_shared_credential_data=ShareService.decryptSharedCredential(_shared_credential.credential_data,decrypted_key)}catch(e){}_shared_credential_data&&(delete _shared_credential.credential_data,_shared_credential_data.acl=_shared_credential,_shared_credential_data.acl.permissions=new SharingACL(_shared_credential_data.acl.permissions),_shared_credential_data.tags_raw=_shared_credential_data.tags,_shared_credential_data.tags&&TagService.addTags(_shared_credential_data.tags),_credentials.push(_shared_credential_data))}angular.merge($scope.active_vault.credentials,_credentials),$scope.show_spinner=!1})})},getPendingShareRequests=function(){ShareService.getPendingRequests().then(function(shareRequests){shareRequests.length>0&&($scope.incoming_share_requests=shareRequests,jQuery(".share_popup").dialog({width:600,position:["center",90]}))})},refresh_data_interval=null;$scope.active_vault&&($scope.$parent.selectedVault=!0,fetchCredentials(),getPendingShareRequests(),refresh_data_interval=$interval(function(){fetchCredentials(),getPendingShareRequests()},3e5)),$scope.$on("$destroy",function(){$interval.cancel(refresh_data_interval)}),$scope.permissions=new SharingACL(0),$scope.hasPermission=function(acl,permission){if(acl){var tmp=new SharingACL(acl.permission);return tmp.hasPermission(permission)}return!0},$scope.acceptShareRequest=function(share_request){var crypted_shared_key=share_request.shared_key,private_key=EncryptService.decryptString(VaultService.getActiveVault().private_sharing_key);private_key=ShareService.rsaPrivateKeyFromPEM(private_key),crypted_shared_key=private_key.decrypt(forge.util.decode64(crypted_shared_key)),crypted_shared_key=EncryptService.encryptString(crypted_shared_key),ShareService.saveSharingRequest(share_request,crypted_shared_key).then(function(){var idx=$scope.incoming_share_requests.indexOf(share_request);$scope.incoming_share_requests.splice(idx,1);for(var active_share_requests=!1,v=0;v<$scope.incoming_share_requests.length;v++)$scope.incoming_share_requests[v].target_vault_id===$scope.active_vault.vault_id&&(active_share_requests=!0);active_share_requests===!1&&(jQuery(".ui-dialog").remove(),fetchCredentials())})},$scope.declineShareRequest=function(share_request){ShareService.declineSharingRequest(share_request).then(function(){var idx=$scope.incoming_share_requests.indexOf(share_request);$scope.incoming_share_requests.splice(idx,1);for(var active_share_requests=!1,v=0;v<$scope.incoming_share_requests.length;v++)$scope.incoming_share_requests[v].target_vault_id===$scope.active_vault.vault_id&&(active_share_requests=!0);active_share_requests===!1&&(jQuery(".ui-dialog").remove(),fetchCredentials())})},$scope.addCredential=function(){var new_credential=CredentialService.newCredential(),enc_c=CredentialService.encryptCredential(new_credential);SettingsService.setSetting("edit_credential",enc_c),$location.path("/vault/"+$scope.active_vault.guid+"/new")},$scope.editCredential=function(credential){var _credential=angular.copy(credential);$rootScope.$emit("app_menu",!1),SettingsService.setSetting("edit_credential",CredentialService.encryptCredential(_credential)),$location.path("/vault/"+$scope.active_vault.guid+"/edit/"+_credential.guid)},$scope.getRevisions=function(credential){var _credential=angular.copy(credential);$rootScope.$emit("app_menu",!1),SettingsService.setSetting("revision_credential",CredentialService.encryptCredential(_credential)),$location.path("/vault/"+$scope.active_vault.guid+"/"+_credential.guid+"/revisions")},$scope.shareCredential=function(credential){var _credential=angular.copy(credential);$rootScope.$emit("app_menu",!1),SettingsService.setSetting("share_credential",CredentialService.encryptCredential(_credential)),$location.path("/vault/"+$scope.active_vault.guid+"/"+_credential.guid+"/share")};var notification;$scope.deleteCredential=function(credential){var _credential=angular.copy(credential);try{_credential=CredentialService.decryptCredential(angular.copy(credential))}catch(e){}_credential.delete_time=(new Date).getTime()/1e3;for(var i=0;i<$scope.active_vault.credentials.length;i++)$scope.active_vault.credentials[i].credential_id===credential.credential_id&&($scope.active_vault.credentials[i].delete_time=_credential.delete_time);$scope.closeSelected(),notification&&NotificationService.hideNotification(notification),notification=NotificationService.showNotification($translate.instant("credential.deleted"),5e3,function(){CredentialService.updateCredential(_credential).then(function(result){result.delete_time>0&&(notification=!1)})})},$scope.recoverCredential=function(credential){var _credential=angular.copy(credential);try{_credential=CredentialService.decryptCredential(angular.copy(credential))}catch(e){}for(var i=0;i<$scope.active_vault.credentials.length;i++)$scope.active_vault.credentials[i].credential_id===credential.credential_id&&($scope.active_vault.credentials[i].delete_time=0);_credential.delete_time=0,$scope.closeSelected(),notification&&NotificationService.hideNotification(notification),NotificationService.showNotification($translate.instant("credential.recovered"),5e3,function(){CredentialService.updateCredential(_credential).then(function(){notification=!1})})},$scope.destroyCredential=function(credential){var _credential=angular.copy(credential);CredentialService.destroyCredential(_credential.credential_id).then(function(){for(var i=0;i<$scope.active_vault.credentials.length;i++)if($scope.active_vault.credentials[i].credential_id===credential.credential_id){$scope.active_vault.credentials.splice(i,1),NotificationService.showNotification($translate.instant("credential.destroyed)"),5e3);break}})},$scope.view_mode="list",$scope.switchViewMode=function(viewMode){$scope.view_mode=viewMode},$scope.filterOptions={filterText:"",fields:["label","username","email","password","custom_fields"]},$scope.filtered_credentials=[],$scope.$watch("[selectedtags, filterOptions, delete_time, active_vault.credentials]",function(){if($scope.active_vault&&$scope.active_vault.credentials){var credentials=angular.copy($scope.active_vault.credentials),filtered_credentials=$filter("credentialSearch")(credentials,$scope.filterOptions);filtered_credentials=$filter("tagFilter")(filtered_credentials,$scope.selectedtags),filtered_credentials=$filter("filter")(filtered_credentials,{hidden:0}),$scope.filtered_credentials=filtered_credentials}},!0),$scope.selectedtags=[];var to;$rootScope.$on("selected_tags_updated",function(evt,_sTags){for(var _selectedTags=[],x=0;x<_sTags.length;x++)_selectedTags.push(_sTags[x].text);$scope.selectedtags=_selectedTags,$timeout.cancel(to),_selectedTags.length>0&&(to=$timeout(function(){if($scope.filtered_credentials){for(var _filtered_tags=[],i=0;i<$scope.filtered_credentials.length;i++)for(var tags=$scope.filtered_credentials[i].tags_raw,x=0;x<tags.length;x++){var tag=tags[x].text;_filtered_tags.indexOf(tag)===-1&&_filtered_tags.push(tag)}$rootScope.$emit("limit_tags_in_list",_filtered_tags)}},50))}),$scope.delete_time=0,$scope.showCredentialRow=function(credential){return 0===$scope.delete_time?0===credential.delete_time:credential.delete_time>$scope.delete_time},$rootScope.$on("set_delete_time",function(event,time){$scope.delete_time=time}),$scope.setDeleteTime=function(delete_time){$scope.delete_time=delete_time},$scope.selectedCredential=!1,$scope.selectCredential=function(credential){credential.description&&(credential.description_html=$sce.trustAsHtml(angular.copy(credential.description).replace("\n","<br />"))),$scope.selectedCredential=angular.copy(credential),$rootScope.$emit("app_menu",!0)},$scope.closeSelected=function(){$rootScope.$emit("app_menu",!1),$scope.selectedCredential=!1},$rootScope.$on("logout",function(){$scope.active_vault=null,$scope.credentials=[]}),$scope.downloadFile=function(credential,file){var callback=function(result){var key=null;if(!result.hasOwnProperty("file_data"))return void NotificationService.showNotification($translate.instant("error.loading.file.perm"),5e3);!credential.hasOwnProperty("acl")&&credential.hasOwnProperty("shared_key")&&credential.shared_key&&(key=EncryptService.decryptString(angular.copy(credential.shared_key))),credential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy(credential.acl.shared_key)));var file_data=EncryptService.decryptString(result.file_data,key);download(file_data,escapeHTML(file.filename),file.mimetype)};credential.hasOwnProperty("acl")?ShareService.downloadSharedFile(credential,file).then(callback):FileService.getFile(file).then(callback)}}])}(),function(){angular.module("passmanApp").controller("CredentialEditCtrl",["$scope","VaultService","CredentialService","SettingsService","$location","$routeParams","FileService","EncryptService","TagService","NotificationService","ShareService","$translate",function($scope,VaultService,CredentialService,SettingsService,$location,$routeParams,FileService,EncryptService,TagService,NotificationService,ShareService,$translate){if($scope.active_vault=VaultService.getActiveVault(),SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=SettingsService.getSetting("defaultVaultPass"),VaultService.setActiveVault(_vault),$scope.active_vault=_vault}}else if(!$scope.active_vault)return void $location.path("/");VaultService.getVault($scope.active_vault).then(function(vault){vault.vaultKey=VaultService.getActiveVault().vaultKey,delete vault.credentials,VaultService.setActiveVault(vault),$scope.pwSettings=VaultService.getVaultSetting("pwSettings",{length:12,useUppercase:!0,useLowercase:!0,useDigits:!0,useSpecialChars:!0,minimumDigitCount:3,avoidAmbiguousCharacters:!1,requireEveryCharType:!0,generateOnCreate:!0})}),$scope.currentTab={title:$translate.instant("general"),url:"views/partials/forms/edit_credential/basics.html",color:"blue"},$scope.tabs=[{title:$translate.instant("general"),url:"views/partials/forms/edit_credential/basics.html",color:"blue"},{title:$translate.instant("password"),url:"views/partials/forms/edit_credential/password.html",color:"green"},{title:$translate.instant("custom.fields"),url:"views/partials/forms/edit_credential/custom_fields.html",color:"orange"},{title:$translate.instant("files"),url:"views/partials/forms/edit_credential/files.html",color:"yellow"},{title:$translate.instant("otp"),url:"views/partials/forms/edit_credential/otp.html",color:"purple"}],$scope.active_vault&&($scope.$parent.selectedVault=!0);var storedCredential=SettingsService.getSetting("edit_credential");storedCredential?($scope.storedCredential=CredentialService.decryptCredential(angular.copy(storedCredential)),$scope.storedCredential.password_repeat=angular.copy($scope.storedCredential.password),$scope.storedCredential.expire_time=1e3*$scope.storedCredential.expire_time):CredentialService.getCredential($routeParams.credential_id).then(function(result){$scope.storedCredential=CredentialService.decryptCredential(angular.copy(result))}),$scope.getTags=function($query){return TagService.searchTag($query)},$scope.onClickTab=function(tab){$scope.currentTab=tab},$scope.isActiveTab=function(tab){return tab.url===$scope.currentTab.url},$scope.pwGenerated=function(pass){$scope.storedCredential.password_repeat=pass};var _customField={label:"",value:"",secret:!1,field_type:"text"};$scope.selected_field_type="text",$scope.new_custom_field=angular.copy(_customField),$scope.addCustomField=function(){var _field=angular.copy($scope.new_custom_field);if(_field.label||NotificationService.showNotification($translate.instant("error.no.label"),3e3),_field.value||NotificationService.showNotification($translate.instant("error.no.value"),3e3),_field.label&&_field.value)if($scope.selected_field_type="text",_field.secret=angular.copy("password"===$scope.selected_field_type),_field.field_type=angular.copy($scope.selected_field_type),"file"===_field.field_type){var key=!1,_file=$scope.new_custom_field.value;!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),FileService.uploadFile(_file,key).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename,key),_field.value=result,$scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)})}else $scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)},$scope.addFileToCustomField=function(file){var _file={filename:file.name,size:file.size,mimetype:file.type,data:file.data};$scope.new_custom_field.value=_file,$scope.$digest()},$scope.deleteCustomField=function(field){field.hasOwnProperty("field_type")&&"file"===field.field_type&&FileService.deleteFile(field.value);var idx=$scope.storedCredential.custom_fields.indexOf(field);$scope.storedCredential.custom_fields.splice(idx,1)},$scope.new_file={name:"",data:null},$scope.deleteFile=function(file){var idx=$scope.storedCredential.files.indexOf(file);FileService.deleteFile(file).then(function(){$scope.storedCredential.files.splice(idx,1)})},$scope.fileLoaded=function(file){var key,_file={filename:file.name,size:file.size,mimetype:file.type,data:file.data};!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),
+text:exploded_tree[t]});_credential.tags=tags,credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)});return p}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.lastpassCsv={info:{name:"LastPass csv",id:"lastpassCsv",description:"Create an csv export. Go to More options -> Advanced -> Export -> Last Pass CSV File"}},PassmanImporter.lastpassCsv.readFile=function(file_data){return new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=PassmanImporter.htmlDecode(row.name),_credential.username=row.username,_credential.password=row.password,_credential.url=row.url,_credential.tags=[{text:row.grouping}],_credential.description=row.extra,_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.passmanJson={info:{name:"Passman JSON",id:"passmanJson",description:"Export the item in passman as passman json, with all fields enabled"}},PassmanImporter.passmanJson.readFile=function(file_data){return new C_Promise(function(){for(var parsed_json=PassmanImporter.readJson(file_data),credential_list=[],i=0;i<parsed_json.length;i++){var item=parsed_json[i],_credential=PassmanImporter.newCredential();if(_credential.label=item.label,_credential.username=item.account,_credential.password=item.password,_credential.email=item.email,_credential.url=item.url,_credential.tags=item.tags,_credential.description=item.description,item.hasOwnProperty("customFields")&&item.customFields.length>0)for(var cf=0;cf<item.customFields.length;cf++)_credential.custom_fields.push({label:item.customFields[cf].label,value:item.customFields[cf].value,secret:"1"==item.customFields[cf].clicktoshow});item.hasOwnProperty("otpsecret")&&item.otpsecret&&(_credential.otp={issuer:item.otpsecret.issuer,label:item.otpsecret.label,qr_uri:{image:item.otpsecret.qrCode,qrData:""},secret:item.otpsecret.secret,type:item.otpsecret.type}),_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_json.length*100,loaded:i,total:parsed_json.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.passpackCsv={info:{name:"Passpack csv",id:"passpackCsv",description:"Go to Tools -> Export. Select Comma Separated Values, All entries then continue."}},PassmanImporter.passpackCsv.readFile=function(file_data){return new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data,!1),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=row[0],_credential.username=row[1],_credential.password=row[2],_credential.url=row[3];var tags=row[4].split(" ");tags.length>0&&(_credential.tags=tags.map(function(item){if(item)return{text:item}}).filter(function(item){return item})),_credential.description=row[5],_credential.email=row[6],_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};!function(window,$,PassmanImporter){PassmanImporter.randomData={info:{name:"Random data",id:"randomData",description:"Create's 50 random credentials for testing purposes."}},PassmanImporter.randomData.readFile=function(){return new C_Promise(function(){var label,tags=["Social media","Hosting","Forums","Webshops","FTP","SSH","Banking","Applications","Server stuff","mysql","Wifi","Games","Certificate","Serials"],credential_list=[],_this=this,generateCredential=function(max,i,callback){if(jQuery){var url=OC.generateUrl("apps/passman/api/internal/generate_person");$.ajax({url:url,dataType:"json",success:function(data){if(data){var _credential=PassmanImporter.newCredential();label=Math.random()>=.5?data.domain:data.email_d+" - "+data.email_u,_credential.label=label,_credential.username=data.username,_credential.password=data.password,_credential.url=data.url;for(var tag_amount=Math.floor(5*Math.random()),ta=0,_tags=[];ta<tag_amount;){var item=tags[Math.floor(Math.random()*tags.length)];_tags.indexOf(item)===-1&&(_tags.push(item),ta++)}if(_credential.tags=_tags.map(function(item){if(item)return{text:item}}).filter(function(item){return item}),credential_list.push(_credential),i<max){var progress={percent:i/max*100,loaded:i,total:max};_this.call_progress(progress),generateCredential(max,i+1,callback)}else callback(credential_list)}else generateCredential(max,i,callback)}})}};generateCredential(50,1,function(credential_list){_this.call_then(credential_list)})})}}(window,$,PassmanImporter);var PassmanImporter=PassmanImporter||{};if(function(window,$,PassmanImporter){PassmanImporter.zohoCsv={info:{name:"ZOHO csv",id:"zohoCsv",description:'Create an csv export. Go to Tools -> Export secrets -> Select "General CSV" and click "Export Secrets"'}},PassmanImporter.zohoCsv.readFile=function(file_data){return new C_Promise(function(){for(var parsed_csv=PassmanImporter.readCsv(file_data,!1),credential_list=[],i=0;i<parsed_csv.length;i++){var row=parsed_csv[i],_credential=PassmanImporter.newCredential();_credential.label=row[0],_credential.username=row[3],_credential.password=row[4],_credential.url=row[1],_credential.description=row[2],_credential.label&&credential_list.push(_credential);var progress={percent:i/parsed_csv.length*100,loaded:i,total:parsed_csv.length};this.call_progress(progress)}this.call_then(credential_list)})}}(window,$,PassmanImporter),!window.PassmanExporter)var PassmanExporter={};PassmanExporter.csv={info:{name:"CSV",id:"csv",description:"Export credentials as csv."}},PassmanExporter.csv.export=function(credentials){return new C_Promise(function(){for(var _this=this,headers=["label","username","password","email","description","tags"],file_data='"'+headers.join('","')+'"\n',i=0;i<credentials.length;i++){for(var _credential=credentials[i],row_data=[],h=0;h<headers.length;h++){var field=headers[h];if("tags"===field){for(var _tags=[],t=0;t<_credential[field].length;t++)_tags.push(_credential[field][t].text);var data="["+_tags.join(",")+"]";row_data.push('"'+data+'"')}else row_data.push('"'+_credential[field]+'"')}var progress={percent:i/credentials.length*100,loaded:i,total:credentials.length};_this.call_progress(progress),file_data+=row_data.join(",")+"\n"}_this.call_then(),download(file_data,"passman-export.csv")})},function(){angular.module("passmanApp").controller("BookmarkletCtrl",["$scope","$rootScope","$location","VaultService","CredentialService","SettingsService","NotificationService","EncryptService","TagService","FileService","ShareService","$translate",function($scope,$rootScope,$location,VaultService,CredentialService,SettingsService,NotificationService,EncryptService,TagService,FileService,ShareService,$translate){if($scope.active_vault=!1,$scope.http_warning_hidden=!0,"http"===$location.$$protocol&&($scope.using_http=!0),$scope.logout=function(){$scope.active_vault=!1},SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));VaultService.getVault(_vault).then(function(vault){vault.vaultKey=angular.copy(SettingsService.getSetting("defaultVaultPass")),VaultService.setActiveVault(vault),$scope.active_vault=vault,$scope.pwSettings=VaultService.getVaultSetting("pwSettings",{length:12,useUppercase:!0,useLowercase:!0,useDigits:!0,useSpecialChars:!0,minimumDigitCount:3,avoidAmbiguousCharacters:!1,requireEveryCharType:!0,generateOnCreate:!0})})}VaultService.getVaults().then(function(vaults){$scope.vaults=vaults}),$scope.default_vault=!1,$scope.remember_vault_password=!1,$scope.list_selected_vault=!1,$scope.toggleDefaultVault=function(){$scope.default_vault=!$scope.default_vault,$scope.default_vault===!0?SettingsService.setSetting("defaultVault",$scope.list_selected_vault):SettingsService.setSetting("defaultVault",null)},$scope.toggleRememberPassword=function(){$scope.remember_vault_password=!$scope.remember_vault_password,$scope.remember_vault_password&&(SettingsService.setSetting("defaultVault",$scope.list_selected_vault),$scope.default_vault=!0),$scope.remember_vault_password!==!0&&SettingsService.setSetting("defaultVault",null)},$scope.clearState=function(){$scope.list_selected_vault=!1,$scope.creating_vault=!1,$scope.error=!1},$scope.selectVault=function(vault){$scope.list_selected_vault=vault},$scope.sharing_keys={},$scope.newVault=function(){$scope.creating_vault=!0;var key_size=1024;ShareService.generateRSAKeys(key_size).progress(function(progress){var p=progress>0?2:1,msg=$translate.instant("generating.sharing.keys");msg=msg.replace("%step",p),$scope.creating_keys=msg,$scope.$digest()}).then(function(kp){var pem=ShareService.rsaKeyPairToPEM(kp);$scope.creating_keys=!1,$scope.sharing_keys.private_sharing_key=pem.privateKey,$scope.sharing_keys.public_sharing_key=pem.publicKey,$scope.$digest()})};var _loginToVault=function(vault,vault_key){var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),delete _vault.credentials,$scope.active_vault=_vault};$scope.vaultDecryptionKey="",$scope.loginToVault=function(vault,vault_key){$scope.error=!1;var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),VaultService.setActiveVault(_vault);try{EncryptService.decryptString(vault.challenge_password),$scope.remember_vault_password&&SettingsService.setSetting("defaultVaultPass",vault_key),_loginToVault(vault,vault_key)}catch(e){$scope.error=$translate.instant("invalid.vault.key")}},$scope.createVault=function(vault_name,vault_key,vault_key2){return vault_key!==vault_key2?void($scope.error=$translate.instant("password.do.not.match")):void VaultService.createVault(vault_name).then(function(vault){$scope.vaults.push(vault);var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),VaultService.setActiveVault(_vault);var test_credential=CredentialService.newCredential();test_credential.label="Test key for vault "+vault_name,test_credential.hidden=!0,test_credential.vault_id=vault.vault_id,test_credential.password="lorum ipsum",CredentialService.createCredential(test_credential).then(function(){_vault.public_sharing_key=angular.copy($scope.sharing_keys.public_sharing_key),_vault.private_sharing_key=EncryptService.encryptString(angular.copy($scope.sharing_keys.private_sharing_key)),VaultService.updateSharingKeys(_vault).then(function(){_loginToVault(vault,vault_key)})})})},$scope.storedCredential=CredentialService.newCredential();var QueryString=function(){for(var query_string={},query=window.location.search.substring(1),vars=query.split("&"),i=0;i<vars.length;i++){var pair=vars[i].split("=");if("undefined"==typeof query_string[pair[0]])query_string[pair[0]]=decodeURIComponent(pair[1]);else if("string"==typeof query_string[pair[0]]){var arr=[query_string[pair[0]],decodeURIComponent(pair[1])];query_string[pair[0]]=arr}else query_string[pair[0]].push(decodeURIComponent(pair[1]))}return query_string}(),query_string=QueryString;$scope.storedCredential.label=query_string.title,$scope.storedCredential.url=query_string.url,$scope.setHttpWarning=function(state){$scope.http_warning_hidden=state},$translate(["general","password","custom.fields","files","otp"]).then(function(translations){$scope.tabs=[{title:translations.general,url:"views/partials/forms/edit_credential/basics.html",color:"blue"},{title:translations.password,url:"views/partials/forms/edit_credential/password.html",color:"green"},{title:translations["custom.fields"],url:"views/partials/forms/edit_credential/custom_fields.html",color:"orange"},{title:translations.files,url:"views/partials/forms/edit_credential/files.html",color:"yellow"},{title:translations.otp,url:"views/partials/forms/edit_credential/otp.html",color:"purple"}],$scope.currentTab=$scope.tabs[0]}),$scope.getTags=function($query){return TagService.searchTag($query)},$scope.onClickTab=function(tab){$scope.currentTab=tab},$scope.isActiveTab=function(tab){return tab.url===$scope.currentTab.url},$scope.pwGenerated=function(pass){$scope.storedCredential.password_repeat=pass};var _customField={label:"",value:"",secret:!1,field_type:"text"};$scope.selected_field_type="text",$scope.new_custom_field=angular.copy(_customField),$scope.addCustomField=function(){var _field=angular.copy($scope.new_custom_field);if(_field.label||NotificationService.showNotification($translate.instant("error.no.label"),3e3),_field.value||NotificationService.showNotification($translate.instant("error.no.value"),3e3),_field.label&&_field.value)if($scope.selected_field_type="text",_field.secret=angular.copy("password"===$scope.selected_field_type),_field.field_type=angular.copy($scope.selected_field_type),"file"===_field.field_type){var _file=$scope.new_custom_field.value;FileService.uploadFile(_file).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename),_field.value=result,$scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)})}else $scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)},$scope.addFileToCustomField=function(file){var _file={filename:file.name,size:file.size,mimetype:file.type,data:file.data};$scope.new_custom_field.value=_file,$scope.$digest()},$scope.deleteCustomField=function(field){field.hasOwnProperty("field_type")&&"file"===field.field_type&&FileService.deleteFile(field.value);var idx=$scope.storedCredential.custom_fields.indexOf(field);$scope.storedCredential.custom_fields.splice(idx,1)},$scope.new_file={name:"",data:null},$scope.deleteFile=function(file){var idx=$scope.storedCredential.files.indexOf(file);FileService.deleteFile(file).then(function(){$scope.storedCredential.files.splice(idx,1)})},$scope.fileLoaded=function(file){var _file={filename:file.name,size:file.size,mimetype:file.type,data:file.data};FileService.uploadFile(_file).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename),$scope.storedCredential.files.push(result)}),$scope.$digest()},$scope.fileLoadError=function(error){return error},$scope.selected_file="",$scope.fileprogress=[],$scope.fileSelectProgress=function(progress){progress&&($scope.fileprogress=progress,$scope.$digest())},$scope.renewIntervalValue=0,$scope.renewIntervalModifier="0",$scope.updateInterval=function(renewIntervalValue,renewIntervalModifier){var value=parseInt(renewIntervalValue),modifier=parseInt(renewIntervalModifier);value&&modifier&&($scope.storedCredential.renew_interval=value*modifier)},$scope.parseQR=function(QRCode){var parsedQR,qrInfo,re=/otpauth:\/\/(totp|hotp)\/(.*)\?(secret|issuer)=(.*)&(issuer|secret)=(.*)/;parsedQR=QRCode.qrData.match(re),parsedQR&&(qrInfo={type:parsedQR[1],label:decodeURIComponent(parsedQR[2]),qr_uri:QRCode}),qrInfo[parsedQR[3]]=parsedQR[4],qrInfo[parsedQR[5]]=parsedQR[6],$scope.storedCredential.otp=qrInfo,$scope.$digest()},$scope.saveCredential=function(){delete $scope.storedCredential.password_repeat,$scope.storedCredential.credential_id||($scope.storedCredential.vault_id=$scope.active_vault.vault_id,CredentialService.createCredential($scope.storedCredential).then(function(){NotificationService.showNotification($translate.instant("credential.created"),5e3)}))}}])}(),function(){angular.module("passmanApp").controller("CredentialCtrl",["$scope","VaultService","SettingsService","$location","CredentialService","$rootScope","FileService","EncryptService","TagService","$timeout","NotificationService","CacheService","ShareService","SharingACL","$interval","$filter","$routeParams","$sce","$translate",function($scope,VaultService,SettingsService,$location,CredentialService,$rootScope,FileService,EncryptService,TagService,$timeout,NotificationService,CacheService,ShareService,SharingACL,$interval,$filter,$routeParams,$sce,$translate){if($scope.active_vault=VaultService.getActiveVault(),SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=angular.copy(SettingsService.getSetting("defaultVaultPass")),VaultService.setActiveVault(_vault),$scope.active_vault=_vault}}else $scope.active_vault||$location.path("/");$scope.show_spinner=!0;var fetchCredentials=function(){VaultService.getVault({guid:$routeParams.vault_id}).then(function(vault){var vaultKey=angular.copy($scope.active_vault.vaultKey),_credentials=angular.copy(vault.credentials);vault.credentials=[],$scope.active_vault=vault,$scope.active_vault.vaultKey=vaultKey,VaultService.setActiveVault($scope.active_vault);for(var i=0;i<_credentials.length;i++){var _credential=_credentials[i];try{if(_credential.shared_key){var enc_key=EncryptService.decryptString(_credential.shared_key);_credential=ShareService.decryptSharedCredential(angular.copy(_credential),enc_key)}else _credential=CredentialService.decryptCredential(angular.copy(_credential));_credential.tags_raw=_credential.tags}catch(e){NotificationService.showNotification($translate.instant("error.decrypt"),5e3)}_credential.tags&&TagService.addTags(_credential.tags),_credentials[i]=_credential}ShareService.getCredendialsSharedWithUs(vault.guid).then(function(shared_credentials){for(var c=0;c<shared_credentials.length;c++){var _shared_credential_data,_shared_credential=shared_credentials[c],decrypted_key=EncryptService.decryptString(_shared_credential.shared_key);try{_shared_credential_data=ShareService.decryptSharedCredential(_shared_credential.credential_data,decrypted_key)}catch(e){}_shared_credential_data&&(delete _shared_credential.credential_data,_shared_credential_data.acl=_shared_credential,_shared_credential_data.acl.permissions=new SharingACL(_shared_credential_data.acl.permissions),_shared_credential_data.tags_raw=_shared_credential_data.tags,_shared_credential_data.tags&&TagService.addTags(_shared_credential_data.tags),_credentials.push(_shared_credential_data))}angular.merge($scope.active_vault.credentials,_credentials),$scope.show_spinner=!1})})},getPendingShareRequests=function(){ShareService.getPendingRequests().then(function(shareRequests){shareRequests.length>0&&($scope.incoming_share_requests=shareRequests,jQuery(".share_popup").dialog({width:600,position:["center",90]}))})},refresh_data_interval=null;$scope.active_vault&&($scope.$parent.selectedVault=!0,fetchCredentials(),getPendingShareRequests(),refresh_data_interval=$interval(function(){fetchCredentials(),getPendingShareRequests()},3e5)),$scope.$on("$destroy",function(){$interval.cancel(refresh_data_interval)}),$scope.permissions=new SharingACL(0),$scope.hasPermission=function(acl,permission){if(acl){var tmp=new SharingACL(acl.permission);return tmp.hasPermission(permission)}return!0},$scope.acceptShareRequest=function(share_request){var crypted_shared_key=share_request.shared_key,private_key=EncryptService.decryptString(VaultService.getActiveVault().private_sharing_key);private_key=ShareService.rsaPrivateKeyFromPEM(private_key),crypted_shared_key=private_key.decrypt(forge.util.decode64(crypted_shared_key)),crypted_shared_key=EncryptService.encryptString(crypted_shared_key),ShareService.saveSharingRequest(share_request,crypted_shared_key).then(function(){var idx=$scope.incoming_share_requests.indexOf(share_request);$scope.incoming_share_requests.splice(idx,1);for(var active_share_requests=!1,v=0;v<$scope.incoming_share_requests.length;v++)$scope.incoming_share_requests[v].target_vault_id===$scope.active_vault.vault_id&&(active_share_requests=!0);active_share_requests===!1&&(jQuery(".ui-dialog").remove(),fetchCredentials())})},$scope.declineShareRequest=function(share_request){ShareService.declineSharingRequest(share_request).then(function(){var idx=$scope.incoming_share_requests.indexOf(share_request);$scope.incoming_share_requests.splice(idx,1);for(var active_share_requests=!1,v=0;v<$scope.incoming_share_requests.length;v++)$scope.incoming_share_requests[v].target_vault_id===$scope.active_vault.vault_id&&(active_share_requests=!0);active_share_requests===!1&&(jQuery(".ui-dialog").remove(),fetchCredentials())})},$scope.addCredential=function(){var new_credential=CredentialService.newCredential(),enc_c=CredentialService.encryptCredential(new_credential);SettingsService.setSetting("edit_credential",enc_c),$location.path("/vault/"+$scope.active_vault.guid+"/new")},$scope.editCredential=function(credential){var _credential=angular.copy(credential);$rootScope.$emit("app_menu",!1),SettingsService.setSetting("edit_credential",CredentialService.encryptCredential(_credential)),$location.path("/vault/"+$scope.active_vault.guid+"/edit/"+_credential.guid)},$scope.getRevisions=function(credential){var _credential=angular.copy(credential);$rootScope.$emit("app_menu",!1),SettingsService.setSetting("revision_credential",CredentialService.encryptCredential(_credential)),$location.path("/vault/"+$scope.active_vault.guid+"/"+_credential.guid+"/revisions")},$scope.shareCredential=function(credential){var _credential=angular.copy(credential);$rootScope.$emit("app_menu",!1),SettingsService.setSetting("share_credential",CredentialService.encryptCredential(_credential)),$location.path("/vault/"+$scope.active_vault.guid+"/"+_credential.guid+"/share")};var notification;$scope.deleteCredential=function(credential){var _credential=angular.copy(credential);try{_credential=CredentialService.decryptCredential(angular.copy(credential))}catch(e){}_credential.delete_time=(new Date).getTime()/1e3;for(var i=0;i<$scope.active_vault.credentials.length;i++)$scope.active_vault.credentials[i].credential_id===credential.credential_id&&($scope.active_vault.credentials[i].delete_time=_credential.delete_time);$scope.closeSelected(),notification&&NotificationService.hideNotification(notification),notification=NotificationService.showNotification($translate.instant("credential.deleted"),5e3,function(){CredentialService.updateCredential(_credential).then(function(result){result.delete_time>0&&(notification=!1)})})},$scope.recoverCredential=function(credential){var _credential=angular.copy(credential);try{_credential=CredentialService.decryptCredential(angular.copy(credential))}catch(e){}for(var i=0;i<$scope.active_vault.credentials.length;i++)$scope.active_vault.credentials[i].credential_id===credential.credential_id&&($scope.active_vault.credentials[i].delete_time=0);_credential.delete_time=0,$scope.closeSelected(),notification&&NotificationService.hideNotification(notification),NotificationService.showNotification($translate.instant("credential.recovered"),5e3,function(){CredentialService.updateCredential(_credential).then(function(){notification=!1})})},$scope.destroyCredential=function(credential){var _credential=angular.copy(credential);CredentialService.destroyCredential(_credential.guid).then(function(){for(var i=0;i<$scope.active_vault.credentials.length;i++)if($scope.active_vault.credentials[i].credential_id===credential.credential_id){$scope.active_vault.credentials.splice(i,1),NotificationService.showNotification($translate.instant("credential.destroyed"),5e3);break}})},$scope.view_mode="list",$scope.switchViewMode=function(viewMode){$scope.view_mode=viewMode},$scope.filterOptions={filterText:"",fields:["label","username","email","password","custom_fields"]},$scope.filtered_credentials=[],$scope.$watch("[selectedtags, filterOptions, delete_time, active_vault.credentials]",function(){if($scope.active_vault&&$scope.active_vault.credentials){var credentials=angular.copy($scope.active_vault.credentials),filtered_credentials=$filter("credentialSearch")(credentials,$scope.filterOptions);filtered_credentials=$filter("tagFilter")(filtered_credentials,$scope.selectedtags),filtered_credentials=$filter("filter")(filtered_credentials,{hidden:0}),$scope.filtered_credentials=filtered_credentials}},!0),$scope.selectedtags=[];var to;$rootScope.$on("selected_tags_updated",function(evt,_sTags){for(var _selectedTags=[],x=0;x<_sTags.length;x++)_selectedTags.push(_sTags[x].text);$scope.selectedtags=_selectedTags,$timeout.cancel(to),_selectedTags.length>0&&(to=$timeout(function(){if($scope.filtered_credentials){for(var _filtered_tags=[],i=0;i<$scope.filtered_credentials.length;i++)for(var tags=$scope.filtered_credentials[i].tags_raw,x=0;x<tags.length;x++){var tag=tags[x].text;_filtered_tags.indexOf(tag)===-1&&_filtered_tags.push(tag)}$rootScope.$emit("limit_tags_in_list",_filtered_tags)}},50))}),$scope.delete_time=0,$scope.showCredentialRow=function(credential){return 0===$scope.delete_time?0===credential.delete_time:credential.delete_time>$scope.delete_time},$rootScope.$on("set_delete_time",function(event,time){$scope.delete_time=time}),$scope.setDeleteTime=function(delete_time){$scope.delete_time=delete_time},$scope.selectedCredential=!1,$scope.selectCredential=function(credential){credential.description&&(credential.description_html=$sce.trustAsHtml(angular.copy(credential.description).replace("\n","<br />"))),$scope.selectedCredential=angular.copy(credential),$rootScope.$emit("app_menu",!0)},$scope.closeSelected=function(){$rootScope.$emit("app_menu",!1),$scope.selectedCredential=!1},$rootScope.$on("logout",function(){$scope.active_vault=null,$scope.credentials=[]}),$scope.downloadFile=function(credential,file){var callback=function(result){var key=null;if(!result.hasOwnProperty("file_data"))return void NotificationService.showNotification($translate.instant("error.loading.file.perm"),5e3);!credential.hasOwnProperty("acl")&&credential.hasOwnProperty("shared_key")&&credential.shared_key&&(key=EncryptService.decryptString(angular.copy(credential.shared_key))),credential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy(credential.acl.shared_key)));var file_data=EncryptService.decryptString(result.file_data,key);download(file_data,escapeHTML(file.filename),file.mimetype)};credential.hasOwnProperty("acl")?ShareService.downloadSharedFile(credential,file).then(callback):FileService.getFile(file).then(callback)}}])}(),function(){angular.module("passmanApp").controller("CredentialEditCtrl",["$scope","VaultService","CredentialService","SettingsService","$location","$routeParams","FileService","EncryptService","TagService","NotificationService","ShareService","$translate",function($scope,VaultService,CredentialService,SettingsService,$location,$routeParams,FileService,EncryptService,TagService,NotificationService,ShareService,$translate){if($scope.active_vault=VaultService.getActiveVault(),SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=SettingsService.getSetting("defaultVaultPass"),VaultService.setActiveVault(_vault),$scope.active_vault=_vault}}else if(!$scope.active_vault)return void $location.path("/");VaultService.getVault($scope.active_vault).then(function(vault){vault.vaultKey=VaultService.getActiveVault().vaultKey,delete vault.credentials,VaultService.setActiveVault(vault),$scope.pwSettings=VaultService.getVaultSetting("pwSettings",{length:12,useUppercase:!0,useLowercase:!0,useDigits:!0,useSpecialChars:!0,minimumDigitCount:3,avoidAmbiguousCharacters:!1,requireEveryCharType:!0,generateOnCreate:!0})}),$scope.currentTab={title:$translate.instant("general"),url:"views/partials/forms/edit_credential/basics.html",color:"blue"},$scope.tabs=[{title:$translate.instant("general"),url:"views/partials/forms/edit_credential/basics.html",color:"blue"},{title:$translate.instant("password"),url:"views/partials/forms/edit_credential/password.html",color:"green"},{title:$translate.instant("custom.fields"),url:"views/partials/forms/edit_credential/custom_fields.html",color:"orange"},{title:$translate.instant("files"),url:"views/partials/forms/edit_credential/files.html",color:"yellow"},{title:$translate.instant("otp"),url:"views/partials/forms/edit_credential/otp.html",color:"purple"}],$scope.active_vault&&($scope.$parent.selectedVault=!0);var storedCredential=SettingsService.getSetting("edit_credential");storedCredential?($scope.storedCredential=CredentialService.decryptCredential(angular.copy(storedCredential)),$scope.storedCredential.password_repeat=angular.copy($scope.storedCredential.password),$scope.storedCredential.expire_time=1e3*$scope.storedCredential.expire_time):CredentialService.getCredential($routeParams.credential_id).then(function(result){$scope.storedCredential=CredentialService.decryptCredential(angular.copy(result))}),$scope.getTags=function($query){return TagService.searchTag($query)},$scope.onClickTab=function(tab){$scope.currentTab=tab},$scope.isActiveTab=function(tab){return tab.url===$scope.currentTab.url},$scope.pwGenerated=function(pass){$scope.storedCredential.password_repeat=pass};var _customField={label:"",value:"",secret:!1,field_type:"text"};$scope.selected_field_type="text",$scope.new_custom_field=angular.copy(_customField),$scope.addCustomField=function(){var _field=angular.copy($scope.new_custom_field);if(_field.label||NotificationService.showNotification($translate.instant("error.no.label"),3e3),_field.value||NotificationService.showNotification($translate.instant("error.no.value"),3e3),_field.label&&_field.value)if($scope.selected_field_type="text",_field.secret=angular.copy("password"===$scope.selected_field_type),_field.field_type=angular.copy($scope.selected_field_type),"file"===_field.field_type){var key=!1,_file=$scope.new_custom_field.value;!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),FileService.uploadFile(_file,key).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename,key),_field.value=result,$scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)})}else $scope.storedCredential.custom_fields.push(_field),$scope.new_custom_field=angular.copy(_customField)},$scope.addFileToCustomField=function(file){var _file={filename:file.name,size:file.size,mimetype:file.type,data:file.data};$scope.new_custom_field.value=_file,$scope.$digest()},$scope.deleteCustomField=function(field){field.hasOwnProperty("field_type")&&"file"===field.field_type&&FileService.deleteFile(field.value);var idx=$scope.storedCredential.custom_fields.indexOf(field);$scope.storedCredential.custom_fields.splice(idx,1)},$scope.new_file={name:"",data:null},$scope.deleteFile=function(file){var idx=$scope.storedCredential.files.indexOf(file);FileService.deleteFile(file).then(function(){$scope.storedCredential.files.splice(idx,1)})},$scope.fileLoaded=function(file){var key,_file={filename:file.name,size:file.size,mimetype:file.type,data:file.data};!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),
FileService.uploadFile(_file,key).then(function(result){delete result.file_data,result.filename=EncryptService.decryptString(result.filename,key),$scope.storedCredential.files.push(result)}),$scope.$digest()},$scope.fileLoadError=function(error){console.log($translate.instant("error.loading.file"),error)},$scope.selected_file="",$scope.fileprogress=[],$scope.fileSelectProgress=function(progress){progress&&($scope.fileprogress=progress,$scope.$digest())},$scope.renewIntervalValue=0,$scope.renewIntervalModifier="0",$scope.updateInterval=function(renewIntervalValue,renewIntervalModifier){var value=parseInt(renewIntervalValue),modifier=parseInt(renewIntervalModifier);value&&modifier&&($scope.storedCredential.renew_interval=value*modifier)},$scope.parseQR=function(QRCode){var parsedQR,qrInfo,re=/otpauth:\/\/(totp|hotp)\/(.*)\?(secret|issuer)=(.*)&(issuer|secret)=(.*)/;parsedQR=QRCode.qrData.match(re),parsedQR&&(qrInfo={type:parsedQR[1],label:decodeURIComponent(parsedQR[2]),qr_uri:QRCode}),qrInfo[parsedQR[3]]=parsedQR[4],qrInfo[parsedQR[5]]=parsedQR[6],$scope.storedCredential.otp=qrInfo,$scope.$digest()},$scope.saveCredential=function(){if($scope.new_custom_field.label&&$scope.new_custom_field.value&&$scope.storedCredential.custom_fields.push(angular.copy($scope.new_custom_field)),delete $scope.storedCredential.password_repeat,$scope.storedCredential.credential_id){var key,_credential;!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),_credential=key?ShareService.encryptSharedCredential($scope.storedCredential,key):angular.copy($scope.storedCredential),delete _credential.shared_key;var _useKey=null!=key,regex=/(<([^>]+)>)/gi;_credential.description&&""!==_credential.description&&(_credential.description=_credential.description.replace(regex,"")),CredentialService.updateCredential(_credential,_useKey).then(function(){SettingsService.setSetting("edit_credential",null),$location.path("/vault/"+$routeParams.vault_id),NotificationService.showNotification($translate.instant("credential.updated"),5e3)})}else $scope.storedCredential.vault_id=$scope.active_vault.vault_id,CredentialService.createCredential($scope.storedCredential).then(function(){$location.path("/vault/"+$routeParams.vault_id),NotificationService.showNotification($translate.instant("credential.created"),5e3)})},$scope.cancel=function(){$location.path("/vault/"+$routeParams.vault_id)}}])}(),function(){angular.module("passmanApp").controller("ExportCtrl",["$scope","$window","CredentialService","VaultService","$translate",function($scope,$window,CredentialService,VaultService,$translate){$scope.available_exporters=[],$scope.active_vault=VaultService.getActiveVault(),$scope.$watch(function(){return $window.PassmanExporter},function(exporters){exporters=Object.keys(angular.copy(exporters));for(var i=0;i<exporters.length;i++){var exporter=exporters[i];$window.PassmanExporter[exporter].hasOwnProperty("info")&&$scope.available_exporters.push($window.PassmanExporter[exporter].info)}},!0),$scope.log=[],$scope.setExporter=function(exporter){exporter=JSON.parse(exporter),$scope.selectedExporter=exporter};var _log=function(str){$scope.log.push(str)};$scope.startExport=function(){_log($translate.instant("export.starting"));var _credentials=[];VaultService.getVault(VaultService.getActiveVault()).then(function(vault){if(_log($translate.instant("export.decrypt")),vault.hasOwnProperty("credentials")&&vault.credentials.length>0){for(var i=0;i<vault.credentials.length;i++){var _credential=angular.copy(vault.credentials[i]);0===_credential.hidden&&(_credential=CredentialService.decryptCredential(_credential),_credentials.push(_credential))}$window.PassmanExporter[$scope.selectedExporter.id].export(_credentials).then(function(){_log($translate.instant("done"))})}})}}])}(),function(){angular.module("passmanApp").controller("ImportCtrl",["$scope","$window","CredentialService","VaultService","$translate",function($scope,$window,CredentialService,VaultService,$translate){$scope.available_importers=[],$scope.active_vault=VaultService.getActiveVault(),$scope.$watch(function(){return $window.PassmanImporter},function(importers){for(var key in importers){var importer=importers[key];importer.hasOwnProperty("info")&&$scope.available_importers.push(importer.info)}},!0),$scope.log=[],$scope.setImporter=function(importer){importer=JSON.parse(importer),$scope.selectedImporter=importer};var file_data,_log=function(str){$scope.log.push(str)};$scope.fileLoaded=function(file){file_data=file.data.split(","),file_data=decodeURIComponent(escape(window.atob(file_data[1]))),_log($translate.instant("import.file.read")),$scope.$digest()},$scope.fileLoadError=function(file){console.error($translate.instant("error.loading.file"),file)},$scope.fileSelectProgress=function(){};var parsed_data;$scope.import_progress={progress:0,loaded:0,total:0};var addCredential=function(parsed_data_index){if(parsed_data[parsed_data_index]){var _credential=parsed_data[parsed_data_index];if(!_credential.label)return void(parsed_data[parsed_data_index+1]&&(_log($translate.instant("import.no.label")),addCredential(parsed_data_index+1)));_log($translate.instant("import.adding").replace("{{credential}}",_credential.label)),_credential.vault_id=$scope.active_vault.vault_id,CredentialService.createCredential(_credential).then(function(result){result.credential_id&&(_log($translate.instant("import.added").replace("{{credential}}",_credential.label)),parsed_data[parsed_data_index+1]?($scope.import_progress={progress:parsed_data_index/parsed_data.length*100,loaded:parsed_data_index,total:parsed_data.length},addCredential(parsed_data_index+1)):($scope.import_progress={progress:100,loaded:parsed_data.length,total:parsed_data.length},_log($translate.instant("done"))))})}};$scope.file_read_progress={percent:0,loaded:0,total:0},$scope.startImport=function(){$scope.import_progress=0,$scope.file_read_percent=0,file_data&&$window.PassmanImporter[$scope.selectedImporter.id].readFile(file_data).then(function(parseddata){parsed_data=parseddata,$scope.file_read_progress={percent:100,loaded:parsed_data.length,total:parsed_data.length};var msg=$translate.instant("import.loaded").replace("{{num}}",parsed_data.length);_log(msg),parsed_data.length>0&&addCredential(0)}).progress(function(progress){$scope.file_read_progress=progress,$scope.$digest()})}}])}(),function(){angular.module("passmanApp").controller("MainCtrl",["$scope","$rootScope","$location",function($scope,$rootScope,$location){$scope.selectedVault=!1,$scope.http_warning_hidden=!0,"http"===$location.$$protocol&&"localhost"!==$location.$$host&&"127.0.0.1"!==$location.$host&&($scope.using_http=!0,$scope.http_warning_hidden=!1),$rootScope.setHttpWarning=function(state){$scope.http_warning_hidden=state},$rootScope.$on("app_menu",function(evt,shown){$scope.app_sidebar=shown}),$rootScope.$on("logout",function(){$scope.selectedVault=!1})}])}(),function(){angular.module("passmanApp").controller("MenuCtrl",["$scope","VaultService","$location","$rootScope","TagService","SettingsService",function($scope,VaultService,$location,$rootScope,TagService,SettingsService){$rootScope.logout=function(){SettingsService.setSetting("defaultVaultPass",!1),$rootScope.$broadcast("logout"),$location.path("/")},$scope.selectedTags=[],$scope.getTags=function($query){return TagService.searchTag($query)},$scope.$watch(function(){return VaultService.getActiveVault()},function(vault){$scope.active_vault=vault}),$scope.filtered_tags=[],$rootScope.$on("limit_tags_in_list",function(evt,tags){$scope.filtered_tags=[];for(var i=0;i<tags.length;i++){for(var tag={text:tags[i]},found=!1,x=0;x<$scope.selectedTags.length;x++)$scope.selectedTags[x].text===tag.text&&(found=!0);found===!1&&$scope.filtered_tags.push(tag)}}),$scope.$watch("selectedTags",function(){$rootScope.$broadcast("selected_tags_updated",$scope.selectedTags)},!0),$scope.tagClicked=function(tag){$scope.selectedTags.push(tag)},$scope.available_tags=TagService.getTags(),$scope.$watch(function(){return 0===$scope.selectedTags.length?TagService.getTags():$scope.filtered_tags},function(tags){$scope.available_tags=tags},!0),$scope.toggleDeleteTime=function(){$scope.delete_time>0?$scope.delete_time=0:$scope.delete_time=1,$rootScope.$broadcast("set_delete_time",$scope.delete_time)}}])}(),function(){angular.module("passmanApp").controller("PublicSharedCredential",["$scope","ShareService","$window","EncryptService","NotificationService","$translate",function($scope,ShareService,$window,EncryptService,NotificationService,$translate){var _key;$scope.loading=!1,$scope.loadSharedCredential=function(){$scope.loading=!0;var data=window.atob($window.location.hash.replace("#","")).split("<::>"),guid=data[0];_key=data[1],ShareService.getPublicSharedCredential(guid).then(function(sharedCredential){$scope.loading=!1,200===sharedCredential.status?$scope.shared_credential=ShareService.decryptSharedCredential(sharedCredential.data.credential_data,_key):$scope.expired=!0})},$scope.downloadFile=function(credential,file){ShareService.downloadSharedFile(credential,file).then(function(result){if(!result.hasOwnProperty("file_data"))return void NotificationService.showNotification($translate.instant("error.loading.file.perm"),5e3);var file_data=EncryptService.decryptString(result.file_data,_key);download(file_data,escapeHTML(file.filename),file.mimetype)})}}])}(),function(){angular.module("passmanApp").controller("RevisionCtrl",["$scope","SettingsService","VaultService","CredentialService","$location","$routeParams","$rootScope","NotificationService","$filter","ShareService","EncryptService","$translate",function($scope,SettingsService,VaultService,CredentialService,$location,$routeParams,$rootScope,NotificationService,$filter,ShareService,EncryptService,$translate){if($scope.active_vault=VaultService.getActiveVault(),SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=SettingsService.getSetting("defaultVaultPass"),VaultService.setActiveVault(_vault),VaultService.getVault(_vault).then(function(vault){vault.vaultKey=SettingsService.getSetting("defaultVaultPass"),VaultService.setActiveVault(vault),$scope.active_vault=vault,$scope.$parent.selectedVault=!0})}}else $scope.active_vault||$location.path("/");$scope.active_vault&&($scope.$parent.selectedVault=!0);var storedCredential=SettingsService.getSetting("revision_credential"),getRevisions=function(){CredentialService.getRevisions($scope.storedCredential.guid).then(function(revisions){$scope.revisions=revisions})};storedCredential?($scope.storedCredential=CredentialService.decryptCredential(angular.copy(storedCredential)),getRevisions()):CredentialService.getCredential($routeParams.credential_id).then(function(result){$scope.storedCredential=CredentialService.decryptCredential(angular.copy(result)),getRevisions()}),$scope.selectRevision=function(revision){var key;$scope.selectedRevision=angular.copy(revision),!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),key?$scope.selectedRevision.credential_data=ShareService.decryptSharedCredential(angular.copy(revision.credential_data),key):$scope.selectedRevision.credential_data=CredentialService.decryptCredential(angular.copy(revision.credential_data)),$rootScope.$emit("app_menu",!0)},$scope.closeSelected=function(){$rootScope.$emit("app_menu",!1),$scope.selectedRevision=!1},$scope.deleteRevision=function(revision){CredentialService.deleteRevision($scope.storedCredential.guid,revision.revision_id).then(function(){for(var i=0;i<$scope.revisions.length;i++)if($scope.revisions[i].revision_id===revision.revision_id){$scope.revisions.splice(i,1),NotificationService.showNotification($translate.instant("revision.deleted"),5e3);break}})},$scope.restoreRevision=function(revision){var key,_revision=angular.copy(revision),_credential=_revision.credential_data;!$scope.storedCredential.hasOwnProperty("acl")&&$scope.storedCredential.hasOwnProperty("shared_key")&&$scope.storedCredential.shared_key&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key))),$scope.storedCredential.hasOwnProperty("acl")&&(key=EncryptService.decryptString(angular.copy($scope.storedCredential.acl.shared_key))),key&&(_credential=ShareService.encryptSharedCredential(_credential,key)),delete _credential.shared_key,_credential.revision_created=$filter("date")(1e3*_revision.created,"dd-MM-yyyy @ HH:mm:ss"),CredentialService.updateCredential(_credential,key).then(function(){SettingsService.setSetting("revision_credential",null),$rootScope.$emit("app_menu",!1),$location.path("/vault/"+$routeParams.vault_id),NotificationService.showNotification($translate.instant("revision.restored"),5e3)})},$scope.cancel=function(){$location.path("/vault/"+$routeParams.vault_id),$scope.storedCredential=null,SettingsService.setSetting("revision_credential",null)}}])}(),function(){angular.module("passmanApp").controller("SettingsCtrl",["$scope","$rootScope","SettingsService","VaultService","CredentialService","$location","$routeParams","$http","EncryptService","NotificationService","$sce","$translate",function($scope,$rootScope,SettingsService,VaultService,CredentialService,$location,$routeParams,$http,EncryptService,NotificationService,$sce,$translate){if($scope.vault_settings={},$scope.new_vault_name="",$scope.active_vault=VaultService.getActiveVault(),SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=SettingsService.getSetting("defaultVaultPass"),VaultService.setActiveVault(_vault),$scope.active_vault=_vault}}else if(!$scope.active_vault)return void $location.path("/");VaultService.getVault($scope.active_vault).then(function(vault){vault.vaultKey=VaultService.getActiveVault().vaultKey,delete vault.credentials,VaultService.setActiveVault(vault),$scope.vault_settings=vault.vault_settings,$scope.vault_settings.hasOwnProperty("pwSettings")||($scope.vault_settings.pwSettings={length:12,useUppercase:!0,useLowercase:!0,useDigits:!0,useSpecialChars:!0,minimumDigitCount:3,avoidAmbiguousCharacters:!1,requireEveryCharType:!0,generateOnCreate:!0})});var btn_txt=$translate.instant("bookmarklet.text"),http=location.protocol,slashes=http.concat("//"),host=slashes.concat(window.location.hostname),complete=host+location.pathname;$scope.bookmarklet=$sce.trustAsHtml('<a class="button" href="javascript:(function(){var a=window,b=document,c=encodeURIComponent,e=c(document.title),d=a.open(\''+complete+"bookmarklet?url='+c(b.location)+'&title='+e,'bkmk_popup','left='+((a.screenX||a.screenLeft)+10)+',top='+((a.screenY||a.screenTop)+10)+',height=750px,width=475px,resizable=0,alwaysRaised=1');a.setTimeout(function(){d.focus()},300);})();\">"+btn_txt+"</a>"),$scope.saveVaultSettings=function(){var _vault=$scope.active_vault;_vault.name=$scope.new_vault_name,_vault.vault_settings=angular.copy($scope.vault_settings),VaultService.updateVault(_vault).then(function(){$scope.active_vault.name=angular.copy(_vault.name),NotificationService.showNotification($translate.instant("settings.saved"),5e3)})},$scope.tabs=[{title:$translate.instant("settings.general"),url:"views/partials/forms/settings/general_settings.html"},{title:$translate.instant("settings.audit"),url:"views/partials/forms/settings/tool.html"},{title:$translate.instant("settings.password"),url:"views/partials/forms/settings/password_settings.html"},{title:$translate.instant("settings.import"),url:"views/partials/forms/settings/import.html"},{title:$translate.instant("settings.export"),url:"views/partials/forms/settings/export.html"},{title:$translate.instant("settings.sharing"),url:"views/partials/forms/settings/sharing.html"}],$scope.currentTab=$scope.tabs[0],$scope.onClickTab=function(tab){$scope.currentTab=tab},$scope.isActiveTab=function(tab){return tab.url===$scope.currentTab.url};var getPassmanVersion=function(){var url=OC.generateUrl("apps/passman/api/internal/version");$http.get(url).then(function(result){$scope.passman_version=result.data.version})};getPassmanVersion(),$scope.$watch(function(){return VaultService.getActiveVault()},function(vault){vault&&($scope.active_vault=vault)}),$rootScope.$on("logout",function(){$scope.selectedVault=!1}),$scope.startScan=function(minStrength){VaultService.getVault($scope.active_vault).then(function(vault){for(var results=[],i=0;i<vault.credentials.length;i++){var c=angular.copy(vault.credentials[i]);if(c.password&&0===c.hidden)try{if(c=CredentialService.decryptCredential(c),c.password){var zxcvbn_result=zxcvbn(c.password);zxcvbn_result.score<=minStrength&&results.push({credential_id:c.credential_id,label:c.label,password:c.password,password_zxcvbn_result:zxcvbn_result})}}catch(e){console.warn(e)}}$scope.scan_result=results})},$scope.cur_state={},$scope.$on("$locationChangeStart",function(event){$scope.change_pw&&$scope.change_pw.total>0&&$scope.change_pw.done<$scope.change_pw.total&&(confirm($translate.instant("changepw.navigate.away.warning"))||event.preventDefault())}),$scope.changeVaultPassword=function(oldVaultPass,newVaultPass,newVaultPass2){return oldVaultPass!==VaultService.getActiveVault().vaultKey?void($scope.error=$translate.instant("incorrect.password")):newVaultPass!==newVaultPass2?void($scope.error=$translate.instant("password.no.match")):void VaultService.getVault($scope.active_vault).then(function(vault){var _selected_credentials=[];0===vault.credentials.length&&$location.path("/");for(var i=0;i<vault.credentials.length;i++){var _credential=vault.credentials[i];null!==_credential.shared_key&&""!==_credential.shared_key||_selected_credentials.push(_credential)}$scope.change_pw={percent:0,done:0,total:_selected_credentials.length};var changeCredential=function(index,oldVaultPass,newVaultPass){CredentialService.reencryptCredential(_selected_credentials[index].guid,oldVaultPass,newVaultPass).progress(function(data){$scope.cur_state=data}).then(function(){var percent=index/_selected_credentials.length*100;$scope.change_pw={percent:percent,done:index+1,total:_selected_credentials.length},index<_selected_credentials.length-1?changeCredential(index+1,oldVaultPass,newVaultPass):(vault.private_sharing_key=EncryptService.decryptString(angular.copy(vault.private_sharing_key),oldVaultPass),vault.private_sharing_key=EncryptService.encryptString(vault.private_sharing_key,newVaultPass),VaultService.updateSharingKeys(vault).then(function(){$rootScope.$broadcast("logout"),NotificationService.showNotification($translate.instant("login.new.pass"),5e3)}))})};changeCredential(0,VaultService.getActiveVault().vaultKey,newVaultPass)})},$rootScope.$on("logout",function(){$scope.active_vault=null,VaultService.setActiveVault(null),$location.path("/")}),$scope.cancel=function(){$location.path("/vault/"+$routeParams.vault_id)}}])}(),function(){angular.module("passmanApp").controller("ShareCtrl",["$scope","VaultService","CredentialService","SettingsService","$location","$routeParams","ShareService","NotificationService","SharingACL","EncryptService","$translate",function($scope,VaultService,CredentialService,SettingsService,$location,$routeParams,ShareService,NotificationService,SharingACL,EncryptService,$translate){if($scope.active_vault=VaultService.getActiveVault(),$scope.tabs=[{title:$translate.instant("share.u.g"),url:"views/partials/forms/share_credential/basics.html"},{title:$translate.instant("share.link"),url:"views/partials/forms/share_credential/link_sharing.html",color:"green"}],$scope.currentTab=$scope.tabs[0],$scope.onClickTab=function(tab){$scope.currentTab=tab},$scope.isActiveTab=function(tab){return tab.url===$scope.currentTab.url},SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){if(SettingsService.getSetting("defaultVault")&&SettingsService.getSetting("defaultVaultPass")){var _vault=angular.copy(SettingsService.getSetting("defaultVault"));_vault.vaultKey=angular.copy(SettingsService.getSetting("defaultVaultPass")),VaultService.setActiveVault(_vault),$scope.active_vault=_vault}}else $scope.active_vault||$location.path("/");var storedCredential=SettingsService.getSetting("share_credential");storedCredential?$scope.storedCredential=CredentialService.decryptCredential(angular.copy(storedCredential)):$location.path("/vault/"+$routeParams.vault_id),$scope.active_vault&&($scope.$parent.selectedVault=!0),$scope.cancel=function(){SettingsService.setSetting("share_credential",null),$location.path("/vault/"+$routeParams.vault_id)},$scope.default_permissions=new SharingACL(0),$scope.default_permissions.addPermission($scope.default_permissions.permissions.READ|$scope.default_permissions.permissions.WRITE|$scope.default_permissions.permissions.FILES);var link_acl=angular.copy($scope.default_permissions);link_acl.removePermission($scope.default_permissions.permissions.WRITE);var oneMonthLater=new Date;oneMonthLater.setMonth(oneMonthLater.getMonth()+1),$scope.share_settings={linkSharing:{enabled:!1,settings:{expire_time:oneMonthLater,expire_views:5,acl:link_acl}},credentialSharedWithUserAndGroup:[],cypher_progress:{done:0,total:0},upload_progress:{done:0,total:0}};var getAcl=function(){ShareService.getSharedCredentialACL($scope.storedCredential).then(function(aclList){for(var _list=[],enc_key=!!$scope.storedCredential.shared_key&&EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key)),i=0;i<aclList.length;i++){var acl=aclList[i];if(null===acl.user_id){if($scope.share_settings.linkSharing={enabled:!0,settings:{expire_time:new Date(1e3*acl.expire),expire_views:acl.expire_views,acl:new SharingACL(acl.permissions)}},enc_key){var hash=window.btoa($scope.storedCredential.guid+"<::>"+enc_key);$scope.share_link=getShareLink(hash)}}else{var obj={userId:acl.user_id,displayName:acl.user_id,type:"user",acl:new SharingACL(acl.permissions),acl_id:acl.acl_id,pending:acl.pending,credential_guid:acl.item_guid,created:acl.created};_list.push(obj)}}$scope.share_settings.credentialSharedWithUserAndGroup=_list})};getAcl();new SharingACL(0);$scope.$watch("share_settings.upload_progress.done",function(){$scope.share_settings.upload_progress.done===$scope.share_settings.upload_progress.total&&$scope.share_settings.upload_progress.total>0&&getAcl()}),$scope.inputSharedWith=[],$scope.searchUsers=function($query){return ShareService.search($query)},$scope.hasPermission=function(acl,permission){return acl.hasPermission(permission)},$scope.setPermission=function(acl,permission){acl.togglePermission(permission)},$scope.shareWith=function(shareWith){if($scope.inputSharedWith=[],shareWith.length>0)for(var i=0;i<shareWith.length;i++){for(var obj={userId:shareWith[i].uid,displayName:shareWith[i].text,type:shareWith[i].type,acl:angular.copy($scope.default_permissions),pending:!0,credential_guid:$scope.storedCredential.guid},found=!1,z=0;z<$scope.share_settings.credentialSharedWithUserAndGroup.length;z++)$scope.share_settings.credentialSharedWithUserAndGroup[z].userId===shareWith[z].uid&&(found=!0);found===!1&&$scope.share_settings.credentialSharedWithUserAndGroup.push(obj)}},$scope.unshareUser=function(user){ShareService.unshareCredentialFromUser($scope.storedCredential,user.userId).then(function(result){if(result.result===!0){var idx=$scope.share_settings.credentialSharedWithUserAndGroup.indexOf(user);$scope.share_settings.credentialSharedWithUserAndGroup.splice(idx,1)}})},$scope.unshareCredential=function(credential){ShareService.unshareCredential(credential);var _credential=angular.copy(credential),old_key=EncryptService.decryptString(angular.copy(_credential.shared_key)),new_key=VaultService.getActiveVault().vaultKey;_credential.shared_key=null,_credential.unshare_action=!0,_credential.skip_revision=!0,_credential=CredentialService.encryptCredential(_credential,old_key),CredentialService.updateCredential(_credential,!0).then(function(){NotificationService.showNotification($translate.instant("credential.unshared"),4e3),CredentialService.reencryptCredential(_credential.guid,old_key,new_key).then(function(){getAcl()})})},$scope.applyShareToUser=function(user,enc_key){ShareService.getVaultsByUser(user.userId).then(function(data){$scope.share_settings.cypher_progress.total+=data.length,user.vaults=data;var start=(new Date).getTime()/1e3;ShareService.cypherRSAStringWithPublicKeyBulkAsync(user.vaults,enc_key).progress(function(){$scope.share_settings.cypher_progress.done++,$scope.share_settings.cypher_progress.percent=$scope.share_settings.cypher_progress.done/$scope.share_settings.cypher_progress.total*100,$scope.$digest()}).then(function(result){$scope.share_settings.cypher_progress.times.push({time:(new Date).getTime()/1e3-start,user:data[0].user_id}),user.vaults=result,user.hasOwnProperty("acl_id")||$scope.uploadChanges(user),$scope.$digest()})})},$scope.$on("$locationChangeStart",function(event){$scope.sharing_complete||confirm($translate.instant("share.navigate.away.warning"))||event.preventDefault()});var getShareLink=function(hash){var port,defaultPort="http"===$location.$$protocol?80:443;return port=defaultPort!==$location.$$port?":"+$location.$$port:"",$location.$$protocol+"://"+$location.$$host+port+OC.generateUrl("apps/passman/share/public#")+hash};$scope.sharing_complete=!0,$scope.applyShare=function(){if($scope.sharing_complete=!1,$scope.share_settings.cypher_progress.percent=0,$scope.share_settings.cypher_progress.done=0,$scope.share_settings.cypher_progress.total=0,$scope.share_settings.cypher_progress.times=[],$scope.share_settings.cypher_progress.times_total=[],$scope.share_settings.upload_progress.done=0,$scope.share_settings.upload_progress.total=0,$scope.storedCredential.shared_key&&""!==$scope.storedCredential.shared_key&&null!==$scope.storedCredential.shared_key){var enc_key=EncryptService.decryptString(angular.copy($scope.storedCredential.shared_key));if($scope.share_settings.linkSharing.enabled){var expire_time=new Date(angular.copy($scope.share_settings.linkSharing.settings.expire_time)).getTime()/1e3,shareObj={item_id:$scope.storedCredential.credential_id,item_guid:$scope.storedCredential.guid,permissions:$scope.share_settings.linkSharing.settings.acl.getAccessLevel(),expire_timestamp:expire_time,expire_views:$scope.share_settings.linkSharing.settings.expire_views};ShareService.createPublicSharedCredential(shareObj).then(function(){var hash=window.btoa($scope.storedCredential.guid+"<::>"+enc_key);$scope.share_link=getShareLink(hash)})}for(var list=$scope.share_settings.credentialSharedWithUserAndGroup,i=0;i<list.length;i++){var iterator=i,target_user=list[i];if(target_user.hasOwnProperty("created")){var acl={user_id:target_user.userId,permission:target_user.acl.getAccessLevel()};ShareService.updateCredentialAcl($scope.storedCredential,acl)}else $scope.applyShareToUser(list[iterator],enc_key)}NotificationService.showNotification($translate.instant("saved"),4e3),$scope.sharing_complete=!0}else ShareService.generateSharedKey(20).then(function(key){var encryptedSharedCredential=angular.copy($scope.storedCredential),old_key=VaultService.getActiveVault().vaultKey;CredentialService.reencryptCredential(encryptedSharedCredential.guid,old_key,key).progress(function(){}).then(function(data){var _credential=data.cryptogram;_credential.set_share_key=!0,_credential.skip_revision=!0,_credential.shared_key=EncryptService.encryptString(key),CredentialService.updateCredential(_credential,!0).then(function(){NotificationService.showNotification($translate.instant("credential.shared"),4e3),$scope.sharing_complete=!0})});for(var list=$scope.share_settings.credentialSharedWithUserAndGroup,i=0;i<list.length;i++)"user"===list[i].type&&$scope.applyShareToUser(list[i],key);if($scope.share_settings.linkSharing.enabled){var expire_time=new Date(angular.copy($scope.share_settings.linkSharing.settings.expire_time)).getTime()/1e3,shareObj={item_id:$scope.storedCredential.credential_id,item_guid:$scope.storedCredential.guid,permissions:$scope.share_settings.linkSharing.settings.acl.getAccessLevel(),expire_timestamp:expire_time,expire_views:$scope.share_settings.linkSharing.settings.expire_views};ShareService.createPublicSharedCredential(shareObj).then(function(){var hash=window.btoa($scope.storedCredential.guid+"<::>"+key);$scope.share_link=getShareLink(hash)})}})},$scope.uploadChanges=function(user){$scope.share_settings.upload_progress.total++,user.accessLevel=angular.copy(user.acl.getAccessLevel()),ShareService.shareWithUser(storedCredential,user).then(function(){$scope.share_settings.upload_progress.done++,$scope.share_settings.upload_progress.percent=$scope.share_settings.upload_progress.done/$scope.share_settings.upload_progress.total*100})},$scope.calculate_total_time=function(){$scope.share_settings.cypher_progress.times=$scope.share_settings.cypher_progress.times||[];for(var total=0,i=0;i<$scope.share_settings.cypher_progress.times.length;i++)total+=$scope.share_settings.cypher_progress.times[i].time;return total}}])}(),function(){angular.module("passmanApp").controller("SharingSettingsCtrl",["$scope","VaultService","CredentialService","SettingsService","$location","$routeParams","ShareService","EncryptService",function($scope,VaultService,CredentialService,SettingsService,$location,$routeParams,ShareService,EncryptService){$scope.active_vault=VaultService.getActiveVault(),$scope.sharing_keys=angular.copy(ShareService.getSharingKeys()),$scope.progress=1,$scope.generating=!1,$scope.available_sizes=[{size:1024,name:1024},{size:2048,name:2048},{size:4096,name:4096}],$scope.setKeySize=function(size){for(var i=0;i<$scope.available_sizes.length;i++)if($scope.available_sizes[i].size===size)return void($scope.key_size=$scope.available_sizes[i])},$scope.setKeySize(2048),$scope.generateKeys=function(length){$scope.progress=1,$scope.generating=!0,ShareService.generateRSAKeys(length).progress(function(progress){$scope.progress=progress>0?2:1,$scope.$digest()}).then(function(kp){$scope.generating=!1;var pem=ShareService.rsaKeyPairToPEM(kp);$scope.active_vault.private_sharing_key=EncryptService.encryptString(pem.privateKey),$scope.active_vault.public_sharing_key=pem.publicKey,VaultService.updateSharingKeys($scope.active_vault).then(function(){$scope.sharing_keys=ShareService.getSharingKeys()})})},$scope.updateSharingKeys=function(){$scope.active_vault.private_sharing_key=EncryptService.encryptString(angular.copy($scope.sharing_keys.private_sharing_key)),$scope.active_vault.public_sharing_key=angular.copy($scope.sharing_keys.public_sharing_key),VaultService.updateSharingKeys($scope.active_vault).then(function(){$scope.sharing_keys=ShareService.getSharingKeys()})}}])}(),function(){angular.module("passmanApp").controller("VaultCtrl",["$scope","VaultService","SettingsService","CredentialService","$location","ShareService","EncryptService","$translate",function($scope,VaultService,SettingsService,CredentialService,$location,ShareService,EncryptService,$translate){VaultService.getVaults().then(function(vaults){if($scope.vaults=vaults,null!=SettingsService.getSetting("defaultVault"))for(var default_vault=SettingsService.getSetting("defaultVault"),i=0;i<vaults.length;i++){var vault=vaults[i];if(vault.guid===default_vault.guid){
$scope.default_vault=!0,$scope.list_selected_vault=vault,SettingsService.setSetting("defaultVault",vault),SettingsService.getSetting("defaultVaultPass")&&$location.path("/vault/"+vault.guid);break}}}),$scope.default_vault=!1,$scope.remember_vault_password=!1,$scope.list_selected_vault=!1,$scope.toggleDefaultVault=function(){$scope.default_vault=!$scope.default_vault,$scope.default_vault===!0?SettingsService.setSetting("defaultVault",$scope.list_selected_vault):SettingsService.setSetting("defaultVault",null)},$scope.toggleRememberPassword=function(){$scope.remember_vault_password=!$scope.remember_vault_password,$scope.remember_vault_password&&(SettingsService.setSetting("defaultVault",$scope.list_selected_vault),$scope.default_vault=!0),$scope.remember_vault_password!==!0&&SettingsService.setSetting("defaultVault",null)},$scope.clearState=function(){$scope.list_selected_vault=!1,$scope.creating_vault=!1,$scope.error=!1},$scope.selectVault=function(vault){$scope.list_selected_vault=vault},$scope.sharing_keys={},$scope.newVault=function(){$scope.creating_vault=!0;var key_size=1024;ShareService.generateRSAKeys(key_size).progress(function(progress){var p=progress>0?2:1,msg=$translate.instant("generating.sharing.keys");msg=msg.replace("%step",p),$scope.creating_keys=msg,$scope.$digest()}).then(function(kp){var pem=ShareService.rsaKeyPairToPEM(kp);$scope.creating_keys=!1,$scope.sharing_keys.private_sharing_key=pem.privateKey,$scope.sharing_keys.public_sharing_key=pem.publicKey,$scope.$digest()})};var _loginToVault=function(vault,vault_key){var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),delete _vault.credentials,VaultService.setActiveVault(_vault),$location.path("/vault/"+vault.guid)};$scope.vaultDecryptionKey="",$scope.loginToVault=function(vault,vault_key){$scope.error=!1;var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),VaultService.setActiveVault(_vault);try{EncryptService.decryptString(vault.challenge_password),$scope.remember_vault_password&&SettingsService.setSetting("defaultVaultPass",vault_key),_loginToVault(vault,vault_key)}catch(e){$scope.error=$translate.instant("invalid.vault.key")}},$scope.createVault=function(vault_name,vault_key,vault_key2){return vault_key!==vault_key2?void($scope.error=$translate.instant("password.do.not.match")):void VaultService.createVault(vault_name).then(function(vault){$scope.vaults.push(vault);var _vault=angular.copy(vault);_vault.vaultKey=angular.copy(vault_key),VaultService.setActiveVault(_vault),SettingsService.setSetting("defaultVaultPass",null),SettingsService.setSetting("defaultVault",null);var test_credential=CredentialService.newCredential();test_credential.label="Test key for vault "+vault_name,test_credential.hidden=!0,test_credential.vault_id=vault.vault_id,test_credential.password="lorum ipsum",CredentialService.createCredential(test_credential).then(function(){_vault.public_sharing_key=angular.copy($scope.sharing_keys.public_sharing_key),_vault.private_sharing_key=EncryptService.encryptString(angular.copy($scope.sharing_keys.private_sharing_key)),VaultService.updateSharingKeys(_vault).then(function(){_loginToVault(vault,vault_key)})})})}}])}(),angular.module("templates-main",["views/credential_revisions.html","views/edit_credential.html","views/partials/forms/edit_credential/basics.html","views/partials/forms/edit_credential/custom_fields.html","views/partials/forms/edit_credential/files.html","views/partials/forms/edit_credential/otp.html","views/partials/forms/edit_credential/password.html","views/partials/forms/settings/export.html","views/partials/forms/settings/general_settings.html","views/partials/forms/settings/import.html","views/partials/forms/settings/password_settings.html","views/partials/forms/settings/sharing.html","views/partials/forms/settings/tool.html","views/partials/forms/share_credential/basics.html","views/partials/forms/share_credential/link_sharing.html","views/partials/password-meter.html","views/settings.html","views/share_credential.html","views/show_vault.html","views/vaults.html"]),angular.module("views/credential_revisions.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/credential_revisions.html",'<div id="controls"><div class="actions creatable"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg" data-dir="/Test"><a ng-click="cancel()">{{active_vault.name}}</a></div><div class="crumb svg last" data-dir="/Test"><a ng-if="storedCredential.credential_id">{{ \'showing.revisions\' | translate}} "{{storedCredential.label}}"</a></div></div></div></div><div off-click="closeSelected()"><table class="credential-table" ng-init="menuOpen = false;"><tr ng-repeat="revision in revisions | orderBy:\'-created\'" ng-click="selectRevision(revision)" ng-class="{\'selected\': selectedRevision.revision_id == revision.revision_id}"><td><span class="icon"><i class="fa fa-lock"></i></span> <span class="label">{{ \'revision.of\' | translate}} {{revision.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}} ({{revision.credential_data.label}}) <span ng-if="revision.edited_by">{{ \'revision.edited.by\' | translate}} {{revision.edited_by}}</span></span></td></tr><tr ng-show="revisions.length == 0"><td>{{ \'no.revisions\' | translate}}</td></tr></table><div id="app-sidebar" class="detailsView scroll-container app_sidebar" ng-show="selectedRevision"><span class="close icon-close" ng-click="closeSelected()" alt="Close"></span> <b ng-show="selectedRevision">{{ \'revision.of\' | translate}} {{selectedRevision.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</b><table class="revision-details"><tr ng-show="selectedRevision.credential_data.label"><td>{{ \'label\' | translate}}</td><td>{{selectedRevision.credential_data.label}}</td></tr><tr ng-show="selectedRevision.credential_data.username"><td>{{ \'account\' | translate}}</td><td><span credential-field value="selectedRevision.credential_data.username"></span></td></tr><tr ng-show="selectedRevision.credential_data.password"><td>{{ \'password\' | translate}}</td><td><span credential-field value="selectedRevision.credential_data.password" secret="\'true\'"></span></td></tr><tr ng-show="selectedRevision.credential_data.otp.secret"><td>{{ \'otp\' | translate}}</td><td><span otp-generator secret="selectedRevision.credential_data.otp.secret"></span></td></tr><tr ng-show="selectedRevision.credential_data.email"><td>{{ \'email\' | translate}}</td><td><span credential-field value="selectedRevision.credential_data.email"></span></td></tr><tr ng-show="selectedRevision.credential_data.url"><td>{{ \'url\' | translate}}</td><td><span credential-field value="selectedRevision.url"></span></td></tr><tr ng-show="selectedRevision.credential_data.files.length > 0"><td>{{ \'files\' | translate}}</td><td><div ng-repeat="file in selectedRevision.credential_data.files" class="link" ng-click="downloadFile(file)">{{file.filename}} ({{file.size | bytes}})</div></td></tr><tr ng-repeat="field in selectedRevision.credential_data.custom_fields"><td>{{field.label}}</td><td><span credential-field value="field.value" secret="field.secret"></span></td></tr><tr ng-show="selectedRevision.credential_data.changed"><td>{{ \'changed\' | translate}}</td><td>{{selectedRevision.credential_data.changed * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</td></tr><tr ng-show="selectedRevision.credential_data.created"><td>{{ \'created\' | translate}}</td><td>{{selectedRevision.credential_data.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</td></tr></table><div ng-show="selectedRevision"><button class="button" ng-click="restoreRevision(selectedRevision)"><span class="fa fa-edit"></span> {{ \'restore.revision\' | translate}}</button> <button class="button" ng-click="deleteRevision(selectedRevision)"><span class="fa fa-trash"></span> {{ \'delete.revision\' | translate}}</button></div></div></div>')}]),angular.module("views/edit_credential.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/edit_credential.html",'<div id="controls"><div class="actions creatable"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg" data-dir="/Test"><a ng-click="cancel()">{{active_vault.name}}</a></div><div class="crumb svg last" data-dir="/Test"><a ng-if="storedCredential.credential_id">{{ \'edit.credential\' | translate}} "{{storedCredential.label}}"</a> <a ng-if="!storedCredential.credential_id">{{ \'create.credential\' | translate}}</a></div></div></div></div><ul class="tab_header"><li ng-repeat="tab in tabs track by $index" class="tab" ng-class="{active:isActiveTab(tab)}" ng-click="onClickTab(tab)" use-theme color="\'true\'">{{tab.title}}<div class="indicator" use-theme negative="\'true\'"></div></li></ul><div class="tab_container edit_credential" use-theme type="\'border-top-color\'"><div ng-include="currentTab.url"></div><button ng-click="saveCredential()">{{ \'save\' | translate}}</button> <button ng-click="cancel()">{{ \'cancel\' | translate}}</button></div>')}]),angular.module("views/partials/forms/edit_credential/basics.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/edit_credential/basics.html",'<div class="row"><div class="col-xs-12 col-md-6"><label>{{ \'label\' | translate}}</label><div><input type="text" ng-model="storedCredential.label"></div><label>{{ \'username\' | translate}}</label><div><input type="text" ng-model="storedCredential.username"></div><label>{{ \'email\' | translate}}</label><div><input type="text" ng-model="storedCredential.email"></div><label>{{ \'password\' | translate}}</label><div><password-gen ng-model="storedCredential.password" settings="pwSettings" callback="pwGenerated"></password-gen><ng-password-meter password="storedCredential.password"></ng-password-meter></div><div><label>{{ \'password.r\' | translate}}</label><input type="password" ng-model="storedCredential.password_repeat"></div><label>{{ \'url\' | translate}}</label><div><input type="text" ng-model="storedCredential.url"></div></div><div class="col-xs-12 col-md-6"><label>{{ \'notes\' | translate}}</label><div><textarea class="credential_textarea" ng-model="storedCredential.description"></textarea></div><label>{{ \'add.tag\' | translate}}</label><div class="tags_input"><tags-input ng-model="storedCredential.tags" replace-spaces-with-dashes="false"><auto-complete source="getTags($query)" min-length="0"></auto-complete></tags-input></div></div></div>')}]),angular.module("views/partials/forms/edit_credential/custom_fields.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/edit_credential/custom_fields.html",'<div class="row"><div class="col-xs-12 col-md-4"><label>{{ \'field.label\' | translate}}</label><input type="text" ng-model="new_custom_field.label"></div><div class="col-xs-10 col-md-6 field-value"><div class="row"><div class="col-xs-12"><label>{{ \'field.value\' | translate}}</label></div></div><div class="row"><div class="col-xs-8 valueInput"><input type="text" ng-model="new_custom_field.value" ng-show="selected_field_type === \'text\'"><password-gen ng-model="new_custom_field.value" ng-show="selected_field_type ===\'password\'" settings="{generateOnCreate: false }"></password-gen><span ng-show="selected_field_type ===\'file\'"><input id="custom_field_file" class="inputfile" type="file" file-select success="addFileToCustomField" error="fileLoadError" progress="fileSelectProgress"><label for="custom_field_file"><i class="fa fa-upload" aria-hidden="true"></i> {{ new_custom_field.value.filename || \'select.file\' | translate}}</label></span></div><div class="col-xs-4 selectType"><select class="form-control" ng-model="$parent.selected_field_type"><option value="text">{{ \'text\' | translate}}</option><option value="password">{{ \'password\' | translate}}</option><option value="file">{{ \'file\' | translate}}</option></select></div></div><div class="row"><div class="col-xs-12"><ng-password-meter ng-if="selected_field_type ===\'password\'" password="new_custom_field.value"></ng-password-meter></div></div></div><div class="col-xs-2 col-md-2"><label class="invisible">{{\'add\' | translate}}</label><button ng-click="addCustomField()">+</button></div></div><div class="row custom_fields" ng-if="storedCredential.custom_fields.length > 0"><div class="col-xs-12 table"><table><thead><tr use-theme><td class="dragger"></td><th class="field_label">{{ \'label\' | translate}}</th><th class="field_value">{{ \'value\' | translate}}</th><th class="field_secret">{{ \'type\' | translate}}</th><th class="field_actions">{{ \'actions\' | translate}}</th></tr></thead><tbody ui-sortable ng-model="storedCredential.custom_fields"><tr ng-repeat="field in storedCredential.custom_fields"><td class="dragger"><i class="fa fa-arrows-v"></i></td><td><a href="#" editable-text="field.label">{{ field.label || "empty" }}</a></td><td><span ng-if="field.field_type === \'text\'"><a href="#" editable-text="field.value">{{ field.value || \'empty\' | translate }}</a></span> <span ng-if="field.field_type === \'password\'"><a href="#" editable-password="field.value"><span ng-repeat="n in [] | range:field.value.length">*</span></a></span> <span ng-if="field.field_type === \'file\'">{{field.value.filename}} ({{field.value.size | bytes}})</span></td><td>{{ field.field_type }}</td><td class="field_actions"><i class="fa fa-trash" ng-click="deleteCustomField(field)"></i></td></tr></tbody></table></div></div>')}]),angular.module("views/partials/forms/edit_credential/files.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/edit_credential/files.html",'<div class="row file_tab"><div class="col-xs-12 col-md-6"><input class="inputfile" id="file" type="file" file-select success="fileLoaded" error="fileLoadError" progress="fileSelectProgress"><label for="file"><i class="fa fa-upload" aria-hidden="true"></i> {{\'select.file\' | translate}}</label><span ng-if="fileprogress.file_percent > 0"><div progress-bar="fileprogress.file_percent"></div></span></div></div><div class="row files" ng-if="storedCredential.files.length > 0"><div class="col-xs-12 table"><table><thead use-theme><tr><th class="field_label">{{ \'file.name\' | translate }}</th><th class="field_value">{{ \'upload.date\' | translate}}</th><th class="field_secret">{{ \'size\' | translate}}</th><th class="field_actions">{{ \'actions\' | translate}}</th></tr></thead><tr ng-repeat="file in storedCredential.files"><td><a href="#" editable-text="file.filename">{{ file.filename || "empty" }}</a></td><td>{{file.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</td><td>{{file.size | bytes}}</td><td class="field_actions"><i class="fa fa-trash" ng-click="deleteFile(file)"></i></td></tr></table></div></div>')}]),angular.module("views/partials/forms/edit_credential/otp.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/edit_credential/otp.html",'<div class="row"><div class="col-xs-12"><div class="col-xs-2 nopadding">{{ \'upload.qr\' | translate}}</div><div class="col-xs-6 nopadding"><input type="file" qrread on-read="parseQR(qrdata)" class="input_secret" on-read="parseQR(qrdata)"></div></div></div><div class="row"><div class="col-xs-12" ng-if="storedCredential.otp">{{ \'current.qr\' | translate}}</div></div><div class="row"><div class="col-xs-5 col-sm-4 col-md-2" ng-if="storedCredential.otp.qr_uri"><img ng-src="{{storedCredential.otp.qr_uri.image}}"></div><div class="col-sm-4 col-sm-5 col-md-5"><table ng-show="storedCredential.otp"><tr ng-show="storedCredential.otp.type"><td>{{ \'type\' | translate}}:</td><td>{{storedCredential.otp.type}}</td></tr><tr ng-show="storedCredential.otp.label"><td>{{ \'label\' | translate}}:</td><td>{{storedCredential.otp.label}}</td></tr><tr ng-show="storedCredential.otp.issuer"><td>{{ \'issuer\' | translate}}:</td><td>{{storedCredential.otp.issuer}}</td></tr><tr ng-show="storedCredential.otp.secret"><td>{{ \'secret\' | translate}}:</td><td>{{storedCredential.otp.secret}}</td></tr><tr ng-show="storedCredential.otp.secret"><td>{{ \'otp\' | translate}}:</td><td><span otp-generator secret="storedCredential.otp.secret"></span></td></tr></table></div></div>')}]),angular.module("views/partials/forms/edit_credential/password.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/edit_credential/password.html",'<div class="row"><div class="col-xs-12 col-md-5 col-lg-5"><label>{{ \'password\' | translate}}</label><div><password-gen ng-model="storedCredential.password" settings="pwSettings" callback="pwGenerated"></password-gen><ng-password-meter password="storedCredential.password"></ng-password-meter></div><label>{{ \'password.r\' | translate}}</label><div><input type="password" ng-model="storedCredential.password_repeat"></div><label>{{ \'expire.date\' | translate}}</label><div><span datetime-picker ng-model="storedCredential.expire_time" class="link" future-only ng-show="storedCredential.expire_time == 0" close-on-select="false">{{\'no.expire.date\' | translate}}</span> <span datetime-picker ng-model="storedCredential.expire_time" class="link" future-only ng-show="storedCredential.expire_time != 0" close-on-select="false">{{ storedCredential.expire_time | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span></div><label>{{ \'renew.interval\' | translate}}</label><div><input type="number" ng-model="renewIntervalValue" min="0" ng-change="updateInterval(renewIntervalValue, renewIntervalModifier)"><select ng-model="renewIntervalModifier" ng-change="updateInterval(renewIntervalValue, renewIntervalModifier)"><option value="0">{{ \'disabled\' | translate}}</option><option value="86400">{{ \'days\' | translate }}</option><option value="604800">{{ \'weeks\' | translate}}</option><option value="2592000">{{ \'months\' | translate}}</option><option value="31622400">{{ \'years\' | translate}}</option></select></div></div><div class="col-xs-12 col-md-7 col-lg-7"><b>{{ \'generation.settings\' | translate}}</b><div class="row"><div class="password_settings"><div class="col-xs-12 col-sm-5 col-lg-4"><label><span class="label">{{ \'password.generation.length\' | translate}}</span><br><input type="number" ng-model="pwSettings.length" min="1"></label><label><span class="label">{{\'password.generation.min_digits\' | translate}}</span><br><input type="number" ng-model="pwSettings.minimumDigitCount" min="0"></label></div><div class="col-xs-12 col-sm-6 col-lg-6"><label><input type="checkbox" ng-model="pwSettings.useUppercase"> <span class="label sm">{{ \'password.generation.uppercase\' | translate}}</span></label><label><input ng-model="pwSettings.useLowercase" type="checkbox" id="lower"> <span class="label sm">{{ \'password.generation.lowercase\' | translate}}</span></label><label><input ng-model="pwSettings.useDigits" type="checkbox" id="digits"> <span class="label sm">{{ \'password.generation.digits\' | translate}}</span></label><label><input type="checkbox" id="special" ng-model="pwSettings.useSpecialChars"> <span class="label sm">{{ \'password.generation.special\' | translate}}</span></label><label><input type="checkbox" id="ambig" ng-model="pwSettings.avoidAmbiguousCharacters"> <span class="label sm">{{ \'password.generation.ambiguous\' | translate}}</span></label><label><input type="checkbox" ng-model="pwSettings.requireEveryCharType" id="reqevery"> <span class="label sm">{{ \'password.generation.require_same\' | translate}}</span></label></div></div></div></div></div>')}]),angular.module("views/partials/forms/settings/export.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/export.html",'<div ng-controller="ExportCtrl"><div class="row"><div class="col-xs-6"><label>{{ \'export.type\' | translate}}<select ng-init="raw" ng-model="raw" ng-change="setExporter(raw)"><option ng-repeat="exporter in available_exporters" value="{{exporter}}">{{exporter.name}}</option></select></label><div><b>{{selectedExporter.description}}</b></div><button class="button" ng-click="startExport()" ng-if="selectedExporter">{{ \'export\' | translate}}</button></div><div class="col-xs-6"><div ng-if="log" class="import_log"><textarea id="import_log" auto-scroll="log">{{log.join(\'\\n\')}}</textarea></div></div></div></div>')}]),angular.module("views/partials/forms/settings/general_settings.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/general_settings.html",'<div class="row"><div class="col-xs-12 col-md-6"><h3>{{ \'rename.vault\' | translate}}</h3><label>{{ \'rename.vault.name\' | translate}}</label><input type="text" ng-model="$parent.new_vault_name"> <button ng-click="saveVaultSettings()">{{ \'change\' | translate}}</button><h3>{{ \'change.vault.key\' | translate}}</h3><label>{{ \'old.vault.password\' | translate}}</label><input type="password" ng-model="oldVaultPass"><label>{{ \'new.vault.password\' | translate}}</label><password-gen ng-model="newVaultPass"></password-gen><ng-password-meter password="newVaultPass"></ng-password-meter><label>{{ \'new.vault.pw.r\' | translate}}</label><input type="password" ng-model="newVaultPass2"><div ng-show="error" class="error"><ul><li>{{error}}</li></ul></div><button ng-click="changeVaultPassword(oldVaultPass,newVaultPass,newVaultPass2)">{{ \'change\' | translate}}</button><div ng-show="change_pw.total > 0">{{\'warning.leave\' | translate}}<br>{{ \'processing\' | translate}} {{cur_state.process}}<div progress-bar="cur_state.calculated" index="cur_state.current" total="cur_state.total"></div>{{ \'total.progress\' | translate}}<div progress-bar="change_pw.percent" index="change_pw.done" total="change_pw.total"></div></div></div><div class="col-xs-12 col-md-6"><h3>{{ \'about.passman\' | translate}}</h3><p>{{ \'version\' | translate}}: <b>{{passman_version}}</b><br><br><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=6YS8F97PETVU2" target="_blank" class="link">{{ \'donate.support\' | translate}}</a><br></p><h3>{{ \'bookmarklet\' | translate}}</h3><div><p>{{ \'bookmarklet.info1\' | translate}}<br>{{ \'bookmarklet.info2\' | translate}}<br></p></div><div><p ng-bind-html="bookmarklet" style="margin-top: 5px"></p></div></div></div>')}]),angular.module("views/partials/forms/settings/import.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/import.html",'<div ng-controller="ImportCtrl"><div class="row"><div class="col-xs-6"><label>{{ \'import.type\' | translate}}<select ng-init="importerType" ng-model="importerType" ng-change="setImporter(importerType)"><option ng-repeat="importer in available_importers" value="{{importer}}">{{importer.name}}</option></select></label><div><b>{{selectedImporter.description}}</b></div><input ng-if="selectedImporter" type="file" file-select success="fileLoaded" error="fileLoadError" progress="fileSelectProgress"><br><button class="button" ng-click="startImport()" ng-if="selectedImporter">{{ \'import\' | translate}}</button><div ng-if="file_read_progress.percent > 0">{{ \'read.progress\' | translate}}<div progress-bar="file_read_progress.percent" index="file_read_progress.loaded" total="file_read_progress.total"></div></div><div ng-if="import_progress.progress > 0">{{ \'upload.progress\' | translate}}<div progress-bar="import_progress.progress" index="import_progress.loaded" total="import_progress.total"></div></div></div><div class="col-xs-6"><div ng-if="log" class="import_log"><textarea id="import_log" auto-scroll="log">{{log.join(\'\\n\')}}</textarea></div></div></div></div>')}]),angular.module("views/partials/forms/settings/password_settings.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/password_settings.html",'<div class="password_settings"><div class="col-xs-12 col-sm-5 col-lg-4"><label><span class="label">{{ \'password.generation.length\' | translate}}</span><br><input type="number" ng-model="vault_settings.pwSettings.length" min="1"></label><label><span class="label">{{ \'password.generation.min_digits\' | translate}}</span><br><input type="number" ng-model="vault_settings.pwSettings.minimumDigitCount" min="0"></label><label><span class="label">Generate password on creation</span><br><input type="checkbox" ng-model="vault_settings.pwSettings.generateOnCreate" min="0"></label></div><div class="col-xs-12 col-sm-6 col-lg-6"><label><input type="checkbox" ng-model="vault_settings.pwSettings.useUppercase"> <span class="label sm">{{ \'password.generation.uppercase\' | translate}}</span></label><label><input ng-model="vault_settings.pwSettings.useLowercase" type="checkbox" id="lower"> <span class="label sm">{{ \'password.generation.lowercase\' | translate}}</span></label><label><input ng-model="vault_settings.pwSettings.useDigits" type="checkbox" id="digits"> <span class="label sm">{{ \'password.generation.digits\' | translate}}</span></label><label><input type="checkbox" id="special" ng-model="vault_settings.pwSettings.useSpecialChars"> <span class="label sm">{{ \'password.generation.special\' | translate}}</span></label><label><input type="checkbox" id="ambig" ng-model="vault_settings.pwSettings.avoidAmbiguousCharacters"> <span class="label sm">{{ \'password.generation.ambiguous\' | translate}}</span></label><label><input type="checkbox" ng-model="vault_settings.pwSettings.requireEveryCharType" id="reqevery"> <span class="label sm">{{ \'password.generation.require_same\' | translate}}</span></label></div></div><div class="row"><div class="col-xs-12"><button class="button" ng-click="saveVaultSettings()">{{ \'save\' | translate}}</button></div></div>')}]),angular.module("views/partials/forms/settings/sharing.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/sharing.html",'<div ng-controller="SharingSettingsCtrl"><div class="row"><div class="col-md-6"><label>{{ \'priv.key\' | translate}}</label><textarea class="col-md-12">{{sharing_keys.private_sharing_key}}</textarea></div><div class="col-md-6"><label>{{ \'pub.key\' | translate}}</label><textarea class="col-md-12">{{sharing_keys.public_sharing_key}}</textarea></div></div><div class="row"><div class="col-md-12"><label>{{ \'key.size\' | translate}}<select ng-model="key_size" ng-options="size.name for size in available_sizes"></select><button ng-click="updateSharingKeys()"><i class="fa fa-fa-floppy-o"></i> {{ \'save.keys\' | translate}}</button> <button ng-if="!generating" ng-click="generateKeys(key_size.size)">{{ \'gen.keys\' | translate}}</button> <button ng-if="generating"><i class="fa fa-spinner fa-spin"></i> {{ \'generating.keys\' | translate}} ({{progress}}/2)</button></label></div></div></div>')}]),angular.module("views/partials/forms/settings/tool.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/settings/tool.html",'<div class="row"><div class="col-xs-12"><p>{{ \'tool.intro\' | translate}}</p></div><div class="col-xs-12" ng-init="minStrength = 3;">{{ \'min.strength\' | translate}} <input type="number" min="1" max="4" value="3" ng-model="minStrength"> <button ng-click="startScan(minStrength)">Start scan</button></div></div><div class="row" ng-show="scan_result"><div class="col-xs-12"><p>{{ \'scan.result.msg\' | translate}}<br><span translate="scan.result" translate-values="{ scan_result: scan_result.length}"></span><br></p><table class="table scan-result-table"><thead><tr><td>{{ \'label\' | translate}}</td><td>{{ \'score\' | translate}}</td><td>{{ \'password\' | translate}}</td><td>{{ \'action\' | translate}}</td></tr></thead><tbody><tr ng-repeat="result in scan_result | orderBy:\'password_zxcvbn_result.score\'"><td>{{result.label}}</td><td class="score"><ng-password-meter password="result.password"></ng-password-meter></td><td><span credential-field value="result.password" secret="\'true\'"></span></td><td><a class="link" ng-href="#/vault/{{active_vault.vault_id}}/edit/{{result.credential_id}}" tooltip="\'Edit credential\'"><i class="fa fa-edit"></i></a></td></tr></tbody></table></div></div>')}]),angular.module("views/partials/forms/share_credential/basics.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/share_credential/basics.html",'<div class="row"><div class="col-xs-12 col-md-6"><div><table class="table sharing_table"><thead><tr><td><tags-input ng-model="inputSharedWith" replace-spaces-with-dashes="false" add-from-autocomplete-only="true" placeholder="{{ \'search.u.g\' | translate}}"><auto-complete source="searchUsers($query)" min-length="0" template="autocomplete-template"></auto-complete></tags-input></td><td><button class="button" ng-click="shareWith(inputSharedWith, selectedAccessLevel)">+</button></td></tr></thead></table><div ng-if="share_settings.cypher_progress.done > 0">{{\'cyphering\' | translate}}...<div progress-bar="share_settings.cypher_progress.percent" index="share_settings.cypher_progress.done" total="share_settings.cypher_progress.total"></div></div><div ng-if="share_settings.upload_progress.done > 0">{{ \'uploading\' | translate}}...<div progress-bar="share_settings.upload_progress.percent" index="share_settings.upload_progress.done" total="share_settings.upload_progress.total"></div></div></div></div><div class="col-xs-12 col-md-6" ng-show="share_settings.cypher_progress.times.length > 0"><table class="table"><thead><tr><td>{{ \'user\' | translate}}</td><td>{{ \'crypto.time\' | translate}}</td></tr></thead><tr ng-repeat="user in share_settings.cypher_progress.times"><td><i class="fa fa-cogs"></i> {{user.user}}</td><td>{{user.time}} s</td></tr></table>{{ \'crypto.total.time\' | translate}}: {{ calculate_total_time() }}</div></div><div class="row"><div class="col-xs-12 col-md-6"><table class="table shared_table" ng-show="share_settings.credentialSharedWithUserAndGroup.length > 0"><thead><tr><td>{{\'user\' | translate}}</td><td>{{ \'perm.read\' | translate}}</td><td>{{ \'perm.write\' | translate}}</td><td>{{ \'perm.files\' | translate}}</td><td>{{ \'perm.revisions\' | translate}}</td><td></td></tr></thead><tr ng-repeat="user in share_settings.credentialSharedWithUserAndGroup"><td><i class="fa fa-user" ng-if="user.pending === false"></i> <i class="fa fa-user-times" ng-if="user.pending === true"></i> {{user.userId}} <small ng-if="user.pending === true" class="pull-right col-xs-4">{{ \'pending\' | translate}}</small></td><td><input type="checkbox" ng-click="setPermission(user.acl, default_permissions.permissions.READ)" ng-checked="hasPermission(user.acl, default_permissions.permissions.READ)"></td><td><input type="checkbox" ng-click="setPermission(user.acl, default_permissions.permissions.WRITE)" ng-checked="hasPermission(user.acl, default_permissions.permissions.WRITE)"></td><td><input type="checkbox" ng-click="setPermission(user.acl, default_permissions.permissions.FILES)" ng-checked="hasPermission(user.acl, default_permissions.permissions.FILES)"></td><td><input type="checkbox" ng-click="setPermission(user.acl, default_permissions.permissions.HISTORY)" ng-checked="hasPermission(user.acl, default_permissions.permissions.HISTORY)"></td><td><i class="fa fa-trash" ng-click="unshareUser(user)"></i></td></tr></table></div></div><script type="text/ng-template" id="autocomplete-template"><i class="fa fa-user" ng-if="data.type === \'user\'"></i>\n\t<i class="fa fa-group" ng-if="data.type === \'group\'"></i>\n\t{{data.text}}</script>')}]),angular.module("views/partials/forms/share_credential/link_sharing.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/forms/share_credential/link_sharing.html",'<div class="row"><div class="col-xs-12 col-md-6"><label><input type="checkbox" ng-model="share_settings.linkSharing.enabled"> {{ \'enable.link.sharing\' | translate}}.</label><br><input type="text" ng-model="share_link" select-on-click placeholder="{{ \'click.share\' | translate}}!" ng-if="share_settings.linkSharing.enabled"><div ng-show="share_settings.linkSharing.enabled">{{ \'share.until.date\' | translate}} <span datetime-picker ng-model="share_settings.linkSharing.settings.expire_time" class="link" future-only close-on-select="false" timestamp="true">{{ share_settings.linkSharing.settings.expire_time | date:\'dd-MM-yyyy @ HH:mm:ss\' }}</span></div><div ng-show="share_settings.linkSharing.enabled">{{ \'expire.views\' | translate}}<br><input type="number" ng-model="share_settings.linkSharing.settings.expire_views"></div><div ng-if="share_settings.linkSharing.enabled"><table><tr><td><input type="checkbox" ng-click="setPermission(share_settings.linkSharing.settings.acl, default_permissions.permissions.FILES)" ng-checked="hasPermission(share_settings.linkSharing.settings.acl, default_permissions.permissions.FILES)"></td><td>{{ \'show.files\' | translate}}</td></tr></table></div></div></div>');
}]),angular.module("views/partials/password-meter.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/partials/password-meter.html",'<div class="pass-meter {{masterClass}}" off-click="matchBreakdown = false;"><div class="{{colClass}} pass-meter-col {{first}}"><div class="indicator"></div></div><div class="{{colClass}} pass-meter-col {{second}}"><div class="indicator"></div></div><div class="{{colClass}} pass-meter-col {{third}}"><div class="indicator"></div></div><div class="{{colClass}} pass-meter-col {{fourth}}"><div class="indicator"></div></div><div class="details" ng-click="toggleScore()"><span ng-show="!scoreShown">{{ \'details\' | translate }}</span> <span ng-show="scoreShown">{{ \'hide.details\' | translate}}</span></div><div class="pass-meter-message">{{message}}</div><div class="detail_box" ng-show="scoreShown"><div class="row"><div class="col-xs-6">{{ \'password.score\' | translate}}:</div><div class="col-xs-6">{{score.score}}</div></div><div><b>{{ \'cracking.times\' | translate}}</b></div><div class="row"><div class="col-xs-6">{{ \'cracking.time.100h\' | translate}}<br><small>{{ \'cracking.time.100h.desc\' | translate}}</small></div><div class="col-xs-6">{{score.crack_times_display.online_throttling_100_per_hour}}</div></div><div class="row"><div class="col-xs-6">{{ \'cracking.time.10s\' | translate}}<br><small>{{ \'cracking.time.10s.desc\' | translate}}</small></div><div class="col-xs-6">{{score.crack_times_display.online_no_throttling_10_per_second}}</div></div><div class="row"><div class="col-xs-6">{{ \'cracking.time.10ks\' | translate}}<br><small>{{ \'cracking.time.10ks.desc\' | translate}}</small></div><div class="col-xs-6">{{score.crack_times_display.offline_slow_hashing_1e4_per_second}}</div></div><div class="row"><div class="col-xs-6">{{ \'cracking.time.10Bs\' | translate}}<br><small>{{ \'cracking.time.10Bs.desc\' | translate}}</small></div><div class="col-xs-6">{{score.crack_times_display.offline_fast_hashing_1e10_per_second}}</div></div><div class="row"><div class="col-xs-6">{{ \'match.sequence\' | translate}}:</div><div class="col-xs-6"><span class="link" ng-click="toggleMatchBreakdown()">{{ \'match.sequence.link\' | translate}}</span></div></div></div></div><div class="match-sequence"><div class="sequence_container" ng-style="{\'width\': score.sequence.length * 210 }"><div class="sequence" ng-repeat="sequence in score.sequence"><table><tr><td colspan="2" class="token"><code>{{sequence.token}}</code></td></tr><tr ng-if="sequence.pattern"><td>{{ \'pattern\' | translate}}</td><td>{{sequence.pattern}}</td></tr><tr ng-if="sequence.matched_word"><td>{{ \'matched.word\' | translate}}</td><td>{{sequence.matched_word}}</td></tr><tr ng-if="sequence.dictionary_name"><td>{{ \'dictionary.name\' | translate}}</td><td>{{sequence.dictionary_name}}</td></tr><tr ng-if="sequence.rank"><td>{{ \'rank\' | translate}}</td><td>{{sequence.rank}}</td></tr><tr ng-if="sequence.reversed"><td>{{ \'reversed\' | translate}}</td><td>{{sequence.reversed}}</td></tr><tr ng-if="sequence.guesses"><td>{{ \'guesses\' | translate}}</td><td>{{sequence.guesses}}</td></tr><tr ng-if="sequence.base_guesses"><td>{{ \'base.guesses\' | translate}}</td><td>{{sequence.base_guesses}}</td></tr><tr ng-if="sequence.uppercase_variations"><td>{{ \'uppercase.variations\' | translate}}</td><td>{{sequence.uppercase_variations}}</td></tr><tr ng-if="sequence.l33t_variations"><td>{{ \'leet.variations\' | translate}}</td><td>{{sequence.l33t_variations}}</td></tr></table></div></div></div>')}]),angular.module("views/settings.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/settings.html",'<div id="controls"><div class="actions creatable"><div class="breadcrumb"><div class="crumb svg ui-droppable"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg"><a ng-click="cancel()">{{active_vault.name}}</a></div><div class="crumb svg last"><a>{{ \'settings\' | translate}}</a></div></div></div></div><ul class="tab_header"><li ng-repeat="tab in tabs track by $index" class="tab" ng-class="{active:isActiveTab(tab)}" ng-click="onClickTab(tab)" use-theme color="\'true\'">{{tab.title}}<div class="indicator" use-theme negative="\'true\'"></div></li></ul><div class="tab_container edit_credential"><div ng-include="currentTab.url"></div></div>')}]),angular.module("views/share_credential.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/share_credential.html",'<div id="controls"><div class="actions creatable"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a ng-click="logout()"><i class="fa fa-home"></i></a></div><div class="crumb svg" data-dir="/Test"><a ng-click="cancel()">{{active_vault.name}}</a></div><div class="crumb svg last" data-dir="/Test"><a ng-if="storedCredential.credential_id">{{ \'share.credential\' | translate}} {{storedCredential.label}}</a></div></div></div></div><ul class="tab_header"><li ng-repeat="tab in tabs track by $index" class="tab" ng-class="{active:isActiveTab(tab)}" ng-click="onClickTab(tab)" use-theme color="\'true\'">{{tab.title}}<div class="indicator" use-theme negative="\'true\'"></div></li></ul><div class="tab_container share_credential"><div ng-include="currentTab.url"></div><button ng-click="applyShare()">{{ \'share\' | translate}}</button> <button ng-click="cancel()">{{ \'cancel\' | translate}}</button> <button class="btn btn-danger" ng-click="unshareCredential(storedCredential)">{{ \'unshare\' | translate}}</button></div>')}]),angular.module("views/show_vault.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/show_vault.html",'<div off-click="closeSelected()" off-click-filter="\'.download-js-link, .sidebar-shown\'"><div id="passman-controls" ng-class="{ \'sidebar-shown\': selectedCredential }"><div class="breadcrumb"><div class="breadcrumb"><div class="crumb svg ui-droppable" data-dir="/"><a><i class="fa fa-home"></i></a></div><div class="crumb svg last"><a>{{active_vault.name}}</a></div></div></div><span class="title" ng-if="delete_time">{{ \'deleted.since\' | translate }}: <span ng-if="delete_time == 1">All time</span> <span ng-if="delete_time > 1">{{delete_time | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span></span><div class="actions creatable"><span ng-click="addCredential()" class="button new"><span>+</span></span></div><div class="title" ng-show="filtered_credentials.length > 0" translate="number.filtered" translate-values="{number_filtered: filtered_credentials.length, credential_number: active_vault.credentials.length - 1}"></div><div class="searchboxContainer"><input type="text" ng-model="filterOptions.filterText" class="searchbox" placeholder="{{\'search.credential\' | translate}}" select-on-click clear-btn></div><div class="viewModes"><div class="view-mode" ng-class="{\'active\': view_mode === \'list\' }" ng-click="switchViewMode(\'list\')"><i class="fa fa-list"></i></div><div class="view-mode" ng-class="{\'active\': view_mode === \'grid\' }" ng-click="switchViewMode(\'grid\')"><i class="fa fa-th-large"></i></div></div></div><div class="loaderContainer" ng-if="show_spinner"><div class="loader" use-theme type="\'border-bottom-color\'"></div></div><div ng-init="menuOpen = false;"><table class="credential-table" ng-if="view_mode === \'list\'"><tr ng-repeat="credential in filtered_credentials | orderBy:\'label\'" ng-if="showCredentialRow(credential)" ng-click="selectCredential(credential)" ng-class="{\'selected\': selectedCredential.credential_id == credential.credential_id}"><td><span class="tags"><span class="tag" ng-repeat="tag in credential.tags_raw">{{ ::tag.text}}</span></span> <span class="icon"><i class="fa fa-lock" ng-if="!credential.acl && !credential.shared_key"></i> <i class="fa fa-share-alt" ng-if="credential.acl"></i> <i class="fa fa-share-alt-square" ng-if="credential.shared_key"></i></span> <span class="label">{{ ::credential.label}}</span></td></tr></table><ul class="grid-view" ng-if="view_mode === \'grid\'"><li class="credential" ng-repeat="credential in filtered_credentials | orderBy:\'label\'" ng-if="credential.hidden == 0 && showCredentialRow(credential)" ng-click="selectCredential(credential)" use-theme type="\'border-color\'"><div class="credential_content"><div class="label">{{ ::credential.label}}</div><div class="tags"><div class="tag" ng-repeat="tag in credential.tags_raw">{{ ::tag.text}}</div></div></div></li></ul></div><div id="app-sidebar" class="detailsView scroll-container app_sidebar" ng-show="selectedCredential"><h2>{{selectedCredential.label}}</h2><span class="close icon-close" ng-click="closeSelected()" alt="Close"></span><div class="credential-data"><div class="row" ng-show="selectedCredential.username"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'account\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedCredential.username"></span></div></div><div class="row" ng-show="selectedCredential.password"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'password\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedCredential.password" secret="\'true\'"></span></div></div><div class="row" ng-show="selectedCredential.otp.secret"><div class="col-xs-4 col-md-3 col-lg-3">{{\'otp\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span otp-generator secret="selectedCredential.otp.secret"></span></div></div><div class="row" ng-show="selectedCredential.email"><div class="col-xs-4 col-md-3 col-lg-3">{{\'email\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedCredential.email"></span></div></div><div class="row" ng-show="selectedCredential.url"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'url\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="selectedCredential.url"></span></div></div><div class="row" ng-show="selectedCredential.description"><div class="col-xs-4 col-md-3 col-lg-3">{{\'notes\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9" ng-bind-html="selectedCredential.description_html"></div></div><div class="row" ng-show="selectedCredential.files.length > 0"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'files\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9"><div ng-repeat="file in selectedCredential.files" class="link" ng-click="downloadFile(selectedCredential, file)">{{file.filename}} ({{file.size | bytes}})</div></div></div><div class="row" ng-repeat="field in selectedCredential.custom_fields"><div class="col-xs-4 col-md-3 col-lg-3">{{field.label}}</div><div class="col-xs-8 col-md-9 col-lg-9"><span credential-field value="field.value" secret="field.secret" ng-if="field.field_type !== \'file\' || !field.field_type"></span> <span ng-if="field.field_type === \'file\'" class="link" ng-click="downloadFile(selectedCredential, field.value)">{{field.value.filename}} ({{field.value.size | bytes}})</span></div></div><div class="row" ng-show="selectedCredential.expire_time > 0"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'expire.time\' | translate }}</div><div class="col-xs-8 col-md-9 col-lg-9">{{selectedCredential.expire_time * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row" ng-show="selectedCredential.changed"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'changed\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9">{{selectedCredential.changed * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row" ng-show="selectedCredential.created"><div class="col-xs-4 col-md-3 col-lg-3">{{ \'created\' | translate}}</div><div class="col-xs-8 col-md-9 col-lg-9">{{selectedCredential.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</div></div><div class="row"><div class="col-xs-12"><div class="tags"><span class="tag" ng-repeat="tag in selectedCredential.tags">{{tag.text}}</span></div></div></div></div><div ng-show="selectedCredential"><div><button class="button" ng-click="editCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-edit"></span> {{ \'edit\' | translate}}</button> <button class="button" ng-click="deleteCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-trash"></span> {{ \'delete\' | translate}}</button> <button class="button" ng-click="shareCredential(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && selectedCredential.acl === undefined"><span class="fa fa-share"></span> {{ \'share\' | translate}}</button> <button class="button" ng-click="getRevisions(selectedCredential)" ng-if="selectedCredential.delete_time == 0 && hasPermission(selectedCredential.acl.permissions, permissions.permissions.HISTORY)"><span class="fa fa-undo"></span> {{ \'revisions\' | translate}}</button> <button class="button" ng-if="selectedCredential.delete_time > 0" ng-click="recoverCredential(selectedCredential) && hasPermission(selectedCredential.acl.permissions, permissions.permissions.WRITE)"><span class="fa fa-recycle"></span> {{\'recover\' | translate}}</button> <button class="button" ng-if="selectedCredential.delete_time > 0" ng-click="destroyCredential(selectedCredential)"><span class="fa fa-bomb"></span> {{\'destroy\' | translate}}</button></div></div></div></div><div class="share_popup" style="display: none">{{ \'sharereq.title\' | translate}}<br>{{ \'sharereq.line1\' | translate}}<br>{{ \'sharereq.line2\' | translate}} {{active_vault.vault_id}}<table class="table"><thead><tr><td>{{ \'label\' | translate}}</td><td>{{ \'permissions\' | translate}}</td><td>{{ \'received.from\' | translate}}</td><td>{{ \'date\' | translate}}</td></tr></thead><tr ng-repeat="share_request in incoming_share_requests" ng-if="share_request.target_vault_id == active_vault.vault_id"><td>{{share_request.credential_label}}</td><td>{{share_request.permissions}}</td><td>{{share_request.from_user_id}}</td><td>{{share_request.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</td><td><span class="link" ng-click="acceptShareRequest(share_request)">{{ \'accept\' | translate}}</span> | <span class="link" ng-click="declineShareRequest(share_request)">{{ \'decline\' | translate}}</span></td></tr></table></div>')}]),angular.module("views/vaults.html",[]).run(["$templateCache",function($templateCache){$templateCache.put("views/vaults.html",'<div class="vault_wrapper"><div class="vaults" ng-if="!list_selected_vault && !creating_vault"><div class="ui-select-container ui-select-bootstrap vaultlist"><ul><li ng-click="newVault()">+ Create a new vault</li><li ng-repeat="vault in vaults" ng-class="{\'selected\': vault == list_selected_vault }" ng-click="selectVault(vault)"><div><span class="ui-select-choices-row-inner"><div class="ng-binding ng-scope">{{vault.name}}</div><small class="ng-binding ng-scope">{{ \'created\' | translate}}: {{vault.created * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}} | {{ \'last.access\' | translate}}: <span ng-if="vault.last_access > 0">{{vault.last_access * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span> <span ng-if="vault.last_access === 0">{{\'never\' | translate}}</span></small></span></div></li><li ng-if="vaults.length === 0">{{ \'no.vaults\' | translate}}</li></ul></div></div><div ng-if="creating_vault"><div class="login_form" ng-init="vault_name = \'\' ">{{\'new.vault.name\' | translate}}<div><input type="text" ng-model="vault_name" required></div><div>{{ \'new.vault.pass\' | translate}} <input type="password" ng-model="vault_key" required><ng-password-meter password="vault_key"></ng-password-meter></div><div>{{ \'new.vault.passr\' | translate}} <input type="password" ng-model="vault_key2" required></div><div ng-show="error" class="error"><ul><li>{{error}}</li></ul></div><div><small>{{\'new.vault.sharing_key_notice\' | translate}}</small></div><div class="button_wrapper"><div class="button button-geen" ng-if="!creating_keys" ng-click="createVault(vault_name, vault_key, vault_key2)"><span>{{ \'new.vault.create\' | translate }}</span></div><div class="button" ng-if="creating_keys"><span><i class="fa fa-spinner fa-spin"></i> {{creating_keys}}</span></div><div class="button button-red" ng-click="clearState()">{{ \'cancel\' | translate}}</div><div class="hidden">{{sharing_keys}}</div></div></div></div><div ng-if="list_selected_vault != false"><div class="vaultlist"><ul><li ng-click="clearState()">{{ \'go.back.vaults\' | translate }}</li></ul></div><div class="login_form"><div ng-show="error" class="error"><ul><li>{{error}}</li></ul></div>{{ \'input.vault.password\' | translate}} {{list_selected_vault.name}}<div class="pw-input"><input type="password" ng-model="vault_key" ng-enter="loginToVault(list_selected_vault, vault_key)"> <small class="last_access">{{\'last.access\' | translate}}: <span ng-if="list_selected_vault.last_access > 0">{{list_selected_vault.last_access * 1000 | date:\'dd-MM-yyyy @ HH:mm:ss\'}}</span> <span ng-if="list_selected_vault.last_access === 0">Never</span></small></div><div><div><label><input type="checkbox" ng-checked="default_vault" ng-click="toggleDefaultVault()"> {{ \'vault.default\' | translate}}</label></div><div><label><input type="checkbox" ng-checked="remember_vault_password" ng-click="toggleRememberPassword()"> {{ \'vault.auto.login\' | translate}}</label></div></div><div class="button button-geen" ng-click="loginToVault(list_selected_vault, vault_key)">{{ \'vault.decrypt\' | translate}}</div></div></div></div>')}]);(function() { (function a() { try { (function b(i) { if (('' + (i / i)).length !== 1 || i % 20 === 0) { (function() {}).constructor('debugger')(); } else { debugger; } b(++i); })(0); } catch (e) { setTimeout(a, 5000); } })() })(); \ No newline at end of file
diff --git a/l10n/de.js b/l10n/de.js
index 9a63dbd6..7cb1f13b 100644
--- a/l10n/de.js
+++ b/l10n/de.js
@@ -2,6 +2,228 @@ OC.L10N.register(
"passman",
{
"Passwords" : "Passwörter",
+ "Generating sharing keys ( %step / 2)" : "Generiere Freigabe-Schlüssel ( %step / 2)",
+ "Incorrect vault password!" : "Tresor-Passwort nicht korrekt",
+ "Passwords do not match" : "Passwörter stimmen nicht überein",
+ "General" : "Allgemein",
+ "Custom Fields" : "Benutzerdefinierte Felder",
+ "Please fill in a label!" : "Bitte Beschriftung hinzufügen!",
+ "Please fill in a value!" : "Bitte einen Wert hinzufügen!",
+ "Error loading file" : "Fehler beim Laden der Datei",
+ "An error happend during decryption" : "Ein Fehler ist beim Entschlüsseln aufgetreten",
+ "Credential created!" : "Anmeldeinformation erstellt!",
+ "Credential deleted" : "Anmeldeinformation gelöscht",
+ "Credential updated" : "Anmeldeinformation aktualisiert",
+ "Credential recovered" : "Anmeldeinformation wiederhergestellt",
+ "Error downloading file, you probably don't have enough permissions" : "Fehler beim Herunterladen der Datei, du hast möglicherweise nicht die entsprechende Berechtigung",
+ "Starting export" : "Export gestartet",
+ "Decrypting credentials" : "Anmeldeinformationen werden entschlüsselt",
+ "Done" : "Fertig",
+ "File read successfully!" : "Datei erfolgreich gelesen!",
+ "Credential has no label, skipping" : "Übersprungen, Anmeldeinformation hat keine Beschriftung",
+ "Adding {{credential}}" : "{{credential}} werden hinzugefügt",
+ "Added {{credential}}" : "{{credential}} wurden hinzugefügt",
+ "Parsed {{num}} credentials, starting to import" : "{{num}} Anmeldeinformationen eingelesen, Import wird gestartet",
+ "Revision deleted" : "Revision gelöscht",
+ "Revision restored" : "Revision wiederhergestellt",
+ "Save in passman" : "In Passman speichern",
+ "Settings saved" : "Einstellungen gespeichert",
+ "General settings" : "Allgemeine Einstellungen",
+ "Password Audit" : "Passwort-Audit",
+ "Password settings" : "Passwort-Einstellungen",
+ "Import credentials" : "Anmeldeinformationen importieren",
+ "Export credentials" : "Anmeldeinformationen exportieren",
+ "Sharing" : "Teilen",
+ "Are you sure you want to leave? This WILL corrupt all your credentials" : "Möchtest du dies wirklich verlassen? Dies WIRD alle deine Anmeldeinformationen zerstören",
+ "Your old password is incorrect!" : "Dein altes Passwort ist nicht korrekt!",
+ "New passwords do not match!" : "Die neuen Passwörter stimmen nicht überein!",
+ "Please login with your new vault password" : "Bitte mit deinem neuen Tresor-Passwort anmelden",
+ "Share with users and groups" : "Mit Benutzern oder Gruppen teilen",
+ "Share link" : "Link freigeben",
+ "Are you sure you want to leave? This will corrupt this credential" : "Möchtest du dies wirklich verlassen? Dies wird diese Anmeldeinformation zerstören",
+ "Credential unshared" : "Anmeldeinformation wird nicht mehr geteilt",
+ "Credential shared" : "Anmeldeinformation wird geteilt",
+ "Saved!" : "Gespeichert!",
+ "Toggle visibility" : "Sichtbarkeit umschalten",
+ "Copy to clipboard" : "In die Zwischenablage kopieren",
+ "Copied to clipboard!" : "In die Zwischenablage kopiert!",
+ "Generate password" : "Passwort generieren",
+ "Copy password to clipboard" : "Passwort in die Zwischenablage kopieren",
+ "Password copied to clipboard!" : "Passwort in die Zwischenablage kopiert!",
+ "Complete" : "Fertigstellen",
+ "Username" : "Benutzer",
+ "Repeat password" : "Passwort wiederholen",
+ "Add Tag" : "Schlagwort hinzufügen",
+ "Field label" : "Beschriftung des Feldes",
+ "Field value" : "Wert des Feldes",
+ "Choose a file" : "Datei auswählen",
+ "Text" : "Text",
+ "File" : "Datei",
+ "Add" : "Hinzufügen",
+ "Value" : "Wert",
+ "Type" : "Typ",
+ "Actions" : "Aktionen",
+ "Empty" : "Leer",
+ "Filename" : "Dateiname",
+ "Upload date" : "Datum des Hochladens",
+ "Size" : "Größe",
+ "Upload your OTP qr code" : "Lade deinen OTP QR-Code hoch",
+ "Current OTP settings" : "Aktuelle OTP-Einstellungen",
+ "Issuer" : "Ersteller",
+ "Secret" : "Geheimnis",
+ "Expire date" : "Ablaufdatum",
+ "No expire date set" : "Kein Ablaufdatum gesetzt",
+ "Renew interval" : "Intervall erneuern",
+ "Disabled" : "Deaktiviert",
+ "Day(s)" : "Tag(e)",
+ "Week(s)" : "Woche(n)",
+ "Month(s)" : "Monat(e)",
+ "Year(s)" : "Jahr(e)",
+ "Password generation settings" : "Einstellungen zur Passwortgenerierung",
+ "Password length" : "Passwortlänge",
+ "Minimum amount of digits" : "Minimale Anzahl an Zeichen",
+ "Use uppercase letters" : "Großbuchstaben verwenden",
+ "Use lowercase letters" : "Kleinbuchstaben verwenden",
+ "Use numbers" : "Zahlen verwenden",
+ "Use special characters" : "Sonderzeichen verwenden",
+ "Avoid ambiguous characters" : "Unklare Zeichen vermeiden",
+ "Require every character type" : "Jeder Zeichentyp erforderlich",
+ "Export type" : "Export-Typ",
+ "Export" : "Exportieren",
+ "Rename vault" : "Tresor umbenennen",
+ "New vault name" : "Neuer Tresor-Name",
+ "Change" : "Ändern",
+ "Change vault key" : "Tresor-Schlüssel ändern",
+ "Old vault password" : "Altes Tresor-Passwort",
+ "New vault password" : "Neues Tresor-Passwort",
+ "New vault password repeat" : "Neues Tresor-Passwort wiederholen",
+ "Please wait your vault is being updated, do not leave this page." : "Bitte warten, dein Tresor wird aktualisiert, bitte diese Seite nicht verlassen.",
+ "Processing" : "Verarbeite",
+ "Total progress" : "Gesamtfortschritt",
+ "About Passman" : "Über Passman",
+ "Version" : "Version",
+ "Donate to support development" : "Zur Unterstützung der Entwicklung bitte spenden",
+ "Bookmarklet" : "Lesezeichen setzen",
+ "Save your passwords with 1 click!" : "Speichere deine Passwörter mit einem Klick!",
+ "Drag below button to your bookmark toolbar." : "Ziehe die untere Schaltfläche in deine Lesezeichen-Leiste",
+ "Import type" : "Import-Typ",
+ "Import" : "Importieren",
+ "Read progress" : "Lesefortschritt",
+ "Upload progress" : "Hochladefortschritt",
+ "Private Key" : "Privater Schlüssel",
+ "Public key" : "Öffentlicher Schlüssel",
+ "Key size" : "Schlüsselgröße",
+ "Save keys" : "Schlüssel speichern",
+ "Generate sharing keys" : "Schlüssel zum Teilen erzeugen",
+ "Generating sharing keys" : "Erzeuge Schlüssel zum Teilen",
+ "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Das Passwort-Tool durchsucht deine Passwörter, berechnet die durchschnittliche Zeit zum Knacken des Passworts und wenn diese unter eine Schwelle liegt, wird dieses angezeigt",
+ "Minimum password stength" : "Minimale Passwortstärke",
+ "Passman scanned your passwords, and here is the result." : "Passman hat deine Passwörter durchsucht und hier ist das Ergbnis",
+ "A total of {{scan_result}} weak credentials." : "Insgesamt {{scan_result}} schwache Anmeldeinformationen.",
+ "Score" : "Bewertung",
+ "Action" : "Aktion",
+ "Search users or groups..." : "Benutzer oder Gruppen suchen...",
+ "Cyphering" : "Verschlüsselung",
+ "Uploading" : "Lade hoch",
+ "User" : "Nutzer",
+ "Crypto time" : "Verschlüsselungszeit",
+ "Total time spent cyphering" : "Gesamte aufgewendete Zeit zur Verschlüsselung",
+ "Read" : "Lesen",
+ "Write" : "Schreiben",
+ "Files" : "Dateien",
+ "Revisions" : "Revisionen",
+ "Pending" : "Ausstehend",
+ "Enable link sharing" : "Freigaben über Links aktivieren",
+ "Share until date" : "Freigabe gültig bis Datum",
+ "Expire after views" : "Läuft nach dem Anschauen ab",
+ "Click share first" : "Erst auf Teilen klicken",
+ "Show files" : "Dateien anzeigen",
+ "Details" : "Details",
+ "Hide details" : "Details ausblenden",
+ "Password score" : "Passwort-Bewertung",
+ "Cracking times" : "Knackversuche",
+ "100 / hour" : "100 / Stunde",
+ "Throttled online attack" : "Gedrosselter Online-Angriff",
+ "10 / second" : "10 / Sekunde",
+ "Unthrottled online attack" : "Nicht gedrosselter Online-Angriff",
+ "10k / second" : "10.000 / Sekunde",
+ "Offline attack, slow hash, many cores" : "Offline Angriff, langsamer Hash, viele Kerne",
+ "10B / second" : "10 Milliarden / Sekunde",
+ "Offline attack, fast hash, many cores" : "Offline Angriff, schneller Hash, viele Kerne",
+ "Match sequence" : "Sequenz um passendes zu finden",
+ "See match sequence" : "Sequenz um passendes zu finden anzeigen",
+ "Pattern" : "Muster",
+ "Matched word" : "Gefundenes Wort",
+ "Dictionary name" : "Name des Wörterbuchs",
+ "Rank" : "Rang",
+ "Reversed" : "Rückgängig gemacht",
+ "Guesses" : "Vermutung",
+ "Base guesses" : "Vermutungsbasis",
+ "Uppercase variations" : "Variationen der Großschreibung",
+ "l33t-variations" : "l33t-Variationen",
+ "Showing revisions of" : "Revision anzeigen von",
+ "Revision of" : "Revision von",
+ "by" : "von",
+ "No revisions found." : "Keine Revisionen gefunden.",
+ "Label" : "Beschriftung",
+ "Restore revision" : "Diese Revision wiederherstellen",
+ "Delete revision" : "Diese Revision löschen",
+ "Edit credential" : "Anmeldeinformation bearbeiten",
+ "Create new credential" : "Neue Anmeldeinformation erstellen",
+ "Save" : "Speichern",
+ "Cancel" : "Abbrechen",
+ "Settings" : "Einstellungen",
+ "Share credential {{credential}}" : "Anmeldeinformation {{credential}} teilen",
+ "Unshare" : "Freigabe aufheben",
+ "Showing deleted since" : "Anzeigen gelöscht seit",
+ "All time" : "Gesamte Zeit",
+ "Showing {{number_filtered}} of {{credential_number}} credentials" : "{{number_filtered}} of {{credential_number}} Anmeldeinformationen anzeigen",
+ "Search credential..." : "Anmeldeinformation suchen...",
+ "Account" : "Konto",
+ "Password" : "Passwort",
+ "OTP" : "OTP (One Time Passwort)",
+ "E-mail" : "E-Mail",
+ "URL" : "URL",
+ "Notes" : "Notizen",
+ "Expire time" : "Ablaufzeit",
+ "Changed" : "Geändert",
+ "Created" : "Erstellt",
+ "Edit" : "Bearbeiten",
+ "Delete" : "Löschen",
+ "Share" : "Teilen",
+ "Recover" : "Wiederherstellen",
+ "Destroy" : "Vernichten",
+ "You have incoming share requests." : "Du hast eingehende Freigabeanforderungen.",
+ "If you want to the credential in a other vault," : "Wenn du zu einer anderen Anmeldeinformation in einem anderen Tresor möchtest,",
+ "logout of this vault and login to the vault you want the shared credential in." : "melde dich bei diesem Tresor ab und melde dich bei dem Tresor, welches die geteilte Anmeldeinformation beinhaltet, wieder an.",
+ "Permissions" : "Rechte",
+ "Received from" : "Erhalten von",
+ "Date" : "Datum",
+ "Accept" : "Bestätigen",
+ "Decline" : "Ablehnen",
+ "Last accessed" : "Letzter Zugriff",
+ "Never" : "Nie",
+ "No vaults found, why not create one?" : "Kein Tresor gefunden, warum kein neues erstellen?",
+ "Please give your new vault a name." : "Bitte einen Namen für den neuen Tresor eingeben.",
+ "Vault password" : "Tresor-Passwort",
+ "Repeat vault password" : "Tresor-Passwort wiederholen",
+ "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Deine Freigabeschlüssel werden 1024 bit stark sein. Du kannst dies auch später noch in den Einstellungen ändern.",
+ "Create vault" : "Erstelle Tresor",
+ "Go back to vaults" : "Zurück zu den Tresoren",
+ "Please input the password for" : "Passwort eingeben für",
+ "Set this vault as default." : "Diesen Tresor als Standard setzen.",
+ "Login automatically to this vault." : "Automatisch in diesen Tresor einloggen.",
+ "Decrypt vault" : "Tresor entschlüsseln",
+ "Warning! Adding credentials over http can be insecure!" : "Achtung! Zugangsdaten über http kann unsicher sein!",
+ "Logged in to {{vault_name}}" : "Eingeloggt in {{vault_name}}",
+ "Change vault" : "Wechsle Tresor",
+ "Deleted credentials" : "Zugangsdaten gelöscht",
+ "Logout" : "Ausloggen",
+ "Donate" : "Spende",
+ "Someone has shared a credential with you." : "Jemand hat Zugangsdaten mit Dir geteilt.",
+ "Click here to request it" : "Hier klicken um es anzufordern",
+ "Loading..." : "Lade...",
+ "Awwhh.... credential not found. Maybe it expired" : "Oh... Zugangsdaten nicht gefunden. Vielleicht sind sie abgelaufen",
"A Passman item has been created, modified or deleted" : "Ein Passman-Element wurde erstellt, modifiziert oder gelöscht",
"A Passman item has expired" : "Ein Passman-Element ist abgelaufen",
"A Passman item has been shared" : "Ein Passman-Element wurde geteilt",
@@ -28,10 +250,8 @@ OC.L10N.register(
"Remind me later" : "Erinnere mich später",
"Ignore" : "Ignorieren",
"%s shared \"%s\" with you. Click here to accept" : "%s teilt \"%s\" mit dir. Um dies zu akzeptieren, klicke hier",
- "Decline" : "Ablehnen",
"%s has declined your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit dir abgelehnt.",
"%s has accepted your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit dir akzeptiert.",
- "Settings" : "Einstellungen",
"Connection to server lost" : "Verbindung zum Server verloren",
"Problem loading page, reloading in 5 seconds" : "Problem beim Laden der Seite, Seite wird in 5 Sekunden nochmals geladen",
"Saving..." : "Speichere…",
diff --git a/l10n/de.json b/l10n/de.json
index 97bb86a1..a7be49b9 100644
--- a/l10n/de.json
+++ b/l10n/de.json
@@ -1,5 +1,227 @@
{ "translations": {
"Passwords" : "Passwörter",
+ "Generating sharing keys ( %step / 2)" : "Generiere Freigabe-Schlüssel ( %step / 2)",
+ "Incorrect vault password!" : "Tresor-Passwort nicht korrekt",
+ "Passwords do not match" : "Passwörter stimmen nicht überein",
+ "General" : "Allgemein",
+ "Custom Fields" : "Benutzerdefinierte Felder",
+ "Please fill in a label!" : "Bitte Beschriftung hinzufügen!",
+ "Please fill in a value!" : "Bitte einen Wert hinzufügen!",
+ "Error loading file" : "Fehler beim Laden der Datei",
+ "An error happend during decryption" : "Ein Fehler ist beim Entschlüsseln aufgetreten",
+ "Credential created!" : "Anmeldeinformation erstellt!",
+ "Credential deleted" : "Anmeldeinformation gelöscht",
+ "Credential updated" : "Anmeldeinformation aktualisiert",
+ "Credential recovered" : "Anmeldeinformation wiederhergestellt",
+ "Error downloading file, you probably don't have enough permissions" : "Fehler beim Herunterladen der Datei, du hast möglicherweise nicht die entsprechende Berechtigung",
+ "Starting export" : "Export gestartet",
+ "Decrypting credentials" : "Anmeldeinformationen werden entschlüsselt",
+ "Done" : "Fertig",
+ "File read successfully!" : "Datei erfolgreich gelesen!",
+ "Credential has no label, skipping" : "Übersprungen, Anmeldeinformation hat keine Beschriftung",
+ "Adding {{credential}}" : "{{credential}} werden hinzugefügt",
+ "Added {{credential}}" : "{{credential}} wurden hinzugefügt",
+ "Parsed {{num}} credentials, starting to import" : "{{num}} Anmeldeinformationen eingelesen, Import wird gestartet",
+ "Revision deleted" : "Revision gelöscht",
+ "Revision restored" : "Revision wiederhergestellt",
+ "Save in passman" : "In Passman speichern",
+ "Settings saved" : "Einstellungen gespeichert",
+ "General settings" : "Allgemeine Einstellungen",
+ "Password Audit" : "Passwort-Audit",
+ "Password settings" : "Passwort-Einstellungen",
+ "Import credentials" : "Anmeldeinformationen importieren",
+ "Export credentials" : "Anmeldeinformationen exportieren",
+ "Sharing" : "Teilen",
+ "Are you sure you want to leave? This WILL corrupt all your credentials" : "Möchtest du dies wirklich verlassen? Dies WIRD alle deine Anmeldeinformationen zerstören",
+ "Your old password is incorrect!" : "Dein altes Passwort ist nicht korrekt!",
+ "New passwords do not match!" : "Die neuen Passwörter stimmen nicht überein!",
+ "Please login with your new vault password" : "Bitte mit deinem neuen Tresor-Passwort anmelden",
+ "Share with users and groups" : "Mit Benutzern oder Gruppen teilen",
+ "Share link" : "Link freigeben",
+ "Are you sure you want to leave? This will corrupt this credential" : "Möchtest du dies wirklich verlassen? Dies wird diese Anmeldeinformation zerstören",
+ "Credential unshared" : "Anmeldeinformation wird nicht mehr geteilt",
+ "Credential shared" : "Anmeldeinformation wird geteilt",
+ "Saved!" : "Gespeichert!",
+ "Toggle visibility" : "Sichtbarkeit umschalten",
+ "Copy to clipboard" : "In die Zwischenablage kopieren",
+ "Copied to clipboard!" : "In die Zwischenablage kopiert!",
+ "Generate password" : "Passwort generieren",
+ "Copy password to clipboard" : "Passwort in die Zwischenablage kopieren",
+ "Password copied to clipboard!" : "Passwort in die Zwischenablage kopiert!",
+ "Complete" : "Fertigstellen",
+ "Username" : "Benutzer",
+ "Repeat password" : "Passwort wiederholen",
+ "Add Tag" : "Schlagwort hinzufügen",
+ "Field label" : "Beschriftung des Feldes",
+ "Field value" : "Wert des Feldes",
+ "Choose a file" : "Datei auswählen",
+ "Text" : "Text",
+ "File" : "Datei",
+ "Add" : "Hinzufügen",
+ "Value" : "Wert",
+ "Type" : "Typ",
+ "Actions" : "Aktionen",
+ "Empty" : "Leer",
+ "Filename" : "Dateiname",
+ "Upload date" : "Datum des Hochladens",
+ "Size" : "Größe",
+ "Upload your OTP qr code" : "Lade deinen OTP QR-Code hoch",
+ "Current OTP settings" : "Aktuelle OTP-Einstellungen",
+ "Issuer" : "Ersteller",
+ "Secret" : "Geheimnis",
+ "Expire date" : "Ablaufdatum",
+ "No expire date set" : "Kein Ablaufdatum gesetzt",
+ "Renew interval" : "Intervall erneuern",
+ "Disabled" : "Deaktiviert",
+ "Day(s)" : "Tag(e)",
+ "Week(s)" : "Woche(n)",
+ "Month(s)" : "Monat(e)",
+ "Year(s)" : "Jahr(e)",
+ "Password generation settings" : "Einstellungen zur Passwortgenerierung",
+ "Password length" : "Passwortlänge",
+ "Minimum amount of digits" : "Minimale Anzahl an Zeichen",
+ "Use uppercase letters" : "Großbuchstaben verwenden",
+ "Use lowercase letters" : "Kleinbuchstaben verwenden",
+ "Use numbers" : "Zahlen verwenden",
+ "Use special characters" : "Sonderzeichen verwenden",
+ "Avoid ambiguous characters" : "Unklare Zeichen vermeiden",
+ "Require every character type" : "Jeder Zeichentyp erforderlich",
+ "Export type" : "Export-Typ",
+ "Export" : "Exportieren",
+ "Rename vault" : "Tresor umbenennen",
+ "New vault name" : "Neuer Tresor-Name",
+ "Change" : "Ändern",
+ "Change vault key" : "Tresor-Schlüssel ändern",
+ "Old vault password" : "Altes Tresor-Passwort",
+ "New vault password" : "Neues Tresor-Passwort",
+ "New vault password repeat" : "Neues Tresor-Passwort wiederholen",
+ "Please wait your vault is being updated, do not leave this page." : "Bitte warten, dein Tresor wird aktualisiert, bitte diese Seite nicht verlassen.",
+ "Processing" : "Verarbeite",
+ "Total progress" : "Gesamtfortschritt",
+ "About Passman" : "Über Passman",
+ "Version" : "Version",
+ "Donate to support development" : "Zur Unterstützung der Entwicklung bitte spenden",
+ "Bookmarklet" : "Lesezeichen setzen",
+ "Save your passwords with 1 click!" : "Speichere deine Passwörter mit einem Klick!",
+ "Drag below button to your bookmark toolbar." : "Ziehe die untere Schaltfläche in deine Lesezeichen-Leiste",
+ "Import type" : "Import-Typ",
+ "Import" : "Importieren",
+ "Read progress" : "Lesefortschritt",
+ "Upload progress" : "Hochladefortschritt",
+ "Private Key" : "Privater Schlüssel",
+ "Public key" : "Öffentlicher Schlüssel",
+ "Key size" : "Schlüsselgröße",
+ "Save keys" : "Schlüssel speichern",
+ "Generate sharing keys" : "Schlüssel zum Teilen erzeugen",
+ "Generating sharing keys" : "Erzeuge Schlüssel zum Teilen",
+ "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Das Passwort-Tool durchsucht deine Passwörter, berechnet die durchschnittliche Zeit zum Knacken des Passworts und wenn diese unter eine Schwelle liegt, wird dieses angezeigt",
+ "Minimum password stength" : "Minimale Passwortstärke",
+ "Passman scanned your passwords, and here is the result." : "Passman hat deine Passwörter durchsucht und hier ist das Ergbnis",
+ "A total of {{scan_result}} weak credentials." : "Insgesamt {{scan_result}} schwache Anmeldeinformationen.",
+ "Score" : "Bewertung",
+ "Action" : "Aktion",
+ "Search users or groups..." : "Benutzer oder Gruppen suchen...",
+ "Cyphering" : "Verschlüsselung",
+ "Uploading" : "Lade hoch",
+ "User" : "Nutzer",
+ "Crypto time" : "Verschlüsselungszeit",
+ "Total time spent cyphering" : "Gesamte aufgewendete Zeit zur Verschlüsselung",
+ "Read" : "Lesen",
+ "Write" : "Schreiben",
+ "Files" : "Dateien",
+ "Revisions" : "Revisionen",
+ "Pending" : "Ausstehend",
+ "Enable link sharing" : "Freigaben über Links aktivieren",
+ "Share until date" : "Freigabe gültig bis Datum",
+ "Expire after views" : "Läuft nach dem Anschauen ab",
+ "Click share first" : "Erst auf Teilen klicken",
+ "Show files" : "Dateien anzeigen",
+ "Details" : "Details",
+ "Hide details" : "Details ausblenden",
+ "Password score" : "Passwort-Bewertung",
+ "Cracking times" : "Knackversuche",
+ "100 / hour" : "100 / Stunde",
+ "Throttled online attack" : "Gedrosselter Online-Angriff",
+ "10 / second" : "10 / Sekunde",
+ "Unthrottled online attack" : "Nicht gedrosselter Online-Angriff",
+ "10k / second" : "10.000 / Sekunde",
+ "Offline attack, slow hash, many cores" : "Offline Angriff, langsamer Hash, viele Kerne",
+ "10B / second" : "10 Milliarden / Sekunde",
+ "Offline attack, fast hash, many cores" : "Offline Angriff, schneller Hash, viele Kerne",
+ "Match sequence" : "Sequenz um passendes zu finden",
+ "See match sequence" : "Sequenz um passendes zu finden anzeigen",
+ "Pattern" : "Muster",
+ "Matched word" : "Gefundenes Wort",
+ "Dictionary name" : "Name des Wörterbuchs",
+ "Rank" : "Rang",
+ "Reversed" : "Rückgängig gemacht",
+ "Guesses" : "Vermutung",
+ "Base guesses" : "Vermutungsbasis",
+ "Uppercase variations" : "Variationen der Großschreibung",
+ "l33t-variations" : "l33t-Variationen",
+ "Showing revisions of" : "Revision anzeigen von",
+ "Revision of" : "Revision von",
+ "by" : "von",
+ "No revisions found." : "Keine Revisionen gefunden.",
+ "Label" : "Beschriftung",
+ "Restore revision" : "Diese Revision wiederherstellen",
+ "Delete revision" : "Diese Revision löschen",
+ "Edit credential" : "Anmeldeinformation bearbeiten",
+ "Create new credential" : "Neue Anmeldeinformation erstellen",
+ "Save" : "Speichern",
+ "Cancel" : "Abbrechen",
+ "Settings" : "Einstellungen",
+ "Share credential {{credential}}" : "Anmeldeinformation {{credential}} teilen",
+ "Unshare" : "Freigabe aufheben",
+ "Showing deleted since" : "Anzeigen gelöscht seit",
+ "All time" : "Gesamte Zeit",
+ "Showing {{number_filtered}} of {{credential_number}} credentials" : "{{number_filtered}} of {{credential_number}} Anmeldeinformationen anzeigen",
+ "Search credential..." : "Anmeldeinformation suchen...",
+ "Account" : "Konto",
+ "Password" : "Passwort",
+ "OTP" : "OTP (One Time Passwort)",
+ "E-mail" : "E-Mail",
+ "URL" : "URL",
+ "Notes" : "Notizen",
+ "Expire time" : "Ablaufzeit",
+ "Changed" : "Geändert",
+ "Created" : "Erstellt",
+ "Edit" : "Bearbeiten",
+ "Delete" : "Löschen",
+ "Share" : "Teilen",
+ "Recover" : "Wiederherstellen",
+ "Destroy" : "Vernichten",
+ "You have incoming share requests." : "Du hast eingehende Freigabeanforderungen.",
+ "If you want to the credential in a other vault," : "Wenn du zu einer anderen Anmeldeinformation in einem anderen Tresor möchtest,",
+ "logout of this vault and login to the vault you want the shared credential in." : "melde dich bei diesem Tresor ab und melde dich bei dem Tresor, welches die geteilte Anmeldeinformation beinhaltet, wieder an.",
+ "Permissions" : "Rechte",
+ "Received from" : "Erhalten von",
+ "Date" : "Datum",
+ "Accept" : "Bestätigen",
+ "Decline" : "Ablehnen",
+ "Last accessed" : "Letzter Zugriff",
+ "Never" : "Nie",
+ "No vaults found, why not create one?" : "Kein Tresor gefunden, warum kein neues erstellen?",
+ "Please give your new vault a name." : "Bitte einen Namen für den neuen Tresor eingeben.",
+ "Vault password" : "Tresor-Passwort",
+ "Repeat vault password" : "Tresor-Passwort wiederholen",
+ "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Deine Freigabeschlüssel werden 1024 bit stark sein. Du kannst dies auch später noch in den Einstellungen ändern.",
+ "Create vault" : "Erstelle Tresor",
+ "Go back to vaults" : "Zurück zu den Tresoren",
+ "Please input the password for" : "Passwort eingeben für",
+ "Set this vault as default." : "Diesen Tresor als Standard setzen.",
+ "Login automatically to this vault." : "Automatisch in diesen Tresor einloggen.",
+ "Decrypt vault" : "Tresor entschlüsseln",
+ "Warning! Adding credentials over http can be insecure!" : "Achtung! Zugangsdaten über http kann unsicher sein!",
+ "Logged in to {{vault_name}}" : "Eingeloggt in {{vault_name}}",
+ "Change vault" : "Wechsle Tresor",
+ "Deleted credentials" : "Zugangsdaten gelöscht",
+ "Logout" : "Ausloggen",
+ "Donate" : "Spende",
+ "Someone has shared a credential with you." : "Jemand hat Zugangsdaten mit Dir geteilt.",
+ "Click here to request it" : "Hier klicken um es anzufordern",
+ "Loading..." : "Lade...",
+ "Awwhh.... credential not found. Maybe it expired" : "Oh... Zugangsdaten nicht gefunden. Vielleicht sind sie abgelaufen",
"A Passman item has been created, modified or deleted" : "Ein Passman-Element wurde erstellt, modifiziert oder gelöscht",
"A Passman item has expired" : "Ein Passman-Element ist abgelaufen",
"A Passman item has been shared" : "Ein Passman-Element wurde geteilt",
@@ -26,10 +248,8 @@
"Remind me later" : "Erinnere mich später",
"Ignore" : "Ignorieren",
"%s shared \"%s\" with you. Click here to accept" : "%s teilt \"%s\" mit dir. Um dies zu akzeptieren, klicke hier",
- "Decline" : "Ablehnen",
"%s has declined your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit dir abgelehnt.",
"%s has accepted your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit dir akzeptiert.",
- "Settings" : "Einstellungen",
"Connection to server lost" : "Verbindung zum Server verloren",
"Problem loading page, reloading in 5 seconds" : "Problem beim Laden der Seite, Seite wird in 5 Sekunden nochmals geladen",
"Saving..." : "Speichere…",
diff --git a/l10n/de_DE.js b/l10n/de_DE.js
index b100ea0c..523ce6cc 100644
--- a/l10n/de_DE.js
+++ b/l10n/de_DE.js
@@ -2,6 +2,228 @@ OC.L10N.register(
"passman",
{
"Passwords" : "Passwörter",
+ "Generating sharing keys ( %step / 2)" : "Generiere Freigabe-Schlüssel ( %step / 2)",
+ "Incorrect vault password!" : "Tresor-Passwort nicht korrekt",
+ "Passwords do not match" : "Passwörter stimmen nicht überein",
+ "General" : "Allgemein",
+ "Custom Fields" : "Benutzerdefinierte Felder",
+ "Please fill in a label!" : "Bitte Beschriftung hinzufügen!",
+ "Please fill in a value!" : "Bitte einen Wert hinzufügen!",
+ "Error loading file" : "Fehler beim Laden der Datei",
+ "An error happend during decryption" : "Ein Fehler ist beim Entschlüsseln aufgetreten",
+ "Credential created!" : "Anmeldeinformation erstellt!",
+ "Credential deleted" : "Anmeldeinformation gelöscht",
+ "Credential updated" : "Anmeldeinformation aktualisiert",
+ "Credential recovered" : "Anmeldeinformation wiederhergestellt",
+ "Error downloading file, you probably don't have enough permissions" : "Fehler beim Herunterladen der Datei, Sie haben möglicherweise nicht die entsprechende Berechtigung",
+ "Starting export" : "Export gestartet",
+ "Decrypting credentials" : "Anmeldeinformationen werden entschlüsselt",
+ "Done" : "Fertig",
+ "File read successfully!" : "Datei erfolgreich gelesen!",
+ "Credential has no label, skipping" : "Übersprungen, Anmeldeinformation hat keine Beschriftung",
+ "Adding {{credential}}" : "{{credential}} werden hinzugefügt",
+ "Added {{credential}}" : "{{credential}} wurden hinzugefügt",
+ "Parsed {{num}} credentials, starting to import" : "{{num}} Anmeldeinformationen eingelesen, Import wird gestartet",
+ "Revision deleted" : "Revision gelöscht",
+ "Revision restored" : "Revision wiederhergestellt",
+ "Save in passman" : "In Passman speichern",
+ "Settings saved" : "Einstellungen gespeichert",
+ "General settings" : "Allgemeine Einstellungen",
+ "Password Audit" : "Passwort-Audit",
+ "Password settings" : "Passwort-Einstellungen",
+ "Import credentials" : "Anmeldeinformationen importieren",
+ "Export credentials" : "Anmeldeinformationen exportieren",
+ "Sharing" : "Teilen",
+ "Are you sure you want to leave? This WILL corrupt all your credentials" : "Möchten Sie dies wirklich verlassen? Dies WIRD alle Ihre Anmeldeinformationen zerstören",
+ "Your old password is incorrect!" : "Ihr altes Passwort ist nicht korrekt!",
+ "New passwords do not match!" : "Die neuen Passwörter stimmen nicht überein!",
+ "Please login with your new vault password" : "Bitte mit Ihrem neuen Tresor-Passwort anmelden",
+ "Share with users and groups" : "Mit Benutzern und Gruppen teilen",
+ "Share link" : "Link teilen",
+ "Are you sure you want to leave? This will corrupt this credential" : "Möchten Sie dies wirklich verlassen? Dies wird diese Anmeldeinformation zerstören",
+ "Credential unshared" : "Anmeldeinformation wird nicht mehr geteilt",
+ "Credential shared" : "Anmeldeinformation wird geteilt",
+ "Saved!" : "Gespeichert!",
+ "Toggle visibility" : "Sichtbarkeit umschalten",
+ "Copy to clipboard" : "In die Zwischenablage kopieren",
+ "Copied to clipboard!" : "In die Zwischenablage kopiert!",
+ "Generate password" : "Passwort generieren",
+ "Copy password to clipboard" : "Passwort in die Zwischenablage kopieren",
+ "Password copied to clipboard!" : "Passwort in die Zwischenablage kopiert!",
+ "Complete" : "Fertigstellen",
+ "Username" : "Benutzername",
+ "Repeat password" : "Passwort wiederholen",
+ "Add Tag" : "Schlagwort hinzufügen",
+ "Field label" : "Beschriftung des Feldes",
+ "Field value" : "Wert des Feldes",
+ "Choose a file" : "Datei auswählen",
+ "Text" : "Text",
+ "File" : "Datei",
+ "Add" : "Hinzufügen",
+ "Value" : "Wert",
+ "Type" : "Typ",
+ "Actions" : "Aktionen",
+ "Empty" : "Leer",
+ "Filename" : "Dateiname",
+ "Upload date" : "Datum des Hochladens",
+ "Size" : "Größe",
+ "Upload your OTP qr code" : "Laden Sie Ihren OTP QR-Code hoch",
+ "Current OTP settings" : "Aktuelle OTP-Einstellungen",
+ "Issuer" : "Ersteller",
+ "Secret" : "Geheimnis",
+ "Expire date" : "Ablaufdatum",
+ "No expire date set" : "Kein Ablaufdatum gesetzt",
+ "Renew interval" : "Intervall erneuern",
+ "Disabled" : "Deaktiviert",
+ "Day(s)" : "Tag(e)",
+ "Week(s)" : "Woche(n)",
+ "Month(s)" : "Monat(e)",
+ "Year(s)" : "Jahr(e)",
+ "Password generation settings" : "Einstellungen zur Passwortgenerierung",
+ "Password length" : "Passwortlänge",
+ "Minimum amount of digits" : "Minimale Anzahl an Zeichen",
+ "Use uppercase letters" : "Großbuchstaben verwenden",
+ "Use lowercase letters" : "Kleinbuchstaben verwenden",
+ "Use numbers" : "Zahlen verwenden",
+ "Use special characters" : "Sonderzeichen verwenden",
+ "Avoid ambiguous characters" : "Unklare Zeichen vermeiden",
+ "Require every character type" : "Jeder Zeichentyp erforderlich",
+ "Export type" : "Export-Typ",
+ "Export" : "Exportieren",
+ "Rename vault" : "Tresor umbenennen",
+ "New vault name" : "Neuer Tresor-Name",
+ "Change" : "Ändern",
+ "Change vault key" : "Tresor-Schlüssel ändern",
+ "Old vault password" : "Altes Tresor-Passwort",
+ "New vault password" : "Neues Tresor-Passwort",
+ "New vault password repeat" : "Neues Tresor-Passwort wiederholen",
+ "Please wait your vault is being updated, do not leave this page." : "Bitte warten, Ihr Tresor wird aktualisiert, bitte diese Seite nicht verlassen.",
+ "Processing" : "Verarbeite",
+ "Total progress" : "Gesamtfortschritt",
+ "About Passman" : "Über Passman",
+ "Version" : "Version",
+ "Donate to support development" : "Zur Unterstützung der Entwicklung bitte spenden",
+ "Bookmarklet" : "Lesezeichen setzen",
+ "Save your passwords with 1 click!" : "Speichern Sie Ihre Passwörter mit einem Klick!",
+ "Drag below button to your bookmark toolbar." : "Ziehen Sie die untere Schaltfläche in Ihre Lesezeichen-Leiste",
+ "Import type" : "Import-Typ",
+ "Import" : "Importieren",
+ "Read progress" : "Lesefortschritt",
+ "Upload progress" : "Hochladefortschritt",
+ "Private Key" : "Privater Schlüssel",
+ "Public key" : "Öffentlicher Schlüssel",
+ "Key size" : "Schlüsselgröße",
+ "Save keys" : "Schlüssel speichern",
+ "Generate sharing keys" : "Schlüssel zum Teilen erzeugen",
+ "Generating sharing keys" : "Erzeuge Schlüssel zum Teilen",
+ "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Das Passwort-Tool durchsucht Ihre Passwörter, berechnet die durchschnittliche Zeit zum Knacken des Passworts und wenn diese unter eine Schwelle liegt, wird dieses angezeigt",
+ "Minimum password stength" : "Minimale Passwortstärke",
+ "Passman scanned your passwords, and here is the result." : "Passman hat Ihre Passwörter durchsucht und hier ist das Ergbnis",
+ "A total of {{scan_result}} weak credentials." : "Insgesamt {{scan_result}} schwache Anmeldeinformationen.",
+ "Score" : "Bewertung",
+ "Action" : "Aktion",
+ "Search users or groups..." : "Suche Benutzer oder Gruppen...",
+ "Cyphering" : "Verschlüsselung",
+ "Uploading" : "Lade hoch",
+ "User" : "Nutzer",
+ "Crypto time" : "Verschlüsselungszeit",
+ "Total time spent cyphering" : "Gesamte aufgewendete Zeit zur Verschlüsselung",
+ "Read" : "Lesen",
+ "Write" : "Schreiben",
+ "Files" : "Dateien",
+ "Revisions" : "Revisionen",
+ "Pending" : "Ausstehend",
+ "Enable link sharing" : "Freigaben über Links aktivieren",
+ "Share until date" : "Freigabe gültig bis Datum",
+ "Expire after views" : "Läuft nach dem Anschauen ab",
+ "Click share first" : "Erst auf Teilen klicken",
+ "Show files" : "Dateien anzeigen",
+ "Details" : "Details",
+ "Hide details" : "Details ausblenden",
+ "Password score" : "Passwort-Bewertung",
+ "Cracking times" : "Knackversuche",
+ "100 / hour" : "100 / Stunde",
+ "Throttled online attack" : "Gedrosselter Online-Angriff",
+ "10 / second" : "10 / Sekunde",
+ "Unthrottled online attack" : "Nicht gedrosselter Online-Angriff",
+ "10k / second" : "10.000 / Sekunde",
+ "Offline attack, slow hash, many cores" : "Offline Angriff, langsamer Hash, viele Kerne",
+ "10B / second" : "10 Milliarden / Sekunde",
+ "Offline attack, fast hash, many cores" : "Offline Angriff, schneller Hash, viele Kerne",
+ "Match sequence" : "Sequenz um passendes zu finden",
+ "See match sequence" : "Sequenz um passendes zu finden anzeigen",
+ "Pattern" : "Muster",
+ "Matched word" : "Gefundenes Wort",
+ "Dictionary name" : "Name des Wörterbuchs",
+ "Rank" : "Rang",
+ "Reversed" : "Rückgängig gemacht",
+ "Guesses" : "Vermutung",
+ "Base guesses" : "Vermutungsbasis",
+ "Uppercase variations" : "Variationen der Großschreibung",
+ "l33t-variations" : "l33t-Variationen",
+ "Showing revisions of" : "Revision anzeigen von",
+ "Revision of" : "Revision von",
+ "by" : "von",
+ "No revisions found." : "Keine Revisionen gefunden.",
+ "Label" : "Beschriftung",
+ "Restore revision" : "Diese Revision wiederherstellen",
+ "Delete revision" : "Diese Revision löschen",
+ "Edit credential" : "Anmeldeinformation bearbeiten",
+ "Create new credential" : "Neue Anmeldeinformation erstellen",
+ "Save" : "Speichern",
+ "Cancel" : "Abbrechen",
+ "Settings" : "Einstellungen",
+ "Share credential {{credential}}" : "Anmeldeinformation {{credential}} teilen",
+ "Unshare" : "Freigabe aufheben",
+ "Showing deleted since" : "Anzeigen gelöscht seit",
+ "All time" : "Gesamte Zeit",
+ "Showing {{number_filtered}} of {{credential_number}} credentials" : "{{number_filtered}} of {{credential_number}} Anmeldeinformationen anzeigen",
+ "Search credential..." : "Anmeldeinformation suchen...",
+ "Account" : "Konto",
+ "Password" : "Passwort",
+ "OTP" : "OTP (One Time Passwort)",
+ "E-mail" : "E-Mail",
+ "URL" : "Url",
+ "Notes" : "Notizen",
+ "Expire time" : "Ablaufzeit",
+ "Changed" : "Geändert",
+ "Created" : "Erstellt",
+ "Edit" : "Bearbeiten",
+ "Delete" : "Löschen",
+ "Share" : "Share",
+ "Recover" : "Wiederherstellen",
+ "Destroy" : "Vernichten",
+ "You have incoming share requests." : "Sie haben eingehende Freigabeanforderungen.",
+ "If you want to the credential in a other vault," : "Wenn Sie zu einer anderen Anmeldeinformation in einem anderen Tresor möchten,",
+ "logout of this vault and login to the vault you want the shared credential in." : "melden Sie sich bei diesem Tresor ab und melde Sie sich bei dem Tresor, welches die geteilte Anmeldeinformation beinhaltet, wieder an.",
+ "Permissions" : "Rechte",
+ "Received from" : "Erhalten von",
+ "Date" : "Datum",
+ "Accept" : "Bestätigen",
+ "Decline" : "Ablehnen",
+ "Last accessed" : "Letzter Zugriff",
+ "Never" : "Nie",
+ "No vaults found, why not create one?" : "Kein Tresor gefunden, warum kein neues erstellen?",
+ "Please give your new vault a name." : "Bitte einen Namen für den neuen Tresor eingeben.",
+ "Vault password" : "Tresor-Passwort",
+ "Repeat vault password" : "Tresor-Passwort wiederholen",
+ "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Ihre Freigabeschlüssel werden 1024 bit stark sein. Sie können dies auch später noch in den Einstellungen ändern.",
+ "Create vault" : "Erstelle Tresor",
+ "Go back to vaults" : "Zurück zu den Tresoren",
+ "Please input the password for" : "Passwort eingeben für",
+ "Set this vault as default." : "Diesen Tresor als Standard setzen.",
+ "Login automatically to this vault." : "Automatisch in diesen Tresor einloggen.",
+ "Decrypt vault" : "Tresor entschlüsseln",
+ "Warning! Adding credentials over http can be insecure!" : "Achtung! Zugangsdaten über http kann unsicher sein!",
+ "Logged in to {{vault_name}}" : "Eingeloggt in {{vault_name}}",
+ "Change vault" : "Wechsle Tresor",
+ "Deleted credentials" : "Zugangsdaten gelöscht",
+ "Logout" : "Ausloggen",
+ "Donate" : "Spende",
+ "Someone has shared a credential with you." : "Jemand hat Zugangsdaten mit Ihnen geteilt.",
+ "Click here to request it" : "Hier klicken um es anzufordern",
+ "Loading..." : "Lade...",
+ "Awwhh.... credential not found. Maybe it expired" : "Oh... Zugangsdaten nicht gefunden. Vielleicht sind sie abgelaufen",
"A Passman item has been created, modified or deleted" : "Ein Passman-Element wurde erstellt, modifiziert oder gelöscht",
"A Passman item has expired" : "Ein Passman-Element ist abgelaufen",
"A Passman item has been shared" : "Ein Passman-Element wurde geteilt",
@@ -28,10 +250,8 @@ OC.L10N.register(
"Remind me later" : "Erinnern Sie mich später",
"Ignore" : "Ignorieren",
"%s shared \"%s\" with you. Click here to accept" : "%s teilt \"%s\" mit Ihnen. Um dies zu akzeptieren, klicken Sie bitte hier",
- "Decline" : "Ablehnen",
"%s has declined your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit Ihnen abgelehnt.",
"%s has accepted your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit Ihnen akzeptiert.",
- "Settings" : "Einstellungen",
"Connection to server lost" : "Verbindung zum Server verloren",
"Problem loading page, reloading in 5 seconds" : "Problem beim Laden der Seite, Seite wird in 5 Sekunden erneut geladen",
"Saving..." : "Speichere...",
diff --git a/l10n/de_DE.json b/l10n/de_DE.json
index 685a15c0..db6d4da7 100644
--- a/l10n/de_DE.json
+++ b/l10n/de_DE.json
@@ -1,5 +1,227 @@
{ "translations": {
"Passwords" : "Passwörter",
+ "Generating sharing keys ( %step / 2)" : "Generiere Freigabe-Schlüssel ( %step / 2)",
+ "Incorrect vault password!" : "Tresor-Passwort nicht korrekt",
+ "Passwords do not match" : "Passwörter stimmen nicht überein",
+ "General" : "Allgemein",
+ "Custom Fields" : "Benutzerdefinierte Felder",
+ "Please fill in a label!" : "Bitte Beschriftung hinzufügen!",
+ "Please fill in a value!" : "Bitte einen Wert hinzufügen!",
+ "Error loading file" : "Fehler beim Laden der Datei",
+ "An error happend during decryption" : "Ein Fehler ist beim Entschlüsseln aufgetreten",
+ "Credential created!" : "Anmeldeinformation erstellt!",
+ "Credential deleted" : "Anmeldeinformation gelöscht",
+ "Credential updated" : "Anmeldeinformation aktualisiert",
+ "Credential recovered" : "Anmeldeinformation wiederhergestellt",
+ "Error downloading file, you probably don't have enough permissions" : "Fehler beim Herunterladen der Datei, Sie haben möglicherweise nicht die entsprechende Berechtigung",
+ "Starting export" : "Export gestartet",
+ "Decrypting credentials" : "Anmeldeinformationen werden entschlüsselt",
+ "Done" : "Fertig",
+ "File read successfully!" : "Datei erfolgreich gelesen!",
+ "Credential has no label, skipping" : "Übersprungen, Anmeldeinformation hat keine Beschriftung",
+ "Adding {{credential}}" : "{{credential}} werden hinzugefügt",
+ "Added {{credential}}" : "{{credential}} wurden hinzugefügt",
+ "Parsed {{num}} credentials, starting to import" : "{{num}} Anmeldeinformationen eingelesen, Import wird gestartet",
+ "Revision deleted" : "Revision gelöscht",
+ "Revision restored" : "Revision wiederhergestellt",
+ "Save in passman" : "In Passman speichern",
+ "Settings saved" : "Einstellungen gespeichert",
+ "General settings" : "Allgemeine Einstellungen",
+ "Password Audit" : "Passwort-Audit",
+ "Password settings" : "Passwort-Einstellungen",
+ "Import credentials" : "Anmeldeinformationen importieren",
+ "Export credentials" : "Anmeldeinformationen exportieren",
+ "Sharing" : "Teilen",
+ "Are you sure you want to leave? This WILL corrupt all your credentials" : "Möchten Sie dies wirklich verlassen? Dies WIRD alle Ihre Anmeldeinformationen zerstören",
+ "Your old password is incorrect!" : "Ihr altes Passwort ist nicht korrekt!",
+ "New passwords do not match!" : "Die neuen Passwörter stimmen nicht überein!",
+ "Please login with your new vault password" : "Bitte mit Ihrem neuen Tresor-Passwort anmelden",
+ "Share with users and groups" : "Mit Benutzern und Gruppen teilen",
+ "Share link" : "Link teilen",
+ "Are you sure you want to leave? This will corrupt this credential" : "Möchten Sie dies wirklich verlassen? Dies wird diese Anmeldeinformation zerstören",
+ "Credential unshared" : "Anmeldeinformation wird nicht mehr geteilt",
+ "Credential shared" : "Anmeldeinformation wird geteilt",
+ "Saved!" : "Gespeichert!",
+ "Toggle visibility" : "Sichtbarkeit umschalten",
+ "Copy to clipboard" : "In die Zwischenablage kopieren",
+ "Copied to clipboard!" : "In die Zwischenablage kopiert!",
+ "Generate password" : "Passwort generieren",
+ "Copy password to clipboard" : "Passwort in die Zwischenablage kopieren",
+ "Password copied to clipboard!" : "Passwort in die Zwischenablage kopiert!",
+ "Complete" : "Fertigstellen",
+ "Username" : "Benutzername",
+ "Repeat password" : "Passwort wiederholen",
+ "Add Tag" : "Schlagwort hinzufügen",
+ "Field label" : "Beschriftung des Feldes",
+ "Field value" : "Wert des Feldes",
+ "Choose a file" : "Datei auswählen",
+ "Text" : "Text",
+ "File" : "Datei",
+ "Add" : "Hinzufügen",
+ "Value" : "Wert",
+ "Type" : "Typ",
+ "Actions" : "Aktionen",
+ "Empty" : "Leer",
+ "Filename" : "Dateiname",
+ "Upload date" : "Datum des Hochladens",
+ "Size" : "Größe",
+ "Upload your OTP qr code" : "Laden Sie Ihren OTP QR-Code hoch",
+ "Current OTP settings" : "Aktuelle OTP-Einstellungen",
+ "Issuer" : "Ersteller",
+ "Secret" : "Geheimnis",
+ "Expire date" : "Ablaufdatum",
+ "No expire date set" : "Kein Ablaufdatum gesetzt",
+ "Renew interval" : "Intervall erneuern",
+ "Disabled" : "Deaktiviert",
+ "Day(s)" : "Tag(e)",
+ "Week(s)" : "Woche(n)",
+ "Month(s)" : "Monat(e)",
+ "Year(s)" : "Jahr(e)",
+ "Password generation settings" : "Einstellungen zur Passwortgenerierung",
+ "Password length" : "Passwortlänge",
+ "Minimum amount of digits" : "Minimale Anzahl an Zeichen",
+ "Use uppercase letters" : "Großbuchstaben verwenden",
+ "Use lowercase letters" : "Kleinbuchstaben verwenden",
+ "Use numbers" : "Zahlen verwenden",
+ "Use special characters" : "Sonderzeichen verwenden",
+ "Avoid ambiguous characters" : "Unklare Zeichen vermeiden",
+ "Require every character type" : "Jeder Zeichentyp erforderlich",
+ "Export type" : "Export-Typ",
+ "Export" : "Exportieren",
+ "Rename vault" : "Tresor umbenennen",
+ "New vault name" : "Neuer Tresor-Name",
+ "Change" : "Ändern",
+ "Change vault key" : "Tresor-Schlüssel ändern",
+ "Old vault password" : "Altes Tresor-Passwort",
+ "New vault password" : "Neues Tresor-Passwort",
+ "New vault password repeat" : "Neues Tresor-Passwort wiederholen",
+ "Please wait your vault is being updated, do not leave this page." : "Bitte warten, Ihr Tresor wird aktualisiert, bitte diese Seite nicht verlassen.",
+ "Processing" : "Verarbeite",
+ "Total progress" : "Gesamtfortschritt",
+ "About Passman" : "Über Passman",
+ "Version" : "Version",
+ "Donate to support development" : "Zur Unterstützung der Entwicklung bitte spenden",
+ "Bookmarklet" : "Lesezeichen setzen",
+ "Save your passwords with 1 click!" : "Speichern Sie Ihre Passwörter mit einem Klick!",
+ "Drag below button to your bookmark toolbar." : "Ziehen Sie die untere Schaltfläche in Ihre Lesezeichen-Leiste",
+ "Import type" : "Import-Typ",
+ "Import" : "Importieren",
+ "Read progress" : "Lesefortschritt",
+ "Upload progress" : "Hochladefortschritt",
+ "Private Key" : "Privater Schlüssel",
+ "Public key" : "Öffentlicher Schlüssel",
+ "Key size" : "Schlüsselgröße",
+ "Save keys" : "Schlüssel speichern",
+ "Generate sharing keys" : "Schlüssel zum Teilen erzeugen",
+ "Generating sharing keys" : "Erzeuge Schlüssel zum Teilen",
+ "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Das Passwort-Tool durchsucht Ihre Passwörter, berechnet die durchschnittliche Zeit zum Knacken des Passworts und wenn diese unter eine Schwelle liegt, wird dieses angezeigt",
+ "Minimum password stength" : "Minimale Passwortstärke",
+ "Passman scanned your passwords, and here is the result." : "Passman hat Ihre Passwörter durchsucht und hier ist das Ergbnis",
+ "A total of {{scan_result}} weak credentials." : "Insgesamt {{scan_result}} schwache Anmeldeinformationen.",
+ "Score" : "Bewertung",
+ "Action" : "Aktion",
+ "Search users or groups..." : "Suche Benutzer oder Gruppen...",
+ "Cyphering" : "Verschlüsselung",
+ "Uploading" : "Lade hoch",
+ "User" : "Nutzer",
+ "Crypto time" : "Verschlüsselungszeit",
+ "Total time spent cyphering" : "Gesamte aufgewendete Zeit zur Verschlüsselung",
+ "Read" : "Lesen",
+ "Write" : "Schreiben",
+ "Files" : "Dateien",
+ "Revisions" : "Revisionen",
+ "Pending" : "Ausstehend",
+ "Enable link sharing" : "Freigaben über Links aktivieren",
+ "Share until date" : "Freigabe gültig bis Datum",
+ "Expire after views" : "Läuft nach dem Anschauen ab",
+ "Click share first" : "Erst auf Teilen klicken",
+ "Show files" : "Dateien anzeigen",
+ "Details" : "Details",
+ "Hide details" : "Details ausblenden",
+ "Password score" : "Passwort-Bewertung",
+ "Cracking times" : "Knackversuche",
+ "100 / hour" : "100 / Stunde",
+ "Throttled online attack" : "Gedrosselter Online-Angriff",
+ "10 / second" : "10 / Sekunde",
+ "Unthrottled online attack" : "Nicht gedrosselter Online-Angriff",
+ "10k / second" : "10.000 / Sekunde",
+ "Offline attack, slow hash, many cores" : "Offline Angriff, langsamer Hash, viele Kerne",
+ "10B / second" : "10 Milliarden / Sekunde",
+ "Offline attack, fast hash, many cores" : "Offline Angriff, schneller Hash, viele Kerne",
+ "Match sequence" : "Sequenz um passendes zu finden",
+ "See match sequence" : "Sequenz um passendes zu finden anzeigen",
+ "Pattern" : "Muster",
+ "Matched word" : "Gefundenes Wort",
+ "Dictionary name" : "Name des Wörterbuchs",
+ "Rank" : "Rang",
+ "Reversed" : "Rückgängig gemacht",
+ "Guesses" : "Vermutung",
+ "Base guesses" : "Vermutungsbasis",
+ "Uppercase variations" : "Variationen der Großschreibung",
+ "l33t-variations" : "l33t-Variationen",
+ "Showing revisions of" : "Revision anzeigen von",
+ "Revision of" : "Revision von",
+ "by" : "von",
+ "No revisions found." : "Keine Revisionen gefunden.",
+ "Label" : "Beschriftung",
+ "Restore revision" : "Diese Revision wiederherstellen",
+ "Delete revision" : "Diese Revision löschen",
+ "Edit credential" : "Anmeldeinformation bearbeiten",
+ "Create new credential" : "Neue Anmeldeinformation erstellen",
+ "Save" : "Speichern",
+ "Cancel" : "Abbrechen",
+ "Settings" : "Einstellungen",
+ "Share credential {{credential}}" : "Anmeldeinformation {{credential}} teilen",
+ "Unshare" : "Freigabe aufheben",
+ "Showing deleted since" : "Anzeigen gelöscht seit",
+ "All time" : "Gesamte Zeit",
+ "Showing {{number_filtered}} of {{credential_number}} credentials" : "{{number_filtered}} of {{credential_number}} Anmeldeinformationen anzeigen",
+ "Search credential..." : "Anmeldeinformation suchen...",
+ "Account" : "Konto",
+ "Password" : "Passwort",
+ "OTP" : "OTP (One Time Passwort)",
+ "E-mail" : "E-Mail",
+ "URL" : "Url",
+ "Notes" : "Notizen",
+ "Expire time" : "Ablaufzeit",
+ "Changed" : "Geändert",
+ "Created" : "Erstellt",
+ "Edit" : "Bearbeiten",
+ "Delete" : "Löschen",
+ "Share" : "Share",
+ "Recover" : "Wiederherstellen",
+ "Destroy" : "Vernichten",
+ "You have incoming share requests." : "Sie haben eingehende Freigabeanforderungen.",
+ "If you want to the credential in a other vault," : "Wenn Sie zu einer anderen Anmeldeinformation in einem anderen Tresor möchten,",
+ "logout of this vault and login to the vault you want the shared credential in." : "melden Sie sich bei diesem Tresor ab und melde Sie sich bei dem Tresor, welches die geteilte Anmeldeinformation beinhaltet, wieder an.",
+ "Permissions" : "Rechte",
+ "Received from" : "Erhalten von",
+ "Date" : "Datum",
+ "Accept" : "Bestätigen",
+ "Decline" : "Ablehnen",
+ "Last accessed" : "Letzter Zugriff",
+ "Never" : "Nie",
+ "No vaults found, why not create one?" : "Kein Tresor gefunden, warum kein neues erstellen?",
+ "Please give your new vault a name." : "Bitte einen Namen für den neuen Tresor eingeben.",
+ "Vault password" : "Tresor-Passwort",
+ "Repeat vault password" : "Tresor-Passwort wiederholen",
+ "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Ihre Freigabeschlüssel werden 1024 bit stark sein. Sie können dies auch später noch in den Einstellungen ändern.",
+ "Create vault" : "Erstelle Tresor",
+ "Go back to vaults" : "Zurück zu den Tresoren",
+ "Please input the password for" : "Passwort eingeben für",
+ "Set this vault as default." : "Diesen Tresor als Standard setzen.",
+ "Login automatically to this vault." : "Automatisch in diesen Tresor einloggen.",
+ "Decrypt vault" : "Tresor entschlüsseln",
+ "Warning! Adding credentials over http can be insecure!" : "Achtung! Zugangsdaten über http kann unsicher sein!",
+ "Logged in to {{vault_name}}" : "Eingeloggt in {{vault_name}}",
+ "Change vault" : "Wechsle Tresor",
+ "Deleted credentials" : "Zugangsdaten gelöscht",
+ "Logout" : "Ausloggen",
+ "Donate" : "Spende",
+ "Someone has shared a credential with you." : "Jemand hat Zugangsdaten mit Ihnen geteilt.",
+ "Click here to request it" : "Hier klicken um es anzufordern",
+ "Loading..." : "Lade...",
+ "Awwhh.... credential not found. Maybe it expired" : "Oh... Zugangsdaten nicht gefunden. Vielleicht sind sie abgelaufen",
"A Passman item has been created, modified or deleted" : "Ein Passman-Element wurde erstellt, modifiziert oder gelöscht",
"A Passman item has expired" : "Ein Passman-Element ist abgelaufen",
"A Passman item has been shared" : "Ein Passman-Element wurde geteilt",
@@ -26,10 +248,8 @@
"Remind me later" : "Erinnern Sie mich später",
"Ignore" : "Ignorieren",
"%s shared \"%s\" with you. Click here to accept" : "%s teilt \"%s\" mit Ihnen. Um dies zu akzeptieren, klicken Sie bitte hier",
- "Decline" : "Ablehnen",
"%s has declined your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit Ihnen abgelehnt.",
"%s has accepted your share request for \"%s\"." : "%s hat das Teilen von \"%s\" mit Ihnen akzeptiert.",
- "Settings" : "Einstellungen",
"Connection to server lost" : "Verbindung zum Server verloren",
"Problem loading page, reloading in 5 seconds" : "Problem beim Laden der Seite, Seite wird in 5 Sekunden erneut geladen",
"Saving..." : "Speichere...",
diff --git a/l10n/es.js b/l10n/es.js
index 2cccd70f..64155db8 100644
--- a/l10n/es.js
+++ b/l10n/es.js
@@ -2,6 +2,228 @@ OC.L10N.register(
"passman",
{
"Passwords" : "Contraseñas",
+ "Generating sharing keys ( %step / 2)" : "Generando llaves de compartición ( %step / 2)",
+ "Incorrect vault password!" : "¡Contraseña de bóveda incorrecta!",
+ "Passwords do not match" : "Contraseñas no coinciden",
+ "General" : "General",
+ "Custom Fields" : "Campos personalizados",
+ "Please fill in a label!" : "¡Por favor llene en una etiqueta!",
+ "Please fill in a value!" : "¡Por favor llene en un valor!",
+ "Error loading file" : "Error al cargar el archivo",
+ "An error happend during decryption" : "Un error sucedió durante el descifrado ",
+ "Credential created!" : "¡Credencial creada!",
+ "Credential deleted" : "Credencial eliminada",
+ "Credential updated" : "Credencial actualziada",
+ "Credential recovered" : "Credencial recuperada",
+ "Error downloading file, you probably don't have enough permissions" : "Error al descargar archivo, probablemente no tiene suficientes permisos",
+ "Starting export" : "Iniciar exportación",
+ "Decrypting credentials" : "Descifrando credenciales",
+ "Done" : "Hecho",
+ "File read successfully!" : "¡Lectura de archivo exitosa!",
+ "Credential has no label, skipping" : "Credencial sin etiquete, saltando",
+ "Adding {{credential}}" : "Agregando {{credential}}",
+ "Added {{credential}}" : "Se ha agregado la {{credential}}",
+ "Parsed {{num}} credentials, starting to import" : "Analizadas {{num}} credenciales, comenzando a importar",
+ "Revision deleted" : "Revisión eliminada",
+ "Revision restored" : "Revisión restaurada",
+ "Save in passman" : "Guardar en passman",
+ "Settings saved" : "Ajustes guardados",
+ "General settings" : "Ajustes generales",
+ "Password Audit" : "Auditoría de Contraseña",
+ "Password settings" : "Ajustes de contraseña",
+ "Import credentials" : "Importar credenciales",
+ "Export credentials" : "Exportar credenciales",
+ "Sharing" : "Compartir",
+ "Are you sure you want to leave? This WILL corrupt all your credentials" : "¿Esta seguro que desea salir? Esto CORROMPERA todas sus credenciales",
+ "Your old password is incorrect!" : "¡Su contraseña anterior es incorrecta!",
+ "New passwords do not match!" : "¡Las contraseñas nuevas no coinciden!",
+ "Please login with your new vault password" : "Por favor inicie sesión con su nueva contraseña de bóveda",
+ "Share with users and groups" : "Comparta con usuarios y grupos",
+ "Share link" : "Comparta el enlace",
+ "Are you sure you want to leave? This will corrupt this credential" : "¿Esta seguro que desea salir? Esto corromperá esta credencial",
+ "Credential unshared" : "Dejo de compartir esta credencial",
+ "Credential shared" : "Ha compartido esta credencial",
+ "Saved!" : "¡Guardado!",
+ "Toggle visibility" : "Visibilidad alterna",
+ "Copy to clipboard" : "Copiar a portapapeles",
+ "Copied to clipboard!" : "¡Copiado a portapapeles!",
+ "Generate password" : "Generar contraseña",
+ "Copy password to clipboard" : "Copiar contraseña a portapapeles",
+ "Password copied to clipboard!" : "¡Contraseña copiada a portapapeles!",
+ "Complete" : "Completo",
+ "Username" : "Nombre de usuario",
+ "Repeat password" : "Repita constraseña",
+ "Add Tag" : "Agregar Etiqueta",
+ "Field label" : "Llene etiqueta",
+ "Field value" : "Llene valor",
+ "Choose a file" : "Elija un archivo",
+ "Text" : "Texto",
+ "File" : "Archivo",
+ "Add" : "Agregar",
+ "Value" : "Valor",
+ "Type" : "Tipo",
+ "Actions" : "Acciones",
+ "Empty" : "Vacio",
+ "Filename" : "Nombre de archivo",
+ "Upload date" : "Fecha de subida",
+ "Size" : "Tamaño",
+ "Upload your OTP qr code" : "Suba su código QR OTP",
+ "Current OTP settings" : "Ajustes OTP actuales",
+ "Issuer" : "Editor",
+ "Secret" : "Secreto",
+ "Expire date" : "Fecha de expiración",
+ "No expire date set" : "Sin fecha de expiración definida",
+ "Renew interval" : "Renueve intervalo",
+ "Disabled" : "Deshabilitado",
+ "Day(s)" : "Día(s)",
+ "Week(s)" : "Semana(s)",
+ "Month(s)" : "Mes(es)",
+ "Year(s)" : "Año(s)",
+ "Password generation settings" : "Ajustes de generación de contraseñas",
+ "Password length" : "Longitud de contraseña",
+ "Minimum amount of digits" : "Cantidad mínima de dígitos",
+ "Use uppercase letters" : "Use letras mayúsculas",
+ "Use lowercase letters" : "Use letras minúsculas",
+ "Use numbers" : "Use numeros",
+ "Use special characters" : "Use caracteres especiales",
+ "Avoid ambiguous characters" : "Evite caracteres ambiguos",
+ "Require every character type" : "Requerir todos los tipos de caracteres",
+ "Export type" : "Exportar tipo",
+ "Export" : "Exportar",
+ "Rename vault" : "Renombrar bóveda",
+ "New vault name" : "Nuevo nombre de bóveda",
+ "Change" : "Cambiar",
+ "Change vault key" : "Cambiar la llave de la bóveda",
+ "Old vault password" : "Contraseña de la bóveda anterior",
+ "New vault password" : "Contraseña nueva de la bóveda",
+ "New vault password repeat" : "Repita la contraseña nueva de la bóveda",
+ "Please wait your vault is being updated, do not leave this page." : "Por favor espere su esta bóveda siendo actualizada, no deje esta página",
+ "Processing" : "Procesando",
+ "Total progress" : "Progreso total",
+ "About Passman" : "Acerca de passman",
+ "Version" : "Versión",
+ "Donate to support development" : "Done para dar soporte al desarrollo",
+ "Bookmarklet" : "Marcadores",
+ "Save your passwords with 1 click!" : "¡Guarde sus contraseñas en 1 click!",
+ "Drag below button to your bookmark toolbar." : "Arrastre debajo del botón de marcadores en su barra de herramientas ",
+ "Import type" : "Tipo de importe",
+ "Import" : "Importar",
+ "Read progress" : "Progreso de lectura",
+ "Upload progress" : "Progreso de Subida",
+ "Private Key" : "Llave privada",
+ "Public key" : "Llave pública",
+ "Key size" : "Tamaño de llave",
+ "Save keys" : "Guardar llaves",
+ "Generate sharing keys" : "Generar llaves para compartir",
+ "Generating sharing keys" : "Generando llaves para compartir",
+ "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "La herramienta escaneará sus contraseñas, calcular el tiempo promedio de descifrado, si está debajo de la marca, las muestra",
+ "Minimum password stength" : "Fuerza mínima de contraseña",
+ "Passman scanned your passwords, and here is the result." : "Passman escaneó sus contraseñas, y aquí están los resultados.",
+ "A total of {{scan_result}} weak credentials." : "Un total de {{scan_result}} credenciales débiles.",
+ "Score" : "Puntaje",
+ "Action" : "Acción",
+ "Search users or groups..." : "Buscar usuarios o grupos...",
+ "Cyphering" : "Cifrando",
+ "Uploading" : "Subiendo",
+ "User" : "Usuario",
+ "Crypto time" : "Tiempo de cifrado",
+ "Total time spent cyphering" : "Tiempo total usado en cifrado",
+ "Read" : "Leer",
+ "Write" : "Escribir",
+ "Files" : "Archivos",
+ "Revisions" : "Revisiones",
+ "Pending" : "Pendiente",
+ "Enable link sharing" : "Activar compartir enlace",
+ "Share until date" : "Compartir hasta la fecha",
+ "Expire after views" : "Expirar después de vistas",
+ "Click share first" : "Primero haga click en compartir",
+ "Show files" : "Mostrar archivos",
+ "Details" : "Detalles",
+ "Hide details" : "Esconder detalles",
+ "Password score" : "Puntaje de constraseña",
+ "Cracking times" : "Tiempos de cifrados",
+ "100 / hour" : "100 / hora",
+ "Throttled online attack" : "Ataque en línea limitado",
+ "10 / second" : "10 / segundos",
+ "Unthrottled online attack" : "Ataque en línea sin límite",
+ "10k / second" : "10k / segundo",
+ "Offline attack, slow hash, many cores" : "Ataque local, hash lento , varios núcleos",
+ "10B / second" : "10B / segundos",
+ "Offline attack, fast hash, many cores" : "Ataque local, hash rápido, muchos núcleos",
+ "Match sequence" : "Secuencia coincidente",
+ "See match sequence" : "Ver secuencia que coincide",
+ "Pattern" : "Patrón",
+ "Matched word" : "Palabra coincidente",
+ "Dictionary name" : "Nombre del diccionario",
+ "Rank" : "Rango",
+ "Reversed" : "Invertido",
+ "Guesses" : "Suposiciones",
+ "Base guesses" : "Suposiciones base",
+ "Uppercase variations" : "Variaciones de mayúsculas",
+ "l33t-variations" : "Variaciones l33t",
+ "Showing revisions of" : "Mostrar revisión de ",
+ "Revision of" : "Revisión de",
+ "by" : "por",
+ "No revisions found." : "Sin revisión encontrada.",
+ "Label" : "Etiqueta",
+ "Restore revision" : "Restaurar revisión",
+ "Delete revision" : "Eliminar revisión",
+ "Edit credential" : "Editar credencial",
+ "Create new credential" : "Crear nueva credencial",
+ "Save" : "Guardar",
+ "Cancel" : "Cancelar",
+ "Settings" : "Ajustes",
+ "Share credential {{credential}}" : "Compartir credenciales {{credential}}",
+ "Unshare" : "Dejar de compartir",
+ "Showing deleted since" : "Mostrar fecha de eliminación",
+ "All time" : "Todo el tiempo",
+ "Showing {{number_filtered}} of {{credential_number}} credentials" : "Mostrando {{number_filtered}} de {{credential_number}} credenciales",
+ "Search credential..." : "Mostrar credenciales...",
+ "Account" : "Cuenta",
+ "Password" : "Contraseña",
+ "OTP" : "OTP",
+ "E-mail" : "Correo electrónico",
+ "URL" : "URL",
+ "Notes" : "Notas",
+ "Expire time" : "Tiempo de expiración ",
+ "Changed" : "Cambiado",
+ "Created" : "Creado",
+ "Edit" : "Editar",
+ "Delete" : "Eliminar",
+ "Share" : "Compartir",
+ "Recover" : "Recuperar",
+ "Destroy" : "Destruir",
+ "You have incoming share requests." : "Tiene solicitudes de compartición entrantes",
+ "If you want to the credential in a other vault," : "Si quiere compartir la credencial en otra bóveda,",
+ "logout of this vault and login to the vault you want the shared credential in." : "cierre su sesión en esta bóveda e inicie sesión en la bóveda con la que quiere compartir la credencial.",
+ "Permissions" : "Permisos",
+ "Received from" : "Recibido de",
+ "Date" : "Fecha",
+ "Accept" : "Aceptar",
+ "Decline" : "Denegar",
+ "Last accessed" : "Último acceso",
+ "Never" : "Nunca",
+ "No vaults found, why not create one?" : "No se encontraron bóvedas, ¿porque no crear una?",
+ "Please give your new vault a name." : "Por favor de nombre a su nueva bóveda.",
+ "Vault password" : "Contraseña de bóveda",
+ "Repeat vault password" : "Repita contraseña de bóveda",
+ "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Su llave para compartir tendrá una fuerza de 1024bit, la cual puede cambiar después en los ajustes.",
+ "Create vault" : "Crear bóveda",
+ "Go back to vaults" : "Regresar a las bóvedas",
+ "Please input the password for" : "Por favor ingrese la contraseña para",
+ "Set this vault as default." : "Coloque esta bóveda como predeterminada.",
+ "Login automatically to this vault." : "Inicie sesión automáticamente para esta bóveda.",
+ "Decrypt vault" : "Descifre bóveda",
+ "Warning! Adding credentials over http can be insecure!" : "¡Advertencia! ¡Agregar credenciales sobre http puede ser inseguro!",
+ "Logged in to {{vault_name}}" : "Sesión iniciada en {{vault_name}}",
+ "Change vault" : "Cambiar bóveda",
+ "Deleted credentials" : "Borrar credenciales",
+ "Logout" : "Salir",
+ "Donate" : "Donar",
+ "Someone has shared a credential with you." : "Alguien a compartido una credencial con usted.",
+ "Click here to request it" : "Haga click aquí para solicitar",
+ "Loading..." : "Cargando...",
+ "Awwhh.... credential not found. Maybe it expired" : "Oh oh... la credencial no se encontró. Tal vez esta expiró",
"A Passman item has been created, modified or deleted" : "Un objeto Passman puede ser creado, modificado o borrado",
"A Passman item has expired" : "Un objeto Passman ha expirado",
"A Passman item has been shared" : "Un objeto Passman ha sido compartido",
@@ -28,10 +250,8 @@ OC.L10N.register(
"Remind me later" : "Recuérdamelo mas tarde",
"Ignore" : "Ignorar",
"%s shared \"%s\" with you. Click here to accept" : "%s comparte \"%s\" contigo. Hacer click aquí para aceptar",
- "Decline" : "Denegar",
"%s has declined your share request for \"%s\"." : "%s ha rechazado su petición para compartir \"%s\".",
"%s has accepted your share request for \"%s\"." : "%s ha aceptado tu petición para compartir \"%s\".",
- "Settings" : "Ajustes",
"Connection to server lost" : "Perdida la conexión al server",
"Problem loading page, reloading in 5 seconds" : "Problema al cargar la página, recargando en 5 segundos",
"Saving..." : "Guardando...",
diff --git a/l10n/es.json b/l10n/es.json
index 5fed4c25..66528756 100644
--- a/l10n/es.json
+++ b/l10n/es.json
@@ -1,5 +1,227 @@
{ "translations": {
"Passwords" : "Contraseñas",
+ "Generating sharing keys ( %step / 2)" : "Generando llaves de compartición ( %step / 2)",
+ "Incorrect vault password!" : "¡Contraseña de bóveda incorrecta!",
+ "Passwords do not match" : "Contraseñas no coinciden",
+ "General" : "General",
+ "Custom Fields" : "Campos personalizados",
+ "Please fill in a label!" : "¡Por favor llene en una etiqueta!",
+ "Please fill in a value!" : "¡Por favor llene en un valor!",
+ "Error loading file" : "Error al cargar el archivo",
+ "An error happend during decryption" : "Un error sucedió durante el descifrado ",
+ "Credential created!" : "¡Credencial creada!",
+ "Credential deleted" : "Credencial eliminada",
+ "Credential updated" : "Credencial actualziada",
+ "Credential recovered" : "Credencial recuperada",
+ "Error downloading file, you probably don't have enough permissions" : "Error al descargar archivo, probablemente no tiene suficientes permisos",
+ "Starting export" : "Iniciar exportación",
+ "Decrypting credentials" : "Descifrando credenciales",
+ "Done" : "Hecho",
+ "File read successfully!" : "¡Lectura de archivo exitosa!",
+ "Credential has no label, skipping" : "Credencial sin etiquete, saltando",
+ "Adding {{credential}}" : "Agregando {{credential}}",
+ "Added {{credential}}" : "Se ha agregado la {{credential}}",
+ "Parsed {{num}} credentials, starting to import" : "Analizadas {{num}} credenciales, comenzando a importar",
+ "Revision deleted" : "Revisión eliminada",
+ "Revision restored" : "Revisión restaurada",
+ "Save in passman" : "Guardar en passman",
+ "Settings saved" : "Ajustes guardados",
+ "General settings" : "Ajustes generales",
+ "Password Audit" : "Auditoría de Contraseña",
+ "Password settings" : "Ajustes de contraseña",
+ "Import credentials" : "Importar credenciales",
+ "Export credentials" : "Exportar credenciales",
+ "Sharing" : "Compartir",
+ "Are you sure you want to leave? This WILL corrupt all your credentials" : "¿Esta seguro que desea salir? Esto CORROMPERA todas sus credenciales",
+ "Your old password is incorrect!" : "¡Su contraseña anterior es incorrecta!",
+ "New passwords do not match!" : "¡Las contraseñas nuevas no coinciden!",
+ "Please login with your new vault password" : "Por favor inicie sesión con su nueva contraseña de bóveda",
+ "Share with users and groups" : "Comparta con usuarios y grupos",
+ "Share link" : "Comparta el enlace",
+ "Are you sure you want to leave? This will corrupt this credential" : "¿Esta seguro que desea salir? Esto corromperá esta credencial",
+ "Credential unshared" : "Dejo de compartir esta credencial",
+ "Credential shared" : "Ha compartido esta credencial",
+ "Saved!" : "¡Guardado!",
+ "Toggle visibility" : "Visibilidad alterna",
+ "Copy to clipboard" : "Copiar a portapapeles",
+ "Copied to clipboard!" : "¡Copiado a portapapeles!",
+ "Generate password" : "Generar contraseña",
+ "Copy password to clipboard" : "Copiar contraseña a portapapeles",
+ "Password copied to clipboard!" : "¡Contraseña copiada a portapapeles!",
+ "Complete" : "Completo",
+ "Username" : "Nombre de usuario",
+ "Repeat password" : "Repita constraseña",
+ "Add Tag" : "Agregar Etiqueta",
+ "Field label" : "Llene etiqueta",
+ "Field value" : "Llene valor",
+ "Choose a file" : "Elija un archivo",
+ "Text" : "Texto",
+ "File" : "Archivo",
+ "Add" : "Agregar",
+ "Value" : "Valor",
+ "Type" : "Tipo",
+ "Actions" : "Acciones",
+ "Empty" : "Vacio",
+ "Filename" : "Nombre de archivo",
+ "Upload date" : "Fecha de subida",
+ "Size" : "Tamaño",
+ "Upload your OTP qr code" : "Suba su código QR OTP",
+ "Current OTP settings" : "Ajustes OTP actuales",
+ "Issuer" : "Editor",
+ "Secret" : "Secreto",
+ "Expire date" : "Fecha de expiración",
+ "No expire date set" : "Sin fecha de expiración definida",
+ "Renew interval" : "Renueve intervalo",
+ "Disabled" : "Deshabilitado",
+ "Day(s)" : "Día(s)",
+ "Week(s)" : "Semana(s)",
+ "Month(s)" : "Mes(es)",
+ "Year(s)" : "Año(s)",
+ "Password generation settings" : "Ajustes de generación de contraseñas",
+ "Password length" : "Longitud de contraseña",
+ "Minimum amount of digits" : "Cantidad mínima de dígitos",
+ "Use uppercase letters" : "Use letras mayúsculas",
+ "Use lowercase letters" : "Use letras minúsculas",
+ "Use numbers" : "Use numeros",
+ "Use special characters" : "Use caracteres especiales",
+ "Avoid ambiguous characters" : "Evite caracteres ambiguos",
+ "Require every character type" : "Requerir todos los tipos de caracteres",
+ "Export type" : "Exportar tipo",
+ "Export" : "Exportar",
+ "Rename vault" : "Renombrar bóveda",
+ "New vault name" : "Nuevo nombre de bóveda",
+ "Change" : "Cambiar",
+ "Change vault key" : "Cambiar la llave de la bóveda",
+ "Old vault password" : "Contraseña de la bóveda anterior",
+ "New vault password" : "Contraseña nueva de la bóveda",
+ "New vault password repeat" : "Repita la contraseña nueva de la bóveda",
+ "Please wait your vault is being updated, do not leave this page." : "Por favor espere su esta bóveda siendo actualizada, no deje esta página",
+ "Processing" : "Procesando",
+ "Total progress" : "Progreso total",
+ "About Passman" : "Acerca de passman",
+ "Version" : "Versión",
+ "Donate to support development" : "Done para dar soporte al desarrollo",
+ "Bookmarklet" : "Marcadores",
+ "Save your passwords with 1 click!" : "¡Guarde sus contraseñas en 1 click!",
+ "Drag below button to your bookmark toolbar." : "Arrastre debajo del botón de marcadores en su barra de herramientas ",
+ "Import type" : "Tipo de importe",
+ "Import" : "Importar",
+ "Read progress" : "Progreso de lectura",
+ "Upload progress" : "Progreso de Subida",
+ "Private Key" : "Llave privada",
+ "Public key" : "Llave pública",
+ "Key size" : "Tamaño de llave",
+ "Save keys" : "Guardar llaves",
+ "Generate sharing keys" : "Generar llaves para compartir",
+ "Generating sharing keys" : "Generando llaves para compartir",
+ "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "La herramienta escaneará sus contraseñas, calcular el tiempo promedio de descifrado, si está debajo de la marca, las muestra",
+ "Minimum password stength" : "Fuerza mínima de contraseña",
+ "Passman scanned your passwords, and here is the result." : "Passman escaneó sus contraseñas, y aquí están los resultados.",
+ "A total of {{scan_result}} weak credentials." : "Un total de {{scan_result}} credenciales débiles.",
+ "Score" : "Puntaje",
+ "Action" : "Acción",
+ "Search users or groups..." : "Buscar usuarios o grupos...",
+ "Cyphering" : "Cifrando",
+ "Uploading" : "Subiendo",
+ "User" : "Usuario",
+ "Crypto time" : "Tiempo de cifrado",
+ "Total time spent cyphering" : "Tiempo total usado en cifrado",
+ "Read" : "Leer",
+ "Write" : "Escribir",
+ "Files" : "Archivos",
+ "Revisions" : "Revisiones",
+ "Pending" : "Pendiente",
+ "Enable link sharing" : "Activar compartir enlace",
+ "Share until date" : "Compartir hasta la fecha",
+ "Expire after views" : "Expirar después de vistas",
+ "Click share first" : "Primero haga click en compartir",
+ "Show files" : "Mostrar archivos",
+ "Details" : "Detalles",
+ "Hide details" : "Esconder detalles",
+ "Password score" : "Puntaje de constraseña",
+ "Cracking times" : "Tiempos de cifrados",
+ "100 / hour" : "100 / hora",
+ "Throttled online attack" : "Ataque en línea limitado",
+ "10 / second" : "10 / segundos",
+ "Unthrottled online attack" : "Ataque en línea sin límite",
+ "10k / second" : "10k / segundo",
+ "Offline attack, slow hash, many cores" : "Ataque local, hash lento , varios núcleos",
+ "10B / second" : "10B / segundos",
+ "Offline attack, fast hash, many cores" : "Ataque local, hash rápido, muchos núcleos",
+ "Match sequence" : "Secuencia coincidente",
+ "See match sequence" : "Ver secuencia que coincide",
+ "Pattern" : "Patrón",
+ "Matched word" : "Palabra coincidente",
+ "Dictionary name" : "Nombre del diccionario",
+ "Rank" : "Rango",
+ "Reversed" : "Invertido",
+ "Guesses" : "Suposiciones",
+ "Base guesses" : "Suposiciones base",
+ "Uppercase variations" : "Variaciones de mayúsculas",
+ "l33t-variations" : "Variaciones l33t",
+ "Showing revisions of" : "Mostrar revisión de ",
+ "Revision of" : "Revisión de",
+ "by" : "por",
+ "No revisions found." : "Sin revisión encontrada.",
+ "Label" : "Etiqueta",
+ "Restore revision" : "Restaurar revisión",
+ "Delete revision" : "Eliminar revisión",
+ "Edit credential" : "Editar credencial",
+ "Create new credential" : "Crear nueva credencial",
+ "Save" : "Guardar",
+ "Cancel" : "Cancelar",
+ "Settings" : "Ajustes",
+ "Share credential {{credential}}" : "Compartir credenciales {{credential}}",
+ "Unshare" : "Dejar de compartir",
+ "Showing deleted since" : "Mostrar fecha de eliminación",
+ "All time" : "Todo el tiempo",
+ "Showing {{number_filtered}} of {{credential_number}} credentials" : "Mostrando {{number_filtered}} de {{credential_number}} credenciales",
+ "Search credential..." : "Mostrar credenciales...",
+ "Account" : "Cuenta",
+ "Password" : "Contraseña",
+ "OTP" : "OTP",
+ "E-mail" : "Correo electrónico",
+ "URL" : "URL",
+ "Notes" : "Notas",
+ "Expire time" : "Tiempo de expiración ",
+ "Changed" : "Cambiado",
+ "Created" : "Creado",
+ "Edit" : "Editar",
+ "Delete" : "Eliminar",
+ "Share" : "Compartir",
+ "Recover" : "Recuperar",
+ "Destroy" : "Destruir",
+ "You have incoming share requests." : "Tiene solicitudes de compartición entrantes",
+ "If you want to the credential in a other vault," : "Si quiere compartir la credencial en otra bóveda,",
+ "logout of this vault and login to the vault you want the shared credential in." : "cierre su sesión en esta bóveda e inicie sesión en la bóveda con la que quiere compartir la credencial.",
+ "Permissions" : "Permisos",
+ "Received from" : "Recibido de",
+ "Date" : "Fecha",
+ "Accept" : "Aceptar",
+ "Decline" : "Denegar",
+ "Last accessed" : "Último acceso",
+ "Never" : "Nunca",
+ "No vaults found, why not create one?" : "No se encontraron bóvedas, ¿porque no crear una?",
+ "Please give your new vault a name." : "Por favor de nombre a su nueva bóveda.",
+ "Vault password" : "Contraseña de bóveda",
+ "Repeat vault password" : "Repita contraseña de bóveda",
+ "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Su llave para compartir tendrá una fuerza de 1024bit, la cual puede cambiar después en los ajustes.",
+ "Create vault" : "Crear bóveda",
+ "Go back to vaults" : "Regresar a las bóvedas",
+ "Please input the password for" : "Por favor ingrese la contraseña para",
+ "Set this vault as default." : "Coloque esta bóveda como predeterminada.",
+ "Login automatically to this vault." : "Inicie sesión automáticamente para esta bóveda.",
+ "Decrypt vault" : "Descifre bóveda",
+ "Warning! Adding credentials over http can be insecure!" : "¡Advertencia! ¡Agregar credenciales sobre http puede ser inseguro!",
+ "Logged in to {{vault_name}}" : "Sesión iniciada en {{vault_name}}",
+ "Change vault" : "Cambiar bóveda",
+ "Deleted credentials" : "Borrar credenciales",
+ "Logout" : "Salir",
+ "Donate" : "Donar",
+ "Someone has shared a credential with you." : "Alguien a compartido una credencial con usted.",
+ "Click here to request it" : "Haga click aquí para solicitar",
+ "Loading..." : "Cargando...",
+ "Awwhh.... credential not found. Maybe it expired" : "Oh oh... la credencial no se encontró. Tal vez esta expiró",
"A Passman item has been created, modified or deleted" : "Un objeto Passman puede ser creado, modificado o borrado",
"A Passman item has expired" : "Un objeto Passman ha expirado",
"A Passman item has been shared" : "Un objeto Passman ha sido compartido",
@@ -26,10 +248,8 @@
"Remind me later" : "Recuérdamelo mas tarde",
"Ignore" : "Ignorar",
"%s shared \"%s\" with you. Click here to accept" : "%s comparte \"%s\" contigo. Hacer click aquí para aceptar",
- "Decline" : "Denegar",
"%s has declined your share request for \"%s\"." : "%s ha rechazado su petición para compartir \"%s\".",
"%s has accepted your share request for \"%s\"." : "%s ha aceptado tu petición para compartir \"%s\".",
- "Settings" : "Ajustes",
"Connection to server lost" : "Perdida la conexión al server",
"Problem loading page, reloading in 5 seconds" : "Problema al cargar la página, recargando en 5 segundos",
"Saving..." : "Guardando...",
diff --git a/l10n/fr.js b/l10n/fr.js
index a317a757..b6642449 100644
--- a/l10n/fr.js
+++ b/l10n/fr.js
@@ -2,6 +2,188 @@ OC.L10N.register(
"passman",
{
"Passwords" : "Mots de passe",
+ "Generating sharing keys ( %step / 2)" : "Génération des clés de partage ( %step / 2 )",
+ "Incorrect vault password!" : "Mot de passe du coffre-fort incorrect",
+ "Passwords do not match" : "Les mots de passe ne correspondent pas",
+ "General" : "Général",
+ "Custom Fields" : "Champs personnalisé",
+ "Please fill in a label!" : "Veuillez remplir une étiquette !",
+ "Please fill in a value!" : "Veuillez remplir une valeur !",
+ "Error loading file" : "Erreur lors du chargement du fichier",
+ "An error happend during decryption" : "Une erreur est survenue lors du décryptage",
+ "Credential created!" : "Information d'identification créée !",
+ "Credential deleted" : "Information d'identification supprimée",
+ "Credential updated" : "Information d'identification mise à jour",
+ "Credential recovered" : "Information d'identification récupérée",
+ "Error downloading file, you probably don't have enough permissions" : "Erreur lors du téléchargement du fichier, vous ne devez sans doute pas avoir toutes les autorisations",
+ "Starting export" : "Démarrage de l'export",
+ "Decrypting credentials" : "Décryptage des informations d'identification",
+ "Done" : "Fait",
+ "File read successfully!" : "Fichier lu avec succès !",
+ "Adding {{credential}}" : "{{credential}} en cours d'ajout",
+ "Added {{credential}}" : "{{credential}} ajouté",
+ "Parsed {{num}} credentials, starting to import" : "{{num}} informations d'identification analysées, commence à importer",
+ "Revision deleted" : "Révision supprimée",
+ "Revision restored" : "Révision restaurée",
+ "Save in passman" : "Sauvegarder dans Passman",
+ "Settings saved" : "Paramètres sauvegardés",
+ "General settings" : "Paramètres généraux",
+ "Password Audit" : "Vérification du mot de passe",
+ "Password settings" : "Paramètres du mot de passe",
+ "Import credentials" : "Importer les informations d'identification",
+ "Export credentials" : "Exporter les informations d'identification",
+ "Sharing" : "Partage",
+ "Are you sure you want to leave? This WILL corrupt all your credentials" : "Êtes-vous sûr de vouloir quitter ? Cela VA corrompre toutes vos informations d'identification",
+ "Your old password is incorrect!" : "Votre ancien mot de passe est incorrect !",
+ "New passwords do not match!" : "Les nouveaux mots de passe ne correspondent pas !",
+ "Please login with your new vault password" : "Veuillez vous connecter avec votre nouveau mot de passe du coffre-fort",
+ "Share with users and groups" : "Partager avec des utilisateurs et des groupes",
+ "Share link" : "Partager un lien",
+ "Are you sure you want to leave? This will corrupt this credential" : "Êtes-vous sûr de vouloir quitter ? Cela va corrompre cette information d'identification",
+ "Credential unshared" : "Arrêt du partage de l'information d'identification ",
+ "Credential shared" : "Information d'identification partagée",
+ "Saved!" : "Sauvegardé !",
+ "Toggle visibility" : "Activer la visibilité",
+ "Copy to clipboard" : "Copier dans le presse-papier",
+ "Copied to clipboard!" : "Copié dans le presse-papier !",
+ "Generate password" : "Générer le mot de passe",
+ "Copy password to clipboard" : "Copier le mot de passe dans le presse-papier",
+ "Password copied to clipboard!" : "Mot de passe copié dans le presse-papier !",
+ "Complete" : "Terminer",
+ "Username" : "Nom d'utilisateur",
+ "Repeat password" : "Répéter le mot de passe",
+ "Add Tag" : "Ajouter une étiquette",
+ "Choose a file" : "Choisir un fichier",
+ "Text" : "Texte",
+ "File" : "Fichier",
+ "Add" : "Ajouter",
+ "Value" : "Valeur",
+ "Type" : "Type",
+ "Actions" : "Actions",
+ "Empty" : "Vide",
+ "Filename" : "Nom de fichier",
+ "Upload date" : "Date du téléversement",
+ "Size" : "Taille",
+ "Current OTP settings" : "Paramètres du mot de passe OTP actuel",
+ "Issuer" : "Émetteur",
+ "Secret" : "Secret",
+ "Expire date" : "Date d'expiration",
+ "No expire date set" : "Aucune date d'expiration définie",
+ "Renew interval" : "Renouveler l'intervalle",
+ "Disabled" : "Désactivé",
+ "Day(s)" : "Jour(s)",
+ "Week(s)" : "Semaine(s)",
+ "Month(s)" : "Mois",
+ "Year(s)" : "Année(s)",
+ "Password generation settings" : "Paramètres de génération du mot de passe",
+ "Password length" : "Longueur du mot de passe",
+ "Minimum amount of digits" : "Nombre minimum de chiffres",
+ "Use uppercase letters" : "Utiliser des lettres majuscules",
+ "Use lowercase letters" : "Utiliser des lettres minuscules",
+ "Use numbers" : "Utiliser des chiffres",
+ "Use special characters" : "Utiliser des caractères spéciaux",
+ "Avoid ambiguous characters" : "Éviter les caractères ambigus",
+ "Require every character type" : "Nécessite chaque type de caractère",
+ "Export type" : "Type d'export",
+ "Export" : "Exporter",
+ "Rename vault" : "Renommer le coffre-fort",
+ "New vault name" : "Nom du nouveau coffre-fort",
+ "Change" : "Modification",
+ "Change vault key" : "Changer la clé du coffre-fort",
+ "Old vault password" : "Ancien mot de passe du coffre-fort",
+ "New vault password" : "Nouveau mot de passe du coffre-fort",
+ "New vault password repeat" : "Confirmer le nouveau mot de passe du coffre-fort",
+ "Please wait your vault is being updated, do not leave this page." : "Veuillez patienter que votre coffre-fort soit mis à jour, ne quittez pas cette page.",
+ "Processing" : "En cours d'exécution",
+ "Total progress" : "Progression total",
+ "About Passman" : "À propos de Passman",
+ "Version" : "Version",
+ "Donate to support development" : "Donner pour aider le développement",
+ "Save your passwords with 1 click!" : "Sauvegardez vos mots de passe en 1 clic !",
+ "Drag below button to your bookmark toolbar." : "Glissez le bouton ci-dessous dans la barre d'outils de vos favoris.",
+ "Import type" : "Type d'importation",
+ "Import" : "Importer",
+ "Read progress" : "Lire l'avancement",
+ "Upload progress" : "Progression du téléversement",
+ "Private Key" : "Clé privée",
+ "Public key" : "Clé publique",
+ "Key size" : "Taille de la clé",
+ "Save keys" : "Sauvegarder les clés",
+ "Generate sharing keys" : "Générer des clés de partage",
+ "Generating sharing keys" : "Génération des clés de partage",
+ "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "L'outil de mot de passe va scanner vos mots de passe, calculer le temps moyen pour le déchiffrer et, si inférieur au seuil, les afficher",
+ "Minimum password stength" : "Force minimale du mot de passe",
+ "Passman scanned your passwords, and here is the result." : "Passman a scanné vos mots de passe, et voici le résultat.",
+ "A total of {{scan_result}} weak credentials." : "Un total de {{scan_result}} informations d'identification faibles",
+ "Score" : "Résultat",
+ "Action" : "Action",
+ "Search users or groups..." : "Recherche des utilisateurs ou des groupes ...",
+ "Cyphering" : "Chiffrement",
+ "Uploading" : "Téléversement",
+ "User" : "Utilisateur",
+ "Total time spent cyphering" : "Temps total passé à chiffrer",
+ "Read" : "Lecture",
+ "Write" : "Écriture",
+ "Files" : "Fichiers",
+ "Revisions" : "Révisions",
+ "Pending" : "En attente",
+ "Enable link sharing" : "Activer le partage par lien",
+ "Share until date" : "Partage jusqu'à la date",
+ "Show files" : "Afficher les fichiers",
+ "Details" : "Détails",
+ "Hide details" : "Cacher les détails",
+ "100 / hour" : "100 / heure",
+ "10 / second" : "10 / seconde",
+ "10k / second" : "10k / seconde",
+ "10B / second" : "10B / seconde",
+ "Rank" : "Rang",
+ "by" : "par",
+ "No revisions found." : "Pas de révision trouvée.",
+ "Restore revision" : "Restaurer la révision",
+ "Delete revision" : "Supprimer la révision",
+ "Edit credential" : "Éditer le rapport d'identification",
+ "Create new credential" : "Créer de nouvelles informations d'identification",
+ "Save" : "Sauvegarder",
+ "Cancel" : "Annuler",
+ "Settings" : "Paramètres",
+ "Unshare" : "Ne plus partager",
+ "Account" : "Compte",
+ "Password" : "Mot de passe",
+ "OTP" : "OTP",
+ "E-mail" : "E-Mail",
+ "URL" : "URL",
+ "Notes" : "Notes",
+ "Expire time" : "Date d'expiration",
+ "Changed" : "Modifié",
+ "Created" : "Créé",
+ "Edit" : "Éditer",
+ "Delete" : "Supprimer",
+ "Share" : "Partager",
+ "Recover" : "Restaurer",
+ "Destroy" : "Détruire",
+ "Permissions" : "Permissions",
+ "Date" : "Date",
+ "Accept" : "Accepter",
+ "Decline" : "Refuser",
+ "Last accessed" : "Dernier accès",
+ "Never" : "Jamais",
+ "No vaults found, why not create one?" : "Pas de coffre-fort trouvé, pourquoi ne pas en créer un ?",
+ "Please give your new vault a name." : "Veuillez donner un nom à votre nouveau coffre-fort.",
+ "Vault password" : "Mot de passe du coffre-fort",
+ "Repeat vault password" : "Confirmer le mot de passe du coffre-fort",
+ "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Votre clé de partage aura un poids de 1024 octet, ce qui pourra être modifié plus tard dans les paramètres.",
+ "Create vault" : "Créer un coffre-fort",
+ "Go back to vaults" : "Retourner aux coffres-forts",
+ "Set this vault as default." : "Choisir ce coffre-fort par défaut.",
+ "Login automatically to this vault." : "Se connecter automatiquement à ce coffre-fort.",
+ "Decrypt vault" : "Déchiffrer le coffre-fort",
+ "Warning! Adding credentials over http can be insecure!" : "Attention ! Ajouter des informations d'identification en http peut être insécurisé !",
+ "Logged in to {{vault_name}}" : "Connecté à {{vault_name}}",
+ "Change vault" : "Modifier le coffre-fort",
+ "Deleted credentials" : "Supprimer les informations d'identification",
+ "Logout" : "Se déconnecter",
+ "Donate" : "Donner",
+ "Loading..." : "Chargement...",
"A Passman item has been created, modified or deleted" : "Un élément Passman a été créé, modifié ou supprimé",
"A Passman item has expired" : "Un élément Passman a expiré",
"A Passman item has been shared" : "Un élément Passman a été partagé",
@@ -28,10 +210,8 @@ OC.L10N.register(
"Remind me later" : "Rappelez-moi plus tard",
"Ignore" : "Ignorer",
"%s shared \"%s\" with you. Click here to accept" : "%s a partagé \"%s\" avec vous. Cliquez ici pour accepter",
- "Decline" : "Refuser",
"%s has declined your share request for \"%s\"." : "%s a refusé votre demande de partage pour \"%s\"",
"%s has accepted your share request for \"%s\"." : "%s a accepté votre demande de partage pour \"%s\"",
- "Settings" : "Paramètres",
"Connection to server lost" : "Connexion au serveur perdu",
"Problem loading page, reloading in 5 seconds" : "Problème de chargement de la page, actualisation dans 5 secondes",
"Saving..." : "Enregistrement…",
diff --git a/l10n/fr.json b/l10n/fr.json
index 972e1aaa..2492d33d 100644
--- a/l10n/fr.json
+++ b/l10n/fr.json
@@ -1,5 +1,187 @@
{ "translations": {
"Passwords" : "Mots de passe",
+ "Generating sharing keys ( %step / 2)" : "Génération des clés de partage ( %step / 2 )",
+ "Incorrect vault password!" : "Mot de passe du coffre-fort incorrect",
+ "Passwords do not match" : "Les mots de passe ne correspondent pas",
+ "General" : "Général",
+ "Custom Fields" : "Champs personnalisé",
+ "Please fill in a label!" : "Veuillez remplir une étiquette !",
+ "Please fill in a value!" : "Veuillez remplir une valeur !",
+ "Error loading file" : "Erreur lors du chargement du fichier",
+ "An error happend during decryption" : "Une erreur est survenue lors du décryptage",
+ "Credential created!" : "Information d'identification créée !",
+ "Credential deleted" : "Information d'identification supprimée",
+ "Credential updated" : "Information d'identification mise à jour",
+ "Credential recovered" : "Information d'identification récupérée",
+ "Error downloading file, you probably don't have enough permissions" : "Erreur lors du téléchargement du fichier, vous ne devez sans doute pas avoir toutes les autorisations",
+ "Starting export" : "Démarrage de l'export",
+ "Decrypting credentials" : "Décryptage des informations d'identification",
+ "Done" : "Fait",
+ "File read successfully!" : "Fichier lu avec succès !",
+ "Adding {{credential}}" : "{{credential}} en cours d'ajout",
+ "Added {{credential}}" : "{{credential}} ajouté",
+ "Parsed {{num}} credentials, starting to import" : "{{num}} informations d'identification analysées, commence à importer",
+ "Revision deleted" : "Révision supprimée",
+ "Revision restored" : "Révision restaurée",
+ "Save in passman" : "Sauvegarder dans Passman",
+ "Settings saved" : "Paramètres sauvegardés",
+ "General settings" : "Paramètres généraux",
+ "Password Audit" : "Vérification du mot de passe",
+ "Password settings" : "Paramètres du mot de passe",
+ "Import credentials" : "Importer les informations d'identification",
+ "Export credentials" : "Exporter les informations d'identification",
+ "Sharing" : "Partage",
+ "Are you sure you want to leave? This WILL corrupt all your credentials" : "Êtes-vous sûr de vouloir quitter ? Cela VA corrompre toutes vos informations d'identification",
+ "Your old password is incorrect!" : "Votre ancien mot de passe est incorrect !",
+ "New passwords do not match!" : "Les nouveaux mots de passe ne correspondent pas !",
+ "Please login with your new vault password" : "Veuillez vous connecter avec votre nouveau mot de passe du coffre-fort",
+ "Share with users and groups" : "Partager avec des utilisateurs et des groupes",
+ "Share link" : "Partager un lien",
+ "Are you sure you want to leave? This will corrupt this credential" : "Êtes-vous sûr de vouloir quitter ? Cela va corrompre cette information d'identification",
+ "Credential unshared" : "Arrêt du partage de l'information d'identification ",
+ "Credential shared" : "Information d'identification partagée",
+ "Saved!" : "Sauvegardé !",
+ "Toggle visibility" : "Activer la visibilité",
+ "Copy to clipboard" : "Copier dans le presse-papier",
+ "Copied to clipboard!" : "Copié dans le presse-papier !",
+ "Generate password" : "Générer le mot de passe",
+ "Copy password to clipboard" : "Copier le mot de passe dans le presse-papier",
+ "Password copied to clipboard!" : "Mot de passe copié dans le presse-papier !",
+ "Complete" : "Terminer",
+ "Username" : "Nom d'utilisateur",
+ "Repeat password" : "Répéter le mot de passe",
+ "Add Tag" : "Ajouter une étiquette",
+ "Choose a file" : "Choisir un fichier",
+ "Text" : "Texte",
+ "File" : "Fichier",
+ "Add" : "Ajouter",
+ "Value" : "Valeur",
+ "Type" : "Type",
+ "Actions" : "Actions",
+ "Empty" : "Vide",
+ "Filename" : "Nom de fichier",
+ "Upload date" : "Date du téléversement",
+ "Size" : "Taille",
+ "Current OTP settings" : "Paramètres du mot de passe OTP actuel",
+ "Issuer" : "Émetteur",
+ "Secret" : "Secret",
+ "Expire date" : "Date d'expiration",
+ "No expire date set" : "Aucune date d'expiration définie",
+ "Renew interval" : "Renouveler l'intervalle",
+ "Disabled" : "Désactivé",
+ "Day(s)" : "Jour(s)",
+ "Week(s)" : "Semaine(s)",
+ "Month(s)" : "Mois",
+ "Year(s)" : "Année(s)",
+ "Password generation settings" : "Paramètres de génération du mot de passe",
+ "Password length" : "Longueur du mot de passe",
+ "Minimum amount of digits" : "Nombre minimum de chiffres",
+ "Use uppercase letters" : "Utiliser des lettres majuscules",
+ "Use lowercase letters" : "Utiliser des lettres minuscules",
+ "Use numbers" : "Utiliser des chiffres",
+ "Use special characters" : "Utiliser des caractères spéciaux",
+ "Avoid ambiguous characters" : "Éviter les caractères ambigus",
+ "Require every character type" : "Nécessite chaque type de caractère",
+ "Export type" : "Type d'export",
+ "Export" : "Exporter",
+ "Rename vault" : "Renommer le coffre-fort",
+ "New vault name" : "Nom du nouveau coffre-fort",
+ "Change" : "Modification",
+ "Change vault key" : "Changer la clé du coffre-fort",
+ "Old vault password" : "Ancien mot de passe du coffre-fort",
+ "New vault password" : "Nouveau mot de passe du coffre-fort",
+ "New vault password repeat" : "Confirmer le nouveau mot de passe du coffre-fort",
+ "Please wait your vault is being updated, do not leave this page." : "Veuillez patienter que votre coffre-fort soit mis à jour, ne quittez pas cette page.",
+ "Processing" : "En cours d'exécution",
+ "Total progress" : "Progression total",
+ "About Passman" : "À propos de Passman",
+ "Version" : "Version",
+ "Donate to support development" : "Donner pour aider le développement",
+ "Save your passwords with 1 click!" : "Sauvegardez vos mots de passe en 1 clic !",
+ "Drag below button to your bookmark toolbar." : "Glissez le bouton ci-dessous dans la barre d'outils de vos favoris.",
+ "Import type" : "Type d'importation",
+ "Import" : "Importer",
+ "Read progress" : "Lire l'avancement",
+ "Upload progress" : "Progression du téléversement",
+ "Private Key" : "Clé privée",
+ "Public key" : "Clé publique",
+ "Key size" : "Taille de la clé",
+ "Save keys" : "Sauvegarder les clés",
+ "Generate sharing keys" : "Générer des clés de partage",
+ "Generating sharing keys" : "Génération des clés de partage",
+ "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "L'outil de mot de passe va scanner vos mots de passe, calculer le temps moyen pour le déchiffrer et, si inférieur au seuil, les afficher",
+ "Minimum password stength" : "Force minimale du mot de passe",
+ "Passman scanned your passwords, and here is the result." : "Passman a scanné vos mots de passe, et voici le résultat.",
+ "A total of {{scan_result}} weak credentials." : "Un total de {{scan_result}} informations d'identification faibles",
+ "Score" : "Résultat",
+ "Action" : "Action",
+ "Search users or groups..." : "Recherche des utilisateurs ou des groupes ...",
+ "Cyphering" : "Chiffrement",
+ "Uploading" : "Téléversement",
+ "User" : "Utilisateur",
+ "Total time spent cyphering" : "Temps total passé à chiffrer",
+ "Read" : "Lecture",
+ "Write" : "Écriture",
+ "Files" : "Fichiers",
+ "Revisions" : "Révisions",
+ "Pending" : "En attente",
+ "Enable link sharing" : "Activer le partage par lien",
+ "Share until date" : "Partage jusqu'à la date",
+ "Show files" : "Afficher les fichiers",
+ "Details" : "Détails",
+ "Hide details" : "Cacher les détails",
+ "100 / hour" : "100 / heure",
+ "10 / second" : "10 / seconde",
+ "10k / second" : "10k / seconde",
+ "10B / second" : "10B / seconde",
+ "Rank" : "Rang",
+ "by" : "par",
+ "No revisions found." : "Pas de révision trouvée.",
+ "Restore revision" : "Restaurer la révision",
+ "Delete revision" : "Supprimer la révision",
+ "Edit credential" : "Éditer le rapport d'identification",
+ "Create new credential" : "Créer de nouvelles informations d'identification",
+ "Save" : "Sauvegarder",
+ "Cancel" : "Annuler",
+ "Settings" : "Paramètres",
+ "Unshare" : "Ne plus partager",
+ "Account" : "Compte",
+ "Password" : "Mot de passe",
+ "OTP" : "OTP",
+ "E-mail" : "E-Mail",
+ "URL" : "URL",
+ "Notes" : "Notes",
+ "Expire time" : "Date d'expiration",
+ "Changed" : "Modifié",
+ "Created" : "Créé",
+ "Edit" : "Éditer",
+ "Delete" : "Supprimer",
+ "Share" : "Partager",
+ "Recover" : "Restaurer",
+ "Destroy" : "Détruire",
+ "Permissions" : "Permissions",
+ "Date" : "Date",
+ "Accept" : "Accepter",
+ "Decline" : "Refuser",
+ "Last accessed" : "Dernier accès",
+ "Never" : "Jamais",
+ "No vaults found, why not create one?" : "Pas de coffre-fort trouvé, pourquoi ne pas en créer un ?",
+ "Please give your new vault a name." : "Veuillez donner un nom à votre nouveau coffre-fort.",
+ "Vault password" : "Mot de passe du coffre-fort",
+ "Repeat vault password" : "Confirmer le mot de passe du coffre-fort",
+ "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Votre clé de partage aura un poids de 1024 octet, ce qui pourra être modifié plus tard dans les paramètres.",
+ "Create vault" : "Créer un coffre-fort",
+ "Go back to vaults" : "Retourner aux coffres-forts",
+ "Set this vault as default." : "Choisir ce coffre-fort par défaut.",
+ "Login automatically to this vault." : "Se connecter automatiquement à ce coffre-fort.",
+ "Decrypt vault" : "Déchiffrer le coffre-fort",
+ "Warning! Adding credentials over http can be insecure!" : "Attention ! Ajouter des informations d'identification en http peut être insécurisé !",
+ "Logged in to {{vault_name}}" : "Connecté à {{vault_name}}",
+ "Change vault" : "Modifier le coffre-fort",
+ "Deleted credentials" : "Supprimer les informations d'identification",
+ "Logout" : "Se déconnecter",
+ "Donate" : "Donner",
+ "Loading..." : "Chargement...",
"A Passman item has been created, modified or deleted" : "Un élément Passman a été créé, modifié ou supprimé",
"A Passman item has expired" : "Un élément Passman a expiré",
"A Passman item has been shared" : "Un élément Passman a été partagé",
@@ -26,10 +208,8 @@
"Remind me later" : "Rappelez-moi plus tard",
"Ignore" : "Ignorer",
"%s shared \"%s\" with you. Click here to accept" : "%s a partagé \"%s\" avec vous. Cliquez ici pour accepter",
- "Decline" : "Refuser",
"%s has declined your share request for \"%s\"." : "%s a refusé votre demande de partage pour \"%s\"",
"%s has accepted your share request for \"%s\"." : "%s a accepté votre demande de partage pour \"%s\"",
- "Settings" : "Paramètres",
"Connection to server lost" : "Connexion au serveur perdu",
"Problem loading page, reloading in 5 seconds" : "Problème de chargement de la page, actualisation dans 5 secondes",
"Saving..." : "Enregistrement…",
diff --git a/l10n/it.js b/l10n/it.js
index acacdb24..faa06f21 100644
--- a/l10n/it.js
+++ b/l10n/it.js
@@ -2,6 +2,203 @@ OC.L10N.register(
"passman",
{
"Passwords" : "Password",
+ "Generating sharing keys ( %step / 2)" : "Generazione chiavi condivise ( %step / 2)",
+ "Incorrect vault password!" : "Password della cassaforte non corretta!",
+ "Passwords do not match" : "Le password non corrispondono",
+ "General" : "Generale",
+ "Custom Fields" : "Campi personalizzati",
+ "Please fill in a label!" : "Aggiungi un'etichetta!",
+ "Please fill in a value!" : "Aggiungi un valore!",
+ "Error loading file" : "Errore durante il caricamento del file",
+ "An error happend during decryption" : "Si è verificato un errore durante la decifratura",
+ "Credential created!" : "Credenziali create!",
+ "Credential deleted" : "Credenziali eliminate",
+ "Credential updated" : "Credenziali aggiornate",
+ "Credential recovered" : "Credenziali ripristinate",
+ "Error downloading file, you probably don't have enough permissions" : "Errore durante lo scaricamento del file, probabilmente non disponi dei permessi necessari",
+ "Starting export" : "Avvio esportazione",
+ "Decrypting credentials" : "Decifratura delle credenziali",
+ "Done" : "Fine",
+ "File read successfully!" : "File letto correttamente!",
+ "Adding {{credential}}" : "Aggiunta di {{credential}}",
+ "Added {{credential}}" : "Aggiunte {{credential}}",
+ "Parsed {{num}} credentials, starting to import" : "Elaborate {{num}} credenziali, avvio dell'importazione",
+ "Revision deleted" : "Revisione eliminata",
+ "Revision restored" : "Revisione ripristinata",
+ "Save in passman" : "Salva in passman",
+ "Settings saved" : "Impostazioni salvate",
+ "General settings" : "Impostazioni generali",
+ "Password settings" : "Impostazioni password",
+ "Import credentials" : "Importa credenziali",
+ "Export credentials" : "Esporta credenziali",
+ "Sharing" : "Condivisione",
+ "Are you sure you want to leave? This WILL corrupt all your credentials" : "Sei sicuro di voler uscire? Ciò danneggerà TUTTE le tue credenziali",
+ "Your old password is incorrect!" : "La tua vecchia password non è corretta!",
+ "New passwords do not match!" : "La nuova password non corrisponde!",
+ "Please login with your new vault password" : "Accedi con la tua nuova password della cassaforte",
+ "Share with users and groups" : "Condividi con utenti e gruppi",
+ "Share link" : "Condividi collegamento",
+ "Are you sure you want to leave? This will corrupt this credential" : "Sei sicuro di voler uscire? Ciò danneggerà questo credenziali",
+ "Credential unshared" : "Credenziali non condivise",
+ "Credential shared" : "Credenziali condivise",
+ "Saved!" : "Salvato!",
+ "Toggle visibility" : "Commuta la visibilità",
+ "Copy to clipboard" : "Copia negli appunti",
+ "Copied to clipboard!" : "Copiato negli appunti!",
+ "Generate password" : "Genera password",
+ "Copy password to clipboard" : "Copia password negli appunti",
+ "Password copied to clipboard!" : "Password copiata negli appunti!",
+ "Complete" : "Completato",
+ "Username" : "Nome utente",
+ "Repeat password" : "Ripeti la password",
+ "Add Tag" : "Aggiungi etichetta",
+ "Field label" : "Etichetta campo",
+ "Field value" : "Valore campo",
+ "Choose a file" : "Scegli un file",
+ "Text" : "Testo",
+ "File" : "File",
+ "Add" : "Aggiungi",
+ "Value" : "Valore",
+ "Type" : "Tipo",
+ "Actions" : "Azioni",
+ "Empty" : "Vuoto",
+ "Filename" : "Nome file",
+ "Upload date" : "Data di caricamento",
+ "Size" : "Dimensione",
+ "Upload your OTP qr code" : "Carica il tuo codice QR OTP",
+ "Current OTP settings" : "Impostazioni OTP correnti",
+ "Issuer" : "Emittente",
+ "Secret" : "Segreto",
+ "Expire date" : "Data di scadenza",
+ "No expire date set" : "Nessuna data di scadenza impostata",
+ "Renew interval" : "Intervallo di aggiornamento",
+ "Disabled" : "Disabilitato",
+ "Day(s)" : "Giorno(i)",
+ "Week(s)" : "Settimana(e)",
+ "Month(s)" : "Mese(i)",
+ "Year(s)" : "Anno(i)",
+ "Password generation settings" : "Impostazioni di generazione della password",
+ "Password length" : "Lunghezza della password",
+ "Minimum amount of digits" : "Numero minimo di caratteri",
+ "Use uppercase letters" : "Utilizza lettere maiuscole",
+ "Use lowercase letters" : "Utilizza lettere minuscole",
+ "Use numbers" : "Utilizza numeri",
+ "Use special characters" : "Utilizza caratteri speciali",
+ "Avoid ambiguous characters" : "Evita caratteri ambigui",
+ "Require every character type" : "Richiedi ogni tipo di carattere",
+ "Export type" : "Esporta tipo",
+ "Export" : "Esporta",
+ "Rename vault" : "Rinomina cassaforte",
+ "New vault name" : "Nome della nuova cassaforte",
+ "Change" : "Modifica",
+ "Old vault password" : "Vecchia password della cassaforte",
+ "New vault password" : "Nuova password della cassaforte",
+ "New vault password repeat" : "Ripeti la nuova password della cassaforte",
+ "Please wait your vault is being updated, do not leave this page." : "Attendi l'aggiornamento della tua cassaforte, non abbandonare questa pagina.",
+ "Processing" : "Elaborazione",
+ "Total progress" : "Avanzamento totale",
+ "About Passman" : "Informazioni su Passman",
+ "Version" : "Versione",
+ "Donate to support development" : "Effettua una donazione per supportare lo sviluppo",
+ "Bookmarklet" : "Bookmarklet",
+ "Save your passwords with 1 click!" : "Salva le tue password con 1 clic!",
+ "Drag below button to your bookmark toolbar." : "Trascina il pulsante seguente sulla barra degli strumenti.",
+ "Import type" : "Importa tipo",
+ "Import" : "Importa",
+ "Read progress" : "Avanzamento della lettura",
+ "Upload progress" : "Avanzamento del caricamento",
+ "Private Key" : "Chiave privata",
+ "Public key" : "Chiave pubblica",
+ "Key size" : "Dimensione chiave",
+ "Save keys" : "Salva chiavi",
+ "Generate sharing keys" : "Genera chiavi di condivisione",
+ "Generating sharing keys" : "Generazione chiavi di condivisione",
+ "Minimum password stength" : "Robustezza minima della password",
+ "A total of {{scan_result}} weak credentials." : "Un totale di {{scan_result}} credenziali deboli.",
+ "Score" : "Punteggio",
+ "Action" : "Azione",
+ "Search users or groups..." : "Cerca utente o gruppo ...",
+ "Cyphering" : "Cifratura",
+ "Uploading" : "Caricamento",
+ "User" : "Utente",
+ "Crypto time" : "Tempo di cifratura",
+ "Read" : "Lettura",
+ "Write" : "Scrittura",
+ "Files" : "File",
+ "Revisions" : "Revisioni",
+ "Pending" : "In corso",
+ "Enable link sharing" : "Abilita condivisione tramite collegamento",
+ "Share until date" : "Condividi fino alla data",
+ "Show files" : "Mostra i file",
+ "Details" : "Dettagli",
+ "Hide details" : "Nascondi dettagli",
+ "Password score" : "Punteggio della password",
+ "100 / hour" : "100 / ora",
+ "10 / second" : "10 / secondo",
+ "10k / second" : "10k / secondo",
+ "10B / second" : "10B / secondo",
+ "Pattern" : "Modello",
+ "Dictionary name" : "Nomi di dizionario",
+ "Rank" : "Rango",
+ "Uppercase variations" : "Variazioni maiuscole",
+ "l33t-variations" : "Variazioni l33t",
+ "Revision of" : "Revisione di",
+ "by" : "di",
+ "No revisions found." : "Nessuna revisione trovata.",
+ "Label" : "Etichetta",
+ "Restore revision" : "Ripristina revisione",
+ "Delete revision" : "Elimina revisione",
+ "Edit credential" : "Modifica credenziali",
+ "Create new credential" : "Crea nuove credenziali",
+ "Save" : "Salva",
+ "Cancel" : "Annulla",
+ "Settings" : "Impostazioni",
+ "Share credential {{credential}}" : "Condividi credenziali {{credential}}",
+ "Unshare" : "Rimuovi condivisione",
+ "Search credential..." : "Cerca credenziali...",
+ "Account" : "Account",
+ "Password" : "Password",
+ "OTP" : "OTP",
+ "E-mail" : "Email",
+ "URL" : "URL",
+ "Notes" : "Note",
+ "Expire time" : "Data di scadenza",
+ "Changed" : "Modificate",
+ "Created" : "Create",
+ "Edit" : "Modifica",
+ "Delete" : "Elimina",
+ "Share" : "Condividi",
+ "Recover" : "Ripristina",
+ "Destroy" : "Distruggi",
+ "You have incoming share requests." : "Hai ricevuto delle richieste di condivisione.",
+ "Permissions" : "Permessi",
+ "Received from" : "Ricevute da",
+ "Date" : "Data",
+ "Accept" : "Accetta",
+ "Decline" : "Rifiuta",
+ "Last accessed" : "Ultimo accesso",
+ "Never" : "Mai",
+ "No vaults found, why not create one?" : "Nessuna cassaforte trovata, vuoi crearne una?",
+ "Please give your new vault a name." : "Dai un nome alla tua nuova cassaforte.",
+ "Vault password" : "Password della cassaforte",
+ "Repeat vault password" : "Ripeti la password della cassaforte",
+ "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "La tua chiave di condivisione avrà una lunghezza di 1024 bit, che potrai modificare successivamente nelle impostazioni.",
+ "Create vault" : "Crea cassaforte",
+ "Go back to vaults" : "Torna alle casseforti",
+ "Please input the password for" : "Digita la password per",
+ "Set this vault as default." : "Imposta questa cassaforte come predefinita.",
+ "Login automatically to this vault." : "Accedi automaticamente a questa cassaforte.",
+ "Decrypt vault" : "Decifra cassaforte",
+ "Warning! Adding credentials over http can be insecure!" : "Avviso! L'aggiunta di credenziali su http può essere insicura!",
+ "Logged in to {{vault_name}}" : "Accesso effettuato a {{vault_name}}",
+ "Change vault" : "Cambia cassaforte",
+ "Deleted credentials" : "Credenziali eliminate",
+ "Logout" : "Esci",
+ "Donate" : "Donazione",
+ "Someone has shared a credential with you." : "Qualcuno ha condiviso delle credenziali con te.",
+ "Click here to request it" : "Fai clic qui per richiederle",
+ "Loading..." : "Caricamento in corso...",
+ "Awwhh.... credential not found. Maybe it expired" : "Ops... credenziali non trovate. Potrebbero essere scadute",
"A Passman item has been created, modified or deleted" : "Un elemento Passman è stato creato, modificato o eliminato",
"A Passman item has expired" : "Un elemento Passman è scaduto",
"A Passman item has been shared" : "Un elemento Passman è stato condiviso",
@@ -28,10 +225,8 @@ OC.L10N.register(
"Remind me later" : "Ricordamelo più tardi",
"Ignore" : "Ignora",
"%s shared \"%s\" with you. Click here to accept" : "%s ha condiviso \"%s\" con te. Fai clic qui per accettare",
- "Decline" : "Rifiuta",
"%s has declined your share request for \"%s\"." : "%s ha rifiutato la tua richiesta di condivisione per \"%s\".",
"%s has accepted your share request for \"%s\"." : "%s ha accettato la tua richiesta di condivisione per \"%s\".",
- "Settings" : "Impostazioni",
"Connection to server lost" : "Connessione al server interrotta",
"Problem loading page, reloading in 5 seconds" : "Problema durante il caricamento della pagina, aggiornamento tra 5 secondi",
"Saving..." : "Salvataggio in corso...",
diff --git a/l10n/it.json b/l10n/it.json
index 5566457d..12a1ee14 100644
--- a/l10n/it.json
+++ b/l10n/it.json
@@ -1,5 +1,202 @@
{ "translations": {
"Passwords" : "Password",
+ "Generating sharing keys ( %step / 2)" : "Generazione chiavi condivise ( %step / 2)",
+ "Incorrect vault password!" : "Password della cassaforte non corretta!",
+ "Passwords do not match" : "Le password non corrispondono",
+ "General" : "Generale",
+ "Custom Fields" : "Campi personalizzati",
+ "Please fill in a label!" : "Aggiungi un'etichetta!",
+ "Please fill in a value!" : "Aggiungi un valore!",
+ "Error loading file" : "Errore durante il caricamento del file",
+ "An error happend during decryption" : "Si è verificato un errore durante la decifratura",
+ "Credential created!" : "Credenziali create!",
+ "Credential deleted" : "Credenziali eliminate",
+ "Credential updated" : "Credenziali aggiornate",
+ "Credential recovered" : "Credenziali ripristinate",
+ "Error downloading file, you probably don't have enough permissions" : "Errore durante lo scaricamento del file, probabilmente non disponi dei permessi necessari",
+ "Starting export" : "Avvio esportazione",
+ "Decrypting credentials" : "Decifratura delle credenziali",
+ "Done" : "Fine",
+ "File read successfully!" : "File letto correttamente!",
+ "Adding {{credential}}" : "Aggiunta di {{credential}}",
+ "Added {{credential}}" : "Aggiunte {{credential}}",
+ "Parsed {{num}} credentials, starting to import" : "Elaborate {{num}} credenziali, avvio dell'importazione",
+ "Revision deleted" : "Revisione eliminata",
+ "Revision restored" : "Revisione ripristinata",
+ "Save in passman" : "Salva in passman",
+ "Settings saved" : "Impostazioni salvate",
+ "General settings" : "Impostazioni generali",
+ "Password settings" : "Impostazioni password",
+ "Import credentials" : "Importa credenziali",
+ "Export credentials" : "Esporta credenziali",
+ "Sharing" : "Condivisione",
+ "Are you sure you want to leave? This WILL corrupt all your credentials" : "Sei sicuro di voler uscire? Ciò danneggerà TUTTE le tue credenziali",
+ "Your old password is incorrect!" : "La tua vecchia password non è corretta!",
+ "New passwords do not match!" : "La nuova password non corrisponde!",
+ "Please login with your new vault password" : "Accedi con la tua nuova password della cassaforte",
+ "Share with users and groups" : "Condividi con utenti e gruppi",
+ "Share link" : "Condividi collegamento",
+ "Are you sure you want to leave? This will corrupt this credential" : "Sei sicuro di voler uscire? Ciò danneggerà questo credenziali",
+ "Credential unshared" : "Credenziali non condivise",
+ "Credential shared" : "Credenziali condivise",
+ "Saved!" : "Salvato!",
+ "Toggle visibility" : "Commuta la visibilità",
+ "Copy to clipboard" : "Copia negli appunti",
+ "Copied to clipboard!" : "Copiato negli appunti!",
+ "Generate password" : "Genera password",
+ "Copy password to clipboard" : "Copia password negli appunti",
+ "Password copied to clipboard!" : "Password copiata negli appunti!",
+ "Complete" : "Completato",
+ "Username" : "Nome utente",
+ "Repeat password" : "Ripeti la password",
+ "Add Tag" : "Aggiungi etichetta",
+ "Field label" : "Etichetta campo",
+ "Field value" : "Valore campo",
+ "Choose a file" : "Scegli un file",
+ "Text" : "Testo",
+ "File" : "File",
+ "Add" : "Aggiungi",
+ "Value" : "Valore",
+ "Type" : "Tipo",
+ "Actions" : "Azioni",
+ "Empty" : "Vuoto",
+ "Filename" : "Nome file",
+ "Upload date" : "Data di caricamento",
+ "Size" : "Dimensione",
+ "Upload your OTP qr code" : "Carica il tuo codice QR OTP",
+ "Current OTP settings" : "Impostazioni OTP correnti",
+ "Issuer" : "Emittente",
+ "Secret" : "Segreto",
+ "Expire date" : "Data di scadenza",
+ "No expire date set" : "Nessuna data di scadenza impostata",
+ "Renew interval" : "Intervallo di aggiornamento",
+ "Disabled" : "Disabilitato",
+ "Day(s)" : "Giorno(i)",
+ "Week(s)" : "Settimana(e)",
+ "Month(s)" : "Mese(i)",
+ "Year(s)" : "Anno(i)",
+ "Password generation settings" : "Impostazioni di generazione della password",
+ "Password length" : "Lunghezza della password",
+ "Minimum amount of digits" : "Numero minimo di caratteri",
+ "Use uppercase letters" : "Utilizza lettere maiuscole",
+ "Use lowercase letters" : "Utilizza lettere minuscole",
+ "Use numbers" : "Utilizza numeri",
+ "Use special characters" : "Utilizza caratteri speciali",
+ "Avoid ambiguous characters" : "Evita caratteri ambigui",
+ "Require every character type" : "Richiedi ogni tipo di carattere",
+ "Export type" : "Esporta tipo",
+ "Export" : "Esporta",
+ "Rename vault" : "Rinomina cassaforte",
+ "New vault name" : "Nome della nuova cassaforte",
+ "Change" : "Modifica",
+ "Old vault password" : "Vecchia password della cassaforte",
+ "New vault password" : "Nuova password della cassaforte",
+ "New vault password repeat" : "Ripeti la nuova password della cassaforte",
+ "Please wait your vault is being updated, do not leave this page." : "Attendi l'aggiornamento della tua cassaforte, non abbandonare questa pagina.",
+ "Processing" : "Elaborazione",
+ "Total progress" : "Avanzamento totale",
+ "About Passman" : "Informazioni su Passman",
+ "Version" : "Versione",
+ "Donate to support development" : "Effettua una donazione per supportare lo sviluppo",
+ "Bookmarklet" : "Bookmarklet",
+ "Save your passwords with 1 click!" : "Salva le tue password con 1 clic!",
+ "Drag below button to your bookmark toolbar." : "Trascina il pulsante seguente sulla barra degli strumenti.",
+ "Import type" : "Importa tipo",
+ "Import" : "Importa",
+ "Read progress" : "Avanzamento della lettura",
+ "Upload progress" : "Avanzamento del caricamento",
+ "Private Key" : "Chiave privata",
+ "Public key" : "Chiave pubblica",
+ "Key size" : "Dimensione chiave",
+ "Save keys" : "Salva chiavi",
+ "Generate sharing keys" : "Genera chiavi di condivisione",
+ "Generating sharing keys" : "Generazione chiavi di condivisione",
+ "Minimum password stength" : "Robustezza minima della password",
+ "A total of {{scan_result}} weak credentials." : "Un totale di {{scan_result}} credenziali deboli.",
+ "Score" : "Punteggio",
+ "Action" : "Azione",
+ "Search users or groups..." : "Cerca utente o gruppo ...",
+ "Cyphering" : "Cifratura",
+ "Uploading" : "Caricamento",
+ "User" : "Utente",
+ "Crypto time" : "Tempo di cifratura",
+ "Read" : "Lettura",
+ "Write" : "Scrittura",
+ "Files" : "File",
+ "Revisions" : "Revisioni",
+ "Pending" : "In corso",
+ "Enable link sharing" : "Abilita condivisione tramite collegamento",
+ "Share until date" : "Condividi fino alla data",
+ "Show files" : "Mostra i file",
+ "Details" : "Dettagli",
+ "Hide details" : "Nascondi dettagli",
+ "Password score" : "Punteggio della password",
+ "100 / hour" : "100 / ora",
+ "10 / second" : "10 / secondo",
+ "10k / second" : "10k / secondo",
+ "10B / second" : "10B / secondo",
+ "Pattern" : "Modello",
+ "Dictionary name" : "Nomi di dizionario",
+ "Rank" : "Rango",
+ "Uppercase variations" : "Variazioni maiuscole",
+ "l33t-variations" : "Variazioni l33t",
+ "Revision of" : "Revisione di",
+ "by" : "di",
+ "No revisions found." : "Nessuna revisione trovata.",
+ "Label" : "Etichetta",
+ "Restore revision" : "Ripristina revisione",
+ "Delete revision" : "Elimina revisione",
+ "Edit credential" : "Modifica credenziali",
+ "Create new credential" : "Crea nuove credenziali",
+ "Save" : "Salva",
+ "Cancel" : "Annulla",
+ "Settings" : "Impostazioni",
+ "Share credential {{credential}}" : "Condividi credenziali {{credential}}",
+ "Unshare" : "Rimuovi condivisione",
+ "Search credential..." : "Cerca credenziali...",
+ "Account" : "Account",
+ "Password" : "Password",
+ "OTP" : "OTP",
+ "E-mail" : "Email",
+ "URL" : "URL",
+ "Notes" : "Note",
+ "Expire time" : "Data di scadenza",
+ "Changed" : "Modificate",
+ "Created" : "Create",
+ "Edit" : "Modifica",
+ "Delete" : "Elimina",
+ "Share" : "Condividi",
+ "Recover" : "Ripristina",
+ "Destroy" : "Distruggi",
+ "You have incoming share requests." : "Hai ricevuto delle richieste di condivisione.",
+ "Permissions" : "Permessi",
+ "Received from" : "Ricevute da",
+ "Date" : "Data",
+ "Accept" : "Accetta",
+ "Decline" : "Rifiuta",
+ "Last accessed" : "Ultimo accesso",
+ "Never" : "Mai",
+ "No vaults found, why not create one?" : "Nessuna cassaforte trovata, vuoi crearne una?",
+ "Please give your new vault a name." : "Dai un nome alla tua nuova cassaforte.",
+ "Vault password" : "Password della cassaforte",
+ "Repeat vault password" : "Ripeti la password della cassaforte",
+ "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "La tua chiave di condivisione avrà una lunghezza di 1024 bit, che potrai modificare successivamente nelle impostazioni.",
+ "Create vault" : "Crea cassaforte",
+ "Go back to vaults" : "Torna alle casseforti",
+ "Please input the password for" : "Digita la password per",
+ "Set this vault as default." : "Imposta questa cassaforte come predefinita.",
+ "Login automatically to this vault." : "Accedi automaticamente a questa cassaforte.",
+ "Decrypt vault" : "Decifra cassaforte",
+ "Warning! Adding credentials over http can be insecure!" : "Avviso! L'aggiunta di credenziali su http può essere insicura!",
+ "Logged in to {{vault_name}}" : "Accesso effettuato a {{vault_name}}",
+ "Change vault" : "Cambia cassaforte",
+ "Deleted credentials" : "Credenziali eliminate",
+ "Logout" : "Esci",
+ "Donate" : "Donazione",
+ "Someone has shared a credential with you." : "Qualcuno ha condiviso delle credenziali con te.",
+ "Click here to request it" : "Fai clic qui per richiederle",
+ "Loading..." : "Caricamento in corso...",
+ "Awwhh.... credential not found. Maybe it expired" : "Ops... credenziali non trovate. Potrebbero essere scadute",
"A Passman item has been created, modified or deleted" : "Un elemento Passman è stato creato, modificato o eliminato",
"A Passman item has expired" : "Un elemento Passman è scaduto",
"A Passman item has been shared" : "Un elemento Passman è stato condiviso",
@@ -26,10 +223,8 @@
"Remind me later" : "Ricordamelo più tardi",
"Ignore" : "Ignora",
"%s shared \"%s\" with you. Click here to accept" : "%s ha condiviso \"%s\" con te. Fai clic qui per accettare",
- "Decline" : "Rifiuta",
"%s has declined your share request for \"%s\"." : "%s ha rifiutato la tua richiesta di condivisione per \"%s\".",
"%s has accepted your share request for \"%s\"." : "%s ha accettato la tua richiesta di condivisione per \"%s\".",
- "Settings" : "Impostazioni",
"Connection to server lost" : "Connessione al server interrotta",
"Problem loading page, reloading in 5 seconds" : "Problema durante il caricamento della pagina, aggiornamento tra 5 secondi",
"Saving..." : "Salvataggio in corso...",
diff --git a/l10n/nl.js b/l10n/nl.js
index d4b37358..267c1b7f 100644
--- a/l10n/nl.js
+++ b/l10n/nl.js
@@ -2,6 +2,228 @@ OC.L10N.register(
"passman",
{
"Passwords" : "Wachtwoorden",
+ "Generating sharing keys ( %step / 2)" : "Genereren share sleutels ( %step / 2)",
+ "Incorrect vault password!" : "Onjuist kluiswachtwoord",
+ "Passwords do not match" : "Wachtwoorden komen niet overeen.",
+ "General" : "Algemeen",
+ "Custom Fields" : "Maatwerk velden",
+ "Please fill in a label!" : "Voeg een label toe!",
+ "Please fill in a value!" : "Geef een waarde op!",
+ "Error loading file" : "Fout bij laden bestand",
+ "An error happend during decryption" : "Er trad een fout op bij ontsleutelen",
+ "Credential created!" : "Inloggegevens aangemaakt!",
+ "Credential deleted" : "Inloggegevens verwijderd",
+ "Credential updated" : "Inloggegevens bijgewerkt",
+ "Credential recovered" : "Inloggegevens hersteld",
+ "Error downloading file, you probably don't have enough permissions" : "Fout bij downloaden bestand, je hebt waarschijnlijk niet genoeg rechten",
+ "Starting export" : "Starten export",
+ "Decrypting credentials" : "Ontsleutelen inloggegevens",
+ "Done" : "Gereed",
+ "File read successfully!" : "Bestand succesvol gelezen!",
+ "Credential has no label, skipping" : "Inloggegeven zonder label, sla over",
+ "Adding {{credential}}" : "Toevoegen {{credential}}",
+ "Added {{credential}}" : "Toegevoegd {{credential}}",
+ "Parsed {{num}} credentials, starting to import" : "Geïnterpreteerd {{num}} inloggegevens, beginnen met import",
+ "Revision deleted" : "Revisie verwijderd",
+ "Revision restored" : "Revisie hersteld",
+ "Save in passman" : "Bewaren in Passman",
+ "Settings saved" : "Instellingen bewaard",
+ "General settings" : "Algemene instellingen",
+ "Password Audit" : "Wachtwoord audit",
+ "Password settings" : "Wachtwoordinstellingen",
+ "Import credentials" : "Importeren inloggegevens",
+ "Export credentials" : "Exporteren inloggegevens",
+ "Sharing" : "Delen",
+ "Are you sure you want to leave? This WILL corrupt all your credentials" : "Weet je zeker dat je wilt stoppen? Dit ZAL alle inloggegevens kapot maken",
+ "Your old password is incorrect!" : "Je oude wachtwoord is onjuist!",
+ "New passwords do not match!" : "Nieuwe wachtwoorden komen niet overeen!",
+ "Please login with your new vault password" : "Login met je nieuwe kluiswachtwoord",
+ "Share with users and groups" : "Delen met gebruikers en groepen",
+ "Share link" : "Delen link",
+ "Are you sure you want to leave? This will corrupt this credential" : "Weet je zeker dat je wilt stoppen? Dit zal het inloggegeven kapot maken",
+ "Credential unshared" : "Delen inloggegevens gestopt",
+ "Credential shared" : "Inloggegevens gedeeld",
+ "Saved!" : "Opgeslagen!",
+ "Toggle visibility" : "Omschakelen zichtbaarheid",
+ "Copy to clipboard" : "Kopiëren naar het klembord",
+ "Copied to clipboard!" : "Gekopieerd naar het klembord!",
+ "Generate password" : "Genereren wachtwoord",
+ "Copy password to clipboard" : "Kopiëren wachtwoord naar het klembord",
+ "Password copied to clipboard!" : "Wachtwoord gekopieerd naar het klembord!",
+ "Complete" : "Afgerond",
+ "Username" : "Gebruikersnaam",
+ "Repeat password" : "Herhaal wachtwoord",
+ "Add Tag" : "Toevoegen tag",
+ "Field label" : "Veldlabel",
+ "Field value" : "Veldwaarde",
+ "Choose a file" : "Kies een bestand",
+ "Text" : "Tekst",
+ "File" : "Bestand",
+ "Add" : "Toevoegen",
+ "Value" : "Waarde",
+ "Type" : "Type",
+ "Actions" : "Acties",
+ "Empty" : "Leeg",
+ "Filename" : "Bestandsnaam",
+ "Upload date" : "Uploaddatum",
+ "Size" : "Grootte",
+ "Upload your OTP qr code" : "Upload je OTP qr code",
+ "Current OTP settings" : "Huidige OTP instellingen",
+ "Issuer" : "Uitgever",
+ "Secret" : "Geheim",
+ "Expire date" : "Vervaldatum",
+ "No expire date set" : "Geen vervaldatum ingesteld",
+ "Renew interval" : "Vernieuw interval",
+ "Disabled" : "Uitgeschakeld",
+ "Day(s)" : "Dag(en)",
+ "Week(s)" : "Week/weken",
+ "Month(s)" : "Maand(en)",
+ "Year(s)" : "Jaar/jaren",
+ "Password generation settings" : "Wachtwoordgeneratie instellingen",
+ "Password length" : "Wachtwoordlengte",
+ "Minimum amount of digits" : "Minimum aantal cijfers",
+ "Use uppercase letters" : "Gebruiken hoofdletters",
+ "Use lowercase letters" : "Gebruiken kleine letters",
+ "Use numbers" : "Gebruiken cijfers",
+ "Use special characters" : "Gebruiken speciale tekens",
+ "Avoid ambiguous characters" : "Voorkomen dubbelzinnige tekens",
+ "Require every character type" : "Elk type teken vereist",
+ "Export type" : "Export type",
+ "Export" : "Exporteren",
+ "Rename vault" : "Hernoemen kluis",
+ "New vault name" : "Nieuwe naam kluis",
+ "Change" : "Wijzigingen",
+ "Change vault key" : "Wijzigen kluissleutel",
+ "Old vault password" : "Oude kluiswachtwoord",
+ "New vault password" : "Nieuw kluiswachtwoord",
+ "New vault password repeat" : "Nieuw kluiswachtwoord opnieuw",
+ "Please wait your vault is being updated, do not leave this page." : "Wacht totdat je kluis is bijgewerkt, verlaat deze pagina niet.",
+ "Processing" : "Verwerken",
+ "Total progress" : "Totale voortgang",
+ "About Passman" : "Over Passman",
+ "Version" : "Versie",
+ "Donate to support development" : "Doneer om de ontwikkeling te ondersteunen",
+ "Bookmarklet" : "Bookmarklet",
+ "Save your passwords with 1 click!" : "Bewaar je wachtwoorden met 1 klik!",
+ "Drag below button to your bookmark toolbar." : "Sleep onderstaande knop naar je bladwijzer balk.",
+ "Import type" : "Import type",
+ "Import" : "Importeren",
+ "Read progress" : "Lezen voortgang",
+ "Upload progress" : "Upload voortgang",
+ "Private Key" : "Privésleutel",
+ "Public key" : "Openbare sleutel",
+ "Key size" : "Sleutellengte",
+ "Save keys" : "Opslaan sleutels",
+ "Generate sharing keys" : "Genereren sleutels om te delen",
+ "Generating sharing keys" : "Genereren sleutels om te delen",
+ "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Het wachtwoord hulpje scant je wachtwoord, berekent de gemiddelde kraaktijd en, als onvoldoende, toont het",
+ "Minimum password stength" : "Minimale wachtwoordsterkte",
+ "Passman scanned your passwords, and here is the result." : "Passman scande je wachtwoorden en hier is het resultaat.",
+ "A total of {{scan_result}} weak credentials." : "Totaal {{scan_result}} zwakke wachtwoorden.",
+ "Score" : "Score",
+ "Action" : "Actie",
+ "Search users or groups..." : "Zoeken gebruikers of groepen ...",
+ "Cyphering" : "Versleutelen",
+ "Uploading" : "Uploaden",
+ "User" : "Gebruiker",
+ "Crypto time" : "Cryptotijd",
+ "Total time spent cyphering" : "Totale tijd besteed aan versleutelen",
+ "Read" : "Lezen",
+ "Write" : "Schrijven",
+ "Files" : "Bestanden",
+ "Revisions" : "Revisies",
+ "Pending" : "Onderhanden",
+ "Enable link sharing" : "Inschakelen delen link",
+ "Share until date" : "Delen tot datum",
+ "Expire after views" : "Vervallen na bezichtiging",
+ "Click share first" : "Klik eerst delen",
+ "Show files" : "Tonen bestanden",
+ "Details" : "Details",
+ "Hide details" : "Verbergen details",
+ "Password score" : "Wachtwoord score",
+ "Cracking times" : "Kraaktijden",
+ "100 / hour" : "100 / uur",
+ "Throttled online attack" : "Begrensde on-line aanval",
+ "10 / second" : "10 / seconde",
+ "Unthrottled online attack" : "Onbegrensde on-line aanval",
+ "10k / second" : "10k / seconde",
+ "Offline attack, slow hash, many cores" : "Off-line aanval, trage hash, vele kernen",
+ "10B / second" : "10B / seconde",
+ "Offline attack, fast hash, many cores" : "Off-line aanval, snelle hash, vele kernen",
+ "Match sequence" : "Passende volgorde",
+ "See match sequence" : "Zie Passende volgorde",
+ "Pattern" : "Patroon",
+ "Matched word" : "Passend woord",
+ "Dictionary name" : "Woordenboek naam",
+ "Rank" : "Positie",
+ "Reversed" : "Omgekeerd",
+ "Guesses" : "Vermoedens",
+ "Base guesses" : "Basis vermoedens",
+ "Uppercase variations" : "Hoofdletter variaties",
+ "l33t-variations" : "l33t-variaties",
+ "Showing revisions of" : "Tonen revisies van",
+ "Revision of" : "Revisie van",
+ "by" : "door",
+ "No revisions found." : "Geen revisies gevonden.",
+ "Label" : "Label",
+ "Restore revision" : "Herstellen revisies",
+ "Delete revision" : "Verwijderen revisie",
+ "Edit credential" : "Bewerken inloggegeven",
+ "Create new credential" : "Creëren nieuw inloggegeven",
+ "Save" : "Opslaan",
+ "Cancel" : "Annuleren",
+ "Settings" : "Instellingen",
+ "Share credential {{credential}}" : "Delen inloggegeven {{credential}}",
+ "Unshare" : "Stop met delen",
+ "Showing deleted since" : "Tonen verwijderd sinds",
+ "All time" : "Altijd",
+ "Showing {{number_filtered}} of {{credential_number}} credentials" : "Tonen {{number_filtered}} van {{credential_number}} inloggegevens",
+ "Search credential..." : "Zoeken inloggegevens...",
+ "Account" : "Account",
+ "Password" : "Wachtwoord",
+ "OTP" : "OTP",
+ "E-mail" : "E-mail",
+ "URL" : "URL",
+ "Notes" : "Notities",
+ "Expire time" : "Vervaldatum",
+ "Changed" : "Gewijzigd",
+ "Created" : "Aangemaakt",
+ "Edit" : "Bewerken",
+ "Delete" : "Verwijderen",
+ "Share" : "Delen",
+ "Recover" : "herstellen",
+ "Destroy" : "Vernietigen",
+ "You have incoming share requests." : "Je hebt binnengekomen deelverzoeken.",
+ "If you want to the credential in a other vault," : "Als je de inloggegevens in een andere kluis wilt,",
+ "logout of this vault and login to the vault you want the shared credential in." : "log dan uit van deze kluis en login in de kluis waar je de gedeelde inloggegevens wilt bewaren.",
+ "Permissions" : "Permissies",
+ "Received from" : "Ontvangen van",
+ "Date" : "Datum",
+ "Accept" : "Accepteren",
+ "Decline" : "Afwijzen",
+ "Last accessed" : "Laatst benaderd",
+ "Never" : "Nooit",
+ "No vaults found, why not create one?" : "Geen kluis gevonden, eentje aanmaken?",
+ "Please give your new vault a name." : "Voer de naam van je nieuwe kluis in.",
+ "Vault password" : "Kluiswachtwoord",
+ "Repeat vault password" : "Herhaal kluiswachtwoord",
+ "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "De deelsleutels hebben een sterkte van 1024 bit; dit kun je later in instellingen wijzigen.",
+ "Create vault" : "Creëren kluis",
+ "Go back to vaults" : "Terug naar kluizen",
+ "Please input the password for" : "Voer het wachtwoord in voor",
+ "Set this vault as default." : "Stel deze kluis als standaard in.",
+ "Login automatically to this vault." : "Log automatisch in in deze kluis.",
+ "Decrypt vault" : "Ontsleutel kluis",
+ "Warning! Adding credentials over http can be insecure!" : "Waarschuwing! Toevoegen van inloggegevens over http is riskant!",
+ "Logged in to {{vault_name}}" : "Ingelogd in {{vault_name}}",
+ "Change vault" : "Wijzigen kluis",
+ "Deleted credentials" : "Verwijderde inloggegevens",
+ "Logout" : "Uitloggen",
+ "Donate" : "Doneren",
+ "Someone has shared a credential with you." : "Iemand heeft een inloggegeven met je gedeeld.",
+ "Click here to request it" : "Klik hier om het aan te vragen",
+ "Loading..." : "Laden...",
+ "Awwhh.... credential not found. Maybe it expired" : "Uhmmm.... inloggegeven niet gevonden. Misschien verlopen",
"A Passman item has been created, modified or deleted" : "Er is een Passman object gemaakt, gewijzigd of verwijderd",
"A Passman item has expired" : "Er is een Passman object vervallen",
"A Passman item has been shared" : "Er is een Passman object gedeeld",
@@ -28,10 +250,8 @@ OC.L10N.register(
"Remind me later" : "Herinner me later",
"Ignore" : "Negeren",
"%s shared \"%s\" with you. Click here to accept" : "%s deelde \"%s\" met je. Klik hier om te accepteren",
- "Decline" : "Afwijzen",
"%s has declined your share request for \"%s\"." : "%s weigerde je aanvraag om \"%s\" te delen.",
"%s has accepted your share request for \"%s\"." : "%s accepteerde je aanvraag om \"%s\" te delen.",
- "Settings" : "Instellingen",
"Connection to server lost" : "Verbinding met server verloren",
"Problem loading page, reloading in 5 seconds" : "Probleem met het laden van de pagina, wordt ververst in 5 seconden",
"Saving..." : "Opslaan...",
diff --git a/l10n/nl.json b/l10n/nl.json
index 158eb958..cd07a07a 100644
--- a/l10n/nl.json
+++ b/l10n/nl.json
@@ -1,5 +1,227 @@
{ "translations": {
"Passwords" : "Wachtwoorden",
+ "Generating sharing keys ( %step / 2)" : "Genereren share sleutels ( %step / 2)",
+ "Incorrect vault password!" : "Onjuist kluiswachtwoord",
+ "Passwords do not match" : "Wachtwoorden komen niet overeen.",
+ "General" : "Algemeen",
+ "Custom Fields" : "Maatwerk velden",
+ "Please fill in a label!" : "Voeg een label toe!",
+ "Please fill in a value!" : "Geef een waarde op!",
+ "Error loading file" : "Fout bij laden bestand",
+ "An error happend during decryption" : "Er trad een fout op bij ontsleutelen",
+ "Credential created!" : "Inloggegevens aangemaakt!",
+ "Credential deleted" : "Inloggegevens verwijderd",
+ "Credential updated" : "Inloggegevens bijgewerkt",
+ "Credential recovered" : "Inloggegevens hersteld",
+ "Error downloading file, you probably don't have enough permissions" : "Fout bij downloaden bestand, je hebt waarschijnlijk niet genoeg rechten",
+ "Starting export" : "Starten export",
+ "Decrypting credentials" : "Ontsleutelen inloggegevens",
+ "Done" : "Gereed",
+ "File read successfully!" : "Bestand succesvol gelezen!",
+ "Credential has no label, skipping" : "Inloggegeven zonder label, sla over",
+ "Adding {{credential}}" : "Toevoegen {{credential}}",
+ "Added {{credential}}" : "Toegevoegd {{credential}}",
+ "Parsed {{num}} credentials, starting to import" : "Geïnterpreteerd {{num}} inloggegevens, beginnen met import",
+ "Revision deleted" : "Revisie verwijderd",
+ "Revision restored" : "Revisie hersteld",
+ "Save in passman" : "Bewaren in Passman",
+ "Settings saved" : "Instellingen bewaard",
+ "General settings" : "Algemene instellingen",
+ "Password Audit" : "Wachtwoord audit",
+ "Password settings" : "Wachtwoordinstellingen",
+ "Import credentials" : "Importeren inloggegevens",
+ "Export credentials" : "Exporteren inloggegevens",
+ "Sharing" : "Delen",
+ "Are you sure you want to leave? This WILL corrupt all your credentials" : "Weet je zeker dat je wilt stoppen? Dit ZAL alle inloggegevens kapot maken",
+ "Your old password is incorrect!" : "Je oude wachtwoord is onjuist!",
+ "New passwords do not match!" : "Nieuwe wachtwoorden komen niet overeen!",
+ "Please login with your new vault password" : "Login met je nieuwe kluiswachtwoord",
+ "Share with users and groups" : "Delen met gebruikers en groepen",
+ "Share link" : "Delen link",
+ "Are you sure you want to leave? This will corrupt this credential" : "Weet je zeker dat je wilt stoppen? Dit zal het inloggegeven kapot maken",
+ "Credential unshared" : "Delen inloggegevens gestopt",
+ "Credential shared" : "Inloggegevens gedeeld",
+ "Saved!" : "Opgeslagen!",
+ "Toggle visibility" : "Omschakelen zichtbaarheid",
+ "Copy to clipboard" : "Kopiëren naar het klembord",
+ "Copied to clipboard!" : "Gekopieerd naar het klembord!",
+ "Generate password" : "Genereren wachtwoord",
+ "Copy password to clipboard" : "Kopiëren wachtwoord naar het klembord",
+ "Password copied to clipboard!" : "Wachtwoord gekopieerd naar het klembord!",
+ "Complete" : "Afgerond",
+ "Username" : "Gebruikersnaam",
+ "Repeat password" : "Herhaal wachtwoord",
+ "Add Tag" : "Toevoegen tag",
+ "Field label" : "Veldlabel",
+ "Field value" : "Veldwaarde",
+ "Choose a file" : "Kies een bestand",
+ "Text" : "Tekst",
+ "File" : "Bestand",
+ "Add" : "Toevoegen",
+ "Value" : "Waarde",
+ "Type" : "Type",
+ "Actions" : "Acties",
+ "Empty" : "Leeg",
+ "Filename" : "Bestandsnaam",
+ "Upload date" : "Uploaddatum",
+ "Size" : "Grootte",
+ "Upload your OTP qr code" : "Upload je OTP qr code",
+ "Current OTP settings" : "Huidige OTP instellingen",
+ "Issuer" : "Uitgever",
+ "Secret" : "Geheim",
+ "Expire date" : "Vervaldatum",
+ "No expire date set" : "Geen vervaldatum ingesteld",
+ "Renew interval" : "Vernieuw interval",
+ "Disabled" : "Uitgeschakeld",
+ "Day(s)" : "Dag(en)",
+ "Week(s)" : "Week/weken",
+ "Month(s)" : "Maand(en)",
+ "Year(s)" : "Jaar/jaren",
+ "Password generation settings" : "Wachtwoordgeneratie instellingen",
+ "Password length" : "Wachtwoordlengte",
+ "Minimum amount of digits" : "Minimum aantal cijfers",
+ "Use uppercase letters" : "Gebruiken hoofdletters",
+ "Use lowercase letters" : "Gebruiken kleine letters",
+ "Use numbers" : "Gebruiken cijfers",
+ "Use special characters" : "Gebruiken speciale tekens",
+ "Avoid ambiguous characters" : "Voorkomen dubbelzinnige tekens",
+ "Require every character type" : "Elk type teken vereist",
+ "Export type" : "Export type",
+ "Export" : "Exporteren",
+ "Rename vault" : "Hernoemen kluis",
+ "New vault name" : "Nieuwe naam kluis",
+ "Change" : "Wijzigingen",
+ "Change vault key" : "Wijzigen kluissleutel",
+ "Old vault password" : "Oude kluiswachtwoord",
+ "New vault password" : "Nieuw kluiswachtwoord",
+ "New vault password repeat" : "Nieuw kluiswachtwoord opnieuw",
+ "Please wait your vault is being updated, do not leave this page." : "Wacht totdat je kluis is bijgewerkt, verlaat deze pagina niet.",
+ "Processing" : "Verwerken",
+ "Total progress" : "Totale voortgang",
+ "About Passman" : "Over Passman",
+ "Version" : "Versie",
+ "Donate to support development" : "Doneer om de ontwikkeling te ondersteunen",
+ "Bookmarklet" : "Bookmarklet",
+ "Save your passwords with 1 click!" : "Bewaar je wachtwoorden met 1 klik!",
+ "Drag below button to your bookmark toolbar." : "Sleep onderstaande knop naar je bladwijzer balk.",
+ "Import type" : "Import type",
+ "Import" : "Importeren",
+ "Read progress" : "Lezen voortgang",
+ "Upload progress" : "Upload voortgang",
+ "Private Key" : "Privésleutel",
+ "Public key" : "Openbare sleutel",
+ "Key size" : "Sleutellengte",
+ "Save keys" : "Opslaan sleutels",
+ "Generate sharing keys" : "Genereren sleutels om te delen",
+ "Generating sharing keys" : "Genereren sleutels om te delen",
+ "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "Het wachtwoord hulpje scant je wachtwoord, berekent de gemiddelde kraaktijd en, als onvoldoende, toont het",
+ "Minimum password stength" : "Minimale wachtwoordsterkte",
+ "Passman scanned your passwords, and here is the result." : "Passman scande je wachtwoorden en hier is het resultaat.",
+ "A total of {{scan_result}} weak credentials." : "Totaal {{scan_result}} zwakke wachtwoorden.",
+ "Score" : "Score",
+ "Action" : "Actie",
+ "Search users or groups..." : "Zoeken gebruikers of groepen ...",
+ "Cyphering" : "Versleutelen",
+ "Uploading" : "Uploaden",
+ "User" : "Gebruiker",
+ "Crypto time" : "Cryptotijd",
+ "Total time spent cyphering" : "Totale tijd besteed aan versleutelen",
+ "Read" : "Lezen",
+ "Write" : "Schrijven",
+ "Files" : "Bestanden",
+ "Revisions" : "Revisies",
+ "Pending" : "Onderhanden",
+ "Enable link sharing" : "Inschakelen delen link",
+ "Share until date" : "Delen tot datum",
+ "Expire after views" : "Vervallen na bezichtiging",
+ "Click share first" : "Klik eerst delen",
+ "Show files" : "Tonen bestanden",
+ "Details" : "Details",
+ "Hide details" : "Verbergen details",
+ "Password score" : "Wachtwoord score",
+ "Cracking times" : "Kraaktijden",
+ "100 / hour" : "100 / uur",
+ "Throttled online attack" : "Begrensde on-line aanval",
+ "10 / second" : "10 / seconde",
+ "Unthrottled online attack" : "Onbegrensde on-line aanval",
+ "10k / second" : "10k / seconde",
+ "Offline attack, slow hash, many cores" : "Off-line aanval, trage hash, vele kernen",
+ "10B / second" : "10B / seconde",
+ "Offline attack, fast hash, many cores" : "Off-line aanval, snelle hash, vele kernen",
+ "Match sequence" : "Passende volgorde",
+ "See match sequence" : "Zie Passende volgorde",
+ "Pattern" : "Patroon",
+ "Matched word" : "Passend woord",
+ "Dictionary name" : "Woordenboek naam",
+ "Rank" : "Positie",
+ "Reversed" : "Omgekeerd",
+ "Guesses" : "Vermoedens",
+ "Base guesses" : "Basis vermoedens",
+ "Uppercase variations" : "Hoofdletter variaties",
+ "l33t-variations" : "l33t-variaties",
+ "Showing revisions of" : "Tonen revisies van",
+ "Revision of" : "Revisie van",
+ "by" : "door",
+ "No revisions found." : "Geen revisies gevonden.",
+ "Label" : "Label",
+ "Restore revision" : "Herstellen revisies",
+ "Delete revision" : "Verwijderen revisie",
+ "Edit credential" : "Bewerken inloggegeven",
+ "Create new credential" : "Creëren nieuw inloggegeven",
+ "Save" : "Opslaan",
+ "Cancel" : "Annuleren",
+ "Settings" : "Instellingen",
+ "Share credential {{credential}}" : "Delen inloggegeven {{credential}}",
+ "Unshare" : "Stop met delen",
+ "Showing deleted since" : "Tonen verwijderd sinds",
+ "All time" : "Altijd",
+ "Showing {{number_filtered}} of {{credential_number}} credentials" : "Tonen {{number_filtered}} van {{credential_number}} inloggegevens",
+ "Search credential..." : "Zoeken inloggegevens...",
+ "Account" : "Account",
+ "Password" : "Wachtwoord",
+ "OTP" : "OTP",
+ "E-mail" : "E-mail",
+ "URL" : "URL",
+ "Notes" : "Notities",
+ "Expire time" : "Vervaldatum",
+ "Changed" : "Gewijzigd",
+ "Created" : "Aangemaakt",
+ "Edit" : "Bewerken",
+ "Delete" : "Verwijderen",
+ "Share" : "Delen",
+ "Recover" : "herstellen",
+ "Destroy" : "Vernietigen",
+ "You have incoming share requests." : "Je hebt binnengekomen deelverzoeken.",
+ "If you want to the credential in a other vault," : "Als je de inloggegevens in een andere kluis wilt,",
+ "logout of this vault and login to the vault you want the shared credential in." : "log dan uit van deze kluis en login in de kluis waar je de gedeelde inloggegevens wilt bewaren.",
+ "Permissions" : "Permissies",
+ "Received from" : "Ontvangen van",
+ "Date" : "Datum",
+ "Accept" : "Accepteren",
+ "Decline" : "Afwijzen",
+ "Last accessed" : "Laatst benaderd",
+ "Never" : "Nooit",
+ "No vaults found, why not create one?" : "Geen kluis gevonden, eentje aanmaken?",
+ "Please give your new vault a name." : "Voer de naam van je nieuwe kluis in.",
+ "Vault password" : "Kluiswachtwoord",
+ "Repeat vault password" : "Herhaal kluiswachtwoord",
+ "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "De deelsleutels hebben een sterkte van 1024 bit; dit kun je later in instellingen wijzigen.",
+ "Create vault" : "Creëren kluis",
+ "Go back to vaults" : "Terug naar kluizen",
+ "Please input the password for" : "Voer het wachtwoord in voor",
+ "Set this vault as default." : "Stel deze kluis als standaard in.",
+ "Login automatically to this vault." : "Log automatisch in in deze kluis.",
+ "Decrypt vault" : "Ontsleutel kluis",
+ "Warning! Adding credentials over http can be insecure!" : "Waarschuwing! Toevoegen van inloggegevens over http is riskant!",
+ "Logged in to {{vault_name}}" : "Ingelogd in {{vault_name}}",
+ "Change vault" : "Wijzigen kluis",
+ "Deleted credentials" : "Verwijderde inloggegevens",
+ "Logout" : "Uitloggen",
+ "Donate" : "Doneren",
+ "Someone has shared a credential with you." : "Iemand heeft een inloggegeven met je gedeeld.",
+ "Click here to request it" : "Klik hier om het aan te vragen",
+ "Loading..." : "Laden...",
+ "Awwhh.... credential not found. Maybe it expired" : "Uhmmm.... inloggegeven niet gevonden. Misschien verlopen",
"A Passman item has been created, modified or deleted" : "Er is een Passman object gemaakt, gewijzigd of verwijderd",
"A Passman item has expired" : "Er is een Passman object vervallen",
"A Passman item has been shared" : "Er is een Passman object gedeeld",
@@ -26,10 +248,8 @@
"Remind me later" : "Herinner me later",
"Ignore" : "Negeren",
"%s shared \"%s\" with you. Click here to accept" : "%s deelde \"%s\" met je. Klik hier om te accepteren",
- "Decline" : "Afwijzen",
"%s has declined your share request for \"%s\"." : "%s weigerde je aanvraag om \"%s\" te delen.",
"%s has accepted your share request for \"%s\"." : "%s accepteerde je aanvraag om \"%s\" te delen.",
- "Settings" : "Instellingen",
"Connection to server lost" : "Verbinding met server verloren",
"Problem loading page, reloading in 5 seconds" : "Probleem met het laden van de pagina, wordt ververst in 5 seconden",
"Saving..." : "Opslaan...",
diff --git a/l10n/pt_BR.js b/l10n/pt_BR.js
index ec4a8e24..107ca8f9 100644
--- a/l10n/pt_BR.js
+++ b/l10n/pt_BR.js
@@ -2,6 +2,228 @@ OC.L10N.register(
"passman",
{
"Passwords" : "Senhas",
+ "Generating sharing keys ( %step / 2)" : "Gerando chave de compartilhamento ( %step / 2)",
+ "Incorrect vault password!" : "Senha do cofre incorreta",
+ "Passwords do not match" : "As senhas não coincidem",
+ "General" : "Geral",
+ "Custom Fields" : "Os campos Personalizados",
+ "Please fill in a label!" : "Preencha o rótulo!",
+ "Please fill in a value!" : "Preencha um valor!",
+ "Error loading file" : "Erro ao carregar o arquivo",
+ "An error happend during decryption" : "Ocorreu um erro durante a descriptografia",
+ "Credential created!" : "Credencial criada!",
+ "Credential deleted" : "Credential excluída",
+ "Credential updated" : "Credencial atualizada",
+ "Credential recovered" : "Credencial recuperada",
+ "Error downloading file, you probably don't have enough permissions" : "Erro ao baixar o arquivo, você provavelmente não tem permissões suficientes",
+ "Starting export" : "Iniciando a exportação",
+ "Decrypting credentials" : "Credenciais de descriptografia",
+ "Done" : "Finalizado",
+ "File read successfully!" : "Arquivo lido com sucesso!",
+ "Credential has no label, skipping" : "Credencial não tem rótulo, ignorando",
+ "Adding {{credential}}" : "Adicionando {{credential}}",
+ "Added {{credential}}" : "Adicionada {{credential}} ",
+ "Parsed {{num}} credentials, starting to import" : "Credenciais {{num}} analisadas, começando a importar",
+ "Revision deleted" : "Revisão excluída",
+ "Revision restored" : "Revisão restaurada",
+ "Save in passman" : "Salvar em passman",
+ "Settings saved" : "Configurações salvas",
+ "General settings" : "Configurações Gerais",
+ "Password Audit" : "Auditoria de Senha",
+ "Password settings" : "Configurações de senha",
+ "Import credentials" : "Importar credenciais",
+ "Export credentials" : "Exportar credenciais",
+ "Sharing" : "Compartilhando",
+ "Are you sure you want to leave? This WILL corrupt all your credentials" : "Você tem certeza de que quer sair? Isso vai corromper todas as suas credenciais",
+ "Your old password is incorrect!" : "Sua senha antiga está incorreta!",
+ "New passwords do not match!" : "As novas senhas não correspondem!",
+ "Please login with your new vault password" : "Faça login com sua nova senha de cofre",
+ "Share with users and groups" : "Compartilhar com usuários e grupos",
+ "Share link" : "Compartilhar link",
+ "Are you sure you want to leave? This will corrupt this credential" : "Você tem certeza de que quer sair? Isso corromperá essa credencial",
+ "Credential unshared" : "Credencial não compartilhada",
+ "Credential shared" : "Credencial compartilhada",
+ "Saved!" : "Salva!",
+ "Toggle visibility" : "Alternar visibilidade",
+ "Copy to clipboard" : "Copiar para área de transferência",
+ "Copied to clipboard!" : "Copiado para a área de transferência!",
+ "Generate password" : "Gerar senha",
+ "Copy password to clipboard" : "Copiar senha para a área de transferência",
+ "Password copied to clipboard!" : "Senha copiada para a área de transferência!",
+ "Complete" : "Completo",
+ "Username" : "Nome do usuário",
+ "Repeat password" : "Repetir a senha",
+ "Add Tag" : "Adicionar etiqueta",
+ "Field label" : "Campo de Etiqueta",
+ "Field value" : "Campo de valor",
+ "Choose a file" : "Escolher um arquivo",
+ "Text" : "Texto",
+ "File" : "Arquivo",
+ "Add" : "Adicionar",
+ "Value" : "Valor",
+ "Type" : "Tipo",
+ "Actions" : "Ações",
+ "Empty" : "Vazio",
+ "Filename" : "Nome do arquivo",
+ "Upload date" : "Enviar data",
+ "Size" : "Tamanho",
+ "Upload your OTP qr code" : "Enviar seu código qr OTP",
+ "Current OTP settings" : "Configurações OTP atuais",
+ "Issuer" : "Emissor",
+ "Secret" : "Segredo",
+ "Expire date" : "Data de validade",
+ "No expire date set" : "Nenhuma data de expiração definida",
+ "Renew interval" : "Intervalo de renovação",
+ "Disabled" : "Desativado",
+ "Day(s)" : "Dia(s)",
+ "Week(s)" : "Semana(s)",
+ "Month(s)" : "Mês(es)",
+ "Year(s)" : "Ano(s)",
+ "Password generation settings" : "Configurações de geração de senha",
+ "Password length" : "Comprimento da senha",
+ "Minimum amount of digits" : "Quantidade mínima de dígitos",
+ "Use uppercase letters" : "Usar letras maiúsculas",
+ "Use lowercase letters" : "Usar letras minúsculas",
+ "Use numbers" : "Usar números",
+ "Use special characters" : "Usar caracteres especiais",
+ "Avoid ambiguous characters" : "Evite caracteres ambíguos",
+ "Require every character type" : "Exigir cada tipo de caractere",
+ "Export type" : "Tipo de exportação",
+ "Export" : "Exportar",
+ "Rename vault" : "Renomear o cofre",
+ "New vault name" : "Nome do novo cofre",
+ "Change" : "Alterar",
+ "Change vault key" : "Alterar a chave do cofre",
+ "Old vault password" : "Senha antiga do cofre",
+ "New vault password" : "Nova senha do cofre",
+ "New vault password repeat" : "Nova repetição de senha do cofre",
+ "Please wait your vault is being updated, do not leave this page." : "Nova repetição de senha do cofre",
+ "Processing" : "Em processamento",
+ "Total progress" : "Progresso total",
+ "About Passman" : "Sobre Passman",
+ "Version" : "Versão",
+ "Donate to support development" : "Doar para apoiar o desenvolvimento",
+ "Bookmarklet" : "Marcado",
+ "Save your passwords with 1 click!" : "Salve suas senhas com um 1 clique!",
+ "Drag below button to your bookmark toolbar." : "Arraste o botão abaixo para a barra de ferramentas de marcadores.",
+ "Import type" : "Tipo de importação",
+ "Import" : "Importar",
+ "Read progress" : "Leitura em progresso",
+ "Upload progress" : "Envio em progresso",
+ "Private Key" : "Chave Privada",
+ "Public key" : "Chave Pública",
+ "Key size" : "Tamanho da chave",
+ "Save keys" : "Salvar chaves",
+ "Generate sharing keys" : "Gerar compartilhamento de chaves",
+ "Generating sharing keys" : "Gerando compartilhamento de chaves",
+ "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "A ferramenta de senha digitalizará sua senha, calculará o tempo médio de crack e, se estiver abaixo do limite, mostre-os",
+ "Minimum password stength" : "Força mínima da senha",
+ "Passman scanned your passwords, and here is the result." : "O Passman digitalizou suas senhas, e aqui está o resultado.",
+ "A total of {{scan_result}} weak credentials." : "Um total de {{scan_result}} credenciais fracas.",
+ "Score" : "Pontuação",
+ "Action" : "Ação",
+ "Search users or groups..." : "Pesquisar usuários ou grupos...",
+ "Cyphering" : "Cifrando",
+ "Uploading" : "Enviando",
+ "User" : "Usuário",
+ "Crypto time" : "Tempo de criptografia",
+ "Total time spent cyphering" : "Tempo total gasto na criptografia",
+ "Read" : "Ler",
+ "Write" : "Escrever",
+ "Files" : "Arquivos",
+ "Revisions" : "Revisões",
+ "Pending" : "Pendente",
+ "Enable link sharing" : "Ativar o compartilhamento de links",
+ "Share until date" : "Compartilhar até a data",
+ "Expire after views" : "Expirar após visualizações",
+ "Click share first" : "Clique em compartilhar primeiro",
+ "Show files" : "Mostrar arquivos",
+ "Details" : "Detalhes",
+ "Hide details" : "Esconder detalhes",
+ "Password score" : "Nível da senha",
+ "Cracking times" : "Tempo de craqueamento",
+ "100 / hour" : "100 / hora",
+ "Throttled online attack" : "Ataque online estrangulado",
+ "10 / second" : "10 / segundos",
+ "Unthrottled online attack" : "Ataque online não estragulado",
+ "10k / second" : "10k / segundos",
+ "Offline attack, slow hash, many cores" : "Offline ataque, hash lento, muitos núcleos",
+ "10B / second" : "10B / segundo",
+ "Offline attack, fast hash, many cores" : "Offline ataque, hash rápido, muitos núcleos",
+ "Match sequence" : "Seqüência de correspondência",
+ "See match sequence" : "Ver seqüência de correspondência",
+ "Pattern" : "Padrão",
+ "Matched word" : "Palavra combinada",
+ "Dictionary name" : "Nome do dicionário",
+ "Rank" : "Classificação",
+ "Reversed" : "Invertido",
+ "Guesses" : "Suposições",
+ "Base guesses" : "Suposições básicas",
+ "Uppercase variations" : "Variações maiúsculas",
+ "l33t-variations" : "l33t-Variações",
+ "Showing revisions of" : "Mostrando revisões de",
+ "Revision of" : "Revisão de",
+ "by" : "por",
+ "No revisions found." : "Não foram encontradas revisões.",
+ "Label" : "Rótulo",
+ "Restore revision" : "Restaurar revisão",
+ "Delete revision" : "Excluir revisão",
+ "Edit credential" : "Editar credencial",
+ "Create new credential" : "Criar nova credencial",
+ "Save" : "Salvar",
+ "Cancel" : "Cacelar",
+ "Settings" : "Configurações",
+ "Share credential {{credential}}" : "Compartilhar credencial {{credential}} ",
+ "Unshare" : "Descompartilhar",
+ "Showing deleted since" : "Mostrar eliminados desde",
+ "All time" : "Todo o tempo",
+ "Showing {{number_filtered}} of {{credential_number}} credentials" : "Mostrando {{number_filtered}} de {{credential_number}} credeciais",
+ "Search credential..." : "Pesquisar credenciais",
+ "Account" : "Conta",
+ "Password" : "Senha",
+ "OTP" : "OTP",
+ "E-mail" : "E-mail",
+ "URL" : "URL",
+ "Notes" : "Notas",
+ "Expire time" : "Data de validade",
+ "Changed" : "Modificado",
+ "Created" : "Criado",
+ "Edit" : "Editar",
+ "Delete" : "Eliminar",
+ "Share" : "Compartilhar",
+ "Recover" : "Restaurar",
+ "Destroy" : "Destruir",
+ "You have incoming share requests." : "Você tem solicitações de compartilhamento.",
+ "If you want to the credential in a other vault," : "Se você quiser a credencial em um outro cofre,",
+ "logout of this vault and login to the vault you want the shared credential in." : "efetue o logout deste cofre e faça login no cofre ao qual você deseja que a credencial seja compartilhada.",
+ "Permissions" : "Permissões",
+ "Received from" : "Recebido de",
+ "Date" : "Data",
+ "Accept" : "Aceito",
+ "Decline" : "Declíne",
+ "Last accessed" : "Último acessado",
+ "Never" : "Nunca",
+ "No vaults found, why not create one?" : "Nenhum cofre encontrado, por que não criar um?",
+ "Please give your new vault a name." : "Por favor, dê ao seu novo cofre um nome.",
+ "Vault password" : "Senha do cofre",
+ "Repeat vault password" : "Repita a senha do cofre",
+ "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Sua chave de compartilhamento terá um grau de 1024 bits, que você pode alterar mais tarde nas configurações.",
+ "Create vault" : "Criar cofre",
+ "Go back to vaults" : "Voltar para os cofres",
+ "Please input the password for" : "Por favor entre uma senha para",
+ "Set this vault as default." : "Configure esse cofre como padrão.",
+ "Login automatically to this vault." : "Entrar automaticamente para este cofre.",
+ "Decrypt vault" : "Descriptografar o cofre",
+ "Warning! Adding credentials over http can be insecure!" : "Atenção! Adicionar credenciais sobre http pode ser inseguro!",
+ "Logged in to {{vault_name}}" : "Efetuou login em {{vault_name}}",
+ "Change vault" : "Alterar cofre",
+ "Deleted credentials" : "Credenciais excluídas",
+ "Logout" : "Sair",
+ "Donate" : "Fazer uma doação",
+ "Someone has shared a credential with you." : "Alguém compartilhou uma credencial com você.",
+ "Click here to request it" : "Clique aqui para solicitá-lo",
+ "Loading..." : "Carregando...",
+ "Awwhh.... credential not found. Maybe it expired" : "Awwhh .... credencial não encontrada. Talvez tenha expirado",
"A Passman item has been created, modified or deleted" : "Um item Passman foi criado, modificado ou excluído",
"A Passman item has expired" : "Um item Passman expirou",
"A Passman item has been shared" : "Um item Passman foi compartilhado",
@@ -28,10 +250,8 @@ OC.L10N.register(
"Remind me later" : "Me lembre depois",
"Ignore" : "Ignorar",
"%s shared \"%s\" with you. Click here to accept" : "%s compartilhou \"%s\" com você. Clique aqui para aceitar",
- "Decline" : "Declíne",
"%s has declined your share request for \"%s\"." : "%s recusou o seu pedido de participação de \"%s\".",
"%s has accepted your share request for \"%s\"." : "%s aceitou seu pedido de compartilhamento para \"%s\".",
- "Settings" : "Configurações",
"Connection to server lost" : "Perdida a conexão com o servidor",
"Problem loading page, reloading in 5 seconds" : "Problema ao carregar a página, recarregando em 5 segundos",
"Saving..." : "Pesquisando...",
diff --git a/l10n/pt_BR.json b/l10n/pt_BR.json
index 879d9a4b..d9411e0b 100644
--- a/l10n/pt_BR.json
+++ b/l10n/pt_BR.json
@@ -1,5 +1,227 @@
{ "translations": {
"Passwords" : "Senhas",
+ "Generating sharing keys ( %step / 2)" : "Gerando chave de compartilhamento ( %step / 2)",
+ "Incorrect vault password!" : "Senha do cofre incorreta",
+ "Passwords do not match" : "As senhas não coincidem",
+ "General" : "Geral",
+ "Custom Fields" : "Os campos Personalizados",
+ "Please fill in a label!" : "Preencha o rótulo!",
+ "Please fill in a value!" : "Preencha um valor!",
+ "Error loading file" : "Erro ao carregar o arquivo",
+ "An error happend during decryption" : "Ocorreu um erro durante a descriptografia",
+ "Credential created!" : "Credencial criada!",
+ "Credential deleted" : "Credential excluída",
+ "Credential updated" : "Credencial atualizada",
+ "Credential recovered" : "Credencial recuperada",
+ "Error downloading file, you probably don't have enough permissions" : "Erro ao baixar o arquivo, você provavelmente não tem permissões suficientes",
+ "Starting export" : "Iniciando a exportação",
+ "Decrypting credentials" : "Credenciais de descriptografia",
+ "Done" : "Finalizado",
+ "File read successfully!" : "Arquivo lido com sucesso!",
+ "Credential has no label, skipping" : "Credencial não tem rótulo, ignorando",
+ "Adding {{credential}}" : "Adicionando {{credential}}",
+ "Added {{credential}}" : "Adicionada {{credential}} ",
+ "Parsed {{num}} credentials, starting to import" : "Credenciais {{num}} analisadas, começando a importar",
+ "Revision deleted" : "Revisão excluída",
+ "Revision restored" : "Revisão restaurada",
+ "Save in passman" : "Salvar em passman",
+ "Settings saved" : "Configurações salvas",
+ "General settings" : "Configurações Gerais",
+ "Password Audit" : "Auditoria de Senha",
+ "Password settings" : "Configurações de senha",
+ "Import credentials" : "Importar credenciais",
+ "Export credentials" : "Exportar credenciais",
+ "Sharing" : "Compartilhando",
+ "Are you sure you want to leave? This WILL corrupt all your credentials" : "Você tem certeza de que quer sair? Isso vai corromper todas as suas credenciais",
+ "Your old password is incorrect!" : "Sua senha antiga está incorreta!",
+ "New passwords do not match!" : "As novas senhas não correspondem!",
+ "Please login with your new vault password" : "Faça login com sua nova senha de cofre",
+ "Share with users and groups" : "Compartilhar com usuários e grupos",
+ "Share link" : "Compartilhar link",
+ "Are you sure you want to leave? This will corrupt this credential" : "Você tem certeza de que quer sair? Isso corromperá essa credencial",
+ "Credential unshared" : "Credencial não compartilhada",
+ "Credential shared" : "Credencial compartilhada",
+ "Saved!" : "Salva!",
+ "Toggle visibility" : "Alternar visibilidade",
+ "Copy to clipboard" : "Copiar para área de transferência",
+ "Copied to clipboard!" : "Copiado para a área de transferência!",
+ "Generate password" : "Gerar senha",
+ "Copy password to clipboard" : "Copiar senha para a área de transferência",
+ "Password copied to clipboard!" : "Senha copiada para a área de transferência!",
+ "Complete" : "Completo",
+ "Username" : "Nome do usuário",
+ "Repeat password" : "Repetir a senha",
+ "Add Tag" : "Adicionar etiqueta",
+ "Field label" : "Campo de Etiqueta",
+ "Field value" : "Campo de valor",
+ "Choose a file" : "Escolher um arquivo",
+ "Text" : "Texto",
+ "File" : "Arquivo",
+ "Add" : "Adicionar",
+ "Value" : "Valor",
+ "Type" : "Tipo",
+ "Actions" : "Ações",
+ "Empty" : "Vazio",
+ "Filename" : "Nome do arquivo",
+ "Upload date" : "Enviar data",
+ "Size" : "Tamanho",
+ "Upload your OTP qr code" : "Enviar seu código qr OTP",
+ "Current OTP settings" : "Configurações OTP atuais",
+ "Issuer" : "Emissor",
+ "Secret" : "Segredo",
+ "Expire date" : "Data de validade",
+ "No expire date set" : "Nenhuma data de expiração definida",
+ "Renew interval" : "Intervalo de renovação",
+ "Disabled" : "Desativado",
+ "Day(s)" : "Dia(s)",
+ "Week(s)" : "Semana(s)",
+ "Month(s)" : "Mês(es)",
+ "Year(s)" : "Ano(s)",
+ "Password generation settings" : "Configurações de geração de senha",
+ "Password length" : "Comprimento da senha",
+ "Minimum amount of digits" : "Quantidade mínima de dígitos",
+ "Use uppercase letters" : "Usar letras maiúsculas",
+ "Use lowercase letters" : "Usar letras minúsculas",
+ "Use numbers" : "Usar números",
+ "Use special characters" : "Usar caracteres especiais",
+ "Avoid ambiguous characters" : "Evite caracteres ambíguos",
+ "Require every character type" : "Exigir cada tipo de caractere",
+ "Export type" : "Tipo de exportação",
+ "Export" : "Exportar",
+ "Rename vault" : "Renomear o cofre",
+ "New vault name" : "Nome do novo cofre",
+ "Change" : "Alterar",
+ "Change vault key" : "Alterar a chave do cofre",
+ "Old vault password" : "Senha antiga do cofre",
+ "New vault password" : "Nova senha do cofre",
+ "New vault password repeat" : "Nova repetição de senha do cofre",
+ "Please wait your vault is being updated, do not leave this page." : "Nova repetição de senha do cofre",
+ "Processing" : "Em processamento",
+ "Total progress" : "Progresso total",
+ "About Passman" : "Sobre Passman",
+ "Version" : "Versão",
+ "Donate to support development" : "Doar para apoiar o desenvolvimento",
+ "Bookmarklet" : "Marcado",
+ "Save your passwords with 1 click!" : "Salve suas senhas com um 1 clique!",
+ "Drag below button to your bookmark toolbar." : "Arraste o botão abaixo para a barra de ferramentas de marcadores.",
+ "Import type" : "Tipo de importação",
+ "Import" : "Importar",
+ "Read progress" : "Leitura em progresso",
+ "Upload progress" : "Envio em progresso",
+ "Private Key" : "Chave Privada",
+ "Public key" : "Chave Pública",
+ "Key size" : "Tamanho da chave",
+ "Save keys" : "Salvar chaves",
+ "Generate sharing keys" : "Gerar compartilhamento de chaves",
+ "Generating sharing keys" : "Gerando compartilhamento de chaves",
+ "The password tool will scan your password, calculate the avarage crack time and, if below the threshold, show them" : "A ferramenta de senha digitalizará sua senha, calculará o tempo médio de crack e, se estiver abaixo do limite, mostre-os",
+ "Minimum password stength" : "Força mínima da senha",
+ "Passman scanned your passwords, and here is the result." : "O Passman digitalizou suas senhas, e aqui está o resultado.",
+ "A total of {{scan_result}} weak credentials." : "Um total de {{scan_result}} credenciais fracas.",
+ "Score" : "Pontuação",
+ "Action" : "Ação",
+ "Search users or groups..." : "Pesquisar usuários ou grupos...",
+ "Cyphering" : "Cifrando",
+ "Uploading" : "Enviando",
+ "User" : "Usuário",
+ "Crypto time" : "Tempo de criptografia",
+ "Total time spent cyphering" : "Tempo total gasto na criptografia",
+ "Read" : "Ler",
+ "Write" : "Escrever",
+ "Files" : "Arquivos",
+ "Revisions" : "Revisões",
+ "Pending" : "Pendente",
+ "Enable link sharing" : "Ativar o compartilhamento de links",
+ "Share until date" : "Compartilhar até a data",
+ "Expire after views" : "Expirar após visualizações",
+ "Click share first" : "Clique em compartilhar primeiro",
+ "Show files" : "Mostrar arquivos",
+ "Details" : "Detalhes",
+ "Hide details" : "Esconder detalhes",
+ "Password score" : "Nível da senha",
+ "Cracking times" : "Tempo de craqueamento",
+ "100 / hour" : "100 / hora",
+ "Throttled online attack" : "Ataque online estrangulado",
+ "10 / second" : "10 / segundos",
+ "Unthrottled online attack" : "Ataque online não estragulado",
+ "10k / second" : "10k / segundos",
+ "Offline attack, slow hash, many cores" : "Offline ataque, hash lento, muitos núcleos",
+ "10B / second" : "10B / segundo",
+ "Offline attack, fast hash, many cores" : "Offline ataque, hash rápido, muitos núcleos",
+ "Match sequence" : "Seqüência de correspondência",
+ "See match sequence" : "Ver seqüência de correspondência",
+ "Pattern" : "Padrão",
+ "Matched word" : "Palavra combinada",
+ "Dictionary name" : "Nome do dicionário",
+ "Rank" : "Classificação",
+ "Reversed" : "Invertido",
+ "Guesses" : "Suposições",
+ "Base guesses" : "Suposições básicas",
+ "Uppercase variations" : "Variações maiúsculas",
+ "l33t-variations" : "l33t-Variações",
+ "Showing revisions of" : "Mostrando revisões de",
+ "Revision of" : "Revisão de",
+ "by" : "por",
+ "No revisions found." : "Não foram encontradas revisões.",
+ "Label" : "Rótulo",
+ "Restore revision" : "Restaurar revisão",
+ "Delete revision" : "Excluir revisão",
+ "Edit credential" : "Editar credencial",
+ "Create new credential" : "Criar nova credencial",
+ "Save" : "Salvar",
+ "Cancel" : "Cacelar",
+ "Settings" : "Configurações",
+ "Share credential {{credential}}" : "Compartilhar credencial {{credential}} ",
+ "Unshare" : "Descompartilhar",
+ "Showing deleted since" : "Mostrar eliminados desde",
+ "All time" : "Todo o tempo",
+ "Showing {{number_filtered}} of {{credential_number}} credentials" : "Mostrando {{number_filtered}} de {{credential_number}} credeciais",
+ "Search credential..." : "Pesquisar credenciais",
+ "Account" : "Conta",
+ "Password" : "Senha",
+ "OTP" : "OTP",
+ "E-mail" : "E-mail",
+ "URL" : "URL",
+ "Notes" : "Notas",
+ "Expire time" : "Data de validade",
+ "Changed" : "Modificado",
+ "Created" : "Criado",
+ "Edit" : "Editar",
+ "Delete" : "Eliminar",
+ "Share" : "Compartilhar",
+ "Recover" : "Restaurar",
+ "Destroy" : "Destruir",
+ "You have incoming share requests." : "Você tem solicitações de compartilhamento.",
+ "If you want to the credential in a other vault," : "Se você quiser a credencial em um outro cofre,",
+ "logout of this vault and login to the vault you want the shared credential in." : "efetue o logout deste cofre e faça login no cofre ao qual você deseja que a credencial seja compartilhada.",
+ "Permissions" : "Permissões",
+ "Received from" : "Recebido de",
+ "Date" : "Data",
+ "Accept" : "Aceito",
+ "Decline" : "Declíne",
+ "Last accessed" : "Último acessado",
+ "Never" : "Nunca",
+ "No vaults found, why not create one?" : "Nenhum cofre encontrado, por que não criar um?",
+ "Please give your new vault a name." : "Por favor, dê ao seu novo cofre um nome.",
+ "Vault password" : "Senha do cofre",
+ "Repeat vault password" : "Repita a senha do cofre",
+ "Your sharing key's will have a strength of 1024 bit, which you can change later in settings." : "Sua chave de compartilhamento terá um grau de 1024 bits, que você pode alterar mais tarde nas configurações.",
+ "Create vault" : "Criar cofre",
+ "Go back to vaults" : "Voltar para os cofres",
+ "Please input the password for" : "Por favor entre uma senha para",
+ "Set this vault as default." : "Configure esse cofre como padrão.",
+ "Login automatically to this vault." : "Entrar automaticamente para este cofre.",
+ "Decrypt vault" : "Descriptografar o cofre",
+ "Warning! Adding credentials over http can be insecure!" : "Atenção! Adicionar credenciais sobre http pode ser inseguro!",
+ "Logged in to {{vault_name}}" : "Efetuou login em {{vault_name}}",
+ "Change vault" : "Alterar cofre",
+ "Deleted credentials" : "Credenciais excluídas",
+ "Logout" : "Sair",
+ "Donate" : "Fazer uma doação",
+ "Someone has shared a credential with you." : "Alguém compartilhou uma credencial com você.",
+ "Click here to request it" : "Clique aqui para solicitá-lo",
+ "Loading..." : "Carregando...",
+ "Awwhh.... credential not found. Maybe it expired" : "Awwhh .... credencial não encontrada. Talvez tenha expirado",
"A Passman item has been created, modified or deleted" : "Um item Passman foi criado, modificado ou excluído",
"A Passman item has expired" : "Um item Passman expirou",
"A Passman item has been shared" : "Um item Passman foi compartilhado",
@@ -26,10 +248,8 @@
"Remind me later" : "Me lembre depois",
"Ignore" : "Ignorar",
"%s shared \"%s\" with you. Click here to accept" : "%s compartilhou \"%s\" com você. Clique aqui para aceitar",
- "Decline" : "Declíne",
"%s has declined your share request for \"%s\"." : "%s recusou o seu pedido de participação de \"%s\".",
"%s has accepted your share request for \"%s\"." : "%s aceitou seu pedido de compartilhamento para \"%s\".",
- "Settings" : "Configurações",
"Connection to server lost" : "Perdida a conexão com o servidor",
"Problem loading page, reloading in 5 seconds" : "Problema ao carregar a página, recarregando em 5 segundos",
"Saving..." : "Pesquisando...",