angular.module("ab-base64",[]).constant("base64",function(){var d={alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\x3d",lookup:null,ie:/MSIE /.test(navigator.userAgent),ieo:/MSIE [67]/.test(navigator.userAgent),encode:function(c){var a,b,g,e=d.toUtf8(c),h=-1,k=e.length,f=[,,,];if(d.ie){for(c=[];++h>2,f[1]=(3&a)<<4|b>>4,isNaN(b)?f[2]=f[3]=64:(g=e[++h],f[2]=(15&b)<<2|g>>6,f[3]=isNaN(g)?64:63&g),c.push(d.alphabet.charAt(f[0]),d.alphabet.charAt(f[1]), d.alphabet.charAt(f[2]),d.alphabet.charAt(f[3]));return c.join("")}for(c="";++h>2,f[1]=(3&a)<<4|b>>4,isNaN(b)?f[2]=f[3]=64:(g=e[++h],f[2]=(15&b)<<2|g>>6,f[3]=isNaN(g)?64:63&g),c+=d.alphabet[f[0]]+d.alphabet[f[1]]+d.alphabet[f[2]]+d.alphabet[f[3]];return c},decode:function(c){if(c=c.replace(/\s/g,""),c.length%4)throw Error("InvalidLengthError: decode failed: The string to be decoded is not the correct length for a base64 encoded string.");if(/[^A-Za-z0-9+\/=\s]/g.test(c))throw Error("InvalidCharacterError: decode failed: The string contains characters invalid in a base64 encoded string."); var a=d.fromUtf8(c),b=0,g=a.length;if(d.ieo){for(c=[];g>b;)c.push(128>a[b]?String.fromCharCode(a[b++]):191a[b]?String.fromCharCode((31&a[b++])<<6|63&a[b++]):String.fromCharCode((15&a[b++])<<12|(63&a[b++])<<6|63&a[b++]));return c.join("")}for(c="";g>b;)c+=String.fromCharCode(128>a[b]?a[b++]:191a[b]?(31&a[b++])<<6|63&a[b++]:(15&a[b++])<<12|(63&a[b++])<<6|63&a[b++]);return c},toUtf8:function(c){var a,b=-1,d=c.length,e=[];if(/^[\x00-\x7f]*$/.test(c))for(;++ba?e.push(a):2048>a?e.push(a>>6|192,63&a|128):e.push(a>>12|224,a>>6&63|128,63&a|128);return e},fromUtf8:function(c){var a,b=-1,g=[],e=[,,,];if(!d.lookup){a=d.alphabet.length;for(d.lookup={};++b>4),e[2]=d.lookup[c.charAt(++b)],64!==e[2])&&(g.push((15&e[1])<<4|e[2]>>2),e[3]=d.lookup[c.charAt(++b)],64!==e[3]);)g.push((3&e[2])<< 6|e[3]);return g}};return{decode:d.decode,encode:d.encode,urldecode:function(c){c=c.replace(/-/g,"+").replace(/_/g,"/");var a=c.length%4;if(a){if(1===a)throw Error("InvalidLengthError: Input base64url string is the wrong length to determine padding");c+=Array(5-a).join("\x3d")}return d.decode(c)},urlencode:function(c){return d.encode(c).replace(/\+/g,"-").replace(/\//g,"_").split("\x3d",1)[0]}}}());