lodash-rails 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,46 +1,46 @@
1
1
  /**
2
2
  * @license
3
- * Lo-Dash 1.1.1 (Custom Build) lodash.com/license
3
+ * Lo-Dash 1.2.0 (Custom Build) lodash.com/license
4
4
  * Build: `lodash -o ./dist/lodash.compat.js`
5
5
  * Underscore.js 1.4.4 underscorejs.org/LICENSE
6
6
  */
7
- ;(function(n){function t(r){function a(n){return n&&typeof n=="object"&&!fe(n)&&Vt.call(n,"__wrapped__")?n:new K(n)}function q(n,t,e){var r=n.length,u=r-t>=e;if(u){var a={};for(e=t-1;++e<r;){var o=qt(n[e]);(Vt.call(a,o)?a[o]:a[o]=[]).push(n[e])}}return function(e){if(u){var r=qt(e);return Vt.call(a,r)&&-1<yt(a[r],e)}return-1<yt(n,e,t)}}function B(n){return n.charCodeAt(0)}function F(n,t){var e=n.b,r=t.b;if(n=n.a,t=t.a,n!==t){if(n>t||typeof n=="undefined")return 1;if(n<t||typeof t=="undefined")return-1
8
- }return e<r?-1:1}function R(n,t,e,r){function u(){var r=arguments,c=o?this:t;return a||(n=t[i]),e.length&&(r=r.length?(r=V(r),f?r.concat(e):e.concat(r)):e),this instanceof u?(M.prototype=n.prototype,c=new M,M.prototype=null,r=n.apply(c,r),Z(r)?r:c):n.apply(c,r)}var a=Y(n),o=!e,i=t;if(o){var f=r;e=t}else if(!a){if(!r)throw new Bt;t=n}return u}function T(){for(var n,t={g:_,b:"k(m)",c:"",e:"m",f:"",h:"",i:!0,j:!!le},e=0;n=arguments[e];e++)for(var r in n)t[r]=n[r];if(n=t.a,t.d=/^[^,]+/.exec(n)[0],e=At,r="var i,m="+t.d+",u="+t.e+";if(!m)return u;"+t.h+";",t.b?(r+="var n=m.length;i=-1;if("+t.b+"){",ie.unindexedChars&&(r+="if(l(m)){m=m.split('')}"),r+="while(++i<n){"+t.f+"}}else{"):ie.nonEnumArgs&&(r+="var n=m.length;i=-1;if(n&&j(m)){while(++i<n){i+='';"+t.f+"}}else{"),ie.enumPrototypes&&(r+="var v=typeof m=='function';"),t.i&&t.j)r+="var s=-1,t=r[typeof m]?o(m):[],n=t.length;while(++s<n){i=t[s];",ie.enumPrototypes&&(r+="if(!(v&&i=='prototype')){"),r+=t.f,ie.enumPrototypes&&(r+="}"),r+="}";
9
- else if(r+="for(i in m){",(ie.enumPrototypes||t.i)&&(r+="if(",ie.enumPrototypes&&(r+="!(v&&i=='prototype')"),ie.enumPrototypes&&t.i&&(r+="&&"),t.i&&(r+="h.call(m,i)"),r+="){"),r+=t.f+";",(ie.enumPrototypes||t.i)&&(r+="}"),r+="}",ie.nonEnumShadows){r+="var f=m.constructor;";for(var u=0;7>u;u++)r+="i='"+t.g[u]+"';if(","constructor"==t.g[u]&&(r+="!(f&&f.prototype===m)&&"),r+="h.call(m,i)){"+t.f+"}"}return(t.b||ie.nonEnumArgs)&&(r+="}"),r+=t.c+";return u",e("h,j,k,l,o,p,r","return function("+n+"){"+r+"}")(Vt,H,fe,tt,le,a,P)
10
- }function D(n){return"\\"+N[n]}function z(n){return se[n]}function L(n){return typeof n.toString!="function"&&typeof(n+"")=="string"}function K(n){this.__wrapped__=n}function M(){}function U(n){var t=!1;if(!n||Qt.call(n)!=E||!ie.argsClass&&H(n))return t;var e=n.constructor;return(Y(e)?e instanceof e:ie.nodeClass||!L(n))?ie.ownLast?(ye(n,function(n,e,r){return t=Vt.call(r,e),!1}),!0===t):(ye(n,function(n,e){t=e}),!1===t||Vt.call(n,t)):t}function V(n,t,e){t||(t=0),typeof e=="undefined"&&(e=n?n.length:0);
11
- var r=-1;e=e-t||0;for(var u=Ot(0>e?0:e);++r<e;)u[r]=n[t+r];return u}function G(n){return ve[n]}function H(n){return Qt.call(n)==C}function J(n,t,r,u,o,i){var f=n;if(typeof t=="function"&&(u=r,r=t,t=!1),typeof r=="function"){if(r=typeof u=="undefined"?r:a.createCallback(r,u,1),f=r(f),typeof f!="undefined")return f;f=n}if(u=Z(f)){var c=Qt.call(f);if(!I[c]||!ie.nodeClass&&L(f))return f;var l=fe(f)}if(!u||!t)return u?l?V(f):ge({},f):f;switch(u=oe[c],c){case j:case k:return new u(+f);case O:case A:return new u(f);
12
- case S:return u(f.source,v.exec(f))}for(o||(o=[]),i||(i=[]),c=o.length;c--;)if(o[c]==n)return i[c];return f=l?u(f.length):{},l&&(Vt.call(n,"index")&&(f.index=n.index),Vt.call(n,"input")&&(f.input=n.input)),o.push(n),i.push(f),(l?ft:me)(n,function(n,u){f[u]=J(n,t,r,e,o,i)}),f}function Q(n){var t=[];return ye(n,function(n,e){Y(n)&&t.push(e)}),t.sort()}function W(n){for(var t=-1,e=le(n),r=e.length,u={};++t<r;){var a=e[t];u[n[a]]=a}return u}function X(n,t,e,r,u,o){var f=e===i;if(e&&!f){e=typeof r=="undefined"?e:a.createCallback(e,r,2);
13
- var c=e(n,t);if(typeof c!="undefined")return!!c}if(n===t)return 0!==n||1/n==1/t;var l=typeof n,p=typeof t;if(n===n&&(!n||"function"!=l&&"object"!=l)&&(!t||"function"!=p&&"object"!=p))return!1;if(null==n||null==t)return n===t;if(p=Qt.call(n),l=Qt.call(t),p==C&&(p=E),l==C&&(l=E),p!=l)return!1;switch(p){case j:case k:return+n==+t;case O:return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case S:case A:return n==qt(t)}if(l=p==w,!l){if(Vt.call(n,"__wrapped__")||Vt.call(t,"__wrapped__"))return X(n.__wrapped__||n,t.__wrapped__||t,e,r,u,o);
14
- if(p!=E||!ie.nodeClass&&(L(n)||L(t)))return!1;var p=!ie.argsObject&&H(n)?Nt:n.constructor,s=!ie.argsObject&&H(t)?Nt:t.constructor;if(p!=s&&(!Y(p)||!(p instanceof p&&Y(s)&&s instanceof s)))return!1}for(u||(u=[]),o||(o=[]),p=u.length;p--;)if(u[p]==n)return o[p]==t;var v=0,c=!0;if(u.push(n),o.push(t),l){if(p=n.length,v=t.length,c=v==n.length,!c&&!f)return c;for(;v--;)if(l=p,s=t[v],f)for(;l--&&!(c=X(n[l],s,e,r,u,o)););else if(!(c=X(n[v],s,e,r,u,o)))break;return c}return ye(t,function(t,a,i){return Vt.call(i,a)?(v++,c=Vt.call(n,a)&&X(n[a],t,e,r,u,o)):void 0
15
- }),c&&!f&&ye(n,function(n,t,e){return Vt.call(e,t)?c=-1<--v:void 0}),c}function Y(n){return typeof n=="function"}function Z(n){return n?P[typeof n]:!1}function nt(n){return typeof n=="number"||Qt.call(n)==O}function tt(n){return typeof n=="string"||Qt.call(n)==A}function et(n,t,e){var r=arguments,u=0,o=2;if(!Z(n))return n;if(e===i)var f=r[3],c=r[4],l=r[5];else c=[],l=[],typeof e!="number"&&(o=r.length),3<o&&"function"==typeof r[o-2]?f=a.createCallback(r[--o-1],r[o--],2):2<o&&"function"==typeof r[o-1]&&(f=r[--o]);
16
- for(;++u<o;)(fe(r[u])?ft:me)(r[u],function(t,e){var r,u,a=t,o=n[e];if(t&&((u=fe(t))||de(t))){for(a=c.length;a--;)if(r=c[a]==t){o=l[a];break}r||(o=u?fe(o)?o:[]:de(o)?o:{},f&&(a=f(o,t),typeof a!="undefined"&&(o=a)),c.push(t),l.push(o),f||(o=et(o,t,i,f,c,l)))}else f&&(a=f(o,t),typeof a=="undefined"&&(a=t)),typeof a!="undefined"&&(o=a);n[e]=o});return n}function rt(n){for(var t=-1,e=le(n),r=e.length,u=Ot(r);++t<r;)u[t]=n[e[t]];return u}function ut(n,t,e){var r=-1,u=n?n.length:0,a=!1;return e=(0>e?te(0,u+e):e)||0,typeof u=="number"?a=-1<(tt(n)?n.indexOf(t,e):yt(n,t,e)):pe(n,function(n){return++r<e?void 0:!(a=n===t)
17
- }),a}function at(n,t,e){var r=!0;if(t=a.createCallback(t,e),fe(n)){e=-1;for(var u=n.length;++e<u&&(r=!!t(n[e],e,n)););}else pe(n,function(n,e,u){return r=!!t(n,e,u)});return r}function ot(n,t,e){var r=[];if(t=a.createCallback(t,e),fe(n)){e=-1;for(var u=n.length;++e<u;){var o=n[e];t(o,e,n)&&r.push(o)}}else pe(n,function(n,e,u){t(n,e,u)&&r.push(n)});return r}function it(n,t,e){if(t=a.createCallback(t,e),!fe(n)){var r;return pe(n,function(n,e,u){return t(n,e,u)?(r=n,!1):void 0}),r}e=-1;for(var u=n.length;++e<u;){var o=n[e];
18
- if(t(o,e,n))return o}}function ft(n,t,e){if(t&&typeof e=="undefined"&&fe(n)){e=-1;for(var r=n.length;++e<r&&!1!==t(n[e],e,n););}else pe(n,t,e);return n}function ct(n,t,e){var r=-1,u=n?n.length:0,o=Ot(typeof u=="number"?u:0);if(t=a.createCallback(t,e),fe(n))for(;++r<u;)o[r]=t(n[r],r,n);else pe(n,function(n,e,u){o[++r]=t(n,e,u)});return o}function lt(n,t,e){var r=-1/0,u=r;if(!t&&fe(n)){e=-1;for(var o=n.length;++e<o;){var i=n[e];i>u&&(u=i)}}else t=!t&&tt(n)?B:a.createCallback(t,e),pe(n,function(n,e,a){e=t(n,e,a),e>r&&(r=e,u=n)
19
- });return u}function pt(n,t,e,r){var u=3>arguments.length;if(t=a.createCallback(t,r,4),fe(n)){var o=-1,i=n.length;for(u&&(e=n[++o]);++o<i;)e=t(e,n[o],o,n)}else pe(n,function(n,r,a){e=u?(u=!1,n):t(e,n,r,a)});return e}function st(n,t,e,r){var u=n,o=n?n.length:0,i=3>arguments.length;if(typeof o!="number")var f=le(n),o=f.length;else ie.unindexedChars&&tt(n)&&(u=n.split(""));return t=a.createCallback(t,r,4),ft(n,function(n,r,a){r=f?f[--o]:--o,e=i?(i=!1,u[r]):t(e,u[r],r,a)}),e}function vt(n,t,e){var r;
20
- if(t=a.createCallback(t,e),fe(n)){e=-1;for(var u=n.length;++e<u&&!(r=t(n[e],e,n)););}else pe(n,function(n,e,u){return!(r=t(n,e,u))});return!!r}function gt(n,t,e){if(n){var r=0,u=n.length;if(typeof t!="number"&&null!=t){var o=-1;for(t=a.createCallback(t,e);++o<u&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n[0];return V(n,0,ee(te(0,r),u))}}function ht(n,t,e,r){var u=-1,o=n?n.length:0,i=[];for(typeof t!="boolean"&&null!=t&&(r=e,e=t,t=!1),null!=e&&(e=a.createCallback(e,r));++u<o;)r=n[u],e&&(r=e(r,u,n)),fe(r)?Gt.apply(i,t?r:ht(r)):i.push(r);
21
- return i}function yt(n,t,e){var r=-1,u=n?n.length:0;if(typeof e=="number")r=(0>e?te(0,u+e):e||0)-1;else if(e)return r=dt(n,t),n[r]===t?r:-1;for(;++r<u;)if(n[r]===t)return r;return-1}function mt(n,t,e){if(typeof t!="number"&&null!=t){var r=0,u=-1,o=n?n.length:0;for(t=a.createCallback(t,e);++u<o&&t(n[u],u,n);)r++}else r=null==t||e?1:te(0,t);return V(n,r)}function dt(n,t,e,r){var u=0,o=n?n.length:u;for(e=e?a.createCallback(e,r,1):jt,t=e(t);u<o;)r=u+o>>>1,e(n[r])<t?u=r+1:o=r;return u}function bt(n,t,e,r){var u=-1,o=n?n.length:0,i=[],f=i;
22
- typeof t!="boolean"&&null!=t&&(r=e,e=t,t=!1);var c=!t&&75<=o;if(c)var l={};for(null!=e&&(f=[],e=a.createCallback(e,r));++u<o;){r=n[u];var p=e?e(r,u,n):r;if(c)var s=qt(p),s=Vt.call(l,s)?!(f=l[s]):f=l[s]=[];(t?!u||f[f.length-1]!==p:s||0>yt(f,p))&&((e||c)&&f.push(p),i.push(r))}return i}function _t(n,t){for(var e=-1,r=n?n.length:0,u={};++e<r;){var a=n[e];t?u[a]=t[e]:u[a[0]]=a[1]}return u}function Ct(n,t){return ie.fastBind||Wt&&2<arguments.length?Wt.call.apply(Wt,arguments):R(n,t,V(arguments,2))}function wt(n){var t=V(arguments,1);
23
- return Jt(function(){n.apply(e,t)},1)}function jt(n){return n}function kt(n){ft(Q(n),function(t){var e=a[t]=n[t];a.prototype[t]=function(){var n=this.__wrapped__,t=[n];return Gt.apply(t,arguments),t=e.apply(a,t),n&&typeof n=="object"&&n==t?this:new K(t)}})}function xt(){return this.__wrapped__}r=r?$.defaults(n.Object(),r,$.pick(n,b)):n;var Ot=r.Array,Et=r.Boolean,St=r.Date,At=r.Function,It=r.Math,Pt=r.Number,Nt=r.Object,$t=r.RegExp,qt=r.String,Bt=r.TypeError,Ft=Ot(),Rt=Nt(),Tt=r._,Dt=$t("^"+qt(Rt.valueOf).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),zt=It.ceil,Lt=r.clearTimeout,Kt=Ft.concat,Mt=It.floor,Ut=Dt.test(Ut=Nt.getPrototypeOf)&&Ut,Vt=Rt.hasOwnProperty,Gt=Ft.push,Ht=r.setImmediate,Jt=r.setTimeout,Qt=Rt.toString,Wt=Dt.test(Wt=V.bind)&&Wt,Xt=Dt.test(Xt=Ot.isArray)&&Xt,Yt=r.isFinite,Zt=r.isNaN,ne=Dt.test(ne=Nt.keys)&&ne,te=It.max,ee=It.min,re=r.parseInt,ue=It.random,It=Dt.test(r.attachEvent),ae=Wt&&!/\n|true/.test(Wt+It),oe={};
24
- oe[w]=Ot,oe[j]=Et,oe[k]=St,oe[E]=Nt,oe[O]=Pt,oe[S]=$t,oe[A]=qt;var ie=a.support={};(function(){var n=function(){this.x=1},t={0:1,length:1},e=[];n.prototype={valueOf:1,y:1};for(var r in new n)e.push(r);for(r in arguments);ie.argsObject=arguments.constructor==Nt,ie.argsClass=H(arguments),ie.enumPrototypes=n.propertyIsEnumerable("prototype"),ie.fastBind=Wt&&!ae,ie.ownLast="x"!=e[0],ie.nonEnumArgs=0!=r,ie.nonEnumShadows=!/valueOf/.test(e),ie.spliceObjects=(Ft.splice.call(t,0,1),!t[0]),ie.unindexedChars="xx"!="x"[0]+Nt("x")[0];
25
- try{ie.nodeClass=!(Qt.call(document)==E&&!({toString:0}+""))}catch(u){ie.nodeClass=!0}})(1),a.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:g,variable:"",imports:{_:a}},Et={a:"q,w,g",h:"var a=arguments,b=0,c=typeof g=='number'?2:a.length;while(++b<c){m=a[b];if(m&&r[typeof m]){",f:"if(typeof u[i]=='undefined')u[i]=m[i]",c:"}}"},Pt={a:"e,d,x",h:"d=d&&typeof x=='undefined'?d:p.createCallback(d,x)",b:"typeof n=='number'",f:"if(d(m[i],i,e)===false)return u"},It={h:"if(!r[typeof m])return u;"+Pt.h,b:!1},K.prototype=a.prototype,ie.argsClass||(H=function(n){return n?Vt.call(n,"callee"):!1
26
- });var fe=Xt||function(n){return ie.argsObject&&n instanceof Ot||Qt.call(n)==w},ce=T({a:"q",e:"[]",h:"if(!(r[typeof q]))return u",f:"u.push(i)",b:!1}),le=ne?function(n){return Z(n)?ie.enumPrototypes&&typeof n=="function"||ie.nonEnumArgs&&n.length&&H(n)?ce(n):ne(n):[]}:ce,pe=T(Pt),se={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},ve=W(se),ge=T(Et,{h:Et.h.replace(";",";if(c>3&&typeof a[c-2]=='function'){var d=p.createCallback(a[--c-1],a[c--],2);}else if(c>2&&typeof a[c-1]=='function'){d=a[--c];}"),f:"u[i]=d?d(u[i],m[i]):m[i]"}),he=T(Et),ye=T(Pt,It,{i:!1}),me=T(Pt,It);
27
- Y(/x/)&&(Y=function(n){return n instanceof At||Qt.call(n)==x});var de=Ut?function(n){if(!n||Qt.call(n)!=E||!ie.argsClass&&H(n))return!1;var t=n.valueOf,e=typeof t=="function"&&(e=Ut(t))&&Ut(e);return e?n==e||Ut(n)==e:U(n)}:U;return ae&&u&&typeof Ht=="function"&&(wt=Ct(Ht,r)),Ht=8==re("08")?re:function(n,t){return re(tt(n)?n.replace(h,""):n,t||0)},a.after=function(n,t){return 1>n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},a.assign=ge,a.at=function(n){var t=-1,e=Kt.apply(Ft,V(arguments,1)),r=e.length,u=Ot(r);
28
- for(ie.unindexedChars&&tt(n)&&(n=n.split(""));++t<r;)u[t]=n[e[t]];return u},a.bind=Ct,a.bindAll=function(n){for(var t=Kt.apply(Ft,arguments),e=1<t.length?0:(t=Q(n),-1),r=t.length;++e<r;){var u=t[e];n[u]=Ct(n[u],n)}return n},a.bindKey=function(n,t){return R(n,t,V(arguments,2),i)},a.compact=function(n){for(var t=-1,e=n?n.length:0,r=[];++t<e;){var u=n[t];u&&r.push(u)}return r},a.compose=function(){var n=arguments;return function(){for(var t=arguments,e=n.length;e--;)t=[n[e].apply(this,t)];return t[0]
29
- }},a.countBy=function(n,t,e){var r={};return t=a.createCallback(t,e),ft(n,function(n,e,u){e=qt(t(n,e,u)),Vt.call(r,e)?r[e]++:r[e]=1}),r},a.createCallback=function(n,t,e){if(null==n)return jt;var r=typeof n;if("function"!=r){if("object"!=r)return function(t){return t[n]};var u=le(n);return function(t){for(var e=u.length,r=!1;e--&&(r=X(t[u[e]],n[u[e]],i)););return r}}return typeof t!="undefined"?1===e?function(e){return n.call(t,e)}:2===e?function(e,r){return n.call(t,e,r)}:4===e?function(e,r,u,a){return n.call(t,e,r,u,a)
30
- }:function(e,r,u){return n.call(t,e,r,u)}:n},a.debounce=function(n,t,e){function r(){i=null,e||(a=n.apply(o,u))}var u,a,o,i;return function(){var f=e&&!i;return u=arguments,o=this,Lt(i),i=Jt(r,t),f&&(a=n.apply(o,u)),a}},a.defaults=he,a.defer=wt,a.delay=function(n,t){var r=V(arguments,2);return Jt(function(){n.apply(e,r)},t)},a.difference=function(n){for(var t=-1,e=n?n.length:0,r=Kt.apply(Ft,arguments),r=q(r,e,100),u=[];++t<e;){var a=n[t];r(a)||u.push(a)}return u},a.filter=ot,a.flatten=ht,a.forEach=ft,a.forIn=ye,a.forOwn=me,a.functions=Q,a.groupBy=function(n,t,e){var r={};
31
- return t=a.createCallback(t,e),ft(n,function(n,e,u){e=qt(t(n,e,u)),(Vt.call(r,e)?r[e]:r[e]=[]).push(n)}),r},a.initial=function(n,t,e){if(!n)return[];var r=0,u=n.length;if(typeof t!="number"&&null!=t){var o=u;for(t=a.createCallback(t,e);o--&&t(n[o],o,n);)r++}else r=null==t||e?1:t||r;return V(n,0,ee(te(0,u-r),u))},a.intersection=function(n){var t=arguments,e=t.length,r={0:{}},u=-1,a=n?n.length:0,o=100<=a,i=[],f=i;n:for(;++u<a;){var c=n[u];if(o)var l=qt(c),l=Vt.call(r[0],l)?!(f=r[0][l]):f=r[0][l]=[];
32
- if(l||0>yt(f,c)){o&&f.push(c);for(var p=e;--p;)if(!(r[p]||(r[p]=q(t[p],0,100)))(c))continue n;i.push(c)}}return i},a.invert=W,a.invoke=function(n,t){var e=V(arguments,2),r=-1,u=typeof t=="function",a=n?n.length:0,o=Ot(typeof a=="number"?a:0);return ft(n,function(n){o[++r]=(u?t:n[t]).apply(n,e)}),o},a.keys=le,a.map=ct,a.max=lt,a.memoize=function(n,t){var e={};return function(){var r=qt(t?t.apply(this,arguments):arguments[0]);return Vt.call(e,r)?e[r]:e[r]=n.apply(this,arguments)}},a.merge=et,a.min=function(n,t,e){var r=1/0,u=r;
33
- if(!t&&fe(n)){e=-1;for(var o=n.length;++e<o;){var i=n[e];i<u&&(u=i)}}else t=!t&&tt(n)?B:a.createCallback(t,e),pe(n,function(n,e,a){e=t(n,e,a),e<r&&(r=e,u=n)});return u},a.omit=function(n,t,e){var r=typeof t=="function",u={};if(r)t=a.createCallback(t,e);else var o=Kt.apply(Ft,arguments);return ye(n,function(n,e,a){(r?!t(n,e,a):0>yt(o,e,1))&&(u[e]=n)}),u},a.once=function(n){var t,e;return function(){return t?e:(t=!0,e=n.apply(this,arguments),n=null,e)}},a.pairs=function(n){for(var t=-1,e=le(n),r=e.length,u=Ot(r);++t<r;){var a=e[t];
34
- u[t]=[a,n[a]]}return u},a.partial=function(n){return R(n,V(arguments,1))},a.partialRight=function(n){return R(n,V(arguments,1),null,i)},a.pick=function(n,t,e){var r={};if(typeof t!="function")for(var u=0,o=Kt.apply(Ft,arguments),i=Z(n)?o.length:0;++u<i;){var f=o[u];f in n&&(r[f]=n[f])}else t=a.createCallback(t,e),ye(n,function(n,e,u){t(n,e,u)&&(r[e]=n)});return r},a.pluck=ct,a.range=function(n,t,e){n=+n||0,e=+e||1,null==t&&(t=n,n=0);var r=-1;t=te(0,zt((t-n)/e));for(var u=Ot(t);++r<t;)u[r]=n,n+=e;
35
- return u},a.reject=function(n,t,e){return t=a.createCallback(t,e),ot(n,function(n,e,r){return!t(n,e,r)})},a.rest=mt,a.shuffle=function(n){var t=-1,e=n?n.length:0,r=Ot(typeof e=="number"?e:0);return ft(n,function(n){var e=Mt(ue()*(++t+1));r[t]=r[e],r[e]=n}),r},a.sortBy=function(n,t,e){var r=-1,u=n?n.length:0,o=Ot(typeof u=="number"?u:0);for(t=a.createCallback(t,e),ft(n,function(n,e,u){o[++r]={a:t(n,e,u),b:r,c:n}}),u=o.length,o.sort(F);u--;)o[u]=o[u].c;return o},a.tap=function(n,t){return t(n),n},a.throttle=function(n,t){function e(){i=new St,o=null,u=n.apply(a,r)
36
- }var r,u,a,o,i=0;return function(){var f=new St,c=t-(f-i);return r=arguments,a=this,0<c?o||(o=Jt(e,c)):(Lt(o),o=null,i=f,u=n.apply(a,r)),u}},a.times=function(n,t,e){n=-1<(n=+n)?n:0;var r=-1,u=Ot(n);for(t=a.createCallback(t,e,1);++r<n;)u[r]=t(r);return u},a.toArray=function(n){return n&&typeof n.length=="number"?ie.unindexedChars&&tt(n)?n.split(""):V(n):rt(n)},a.union=function(){return bt(Kt.apply(Ft,arguments))},a.uniq=bt,a.values=rt,a.where=ot,a.without=function(n){for(var t=-1,e=n?n.length:0,r=q(arguments,1,30),u=[];++t<e;){var a=n[t];
37
- r(a)||u.push(a)}return u},a.wrap=function(n,t){return function(){var e=[n];return Gt.apply(e,arguments),t.apply(this,e)}},a.zip=function(n){for(var t=-1,e=n?lt(ct(arguments,"length")):0,r=Ot(e);++t<e;)r[t]=ct(arguments,t);return r},a.zipObject=_t,a.collect=ct,a.drop=mt,a.each=ft,a.extend=ge,a.methods=Q,a.object=_t,a.select=ot,a.tail=mt,a.unique=bt,kt(a),a.clone=J,a.cloneDeep=function(n,t,e){return J(n,!0,t,e)},a.contains=ut,a.escape=function(n){return null==n?"":qt(n).replace(m,z)},a.every=at,a.find=it,a.findIndex=function(n,t,e){var r=-1,u=n?n.length:0;
38
- for(t=a.createCallback(t,e);++r<u;)if(t(n[r],r,n))return r;return-1},a.findKey=function(n,t,e){var r;return t=a.createCallback(t,e),me(n,function(n,e,u){return t(n,e,u)?(r=e,!1):void 0}),r},a.has=function(n,t){return n?Vt.call(n,t):!1},a.identity=jt,a.indexOf=yt,a.isArguments=H,a.isArray=fe,a.isBoolean=function(n){return!0===n||!1===n||Qt.call(n)==j},a.isDate=function(n){return n instanceof St||Qt.call(n)==k},a.isElement=function(n){return n?1===n.nodeType:!1},a.isEmpty=function(n){var t=!0;if(!n)return t;
39
- var e=Qt.call(n),r=n.length;return e==w||e==A||(ie.argsClass?e==C:H(n))||e==E&&typeof r=="number"&&Y(n.splice)?!r:(me(n,function(){return t=!1}),t)},a.isEqual=X,a.isFinite=function(n){return Yt(n)&&!Zt(parseFloat(n))},a.isFunction=Y,a.isNaN=function(n){return nt(n)&&n!=+n},a.isNull=function(n){return null===n},a.isNumber=nt,a.isObject=Z,a.isPlainObject=de,a.isRegExp=function(n){return n instanceof $t||Qt.call(n)==S},a.isString=tt,a.isUndefined=function(n){return typeof n=="undefined"},a.lastIndexOf=function(n,t,e){var r=n?n.length:0;
40
- for(typeof e=="number"&&(r=(0>e?te(0,r+e):ee(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},a.mixin=kt,a.noConflict=function(){return r._=Tt,this},a.parseInt=Ht,a.random=function(n,t){return null==n&&null==t&&(t=1),n=+n||0,null==t&&(t=n,n=0),n+Mt(ue()*((+t||0)-n+1))},a.reduce=pt,a.reduceRight=st,a.result=function(n,t){var r=n?n[t]:e;return Y(r)?n[t]():r},a.runInContext=t,a.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:le(n).length},a.some=vt,a.sortedIndex=dt,a.template=function(n,t,r){var u=a.templateSettings;
41
- n||(n=""),r=he({},r,u);var o,i=he({},r.imports,u.imports),u=le(i),i=rt(i),p=0,v=r.interpolate||y,h="__p+='",v=$t((r.escape||y).source+"|"+v.source+"|"+(v===g?s:y).source+"|"+(r.evaluate||y).source+"|$","g");n.replace(v,function(t,e,r,u,a,i){return r||(r=u),h+=n.slice(p,i).replace(d,D),e&&(h+="'+__e("+e+")+'"),a&&(o=!0,h+="';"+a+";__p+='"),r&&(h+="'+((__t=("+r+"))==null?'':__t)+'"),p=i+t.length,t}),h+="';\n",v=r=r.variable,v||(r="obj",h="with("+r+"){"+h+"}"),h=(o?h.replace(f,""):h).replace(c,"$1").replace(l,"$1;"),h="function("+r+"){"+(v?"":r+"||("+r+"={});")+"var __t,__p='',__e=_.escape"+(o?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+h+"return __p}";
42
- try{var m=At(u,"return "+h).apply(e,i)}catch(b){throw b.source=h,b}return t?m(t):(m.source=h,m)},a.unescape=function(n){return null==n?"":qt(n).replace(p,G)},a.uniqueId=function(n){var t=++o;return qt(null==n?"":n)+t},a.all=at,a.any=vt,a.detect=it,a.foldl=pt,a.foldr=st,a.include=ut,a.inject=pt,me(a,function(n,t){a.prototype[t]||(a.prototype[t]=function(){var t=[this.__wrapped__];return Gt.apply(t,arguments),n.apply(a,t)})}),a.first=gt,a.last=function(n,t,e){if(n){var r=0,u=n.length;if(typeof t!="number"&&null!=t){var o=u;
43
- for(t=a.createCallback(t,e);o--&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n[u-1];return V(n,te(0,u-r))}},a.take=gt,a.head=gt,me(a,function(n,t){a.prototype[t]||(a.prototype[t]=function(t,e){var r=n(this.__wrapped__,t,e);return null==t||e&&typeof t!="function"?r:new K(r)})}),a.VERSION="1.1.1",a.prototype.toString=function(){return qt(this.__wrapped__)},a.prototype.value=xt,a.prototype.valueOf=xt,pe(["join","pop","shift"],function(n){var t=Ft[n];a.prototype[n]=function(){return t.apply(this.__wrapped__,arguments)
44
- }}),pe(["push","reverse","sort","unshift"],function(n){var t=Ft[n];a.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),pe(["concat","slice","splice"],function(n){var t=Ft[n];a.prototype[n]=function(){return new K(t.apply(this.__wrapped__,arguments))}}),ie.spliceObjects||pe(["pop","shift","splice"],function(n){var t=Ft[n],e="splice"==n;a.prototype[n]=function(){var n=this.__wrapped__,r=t.apply(n,arguments);return 0===n.length&&delete n[0],e?new K(r):r}}),a}var e,r=typeof exports=="object"&&exports,u=typeof module=="object"&&module&&module.exports==r&&module,a=typeof global=="object"&&global;
45
- a.global===a&&(n=a);var o=0,i={},f=/\b__p\+='';/g,c=/\b(__p\+=)''\+/g,l=/(__e\(.*?\)|\b__t\))\+'';/g,p=/&(?:amp|lt|gt|quot|#39);/g,s=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,v=/\w*$/,g=/<%=([\s\S]+?)%>/g,h=/^0+(?=.$)/,y=/($^)/,m=/[&<>"']/g,d=/['\n\r\t\u2028\u2029\\]/g,b="Array Boolean Date Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setImmediate setTimeout".split(" "),_="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),C="[object Arguments]",w="[object Array]",j="[object Boolean]",k="[object Date]",x="[object Function]",O="[object Number]",E="[object Object]",S="[object RegExp]",A="[object String]",I={};
46
- I[x]=!1,I[C]=I[w]=I[j]=I[k]=I[O]=I[E]=I[S]=I[A]=!0;var P={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},N={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"},$=t();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(n._=$,define(function(){return $})):r&&!r.nodeType?u?(u.exports=$)._=$:r._=$:n._=$})(this);
7
+ ;(function(n){function t(r){function a(n){return n&&typeof n=="object"&&!Z(n)&&Qt.call(n,"__wrapped__")?n:new U(n)}function F(n){var t=n.length,e=t>=l;if(e)for(var r={},u=-1;++u<t;){var a=f+n[u];(r[a]||(r[a]=[])).push(n[u])}return function(t){if(e){var u=f+t;return r[u]&&-1<_t(r[u],t)}return-1<_t(n,t)}}function R(n){return n.charCodeAt(0)}function T(n,t){var e=n.b,r=t.b;if(n=n.a,t=t.a,n!==t){if(n>t||typeof n=="undefined")return 1;if(n<t||typeof t=="undefined")return-1}return e<r?-1:1}function D(n,t,e,r){function u(){var r=arguments,l=o?this:t;
8
+ return a||(n=t[i]),e.length&&(r=r.length?(r=le.call(r),f?r.concat(e):e.concat(r)):e),this instanceof u?(V.prototype=n.prototype,l=new V,V.prototype=null,r=n.apply(l,r),et(r)?r:l):n.apply(l,r)}var a=tt(n),o=!e,i=t;if(o){var f=r;e=t}else if(!a){if(!r)throw new Dt;t=n}return u}function z(){for(var n,t={g:C,b:"k(m)",c:"",e:"m",f:"",h:"",i:!0,j:!!de},e=0;n=arguments[e];e++)for(var r in n)t[r]=n[r];if(n=t.a,t.d=/^[^,]+/.exec(n)[0],e=$t,r="var i,m="+t.d+",u="+t.e+";if(!m)return u;"+t.h+";",t.b?(r+="var n=m.length;i=-1;if("+t.b+"){",ve.unindexedChars&&(r+="if(l(m)){m=m.split('')}"),r+="while(++i<n){"+t.f+"}}else{"):ve.nonEnumArgs&&(r+="var n=m.length;i=-1;if(n&&j(m)){while(++i<n){i+='';"+t.f+"}}else{"),ve.enumPrototypes&&(r+="var v=typeof m=='function';"),t.i&&t.j)r+="var s=-1,t=r[typeof m]?o(m):[],n=t.length;while(++s<n){i=t[s];",ve.enumPrototypes&&(r+="if(!(v&&i=='prototype')){"),r+=t.f,ve.enumPrototypes&&(r+="}"),r+="}";
9
+ else if(r+="for(i in m){",(ve.enumPrototypes||t.i)&&(r+="if(",ve.enumPrototypes&&(r+="!(v&&i=='prototype')"),ve.enumPrototypes&&t.i&&(r+="&&"),t.i&&(r+="h.call(m,i)"),r+="){"),r+=t.f+";",(ve.enumPrototypes||t.i)&&(r+="}"),r+="}",ve.nonEnumShadows){r+="var f=m.constructor;";for(var u=0;7>u;u++)r+="i='"+t.g[u]+"';if(","constructor"==t.g[u]&&(r+="!(f&&f.prototype===m)&&"),r+="h.call(m,i)){"+t.f+"}"}return(t.b||ve.nonEnumArgs)&&(r+="}"),r+=t.c+";return u",e("h,j,k,l,o,p,r","return function("+n+"){"+r+"}")(Qt,Q,Z,ut,de,a,$)
10
+ }function L(n){return"\\"+q[n]}function K(n){return _e[n]}function M(n){return typeof n.toString!="function"&&typeof(n+"")=="string"}function U(n){this.__wrapped__=n}function V(){}function G(n){var t=!1;if(!n||Zt.call(n)!=A||!ve.argsClass&&Q(n))return t;var e=n.constructor;return(tt(e)?e instanceof e:ve.nodeClass||!M(n))?ve.ownLast?(ke(n,function(n,e,r){return t=Qt.call(r,e),!1}),!0===t):(ke(n,function(n,e){t=e}),!1===t||Qt.call(n,t)):t}function H(n,t,e){t||(t=0),typeof e=="undefined"&&(e=n?n.length:0);
11
+ var r=-1;e=e-t||0;for(var u=It(0>e?0:e);++r<e;)u[r]=n[t+r];return u}function J(n){return we[n]}function Q(n){return Zt.call(n)==j}function W(n,t,r,u,o,i){var f=n;if(typeof t=="function"&&(u=r,r=t,t=!1),typeof r=="function"){if(r=typeof u=="undefined"?r:a.createCallback(r,u,1),f=r(f),typeof f!="undefined")return f;f=n}if(u=et(f)){var l=Zt.call(f);if(!N[l]||!ve.nodeClass&&M(f))return f;var c=Z(f)}if(!u||!t)return u?c?H(f):Ce({},f):f;switch(u=se[l],l){case x:case O:return new u(+f);case S:case P:return new u(f);
12
+ case I:return u(f.source,h.exec(f))}for(o||(o=[]),i||(i=[]),l=o.length;l--;)if(o[l]==n)return i[l];return f=c?u(f.length):{},c&&(Qt.call(n,"index")&&(f.index=n.index),Qt.call(n,"input")&&(f.input=n.input)),o.push(n),i.push(f),(c?pt:xe)(n,function(n,u){f[u]=W(n,t,r,e,o,i)}),f}function X(n){var t=[];return ke(n,function(n,e){tt(n)&&t.push(e)}),t.sort()}function Y(n){for(var t=-1,e=de(n),r=e.length,u={};++t<r;){var a=e[t];u[n[a]]=a}return u}function Z(n){return ve.argsObject&&n instanceof It||(te?te(n):Zt.call(n)==k)
13
+ }function nt(n,t,e,r,u,o){var f=e===i;if(typeof e=="function"&&!f){e=a.createCallback(e,r,2);var l=e(n,t);if(typeof l!="undefined")return!!l}if(n===t)return 0!==n||1/n==1/t;var c=typeof n,p=typeof t;if(n===n&&(!n||"function"!=c&&"object"!=c)&&(!t||"function"!=p&&"object"!=p))return!1;if(null==n||null==t)return n===t;if(p=Zt.call(n),c=Zt.call(t),p==j&&(p=A),c==j&&(c=A),p!=c)return!1;switch(p){case x:case O:return+n==+t;case S:return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case I:case P:return n==Tt(t)}if(c=p==k,!c){if(Qt.call(n,"__wrapped__")||Qt.call(t,"__wrapped__"))return nt(n.__wrapped__||n,t.__wrapped__||t,e,r,u,o);
14
+ if(p!=A||!ve.nodeClass&&(M(n)||M(t)))return!1;var p=!ve.argsObject&&Q(n)?Ft:n.constructor,s=!ve.argsObject&&Q(t)?Ft:t.constructor;if(p!=s&&(!tt(p)||!(p instanceof p&&tt(s)&&s instanceof s)))return!1}for(u||(u=[]),o||(o=[]),p=u.length;p--;)if(u[p]==n)return o[p]==t;var v=0,l=!0;if(u.push(n),o.push(t),c){if(p=n.length,v=t.length,l=v==n.length,!l&&!f)return l;for(;v--;)if(c=p,s=t[v],f)for(;c--&&!(l=nt(n[c],s,e,r,u,o)););else if(!(l=nt(n[v],s,e,r,u,o)))break;return l}return ke(t,function(t,a,i){return Qt.call(i,a)?(v++,l=Qt.call(n,a)&&nt(n[a],t,e,r,u,o)):void 0
15
+ }),l&&!f&&ke(n,function(n,t,e){return Qt.call(e,t)?l=-1<--v:void 0}),l}function tt(n){return typeof n=="function"}function et(n){return n?$[typeof n]:!1}function rt(n){return typeof n=="number"||Zt.call(n)==S}function ut(n){return typeof n=="string"||Zt.call(n)==P}function at(n,t,e){var r=arguments,u=0,o=2;if(!et(n))return n;if(e===i)var f=r[3],l=r[4],c=r[5];else l=[],c=[],typeof e!="number"&&(o=r.length),3<o&&"function"==typeof r[o-2]?f=a.createCallback(r[--o-1],r[o--],2):2<o&&"function"==typeof r[o-1]&&(f=r[--o]);
16
+ for(;++u<o;)(Z(r[u])?pt:xe)(r[u],function(t,e){var r,u,a=t,o=n[e];if(t&&((u=Z(t))||Oe(t))){for(a=l.length;a--;)if(r=l[a]==t){o=c[a];break}if(!r){var p;f&&(a=f(o,t),p=typeof a!="undefined")&&(o=a),p||(o=u?Z(o)?o:[]:Oe(o)?o:{}),l.push(t),c.push(o),p||(o=at(o,t,i,f,l,c))}}else f&&(a=f(o,t),typeof a=="undefined"&&(a=t)),typeof a!="undefined"&&(o=a);n[e]=o});return n}function ot(n){for(var t=-1,e=de(n),r=e.length,u=It(r);++t<r;)u[t]=n[e[t]];return u}function it(n,t,e){var r=-1,u=n?n.length:0,a=!1;return e=(0>e?ae(0,u+e):e)||0,typeof u=="number"?a=-1<(ut(n)?n.indexOf(t,e):_t(n,t,e)):be(n,function(n){return++r<e?void 0:!(a=n===t)
17
+ }),a}function ft(n,t,e){var r=!0;if(t=a.createCallback(t,e),Z(n)){e=-1;for(var u=n.length;++e<u&&(r=!!t(n[e],e,n)););}else be(n,function(n,e,u){return r=!!t(n,e,u)});return r}function lt(n,t,e){var r=[];if(t=a.createCallback(t,e),Z(n)){e=-1;for(var u=n.length;++e<u;){var o=n[e];t(o,e,n)&&r.push(o)}}else be(n,function(n,e,u){t(n,e,u)&&r.push(n)});return r}function ct(n,t,e){if(t=a.createCallback(t,e),!Z(n)){var r;return be(n,function(n,e,u){return t(n,e,u)?(r=n,!1):void 0}),r}e=-1;for(var u=n.length;++e<u;){var o=n[e];
18
+ if(t(o,e,n))return o}}function pt(n,t,e){if(t&&typeof e=="undefined"&&Z(n)){e=-1;for(var r=n.length;++e<r&&!1!==t(n[e],e,n););}else be(n,t,e);return n}function st(n,t,e){var r=-1,u=n?n.length:0,o=It(typeof u=="number"?u:0);if(t=a.createCallback(t,e),Z(n))for(;++r<u;)o[r]=t(n[r],r,n);else be(n,function(n,e,u){o[++r]=t(n,e,u)});return o}function vt(n,t,e){var r=-1/0,u=r;if(!t&&Z(n)){e=-1;for(var o=n.length;++e<o;){var i=n[e];i>u&&(u=i)}}else t=!t&&ut(n)?R:a.createCallback(t,e),be(n,function(n,e,a){e=t(n,e,a),e>r&&(r=e,u=n)
19
+ });return u}function gt(n,t,e,r){var u=3>arguments.length;if(t=a.createCallback(t,r,4),Z(n)){var o=-1,i=n.length;for(u&&(e=n[++o]);++o<i;)e=t(e,n[o],o,n)}else be(n,function(n,r,a){e=u?(u=!1,n):t(e,n,r,a)});return e}function ht(n,t,e,r){var u=n,o=n?n.length:0,i=3>arguments.length;if(typeof o!="number")var f=de(n),o=f.length;else ve.unindexedChars&&ut(n)&&(u=n.split(""));return t=a.createCallback(t,r,4),pt(n,function(n,r,a){r=f?f[--o]:--o,e=i?(i=!1,u[r]):t(e,u[r],r,a)}),e}function yt(n,t,e){var r;if(t=a.createCallback(t,e),Z(n)){e=-1;
20
+ for(var u=n.length;++e<u&&!(r=t(n[e],e,n)););}else be(n,function(n,e,u){return!(r=t(n,e,u))});return!!r}function mt(n){for(var t=-1,e=n?n.length:0,r=Gt.apply(zt,le.call(arguments,1)),r=F(r),u=[];++t<e;){var a=n[t];r(a)||u.push(a)}return u}function dt(n,t,e){if(n){var r=0,u=n.length;if(typeof t!="number"&&null!=t){var o=-1;for(t=a.createCallback(t,e);++o<u&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n[0];return H(n,0,oe(ae(0,r),u))}}function bt(n,t,e,r){var u=-1,o=n?n.length:0,i=[];for(typeof t!="boolean"&&null!=t&&(r=e,e=t,t=!1),null!=e&&(e=a.createCallback(e,r));++u<o;)r=n[u],e&&(r=e(r,u,n)),Z(r)?Wt.apply(i,t?r:bt(r)):i.push(r);
21
+ return i}function _t(n,t,e){var r=-1,u=n?n.length:0;if(typeof e=="number")r=(0>e?ae(0,u+e):e||0)-1;else if(e)return r=Ct(n,t),n[r]===t?r:-1;for(;++r<u;)if(n[r]===t)return r;return-1}function wt(n,t,e){if(typeof t!="number"&&null!=t){var r=0,u=-1,o=n?n.length:0;for(t=a.createCallback(t,e);++u<o&&t(n[u],u,n);)r++}else r=null==t||e?1:ae(0,t);return H(n,r)}function Ct(n,t,e,r){var u=0,o=n?n.length:u;for(e=e?a.createCallback(e,r,1):Et,t=e(t);u<o;)r=u+o>>>1,e(n[r])<t?u=r+1:o=r;return u}function jt(n,t,e,r){var u=-1,o=n?n.length:0,i=[],c=i;
22
+ typeof t!="boolean"&&null!=t&&(r=e,e=t,t=!1);var p=!t&&o>=l;if(p)var s={};for(null!=e&&(c=[],e=a.createCallback(e,r));++u<o;){r=n[u];var v=e?e(r,u,n):r;if(p)var g=f+v,g=s[g]?!(c=s[g]):c=s[g]=[];(t?!u||c[c.length-1]!==v:g||0>_t(c,v))&&((e||p)&&c.push(v),i.push(r))}return i}function kt(n,t){for(var e=-1,r=n?n.length:0,u={};++e<r;){var a=n[e];t?u[a]=t[e]:u[a[0]]=a[1]}return u}function xt(n,t){return ve.fastBind||ne&&2<arguments.length?ne.call.apply(ne,arguments):D(n,t,le.call(arguments,2))}function Ot(n){var t=le.call(arguments,1);
23
+ return Yt(function(){n.apply(e,t)},1)}function Et(n){return n}function St(n){pt(X(n),function(t){var e=a[t]=n[t];a.prototype[t]=function(){var n=this.__wrapped__,t=[n];return Wt.apply(t,arguments),t=e.apply(a,t),n&&typeof n=="object"&&n==t?this:new U(t)}})}function At(){return this.__wrapped__}r=r?B.defaults(n.Object(),r,B.pick(n,w)):n;var It=r.Array,Pt=r.Boolean,Nt=r.Date,$t=r.Function,qt=r.Math,Bt=r.Number,Ft=r.Object,Rt=r.RegExp,Tt=r.String,Dt=r.TypeError,zt=It(),Lt=Ft(),Kt=r._,Mt=Rt("^"+Tt(Lt.valueOf).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),Ut=qt.ceil,Vt=r.clearTimeout,Gt=zt.concat,Ht=qt.floor,Jt=Mt.test(Jt=Ft.getPrototypeOf)&&Jt,Qt=Lt.hasOwnProperty,Wt=zt.push,Xt=r.setImmediate,Yt=r.setTimeout,Zt=Lt.toString,ne=Mt.test(ne=Zt.bind)&&ne,te=Mt.test(te=It.isArray)&&te,ee=r.isFinite,re=r.isNaN,ue=Mt.test(ue=Ft.keys)&&ue,ae=qt.max,oe=qt.min,ie=r.parseInt,fe=qt.random,le=zt.slice,ce=Mt.test(r.attachEvent),pe=ne&&!/\n|true/.test(ne+ce),se={};
24
+ se[k]=It,se[x]=Pt,se[O]=Nt,se[A]=Ft,se[S]=Bt,se[I]=Rt,se[P]=Tt;var ve=a.support={};(function(){var n=function(){this.x=1},t={0:1,length:1},e=[];n.prototype={valueOf:1,y:1};for(var r in new n)e.push(r);for(r in arguments);ve.argsObject=arguments.constructor==Ft&&!(arguments instanceof It),ve.argsClass=Q(arguments),ve.enumPrototypes=n.propertyIsEnumerable("prototype"),ve.fastBind=ne&&!pe,ve.ownLast="x"!=e[0],ve.nonEnumArgs=0!=r,ve.nonEnumShadows=!/valueOf/.test(e),ve.spliceObjects=(zt.splice.call(t,0,1),!t[0]),ve.unindexedChars="xx"!="x"[0]+Ft("x")[0];
25
+ try{ve.nodeClass=!(Zt.call(document)==A&&!({toString:0}+""))}catch(u){ve.nodeClass=!0}})(1),a.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:y,variable:"",imports:{_:a}};var ge={a:"q,w,g",h:"var a=arguments,b=0,c=typeof g=='number'?2:a.length;while(++b<c){m=a[b];if(m&&r[typeof m]){",f:"if(typeof u[i]=='undefined')u[i]=m[i]",c:"}}"},he={a:"e,d,x",h:"d=d&&typeof x=='undefined'?d:p.createCallback(d,x)",b:"typeof n=='number'",f:"if(d(m[i],i,e)===false)return u"},ye={h:"if(!r[typeof m])return u;"+he.h,b:!1};
26
+ U.prototype=a.prototype,ve.argsClass||(Q=function(n){return n?Qt.call(n,"callee"):!1});var me=z({a:"q",e:"[]",h:"if(!(r[typeof q]))return u",f:"u.push(i)",b:!1}),de=ue?function(n){return et(n)?ve.enumPrototypes&&typeof n=="function"||ve.nonEnumArgs&&n.length&&Q(n)?me(n):ue(n):[]}:me,be=z(he),_e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},we=Y(_e),Ce=z(ge,{h:ge.h.replace(";",";if(c>3&&typeof a[c-2]=='function'){var d=p.createCallback(a[--c-1],a[c--],2);}else if(c>2&&typeof a[c-1]=='function'){d=a[--c];}"),f:"u[i]=d?d(u[i],m[i]):m[i]"}),je=z(ge),ke=z(he,ye,{i:!1}),xe=z(he,ye);
27
+ tt(/x/)&&(tt=function(n){return n instanceof $t||Zt.call(n)==E});var Oe=Jt?function(n){if(!n||Zt.call(n)!=A||!ve.argsClass&&Q(n))return!1;var t=n.valueOf,e=typeof t=="function"&&(e=Jt(t))&&Jt(e);return e?n==e||Jt(n)==e:G(n)}:G;pe&&u&&typeof Xt=="function"&&(Ot=xt(Xt,r));var Ee=8==ie("08")?ie:function(n,t){return ie(ut(n)?n.replace(m,""):n,t||0)};return a.after=function(n,t){return 1>n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},a.assign=Ce,a.at=function(n){var t=-1,e=Gt.apply(zt,le.call(arguments,1)),r=e.length,u=It(r);
28
+ for(ve.unindexedChars&&ut(n)&&(n=n.split(""));++t<r;)u[t]=n[e[t]];return u},a.bind=xt,a.bindAll=function(n){for(var t=1<arguments.length?Gt.apply(zt,le.call(arguments,1)):X(n),e=-1,r=t.length;++e<r;){var u=t[e];n[u]=xt(n[u],n)}return n},a.bindKey=function(n,t){return D(n,t,le.call(arguments,2),i)},a.compact=function(n){for(var t=-1,e=n?n.length:0,r=[];++t<e;){var u=n[t];u&&r.push(u)}return r},a.compose=function(){var n=arguments;return function(){for(var t=arguments,e=n.length;e--;)t=[n[e].apply(this,t)];
29
+ return t[0]}},a.countBy=function(n,t,e){var r={};return t=a.createCallback(t,e),pt(n,function(n,e,u){e=Tt(t(n,e,u)),Qt.call(r,e)?r[e]++:r[e]=1}),r},a.createCallback=function(n,t,e){if(null==n)return Et;var r=typeof n;if("function"!=r){if("object"!=r)return function(t){return t[n]};var u=de(n);return function(t){for(var e=u.length,r=!1;e--&&(r=nt(t[u[e]],n[u[e]],i)););return r}}return typeof t!="undefined"?1===e?function(e){return n.call(t,e)}:2===e?function(e,r){return n.call(t,e,r)}:4===e?function(e,r,u,a){return n.call(t,e,r,u,a)
30
+ }:function(e,r,u){return n.call(t,e,r,u)}:n},a.debounce=function(n,t,e){function r(){i=null,f&&(a=n.apply(o,u))}var u,a,o,i,f=!0;if(!0===e)var l=!0,f=!1;else e&&$[typeof e]&&(l=e.leading,f="trailing"in e?e.trailing:f);return function(){var e=l&&!i;return u=arguments,o=this,Vt(i),i=Yt(r,t),e&&(a=n.apply(o,u)),a}},a.defaults=je,a.defer=Ot,a.delay=function(n,t){var r=le.call(arguments,2);return Yt(function(){n.apply(e,r)},t)},a.difference=mt,a.filter=lt,a.flatten=bt,a.forEach=pt,a.forIn=ke,a.forOwn=xe,a.functions=X,a.groupBy=function(n,t,e){var r={};
31
+ return t=a.createCallback(t,e),pt(n,function(n,e,u){e=Tt(t(n,e,u)),(Qt.call(r,e)?r[e]:r[e]=[]).push(n)}),r},a.initial=function(n,t,e){if(!n)return[];var r=0,u=n.length;if(typeof t!="number"&&null!=t){var o=u;for(t=a.createCallback(t,e);o--&&t(n[o],o,n);)r++}else r=null==t||e?1:t||r;return H(n,0,oe(ae(0,u-r),u))},a.intersection=function(n){var t=arguments,e=t.length,r={0:{}},u=-1,a=n?n.length:0,o=a>=l,i=[],c=i;n:for(;++u<a;){var p=n[u];if(o)var s=f+p,s=r[0][s]?!(c=r[0][s]):c=r[0][s]=[];if(s||0>_t(c,p)){o&&c.push(p);
32
+ for(var v=e;--v;)if(!(r[v]||(r[v]=F(t[v])))(p))continue n;i.push(p)}}return i},a.invert=Y,a.invoke=function(n,t){var e=le.call(arguments,2),r=-1,u=typeof t=="function",a=n?n.length:0,o=It(typeof a=="number"?a:0);return pt(n,function(n){o[++r]=(u?t:n[t]).apply(n,e)}),o},a.keys=de,a.map=st,a.max=vt,a.memoize=function(n,t){var e={};return function(){var r=f+(t?t.apply(this,arguments):arguments[0]);return Qt.call(e,r)?e[r]:e[r]=n.apply(this,arguments)}},a.merge=at,a.min=function(n,t,e){var r=1/0,u=r;
33
+ if(!t&&Z(n)){e=-1;for(var o=n.length;++e<o;){var i=n[e];i<u&&(u=i)}}else t=!t&&ut(n)?R:a.createCallback(t,e),be(n,function(n,e,a){e=t(n,e,a),e<r&&(r=e,u=n)});return u},a.omit=function(n,t,e){var r=typeof t=="function",u={};if(r)t=a.createCallback(t,e);else var o=Gt.apply(zt,le.call(arguments,1));return ke(n,function(n,e,a){(r?!t(n,e,a):0>_t(o,e))&&(u[e]=n)}),u},a.once=function(n){var t,e;return function(){return t?e:(t=!0,e=n.apply(this,arguments),n=null,e)}},a.pairs=function(n){for(var t=-1,e=de(n),r=e.length,u=It(r);++t<r;){var a=e[t];
34
+ u[t]=[a,n[a]]}return u},a.partial=function(n){return D(n,le.call(arguments,1))},a.partialRight=function(n){return D(n,le.call(arguments,1),null,i)},a.pick=function(n,t,e){var r={};if(typeof t!="function")for(var u=-1,o=Gt.apply(zt,le.call(arguments,1)),i=et(n)?o.length:0;++u<i;){var f=o[u];f in n&&(r[f]=n[f])}else t=a.createCallback(t,e),ke(n,function(n,e,u){t(n,e,u)&&(r[e]=n)});return r},a.pluck=st,a.range=function(n,t,e){n=+n||0,e=+e||1,null==t&&(t=n,n=0);var r=-1;t=ae(0,Ut((t-n)/e));for(var u=It(t);++r<t;)u[r]=n,n+=e;
35
+ return u},a.reject=function(n,t,e){return t=a.createCallback(t,e),lt(n,function(n,e,r){return!t(n,e,r)})},a.rest=wt,a.shuffle=function(n){var t=-1,e=n?n.length:0,r=It(typeof e=="number"?e:0);return pt(n,function(n){var e=Ht(fe()*(++t+1));r[t]=r[e],r[e]=n}),r},a.sortBy=function(n,t,e){var r=-1,u=n?n.length:0,o=It(typeof u=="number"?u:0);for(t=a.createCallback(t,e),pt(n,function(n,e,u){o[++r]={a:t(n,e,u),b:r,c:n}}),u=o.length,o.sort(T);u--;)o[u]=o[u].c;return o},a.tap=function(n,t){return t(n),n},a.throttle=function(n,t,e){function r(){f=new Nt,i=null,c&&(a=n.apply(o,u))
36
+ }var u,a,o,i,f=0,l=!0,c=!0;return!1===e?l=!1:e&&$[typeof e]&&(l="leading"in e?e.leading:l,c="trailing"in e?e.trailing:c),function(){var e=new Nt;!i&&!l&&(f=e);var c=t-(e-f);return u=arguments,o=this,0<c?i||(i=Yt(r,c)):(Vt(i),i=null,f=e,a=n.apply(o,u)),a}},a.times=function(n,t,e){n=-1<(n=+n)?n:0;var r=-1,u=It(n);for(t=a.createCallback(t,e,1);++r<n;)u[r]=t(r);return u},a.toArray=function(n){return n&&typeof n.length=="number"?ve.unindexedChars&&ut(n)?n.split(""):H(n):ot(n)},a.union=function(n){return Z(n)||(arguments[0]=n?le.call(n):zt),jt(Gt.apply(zt,arguments))
37
+ },a.uniq=jt,a.unzip=function(n){for(var t=-1,e=n?n.length:0,r=e?vt(st(n,"length")):0,u=It(r);++t<e;)for(var a=-1,o=n[t];++a<r;)(u[a]||(u[a]=It(e)))[t]=o[a];return u},a.values=ot,a.where=lt,a.without=function(n){return mt(n,le.call(arguments,1))},a.wrap=function(n,t){return function(){var e=[n];return Wt.apply(e,arguments),t.apply(this,e)}},a.zip=function(n){for(var t=-1,e=n?vt(st(arguments,"length")):0,r=It(e);++t<e;)r[t]=st(arguments,t);return r},a.zipObject=kt,a.collect=st,a.drop=wt,a.each=pt,a.extend=Ce,a.methods=X,a.object=kt,a.select=lt,a.tail=wt,a.unique=jt,St(a),a.clone=W,a.cloneDeep=function(n,t,e){return W(n,!0,t,e)
38
+ },a.contains=it,a.escape=function(n){return null==n?"":Tt(n).replace(b,K)},a.every=ft,a.find=ct,a.findIndex=function(n,t,e){var r=-1,u=n?n.length:0;for(t=a.createCallback(t,e);++r<u;)if(t(n[r],r,n))return r;return-1},a.findKey=function(n,t,e){var r;return t=a.createCallback(t,e),xe(n,function(n,e,u){return t(n,e,u)?(r=e,!1):void 0}),r},a.has=function(n,t){return n?Qt.call(n,t):!1},a.identity=Et,a.indexOf=_t,a.isArguments=Q,a.isArray=Z,a.isBoolean=function(n){return!0===n||!1===n||Zt.call(n)==x},a.isDate=function(n){return n instanceof Nt||Zt.call(n)==O
39
+ },a.isElement=function(n){return n?1===n.nodeType:!1},a.isEmpty=function(n){var t=!0;if(!n)return t;var e=Zt.call(n),r=n.length;return e==k||e==P||(ve.argsClass?e==j:Q(n))||e==A&&typeof r=="number"&&tt(n.splice)?!r:(xe(n,function(){return t=!1}),t)},a.isEqual=nt,a.isFinite=function(n){return ee(n)&&!re(parseFloat(n))},a.isFunction=tt,a.isNaN=function(n){return rt(n)&&n!=+n},a.isNull=function(n){return null===n},a.isNumber=rt,a.isObject=et,a.isPlainObject=Oe,a.isRegExp=function(n){return n instanceof Rt||Zt.call(n)==I
40
+ },a.isString=ut,a.isUndefined=function(n){return typeof n=="undefined"},a.lastIndexOf=function(n,t,e){var r=n?n.length:0;for(typeof e=="number"&&(r=(0>e?ae(0,r+e):oe(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},a.mixin=St,a.noConflict=function(){return r._=Kt,this},a.parseInt=Ee,a.random=function(n,t){return null==n&&null==t&&(t=1),n=+n||0,null==t&&(t=n,n=0),n+Ht(fe()*((+t||0)-n+1))},a.reduce=gt,a.reduceRight=ht,a.result=function(n,t){var r=n?n[t]:e;return tt(r)?n[t]():r},a.runInContext=t,a.size=function(n){var t=n?n.length:0;
41
+ return typeof t=="number"?t:de(n).length},a.some=yt,a.sortedIndex=Ct,a.template=function(n,t,r){var u=a.templateSettings;n||(n=""),r=je({},r,u);var o,i=je({},r.imports,u.imports),u=de(i),i=ot(i),f=0,l=r.interpolate||d,v="__p+='",l=Rt((r.escape||d).source+"|"+l.source+"|"+(l===y?g:d).source+"|"+(r.evaluate||d).source+"|$","g");n.replace(l,function(t,e,r,u,a,i){return r||(r=u),v+=n.slice(f,i).replace(_,L),e&&(v+="'+__e("+e+")+'"),a&&(o=!0,v+="';"+a+";__p+='"),r&&(v+="'+((__t=("+r+"))==null?'':__t)+'"),f=i+t.length,t
42
+ }),v+="';\n",l=r=r.variable,l||(r="obj",v="with("+r+"){"+v+"}"),v=(o?v.replace(c,""):v).replace(p,"$1").replace(s,"$1;"),v="function("+r+"){"+(l?"":r+"||("+r+"={});")+"var __t,__p='',__e=_.escape"+(o?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+v+"return __p}";try{var h=$t(u,"return "+v).apply(e,i)}catch(m){throw m.source=v,m}return t?h(t):(h.source=v,h)},a.unescape=function(n){return null==n?"":Tt(n).replace(v,J)},a.uniqueId=function(n){var t=++o;return Tt(null==n?"":n)+t
43
+ },a.all=ft,a.any=yt,a.detect=ct,a.foldl=gt,a.foldr=ht,a.include=it,a.inject=gt,xe(a,function(n,t){a.prototype[t]||(a.prototype[t]=function(){var t=[this.__wrapped__];return Wt.apply(t,arguments),n.apply(a,t)})}),a.first=dt,a.last=function(n,t,e){if(n){var r=0,u=n.length;if(typeof t!="number"&&null!=t){var o=u;for(t=a.createCallback(t,e);o--&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n[u-1];return H(n,ae(0,u-r))}},a.take=dt,a.head=dt,xe(a,function(n,t){a.prototype[t]||(a.prototype[t]=function(t,e){var r=n(this.__wrapped__,t,e);
44
+ return null==t||e&&typeof t!="function"?r:new U(r)})}),a.VERSION="1.2.0",a.prototype.toString=function(){return Tt(this.__wrapped__)},a.prototype.value=At,a.prototype.valueOf=At,be(["join","pop","shift"],function(n){var t=zt[n];a.prototype[n]=function(){return t.apply(this.__wrapped__,arguments)}}),be(["push","reverse","sort","unshift"],function(n){var t=zt[n];a.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),be(["concat","slice","splice"],function(n){var t=zt[n];a.prototype[n]=function(){return new U(t.apply(this.__wrapped__,arguments))
45
+ }}),ve.spliceObjects||be(["pop","shift","splice"],function(n){var t=zt[n],e="splice"==n;a.prototype[n]=function(){var n=this.__wrapped__,r=t.apply(n,arguments);return 0===n.length&&delete n[0],e?new U(r):r}}),a}var e,r=typeof exports=="object"&&exports,u=typeof module=="object"&&module&&module.exports==r&&module,a=typeof global=="object"&&global;(a.global===a||a.window===a)&&(n=a);var o=0,i={},f=+new Date+"",l=200,c=/\b__p\+='';/g,p=/\b(__p\+=)''\+/g,s=/(__e\(.*?\)|\b__t\))\+'';/g,v=/&(?:amp|lt|gt|quot|#39);/g,g=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,h=/\w*$/,y=/<%=([\s\S]+?)%>/g,m=/^0+(?=.$)/,d=/($^)/,b=/[&<>"']/g,_=/['\n\r\t\u2028\u2029\\]/g,w="Array Boolean Date Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setImmediate setTimeout".split(" "),C="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),j="[object Arguments]",k="[object Array]",x="[object Boolean]",O="[object Date]",E="[object Function]",S="[object Number]",A="[object Object]",I="[object RegExp]",P="[object String]",N={};
46
+ N[E]=!1,N[j]=N[k]=N[x]=N[O]=N[S]=N[A]=N[I]=N[P]=!0;var $={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},q={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"},B=t();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(n._=B,define(function(){return B})):r&&!r.nodeType?u?(u.exports=B)._=B:r._=B:n._=B})(this);
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Lo-Dash 1.1.1 (Custom Build) <http://lodash.com/>
3
+ * Lo-Dash 1.2.0 (Custom Build) <http://lodash.com/>
4
4
  * Build: `lodash modern -o ./dist/lodash.js`
5
5
  * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
6
6
  * Based on Underscore.js 1.4.4 <http://underscorejs.org/>
@@ -18,9 +18,9 @@
18
18
  /** Detect free variable `module` */
19
19
  var freeModule = typeof module == 'object' && module && module.exports == freeExports && module;
20
20
 
21
- /** Detect free variable `global` and use it as `window` */
21
+ /** Detect free variable `global`, from Node.js or Browserified code, and use it as `window` */
22
22
  var freeGlobal = typeof global == 'object' && global;
23
- if (freeGlobal.global === freeGlobal) {
23
+ if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
24
24
  window = freeGlobal;
25
25
  }
26
26
 
@@ -30,6 +30,12 @@
30
30
  /** Used internally to indicate various things */
31
31
  var indicatorObject = {};
32
32
 
33
+ /** Used to prefix keys to avoid issues with `__proto__` and properties on `Object.prototype` */
34
+ var keyPrefix = +new Date + '';
35
+
36
+ /** Used as the size when optimizations are enabled for large arrays */
37
+ var largeArraySize = 200;
38
+
33
39
  /** Used to match empty string literals in compiled template source */
34
40
  var reEmptyStringLeading = /\b__p \+= '';/g,
35
41
  reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
@@ -169,7 +175,7 @@
169
175
  toString = objectRef.toString;
170
176
 
171
177
  /* Native method shortcuts for methods with the same name as other `lodash` methods */
172
- var nativeBind = reNative.test(nativeBind = slice.bind) && nativeBind,
178
+ var nativeBind = reNative.test(nativeBind = toString.bind) && nativeBind,
173
179
  nativeIsArray = reNative.test(nativeIsArray = Array.isArray) && nativeIsArray,
174
180
  nativeIsFinite = context.isFinite,
175
181
  nativeIsNaN = context.isNaN,
@@ -177,7 +183,8 @@
177
183
  nativeMax = Math.max,
178
184
  nativeMin = Math.min,
179
185
  nativeParseInt = context.parseInt,
180
- nativeRandom = Math.random;
186
+ nativeRandom = Math.random,
187
+ nativeSlice = arrayRef.slice;
181
188
 
182
189
  /** Detect various environments */
183
190
  var isIeOpera = reNative.test(context.attachEvent),
@@ -196,7 +203,7 @@
196
203
  /*--------------------------------------------------------------------------*/
197
204
 
198
205
  /**
199
- * Creates a `lodash` object, that wraps the given `value`, to enable method
206
+ * Creates a `lodash` object, which wraps the given `value`, to enable method
200
207
  * chaining.
201
208
  *
202
209
  * In addition to Lo-Dash methods, wrappers also have the following `Array` methods:
@@ -214,8 +221,8 @@
214
221
  * `invoke`, `keys`, `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`,
215
222
  * `once`, `pairs`, `partial`, `partialRight`, `pick`, `pluck`, `push`, `range`,
216
223
  * `reject`, `rest`, `reverse`, `shuffle`, `slice`, `sort`, `sortBy`, `splice`,
217
- * `tap`, `throttle`, `times`, `toArray`, `union`, `uniq`, `unshift`, `values`,
218
- * `where`, `without`, `wrap`, and `zip`
224
+ * `tap`, `throttle`, `times`, `toArray`, `union`, `uniq`, `unshift`, `unzip`,
225
+ * `values`, `where`, `without`, `wrap`, and `zip`
219
226
  *
220
227
  * The non-chainable wrapper functions are:
221
228
  * `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `has`,
@@ -234,6 +241,26 @@
234
241
  * @category Chaining
235
242
  * @param {Mixed} value The value to wrap in a `lodash` instance.
236
243
  * @returns {Object} Returns a `lodash` instance.
244
+ * @example
245
+ *
246
+ * var wrapped = _([1, 2, 3]);
247
+ *
248
+ * // returns an unwrapped value
249
+ * wrapped.reduce(function(sum, num) {
250
+ * return sum + num;
251
+ * });
252
+ * // => 6
253
+ *
254
+ * // returns a wrapped value
255
+ * var squares = wrapped.map(function(num) {
256
+ * return num * num;
257
+ * });
258
+ *
259
+ * _.isArray(squares);
260
+ * // => false
261
+ *
262
+ * _.isArray(squares.value());
263
+ * // => true
237
264
  */
238
265
  function lodash(value) {
239
266
  // don't wrap if already wrapped, even if wrapped by a different `lodash` constructor
@@ -322,92 +349,6 @@
322
349
 
323
350
  /*--------------------------------------------------------------------------*/
324
351
 
325
- /**
326
- * The template used to create iterator functions.
327
- *
328
- * @private
329
- * @param {Obect} data The data object used to populate the text.
330
- * @returns {String} Returns the interpolated text.
331
- */
332
- var iteratorTemplate = function(obj) {
333
-
334
- var __p = 'var index, iterable = ' +
335
- (obj.firstArg) +
336
- ', result = ' +
337
- (obj.init) +
338
- ';\nif (!iterable) return result;\n' +
339
- (obj.top) +
340
- ';\n';
341
- if (obj.arrays) {
342
- __p += 'var length = iterable.length; index = -1;\nif (' +
343
- (obj.arrays) +
344
- ') {\n while (++index < length) {\n ' +
345
- (obj.loop) +
346
- '\n }\n}\nelse { ';
347
- }
348
-
349
- if (obj.useHas && obj.useKeys) {
350
- __p += '\n var ownIndex = -1,\n ownProps = objectTypes[typeof iterable] ? keys(iterable) : [],\n length = ownProps.length;\n\n while (++ownIndex < length) {\n index = ownProps[ownIndex];\n ' +
351
- (obj.loop) +
352
- '\n } ';
353
- } else {
354
- __p += '\n for (index in iterable) {';
355
- if (obj.useHas) {
356
- __p += '\n if (';
357
- if (obj.useHas) {
358
- __p += 'hasOwnProperty.call(iterable, index)';
359
- }
360
- __p += ') { ';
361
- }
362
- __p +=
363
- (obj.loop) +
364
- '; ';
365
- if (obj.useHas) {
366
- __p += '\n }';
367
- }
368
- __p += '\n } ';
369
- }
370
-
371
- if (obj.arrays) {
372
- __p += '\n}';
373
- }
374
- __p +=
375
- (obj.bottom) +
376
- ';\nreturn result';
377
-
378
- return __p
379
- };
380
-
381
- /** Reusable iterator options for `assign` and `defaults` */
382
- var defaultsIteratorOptions = {
383
- 'args': 'object, source, guard',
384
- 'top':
385
- 'var args = arguments,\n' +
386
- ' argsIndex = 0,\n' +
387
- " argsLength = typeof guard == 'number' ? 2 : args.length;\n" +
388
- 'while (++argsIndex < argsLength) {\n' +
389
- ' iterable = args[argsIndex];\n' +
390
- ' if (iterable && objectTypes[typeof iterable]) {',
391
- 'loop': "if (typeof result[index] == 'undefined') result[index] = iterable[index]",
392
- 'bottom': ' }\n}'
393
- };
394
-
395
- /** Reusable iterator options shared by `each`, `forIn`, and `forOwn` */
396
- var eachIteratorOptions = {
397
- 'args': 'collection, callback, thisArg',
398
- 'top': "callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg)",
399
- 'arrays': false,
400
- 'loop': 'if (callback(iterable[index], index, collection) === false) return result'
401
- };
402
-
403
- /** Reusable iterator options for `forIn` and `forOwn` */
404
- var forOwnIteratorOptions = {
405
- 'top': 'if (!objectTypes[typeof iterable]) return result;\n' + eachIteratorOptions.top,
406
- 'arrays': false
407
- };
408
-
409
- /*--------------------------------------------------------------------------*/
410
-
411
352
  /**
412
353
  * Creates a function optimized to search large arrays for a given `value`,
413
354
  * starting at `fromIndex`, using strict equality for comparisons, i.e. `===`.
@@ -415,31 +356,27 @@
415
356
  * @private
416
357
  * @param {Array} array The array to search.
417
358
  * @param {Mixed} value The value to search for.
418
- * @param {Number} fromIndex The index to search from.
419
- * @param {Number} largeSize The length at which an array is considered large.
420
359
  * @returns {Boolean} Returns `true`, if `value` is found, else `false`.
421
360
  */
422
- function cachedContains(array, fromIndex, largeSize) {
361
+ function cachedContains(array) {
423
362
  var length = array.length,
424
- isLarge = (length - fromIndex) >= largeSize;
363
+ isLarge = length >= largeArraySize;
425
364
 
426
365
  if (isLarge) {
427
366
  var cache = {},
428
- index = fromIndex - 1;
367
+ index = -1;
429
368
 
430
369
  while (++index < length) {
431
- // manually coerce `value` to a string because `hasOwnProperty`, in some
432
- // older versions of Firefox, coerces objects incorrectly
433
- var key = String(array[index]);
434
- (hasOwnProperty.call(cache, key) ? cache[key] : (cache[key] = [])).push(array[index]);
370
+ var key = keyPrefix + array[index];
371
+ (cache[key] || (cache[key] = [])).push(array[index]);
435
372
  }
436
373
  }
437
374
  return function(value) {
438
375
  if (isLarge) {
439
- var key = String(value);
440
- return hasOwnProperty.call(cache, key) && indexOf(cache[key], value) > -1;
376
+ var key = keyPrefix + value;
377
+ return cache[key] && indexOf(cache[key], value) > -1;
441
378
  }
442
- return indexOf(array, value, fromIndex) > -1;
379
+ return indexOf(array, value) > -1;
443
380
  }
444
381
  }
445
382
 
@@ -525,7 +462,7 @@
525
462
  }
526
463
  if (partialArgs.length) {
527
464
  args = args.length
528
- ? (args = slice(args), rightIndicator ? args.concat(partialArgs) : partialArgs.concat(args))
465
+ ? (args = nativeSlice.call(args), rightIndicator ? args.concat(partialArgs) : partialArgs.concat(args))
529
466
  : partialArgs;
530
467
  }
531
468
  if (this instanceof bound) {
@@ -544,53 +481,6 @@
544
481
  return bound;
545
482
  }
546
483
 
547
- /**
548
- * Creates compiled iteration functions.
549
- *
550
- * @private
551
- * @param {Object} [options1, options2, ...] The compile options object(s).
552
- * arrays - A string of code to determine if the iterable is an array or array-like.
553
- * useHas - A boolean to specify using `hasOwnProperty` checks in the object loop.
554
- * args - A string of comma separated arguments the iteration function will accept.
555
- * top - A string of code to execute before the iteration branches.
556
- * loop - A string of code to execute in the object loop.
557
- * bottom - A string of code to execute after the iteration branches.
558
- * @returns {Function} Returns the compiled function.
559
- */
560
- function createIterator() {
561
- var data = {
562
- // iterator options
563
- 'arrays': 'isArray(iterable)',
564
- 'bottom': '',
565
- 'init': 'iterable',
566
- 'loop': '',
567
- 'top': '',
568
- 'useHas': true,
569
- 'useKeys': !!keys
570
- };
571
-
572
- // merge options into a template data object
573
- for (var object, index = 0; object = arguments[index]; index++) {
574
- for (var key in object) {
575
- data[key] = object[key];
576
- }
577
- }
578
- var args = data.args;
579
- data.firstArg = /^[^,]+/.exec(args)[0];
580
-
581
- // create the function factory
582
- var factory = Function(
583
- 'hasOwnProperty, isArguments, isArray, isString, keys, ' +
584
- 'lodash, objectTypes',
585
- 'return function(' + args + ') {\n' + iteratorTemplate(data) + '\n}'
586
- );
587
- // return the compiled function
588
- return factory(
589
- hasOwnProperty, isArguments, isArray, isString, keys,
590
- lodash, objectTypes
591
- );
592
- }
593
-
594
484
  /**
595
485
  * Used by `template` to escape characters for inclusion in compiled
596
486
  * string literals.
@@ -637,7 +527,7 @@
637
527
  }
638
528
 
639
529
  /**
640
- * A fallback implementation of `isPlainObject` that checks if a given `value`
530
+ * A fallback implementation of `isPlainObject` which checks if a given `value`
641
531
  * is an object created by the `Object` constructor, assuming objects created
642
532
  * by the `Object` constructor have no inherited enumerable properties and that
643
533
  * there are no `Object.prototype` extensions.
@@ -729,29 +619,7 @@
729
619
  }
730
620
 
731
621
  /**
732
- * Checks if `value` is an array.
733
- *
734
- * @static
735
- * @memberOf _
736
- * @category Objects
737
- * @param {Mixed} value The value to check.
738
- * @returns {Boolean} Returns `true`, if the `value` is an array, else `false`.
739
- * @example
740
- *
741
- * (function() { return _.isArray(arguments); })();
742
- * // => false
743
- *
744
- * _.isArray([1, 2, 3]);
745
- * // => true
746
- */
747
- var isArray = nativeIsArray || function(value) {
748
- // `instanceof` may cause a memory leak in IE 7 if `value` is a host object
749
- // http://ajaxian.com/archives/working-aroung-the-instanceof-memory-leak
750
- return value instanceof Array || toString.call(value) == arrayClass;
751
- };
752
-
753
- /**
754
- * A fallback implementation of `Object.keys` that produces an array of the
622
+ * A fallback implementation of `Object.keys` which produces an array of the
755
623
  * given object's own enumerable property names.
756
624
  *
757
625
  * @private
@@ -759,13 +627,18 @@
759
627
  * @param {Object} object The object to inspect.
760
628
  * @returns {Array} Returns a new array of property names.
761
629
  */
762
- var shimKeys = createIterator({
763
- 'args': 'object',
764
- 'init': '[]',
765
- 'top': 'if (!(objectTypes[typeof object])) return result',
766
- 'loop': 'result.push(index)',
767
- 'arrays': false
768
- });
630
+ var shimKeys = function (object) {
631
+ var index, iterable = object, result = [];
632
+ if (!iterable) return result;
633
+ if (!(objectTypes[typeof object])) return result;
634
+
635
+ for (index in iterable) {
636
+ if (hasOwnProperty.call(iterable, index)) {
637
+ result.push(index);
638
+ }
639
+ }
640
+ return result
641
+ };
769
642
 
770
643
  /**
771
644
  * Creates an array composed of the own enumerable property names of `object`.
@@ -838,18 +711,40 @@
838
711
  * defaults(food, { 'name': 'banana', 'type': 'fruit' });
839
712
  * // => { 'name': 'apple', 'type': 'fruit' }
840
713
  */
841
- var assign = createIterator(defaultsIteratorOptions, {
842
- 'top':
843
- defaultsIteratorOptions.top.replace(';',
844
- ';\n' +
845
- "if (argsLength > 3 && typeof args[argsLength - 2] == 'function') {\n" +
846
- ' var callback = lodash.createCallback(args[--argsLength - 1], args[argsLength--], 2);\n' +
847
- "} else if (argsLength > 2 && typeof args[argsLength - 1] == 'function') {\n" +
848
- ' callback = args[--argsLength];\n' +
849
- '}'
850
- ),
851
- 'loop': 'result[index] = callback ? callback(result[index], iterable[index]) : iterable[index]'
852
- });
714
+ var assign = function (object, source, guard) {
715
+ var index, iterable = object, result = iterable;
716
+ if (!iterable) return result;
717
+ var args = arguments,
718
+ argsIndex = 0,
719
+ argsLength = typeof guard == 'number' ? 2 : args.length;
720
+ if (argsLength > 3 && typeof args[argsLength - 2] == 'function') {
721
+ var callback = lodash.createCallback(args[--argsLength - 1], args[argsLength--], 2);
722
+ } else if (argsLength > 2 && typeof args[argsLength - 1] == 'function') {
723
+ callback = args[--argsLength];
724
+ }
725
+ while (++argsIndex < argsLength) {
726
+ iterable = args[argsIndex];
727
+ if (iterable && objectTypes[typeof iterable]) {;
728
+ var length = iterable.length; index = -1;
729
+ if (isArray(iterable)) {
730
+ while (++index < length) {
731
+ result[index] = callback ? callback(result[index], iterable[index]) : iterable[index]
732
+ }
733
+ }
734
+ else {
735
+ var ownIndex = -1,
736
+ ownProps = objectTypes[typeof iterable] ? keys(iterable) : [],
737
+ length = ownProps.length;
738
+
739
+ while (++ownIndex < length) {
740
+ index = ownProps[ownIndex];
741
+ result[index] = callback ? callback(result[index], iterable[index]) : iterable[index]
742
+ }
743
+ }
744
+ }
745
+ };
746
+ return result
747
+ };
853
748
 
854
749
  /**
855
750
  * Creates a clone of `value`. If `deep` is `true`, nested objects will also
@@ -1042,7 +937,35 @@
1042
937
  * _.defaults(food, { 'name': 'banana', 'type': 'fruit' });
1043
938
  * // => { 'name': 'apple', 'type': 'fruit' }
1044
939
  */
1045
- var defaults = createIterator(defaultsIteratorOptions);
940
+ var defaults = function (object, source, guard) {
941
+ var index, iterable = object, result = iterable;
942
+ if (!iterable) return result;
943
+ var args = arguments,
944
+ argsIndex = 0,
945
+ argsLength = typeof guard == 'number' ? 2 : args.length;
946
+ while (++argsIndex < argsLength) {
947
+ iterable = args[argsIndex];
948
+ if (iterable && objectTypes[typeof iterable]) {;
949
+ var length = iterable.length; index = -1;
950
+ if (isArray(iterable)) {
951
+ while (++index < length) {
952
+ if (typeof result[index] == 'undefined') result[index] = iterable[index]
953
+ }
954
+ }
955
+ else {
956
+ var ownIndex = -1,
957
+ ownProps = objectTypes[typeof iterable] ? keys(iterable) : [],
958
+ length = ownProps.length;
959
+
960
+ while (++ownIndex < length) {
961
+ index = ownProps[ownIndex];
962
+ if (typeof result[index] == 'undefined') result[index] = iterable[index]
963
+ }
964
+ }
965
+ }
966
+ };
967
+ return result
968
+ };
1046
969
 
1047
970
  /**
1048
971
  * This method is similar to `_.find`, except that it returns the key of the
@@ -1051,7 +974,7 @@
1051
974
  * @static
1052
975
  * @memberOf _
1053
976
  * @category Objects
1054
- * @param {Array|Object|String} collection The collection to iterate over.
977
+ * @param {Object} object The object to search.
1055
978
  * @param {Function|Object|String} [callback=identity] The function called per
1056
979
  * iteration. If a property name or object is passed, it will be used to create
1057
980
  * a "_.pluck" or "_.where" style callback, respectively.
@@ -1059,14 +982,16 @@
1059
982
  * @returns {Mixed} Returns the key of the found element, else `undefined`.
1060
983
  * @example
1061
984
  *
1062
- * _.findKey({ 'a': 1, 'b': 2, 'c': 3, 'd': 4 }, function(num) { return num % 2 == 0; });
985
+ * _.findKey({ 'a': 1, 'b': 2, 'c': 3, 'd': 4 }, function(num) {
986
+ * return num % 2 == 0;
987
+ * });
1063
988
  * // => 'b'
1064
989
  */
1065
- function findKey(collection, callback, thisArg) {
990
+ function findKey(object, callback, thisArg) {
1066
991
  var result;
1067
992
  callback = lodash.createCallback(callback, thisArg);
1068
- forOwn(collection, function(value, key, collection) {
1069
- if (callback(value, key, collection)) {
993
+ forOwn(object, function(value, key, object) {
994
+ if (callback(value, key, object)) {
1070
995
  result = key;
1071
996
  return false;
1072
997
  }
@@ -1103,9 +1028,17 @@
1103
1028
  * });
1104
1029
  * // => alerts 'name' and 'bark' (order is not guaranteed)
1105
1030
  */
1106
- var forIn = createIterator(eachIteratorOptions, forOwnIteratorOptions, {
1107
- 'useHas': false
1108
- });
1031
+ var forIn = function (collection, callback, thisArg) {
1032
+ var index, iterable = collection, result = iterable;
1033
+ if (!iterable) return result;
1034
+ if (!objectTypes[typeof iterable]) return result;
1035
+ callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg);
1036
+
1037
+ for (index in iterable) {
1038
+ if (callback(iterable[index], index, collection) === false) return result;
1039
+ }
1040
+ return result
1041
+ };
1109
1042
 
1110
1043
  /**
1111
1044
  * Iterates over an object's own enumerable properties, executing the `callback`
@@ -1128,7 +1061,22 @@
1128
1061
  * });
1129
1062
  * // => alerts '0', '1', and 'length' (order is not guaranteed)
1130
1063
  */
1131
- var forOwn = createIterator(eachIteratorOptions, forOwnIteratorOptions);
1064
+ var forOwn = function (collection, callback, thisArg) {
1065
+ var index, iterable = collection, result = iterable;
1066
+ if (!iterable) return result;
1067
+ if (!objectTypes[typeof iterable]) return result;
1068
+ callback = callback && typeof thisArg == 'undefined' ? callback : lodash.createCallback(callback, thisArg);
1069
+
1070
+ var ownIndex = -1,
1071
+ ownProps = objectTypes[typeof iterable] ? keys(iterable) : [],
1072
+ length = ownProps.length;
1073
+
1074
+ while (++ownIndex < length) {
1075
+ index = ownProps[ownIndex];
1076
+ if (callback(iterable[index], index, collection) === false) return result
1077
+ }
1078
+ return result
1079
+ };
1132
1080
 
1133
1081
  /**
1134
1082
  * Creates a sorted array of all enumerable properties, own and inherited,
@@ -1200,6 +1148,28 @@
1200
1148
  return result;
1201
1149
  }
1202
1150
 
1151
+ /**
1152
+ * Checks if `value` is an array.
1153
+ *
1154
+ * @static
1155
+ * @memberOf _
1156
+ * @category Objects
1157
+ * @param {Mixed} value The value to check.
1158
+ * @returns {Boolean} Returns `true`, if the `value` is an array, else `false`.
1159
+ * @example
1160
+ *
1161
+ * (function() { return _.isArray(arguments); })();
1162
+ * // => false
1163
+ *
1164
+ * _.isArray([1, 2, 3]);
1165
+ * // => true
1166
+ */
1167
+ function isArray(value) {
1168
+ // `instanceof` may cause a memory leak in IE 7 if `value` is a host object
1169
+ // http://ajaxian.com/archives/working-aroung-the-instanceof-memory-leak
1170
+ return value instanceof Array || nativeIsArray(value);
1171
+ }
1172
+
1203
1173
  /**
1204
1174
  * Checks if `value` is a boolean value.
1205
1175
  *
@@ -1333,11 +1303,8 @@
1333
1303
  function isEqual(a, b, callback, thisArg, stackA, stackB) {
1334
1304
  // used to indicate that when comparing objects, `a` has at least the properties of `b`
1335
1305
  var whereIndicator = callback === indicatorObject;
1336
- if (callback && !whereIndicator) {
1337
- callback = (typeof thisArg == 'undefined')
1338
- ? callback
1339
- : lodash.createCallback(callback, thisArg, 2);
1340
-
1306
+ if (typeof callback == 'function' && !whereIndicator) {
1307
+ callback = lodash.createCallback(callback, thisArg, 2);
1341
1308
  var result = callback(a, b);
1342
1309
  if (typeof result != 'undefined') {
1343
1310
  return !!result;
@@ -1817,22 +1784,24 @@
1817
1784
  }
1818
1785
  }
1819
1786
  if (!found) {
1820
- value = isArr
1821
- ? (isArray(value) ? value : [])
1822
- : (isPlainObject(value) ? value : {});
1823
-
1787
+ var isShallow;
1824
1788
  if (callback) {
1825
1789
  result = callback(value, source);
1826
- if (typeof result != 'undefined') {
1790
+ if ((isShallow = typeof result != 'undefined')) {
1827
1791
  value = result;
1828
1792
  }
1829
1793
  }
1794
+ if (!isShallow) {
1795
+ value = isArr
1796
+ ? (isArray(value) ? value : [])
1797
+ : (isPlainObject(value) ? value : {});
1798
+ }
1830
1799
  // add `source` and associated `value` to the stack of traversed objects
1831
1800
  stackA.push(source);
1832
1801
  stackB.push(value);
1833
1802
 
1834
1803
  // recursively merge objects and arrays (susceptible to call stack limits)
1835
- if (!callback) {
1804
+ if (!isShallow) {
1836
1805
  value = merge(value, source, indicatorObject, callback, stackA, stackB);
1837
1806
  }
1838
1807
  }
@@ -1887,12 +1856,12 @@
1887
1856
  if (isFunc) {
1888
1857
  callback = lodash.createCallback(callback, thisArg);
1889
1858
  } else {
1890
- var props = concat.apply(arrayRef, arguments);
1859
+ var props = concat.apply(arrayRef, nativeSlice.call(arguments, 1));
1891
1860
  }
1892
1861
  forIn(object, function(value, key, object) {
1893
1862
  if (isFunc
1894
1863
  ? !callback(value, key, object)
1895
- : indexOf(props, key, 1) < 0
1864
+ : indexOf(props, key) < 0
1896
1865
  ) {
1897
1866
  result[key] = value;
1898
1867
  }
@@ -1955,8 +1924,8 @@
1955
1924
  function pick(object, callback, thisArg) {
1956
1925
  var result = {};
1957
1926
  if (typeof callback != 'function') {
1958
- var index = 0,
1959
- props = concat.apply(arrayRef, arguments),
1927
+ var index = -1,
1928
+ props = concat.apply(arrayRef, nativeSlice.call(arguments, 1)),
1960
1929
  length = isObject(object) ? props.length : 0;
1961
1930
 
1962
1931
  while (++index < length) {
@@ -2026,7 +1995,7 @@
2026
1995
  */
2027
1996
  function at(collection) {
2028
1997
  var index = -1,
2029
- props = concat.apply(arrayRef, slice(arguments, 1)),
1998
+ props = concat.apply(arrayRef, nativeSlice.call(arguments, 1)),
2030
1999
  length = props.length,
2031
2000
  result = Array(length);
2032
2001
 
@@ -2278,7 +2247,9 @@
2278
2247
  * @returns {Mixed} Returns the found element, else `undefined`.
2279
2248
  * @example
2280
2249
  *
2281
- * _.find([1, 2, 3, 4], function(num) { return num % 2 == 0; });
2250
+ * _.find([1, 2, 3, 4], function(num) {
2251
+ * return num % 2 == 0;
2252
+ * });
2282
2253
  * // => 2
2283
2254
  *
2284
2255
  * var food = [
@@ -2427,7 +2398,7 @@
2427
2398
  * // => [['1', '2', '3'], ['4', '5', '6']]
2428
2399
  */
2429
2400
  function invoke(collection, methodName) {
2430
- var args = slice(arguments, 2),
2401
+ var args = nativeSlice.call(arguments, 2),
2431
2402
  index = -1,
2432
2403
  isFunc = typeof methodName == 'function',
2433
2404
  length = collection ? collection.length : 0,
@@ -2669,7 +2640,7 @@
2669
2640
  }
2670
2641
 
2671
2642
  /**
2672
- * Reduces a `collection` to a value that is the accumulated result of running
2643
+ * Reduces a `collection` to a value which is the accumulated result of running
2673
2644
  * each element in the `collection` through the `callback`, where each successive
2674
2645
  * `callback` execution consumes the return value of the previous execution.
2675
2646
  * If `accumulator` is not passed, the first element of the `collection` will be
@@ -3073,8 +3044,8 @@
3073
3044
  function difference(array) {
3074
3045
  var index = -1,
3075
3046
  length = array ? array.length : 0,
3076
- flattened = concat.apply(arrayRef, arguments),
3077
- contains = cachedContains(flattened, length, 100),
3047
+ flattened = concat.apply(arrayRef, nativeSlice.call(arguments, 1)),
3048
+ contains = cachedContains(flattened),
3078
3049
  result = [];
3079
3050
 
3080
3051
  while (++index < length) {
@@ -3093,7 +3064,7 @@
3093
3064
  * @static
3094
3065
  * @memberOf _
3095
3066
  * @category Arrays
3096
- * @param {Array|Object|String} collection The collection to iterate over.
3067
+ * @param {Array} array The array to search.
3097
3068
  * @param {Function|Object|String} [callback=identity] The function called per
3098
3069
  * iteration. If a property name or object is passed, it will be used to create
3099
3070
  * a "_.pluck" or "_.where" style callback, respectively.
@@ -3101,16 +3072,18 @@
3101
3072
  * @returns {Mixed} Returns the index of the found element, else `-1`.
3102
3073
  * @example
3103
3074
  *
3104
- * _.findIndex(['apple', 'banana', 'beet'], function(food) { return /^b/.test(food); });
3075
+ * _.findIndex(['apple', 'banana', 'beet'], function(food) {
3076
+ * return /^b/.test(food);
3077
+ * });
3105
3078
  * // => 1
3106
3079
  */
3107
- function findIndex(collection, callback, thisArg) {
3080
+ function findIndex(array, callback, thisArg) {
3108
3081
  var index = -1,
3109
- length = collection ? collection.length : 0;
3082
+ length = array ? array.length : 0;
3110
3083
 
3111
3084
  callback = lodash.createCallback(callback, thisArg);
3112
3085
  while (++index < length) {
3113
- if (callback(collection[index], index, collection)) {
3086
+ if (callback(array[index], index, array)) {
3114
3087
  return index;
3115
3088
  }
3116
3089
  }
@@ -3212,7 +3185,7 @@
3212
3185
  * @static
3213
3186
  * @memberOf _
3214
3187
  * @category Arrays
3215
- * @param {Array} array The array to compact.
3188
+ * @param {Array} array The array to flatten.
3216
3189
  * @param {Boolean} [isShallow=false] A flag to indicate only flattening a single level.
3217
3190
  * @param {Function|Object|String} [callback=identity] The function called per
3218
3191
  * iteration. If a property name or object is passed, it will be used to create
@@ -3403,7 +3376,7 @@
3403
3376
  cache = { '0': {} },
3404
3377
  index = -1,
3405
3378
  length = array ? array.length : 0,
3406
- isLarge = length >= 100,
3379
+ isLarge = length >= largeArraySize,
3407
3380
  result = [],
3408
3381
  seen = result;
3409
3382
 
@@ -3411,8 +3384,8 @@
3411
3384
  while (++index < length) {
3412
3385
  var value = array[index];
3413
3386
  if (isLarge) {
3414
- var key = String(value);
3415
- var inited = hasOwnProperty.call(cache[0], key)
3387
+ var key = keyPrefix + value;
3388
+ var inited = cache[0][key]
3416
3389
  ? !(seen = cache[0][key])
3417
3390
  : (seen = cache[0][key] = []);
3418
3391
  }
@@ -3422,7 +3395,7 @@
3422
3395
  }
3423
3396
  var argsIndex = argsLength;
3424
3397
  while (--argsIndex) {
3425
- if (!(cache[argsIndex] || (cache[argsIndex] = cachedContains(args[argsIndex], 0, 100)))(value)) {
3398
+ if (!(cache[argsIndex] || (cache[argsIndex] = cachedContains(args[argsIndex])))(value)) {
3426
3399
  continue outer;
3427
3400
  }
3428
3401
  }
@@ -3683,7 +3656,7 @@
3683
3656
  * @static
3684
3657
  * @memberOf _
3685
3658
  * @category Arrays
3686
- * @param {Array} array The array to iterate over.
3659
+ * @param {Array} array The array to inspect.
3687
3660
  * @param {Mixed} value The value to evaluate.
3688
3661
  * @param {Function|Object|String} [callback=identity] The function called per
3689
3662
  * iteration. If a property name or object is passed, it will be used to create
@@ -3746,7 +3719,10 @@
3746
3719
  * _.union([1, 2, 3], [101, 2, 1, 10], [2, 1]);
3747
3720
  * // => [1, 2, 3, 101, 10]
3748
3721
  */
3749
- function union() {
3722
+ function union(array) {
3723
+ if (!isArray(array)) {
3724
+ arguments[0] = array ? nativeSlice.call(array) : arrayRef;
3725
+ }
3750
3726
  return uniq(concat.apply(arrayRef, arguments));
3751
3727
  }
3752
3728
 
@@ -3806,7 +3782,7 @@
3806
3782
  isSorted = false;
3807
3783
  }
3808
3784
  // init value cache for large arrays
3809
- var isLarge = !isSorted && length >= 75;
3785
+ var isLarge = !isSorted && length >= largeArraySize;
3810
3786
  if (isLarge) {
3811
3787
  var cache = {};
3812
3788
  }
@@ -3819,8 +3795,8 @@
3819
3795
  computed = callback ? callback(value, index, array) : value;
3820
3796
 
3821
3797
  if (isLarge) {
3822
- var key = String(computed);
3823
- var inited = hasOwnProperty.call(cache, key)
3798
+ var key = keyPrefix + computed;
3799
+ var inited = cache[key]
3824
3800
  ? !(seen = cache[key])
3825
3801
  : (seen = cache[key] = []);
3826
3802
  }
@@ -3837,6 +3813,37 @@
3837
3813
  return result;
3838
3814
  }
3839
3815
 
3816
+ /**
3817
+ * The inverse of `_.zip`, this method splits groups of elements into arrays
3818
+ * composed of elements from each group at their corresponding indexes.
3819
+ *
3820
+ * @static
3821
+ * @memberOf _
3822
+ * @category Arrays
3823
+ * @param {Array} array The array to process.
3824
+ * @returns {Array} Returns a new array of the composed arrays.
3825
+ * @example
3826
+ *
3827
+ * _.unzip([['moe', 30, true], ['larry', 40, false]]);
3828
+ * // => [['moe', 'larry'], [30, 40], [true, false]];
3829
+ */
3830
+ function unzip(array) {
3831
+ var index = -1,
3832
+ length = array ? array.length : 0,
3833
+ tupleLength = length ? max(pluck(array, 'length')) : 0,
3834
+ result = Array(tupleLength);
3835
+
3836
+ while (++index < length) {
3837
+ var tupleIndex = -1,
3838
+ tuple = array[index];
3839
+
3840
+ while (++tupleIndex < tupleLength) {
3841
+ (result[tupleIndex] || (result[tupleIndex] = Array(length)))[index] = tuple[tupleIndex];
3842
+ }
3843
+ }
3844
+ return result;
3845
+ }
3846
+
3840
3847
  /**
3841
3848
  * Creates an array with all occurrences of the passed values removed using
3842
3849
  * strict equality for comparisons, i.e. `===`.
@@ -3853,18 +3860,7 @@
3853
3860
  * // => [2, 3, 4]
3854
3861
  */
3855
3862
  function without(array) {
3856
- var index = -1,
3857
- length = array ? array.length : 0,
3858
- contains = cachedContains(arguments, 1, 30),
3859
- result = [];
3860
-
3861
- while (++index < length) {
3862
- var value = array[index];
3863
- if (!contains(value)) {
3864
- result.push(value);
3865
- }
3866
- }
3867
- return result;
3863
+ return difference(array, nativeSlice.call(arguments, 1));
3868
3864
  }
3869
3865
 
3870
3866
  /**
@@ -3990,7 +3986,7 @@
3990
3986
  // (in V8 `Function#bind` is slower except when partially applied)
3991
3987
  return support.fastBind || (nativeBind && arguments.length > 2)
3992
3988
  ? nativeBind.call.apply(nativeBind, arguments)
3993
- : createBound(func, thisArg, slice(arguments, 2));
3989
+ : createBound(func, thisArg, nativeSlice.call(arguments, 2));
3994
3990
  }
3995
3991
 
3996
3992
  /**
@@ -4017,8 +4013,8 @@
4017
4013
  * // => alerts 'clicked docs', when the button is clicked
4018
4014
  */
4019
4015
  function bindAll(object) {
4020
- var funcs = concat.apply(arrayRef, arguments),
4021
- index = funcs.length > 1 ? 0 : (funcs = functions(object), -1),
4016
+ var funcs = arguments.length > 1 ? concat.apply(arrayRef, nativeSlice.call(arguments, 1)) : functions(object),
4017
+ index = -1,
4022
4018
  length = funcs.length;
4023
4019
 
4024
4020
  while (++index < length) {
@@ -4063,7 +4059,7 @@
4063
4059
  * // => 'hi, moe!'
4064
4060
  */
4065
4061
  function bindKey(object, key) {
4066
- return createBound(object, key, slice(arguments, 2), indicatorObject);
4062
+ return createBound(object, key, nativeSlice.call(arguments, 2), indicatorObject);
4067
4063
  }
4068
4064
 
4069
4065
  /**
@@ -4193,44 +4189,53 @@
4193
4189
  /**
4194
4190
  * Creates a function that will delay the execution of `func` until after
4195
4191
  * `wait` milliseconds have elapsed since the last time it was invoked. Pass
4196
- * `true` for `immediate` to cause debounce to invoke `func` on the leading,
4197
- * instead of the trailing, edge of the `wait` timeout. Subsequent calls to
4198
- * the debounced function will return the result of the last `func` call.
4192
+ * an `options` object to indicate that `func` should be invoked on the leading
4193
+ * and/or trailing edge of the `wait` timeout. Subsequent calls to the debounced
4194
+ * function will return the result of the last `func` call.
4199
4195
  *
4200
4196
  * @static
4201
4197
  * @memberOf _
4202
4198
  * @category Functions
4203
4199
  * @param {Function} func The function to debounce.
4204
4200
  * @param {Number} wait The number of milliseconds to delay.
4205
- * @param {Boolean} immediate A flag to indicate execution is on the leading
4206
- * edge of the timeout.
4201
+ * @param {Object} options The options object.
4202
+ * [leading=false] A boolean to specify execution on the leading edge of the timeout.
4203
+ * [trailing=true] A boolean to specify execution on the trailing edge of the timeout.
4207
4204
  * @returns {Function} Returns the new debounced function.
4208
4205
  * @example
4209
4206
  *
4210
4207
  * var lazyLayout = _.debounce(calculateLayout, 300);
4211
4208
  * jQuery(window).on('resize', lazyLayout);
4212
4209
  */
4213
- function debounce(func, wait, immediate) {
4210
+ function debounce(func, wait, options) {
4214
4211
  var args,
4215
4212
  result,
4216
4213
  thisArg,
4217
- timeoutId;
4214
+ timeoutId,
4215
+ trailing = true;
4218
4216
 
4219
4217
  function delayed() {
4220
4218
  timeoutId = null;
4221
- if (!immediate) {
4219
+ if (trailing) {
4222
4220
  result = func.apply(thisArg, args);
4223
4221
  }
4224
4222
  }
4223
+ if (options === true) {
4224
+ var leading = true;
4225
+ trailing = false;
4226
+ } else if (options && objectTypes[typeof options]) {
4227
+ leading = options.leading;
4228
+ trailing = 'trailing' in options ? options.trailing : trailing;
4229
+ }
4225
4230
  return function() {
4226
- var isImmediate = immediate && !timeoutId;
4231
+ var isLeading = leading && !timeoutId;
4227
4232
  args = arguments;
4228
4233
  thisArg = this;
4229
4234
 
4230
4235
  clearTimeout(timeoutId);
4231
4236
  timeoutId = setTimeout(delayed, wait);
4232
4237
 
4233
- if (isImmediate) {
4238
+ if (isLeading) {
4234
4239
  result = func.apply(thisArg, args);
4235
4240
  }
4236
4241
  return result;
@@ -4253,7 +4258,7 @@
4253
4258
  * // returns from the function before `alert` is called
4254
4259
  */
4255
4260
  function defer(func) {
4256
- var args = slice(arguments, 1);
4261
+ var args = nativeSlice.call(arguments, 1);
4257
4262
  return setTimeout(function() { func.apply(undefined, args); }, 1);
4258
4263
  }
4259
4264
  // use `setImmediate` if it's available in Node.js
@@ -4279,7 +4284,7 @@
4279
4284
  * // => 'logged later' (Appears after one second.)
4280
4285
  */
4281
4286
  function delay(func, wait) {
4282
- var args = slice(arguments, 2);
4287
+ var args = nativeSlice.call(arguments, 2);
4283
4288
  return setTimeout(function() { func.apply(undefined, args); }, wait);
4284
4289
  }
4285
4290
 
@@ -4305,7 +4310,7 @@
4305
4310
  function memoize(func, resolver) {
4306
4311
  var cache = {};
4307
4312
  return function() {
4308
- var key = String(resolver ? resolver.apply(this, arguments) : arguments[0]);
4313
+ var key = keyPrefix + (resolver ? resolver.apply(this, arguments) : arguments[0]);
4309
4314
  return hasOwnProperty.call(cache, key)
4310
4315
  ? cache[key]
4311
4316
  : (cache[key] = func.apply(this, arguments));
@@ -4365,7 +4370,7 @@
4365
4370
  * // => 'hi moe'
4366
4371
  */
4367
4372
  function partial(func) {
4368
- return createBound(func, slice(arguments, 1));
4373
+ return createBound(func, nativeSlice.call(arguments, 1));
4369
4374
  }
4370
4375
 
4371
4376
  /**
@@ -4396,43 +4401,61 @@
4396
4401
  * // => { '_': _, 'jq': $ }
4397
4402
  */
4398
4403
  function partialRight(func) {
4399
- return createBound(func, slice(arguments, 1), null, indicatorObject);
4404
+ return createBound(func, nativeSlice.call(arguments, 1), null, indicatorObject);
4400
4405
  }
4401
4406
 
4402
4407
  /**
4403
- * Creates a function that, when executed, will only call the `func`
4404
- * function at most once per every `wait` milliseconds. If the throttled
4405
- * function is invoked more than once during the `wait` timeout, `func` will
4406
- * also be called on the trailing edge of the timeout. Subsequent calls to the
4407
- * throttled function will return the result of the last `func` call.
4408
+ * Creates a function that, when executed, will only call the `func` function
4409
+ * at most once per every `wait` milliseconds. If the throttled function is
4410
+ * invoked more than once during the `wait` timeout, `func` will also be called
4411
+ * on the trailing edge of the timeout. Pass an `options` object to indicate
4412
+ * that `func` should be invoked on the leading and/or trailing edge of the
4413
+ * `wait` timeout. Subsequent calls to the throttled function will return
4414
+ * the result of the last `func` call.
4408
4415
  *
4409
4416
  * @static
4410
4417
  * @memberOf _
4411
4418
  * @category Functions
4412
4419
  * @param {Function} func The function to throttle.
4413
4420
  * @param {Number} wait The number of milliseconds to throttle executions to.
4421
+ * @param {Object} options The options object.
4422
+ * [leading=true] A boolean to specify execution on the leading edge of the timeout.
4423
+ * [trailing=true] A boolean to specify execution on the trailing edge of the timeout.
4414
4424
  * @returns {Function} Returns the new throttled function.
4415
4425
  * @example
4416
4426
  *
4417
4427
  * var throttled = _.throttle(updatePosition, 100);
4418
4428
  * jQuery(window).on('scroll', throttled);
4419
4429
  */
4420
- function throttle(func, wait) {
4430
+ function throttle(func, wait, options) {
4421
4431
  var args,
4422
4432
  result,
4423
4433
  thisArg,
4424
4434
  timeoutId,
4425
- lastCalled = 0;
4435
+ lastCalled = 0,
4436
+ leading = true,
4437
+ trailing = true;
4426
4438
 
4427
4439
  function trailingCall() {
4428
4440
  lastCalled = new Date;
4429
4441
  timeoutId = null;
4430
- result = func.apply(thisArg, args);
4442
+
4443
+ if (trailing) {
4444
+ result = func.apply(thisArg, args);
4445
+ }
4446
+ }
4447
+ if (options === false) {
4448
+ leading = false;
4449
+ } else if (options && objectTypes[typeof options]) {
4450
+ leading = 'leading' in options ? options.leading : leading;
4451
+ trailing = 'trailing' in options ? options.trailing : trailing;
4431
4452
  }
4432
4453
  return function() {
4433
- var now = new Date,
4434
- remaining = wait - (now - lastCalled);
4435
-
4454
+ var now = new Date;
4455
+ if (!timeoutId && !leading) {
4456
+ lastCalled = now;
4457
+ }
4458
+ var remaining = wait - (now - lastCalled);
4436
4459
  args = arguments;
4437
4460
  thisArg = this;
4438
4461
 
@@ -4662,9 +4685,6 @@
4662
4685
  * Note: In the development build, `_.template` utilizes sourceURLs for easier
4663
4686
  * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl
4664
4687
  *
4665
- * Note: Lo-Dash may be used in Chrome extensions by either creating a `lodash csp`
4666
- * build and using precompiled templates, or loading Lo-Dash in a sandbox.
4667
- *
4668
4688
  * For more information on precompiling templates see:
4669
4689
  * http://lodash.com/#custom-builds
4670
4690
  *
@@ -4675,7 +4695,7 @@
4675
4695
  * @memberOf _
4676
4696
  * @category Utilities
4677
4697
  * @param {String} text The template text.
4678
- * @param {Obect} data The data object used to populate the text.
4698
+ * @param {Object} data The data object used to populate the text.
4679
4699
  * @param {Object} options The options object.
4680
4700
  * escape - The "escape" delimiter regexp.
4681
4701
  * evaluate - The "evaluate" delimiter regexp.
@@ -4875,7 +4895,7 @@
4875
4895
  }
4876
4896
 
4877
4897
  /**
4878
- * The opposite of `_.escape`, this method converts the HTML entities
4898
+ * The inverse of `_.escape`, this method converts the HTML entities
4879
4899
  * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to their
4880
4900
  * corresponding characters.
4881
4901
  *
@@ -5028,6 +5048,7 @@
5028
5048
  lodash.toArray = toArray;
5029
5049
  lodash.union = union;
5030
5050
  lodash.uniq = uniq;
5051
+ lodash.unzip = unzip;
5031
5052
  lodash.values = values;
5032
5053
  lodash.where = where;
5033
5054
  lodash.without = without;
@@ -5145,7 +5166,7 @@
5145
5166
  * @memberOf _
5146
5167
  * @type String
5147
5168
  */
5148
- lodash.VERSION = '1.1.1';
5169
+ lodash.VERSION = '1.2.0';
5149
5170
 
5150
5171
  // add "Chaining" functions to the wrapper
5151
5172
  lodash.prototype.toString = wrapperToString;