lodash-rails 2.2.1 → 2.3.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,54 +1,55 @@
1
1
  /**
2
2
  * @license
3
- * Lo-Dash 2.2.1 (Custom Build) lodash.com/license | Underscore.js 1.5.2 underscorejs.org/LICENSE
3
+ * Lo-Dash 2.3.0 (Custom Build) lodash.com/license | Underscore.js 1.5.2 underscorejs.org/LICENSE
4
4
  * Build: `lodash modern -o ./dist/lodash.js`
5
5
  */
6
- ;(function(){function n(n,t,e){e=(e||0)-1;for(var r=n?n.length:0;++e<r;)if(n[e]===t)return e;return-1}function t(t,e){var r=typeof e;if(t=t.l,"boolean"==r||null==e)return t[e]?0:-1;"number"!=r&&"string"!=r&&(r="object");var u="number"==r?e:_+e;return t=(t=t[r])&&t[u],"object"==r?t&&-1<n(t,e)?0:-1:t?0:-1}function e(n){var t=this.l,e=typeof n;if("boolean"==e||null==n)t[n]=!0;else{"number"!=e&&"string"!=e&&(e="object");var r="number"==e?n:_+n,t=t[e]||(t[e]={});"object"==e?(t[r]||(t[r]=[])).push(n):t[r]=!0
7
- }}function r(n){return n.charCodeAt(0)}function u(n,t){var e=n.m,r=t.m;if(e!==r){if(e>r||typeof e=="undefined")return 1;if(e<r||typeof r=="undefined")return-1}return n.n-t.n}function o(n){var t=-1,r=n.length,u=n[0],o=n[0|r/2],a=n[r-1];if(u&&typeof u=="object"&&o&&typeof o=="object"&&a&&typeof a=="object")return!1;for(u=f(),u["false"]=u["null"]=u["true"]=u.undefined=!1,o=f(),o.k=n,o.l=u,o.push=e;++t<r;)o.push(n[t]);return o}function a(n){return"\\"+G[n]}function i(){return g.pop()||[]}function f(){return y.pop()||{k:null,l:null,m:null,"false":!1,n:0,"null":!1,number:null,object:null,push:null,string:null,"true":!1,undefined:!1,o:null}
8
- }function l(){}function c(n){n.length=0,g.length<d&&g.push(n)}function p(n){var t=n.l;t&&p(t),n.k=n.l=n.m=n.object=n.number=n.string=n.o=null,y.length<d&&y.push(n)}function s(n,t,e){t||(t=0),typeof e=="undefined"&&(e=n?n.length:0);var r=-1;e=e-t||0;for(var u=Array(0>e?0:e);++r<e;)u[r]=n[t+r];return u}function v(e){function g(n){if(!n||je.call(n)!=z)return!1;var t=n.valueOf,e=typeof t=="function"&&(e=ge(t))&&ge(e);return e?n==e||ge(n)==e:st(n)}function y(n,t,e){if(!n||!V[typeof n])return n;t=t&&typeof e=="undefined"?t:et(t,e,3);
9
- for(var r=-1,u=V[typeof n]&&Ke(n),o=u?u.length:0;++r<o&&(e=u[r],false!==t(n[e],e,n)););return n}function d(n,t,e){var r;if(!n||!V[typeof n])return n;t=t&&typeof e=="undefined"?t:et(t,e,3);for(r in n)if(false===t(n[r],r,n))break;return n}function G(n,t,e){var r,u=n,o=u;if(!u)return o;for(var a=arguments,i=0,f=typeof e=="number"?2:a.length;++i<f;)if((u=a[i])&&V[typeof u])for(var l=-1,c=V[typeof u]&&Ke(u),p=c?c.length:0;++l<p;)r=c[l],"undefined"==typeof o[r]&&(o[r]=u[r]);return o}function J(n,t,e){var r,u=n,o=u;
10
- if(!u)return o;var a=arguments,i=0,f=typeof e=="number"?2:a.length;if(3<f&&"function"==typeof a[f-2])var l=et(a[--f-1],a[f--],2);else 2<f&&"function"==typeof a[f-1]&&(l=a[--f]);for(;++i<f;)if((u=a[i])&&V[typeof u])for(var c=-1,p=V[typeof u]&&Ke(u),s=p?p.length:0;++c<s;)r=p[c],o[r]=l?l(o[r],u[r]):u[r];return o}function Q(n){var t,e=[];if(!n||!V[typeof n])return e;for(t in n)ye.call(n,t)&&e.push(t);return e}function Y(n){return n&&typeof n=="object"&&!Pe(n)&&ye.call(n,"__wrapped__")?n:new nt(n)}function nt(n,t){this.__chain__=!!t,this.__wrapped__=n
11
- }function tt(n,t,e,r,u){if(e){var o=e(n);if(typeof o!="undefined")return o}if(!bt(n))return n;var a=je.call(n);if(!L[a])return n;var f=We[a];switch(a){case F:case T:return new f(+n);case q:case K:return new f(n);case P:return o=f(n.source,O.exec(n)),o.lastIndex=n.lastIndex,o}if(a=Pe(n),t){var l=!r;r||(r=i()),u||(u=i());for(var p=r.length;p--;)if(r[p]==n)return u[p];o=a?f(n.length):{}}else o=a?s(n):J({},n);return a&&(ye.call(n,"index")&&(o.index=n.index),ye.call(n,"input")&&(o.input=n.input)),t?(r.push(n),u.push(o),(a?It:y)(n,function(n,a){o[a]=tt(n,t,e,r,u)
12
- }),l&&(c(r),c(u)),o):o}function et(n,t,e){if(typeof n!="function")return Gt;if(typeof t=="undefined")return n;var r=n.__bindData__||qe.funcNames&&!n.name;if(typeof r=="undefined"){var u=R&&he.call(n);qe.funcNames||!u||I.test(u)||(r=!0),(qe.funcNames||!r)&&(r=!qe.funcDecomp||R.test(u),ze(n,r))}if(true!==r&&r&&1&r[1])return n;switch(e){case 1:return function(e){return n.call(t,e)};case 2:return function(e,r){return n.call(t,e,r)};case 3:return function(e,r,u){return n.call(t,e,r,u)};case 4:return function(e,r,u,o){return n.call(t,e,r,u,o)
13
- }}return Mt(n,t)}function rt(n,t,e,r){r=(r||0)-1;for(var u=n?n.length:0,o=[];++r<u;){var a=n[r];if(a&&typeof a=="object"&&typeof a.length=="number"&&(Pe(a)||ht(a))){t||(a=rt(a,t,e));var i=-1,f=a.length,l=o.length;for(o.length+=f;++i<f;)o[l++]=a[i]}else e||o.push(a)}return o}function ut(n,t,e,r,u,o){if(e){var a=e(n,t);if(typeof a!="undefined")return!!a}if(n===t)return 0!==n||1/n==1/t;if(n===n&&!(n&&V[typeof n]||t&&V[typeof t]))return!1;if(null==n||null==t)return n===t;var f=je.call(n),l=je.call(t);
14
- if(f==B&&(f=z),l==B&&(l=z),f!=l)return!1;switch(f){case F:case T:return+n==+t;case q:return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case P:case K:return n==oe(t)}if(l=f==$,!l){if(ye.call(n,"__wrapped__")||ye.call(t,"__wrapped__"))return ut(n.__wrapped__||n,t.__wrapped__||t,e,r,u,o);if(f!=z)return!1;var f=n.constructor,p=t.constructor;if(f!=p&&!(_t(f)&&f instanceof f&&_t(p)&&p instanceof p))return!1}for(p=!u,u||(u=i()),o||(o=i()),f=u.length;f--;)if(u[f]==n)return o[f]==t;var s=0,a=!0;if(u.push(n),o.push(t),l){if(f=n.length,s=t.length,a=s==n.length,!a&&!r)return a;
15
- for(;s--;)if(l=f,p=t[s],r)for(;l--&&!(a=ut(n[l],p,e,r,u,o)););else if(!(a=ut(n[s],p,e,r,u,o)))break;return a}return d(t,function(t,i,f){return ye.call(f,i)?(s++,a=ye.call(n,i)&&ut(n[i],t,e,r,u,o)):void 0}),a&&!r&&d(n,function(n,t,e){return ye.call(e,t)?a=-1<--s:void 0}),p&&(c(u),c(o)),a}function ot(n,t,e,r,u){(Pe(t)?It:y)(t,function(t,o){var a,i,f=t,l=n[o];if(t&&((i=Pe(t))||g(t))){for(f=r.length;f--;)if(a=r[f]==t){l=u[f];break}if(!a){var c;e&&(f=e(l,t),c=typeof f!="undefined")&&(l=f),c||(l=i?Pe(l)?l:[]:g(l)?l:{}),r.push(t),u.push(l),c||ot(l,t,e,r,u)
16
- }}else e&&(f=e(l,t),typeof f=="undefined"&&(f=t)),typeof f!="undefined"&&(l=f);n[o]=l})}function at(e,r,u){var a=-1,f=pt(),l=e?e.length:0,s=[],v=!r&&l>=b&&f===n,h=u||v?i():s;if(v){var g=o(h);g?(f=t,h=g):(v=!1,h=u?h:(c(h),s))}for(;++a<l;){var g=e[a],y=u?u(g,a,e):g;(r?!a||h[h.length-1]!==y:0>f(h,y))&&((u||v)&&h.push(y),s.push(g))}return v?(c(h.k),p(h)):u&&c(h),s}function it(n){return function(t,e,r){var u={};e=Y.createCallback(e,r,3),r=-1;var o=t?t.length:0;if(typeof o=="number")for(;++r<o;){var a=t[r];
17
- n(u,a,e(a,r,t),t)}else y(t,function(t,r,o){n(u,t,e(t,r,o),o)});return u}}function ft(n,t,e,r,u,o){var a=1&t,i=2&t,f=4&t,l=8&t,c=16&t,p=32&t,s=n;if(!i&&!_t(n))throw new ae;c&&!e.length&&(t&=-17,c=e=!1),p&&!r.length&&(t&=-33,p=r=!1);var v=n&&n.__bindData__;if(v)return!a||1&v[1]||(v[4]=u),!a&&1&v[1]&&(t|=8),!f||4&v[1]||(v[5]=o),c&&_e.apply(v[2]||(v[2]=[]),e),p&&_e.apply(v[3]||(v[3]=[]),r),v[1]|=t,ft.apply(null,v);if(!a||i||f||p||!(qe.fastBind||Ce&&c))g=function(){var v=arguments,h=a?u:this;return(f||c||p)&&(v=$e.call(v),c&&ke.apply(v,e),p&&_e.apply(v,r),f&&v.length<o)?(t|=16,ft(n,l?t:-4&t,v,null,u,o)):(i&&(n=h[s]),this instanceof g?(h=lt(n.prototype),v=n.apply(h,v),bt(v)?v:h):n.apply(h,v))
18
- };else{if(c){var h=[u];_e.apply(h,e)}var g=c?Ce.apply(n,h):Ce.call(n,u)}return ze(g,$e.call(arguments)),g}function lt(n){return bt(n)?Oe(n):{}}function ct(n){return Le[n]}function pt(){var t=(t=Y.indexOf)===Wt?n:t;return t}function st(n){var t,e;return n&&je.call(n)==z&&(t=n.constructor,!_t(t)||t instanceof t)?(d(n,function(n,t){e=t}),typeof e=="undefined"||ye.call(n,e)):!1}function vt(n){return Me[n]}function ht(n){return n&&typeof n=="object"&&typeof n.length=="number"&&je.call(n)==B||!1}function gt(n,t,e){var r=Ke(n),u=r.length;
19
- for(t=et(t,e,3);u--&&(e=r[u],false!==t(n[e],e,n)););return n}function yt(n){var t=[];return d(n,function(n,e){_t(n)&&t.push(e)}),t.sort()}function mt(n){for(var t=-1,e=Ke(n),r=e.length,u={};++t<r;){var o=e[t];u[n[o]]=o}return u}function _t(n){return typeof n=="function"}function bt(n){return!(!n||!V[typeof n])}function dt(n){return typeof n=="number"||je.call(n)==q}function wt(n){return typeof n=="string"||je.call(n)==K}function jt(n){for(var t=-1,e=Ke(n),r=e.length,u=Xt(r);++t<r;)u[t]=n[e[t]];return u
20
- }function kt(n,t,e){var r=-1,u=pt(),o=n?n.length:0,a=!1;return e=(0>e?Re(0,o+e):e)||0,Pe(n)?a=-1<u(n,t,e):typeof o=="number"?a=-1<(wt(n)?n.indexOf(t,e):u(n,t,e)):y(n,function(n){return++r<e?void 0:!(a=n===t)}),a}function xt(n,t,e){var r=!0;t=Y.createCallback(t,e,3),e=-1;var u=n?n.length:0;if(typeof u=="number")for(;++e<u&&(r=!!t(n[e],e,n)););else y(n,function(n,e,u){return r=!!t(n,e,u)});return r}function Ct(n,t,e){var r=[];t=Y.createCallback(t,e,3),e=-1;var u=n?n.length:0;if(typeof u=="number")for(;++e<u;){var o=n[e];
21
- t(o,e,n)&&r.push(o)}else y(n,function(n,e,u){t(n,e,u)&&r.push(n)});return r}function Ot(n,t,e){t=Y.createCallback(t,e,3),e=-1;var r=n?n.length:0;if(typeof r!="number"){var u;return y(n,function(n,e,r){return t(n,e,r)?(u=n,!1):void 0}),u}for(;++e<r;){var o=n[e];if(t(o,e,n))return o}}function It(n,t,e){var r=-1,u=n?n.length:0;if(t=t&&typeof e=="undefined"?t:et(t,e,3),typeof u=="number")for(;++r<u&&false!==t(n[r],r,n););else y(n,t);return n}function Nt(n,t,e){var r=n?n.length:0;if(t=t&&typeof e=="undefined"?t:et(t,e,3),typeof r=="number")for(;r--&&false!==t(n[r],r,n););else{var u=Ke(n),r=u.length;
22
- y(n,function(n,e,o){return e=u?u[--r]:--r,t(o[e],e,o)})}return n}function Et(n,t,e){var r=-1,u=n?n.length:0;if(t=Y.createCallback(t,e,3),typeof u=="number")for(var o=Xt(u);++r<u;)o[r]=t(n[r],r,n);else o=[],y(n,function(n,e,u){o[++r]=t(n,e,u)});return o}function St(n,t,e){var u=-1/0,o=u;if(!t&&Pe(n)){e=-1;for(var a=n.length;++e<a;){var i=n[e];i>o&&(o=i)}}else t=!t&&wt(n)?r:Y.createCallback(t,e,3),It(n,function(n,e,r){e=t(n,e,r),e>u&&(u=e,o=n)});return o}function Rt(n,t){var e=-1,r=n?n.length:0;if(typeof r=="number")for(var u=Xt(r);++e<r;)u[e]=n[e][t];
23
- return u||Et(n,t)}function At(n,t,e,r){if(!n)return e;var u=3>arguments.length;t=et(t,r,4);var o=-1,a=n.length;if(typeof a=="number")for(u&&(e=n[++o]);++o<a;)e=t(e,n[o],o,n);else y(n,function(n,r,o){e=u?(u=!1,n):t(e,n,r,o)});return e}function Dt(n,t,e,r){var u=3>arguments.length;return t=et(t,r,4),Nt(n,function(n,r,o){e=u?(u=!1,n):t(e,n,r,o)}),e}function Bt(n){var t=-1,e=n?n.length:0,r=Xt(typeof e=="number"?e:0);return It(n,function(n){var e=Jt(++t);r[t]=r[e],r[e]=n}),r}function $t(n,t,e){var r;t=Y.createCallback(t,e,3),e=-1;
24
- var u=n?n.length:0;if(typeof u=="number")for(;++e<u&&!(r=t(n[e],e,n)););else y(n,function(n,e,u){return!(r=t(n,e,u))});return!!r}function Ft(e){var r=-1,u=pt(),a=e?e.length:0,i=rt(arguments,!0,!0,1),f=[],l=a>=b&&u===n;if(l){var c=o(i);c?(u=t,i=c):l=!1}for(;++r<a;)c=e[r],0>u(i,c)&&f.push(c);return l&&p(i),f}function Tt(n,t,e){var r=0,u=n?n.length:0;if(typeof t!="number"&&null!=t){var o=-1;for(t=Y.createCallback(t,e,3);++o<u&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n?n[0]:h;return s(n,0,Ae(Re(0,r),u))
25
- }function Wt(t,e,r){if(typeof r=="number"){var u=t?t.length:0;r=0>r?Re(0,u+r):r||0}else if(r)return r=zt(t,e),t[r]===e?r:-1;return n(t,e,r)}function qt(n,t,e){if(typeof t!="number"&&null!=t){var r=0,u=-1,o=n?n.length:0;for(t=Y.createCallback(t,e,3);++u<o&&t(n[u],u,n);)r++}else r=null==t||e?1:Re(0,t);return s(n,r)}function zt(n,t,e,r){var u=0,o=n?n.length:u;for(e=e?Y.createCallback(e,r,1):Gt,t=e(t);u<o;)r=u+o>>>1,e(n[r])<t?u=r+1:o=r;return u}function Pt(n,t,e,r){return typeof t!="boolean"&&null!=t&&(e=(r=e)&&r[t]===n?null:t,t=!1),null!=e&&(e=Y.createCallback(e,r,3)),at(n,t,e)
26
- }function Kt(){for(var n=1<arguments.length?arguments:arguments[0],t=-1,e=n?St(Rt(n,"length")):0,r=Xt(0>e?0:e);++t<e;)r[t]=Rt(n,t);return r}function Lt(n,t){for(var e=-1,r=n?n.length:0,u={};++e<r;){var o=n[e];t?u[o]=t[e]:o&&(u[o[0]]=o[1])}return u}function Mt(n,t){return 2<arguments.length?ft(n,17,$e.call(arguments,2),null,t):ft(n,1,null,null,t)}function Ut(n,t,e){function r(){c&&se(c),a=c=p=h,(g||v!==t)&&(s=me(),i=n.apply(l,o))}function u(){var e=t-(me()-f);0<e?c=de(u,e):(a&&se(a),e=p,a=c=p=h,e&&(s=me(),i=n.apply(l,o)))
27
- }var o,a,i,f,l,c,p,s=0,v=!1,g=!0;if(!_t(n))throw new ae;if(t=Re(0,t)||0,true===e)var y=!0,g=!1;else bt(e)&&(y=e.leading,v="maxWait"in e&&(Re(t,e.maxWait)||0),g="trailing"in e?e.trailing:g);return function(){if(o=arguments,f=me(),l=this,p=g&&(c||!y),false===v)var e=y&&!c;else{a||y||(s=f);var h=v-(f-s);0<h?a||(a=de(r,h)):(a&&(a=se(a)),s=f,i=n.apply(l,o))}return c||t===v||(c=de(u,t)),e&&(i=n.apply(l,o)),i}}function Vt(n){if(!_t(n))throw new ae;var t=$e.call(arguments,1);return de(function(){n.apply(h,t)},1)
28
- }function Gt(n){return n}function Ht(n,t){var e=n,r=!t||_t(e);t||(e=nt,t=n,n=Y),It(yt(t),function(u){var o=n[u]=t[u];r&&(e.prototype[u]=function(){var t=this.__wrapped__,r=[t];return _e.apply(r,arguments),r=o.apply(n,r),t&&typeof t=="object"&&t===r?this:(r=new e(r),r.__chain__=this.__chain__,r)})})}function Jt(n,t,e){var r=null==n,u=null==t;return null==e&&(typeof n=="boolean"&&u?(e=n,n=1):u||typeof t!="boolean"||(e=t,u=!0)),r&&u&&(t=1),n=+n||0,u?(t=n,n=0):t=+t||0,r=Be(),e||n%1||t%1?Ae(n+r*(t-n+parseFloat("1e-"+((r+"").length-1))),t):n+ve(r*(t-n+1))
29
- }function Qt(){return this.__wrapped__}e=e?Z.defaults(H.Object(),e,Z.pick(H,D)):H;var Xt=e.Array,Yt=e.Boolean,Zt=e.Date,ne=e.Function,te=e.Math,ee=e.Number,re=e.Object,ue=e.RegExp,oe=e.String,ae=e.TypeError,ie=[],fe=re.prototype,le=e._,ce=ue("^"+oe(fe.valueOf).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),pe=te.ceil,se=e.clearTimeout,ve=te.floor,he=ne.prototype.toString,ge=ce.test(ge=re.getPrototypeOf)&&ge,ye=fe.hasOwnProperty,me=ce.test(me=Zt.now)&&me||function(){return+new Zt
30
- },_e=ie.push,be=e.setImmediate,de=e.setTimeout,we=ie.splice,je=fe.toString,ke=ie.unshift,xe=function(){try{var n={},t=ce.test(t=re.defineProperty)&&t,e=t(n,n,n)&&t}catch(r){}return e}(),Ce=ce.test(Ce=je.bind)&&Ce,Oe=ce.test(Oe=re.create)&&Oe,Ie=ce.test(Ie=Xt.isArray)&&Ie,Ne=e.isFinite,Ee=e.isNaN,Se=ce.test(Se=re.keys)&&Se,Re=te.max,Ae=te.min,De=e.parseInt,Be=te.random,$e=ie.slice,Fe=ce.test(e.attachEvent),Te=Ce&&!/\n|true/.test(Ce+Fe),We={};We[$]=Xt,We[F]=Yt,We[T]=Zt,We[W]=ne,We[z]=re,We[q]=ee,We[P]=ue,We[K]=oe,nt.prototype=Y.prototype;
31
- var qe=Y.support={};qe.fastBind=Ce&&!Te,qe.funcDecomp=!ce.test(e.a)&&R.test(v),qe.funcNames=typeof ne.name=="string",Y.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:N,variable:"",imports:{_:Y}},Oe||(lt=function(n){if(bt(n)){l.prototype=n;var t=new l;l.prototype=null}return t||{}});var ze=xe?function(n,t){U.value=t,xe(n,"__bindData__",U)}:l,Pe=Ie||function(n){return n&&typeof n=="object"&&typeof n.length=="number"&&je.call(n)==$||!1},Ke=Se?function(n){return bt(n)?Se(n):[]
32
- }:Q,Le={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},Me=mt(Le),Ue=ue("("+Ke(Me).join("|")+")","g"),Ve=ue("["+Ke(Le).join("")+"]","g"),Ge=it(function(n,t,e){ye.call(n,e)?n[e]++:n[e]=1}),He=it(function(n,t,e){(ye.call(n,e)?n[e]:n[e]=[]).push(t)}),Je=it(function(n,t,e){n[e]=t});Te&&X&&typeof be=="function"&&(Vt=function(n){if(!_t(n))throw new ae;return be.apply(e,arguments)});var Qe=8==De(w+"08")?De:function(n,t){return De(wt(n)?n.replace(E,""):n,t||0)};return Y.after=function(n,t){if(!_t(t))throw new ae;
33
- return function(){return 1>--n?t.apply(this,arguments):void 0}},Y.assign=J,Y.at=function(n){for(var t=arguments,e=-1,r=rt(t,!0,!1,1),t=t[2]&&t[2][t[1]]===n?1:r.length,u=Xt(t);++e<t;)u[e]=n[r[e]];return u},Y.bind=Mt,Y.bindAll=function(n){for(var t=1<arguments.length?rt(arguments,!0,!1,1):yt(n),e=-1,r=t.length;++e<r;){var u=t[e];n[u]=ft(n[u],1,null,null,n)}return n},Y.bindKey=function(n,t){return 2<arguments.length?ft(t,19,$e.call(arguments,2),null,n):ft(t,3,null,null,n)},Y.chain=function(n){return n=new nt(n),n.__chain__=!0,n
34
- },Y.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},Y.compose=function(){for(var n=arguments,t=n.length;t--;)if(!_t(n[t]))throw new ae;return function(){for(var t=arguments,e=n.length;e--;)t=[n[e].apply(this,t)];return t[0]}},Y.countBy=Ge,Y.createCallback=function(n,t,e){var r=typeof n;if(null==n||"function"==r)return et(n,t,e);if("object"!=r)return function(t){return t[n]};var u=Ke(n),o=u[0],a=n[o];return 1!=u.length||a!==a||bt(a)?function(t){for(var e=u.length,r=!1;e--&&(r=ut(t[u[e]],n[u[e]],null,!0)););return r
35
- }:function(n){return n=n[o],a===n&&(0!==a||1/a==1/n)}},Y.curry=function(n,t){return t=typeof t=="number"?t:+t||n.length,ft(n,4,null,null,null,t)},Y.debounce=Ut,Y.defaults=G,Y.defer=Vt,Y.delay=function(n,t){if(!_t(n))throw new ae;var e=$e.call(arguments,2);return de(function(){n.apply(h,e)},t)},Y.difference=Ft,Y.filter=Ct,Y.flatten=function(n,t,e,r){return typeof t!="boolean"&&null!=t&&(e=(r=e)&&r[t]===n?null:t,t=!1),null!=e&&(n=Et(n,e,r)),rt(n,t)},Y.forEach=It,Y.forEachRight=Nt,Y.forIn=d,Y.forInRight=function(n,t,e){var r=[];
36
- d(n,function(n,t){r.push(t,n)});var u=r.length;for(t=et(t,e,3);u--&&false!==t(r[u--],r[u],n););return n},Y.forOwn=y,Y.forOwnRight=gt,Y.functions=yt,Y.groupBy=He,Y.indexBy=Je,Y.initial=function(n,t,e){var r=0,u=n?n.length:0;if(typeof t!="number"&&null!=t){var o=u;for(t=Y.createCallback(t,e,3);o--&&t(n[o],o,n);)r++}else r=null==t||e?1:t||r;return s(n,0,Ae(Re(0,u-r),u))},Y.intersection=function(e){for(var r=arguments,u=r.length,a=-1,f=i(),l=-1,s=pt(),v=e?e.length:0,h=[],g=i();++a<u;){var y=r[a];f[a]=s===n&&(y?y.length:0)>=b&&o(a?r[a]:g)
37
- }n:for(;++l<v;){var m=f[0],y=e[l];if(0>(m?t(m,y):s(g,y))){for(a=u,(m||g).push(y);--a;)if(m=f[a],0>(m?t(m,y):s(r[a],y)))continue n;h.push(y)}}for(;u--;)(m=f[u])&&p(m);return c(f),c(g),h},Y.invert=mt,Y.invoke=function(n,t){var e=$e.call(arguments,2),r=-1,u=typeof t=="function",o=n?n.length:0,a=Xt(typeof o=="number"?o:0);return It(n,function(n){a[++r]=(u?t:n[t]).apply(n,e)}),a},Y.keys=Ke,Y.map=Et,Y.max=St,Y.memoize=function(n,t){function e(){var r=e.cache,u=t?t.apply(this,arguments):_+arguments[0];return ye.call(r,u)?r[u]:r[u]=n.apply(this,arguments)
38
- }if(!_t(n))throw new ae;return e.cache={},e},Y.merge=function(n){var t=arguments,e=2;if(!bt(n))return n;if("number"!=typeof t[2]&&(e=t.length),3<e&&"function"==typeof t[e-2])var r=et(t[--e-1],t[e--],2);else 2<e&&"function"==typeof t[e-1]&&(r=t[--e]);for(var t=$e.call(arguments,1,e),u=-1,o=i(),a=i();++u<e;)ot(n,t[u],r,o,a);return c(o),c(a),n},Y.min=function(n,t,e){var u=1/0,o=u;if(!t&&Pe(n)){e=-1;for(var a=n.length;++e<a;){var i=n[e];i<o&&(o=i)}}else t=!t&&wt(n)?r:Y.createCallback(t,e,3),It(n,function(n,e,r){e=t(n,e,r),e<u&&(u=e,o=n)
39
- });return o},Y.omit=function(n,t,e){var r=pt(),u=typeof t=="function",o={};if(u)t=Y.createCallback(t,e,3);else var a=rt(arguments,!0,!1,1);return d(n,function(n,e,i){(u?!t(n,e,i):0>r(a,e))&&(o[e]=n)}),o},Y.once=function(n){var t,e;if(!_t(n))throw new ae;return function(){return t?e:(t=!0,e=n.apply(this,arguments),n=null,e)}},Y.pairs=function(n){for(var t=-1,e=Ke(n),r=e.length,u=Xt(r);++t<r;){var o=e[t];u[t]=[o,n[o]]}return u},Y.partial=function(n){return ft(n,16,$e.call(arguments,1))},Y.partialRight=function(n){return ft(n,32,null,$e.call(arguments,1))
40
- },Y.pick=function(n,t,e){var r={};if(typeof t!="function")for(var u=-1,o=rt(arguments,!0,!1,1),a=bt(n)?o.length:0;++u<a;){var i=o[u];i in n&&(r[i]=n[i])}else t=Y.createCallback(t,e,3),d(n,function(n,e,u){t(n,e,u)&&(r[e]=n)});return r},Y.pluck=Rt,Y.pull=function(n){for(var t=arguments,e=0,r=t.length,u=n?n.length:0;++e<r;)for(var o=-1,a=t[e];++o<u;)n[o]===a&&(we.call(n,o--,1),u--);return n},Y.range=function(n,t,e){n=+n||0,e=typeof e=="number"?e:+e||1,null==t&&(t=n,n=0);var r=-1;t=Re(0,pe((t-n)/(e||1)));
41
- for(var u=Xt(t);++r<t;)u[r]=n,n+=e;return u},Y.reject=function(n,t,e){return t=Y.createCallback(t,e,3),Ct(n,function(n,e,r){return!t(n,e,r)})},Y.remove=function(n,t,e){var r=-1,u=n?n.length:0,o=[];for(t=Y.createCallback(t,e,3);++r<u;)e=n[r],t(e,r,n)&&(o.push(e),we.call(n,r--,1),u--);return o},Y.rest=qt,Y.shuffle=Bt,Y.sortBy=function(n,t,e){var r=-1,o=n?n.length:0,a=Xt(typeof o=="number"?o:0);for(t=Y.createCallback(t,e,3),It(n,function(n,e,u){var o=a[++r]=f();o.m=t(n,e,u),o.n=r,o.o=n}),o=a.length,a.sort(u);o--;)n=a[o],a[o]=n.o,p(n);
42
- return a},Y.tap=function(n,t){return t(n),n},Y.throttle=function(n,t,e){var r=!0,u=!0;if(!_t(n))throw new ae;return false===e?r=!1:bt(e)&&(r="leading"in e?e.leading:r,u="trailing"in e?e.trailing:u),M.leading=r,M.maxWait=t,M.trailing=u,Ut(n,t,M)},Y.times=function(n,t,e){n=-1<(n=+n)?n:0;var r=-1,u=Xt(n);for(t=et(t,e,1);++r<n;)u[r]=t(r);return u},Y.toArray=function(n){return n&&typeof n.length=="number"?s(n):jt(n)},Y.transform=function(n,t,e,r){var u=Pe(n);return t=et(t,r,4),null==e&&(u?e=[]:(r=n&&n.constructor,e=lt(r&&r.prototype))),(u?It:y)(n,function(n,r,u){return t(e,n,r,u)
43
- }),e},Y.union=function(){return at(rt(arguments,!0,!0))},Y.uniq=Pt,Y.values=jt,Y.where=Ct,Y.without=function(n){return Ft(n,$e.call(arguments,1))},Y.wrap=function(n,t){if(!_t(t))throw new ae;return function(){var e=[n];return _e.apply(e,arguments),t.apply(this,e)}},Y.zip=Kt,Y.zipObject=Lt,Y.collect=Et,Y.drop=qt,Y.each=It,Y.b=Nt,Y.extend=J,Y.methods=yt,Y.object=Lt,Y.select=Ct,Y.tail=qt,Y.unique=Pt,Y.unzip=Kt,Ht(Y),Y.clone=function(n,t,e,r){return typeof t!="boolean"&&null!=t&&(r=e,e=t,t=!1),tt(n,t,typeof e=="function"&&et(e,r,1))
44
- },Y.cloneDeep=function(n,t,e){return tt(n,!0,typeof t=="function"&&et(t,e,1))},Y.contains=kt,Y.escape=function(n){return null==n?"":oe(n).replace(Ve,ct)},Y.every=xt,Y.find=Ot,Y.findIndex=function(n,t,e){var r=-1,u=n?n.length:0;for(t=Y.createCallback(t,e,3);++r<u;)if(t(n[r],r,n))return r;return-1},Y.findKey=function(n,t,e){var r;return t=Y.createCallback(t,e,3),y(n,function(n,e,u){return t(n,e,u)?(r=e,!1):void 0}),r},Y.findLast=function(n,t,e){var r;return t=Y.createCallback(t,e,3),Nt(n,function(n,e,u){return t(n,e,u)?(r=n,!1):void 0
45
- }),r},Y.findLastIndex=function(n,t,e){var r=n?n.length:0;for(t=Y.createCallback(t,e,3);r--;)if(t(n[r],r,n))return r;return-1},Y.findLastKey=function(n,t,e){var r;return t=Y.createCallback(t,e,3),gt(n,function(n,e,u){return t(n,e,u)?(r=e,!1):void 0}),r},Y.has=function(n,t){return n?ye.call(n,t):!1},Y.identity=Gt,Y.indexOf=Wt,Y.isArguments=ht,Y.isArray=Pe,Y.isBoolean=function(n){return true===n||false===n||je.call(n)==F},Y.isDate=function(n){return n?typeof n=="object"&&je.call(n)==T:!1},Y.isElement=function(n){return n?1===n.nodeType:!1
46
- },Y.isEmpty=function(n){var t=!0;if(!n)return t;var e=je.call(n),r=n.length;return e==$||e==K||e==B||e==z&&typeof r=="number"&&_t(n.splice)?!r:(y(n,function(){return t=!1}),t)},Y.isEqual=function(n,t,e,r){return ut(n,t,typeof e=="function"&&et(e,r,2))},Y.isFinite=function(n){return Ne(n)&&!Ee(parseFloat(n))},Y.isFunction=_t,Y.isNaN=function(n){return dt(n)&&n!=+n},Y.isNull=function(n){return null===n},Y.isNumber=dt,Y.isObject=bt,Y.isPlainObject=g,Y.isRegExp=function(n){return n?typeof n=="object"&&je.call(n)==P:!1
47
- },Y.isString=wt,Y.isUndefined=function(n){return typeof n=="undefined"},Y.lastIndexOf=function(n,t,e){var r=n?n.length:0;for(typeof e=="number"&&(r=(0>e?Re(0,r+e):Ae(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},Y.mixin=Ht,Y.noConflict=function(){return e._=le,this},Y.parseInt=Qe,Y.random=Jt,Y.reduce=At,Y.reduceRight=Dt,Y.result=function(n,t){if(n){var e=n[t];return _t(e)?n[t]():e}},Y.runInContext=v,Y.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:Ke(n).length},Y.some=$t,Y.sortedIndex=zt,Y.template=function(n,t,e){var r=Y.templateSettings;
48
- n||(n=""),e=G({},e,r);var u,o=G({},e.imports,r.imports),r=Ke(o),o=jt(o),i=0,f=e.interpolate||S,l="__p+='",f=ue((e.escape||S).source+"|"+f.source+"|"+(f===N?C:S).source+"|"+(e.evaluate||S).source+"|$","g");n.replace(f,function(t,e,r,o,f,c){return r||(r=o),l+=n.slice(i,c).replace(A,a),e&&(l+="'+__e("+e+")+'"),f&&(u=!0,l+="';"+f+";__p+='"),r&&(l+="'+((__t=("+r+"))==null?'':__t)+'"),i=c+t.length,t}),l+="';\n",f=e=e.variable,f||(e="obj",l="with("+e+"){"+l+"}"),l=(u?l.replace(j,""):l).replace(k,"$1").replace(x,"$1;"),l="function("+e+"){"+(f?"":e+"||("+e+"={});")+"var __t,__p='',__e=_.escape"+(u?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+l+"return __p}";
49
- try{var c=ne(r,"return "+l).apply(h,o)}catch(p){throw p.source=l,p}return t?c(t):(c.source=l,c)},Y.unescape=function(n){return null==n?"":oe(n).replace(Ue,vt)},Y.uniqueId=function(n){var t=++m;return oe(null==n?"":n)+t},Y.all=xt,Y.any=$t,Y.detect=Ot,Y.findWhere=Ot,Y.foldl=At,Y.foldr=Dt,Y.include=kt,Y.inject=At,y(Y,function(n,t){Y.prototype[t]||(Y.prototype[t]=function(){var t=[this.__wrapped__],e=this.__chain__;return _e.apply(t,arguments),t=n.apply(Y,t),e?new nt(t,e):t})}),Y.first=Tt,Y.last=function(n,t,e){var r=0,u=n?n.length:0;
50
- if(typeof t!="number"&&null!=t){var o=u;for(t=Y.createCallback(t,e,3);o--&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n?n[u-1]:h;return s(n,Re(0,u-r))},Y.sample=function(n,t,e){var r=n?n.length:0;return typeof r!="number"&&(n=jt(n)),null==t||e?n?n[Jt(r-1)]:h:(n=Bt(n),n.length=Ae(Re(0,t),n.length),n)},Y.take=Tt,Y.head=Tt,y(Y,function(n,t){var e="sample"!==t;Y.prototype[t]||(Y.prototype[t]=function(t,r){var u=this.__chain__,o=n(this.__wrapped__,t,r);return u||null!=t&&(!r||e&&typeof t=="function")?new nt(o,u):o
51
- })}),Y.VERSION="2.2.1",Y.prototype.chain=function(){return this.__chain__=!0,this},Y.prototype.toString=function(){return oe(this.__wrapped__)},Y.prototype.value=Qt,Y.prototype.valueOf=Qt,It(["join","pop","shift"],function(n){var t=ie[n];Y.prototype[n]=function(){var n=this.__chain__,e=t.apply(this.__wrapped__,arguments);return n?new nt(e,n):e}}),It(["push","reverse","sort","unshift"],function(n){var t=ie[n];Y.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),It(["concat","slice","splice"],function(n){var t=ie[n];
52
- Y.prototype[n]=function(){return new nt(t.apply(this.__wrapped__,arguments),this.__chain__)}}),Y}var h,g=[],y=[],m=0,_=+new Date+"",b=75,d=40,w=" \t\x0B\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000",j=/\b__p\+='';/g,k=/\b(__p\+=)''\+/g,x=/(__e\(.*?\)|\b__t\))\+'';/g,C=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,O=/\w*$/,I=/^function[ \n\r\t]+\w/,N=/<%=([\s\S]+?)%>/g,E=RegExp("^["+w+"]*0+(?=.$)"),S=/($^)/,R=/\bthis\b/,A=/['\n\r\t\u2028\u2029\\]/g,D="Array Boolean Date Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setImmediate setTimeout".split(" "),B="[object Arguments]",$="[object Array]",F="[object Boolean]",T="[object Date]",W="[object Function]",q="[object Number]",z="[object Object]",P="[object RegExp]",K="[object String]",L={};
53
- L[W]=!1,L[B]=L[$]=L[F]=L[T]=L[q]=L[z]=L[P]=L[K]=!0;var M={leading:!1,maxWait:0,trailing:!1},U={configurable:!1,enumerable:!1,value:null,writable:!1},V={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},G={"\\":"\\","'":"'","\n":"n","\r":"r","\t":"t","\u2028":"u2028","\u2029":"u2029"},H=V[typeof window]&&window||this,J=V[typeof exports]&&exports&&!exports.nodeType&&exports,Q=V[typeof module]&&module&&!module.nodeType&&module,X=Q&&Q.exports===J&&J,Y=V[typeof global]&&global;!Y||Y.global!==Y&&Y.window!==Y||(H=Y);
54
- var Z=v();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(H._=Z, define(function(){return Z})):J&&Q?X?(Q.exports=Z)._=Z:J._=Z:H._=Z}).call(this);
6
+ ;(function(){function n(n,t,e){e=(e||0)-1;for(var r=n?n.length:0;++e<r;)if(n[e]===t)return e;return-1}function t(t,e){var r=typeof e;if(t=t.l,"boolean"==r||null==e)return t[e]?0:-1;"number"!=r&&"string"!=r&&(r="object");var u="number"==r?e:m+e;return t=(t=t[r])&&t[u],"object"==r?t&&-1<n(t,e)?0:-1:t?0:-1}function e(n){var t=this.l,e=typeof n;if("boolean"==e||null==n)t[n]=true;else{"number"!=e&&"string"!=e&&(e="object");var r="number"==e?n:m+n,t=t[e]||(t[e]={});"object"==e?(t[r]||(t[r]=[])).push(n):t[r]=true
7
+ }}function r(n){return n.charCodeAt(0)}function u(n,t){var e=n.m,r=t.m;if(e!==r){if(e>r||typeof e=="undefined")return 1;if(e<r||typeof r=="undefined")return-1}return n.n-t.n}function o(n){var t=-1,r=n.length,u=n[0],o=n[r/2|0],i=n[r-1];if(u&&typeof u=="object"&&o&&typeof o=="object"&&i&&typeof i=="object")return false;for(u=f(),u["false"]=u["null"]=u["true"]=u.undefined=false,o=f(),o.k=n,o.l=u,o.push=e;++t<r;)o.push(n[t]);return o}function i(n){return"\\"+V[n]}function a(){return h.pop()||[]}function f(){return g.pop()||{k:null,l:null,m:null,"false":false,n:0,"null":false,number:null,object:null,push:null,string:null,"true":false,undefined:false,o:null}
8
+ }function l(n){n.length=0,h.length<b&&h.push(n)}function c(n){var t=n.l;t&&c(t),n.k=n.l=n.m=n.object=n.number=n.string=n.o=null,g.length<b&&g.push(n)}function p(n,t,e){t||(t=0),typeof e=="undefined"&&(e=n?n.length:0);var r=-1;e=e-t||0;for(var u=Array(0>e?0:e);++r<e;)u[r]=n[t+r];return u}function s(e){function h(n){if(!n||ve.call(n)!=q)return false;var t=n.valueOf,e=typeof t=="function"&&(e=be(t))&&be(e);return e?n==e||be(n)==e:yt(n)}function g(n,t,e){if(!n||!U[typeof n])return n;t=t&&typeof e=="undefined"?t:ut(t,e,3);
9
+ for(var r=-1,u=U[typeof n]&&ze(n),o=u?u.length:0;++r<o&&(e=u[r],false!==t(n[e],e,n)););return n}function b(n,t,e){var r;if(!n||!U[typeof n])return n;t=t&&typeof e=="undefined"?t:ut(t,e,3);for(r in n)if(false===t(n[r],r,n))break;return n}function V(n,t,e){var r,u=n,o=u;if(!u)return o;for(var i=arguments,a=0,f=typeof e=="number"?2:i.length;++a<f;)if((u=i[a])&&U[typeof u])for(var l=-1,c=U[typeof u]&&ze(u),p=c?c.length:0;++l<p;)r=c[l],"undefined"==typeof o[r]&&(o[r]=u[r]);return o}function H(n,t,e){var r,u=n,o=u;
10
+ if(!u)return o;var i=arguments,a=0,f=typeof e=="number"?2:i.length;if(3<f&&"function"==typeof i[f-2])var l=ut(i[--f-1],i[f--],2);else 2<f&&"function"==typeof i[f-1]&&(l=i[--f]);for(;++a<f;)if((u=i[a])&&U[typeof u])for(var c=-1,p=U[typeof u]&&ze(u),s=p?p.length:0;++c<s;)r=p[c],o[r]=l?l(o[r],u[r]):u[r];return o}function J(n){var t,e=[];if(!n||!U[typeof n])return e;for(t in n)de.call(n,t)&&e.push(t);return e}function Z(n){return n&&typeof n=="object"&&!qe(n)&&de.call(n,"__wrapped__")?n:new nt(n)}function nt(n,t){this.__chain__=!!t,this.__wrapped__=n
11
+ }function tt(n){function t(){if(r){var n=r.slice();je.apply(n,arguments)}if(this instanceof t){var o=rt(e.prototype),n=e.apply(o,n||arguments);return kt(n)?n:o}return e.apply(u,n||arguments)}var e=n[0],r=n[2],u=n[4];return We(t,n),t}function et(n,t,e,r,u){if(e){var o=e(n);if(typeof o!="undefined")return o}if(!kt(n))return n;var i=ve.call(n);if(!K[i])return n;var f=Te[i];switch(i){case F:case T:return new f(+n);case W:case P:return new f(n);case z:return o=f(n.source,C.exec(n)),o.lastIndex=n.lastIndex,o
12
+ }if(i=qe(n),t){var c=!r;r||(r=a()),u||(u=a());for(var s=r.length;s--;)if(r[s]==n)return u[s];o=i?f(n.length):{}}else o=i?p(n):H({},n);return i&&(de.call(n,"index")&&(o.index=n.index),de.call(n,"input")&&(o.input=n.input)),t?(r.push(n),u.push(o),(i?Rt:g)(n,function(n,i){o[i]=et(n,t,e,r,u)}),c&&(l(r),l(u)),o):o}function rt(n){return kt(n)?Ie(n):{}}function ut(n,t,e){if(typeof n!="function")return Qt;if(typeof t=="undefined"||!("prototype"in n))return n;var r=n.__bindData__;if(typeof r=="undefined"&&(Be.funcNames&&(r=!n.name),r=r||!Be.funcDecomp,!r)){var u=_e.call(n);
13
+ Be.funcNames||(r=!O.test(u)),r||(r=E.test(u),We(n,r))}if(false===r||true!==r&&1&r[1])return n;switch(e){case 1:return function(e){return n.call(t,e)};case 2:return function(e,r){return n.call(t,e,r)};case 3:return function(e,r,u){return n.call(t,e,r,u)};case 4:return function(e,r,u,o){return n.call(t,e,r,u,o)}}return Gt(n,t)}function ot(n){function t(){var n=f?i:this;if(u){var h=u.slice();je.apply(h,arguments)}return(o||c)&&(h||(h=p(arguments)),o&&je.apply(h,o),c&&h.length<a)?(r|=16,ot([e,s?r:-4&r,h,null,i,a])):(h||(h=arguments),l&&(e=n[v]),this instanceof t?(n=rt(e.prototype),h=e.apply(n,h),kt(h)?h:n):e.apply(n,h))
14
+ }var e=n[0],r=n[1],u=n[2],o=n[3],i=n[4],a=n[5],f=1&r,l=2&r,c=4&r,s=8&r,v=e;return We(t,n),t}function it(e,r){var u=-1,i=gt(),a=e?e.length:0,f=a>=_&&i===n,l=[];if(f){var p=o(r);p?(i=t,r=p):f=false}for(;++u<a;)p=e[u],0>i(r,p)&&l.push(p);return f&&c(r),l}function at(n,t,e,r){r=(r||0)-1;for(var u=n?n.length:0,o=[];++r<u;){var i=n[r];if(i&&typeof i=="object"&&typeof i.length=="number"&&(qe(i)||_t(i))){t||(i=at(i,t,e));var a=-1,f=i.length,l=o.length;for(o.length+=f;++a<f;)o[l++]=i[a]}else e||o.push(i)}return o
15
+ }function ft(n,t,e,r,u,o){if(e){var i=e(n,t);if(typeof i!="undefined")return!!i}if(n===t)return 0!==n||1/n==1/t;if(n===n&&!(n&&U[typeof n]||t&&U[typeof t]))return false;if(null==n||null==t)return n===t;var f=ve.call(n),c=ve.call(t);if(f==D&&(f=q),c==D&&(c=q),f!=c)return false;switch(f){case F:case T:return+n==+t;case W:return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case z:case P:return n==fe(t)}if(c=f==$,!c){var p=de.call(n,"__wrapped__"),s=de.call(t,"__wrapped__");if(p||s)return ft(p?n.__wrapped__:n,s?t.__wrapped__:t,e,r,u,o);
16
+ if(f!=q)return false;if(f=n.constructor,p=t.constructor,f!=p&&!(jt(f)&&f instanceof f&&jt(p)&&p instanceof p)&&"constructor"in n&&"constructor"in t)return false}for(p=!u,u||(u=a()),o||(o=a()),f=u.length;f--;)if(u[f]==n)return o[f]==t;var v=0,i=true;if(u.push(n),o.push(t),c){if(f=n.length,v=t.length,i=v==n.length,!i&&!r)return i;for(;v--;)if(c=f,p=t[v],r)for(;c--&&!(i=ft(n[c],p,e,r,u,o)););else if(!(i=ft(n[v],p,e,r,u,o)))break;return i}return b(t,function(t,a,f){return de.call(f,a)?(v++,i=de.call(n,a)&&ft(n[a],t,e,r,u,o)):void 0
17
+ }),i&&!r&&b(n,function(n,t,e){return de.call(e,t)?i=-1<--v:void 0}),p&&(l(u),l(o)),i}function lt(n,t,e,r,u){(qe(t)?Rt:g)(t,function(t,o){var i,a,f=t,l=n[o];if(t&&((a=qe(t))||h(t))){for(f=r.length;f--;)if(i=r[f]==t){l=u[f];break}if(!i){var c;e&&(f=e(l,t),c=typeof f!="undefined")&&(l=f),c||(l=a?qe(l)?l:[]:h(l)?l:{}),r.push(t),u.push(l),c||lt(l,t,e,r,u)}}else e&&(f=e(l,t),typeof f=="undefined"&&(f=t)),typeof f!="undefined"&&(l=f);n[o]=l})}function ct(n,t){return n+me(Fe()*(t-n+1))}function pt(e,r,u){var i=-1,f=gt(),p=e?e.length:0,s=[],v=!r&&p>=_&&f===n,h=u||v?a():s;
18
+ if(v){var g=o(h);g?(f=t,h=g):(v=false,h=u?h:(l(h),s))}for(;++i<p;){var g=e[i],y=u?u(g,i,e):g;(r?!i||h[h.length-1]!==y:0>f(h,y))&&((u||v)&&h.push(y),s.push(g))}return v?(l(h.k),c(h)):u&&l(h),s}function st(n){return function(t,e,r){var u={};e=Z.createCallback(e,r,3),r=-1;var o=t?t.length:0;if(typeof o=="number")for(;++r<o;){var i=t[r];n(u,i,e(i,r,t),t)}else g(t,function(t,r,o){n(u,t,e(t,r,o),o)});return u}}function vt(n,t,e,r,u,o){var i=1&t,a=4&t,f=16&t,l=32&t;if(!(2&t||jt(n)))throw new le;f&&!e.length&&(t&=-17,f=e=false),l&&!r.length&&(t&=-33,l=r=false);
19
+ var c=n&&n.__bindData__;return c&&true!==c?(c=c.slice(),!i||1&c[1]||(c[4]=u),!i&&1&c[1]&&(t|=8),!a||4&c[1]||(c[5]=o),f&&je.apply(c[2]||(c[2]=[]),e),l&&je.apply(c[3]||(c[3]=[]),r),c[1]|=t,vt.apply(null,c)):(1==t||17===t?tt:ot)([n,t,e,r,u,o])}function ht(n){return Pe[n]}function gt(){var t=(t=Z.indexOf)===Pt?n:t;return t}function yt(n){var t,e;return n&&ve.call(n)==q&&(t=n.constructor,!jt(t)||t instanceof t)?(b(n,function(n,t){e=t}),typeof e=="undefined"||de.call(n,e)):false}function mt(n){return Ke[n]}function _t(n){return n&&typeof n=="object"&&typeof n.length=="number"&&ve.call(n)==D||false
20
+ }function bt(n,t,e){var r=ze(n),u=r.length;for(t=ut(t,e,3);u--&&(e=r[u],false!==t(n[e],e,n)););return n}function dt(n){var t=[];return b(n,function(n,e){jt(n)&&t.push(e)}),t.sort()}function wt(n){for(var t=-1,e=ze(n),r=e.length,u={};++t<r;){var o=e[t];u[n[o]]=o}return u}function jt(n){return typeof n=="function"}function kt(n){return!(!n||!U[typeof n])}function xt(n){return typeof n=="number"||n&&typeof n=="object"&&ve.call(n)==W||false}function Ct(n){return typeof n=="string"||n&&typeof n=="object"&&ve.call(n)==P||false
21
+ }function Ot(n){for(var t=-1,e=ze(n),r=e.length,u=ne(r);++t<r;)u[t]=n[e[t]];return u}function It(n,t,e){var r=-1,u=gt(),o=n?n.length:0,i=false;return e=(0>e?Ae(0,o+e):e)||0,qe(n)?i=-1<u(n,t,e):typeof o=="number"?i=-1<(Ct(n)?n.indexOf(t,e):u(n,t,e)):g(n,function(n){return++r<e?void 0:!(i=n===t)}),i}function Nt(n,t,e){var r=true;t=Z.createCallback(t,e,3),e=-1;var u=n?n.length:0;if(typeof u=="number")for(;++e<u&&(r=!!t(n[e],e,n)););else g(n,function(n,e,u){return r=!!t(n,e,u)});return r}function St(n,t,e){var r=[];
22
+ t=Z.createCallback(t,e,3),e=-1;var u=n?n.length:0;if(typeof u=="number")for(;++e<u;){var o=n[e];t(o,e,n)&&r.push(o)}else g(n,function(n,e,u){t(n,e,u)&&r.push(n)});return r}function Et(n,t,e){t=Z.createCallback(t,e,3),e=-1;var r=n?n.length:0;if(typeof r!="number"){var u;return g(n,function(n,e,r){return t(n,e,r)?(u=n,false):void 0}),u}for(;++e<r;){var o=n[e];if(t(o,e,n))return o}}function Rt(n,t,e){var r=-1,u=n?n.length:0;if(t=t&&typeof e=="undefined"?t:ut(t,e,3),typeof u=="number")for(;++r<u&&false!==t(n[r],r,n););else g(n,t);
23
+ return n}function At(n,t,e){var r=n?n.length:0;if(t=t&&typeof e=="undefined"?t:ut(t,e,3),typeof r=="number")for(;r--&&false!==t(n[r],r,n););else{var u=ze(n),r=u.length;g(n,function(n,e,o){return e=u?u[--r]:--r,t(o[e],e,o)})}return n}function Dt(n,t,e){var r=-1,u=n?n.length:0;if(t=Z.createCallback(t,e,3),typeof u=="number")for(var o=ne(u);++r<u;)o[r]=t(n[r],r,n);else o=[],g(n,function(n,e,u){o[++r]=t(n,e,u)});return o}function $t(n,t,e){var u=-1/0,o=u;if(typeof t!="function"&&e&&e[t]===n&&(t=null),null==t&&qe(n)){e=-1;
24
+ for(var i=n.length;++e<i;){var a=n[e];a>o&&(o=a)}}else t=null==t&&Ct(n)?r:Z.createCallback(t,e,3),Rt(n,function(n,e,r){e=t(n,e,r),e>u&&(u=e,o=n)});return o}function Ft(n,t){var e=-1,r=n?n.length:0;if(typeof r=="number")for(var u=ne(r);++e<r;)u[e]=n[e][t];return u||Dt(n,t)}function Tt(n,t,e,r){if(!n)return e;var u=3>arguments.length;t=Z.createCallback(t,r,4);var o=-1,i=n.length;if(typeof i=="number")for(u&&(e=n[++o]);++o<i;)e=t(e,n[o],o,n);else g(n,function(n,r,o){e=u?(u=false,n):t(e,n,r,o)});return e
25
+ }function Bt(n,t,e,r){var u=3>arguments.length;return t=Z.createCallback(t,r,4),At(n,function(n,r,o){e=u?(u=false,n):t(e,n,r,o)}),e}function Wt(n){var t=-1,e=n?n.length:0,r=ne(typeof e=="number"?e:0);return Rt(n,function(n){var e=ct(0,++t);r[t]=r[e],r[e]=n}),r}function qt(n,t,e){var r;t=Z.createCallback(t,e,3),e=-1;var u=n?n.length:0;if(typeof u=="number")for(;++e<u&&!(r=t(n[e],e,n)););else g(n,function(n,e,u){return!(r=t(n,e,u))});return!!r}function zt(n,t,e){var r=0,u=n?n.length:0;if(typeof t!="number"&&null!=t){var o=-1;
26
+ for(t=Z.createCallback(t,e,3);++o<u&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n?n[0]:v;return p(n,0,De(Ae(0,r),u))}function Pt(t,e,r){if(typeof r=="number"){var u=t?t.length:0;r=0>r?Ae(0,u+r):r||0}else if(r)return r=Lt(t,e),t[r]===e?r:-1;return n(t,e,r)}function Kt(n,t,e){if(typeof t!="number"&&null!=t){var r=0,u=-1,o=n?n.length:0;for(t=Z.createCallback(t,e,3);++u<o&&t(n[u],u,n);)r++}else r=null==t||e?1:Ae(0,t);return p(n,r)}function Lt(n,t,e,r){var u=0,o=n?n.length:u;for(e=e?Z.createCallback(e,r,1):Qt,t=e(t);u<o;)r=u+o>>>1,e(n[r])<t?u=r+1:o=r;
27
+ return u}function Mt(n,t,e,r){return typeof t!="boolean"&&null!=t&&(r=e,e=typeof t!="function"&&r&&r[t]===n?null:t,t=false),null!=e&&(e=Z.createCallback(e,r,3)),pt(n,t,e)}function Ut(){for(var n=1<arguments.length?arguments:arguments[0],t=-1,e=n?$t(Ft(n,"length")):0,r=ne(0>e?0:e);++t<e;)r[t]=Ft(n,t);return r}function Vt(n,t){for(var e=-1,r=n?n.length:0,u={};++e<r;){var o=n[e];t?u[o]=t[e]:o&&(u[o[0]]=o[1])}return u}function Gt(n,t){return 2<arguments.length?vt(n,17,p(arguments,2),null,t):vt(n,1,null,null,t)
28
+ }function Ht(n,t,e){function r(){c&&ye(c),i=c=p=v,(g||h!==t)&&(s=we(),a=n.apply(l,o),c||i||(o=l=null))}function u(){var e=t-(we()-f);0<e?c=ke(u,e):(i&&ye(i),e=p,i=c=p=v,e&&(s=we(),a=n.apply(l,o),c||i||(o=l=null)))}var o,i,a,f,l,c,p,s=0,h=false,g=true;if(!jt(n))throw new le;if(t=Ae(0,t)||0,true===e)var y=true,g=false;else kt(e)&&(y=e.leading,h="maxWait"in e&&(Ae(t,e.maxWait)||0),g="trailing"in e?e.trailing:g);return function(){if(o=arguments,f=we(),l=this,p=g&&(c||!y),false===h)var e=y&&!c;else{i||y||(s=f);var v=h-(f-s),m=0>=v;
29
+ m?(i&&(i=ye(i)),s=f,a=n.apply(l,o)):i||(i=ke(r,v))}return m&&c?c=ye(c):c||t===h||(c=ke(u,t)),e&&(m=true,a=n.apply(l,o)),!m||c||i||(o=l=null),a}}function Jt(n){if(!jt(n))throw new le;var t=p(arguments,1);return ke(function(){n.apply(v,t)},1)}function Qt(n){return n}function Xt(n,t){var e=n,r=!t||jt(e);t||(e=nt,t=n,n=Z),Rt(dt(t),function(u){var o=n[u]=t[u];r&&(e.prototype[u]=function(){var t=this.__wrapped__,r=[t];return je.apply(r,arguments),r=o.apply(n,r),t&&typeof t=="object"&&t===r?this:(r=new e(r),r.__chain__=this.__chain__,r)
30
+ })})}function Yt(){}function Zt(){return this.__wrapped__}e=e?Y.defaults(G.Object(),e,Y.pick(G,A)):G;var ne=e.Array,te=e.Boolean,ee=e.Date,re=e.Function,ue=e.Math,oe=e.Number,ie=e.Object,ae=e.RegExp,fe=e.String,le=e.TypeError,ce=[],pe=ie.prototype,se=e._,ve=pe.toString,he=ae("^"+fe(ve).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/toString| for [^\]]+/g,".*?")+"$"),ge=ue.ceil,ye=e.clearTimeout,me=ue.floor,_e=re.prototype.toString,be=he.test(be=ie.getPrototypeOf)&&be,de=pe.hasOwnProperty,we=he.test(we=ee.now)&&we||function(){return+new ee
31
+ },je=ce.push,ke=e.setTimeout,xe=ce.splice,Ce=typeof(Ce=X&&Q&&X.setImmediate)=="function"&&!he.test(Ce)&&Ce,Oe=function(){try{var n={},t=he.test(t=ie.defineProperty)&&t,e=t(n,n,n)&&t}catch(r){}return e}(),Ie=he.test(Ie=ie.create)&&Ie,Ne=he.test(Ne=ne.isArray)&&Ne,Se=e.isFinite,Ee=e.isNaN,Re=he.test(Re=ie.keys)&&Re,Ae=ue.max,De=ue.min,$e=e.parseInt,Fe=ue.random,Te={};Te[$]=ne,Te[F]=te,Te[T]=ee,Te[B]=re,Te[q]=ie,Te[W]=oe,Te[z]=ae,Te[P]=fe,nt.prototype=Z.prototype;var Be=Z.support={};Be.funcDecomp=!he.test(e.a)&&E.test(s),Be.funcNames=typeof re.name=="string",Z.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:I,variable:"",imports:{_:Z}},Ie||(rt=function(){function n(){}return function(t){if(kt(t)){n.prototype=t;
32
+ var r=new n;n.prototype=null}return r||e.Object()}}());var We=Oe?function(n,t){M.value=t,Oe(n,"__bindData__",M)}:Yt,qe=Ne||function(n){return n&&typeof n=="object"&&typeof n.length=="number"&&ve.call(n)==$||false},ze=Re?function(n){return kt(n)?Re(n):[]}:J,Pe={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},Ke=wt(Pe),Le=ae("("+ze(Ke).join("|")+")","g"),Me=ae("["+ze(Pe).join("")+"]","g"),Ue=st(function(n,t,e){de.call(n,e)?n[e]++:n[e]=1}),Ve=st(function(n,t,e){(de.call(n,e)?n[e]:n[e]=[]).push(t)
33
+ }),Ge=st(function(n,t,e){n[e]=t});Ce&&(Jt=function(n){if(!jt(n))throw new le;return Ce.apply(e,arguments)});var He=8==$e(d+"08")?$e:function(n,t){return $e(Ct(n)?n.replace(N,""):n,t||0)};return Z.after=function(n,t){if(!jt(t))throw new le;return function(){return 1>--n?t.apply(this,arguments):void 0}},Z.assign=H,Z.at=function(n){for(var t=arguments,e=-1,r=at(t,true,false,1),t=t[2]&&t[2][t[1]]===n?1:r.length,u=ne(t);++e<t;)u[e]=n[r[e]];return u},Z.bind=Gt,Z.bindAll=function(n){for(var t=1<arguments.length?at(arguments,true,false,1):dt(n),e=-1,r=t.length;++e<r;){var u=t[e];
34
+ n[u]=vt(n[u],1,null,null,n)}return n},Z.bindKey=function(n,t){return 2<arguments.length?vt(t,19,p(arguments,2),null,n):vt(t,3,null,null,n)},Z.chain=function(n){return n=new nt(n),n.__chain__=true,n},Z.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},Z.compose=function(){for(var n=arguments,t=n.length;t--;)if(!jt(n[t]))throw new le;return function(){for(var t=arguments,e=n.length;e--;)t=[n[e].apply(this,t)];return t[0]}},Z.countBy=Ue,Z.create=function(n,t){var e=rt(n);
35
+ return t?H(e,t):e},Z.createCallback=function(n,t,e){var r=typeof n;if(null==n||"function"==r)return ut(n,t,e);if("object"!=r)return function(t){return t[n]};var u=ze(n),o=u[0],i=n[o];return 1!=u.length||i!==i||kt(i)?function(t){for(var e=u.length,r=false;e--&&(r=ft(t[u[e]],n[u[e]],null,true)););return r}:function(n){return n=n[o],i===n&&(0!==i||1/i==1/n)}},Z.curry=function(n,t){return t=typeof t=="number"?t:+t||n.length,vt(n,4,null,null,null,t)},Z.debounce=Ht,Z.defaults=V,Z.defer=Jt,Z.delay=function(n,t){if(!jt(n))throw new le;
36
+ var e=p(arguments,2);return ke(function(){n.apply(v,e)},t)},Z.difference=function(n){return it(n,at(arguments,true,true,1))},Z.filter=St,Z.flatten=function(n,t,e,r){return typeof t!="boolean"&&null!=t&&(r=e,e=typeof t!="function"&&r&&r[t]===n?null:t,t=false),null!=e&&(n=Dt(n,e,r)),at(n,t)},Z.forEach=Rt,Z.forEachRight=At,Z.forIn=b,Z.forInRight=function(n,t,e){var r=[];b(n,function(n,t){r.push(t,n)});var u=r.length;for(t=ut(t,e,3);u--&&false!==t(r[u--],r[u],n););return n},Z.forOwn=g,Z.forOwnRight=bt,Z.functions=dt,Z.groupBy=Ve,Z.indexBy=Ge,Z.initial=function(n,t,e){var r=0,u=n?n.length:0;
37
+ if(typeof t!="number"&&null!=t){var o=u;for(t=Z.createCallback(t,e,3);o--&&t(n[o],o,n);)r++}else r=null==t||e?1:t||r;return p(n,0,De(Ae(0,u-r),u))},Z.intersection=function(e){for(var r=arguments,u=r.length,i=-1,f=a(),p=-1,s=gt(),v=e?e.length:0,h=[],g=a();++i<u;){var y=r[i];f[i]=s===n&&(y?y.length:0)>=_&&o(i?r[i]:g)}n:for(;++p<v;){var m=f[0],y=e[p];if(0>(m?t(m,y):s(g,y))){for(i=u,(m||g).push(y);--i;)if(m=f[i],0>(m?t(m,y):s(r[i],y)))continue n;h.push(y)}}for(;u--;)(m=f[u])&&c(m);return l(f),l(g),h},Z.invert=wt,Z.invoke=function(n,t){var e=p(arguments,2),r=-1,u=typeof t=="function",o=n?n.length:0,i=ne(typeof o=="number"?o:0);
38
+ return Rt(n,function(n){i[++r]=(u?t:n[t]).apply(n,e)}),i},Z.keys=ze,Z.map=Dt,Z.max=$t,Z.memoize=function(n,t){function e(){var r=e.cache,u=t?t.apply(this,arguments):m+arguments[0];return de.call(r,u)?r[u]:r[u]=n.apply(this,arguments)}if(!jt(n))throw new le;return e.cache={},e},Z.merge=function(n){var t=arguments,e=2;if(!kt(n))return n;if("number"!=typeof t[2]&&(e=t.length),3<e&&"function"==typeof t[e-2])var r=ut(t[--e-1],t[e--],2);else 2<e&&"function"==typeof t[e-1]&&(r=t[--e]);for(var t=p(arguments,1,e),u=-1,o=a(),i=a();++u<e;)lt(n,t[u],r,o,i);
39
+ return l(o),l(i),n},Z.min=function(n,t,e){var u=1/0,o=u;if(typeof t!="function"&&e&&e[t]===n&&(t=null),null==t&&qe(n)){e=-1;for(var i=n.length;++e<i;){var a=n[e];a<o&&(o=a)}}else t=null==t&&Ct(n)?r:Z.createCallback(t,e,3),Rt(n,function(n,e,r){e=t(n,e,r),e<u&&(u=e,o=n)});return o},Z.omit=function(n,t,e){var r={};if(typeof t!="function"){var u=[];b(n,function(n,t){u.push(t)});for(var u=it(u,at(arguments,true,false,1)),o=-1,i=u.length;++o<i;){var a=u[o];r[a]=n[a]}}else t=Z.createCallback(t,e,3),b(n,function(n,e,u){t(n,e,u)||(r[e]=n)
40
+ });return r},Z.once=function(n){var t,e;if(!jt(n))throw new le;return function(){return t?e:(t=true,e=n.apply(this,arguments),n=null,e)}},Z.pairs=function(n){for(var t=-1,e=ze(n),r=e.length,u=ne(r);++t<r;){var o=e[t];u[t]=[o,n[o]]}return u},Z.partial=function(n){return vt(n,16,p(arguments,1))},Z.partialRight=function(n){return vt(n,32,null,p(arguments,1))},Z.pick=function(n,t,e){var r={};if(typeof t!="function")for(var u=-1,o=at(arguments,true,false,1),i=kt(n)?o.length:0;++u<i;){var a=o[u];a in n&&(r[a]=n[a])
41
+ }else t=Z.createCallback(t,e,3),b(n,function(n,e,u){t(n,e,u)&&(r[e]=n)});return r},Z.pluck=Ft,Z.pull=function(n){for(var t=arguments,e=0,r=t.length,u=n?n.length:0;++e<r;)for(var o=-1,i=t[e];++o<u;)n[o]===i&&(xe.call(n,o--,1),u--);return n},Z.range=function(n,t,e){n=+n||0,e=typeof e=="number"?e:+e||1,null==t&&(t=n,n=0);var r=-1;t=Ae(0,ge((t-n)/(e||1)));for(var u=ne(t);++r<t;)u[r]=n,n+=e;return u},Z.reject=function(n,t,e){return t=Z.createCallback(t,e,3),St(n,function(n,e,r){return!t(n,e,r)})},Z.remove=function(n,t,e){var r=-1,u=n?n.length:0,o=[];
42
+ for(t=Z.createCallback(t,e,3);++r<u;)e=n[r],t(e,r,n)&&(o.push(e),xe.call(n,r--,1),u--);return o},Z.rest=Kt,Z.shuffle=Wt,Z.sortBy=function(n,t,e){var r=-1,o=n?n.length:0,i=ne(typeof o=="number"?o:0);for(t=Z.createCallback(t,e,3),Rt(n,function(n,e,u){var o=i[++r]=f();o.m=t(n,e,u),o.n=r,o.o=n}),o=i.length,i.sort(u);o--;)n=i[o],i[o]=n.o,c(n);return i},Z.tap=function(n,t){return t(n),n},Z.throttle=function(n,t,e){var r=true,u=true;if(!jt(n))throw new le;return false===e?r=false:kt(e)&&(r="leading"in e?e.leading:r,u="trailing"in e?e.trailing:u),L.leading=r,L.maxWait=t,L.trailing=u,Ht(n,t,L)
43
+ },Z.times=function(n,t,e){n=-1<(n=+n)?n:0;var r=-1,u=ne(n);for(t=ut(t,e,1);++r<n;)u[r]=t(r);return u},Z.toArray=function(n){return n&&typeof n.length=="number"?p(n):Ot(n)},Z.transform=function(n,t,e,r){var u=qe(n);if(null==e)if(u)e=[];else{var o=n&&n.constructor;e=rt(o&&o.prototype)}return t&&(t=Z.createCallback(t,r,4),(u?Rt:g)(n,function(n,r,u){return t(e,n,r,u)})),e},Z.union=function(){return pt(at(arguments,true,true))},Z.uniq=Mt,Z.values=Ot,Z.where=St,Z.without=function(n){return it(n,p(arguments,1))
44
+ },Z.wrap=function(n,t){return vt(t,16,[n])},Z.zip=Ut,Z.zipObject=Vt,Z.collect=Dt,Z.drop=Kt,Z.each=Rt,Z.eachRight=At,Z.extend=H,Z.methods=dt,Z.object=Vt,Z.select=St,Z.tail=Kt,Z.unique=Mt,Z.unzip=Ut,Xt(Z),Z.clone=function(n,t,e,r){return typeof t!="boolean"&&null!=t&&(r=e,e=t,t=false),et(n,t,typeof e=="function"&&ut(e,r,1))},Z.cloneDeep=function(n,t,e){return et(n,true,typeof t=="function"&&ut(t,e,1))},Z.contains=It,Z.escape=function(n){return null==n?"":fe(n).replace(Me,ht)},Z.every=Nt,Z.find=Et,Z.findIndex=function(n,t,e){var r=-1,u=n?n.length:0;
45
+ for(t=Z.createCallback(t,e,3);++r<u;)if(t(n[r],r,n))return r;return-1},Z.findKey=function(n,t,e){var r;return t=Z.createCallback(t,e,3),g(n,function(n,e,u){return t(n,e,u)?(r=e,false):void 0}),r},Z.findLast=function(n,t,e){var r;return t=Z.createCallback(t,e,3),At(n,function(n,e,u){return t(n,e,u)?(r=n,false):void 0}),r},Z.findLastIndex=function(n,t,e){var r=n?n.length:0;for(t=Z.createCallback(t,e,3);r--;)if(t(n[r],r,n))return r;return-1},Z.findLastKey=function(n,t,e){var r;return t=Z.createCallback(t,e,3),bt(n,function(n,e,u){return t(n,e,u)?(r=e,false):void 0
46
+ }),r},Z.has=function(n,t){return n?de.call(n,t):false},Z.identity=Qt,Z.indexOf=Pt,Z.isArguments=_t,Z.isArray=qe,Z.isBoolean=function(n){return true===n||false===n||n&&typeof n=="object"&&ve.call(n)==F||false},Z.isDate=function(n){return n&&typeof n=="object"&&ve.call(n)==T||false},Z.isElement=function(n){return n&&1===n.nodeType||false},Z.isEmpty=function(n){var t=true;if(!n)return t;var e=ve.call(n),r=n.length;return e==$||e==P||e==D||e==q&&typeof r=="number"&&jt(n.splice)?!r:(g(n,function(){return t=false}),t)},Z.isEqual=function(n,t,e,r){return ft(n,t,typeof e=="function"&&ut(e,r,2))
47
+ },Z.isFinite=function(n){return Se(n)&&!Ee(parseFloat(n))},Z.isFunction=jt,Z.isNaN=function(n){return xt(n)&&n!=+n},Z.isNull=function(n){return null===n},Z.isNumber=xt,Z.isObject=kt,Z.isPlainObject=h,Z.isRegExp=function(n){return n&&typeof n=="object"&&ve.call(n)==z||false},Z.isString=Ct,Z.isUndefined=function(n){return typeof n=="undefined"},Z.lastIndexOf=function(n,t,e){var r=n?n.length:0;for(typeof e=="number"&&(r=(0>e?Ae(0,r+e):De(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},Z.mixin=Xt,Z.noConflict=function(){return e._=se,this
48
+ },Z.noop=Yt,Z.parseInt=He,Z.random=function(n,t,e){var r=null==n,u=null==t;return null==e&&(typeof n=="boolean"&&u?(e=n,n=1):u||typeof t!="boolean"||(e=t,u=true)),r&&u&&(t=1),n=+n||0,u?(t=n,n=0):t=+t||0,e||n%1||t%1?(e=Fe(),De(n+e*(t-n+parseFloat("1e-"+((e+"").length-1))),t)):ct(n,t)},Z.reduce=Tt,Z.reduceRight=Bt,Z.result=function(n,t){if(n){var e=n[t];return jt(e)?n[t]():e}},Z.runInContext=s,Z.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:ze(n).length},Z.some=qt,Z.sortedIndex=Lt,Z.template=function(n,t,e){var r=Z.templateSettings;
49
+ n=fe(n||""),e=V({},e,r);var u,o=V({},e.imports,r.imports),r=ze(o),o=Ot(o),a=0,f=e.interpolate||S,l="__p+='",f=ae((e.escape||S).source+"|"+f.source+"|"+(f===I?x:S).source+"|"+(e.evaluate||S).source+"|$","g");n.replace(f,function(t,e,r,o,f,c){return r||(r=o),l+=n.slice(a,c).replace(R,i),e&&(l+="'+__e("+e+")+'"),f&&(u=true,l+="';"+f+";\n__p+='"),r&&(l+="'+((__t=("+r+"))==null?'':__t)+'"),a=c+t.length,t}),l+="';",f=e=e.variable,f||(e="obj",l="with("+e+"){"+l+"}"),l=(u?l.replace(w,""):l).replace(j,"$1").replace(k,"$1;"),l="function("+e+"){"+(f?"":e+"||("+e+"={});")+"var __t,__p='',__e=_.escape"+(u?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+l+"return __p}";
50
+ try{var c=re(r,"return "+l).apply(v,o)}catch(p){throw p.source=l,p}return t?c(t):(c.source=l,c)},Z.unescape=function(n){return null==n?"":fe(n).replace(Le,mt)},Z.uniqueId=function(n){var t=++y;return fe(null==n?"":n)+t},Z.all=Nt,Z.any=qt,Z.detect=Et,Z.findWhere=Et,Z.foldl=Tt,Z.foldr=Bt,Z.include=It,Z.inject=Tt,g(Z,function(n,t){Z.prototype[t]||(Z.prototype[t]=function(){var t=[this.__wrapped__],e=this.__chain__;return je.apply(t,arguments),t=n.apply(Z,t),e?new nt(t,e):t})}),Z.first=zt,Z.last=function(n,t,e){var r=0,u=n?n.length:0;
51
+ if(typeof t!="number"&&null!=t){var o=u;for(t=Z.createCallback(t,e,3);o--&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n?n[u-1]:v;return p(n,Ae(0,u-r))},Z.sample=function(n,t,e){return n&&typeof n.length!="number"&&(n=Ot(n)),null==t||e?n?n[ct(0,n.length-1)]:v:(n=Wt(n),n.length=De(Ae(0,t),n.length),n)},Z.take=zt,Z.head=zt,g(Z,function(n,t){var e="sample"!==t;Z.prototype[t]||(Z.prototype[t]=function(t,r){var u=this.__chain__,o=n(this.__wrapped__,t,r);return u||null!=t&&(!r||e&&typeof t=="function")?new nt(o,u):o
52
+ })}),Z.VERSION="2.3.0",Z.prototype.chain=function(){return this.__chain__=true,this},Z.prototype.toString=function(){return fe(this.__wrapped__)},Z.prototype.value=Zt,Z.prototype.valueOf=Zt,Rt(["join","pop","shift"],function(n){var t=ce[n];Z.prototype[n]=function(){var n=this.__chain__,e=t.apply(this.__wrapped__,arguments);return n?new nt(e,n):e}}),Rt(["push","reverse","sort","unshift"],function(n){var t=ce[n];Z.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),Rt(["concat","slice","splice"],function(n){var t=ce[n];
53
+ Z.prototype[n]=function(){return new nt(t.apply(this.__wrapped__,arguments),this.__chain__)}}),Z}var v,h=[],g=[],y=0,m=+new Date+"",_=75,b=40,d=" \t\x0B\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000",w=/\b__p\+='';/g,j=/\b(__p\+=)''\+/g,k=/(__e\(.*?\)|\b__t\))\+'';/g,x=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,C=/\w*$/,O=/^\s*function[ \n\r\t]+\w/,I=/<%=([\s\S]+?)%>/g,N=RegExp("^["+d+"]*0+(?=.$)"),S=/($^)/,E=/\bthis\b/,R=/['\n\r\t\u2028\u2029\\]/g,A="Array Boolean Date Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setImmediate setTimeout".split(" "),D="[object Arguments]",$="[object Array]",F="[object Boolean]",T="[object Date]",B="[object Function]",W="[object Number]",q="[object Object]",z="[object RegExp]",P="[object String]",K={};
54
+ K[B]=false,K[D]=K[$]=K[F]=K[T]=K[W]=K[q]=K[z]=K[P]=true;var L={leading:false,maxWait:0,trailing:false},M={configurable:false,enumerable:false,value:null,writable:false},U={"boolean":false,"function":true,object:true,number:false,string:false,undefined:false},V={"\\":"\\","'":"'","\n":"n","\r":"r","\t":"t","\u2028":"u2028","\u2029":"u2029"},G=U[typeof window]&&window||this,H=U[typeof exports]&&exports&&!exports.nodeType&&exports,J=U[typeof module]&&module&&!module.nodeType&&module,Q=J&&J.exports===H&&H,X=U[typeof global]&&global;!X||X.global!==X&&X.window!==X||(G=X);
55
+ var Y=s();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(G._=Y, define(function(){return Y})):H&&J?Q?(J.exports=Y)._=Y:H._=Y:G._=Y}).call(this);
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Lo-Dash 2.2.1 (Custom Build) <http://lodash.com/>
3
+ * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>
4
4
  * Build: `lodash underscore exports="amd,commonjs,global,node" -o ./dist/lodash.underscore.js`
5
5
  * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
6
6
  * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
@@ -147,12 +147,31 @@
147
147
  }
148
148
 
149
149
  /**
150
- * A no-operation function.
150
+ * Slices the `collection` from the `start` index up to, but not including,
151
+ * the `end` index.
152
+ *
153
+ * Note: This function is used instead of `Array#slice` to support node lists
154
+ * in IE < 9 and to ensure dense arrays are returned.
151
155
  *
152
156
  * @private
157
+ * @param {Array|Object|string} collection The collection to slice.
158
+ * @param {number} start The start index.
159
+ * @param {number} end The end index.
160
+ * @returns {Array} Returns the new array.
153
161
  */
154
- function noop() {
155
- // no operation performed
162
+ function slice(array, start, end) {
163
+ start || (start = 0);
164
+ if (typeof end == 'undefined') {
165
+ end = array ? array.length : 0;
166
+ }
167
+ var index = -1,
168
+ length = end - start || 0,
169
+ result = Array(length < 0 ? 0 : length);
170
+
171
+ while (++index < length) {
172
+ result[index] = array[start + index];
173
+ }
174
+ return result;
156
175
  }
157
176
 
158
177
  /*--------------------------------------------------------------------------*/
@@ -171,11 +190,14 @@
171
190
  /** Used to restore the original `_` reference in `noConflict` */
172
191
  var oldDash = root._;
173
192
 
193
+ /** Used to resolve the internal [[Class]] of values */
194
+ var toString = objectProto.toString;
195
+
174
196
  /** Used to detect if a method is native */
175
197
  var reNative = RegExp('^' +
176
- String(objectProto.valueOf)
198
+ String(toString)
177
199
  .replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
178
- .replace(/valueOf|for [^\]]+/g, '.+?') + '$'
200
+ .replace(/toString| for [^\]]+/g, '.*?') + '$'
179
201
  );
180
202
 
181
203
  /** Native method shortcuts */
@@ -184,24 +206,17 @@
184
206
  hasOwnProperty = objectProto.hasOwnProperty,
185
207
  now = reNative.test(now = Date.now) && now || function() { return +new Date; },
186
208
  push = arrayRef.push,
187
- toString = objectProto.toString,
188
- unshift = arrayRef.unshift;
209
+ propertyIsEnumerable = objectProto.propertyIsEnumerable;
189
210
 
190
211
  /* Native method shortcuts for methods with the same name as other `lodash` methods */
191
- var nativeBind = reNative.test(nativeBind = toString.bind) && nativeBind,
192
- nativeCreate = reNative.test(nativeCreate = Object.create) && nativeCreate,
212
+ var nativeCreate = reNative.test(nativeCreate = Object.create) && nativeCreate,
193
213
  nativeIsArray = reNative.test(nativeIsArray = Array.isArray) && nativeIsArray,
194
214
  nativeIsFinite = root.isFinite,
195
215
  nativeIsNaN = root.isNaN,
196
216
  nativeKeys = reNative.test(nativeKeys = Object.keys) && nativeKeys,
197
217
  nativeMax = Math.max,
198
218
  nativeMin = Math.min,
199
- nativeRandom = Math.random,
200
- nativeSlice = arrayRef.slice;
201
-
202
- /** Detect various environments */
203
- var isIeOpera = reNative.test(root.attachEvent),
204
- isV8 = nativeBind && !/\n|true/.test(nativeBind + isIeOpera);
219
+ nativeRandom = Math.random;
205
220
 
206
221
  /*--------------------------------------------------------------------------*/
207
222
 
@@ -218,15 +233,16 @@
218
233
  *
219
234
  * The chainable wrapper functions are:
220
235
  * `after`, `assign`, `bind`, `bindAll`, `bindKey`, `chain`, `compact`,
221
- * `compose`, `concat`, `countBy`, `createCallback`, `curry`, `debounce`,
222
- * `defaults`, `defer`, `delay`, `difference`, `filter`, `flatten`, `forEach`,
223
- * `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `functions`,
224
- * `groupBy`, `indexBy`, `initial`, `intersection`, `invert`, `invoke`, `keys`,
225
- * `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`, `once`, `pairs`,
226
- * `partial`, `partialRight`, `pick`, `pluck`, `pull`, `push`, `range`, `reject`,
227
- * `remove`, `rest`, `reverse`, `shuffle`, `slice`, `sort`, `sortBy`, `splice`,
228
- * `tap`, `throttle`, `times`, `toArray`, `transform`, `union`, `uniq`, `unshift`,
229
- * `unzip`, `values`, `where`, `without`, `wrap`, and `zip`
236
+ * `compose`, `concat`, `countBy`, `create`, `createCallback`, `curry`,
237
+ * `debounce`, `defaults`, `defer`, `delay`, `difference`, `filter`, `flatten`,
238
+ * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,
239
+ * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,
240
+ * `invoke`, `keys`, `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`,
241
+ * `once`, `pairs`, `partial`, `partialRight`, `pick`, `pluck`, `pull`, `push`,
242
+ * `range`, `reject`, `remove`, `rest`, `reverse`, `shuffle`, `slice`, `sort`,
243
+ * `sortBy`, `splice`, `tap`, `throttle`, `times`, `toArray`, `transform`,
244
+ * `union`, `uniq`, `unshift`, `unzip`, `values`, `where`, `without`, `wrap`,
245
+ * and `zip`
230
246
  *
231
247
  * The non-chainable wrapper functions are:
232
248
  * `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `findIndex`,
@@ -302,14 +318,6 @@
302
318
  (function() {
303
319
  var object = { '0': 1, 'length': 1 };
304
320
 
305
- /**
306
- * Detect if `Function#bind` exists and is inferred to be fast (all but V8).
307
- *
308
- * @memberOf _.support
309
- * @type boolean
310
- */
311
- support.fastBind = nativeBind && !isV8;
312
-
313
321
  /**
314
322
  * Detect if `Array#shift` and `Array#splice` augment array-like objects correctly.
315
323
  *
@@ -371,6 +379,65 @@
371
379
 
372
380
  /*--------------------------------------------------------------------------*/
373
381
 
382
+ /**
383
+ * The base implementation of `_.bind` that creates the bound function and
384
+ * sets its meta data.
385
+ *
386
+ * @private
387
+ * @param {Array} bindData The bind data array.
388
+ * @returns {Function} Returns the new bound function.
389
+ */
390
+ function baseBind(bindData) {
391
+ var func = bindData[0],
392
+ partialArgs = bindData[2],
393
+ thisArg = bindData[4];
394
+
395
+ function bound() {
396
+ // `Function#bind` spec
397
+ // http://es5.github.io/#x15.3.4.5
398
+ if (partialArgs) {
399
+ var args = partialArgs.slice();
400
+ push.apply(args, arguments);
401
+ }
402
+ // mimic the constructor's `return` behavior
403
+ // http://es5.github.io/#x13.2.2
404
+ if (this instanceof bound) {
405
+ // ensure `new bound` is an instance of `func`
406
+ var thisBinding = baseCreate(func.prototype),
407
+ result = func.apply(thisBinding, args || arguments);
408
+ return isObject(result) ? result : thisBinding;
409
+ }
410
+ return func.apply(thisArg, args || arguments);
411
+ }
412
+ return bound;
413
+ }
414
+
415
+ /**
416
+ * The base implementation of `_.create` without support for assigning
417
+ * properties to the created object.
418
+ *
419
+ * @private
420
+ * @param {Object} prototype The object to inherit from.
421
+ * @returns {Object} Returns the new object.
422
+ */
423
+ function baseCreate(prototype, properties) {
424
+ return isObject(prototype) ? nativeCreate(prototype) : {};
425
+ }
426
+ // fallback for browsers without `Object.create`
427
+ if (!nativeCreate) {
428
+ baseCreate = (function() {
429
+ function Object() {}
430
+ return function(prototype) {
431
+ if (isObject(prototype)) {
432
+ Object.prototype = prototype;
433
+ var result = new Object;
434
+ Object.prototype = null;
435
+ }
436
+ return result || root.Object();
437
+ };
438
+ }());
439
+ }
440
+
374
441
  /**
375
442
  * The base implementation of `_.createCallback` without support for creating
376
443
  * "_.pluck" or "_.where" style callbacks.
@@ -385,8 +452,8 @@
385
452
  if (typeof func != 'function') {
386
453
  return identity;
387
454
  }
388
- // exit early if there is no `thisArg`
389
- if (typeof thisArg == 'undefined') {
455
+ // exit early for no `thisArg` or already bound by `Function#bind`
456
+ if (typeof thisArg == 'undefined' || !('prototype' in func)) {
390
457
  return func;
391
458
  }
392
459
  switch (argCount) {
@@ -406,6 +473,82 @@
406
473
  return bind(func, thisArg);
407
474
  }
408
475
 
476
+ /**
477
+ * The base implementation of `createWrapper` that creates the wrapper and
478
+ * sets its meta data.
479
+ *
480
+ * @private
481
+ * @param {Array} bindData The bind data array.
482
+ * @returns {Function} Returns the new function.
483
+ */
484
+ function baseCreateWrapper(bindData) {
485
+ var func = bindData[0],
486
+ bitmask = bindData[1],
487
+ partialArgs = bindData[2],
488
+ partialRightArgs = bindData[3],
489
+ thisArg = bindData[4],
490
+ arity = bindData[5];
491
+
492
+ var isBind = bitmask & 1,
493
+ isBindKey = bitmask & 2,
494
+ isCurry = bitmask & 4,
495
+ isCurryBound = bitmask & 8,
496
+ key = func;
497
+
498
+ function bound() {
499
+ var thisBinding = isBind ? thisArg : this;
500
+ if (partialArgs) {
501
+ var args = partialArgs.slice();
502
+ push.apply(args, arguments);
503
+ }
504
+ if (partialRightArgs || isCurry) {
505
+ args || (args = slice(arguments));
506
+ if (partialRightArgs) {
507
+ push.apply(args, partialRightArgs);
508
+ }
509
+ if (isCurry && args.length < arity) {
510
+ bitmask |= 16 & ~32;
511
+ return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]);
512
+ }
513
+ }
514
+ args || (args = arguments);
515
+ if (isBindKey) {
516
+ func = thisBinding[key];
517
+ }
518
+ if (this instanceof bound) {
519
+ thisBinding = baseCreate(func.prototype);
520
+ var result = func.apply(thisBinding, args);
521
+ return isObject(result) ? result : thisBinding;
522
+ }
523
+ return func.apply(thisBinding, args);
524
+ }
525
+ return bound;
526
+ }
527
+
528
+ /**
529
+ * The base implementation of `_.difference` that accepts a single array
530
+ * of values to exclude.
531
+ *
532
+ * @private
533
+ * @param {Array} array The array to process.
534
+ * @param {Array} [values] The array of values to exclude.
535
+ * @returns {Array} Returns a new array of filtered values.
536
+ */
537
+ function baseDifference(array, values) {
538
+ var index = -1,
539
+ indexOf = getIndexOf(),
540
+ length = array ? array.length : 0,
541
+ result = [];
542
+
543
+ while (++index < length) {
544
+ var value = array[index];
545
+ if (indexOf(values, value) < 0) {
546
+ result.push(value);
547
+ }
548
+ }
549
+ return result;
550
+ }
551
+
409
552
  /**
410
553
  * The base implementation of `_.flatten` without support for callback
411
554
  * shorthands or `thisArg` binding.
@@ -413,11 +556,11 @@
413
556
  * @private
414
557
  * @param {Array} array The array to flatten.
415
558
  * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.
416
- * @param {boolean} [isArgArrays=false] A flag to restrict flattening to arrays and `arguments` objects.
559
+ * @param {boolean} [isStrict=false] A flag to restrict flattening to arrays and `arguments` objects.
417
560
  * @param {number} [fromIndex=0] The index to start from.
418
561
  * @returns {Array} Returns a new flattened array.
419
562
  */
420
- function baseFlatten(array, isShallow, isArgArrays, fromIndex) {
563
+ function baseFlatten(array, isShallow, isStrict, fromIndex) {
421
564
  var index = (fromIndex || 0) - 1,
422
565
  length = array ? array.length : 0,
423
566
  result = [];
@@ -429,7 +572,7 @@
429
572
  && (isArray(value) || isArguments(value))) {
430
573
  // recursively flatten arrays (susceptible to call stack limits)
431
574
  if (!isShallow) {
432
- value = baseFlatten(value, isShallow, isArgArrays);
575
+ value = baseFlatten(value, isShallow, isStrict);
433
576
  }
434
577
  var valIndex = -1,
435
578
  valLength = value.length,
@@ -439,7 +582,7 @@
439
582
  while (++valIndex < valLength) {
440
583
  result[resIndex++] = value[valIndex];
441
584
  }
442
- } else if (!isArgArrays) {
585
+ } else if (!isStrict) {
443
586
  result.push(value);
444
587
  }
445
588
  }
@@ -496,8 +639,11 @@
496
639
  }
497
640
  var isArr = className == arrayClass;
498
641
  if (!isArr) {
499
- if (hasOwnProperty.call(a, '__wrapped__ ') || b instanceof lodash) {
500
- return baseIsEqual(a.__wrapped__ || a, b.__wrapped__ || b, stackA, stackB);
642
+ var aWrapped = a instanceof lodash,
643
+ bWrapped = b instanceof lodash;
644
+
645
+ if (aWrapped || bWrapped) {
646
+ return baseIsEqual(aWrapped ? a.__wrapped__ : a, bWrapped ? b.__wrapped__ : b, stackA, stackB);
501
647
  }
502
648
  if (className != objectClass) {
503
649
  return false;
@@ -505,10 +651,10 @@
505
651
  var ctorA = a.constructor,
506
652
  ctorB = b.constructor;
507
653
 
508
- if (ctorA != ctorB && !(
509
- isFunction(ctorA) && ctorA instanceof ctorA &&
510
- isFunction(ctorB) && ctorB instanceof ctorB
511
- )) {
654
+ if (ctorA != ctorB &&
655
+ !(isFunction(ctorA) && ctorA instanceof ctorA && isFunction(ctorB) && ctorB instanceof ctorB) &&
656
+ ('constructor' in a && 'constructor' in b)
657
+ ) {
512
658
  return false;
513
659
  }
514
660
  }
@@ -557,6 +703,19 @@
557
703
  return result;
558
704
  }
559
705
 
706
+ /**
707
+ * The base implementation of `_.random` without argument juggling or support
708
+ * for returning floating-point numbers.
709
+ *
710
+ * @private
711
+ * @param {number} min The minimum possible value.
712
+ * @param {number} max The maximum possible value.
713
+ * @returns {number} Returns a random number.
714
+ */
715
+ function baseRandom(min, max) {
716
+ return min + floor(nativeRandom() * (max - min + 1));
717
+ }
718
+
560
719
  /**
561
720
  * The base implementation of `_.uniq` without support for callback shorthands
562
721
  * or `thisArg` binding.
@@ -643,16 +802,15 @@
643
802
  * provided to the new function.
644
803
  * @param {*} [thisArg] The `this` binding of `func`.
645
804
  * @param {number} [arity] The arity of `func`.
646
- * @returns {Function} Returns the new bound function.
805
+ * @returns {Function} Returns the new function.
647
806
  */
648
- function createBound(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) {
807
+ function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) {
649
808
  var isBind = bitmask & 1,
650
809
  isBindKey = bitmask & 2,
651
810
  isCurry = bitmask & 4,
652
811
  isCurryBound = bitmask & 8,
653
812
  isPartial = bitmask & 16,
654
- isPartialRight = bitmask & 32,
655
- key = func;
813
+ isPartialRight = bitmask & 32;
656
814
 
657
815
  if (!isBindKey && !isFunction(func)) {
658
816
  throw new TypeError;
@@ -665,76 +823,9 @@
665
823
  bitmask &= ~32;
666
824
  isPartialRight = partialRightArgs = false;
667
825
  }
668
- // use `Function#bind` if it exists and is fast
669
- // (in V8 `Function#bind` is slower except when partially applied)
670
- if (isBind && !(isBindKey || isCurry || isPartialRight) &&
671
- (support.fastBind || (nativeBind && isPartial))) {
672
- if (isPartial) {
673
- var args = [thisArg];
674
- push.apply(args, partialArgs);
675
- }
676
- var bound = isPartial
677
- ? nativeBind.apply(func, args)
678
- : nativeBind.call(func, thisArg);
679
- }
680
- else {
681
- bound = function() {
682
- // `Function#bind` spec
683
- // http://es5.github.io/#x15.3.4.5
684
- var args = arguments,
685
- thisBinding = isBind ? thisArg : this;
686
-
687
- if (isCurry || isPartial || isPartialRight) {
688
- args = nativeSlice.call(args);
689
- if (isPartial) {
690
- unshift.apply(args, partialArgs);
691
- }
692
- if (isPartialRight) {
693
- push.apply(args, partialRightArgs);
694
- }
695
- if (isCurry && args.length < arity) {
696
- bitmask |= 16 & ~32;
697
- return createBound(func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity);
698
- }
699
- }
700
- if (isBindKey) {
701
- func = thisBinding[key];
702
- }
703
- if (this instanceof bound) {
704
- // ensure `new bound` is an instance of `func`
705
- thisBinding = createObject(func.prototype);
706
-
707
- // mimic the constructor's `return` behavior
708
- // http://es5.github.io/#x13.2.2
709
- var result = func.apply(thisBinding, args);
710
- return isObject(result) ? result : thisBinding;
711
- }
712
- return func.apply(thisBinding, args);
713
- };
714
- }
715
- return bound;
716
- }
717
-
718
- /**
719
- * Creates a new object with the specified `prototype`.
720
- *
721
- * @private
722
- * @param {Object} prototype The prototype object.
723
- * @returns {Object} Returns the new object.
724
- */
725
- function createObject(prototype) {
726
- return isObject(prototype) ? nativeCreate(prototype) : {};
727
- }
728
- // fallback for browsers without `Object.create`
729
- if (!nativeCreate) {
730
- createObject = function(prototype) {
731
- if (isObject(prototype)) {
732
- noop.prototype = prototype;
733
- var result = new noop;
734
- noop.prototype = null;
735
- }
736
- return result || {};
737
- };
826
+ // fast path for `_.bind`
827
+ var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper;
828
+ return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]);
738
829
  }
739
830
 
740
831
  /**
@@ -798,7 +889,7 @@
798
889
  if (!isArguments(arguments)) {
799
890
  isArguments = function(value) {
800
891
  return value && typeof value == 'object' && typeof value.length == 'number' &&
801
- hasOwnProperty.call(value, 'callee') || false;
892
+ hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee') || false;
802
893
  };
803
894
  }
804
895
 
@@ -909,16 +1000,16 @@
909
1000
  * @returns {Object} Returns the destination object.
910
1001
  * @example
911
1002
  *
912
- * _.assign({ 'name': 'moe' }, { 'age': 40 });
913
- * // => { 'name': 'moe', 'age': 40 }
1003
+ * _.assign({ 'name': 'fred' }, { 'employer': 'slate' });
1004
+ * // => { 'name': 'fred', 'employer': 'slate' }
914
1005
  *
915
1006
  * var defaults = _.partialRight(_.assign, function(a, b) {
916
1007
  * return typeof a == 'undefined' ? b : a;
917
1008
  * });
918
1009
  *
919
- * var food = { 'name': 'apple' };
920
- * defaults(food, { 'name': 'banana', 'type': 'fruit' });
921
- * // => { 'name': 'apple', 'type': 'fruit' }
1010
+ * var object = { 'name': 'barney' };
1011
+ * defaults(object, { 'name': 'fred', 'employer': 'slate' });
1012
+ * // => { 'name': 'barney', 'employer': 'slate' }
922
1013
  */
923
1014
  function assign(object) {
924
1015
  if (!object) {
@@ -936,7 +1027,7 @@
936
1027
  }
937
1028
 
938
1029
  /**
939
- * Creates a clone of `value`. If `deep` is `true` nested objects will also
1030
+ * Creates a clone of `value`. If `isDeep` is `true` nested objects will also
940
1031
  * be cloned, otherwise they will be assigned by reference. If a callback
941
1032
  * is provided it will be executed to produce the cloned values. If the
942
1033
  * callback returns `undefined` cloning will be handled by the method instead.
@@ -946,23 +1037,23 @@
946
1037
  * @memberOf _
947
1038
  * @category Objects
948
1039
  * @param {*} value The value to clone.
949
- * @param {boolean} [deep=false] Specify a deep clone.
1040
+ * @param {boolean} [isDeep=false] Specify a deep clone.
950
1041
  * @param {Function} [callback] The function to customize cloning values.
951
1042
  * @param {*} [thisArg] The `this` binding of `callback`.
952
1043
  * @returns {*} Returns the cloned value.
953
1044
  * @example
954
1045
  *
955
- * var stooges = [
956
- * { 'name': 'moe', 'age': 40 },
957
- * { 'name': 'larry', 'age': 50 }
1046
+ * var characters = [
1047
+ * { 'name': 'barney', 'age': 36 },
1048
+ * { 'name': 'fred', 'age': 40 }
958
1049
  * ];
959
1050
  *
960
- * var shallow = _.clone(stooges);
961
- * shallow[0] === stooges[0];
1051
+ * var shallow = _.clone(characters);
1052
+ * shallow[0] === characters[0];
962
1053
  * // => true
963
1054
  *
964
- * var deep = _.clone(stooges, true);
965
- * deep[0] === stooges[0];
1055
+ * var deep = _.clone(characters, true);
1056
+ * deep[0] === characters[0];
966
1057
  * // => false
967
1058
  *
968
1059
  * _.mixin({
@@ -977,7 +1068,7 @@
977
1068
  */
978
1069
  function clone(value) {
979
1070
  return isObject(value)
980
- ? (isArray(value) ? nativeSlice.call(value) : assign({}, value))
1071
+ ? (isArray(value) ? slice(value) : assign({}, value))
981
1072
  : value;
982
1073
  }
983
1074
 
@@ -997,9 +1088,9 @@
997
1088
  * @returns {Object} Returns the destination object.
998
1089
  * @example
999
1090
  *
1000
- * var food = { 'name': 'apple' };
1001
- * _.defaults(food, { 'name': 'banana', 'type': 'fruit' });
1002
- * // => { 'name': 'apple', 'type': 'fruit' }
1091
+ * var object = { 'name': 'barney' };
1092
+ * _.defaults(object, { 'name': 'fred', 'employer': 'slate' });
1093
+ * // => { 'name': 'barney', 'employer': 'slate' }
1003
1094
  */
1004
1095
  function defaults(object) {
1005
1096
  if (!object) {
@@ -1034,18 +1125,20 @@
1034
1125
  * @returns {Object} Returns `object`.
1035
1126
  * @example
1036
1127
  *
1037
- * function Dog(name) {
1038
- * this.name = name;
1128
+ * function Shape() {
1129
+ * this.x = 0;
1130
+ * this.y = 0;
1039
1131
  * }
1040
1132
  *
1041
- * Dog.prototype.bark = function() {
1042
- * console.log('Woof, woof!');
1133
+ * Shape.prototype.move = function(x, y) {
1134
+ * this.x += x;
1135
+ * this.y += y;
1043
1136
  * };
1044
1137
  *
1045
- * _.forIn(new Dog('Dagny'), function(value, key) {
1138
+ * _.forIn(new Shape, function(value, key) {
1046
1139
  * console.log(key);
1047
1140
  * });
1048
- * // => logs 'bark' and 'name' (property order is not guaranteed across environments)
1141
+ * // => logs 'x', 'y', and 'move' (property order is not guaranteed across environments)
1049
1142
  */
1050
1143
  var forIn = function(collection, callback) {
1051
1144
  var index, iterable = collection, result = iterable;
@@ -1144,8 +1237,8 @@
1144
1237
  * @returns {Object} Returns the created inverted object.
1145
1238
  * @example
1146
1239
  *
1147
- * _.invert({ 'first': 'moe', 'second': 'larry' });
1148
- * // => { 'moe': 'first', 'larry': 'second' }
1240
+ * _.invert({ 'first': 'fred', 'second': 'barney' });
1241
+ * // => { 'fred': 'first', 'barney': 'second' }
1149
1242
  */
1150
1243
  function invert(object) {
1151
1244
  var index = -1,
@@ -1174,7 +1267,8 @@
1174
1267
  * // => false
1175
1268
  */
1176
1269
  function isBoolean(value) {
1177
- return value === true || value === false || toString.call(value) == boolClass;
1270
+ return value === true || value === false ||
1271
+ value && typeof value == 'object' && toString.call(value) == boolClass || false;
1178
1272
  }
1179
1273
 
1180
1274
  /**
@@ -1191,7 +1285,7 @@
1191
1285
  * // => true
1192
1286
  */
1193
1287
  function isDate(value) {
1194
- return value ? (typeof value == 'object' && toString.call(value) == dateClass) : false;
1288
+ return value && typeof value == 'object' && toString.call(value) == dateClass || false;
1195
1289
  }
1196
1290
 
1197
1291
  /**
@@ -1208,7 +1302,7 @@
1208
1302
  * // => true
1209
1303
  */
1210
1304
  function isElement(value) {
1211
- return value ? value.nodeType === 1 : false;
1305
+ return value && value.nodeType === 1 || false;
1212
1306
  }
1213
1307
 
1214
1308
  /**
@@ -1264,13 +1358,13 @@
1264
1358
  * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
1265
1359
  * @example
1266
1360
  *
1267
- * var moe = { 'name': 'moe', 'age': 40 };
1268
- * var copy = { 'name': 'moe', 'age': 40 };
1361
+ * var object = { 'name': 'fred' };
1362
+ * var copy = { 'name': 'fred' };
1269
1363
  *
1270
- * moe == copy;
1364
+ * object == copy;
1271
1365
  * // => false
1272
1366
  *
1273
- * _.isEqual(moe, copy);
1367
+ * _.isEqual(object, copy);
1274
1368
  * // => true
1275
1369
  *
1276
1370
  * var words = ['hello', 'goodbye'];
@@ -1439,7 +1533,8 @@
1439
1533
  * // => true
1440
1534
  */
1441
1535
  function isNumber(value) {
1442
- return typeof value == 'number' || toString.call(value) == numberClass;
1536
+ return typeof value == 'number' ||
1537
+ value && typeof value == 'object' && toString.call(value) == numberClass || false;
1443
1538
  }
1444
1539
 
1445
1540
  /**
@@ -1452,11 +1547,11 @@
1452
1547
  * @returns {boolean} Returns `true` if the `value` is a regular expression, else `false`.
1453
1548
  * @example
1454
1549
  *
1455
- * _.isRegExp(/moe/);
1550
+ * _.isRegExp(/fred/);
1456
1551
  * // => true
1457
1552
  */
1458
1553
  function isRegExp(value) {
1459
- return (value && objectTypes[typeof value]) ? toString.call(value) == regexpClass : false;
1554
+ return value && objectTypes[typeof value] && toString.call(value) == regexpClass || false;
1460
1555
  }
1461
1556
 
1462
1557
  /**
@@ -1469,11 +1564,12 @@
1469
1564
  * @returns {boolean} Returns `true` if the `value` is a string, else `false`.
1470
1565
  * @example
1471
1566
  *
1472
- * _.isString('moe');
1567
+ * _.isString('fred');
1473
1568
  * // => true
1474
1569
  */
1475
1570
  function isString(value) {
1476
- return typeof value == 'string' || toString.call(value) == stringClass;
1571
+ return typeof value == 'string' ||
1572
+ value && typeof value == 'object' && toString.call(value) == stringClass || false;
1477
1573
  }
1478
1574
 
1479
1575
  /**
@@ -1511,24 +1607,29 @@
1511
1607
  * @returns {Object} Returns an object without the omitted properties.
1512
1608
  * @example
1513
1609
  *
1514
- * _.omit({ 'name': 'moe', 'age': 40 }, 'age');
1515
- * // => { 'name': 'moe' }
1610
+ * _.omit({ 'name': 'fred', 'age': 40 }, 'age');
1611
+ * // => { 'name': 'fred' }
1516
1612
  *
1517
- * _.omit({ 'name': 'moe', 'age': 40 }, function(value) {
1613
+ * _.omit({ 'name': 'fred', 'age': 40 }, function(value) {
1518
1614
  * return typeof value == 'number';
1519
1615
  * });
1520
- * // => { 'name': 'moe' }
1616
+ * // => { 'name': 'fred' }
1521
1617
  */
1522
1618
  function omit(object) {
1523
- var indexOf = getIndexOf(),
1524
- props = baseFlatten(arguments, true, false, 1),
1525
- result = {};
1526
-
1619
+ var props = [];
1527
1620
  forIn(object, function(value, key) {
1528
- if (indexOf(props, key) < 0) {
1529
- result[key] = value;
1530
- }
1621
+ props.push(key);
1531
1622
  });
1623
+ props = baseDifference(props, baseFlatten(arguments, true, false, 1));
1624
+
1625
+ var index = -1,
1626
+ length = props.length,
1627
+ result = {};
1628
+
1629
+ while (++index < length) {
1630
+ var key = props[index];
1631
+ result[key] = object[key];
1632
+ }
1532
1633
  return result;
1533
1634
  }
1534
1635
 
@@ -1543,8 +1644,8 @@
1543
1644
  * @returns {Array} Returns new array of key-value pairs.
1544
1645
  * @example
1545
1646
  *
1546
- * _.pairs({ 'moe': 30, 'larry': 40 });
1547
- * // => [['moe', 30], ['larry', 40]] (property order is not guaranteed across environments)
1647
+ * _.pairs({ 'barney': 36, 'fred': 40 });
1648
+ * // => [['barney', 36], ['fred', 40]] (property order is not guaranteed across environments)
1548
1649
  */
1549
1650
  function pairs(object) {
1550
1651
  var index = -1,
@@ -1578,13 +1679,13 @@
1578
1679
  * @returns {Object} Returns an object composed of the picked properties.
1579
1680
  * @example
1580
1681
  *
1581
- * _.pick({ 'name': 'moe', '_userid': 'moe1' }, 'name');
1582
- * // => { 'name': 'moe' }
1682
+ * _.pick({ 'name': 'fred', '_userid': 'fred1' }, 'name');
1683
+ * // => { 'name': 'fred' }
1583
1684
  *
1584
- * _.pick({ 'name': 'moe', '_userid': 'moe1' }, function(value, key) {
1685
+ * _.pick({ 'name': 'fred', '_userid': 'fred1' }, function(value, key) {
1585
1686
  * return key.charAt(0) != '_';
1586
1687
  * });
1587
- * // => { 'name': 'moe' }
1688
+ * // => { 'name': 'fred' }
1588
1689
  */
1589
1690
  function pick(object) {
1590
1691
  var index = -1,
@@ -1593,9 +1694,9 @@
1593
1694
  result = {};
1594
1695
 
1595
1696
  while (++index < length) {
1596
- var prop = props[index];
1597
- if (prop in object) {
1598
- result[prop] = object[prop];
1697
+ var key = props[index];
1698
+ if (key in object) {
1699
+ result[key] = object[key];
1599
1700
  }
1600
1701
  }
1601
1702
  return result;
@@ -1649,10 +1750,10 @@
1649
1750
  * _.contains([1, 2, 3], 1, 2);
1650
1751
  * // => false
1651
1752
  *
1652
- * _.contains({ 'name': 'moe', 'age': 40 }, 'moe');
1753
+ * _.contains({ 'name': 'fred', 'age': 40 }, 'fred');
1653
1754
  * // => true
1654
1755
  *
1655
- * _.contains('curly', 'ur');
1756
+ * _.contains('pebbles', 'eb');
1656
1757
  * // => true
1657
1758
  */
1658
1759
  function contains(collection, target) {
@@ -1732,20 +1833,20 @@
1732
1833
  * else `false`.
1733
1834
  * @example
1734
1835
  *
1735
- * _.every([true, 1, null, 'yes'], Boolean);
1836
+ * _.every([true, 1, null, 'yes']);
1736
1837
  * // => false
1737
1838
  *
1738
- * var stooges = [
1739
- * { 'name': 'moe', 'age': 40 },
1740
- * { 'name': 'larry', 'age': 50 }
1839
+ * var characters = [
1840
+ * { 'name': 'barney', 'age': 36 },
1841
+ * { 'name': 'fred', 'age': 40 }
1741
1842
  * ];
1742
1843
  *
1743
1844
  * // using "_.pluck" callback shorthand
1744
- * _.every(stooges, 'age');
1845
+ * _.every(characters, 'age');
1745
1846
  * // => true
1746
1847
  *
1747
1848
  * // using "_.where" callback shorthand
1748
- * _.every(stooges, { 'age': 50 });
1849
+ * _.every(characters, { 'age': 36 });
1749
1850
  * // => false
1750
1851
  */
1751
1852
  function every(collection, callback, thisArg) {
@@ -1796,18 +1897,18 @@
1796
1897
  * var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
1797
1898
  * // => [2, 4, 6]
1798
1899
  *
1799
- * var food = [
1800
- * { 'name': 'apple', 'organic': false, 'type': 'fruit' },
1801
- * { 'name': 'carrot', 'organic': true, 'type': 'vegetable' }
1900
+ * var characters = [
1901
+ * { 'name': 'barney', 'age': 36, 'blocked': false },
1902
+ * { 'name': 'fred', 'age': 40, 'blocked': true }
1802
1903
  * ];
1803
1904
  *
1804
1905
  * // using "_.pluck" callback shorthand
1805
- * _.filter(food, 'organic');
1806
- * // => [{ 'name': 'carrot', 'organic': true, 'type': 'vegetable' }]
1906
+ * _.filter(characters, 'blocked');
1907
+ * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]
1807
1908
  *
1808
1909
  * // using "_.where" callback shorthand
1809
- * _.filter(food, { 'type': 'fruit' });
1810
- * // => [{ 'name': 'apple', 'organic': false, 'type': 'fruit' }]
1910
+ * _.filter(characters, { 'age': 36 });
1911
+ * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]
1811
1912
  */
1812
1913
  function filter(collection, callback, thisArg) {
1813
1914
  var result = [];
@@ -1857,24 +1958,24 @@
1857
1958
  * @returns {*} Returns the found element, else `undefined`.
1858
1959
  * @example
1859
1960
  *
1860
- * _.find([1, 2, 3, 4], function(num) {
1861
- * return num % 2 == 0;
1862
- * });
1863
- * // => 2
1864
- *
1865
- * var food = [
1866
- * { 'name': 'apple', 'organic': false, 'type': 'fruit' },
1867
- * { 'name': 'banana', 'organic': true, 'type': 'fruit' },
1868
- * { 'name': 'beet', 'organic': false, 'type': 'vegetable' }
1961
+ * var characters = [
1962
+ * { 'name': 'barney', 'age': 36, 'blocked': false },
1963
+ * { 'name': 'fred', 'age': 40, 'blocked': true },
1964
+ * { 'name': 'pebbles', 'age': 1, 'blocked': false }
1869
1965
  * ];
1870
1966
  *
1967
+ * _.find(characters, function(chr) {
1968
+ * return chr.age < 40;
1969
+ * });
1970
+ * // => { 'name': 'barney', 'age': 36, 'blocked': false }
1971
+ *
1871
1972
  * // using "_.where" callback shorthand
1872
- * _.find(food, { 'type': 'vegetable' });
1873
- * // => { 'name': 'beet', 'organic': false, 'type': 'vegetable' }
1973
+ * _.find(characters, { 'age': 1 });
1974
+ * // => { 'name': 'pebbles', 'age': 1, 'blocked': false }
1874
1975
  *
1875
1976
  * // using "_.pluck" callback shorthand
1876
- * _.find(food, 'organic');
1877
- * // => { 'name': 'banana', 'organic': true, 'type': 'fruit' }
1977
+ * _.find(characters, 'blocked');
1978
+ * // => { 'name': 'fred', 'age': 40, 'blocked': true }
1878
1979
  */
1879
1980
  function find(collection, callback, thisArg) {
1880
1981
  callback = createCallback(callback, thisArg, 3);
@@ -1934,6 +2035,10 @@
1934
2035
  * (value, index|key, collection). Callbacks may exit iteration early by
1935
2036
  * explicitly returning `false`.
1936
2037
  *
2038
+ * Note: As with other "Collections" methods, objects with a `length` property
2039
+ * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`
2040
+ * may be used for object iteration.
2041
+ *
1937
2042
  * @static
1938
2043
  * @memberOf _
1939
2044
  * @alias each
@@ -2076,7 +2181,7 @@
2076
2181
  * _.indexBy(keys, function(key) { return String.fromCharCode(key.code); });
2077
2182
  * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
2078
2183
  *
2079
- * _.indexBy(stooges, function(key) { this.fromCharCode(key.code); }, String);
2184
+ * _.indexBy(characters, function(key) { this.fromCharCode(key.code); }, String);
2080
2185
  * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
2081
2186
  */
2082
2187
  var indexBy = createAggregator(function(result, value, key) {
@@ -2106,7 +2211,7 @@
2106
2211
  * // => [['1', '2', '3'], ['4', '5', '6']]
2107
2212
  */
2108
2213
  function invoke(collection, methodName) {
2109
- var args = nativeSlice.call(arguments, 2),
2214
+ var args = slice(arguments, 2),
2110
2215
  index = -1,
2111
2216
  isFunc = typeof methodName == 'function',
2112
2217
  length = collection ? collection.length : 0,
@@ -2148,14 +2253,14 @@
2148
2253
  * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; });
2149
2254
  * // => [3, 6, 9] (property order is not guaranteed across environments)
2150
2255
  *
2151
- * var stooges = [
2152
- * { 'name': 'moe', 'age': 40 },
2153
- * { 'name': 'larry', 'age': 50 }
2256
+ * var characters = [
2257
+ * { 'name': 'barney', 'age': 36 },
2258
+ * { 'name': 'fred', 'age': 40 }
2154
2259
  * ];
2155
2260
  *
2156
2261
  * // using "_.pluck" callback shorthand
2157
- * _.map(stooges, 'name');
2158
- * // => ['moe', 'larry']
2262
+ * _.map(characters, 'name');
2263
+ * // => ['barney', 'fred']
2159
2264
  */
2160
2265
  function map(collection, callback, thisArg) {
2161
2266
  var index = -1,
@@ -2204,26 +2309,31 @@
2204
2309
  * _.max([4, 2, 8, 6]);
2205
2310
  * // => 8
2206
2311
  *
2207
- * var stooges = [
2208
- * { 'name': 'moe', 'age': 40 },
2209
- * { 'name': 'larry', 'age': 50 }
2312
+ * var characters = [
2313
+ * { 'name': 'barney', 'age': 36 },
2314
+ * { 'name': 'fred', 'age': 40 }
2210
2315
  * ];
2211
2316
  *
2212
- * _.max(stooges, function(stooge) { return stooge.age; });
2213
- * // => { 'name': 'larry', 'age': 50 };
2317
+ * _.max(characters, function(chr) { return chr.age; });
2318
+ * // => { 'name': 'fred', 'age': 40 };
2214
2319
  *
2215
2320
  * // using "_.pluck" callback shorthand
2216
- * _.max(stooges, 'age');
2217
- * // => { 'name': 'larry', 'age': 50 };
2321
+ * _.max(characters, 'age');
2322
+ * // => { 'name': 'fred', 'age': 40 };
2218
2323
  */
2219
2324
  function max(collection, callback, thisArg) {
2220
2325
  var computed = -Infinity,
2221
2326
  result = computed;
2222
2327
 
2328
+ // allows working with functions like `_.map` without using
2329
+ // their `index` argument as a callback
2330
+ if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {
2331
+ callback = null;
2332
+ }
2223
2333
  var index = -1,
2224
2334
  length = collection ? collection.length : 0;
2225
2335
 
2226
- if (!callback && typeof length == 'number') {
2336
+ if (callback == null && typeof length == 'number') {
2227
2337
  while (++index < length) {
2228
2338
  var value = collection[index];
2229
2339
  if (value > result) {
@@ -2272,26 +2382,31 @@
2272
2382
  * _.min([4, 2, 8, 6]);
2273
2383
  * // => 2
2274
2384
  *
2275
- * var stooges = [
2276
- * { 'name': 'moe', 'age': 40 },
2277
- * { 'name': 'larry', 'age': 50 }
2385
+ * var characters = [
2386
+ * { 'name': 'barney', 'age': 36 },
2387
+ * { 'name': 'fred', 'age': 40 }
2278
2388
  * ];
2279
2389
  *
2280
- * _.min(stooges, function(stooge) { return stooge.age; });
2281
- * // => { 'name': 'moe', 'age': 40 };
2390
+ * _.min(characters, function(chr) { return chr.age; });
2391
+ * // => { 'name': 'barney', 'age': 36 };
2282
2392
  *
2283
2393
  * // using "_.pluck" callback shorthand
2284
- * _.min(stooges, 'age');
2285
- * // => { 'name': 'moe', 'age': 40 };
2394
+ * _.min(characters, 'age');
2395
+ * // => { 'name': 'barney', 'age': 36 };
2286
2396
  */
2287
2397
  function min(collection, callback, thisArg) {
2288
2398
  var computed = Infinity,
2289
2399
  result = computed;
2290
2400
 
2401
+ // allows working with functions like `_.map` without using
2402
+ // their `index` argument as a callback
2403
+ if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {
2404
+ callback = null;
2405
+ }
2291
2406
  var index = -1,
2292
2407
  length = collection ? collection.length : 0;
2293
2408
 
2294
- if (!callback && typeof length == 'number') {
2409
+ if (callback == null && typeof length == 'number') {
2295
2410
  while (++index < length) {
2296
2411
  var value = collection[index];
2297
2412
  if (value < result) {
@@ -2313,7 +2428,7 @@
2313
2428
  }
2314
2429
 
2315
2430
  /**
2316
- * Retrieves the value of a specified property from all elements in the `collection`.
2431
+ * Retrieves the value of a specified property from all elements in the collection.
2317
2432
  *
2318
2433
  * @static
2319
2434
  * @memberOf _
@@ -2324,13 +2439,13 @@
2324
2439
  * @returns {Array} Returns a new array of property values.
2325
2440
  * @example
2326
2441
  *
2327
- * var stooges = [
2328
- * { 'name': 'moe', 'age': 40 },
2329
- * { 'name': 'larry', 'age': 50 }
2442
+ * var characters = [
2443
+ * { 'name': 'barney', 'age': 36 },
2444
+ * { 'name': 'fred', 'age': 40 }
2330
2445
  * ];
2331
2446
  *
2332
- * _.pluck(stooges, 'name');
2333
- * // => ['moe', 'larry']
2447
+ * _.pluck(characters, 'name');
2448
+ * // => ['barney', 'fred']
2334
2449
  */
2335
2450
  function pluck(collection, property) {
2336
2451
  var index = -1,
@@ -2378,7 +2493,7 @@
2378
2493
  function reduce(collection, callback, accumulator, thisArg) {
2379
2494
  if (!collection) return accumulator;
2380
2495
  var noaccum = arguments.length < 3;
2381
- callback = baseCreateCallback(callback, thisArg, 4);
2496
+ callback = createCallback(callback, thisArg, 4);
2382
2497
 
2383
2498
  var index = -1,
2384
2499
  length = collection.length;
@@ -2421,7 +2536,7 @@
2421
2536
  */
2422
2537
  function reduceRight(collection, callback, accumulator, thisArg) {
2423
2538
  var noaccum = arguments.length < 3;
2424
- callback = baseCreateCallback(callback, thisArg, 4);
2539
+ callback = createCallback(callback, thisArg, 4);
2425
2540
  forEachRight(collection, function(value, index, collection) {
2426
2541
  accumulator = noaccum
2427
2542
  ? (noaccum = false, value)
@@ -2455,18 +2570,18 @@
2455
2570
  * var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
2456
2571
  * // => [1, 3, 5]
2457
2572
  *
2458
- * var food = [
2459
- * { 'name': 'apple', 'organic': false, 'type': 'fruit' },
2460
- * { 'name': 'carrot', 'organic': true, 'type': 'vegetable' }
2573
+ * var characters = [
2574
+ * { 'name': 'barney', 'age': 36, 'blocked': false },
2575
+ * { 'name': 'fred', 'age': 40, 'blocked': true }
2461
2576
  * ];
2462
2577
  *
2463
2578
  * // using "_.pluck" callback shorthand
2464
- * _.reject(food, 'organic');
2465
- * // => [{ 'name': 'apple', 'organic': false, 'type': 'fruit' }]
2579
+ * _.reject(characters, 'blocked');
2580
+ * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]
2466
2581
  *
2467
2582
  * // using "_.where" callback shorthand
2468
- * _.reject(food, { 'type': 'fruit' });
2469
- * // => [{ 'name': 'carrot', 'organic': true, 'type': 'vegetable' }]
2583
+ * _.reject(characters, { 'age': 36 });
2584
+ * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]
2470
2585
  */
2471
2586
  function reject(collection, callback, thisArg) {
2472
2587
  callback = createCallback(callback, thisArg, 3);
@@ -2483,8 +2598,8 @@
2483
2598
  * @category Collections
2484
2599
  * @param {Array|Object|string} collection The collection to sample.
2485
2600
  * @param {number} [n] The number of elements to sample.
2486
- * @param- {Object} [guard] Allows working with functions, like `_.map`,
2487
- * without using their `key` and `object` arguments as sources.
2601
+ * @param- {Object} [guard] Allows working with functions like `_.map`
2602
+ * without using their `index` arguments as `n`.
2488
2603
  * @returns {Array} Returns the random sample(s) of `collection`.
2489
2604
  * @example
2490
2605
  *
@@ -2495,12 +2610,11 @@
2495
2610
  * // => [3, 1]
2496
2611
  */
2497
2612
  function sample(collection, n, guard) {
2498
- var length = collection ? collection.length : 0;
2499
- if (typeof length != 'number') {
2613
+ if (collection && typeof collection.length != 'number') {
2500
2614
  collection = values(collection);
2501
2615
  }
2502
2616
  if (n == null || guard) {
2503
- return collection ? collection[random(length - 1)] : undefined;
2617
+ return collection ? collection[baseRandom(0, collection.length - 1)] : undefined;
2504
2618
  }
2505
2619
  var result = shuffle(collection);
2506
2620
  result.length = nativeMin(nativeMax(0, n), result.length);
@@ -2527,7 +2641,7 @@
2527
2641
  result = Array(typeof length == 'number' ? length : 0);
2528
2642
 
2529
2643
  forEach(collection, function(value) {
2530
- var rand = random(++index);
2644
+ var rand = baseRandom(0, ++index);
2531
2645
  result[index] = result[rand];
2532
2646
  result[rand] = value;
2533
2647
  });
@@ -2551,7 +2665,7 @@
2551
2665
  * _.size({ 'one': 1, 'two': 2, 'three': 3 });
2552
2666
  * // => 3
2553
2667
  *
2554
- * _.size('curly');
2668
+ * _.size('pebbles');
2555
2669
  * // => 5
2556
2670
  */
2557
2671
  function size(collection) {
@@ -2588,17 +2702,17 @@
2588
2702
  * _.some([null, 0, 'yes', false], Boolean);
2589
2703
  * // => true
2590
2704
  *
2591
- * var food = [
2592
- * { 'name': 'apple', 'organic': false, 'type': 'fruit' },
2593
- * { 'name': 'carrot', 'organic': true, 'type': 'vegetable' }
2705
+ * var characters = [
2706
+ * { 'name': 'barney', 'age': 36, 'blocked': false },
2707
+ * { 'name': 'fred', 'age': 40, 'blocked': true }
2594
2708
  * ];
2595
2709
  *
2596
2710
  * // using "_.pluck" callback shorthand
2597
- * _.some(food, 'organic');
2711
+ * _.some(characters, 'blocked');
2598
2712
  * // => true
2599
2713
  *
2600
2714
  * // using "_.where" callback shorthand
2601
- * _.some(food, { 'type': 'meat' });
2715
+ * _.some(characters, { 'age': 1 });
2602
2716
  * // => false
2603
2717
  */
2604
2718
  function some(collection, callback, thisArg) {
@@ -2694,7 +2808,7 @@
2694
2808
  */
2695
2809
  function toArray(collection) {
2696
2810
  if (isArray(collection)) {
2697
- return nativeSlice.call(collection);
2811
+ return slice(collection);
2698
2812
  }
2699
2813
  if (collection && typeof collection.length == 'number') {
2700
2814
  return map(collection);
@@ -2716,16 +2830,16 @@
2716
2830
  * @returns {Array} Returns a new array of elements that have the given properties.
2717
2831
  * @example
2718
2832
  *
2719
- * var stooges = [
2720
- * { 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] },
2721
- * { 'name': 'moe', 'age': 40, 'quotes': ['Spread out!', 'You knucklehead!'] }
2833
+ * var characters = [
2834
+ * { 'name': 'barney', 'age': 36, 'pets': ['hoppy'] },
2835
+ * { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }
2722
2836
  * ];
2723
2837
  *
2724
- * _.where(stooges, { 'age': 40 });
2725
- * // => [{ 'name': 'moe', 'age': 40, 'quotes': ['Spread out!', 'You knucklehead!'] }]
2838
+ * _.where(characters, { 'age': 36 });
2839
+ * // => [{ 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }]
2726
2840
  *
2727
- * _.where(stooges, { 'quotes': ['Poifect!'] });
2728
- * // => [{ 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] }]
2841
+ * _.where(characters, { 'pets': ['dino'] });
2842
+ * // => [{ 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }]
2729
2843
  */
2730
2844
  function where(collection, properties, first) {
2731
2845
  return (first && isEmpty(properties))
@@ -2771,7 +2885,7 @@
2771
2885
  * @memberOf _
2772
2886
  * @category Arrays
2773
2887
  * @param {Array} array The array to process.
2774
- * @param {...Array} [array] The arrays of values to exclude.
2888
+ * @param {...Array} [values] The arrays of values to exclude.
2775
2889
  * @returns {Array} Returns a new array of filtered values.
2776
2890
  * @example
2777
2891
  *
@@ -2779,19 +2893,7 @@
2779
2893
  * // => [1, 3, 4]
2780
2894
  */
2781
2895
  function difference(array) {
2782
- var index = -1,
2783
- indexOf = getIndexOf(),
2784
- length = array.length,
2785
- flattened = baseFlatten(arguments, true, true, 1),
2786
- result = [];
2787
-
2788
- while (++index < length) {
2789
- var value = array[index];
2790
- if (indexOf(flattened, value) < 0) {
2791
- result.push(value);
2792
- }
2793
- }
2794
- return result;
2896
+ return baseDifference(array, baseFlatten(arguments, true, true, 1));
2795
2897
  }
2796
2898
 
2797
2899
  /**
@@ -2831,24 +2933,19 @@
2831
2933
  * });
2832
2934
  * // => [1, 2]
2833
2935
  *
2834
- * var food = [
2835
- * { 'name': 'banana', 'organic': true },
2836
- * { 'name': 'beet', 'organic': false },
2936
+ * var characters = [
2937
+ * { 'name': 'barney', 'blocked': true, 'employer': 'slate' },
2938
+ * { 'name': 'fred', 'blocked': false, 'employer': 'slate' },
2939
+ * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
2837
2940
  * ];
2838
2941
  *
2839
2942
  * // using "_.pluck" callback shorthand
2840
- * _.first(food, 'organic');
2841
- * // => [{ 'name': 'banana', 'organic': true }]
2842
- *
2843
- * var food = [
2844
- * { 'name': 'apple', 'type': 'fruit' },
2845
- * { 'name': 'banana', 'type': 'fruit' },
2846
- * { 'name': 'beet', 'type': 'vegetable' }
2847
- * ];
2943
+ * _.first(characters, 'blocked');
2944
+ * // => [{ 'name': 'barney', 'blocked': true, 'employer': 'slate' }]
2848
2945
  *
2849
2946
  * // using "_.where" callback shorthand
2850
- * _.first(food, { 'type': 'fruit' });
2851
- * // => [{ 'name': 'apple', 'type': 'fruit' }, { 'name': 'banana', 'type': 'fruit' }]
2947
+ * _.pluck(_.first(characters, { 'employer': 'slate' }), 'name');
2948
+ * // => ['barney', 'fred']
2852
2949
  */
2853
2950
  function first(array, callback, thisArg) {
2854
2951
  var n = 0,
@@ -2866,7 +2963,7 @@
2866
2963
  return array ? array[0] : undefined;
2867
2964
  }
2868
2965
  }
2869
- return nativeSlice.call(array, 0, nativeMin(nativeMax(0, n), length));
2966
+ return slice(array, 0, nativeMin(nativeMax(0, n), length));
2870
2967
  }
2871
2968
 
2872
2969
  /**
@@ -2901,14 +2998,14 @@
2901
2998
  * _.flatten([1, [2], [3, [[4]]]], true);
2902
2999
  * // => [1, 2, 3, [[4]]];
2903
3000
  *
2904
- * var stooges = [
2905
- * { 'name': 'curly', 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] },
2906
- * { 'name': 'moe', 'quotes': ['Spread out!', 'You knucklehead!'] }
3001
+ * var characters = [
3002
+ * { 'name': 'barney', 'age': 30, 'pets': ['hoppy'] },
3003
+ * { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }
2907
3004
  * ];
2908
3005
  *
2909
3006
  * // using "_.pluck" callback shorthand
2910
- * _.flatten(stooges, 'quotes');
2911
- * // => ['Oh, a wise guy, eh?', 'Poifect!', 'Spread out!', 'You knucklehead!']
3007
+ * _.flatten(characters, 'pets');
3008
+ * // => ['hoppy', 'baby puss', 'dino']
2912
3009
  */
2913
3010
  function flatten(array, isShallow) {
2914
3011
  return baseFlatten(array, isShallow);
@@ -2985,24 +3082,19 @@
2985
3082
  * });
2986
3083
  * // => [1]
2987
3084
  *
2988
- * var food = [
2989
- * { 'name': 'beet', 'organic': false },
2990
- * { 'name': 'carrot', 'organic': true }
3085
+ * var characters = [
3086
+ * { 'name': 'barney', 'blocked': false, 'employer': 'slate' },
3087
+ * { 'name': 'fred', 'blocked': true, 'employer': 'slate' },
3088
+ * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
2991
3089
  * ];
2992
3090
  *
2993
3091
  * // using "_.pluck" callback shorthand
2994
- * _.initial(food, 'organic');
2995
- * // => [{ 'name': 'beet', 'organic': false }]
2996
- *
2997
- * var food = [
2998
- * { 'name': 'banana', 'type': 'fruit' },
2999
- * { 'name': 'beet', 'type': 'vegetable' },
3000
- * { 'name': 'carrot', 'type': 'vegetable' }
3001
- * ];
3092
+ * _.initial(characters, 'blocked');
3093
+ * // => [{ 'name': 'barney', 'blocked': false, 'employer': 'slate' }]
3002
3094
  *
3003
3095
  * // using "_.where" callback shorthand
3004
- * _.initial(food, { 'type': 'vegetable' });
3005
- * // => [{ 'name': 'banana', 'type': 'fruit' }]
3096
+ * _.pluck(_.initial(characters, { 'employer': 'na' }), 'name');
3097
+ * // => ['barney', 'fred']
3006
3098
  */
3007
3099
  function initial(array, callback, thisArg) {
3008
3100
  var n = 0,
@@ -3017,7 +3109,7 @@
3017
3109
  } else {
3018
3110
  n = (callback == null || thisArg) ? 1 : callback || n;
3019
3111
  }
3020
- return nativeSlice.call(array, 0, nativeMin(nativeMax(0, length - n), length));
3112
+ return slice(array, 0, nativeMin(nativeMax(0, length - n), length));
3021
3113
  }
3022
3114
 
3023
3115
  /**
@@ -3094,24 +3186,19 @@
3094
3186
  * });
3095
3187
  * // => [2, 3]
3096
3188
  *
3097
- * var food = [
3098
- * { 'name': 'beet', 'organic': false },
3099
- * { 'name': 'carrot', 'organic': true }
3189
+ * var characters = [
3190
+ * { 'name': 'barney', 'blocked': false, 'employer': 'slate' },
3191
+ * { 'name': 'fred', 'blocked': true, 'employer': 'slate' },
3192
+ * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
3100
3193
  * ];
3101
3194
  *
3102
3195
  * // using "_.pluck" callback shorthand
3103
- * _.last(food, 'organic');
3104
- * // => [{ 'name': 'carrot', 'organic': true }]
3105
- *
3106
- * var food = [
3107
- * { 'name': 'banana', 'type': 'fruit' },
3108
- * { 'name': 'beet', 'type': 'vegetable' },
3109
- * { 'name': 'carrot', 'type': 'vegetable' }
3110
- * ];
3196
+ * _.pluck(_.last(characters, 'blocked'), 'name');
3197
+ * // => ['fred', 'pebbles']
3111
3198
  *
3112
3199
  * // using "_.where" callback shorthand
3113
- * _.last(food, { 'type': 'vegetable' });
3114
- * // => [{ 'name': 'beet', 'type': 'vegetable' }, { 'name': 'carrot', 'type': 'vegetable' }]
3200
+ * _.last(characters, { 'employer': 'na' });
3201
+ * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]
3115
3202
  */
3116
3203
  function last(array, callback, thisArg) {
3117
3204
  var n = 0,
@@ -3129,7 +3216,7 @@
3129
3216
  return array ? array[length - 1] : undefined;
3130
3217
  }
3131
3218
  }
3132
- return nativeSlice.call(array, nativeMax(0, length - n));
3219
+ return slice(array, nativeMax(0, length - n));
3133
3220
  }
3134
3221
 
3135
3222
  /**
@@ -3137,6 +3224,13 @@
3137
3224
  * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used
3138
3225
  * as the offset from the end of the collection.
3139
3226
  *
3227
+ * If a property name is provided for `callback` the created "_.pluck" style
3228
+ * callback will return the property value of the given element.
3229
+ *
3230
+ * If an object is provided for `callback` the created "_.where" style callback
3231
+ * will return `true` for elements that have the properties of the given object,
3232
+ * else `false`.
3233
+ *
3140
3234
  * @static
3141
3235
  * @memberOf _
3142
3236
  * @category Arrays
@@ -3179,17 +3273,17 @@
3179
3273
  * @returns {Array} Returns a new range array.
3180
3274
  * @example
3181
3275
  *
3182
- * _.range(10);
3183
- * // => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
3276
+ * _.range(4);
3277
+ * // => [0, 1, 2, 3]
3184
3278
  *
3185
- * _.range(1, 11);
3186
- * // => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
3279
+ * _.range(1, 5);
3280
+ * // => [1, 2, 3, 4]
3187
3281
  *
3188
- * _.range(0, 30, 5);
3189
- * // => [0, 5, 10, 15, 20, 25]
3282
+ * _.range(0, 20, 5);
3283
+ * // => [0, 5, 10, 15]
3190
3284
  *
3191
- * _.range(0, -10, -1);
3192
- * // => [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
3285
+ * _.range(0, -4, -1);
3286
+ * // => [0, -1, -2, -3]
3193
3287
  *
3194
3288
  * _.range(1, 4, 0);
3195
3289
  * // => [1, 1, 1]
@@ -3205,7 +3299,7 @@
3205
3299
  end = start;
3206
3300
  start = 0;
3207
3301
  }
3208
- // use `Array(length)` so engines, like Chakra and V8, avoid slower modes
3302
+ // use `Array(length)` so engines like Chakra and V8 avoid slower modes
3209
3303
  // http://youtu.be/XAqIpGU8ZZk#t=17m25s
3210
3304
  var index = -1,
3211
3305
  length = nativeMax(0, ceil((end - start) / step)),
@@ -3256,24 +3350,19 @@
3256
3350
  * });
3257
3351
  * // => [3]
3258
3352
  *
3259
- * var food = [
3260
- * { 'name': 'banana', 'organic': true },
3261
- * { 'name': 'beet', 'organic': false },
3353
+ * var characters = [
3354
+ * { 'name': 'barney', 'blocked': true, 'employer': 'slate' },
3355
+ * { 'name': 'fred', 'blocked': false, 'employer': 'slate' },
3356
+ * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
3262
3357
  * ];
3263
3358
  *
3264
3359
  * // using "_.pluck" callback shorthand
3265
- * _.rest(food, 'organic');
3266
- * // => [{ 'name': 'beet', 'organic': false }]
3267
- *
3268
- * var food = [
3269
- * { 'name': 'apple', 'type': 'fruit' },
3270
- * { 'name': 'banana', 'type': 'fruit' },
3271
- * { 'name': 'beet', 'type': 'vegetable' }
3272
- * ];
3360
+ * _.pluck(_.rest(characters, 'blocked'), 'name');
3361
+ * // => ['fred', 'pebbles']
3273
3362
  *
3274
3363
  * // using "_.where" callback shorthand
3275
- * _.rest(food, { 'type': 'fruit' });
3276
- * // => [{ 'name': 'beet', 'type': 'vegetable' }]
3364
+ * _.rest(characters, { 'employer': 'slate' });
3365
+ * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]
3277
3366
  */
3278
3367
  function rest(array, callback, thisArg) {
3279
3368
  if (typeof callback != 'number' && callback != null) {
@@ -3288,7 +3377,7 @@
3288
3377
  } else {
3289
3378
  n = (callback == null || thisArg) ? 1 : nativeMax(0, callback);
3290
3379
  }
3291
- return nativeSlice.call(array, n);
3380
+ return slice(array, n);
3292
3381
  }
3293
3382
 
3294
3383
  /**
@@ -3422,7 +3511,7 @@
3422
3511
  // juggle arguments
3423
3512
  if (typeof isSorted != 'boolean' && isSorted != null) {
3424
3513
  thisArg = callback;
3425
- callback = !(thisArg && thisArg[isSorted] === array) ? isSorted : null;
3514
+ callback = (typeof isSorted != 'function' && thisArg && thisArg[isSorted] === array) ? null : isSorted;
3426
3515
  isSorted = false;
3427
3516
  }
3428
3517
  if (callback != null) {
@@ -3447,7 +3536,7 @@
3447
3536
  * // => [2, 3, 4]
3448
3537
  */
3449
3538
  function without(array) {
3450
- return difference(array, nativeSlice.call(arguments, 1));
3539
+ return baseDifference(array, slice(arguments, 1));
3451
3540
  }
3452
3541
 
3453
3542
  /**
@@ -3463,8 +3552,8 @@
3463
3552
  * @returns {Array} Returns a new array of grouped elements.
3464
3553
  * @example
3465
3554
  *
3466
- * _.zip(['moe', 'larry'], [30, 40], [true, false]);
3467
- * // => [['moe', 30, true], ['larry', 40, false]]
3555
+ * _.zip(['fred', 'barney'], [30, 40], [true, false]);
3556
+ * // => [['fred', 30, true], ['barney', 40, false]]
3468
3557
  */
3469
3558
  function zip() {
3470
3559
  var index = -1,
@@ -3492,8 +3581,8 @@
3492
3581
  * corresponding values.
3493
3582
  * @example
3494
3583
  *
3495
- * _.zipObject(['moe', 'larry'], [30, 40]);
3496
- * // => { 'moe': 30, 'larry': 40 }
3584
+ * _.zipObject(['fred', 'barney'], [30, 40]);
3585
+ * // => { 'fred': 30, 'barney': 40 }
3497
3586
  */
3498
3587
  function zipObject(keys, values) {
3499
3588
  var index = -1,
@@ -3566,14 +3655,14 @@
3566
3655
  * return greeting + ' ' + this.name;
3567
3656
  * };
3568
3657
  *
3569
- * func = _.bind(func, { 'name': 'moe' }, 'hi');
3658
+ * func = _.bind(func, { 'name': 'fred' }, 'hi');
3570
3659
  * func();
3571
- * // => 'hi moe'
3660
+ * // => 'hi fred'
3572
3661
  */
3573
3662
  function bind(func, thisArg) {
3574
3663
  return arguments.length > 2
3575
- ? createBound(func, 17, nativeSlice.call(arguments, 2), null, thisArg)
3576
- : createBound(func, 1, null, null, thisArg);
3664
+ ? createWrapper(func, 17, slice(arguments, 2), null, thisArg)
3665
+ : createWrapper(func, 1, null, null, thisArg);
3577
3666
  }
3578
3667
 
3579
3668
  /**
@@ -3607,7 +3696,7 @@
3607
3696
 
3608
3697
  while (++index < length) {
3609
3698
  var key = funcs[index];
3610
- object[key] = createBound(object[key], 1, null, null, object);
3699
+ object[key] = createWrapper(object[key], 1, null, null, object);
3611
3700
  }
3612
3701
  return object;
3613
3702
  }
@@ -3626,7 +3715,7 @@
3626
3715
  * @example
3627
3716
  *
3628
3717
  * var realNameMap = {
3629
- * 'curly': 'jerome'
3718
+ * 'pebbles': 'penelope'
3630
3719
  * };
3631
3720
  *
3632
3721
  * var format = function(name) {
@@ -3639,8 +3728,8 @@
3639
3728
  * };
3640
3729
  *
3641
3730
  * var welcome = _.compose(greet, format);
3642
- * welcome('curly');
3643
- * // => 'Hiya Jerome!'
3731
+ * welcome('pebbles');
3732
+ * // => 'Hiya Penelope!'
3644
3733
  */
3645
3734
  function compose() {
3646
3735
  var funcs = arguments,
@@ -3677,9 +3766,9 @@
3677
3766
  * @returns {Function} Returns a callback function.
3678
3767
  * @example
3679
3768
  *
3680
- * var stooges = [
3681
- * { 'name': 'moe', 'age': 40 },
3682
- * { 'name': 'larry', 'age': 50 }
3769
+ * var characters = [
3770
+ * { 'name': 'barney', 'age': 36 },
3771
+ * { 'name': 'fred', 'age': 40 }
3683
3772
  * ];
3684
3773
  *
3685
3774
  * // wrap to create custom callback shorthands
@@ -3690,8 +3779,8 @@
3690
3779
  * };
3691
3780
  * });
3692
3781
  *
3693
- * _.filter(stooges, 'age__gt45');
3694
- * // => [{ 'name': 'larry', 'age': 50 }]
3782
+ * _.filter(characters, 'age__gt38');
3783
+ * // => [{ 'name': 'fred', 'age': 40 }]
3695
3784
  */
3696
3785
  function createCallback(func, thisArg, argCount) {
3697
3786
  var type = typeof func;
@@ -3792,6 +3881,9 @@
3792
3881
  if (isCalled) {
3793
3882
  lastCalled = now();
3794
3883
  result = func.apply(thisArg, args);
3884
+ if (!timeoutId && !maxTimeoutId) {
3885
+ args = thisArg = null;
3886
+ }
3795
3887
  }
3796
3888
  } else {
3797
3889
  timeoutId = setTimeout(delayed, remaining);
@@ -3806,6 +3898,9 @@
3806
3898
  if (trailing || (maxWait !== wait)) {
3807
3899
  lastCalled = now();
3808
3900
  result = func.apply(thisArg, args);
3901
+ if (!timeoutId && !maxTimeoutId) {
3902
+ args = thisArg = null;
3903
+ }
3809
3904
  }
3810
3905
  };
3811
3906
 
@@ -3821,8 +3916,10 @@
3821
3916
  if (!maxTimeoutId && !leading) {
3822
3917
  lastCalled = stamp;
3823
3918
  }
3824
- var remaining = maxWait - (stamp - lastCalled);
3825
- if (remaining <= 0) {
3919
+ var remaining = maxWait - (stamp - lastCalled),
3920
+ isCalled = remaining <= 0;
3921
+
3922
+ if (isCalled) {
3826
3923
  if (maxTimeoutId) {
3827
3924
  maxTimeoutId = clearTimeout(maxTimeoutId);
3828
3925
  }
@@ -3833,12 +3930,19 @@
3833
3930
  maxTimeoutId = setTimeout(maxDelayed, remaining);
3834
3931
  }
3835
3932
  }
3836
- if (!timeoutId && wait !== maxWait) {
3933
+ if (isCalled && timeoutId) {
3934
+ timeoutId = clearTimeout(timeoutId);
3935
+ }
3936
+ else if (!timeoutId && wait !== maxWait) {
3837
3937
  timeoutId = setTimeout(delayed, wait);
3838
3938
  }
3839
3939
  if (leadingCall) {
3940
+ isCalled = true;
3840
3941
  result = func.apply(thisArg, args);
3841
3942
  }
3943
+ if (isCalled && !timeoutId && !maxTimeoutId) {
3944
+ args = thisArg = null;
3945
+ }
3842
3946
  return result;
3843
3947
  };
3844
3948
  }
@@ -3862,7 +3966,7 @@
3862
3966
  if (!isFunction(func)) {
3863
3967
  throw new TypeError;
3864
3968
  }
3865
- var args = nativeSlice.call(arguments, 1);
3969
+ var args = slice(arguments, 1);
3866
3970
  return setTimeout(function() { func.apply(undefined, args); }, 1);
3867
3971
  }
3868
3972
 
@@ -3887,7 +3991,7 @@
3887
3991
  if (!isFunction(func)) {
3888
3992
  throw new TypeError;
3889
3993
  }
3890
- var args = nativeSlice.call(arguments, 2);
3994
+ var args = slice(arguments, 2);
3891
3995
  return setTimeout(function() { func.apply(undefined, args); }, wait);
3892
3996
  }
3893
3997
 
@@ -3911,19 +4015,22 @@
3911
4015
  * return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
3912
4016
  * });
3913
4017
  *
4018
+ * fibonacci(9)
4019
+ * // => 34
4020
+ *
3914
4021
  * var data = {
3915
- * 'moe': { 'name': 'moe', 'age': 40 },
3916
- * 'curly': { 'name': 'curly', 'age': 60 }
4022
+ * 'fred': { 'name': 'fred', 'age': 40 },
4023
+ * 'pebbles': { 'name': 'pebbles', 'age': 1 }
3917
4024
  * };
3918
4025
  *
3919
4026
  * // modifying the result cache
3920
- * var stooge = _.memoize(function(name) { return data[name]; }, _.identity);
3921
- * stooge('curly');
3922
- * // => { 'name': 'curly', 'age': 60 }
4027
+ * var get = _.memoize(function(name) { return data[name]; }, _.identity);
4028
+ * get('pebbles');
4029
+ * // => { 'name': 'pebbles', 'age': 1 }
3923
4030
  *
3924
- * stooge.cache.curly.name = 'jerome';
3925
- * stooge('curly');
3926
- * // => { 'name': 'jerome', 'age': 60 }
4031
+ * get.cache.pebbles.name = 'penelope';
4032
+ * get('pebbles');
4033
+ * // => { 'name': 'penelope', 'age': 1 }
3927
4034
  */
3928
4035
  function memoize(func, resolver) {
3929
4036
  var cache = {};
@@ -3987,11 +4094,11 @@
3987
4094
  *
3988
4095
  * var greet = function(greeting, name) { return greeting + ' ' + name; };
3989
4096
  * var hi = _.partial(greet, 'hi');
3990
- * hi('moe');
3991
- * // => 'hi moe'
4097
+ * hi('fred');
4098
+ * // => 'hi fred'
3992
4099
  */
3993
4100
  function partial(func) {
3994
- return createBound(func, 16, nativeSlice.call(arguments, 1));
4101
+ return createWrapper(func, 16, slice(arguments, 1));
3995
4102
  }
3996
4103
 
3997
4104
  /**
@@ -4060,22 +4167,15 @@
4060
4167
  * @returns {Function} Returns the new function.
4061
4168
  * @example
4062
4169
  *
4063
- * var hello = function(name) { return 'hello ' + name; };
4064
- * hello = _.wrap(hello, function(func) {
4065
- * return 'before, ' + func('moe') + ', after';
4170
+ * var p = _.wrap(_.escape, function(func, text) {
4171
+ * return '<p>' + func(text) + '</p>';
4066
4172
  * });
4067
- * hello();
4068
- * // => 'before, hello moe, after'
4173
+ *
4174
+ * p('Fred, Wilma, & Pebbles');
4175
+ * // => '<p>Fred, Wilma, &amp; Pebbles</p>'
4069
4176
  */
4070
4177
  function wrap(value, wrapper) {
4071
- if (!isFunction(wrapper)) {
4072
- throw new TypeError;
4073
- }
4074
- return function() {
4075
- var args = [value];
4076
- push.apply(args, arguments);
4077
- return wrapper.apply(this, args);
4078
- };
4178
+ return createWrapper(wrapper, 16, [value]);
4079
4179
  }
4080
4180
 
4081
4181
  /*--------------------------------------------------------------------------*/
@@ -4091,8 +4191,8 @@
4091
4191
  * @returns {string} Returns the escaped string.
4092
4192
  * @example
4093
4193
  *
4094
- * _.escape('Moe, Larry & Curly');
4095
- * // => 'Moe, Larry &amp; Curly'
4194
+ * _.escape('Fred, Wilma, & Pebbles');
4195
+ * // => 'Fred, Wilma, &amp; Pebbles'
4096
4196
  */
4097
4197
  function escape(string) {
4098
4198
  return string == null ? '' : String(string).replace(reUnescapedHtml, escapeHtmlChar);
@@ -4108,8 +4208,8 @@
4108
4208
  * @returns {*} Returns `value`.
4109
4209
  * @example
4110
4210
  *
4111
- * var moe = { 'name': 'moe' };
4112
- * moe === _.identity(moe);
4211
+ * var object = { 'name': 'fred' };
4212
+ * _.identity(object) === object;
4113
4213
  * // => true
4114
4214
  */
4115
4215
  function identity(value) {
@@ -4133,11 +4233,11 @@
4133
4233
  * }
4134
4234
  * });
4135
4235
  *
4136
- * _.capitalize('moe');
4137
- * // => 'Moe'
4236
+ * _.capitalize('fred');
4237
+ * // => 'Fred'
4138
4238
  *
4139
- * _('moe').capitalize();
4140
- * // => 'Moe'
4239
+ * _('fred').capitalize();
4240
+ * // => 'Fred'
4141
4241
  */
4142
4242
  function mixin(object) {
4143
4243
  forEach(functions(object), function(methodName) {
@@ -4172,6 +4272,22 @@
4172
4272
  return this;
4173
4273
  }
4174
4274
 
4275
+ /**
4276
+ * A no-operation function.
4277
+ *
4278
+ * @static
4279
+ * @memberOf _
4280
+ * @category Utilities
4281
+ * @example
4282
+ *
4283
+ * var object = { 'name': 'fred' };
4284
+ * _.noop(object) === undefined;
4285
+ * // => true
4286
+ */
4287
+ function noop() {
4288
+ // no operation performed
4289
+ }
4290
+
4175
4291
  /**
4176
4292
  * Produces a random number between `min` and `max` (inclusive). If only one
4177
4293
  * argument is provided a number between `0` and the given number will be
@@ -4255,7 +4371,7 @@
4255
4371
  * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl
4256
4372
  *
4257
4373
  * For more information on precompiling templates see:
4258
- * http://lodash.com/#custom-builds
4374
+ * http://lodash.com/custom-builds
4259
4375
  *
4260
4376
  * For more information on Chrome extension sandboxes see:
4261
4377
  * http://developer.chrome.com/stable/extensions/sandboxingEval.html
@@ -4278,8 +4394,8 @@
4278
4394
  *
4279
4395
  * // using the "interpolate" delimiter to create a compiled template
4280
4396
  * var compiled = _.template('hello <%= name %>');
4281
- * compiled({ 'name': 'moe' });
4282
- * // => 'hello moe'
4397
+ * compiled({ 'name': 'fred' });
4398
+ * // => 'hello fred'
4283
4399
  *
4284
4400
  * // using the "escape" delimiter to escape HTML in data property values
4285
4401
  * _.template('<b><%- value %></b>', { 'value': '<script>' });
@@ -4287,16 +4403,16 @@
4287
4403
  *
4288
4404
  * // using the "evaluate" delimiter to generate HTML
4289
4405
  * var list = '<% _.forEach(people, function(name) { %><li><%- name %></li><% }); %>';
4290
- * _.template(list, { 'people': ['moe', 'larry'] });
4291
- * // => '<li>moe</li><li>larry</li>'
4406
+ * _.template(list, { 'people': ['fred', 'barney'] });
4407
+ * // => '<li>fred</li><li>barney</li>'
4292
4408
  *
4293
4409
  * // using the ES6 delimiter as an alternative to the default "interpolate" delimiter
4294
- * _.template('hello ${ name }', { 'name': 'curly' });
4295
- * // => 'hello curly'
4410
+ * _.template('hello ${ name }', { 'name': 'pebbles' });
4411
+ * // => 'hello pebbles'
4296
4412
  *
4297
4413
  * // using the internal `print` function in "evaluate" delimiters
4298
- * _.template('<% print("hello " + name); %>!', { 'name': 'larry' });
4299
- * // => 'hello larry!'
4414
+ * _.template('<% print("hello " + name); %>!', { 'name': 'barney' });
4415
+ * // => 'hello barney!'
4300
4416
  *
4301
4417
  * // using a custom template delimiters
4302
4418
  * _.templateSettings = {
@@ -4308,8 +4424,8 @@
4308
4424
  *
4309
4425
  * // using the `imports` option to import jQuery
4310
4426
  * var list = '<% $.each(people, function(name) { %><li><%- name %></li><% }); %>';
4311
- * _.template(list, { 'people': ['moe', 'larry'] }, { 'imports': { '$': jQuery } });
4312
- * // => '<li>moe</li><li>larry</li>'
4427
+ * _.template(list, { 'people': ['fred', 'barney'] }, { 'imports': { '$': jQuery } });
4428
+ * // => '<li>fred</li><li>barney</li>'
4313
4429
  *
4314
4430
  * // using the `sourceURL` option to specify a custom sourceURL for the template
4315
4431
  * var compiled = _.template('hello <%= name %>', null, { 'sourceURL': '/basic/greeting.jst' });
@@ -4337,7 +4453,7 @@
4337
4453
  var _ = lodash,
4338
4454
  settings = _.templateSettings;
4339
4455
 
4340
- text || (text = '');
4456
+ text = String(text || '');
4341
4457
  options = defaults({}, options, settings);
4342
4458
 
4343
4459
  var index = 0,
@@ -4436,8 +4552,8 @@
4436
4552
  * @returns {string} Returns the unescaped string.
4437
4553
  * @example
4438
4554
  *
4439
- * _.unescape('Moe, Larry &amp; Curly');
4440
- * // => 'Moe, Larry & Curly'
4555
+ * _.unescape('Fred, Barney &amp; Pebbles');
4556
+ * // => 'Fred, Barney & Pebbles'
4441
4557
  */
4442
4558
  function unescape(string) {
4443
4559
  return string == null ? '' : String(string).replace(reEscapedHtml, unescapeHtmlChar);
@@ -4477,18 +4593,18 @@
4477
4593
  * @returns {Object} Returns the wrapper object.
4478
4594
  * @example
4479
4595
  *
4480
- * var stooges = [
4481
- * { 'name': 'moe', 'age': 40 },
4482
- * { 'name': 'larry', 'age': 50 },
4483
- * { 'name': 'curly', 'age': 60 }
4596
+ * var characters = [
4597
+ * { 'name': 'barney', 'age': 36 },
4598
+ * { 'name': 'fred', 'age': 40 },
4599
+ * { 'name': 'pebbles', 'age': 1 }
4484
4600
  * ];
4485
4601
  *
4486
- * var youngest = _.chain(stooges)
4602
+ * var youngest = _.chain(characters)
4487
4603
  * .sortBy('age')
4488
- * .map(function(stooge) { return stooge.name + ' is ' + stooge.age; })
4604
+ * .map(function(chr) { return chr.name + ' is ' + chr.age; })
4489
4605
  * .first()
4490
4606
  * .value();
4491
- * // => 'moe is 40'
4607
+ * // => 'pebbles is 1'
4492
4608
  */
4493
4609
  function chain(value) {
4494
4610
  value = new lodashWrapper(value);
@@ -4511,12 +4627,10 @@
4511
4627
  * @example
4512
4628
  *
4513
4629
  * _([1, 2, 3, 4])
4514
- * .filter(function(num) { return num % 2 == 0; })
4515
- * .tap(function(array) { console.log(array); })
4516
- * .map(function(num) { return num * num; })
4630
+ * .tap(function(array) { array.pop(); })
4631
+ * .reverse()
4517
4632
  * .value();
4518
- * // => // [2, 4] (logged)
4519
- * // => [4, 16]
4633
+ * // => [3, 2, 1]
4520
4634
  */
4521
4635
  function tap(value, interceptor) {
4522
4636
  interceptor(value);
@@ -4532,21 +4646,21 @@
4532
4646
  * @returns {*} Returns the wrapper object.
4533
4647
  * @example
4534
4648
  *
4535
- * var stooges = [
4536
- * { 'name': 'moe', 'age': 40 },
4537
- * { 'name': 'larry', 'age': 50 }
4649
+ * var characters = [
4650
+ * { 'name': 'barney', 'age': 36 },
4651
+ * { 'name': 'fred', 'age': 40 }
4538
4652
  * ];
4539
4653
  *
4540
4654
  * // without explicit chaining
4541
- * _(stooges).first();
4542
- * // => { 'name': 'moe', 'age': 40 }
4655
+ * _(characters).first();
4656
+ * // => { 'name': 'barney', 'age': 36 }
4543
4657
  *
4544
4658
  * // with explicit chaining
4545
- * _(stooges).chain()
4659
+ * _(characters).chain()
4546
4660
  * .first()
4547
4661
  * .pick('age')
4548
4662
  * .value()
4549
- * // => { 'age': 40 }
4663
+ * // => { 'age': 36 }
4550
4664
  */
4551
4665
  function wrapperChain() {
4552
4666
  this.__chain__ = true;
@@ -4708,7 +4822,7 @@
4708
4822
  * @memberOf _
4709
4823
  * @type string
4710
4824
  */
4711
- lodash.VERSION = '2.2.1';
4825
+ lodash.VERSION = '2.3.0';
4712
4826
 
4713
4827
  // add "Chaining" functions to the wrapper
4714
4828
  lodash.prototype.chain = wrapperChain;
@@ -4747,7 +4861,7 @@
4747
4861
 
4748
4862
  /*--------------------------------------------------------------------------*/
4749
4863
 
4750
- // some AMD build optimizers, like r.js, check for condition patterns like the following:
4864
+ // some AMD build optimizers like r.js check for condition patterns like the following:
4751
4865
  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {
4752
4866
  // Expose Lo-Dash to the global object even when an AMD loader is present in
4753
4867
  // case Lo-Dash was injected by a third-party script and not intended to be