summaryrefslogtreecommitdiff
path: root/public/assets/js
diff options
context:
space:
mode:
Diffstat (limited to 'public/assets/js')
-rw-r--r--public/assets/js/app.min.js5
-rw-r--r--public/assets/js/drag.js1
-rw-r--r--public/assets/js/index.js3
-rw-r--r--public/assets/js/nav.js31
-rw-r--r--public/assets/js/vendor/ExifReader.js1363
-rw-r--r--public/assets/js/vendor/fastclick.js790
-rw-r--r--public/assets/js/vendor/renderToCanvas.js117
7 files changed, 2301 insertions, 9 deletions
diff --git a/public/assets/js/app.min.js b/public/assets/js/app.min.js
index 57ae046..6091a78 100644
--- a/public/assets/js/app.min.js
+++ b/public/assets/js/app.min.js
@@ -1,2 +1,3 @@
-function selectElementContents(a){if(window.getSelection&&document.createRange){var b=window.getSelection(),c=document.createRange();c.selectNodeContents(a),b.removeAllRanges(),b.addRange(c)}else if(document.selection&&document.body.createTextRange){var d=document.body.createTextRange();d.moveToElementText(a),d.select()}}(function(){function a(a,b){if(a!==b){var c=null===a,d=a===u,e=a===a,f=null===b,g=b===u,h=b===b;if(a>b&&!f||!e||c&&!g&&h||d&&h)return 1;if(b>a&&!c||!h||f&&!d&&e||g&&e)return-1}return 0}function b(a,b,c){for(var d=a.length,e=c?d:-1;c?e--:++e<d;)if(b(a[e],e,a))return e;return-1}function c(a,b,c){if(b!==b)return m(a,c);c-=1;for(var d=a.length;++c<d;)if(a[c]===b)return c;return-1}function d(a){return"function"==typeof a||!1}function e(a){return null==a?"":a+""}function f(a,b){for(var c=-1,d=a.length;++c<d&&-1<b.indexOf(a.charAt(c)););return c}function g(a,b){for(var c=a.length;c--&&-1<b.indexOf(a.charAt(c)););return c}function h(b,c){return a(b.a,c.a)||b.b-c.b}function i(a){return Ja[a]}function j(a){return Ka[a]}function k(a,b,c){return b?a=Na[a]:c&&(a=Oa[a]),"\\"+a}function l(a){return"\\"+Oa[a]}function m(a,b,c){var d=a.length;for(b+=c?0:-1;c?b--:++b<d;){var e=a[b];if(e!==e)return b}return-1}function n(a){return!!a&&"object"==typeof a}function o(a){return 160>=a&&a>=9&&13>=a||32==a||160==a||5760==a||6158==a||a>=8192&&(8202>=a||8232==a||8233==a||8239==a||8287==a||12288==a||65279==a)}function p(a,b){for(var c=-1,d=a.length,e=-1,f=[];++c<d;)a[c]===b&&(a[c]=N,f[++e]=c);return f}function q(a){for(var b=-1,c=a.length;++b<c&&o(a.charCodeAt(b)););return b}function r(a){for(var b=a.length;b--&&o(a.charCodeAt(b)););return b}function s(a){return La[a]}function t(o){function Ja(a){if(n(a)&&!(Bf(a)||a instanceof Ma)){if(a instanceof La)return a;if(_d.call(a,"__chain__")&&_d.call(a,"__wrapped__"))return Pc(a)}return new La(a)}function Ka(){}function La(a,b,c){this.__wrapped__=a,this.__actions__=c||[],this.__chain__=!!b}function Ma(a){this.__wrapped__=a,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=Ae,this.__views__=[]}function Na(){this.__data__={}}function Oa(a){var b=a?a.length:0;for(this.data={hash:pe(null),set:new je};b--;)this.push(a[b])}function Pa(a,b){var c=a.data;return("string"==typeof b||pd(b)?c.set.has(b):c.hash[b])?0:-1}function Qa(a,b){var c=-1,d=a.length;for(b||(b=Nd(d));++c<d;)b[c]=a[c];return b}function Ra(a,b){for(var c=-1,d=a.length;++c<d&&!1!==b(a[c],c,a););return a}function Sa(a,b){for(var c=-1,d=a.length;++c<d;)if(!b(a[c],c,a))return!1;return!0}function Ta(a,b){for(var c=-1,d=a.length,e=-1,f=[];++c<d;){var g=a[c];b(g,c,a)&&(f[++e]=g)}return f}function Wa(a,b){for(var c=-1,d=a.length,e=Nd(d);++c<d;)e[c]=b(a[c],c,a);return e}function Xa(a,b){for(var c=-1,d=b.length,e=a.length;++c<d;)a[e+c]=b[c];return a}function Ya(a,b,c,d){var e=-1,f=a.length;for(d&&f&&(c=a[++e]);++e<f;)c=b(c,a[e],e,a);return c}function Za(a,b){for(var c=-1,d=a.length;++c<d;)if(b(a[c],c,a))return!0;return!1}function $a(a,b,c,d){return a!==u&&_d.call(d,c)?a:b}function _a(a,b,c){for(var d=-1,e=Mf(b),f=e.length;++d<f;){var g=e[d],h=a[g],i=c(h,b[g],g,a,b);(i===i?i===h:h!==h)&&(h!==u||g in a)||(a[g]=i)}return a}function ab(a,b){return null==b?a:cb(b,Mf(b),a)}function bb(a,b){for(var c=-1,d=null==a,e=!d&&Cc(a),f=e?a.length:0,g=b.length,h=Nd(g);++c<g;){var i=b[c];h[c]=e?Dc(i,f)?a[i]:u:d?u:a[i]}return h}function cb(a,b,c){c||(c={});for(var d=-1,e=b.length;++d<e;){var f=b[d];c[f]=a[f]}return c}function db(a,b,c){var d=typeof a;return"function"==d?b===u?a:Nb(a,b,c):null==a?Id:"object"==d?ub(a):b===u?Md(a):vb(a,b)}function eb(a,b,c,d,e,f,g){var h;if(c&&(h=e?c(a,d,e):c(a)),h!==u)return h;if(!pd(a))return a;if(d=Bf(a)){if(h=yc(a),!b)return Qa(a,h)}else{var i=be.call(a),j=i==T;if(i!=V&&i!=O&&(!j||e))return Ia[i]?Ac(a,i,b):e?a:{};if(h=zc(j?{}:a),!b)return ab(h,a)}for(f||(f=[]),g||(g=[]),e=f.length;e--;)if(f[e]==a)return g[e];return f.push(a),g.push(h),(d?Ra:nb)(a,function(d,e){h[e]=eb(d,b,c,e,a,f,g)}),h}function fb(a,b,c){if("function"!=typeof a)throw new Wd(M);return ke(function(){a.apply(u,c)},b)}function gb(a,b){var d=a?a.length:0,e=[];if(!d)return e;var f=-1,g=vc(),h=g===c,i=h&&b.length>=J&&pe&&je?new Oa(b):null,j=b.length;i&&(g=Pa,h=!1,b=i);a:for(;++f<d;)if(i=a[f],h&&i===i){for(var k=j;k--;)if(b[k]===i)continue a;e.push(i)}else 0>g(b,i,0)&&e.push(i);return e}function hb(a,b){var c=!0;return He(a,function(a,d,e){return c=!!b(a,d,e)}),c}function ib(a,b,c,d){var e=d,f=e;return He(a,function(a,g,h){g=+b(a,g,h),(c(g,e)||g===d&&g===f)&&(e=g,f=a)}),f}function jb(a,b){var c=[];return He(a,function(a,d,e){b(a,d,e)&&c.push(a)}),c}function kb(a,b,c,d){var e;return c(a,function(a,c,f){return b(a,c,f)?(e=d?c:a,!1):void 0}),e}function lb(a,b,c,d){d||(d=[]);for(var e=-1,f=a.length;++e<f;){var g=a[e];n(g)&&Cc(g)&&(c||Bf(g)||ld(g))?b?lb(g,b,c,d):Xa(d,g):c||(d[d.length]=g)}return d}function mb(a,b){Je(a,b,Ad)}function nb(a,b){return Je(a,b,Mf)}function ob(a,b){return Ke(a,b,Mf)}function pb(a,b){for(var c=-1,d=b.length,e=-1,f=[];++c<d;){var g=b[c];od(a[g])&&(f[++e]=g)}return f}function qb(a,b,c){if(null!=a){c!==u&&c in Nc(a)&&(b=[c]),c=0;for(var d=b.length;null!=a&&d>c;)a=a[b[c++]];return c&&c==d?a:u}}function rb(a,b,c,d,e,f){if(a===b)a=!0;else if(null==a||null==b||!pd(a)&&!n(b))a=a!==a&&b!==b;else a:{var g=rb,h=Bf(a),i=Bf(b),j=P,k=P;h||(j=be.call(a),j==O?j=V:j!=V&&(h=vd(a))),i||(k=be.call(b),k==O?k=V:k!=V&&vd(b));var l=j==V,i=k==V,k=j==k;if(!k||h||l){if(!d&&(j=l&&_d.call(a,"__wrapped__"),i=i&&_d.call(b,"__wrapped__"),j||i)){a=g(j?a.value():a,i?b.value():b,c,d,e,f);break a}if(k){for(e||(e=[]),f||(f=[]),j=e.length;j--;)if(e[j]==a){a=f[j]==b;break a}e.push(a),f.push(b),a=(h?qc:sc)(a,b,g,c,d,e,f),e.pop(),f.pop()}else a=!1}else a=rc(a,b,j)}return a}function sb(a,b,c){var d=b.length,e=d,f=!c;if(null==a)return!e;for(a=Nc(a);d--;){var g=b[d];if(f&&g[2]?g[1]!==a[g[0]]:!(g[0]in a))return!1}for(;++d<e;){var g=b[d],h=g[0],i=a[h],j=g[1];if(f&&g[2]){if(i===u&&!(h in a))return!1}else if(g=c?c(i,j,h):u,g===u?!rb(j,i,c,!0):!g)return!1}return!0}function tb(a,b){var c=-1,d=Cc(a)?Nd(a.length):[];return He(a,function(a,e,f){d[++c]=b(a,e,f)}),d}function ub(a){var b=wc(a);if(1==b.length&&b[0][2]){var c=b[0][0],d=b[0][1];return function(a){return null==a?!1:a[c]===d&&(d!==u||c in Nc(a))}}return function(a){return sb(a,b)}}function vb(a,b){var c=Bf(a),d=Fc(a)&&b===b&&!pd(b),e=a+"";return a=Oc(a),function(f){if(null==f)return!1;var g=e;if(f=Nc(f),!(!c&&d||g in f)){if(f=1==a.length?f:qb(f,Cb(a,0,-1)),null==f)return!1;g=Uc(a),f=Nc(f)}return f[g]===b?b!==u||g in f:rb(b,f[g],u,!0)}}function wb(a,b,c,d,e){if(!pd(a))return a;var f=Cc(b)&&(Bf(b)||vd(b)),g=f?u:Mf(b);return Ra(g||b,function(h,i){if(g&&(i=h,h=b[i]),n(h)){d||(d=[]),e||(e=[]);a:{for(var j=i,k=d,l=e,m=k.length,o=b[j];m--;)if(k[m]==o){a[j]=l[m];break a}var m=a[j],p=c?c(m,o,j,a,b):u,q=p===u;q&&(p=o,Cc(o)&&(Bf(o)||vd(o))?p=Bf(m)?m:Cc(m)?Qa(m):[]:sd(o)||ld(o)?p=ld(m)?yd(m):sd(m)?m:{}:q=!1),k.push(o),l.push(p),q?a[j]=wb(p,o,c,k,l):(p===p?p!==m:m===m)&&(a[j]=p)}}else j=a[i],k=c?c(j,h,i,a,b):u,(l=k===u)&&(k=h),k===u&&(!f||i in a)||!l&&(k===k?k===j:j!==j)||(a[i]=k)}),a}function xb(a){return function(b){return null==b?u:b[a]}}function yb(a){var b=a+"";return a=Oc(a),function(c){return qb(c,a,b)}}function zb(a,b){for(var c=a?b.length:0;c--;){var d=b[c];if(d!=e&&Dc(d)){var e=d;le.call(a,d,1)}}}function Ab(a,b){return a+qe(ye()*(b-a+1))}function Bb(a,b,c,d,e){return e(a,function(a,e,f){c=d?(d=!1,a):b(c,a,e,f)}),c}function Cb(a,b,c){var d=-1,e=a.length;for(b=null==b?0:+b||0,0>b&&(b=-b>e?0:e+b),c=c===u||c>e?e:+c||0,0>c&&(c+=e),e=b>c?0:c-b>>>0,b>>>=0,c=Nd(e);++d<e;)c[d]=a[d+b];return c}function Db(a,b){var c;return He(a,function(a,d,e){return c=b(a,d,e),!c}),!!c}function Eb(a,b){var c=a.length;for(a.sort(b);c--;)a[c]=a[c].c;return a}function Fb(b,c,d){var e=tc(),f=-1;return c=Wa(c,function(a){return e(a)}),b=tb(b,function(a){return{a:Wa(c,function(b){return b(a)}),b:++f,c:a}}),Eb(b,function(b,c){var e;a:{for(var f=-1,g=b.a,h=c.a,i=g.length,j=d.length;++f<i;)if(e=a(g[f],h[f])){if(f>=j)break a;f=d[f],e*="asc"===f||!0===f?1:-1;break a}e=b.b-c.b}return e})}function Gb(a,b){var c=0;return He(a,function(a,d,e){c+=+b(a,d,e)||0}),c}function Hb(a,b){var d=-1,e=vc(),f=a.length,g=e===c,h=g&&f>=J,i=h&&pe&&je?new Oa(void 0):null,j=[];i?(e=Pa,g=!1):(h=!1,i=b?[]:j);a:for(;++d<f;){var k=a[d],l=b?b(k,d,a):k;if(g&&k===k){for(var m=i.length;m--;)if(i[m]===l)continue a;b&&i.push(l),j.push(k)}else 0>e(i,l,0)&&((b||h)&&i.push(l),j.push(k))}return j}function Ib(a,b){for(var c=-1,d=b.length,e=Nd(d);++c<d;)e[c]=a[b[c]];return e}function Jb(a,b,c,d){for(var e=a.length,f=d?e:-1;(d?f--:++f<e)&&b(a[f],f,a););return c?Cb(a,d?0:f,d?f+1:e):Cb(a,d?f+1:0,d?e:f)}function Kb(a,b){var c=a;c instanceof Ma&&(c=c.value());for(var d=-1,e=b.length;++d<e;)var f=b[d],c=f.func.apply(f.thisArg,Xa([c],f.args));return c}function Lb(a,b,c){var d=0,e=a?a.length:d;if("number"==typeof b&&b===b&&Ce>=e){for(;e>d;){var f=d+e>>>1,g=a[f];(c?b>=g:b>g)&&null!==g?d=f+1:e=f}return e}return Mb(a,b,Id,c)}function Mb(a,b,c,d){b=c(b);for(var e=0,f=a?a.length:0,g=b!==b,h=null===b,i=b===u;f>e;){var j=qe((e+f)/2),k=c(a[j]),l=k!==u,m=k===k;(g?m||d:h?m&&l&&(d||null!=k):i?m&&(d||l):null==k?0:d?b>=k:b>k)?e=j+1:f=j}return ve(f,Be)}function Nb(a,b,c){if("function"!=typeof a)return Id;if(b===u)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 3:return function(c,d,e){return a.call(b,c,d,e)};case 4:return function(c,d,e,f){return a.call(b,c,d,e,f)};case 5:return function(c,d,e,f,g){return a.call(b,c,d,e,f,g)}}return function(){return a.apply(b,arguments)}}function Ob(a){var b=new ee(a.byteLength);return new me(b).set(new me(a)),b}function Pb(a,b,c){for(var d=c.length,e=-1,f=ue(a.length-d,0),g=-1,h=b.length,i=Nd(h+f);++g<h;)i[g]=b[g];for(;++e<d;)i[c[e]]=a[e];for(;f--;)i[g++]=a[e++];return i}function Qb(a,b,c){for(var d=-1,e=c.length,f=-1,g=ue(a.length-e,0),h=-1,i=b.length,j=Nd(g+i);++f<g;)j[f]=a[f];for(g=f;++h<i;)j[g+h]=b[h];for(;++d<e;)j[g+c[d]]=a[f++];return j}function Rb(a,b){return function(c,d,e){var f=b?b():{};if(d=tc(d,e,3),Bf(c)){e=-1;for(var g=c.length;++e<g;){var h=c[e];a(f,h,d(h,e,c),c)}}else He(c,function(b,c,e){a(f,b,d(b,c,e),e)});return f}}function Sb(a){return jd(function(b,c){var d=-1,e=null==b?0:c.length,f=e>2?c[e-2]:u,g=e>2?c[2]:u,h=e>1?c[e-1]:u;for("function"==typeof f?(f=Nb(f,h,5),e-=2):(f="function"==typeof h?h:u,e-=f?1:0),g&&Ec(c[0],c[1],g)&&(f=3>e?u:f,e=1);++d<e;)(g=c[d])&&a(b,g,f);return b})}function Tb(a,b){return function(c,d){var e=c?Ne(c):0;if(!Hc(e))return a(c,d);for(var f=b?e:-1,g=Nc(c);(b?f--:++f<e)&&!1!==d(g[f],f,g););return c}}function Ub(a){return function(b,c,d){var e=Nc(b);d=d(b);for(var f=d.length,g=a?f:-1;a?g--:++g<f;){var h=d[g];if(!1===c(e[h],h,e))break}return b}}function Vb(a,b){function c(){return(this&&this!==Ua&&this instanceof c?d:a).apply(b,arguments)}var d=Xb(a);return c}function Wb(a){return function(b){var c=-1;b=Gd(Dd(b));for(var d=b.length,e="";++c<d;)e=a(e,b[c],c);return e}}function Xb(a){return function(){var b=arguments;switch(b.length){case 0:return new a;case 1:return new a(b[0]);case 2:return new a(b[0],b[1]);case 3:return new a(b[0],b[1],b[2]);case 4:return new a(b[0],b[1],b[2],b[3]);case 5:return new a(b[0],b[1],b[2],b[3],b[4]);case 6:return new a(b[0],b[1],b[2],b[3],b[4],b[5]);case 7:return new a(b[0],b[1],b[2],b[3],b[4],b[5],b[6])}var c=Ge(a.prototype),b=a.apply(c,b);return pd(b)?b:c}}function Yb(a){function b(c,d,e){return e&&Ec(c,d,e)&&(d=u),c=pc(c,a,u,u,u,u,u,d),c.placeholder=b.placeholder,c}return b}function Zb(a,b){return jd(function(c){var d=c[0];return null==d?d:(c.push(b),a.apply(u,c))})}function $b(a,b){return function(c,d,e){if(e&&Ec(c,d,e)&&(d=u),d=tc(d,e,3),1==d.length){e=c=Bf(c)?c:Mc(c);for(var f=d,g=-1,h=e.length,i=b,j=i;++g<h;){var k=e[g],l=+f(k);a(l,i)&&(i=l,j=k)}if(e=j,!c.length||e!==b)return e}return ib(c,d,a,b)}}function _b(a,c){return function(d,e,f){return e=tc(e,f,3),Bf(d)?(e=b(d,e,c),e>-1?d[e]:u):kb(d,e,a)}}function ac(a){return function(c,d,e){return c&&c.length?(d=tc(d,e,3),b(c,d,a)):-1}}function bc(a){return function(b,c,d){return c=tc(c,d,3),kb(b,c,a,!0)}}function cc(a){return function(){for(var b,c=arguments.length,d=a?c:-1,e=0,f=Nd(c);a?d--:++d<c;){var g=f[e++]=arguments[d];if("function"!=typeof g)throw new Wd(M);!b&&La.prototype.thru&&"wrapper"==uc(g)&&(b=new La([],!0))}for(d=b?-1:c;++d<c;){var g=f[d],e=uc(g),h="wrapper"==e?Me(g):u;b=h&&Gc(h[0])&&h[1]==(D|z|B|E)&&!h[4].length&&1==h[9]?b[uc(h[0])].apply(b,h[3]):1==g.length&&Gc(g)?b[e]():b.thru(g)}return function(){var a=arguments,d=a[0];if(b&&1==a.length&&Bf(d)&&d.length>=J)return b.plant(d).value();for(var e=0,a=c?f[e].apply(this,a):d;++e<c;)a=f[e].call(this,a);return a}}}function dc(a,b){return function(c,d,e){return"function"==typeof d&&e===u&&Bf(c)?a(c,d):b(c,Nb(d,e,3))}}function ec(a){return function(b,c,d){return("function"!=typeof c||d!==u)&&(c=Nb(c,d,3)),a(b,c,Ad)}}function fc(a){return function(b,c,d){return("function"!=typeof c||d!==u)&&(c=Nb(c,d,3)),a(b,c)}}function gc(a){return function(b,c,d){var e={};return c=tc(c,d,3),nb(b,function(b,d,f){f=c(b,d,f),d=a?f:d,b=a?b:f,e[d]=b}),e}}function hc(a){return function(b,c,d){return b=e(b),(a?b:"")+lc(b,c,d)+(a?"":b)}}function ic(a){var b=jd(function(c,d){var e=p(d,b.placeholder);return pc(c,a,u,d,e)});return b}function jc(a,b){return function(c,d,e,f){var g=3>arguments.length;return"function"==typeof d&&f===u&&Bf(c)?a(c,d,e,g):Bb(c,tc(d,f,4),e,g,b)}}function kc(a,b,c,d,e,f,g,h,i,j){function k(){for(var t=arguments.length,v=t,y=Nd(t);v--;)y[v]=arguments[v];if(d&&(y=Pb(y,d,e)),f&&(y=Qb(y,f,g)),o||r){var v=k.placeholder,z=p(y,v),t=t-z.length;if(j>t){var A=h?Qa(h):u,t=ue(j-t,0),D=o?z:u,z=o?u:z,E=o?y:u,y=o?u:y;return b|=o?B:C,b&=~(o?C:B),q||(b&=~(w|x)),y=[a,b,c,E,D,y,z,A,i,t],A=kc.apply(u,y),Gc(a)&&Oe(A,y),A.placeholder=v,A}}if(v=m?c:this,A=n?v[a]:a,h)for(t=y.length,D=ve(h.length,t),z=Qa(y);D--;)E=h[D],y[D]=Dc(E,t)?z[E]:u;return l&&i<y.length&&(y.length=i),this&&this!==Ua&&this instanceof k&&(A=s||Xb(a)),A.apply(v,y)}var l=b&D,m=b&w,n=b&x,o=b&z,q=b&y,r=b&A,s=n?u:Xb(a);return k}function lc(a,b,c){return a=a.length,b=+b,b>a&&se(b)?(b-=a,c=null==c?" ":c+"",Ed(c,oe(b/c.length)).slice(0,b)):""}function mc(a,b,c,d){function e(){for(var b=-1,h=arguments.length,i=-1,j=d.length,k=Nd(j+h);++i<j;)k[i]=d[i];for(;h--;)k[i++]=arguments[++b];return(this&&this!==Ua&&this instanceof e?g:a).apply(f?c:this,k)}var f=b&w,g=Xb(a);return e}function nc(a){var b=Rd[a];return function(a,c){return(c=c===u?0:+c||0)?(c=he(10,c),b(a*c)/c):b(a)}}function oc(a){return function(b,c,d,e){var f=tc(d);return null==d&&f===db?Lb(b,c,a):Mb(b,c,f(d,e,1),a)}}function pc(a,b,c,d,e,f,g,h){var i=b&x;if(!i&&"function"!=typeof a)throw new Wd(M);var j=d?d.length:0;if(j||(b&=~(B|C),d=e=u),j-=e?e.length:0,b&C){var k=d,l=e;d=e=u}var m=i?u:Me(a);return c=[a,b,c,d,e,k,l,f,g,h],m&&(d=c[1],b=m[1],h=d|b,e=b==D&&d==z||b==D&&d==E&&c[7].length<=m[8]||b==(D|E)&&d==z,(D>h||e)&&(b&w&&(c[2]=m[2],h|=d&w?0:y),(d=m[3])&&(e=c[3],c[3]=e?Pb(e,d,m[4]):Qa(d),c[4]=e?p(c[3],N):Qa(m[4])),(d=m[5])&&(e=c[5],c[5]=e?Qb(e,d,m[6]):Qa(d),c[6]=e?p(c[5],N):Qa(m[6])),(d=m[7])&&(c[7]=Qa(d)),b&D&&(c[8]=null==c[8]?m[8]:ve(c[8],m[8])),null==c[9]&&(c[9]=m[9]),c[0]=m[0],c[1]=h),b=c[1],h=c[9]),c[9]=null==h?i?0:a.length:ue(h-j,0)||0,(m?Le:Oe)(b==w?Vb(c[0],c[2]):b!=B&&b!=(w|B)||c[4].length?kc.apply(u,c):mc.apply(u,c),c)}function qc(a,b,c,d,e,f,g){var h=-1,i=a.length,j=b.length;if(i!=j&&(!e||i>=j))return!1;for(;++h<i;){var k=a[h],j=b[h],l=d?d(e?j:k,e?k:j,h):u;if(l!==u){if(l)continue;return!1}if(e){if(!Za(b,function(a){return k===a||c(k,a,d,e,f,g)}))return!1}else if(k!==j&&!c(k,j,d,e,f,g))return!1}return!0}function rc(a,b,c){switch(c){case Q:case R:return+a==+b;case S:return a.name==b.name&&a.message==b.message;case U:return a!=+a?b!=+b:a==+b;case W:case X:return a==b+""}return!1}function sc(a,b,c,d,e,f,g){var h=Mf(a),i=h.length,j=Mf(b).length;if(i!=j&&!e)return!1;for(j=i;j--;){var k=h[j];if(!(e?k in b:_d.call(b,k)))return!1}for(var l=e;++j<i;){var k=h[j],m=a[k],n=b[k],o=d?d(e?n:m,e?m:n,k):u;if(o===u?!c(m,n,d,e,f,g):!o)return!1;l||(l="constructor"==k)}return l||(c=a.constructor,d=b.constructor,!(c!=d&&"constructor"in a&&"constructor"in b)||"function"==typeof c&&c instanceof c&&"function"==typeof d&&d instanceof d)?!0:!1}function tc(a,b,c){var d=Ja.callback||Hd,d=d===Hd?db:d;return c?d(a,b,c):d}function uc(a){for(var b=a.name+"",c=Fe[b],d=c?c.length:0;d--;){var e=c[d],f=e.func;if(null==f||f==a)return e.name}return b}function vc(a,b,d){var e=Ja.indexOf||Tc,e=e===Tc?c:e;return a?e(a,b,d):e}function wc(a){a=Bd(a);for(var b=a.length;b--;){var c=a[b][1];a[b][2]=c===c&&!pd(c)}return a}function xc(a,b){var c=null==a?u:a[b];return qd(c)?c:u}function yc(a){var b=a.length,c=new a.constructor(b);return b&&"string"==typeof a[0]&&_d.call(a,"index")&&(c.index=a.index,c.input=a.input),c}function zc(a){return a=a.constructor,"function"==typeof a&&a instanceof a||(a=Td),new a}function Ac(a,b,c){var d=a.constructor;switch(b){case Y:return Ob(a);case Q:case R:return new d(+a);case Z:case $:case _:case aa:case ba:case ca:case da:case ea:case fa:return b=a.buffer,new d(c?Ob(b):b,a.byteOffset,a.length);case U:case X:return new d(a);case W:var e=new d(a.source,ya.exec(a));e.lastIndex=a.lastIndex}return e}function Bc(a,b,c){return null==a||Fc(b,a)||(b=Oc(b),a=1==b.length?a:qb(a,Cb(b,0,-1)),b=Uc(b)),b=null==a?a:a[b],null==b?u:b.apply(a,c)}function Cc(a){return null!=a&&Hc(Ne(a))}function Dc(a,b){return a="number"==typeof a||Ba.test(a)?+a:-1,b=null==b?De:b,a>-1&&0==a%1&&b>a}function Ec(a,b,c){if(!pd(c))return!1;var d=typeof b;return("number"==d?Cc(c)&&Dc(b,c.length):"string"==d&&b in c)?(b=c[b],a===a?a===b:b!==b):!1}function Fc(a,b){var c=typeof a;return"string"==c&&ra.test(a)||"number"==c?!0:Bf(a)?!1:!qa.test(a)||null!=b&&a in Nc(b)}function Gc(a){var b=uc(a),c=Ja[b];return"function"==typeof c&&b in Ma.prototype?a===c?!0:(b=Me(c),!!b&&a===b[0]):!1}function Hc(a){return"number"==typeof a&&a>-1&&0==a%1&&De>=a}function Ic(a,b){return a===u?b:Cf(a,b,Ic)}function Jc(a,b){a=Nc(a);for(var c=-1,d=b.length,e={};++c<d;){var f=b[c];f in a&&(e[f]=a[f])}return e}function Kc(a,b){var c={};return mb(a,function(a,d,e){b(a,d,e)&&(c[d]=a)}),c}function Lc(a){for(var b=Ad(a),c=b.length,d=c&&a.length,e=!!d&&Hc(d)&&(Bf(a)||ld(a)),f=-1,g=[];++f<c;){var h=b[f];(e&&Dc(h,d)||_d.call(a,h))&&g.push(h)}return g}function Mc(a){return null==a?[]:Cc(a)?pd(a)?a:Td(a):Cd(a)}function Nc(a){return pd(a)?a:Td(a)}function Oc(a){if(Bf(a))return a;var b=[];return e(a).replace(sa,function(a,c,d,e){b.push(d?e.replace(wa,"$1"):c||a)}),b}function Pc(a){return a instanceof Ma?a.clone():new La(a.__wrapped__,a.__chain__,Qa(a.__actions__))}function Qc(a,b,c){return a&&a.length?((c?Ec(a,b,c):null==b)&&(b=1),Cb(a,0>b?0:b)):[]}function Rc(a,b,c){var d=a?a.length:0;return d?((c?Ec(a,b,c):null==b)&&(b=1),b=d-(+b||0),Cb(a,0,0>b?0:b)):[]}function Sc(a){return a?a[0]:u}function Tc(a,b,d){var e=a?a.length:0;if(!e)return-1;if("number"==typeof d)d=0>d?ue(e+d,0):d;else if(d)return d=Lb(a,b),e>d&&(b===b?b===a[d]:a[d]!==a[d])?d:-1;return c(a,b,d||0)}function Uc(a){var b=a?a.length:0;return b?a[b-1]:u}function Vc(a){return Qc(a,1)}function Wc(a,b,d,e){if(!a||!a.length)return[];null!=b&&"boolean"!=typeof b&&(e=d,d=Ec(a,b,e)?u:b,b=!1);var f=tc();if((null!=d||f!==db)&&(d=f(d,e,3)),b&&vc()===c){b=d;var g;d=-1,e=a.length;for(var f=-1,h=[];++d<e;){var i=a[d],j=b?b(i,d,a):i;d&&g===j||(g=j,h[++f]=i)}a=h}else a=Hb(a,d);return a}function Xc(a){if(!a||!a.length)return[];var b=-1,c=0;a=Ta(a,function(a){return Cc(a)?(c=ue(a.length,c),!0):void 0});for(var d=Nd(c);++b<c;)d[b]=Wa(a,xb(b));return d}function Yc(a,b,c){return a&&a.length?(a=Xc(a),null==b?a:(b=Nb(b,c,4),Wa(a,function(a){return Ya(a,b,u,!0)}))):[]}function Zc(a,b){var c=-1,d=a?a.length:0,e={};for(!d||b||Bf(a[0])||(b=[]);++c<d;){var f=a[c];b?e[f]=b[c]:f&&(e[f[0]]=f[1])}return e}function $c(a){return a=Ja(a),a.__chain__=!0,a}function _c(a,b,c){return b.call(c,a)}function ad(a,b,c){var d=Bf(a)?Sa:hb;return c&&Ec(a,b,c)&&(b=u),("function"!=typeof b||c!==u)&&(b=tc(b,c,3)),d(a,b)}function bd(a,b,c){var d=Bf(a)?Ta:jb;return b=tc(b,c,3),d(a,b)}function cd(a,b,c,d){var e=a?Ne(a):0;return Hc(e)||(a=Cd(a),e=a.length),c="number"!=typeof c||d&&Ec(b,c,d)?0:0>c?ue(e+c,0):c||0,"string"==typeof a||!Bf(a)&&ud(a)?e>=c&&-1<a.indexOf(b,c):!!e&&-1<vc(a,b,c)}function dd(a,b,c){var d=Bf(a)?Wa:tb;return b=tc(b,c,3),d(a,b)}function ed(a,b,c){if(c?Ec(a,b,c):null==b){a=Mc(a);var d=a.length;return d>0?a[Ab(0,d-1)]:u}c=-1,a=xd(a);var d=a.length,e=d-1;for(b=ve(0>b?0:+b||0,d);++c<b;){var d=Ab(c,e),f=a[d];a[d]=a[c],a[c]=f}return a.length=b,a}function fd(a,b,c){var d=Bf(a)?Za:Db;return c&&Ec(a,b,c)&&(b=u),("function"!=typeof b||c!==u)&&(b=tc(b,c,3)),d(a,b)}function gd(a,b){var c;if("function"!=typeof b){if("function"!=typeof a)throw new Wd(M);var d=a;a=b,b=d}return function(){return 0<--a&&(c=b.apply(this,arguments)),1>=a&&(b=u),c}}function hd(a,b,c){function d(b,c){c&&fe(c),i=m=n=u,b&&(o=nf(),j=a.apply(l,h),m||i||(h=l=u))}function e(){var a=b-(nf()-k);0>=a||a>b?d(n,i):m=ke(e,a)}function f(){d(q,m)}function g(){if(h=arguments,k=nf(),l=this,n=q&&(m||!r),!1===p)var c=r&&!m;else{i||r||(o=k);var d=p-(k-o),g=0>=d||d>p;g?(i&&(i=fe(i)),o=k,j=a.apply(l,h)):i||(i=ke(f,d))}return g&&m?m=fe(m):m||b===p||(m=ke(e,b)),c&&(g=!0,j=a.apply(l,h)),!g||m||i||(h=l=u),j}var h,i,j,k,l,m,n,o=0,p=!1,q=!0;if("function"!=typeof a)throw new Wd(M);if(b=0>b?0:+b||0,!0===c)var r=!0,q=!1;else pd(c)&&(r=!!c.leading,p="maxWait"in c&&ue(+c.maxWait||0,b),q="trailing"in c?!!c.trailing:q);return g.cancel=function(){m&&fe(m),i&&fe(i),o=0,i=m=n=u},g}function id(a,b){function c(){var d=arguments,e=b?b.apply(this,d):d[0],f=c.cache;return f.has(e)?f.get(e):(d=a.apply(this,d),c.cache=f.set(e,d),d)}if("function"!=typeof a||b&&"function"!=typeof b)throw new Wd(M);return c.cache=new id.Cache,c}function jd(a,b){if("function"!=typeof a)throw new Wd(M);return b=ue(b===u?a.length-1:+b||0,0),function(){for(var c=arguments,d=-1,e=ue(c.length-b,0),f=Nd(e);++d<e;)f[d]=c[b+d];switch(b){case 0:return a.call(this,f);case 1:return a.call(this,c[0],f);case 2:return a.call(this,c[0],c[1],f)}for(e=Nd(b+1),d=-1;++d<b;)e[d]=c[d];return e[b]=f,a.apply(this,e)}}function kd(a,b){return a>b}function ld(a){return n(a)&&Cc(a)&&_d.call(a,"callee")&&!ie.call(a,"callee")}function md(a,b,c,d){return d=(c="function"==typeof c?Nb(c,d,3):u)?c(a,b):u,d===u?rb(a,b,c):!!d}function nd(a){return n(a)&&"string"==typeof a.message&&be.call(a)==S}function od(a){return pd(a)&&be.call(a)==T}function pd(a){var b=typeof a;return!!a&&("object"==b||"function"==b)}function qd(a){return null==a?!1:od(a)?de.test($d.call(a)):n(a)&&Aa.test(a)}function rd(a){return"number"==typeof a||n(a)&&be.call(a)==U}function sd(a){var b;if(!n(a)||be.call(a)!=V||ld(a)||!(_d.call(a,"constructor")||(b=a.constructor,"function"!=typeof b||b instanceof b)))return!1;var c;return mb(a,function(a,b){c=b}),c===u||_d.call(a,c)}function td(a){return pd(a)&&be.call(a)==W}function ud(a){return"string"==typeof a||n(a)&&be.call(a)==X}function vd(a){return n(a)&&Hc(a.length)&&!!Ha[be.call(a)]}function wd(a,b){return b>a}function xd(a){var b=a?Ne(a):0;return Hc(b)?b?Qa(a):[]:Cd(a)}function yd(a){return cb(a,Ad(a))}function zd(a){return pb(a,Ad(a))}function Ad(a){if(null==a)return[];pd(a)||(a=Td(a));for(var b=a.length,b=b&&Hc(b)&&(Bf(a)||ld(a))&&b||0,c=a.constructor,d=-1,c="function"==typeof c&&c.prototype===a,e=Nd(b),f=b>0;++d<b;)e[d]=d+"";for(var g in a)f&&Dc(g,b)||"constructor"==g&&(c||!_d.call(a,g))||e.push(g);return e}function Bd(a){a=Nc(a);for(var b=-1,c=Mf(a),d=c.length,e=Nd(d);++b<d;){var f=c[b];e[b]=[f,a[f]]}return e}function Cd(a){return Ib(a,Mf(a))}function Dd(a){return(a=e(a))&&a.replace(Ca,i).replace(va,"")}function Ed(a,b){var c="";if(a=e(a),b=+b,1>b||!a||!se(b))return c;do b%2&&(c+=a),b=qe(b/2),a+=a;while(b);return c}function Fd(a,b,c){var d=a;return(a=e(a))?(c?Ec(d,b,c):null==b)?a.slice(q(a),r(a)+1):(b+="",a.slice(f(a,b),g(a,b)+1)):a}function Gd(a,b,c){return c&&Ec(a,b,c)&&(b=u),a=e(a),a.match(b||Fa)||[]}function Hd(a,b,c){return c&&Ec(a,b,c)&&(b=u),n(a)?Jd(a):db(a,b)}function Id(a){return a}function Jd(a){return ub(eb(a,!0))}function Kd(a,b,c){if(null==c){var d=pd(b),e=d?Mf(b):u;((e=e&&e.length?pb(b,e):u)?e.length:d)||(e=!1,c=b,b=a,a=this)}e||(e=pb(b,Mf(b)));var f=!0,d=-1,g=od(a),h=e.length;!1===c?f=!1:pd(c)&&"chain"in c&&(f=c.chain);for(;++d<h;){c=e[d];var i=b[c];a[c]=i,g&&(a.prototype[c]=function(b){return function(){var c=this.__chain__;if(f||c){var d=a(this.__wrapped__);return(d.__actions__=Qa(this.__actions__)).push({func:b,args:arguments,thisArg:a}),d.__chain__=c,d}return b.apply(a,Xa([this.value()],arguments))}}(i))}return a}function Ld(){}function Md(a){return Fc(a)?xb(a):yb(a)}o=o?Va.defaults(Ua.Object(),o,Va.pick(Ua,Ga)):Ua;var Nd=o.Array,Od=o.Date,Pd=o.Error,Qd=o.Function,Rd=o.Math,Sd=o.Number,Td=o.Object,Ud=o.RegExp,Vd=o.String,Wd=o.TypeError,Xd=Nd.prototype,Yd=Td.prototype,Zd=Vd.prototype,$d=Qd.prototype.toString,_d=Yd.hasOwnProperty,ae=0,be=Yd.toString,ce=Ua._,de=Ud("^"+$d.call(_d).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),ee=o.ArrayBuffer,fe=o.clearTimeout,ge=o.parseFloat,he=Rd.pow,ie=Yd.propertyIsEnumerable,je=xc(o,"Set"),ke=o.setTimeout,le=Xd.splice,me=o.Uint8Array,ne=xc(o,"WeakMap"),oe=Rd.ceil,pe=xc(Td,"create"),qe=Rd.floor,re=xc(Nd,"isArray"),se=o.isFinite,te=xc(Td,"keys"),ue=Rd.max,ve=Rd.min,we=xc(Od,"now"),xe=o.parseInt,ye=Rd.random,ze=Sd.NEGATIVE_INFINITY,Ae=Sd.POSITIVE_INFINITY,Be=4294967294,Ce=2147483647,De=9007199254740991,Ee=ne&&new ne,Fe={};Ja.support={},Ja.templateSettings={escape:na,evaluate:oa,interpolate:pa,variable:"",imports:{_:Ja}};var Ge=function(){function a(){}return function(b){if(pd(b)){a.prototype=b;var c=new a;a.prototype=u}return c||{}}}(),He=Tb(nb),Ie=Tb(ob,!0),Je=Ub(),Ke=Ub(!0),Le=Ee?function(a,b){return Ee.set(a,b),a}:Id,Me=Ee?function(a){return Ee.get(a)}:Ld,Ne=xb("length"),Oe=function(){var a=0,b=0;return function(c,d){var e=nf(),f=I-(e-b);if(b=e,f>0){if(++a>=H)return c}else a=0;return Le(c,d)}}(),Pe=jd(function(a,b){return n(a)&&Cc(a)?gb(a,lb(b,!1,!0)):[]}),Qe=ac(),Re=ac(!0),Se=jd(function(a){for(var b=a.length,d=b,e=Nd(k),f=vc(),g=f===c,h=[];d--;){var i=a[d]=Cc(i=a[d])?i:[];e[d]=g&&120<=i.length&&pe&&je?new Oa(d&&i):null}var g=a[0],j=-1,k=g?g.length:0,l=e[0];a:for(;++j<k;)if(i=g[j],0>(l?Pa(l,i):f(h,i,0))){for(d=b;--d;){var m=e[d];if(0>(m?Pa(m,i):f(a[d],i,0)))continue a}l&&l.push(i),h.push(i)}return h}),Te=jd(function(b,c){c=lb(c);var d=bb(b,c);return zb(b,c.sort(a)),d}),Ue=oc(),Ve=oc(!0),We=jd(function(a){return Hb(lb(a,!1,!0))}),Xe=jd(function(a,b){return Cc(a)?gb(a,b):[]}),Ye=jd(Xc),Ze=jd(function(a){var b=a.length,c=b>2?a[b-2]:u,d=b>1?a[b-1]:u;return b>2&&"function"==typeof c?b-=2:(c=b>1&&"function"==typeof d?(--b,d):u,d=u),a.length=b,Yc(a,c,d)}),$e=jd(function(a){return a=lb(a),this.thru(function(b){b=Bf(b)?b:[Nc(b)];for(var c=a,d=-1,e=b.length,f=-1,g=c.length,h=Nd(e+g);++d<e;)h[d]=b[d];for(;++f<g;)h[d++]=c[f];return h})}),_e=jd(function(a,b){return bb(a,lb(b))}),af=Rb(function(a,b,c){_d.call(a,c)?++a[c]:a[c]=1}),bf=_b(He),cf=_b(Ie,!0),df=dc(Ra,He),ef=dc(function(a,b){for(var c=a.length;c--&&!1!==b(a[c],c,a););return a},Ie),ff=Rb(function(a,b,c){_d.call(a,c)?a[c].push(b):a[c]=[b]}),gf=Rb(function(a,b,c){a[c]=b}),hf=jd(function(a,b,c){var d=-1,e="function"==typeof b,f=Fc(b),g=Cc(a)?Nd(a.length):[];return He(a,function(a){var h=e?b:f&&null!=a?a[b]:u;g[++d]=h?h.apply(a,c):Bc(a,b,c)}),g}),jf=Rb(function(a,b,c){a[c?0:1].push(b)},function(){return[[],[]]}),kf=jc(Ya,He),lf=jc(function(a,b,c,d){var e=a.length;for(d&&e&&(c=a[--e]);e--;)c=b(c,a[e],e,a);return c},Ie),mf=jd(function(a,b){if(null==a)return[];var c=b[2];return c&&Ec(b[0],b[1],c)&&(b.length=1),Fb(a,lb(b),[])}),nf=we||function(){return(new Od).getTime()},of=jd(function(a,b,c){var d=w;if(c.length)var e=p(c,of.placeholder),d=d|B;return pc(a,d,b,c,e)}),pf=jd(function(a,b){b=b.length?lb(b):zd(a);for(var c=-1,d=b.length;++c<d;){var e=b[c];a[e]=pc(a[e],w,a)}return a}),qf=jd(function(a,b,c){var d=w|x;if(c.length)var e=p(c,qf.placeholder),d=d|B;return pc(b,d,a,c,e)}),rf=Yb(z),sf=Yb(A),tf=jd(function(a,b){return fb(a,1,b)}),uf=jd(function(a,b,c){return fb(a,b,c)}),vf=cc(),wf=cc(!0),xf=jd(function(a,b){if(b=lb(b),"function"!=typeof a||!Sa(b,d))throw new Wd(M);var c=b.length;return jd(function(d){for(var e=ve(d.length,c);e--;)d[e]=b[e](d[e]);return a.apply(this,d)})}),yf=ic(B),zf=ic(C),Af=jd(function(a,b){return pc(a,E,u,u,u,lb(b))}),Bf=re||function(a){return n(a)&&Hc(a.length)&&be.call(a)==P},Cf=Sb(wb),Df=Sb(function(a,b,c){return c?_a(a,b,c):ab(a,b)}),Ef=Zb(Df,function(a,b){return a===u?b:a}),Ff=Zb(Cf,Ic),Gf=bc(nb),Hf=bc(ob),If=ec(Je),Jf=ec(Ke),Kf=fc(nb),Lf=fc(ob),Mf=te?function(a){var b=null==a?u:a.constructor;return"function"==typeof b&&b.prototype===a||"function"!=typeof a&&Cc(a)?Lc(a):pd(a)?te(a):[]}:Lc,Nf=gc(!0),Of=gc(),Pf=jd(function(a,b){if(null==a)return{};if("function"!=typeof b[0])return b=Wa(lb(b),Vd),Jc(a,gb(Ad(a),b));var c=Nb(b[0],b[1],3);return Kc(a,function(a,b,d){return!c(a,b,d)})}),Qf=jd(function(a,b){return null==a?{}:"function"==typeof b[0]?Kc(a,Nb(b[0],b[1],3)):Jc(a,lb(b))}),Rf=Wb(function(a,b,c){return b=b.toLowerCase(),a+(c?b.charAt(0).toUpperCase()+b.slice(1):b)}),Sf=Wb(function(a,b,c){return a+(c?"-":"")+b.toLowerCase()}),Tf=hc(),Uf=hc(!0),Vf=Wb(function(a,b,c){return a+(c?"_":"")+b.toLowerCase()}),Wf=Wb(function(a,b,c){return a+(c?" ":"")+(b.charAt(0).toUpperCase()+b.slice(1))}),Xf=jd(function(a,b){try{return a.apply(u,b)}catch(c){return nd(c)?c:new Pd(c)}}),Yf=jd(function(a,b){return function(c){return Bc(c,a,b)}}),Zf=jd(function(a,b){return function(c){return Bc(a,c,b)}}),$f=nc("ceil"),_f=nc("floor"),ag=$b(kd,ze),bg=$b(wd,Ae),cg=nc("round");return Ja.prototype=Ka.prototype,La.prototype=Ge(Ka.prototype),La.prototype.constructor=La,Ma.prototype=Ge(Ka.prototype),Ma.prototype.constructor=Ma,Na.prototype["delete"]=function(a){return this.has(a)&&delete this.__data__[a]},Na.prototype.get=function(a){return"__proto__"==a?u:this.__data__[a]},Na.prototype.has=function(a){return"__proto__"!=a&&_d.call(this.__data__,a)},Na.prototype.set=function(a,b){return"__proto__"!=a&&(this.__data__[a]=b),this},Oa.prototype.push=function(a){var b=this.data;"string"==typeof a||pd(a)?b.set.add(a):b.hash[a]=!0},id.Cache=Na,Ja.after=function(a,b){if("function"!=typeof b){if("function"!=typeof a)throw new Wd(M);var c=a;a=b,b=c}return a=se(a=+a)?a:0,function(){return 1>--a?b.apply(this,arguments):void 0}},Ja.ary=function(a,b,c){return c&&Ec(a,b,c)&&(b=u),b=a&&null==b?a.length:ue(+b||0,0),pc(a,D,u,u,u,u,b)},Ja.assign=Df,Ja.at=_e,Ja.before=gd,Ja.bind=of,Ja.bindAll=pf,Ja.bindKey=qf,Ja.callback=Hd,Ja.chain=$c,Ja.chunk=function(a,b,c){b=(c?Ec(a,b,c):null==b)?1:ue(qe(b)||1,1),c=0;for(var d=a?a.length:0,e=-1,f=Nd(oe(d/b));d>c;)f[++e]=Cb(a,c,c+=b);return f},Ja.compact=function(a){for(var b=-1,c=a?a.length:0,d=-1,e=[];++b<c;){var f=a[b];f&&(e[++d]=f)}return e},Ja.constant=function(a){return function(){return a}},Ja.countBy=af,Ja.create=function(a,b,c){var d=Ge(a);return c&&Ec(a,b,c)&&(b=u),b?ab(d,b):d},Ja.curry=rf,Ja.curryRight=sf,Ja.debounce=hd,Ja.defaults=Ef,Ja.defaultsDeep=Ff,Ja.defer=tf,Ja.delay=uf,Ja.difference=Pe,Ja.drop=Qc,Ja.dropRight=Rc,Ja.dropRightWhile=function(a,b,c){return a&&a.length?Jb(a,tc(b,c,3),!0,!0):[]},Ja.dropWhile=function(a,b,c){return a&&a.length?Jb(a,tc(b,c,3),!0):[]},Ja.fill=function(a,b,c,d){var e=a?a.length:0;if(!e)return[];for(c&&"number"!=typeof c&&Ec(a,b,c)&&(c=0,d=e),e=a.length,c=null==c?0:+c||0,0>c&&(c=-c>e?0:e+c),d=d===u||d>e?e:+d||0,0>d&&(d+=e),e=c>d?0:d>>>0,c>>>=0;e>c;)a[c++]=b;return a},Ja.filter=bd,Ja.flatten=function(a,b,c){var d=a?a.length:0;return c&&Ec(a,b,c)&&(b=!1),d?lb(a,b):[]},Ja.flattenDeep=function(a){return a&&a.length?lb(a,!0):[]},Ja.flow=vf,Ja.flowRight=wf,Ja.forEach=df,Ja.forEachRight=ef,Ja.forIn=If,Ja.forInRight=Jf,Ja.forOwn=Kf,Ja.forOwnRight=Lf,Ja.functions=zd,Ja.groupBy=ff,Ja.indexBy=gf,Ja.initial=function(a){
-return Rc(a,1)},Ja.intersection=Se,Ja.invert=function(a,b,c){c&&Ec(a,b,c)&&(b=u),c=-1;for(var d=Mf(a),e=d.length,f={};++c<e;){var g=d[c],h=a[g];b?_d.call(f,h)?f[h].push(g):f[h]=[g]:f[h]=g}return f},Ja.invoke=hf,Ja.keys=Mf,Ja.keysIn=Ad,Ja.map=dd,Ja.mapKeys=Nf,Ja.mapValues=Of,Ja.matches=Jd,Ja.matchesProperty=function(a,b){return vb(a,eb(b,!0))},Ja.memoize=id,Ja.merge=Cf,Ja.method=Yf,Ja.methodOf=Zf,Ja.mixin=Kd,Ja.modArgs=xf,Ja.negate=function(a){if("function"!=typeof a)throw new Wd(M);return function(){return!a.apply(this,arguments)}},Ja.omit=Pf,Ja.once=function(a){return gd(2,a)},Ja.pairs=Bd,Ja.partial=yf,Ja.partialRight=zf,Ja.partition=jf,Ja.pick=Qf,Ja.pluck=function(a,b){return dd(a,Md(b))},Ja.property=Md,Ja.propertyOf=function(a){return function(b){return qb(a,Oc(b),b+"")}},Ja.pull=function(){var a=arguments,b=a[0];if(!b||!b.length)return b;for(var c=0,d=vc(),e=a.length;++c<e;)for(var f=0,g=a[c];-1<(f=d(b,g,f));)le.call(b,f,1);return b},Ja.pullAt=Te,Ja.range=function(a,b,c){c&&Ec(a,b,c)&&(b=c=u),a=+a||0,c=null==c?1:+c||0,null==b?(b=a,a=0):b=+b||0;var d=-1;b=ue(oe((b-a)/(c||1)),0);for(var e=Nd(b);++d<b;)e[d]=a,a+=c;return e},Ja.rearg=Af,Ja.reject=function(a,b,c){var d=Bf(a)?Ta:jb;return b=tc(b,c,3),d(a,function(a,c,d){return!b(a,c,d)})},Ja.remove=function(a,b,c){var d=[];if(!a||!a.length)return d;var e=-1,f=[],g=a.length;for(b=tc(b,c,3);++e<g;)c=a[e],b(c,e,a)&&(d.push(c),f.push(e));return zb(a,f),d},Ja.rest=Vc,Ja.restParam=jd,Ja.set=function(a,b,c){if(null==a)return a;var d=b+"";b=null!=a[d]||Fc(b,a)?[d]:Oc(b);for(var d=-1,e=b.length,f=e-1,g=a;null!=g&&++d<e;){var h=b[d];pd(g)&&(d==f?g[h]=c:null==g[h]&&(g[h]=Dc(b[d+1])?[]:{})),g=g[h]}return a},Ja.shuffle=function(a){return ed(a,Ae)},Ja.slice=function(a,b,c){var d=a?a.length:0;return d?(c&&"number"!=typeof c&&Ec(a,b,c)&&(b=0,c=d),Cb(a,b,c)):[]},Ja.sortBy=function(a,b,c){if(null==a)return[];c&&Ec(a,b,c)&&(b=u);var d=-1;return b=tc(b,c,3),a=tb(a,function(a,c,e){return{a:b(a,c,e),b:++d,c:a}}),Eb(a,h)},Ja.sortByAll=mf,Ja.sortByOrder=function(a,b,c,d){return null==a?[]:(d&&Ec(b,c,d)&&(c=u),Bf(b)||(b=null==b?[]:[b]),Bf(c)||(c=null==c?[]:[c]),Fb(a,b,c))},Ja.spread=function(a){if("function"!=typeof a)throw new Wd(M);return function(b){return a.apply(this,b)}},Ja.take=function(a,b,c){return a&&a.length?((c?Ec(a,b,c):null==b)&&(b=1),Cb(a,0,0>b?0:b)):[]},Ja.takeRight=function(a,b,c){var d=a?a.length:0;return d?((c?Ec(a,b,c):null==b)&&(b=1),b=d-(+b||0),Cb(a,0>b?0:b)):[]},Ja.takeRightWhile=function(a,b,c){return a&&a.length?Jb(a,tc(b,c,3),!1,!0):[]},Ja.takeWhile=function(a,b,c){return a&&a.length?Jb(a,tc(b,c,3)):[]},Ja.tap=function(a,b,c){return b.call(c,a),a},Ja.throttle=function(a,b,c){var d=!0,e=!0;if("function"!=typeof a)throw new Wd(M);return!1===c?d=!1:pd(c)&&(d="leading"in c?!!c.leading:d,e="trailing"in c?!!c.trailing:e),hd(a,b,{leading:d,maxWait:+b,trailing:e})},Ja.thru=_c,Ja.times=function(a,b,c){if(a=qe(a),1>a||!se(a))return[];var d=-1,e=Nd(ve(a,4294967295));for(b=Nb(b,c,1);++d<a;)4294967295>d?e[d]=b(d):b(d);return e},Ja.toArray=xd,Ja.toPlainObject=yd,Ja.transform=function(a,b,c,d){var e=Bf(a)||vd(a);return b=tc(b,d,4),null==c&&(e||pd(a)?(d=a.constructor,c=e?Bf(a)?new d:[]:Ge(od(d)?d.prototype:u)):c={}),(e?Ra:nb)(a,function(a,d,e){return b(c,a,d,e)}),c},Ja.union=We,Ja.uniq=Wc,Ja.unzip=Xc,Ja.unzipWith=Yc,Ja.values=Cd,Ja.valuesIn=function(a){return Ib(a,Ad(a))},Ja.where=function(a,b){return bd(a,ub(b))},Ja.without=Xe,Ja.wrap=function(a,b){return b=null==b?Id:b,pc(b,B,u,[a],[])},Ja.xor=function(){for(var a=-1,b=arguments.length;++a<b;){var c=arguments[a];if(Cc(c))var d=d?Xa(gb(d,c),gb(c,d)):c}return d?Hb(d):[]},Ja.zip=Ye,Ja.zipObject=Zc,Ja.zipWith=Ze,Ja.backflow=wf,Ja.collect=dd,Ja.compose=wf,Ja.each=df,Ja.eachRight=ef,Ja.extend=Df,Ja.iteratee=Hd,Ja.methods=zd,Ja.object=Zc,Ja.select=bd,Ja.tail=Vc,Ja.unique=Wc,Kd(Ja,Ja),Ja.add=function(a,b){return(+a||0)+(+b||0)},Ja.attempt=Xf,Ja.camelCase=Rf,Ja.capitalize=function(a){return(a=e(a))&&a.charAt(0).toUpperCase()+a.slice(1)},Ja.ceil=$f,Ja.clone=function(a,b,c,d){return b&&"boolean"!=typeof b&&Ec(a,b,c)?b=!1:"function"==typeof b&&(d=c,c=b,b=!1),"function"==typeof c?eb(a,b,Nb(c,d,3)):eb(a,b)},Ja.cloneDeep=function(a,b,c){return"function"==typeof b?eb(a,!0,Nb(b,c,3)):eb(a,!0)},Ja.deburr=Dd,Ja.endsWith=function(a,b,c){a=e(a),b+="";var d=a.length;return c=c===u?d:ve(0>c?0:+c||0,d),c-=b.length,c>=0&&a.indexOf(b,c)==c},Ja.escape=function(a){return(a=e(a))&&ma.test(a)?a.replace(ka,j):a},Ja.escapeRegExp=function(a){return(a=e(a))&&ua.test(a)?a.replace(ta,k):a||"(?:)"},Ja.every=ad,Ja.find=bf,Ja.findIndex=Qe,Ja.findKey=Gf,Ja.findLast=cf,Ja.findLastIndex=Re,Ja.findLastKey=Hf,Ja.findWhere=function(a,b){return bf(a,ub(b))},Ja.first=Sc,Ja.floor=_f,Ja.get=function(a,b,c){return a=null==a?u:qb(a,Oc(b),b+""),a===u?c:a},Ja.gt=kd,Ja.gte=function(a,b){return a>=b},Ja.has=function(a,b){if(null==a)return!1;var c=_d.call(a,b);if(!c&&!Fc(b)){if(b=Oc(b),a=1==b.length?a:qb(a,Cb(b,0,-1)),null==a)return!1;b=Uc(b),c=_d.call(a,b)}return c||Hc(a.length)&&Dc(b,a.length)&&(Bf(a)||ld(a))},Ja.identity=Id,Ja.includes=cd,Ja.indexOf=Tc,Ja.inRange=function(a,b,c){return b=+b||0,c===u?(c=b,b=0):c=+c||0,a>=ve(b,c)&&a<ue(b,c)},Ja.isArguments=ld,Ja.isArray=Bf,Ja.isBoolean=function(a){return!0===a||!1===a||n(a)&&be.call(a)==Q},Ja.isDate=function(a){return n(a)&&be.call(a)==R},Ja.isElement=function(a){return!!a&&1===a.nodeType&&n(a)&&!sd(a)},Ja.isEmpty=function(a){return null==a?!0:Cc(a)&&(Bf(a)||ud(a)||ld(a)||n(a)&&od(a.splice))?!a.length:!Mf(a).length},Ja.isEqual=md,Ja.isError=nd,Ja.isFinite=function(a){return"number"==typeof a&&se(a)},Ja.isFunction=od,Ja.isMatch=function(a,b,c,d){return c="function"==typeof c?Nb(c,d,3):u,sb(a,wc(b),c)},Ja.isNaN=function(a){return rd(a)&&a!=+a},Ja.isNative=qd,Ja.isNull=function(a){return null===a},Ja.isNumber=rd,Ja.isObject=pd,Ja.isPlainObject=sd,Ja.isRegExp=td,Ja.isString=ud,Ja.isTypedArray=vd,Ja.isUndefined=function(a){return a===u},Ja.kebabCase=Sf,Ja.last=Uc,Ja.lastIndexOf=function(a,b,c){var d=a?a.length:0;if(!d)return-1;var e=d;if("number"==typeof c)e=(0>c?ue(d+c,0):ve(c||0,d-1))+1;else if(c)return e=Lb(a,b,!0)-1,a=a[e],(b===b?b===a:a!==a)?e:-1;if(b!==b)return m(a,e,!0);for(;e--;)if(a[e]===b)return e;return-1},Ja.lt=wd,Ja.lte=function(a,b){return b>=a},Ja.max=ag,Ja.min=bg,Ja.noConflict=function(){return Ua._=ce,this},Ja.noop=Ld,Ja.now=nf,Ja.pad=function(a,b,c){a=e(a),b=+b;var d=a.length;return b>d&&se(b)?(d=(b-d)/2,b=qe(d),d=oe(d),c=lc("",d,c),c.slice(0,b)+a+c):a},Ja.padLeft=Tf,Ja.padRight=Uf,Ja.parseInt=function(a,b,c){return(c?Ec(a,b,c):null==b)?b=0:b&&(b=+b),a=Fd(a),xe(a,b||(za.test(a)?16:10))},Ja.random=function(a,b,c){c&&Ec(a,b,c)&&(b=c=u);var d=null==a,e=null==b;return null==c&&(e&&"boolean"==typeof a?(c=a,a=1):"boolean"==typeof b&&(c=b,e=!0)),d&&e&&(b=1,e=!1),a=+a||0,e?(b=a,a=0):b=+b||0,c||a%1||b%1?(c=ye(),ve(a+c*(b-a+ge("1e-"+((c+"").length-1))),b)):Ab(a,b)},Ja.reduce=kf,Ja.reduceRight=lf,Ja.repeat=Ed,Ja.result=function(a,b,c){var d=null==a?u:a[b];return d===u&&(null==a||Fc(b,a)||(b=Oc(b),a=1==b.length?a:qb(a,Cb(b,0,-1)),d=null==a?u:a[Uc(b)]),d=d===u?c:d),od(d)?d.call(a):d},Ja.round=cg,Ja.runInContext=t,Ja.size=function(a){var b=a?Ne(a):0;return Hc(b)?b:Mf(a).length},Ja.snakeCase=Vf,Ja.some=fd,Ja.sortedIndex=Ue,Ja.sortedLastIndex=Ve,Ja.startCase=Wf,Ja.startsWith=function(a,b,c){return a=e(a),c=null==c?0:ve(0>c?0:+c||0,a.length),a.lastIndexOf(b,c)==c},Ja.sum=function(a,b,c){if(c&&Ec(a,b,c)&&(b=u),b=tc(b,c,3),1==b.length){a=Bf(a)?a:Mc(a),c=a.length;for(var d=0;c--;)d+=+b(a[c])||0;a=d}else a=Gb(a,b);return a},Ja.template=function(a,b,c){var d=Ja.templateSettings;c&&Ec(a,b,c)&&(b=c=u),a=e(a),b=_a(ab({},c||b),d,$a),c=_a(ab({},b.imports),d.imports,$a);var f,g,h=Mf(c),i=Ib(c,h),j=0;c=b.interpolate||Da;var k="__p+='";c=Ud((b.escape||Da).source+"|"+c.source+"|"+(c===pa?xa:Da).source+"|"+(b.evaluate||Da).source+"|$","g");var m="sourceURL"in b?"//# sourceURL="+b.sourceURL+"\n":"";if(a.replace(c,function(b,c,d,e,h,i){return d||(d=e),k+=a.slice(j,i).replace(Ea,l),c&&(f=!0,k+="'+__e("+c+")+'"),h&&(g=!0,k+="';"+h+";\n__p+='"),d&&(k+="'+((__t=("+d+"))==null?'':__t)+'"),j=i+b.length,b}),k+="';",(b=b.variable)||(k="with(obj){"+k+"}"),k=(g?k.replace(ga,""):k).replace(ha,"$1").replace(ia,"$1;"),k="function("+(b||"obj")+"){"+(b?"":"obj||(obj={});")+"var __t,__p=''"+(f?",__e=_.escape":"")+(g?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+k+"return __p}",b=Xf(function(){return Qd(h,m+"return "+k).apply(u,i)}),b.source=k,nd(b))throw b;return b},Ja.trim=Fd,Ja.trimLeft=function(a,b,c){var d=a;return(a=e(a))?a.slice((c?Ec(d,b,c):null==b)?q(a):f(a,b+"")):a},Ja.trimRight=function(a,b,c){var d=a;return(a=e(a))?(c?Ec(d,b,c):null==b)?a.slice(0,r(a)+1):a.slice(0,g(a,b+"")+1):a},Ja.trunc=function(a,b,c){c&&Ec(a,b,c)&&(b=u);var d=F;if(c=G,null!=b)if(pd(b)){var f="separator"in b?b.separator:f,d="length"in b?+b.length||0:d;c="omission"in b?e(b.omission):c}else d=+b||0;if(a=e(a),d>=a.length)return a;if(d-=c.length,1>d)return c;if(b=a.slice(0,d),null==f)return b+c;if(td(f)){if(a.slice(d).search(f)){var g,h=a.slice(0,d);for(f.global||(f=Ud(f.source,(ya.exec(f)||"")+"g")),f.lastIndex=0;a=f.exec(h);)g=a.index;b=b.slice(0,null==g?d:g)}}else a.indexOf(f,d)!=d&&(f=b.lastIndexOf(f),f>-1&&(b=b.slice(0,f)));return b+c},Ja.unescape=function(a){return(a=e(a))&&la.test(a)?a.replace(ja,s):a},Ja.uniqueId=function(a){var b=++ae;return e(a)+b},Ja.words=Gd,Ja.all=ad,Ja.any=fd,Ja.contains=cd,Ja.eq=md,Ja.detect=bf,Ja.foldl=kf,Ja.foldr=lf,Ja.head=Sc,Ja.include=cd,Ja.inject=kf,Kd(Ja,function(){var a={};return nb(Ja,function(b,c){Ja.prototype[c]||(a[c]=b)}),a}(),!1),Ja.sample=ed,Ja.prototype.sample=function(a){return this.__chain__||null!=a?this.thru(function(b){return ed(b,a)}):ed(this.value())},Ja.VERSION=v,Ra("bind bindKey curry curryRight partial partialRight".split(" "),function(a){Ja[a].placeholder=Ja}),Ra(["drop","take"],function(a,b){Ma.prototype[a]=function(c){var d=this.__filtered__;if(d&&!b)return new Ma(this);c=null==c?1:ue(qe(c)||0,0);var e=this.clone();return d?e.__takeCount__=ve(e.__takeCount__,c):e.__views__.push({size:c,type:a+(0>e.__dir__?"Right":"")}),e},Ma.prototype[a+"Right"]=function(b){return this.reverse()[a](b).reverse()}}),Ra(["filter","map","takeWhile"],function(a,b){var c=b+1,d=c!=L;Ma.prototype[a]=function(a,b){var e=this.clone();return e.__iteratees__.push({iteratee:tc(a,b,1),type:c}),e.__filtered__=e.__filtered__||d,e}}),Ra(["first","last"],function(a,b){var c="take"+(b?"Right":"");Ma.prototype[a]=function(){return this[c](1).value()[0]}}),Ra(["initial","rest"],function(a,b){var c="drop"+(b?"":"Right");Ma.prototype[a]=function(){return this.__filtered__?new Ma(this):this[c](1)}}),Ra(["pluck","where"],function(a,b){var c=b?"filter":"map",d=b?ub:Md;Ma.prototype[a]=function(a){return this[c](d(a))}}),Ma.prototype.compact=function(){return this.filter(Id)},Ma.prototype.reject=function(a,b){return a=tc(a,b,1),this.filter(function(b){return!a(b)})},Ma.prototype.slice=function(a,b){a=null==a?0:+a||0;var c=this;return c.__filtered__&&(a>0||0>b)?new Ma(c):(0>a?c=c.takeRight(-a):a&&(c=c.drop(a)),b!==u&&(b=+b||0,c=0>b?c.dropRight(-b):c.take(b-a)),c)},Ma.prototype.takeRightWhile=function(a,b){return this.reverse().takeWhile(a,b).reverse()},Ma.prototype.toArray=function(){return this.take(Ae)},nb(Ma.prototype,function(a,b){var c=/^(?:filter|map|reject)|While$/.test(b),d=/^(?:first|last)$/.test(b),e=Ja[d?"take"+("last"==b?"Right":""):b];e&&(Ja.prototype[b]=function(){function b(a){return d&&g?e(a,1)[0]:e.apply(u,Xa([a],f))}var f=d?[1]:arguments,g=this.__chain__,h=this.__wrapped__,i=!!this.__actions__.length,j=h instanceof Ma,k=f[0],l=j||Bf(h);return l&&c&&"function"==typeof k&&1!=k.length&&(j=l=!1),k={func:_c,args:[b],thisArg:u},i=j&&!i,d&&!g?i?(h=h.clone(),h.__actions__.push(k),a.call(h)):e.call(u,this.value())[0]:!d&&l?(h=i?h:new Ma(this),h=a.apply(h,f),h.__actions__.push(k),new La(h,g)):this.thru(b)})}),Ra("join pop push replace shift sort splice split unshift".split(" "),function(a){var b=(/^(?:replace|split)$/.test(a)?Zd:Xd)[a],c=/^(?:push|sort|unshift)$/.test(a)?"tap":"thru",d=/^(?:join|pop|replace|shift)$/.test(a);Ja.prototype[a]=function(){var a=arguments;return d&&!this.__chain__?b.apply(this.value(),a):this[c](function(c){return b.apply(c,a)})}}),nb(Ma.prototype,function(a,b){var c=Ja[b];if(c){var d=c.name+"";(Fe[d]||(Fe[d]=[])).push({name:b,func:c})}}),Fe[kc(u,x).name]=[{name:"wrapper",func:u}],Ma.prototype.clone=function(){var a=new Ma(this.__wrapped__);return a.__actions__=Qa(this.__actions__),a.__dir__=this.__dir__,a.__filtered__=this.__filtered__,a.__iteratees__=Qa(this.__iteratees__),a.__takeCount__=this.__takeCount__,a.__views__=Qa(this.__views__),a},Ma.prototype.reverse=function(){if(this.__filtered__){var a=new Ma(this);a.__dir__=-1,a.__filtered__=!0}else a=this.clone(),a.__dir__*=-1;return a},Ma.prototype.value=function(){var a,b=this.__wrapped__.value(),c=this.__dir__,d=Bf(b),e=0>c,f=d?b.length:0;a=f;for(var g=this.__views__,h=0,i=-1,j=g.length;++i<j;){var k=g[i],l=k.size;switch(k.type){case"drop":h+=l;break;case"dropRight":a-=l;break;case"take":a=ve(a,h+l);break;case"takeRight":h=ue(h,a-l)}}if(a={start:h,end:a},g=a.start,h=a.end,a=h-g,e=e?h:g-1,g=this.__iteratees__,h=g.length,i=0,j=ve(a,this.__takeCount__),!d||J>f||f==a&&j==a)return Kb(b,this.__actions__);d=[];a:for(;a--&&j>i;){for(e+=c,f=-1,k=b[e];++f<h;){var m=g[f],l=m.type,m=m.iteratee(k);if(l==L)k=m;else if(!m){if(l==K)continue a;break a}}d[i++]=k}return d},Ja.prototype.chain=function(){return $c(this)},Ja.prototype.commit=function(){return new La(this.value(),this.__chain__)},Ja.prototype.concat=$e,Ja.prototype.plant=function(a){for(var b,c=this;c instanceof Ka;){var d=Pc(c);b?e.__wrapped__=d:b=d;var e=d,c=c.__wrapped__}return e.__wrapped__=a,b},Ja.prototype.reverse=function(){function a(a){return a.reverse()}var b=this.__wrapped__;return b instanceof Ma?(this.__actions__.length&&(b=new Ma(this)),b=b.reverse(),b.__actions__.push({func:_c,args:[a],thisArg:u}),new La(b,this.__chain__)):this.thru(a)},Ja.prototype.toString=function(){return this.value()+""},Ja.prototype.run=Ja.prototype.toJSON=Ja.prototype.valueOf=Ja.prototype.value=function(){return Kb(this.__wrapped__,this.__actions__)},Ja.prototype.collect=Ja.prototype.map,Ja.prototype.head=Ja.prototype.first,Ja.prototype.select=Ja.prototype.filter,Ja.prototype.tail=Ja.prototype.rest,Ja}var u,v="3.10.1",w=1,x=2,y=4,z=8,A=16,B=32,C=64,D=128,E=256,F=30,G="...",H=150,I=16,J=200,K=1,L=2,M="Expected a function",N="__lodash_placeholder__",O="[object Arguments]",P="[object Array]",Q="[object Boolean]",R="[object Date]",S="[object Error]",T="[object Function]",U="[object Number]",V="[object Object]",W="[object RegExp]",X="[object String]",Y="[object ArrayBuffer]",Z="[object Float32Array]",$="[object Float64Array]",_="[object Int8Array]",aa="[object Int16Array]",ba="[object Int32Array]",ca="[object Uint8Array]",da="[object Uint8ClampedArray]",ea="[object Uint16Array]",fa="[object Uint32Array]",ga=/\b__p\+='';/g,ha=/\b(__p\+=)''\+/g,ia=/(__e\(.*?\)|\b__t\))\+'';/g,ja=/&(?:amp|lt|gt|quot|#39|#96);/g,ka=/[&<>"'`]/g,la=RegExp(ja.source),ma=RegExp(ka.source),na=/<%-([\s\S]+?)%>/g,oa=/<%([\s\S]+?)%>/g,pa=/<%=([\s\S]+?)%>/g,qa=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,ra=/^\w*$/,sa=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,ta=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,ua=RegExp(ta.source),va=/[\u0300-\u036f\ufe20-\ufe23]/g,wa=/\\(\\)?/g,xa=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ya=/\w*$/,za=/^0[xX]/,Aa=/^\[object .+?Constructor\]$/,Ba=/^\d+$/,Ca=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Da=/($^)/,Ea=/['\n\r\u2028\u2029\\]/g,Fa=RegExp("[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?=[A-Z\\xc0-\\xd6\\xd8-\\xde][a-z\\xdf-\\xf6\\xf8-\\xff]+)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+|[A-Z\\xc0-\\xd6\\xd8-\\xde]+|[0-9]+","g"),Ga="Array ArrayBuffer Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Math Number Object RegExp Set String _ clearTimeout isFinite parseFloat parseInt setTimeout TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap".split(" "),Ha={};Ha[Z]=Ha[$]=Ha[_]=Ha[aa]=Ha[ba]=Ha[ca]=Ha[da]=Ha[ea]=Ha[fa]=!0,Ha[O]=Ha[P]=Ha[Y]=Ha[Q]=Ha[R]=Ha[S]=Ha[T]=Ha["[object Map]"]=Ha[U]=Ha[V]=Ha[W]=Ha["[object Set]"]=Ha[X]=Ha["[object WeakMap]"]=!1;var Ia={};Ia[O]=Ia[P]=Ia[Y]=Ia[Q]=Ia[R]=Ia[Z]=Ia[$]=Ia[_]=Ia[aa]=Ia[ba]=Ia[U]=Ia[V]=Ia[W]=Ia[X]=Ia[ca]=Ia[da]=Ia[ea]=Ia[fa]=!0,Ia[S]=Ia[T]=Ia["[object Map]"]=Ia["[object Set]"]=Ia["[object WeakMap]"]=!1;var Ja={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"},Ka={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","`":"&#96;"},La={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&#96;":"`"},Ma={"function":!0,object:!0},Na={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},Oa={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Pa=Ma[typeof exports]&&exports&&!exports.nodeType&&exports,Qa=Ma[typeof module]&&module&&!module.nodeType&&module,Ra=Ma[typeof self]&&self&&self.Object&&self,Sa=Ma[typeof window]&&window&&window.Object&&window,Ta=Qa&&Qa.exports===Pa&&Pa,Ua=Pa&&Qa&&"object"==typeof global&&global&&global.Object&&global||Sa!==(this&&this.window)&&Sa||Ra||this,Va=t();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(Ua._=Va,define(function(){return Va})):Pa&&Qa?Ta?(Qa.exports=Va)._=Va:Pa._=Va:Ua._=Va}).call(this),Function.prototype.bind||(Function.prototype.bind=function(a){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var b=Array.prototype.slice.call(arguments,1),c=this,d=function(){},e=function(){return c.apply(this instanceof d&&a?this:a,b.concat(Array.prototype.slice.call(arguments)))};return d.prototype=this.prototype,e.prototype=new d,e}),function(){for(var a=0,b=["ms","moz","webkit","o"],c=0;c<b.length&&!window.requestAnimationFrame;++c)window.requestAnimationFrame=window[b[c]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[b[c]+"CancelAnimationFrame"]||window[b[c]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(b,c){var d=(new Date).getTime(),e=Math.max(0,16-(d-a)),f=window.setTimeout(function(){b(d+e)},e);return a=d+e,f}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(a){clearTimeout(a)})}(),function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[],c={browser:b[1]||"",version:b[2]||"0"};return browser={},c.browser&&(browser[c.browser]=!0,browser.version=c.version),browser.chrome?browser.webkit=!0:browser.webkit&&(browser.safari=!0),window.$&&($.browser=browser),browser}(navigator.userAgent);var is_iphone=navigator.userAgent.match(/iPhone/i)||navigator.userAgent.match(/iPod/i),is_ipad=navigator.userAgent.match(/iPad/i),is_android=navigator.userAgent.match(/Android/i),is_mobile=is_iphone||is_ipad||is_android,is_desktop=!is_mobile,app_devicePixelRatio=is_mobile?devicePixelRatio:1,View=function(a,b){var c=function(a){this._id=b.uniqueId("view"),this.type="view",a||(a={}),b.extend(this,b.pick(a,e)),this._ensureElement(),this.initialize.apply(this,arguments),this.delegateEvents()},d=/^(\S+)\s*(.*)$/,e=["model","collection","el","id","attributes","className","tagName","events"];b.extend(c.prototype,{tagName:"div",$:function(a){return this.$el.find(a)},initialize:function(){},setElement:function(b,c){return this.$el&&this.undelegateEvents(),this.$el=b instanceof a?b:a(b),this.el=this.$el[0],c!==!1&&this.delegateEvents(),this},delegateEvents:function(a){if(!a&&!(a=b.result(this,"events")))return this;this.undelegateEvents();for(var c in a){var e=a[c];if(b.isFunction(e)||(e=this[a[c]]),e){var f=c.match(d),g=f[1],h=f[2];e=b.bind(e,this),g+=".delegateEvents"+this._id,(!is_mobile||"mouseenter"!==h&&"mouseleave"!==h)&&(""===h?this.$el.on(g,e):this.$el.on(g,h,e))}}return this},undelegateEvents:function(){return this.$el.off(".delegateEvents"+this._id),this},_ensureElement:function(){this.setElement(b.result(this,"el"),!1)},preventDefault:function(a){a&&a.preventDefault()},stopPropagation:function(a){a&&a.stopPropagation()}});var f=function(a,c){var d,c=c||{},e=this,f={};d=a&&b.has(a,"constructor")?a.constructor:function(){return e.apply(this,arguments)},b.extend(f,e.prototype.events,a.events),b.extend(d,e,c);var g=function(){this.constructor=d};return g.prototype=e.prototype,d.prototype=new g,a&&b.extend(d.prototype,a),d.prototype.__super__=e.prototype,d.prototype.events=f,d};return c.extend=f,c}(jQuery,_),UploadView=View.extend({events:{"change [type=file]":"handleFileSelect","submit form":"preventDefault"},initialize:function(){this.$file=this.$("[type=file]"),this.$upload=this.$(".upload-icon")},beforeUpload:function(){},handleFileSelect:function(a){a.stopPropagation(),a.preventDefault(),this.beforeUpload();for(var b,c=a.dataTransfer?a.dataTransfer.files:a.target.files,d=0;b=c[d];d++)b.type.match("image.*")&&this.upload(b)},upload:function(a){var b=new FormData;b.append("image",a),this.mediaTag&&b.append("tag",this.mediaTag);var c=$.ajax({url:this.uploadAction,type:"post",data:b,dataType:"json",processData:!1,contentType:!1});c.done(this.success.bind(this))},success:function(a){return a.error?(this.$upload.removeClass("uploading"),void this.error(a.error)):(this.$upload.removeClass("uploading"),void this.add(a))},add:function(a){console.log(a)},error:function(a){}}),DragView=UploadView.extend({el:"body",uploadAction:"/upload",selfDrag:!1,events:{dragover:"dragover",dragstart:"dragstart",drop:"handleDrop"},drop:function(){$("#droparea").hide(),$("#loading").show()},dragover:function(a){a.stopPropagation(),a.preventDefault(),this.selfDrag?$("#droparea").hide():$("#droparea").show()},dragstart:function(a){this.selfDrag=!0},handleDrop:function(a){a.stopPropagation(),a.preventDefault(),a=a.originalEvent,a.dataTransfer&&!this.selfDrag?a.dataTransfer.files.length&&this.handleFileSelect(a):this.handleFileSelect(a),this.selfDrag=!1,this.drop()},add:function(a){$("#loading").hide(),app.view.display(a),history.pushState(a,document.title,"/p/"+a.id)}}),NavView=View.extend({el:"body",events:{"click #prev":"prev","click #next":"next","click #refresh":"refresh","click #random":"random"},initialize:function(){if(this.id=-1,this.$pip=this.$("#pip"),this.$pip_img=this.$("#pip img"),this.$image=this.$("#luckyimage"),$(window).on("keydown",this.keydown.bind(this)),$(document).ajaxError(function(){this.fetching=!1}.bind(this)),window.onpopstate=function(a){this.display(a.state)}.bind(this),-1!==window.location.pathname.indexOf("/p/")){var a=window.location.pathname.split("/")[2];this.fetch(a)}else this.latest()},keydown:function(a){if(!(a.shiftKey||a.metaKey||a.ctrlKey||a.altKey))switch(a.keyCode){case 37:this.prev();break;case 39:this.next();break;case 38:this.random();break;case 40:this.latest()}},latest:function(){this.fetching||(this.fetch("latest"),this.onLatest=!0)},prev:function(){this.fetching||this.id-1<1||this.fetch(this.id-1)},next:function(){this.fetching||this.onLatest||this.id<1||this.fetch(this.id+1)},random:function(){this.fetching||this.fetch("random")},fetch:function(a){this.fetching=!0,this.onLatest=!1,$.get("/get/"+a,function(a){this.fetching=!1,this.display(a),history.pushState(a,document.title,"/p/"+a.id)}.bind(this))},display:function(a){return a&&a.id?(this.id=a.id,this.$pip.attr("href",a.url),this.$pip_img.attr("src",""),setTimeout(function(){this.$pip_img.attr("src",a.url)}.bind(this)),void this.$image.css("background-image","url("+a.url+")")):void(this.onLatest=!0)}}),app=function(){var a={};return a.init=function(){a.view=new NavView,a.upload=new DragView,$(window).on("focus",a.focus),$(window).on("blur",a.blur)},a.focused=!0,a.typing=!1,a.focus=function(){a.focused=!0},a.blur=function(){a.focused=!1},document.addEventListener("DOMContentLoaded",a.init),a}(); \ No newline at end of file
+function FastClick(a,b){"use strict";function c(a,b){return function(){return a.apply(b,arguments)}}var d;if(b=b||{},this.trackingClick=!1,this.trackingClickStart=0,this.targetElement=null,this.touchStartX=0,this.touchStartY=0,this.lastTouchIdentifier=0,this.touchBoundary=b.touchBoundary||10,this.layer=a,this.tapDelay=b.tapDelay||200,!FastClick.notNeeded(a)){for(var e=["onMouse","onClick","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel"],f=this,g=0,h=e.length;h>g;g++)f[e[g]]=c(f[e[g]],f);deviceIsAndroid&&(a.addEventListener("mouseover",this.onMouse,!0),a.addEventListener("mousedown",this.onMouse,!0),a.addEventListener("mouseup",this.onMouse,!0)),a.addEventListener("click",this.onClick,!0),a.addEventListener("touchstart",this.onTouchStart,!1),a.addEventListener("touchmove",this.onTouchMove,!1),a.addEventListener("touchend",this.onTouchEnd,!1),a.addEventListener("touchcancel",this.onTouchCancel,!1),Event.prototype.stopImmediatePropagation||(a.removeEventListener=function(b,c,d){var e=Node.prototype.removeEventListener;"click"===b?e.call(a,b,c.hijacked||c,d):e.call(a,b,c,d)},a.addEventListener=function(b,c,d){var e=Node.prototype.addEventListener;"click"===b?e.call(a,b,c.hijacked||(c.hijacked=function(a){a.propagationStopped||c(a)}),d):e.call(a,b,c,d)}),"function"==typeof a.onclick&&(d=a.onclick,a.addEventListener("click",function(a){d(a)},!1),a.onclick=null)}}function selectElementContents(a){if(window.getSelection&&document.createRange){var b=window.getSelection(),c=document.createRange();c.selectNodeContents(a),b.removeAllRanges(),b.addRange(c)}else if(document.selection&&document.body.createTextRange){var d=document.body.createTextRange();d.moveToElementText(a),d.select()}}(function(){function a(a,b){if(a!==b){var c=null===a,d=a===u,e=a===a,f=null===b,g=b===u,h=b===b;if(a>b&&!f||!e||c&&!g&&h||d&&h)return 1;if(b>a&&!c||!h||f&&!d&&e||g&&e)return-1}return 0}function b(a,b,c){for(var d=a.length,e=c?d:-1;c?e--:++e<d;)if(b(a[e],e,a))return e;return-1}function c(a,b,c){if(b!==b)return m(a,c);c-=1;for(var d=a.length;++c<d;)if(a[c]===b)return c;return-1}function d(a){return"function"==typeof a||!1}function e(a){return null==a?"":a+""}function f(a,b){for(var c=-1,d=a.length;++c<d&&-1<b.indexOf(a.charAt(c)););return c}function g(a,b){for(var c=a.length;c--&&-1<b.indexOf(a.charAt(c)););return c}function h(b,c){return a(b.a,c.a)||b.b-c.b}function i(a){return Ja[a]}function j(a){return Ka[a]}function k(a,b,c){return b?a=Na[a]:c&&(a=Oa[a]),"\\"+a}function l(a){return"\\"+Oa[a]}function m(a,b,c){var d=a.length;for(b+=c?0:-1;c?b--:++b<d;){var e=a[b];if(e!==e)return b}return-1}function n(a){return!!a&&"object"==typeof a}function o(a){return 160>=a&&a>=9&&13>=a||32==a||160==a||5760==a||6158==a||a>=8192&&(8202>=a||8232==a||8233==a||8239==a||8287==a||12288==a||65279==a)}function p(a,b){for(var c=-1,d=a.length,e=-1,f=[];++c<d;)a[c]===b&&(a[c]=N,f[++e]=c);return f}function q(a){for(var b=-1,c=a.length;++b<c&&o(a.charCodeAt(b)););return b}function r(a){for(var b=a.length;b--&&o(a.charCodeAt(b)););return b}function s(a){return La[a]}function t(o){function Ja(a){if(n(a)&&!(Bf(a)||a instanceof Ma)){if(a instanceof La)return a;if(_d.call(a,"__chain__")&&_d.call(a,"__wrapped__"))return Pc(a)}return new La(a)}function Ka(){}function La(a,b,c){this.__wrapped__=a,this.__actions__=c||[],this.__chain__=!!b}function Ma(a){this.__wrapped__=a,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=Ae,this.__views__=[]}function Na(){this.__data__={}}function Oa(a){var b=a?a.length:0;for(this.data={hash:pe(null),set:new je};b--;)this.push(a[b])}function Pa(a,b){var c=a.data;return("string"==typeof b||pd(b)?c.set.has(b):c.hash[b])?0:-1}function Qa(a,b){var c=-1,d=a.length;for(b||(b=Nd(d));++c<d;)b[c]=a[c];return b}function Ra(a,b){for(var c=-1,d=a.length;++c<d&&!1!==b(a[c],c,a););return a}function Sa(a,b){for(var c=-1,d=a.length;++c<d;)if(!b(a[c],c,a))return!1;return!0}function Ta(a,b){for(var c=-1,d=a.length,e=-1,f=[];++c<d;){var g=a[c];b(g,c,a)&&(f[++e]=g)}return f}function Wa(a,b){for(var c=-1,d=a.length,e=Nd(d);++c<d;)e[c]=b(a[c],c,a);return e}function Xa(a,b){for(var c=-1,d=b.length,e=a.length;++c<d;)a[e+c]=b[c];return a}function Ya(a,b,c,d){var e=-1,f=a.length;for(d&&f&&(c=a[++e]);++e<f;)c=b(c,a[e],e,a);return c}function Za(a,b){for(var c=-1,d=a.length;++c<d;)if(b(a[c],c,a))return!0;return!1}function $a(a,b,c,d){return a!==u&&_d.call(d,c)?a:b}function _a(a,b,c){for(var d=-1,e=Mf(b),f=e.length;++d<f;){var g=e[d],h=a[g],i=c(h,b[g],g,a,b);(i===i?i===h:h!==h)&&(h!==u||g in a)||(a[g]=i)}return a}function ab(a,b){return null==b?a:cb(b,Mf(b),a)}function bb(a,b){for(var c=-1,d=null==a,e=!d&&Cc(a),f=e?a.length:0,g=b.length,h=Nd(g);++c<g;){var i=b[c];h[c]=e?Dc(i,f)?a[i]:u:d?u:a[i]}return h}function cb(a,b,c){c||(c={});for(var d=-1,e=b.length;++d<e;){var f=b[d];c[f]=a[f]}return c}function db(a,b,c){var d=typeof a;return"function"==d?b===u?a:Nb(a,b,c):null==a?Id:"object"==d?ub(a):b===u?Md(a):vb(a,b)}function eb(a,b,c,d,e,f,g){var h;if(c&&(h=e?c(a,d,e):c(a)),h!==u)return h;if(!pd(a))return a;if(d=Bf(a)){if(h=yc(a),!b)return Qa(a,h)}else{var i=be.call(a),j=i==T;if(i!=V&&i!=O&&(!j||e))return Ia[i]?Ac(a,i,b):e?a:{};if(h=zc(j?{}:a),!b)return ab(h,a)}for(f||(f=[]),g||(g=[]),e=f.length;e--;)if(f[e]==a)return g[e];return f.push(a),g.push(h),(d?Ra:nb)(a,function(d,e){h[e]=eb(d,b,c,e,a,f,g)}),h}function fb(a,b,c){if("function"!=typeof a)throw new Wd(M);return ke(function(){a.apply(u,c)},b)}function gb(a,b){var d=a?a.length:0,e=[];if(!d)return e;var f=-1,g=vc(),h=g===c,i=h&&b.length>=J&&pe&&je?new Oa(b):null,j=b.length;i&&(g=Pa,h=!1,b=i);a:for(;++f<d;)if(i=a[f],h&&i===i){for(var k=j;k--;)if(b[k]===i)continue a;e.push(i)}else 0>g(b,i,0)&&e.push(i);return e}function hb(a,b){var c=!0;return He(a,function(a,d,e){return c=!!b(a,d,e)}),c}function ib(a,b,c,d){var e=d,f=e;return He(a,function(a,g,h){g=+b(a,g,h),(c(g,e)||g===d&&g===f)&&(e=g,f=a)}),f}function jb(a,b){var c=[];return He(a,function(a,d,e){b(a,d,e)&&c.push(a)}),c}function kb(a,b,c,d){var e;return c(a,function(a,c,f){return b(a,c,f)?(e=d?c:a,!1):void 0}),e}function lb(a,b,c,d){d||(d=[]);for(var e=-1,f=a.length;++e<f;){var g=a[e];n(g)&&Cc(g)&&(c||Bf(g)||ld(g))?b?lb(g,b,c,d):Xa(d,g):c||(d[d.length]=g)}return d}function mb(a,b){Je(a,b,Ad)}function nb(a,b){return Je(a,b,Mf)}function ob(a,b){return Ke(a,b,Mf)}function pb(a,b){for(var c=-1,d=b.length,e=-1,f=[];++c<d;){var g=b[c];od(a[g])&&(f[++e]=g)}return f}function qb(a,b,c){if(null!=a){c!==u&&c in Nc(a)&&(b=[c]),c=0;for(var d=b.length;null!=a&&d>c;)a=a[b[c++]];return c&&c==d?a:u}}function rb(a,b,c,d,e,f){if(a===b)a=!0;else if(null==a||null==b||!pd(a)&&!n(b))a=a!==a&&b!==b;else a:{var g=rb,h=Bf(a),i=Bf(b),j=P,k=P;h||(j=be.call(a),j==O?j=V:j!=V&&(h=vd(a))),i||(k=be.call(b),k==O?k=V:k!=V&&vd(b));var l=j==V,i=k==V,k=j==k;if(!k||h||l){if(!d&&(j=l&&_d.call(a,"__wrapped__"),i=i&&_d.call(b,"__wrapped__"),j||i)){a=g(j?a.value():a,i?b.value():b,c,d,e,f);break a}if(k){for(e||(e=[]),f||(f=[]),j=e.length;j--;)if(e[j]==a){a=f[j]==b;break a}e.push(a),f.push(b),a=(h?qc:sc)(a,b,g,c,d,e,f),e.pop(),f.pop()}else a=!1}else a=rc(a,b,j)}return a}function sb(a,b,c){var d=b.length,e=d,f=!c;if(null==a)return!e;for(a=Nc(a);d--;){var g=b[d];if(f&&g[2]?g[1]!==a[g[0]]:!(g[0]in a))return!1}for(;++d<e;){var g=b[d],h=g[0],i=a[h],j=g[1];if(f&&g[2]){if(i===u&&!(h in a))return!1}else if(g=c?c(i,j,h):u,g===u?!rb(j,i,c,!0):!g)return!1}return!0}function tb(a,b){var c=-1,d=Cc(a)?Nd(a.length):[];return He(a,function(a,e,f){d[++c]=b(a,e,f)}),d}function ub(a){var b=wc(a);if(1==b.length&&b[0][2]){var c=b[0][0],d=b[0][1];return function(a){return null==a?!1:a[c]===d&&(d!==u||c in Nc(a))}}return function(a){return sb(a,b)}}function vb(a,b){var c=Bf(a),d=Fc(a)&&b===b&&!pd(b),e=a+"";return a=Oc(a),function(f){if(null==f)return!1;var g=e;if(f=Nc(f),!(!c&&d||g in f)){if(f=1==a.length?f:qb(f,Cb(a,0,-1)),null==f)return!1;g=Uc(a),f=Nc(f)}return f[g]===b?b!==u||g in f:rb(b,f[g],u,!0)}}function wb(a,b,c,d,e){if(!pd(a))return a;var f=Cc(b)&&(Bf(b)||vd(b)),g=f?u:Mf(b);return Ra(g||b,function(h,i){if(g&&(i=h,h=b[i]),n(h)){d||(d=[]),e||(e=[]);a:{for(var j=i,k=d,l=e,m=k.length,o=b[j];m--;)if(k[m]==o){a[j]=l[m];break a}var m=a[j],p=c?c(m,o,j,a,b):u,q=p===u;q&&(p=o,Cc(o)&&(Bf(o)||vd(o))?p=Bf(m)?m:Cc(m)?Qa(m):[]:sd(o)||ld(o)?p=ld(m)?yd(m):sd(m)?m:{}:q=!1),k.push(o),l.push(p),q?a[j]=wb(p,o,c,k,l):(p===p?p!==m:m===m)&&(a[j]=p)}}else j=a[i],k=c?c(j,h,i,a,b):u,(l=k===u)&&(k=h),k===u&&(!f||i in a)||!l&&(k===k?k===j:j!==j)||(a[i]=k)}),a}function xb(a){return function(b){return null==b?u:b[a]}}function yb(a){var b=a+"";return a=Oc(a),function(c){return qb(c,a,b)}}function zb(a,b){for(var c=a?b.length:0;c--;){var d=b[c];if(d!=e&&Dc(d)){var e=d;le.call(a,d,1)}}}function Ab(a,b){return a+qe(ye()*(b-a+1))}function Bb(a,b,c,d,e){return e(a,function(a,e,f){c=d?(d=!1,a):b(c,a,e,f)}),c}function Cb(a,b,c){var d=-1,e=a.length;for(b=null==b?0:+b||0,0>b&&(b=-b>e?0:e+b),c=c===u||c>e?e:+c||0,0>c&&(c+=e),e=b>c?0:c-b>>>0,b>>>=0,c=Nd(e);++d<e;)c[d]=a[d+b];return c}function Db(a,b){var c;return He(a,function(a,d,e){return c=b(a,d,e),!c}),!!c}function Eb(a,b){var c=a.length;for(a.sort(b);c--;)a[c]=a[c].c;return a}function Fb(b,c,d){var e=tc(),f=-1;return c=Wa(c,function(a){return e(a)}),b=tb(b,function(a){return{a:Wa(c,function(b){return b(a)}),b:++f,c:a}}),Eb(b,function(b,c){var e;a:{for(var f=-1,g=b.a,h=c.a,i=g.length,j=d.length;++f<i;)if(e=a(g[f],h[f])){if(f>=j)break a;f=d[f],e*="asc"===f||!0===f?1:-1;break a}e=b.b-c.b}return e})}function Gb(a,b){var c=0;return He(a,function(a,d,e){c+=+b(a,d,e)||0}),c}function Hb(a,b){var d=-1,e=vc(),f=a.length,g=e===c,h=g&&f>=J,i=h&&pe&&je?new Oa(void 0):null,j=[];i?(e=Pa,g=!1):(h=!1,i=b?[]:j);a:for(;++d<f;){var k=a[d],l=b?b(k,d,a):k;if(g&&k===k){for(var m=i.length;m--;)if(i[m]===l)continue a;b&&i.push(l),j.push(k)}else 0>e(i,l,0)&&((b||h)&&i.push(l),j.push(k))}return j}function Ib(a,b){for(var c=-1,d=b.length,e=Nd(d);++c<d;)e[c]=a[b[c]];return e}function Jb(a,b,c,d){for(var e=a.length,f=d?e:-1;(d?f--:++f<e)&&b(a[f],f,a););return c?Cb(a,d?0:f,d?f+1:e):Cb(a,d?f+1:0,d?e:f)}function Kb(a,b){var c=a;c instanceof Ma&&(c=c.value());for(var d=-1,e=b.length;++d<e;)var f=b[d],c=f.func.apply(f.thisArg,Xa([c],f.args));return c}function Lb(a,b,c){var d=0,e=a?a.length:d;if("number"==typeof b&&b===b&&Ce>=e){for(;e>d;){var f=d+e>>>1,g=a[f];(c?b>=g:b>g)&&null!==g?d=f+1:e=f}return e}return Mb(a,b,Id,c)}function Mb(a,b,c,d){b=c(b);for(var e=0,f=a?a.length:0,g=b!==b,h=null===b,i=b===u;f>e;){var j=qe((e+f)/2),k=c(a[j]),l=k!==u,m=k===k;(g?m||d:h?m&&l&&(d||null!=k):i?m&&(d||l):null==k?0:d?b>=k:b>k)?e=j+1:f=j}return ve(f,Be)}function Nb(a,b,c){if("function"!=typeof a)return Id;if(b===u)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 3:return function(c,d,e){return a.call(b,c,d,e)};case 4:return function(c,d,e,f){return a.call(b,c,d,e,f)};case 5:return function(c,d,e,f,g){return a.call(b,c,d,e,f,g)}}return function(){return a.apply(b,arguments)}}function Ob(a){var b=new ee(a.byteLength);return new me(b).set(new me(a)),b}function Pb(a,b,c){for(var d=c.length,e=-1,f=ue(a.length-d,0),g=-1,h=b.length,i=Nd(h+f);++g<h;)i[g]=b[g];for(;++e<d;)i[c[e]]=a[e];for(;f--;)i[g++]=a[e++];return i}function Qb(a,b,c){for(var d=-1,e=c.length,f=-1,g=ue(a.length-e,0),h=-1,i=b.length,j=Nd(g+i);++f<g;)j[f]=a[f];for(g=f;++h<i;)j[g+h]=b[h];for(;++d<e;)j[g+c[d]]=a[f++];return j}function Rb(a,b){return function(c,d,e){var f=b?b():{};if(d=tc(d,e,3),Bf(c)){e=-1;for(var g=c.length;++e<g;){var h=c[e];a(f,h,d(h,e,c),c)}}else He(c,function(b,c,e){a(f,b,d(b,c,e),e)});return f}}function Sb(a){return jd(function(b,c){var d=-1,e=null==b?0:c.length,f=e>2?c[e-2]:u,g=e>2?c[2]:u,h=e>1?c[e-1]:u;for("function"==typeof f?(f=Nb(f,h,5),e-=2):(f="function"==typeof h?h:u,e-=f?1:0),g&&Ec(c[0],c[1],g)&&(f=3>e?u:f,e=1);++d<e;)(g=c[d])&&a(b,g,f);return b})}function Tb(a,b){return function(c,d){var e=c?Ne(c):0;if(!Hc(e))return a(c,d);for(var f=b?e:-1,g=Nc(c);(b?f--:++f<e)&&!1!==d(g[f],f,g););return c}}function Ub(a){return function(b,c,d){var e=Nc(b);d=d(b);for(var f=d.length,g=a?f:-1;a?g--:++g<f;){var h=d[g];if(!1===c(e[h],h,e))break}return b}}function Vb(a,b){function c(){return(this&&this!==Ua&&this instanceof c?d:a).apply(b,arguments)}var d=Xb(a);return c}function Wb(a){return function(b){var c=-1;b=Gd(Dd(b));for(var d=b.length,e="";++c<d;)e=a(e,b[c],c);return e}}function Xb(a){return function(){var b=arguments;switch(b.length){case 0:return new a;case 1:return new a(b[0]);case 2:return new a(b[0],b[1]);case 3:return new a(b[0],b[1],b[2]);case 4:return new a(b[0],b[1],b[2],b[3]);case 5:return new a(b[0],b[1],b[2],b[3],b[4]);case 6:return new a(b[0],b[1],b[2],b[3],b[4],b[5]);case 7:return new a(b[0],b[1],b[2],b[3],b[4],b[5],b[6])}var c=Ge(a.prototype),b=a.apply(c,b);return pd(b)?b:c}}function Yb(a){function b(c,d,e){return e&&Ec(c,d,e)&&(d=u),c=pc(c,a,u,u,u,u,u,d),c.placeholder=b.placeholder,c}return b}function Zb(a,b){return jd(function(c){var d=c[0];return null==d?d:(c.push(b),a.apply(u,c))})}function $b(a,b){return function(c,d,e){if(e&&Ec(c,d,e)&&(d=u),d=tc(d,e,3),1==d.length){e=c=Bf(c)?c:Mc(c);for(var f=d,g=-1,h=e.length,i=b,j=i;++g<h;){var k=e[g],l=+f(k);a(l,i)&&(i=l,j=k)}if(e=j,!c.length||e!==b)return e}return ib(c,d,a,b)}}function _b(a,c){return function(d,e,f){return e=tc(e,f,3),Bf(d)?(e=b(d,e,c),e>-1?d[e]:u):kb(d,e,a)}}function ac(a){return function(c,d,e){return c&&c.length?(d=tc(d,e,3),b(c,d,a)):-1}}function bc(a){return function(b,c,d){return c=tc(c,d,3),kb(b,c,a,!0)}}function cc(a){return function(){for(var b,c=arguments.length,d=a?c:-1,e=0,f=Nd(c);a?d--:++d<c;){var g=f[e++]=arguments[d];if("function"!=typeof g)throw new Wd(M);!b&&La.prototype.thru&&"wrapper"==uc(g)&&(b=new La([],!0))}for(d=b?-1:c;++d<c;){var g=f[d],e=uc(g),h="wrapper"==e?Me(g):u;b=h&&Gc(h[0])&&h[1]==(D|z|B|E)&&!h[4].length&&1==h[9]?b[uc(h[0])].apply(b,h[3]):1==g.length&&Gc(g)?b[e]():b.thru(g)}return function(){var a=arguments,d=a[0];if(b&&1==a.length&&Bf(d)&&d.length>=J)return b.plant(d).value();for(var e=0,a=c?f[e].apply(this,a):d;++e<c;)a=f[e].call(this,a);return a}}}function dc(a,b){return function(c,d,e){return"function"==typeof d&&e===u&&Bf(c)?a(c,d):b(c,Nb(d,e,3))}}function ec(a){return function(b,c,d){return("function"!=typeof c||d!==u)&&(c=Nb(c,d,3)),a(b,c,Ad)}}function fc(a){return function(b,c,d){return("function"!=typeof c||d!==u)&&(c=Nb(c,d,3)),a(b,c)}}function gc(a){return function(b,c,d){var e={};return c=tc(c,d,3),nb(b,function(b,d,f){f=c(b,d,f),d=a?f:d,b=a?b:f,e[d]=b}),e}}function hc(a){return function(b,c,d){return b=e(b),(a?b:"")+lc(b,c,d)+(a?"":b)}}function ic(a){var b=jd(function(c,d){var e=p(d,b.placeholder);return pc(c,a,u,d,e)});return b}function jc(a,b){return function(c,d,e,f){var g=3>arguments.length;return"function"==typeof d&&f===u&&Bf(c)?a(c,d,e,g):Bb(c,tc(d,f,4),e,g,b)}}function kc(a,b,c,d,e,f,g,h,i,j){function k(){for(var t=arguments.length,v=t,y=Nd(t);v--;)y[v]=arguments[v];if(d&&(y=Pb(y,d,e)),f&&(y=Qb(y,f,g)),o||r){var v=k.placeholder,z=p(y,v),t=t-z.length;if(j>t){var A=h?Qa(h):u,t=ue(j-t,0),D=o?z:u,z=o?u:z,E=o?y:u,y=o?u:y;return b|=o?B:C,b&=~(o?C:B),q||(b&=~(w|x)),y=[a,b,c,E,D,y,z,A,i,t],A=kc.apply(u,y),Gc(a)&&Oe(A,y),A.placeholder=v,A}}if(v=m?c:this,A=n?v[a]:a,h)for(t=y.length,D=ve(h.length,t),z=Qa(y);D--;)E=h[D],y[D]=Dc(E,t)?z[E]:u;return l&&i<y.length&&(y.length=i),this&&this!==Ua&&this instanceof k&&(A=s||Xb(a)),A.apply(v,y)}var l=b&D,m=b&w,n=b&x,o=b&z,q=b&y,r=b&A,s=n?u:Xb(a);return k}function lc(a,b,c){return a=a.length,b=+b,b>a&&se(b)?(b-=a,c=null==c?" ":c+"",Ed(c,oe(b/c.length)).slice(0,b)):""}function mc(a,b,c,d){function e(){for(var b=-1,h=arguments.length,i=-1,j=d.length,k=Nd(j+h);++i<j;)k[i]=d[i];for(;h--;)k[i++]=arguments[++b];return(this&&this!==Ua&&this instanceof e?g:a).apply(f?c:this,k)}var f=b&w,g=Xb(a);return e}function nc(a){var b=Rd[a];return function(a,c){return(c=c===u?0:+c||0)?(c=he(10,c),b(a*c)/c):b(a)}}function oc(a){return function(b,c,d,e){var f=tc(d);return null==d&&f===db?Lb(b,c,a):Mb(b,c,f(d,e,1),a)}}function pc(a,b,c,d,e,f,g,h){var i=b&x;if(!i&&"function"!=typeof a)throw new Wd(M);var j=d?d.length:0;if(j||(b&=~(B|C),d=e=u),j-=e?e.length:0,b&C){var k=d,l=e;d=e=u}var m=i?u:Me(a);return c=[a,b,c,d,e,k,l,f,g,h],m&&(d=c[1],b=m[1],h=d|b,e=b==D&&d==z||b==D&&d==E&&c[7].length<=m[8]||b==(D|E)&&d==z,(D>h||e)&&(b&w&&(c[2]=m[2],h|=d&w?0:y),(d=m[3])&&(e=c[3],c[3]=e?Pb(e,d,m[4]):Qa(d),c[4]=e?p(c[3],N):Qa(m[4])),(d=m[5])&&(e=c[5],c[5]=e?Qb(e,d,m[6]):Qa(d),c[6]=e?p(c[5],N):Qa(m[6])),(d=m[7])&&(c[7]=Qa(d)),b&D&&(c[8]=null==c[8]?m[8]:ve(c[8],m[8])),null==c[9]&&(c[9]=m[9]),c[0]=m[0],c[1]=h),b=c[1],h=c[9]),c[9]=null==h?i?0:a.length:ue(h-j,0)||0,(m?Le:Oe)(b==w?Vb(c[0],c[2]):b!=B&&b!=(w|B)||c[4].length?kc.apply(u,c):mc.apply(u,c),c)}function qc(a,b,c,d,e,f,g){var h=-1,i=a.length,j=b.length;if(i!=j&&(!e||i>=j))return!1;for(;++h<i;){var k=a[h],j=b[h],l=d?d(e?j:k,e?k:j,h):u;if(l!==u){if(l)continue;return!1}if(e){if(!Za(b,function(a){return k===a||c(k,a,d,e,f,g)}))return!1}else if(k!==j&&!c(k,j,d,e,f,g))return!1}return!0}function rc(a,b,c){switch(c){case Q:case R:return+a==+b;case S:return a.name==b.name&&a.message==b.message;case U:return a!=+a?b!=+b:a==+b;case W:case X:return a==b+""}return!1}function sc(a,b,c,d,e,f,g){var h=Mf(a),i=h.length,j=Mf(b).length;if(i!=j&&!e)return!1;for(j=i;j--;){var k=h[j];if(!(e?k in b:_d.call(b,k)))return!1}for(var l=e;++j<i;){var k=h[j],m=a[k],n=b[k],o=d?d(e?n:m,e?m:n,k):u;if(o===u?!c(m,n,d,e,f,g):!o)return!1;l||(l="constructor"==k)}return l||(c=a.constructor,d=b.constructor,!(c!=d&&"constructor"in a&&"constructor"in b)||"function"==typeof c&&c instanceof c&&"function"==typeof d&&d instanceof d)?!0:!1}function tc(a,b,c){var d=Ja.callback||Hd,d=d===Hd?db:d;return c?d(a,b,c):d}function uc(a){for(var b=a.name+"",c=Fe[b],d=c?c.length:0;d--;){var e=c[d],f=e.func;if(null==f||f==a)return e.name}return b}function vc(a,b,d){var e=Ja.indexOf||Tc,e=e===Tc?c:e;return a?e(a,b,d):e}function wc(a){a=Bd(a);for(var b=a.length;b--;){var c=a[b][1];a[b][2]=c===c&&!pd(c)}return a}function xc(a,b){var c=null==a?u:a[b];return qd(c)?c:u}function yc(a){var b=a.length,c=new a.constructor(b);return b&&"string"==typeof a[0]&&_d.call(a,"index")&&(c.index=a.index,c.input=a.input),c}function zc(a){return a=a.constructor,"function"==typeof a&&a instanceof a||(a=Td),new a}function Ac(a,b,c){var d=a.constructor;switch(b){case Y:return Ob(a);case Q:case R:return new d(+a);case Z:case $:case _:case aa:case ba:case ca:case da:case ea:case fa:return b=a.buffer,new d(c?Ob(b):b,a.byteOffset,a.length);case U:case X:return new d(a);case W:var e=new d(a.source,ya.exec(a));e.lastIndex=a.lastIndex}return e}function Bc(a,b,c){return null==a||Fc(b,a)||(b=Oc(b),a=1==b.length?a:qb(a,Cb(b,0,-1)),b=Uc(b)),b=null==a?a:a[b],null==b?u:b.apply(a,c)}function Cc(a){return null!=a&&Hc(Ne(a))}function Dc(a,b){return a="number"==typeof a||Ba.test(a)?+a:-1,b=null==b?De:b,a>-1&&0==a%1&&b>a}function Ec(a,b,c){if(!pd(c))return!1;var d=typeof b;return("number"==d?Cc(c)&&Dc(b,c.length):"string"==d&&b in c)?(b=c[b],a===a?a===b:b!==b):!1}function Fc(a,b){var c=typeof a;return"string"==c&&ra.test(a)||"number"==c?!0:Bf(a)?!1:!qa.test(a)||null!=b&&a in Nc(b)}function Gc(a){var b=uc(a),c=Ja[b];return"function"==typeof c&&b in Ma.prototype?a===c?!0:(b=Me(c),!!b&&a===b[0]):!1}function Hc(a){return"number"==typeof a&&a>-1&&0==a%1&&De>=a}function Ic(a,b){return a===u?b:Cf(a,b,Ic)}function Jc(a,b){a=Nc(a);for(var c=-1,d=b.length,e={};++c<d;){var f=b[c];f in a&&(e[f]=a[f])}return e}function Kc(a,b){var c={};return mb(a,function(a,d,e){b(a,d,e)&&(c[d]=a)}),c}function Lc(a){for(var b=Ad(a),c=b.length,d=c&&a.length,e=!!d&&Hc(d)&&(Bf(a)||ld(a)),f=-1,g=[];++f<c;){var h=b[f];(e&&Dc(h,d)||_d.call(a,h))&&g.push(h)}return g}function Mc(a){return null==a?[]:Cc(a)?pd(a)?a:Td(a):Cd(a)}function Nc(a){return pd(a)?a:Td(a)}function Oc(a){if(Bf(a))return a;var b=[];return e(a).replace(sa,function(a,c,d,e){b.push(d?e.replace(wa,"$1"):c||a)}),b}function Pc(a){return a instanceof Ma?a.clone():new La(a.__wrapped__,a.__chain__,Qa(a.__actions__))}function Qc(a,b,c){return a&&a.length?((c?Ec(a,b,c):null==b)&&(b=1),Cb(a,0>b?0:b)):[]}function Rc(a,b,c){var d=a?a.length:0;return d?((c?Ec(a,b,c):null==b)&&(b=1),b=d-(+b||0),Cb(a,0,0>b?0:b)):[]}function Sc(a){return a?a[0]:u}function Tc(a,b,d){var e=a?a.length:0;if(!e)return-1;if("number"==typeof d)d=0>d?ue(e+d,0):d;else if(d)return d=Lb(a,b),e>d&&(b===b?b===a[d]:a[d]!==a[d])?d:-1;return c(a,b,d||0)}function Uc(a){var b=a?a.length:0;return b?a[b-1]:u}function Vc(a){return Qc(a,1)}function Wc(a,b,d,e){if(!a||!a.length)return[];null!=b&&"boolean"!=typeof b&&(e=d,d=Ec(a,b,e)?u:b,b=!1);var f=tc();if((null!=d||f!==db)&&(d=f(d,e,3)),b&&vc()===c){b=d;var g;d=-1,e=a.length;for(var f=-1,h=[];++d<e;){var i=a[d],j=b?b(i,d,a):i;d&&g===j||(g=j,h[++f]=i)}a=h}else a=Hb(a,d);return a}function Xc(a){if(!a||!a.length)return[];var b=-1,c=0;a=Ta(a,function(a){return Cc(a)?(c=ue(a.length,c),!0):void 0});for(var d=Nd(c);++b<c;)d[b]=Wa(a,xb(b));return d}function Yc(a,b,c){return a&&a.length?(a=Xc(a),null==b?a:(b=Nb(b,c,4),Wa(a,function(a){return Ya(a,b,u,!0)}))):[]}function Zc(a,b){var c=-1,d=a?a.length:0,e={};for(!d||b||Bf(a[0])||(b=[]);++c<d;){var f=a[c];b?e[f]=b[c]:f&&(e[f[0]]=f[1])}return e}function $c(a){return a=Ja(a),a.__chain__=!0,a}function _c(a,b,c){return b.call(c,a)}function ad(a,b,c){var d=Bf(a)?Sa:hb;return c&&Ec(a,b,c)&&(b=u),("function"!=typeof b||c!==u)&&(b=tc(b,c,3)),d(a,b)}function bd(a,b,c){var d=Bf(a)?Ta:jb;return b=tc(b,c,3),d(a,b)}function cd(a,b,c,d){var e=a?Ne(a):0;return Hc(e)||(a=Cd(a),e=a.length),c="number"!=typeof c||d&&Ec(b,c,d)?0:0>c?ue(e+c,0):c||0,"string"==typeof a||!Bf(a)&&ud(a)?e>=c&&-1<a.indexOf(b,c):!!e&&-1<vc(a,b,c)}function dd(a,b,c){var d=Bf(a)?Wa:tb;return b=tc(b,c,3),d(a,b)}function ed(a,b,c){if(c?Ec(a,b,c):null==b){a=Mc(a);var d=a.length;return d>0?a[Ab(0,d-1)]:u}c=-1,a=xd(a);var d=a.length,e=d-1;for(b=ve(0>b?0:+b||0,d);++c<b;){var d=Ab(c,e),f=a[d];a[d]=a[c],a[c]=f}return a.length=b,a}function fd(a,b,c){var d=Bf(a)?Za:Db;return c&&Ec(a,b,c)&&(b=u),("function"!=typeof b||c!==u)&&(b=tc(b,c,3)),d(a,b)}function gd(a,b){var c;if("function"!=typeof b){if("function"!=typeof a)throw new Wd(M);var d=a;a=b,b=d}return function(){return 0<--a&&(c=b.apply(this,arguments)),1>=a&&(b=u),c}}function hd(a,b,c){function d(b,c){c&&fe(c),i=m=n=u,b&&(o=nf(),j=a.apply(l,h),m||i||(h=l=u))}function e(){var a=b-(nf()-k);0>=a||a>b?d(n,i):m=ke(e,a)}function f(){d(q,m)}function g(){if(h=arguments,k=nf(),l=this,n=q&&(m||!r),!1===p)var c=r&&!m;else{i||r||(o=k);var d=p-(k-o),g=0>=d||d>p;g?(i&&(i=fe(i)),o=k,j=a.apply(l,h)):i||(i=ke(f,d))}return g&&m?m=fe(m):m||b===p||(m=ke(e,b)),c&&(g=!0,j=a.apply(l,h)),!g||m||i||(h=l=u),j}var h,i,j,k,l,m,n,o=0,p=!1,q=!0;if("function"!=typeof a)throw new Wd(M);if(b=0>b?0:+b||0,!0===c)var r=!0,q=!1;else pd(c)&&(r=!!c.leading,p="maxWait"in c&&ue(+c.maxWait||0,b),q="trailing"in c?!!c.trailing:q);return g.cancel=function(){m&&fe(m),i&&fe(i),o=0,i=m=n=u},g}function id(a,b){function c(){var d=arguments,e=b?b.apply(this,d):d[0],f=c.cache;return f.has(e)?f.get(e):(d=a.apply(this,d),c.cache=f.set(e,d),d)}if("function"!=typeof a||b&&"function"!=typeof b)throw new Wd(M);return c.cache=new id.Cache,c}function jd(a,b){if("function"!=typeof a)throw new Wd(M);return b=ue(b===u?a.length-1:+b||0,0),function(){for(var c=arguments,d=-1,e=ue(c.length-b,0),f=Nd(e);++d<e;)f[d]=c[b+d];switch(b){case 0:return a.call(this,f);case 1:return a.call(this,c[0],f);case 2:return a.call(this,c[0],c[1],f)}for(e=Nd(b+1),d=-1;++d<b;)e[d]=c[d];return e[b]=f,a.apply(this,e)}}function kd(a,b){return a>b}function ld(a){return n(a)&&Cc(a)&&_d.call(a,"callee")&&!ie.call(a,"callee")}function md(a,b,c,d){return d=(c="function"==typeof c?Nb(c,d,3):u)?c(a,b):u,d===u?rb(a,b,c):!!d}function nd(a){return n(a)&&"string"==typeof a.message&&be.call(a)==S}function od(a){return pd(a)&&be.call(a)==T}function pd(a){var b=typeof a;return!!a&&("object"==b||"function"==b)}function qd(a){return null==a?!1:od(a)?de.test($d.call(a)):n(a)&&Aa.test(a)}function rd(a){return"number"==typeof a||n(a)&&be.call(a)==U}function sd(a){var b;if(!n(a)||be.call(a)!=V||ld(a)||!(_d.call(a,"constructor")||(b=a.constructor,"function"!=typeof b||b instanceof b)))return!1;var c;return mb(a,function(a,b){c=b}),c===u||_d.call(a,c)}function td(a){return pd(a)&&be.call(a)==W}function ud(a){return"string"==typeof a||n(a)&&be.call(a)==X}function vd(a){return n(a)&&Hc(a.length)&&!!Ha[be.call(a)]}function wd(a,b){return b>a}function xd(a){var b=a?Ne(a):0;return Hc(b)?b?Qa(a):[]:Cd(a)}function yd(a){return cb(a,Ad(a))}function zd(a){return pb(a,Ad(a))}function Ad(a){if(null==a)return[];pd(a)||(a=Td(a));for(var b=a.length,b=b&&Hc(b)&&(Bf(a)||ld(a))&&b||0,c=a.constructor,d=-1,c="function"==typeof c&&c.prototype===a,e=Nd(b),f=b>0;++d<b;)e[d]=d+"";for(var g in a)f&&Dc(g,b)||"constructor"==g&&(c||!_d.call(a,g))||e.push(g);return e}function Bd(a){a=Nc(a);for(var b=-1,c=Mf(a),d=c.length,e=Nd(d);++b<d;){var f=c[b];e[b]=[f,a[f]]}return e}function Cd(a){return Ib(a,Mf(a))}function Dd(a){return(a=e(a))&&a.replace(Ca,i).replace(va,"")}function Ed(a,b){var c="";if(a=e(a),b=+b,1>b||!a||!se(b))return c;do b%2&&(c+=a),b=qe(b/2),a+=a;while(b);return c}function Fd(a,b,c){var d=a;return(a=e(a))?(c?Ec(d,b,c):null==b)?a.slice(q(a),r(a)+1):(b+="",a.slice(f(a,b),g(a,b)+1)):a}function Gd(a,b,c){return c&&Ec(a,b,c)&&(b=u),a=e(a),a.match(b||Fa)||[]}function Hd(a,b,c){return c&&Ec(a,b,c)&&(b=u),n(a)?Jd(a):db(a,b)}function Id(a){return a}function Jd(a){return ub(eb(a,!0))}function Kd(a,b,c){if(null==c){var d=pd(b),e=d?Mf(b):u;((e=e&&e.length?pb(b,e):u)?e.length:d)||(e=!1,c=b,b=a,a=this)}e||(e=pb(b,Mf(b)));var f=!0,d=-1,g=od(a),h=e.length;!1===c?f=!1:pd(c)&&"chain"in c&&(f=c.chain);for(;++d<h;){c=e[d];var i=b[c];a[c]=i,g&&(a.prototype[c]=function(b){return function(){var c=this.__chain__;if(f||c){var d=a(this.__wrapped__);return(d.__actions__=Qa(this.__actions__)).push({func:b,args:arguments,thisArg:a}),d.__chain__=c,d}return b.apply(a,Xa([this.value()],arguments))}}(i))}return a}function Ld(){}function Md(a){return Fc(a)?xb(a):yb(a)}o=o?Va.defaults(Ua.Object(),o,Va.pick(Ua,Ga)):Ua;var Nd=o.Array,Od=o.Date,Pd=o.Error,Qd=o.Function,Rd=o.Math,Sd=o.Number,Td=o.Object,Ud=o.RegExp,Vd=o.String,Wd=o.TypeError,Xd=Nd.prototype,Yd=Td.prototype,Zd=Vd.prototype,$d=Qd.prototype.toString,_d=Yd.hasOwnProperty,ae=0,be=Yd.toString,ce=Ua._,de=Ud("^"+$d.call(_d).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),ee=o.ArrayBuffer,fe=o.clearTimeout,ge=o.parseFloat,he=Rd.pow,ie=Yd.propertyIsEnumerable,je=xc(o,"Set"),ke=o.setTimeout,le=Xd.splice,me=o.Uint8Array,ne=xc(o,"WeakMap"),oe=Rd.ceil,pe=xc(Td,"create"),qe=Rd.floor,re=xc(Nd,"isArray"),se=o.isFinite,te=xc(Td,"keys"),ue=Rd.max,ve=Rd.min,we=xc(Od,"now"),xe=o.parseInt,ye=Rd.random,ze=Sd.NEGATIVE_INFINITY,Ae=Sd.POSITIVE_INFINITY,Be=4294967294,Ce=2147483647,De=9007199254740991,Ee=ne&&new ne,Fe={};Ja.support={},Ja.templateSettings={escape:na,evaluate:oa,interpolate:pa,variable:"",imports:{_:Ja}};var Ge=function(){function a(){}return function(b){if(pd(b)){a.prototype=b;var c=new a;a.prototype=u}return c||{}}}(),He=Tb(nb),Ie=Tb(ob,!0),Je=Ub(),Ke=Ub(!0),Le=Ee?function(a,b){return Ee.set(a,b),a}:Id,Me=Ee?function(a){return Ee.get(a)}:Ld,Ne=xb("length"),Oe=function(){var a=0,b=0;return function(c,d){var e=nf(),f=I-(e-b);if(b=e,f>0){if(++a>=H)return c}else a=0;return Le(c,d)}}(),Pe=jd(function(a,b){return n(a)&&Cc(a)?gb(a,lb(b,!1,!0)):[]}),Qe=ac(),Re=ac(!0),Se=jd(function(a){for(var b=a.length,d=b,e=Nd(k),f=vc(),g=f===c,h=[];d--;){var i=a[d]=Cc(i=a[d])?i:[];e[d]=g&&120<=i.length&&pe&&je?new Oa(d&&i):null}var g=a[0],j=-1,k=g?g.length:0,l=e[0];a:for(;++j<k;)if(i=g[j],0>(l?Pa(l,i):f(h,i,0))){for(d=b;--d;){var m=e[d];if(0>(m?Pa(m,i):f(a[d],i,0)))continue a}l&&l.push(i),h.push(i)}return h}),Te=jd(function(b,c){c=lb(c);var d=bb(b,c);return zb(b,c.sort(a)),d}),Ue=oc(),Ve=oc(!0),We=jd(function(a){return Hb(lb(a,!1,!0))}),Xe=jd(function(a,b){return Cc(a)?gb(a,b):[]}),Ye=jd(Xc),Ze=jd(function(a){var b=a.length,c=b>2?a[b-2]:u,d=b>1?a[b-1]:u;return b>2&&"function"==typeof c?b-=2:(c=b>1&&"function"==typeof d?(--b,d):u,d=u),a.length=b,Yc(a,c,d)}),$e=jd(function(a){return a=lb(a),this.thru(function(b){b=Bf(b)?b:[Nc(b)];for(var c=a,d=-1,e=b.length,f=-1,g=c.length,h=Nd(e+g);++d<e;)h[d]=b[d];for(;++f<g;)h[d++]=c[f];return h})}),_e=jd(function(a,b){return bb(a,lb(b))}),af=Rb(function(a,b,c){_d.call(a,c)?++a[c]:a[c]=1}),bf=_b(He),cf=_b(Ie,!0),df=dc(Ra,He),ef=dc(function(a,b){for(var c=a.length;c--&&!1!==b(a[c],c,a););return a},Ie),ff=Rb(function(a,b,c){_d.call(a,c)?a[c].push(b):a[c]=[b]}),gf=Rb(function(a,b,c){a[c]=b}),hf=jd(function(a,b,c){var d=-1,e="function"==typeof b,f=Fc(b),g=Cc(a)?Nd(a.length):[];return He(a,function(a){var h=e?b:f&&null!=a?a[b]:u;g[++d]=h?h.apply(a,c):Bc(a,b,c)}),g}),jf=Rb(function(a,b,c){a[c?0:1].push(b)},function(){return[[],[]]}),kf=jc(Ya,He),lf=jc(function(a,b,c,d){var e=a.length;for(d&&e&&(c=a[--e]);e--;)c=b(c,a[e],e,a);return c},Ie),mf=jd(function(a,b){if(null==a)return[];var c=b[2];return c&&Ec(b[0],b[1],c)&&(b.length=1),Fb(a,lb(b),[])}),nf=we||function(){return(new Od).getTime()},of=jd(function(a,b,c){var d=w;if(c.length)var e=p(c,of.placeholder),d=d|B;return pc(a,d,b,c,e)}),pf=jd(function(a,b){b=b.length?lb(b):zd(a);for(var c=-1,d=b.length;++c<d;){var e=b[c];a[e]=pc(a[e],w,a)}return a}),qf=jd(function(a,b,c){var d=w|x;if(c.length)var e=p(c,qf.placeholder),d=d|B;return pc(b,d,a,c,e)}),rf=Yb(z),sf=Yb(A),tf=jd(function(a,b){return fb(a,1,b)}),uf=jd(function(a,b,c){return fb(a,b,c)}),vf=cc(),wf=cc(!0),xf=jd(function(a,b){if(b=lb(b),"function"!=typeof a||!Sa(b,d))throw new Wd(M);var c=b.length;return jd(function(d){for(var e=ve(d.length,c);e--;)d[e]=b[e](d[e]);return a.apply(this,d)})}),yf=ic(B),zf=ic(C),Af=jd(function(a,b){return pc(a,E,u,u,u,lb(b))}),Bf=re||function(a){return n(a)&&Hc(a.length)&&be.call(a)==P},Cf=Sb(wb),Df=Sb(function(a,b,c){return c?_a(a,b,c):ab(a,b)}),Ef=Zb(Df,function(a,b){return a===u?b:a}),Ff=Zb(Cf,Ic),Gf=bc(nb),Hf=bc(ob),If=ec(Je),Jf=ec(Ke),Kf=fc(nb),Lf=fc(ob),Mf=te?function(a){var b=null==a?u:a.constructor;return"function"==typeof b&&b.prototype===a||"function"!=typeof a&&Cc(a)?Lc(a):pd(a)?te(a):[]}:Lc,Nf=gc(!0),Of=gc(),Pf=jd(function(a,b){if(null==a)return{};if("function"!=typeof b[0])return b=Wa(lb(b),Vd),Jc(a,gb(Ad(a),b));var c=Nb(b[0],b[1],3);return Kc(a,function(a,b,d){return!c(a,b,d)})}),Qf=jd(function(a,b){return null==a?{}:"function"==typeof b[0]?Kc(a,Nb(b[0],b[1],3)):Jc(a,lb(b))}),Rf=Wb(function(a,b,c){return b=b.toLowerCase(),a+(c?b.charAt(0).toUpperCase()+b.slice(1):b)}),Sf=Wb(function(a,b,c){return a+(c?"-":"")+b.toLowerCase()}),Tf=hc(),Uf=hc(!0),Vf=Wb(function(a,b,c){return a+(c?"_":"")+b.toLowerCase()}),Wf=Wb(function(a,b,c){return a+(c?" ":"")+(b.charAt(0).toUpperCase()+b.slice(1))}),Xf=jd(function(a,b){try{return a.apply(u,b)}catch(c){return nd(c)?c:new Pd(c)}}),Yf=jd(function(a,b){return function(c){return Bc(c,a,b)}}),Zf=jd(function(a,b){return function(c){return Bc(a,c,b)}}),$f=nc("ceil"),_f=nc("floor"),ag=$b(kd,ze),bg=$b(wd,Ae),cg=nc("round");return Ja.prototype=Ka.prototype,La.prototype=Ge(Ka.prototype),La.prototype.constructor=La,Ma.prototype=Ge(Ka.prototype),Ma.prototype.constructor=Ma,Na.prototype["delete"]=function(a){return this.has(a)&&delete this.__data__[a]},Na.prototype.get=function(a){return"__proto__"==a?u:this.__data__[a]},Na.prototype.has=function(a){return"__proto__"!=a&&_d.call(this.__data__,a)},Na.prototype.set=function(a,b){return"__proto__"!=a&&(this.__data__[a]=b),this},Oa.prototype.push=function(a){var b=this.data;"string"==typeof a||pd(a)?b.set.add(a):b.hash[a]=!0},id.Cache=Na,Ja.after=function(a,b){if("function"!=typeof b){if("function"!=typeof a)throw new Wd(M);var c=a;a=b,b=c}return a=se(a=+a)?a:0,function(){return 1>--a?b.apply(this,arguments):void 0}},Ja.ary=function(a,b,c){return c&&Ec(a,b,c)&&(b=u),b=a&&null==b?a.length:ue(+b||0,0),
+pc(a,D,u,u,u,u,b)},Ja.assign=Df,Ja.at=_e,Ja.before=gd,Ja.bind=of,Ja.bindAll=pf,Ja.bindKey=qf,Ja.callback=Hd,Ja.chain=$c,Ja.chunk=function(a,b,c){b=(c?Ec(a,b,c):null==b)?1:ue(qe(b)||1,1),c=0;for(var d=a?a.length:0,e=-1,f=Nd(oe(d/b));d>c;)f[++e]=Cb(a,c,c+=b);return f},Ja.compact=function(a){for(var b=-1,c=a?a.length:0,d=-1,e=[];++b<c;){var f=a[b];f&&(e[++d]=f)}return e},Ja.constant=function(a){return function(){return a}},Ja.countBy=af,Ja.create=function(a,b,c){var d=Ge(a);return c&&Ec(a,b,c)&&(b=u),b?ab(d,b):d},Ja.curry=rf,Ja.curryRight=sf,Ja.debounce=hd,Ja.defaults=Ef,Ja.defaultsDeep=Ff,Ja.defer=tf,Ja.delay=uf,Ja.difference=Pe,Ja.drop=Qc,Ja.dropRight=Rc,Ja.dropRightWhile=function(a,b,c){return a&&a.length?Jb(a,tc(b,c,3),!0,!0):[]},Ja.dropWhile=function(a,b,c){return a&&a.length?Jb(a,tc(b,c,3),!0):[]},Ja.fill=function(a,b,c,d){var e=a?a.length:0;if(!e)return[];for(c&&"number"!=typeof c&&Ec(a,b,c)&&(c=0,d=e),e=a.length,c=null==c?0:+c||0,0>c&&(c=-c>e?0:e+c),d=d===u||d>e?e:+d||0,0>d&&(d+=e),e=c>d?0:d>>>0,c>>>=0;e>c;)a[c++]=b;return a},Ja.filter=bd,Ja.flatten=function(a,b,c){var d=a?a.length:0;return c&&Ec(a,b,c)&&(b=!1),d?lb(a,b):[]},Ja.flattenDeep=function(a){return a&&a.length?lb(a,!0):[]},Ja.flow=vf,Ja.flowRight=wf,Ja.forEach=df,Ja.forEachRight=ef,Ja.forIn=If,Ja.forInRight=Jf,Ja.forOwn=Kf,Ja.forOwnRight=Lf,Ja.functions=zd,Ja.groupBy=ff,Ja.indexBy=gf,Ja.initial=function(a){return Rc(a,1)},Ja.intersection=Se,Ja.invert=function(a,b,c){c&&Ec(a,b,c)&&(b=u),c=-1;for(var d=Mf(a),e=d.length,f={};++c<e;){var g=d[c],h=a[g];b?_d.call(f,h)?f[h].push(g):f[h]=[g]:f[h]=g}return f},Ja.invoke=hf,Ja.keys=Mf,Ja.keysIn=Ad,Ja.map=dd,Ja.mapKeys=Nf,Ja.mapValues=Of,Ja.matches=Jd,Ja.matchesProperty=function(a,b){return vb(a,eb(b,!0))},Ja.memoize=id,Ja.merge=Cf,Ja.method=Yf,Ja.methodOf=Zf,Ja.mixin=Kd,Ja.modArgs=xf,Ja.negate=function(a){if("function"!=typeof a)throw new Wd(M);return function(){return!a.apply(this,arguments)}},Ja.omit=Pf,Ja.once=function(a){return gd(2,a)},Ja.pairs=Bd,Ja.partial=yf,Ja.partialRight=zf,Ja.partition=jf,Ja.pick=Qf,Ja.pluck=function(a,b){return dd(a,Md(b))},Ja.property=Md,Ja.propertyOf=function(a){return function(b){return qb(a,Oc(b),b+"")}},Ja.pull=function(){var a=arguments,b=a[0];if(!b||!b.length)return b;for(var c=0,d=vc(),e=a.length;++c<e;)for(var f=0,g=a[c];-1<(f=d(b,g,f));)le.call(b,f,1);return b},Ja.pullAt=Te,Ja.range=function(a,b,c){c&&Ec(a,b,c)&&(b=c=u),a=+a||0,c=null==c?1:+c||0,null==b?(b=a,a=0):b=+b||0;var d=-1;b=ue(oe((b-a)/(c||1)),0);for(var e=Nd(b);++d<b;)e[d]=a,a+=c;return e},Ja.rearg=Af,Ja.reject=function(a,b,c){var d=Bf(a)?Ta:jb;return b=tc(b,c,3),d(a,function(a,c,d){return!b(a,c,d)})},Ja.remove=function(a,b,c){var d=[];if(!a||!a.length)return d;var e=-1,f=[],g=a.length;for(b=tc(b,c,3);++e<g;)c=a[e],b(c,e,a)&&(d.push(c),f.push(e));return zb(a,f),d},Ja.rest=Vc,Ja.restParam=jd,Ja.set=function(a,b,c){if(null==a)return a;var d=b+"";b=null!=a[d]||Fc(b,a)?[d]:Oc(b);for(var d=-1,e=b.length,f=e-1,g=a;null!=g&&++d<e;){var h=b[d];pd(g)&&(d==f?g[h]=c:null==g[h]&&(g[h]=Dc(b[d+1])?[]:{})),g=g[h]}return a},Ja.shuffle=function(a){return ed(a,Ae)},Ja.slice=function(a,b,c){var d=a?a.length:0;return d?(c&&"number"!=typeof c&&Ec(a,b,c)&&(b=0,c=d),Cb(a,b,c)):[]},Ja.sortBy=function(a,b,c){if(null==a)return[];c&&Ec(a,b,c)&&(b=u);var d=-1;return b=tc(b,c,3),a=tb(a,function(a,c,e){return{a:b(a,c,e),b:++d,c:a}}),Eb(a,h)},Ja.sortByAll=mf,Ja.sortByOrder=function(a,b,c,d){return null==a?[]:(d&&Ec(b,c,d)&&(c=u),Bf(b)||(b=null==b?[]:[b]),Bf(c)||(c=null==c?[]:[c]),Fb(a,b,c))},Ja.spread=function(a){if("function"!=typeof a)throw new Wd(M);return function(b){return a.apply(this,b)}},Ja.take=function(a,b,c){return a&&a.length?((c?Ec(a,b,c):null==b)&&(b=1),Cb(a,0,0>b?0:b)):[]},Ja.takeRight=function(a,b,c){var d=a?a.length:0;return d?((c?Ec(a,b,c):null==b)&&(b=1),b=d-(+b||0),Cb(a,0>b?0:b)):[]},Ja.takeRightWhile=function(a,b,c){return a&&a.length?Jb(a,tc(b,c,3),!1,!0):[]},Ja.takeWhile=function(a,b,c){return a&&a.length?Jb(a,tc(b,c,3)):[]},Ja.tap=function(a,b,c){return b.call(c,a),a},Ja.throttle=function(a,b,c){var d=!0,e=!0;if("function"!=typeof a)throw new Wd(M);return!1===c?d=!1:pd(c)&&(d="leading"in c?!!c.leading:d,e="trailing"in c?!!c.trailing:e),hd(a,b,{leading:d,maxWait:+b,trailing:e})},Ja.thru=_c,Ja.times=function(a,b,c){if(a=qe(a),1>a||!se(a))return[];var d=-1,e=Nd(ve(a,4294967295));for(b=Nb(b,c,1);++d<a;)4294967295>d?e[d]=b(d):b(d);return e},Ja.toArray=xd,Ja.toPlainObject=yd,Ja.transform=function(a,b,c,d){var e=Bf(a)||vd(a);return b=tc(b,d,4),null==c&&(e||pd(a)?(d=a.constructor,c=e?Bf(a)?new d:[]:Ge(od(d)?d.prototype:u)):c={}),(e?Ra:nb)(a,function(a,d,e){return b(c,a,d,e)}),c},Ja.union=We,Ja.uniq=Wc,Ja.unzip=Xc,Ja.unzipWith=Yc,Ja.values=Cd,Ja.valuesIn=function(a){return Ib(a,Ad(a))},Ja.where=function(a,b){return bd(a,ub(b))},Ja.without=Xe,Ja.wrap=function(a,b){return b=null==b?Id:b,pc(b,B,u,[a],[])},Ja.xor=function(){for(var a=-1,b=arguments.length;++a<b;){var c=arguments[a];if(Cc(c))var d=d?Xa(gb(d,c),gb(c,d)):c}return d?Hb(d):[]},Ja.zip=Ye,Ja.zipObject=Zc,Ja.zipWith=Ze,Ja.backflow=wf,Ja.collect=dd,Ja.compose=wf,Ja.each=df,Ja.eachRight=ef,Ja.extend=Df,Ja.iteratee=Hd,Ja.methods=zd,Ja.object=Zc,Ja.select=bd,Ja.tail=Vc,Ja.unique=Wc,Kd(Ja,Ja),Ja.add=function(a,b){return(+a||0)+(+b||0)},Ja.attempt=Xf,Ja.camelCase=Rf,Ja.capitalize=function(a){return(a=e(a))&&a.charAt(0).toUpperCase()+a.slice(1)},Ja.ceil=$f,Ja.clone=function(a,b,c,d){return b&&"boolean"!=typeof b&&Ec(a,b,c)?b=!1:"function"==typeof b&&(d=c,c=b,b=!1),"function"==typeof c?eb(a,b,Nb(c,d,3)):eb(a,b)},Ja.cloneDeep=function(a,b,c){return"function"==typeof b?eb(a,!0,Nb(b,c,3)):eb(a,!0)},Ja.deburr=Dd,Ja.endsWith=function(a,b,c){a=e(a),b+="";var d=a.length;return c=c===u?d:ve(0>c?0:+c||0,d),c-=b.length,c>=0&&a.indexOf(b,c)==c},Ja.escape=function(a){return(a=e(a))&&ma.test(a)?a.replace(ka,j):a},Ja.escapeRegExp=function(a){return(a=e(a))&&ua.test(a)?a.replace(ta,k):a||"(?:)"},Ja.every=ad,Ja.find=bf,Ja.findIndex=Qe,Ja.findKey=Gf,Ja.findLast=cf,Ja.findLastIndex=Re,Ja.findLastKey=Hf,Ja.findWhere=function(a,b){return bf(a,ub(b))},Ja.first=Sc,Ja.floor=_f,Ja.get=function(a,b,c){return a=null==a?u:qb(a,Oc(b),b+""),a===u?c:a},Ja.gt=kd,Ja.gte=function(a,b){return a>=b},Ja.has=function(a,b){if(null==a)return!1;var c=_d.call(a,b);if(!c&&!Fc(b)){if(b=Oc(b),a=1==b.length?a:qb(a,Cb(b,0,-1)),null==a)return!1;b=Uc(b),c=_d.call(a,b)}return c||Hc(a.length)&&Dc(b,a.length)&&(Bf(a)||ld(a))},Ja.identity=Id,Ja.includes=cd,Ja.indexOf=Tc,Ja.inRange=function(a,b,c){return b=+b||0,c===u?(c=b,b=0):c=+c||0,a>=ve(b,c)&&a<ue(b,c)},Ja.isArguments=ld,Ja.isArray=Bf,Ja.isBoolean=function(a){return!0===a||!1===a||n(a)&&be.call(a)==Q},Ja.isDate=function(a){return n(a)&&be.call(a)==R},Ja.isElement=function(a){return!!a&&1===a.nodeType&&n(a)&&!sd(a)},Ja.isEmpty=function(a){return null==a?!0:Cc(a)&&(Bf(a)||ud(a)||ld(a)||n(a)&&od(a.splice))?!a.length:!Mf(a).length},Ja.isEqual=md,Ja.isError=nd,Ja.isFinite=function(a){return"number"==typeof a&&se(a)},Ja.isFunction=od,Ja.isMatch=function(a,b,c,d){return c="function"==typeof c?Nb(c,d,3):u,sb(a,wc(b),c)},Ja.isNaN=function(a){return rd(a)&&a!=+a},Ja.isNative=qd,Ja.isNull=function(a){return null===a},Ja.isNumber=rd,Ja.isObject=pd,Ja.isPlainObject=sd,Ja.isRegExp=td,Ja.isString=ud,Ja.isTypedArray=vd,Ja.isUndefined=function(a){return a===u},Ja.kebabCase=Sf,Ja.last=Uc,Ja.lastIndexOf=function(a,b,c){var d=a?a.length:0;if(!d)return-1;var e=d;if("number"==typeof c)e=(0>c?ue(d+c,0):ve(c||0,d-1))+1;else if(c)return e=Lb(a,b,!0)-1,a=a[e],(b===b?b===a:a!==a)?e:-1;if(b!==b)return m(a,e,!0);for(;e--;)if(a[e]===b)return e;return-1},Ja.lt=wd,Ja.lte=function(a,b){return b>=a},Ja.max=ag,Ja.min=bg,Ja.noConflict=function(){return Ua._=ce,this},Ja.noop=Ld,Ja.now=nf,Ja.pad=function(a,b,c){a=e(a),b=+b;var d=a.length;return b>d&&se(b)?(d=(b-d)/2,b=qe(d),d=oe(d),c=lc("",d,c),c.slice(0,b)+a+c):a},Ja.padLeft=Tf,Ja.padRight=Uf,Ja.parseInt=function(a,b,c){return(c?Ec(a,b,c):null==b)?b=0:b&&(b=+b),a=Fd(a),xe(a,b||(za.test(a)?16:10))},Ja.random=function(a,b,c){c&&Ec(a,b,c)&&(b=c=u);var d=null==a,e=null==b;return null==c&&(e&&"boolean"==typeof a?(c=a,a=1):"boolean"==typeof b&&(c=b,e=!0)),d&&e&&(b=1,e=!1),a=+a||0,e?(b=a,a=0):b=+b||0,c||a%1||b%1?(c=ye(),ve(a+c*(b-a+ge("1e-"+((c+"").length-1))),b)):Ab(a,b)},Ja.reduce=kf,Ja.reduceRight=lf,Ja.repeat=Ed,Ja.result=function(a,b,c){var d=null==a?u:a[b];return d===u&&(null==a||Fc(b,a)||(b=Oc(b),a=1==b.length?a:qb(a,Cb(b,0,-1)),d=null==a?u:a[Uc(b)]),d=d===u?c:d),od(d)?d.call(a):d},Ja.round=cg,Ja.runInContext=t,Ja.size=function(a){var b=a?Ne(a):0;return Hc(b)?b:Mf(a).length},Ja.snakeCase=Vf,Ja.some=fd,Ja.sortedIndex=Ue,Ja.sortedLastIndex=Ve,Ja.startCase=Wf,Ja.startsWith=function(a,b,c){return a=e(a),c=null==c?0:ve(0>c?0:+c||0,a.length),a.lastIndexOf(b,c)==c},Ja.sum=function(a,b,c){if(c&&Ec(a,b,c)&&(b=u),b=tc(b,c,3),1==b.length){a=Bf(a)?a:Mc(a),c=a.length;for(var d=0;c--;)d+=+b(a[c])||0;a=d}else a=Gb(a,b);return a},Ja.template=function(a,b,c){var d=Ja.templateSettings;c&&Ec(a,b,c)&&(b=c=u),a=e(a),b=_a(ab({},c||b),d,$a),c=_a(ab({},b.imports),d.imports,$a);var f,g,h=Mf(c),i=Ib(c,h),j=0;c=b.interpolate||Da;var k="__p+='";c=Ud((b.escape||Da).source+"|"+c.source+"|"+(c===pa?xa:Da).source+"|"+(b.evaluate||Da).source+"|$","g");var m="sourceURL"in b?"//# sourceURL="+b.sourceURL+"\n":"";if(a.replace(c,function(b,c,d,e,h,i){return d||(d=e),k+=a.slice(j,i).replace(Ea,l),c&&(f=!0,k+="'+__e("+c+")+'"),h&&(g=!0,k+="';"+h+";\n__p+='"),d&&(k+="'+((__t=("+d+"))==null?'':__t)+'"),j=i+b.length,b}),k+="';",(b=b.variable)||(k="with(obj){"+k+"}"),k=(g?k.replace(ga,""):k).replace(ha,"$1").replace(ia,"$1;"),k="function("+(b||"obj")+"){"+(b?"":"obj||(obj={});")+"var __t,__p=''"+(f?",__e=_.escape":"")+(g?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+k+"return __p}",b=Xf(function(){return Qd(h,m+"return "+k).apply(u,i)}),b.source=k,nd(b))throw b;return b},Ja.trim=Fd,Ja.trimLeft=function(a,b,c){var d=a;return(a=e(a))?a.slice((c?Ec(d,b,c):null==b)?q(a):f(a,b+"")):a},Ja.trimRight=function(a,b,c){var d=a;return(a=e(a))?(c?Ec(d,b,c):null==b)?a.slice(0,r(a)+1):a.slice(0,g(a,b+"")+1):a},Ja.trunc=function(a,b,c){c&&Ec(a,b,c)&&(b=u);var d=F;if(c=G,null!=b)if(pd(b)){var f="separator"in b?b.separator:f,d="length"in b?+b.length||0:d;c="omission"in b?e(b.omission):c}else d=+b||0;if(a=e(a),d>=a.length)return a;if(d-=c.length,1>d)return c;if(b=a.slice(0,d),null==f)return b+c;if(td(f)){if(a.slice(d).search(f)){var g,h=a.slice(0,d);for(f.global||(f=Ud(f.source,(ya.exec(f)||"")+"g")),f.lastIndex=0;a=f.exec(h);)g=a.index;b=b.slice(0,null==g?d:g)}}else a.indexOf(f,d)!=d&&(f=b.lastIndexOf(f),f>-1&&(b=b.slice(0,f)));return b+c},Ja.unescape=function(a){return(a=e(a))&&la.test(a)?a.replace(ja,s):a},Ja.uniqueId=function(a){var b=++ae;return e(a)+b},Ja.words=Gd,Ja.all=ad,Ja.any=fd,Ja.contains=cd,Ja.eq=md,Ja.detect=bf,Ja.foldl=kf,Ja.foldr=lf,Ja.head=Sc,Ja.include=cd,Ja.inject=kf,Kd(Ja,function(){var a={};return nb(Ja,function(b,c){Ja.prototype[c]||(a[c]=b)}),a}(),!1),Ja.sample=ed,Ja.prototype.sample=function(a){return this.__chain__||null!=a?this.thru(function(b){return ed(b,a)}):ed(this.value())},Ja.VERSION=v,Ra("bind bindKey curry curryRight partial partialRight".split(" "),function(a){Ja[a].placeholder=Ja}),Ra(["drop","take"],function(a,b){Ma.prototype[a]=function(c){var d=this.__filtered__;if(d&&!b)return new Ma(this);c=null==c?1:ue(qe(c)||0,0);var e=this.clone();return d?e.__takeCount__=ve(e.__takeCount__,c):e.__views__.push({size:c,type:a+(0>e.__dir__?"Right":"")}),e},Ma.prototype[a+"Right"]=function(b){return this.reverse()[a](b).reverse()}}),Ra(["filter","map","takeWhile"],function(a,b){var c=b+1,d=c!=L;Ma.prototype[a]=function(a,b){var e=this.clone();return e.__iteratees__.push({iteratee:tc(a,b,1),type:c}),e.__filtered__=e.__filtered__||d,e}}),Ra(["first","last"],function(a,b){var c="take"+(b?"Right":"");Ma.prototype[a]=function(){return this[c](1).value()[0]}}),Ra(["initial","rest"],function(a,b){var c="drop"+(b?"":"Right");Ma.prototype[a]=function(){return this.__filtered__?new Ma(this):this[c](1)}}),Ra(["pluck","where"],function(a,b){var c=b?"filter":"map",d=b?ub:Md;Ma.prototype[a]=function(a){return this[c](d(a))}}),Ma.prototype.compact=function(){return this.filter(Id)},Ma.prototype.reject=function(a,b){return a=tc(a,b,1),this.filter(function(b){return!a(b)})},Ma.prototype.slice=function(a,b){a=null==a?0:+a||0;var c=this;return c.__filtered__&&(a>0||0>b)?new Ma(c):(0>a?c=c.takeRight(-a):a&&(c=c.drop(a)),b!==u&&(b=+b||0,c=0>b?c.dropRight(-b):c.take(b-a)),c)},Ma.prototype.takeRightWhile=function(a,b){return this.reverse().takeWhile(a,b).reverse()},Ma.prototype.toArray=function(){return this.take(Ae)},nb(Ma.prototype,function(a,b){var c=/^(?:filter|map|reject)|While$/.test(b),d=/^(?:first|last)$/.test(b),e=Ja[d?"take"+("last"==b?"Right":""):b];e&&(Ja.prototype[b]=function(){function b(a){return d&&g?e(a,1)[0]:e.apply(u,Xa([a],f))}var f=d?[1]:arguments,g=this.__chain__,h=this.__wrapped__,i=!!this.__actions__.length,j=h instanceof Ma,k=f[0],l=j||Bf(h);return l&&c&&"function"==typeof k&&1!=k.length&&(j=l=!1),k={func:_c,args:[b],thisArg:u},i=j&&!i,d&&!g?i?(h=h.clone(),h.__actions__.push(k),a.call(h)):e.call(u,this.value())[0]:!d&&l?(h=i?h:new Ma(this),h=a.apply(h,f),h.__actions__.push(k),new La(h,g)):this.thru(b)})}),Ra("join pop push replace shift sort splice split unshift".split(" "),function(a){var b=(/^(?:replace|split)$/.test(a)?Zd:Xd)[a],c=/^(?:push|sort|unshift)$/.test(a)?"tap":"thru",d=/^(?:join|pop|replace|shift)$/.test(a);Ja.prototype[a]=function(){var a=arguments;return d&&!this.__chain__?b.apply(this.value(),a):this[c](function(c){return b.apply(c,a)})}}),nb(Ma.prototype,function(a,b){var c=Ja[b];if(c){var d=c.name+"";(Fe[d]||(Fe[d]=[])).push({name:b,func:c})}}),Fe[kc(u,x).name]=[{name:"wrapper",func:u}],Ma.prototype.clone=function(){var a=new Ma(this.__wrapped__);return a.__actions__=Qa(this.__actions__),a.__dir__=this.__dir__,a.__filtered__=this.__filtered__,a.__iteratees__=Qa(this.__iteratees__),a.__takeCount__=this.__takeCount__,a.__views__=Qa(this.__views__),a},Ma.prototype.reverse=function(){if(this.__filtered__){var a=new Ma(this);a.__dir__=-1,a.__filtered__=!0}else a=this.clone(),a.__dir__*=-1;return a},Ma.prototype.value=function(){var a,b=this.__wrapped__.value(),c=this.__dir__,d=Bf(b),e=0>c,f=d?b.length:0;a=f;for(var g=this.__views__,h=0,i=-1,j=g.length;++i<j;){var k=g[i],l=k.size;switch(k.type){case"drop":h+=l;break;case"dropRight":a-=l;break;case"take":a=ve(a,h+l);break;case"takeRight":h=ue(h,a-l)}}if(a={start:h,end:a},g=a.start,h=a.end,a=h-g,e=e?h:g-1,g=this.__iteratees__,h=g.length,i=0,j=ve(a,this.__takeCount__),!d||J>f||f==a&&j==a)return Kb(b,this.__actions__);d=[];a:for(;a--&&j>i;){for(e+=c,f=-1,k=b[e];++f<h;){var m=g[f],l=m.type,m=m.iteratee(k);if(l==L)k=m;else if(!m){if(l==K)continue a;break a}}d[i++]=k}return d},Ja.prototype.chain=function(){return $c(this)},Ja.prototype.commit=function(){return new La(this.value(),this.__chain__)},Ja.prototype.concat=$e,Ja.prototype.plant=function(a){for(var b,c=this;c instanceof Ka;){var d=Pc(c);b?e.__wrapped__=d:b=d;var e=d,c=c.__wrapped__}return e.__wrapped__=a,b},Ja.prototype.reverse=function(){function a(a){return a.reverse()}var b=this.__wrapped__;return b instanceof Ma?(this.__actions__.length&&(b=new Ma(this)),b=b.reverse(),b.__actions__.push({func:_c,args:[a],thisArg:u}),new La(b,this.__chain__)):this.thru(a)},Ja.prototype.toString=function(){return this.value()+""},Ja.prototype.run=Ja.prototype.toJSON=Ja.prototype.valueOf=Ja.prototype.value=function(){return Kb(this.__wrapped__,this.__actions__)},Ja.prototype.collect=Ja.prototype.map,Ja.prototype.head=Ja.prototype.first,Ja.prototype.select=Ja.prototype.filter,Ja.prototype.tail=Ja.prototype.rest,Ja}var u,v="3.10.1",w=1,x=2,y=4,z=8,A=16,B=32,C=64,D=128,E=256,F=30,G="...",H=150,I=16,J=200,K=1,L=2,M="Expected a function",N="__lodash_placeholder__",O="[object Arguments]",P="[object Array]",Q="[object Boolean]",R="[object Date]",S="[object Error]",T="[object Function]",U="[object Number]",V="[object Object]",W="[object RegExp]",X="[object String]",Y="[object ArrayBuffer]",Z="[object Float32Array]",$="[object Float64Array]",_="[object Int8Array]",aa="[object Int16Array]",ba="[object Int32Array]",ca="[object Uint8Array]",da="[object Uint8ClampedArray]",ea="[object Uint16Array]",fa="[object Uint32Array]",ga=/\b__p\+='';/g,ha=/\b(__p\+=)''\+/g,ia=/(__e\(.*?\)|\b__t\))\+'';/g,ja=/&(?:amp|lt|gt|quot|#39|#96);/g,ka=/[&<>"'`]/g,la=RegExp(ja.source),ma=RegExp(ka.source),na=/<%-([\s\S]+?)%>/g,oa=/<%([\s\S]+?)%>/g,pa=/<%=([\s\S]+?)%>/g,qa=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,ra=/^\w*$/,sa=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,ta=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,ua=RegExp(ta.source),va=/[\u0300-\u036f\ufe20-\ufe23]/g,wa=/\\(\\)?/g,xa=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ya=/\w*$/,za=/^0[xX]/,Aa=/^\[object .+?Constructor\]$/,Ba=/^\d+$/,Ca=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Da=/($^)/,Ea=/['\n\r\u2028\u2029\\]/g,Fa=RegExp("[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?=[A-Z\\xc0-\\xd6\\xd8-\\xde][a-z\\xdf-\\xf6\\xf8-\\xff]+)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+|[A-Z\\xc0-\\xd6\\xd8-\\xde]+|[0-9]+","g"),Ga="Array ArrayBuffer Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Math Number Object RegExp Set String _ clearTimeout isFinite parseFloat parseInt setTimeout TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap".split(" "),Ha={};Ha[Z]=Ha[$]=Ha[_]=Ha[aa]=Ha[ba]=Ha[ca]=Ha[da]=Ha[ea]=Ha[fa]=!0,Ha[O]=Ha[P]=Ha[Y]=Ha[Q]=Ha[R]=Ha[S]=Ha[T]=Ha["[object Map]"]=Ha[U]=Ha[V]=Ha[W]=Ha["[object Set]"]=Ha[X]=Ha["[object WeakMap]"]=!1;var Ia={};Ia[O]=Ia[P]=Ia[Y]=Ia[Q]=Ia[R]=Ia[Z]=Ia[$]=Ia[_]=Ia[aa]=Ia[ba]=Ia[U]=Ia[V]=Ia[W]=Ia[X]=Ia[ca]=Ia[da]=Ia[ea]=Ia[fa]=!0,Ia[S]=Ia[T]=Ia["[object Map]"]=Ia["[object Set]"]=Ia["[object WeakMap]"]=!1;var Ja={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"},Ka={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","`":"&#96;"},La={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&#96;":"`"},Ma={"function":!0,object:!0},Na={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},Oa={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Pa=Ma[typeof exports]&&exports&&!exports.nodeType&&exports,Qa=Ma[typeof module]&&module&&!module.nodeType&&module,Ra=Ma[typeof self]&&self&&self.Object&&self,Sa=Ma[typeof window]&&window&&window.Object&&window,Ta=Qa&&Qa.exports===Pa&&Pa,Ua=Pa&&Qa&&"object"==typeof global&&global&&global.Object&&global||Sa!==(this&&this.window)&&Sa||Ra||this,Va=t();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(Ua._=Va,define(function(){return Va})):Pa&&Qa?Ta?(Qa.exports=Va)._=Va:Pa._=Va:Ua._=Va}).call(this);var deviceIsAndroid=navigator.userAgent.indexOf("Android")>0,deviceIsIOS=/iP(ad|hone|od)/.test(navigator.userAgent),deviceIsIOS4=deviceIsIOS&&/OS 4_\d(_\d)?/.test(navigator.userAgent),deviceIsIOSWithBadTarget=deviceIsIOS&&/OS ([6-9]|\d{2})_\d/.test(navigator.userAgent);FastClick.prototype.needsClick=function(a){"use strict";switch(a.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(a.disabled)return!0;break;case"input":if(deviceIsIOS&&"file"===a.type||a.disabled)return!0;break;case"label":case"video":return!0}return/\bneedsclick\b/.test(a.className)},FastClick.prototype.needsFocus=function(a){"use strict";switch(a.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!deviceIsAndroid;case"input":switch(a.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!a.disabled&&!a.readOnly;default:return/\bneedsfocus\b/.test(a.className)}},FastClick.prototype.sendClick=function(a,b){"use strict";var c,d;document.activeElement&&document.activeElement!==a&&document.activeElement.blur(),d=b.changedTouches[0],c=document.createEvent("MouseEvents"),c.initMouseEvent(this.determineEventType(a),!0,!0,window,1,d.screenX,d.screenY,d.clientX,d.clientY,!1,!1,!1,!1,0,null),c.forwardedTouchEvent=!0,a.dispatchEvent(c)},FastClick.prototype.determineEventType=function(a){"use strict";return deviceIsAndroid&&"select"===a.tagName.toLowerCase()?"mousedown":"click"},FastClick.prototype.focus=function(a){"use strict";var b;deviceIsIOS&&a.setSelectionRange&&0!==a.type.indexOf("date")&&"time"!==a.type?(b=a.value.length,a.setSelectionRange(b,b)):a.focus()},FastClick.prototype.updateScrollParent=function(a){"use strict";var b,c;if(b=a.fastClickScrollParent,!b||!b.contains(a)){c=a;do{if(c.scrollHeight>c.offsetHeight){b=c,a.fastClickScrollParent=c;break}c=c.parentElement}while(c)}b&&(b.fastClickLastScrollTop=b.scrollTop)},FastClick.prototype.getTargetElementFromEventTarget=function(a){"use strict";return a.nodeType===Node.TEXT_NODE?a.parentNode:a},FastClick.prototype.onTouchStart=function(a){"use strict";var b,c,d;if(a.targetTouches.length>1)return!0;if(b=this.getTargetElementFromEventTarget(a.target),c=a.targetTouches[0],deviceIsIOS){if(d=window.getSelection(),d.rangeCount&&!d.isCollapsed)return!0;if(!deviceIsIOS4){if(c.identifier===this.lastTouchIdentifier)return a.preventDefault(),!1;this.lastTouchIdentifier=c.identifier,this.updateScrollParent(b)}}return this.trackingClick=!0,this.trackingClickStart=a.timeStamp,this.targetElement=b,this.touchStartX=c.pageX,this.touchStartY=c.pageY,a.timeStamp-this.lastClickTime<this.tapDelay&&a.preventDefault(),!0},FastClick.prototype.touchHasMoved=function(a){"use strict";var b=a.changedTouches[0],c=this.touchBoundary;return Math.abs(b.pageX-this.touchStartX)>c||Math.abs(b.pageY-this.touchStartY)>c?!0:!1},FastClick.prototype.onTouchMove=function(a){"use strict";return this.trackingClick?((this.targetElement!==this.getTargetElementFromEventTarget(a.target)||this.touchHasMoved(a))&&(this.trackingClick=!1,this.targetElement=null),!0):!0},FastClick.prototype.findControl=function(a){"use strict";return void 0!==a.control?a.control:a.htmlFor?document.getElementById(a.htmlFor):a.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},FastClick.prototype.onTouchEnd=function(a){"use strict";var b,c,d,e,f,g=this.targetElement;if(!this.trackingClick)return!0;if(a.timeStamp-this.lastClickTime<this.tapDelay)return this.cancelNextClick=!0,!0;if(this.cancelNextClick=!1,this.lastClickTime=a.timeStamp,c=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,deviceIsIOSWithBadTarget&&(f=a.changedTouches[0],g=document.elementFromPoint(f.pageX-window.pageXOffset,f.pageY-window.pageYOffset)||g,g.fastClickScrollParent=this.targetElement.fastClickScrollParent),d=g.tagName.toLowerCase(),"label"===d){if(b=this.findControl(g)){if(this.focus(g),deviceIsAndroid)return!1;g=b}}else if(this.needsFocus(g))return a.timeStamp-c>100||deviceIsIOS&&window.top!==window&&"input"===d?(this.targetElement=null,!1):(this.focus(g),this.sendClick(g,a),deviceIsIOS&&"select"===d||(this.targetElement=null,a.preventDefault()),!1);return deviceIsIOS&&!deviceIsIOS4&&(e=g.fastClickScrollParent,e&&e.fastClickLastScrollTop!==e.scrollTop)?!0:(this.needsClick(g)||(a.preventDefault(),this.sendClick(g,a)),!1)},FastClick.prototype.onTouchCancel=function(){"use strict";this.trackingClick=!1,this.targetElement=null},FastClick.prototype.onMouse=function(a){"use strict";return this.targetElement?a.forwardedTouchEvent?!0:a.cancelable&&(!this.needsClick(this.targetElement)||this.cancelNextClick)?(a.stopImmediatePropagation?a.stopImmediatePropagation():a.propagationStopped=!0,a.stopPropagation(),a.preventDefault(),!1):!0:!0},FastClick.prototype.onClick=function(a){"use strict";var b;return this.trackingClick?(this.targetElement=null,this.trackingClick=!1,!0):"submit"===a.target.type&&0===a.detail?!0:(b=this.onMouse(a),b||(this.targetElement=null),b)},FastClick.prototype.destroy=function(){"use strict";var a=this.layer;deviceIsAndroid&&(a.removeEventListener("mouseover",this.onMouse,!0),a.removeEventListener("mousedown",this.onMouse,!0),a.removeEventListener("mouseup",this.onMouse,!0)),a.removeEventListener("click",this.onClick,!0),a.removeEventListener("touchstart",this.onTouchStart,!1),a.removeEventListener("touchmove",this.onTouchMove,!1),a.removeEventListener("touchend",this.onTouchEnd,!1),a.removeEventListener("touchcancel",this.onTouchCancel,!1)},FastClick.notNeeded=function(a){"use strict";var b,c;if("undefined"==typeof window.ontouchstart)return!0;if(c=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!deviceIsAndroid)return!0;if(b=document.querySelector("meta[name=viewport]")){if(-1!==b.content.indexOf("user-scalable=no"))return!0;if(c>31&&document.documentElement.scrollWidth<=window.outerWidth)return!0}}return"none"===a.style.msTouchAction?!0:!1},FastClick.attach=function(a,b){"use strict";return new FastClick(a,b)},"undefined"!=typeof define&&define.amd?define(function(){"use strict";return FastClick}):"undefined"!=typeof module&&module.exports?(module.exports=FastClick.attach,module.exports.FastClick=FastClick):window.FastClick=FastClick,Function.prototype.bind||(Function.prototype.bind=function(a){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var b=Array.prototype.slice.call(arguments,1),c=this,d=function(){},e=function(){return c.apply(this instanceof d&&a?this:a,b.concat(Array.prototype.slice.call(arguments)))};return d.prototype=this.prototype,e.prototype=new d,e}),function(){for(var a=0,b=["ms","moz","webkit","o"],c=0;c<b.length&&!window.requestAnimationFrame;++c)window.requestAnimationFrame=window[b[c]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[b[c]+"CancelAnimationFrame"]||window[b[c]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(b,c){var d=(new Date).getTime(),e=Math.max(0,16-(d-a)),f=window.setTimeout(function(){b(d+e)},e);return a=d+e,f}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(a){clearTimeout(a)})}(),function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[],c={browser:b[1]||"",version:b[2]||"0"};return browser={},c.browser&&(browser[c.browser]=!0,browser.version=c.version),browser.chrome?browser.webkit=!0:browser.webkit&&(browser.safari=!0),window.$&&($.browser=browser),browser}(navigator.userAgent);var is_iphone=navigator.userAgent.match(/iPhone/i)||navigator.userAgent.match(/iPod/i),is_ipad=navigator.userAgent.match(/iPad/i),is_android=navigator.userAgent.match(/Android/i),is_mobile=is_iphone||is_ipad||is_android,is_desktop=!is_mobile,app_devicePixelRatio=is_mobile?devicePixelRatio:1,View=function(a,b){var c=function(a){this._id=b.uniqueId("view"),this.type="view",a||(a={}),b.extend(this,b.pick(a,e)),this._ensureElement(),this.initialize.apply(this,arguments),this.delegateEvents()},d=/^(\S+)\s*(.*)$/,e=["model","collection","el","id","attributes","className","tagName","events"];b.extend(c.prototype,{tagName:"div",$:function(a){return this.$el.find(a)},initialize:function(){},setElement:function(b,c){return this.$el&&this.undelegateEvents(),this.$el=b instanceof a?b:a(b),this.el=this.$el[0],c!==!1&&this.delegateEvents(),this},delegateEvents:function(a){if(!a&&!(a=b.result(this,"events")))return this;this.undelegateEvents();for(var c in a){var e=a[c];if(b.isFunction(e)||(e=this[a[c]]),e){var f=c.match(d),g=f[1],h=f[2];e=b.bind(e,this),g+=".delegateEvents"+this._id,(!is_mobile||"mouseenter"!==h&&"mouseleave"!==h)&&(""===h?this.$el.on(g,e):this.$el.on(g,h,e))}}return this},undelegateEvents:function(){return this.$el.off(".delegateEvents"+this._id),this},_ensureElement:function(){this.setElement(b.result(this,"el"),!1)},preventDefault:function(a){a&&a.preventDefault()},stopPropagation:function(a){a&&a.stopPropagation()}});var f=function(a,c){var d,c=c||{},e=this,f={};d=a&&b.has(a,"constructor")?a.constructor:function(){return e.apply(this,arguments)},b.extend(f,e.prototype.events,a.events),b.extend(d,e,c);var g=function(){this.constructor=d};return g.prototype=e.prototype,d.prototype=new g,a&&b.extend(d.prototype,a),d.prototype.__super__=e.prototype,d.prototype.events=f,d};return c.extend=f,c}(jQuery,_),UploadView=View.extend({events:{"change [type=file]":"handleFileSelect","submit form":"preventDefault"},initialize:function(){this.$file=this.$("[type=file]"),this.$upload=this.$(".upload-icon")},beforeUpload:function(){},handleFileSelect:function(a){a.stopPropagation(),a.preventDefault(),this.beforeUpload();for(var b,c=a.dataTransfer?a.dataTransfer.files:a.target.files,d=0;b=c[d];d++)b.type.match("image.*")&&this.upload(b)},upload:function(a){var b=new FormData;b.append("image",a),this.mediaTag&&b.append("tag",this.mediaTag);var c=$.ajax({url:this.uploadAction,type:"post",data:b,dataType:"json",processData:!1,contentType:!1});c.done(this.success.bind(this))},success:function(a){return a.error?(this.$upload.removeClass("uploading"),void this.error(a.error)):(this.$upload.removeClass("uploading"),void this.add(a))},add:function(a){console.log(a)},error:function(a){}}),DragView=UploadView.extend({el:"body",uploadAction:"/upload",selfDrag:!1,events:{dragover:"dragover",dragstart:"dragstart",drop:"handleDrop","change .file":"handleFileSelect"},drop:function(){$("#droparea").hide(),$("#loading").show()},dragover:function(a){a.stopPropagation(),a.preventDefault(),this.selfDrag?$("#droparea").hide():$("#droparea").show()},dragstart:function(a){this.selfDrag=!0},handleDrop:function(a){a.stopPropagation(),a.preventDefault(),a=a.originalEvent,a.dataTransfer&&!this.selfDrag?a.dataTransfer.files.length&&this.handleFileSelect(a):this.handleFileSelect(a),this.selfDrag=!1,this.drop()},add:function(a){$("#loading").hide(),app.view.display(a),history.pushState(a,document.title,"/p/"+a.id)}}),NavView=View.extend({el:"body",events:{"click .prev":"prev","click .next":"next","touchstart .prev":"prev","touchstart .next":"next","touchstart .link":"link","click .refresh":"refresh","click .random":"random"},initialize:function(){if(this.id=-1,this.$pip=this.$("#pip"),this.$pip_img=this.$("#pip img"),this.$image=this.$("#luckyimage"),$(window).on("keydown",this.keydown.bind(this)),$(document).ajaxError(function(){this.fetching=!1}.bind(this)),window.onpopstate=function(a){this.display(a.state)}.bind(this),-1!==window.location.pathname.indexOf("/p/")){var a=window.location.pathname.split("/")[2];this.fetch(a)}else this.latest();$(".prev").on("touchstart",function(){console.log("<<<<<PREV")}),$(".prev").on("click",function(){console.log("<<<<<CLICKPREV")})},keydown:function(a){if(!(a.shiftKey||a.metaKey||a.ctrlKey||a.altKey))switch(a.keyCode){case 37:this.prev();break;case 39:this.next();break;case 38:this.random();break;case 40:this.latest()}},latest:function(){this.fetching||(this.fetch("latest"),this.onLatest=!0)},prev:function(){this.fetching||this.id-1<1||this.fetch(this.id-1)},next:function(){this.fetching||this.onLatest||this.id<1||this.fetch(this.id+1)},random:function(){this.fetching||this.fetch("random")},fetch:function(a){this.fetching=!0,this.onLatest=!1,$.get("/get/"+a,function(a){this.fetching=!1,this.display(a),history.pushState(a,document.title,"/p/"+a.id)}.bind(this));
+},display:function(a){return a&&a.id?(this.data=a,this.id=a.id,is_desktop&&(this.$pip.attr("href",a.url),this.$pip_img.attr("src",""),setTimeout(function(){this.$pip_img.attr("src",a.url)}.bind(this))),void this.$image.css("background-image","url("+a.url+")")):void(this.onLatest=!0)},link:function(){window.open(this.data.url,"_blank")}}),app=function(){var a={};return a.init=function(){is_mobile&&FastClick.attach(document.body),a.view=new NavView,a.upload=new DragView,$(window).on("focus",a.focus),$(window).on("blur",a.blur)},a.focused=!0,a.typing=!1,a.focus=function(){a.focused=!0},a.blur=function(){a.focused=!1},document.addEventListener("DOMContentLoaded",a.init),a}(); \ No newline at end of file
diff --git a/public/assets/js/drag.js b/public/assets/js/drag.js
index b73c459..9673cd3 100644
--- a/public/assets/js/drag.js
+++ b/public/assets/js/drag.js
@@ -10,6 +10,7 @@ var DragView = UploadView.extend({
'dragover': 'dragover',
'dragstart': 'dragstart',
'drop': 'handleDrop',
+ 'change .file': 'handleFileSelect',
},
drop: function(){
diff --git a/public/assets/js/index.js b/public/assets/js/index.js
index c2275df..a496536 100644
--- a/public/assets/js/index.js
+++ b/public/assets/js/index.js
@@ -4,6 +4,9 @@ var app = (function(){
var id = -1
app.init = function(){
+ if (is_mobile) {
+ FastClick.attach(document.body)
+ }
app.view = new NavView ()
app.upload = new DragView ()
diff --git a/public/assets/js/nav.js b/public/assets/js/nav.js
index e86c8cd..ae6fabe 100644
--- a/public/assets/js/nav.js
+++ b/public/assets/js/nav.js
@@ -2,10 +2,13 @@ var NavView = View.extend({
el: "body",
events: {
- "click #prev": "prev",
- "click #next": "next",
- "click #refresh": "refresh",
- "click #random": "random",
+ "click .prev": "prev",
+ "click .next": "next",
+ "touchstart .prev": "prev",
+ "touchstart .next": "next",
+ "touchstart .link": "link",
+ "click .refresh": "refresh",
+ "click .random": "random",
},
initialize: function(){
@@ -30,6 +33,13 @@ var NavView = View.extend({
else {
this.latest()
}
+
+ $(".prev").on("touchstart", function(){
+ console.log("<<<<<PREV")
+ })
+ $(".prev").on("click", function(){
+ console.log("<<<<<CLICKPREV")
+ })
},
keydown: function(e){
@@ -88,11 +98,18 @@ var NavView = View.extend({
this.onLatest = true
return
}
+ this.data = data
this.id = data.id
- this.$pip.attr("href", data.url)
- this.$pip_img.attr("src", "")
- setTimeout(function(){ this.$pip_img.attr("src", data.url) }.bind(this))
+ if (is_desktop) {
+ this.$pip.attr("href", data.url)
+ this.$pip_img.attr("src", "")
+ setTimeout(function(){ this.$pip_img.attr("src", data.url) }.bind(this))
+ }
this.$image.css("background-image", "url(" + data.url + ")")
},
+
+ link: function(){
+ window.open(this.data.url, "_blank")
+ },
})
diff --git a/public/assets/js/vendor/ExifReader.js b/public/assets/js/vendor/ExifReader.js
new file mode 100644
index 0000000..a8343ed
--- /dev/null
+++ b/public/assets/js/vendor/ExifReader.js
@@ -0,0 +1,1363 @@
+// Generated by CoffeeScript 1.6.2
+/*
+# ExifReader 1.1.1
+# http://github.com/mattiasw/exifreader
+# Copyright (C) 2011-2014 Mattias Wallander <mattias@wallander.eu>
+# Licensed under the GNU Lesser General Public License version 3 or later
+# See license text at http://www.gnu.org/licenses/lgpl.txt
+*/
+
+
+(function() {
+ (typeof exports !== "undefined" && exports !== null ? exports : this).ExifReader = (function() {
+ ExifReader.prototype._MIN_DATA_BUFFER_LENGTH = 2;
+
+ ExifReader.prototype._JPEG_ID_SIZE = 2;
+
+ ExifReader.prototype._JPEG_ID = 0xffd8;
+
+ ExifReader.prototype._APP_MARKER_SIZE = 2;
+
+ ExifReader.prototype._APP0_MARKER = 0xffe0;
+
+ ExifReader.prototype._APP1_MARKER = 0xffe1;
+
+ ExifReader.prototype._APP15_MARKER = 0xffef;
+
+ ExifReader.prototype._APP_ID_OFFSET = 4;
+
+ ExifReader.prototype._BYTES_Exif = 0x45786966;
+
+ ExifReader.prototype._TIFF_HEADER_OFFSET = 10;
+
+ ExifReader.prototype._BYTE_ORDER_BIG_ENDIAN = 0x4949;
+
+ ExifReader.prototype._BYTE_ORDER_LITTLE_ENDIAN = 0x4d4d;
+
+ function ExifReader() {
+ var _this = this;
+
+ this._getTagValueAt = {
+ 1: function(offset) {
+ return _this._getByteAt(offset);
+ },
+ 2: function(offset) {
+ return _this._getAsciiAt(offset);
+ },
+ 3: function(offset) {
+ return _this._getShortAt(offset);
+ },
+ 4: function(offset) {
+ return _this._getLongAt(offset);
+ },
+ 5: function(offset) {
+ return _this._getRationalAt(offset);
+ },
+ 7: function(offset) {
+ return _this._getUndefinedAt(offset);
+ },
+ 9: function(offset) {
+ return _this._getSlongAt(offset);
+ },
+ 10: function(offset) {
+ return _this._getSrationalAt(offset);
+ }
+ };
+ this._tiffHeaderOffset = 0;
+ }
+
+ /*
+ # Loads all the Exif tags from the specified image file buffer.
+ #
+ # data ArrayBuffer Image file data
+ */
+
+
+ ExifReader.prototype.load = function(data) {
+ return this.loadView(new DataView(data));
+ };
+
+ /*
+ # Loads all the Exif tags from the specified image file buffer view. Probably
+ # used when DataView isn't supported by the browser.
+ #
+ # @_dataView DataView Image file data view
+ */
+
+
+ ExifReader.prototype.loadView = function(_dataView) {
+ this._dataView = _dataView;
+ this._tags = {};
+ this._checkImageHeader();
+ this._readTags();
+ return this._dataView = null;
+ };
+
+ ExifReader.prototype._checkImageHeader = function() {
+ if (this._dataView.byteLength < this._MIN_DATA_BUFFER_LENGTH || this._dataView.getUint16(0, false) !== this._JPEG_ID) {
+ throw new Error('Invalid image format');
+ }
+ this._parseAppMarkers(this._dataView);
+ if (!this._hasExifData()) {
+ throw new Error('No Exif data');
+ }
+ };
+
+ ExifReader.prototype._parseAppMarkers = function(dataView) {
+ var appMarkerPosition, fieldLength, _results;
+
+ appMarkerPosition = this._JPEG_ID_SIZE;
+ _results = [];
+ while (true) {
+ if (dataView.byteLength < appMarkerPosition + this._APP_ID_OFFSET + 5) {
+ break;
+ }
+ if (this._isApp1ExifMarker(dataView, appMarkerPosition)) {
+ fieldLength = dataView.getUint16(appMarkerPosition + this._APP_MARKER_SIZE, false);
+ this._tiffHeaderOffset = appMarkerPosition + this._TIFF_HEADER_OFFSET;
+ } else if (this._isAppMarker(dataView, appMarkerPosition)) {
+ fieldLength = dataView.getUint16(appMarkerPosition + this._APP_MARKER_SIZE, false);
+ } else {
+ break;
+ }
+ _results.push(appMarkerPosition += this._APP_MARKER_SIZE + fieldLength);
+ }
+ return _results;
+ };
+
+ ExifReader.prototype._isApp1ExifMarker = function(dataView, appMarkerPosition) {
+ return dataView.getUint16(appMarkerPosition, false) === this._APP1_MARKER && dataView.getUint32(appMarkerPosition + this._APP_ID_OFFSET, false) === this._BYTES_Exif && dataView.getUint8(appMarkerPosition + this._APP_ID_OFFSET + 4, false) === 0x00;
+ };
+
+ ExifReader.prototype._isAppMarker = function(dataView, appMarkerPosition) {
+ var appMarker;
+
+ appMarker = dataView.getUint16(appMarkerPosition, false);
+ return appMarker >= this._APP0_MARKER && appMarker <= this._APP15_MARKER;
+ };
+
+ ExifReader.prototype._hasExifData = function() {
+ return this._tiffHeaderOffset !== 0;
+ };
+
+ ExifReader.prototype._readTags = function() {
+ this._setByteOrder();
+ this._read0thIfd();
+ this._readExifIfd();
+ this._readGpsIfd();
+ return this._readInteroperabilityIfd();
+ };
+
+ ExifReader.prototype._setByteOrder = function() {
+ if (this._dataView.getUint16(this._tiffHeaderOffset) === this._BYTE_ORDER_BIG_ENDIAN) {
+ return this._littleEndian = true;
+ } else if (this._dataView.getUint16(this._tiffHeaderOffset) === this._BYTE_ORDER_LITTLE_ENDIAN) {
+ return this._littleEndian = false;
+ } else {
+ throw new Error('Illegal byte order value. Faulty image.');
+ }
+ };
+
+ ExifReader.prototype._read0thIfd = function() {
+ var ifdOffset;
+
+ ifdOffset = this._getIfdOffset();
+ return this._readIfd('0th', ifdOffset);
+ };
+
+ ExifReader.prototype._getIfdOffset = function() {
+ return this._tiffHeaderOffset + this._getLongAt(this._tiffHeaderOffset + 4);
+ };
+
+ ExifReader.prototype._readExifIfd = function() {
+ var ifdOffset;
+
+ if (this._tags['Exif IFD Pointer'] != null) {
+ ifdOffset = this._tiffHeaderOffset + this._tags['Exif IFD Pointer'].value;
+ return this._readIfd('exif', ifdOffset);
+ }
+ };
+
+ ExifReader.prototype._readGpsIfd = function() {
+ var ifdOffset;
+
+ if (this._tags['GPS Info IFD Pointer'] != null) {
+ ifdOffset = this._tiffHeaderOffset + this._tags['GPS Info IFD Pointer'].value;
+ return this._readIfd('gps', ifdOffset);
+ }
+ };
+
+ ExifReader.prototype._readInteroperabilityIfd = function() {
+ var ifdOffset;
+
+ if (this._tags['Interoperability IFD Pointer'] != null) {
+ ifdOffset = this._tiffHeaderOffset + this._tags['Interoperability IFD Pointer'].value;
+ return this._readIfd('interoperability', ifdOffset);
+ }
+ };
+
+ ExifReader.prototype._readIfd = function(ifdType, offset) {
+ var fieldIndex, numberOfFields, tag, _i, _results;
+
+ numberOfFields = this._getShortAt(offset);
+ offset += 2;
+ _results = [];
+ for (fieldIndex = _i = 0; 0 <= numberOfFields ? _i < numberOfFields : _i > numberOfFields; fieldIndex = 0 <= numberOfFields ? ++_i : --_i) {
+ tag = this._readTag(ifdType, offset);
+ if (tag !== void 0) {
+ this._tags[tag.name] = {
+ 'value': tag.value,
+ 'description': tag.description
+ };
+ }
+ _results.push(offset += 12);
+ }
+ return _results;
+ };
+
+ ExifReader.prototype._readTag = function(ifdType, offset) {
+ var tagCode, tagCount, tagDescription, tagName, tagType, tagValue, tagValueOffset;
+
+ tagCode = this._getShortAt(offset);
+ tagType = this._getShortAt(offset + 2);
+ tagCount = this._getLongAt(offset + 4);
+ if (this._typeSizes[tagType] === void 0) {
+ return void 0;
+ }
+ if (this._typeSizes[tagType] * tagCount <= 4) {
+ tagValue = this._getTagValue(offset + 8, tagType, tagCount);
+ } else {
+ tagValueOffset = this._getLongAt(offset + 8);
+ tagValue = this._getTagValue(this._tiffHeaderOffset + tagValueOffset, tagType, tagCount);
+ }
+ if (tagType === this._tagTypes['ASCII']) {
+ tagValue = this._splitNullSeparatedAsciiString(tagValue);
+ }
+ if (this._tagNames[ifdType][tagCode] != null) {
+ if ((this._tagNames[ifdType][tagCode]['name'] != null) && (this._tagNames[ifdType][tagCode]['description'] != null)) {
+ tagName = this._tagNames[ifdType][tagCode]['name'];
+ tagDescription = this._tagNames[ifdType][tagCode]['description'](tagValue);
+ } else {
+ tagName = this._tagNames[ifdType][tagCode];
+ if (tagValue instanceof Array) {
+ tagDescription = tagValue.join(', ');
+ } else {
+ tagDescription = tagValue;
+ }
+ }
+ return {
+ 'name': tagName,
+ 'value': tagValue,
+ 'description': tagDescription
+ };
+ } else {
+ return {
+ 'name': "undefined-" + tagCode,
+ 'value': tagValue,
+ 'description': tagValue
+ };
+ }
+ };
+
+ ExifReader.prototype._getTagValue = function(offset, type, count) {
+ var tagValue, value, valueIndex;
+
+ value = (function() {
+ var _i, _results;
+
+ _results = [];
+ for (valueIndex = _i = 0; 0 <= count ? _i < count : _i > count; valueIndex = 0 <= count ? ++_i : --_i) {
+ tagValue = this._getTagValueAt[type](offset);
+ offset += this._typeSizes[type];
+ _results.push(tagValue);
+ }
+ return _results;
+ }).call(this);
+ if (value.length === 1) {
+ value = value[0];
+ } else if (type === this._tagTypes['ASCII']) {
+ value = this._getAsciiValue(value);
+ }
+ return value;
+ };
+
+ ExifReader.prototype._getAsciiValue = function(charArray) {
+ var charCode, newCharArray;
+
+ return newCharArray = (function() {
+ var _i, _len, _results;
+
+ _results = [];
+ for (_i = 0, _len = charArray.length; _i < _len; _i++) {
+ charCode = charArray[_i];
+ _results.push(String.fromCharCode(charCode));
+ }
+ return _results;
+ })();
+ };
+
+ ExifReader.prototype._getByteAt = function(offset) {
+ return this._dataView.getUint8(offset);
+ };
+
+ ExifReader.prototype._getAsciiAt = function(offset) {
+ return this._dataView.getUint8(offset);
+ };
+
+ ExifReader.prototype._getShortAt = function(offset) {
+ return this._dataView.getUint16(offset, this._littleEndian);
+ };
+
+ ExifReader.prototype._getLongAt = function(offset) {
+ return this._dataView.getUint32(offset, this._littleEndian);
+ };
+
+ ExifReader.prototype._getRationalAt = function(offset) {
+ return this._getLongAt(offset) / this._getLongAt(offset + 4);
+ };
+
+ ExifReader.prototype._getUndefinedAt = function(offset) {
+ return this._getByteAt(offset);
+ };
+
+ ExifReader.prototype._getSlongAt = function(offset) {
+ return this._dataView.getInt32(offset, this._littleEndian);
+ };
+
+ ExifReader.prototype._getSrationalAt = function(offset) {
+ return this._getSlongAt(offset) / this._getSlongAt(offset + 4);
+ };
+
+ ExifReader.prototype._splitNullSeparatedAsciiString = function(string) {
+ var character, i, tagValue, _i, _len;
+
+ tagValue = [];
+ i = 0;
+ for (_i = 0, _len = string.length; _i < _len; _i++) {
+ character = string[_i];
+ if (character === '\x00') {
+ i++;
+ continue;
+ }
+ if (tagValue[i] == null) {
+ tagValue[i] = '';
+ }
+ tagValue[i] += character;
+ }
+ return tagValue;
+ };
+
+ ExifReader.prototype._typeSizes = {
+ 1: 1,
+ 2: 1,
+ 3: 2,
+ 4: 4,
+ 5: 8,
+ 7: 1,
+ 9: 4,
+ 10: 8
+ };
+
+ ExifReader.prototype._tagTypes = {
+ 'BYTE': 1,
+ 'ASCII': 2,
+ 'SHORT': 3,
+ 'LONG': 4,
+ 'RATIONAL': 5,
+ 'UNDEFINED': 7,
+ 'SLONG': 9,
+ 'SRATIONAL': 10
+ };
+
+ ExifReader.prototype._tagNames = {
+ '0th': {
+ 0x0100: 'ImageWidth',
+ 0x0101: 'ImageLength',
+ 0x0102: 'BitsPerSample',
+ 0x0103: 'Compression',
+ 0x0106: 'PhotometricInterpretation',
+ 0x010e: 'ImageDescription',
+ 0x010f: 'Make',
+ 0x0110: 'Model',
+ 0x0111: 'StripOffsets',
+ 0x0112: {
+ 'name': 'Orientation',
+ 'description': function(value) {
+ switch (value) {
+ case 1:
+ return 'top-left';
+ case 2:
+ return 'top-right';
+ case 3:
+ return 'bottom-right';
+ case 4:
+ return 'bottom-left';
+ case 5:
+ return 'left-top';
+ case 6:
+ return 'right-top';
+ case 7:
+ return 'right-bottom';
+ case 8:
+ return 'left-bottom';
+ default:
+ return 'Undefined';
+ }
+ }
+ },
+ 0x0115: 'SamplesPerPixel',
+ 0x0116: 'RowsPerStrip',
+ 0x0117: 'StripByteCounts',
+ 0x011a: 'XResolution',
+ 0x011b: 'YResolution',
+ 0x011c: 'PlanarConfiguration',
+ 0x0128: {
+ 'name': 'ResolutionUnit',
+ 'description': function(value) {
+ switch (value) {
+ case 2:
+ return 'inches';
+ case 3:
+ return 'centimeters';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0x012d: 'TransferFunction',
+ 0x0131: 'Software',
+ 0x0132: 'DateTime',
+ 0x013b: 'Artist',
+ 0x013e: 'WhitePoint',
+ 0x013f: 'PrimaryChromaticities',
+ 0x0201: 'JPEGInterchangeFormat',
+ 0x0202: 'JPEGInterchangeFormatLength',
+ 0x0211: 'YCbCrCoefficients',
+ 0x0212: 'YCbCrSubSampling',
+ 0x0213: {
+ 'name': 'YCbCrPositioning',
+ 'description': function(value) {
+ switch (value) {
+ case 1:
+ return 'centered';
+ case 2:
+ return 'co-sited';
+ default:
+ return 'undefied ' + value;
+ }
+ }
+ },
+ 0x0214: 'ReferenceBlackWhite',
+ 0x8298: {
+ 'name': 'Copyright',
+ 'description': function(value) {
+ return value.join('; ');
+ }
+ },
+ 0x8769: 'Exif IFD Pointer',
+ 0x8825: 'GPS Info IFD Pointer'
+ },
+ 'exif': {
+ 0x829a: 'ExposureTime',
+ 0x829d: 'FNumber',
+ 0x8822: {
+ 'name': 'ExposureProgram',
+ 'description': function(value) {
+ switch (value) {
+ case 0:
+ return 'Undefined';
+ case 1:
+ return 'Manual';
+ case 2:
+ return 'Normal program';
+ case 3:
+ return 'Aperture priority';
+ case 4:
+ return 'Shutter priority';
+ case 5:
+ return 'Creative program';
+ case 6:
+ return 'Action program';
+ case 7:
+ return 'Portrait mode';
+ case 8:
+ return 'Landscape mode';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0x8824: 'SpectralSensitivity',
+ 0x8827: 'ISOSpeedRatings',
+ 0x8828: {
+ 'name': 'OECF',
+ 'description': function(value) {
+ return '[Raw OECF table data]';
+ }
+ },
+ 0x9000: {
+ 'name': 'ExifVersion',
+ 'description': function(value) {
+ var charCode, string, _i, _len;
+
+ string = '';
+ for (_i = 0, _len = value.length; _i < _len; _i++) {
+ charCode = value[_i];
+ string += String.fromCharCode(charCode);
+ }
+ return string;
+ }
+ },
+ 0x9003: 'DateTimeOriginal',
+ 0x9004: 'DateTimeDigitized',
+ 0x9101: {
+ 'name': 'ComponentsConfiguration',
+ 'description': function(value) {
+ var character, string, _i, _len;
+
+ string = '';
+ for (_i = 0, _len = value.length; _i < _len; _i++) {
+ character = value[_i];
+ switch (character) {
+ case 0x31:
+ string += 'Y';
+ break;
+ case 0x32:
+ string += 'Cb';
+ break;
+ case 0x33:
+ string += 'Cr';
+ break;
+ case 0x34:
+ string += 'R';
+ break;
+ case 0x35:
+ string += 'G';
+ break;
+ case 0x36:
+ string += 'B';
+ }
+ }
+ return string;
+ }
+ },
+ 0x9102: 'CompressedBitsPerPixel',
+ 0x9201: 'ShutterSpeedValue',
+ 0x9202: 'ApertureValue',
+ 0x9203: 'BrightnessValue',
+ 0x9204: 'ExposureBiasValue',
+ 0x9205: 'MaxApertureValue',
+ 0x9206: 'SubjectDistance',
+ 0x9207: {
+ 'name': 'MeteringMode',
+ 'description': function(value) {
+ switch (value) {
+ case 1:
+ return 'Average';
+ case 2:
+ return 'CenterWeightedAverage';
+ case 3:
+ return 'Spot';
+ case 4:
+ return 'MultiSpot';
+ case 5:
+ return 'Pattern';
+ case 6:
+ return 'Partial';
+ case 255:
+ return 'Other';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0x9208: {
+ 'name': 'LightSource',
+ 'description': function(value) {
+ switch (value) {
+ case 1:
+ return 'Daylight';
+ case 2:
+ return 'Fluorescent';
+ case 3:
+ return 'Tungsten (incandescent light)';
+ case 4:
+ return 'Flash';
+ case 9:
+ return 'Fine weather';
+ case 10:
+ return 'Cloudy weather';
+ case 11:
+ return 'Shade';
+ case 12:
+ return 'Daylight fluorescent (D 5700 – 7100K)';
+ case 13:
+ return 'Day white fluorescent (N 4600 – 5400K)';
+ case 14:
+ return 'Cool white fluorescent (W 3900 – 4500K)';
+ case 15:
+ return 'White fluorescent (WW 3200 – 3700K)';
+ case 17:
+ return 'Standard light A';
+ case 18:
+ return 'Standard light B';
+ case 19:
+ return 'Standard light C';
+ case 20:
+ return 'D55';
+ case 21:
+ return 'D65';
+ case 22:
+ return 'D75';
+ case 23:
+ return 'D50';
+ case 24:
+ return 'ISO studio tungsten';
+ case 255:
+ return 'Other light source';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0x9209: {
+ 'name': 'Flash',
+ 'description': function(value) {
+ switch (value) {
+ case 0x00:
+ return 'Flash did not fire';
+ case 0x01:
+ return 'Flash fired';
+ case 0x05:
+ return 'Strobe return light not detected';
+ case 0x07:
+ return 'Strobe return light detected';
+ case 0x09:
+ return 'Flash fired, compulsory flash mode';
+ case 0x0d:
+ return 'Flash fired, compulsory flash mode, return light not detected';
+ case 0x0f:
+ return 'Flash fired, compulsory flash mode, return light detected';
+ case 0x10:
+ return 'Flash did not fire, compulsory flash mode';
+ case 0x18:
+ return 'Flash did not fire, auto mode';
+ case 0x19:
+ return 'Flash fired, auto mode';
+ case 0x1d:
+ return 'Flash fired, auto mode, return light not detected';
+ case 0x1f:
+ return 'Flash fired, auto mode, return light detected';
+ case 0x20:
+ return 'No flash function';
+ case 0x41:
+ return 'Flash fired, red-eye reduction mode';
+ case 0x45:
+ return 'Flash fired, red-eye reduction mode, return light not detected';
+ case 0x47:
+ return 'Flash fired, red-eye reduction mode, return light detected';
+ case 0x49:
+ return 'Flash fired, compulsory flash mode, red-eye reduction mode';
+ case 0x4d:
+ return 'Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected';
+ case 0x4f:
+ return 'Flash fired, compulsory flash mode, red-eye reduction mode, return light detected';
+ case 0x59:
+ return 'Flash fired, auto mode, red-eye reduction mode';
+ case 0x5d:
+ return 'Flash fired, auto mode, return light not detected, red-eye reduction mode';
+ case 0x5f:
+ return 'Flash fired, auto mode, return light detected, red-eye reduction mode';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0x920a: 'FocalLength',
+ 0x9214: {
+ 'name': 'SubjectArea',
+ 'description': function(value) {
+ switch (value.length) {
+ case 2:
+ return "Location; X: " + value[0] + ", Y: " + value[1];
+ case 3:
+ return "Circle; X: " + value[0] + ", Y: " + value[1] + ", diameter: " + value[2];
+ case 4:
+ return "Rectangle; X: " + value[0] + ", Y: " + value[1] + ", width: " + value[2] + ", height: " + value[3];
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0x927c: {
+ 'name': 'MakerNote',
+ 'description': function(value) {
+ return '[Raw maker note data]';
+ }
+ },
+ 0x9286: {
+ 'name': 'UserComment',
+ 'description': function(value) {
+ switch (value.slice(0, 8).map(function(charCode) {
+ return String.fromCharCode(charCode);
+ }).join('')) {
+ case 'ASCII\x00\x00\x00':
+ return value.slice(8, value.length).map(function(charCode) {
+ return String.fromCharCode(charCode);
+ }).join('');
+ case 'JIS\x00\x00\x00\x00\x00':
+ return '[JIS encoded text]';
+ case 'UNICODE\x00':
+ return '[Unicode encoded text]';
+ case '\x00\x00\x00\x00\x00\x00\x00\x00':
+ return '[Undefined encoding]';
+ }
+ }
+ },
+ 0x9290: 'SubSecTime',
+ 0x9291: 'SubSecTimeOriginal',
+ 0x9292: 'SubSecTimeDigitized',
+ 0xa000: {
+ 'name': 'FlashpixVersion',
+ 'description': function(value) {
+ var charCode, string, _i, _len;
+
+ string = '';
+ for (_i = 0, _len = value.length; _i < _len; _i++) {
+ charCode = value[_i];
+ string += String.fromCharCode(charCode);
+ }
+ return string;
+ }
+ },
+ 0xa001: {
+ 'name': 'ColorSpace',
+ 'description': function(value) {
+ switch (value) {
+ case 1:
+ return 'sRGB';
+ case 0xffff:
+ return 'Uncalibrated';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0xa002: 'PixelXDimension',
+ 0xa003: 'PixelYDimension',
+ 0xa004: 'RelatedSoundFile',
+ 0xa005: 'Interoperability IFD Pointer',
+ 0xa20b: 'FlashEnergy',
+ 0xa20c: {
+ 'name': 'SpatialFrequencyResponse',
+ 'description': function(value) {
+ return '[Raw SFR table data]';
+ }
+ },
+ 0xa20e: 'FocalPlaneXResolution',
+ 0xa20f: 'FocalPlaneYResolution',
+ 0xa210: {
+ 'name': 'FocalPlaneResolutionUnit',
+ 'description': function(value) {
+ switch (value) {
+ case 2:
+ return 'inches';
+ case 3:
+ return 'centimeters';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0xa214: {
+ 'name': 'SubjectLocation',
+ 'description': function(value) {
+ return "X: " + value[0] + ", Y: " + value[1];
+ }
+ },
+ 0xa215: 'ExposureIndex',
+ 0xa217: {
+ 'name': 'SensingMethod',
+ 'description': function(value) {
+ switch (value) {
+ case 1:
+ return 'Undefined';
+ case 2:
+ return 'One-chip color area sensor';
+ case 3:
+ return 'Two-chip color area sensor';
+ case 4:
+ return 'Three-chip color area sensor';
+ case 5:
+ return 'Color sequential area sensor';
+ case 7:
+ return 'Trilinear sensor';
+ case 8:
+ return 'Color sequential linear sensor';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0xa300: {
+ 'name': 'FileSource',
+ 'description': function(value) {
+ switch (value) {
+ case 3:
+ return 'DSC';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0xa301: {
+ 'name': 'SceneType',
+ 'description': function(value) {
+ switch (value) {
+ case 1:
+ return 'A directly photographed image';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0xa302: {
+ 'name': 'CFAPattern',
+ 'description': function(value) {
+ return '[Raw CFA pattern table data]';
+ }
+ },
+ 0xa401: {
+ 'name': 'CustomRendered',
+ 'description': function(value) {
+ switch (value) {
+ case 0:
+ return 'Normal process';
+ case 1:
+ return 'Custom process';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0xa402: {
+ 'name': 'ExposureMode',
+ 'description': function(value) {
+ switch (value) {
+ case 0:
+ return 'Auto exposure';
+ case 1:
+ return 'Manual exposure';
+ case 2:
+ return 'Auto bracket';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0xa403: {
+ 'name': 'WhiteBalance',
+ 'description': function(value) {
+ switch (value) {
+ case 0:
+ return 'Auto white balance';
+ case 1:
+ return 'Manual white balance';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0xa404: {
+ 'name': 'DigitalZoomRatio',
+ 'description': function(value) {
+ switch (value) {
+ case 0:
+ return 'Digital zoom was not used';
+ default:
+ return value;
+ }
+ }
+ },
+ 0xa405: {
+ 'name': 'FocalLengthIn35mmFilm',
+ 'description': function(value) {
+ switch (value) {
+ case 0:
+ return 'Unknown';
+ default:
+ return value;
+ }
+ }
+ },
+ 0xa406: {
+ 'name': 'SceneCaptureType',
+ 'description': function(value) {
+ switch (value) {
+ case 0:
+ return 'Standard';
+ case 1:
+ return 'Landscape';
+ case 2:
+ return 'Portrait';
+ case 3:
+ return 'Night scene';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0xa407: {
+ 'name': 'GainControl',
+ 'description': function(value) {
+ switch (value) {
+ case 0:
+ return 'None';
+ case 1:
+ return 'Low gain up';
+ case 2:
+ return 'High gain up';
+ case 3:
+ return 'Low gain down';
+ case 4:
+ return 'High gain down';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0xa408: {
+ 'name': 'Contrast',
+ 'description': function(value) {
+ switch (value) {
+ case 0:
+ return 'Normal';
+ case 1:
+ return 'Soft';
+ case 2:
+ return 'Hard';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0xa409: {
+ 'name': 'Saturation',
+ 'description': function(value) {
+ switch (value) {
+ case 0:
+ return 'Normal';
+ case 1:
+ return 'Low saturation';
+ case 2:
+ return 'High saturation';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0xa40a: {
+ 'name': 'Sharpness',
+ 'description': function(value) {
+ switch (value) {
+ case 0:
+ return 'Normal';
+ case 1:
+ return 'Soft';
+ case 2:
+ return 'Hard';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0xa40b: {
+ 'name': 'DeviceSettingDescription',
+ 'description': function(value) {
+ return '[Raw device settings table data]';
+ }
+ },
+ 0xa40c: {
+ 'name': 'SubjectDistanceRange',
+ 'description': function(value) {
+ switch (value) {
+ case 1:
+ return 'Macro';
+ case 2:
+ return 'Close view';
+ case 3:
+ return 'Distant view';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0xa420: 'ImageUniqueID'
+ },
+ 'gps': {
+ 0x0000: {
+ 'name': 'GPSVersionID',
+ 'description': function(value) {
+ var _ref, _ref1;
+
+ if ((value[0] === (_ref = value[1]) && _ref === 2) && (value[2] === (_ref1 = value[3]) && _ref1 === 0)) {
+ return 'Version 2.2';
+ } else {
+ return 'Unknown';
+ }
+ }
+ },
+ 0x0001: {
+ 'name': 'GPSLatitudeRef',
+ 'description': function(value) {
+ switch (value.join('')) {
+ case 'N':
+ return 'North latitude';
+ case 'S':
+ return 'South latitude';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0x0002: {
+ 'name': 'GPSLatitude',
+ 'description': function(value) {
+ return value[0] + value[1] / 60 + value[2] / 3600;
+ }
+ },
+ 0x0003: {
+ 'name': 'GPSLongitudeRef',
+ 'description': function(value) {
+ switch (value.join('')) {
+ case 'E':
+ return 'East longitude';
+ case 'W':
+ return 'West longitude';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0x0004: {
+ 'name': 'GPSLongitude',
+ 'description': function(value) {
+ return value[0] + value[1] / 60 + value[2] / 3600;
+ }
+ },
+ 0x0005: {
+ 'name': 'GPSAltitudeRef',
+ 'description': function(value) {
+ switch (value) {
+ case 0:
+ return 'Sea level';
+ case 1:
+ return 'Sea level reference (negative value)';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0x0006: {
+ 'name': 'GPSAltitude',
+ 'description': function(value) {
+ return value + ' m';
+ }
+ },
+ 0x0007: {
+ 'name': 'GPSTimeStamp',
+ 'description': function(value) {
+ var padZero;
+
+ padZero = function(num) {
+ var i;
+
+ return ((function() {
+ var _i, _ref, _results;
+
+ _results = [];
+ for (i = _i = 0, _ref = 2 - ('' + Math.floor(num)).length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
+ _results.push('0');
+ }
+ return _results;
+ })()) + num;
+ };
+ return value.map(padZero).join(':');
+ }
+ },
+ 0x0008: 'GPSSatellites',
+ 0x0009: {
+ 'name': 'GPSStatus',
+ 'description': function(value) {
+ switch (value.join('')) {
+ case 'A':
+ return 'Measurement in progress';
+ case 'V':
+ return 'Measurement Interoperability';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0x000a: {
+ 'name': 'GPSMeasureMode',
+ 'description': function(value) {
+ switch (value.join('')) {
+ case '2':
+ return '2-dimensional measurement';
+ case '3':
+ return '3-dimensional measurement';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0x000b: 'GPSDOP',
+ 0x000c: {
+ 'name': 'GPSSpeedRef',
+ 'description': function(value) {
+ switch (value.join('')) {
+ case 'K':
+ return 'Kilometers per hour';
+ case 'M':
+ return 'Miles per hour';
+ case 'N':
+ return 'Knots';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0x000d: 'GPSSpeed',
+ 0x000e: {
+ 'name': 'GPSTrackRef',
+ 'description': function(value) {
+ switch (value.join('')) {
+ case 'T':
+ return 'True direction';
+ case 'M':
+ return 'Magnetic direction';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0x000f: 'GPSTrack',
+ 0x0010: {
+ 'name': 'GPSImgDirectionRef',
+ 'description': function(value) {
+ switch (value.join('')) {
+ case 'T':
+ return 'True direction';
+ case 'M':
+ return 'Magnetic direction';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0x0011: 'GPSImgDirection',
+ 0x0012: 'GPSMapDatum',
+ 0x0013: {
+ 'name': 'GPSDestLatitudeRef',
+ 'description': function(value) {
+ switch (value.join('')) {
+ case 'N':
+ return 'North latitude';
+ case 'S':
+ return 'South latitude';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0x0014: {
+ 'name': 'GPSDestLatitude',
+ 'description': function(value) {
+ return value[0] + value[1] / 60 + value[2] / 3600;
+ }
+ },
+ 0x0015: {
+ 'name': 'GPSDestLongitudeRef',
+ 'description': function(value) {
+ switch (value.join('')) {
+ case 'E':
+ return 'East longitude';
+ case 'W':
+ return 'West longitude';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0x0016: {
+ 'name': 'GPSDestLongitude',
+ 'description': function(value) {
+ return value[0] + value[1] / 60 + value[2] / 3600;
+ }
+ },
+ 0x0017: {
+ 'name': 'GPSDestBearingRef',
+ 'description': function(value) {
+ switch (value.join('')) {
+ case 'T':
+ return 'True direction';
+ case 'M':
+ return 'Magnetic direction';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0x0018: 'GPSDestBearing',
+ 0x0019: {
+ 'name': 'GPSDestDistanceRef',
+ 'description': function(value) {
+ switch (value.join('')) {
+ case 'K':
+ return 'Kilometers';
+ case 'M':
+ return 'Miles';
+ case 'N':
+ return 'Knots';
+ default:
+ return 'Unknown';
+ }
+ }
+ },
+ 0x001a: 'GPSDestDistance',
+ 0x001b: {
+ 'name': 'GPSProcessingMethod',
+ 'description': function(value) {
+ if (value === 0) {
+ return 'Undefined';
+ } else {
+ switch (value.slice(0, 8).map(function(charCode) {
+ return String.fromCharCode(charCode);
+ }).join('')) {
+ case 'ASCII\x00\x00\x00':
+ return value.slice(8, value.length).map(function(charCode) {
+ return String.fromCharCode(charCode);
+ }).join('');
+ case 'JIS\x00\x00\x00\x00\x00':
+ return '[JIS encoded text]';
+ case 'UNICODE\x00':
+ return '[Unicode encoded text]';
+ case '\x00\x00\x00\x00\x00\x00\x00\x00':
+ return '[Undefined encoding]';
+ }
+ }
+ }
+ },
+ 0x001c: {
+ 'name': 'GPSAreaInformation',
+ 'description': function(value) {
+ if (value === 0) {
+ return 'Undefined';
+ } else {
+ switch (value.slice(0, 8).map(function(charCode) {
+ return String.fromCharCode(charCode);
+ }).join('')) {
+ case 'ASCII\x00\x00\x00':
+ return value.slice(8, value.length).map(function(charCode) {
+ return String.fromCharCode(charCode);
+ }).join('');
+ case 'JIS\x00\x00\x00\x00\x00':
+ return '[JIS encoded text]';
+ case 'UNICODE\x00':
+ return '[Unicode encoded text]';
+ case '\x00\x00\x00\x00\x00\x00\x00\x00':
+ return '[Undefined encoding]';
+ }
+ }
+ }
+ },
+ 0x001d: 'GPSDateStamp',
+ 0x001e: {
+ 'name': 'GPSDifferential',
+ 'description': function(value) {
+ switch (value) {
+ case 0:
+ return 'Measurement without differential correction';
+ case 1:
+ return 'Differential correction applied';
+ default:
+ return 'Unknown';
+ }
+ }
+ }
+ },
+ 'interoperability': {
+ 0x0001: 'InteroperabilityIndex',
+ 0x0002: 'UnknownInteroperabilityTag0x0002',
+ 0x1001: 'UnknownInteroperabilityTag0x1001',
+ 0x1002: 'UnknownInteroperabilityTag0x1002'
+ }
+ };
+
+ /*
+ # Gets the image's value of the tag with the given name.
+ #
+ # name string The name of the tag to get the value of
+ #
+ # Returns the value of the tag with the given name if it exists,
+ # otherwise throws "Undefined".
+ */
+
+
+ ExifReader.prototype.getTagValue = function(name) {
+ if (this._tags[name] != null) {
+ return this._tags[name].value;
+ } else {
+ return void 0;
+ }
+ };
+
+ /*
+ # Gets the image's description of the tag with the given name.
+ #
+ # name string The name of the tag to get the description of
+ #
+ # Returns the description of the tag with the given name if it exists,
+ # otherwise throws "Undefined".
+ */
+
+
+ ExifReader.prototype.getTagDescription = function(name) {
+ if (this._tags[name] != null) {
+ return this._tags[name].description;
+ } else {
+ return void 0;
+ }
+ };
+
+ /*
+ # Gets all the image's tags.
+ #
+ # Returns the image's tags as an associative array: name -> description.
+ */
+
+
+ ExifReader.prototype.getAllTags = function() {
+ return this._tags;
+ };
+
+ /*
+ # Delete a tag.
+ #
+ # name string The name of the tag to delete
+ #
+ # Delete the tag with the given name. Can be used to lower memory usage.
+ # E.g., the MakerNote tag can be really large.
+ */
+
+
+ ExifReader.prototype.deleteTag = function(name) {
+ return delete this._tags[name];
+ };
+
+ return ExifReader;
+
+ })();
+
+}).call(this);
diff --git a/public/assets/js/vendor/fastclick.js b/public/assets/js/vendor/fastclick.js
new file mode 100644
index 0000000..9c746c2
--- /dev/null
+++ b/public/assets/js/vendor/fastclick.js
@@ -0,0 +1,790 @@
+/**
+ * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs.
+ *
+ * @version 1.0.1
+ * @codingstandard ftlabs-jsv2
+ * @copyright The Financial Times Limited [All Rights Reserved]
+ * @license MIT License (see LICENSE.txt)
+ */
+
+/*jslint browser:true, node:true*/
+/*global define, Event, Node*/
+
+
+/**
+ * Instantiate fast-clicking listeners on the specified layer.
+ *
+ * @constructor
+ * @param {Element} layer The layer to listen on
+ * @param {Object} options The options to override the defaults
+ */
+function FastClick(layer, options) {
+ 'use strict';
+ var oldOnClick;
+
+ options = options || {};
+
+ /**
+ * Whether a click is currently being tracked.
+ *
+ * @type boolean
+ */
+ this.trackingClick = false;
+
+
+ /**
+ * Timestamp for when click tracking started.
+ *
+ * @type number
+ */
+ this.trackingClickStart = 0;
+
+
+ /**
+ * The element being tracked for a click.
+ *
+ * @type EventTarget
+ */
+ this.targetElement = null;
+
+
+ /**
+ * X-coordinate of touch start event.
+ *
+ * @type number
+ */
+ this.touchStartX = 0;
+
+
+ /**
+ * Y-coordinate of touch start event.
+ *
+ * @type number
+ */
+ this.touchStartY = 0;
+
+
+ /**
+ * ID of the last touch, retrieved from Touch.identifier.
+ *
+ * @type number
+ */
+ this.lastTouchIdentifier = 0;
+
+
+ /**
+ * Touchmove boundary, beyond which a click will be cancelled.
+ *
+ * @type number
+ */
+ this.touchBoundary = options.touchBoundary || 10;
+
+
+ /**
+ * The FastClick layer.
+ *
+ * @type Element
+ */
+ this.layer = layer;
+
+ /**
+ * The minimum time between tap(touchstart and touchend) events
+ *
+ * @type number
+ */
+ this.tapDelay = options.tapDelay || 200;
+
+ if (FastClick.notNeeded(layer)) {
+ return;
+ }
+
+ // Some old versions of Android don't have Function.prototype.bind
+ function bind(method, context) {
+ return function() { return method.apply(context, arguments); };
+ }
+
+
+ var methods = ['onMouse', 'onClick', 'onTouchStart', 'onTouchMove', 'onTouchEnd', 'onTouchCancel'];
+ var context = this;
+ for (var i = 0, l = methods.length; i < l; i++) {
+ context[methods[i]] = bind(context[methods[i]], context);
+ }
+
+ // Set up event handlers as required
+ if (deviceIsAndroid) {
+ layer.addEventListener('mouseover', this.onMouse, true);
+ layer.addEventListener('mousedown', this.onMouse, true);
+ layer.addEventListener('mouseup', this.onMouse, true);
+ }
+
+ layer.addEventListener('click', this.onClick, true);
+ layer.addEventListener('touchstart', this.onTouchStart, false);
+ layer.addEventListener('touchmove', this.onTouchMove, false);
+ layer.addEventListener('touchend', this.onTouchEnd, false);
+ layer.addEventListener('touchcancel', this.onTouchCancel, false);
+
+ // Hack is required for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)
+ // which is how FastClick normally stops click events bubbling to callbacks registered on the FastClick
+ // layer when they are cancelled.
+ if (!Event.prototype.stopImmediatePropagation) {
+ layer.removeEventListener = function(type, callback, capture) {
+ var rmv = Node.prototype.removeEventListener;
+ if (type === 'click') {
+ rmv.call(layer, type, callback.hijacked || callback, capture);
+ } else {
+ rmv.call(layer, type, callback, capture);
+ }
+ };
+
+ layer.addEventListener = function(type, callback, capture) {
+ var adv = Node.prototype.addEventListener;
+ if (type === 'click') {
+ adv.call(layer, type, callback.hijacked || (callback.hijacked = function(event) {
+ if (!event.propagationStopped) {
+ callback(event);
+ }
+ }), capture);
+ } else {
+ adv.call(layer, type, callback, capture);
+ }
+ };
+ }
+
+ // If a handler is already declared in the element's onclick attribute, it will be fired before
+ // FastClick's onClick handler. Fix this by pulling out the user-defined handler function and
+ // adding it as listener.
+ if (typeof layer.onclick === 'function') {
+
+ // Android browser on at least 3.2 requires a new reference to the function in layer.onclick
+ // - the old one won't work if passed to addEventListener directly.
+ oldOnClick = layer.onclick;
+ layer.addEventListener('click', function(event) {
+ oldOnClick(event);
+ }, false);
+ layer.onclick = null;
+ }
+}
+
+
+/**
+ * Android requires exceptions.
+ *
+ * @type boolean
+ */
+var deviceIsAndroid = navigator.userAgent.indexOf('Android') > 0;
+
+
+/**
+ * iOS requires exceptions.
+ *
+ * @type boolean
+ */
+var deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent);
+
+
+/**
+ * iOS 4 requires an exception for select elements.
+ *
+ * @type boolean
+ */
+var deviceIsIOS4 = deviceIsIOS && (/OS 4_\d(_\d)?/).test(navigator.userAgent);
+
+
+/**
+ * iOS 6.0(+?) requires the target element to be manually derived
+ *
+ * @type boolean
+ */
+var deviceIsIOSWithBadTarget = deviceIsIOS && (/OS ([6-9]|\d{2})_\d/).test(navigator.userAgent);
+
+
+/**
+ * Determine whether a given element requires a native click.
+ *
+ * @param {EventTarget|Element} target Target DOM element
+ * @returns {boolean} Returns true if the element needs a native click
+ */
+FastClick.prototype.needsClick = function(target) {
+ 'use strict';
+ switch (target.nodeName.toLowerCase()) {
+
+ // Don't send a synthetic click to disabled inputs (issue #62)
+ case 'button':
+ case 'select':
+ case 'textarea':
+ if (target.disabled) {
+ return true;
+ }
+
+ break;
+ case 'input':
+
+ // File inputs need real clicks on iOS 6 due to a browser bug (issue #68)
+ if ((deviceIsIOS && target.type === 'file') || target.disabled) {
+ return true;
+ }
+
+ break;
+ case 'label':
+ case 'video':
+ return true;
+ }
+
+ return (/\bneedsclick\b/).test(target.className);
+};
+
+
+/**
+ * Determine whether a given element requires a call to focus to simulate click into element.
+ *
+ * @param {EventTarget|Element} target Target DOM element
+ * @returns {boolean} Returns true if the element requires a call to focus to simulate native click.
+ */
+FastClick.prototype.needsFocus = function(target) {
+ 'use strict';
+ switch (target.nodeName.toLowerCase()) {
+ case 'textarea':
+ return true;
+ case 'select':
+ return !deviceIsAndroid;
+ case 'input':
+ switch (target.type) {
+ case 'button':
+ case 'checkbox':
+ case 'file':
+ case 'image':
+ case 'radio':
+ case 'submit':
+ return false;
+ }
+
+ // No point in attempting to focus disabled inputs
+ return !target.disabled && !target.readOnly;
+ default:
+ return (/\bneedsfocus\b/).test(target.className);
+ }
+};
+
+
+/**
+ * Send a click event to the specified element.
+ *
+ * @param {EventTarget|Element} targetElement
+ * @param {Event} event
+ */
+FastClick.prototype.sendClick = function(targetElement, event) {
+ 'use strict';
+ var clickEvent, touch;
+
+ // On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24)
+ if (document.activeElement && document.activeElement !== targetElement) {
+ document.activeElement.blur();
+ }
+
+ touch = event.changedTouches[0];
+
+ // Synthesise a click event, with an extra attribute so it can be tracked
+ clickEvent = document.createEvent('MouseEvents');
+ clickEvent.initMouseEvent(this.determineEventType(targetElement), true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);
+ clickEvent.forwardedTouchEvent = true;
+ targetElement.dispatchEvent(clickEvent);
+};
+
+FastClick.prototype.determineEventType = function(targetElement) {
+ 'use strict';
+
+ //Issue #159: Android Chrome Select Box does not open with a synthetic click event
+ if (deviceIsAndroid && targetElement.tagName.toLowerCase() === 'select') {
+ return 'mousedown';
+ }
+
+ return 'click';
+};
+
+
+/**
+ * @param {EventTarget|Element} targetElement
+ */
+FastClick.prototype.focus = function(targetElement) {
+ 'use strict';
+ var length;
+
+ // Issue #160: on iOS 7, some input elements (e.g. date datetime) throw a vague TypeError on setSelectionRange. These elements don't have an integer value for the selectionStart and selectionEnd properties, but unfortunately that can't be used for detection because accessing the properties also throws a TypeError. Just check the type instead. Filed as Apple bug #15122724.
+ if (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time') {
+ length = targetElement.value.length;
+ targetElement.setSelectionRange(length, length);
+ } else {
+ targetElement.focus();
+ }
+};
+
+
+/**
+ * Check whether the given target element is a child of a scrollable layer and if so, set a flag on it.
+ *
+ * @param {EventTarget|Element} targetElement
+ */
+FastClick.prototype.updateScrollParent = function(targetElement) {
+ 'use strict';
+ var scrollParent, parentElement;
+
+ scrollParent = targetElement.fastClickScrollParent;
+
+ // Attempt to discover whether the target element is contained within a scrollable layer. Re-check if the
+ // target element was moved to another parent.
+ if (!scrollParent || !scrollParent.contains(targetElement)) {
+ parentElement = targetElement;
+ do {
+ if (parentElement.scrollHeight > parentElement.offsetHeight) {
+ scrollParent = parentElement;
+ targetElement.fastClickScrollParent = parentElement;
+ break;
+ }
+
+ parentElement = parentElement.parentElement;
+ } while (parentElement);
+ }
+
+ // Always update the scroll top tracker if possible.
+ if (scrollParent) {
+ scrollParent.fastClickLastScrollTop = scrollParent.scrollTop;
+ }
+};
+
+
+/**
+ * @param {EventTarget} targetElement
+ * @returns {Element|EventTarget}
+ */
+FastClick.prototype.getTargetElementFromEventTarget = function(eventTarget) {
+ 'use strict';
+
+ // On some older browsers (notably Safari on iOS 4.1 - see issue #56) the event target may be a text node.
+ if (eventTarget.nodeType === Node.TEXT_NODE) {
+ return eventTarget.parentNode;
+ }
+
+ return eventTarget;
+};
+
+
+/**
+ * On touch start, record the position and scroll offset.
+ *
+ * @param {Event} event
+ * @returns {boolean}
+ */
+FastClick.prototype.onTouchStart = function(event) {
+ 'use strict';
+ var targetElement, touch, selection;
+
+ // Ignore multiple touches, otherwise pinch-to-zoom is prevented if both fingers are on the FastClick element (issue #111).
+ if (event.targetTouches.length > 1) {
+ return true;
+ }
+
+ targetElement = this.getTargetElementFromEventTarget(event.target);
+ touch = event.targetTouches[0];
+
+ if (deviceIsIOS) {
+
+ // Only trusted events will deselect text on iOS (issue #49)
+ selection = window.getSelection();
+ if (selection.rangeCount && !selection.isCollapsed) {
+ return true;
+ }
+
+ if (!deviceIsIOS4) {
+
+ // Weird things happen on iOS when an alert or confirm dialog is opened from a click event callback (issue #23):
+ // when the user next taps anywhere else on the page, new touchstart and touchend events are dispatched
+ // with the same identifier as the touch event that previously triggered the click that triggered the alert.
+ // Sadly, there is an issue on iOS 4 that causes some normal touch events to have the same identifier as an
+ // immediately preceeding touch event (issue #52), so this fix is unavailable on that platform.
+ if (touch.identifier === this.lastTouchIdentifier) {
+ event.preventDefault();
+ return false;
+ }
+
+ this.lastTouchIdentifier = touch.identifier;
+
+ // If the target element is a child of a scrollable layer (using -webkit-overflow-scrolling: touch) and:
+ // 1) the user does a fling scroll on the scrollable layer
+ // 2) the user stops the fling scroll with another tap
+ // then the event.target of the last 'touchend' event will be the element that was under the user's finger
+ // when the fling scroll was started, causing FastClick to send a click event to that layer - unless a check
+ // is made to ensure that a parent layer was not scrolled before sending a synthetic click (issue #42).
+ this.updateScrollParent(targetElement);
+ }
+ }
+
+ this.trackingClick = true;
+ this.trackingClickStart = event.timeStamp;
+ this.targetElement = targetElement;
+
+ this.touchStartX = touch.pageX;
+ this.touchStartY = touch.pageY;
+
+ // Prevent phantom clicks on fast double-tap (issue #36)
+ if ((event.timeStamp - this.lastClickTime) < this.tapDelay) {
+ event.preventDefault();
+ }
+
+ return true;
+};
+
+
+/**
+ * Based on a touchmove event object, check whether the touch has moved past a boundary since it started.
+ *
+ * @param {Event} event
+ * @returns {boolean}
+ */
+FastClick.prototype.touchHasMoved = function(event) {
+ 'use strict';
+ var touch = event.changedTouches[0], boundary = this.touchBoundary;
+
+ if (Math.abs(touch.pageX - this.touchStartX) > boundary || Math.abs(touch.pageY - this.touchStartY) > boundary) {
+ return true;
+ }
+
+ return false;
+};
+
+
+/**
+ * Update the last position.
+ *
+ * @param {Event} event
+ * @returns {boolean}
+ */
+FastClick.prototype.onTouchMove = function(event) {
+ 'use strict';
+ if (!this.trackingClick) {
+ return true;
+ }
+
+ // If the touch has moved, cancel the click tracking
+ if (this.targetElement !== this.getTargetElementFromEventTarget(event.target) || this.touchHasMoved(event)) {
+ this.trackingClick = false;
+ this.targetElement = null;
+ }
+
+ return true;
+};
+
+
+/**
+ * Attempt to find the labelled control for the given label element.
+ *
+ * @param {EventTarget|HTMLLabelElement} labelElement
+ * @returns {Element|null}
+ */
+FastClick.prototype.findControl = function(labelElement) {
+ 'use strict';
+
+ // Fast path for newer browsers supporting the HTML5 control attribute
+ if (labelElement.control !== undefined) {
+ return labelElement.control;
+ }
+
+ // All browsers under test that support touch events also support the HTML5 htmlFor attribute
+ if (labelElement.htmlFor) {
+ return document.getElementById(labelElement.htmlFor);
+ }
+
+ // If no for attribute exists, attempt to retrieve the first labellable descendant element
+ // the list of which is defined here: http://www.w3.org/TR/html5/forms.html#category-label
+ return labelElement.querySelector('button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea');
+};
+
+
+/**
+ * On touch end, determine whether to send a click event at once.
+ *
+ * @param {Event} event
+ * @returns {boolean}
+ */
+FastClick.prototype.onTouchEnd = function(event) {
+ 'use strict';
+ var forElement, trackingClickStart, targetTagName, scrollParent, touch, targetElement = this.targetElement;
+
+ if (!this.trackingClick) {
+ return true;
+ }
+
+ // Prevent phantom clicks on fast double-tap (issue #36)
+ if ((event.timeStamp - this.lastClickTime) < this.tapDelay) {
+ this.cancelNextClick = true;
+ return true;
+ }
+
+ // Reset to prevent wrong click cancel on input (issue #156).
+ this.cancelNextClick = false;
+
+ this.lastClickTime = event.timeStamp;
+
+ trackingClickStart = this.trackingClickStart;
+ this.trackingClick = false;
+ this.trackingClickStart = 0;
+
+ // On some iOS devices, the targetElement supplied with the event is invalid if the layer
+ // is performing a transition or scroll, and has to be re-detected manually. Note that
+ // for this to function correctly, it must be called *after* the event target is checked!
+ // See issue #57; also filed as rdar://13048589 .
+ if (deviceIsIOSWithBadTarget) {
+ touch = event.changedTouches[0];
+
+ // In certain cases arguments of elementFromPoint can be negative, so prevent setting targetElement to null
+ targetElement = document.elementFromPoint(touch.pageX - window.pageXOffset, touch.pageY - window.pageYOffset) || targetElement;
+ targetElement.fastClickScrollParent = this.targetElement.fastClickScrollParent;
+ }
+
+ targetTagName = targetElement.tagName.toLowerCase();
+ if (targetTagName === 'label') {
+ forElement = this.findControl(targetElement);
+ if (forElement) {
+ this.focus(targetElement);
+ if (deviceIsAndroid) {
+ return false;
+ }
+
+ targetElement = forElement;
+ }
+ } else if (this.needsFocus(targetElement)) {
+
+ // Case 1: If the touch started a while ago (best guess is 100ms based on tests for issue #36) then focus will be triggered anyway. Return early and unset the target element reference so that the subsequent click will be allowed through.
+ // Case 2: Without this exception for input elements tapped when the document is contained in an iframe, then any inputted text won't be visible even though the value attribute is updated as the user types (issue #37).
+ if ((event.timeStamp - trackingClickStart) > 100 || (deviceIsIOS && window.top !== window && targetTagName === 'input')) {
+ this.targetElement = null;
+ return false;
+ }
+
+ this.focus(targetElement);
+ this.sendClick(targetElement, event);
+
+ // Select elements need the event to go through on iOS 4, otherwise the selector menu won't open.
+ // Also this breaks opening selects when VoiceOver is active on iOS6, iOS7 (and possibly others)
+ if (!deviceIsIOS || targetTagName !== 'select') {
+ this.targetElement = null;
+ event.preventDefault();
+ }
+
+ return false;
+ }
+
+ if (deviceIsIOS && !deviceIsIOS4) {
+
+ // Don't send a synthetic click event if the target element is contained within a parent layer that was scrolled
+ // and this tap is being used to stop the scrolling (usually initiated by a fling - issue #42).
+ scrollParent = targetElement.fastClickScrollParent;
+ if (scrollParent && scrollParent.fastClickLastScrollTop !== scrollParent.scrollTop) {
+ return true;
+ }
+ }
+
+ // Prevent the actual click from going though - unless the target node is marked as requiring
+ // real clicks or if it is in the whitelist in which case only non-programmatic clicks are permitted.
+ if (!this.needsClick(targetElement)) {
+ event.preventDefault();
+ this.sendClick(targetElement, event);
+ }
+
+ return false;
+};
+
+
+/**
+ * On touch cancel, stop tracking the click.
+ *
+ * @returns {void}
+ */
+FastClick.prototype.onTouchCancel = function() {
+ 'use strict';
+ this.trackingClick = false;
+ this.targetElement = null;
+};
+
+
+/**
+ * Determine mouse events which should be permitted.
+ *
+ * @param {Event} event
+ * @returns {boolean}
+ */
+FastClick.prototype.onMouse = function(event) {
+ 'use strict';
+
+ // If a target element was never set (because a touch event was never fired) allow the event
+ if (!this.targetElement) {
+ return true;
+ }
+
+ if (event.forwardedTouchEvent) {
+ return true;
+ }
+
+ // Programmatically generated events targeting a specific element should be permitted
+ if (!event.cancelable) {
+ return true;
+ }
+
+ // Derive and check the target element to see whether the mouse event needs to be permitted;
+ // unless explicitly enabled, prevent non-touch click events from triggering actions,
+ // to prevent ghost/doubleclicks.
+ if (!this.needsClick(this.targetElement) || this.cancelNextClick) {
+
+ // Prevent any user-added listeners declared on FastClick element from being fired.
+ if (event.stopImmediatePropagation) {
+ event.stopImmediatePropagation();
+ } else {
+
+ // Part of the hack for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)
+ event.propagationStopped = true;
+ }
+
+ // Cancel the event
+ event.stopPropagation();
+ event.preventDefault();
+
+ return false;
+ }
+
+ // If the mouse event is permitted, return true for the action to go through.
+ return true;
+};
+
+
+/**
+ * On actual clicks, determine whether this is a touch-generated click, a click action occurring
+ * naturally after a delay after a touch (which needs to be cancelled to avoid duplication), or
+ * an actual click which should be permitted.
+ *
+ * @param {Event} event
+ * @returns {boolean}
+ */
+FastClick.prototype.onClick = function(event) {
+ 'use strict';
+ var permitted;
+
+ // It's possible for another FastClick-like library delivered with third-party code to fire a click event before FastClick does (issue #44). In that case, set the click-tracking flag back to false and return early. This will cause onTouchEnd to return early.
+ if (this.trackingClick) {
+ this.targetElement = null;
+ this.trackingClick = false;
+ return true;
+ }
+
+ // Very odd behaviour on iOS (issue #18): if a submit element is present inside a form and the user hits enter in the iOS simulator or clicks the Go button on the pop-up OS keyboard the a kind of 'fake' click event will be triggered with the submit-type input element as the target.
+ if (event.target.type === 'submit' && event.detail === 0) {
+ return true;
+ }
+
+ permitted = this.onMouse(event);
+
+ // Only unset targetElement if the click is not permitted. This will ensure that the check for !targetElement in onMouse fails and the browser's click doesn't go through.
+ if (!permitted) {
+ this.targetElement = null;
+ }
+
+ // If clicks are permitted, return true for the action to go through.
+ return permitted;
+};
+
+
+/**
+ * Remove all FastClick's event listeners.
+ *
+ * @returns {void}
+ */
+FastClick.prototype.destroy = function() {
+ 'use strict';
+ var layer = this.layer;
+
+ if (deviceIsAndroid) {
+ layer.removeEventListener('mouseover', this.onMouse, true);
+ layer.removeEventListener('mousedown', this.onMouse, true);
+ layer.removeEventListener('mouseup', this.onMouse, true);
+ }
+
+ layer.removeEventListener('click', this.onClick, true);
+ layer.removeEventListener('touchstart', this.onTouchStart, false);
+ layer.removeEventListener('touchmove', this.onTouchMove, false);
+ layer.removeEventListener('touchend', this.onTouchEnd, false);
+ layer.removeEventListener('touchcancel', this.onTouchCancel, false);
+};
+
+
+/**
+ * Check whether FastClick is needed.
+ *
+ * @param {Element} layer The layer to listen on
+ */
+FastClick.notNeeded = function(layer) {
+ 'use strict';
+ var metaViewport;
+ var chromeVersion;
+
+ // Devices that don't support touch don't need FastClick
+ if (typeof window.ontouchstart === 'undefined') {
+ return true;
+ }
+
+ // Chrome version - zero for other browsers
+ chromeVersion = +(/Chrome\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];
+
+ if (chromeVersion) {
+
+ if (deviceIsAndroid) {
+ metaViewport = document.querySelector('meta[name=viewport]');
+
+ if (metaViewport) {
+ // Chrome on Android with user-scalable="no" doesn't need FastClick (issue #89)
+ if (metaViewport.content.indexOf('user-scalable=no') !== -1) {
+ return true;
+ }
+ // Chrome 32 and above with width=device-width or less don't need FastClick
+ if (chromeVersion > 31 && document.documentElement.scrollWidth <= window.outerWidth) {
+ return true;
+ }
+ }
+
+ // Chrome desktop doesn't need FastClick (issue #15)
+ } else {
+ return true;
+ }
+ }
+
+ // IE10 with -ms-touch-action: none, which disables double-tap-to-zoom (issue #97)
+ if (layer.style.msTouchAction === 'none') {
+ return true;
+ }
+
+ return false;
+};
+
+
+/**
+ * Factory method for creating a FastClick object
+ *
+ * @param {Element} layer The layer to listen on
+ * @param {Object} options The options to override the defaults
+ */
+FastClick.attach = function(layer, options) {
+ 'use strict';
+ return new FastClick(layer, options);
+};
+
+
+if (typeof define !== 'undefined' && define.amd) {
+
+ // AMD. Register as an anonymous module.
+ define(function() {
+ 'use strict';
+ return FastClick;
+ });
+} else if (typeof module !== 'undefined' && module.exports) {
+ module.exports = FastClick.attach;
+ module.exports.FastClick = FastClick;
+} else {
+ window.FastClick = FastClick;
+}
diff --git a/public/assets/js/vendor/renderToCanvas.js b/public/assets/js/vendor/renderToCanvas.js
new file mode 100644
index 0000000..376e61a
--- /dev/null
+++ b/public/assets/js/vendor/renderToCanvas.js
@@ -0,0 +1,117 @@
+function renderToCanvas(img, options) {
+ if (!img) return
+ options = options || {}
+
+ // Canvas max size for any side
+ var maxSize = 2000
+ var canvas = document.createElement('canvas')
+ var ctx = canvas.getContext('2d')
+ var initialScale = options.scale || 1
+ // Scale to needed to constrain canvas to max size
+ var scale = getScale(img.width * initialScale,
+ img.height * initialScale, maxSize, maxSize)
+ // Still need to apply the user defined scale
+ scale *= initialScale
+ var width = canvas.width = Math.round(img.width * scale)
+ var height = canvas.height = Math.round(img.height * scale)
+ var correctOrientation = options.correctOrientation
+ var jpeg = !!img.src.match(/data:image\/jpeg|\.jpeg$|\.jpg$/i)
+ var dataURI = !!img.src.match(/^data:/)
+
+ ctx.save()
+
+ // Can only correct orientation on JPEGs represented as dataURIs
+ // for the time being
+ if (correctOrientation && jpeg && dataURI) {
+ applyOrientationCorrection()
+ }
+ // Resize image if too large
+ if (scale !== 1) {
+ ctx.scale(scale, scale)
+ }
+
+ ctx.drawImage(img, 0, 0)
+ ctx.restore()
+
+ return canvas
+
+ function applyOrientationCorrection() {
+ var orientation = getOrientation(img.src)
+ // Only apply transform if there is some non-normal orientation
+ if (orientation && orientation !== 1) {
+ var transform = orientationToTransform[orientation]
+ var rotation = transform.rotation
+ var mirror = transform.mirror
+ var flipAspect = rotation === 90 || rotation === 270
+ if (flipAspect) {
+ // Fancy schmancy swap algo
+ canvas.width = canvas.height + canvas.width
+ canvas.height = canvas.width - canvas.height
+ canvas.width -= canvas.height
+ }
+ if (rotation > 0) {
+ applyRotation(rotation)
+ }
+ if (mirror) {
+ // TODO This is broken. Not sure how to apply this transform
+ // No biggie, we don't run into this case ATM
+ // applyMirror()
+ }
+ }
+ }
+
+ /**
+ * Some images are friggin rotated n shit! (iOS)
+ * wut the heck
+ * dang it
+ * man
+ * read the EXIF data
+ * return EXIF orientation value
+ */
+ function getOrientation(uri) {
+ var exif = new ExifReader
+ // Split off the base64 data
+ var base64String = uri.split(',')[1]
+ // Read off first 128KB, which is all we need to
+ // get the EXIF data
+ var arr = base64ToUint8Array(base64String, 0, Math.pow(2, 17))
+ try {
+ exif.load(arr.buffer)
+ return exif.getTagValue('Orientation')
+ } catch (err) {
+ return 1
+ }
+ }
+
+ /**
+ * Apply rotation such that rotated image will be
+ * centered in canvas
+ */
+ function applyRotation(deg) {
+ var radians = deg * (Math.PI / 180)
+ if (deg === 90) {
+ ctx.translate(canvas.width, 0)
+ } else if (deg === 180) {
+ ctx.translate(canvas.width, canvas.height)
+ } else if (deg == 270) {
+ ctx.translate(0, canvas.height)
+ }
+ ctx.rotate(radians)
+ }
+
+ function applyMirror() {
+ ctx.scale(-1, 1)
+ }
+}
+
+function base64ToUint8Array(string, start, finish) {
+ var start = start || 0
+ var finish = finish || string.length
+ // atob that shit
+ var binary = atob(string)
+ var buffer = new Uint8Array(binary.length)
+ for (var i = start; i < finish; i++) {
+ buffer[i] = binary.charCodeAt(i)
+ }
+ return buffer
+}