lodash-rails 3.5.0 → 3.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,92 +1,93 @@
1
1
  /**
2
2
  * @license
3
- * lodash 3.5.0 (Custom Build) lodash.com/license | Underscore.js 1.8.2 underscorejs.org/LICENSE
3
+ * lodash 3.6.0 (Custom Build) lodash.com/license | Underscore.js 1.8.2 underscorejs.org/LICENSE
4
4
  * Build: `lodash compat -o ./lodash.js`
5
5
  */
6
- ;(function(){function n(n,t){if(n!==t){var r=n===n,e=t===t;if(n>t||!r||typeof n=="undefined"&&e)return 1;if(n<t||!e||typeof t=="undefined"&&r)return-1}return 0}function t(n,t,r){if(t!==t)return s(n,r);r-=1;for(var e=n.length;++r<e;)if(n[r]===t)return r;return-1}function r(n){return typeof n=="function"||false}function e(n){return typeof n=="string"?n:null==n?"":n+""}function u(n){return n.charCodeAt(0)}function o(n,t){for(var r=-1,e=n.length;++r<e&&-1<t.indexOf(n.charAt(r)););return r}function i(n,t){for(var r=n.length;r--&&-1<t.indexOf(n.charAt(r)););return r
7
- }function a(t,r){return n(t.a,r.a)||t.b-r.b}function f(n){return Ut[n]}function c(n){return Wt[n]}function l(n){return"\\"+Lt[n]}function s(n,t,r){var e=n.length;for(t+=r?0:-1;r?t--:++t<e;){var u=n[t];if(u!==u)return t}return-1}function p(n){return n&&typeof n=="object"||false}function h(n){return 160>=n&&9<=n&&13>=n||32==n||160==n||5760==n||6158==n||8192<=n&&(8202>=n||8232==n||8233==n||8239==n||8287==n||12288==n||65279==n)}function _(n,t){for(var r=-1,e=n.length,u=-1,o=[];++r<e;)n[r]===t&&(n[r]=$,o[++u]=r);
8
- return o}function g(n){for(var t=-1,r=n.length;++t<r&&h(n.charCodeAt(t)););return t}function v(n){for(var t=n.length;t--&&h(n.charCodeAt(t)););return t}function y(n){return Ft[n]}function d(h){function Ut(n){if(p(n)&&!(Bo(n)||n instanceof Nt)){if(n instanceof Ft)return n;if(zu.call(n,"__chain__")&&zu.call(n,"__wrapped__"))return de(n)}return new Ft(n)}function Wt(){}function Ft(n,t,r){this.__wrapped__=n,this.__actions__=r||[],this.__chain__=!!t}function Nt(n){this.__wrapped__=n,this.__actions__=null,this.__dir__=1,this.__filtered__=false,this.__iteratees__=null,this.__takeCount__=yo,this.__views__=null
9
- }function Lt(){this.__data__={}}function $t(n){var t=n?n.length:0;for(this.data={hash:ao(null),set:new no};t--;)this.push(n[t])}function Pt(n,t){var r=n.data;return(typeof t=="string"||tu(t)?r.set.has(t):r.hash[t])?0:-1}function Bt(n,t){var r=-1,e=n.length;for(t||(t=ju(e));++r<e;)t[r]=n[r];return t}function qt(n,t){for(var r=-1,e=n.length;++r<e&&false!==t(n[r],r,n););return n}function Kt(n,t){for(var r=-1,e=n.length;++r<e;)if(!t(n[r],r,n))return false;return true}function Vt(n,t){for(var r=-1,e=n.length,u=-1,o=[];++r<e;){var i=n[r];
10
- t(i,r,n)&&(o[++u]=i)}return o}function Yt(n,t){for(var r=-1,e=n.length,u=ju(e);++r<e;)u[r]=t(n[r],r,n);return u}function Zt(n){for(var t=-1,r=n.length,e=vo;++t<r;){var u=n[t];u>e&&(e=u)}return e}function Gt(n,t,r,e){var u=-1,o=n.length;for(e&&o&&(r=n[++u]);++u<o;)r=t(r,n[u],u,n);return r}function Jt(n,t,r,e){var u=n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r}function Xt(n,t){for(var r=-1,e=n.length;++r<e;)if(t(n[r],r,n))return true;return false}function Ht(n,t){return typeof n=="undefined"?t:n
11
- }function Qt(n,t,r,e){return typeof n!="undefined"&&zu.call(e,r)?n:t}function nr(n,t,r){var e=Ko(t);if(!r)return rr(t,n,e);for(var u=-1,o=e.length;++u<o;){var i=e[u],a=n[i],f=r(a,t[i],i,n,t);(f===f?f===a:a!==a)&&(typeof a!="undefined"||i in n)||(n[i]=f)}return n}function tr(n,t){for(var r=-1,e=n.length,u=le(e),o=t.length,i=ju(o);++r<o;){var a=t[r];u?(a=parseFloat(a),i[r]=fe(a,e)?n[a]:m):i[r]=n[a]}return i}function rr(n,t,r){r||(r=t,t={});for(var e=-1,u=r.length;++e<u;){var o=r[e];t[o]=n[o]}return t
12
- }function er(n,t,r){var e=typeof n;if("function"==e){if(e=typeof t!="undefined"){var e=Ut.support,u=!(e.funcNames?n.name:e.funcDecomp);if(!u){var o=Pu.call(n);e.funcNames||(u=!yt.test(o)),u||(u=jt.test(o)||ru(n),Ro(n,u))}e=u}n=e?$r(n,t,r):n}else n=null==n?wu:"object"==e?Ar(n):typeof t=="undefined"?Or(n+""):jr(n+"",t);return n}function ur(n,t,r,e,u,o,i){var a;if(r&&(a=u?r(n,e,u):r(n)),typeof a!="undefined")return a;if(!tu(n))return n;if(e=Bo(n)){if(a=oe(n),!t)return Bt(n,a)}else{var f=Mu.call(n),c=f==q;
13
- if(f!=V&&f!=P&&(!c||u))return Ct[f]?ae(n,f,t):u?n:{};if(Dt(n))return u?n:{};if(a=ie(c?{}:n),!t)return rr(n,a,Ko(n))}for(o||(o=[]),i||(i=[]),u=o.length;u--;)if(o[u]==n)return i[u];return o.push(n),i.push(a),(e?qt:vr)(n,function(e,u){a[u]=ur(e,t,r,u,n,o,i)}),a}function or(n,t,r,e){if(typeof n!="function")throw new Uu(L);return to(function(){n.apply(m,Rr(r,e))},t)}function ir(n,r){var e=n?n.length:0,u=[];if(!e)return u;var o=-1,i=ue(),a=i==t,f=a&&200<=r.length?So(r):null,c=r.length;f&&(i=Pt,a=false,r=f);
14
- n:for(;++o<e;)if(f=n[o],a&&f===f){for(var l=c;l--;)if(r[l]===f)continue n;u.push(f)}else 0>i(r,f,0)&&u.push(f);return u}function ar(n,t){var r=n?n.length:0;if(!le(r))return vr(n,t);for(var e=-1,u=ye(n);++e<r&&false!==t(u[e],e,u););return n}function fr(n,t){var r=n?n.length:0;if(!le(r))return yr(n,t);for(var e=ye(n);r--&&false!==t(e[r],r,e););return n}function cr(n,t){var r=true;return ar(n,function(n,e,u){return r=!!t(n,e,u)}),r}function lr(n,t){var r=[];return ar(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r
15
- }function sr(n,t,r,e){var u;return r(n,function(n,r,o){return t(n,r,o)?(u=e?r:n,false):void 0}),u}function pr(n,t,r,e){e-=1;for(var u=n.length,o=-1,i=[];++e<u;){var a=n[e];if(p(a)&&le(a.length)&&(Bo(a)||He(a))){t&&(a=pr(a,t,r,0));var f=-1,c=a.length;for(i.length+=c;++f<c;)i[++o]=a[f]}else r||(i[++o]=a)}return i}function hr(n,t,r){var e=-1,u=ye(n);r=r(n);for(var o=r.length;++e<o;){var i=r[e];if(false===t(u[i],i,u))break}return n}function _r(n,t,r){var e=ye(n);r=r(n);for(var u=r.length;u--;){var o=r[u];if(false===t(e[o],o,e))break
16
- }return n}function gr(n,t){hr(n,t,cu)}function vr(n,t){return hr(n,t,Ko)}function yr(n,t){return _r(n,t,Ko)}function dr(n,t){for(var r=-1,e=t.length,u=-1,o=[];++r<e;){var i=t[r];Do(n[i])&&(o[++u]=i)}return o}function mr(n,t,r){var e=-1,u=typeof t=="function",o=n?n.length:0,i=le(o)?ju(o):[];return ar(n,function(n){var o=u?t:null!=n&&n[t];i[++e]=o?o.apply(n,r):m}),i}function wr(n,t,r,e,u,o){if(n===t)return 0!==n||1/n==1/t;var i=typeof n,a=typeof t;if("function"!=i&&"object"!=i&&"function"!=a&&"object"!=a||null==n||null==t)n=n!==n&&t!==t;
17
- else n:{var i=wr,a=Bo(n),f=Bo(t),c=B,l=B;a||(c=Mu.call(n),c==P?c=V:c!=V&&(a=iu(n))),f||(l=Mu.call(t),l==P?l=V:l!=V&&iu(t));var s=c==V&&!Dt(n),f=l==V&&!Dt(t),l=c==l;if(!l||a||s)if(c=s&&zu.call(n,"__wrapped__"),f=f&&zu.call(t,"__wrapped__"),c||f)n=i(c?n.value():n,f?t.value():t,r,e,u,o);else if(l){for(u||(u=[]),o||(o=[]),c=u.length;c--;)if(u[c]==n){n=o[c]==t;break n}u.push(n),o.push(t),n=(a?Qr:te)(n,t,i,r,e,u,o),u.pop(),o.pop()}else n=false;else n=ne(n,t,c)}return n}function br(n,t,r,e,u){var o=t.length;
18
- if(null==n)return!o;for(var i=-1,a=!u;++i<o;)if(a&&e[i]?r[i]!==n[t[i]]:!zu.call(n,t[i]))return false;for(i=-1;++i<o;){var f=t[i];if(a&&e[i])f=zu.call(n,f);else{var c=n[f],l=r[i],f=u?u(c,l,f):m;typeof f=="undefined"&&(f=wr(l,c,u,true))}if(!f)return false}return true}function xr(n,t){var r=[];return ar(n,function(n,e,u){r.push(t(n,e,u))}),r}function Ar(n){var t=Ko(n),r=t.length;if(1==r){var e=t[0],u=n[e];if(se(u))return function(n){return null!=n&&n[e]===u&&zu.call(n,e)}}for(var o=ju(r),i=ju(r);r--;)u=n[t[r]],o[r]=u,i[r]=se(u);
19
- return function(n){return br(n,t,o,i)}}function jr(n,t){return se(t)?function(r){return null!=r&&r[n]===t}:function(r){return null!=r&&wr(t,r[n],null,true)}}function Er(n,t,r,e,u){if(!tu(n))return n;var o=le(t.length)&&(Bo(t)||iu(t));return(o?qt:vr)(t,function(t,i,a){if(p(t)){e||(e=[]),u||(u=[]);n:{t=e;for(var f=u,c=t.length,l=a[i];c--;)if(t[c]==l){n[i]=f[c],i=void 0;break n}c=n[i],a=r?r(c,l,i,n,a):m;var s=typeof a=="undefined";s&&(a=l,le(l.length)&&(Bo(l)||iu(l))?a=Bo(c)?c:c?Bt(c):[]:Mo(l)||He(l)?a=He(c)?au(c):Mo(c)?c:{}:s=false),t.push(l),f.push(a),s?n[i]=Er(a,l,r,t,f):(a===a?a!==c:c===c)&&(n[i]=a),i=void 0
20
- }return i}f=n[i],a=r?r(f,t,i,n,a):m,(l=typeof a=="undefined")&&(a=t),!o&&typeof a=="undefined"||!l&&(a===a?a===f:f!==f)||(n[i]=a)}),n}function Or(n){return function(t){return null==t?m:t[n]}}function kr(n,t){return n+Ju(go()*(t-n+1))}function Ir(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function Rr(n,t,r){var e=-1,u=n.length;for(t=null==t?0:+t||0,0>t&&(t=-t>u?0:u+t),r=typeof r=="undefined"||r>u?u:+r||0,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=ju(u);++e<u;)r[e]=n[e+t];return r}function Sr(n,t){var r;
21
- return ar(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}function Cr(n,t){var r=n.length;for(n.sort(t);r--;)n[r]=n[r].c;return n}function Tr(t,r,e){var u=-1,o=t.length,i=le(o)?ju(o):[];return ar(t,function(n){for(var t=r.length,e=ju(t);t--;)e[t]=null==n?m:n[r[t]];i[++u]={a:e,b:u,c:n}}),Cr(i,function(t,r){var u;n:{u=-1;for(var o=t.a,i=r.a,a=o.length,f=e.length;++u<a;){var c=n(o[u],i[u]);if(c){u=u<f?c*(e[u]?1:-1):c;break n}}u=t.b-r.b}return u})}function Ur(n,r){var e=-1,u=ue(),o=n.length,i=u==t,a=i&&200<=o,f=a?So():null,c=[];
22
- f?(u=Pt,i=false):(a=false,f=r?[]:c);n:for(;++e<o;){var l=n[e],s=r?r(l,e,n):l;if(i&&l===l){for(var p=f.length;p--;)if(f[p]===s)continue n;r&&f.push(s),c.push(l)}else 0>u(f,s,0)&&((r||a)&&f.push(s),c.push(l))}return c}function Wr(n,t){for(var r=-1,e=t.length,u=ju(e);++r<e;)u[r]=n[t[r]];return u}function Fr(n,t){var r=n;r instanceof Nt&&(r=r.value());for(var e=-1,u=t.length;++e<u;){var r=[r],o=t[e];Hu.apply(r,o.args),r=o.func.apply(o.thisArg,r)}return r}function Nr(n,t,r){var e=0,u=n?n.length:e;if(typeof t=="number"&&t===t&&u<=bo){for(;e<u;){var o=e+u>>>1,i=n[o];
23
- (r?i<=t:i<t)?e=o+1:u=o}return u}return Lr(n,t,wu,r)}function Lr(n,t,r,e){t=r(t);for(var u=0,o=n?n.length:0,i=t!==t,a=typeof t=="undefined";u<o;){var f=Ju((u+o)/2),c=r(n[f]),l=c===c;(i?l||e:a?l&&(e||typeof c!="undefined"):e?c<=t:c<t)?u=f+1:o=f}return so(o,wo)}function $r(n,t,r){if(typeof n!="function")return wu;if(typeof t=="undefined")return n;switch(r){case 1:return function(r){return n.call(t,r)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,o){return n.call(t,r,e,u,o)
24
- };case 5:return function(r,e,u,o,i){return n.call(t,r,e,u,o,i)}}return function(){return n.apply(t,arguments)}}function Pr(n){return Yu.call(n,0)}function Br(n,t,r){for(var e=r.length,u=-1,o=lo(n.length-e,0),i=-1,a=t.length,f=ju(o+a);++i<a;)f[i]=t[i];for(;++u<e;)f[r[u]]=n[u];for(;o--;)f[i++]=n[u++];return f}function zr(n,t,r){for(var e=-1,u=r.length,o=-1,i=lo(n.length-u,0),a=-1,f=t.length,c=ju(i+f);++o<i;)c[o]=n[o];for(i=o;++a<f;)c[i+a]=t[a];for(;++e<u;)c[i+r[e]]=n[o++];return c}function Dr(n,t){return function(r,e,u){var o=t?t():{};
25
- if(e=ee(e,u,3),Bo(r)){u=-1;for(var i=r.length;++u<i;){var a=r[u];n(o,a,e(a,u,r),r)}}else ar(r,function(t,r,u){n(o,t,e(t,r,u),u)});return o}}function Mr(n){return function(){var t=arguments,r=t.length,e=t[0];if(2>r||null==e)return e;var u=t[r-2],o=t[r-1],i=t[3];for(3<r&&typeof u=="function"?(u=$r(u,o,5),r-=2):(u=2<r&&typeof o=="function"?o:null,r-=u?1:0),i&&ce(t[1],t[2],i)&&(u=3==r?null:u,r=2),o=0;++o<r;)(i=t[o])&&n(e,i,u);return e}}function qr(n,t){function r(){return(this&&this!==zt&&this instanceof r?e:n).apply(t,arguments)
26
- }var e=Yr(n);return r}function Kr(n){return function(){var t=arguments.length,r=t,e=n?t-1:0;if(!t)return function(n){return n};for(var u=ju(t);r--;)if(u[r]=arguments[r],"function"!=typeof u[r])throw new Uu(L);return function(){for(var r=e,o=u[r].apply(this,arguments);n?r--:++r<t;)o=u[r].call(this,o);return o}}}function Vr(n){return function(t){var r=-1;t=vu(su(t));for(var e=t.length,u="";++r<e;)u=n(u,t[r],r);return u}}function Yr(n){return function(){var t=Io(n.prototype),r=n.apply(t,arguments);return tu(r)?r:t
27
- }}function Zr(n,t){return function(r,e,o){o&&ce(r,e,o)&&(e=null);var i=ee(),a=null==e;if(i===er&&a||(a=false,e=i(e,o,3)),a){if(e=Bo(r),e||!ou(r))return n(e?r:ve(r));e=u}return re(r,e,t)}}function Gr(n,t,r,e,u,o,i,a,f,c){function l(){for(var A=arguments.length,j=A,E=ju(A);j--;)E[j]=arguments[j];if(e&&(E=Br(E,e,u)),o&&(E=zr(E,o,i)),g||y){var j=l.placeholder,I=_(E,j),A=A-I.length;if(A<c){var R=a?Bt(a):null,A=lo(c-A,0),S=g?I:null,I=g?null:I,C=g?E:null,E=g?null:E;return t|=g?O:k,t&=~(g?k:O),v||(t&=~(b|x)),E=Gr(n,t,r,C,S,E,I,R,f,A),E.placeholder=j,E
28
- }}if(j=p?r:this,h&&(n=j[w]),a)for(R=E.length,A=so(a.length,R),S=Bt(E);A--;)I=a[A],E[A]=fe(I,R)?S[I]:m;return s&&f<E.length&&(E.length=f),(this&&this!==zt&&this instanceof l?d||Yr(n):n).apply(j,E)}var s=t&R,p=t&b,h=t&x,g=t&j,v=t&A,y=t&E,d=!h&&Yr(n),w=n;return l}function Jr(n,t,r){return n=n.length,t=+t,n<t&&fo(t)?(t-=n,r=null==r?" ":r+"",_u(r,Zu(t/r.length)).slice(0,t)):""}function Xr(n,t,r,e){function u(){for(var t=-1,a=arguments.length,f=-1,c=e.length,l=ju(a+c);++f<c;)l[f]=e[f];for(;a--;)l[f++]=arguments[++t];
29
- return(this&&this!==zt&&this instanceof u?i:n).apply(o?r:this,l)}var o=t&b,i=Yr(n);return u}function Hr(n,t,r,e,u,o,i,a){var f=t&x;if(!f&&typeof n!="function")throw new Uu(L);var c=e?e.length:0;if(c||(t&=~(O|k),e=u=null),c-=u?u.length:0,t&k){var l=e,s=u;e=u=null}var p=!f&&Co(n);if(r=[n,t,r,e,u,l,s,o,i,a],p&&true!==p){e=r[1],t=p[1],a=e|t,o=R|I,u=b|x,i=o|u|A|E;var l=e&R&&!(t&R),s=e&I&&!(t&I),h=(s?r:p)[7],g=(l?r:p)[8];o=a>=o&&a<=i&&(e<I||(s||l)&&h.length<=g),(!(e>=I&&t>u||e>u&&t>=I)||o)&&(t&b&&(r[2]=p[2],a|=e&b?0:A),(e=p[3])&&(u=r[3],r[3]=u?Br(u,e,p[4]):Bt(e),r[4]=u?_(r[3],$):Bt(p[4])),(e=p[5])&&(u=r[5],r[5]=u?zr(u,e,p[6]):Bt(e),r[6]=u?_(r[5],$):Bt(p[6])),(e=p[7])&&(r[7]=Bt(e)),t&R&&(r[8]=null==r[8]?p[8]:so(r[8],p[8])),null==r[9]&&(r[9]=p[9]),r[0]=p[0],r[1]=a),t=r[1],a=r[9]
30
- }return r[9]=null==a?f?0:n.length:lo(a-c,0)||0,(p?Ro:To)(t==b?qr(r[0],r[2]):t!=O&&t!=(b|O)||r[4].length?Gr.apply(m,r):Xr.apply(m,r),r)}function Qr(n,t,r,e,u,o,i){var a=-1,f=n.length,c=t.length,l=true;if(f!=c&&(!u||c<=f))return false;for(;l&&++a<f;){var s=n[a],p=t[a],l=m;if(e&&(l=u?e(p,s,a):e(s,p,a)),typeof l=="undefined")if(u)for(var h=c;h--&&(p=t[h],!(l=s&&s===p||r(s,p,e,u,o,i))););else l=s&&s===p||r(s,p,e,u,o,i)}return!!l}function ne(n,t,r){switch(r){case z:case D:return+n==+t;case M:return n.name==t.name&&n.message==t.message;
31
- case K:return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case Y:case Z:return n==t+""}return false}function te(n,t,r,e,u,o,i){var a=Ko(n),f=a.length,c=Ko(t).length;if(f!=c&&!u)return false;for(var l,c=-1;++c<f;){var s=a[c],p=zu.call(t,s);if(p){var h=n[s],_=t[s],p=m;e&&(p=u?e(_,h,s):e(h,_,s)),typeof p=="undefined"&&(p=h&&h===_||r(h,_,e,u,o,i))}if(!p)return false;l||(l="constructor"==s)}return l||(r=n.constructor,e=t.constructor,!(r!=e&&"constructor"in n&&"constructor"in t)||typeof r=="function"&&r instanceof r&&typeof e=="function"&&e instanceof e)?true:false
32
- }function re(n,t,r){var e=r?yo:vo,u=e,o=u;return ar(n,function(n,i,a){i=t(n,i,a),((r?i<u:i>u)||i===e&&i===o)&&(u=i,o=n)}),o}function ee(n,t,r){var e=Ut.callback||du,e=e===du?er:e;return r?e(n,t,r):e}function ue(n,r,e){var u=Ut.indexOf||Ae,u=u===Ae?t:u;return n?u(n,r,e):u}function oe(n){var t=n.length,r=new n.constructor(t);return t&&"string"==typeof n[0]&&zu.call(n,"index")&&(r.index=n.index,r.input=n.input),r}function ie(n){return n=n.constructor,typeof n=="function"&&n instanceof n||(n=Su),new n
33
- }function ae(n,t,r){var e=n.constructor;switch(t){case G:return Pr(n);case z:case D:return new e(+n);case J:case X:case H:case Q:case nt:case tt:case rt:case et:case ut:return e instanceof e&&(e=Eo[t]),t=n.buffer,new e(r?Pr(t):t,n.byteOffset,n.length);case K:case Z:return new e(n);case Y:var u=new e(n.source,vt.exec(n));u.lastIndex=n.lastIndex}return u}function fe(n,t){return n=+n,t=null==t?Ao:t,-1<n&&0==n%1&&n<t}function ce(n,t,r){if(!tu(r))return false;var e=typeof t;return"number"==e?(e=r.length,e=le(e)&&fe(t,e)):e="string"==e&&t in r,e?(t=r[t],n===n?n===t:t!==t):false
34
- }function le(n){return typeof n=="number"&&-1<n&&0==n%1&&n<=Ao}function se(n){return n===n&&(0===n?0<1/n:!tu(n))}function pe(n,t){n=ye(n);for(var r=-1,e=t.length,u={};++r<e;){var o=t[r];o in n&&(u[o]=n[o])}return u}function he(n,t){var r={};return gr(n,function(n,e,u){t(n,e,u)&&(r[e]=n)}),r}function _e(n){var t,r=Ut.support;if(!p(n)||Mu.call(n)!=V||Dt(n)||!(zu.call(n,"constructor")||(t=n.constructor,typeof t!="function"||t instanceof t))||!r.argsTag&&He(n))return false;var e;return r.ownLast?(gr(n,function(n,t,r){return e=zu.call(r,t),false
35
- }),false!==e):(gr(n,function(n,t){e=t}),typeof e=="undefined"||zu.call(n,e))}function ge(n){for(var t=cu(n),r=t.length,e=r&&n.length,u=Ut.support,u=e&&le(e)&&(Bo(n)||u.nonEnumStrings&&ou(n)||u.nonEnumArgs&&He(n)),o=-1,i=[];++o<r;){var a=t[o];(u&&fe(a,e)||zu.call(n,a))&&i.push(a)}return i}function ve(n){return null==n?[]:le(n.length)?Ut.support.unindexedChars&&ou(n)?n.split(""):tu(n)?n:Su(n):lu(n)}function ye(n){if(Ut.support.unindexedChars&&ou(n)){for(var t=-1,r=n.length,e=Su(n);++t<r;)e[t]=n.charAt(t);
36
- return e}return tu(n)?n:Su(n)}function de(n){return n instanceof Nt?n.clone():new Ft(n.__wrapped__,n.__chain__,Bt(n.__actions__))}function me(n,t,r){return n&&n.length?((r?ce(n,t,r):null==t)&&(t=1),Rr(n,0>t?0:t)):[]}function we(n,t,r){var e=n?n.length:0;return e?((r?ce(n,t,r):null==t)&&(t=1),t=e-(+t||0),Rr(n,0,0>t?0:t)):[]}function be(n,t,r){var e=-1,u=n?n.length:0;for(t=ee(t,r,3);++e<u;)if(t(n[e],e,n))return e;return-1}function xe(n){return n?n[0]:m}function Ae(n,r,e){var u=n?n.length:0;if(!u)return-1;
37
- if(typeof e=="number")e=0>e?lo(u+e,0):e;else if(e)return e=Nr(n,r),n=n[e],(r===r?r===n:n!==n)?e:-1;return t(n,r,e||0)}function je(n){var t=n?n.length:0;return t?n[t-1]:m}function Ee(n){return me(n,1)}function Oe(n,r,e,u){if(!n||!n.length)return[];null!=r&&typeof r!="boolean"&&(u=e,e=ce(n,r,u)?null:r,r=false);var o=ee();if((o!==er||null!=e)&&(e=o(e,u,3)),r&&ue()==t){r=e;var i;e=-1,u=n.length;for(var o=-1,a=[];++e<u;){var f=n[e],c=r?r(f,e,n):f;e&&i===c||(i=c,a[++o]=f)}n=a}else n=Ur(n,e);return n}function ke(n){for(var t=-1,r=(n&&n.length&&Zt(Yt(n,Bu)))>>>0,e=ju(r);++t<r;)e[t]=Yt(n,Or(t));
38
- return e}function Ie(n,t){var r=-1,e=n?n.length:0,u={};for(!e||t||Bo(n[0])||(t=[]);++r<e;){var o=n[r];t?u[o]=t[r]:o&&(u[o[0]]=o[1])}return u}function Re(n){return n=Ut(n),n.__chain__=true,n}function Se(n,t,r){return t.call(r,n)}function Ce(n,t,r){var e=Bo(n)?Kt:cr;return(typeof t!="function"||typeof r!="undefined")&&(t=ee(t,r,3)),e(n,t)}function Te(n,t,r){var e=Bo(n)?Vt:lr;return t=ee(t,r,3),e(n,t)}function Ue(n,t,r){return Bo(n)?(t=be(n,t,r),-1<t?n[t]:m):(t=ee(t,r,3),sr(n,t,ar))}function We(n,t,r){return typeof t=="function"&&typeof r=="undefined"&&Bo(n)?qt(n,t):ar(n,$r(t,r,3))
39
- }function Fe(n,t,r){if(typeof t=="function"&&typeof r=="undefined"&&Bo(n))for(r=n.length;r--&&false!==t(n[r],r,n););else n=fr(n,$r(t,r,3));return n}function Ne(n,t,r){var e=n?n.length:0;return le(e)||(n=lu(n),e=n.length),e?(r=typeof r=="number"?0>r?lo(e+r,0):r||0:0,typeof n=="string"||!Bo(n)&&ou(n)?r<e&&-1<n.indexOf(t,r):-1<ue(n,t,r)):false}function Le(n,t,r){var e=Bo(n)?Yt:xr;return t=ee(t,r,3),e(n,t)}function $e(n,t,r,e){return(Bo(n)?Gt:Ir)(n,ee(t,e,4),r,3>arguments.length,ar)}function Pe(n,t,r,e){return(Bo(n)?Jt:Ir)(n,ee(t,e,4),r,3>arguments.length,fr)
40
- }function Be(n,t,r){return(r?ce(n,t,r):null==t)?(n=ve(n),t=n.length,0<t?n[kr(0,t-1)]:m):(n=ze(n),n.length=so(0>t?0:+t||0,n.length),n)}function ze(n){n=ve(n);for(var t=-1,r=n.length,e=ju(r);++t<r;){var u=kr(0,t);t!=u&&(e[t]=e[u]),e[u]=n[t]}return e}function De(n,t,r){var e=Bo(n)?Xt:Sr;return(typeof t!="function"||typeof r!="undefined")&&(t=ee(t,r,3)),e(n,t)}function Me(n,t){var r;if(typeof t!="function"){if(typeof n!="function")throw new Uu(L);var e=n;n=t,t=e}return function(){return 0<--n?r=t.apply(this,arguments):t=null,r
41
- }}function qe(n,t){var r=b;if(2<arguments.length)var e=Rr(arguments,2),u=_(e,qe.placeholder),r=r|O;return Hr(n,r,t,e,u)}function Ke(n,t){var r=b|x;if(2<arguments.length)var e=Rr(arguments,2),u=_(e,Ke.placeholder),r=r|O;return Hr(t,r,n,e,u)}function Ve(n,t,r){return r&&ce(n,t,r)&&(t=null),n=Hr(n,j,null,null,null,null,null,t),n.placeholder=Ve.placeholder,n}function Ye(n,t,r){return r&&ce(n,t,r)&&(t=null),n=Hr(n,E,null,null,null,null,null,t),n.placeholder=Ye.placeholder,n}function Ze(n,t,r){function e(){var r=t-(Lo()-c);
42
- 0>=r||r>t?(a&&Gu(a),r=p,a=s=p=m,r&&(h=Lo(),f=n.apply(l,i),s||a||(i=l=null))):s=to(e,r)}function u(){s&&Gu(s),a=s=p=m,(g||_!==t)&&(h=Lo(),f=n.apply(l,i),s||a||(i=l=null))}function o(){if(i=arguments,c=Lo(),l=this,p=g&&(s||!v),false===_)var r=v&&!s;else{a||v||(h=c);var o=_-(c-h),y=0>=o||o>_;y?(a&&(a=Gu(a)),h=c,f=n.apply(l,i)):a||(a=to(u,o))}return y&&s?s=Gu(s):s||t===_||(s=to(e,t)),r&&(y=true,f=n.apply(l,i)),!y||s||a||(i=l=null),f}var i,a,f,c,l,s,p,h=0,_=false,g=true;if(typeof n!="function")throw new Uu(L);if(t=0>t?0:+t||0,true===r)var v=true,g=false;
43
- else tu(r)&&(v=r.leading,_="maxWait"in r&&lo(+r.maxWait||0,t),g="trailing"in r?r.trailing:g);return o.cancel=function(){s&&Gu(s),a&&Gu(a),a=s=p=m},o}function Ge(n,t){function r(){var e=arguments,u=r.cache,o=t?t.apply(this,e):e[0];return u.has(o)?u.get(o):(e=n.apply(this,e),u.set(o,e),e)}if(typeof n!="function"||t&&typeof t!="function")throw new Uu(L);return r.cache=new Ge.Cache,r}function Je(n){var t=Rr(arguments,1),r=_(t,Je.placeholder);return Hr(n,O,null,t,r)}function Xe(n){var t=Rr(arguments,1),r=_(t,Xe.placeholder);
44
- return Hr(n,k,null,t,r)}function He(n){return le(p(n)?n.length:m)&&Mu.call(n)==P||false}function Qe(n){return n&&1===n.nodeType&&p(n)&&(Ut.support.nodeTag?-1<Mu.call(n).indexOf("Element"):Dt(n))||false}function nu(n){return p(n)&&typeof n.message=="string"&&Mu.call(n)==M||false}function tu(n){var t=typeof n;return"function"==t||n&&"object"==t||false}function ru(n){return null==n?false:Mu.call(n)==q?Ku.test(Pu.call(n)):p(n)&&(Dt(n)?Ku:mt).test(n)||false}function eu(n){return typeof n=="number"||p(n)&&Mu.call(n)==K||false
45
- }function uu(n){return tu(n)&&Mu.call(n)==Y||false}function ou(n){return typeof n=="string"||p(n)&&Mu.call(n)==Z||false}function iu(n){return p(n)&&le(n.length)&&St[Mu.call(n)]||false}function au(n){return rr(n,cu(n))}function fu(n){return dr(n,cu(n))}function cu(n){if(null==n)return[];tu(n)||(n=Su(n));for(var t=n.length,r=Ut.support,t=t&&le(t)&&(Bo(n)||r.nonEnumStrings&&ou(n)||r.nonEnumArgs&&He(n))&&t||0,e=n.constructor,u=-1,e=Do(e)&&e.prototype||Nu,o=e===n,i=ju(t),a=0<t,f=r.enumErrorProps&&(n===Fu||n instanceof Ou),c=r.enumPrototypes&&Do(n);++u<t;)i[u]=u+"";
46
- for(var l in n)c&&"prototype"==l||f&&("message"==l||"name"==l)||a&&fe(l,t)||"constructor"==l&&(o||!zu.call(n,l))||i.push(l);if(r.nonEnumShadows&&n!==Nu)for(t=n===Lu?Z:n===Fu?M:Mu.call(n),r=Oo[t]||Oo[V],t==V&&(e=Nu),t=Rt.length;t--;)l=Rt[t],u=r[l],o&&u||(u?!zu.call(n,l):n[l]===e[l])||i.push(l);return i}function lu(n){return Wr(n,Ko(n))}function su(n){return(n=e(n))&&n.replace(wt,f)}function pu(n){return(n=e(n))&&At.test(n)?n.replace(xt,"\\$&"):n}function hu(n,t,r){return r&&ce(n,t,r)&&(t=0),_o(n,t)
47
- }function _u(n,t){var r="";if(n=e(n),t=+t,1>t||!n||!fo(t))return r;do t%2&&(r+=n),t=Ju(t/2),n+=n;while(t);return r}function gu(n,t,r){var u=n;return(n=e(n))?(r?ce(u,t,r):null==t)?n.slice(g(n),v(n)+1):(t+="",n.slice(o(n,t),i(n,t)+1)):n}function vu(n,t,r){return r&&ce(n,t,r)&&(t=null),n=e(n),n.match(t||Ot)||[]}function yu(){for(var n=arguments[0],t=arguments.length,r=ju(t?t-1:0);0<--t;)r[t-1]=arguments[t];try{return n.apply(m,r)}catch(e){return nu(e)?e:new Ou(e)}}function du(n,t,r){return r&&ce(n,t,r)&&(t=null),p(n)?bu(n):er(n,t)
48
- }function mu(n){return function(){return n}}function wu(n){return n}function bu(n){return Ar(ur(n,true))}function xu(n,t,r){if(null==r){var e=tu(t),u=e&&Ko(t);((u=u&&u.length&&dr(t,u))?u.length:e)||(u=false,r=t,t=n,n=this)}u||(u=dr(t,Ko(t)));var o=true,e=-1,i=Do(n),a=u.length;false===r?o=false:tu(r)&&"chain"in r&&(o=r.chain);for(;++e<a;){r=u[e];var f=t[r];n[r]=f,i&&(n.prototype[r]=function(t){return function(){var r=this.__chain__;if(o||r){var e=n(this.__wrapped__);return(e.__actions__=Bt(this.__actions__)).push({func:t,args:arguments,thisArg:n}),e.__chain__=r,e
49
- }return r=[this.value()],Hu.apply(r,arguments),t.apply(n,r)}}(f))}return n}function Au(){}h=h?Mt.defaults(zt.Object(),h,Mt.pick(zt,It)):zt;var ju=h.Array,Eu=h.Date,Ou=h.Error,ku=h.Function,Iu=h.Math,Ru=h.Number,Su=h.Object,Cu=h.RegExp,Tu=h.String,Uu=h.TypeError,Wu=ju.prototype,Fu=Ou.prototype,Nu=Su.prototype,Lu=Tu.prototype,$u=($u=h.window)&&$u.document,Pu=ku.prototype.toString,Bu=Or("length"),zu=Nu.hasOwnProperty,Du=0,Mu=Nu.toString,qu=h._,Ku=Cu("^"+pu(Mu).replace(/toString|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Vu=ru(Vu=h.ArrayBuffer)&&Vu,Yu=ru(Yu=Vu&&new Vu(0).slice)&&Yu,Zu=Iu.ceil,Gu=h.clearTimeout,Ju=Iu.floor,Xu=ru(Xu=Su.getPrototypeOf)&&Xu,Hu=Wu.push,Qu=Nu.propertyIsEnumerable,no=ru(no=h.Set)&&no,to=h.setTimeout,ro=Wu.splice,eo=ru(eo=h.Uint8Array)&&eo,uo=ru(uo=h.WeakMap)&&uo,oo=function(){try{var n=ru(n=h.Float64Array)&&n,t=new n(new Vu(10),0,1)&&n
50
- }catch(r){}return t}(),io=ru(io=ju.isArray)&&io,ao=ru(ao=Su.create)&&ao,fo=h.isFinite,co=ru(co=Su.keys)&&co,lo=Iu.max,so=Iu.min,po=ru(po=Eu.now)&&po,ho=ru(ho=Ru.isFinite)&&ho,_o=h.parseInt,go=Iu.random,vo=Ru.NEGATIVE_INFINITY,yo=Ru.POSITIVE_INFINITY,mo=Iu.pow(2,32)-1,wo=mo-1,bo=mo>>>1,xo=oo?oo.BYTES_PER_ELEMENT:0,Ao=Iu.pow(2,53)-1,jo=uo&&new uo,Eo={};Eo[J]=h.Float32Array,Eo[X]=h.Float64Array,Eo[H]=h.Int8Array,Eo[Q]=h.Int16Array,Eo[nt]=h.Int32Array,Eo[tt]=h.Uint8Array,Eo[rt]=h.Uint8ClampedArray,Eo[et]=h.Uint16Array,Eo[ut]=h.Uint32Array;
51
- var Oo={};Oo[B]=Oo[D]=Oo[K]={constructor:true,toLocaleString:true,toString:true,valueOf:true},Oo[z]=Oo[Z]={constructor:true,toString:true,valueOf:true},Oo[M]=Oo[q]=Oo[Y]={constructor:true,toString:true},Oo[V]={constructor:true},qt(Rt,function(n){for(var t in Oo)if(zu.call(Oo,t)){var r=Oo[t];r[n]=zu.call(r,n)}});var ko=Ut.support={};!function(n){function t(){this.x=1}var r={0:1,length:1},e=[];t.prototype={valueOf:1,y:1};for(var u in new t)e.push(u);ko.argsTag=Mu.call(arguments)==P,ko.enumErrorProps=Qu.call(Fu,"message")||Qu.call(Fu,"name"),ko.enumPrototypes=Qu.call(t,"prototype"),ko.funcDecomp=!ru(h.WinRTError)&&jt.test(d),ko.funcNames=typeof ku.name=="string",ko.nodeTag=Mu.call($u)!=V,ko.nonEnumStrings=!Qu.call("x",0),ko.nonEnumShadows=!/valueOf/.test(e),ko.ownLast="x"!=e[0],ko.spliceObjects=(ro.call(r,0,1),!r[0]),ko.unindexedChars="xx"!="x"[0]+Su("x")[0];
52
- try{ko.dom=11===$u.createDocumentFragment().nodeType}catch(o){ko.dom=false}try{ko.nonEnumArgs=!Qu.call(arguments,1)}catch(i){ko.nonEnumArgs=true}}(0,0),Ut.templateSettings={escape:pt,evaluate:ht,interpolate:_t,variable:"",imports:{_:Ut}};var Io=function(){function n(){}return function(t){if(tu(t)){n.prototype=t;var r=new n;n.prototype=null}return r||h.Object()}}(),Ro=jo?function(n,t){return jo.set(n,t),n}:wu;Yu||(Pr=Vu&&eo?function(n){var t=n.byteLength,r=oo?Ju(t/xo):0,e=r*xo,u=new Vu(t);if(r){var o=new oo(u,0,r);
53
- o.set(new oo(n,0,r))}return t!=e&&(o=new eo(u,e),o.set(new eo(n,e))),u}:mu(null));var So=ao&&no?function(n){return new $t(n)}:mu(null),Co=jo?function(n){return jo.get(n)}:Au,To=function(){var n=0,t=0;return function(r,e){var u=Lo(),o=U-(u-t);if(t=u,0<o){if(++n>=T)return r}else n=0;return Ro(r,e)}}(),Uo=Dr(function(n,t,r){zu.call(n,r)?++n[r]:n[r]=1}),Wo=Dr(function(n,t,r){zu.call(n,r)?n[r].push(t):n[r]=[t]}),Fo=Dr(function(n,t,r){n[r]=t}),No=Dr(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]
54
- }),Lo=po||function(){return(new Eu).getTime()},$o=Kr(),Po=Kr(true);ko.argsTag||(He=function(n){return le(p(n)?n.length:m)&&zu.call(n,"callee")&&!Qu.call(n,"callee")||false});var Bo=io||function(n){return p(n)&&le(n.length)&&Mu.call(n)==B||false};ko.dom||(Qe=function(n){return n&&1===n.nodeType&&p(n)&&!Mo(n)||false});var zo=ho||function(n){return typeof n=="number"&&fo(n)},Do=r(/x/)||eo&&!r(eo)?function(n){return Mu.call(n)==q}:r,Mo=Xu?function(n){if(!n||Mu.call(n)!=V||!Ut.support.argsTag&&He(n))return false;var t=n.valueOf,r=ru(t)&&(r=Xu(t))&&Xu(r);
55
- return r?n==r||Xu(n)==r:_e(n)}:_e,qo=Mr(nr),Ko=co?function(n){if(n)var t=n.constructor,r=n.length;return typeof t=="function"&&t.prototype===n||(typeof n=="function"?Ut.support.enumPrototypes:r&&le(r))?ge(n):tu(n)?co(n):[]}:ge,Vo=Mr(Er),Yo=Vr(function(n,t,r){return t=t.toLowerCase(),n+(r?t.charAt(0).toUpperCase()+t.slice(1):t)}),Zo=Vr(function(n,t,r){return n+(r?"-":"")+t.toLowerCase()});8!=_o(kt+"08")&&(hu=function(n,t,r){return(r?ce(n,t,r):null==t)?t=0:t&&(t=+t),n=gu(n),_o(n,t||(dt.test(n)?16:10))
56
- });var Go=Vr(function(n,t,r){return n+(r?"_":"")+t.toLowerCase()}),Jo=Vr(function(n,t,r){return n+(r?" ":"")+(t.charAt(0).toUpperCase()+t.slice(1))}),Xo=Zr(Zt),Ho=Zr(function(n){for(var t=-1,r=n.length,e=yo;++t<r;){var u=n[t];u<e&&(e=u)}return e},true);return Ut.prototype=Wt.prototype,Ft.prototype=Io(Wt.prototype),Ft.prototype.constructor=Ft,Nt.prototype=Io(Wt.prototype),Nt.prototype.constructor=Nt,Lt.prototype["delete"]=function(n){return this.has(n)&&delete this.__data__[n]},Lt.prototype.get=function(n){return"__proto__"==n?m:this.__data__[n]
57
- },Lt.prototype.has=function(n){return"__proto__"!=n&&zu.call(this.__data__,n)},Lt.prototype.set=function(n,t){return"__proto__"!=n&&(this.__data__[n]=t),this},$t.prototype.push=function(n){var t=this.data;typeof n=="string"||tu(n)?t.set.add(n):t.hash[n]=true},Ge.Cache=Lt,Ut.after=function(n,t){if(typeof t!="function"){if(typeof n!="function")throw new Uu(L);var r=n;n=t,t=r}return n=fo(n=+n)?n:0,function(){return 1>--n?t.apply(this,arguments):void 0}},Ut.ary=function(n,t,r){return r&&ce(n,t,r)&&(t=null),t=n&&null==t?n.length:lo(+t||0,0),Hr(n,R,null,null,null,null,t)
58
- },Ut.assign=qo,Ut.at=function(n){return le(n?n.length:0)&&(n=ve(n)),tr(n,pr(arguments,false,false,1))},Ut.before=Me,Ut.bind=qe,Ut.bindAll=function(n){for(var t=n,r=1<arguments.length?pr(arguments,false,false,1):fu(n),e=-1,u=r.length;++e<u;){var o=r[e];t[o]=Hr(t[o],b,t)}return t},Ut.bindKey=Ke,Ut.callback=du,Ut.chain=Re,Ut.chunk=function(n,t,r){t=(r?ce(n,t,r):null==t)?1:lo(+t||1,1),r=0;for(var e=n?n.length:0,u=-1,o=ju(Zu(e/t));r<e;)o[++u]=Rr(n,r,r+=t);return o},Ut.compact=function(n){for(var t=-1,r=n?n.length:0,e=-1,u=[];++t<r;){var o=n[t];
59
- o&&(u[++e]=o)}return u},Ut.constant=mu,Ut.countBy=Uo,Ut.create=function(n,t,r){var e=Io(n);return r&&ce(n,t,r)&&(t=null),t?rr(t,e,Ko(t)):e},Ut.curry=Ve,Ut.curryRight=Ye,Ut.debounce=Ze,Ut.defaults=function(n){if(null==n)return n;var t=Bt(arguments);return t.push(Ht),qo.apply(m,t)},Ut.defer=function(n){return or(n,1,arguments,1)},Ut.delay=function(n,t){return or(n,t,arguments,2)},Ut.difference=function(){for(var n=arguments,t=-1,r=n.length;++t<r;){var e=n[t];if(Bo(e)||He(e))break}return ir(e,pr(n,false,true,++t))
60
- },Ut.drop=me,Ut.dropRight=we,Ut.dropRightWhile=function(n,t,r){var e=n?n.length:0;if(!e)return[];for(t=ee(t,r,3);e--&&t(n[e],e,n););return Rr(n,0,e+1)},Ut.dropWhile=function(n,t,r){var e=n?n.length:0;if(!e)return[];var u=-1;for(t=ee(t,r,3);++u<e&&t(n[u],u,n););return Rr(n,u)},Ut.fill=function(n,t,r,e){var u=n?n.length:0;if(!u)return[];for(r&&typeof r!="number"&&ce(n,t,r)&&(r=0,e=u),u=n.length,r=null==r?0:+r||0,0>r&&(r=-r>u?0:u+r),e=typeof e=="undefined"||e>u?u:+e||0,0>e&&(e+=u),u=r>e?0:e>>>0,r>>>=0;r<u;)n[r++]=t;
61
- return n},Ut.filter=Te,Ut.flatten=function(n,t,r){var e=n?n.length:0;return r&&ce(n,t,r)&&(t=false),e?pr(n,t,false,0):[]},Ut.flattenDeep=function(n){return n&&n.length?pr(n,true,false,0):[]},Ut.flow=$o,Ut.flowRight=Po,Ut.forEach=We,Ut.forEachRight=Fe,Ut.forIn=function(n,t,r){return(typeof t!="function"||typeof r!="undefined")&&(t=$r(t,r,3)),hr(n,t,cu)},Ut.forInRight=function(n,t,r){return t=$r(t,r,3),_r(n,t,cu)},Ut.forOwn=function(n,t,r){return(typeof t!="function"||typeof r!="undefined")&&(t=$r(t,r,3)),vr(n,t)
62
- },Ut.forOwnRight=function(n,t,r){return t=$r(t,r,3),_r(n,t,Ko)},Ut.functions=fu,Ut.groupBy=Wo,Ut.indexBy=Fo,Ut.initial=function(n){return we(n,1)},Ut.intersection=function(){for(var n=[],r=-1,e=arguments.length,u=[],o=ue(),i=o==t;++r<e;){var a=arguments[r];(Bo(a)||He(a))&&(n.push(a),u.push(i&&120<=a.length?So(r&&a):null))}var e=n.length,i=n[0],f=-1,c=i?i.length:0,l=[],s=u[0];n:for(;++f<c;)if(a=i[f],0>(s?Pt(s,a):o(l,a,0))){for(r=e;--r;){var p=u[r];if(0>(p?Pt(p,a):o(n[r],a,0)))continue n}s&&s.push(a),l.push(a)
63
- }return l},Ut.invert=function(n,t,r){r&&ce(n,t,r)&&(t=null),r=-1;for(var e=Ko(n),u=e.length,o={};++r<u;){var i=e[r],a=n[i];t?zu.call(o,a)?o[a].push(i):o[a]=[i]:o[a]=i}return o},Ut.invoke=function(n,t){return mr(n,t,Rr(arguments,2))},Ut.keys=Ko,Ut.keysIn=cu,Ut.map=Le,Ut.mapValues=function(n,t,r){var e={};return t=ee(t,r,3),vr(n,function(n,r,u){e[r]=t(n,r,u)}),e},Ut.matches=bu,Ut.matchesProperty=function(n,t){return jr(n+"",ur(t,true))},Ut.memoize=Ge,Ut.merge=Vo,Ut.mixin=xu,Ut.negate=function(n){if(typeof n!="function")throw new Uu(L);
64
- return function(){return!n.apply(this,arguments)}},Ut.omit=function(n,t,r){if(null==n)return{};if(typeof t!="function"){var e=Yt(pr(arguments,false,false,1),Tu);return pe(n,ir(cu(n),e))}return t=$r(t,r,3),he(n,function(n,r,e){return!t(n,r,e)})},Ut.once=function(n){return Me(n,2)},Ut.pairs=function(n){for(var t=-1,r=Ko(n),e=r.length,u=ju(e);++t<e;){var o=r[t];u[t]=[o,n[o]]}return u},Ut.partial=Je,Ut.partialRight=Xe,Ut.partition=No,Ut.pick=function(n,t,r){return null==n?{}:typeof t=="function"?he(n,$r(t,r,3)):pe(n,pr(arguments,false,false,1))
65
- },Ut.pluck=function(n,t){return Le(n,Or(t))},Ut.property=function(n){return Or(n+"")},Ut.propertyOf=function(n){return function(t){return null==n?m:n[t]}},Ut.pull=function(){var n=arguments,t=n[0];if(!t||!t.length)return t;for(var r=0,e=ue(),u=n.length;++r<u;)for(var o=0,i=n[r];-1<(o=e(t,i,o));)ro.call(t,o,1);return t},Ut.pullAt=function(t){var r=t||[],e=pr(arguments,false,false,1),u=e.length,o=tr(r,e);for(e.sort(n);u--;){var i=parseFloat(e[u]);if(i!=a&&fe(i)){var a=i;ro.call(r,i,1)}}return o},Ut.range=function(n,t,r){r&&ce(n,t,r)&&(t=r=null),n=+n||0,r=null==r?1:+r||0,null==t?(t=n,n=0):t=+t||0;
66
- var e=-1;t=lo(Zu((t-n)/(r||1)),0);for(var u=ju(t);++e<t;)u[e]=n,n+=r;return u},Ut.rearg=function(n){var t=pr(arguments,false,false,1);return Hr(n,I,null,null,null,t)},Ut.reject=function(n,t,r){var e=Bo(n)?Vt:lr;return t=ee(t,r,3),e(n,function(n,r,e){return!t(n,r,e)})},Ut.remove=function(n,t,r){var e=-1,u=n?n.length:0,o=[];for(t=ee(t,r,3);++e<u;)r=n[e],t(r,e,n)&&(o.push(r),ro.call(n,e--,1),u--);return o},Ut.rest=Ee,Ut.shuffle=ze,Ut.slice=function(n,t,r){var e=n?n.length:0;return e?(r&&typeof r!="number"&&ce(n,t,r)&&(t=0,r=e),Rr(n,t,r)):[]
67
- },Ut.sortBy=function(n,t,r){if(null==n)return[];var e=-1,u=n.length,o=le(u)?ju(u):[];return r&&ce(n,t,r)&&(t=null),t=ee(t,r,3),ar(n,function(n,r,u){o[++e]={a:t(n,r,u),b:e,c:n}}),Cr(o,a)},Ut.sortByAll=function(n){if(null==n)return[];var t=arguments,r=t[3];return r&&ce(t[1],t[2],r)&&(t=[n,t[1]]),Tr(n,pr(t,false,false,1),[])},Ut.sortByOrder=function(n,t,r,e){return null==n?[]:(e&&ce(t,r,e)&&(r=null),Bo(t)||(t=null==t?[]:[t]),Bo(r)||(r=null==r?[]:[r]),Tr(n,t,r))},Ut.spread=function(n){if(typeof n!="function")throw new Uu(L);
68
- return function(t){return n.apply(this,t)}},Ut.take=function(n,t,r){return n&&n.length?((r?ce(n,t,r):null==t)&&(t=1),Rr(n,0,0>t?0:t)):[]},Ut.takeRight=function(n,t,r){var e=n?n.length:0;return e?((r?ce(n,t,r):null==t)&&(t=1),t=e-(+t||0),Rr(n,0>t?0:t)):[]},Ut.takeRightWhile=function(n,t,r){var e=n?n.length:0;if(!e)return[];for(t=ee(t,r,3);e--&&t(n[e],e,n););return Rr(n,e+1)},Ut.takeWhile=function(n,t,r){var e=n?n.length:0;if(!e)return[];var u=-1;for(t=ee(t,r,3);++u<e&&t(n[u],u,n););return Rr(n,0,u)
69
- },Ut.tap=function(n,t,r){return t.call(r,n),n},Ut.throttle=function(n,t,r){var e=true,u=true;if(typeof n!="function")throw new Uu(L);return false===r?e=false:tu(r)&&(e="leading"in r?!!r.leading:e,u="trailing"in r?!!r.trailing:u),Tt.leading=e,Tt.maxWait=+t,Tt.trailing=u,Ze(n,t,Tt)},Ut.thru=Se,Ut.times=function(n,t,r){if(n=+n,1>n||!fo(n))return[];var e=-1,u=ju(so(n,mo));for(t=$r(t,r,1);++e<n;)e<mo?u[e]=t(e):t(e);return u},Ut.toArray=function(n){var t=n?n.length:0;return le(t)?t?Ut.support.unindexedChars&&ou(n)?n.split(""):Bt(n):[]:lu(n)
70
- },Ut.toPlainObject=au,Ut.transform=function(n,t,r,e){var u=Bo(n)||iu(n);return t=ee(t,e,4),null==r&&(u||tu(n)?(e=n.constructor,r=u?Bo(n)?new e:[]:Io(Do(e)&&e.prototype)):r={}),(u?qt:vr)(n,function(n,e,u){return t(r,n,e,u)}),r},Ut.union=function(){return Ur(pr(arguments,false,true,0))},Ut.uniq=Oe,Ut.unzip=ke,Ut.values=lu,Ut.valuesIn=function(n){return Wr(n,cu(n))},Ut.where=function(n,t){return Te(n,Ar(t))},Ut.without=function(n){return ir(n,Rr(arguments,1))},Ut.wrap=function(n,t){return t=null==t?wu:t,Hr(t,O,null,[n],[])
71
- },Ut.xor=function(){for(var n=-1,t=arguments.length;++n<t;){var r=arguments[n];if(Bo(r)||He(r))var e=e?ir(e,r).concat(ir(r,e)):r}return e?Ur(e):[]},Ut.zip=function(){for(var n=arguments.length,t=ju(n);n--;)t[n]=arguments[n];return ke(t)},Ut.zipObject=Ie,Ut.backflow=Po,Ut.collect=Le,Ut.compose=Po,Ut.each=We,Ut.eachRight=Fe,Ut.extend=qo,Ut.iteratee=du,Ut.methods=fu,Ut.object=Ie,Ut.select=Te,Ut.tail=Ee,Ut.unique=Oe,xu(Ut,Ut),Ut.add=function(n,t){return n+t},Ut.attempt=yu,Ut.camelCase=Yo,Ut.capitalize=function(n){return(n=e(n))&&n.charAt(0).toUpperCase()+n.slice(1)
72
- },Ut.clone=function(n,t,r,e){return t&&typeof t!="boolean"&&ce(n,t,r)?t=false:typeof t=="function"&&(e=r,r=t,t=false),r=typeof r=="function"&&$r(r,e,1),ur(n,t,r)},Ut.cloneDeep=function(n,t,r){return t=typeof t=="function"&&$r(t,r,1),ur(n,true,t)},Ut.deburr=su,Ut.endsWith=function(n,t,r){n=e(n),t+="";var u=n.length;return r=typeof r=="undefined"?u:so(0>r?0:+r||0,u),r-=t.length,0<=r&&n.indexOf(t,r)==r},Ut.escape=function(n){return(n=e(n))&&st.test(n)?n.replace(ct,c):n},Ut.escapeRegExp=pu,Ut.every=Ce,Ut.find=Ue,Ut.findIndex=be,Ut.findKey=function(n,t,r){return t=ee(t,r,3),sr(n,t,vr,true)
73
- },Ut.findLast=function(n,t,r){return t=ee(t,r,3),sr(n,t,fr)},Ut.findLastIndex=function(n,t,r){var e=n?n.length:0;for(t=ee(t,r,3);e--;)if(t(n[e],e,n))return e;return-1},Ut.findLastKey=function(n,t,r){return t=ee(t,r,3),sr(n,t,yr,true)},Ut.findWhere=function(n,t){return Ue(n,Ar(t))},Ut.first=xe,Ut.has=function(n,t){return n?zu.call(n,t):false},Ut.identity=wu,Ut.includes=Ne,Ut.indexOf=Ae,Ut.inRange=function(n,t,r){return t=+t||0,"undefined"===typeof r?(r=t,t=0):r=+r||0,n>=t&&n<r},Ut.isArguments=He,Ut.isArray=Bo,Ut.isBoolean=function(n){return true===n||false===n||p(n)&&Mu.call(n)==z||false
74
- },Ut.isDate=function(n){return p(n)&&Mu.call(n)==D||false},Ut.isElement=Qe,Ut.isEmpty=function(n){if(null==n)return true;var t=n.length;return le(t)&&(Bo(n)||ou(n)||He(n)||p(n)&&Do(n.splice))?!t:!Ko(n).length},Ut.isEqual=function(n,t,r,e){return r=typeof r=="function"&&$r(r,e,3),!r&&se(n)&&se(t)?n===t:(e=r?r(n,t):m,typeof e=="undefined"?wr(n,t,r):!!e)},Ut.isError=nu,Ut.isFinite=zo,Ut.isFunction=Do,Ut.isMatch=function(n,t,r,e){var u=Ko(t),o=u.length;if(r=typeof r=="function"&&$r(r,e,3),!r&&1==o){var i=u[0];
75
- if(e=t[i],se(e))return null!=n&&e===n[i]&&zu.call(n,i)}for(var i=ju(o),a=ju(o);o--;)e=i[o]=t[u[o]],a[o]=se(e);return br(n,u,i,a,r)},Ut.isNaN=function(n){return eu(n)&&n!=+n},Ut.isNative=ru,Ut.isNull=function(n){return null===n},Ut.isNumber=eu,Ut.isObject=tu,Ut.isPlainObject=Mo,Ut.isRegExp=uu,Ut.isString=ou,Ut.isTypedArray=iu,Ut.isUndefined=function(n){return typeof n=="undefined"},Ut.kebabCase=Zo,Ut.last=je,Ut.lastIndexOf=function(n,t,r){var e=n?n.length:0;if(!e)return-1;var u=e;if(typeof r=="number")u=(0>r?lo(e+r,0):so(r||0,e-1))+1;
76
- else if(r)return u=Nr(n,t,true)-1,n=n[u],(t===t?t===n:n!==n)?u:-1;if(t!==t)return s(n,u,true);for(;u--;)if(n[u]===t)return u;return-1},Ut.max=Xo,Ut.min=Ho,Ut.noConflict=function(){return h._=qu,this},Ut.noop=Au,Ut.now=Lo,Ut.pad=function(n,t,r){n=e(n),t=+t;var u=n.length;return u<t&&fo(t)?(u=(t-u)/2,t=Ju(u),u=Zu(u),r=Jr("",u,r),r.slice(0,t)+n+r):n},Ut.padLeft=function(n,t,r){return(n=e(n))&&Jr(n,t,r)+n},Ut.padRight=function(n,t,r){return(n=e(n))&&n+Jr(n,t,r)},Ut.parseInt=hu,Ut.random=function(n,t,r){r&&ce(n,t,r)&&(t=r=null);
77
- var e=null==n,u=null==t;return null==r&&(u&&typeof n=="boolean"?(r=n,n=1):typeof t=="boolean"&&(r=t,u=true)),e&&u&&(t=1,u=false),n=+n||0,u?(t=n,n=0):t=+t||0,r||n%1||t%1?(r=go(),so(n+r*(t-n+parseFloat("1e-"+((r+"").length-1))),t)):kr(n,t)},Ut.reduce=$e,Ut.reduceRight=Pe,Ut.repeat=_u,Ut.result=function(n,t,r){return t=null==n?m:n[t],typeof t=="undefined"&&(t=r),Do(t)?t.call(n):t},Ut.runInContext=d,Ut.size=function(n){var t=n?n.length:0;return le(t)?t:Ko(n).length},Ut.snakeCase=Go,Ut.some=De,Ut.sortedIndex=function(n,t,r,e){var u=ee(r);
78
- return u===er&&null==r?Nr(n,t):Lr(n,t,u(r,e,1))},Ut.sortedLastIndex=function(n,t,r,e){var u=ee(r);return u===er&&null==r?Nr(n,t,true):Lr(n,t,u(r,e,1),true)},Ut.startCase=Jo,Ut.startsWith=function(n,t,r){return n=e(n),r=null==r?0:so(0>r?0:+r||0,n.length),n.lastIndexOf(t,r)==r},Ut.sum=function(n){Bo(n)||(n=ve(n));for(var t=n.length,r=0;t--;)r+=+n[t]||0;return r},Ut.template=function(n,t,r){var u=Ut.templateSettings;r&&ce(n,t,r)&&(t=r=null),n=e(n),t=nr(nr({},r||t),u,Qt),r=nr(nr({},t.imports),u.imports,Qt);
79
- var o,i,a=Ko(r),f=Wr(r,a),c=0;r=t.interpolate||bt;var s="__p+='";r=Cu((t.escape||bt).source+"|"+r.source+"|"+(r===_t?gt:bt).source+"|"+(t.evaluate||bt).source+"|$","g");var p="sourceURL"in t?"//# sourceURL="+t.sourceURL+"\n":"";if(n.replace(r,function(t,r,e,u,a,f){return e||(e=u),s+=n.slice(c,f).replace(Et,l),r&&(o=true,s+="'+__e("+r+")+'"),a&&(i=true,s+="';"+a+";\n__p+='"),e&&(s+="'+((__t=("+e+"))==null?'':__t)+'"),c=f+t.length,t}),s+="';",(t=t.variable)||(s="with(obj){"+s+"}"),s=(i?s.replace(ot,""):s).replace(it,"$1").replace(at,"$1;"),s="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(o?",__e=_.escape":"")+(i?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+s+"return __p}",t=yu(function(){return ku(a,p+"return "+s).apply(m,f)
80
- }),t.source=s,nu(t))throw t;return t},Ut.trim=gu,Ut.trimLeft=function(n,t,r){var u=n;return(n=e(n))?n.slice((r?ce(u,t,r):null==t)?g(n):o(n,t+"")):n},Ut.trimRight=function(n,t,r){var u=n;return(n=e(n))?(r?ce(u,t,r):null==t)?n.slice(0,v(n)+1):n.slice(0,i(n,t+"")+1):n},Ut.trunc=function(n,t,r){r&&ce(n,t,r)&&(t=null);var u=S;if(r=C,null!=t)if(tu(t)){var o="separator"in t?t.separator:o,u="length"in t?+t.length||0:u;r="omission"in t?e(t.omission):r}else u=+t||0;if(n=e(n),u>=n.length)return n;if(u-=r.length,1>u)return r;
81
- if(t=n.slice(0,u),null==o)return t+r;if(uu(o)){if(n.slice(u).search(o)){var i,a=n.slice(0,u);for(o.global||(o=Cu(o.source,(vt.exec(o)||"")+"g")),o.lastIndex=0;n=o.exec(a);)i=n.index;t=t.slice(0,null==i?u:i)}}else n.indexOf(o,u)!=u&&(o=t.lastIndexOf(o),-1<o&&(t=t.slice(0,o)));return t+r},Ut.unescape=function(n){return(n=e(n))&&lt.test(n)?n.replace(ft,y):n},Ut.uniqueId=function(n){var t=++Du;return e(n)+t},Ut.words=vu,Ut.all=Ce,Ut.any=De,Ut.contains=Ne,Ut.detect=Ue,Ut.foldl=$e,Ut.foldr=Pe,Ut.head=xe,Ut.include=Ne,Ut.inject=$e,xu(Ut,function(){var n={};
82
- return vr(Ut,function(t,r){Ut.prototype[r]||(n[r]=t)}),n}(),false),Ut.sample=Be,Ut.prototype.sample=function(n){return this.__chain__||null!=n?this.thru(function(t){return Be(t,n)}):Be(this.value())},Ut.VERSION=w,qt("bind bindKey curry curryRight partial partialRight".split(" "),function(n){Ut[n].placeholder=Ut}),qt(["dropWhile","filter","map","takeWhile"],function(n,t){var r=t!=N,e=t==W;Nt.prototype[n]=function(n,u){var o=this.__filtered__,i=o&&e?new Nt(this):this.clone();return(i.__iteratees__||(i.__iteratees__=[])).push({done:false,count:0,index:0,iteratee:ee(n,u,1),limit:-1,type:t}),i.__filtered__=o||r,i
83
- }}),qt(["drop","take"],function(n,t){var r=n+"While";Nt.prototype[n]=function(r){var e=this.__filtered__,u=e&&!t?this.dropWhile():this.clone();return r=null==r?1:lo(Ju(r)||0,0),e?t?u.__takeCount__=so(u.__takeCount__,r):je(u.__iteratees__).limit=r:(u.__views__||(u.__views__=[])).push({size:r,type:n+(0>u.__dir__?"Right":"")}),u},Nt.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()},Nt.prototype[n+"RightWhile"]=function(n,t){return this.reverse()[r](n,t).reverse()}}),qt(["first","last"],function(n,t){var r="take"+(t?"Right":"");
84
- Nt.prototype[n]=function(){return this[r](1).value()[0]}}),qt(["initial","rest"],function(n,t){var r="drop"+(t?"":"Right");Nt.prototype[n]=function(){return this[r](1)}}),qt(["pluck","where"],function(n,t){var r=t?"filter":"map",e=t?Ar:Or;Nt.prototype[n]=function(n){return this[r](e(n))}}),Nt.prototype.compact=function(){return this.filter(wu)},Nt.prototype.reject=function(n,t){return n=ee(n,t,1),this.filter(function(t){return!n(t)})},Nt.prototype.slice=function(n,t){n=null==n?0:+n||0;var r=0>n?this.takeRight(-n):this.drop(n);
85
- return typeof t!="undefined"&&(t=+t||0,r=0>t?r.dropRight(-t):r.take(t-n)),r},Nt.prototype.toArray=function(){return this.drop(0)},vr(Nt.prototype,function(n,t){var r=Ut[t],e=/^(?:filter|map|reject)|While$/.test(t),u=/^(?:first|last)$/.test(t);Ut.prototype[t]=function(){function t(n){return n=[n],Hu.apply(n,o),r.apply(Ut,n)}var o=arguments,i=this.__chain__,a=this.__wrapped__,f=!!this.__actions__.length,c=a instanceof Nt,l=o[0],s=c||Bo(a);return s&&e&&typeof l=="function"&&1!=l.length&&(c=s=false),c=c&&!f,u&&!i?c?n.call(a):r.call(Ut,this.value()):s?(a=n.apply(c?a:new Nt(this),o),u||!f&&!a.__actions__||(a.__actions__||(a.__actions__=[])).push({func:Se,args:[t],thisArg:Ut}),new Ft(a,i)):this.thru(t)
86
- }}),qt("concat join pop push replace shift sort splice split unshift".split(" "),function(n){var t=(/^(?:replace|split)$/.test(n)?Lu:Wu)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:join|pop|replace|shift)$/.test(n),u=ko.spliceObjects||!/^(?:pop|shift|splice)$/.test(n)?t:function(){var n=t.apply(this,arguments);return 0===this.length&&delete this[0],n};Ut.prototype[n]=function(){var n=arguments;return e&&!this.__chain__?u.apply(this.value(),n):this[r](function(t){return u.apply(t,n)
87
- })}}),Nt.prototype.clone=function(){var n=this.__actions__,t=this.__iteratees__,r=this.__views__,e=new Nt(this.__wrapped__);return e.__actions__=n?Bt(n):null,e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=t?Bt(t):null,e.__takeCount__=this.__takeCount__,e.__views__=r?Bt(r):null,e},Nt.prototype.reverse=function(){if(this.__filtered__){var n=new Nt(this);n.__dir__=-1,n.__filtered__=true}else n=this.clone(),n.__dir__*=-1;return n},Nt.prototype.value=function(){var n=this.__wrapped__.value();
88
- if(!Bo(n))return Fr(n,this.__actions__);var t,r=this.__dir__,e=0>r;t=n.length;for(var u=this.__views__,o=0,i=-1,a=u?u.length:0;++i<a;){var f=u[i],c=f.size;switch(f.type){case"drop":o+=c;break;case"dropRight":t-=c;break;case"take":t=so(t,o+c);break;case"takeRight":o=lo(o,t-c)}}t={start:o,end:t},u=t.start,o=t.end,t=o-u,u=e?o:u-1,o=so(t,this.__takeCount__),a=(i=this.__iteratees__)?i.length:0,f=0,c=[];n:for(;t--&&f<o;){for(var u=u+r,l=-1,s=n[u];++l<a;){var p=i[l],h=p.iteratee,_=p.type;if(_==W){if(p.done&&(e?u>p.index:u<p.index)&&(p.count=0,p.done=false),p.index=u,!(p.done||(_=p.limit,p.done=-1<_?p.count++>=_:!h(s))))continue n
89
- }else if(p=h(s),_==N)s=p;else if(!p){if(_==F)continue n;break n}}c[f++]=s}return c},Ut.prototype.chain=function(){return Re(this)},Ut.prototype.commit=function(){return new Ft(this.value(),this.__chain__)},Ut.prototype.plant=function(n){for(var t,r=this;r instanceof Wt;){var e=de(r);t?u.__wrapped__=e:t=e;var u=e,r=r.__wrapped__}return u.__wrapped__=n,t},Ut.prototype.reverse=function(){var n=this.__wrapped__;return n instanceof Nt?(this.__actions__.length&&(n=new Nt(this)),new Ft(n.reverse(),this.__chain__)):this.thru(function(n){return n.reverse()
90
- })},Ut.prototype.toString=function(){return this.value()+""},Ut.prototype.run=Ut.prototype.toJSON=Ut.prototype.valueOf=Ut.prototype.value=function(){return Fr(this.__wrapped__,this.__actions__)},Ut.prototype.collect=Ut.prototype.map,Ut.prototype.head=Ut.prototype.first,Ut.prototype.select=Ut.prototype.filter,Ut.prototype.tail=Ut.prototype.rest,Ut}var m,w="3.5.0",b=1,x=2,A=4,j=8,E=16,O=32,k=64,I=128,R=256,S=30,C="...",T=150,U=16,W=0,F=1,N=2,L="Expected a function",$="__lodash_placeholder__",P="[object Arguments]",B="[object Array]",z="[object Boolean]",D="[object Date]",M="[object Error]",q="[object Function]",K="[object Number]",V="[object Object]",Y="[object RegExp]",Z="[object String]",G="[object ArrayBuffer]",J="[object Float32Array]",X="[object Float64Array]",H="[object Int8Array]",Q="[object Int16Array]",nt="[object Int32Array]",tt="[object Uint8Array]",rt="[object Uint8ClampedArray]",et="[object Uint16Array]",ut="[object Uint32Array]",ot=/\b__p\+='';/g,it=/\b(__p\+=)''\+/g,at=/(__e\(.*?\)|\b__t\))\+'';/g,ft=/&(?:amp|lt|gt|quot|#39|#96);/g,ct=/[&<>"'`]/g,lt=RegExp(ft.source),st=RegExp(ct.source),pt=/<%-([\s\S]+?)%>/g,ht=/<%([\s\S]+?)%>/g,_t=/<%=([\s\S]+?)%>/g,gt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,vt=/\w*$/,yt=/^\s*function[ \n\r\t]+\w/,dt=/^0[xX]/,mt=/^\[object .+?Constructor\]$/,wt=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,bt=/($^)/,xt=/[.*+?^${}()|[\]\/\\]/g,At=RegExp(xt.source),jt=/\bthis\b/,Et=/['\n\r\u2028\u2029\\]/g,Ot=RegExp("[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?=[A-Z\\xc0-\\xd6\\xd8-\\xde][a-z\\xdf-\\xf6\\xf8-\\xff]+)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+|[A-Z\\xc0-\\xd6\\xd8-\\xde]+|[0-9]+","g"),kt=" \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",It="Array ArrayBuffer Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Math Number Object RegExp Set String _ clearTimeout document isFinite parseInt setTimeout TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap window WinRTError".split(" "),Rt="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),St={};
91
- St[J]=St[X]=St[H]=St[Q]=St[nt]=St[tt]=St[rt]=St[et]=St[ut]=true,St[P]=St[B]=St[G]=St[z]=St[D]=St[M]=St[q]=St["[object Map]"]=St[K]=St[V]=St[Y]=St["[object Set]"]=St[Z]=St["[object WeakMap]"]=false;var Ct={};Ct[P]=Ct[B]=Ct[G]=Ct[z]=Ct[D]=Ct[J]=Ct[X]=Ct[H]=Ct[Q]=Ct[nt]=Ct[K]=Ct[V]=Ct[Y]=Ct[Z]=Ct[tt]=Ct[rt]=Ct[et]=Ct[ut]=true,Ct[M]=Ct[q]=Ct["[object Map]"]=Ct["[object Set]"]=Ct["[object WeakMap]"]=false;var Tt={leading:false,maxWait:0,trailing:false},Ut={"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss"},Wt={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","`":"&#96;"},Ft={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&#96;":"`"},Nt={"function":true,object:true},Lt={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},$t=Nt[typeof exports]&&exports&&!exports.nodeType&&exports,Pt=Nt[typeof module]&&module&&!module.nodeType&&module,Nt=Nt[typeof window]&&window,Bt=Pt&&Pt.exports===$t&&$t,zt=$t&&Pt&&typeof global=="object"&&global||Nt!==(this&&this.window)&&Nt||this,Dt=function(){try{Object({toString:0}+"")
92
- }catch(n){return function(){return false}}return function(n){return typeof n.toString!="function"&&typeof(n+"")=="string"}}(),Mt=d();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(zt._=Mt, define(function(){return Mt})):$t&&Pt?Bt?(Pt.exports=Mt)._=Mt:$t._=Mt:zt._=Mt}).call(this);
6
+ ;(function(){function n(n,t){if(n!==t){var r=n===n,e=t===t;if(n>t||!r||typeof n=="undefined"&&e)return 1;if(n<t||!e||typeof t=="undefined"&&r)return-1}return 0}function t(n,t,r){for(var e=n.length,u=r?e:-1;r?u--:++u<e;)if(t(n[u],u,n))return u;return-1}function r(n,t,r){if(t!==t)return p(n,r);r-=1;for(var e=n.length;++r<e;)if(n[r]===t)return r;return-1}function e(n){return typeof n=="function"||false}function u(n){return typeof n=="string"?n:null==n?"":n+""}function o(n){return n.charCodeAt(0)}function i(n,t){for(var r=-1,e=n.length;++r<e&&-1<t.indexOf(n.charAt(r)););return r
7
+ }function f(n,t){for(var r=n.length;r--&&-1<t.indexOf(n.charAt(r)););return r}function a(t,r){return n(t.a,r.a)||t.b-r.b}function c(n){return Ut[n]}function l(n){return Ft[n]}function s(n){return"\\"+Lt[n]}function p(n,t,r){var e=n.length;for(t+=r?0:-1;r?t--:++t<e;){var u=n[t];if(u!==u)return t}return-1}function h(n){return!!n&&typeof n=="object"}function _(n){return 160>=n&&9<=n&&13>=n||32==n||160==n||5760==n||6158==n||8192<=n&&(8202>=n||8232==n||8233==n||8239==n||8287==n||12288==n||65279==n)}function g(n,t){for(var r=-1,e=n.length,u=-1,o=[];++r<e;)n[r]===t&&(n[r]=P,o[++u]=r);
8
+ return o}function v(n){for(var t=-1,r=n.length;++t<r&&_(n.charCodeAt(t)););return t}function y(n){for(var t=n.length;t--&&_(n.charCodeAt(t)););return t}function d(n){return Wt[n]}function m(_){function Ut(n){if(h(n)&&!(yi(n)||n instanceof Nt)){if(n instanceof Wt)return n;if(Pu.call(n,"__chain__")&&Pu.call(n,"__wrapped__"))return ke(n)}return new Wt(n)}function Ft(){}function Wt(n,t,r){this.__wrapped__=n,this.__actions__=r||[],this.__chain__=!!t}function Nt(n){this.__wrapped__=n,this.__actions__=null,this.__dir__=1,this.__filtered__=false,this.__iteratees__=null,this.__takeCount__=go,this.__views__=null
9
+ }function Lt(){this.__data__={}}function $t(n){var t=n?n.length:0;for(this.data={hash:oo(null),set:new Hu};t--;)this.push(n[t])}function Pt(n,t){var r=n.data;return(typeof t=="string"||nu(t)?r.set.has(t):r.hash[t])?0:-1}function Bt(n,t){var r=-1,e=n.length;for(t||(t=xu(e));++r<e;)t[r]=n[r];return t}function zt(n,t){for(var r=-1,e=n.length;++r<e&&false!==t(n[r],r,n););return n}function Kt(n,t){for(var r=-1,e=n.length;++r<e;)if(!t(n[r],r,n))return false;return true}function Vt(n,t){for(var r=-1,e=n.length,u=-1,o=[];++r<e;){var i=n[r];
10
+ t(i,r,n)&&(o[++u]=i)}return o}function Yt(n,t){for(var r=-1,e=n.length,u=xu(e);++r<e;)u[r]=t(n[r],r,n);return u}function Zt(n){for(var t=-1,r=n.length,e=_o;++t<r;){var u=n[t];u>e&&(e=u)}return e}function Gt(n,t){for(var r=-1,e=n.length;++r<e;)if(t(n[r],r,n))return true;return false}function Jt(n,t){return typeof n=="undefined"?t:n}function Xt(n,t,r,e){return typeof n!="undefined"&&Pu.call(e,r)?n:t}function Ht(n,t,r){var e=Ri(t);if(!r)return nr(t,n,e);for(var u=-1,o=e.length;++u<o;){var i=e[u],f=n[i],a=r(f,t[i],i,n,t);
11
+ (a===a?a===f:f!==f)&&(typeof f!="undefined"||i in n)||(n[i]=a)}return n}function Qt(n,t){for(var r=-1,e=n.length,u=we(e),o=t.length,i=xu(o);++r<o;){var f=t[r];u?(f=parseFloat(f),i[r]=ye(f,e)?n[f]:w):i[r]=n[f]}return i}function nr(n,t,r){r||(r=t,t={});for(var e=-1,u=r.length;++e<u;){var o=r[e];t[o]=n[o]}return t}function tr(n,t,r){var e=typeof n;return"function"==e?typeof t=="undefined"?n:Fr(n,t,r):null==n?du:"object"==e?yr(n):typeof t=="undefined"?wr(n+""):dr(n+"",t)}function rr(n,t,r,e,u,o,i){var f;
12
+ if(r&&(f=u?r(n,e,u):r(n)),typeof f!="undefined")return f;if(!nu(n))return n;if(e=yi(n)){if(f=_e(n),!t)return Bt(n,f)}else{var a=zu.call(n),c=a==K;if(a!=Y&&a!=B&&(!c||u))return Ct[a]?ve(n,a,t):u?n:{};if(Dt(n))return u?n:{};if(f=ge(c?{}:n),!t)return nr(n,f,Ri(n))}for(o||(o=[]),i||(i=[]),u=o.length;u--;)if(o[u]==n)return i[u];return o.push(n),i.push(f),(e?zt:lr)(n,function(e,u){f[u]=rr(e,t,r,u,n,o,i)}),f}function er(n,t,r){if(typeof n!="function")throw new Cu($);return Qu(function(){n.apply(w,r)},t)
13
+ }function ur(n,t){var e=n?n.length:0,u=[];if(!e)return u;var o=-1,i=he(),f=i==r,a=f&&200<=t.length?Uo(t):null,c=t.length;a&&(i=Pt,f=false,t=a);n:for(;++o<e;)if(a=n[o],f&&a===a){for(var l=c;l--;)if(t[l]===a)continue n;u.push(a)}else 0>i(t,a,0)&&u.push(a);return u}function or(n,t){var r=true;return ko(n,function(n,e,u){return r=!!t(n,e,u)}),r}function ir(n,t){var r=[];return ko(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function fr(n,t,r,e){var u;return r(n,function(n,r,o){return t(n,r,o)?(u=e?r:n,false):void 0
14
+ }),u}function ar(n,t,r){for(var e=-1,u=n.length,o=-1,i=[];++e<u;){var f=n[e];if(h(f)&&we(f.length)&&(yi(f)||Xe(f))){t&&(f=ar(f,t,r));var a=-1,c=f.length;for(i.length+=c;++a<c;)i[++o]=f[a]}else r||(i[++o]=f)}return i}function cr(n,t){So(n,t,au)}function lr(n,t){return So(n,t,Ri)}function sr(n,t){return Co(n,t,Ri)}function pr(n,t){for(var r=-1,e=t.length,u=-1,o=[];++r<e;){var i=t[r];mi(n[i])&&(o[++u]=i)}return o}function hr(n,t,r,e,u,o){if(n===t)return 0!==n||1/n==1/t;var i=typeof n,f=typeof t;return"function"!=i&&"object"!=i&&"function"!=f&&"object"!=f||null==n||null==t?n!==n&&t!==t:_r(n,t,hr,r,e,u,o)
15
+ }function _r(n,t,r,e,u,o,i){var f=yi(n),a=yi(t),c=z,l=z;f||(c=zu.call(n),c==B?c=Y:c!=Y&&(f=ou(n))),a||(l=zu.call(t),l==B?l=Y:l!=Y&&ou(t));var s=(c==Y||u&&c==K)&&!Dt(n),a=(l==Y||u&&l==K)&&!Dt(t);if((l=c==l)&&!f&&!s)return ce(n,t,c);if(u){if(!(l||s&&a))return false}else{if(c=s&&Pu.call(n,"__wrapped__"),a=a&&Pu.call(t,"__wrapped__"),c||a)return r(c?n.value():n,a?t.value():t,e,u,o,i);if(!l)return false}for(o||(o=[]),i||(i=[]),c=o.length;c--;)if(o[c]==n)return i[c]==t;return o.push(n),i.push(t),n=(f?ae:le)(n,t,r,e,u,o,i),o.pop(),i.pop(),n
16
+ }function gr(n,t,r,e,u){for(var o=-1,i=t.length,f=!u;++o<i;)if(f&&e[o]?r[o]!==n[t[o]]:!(t[o]in n))return false;for(o=-1;++o<i;){var a=t[o],c=n[a],l=r[o];if(f&&e[o]?a=typeof c!="undefined"||a in n:(a=u?u(c,l,a):w,typeof a=="undefined"&&(a=hr(l,c,u,true))),!a)return false}return true}function vr(n,t){var r=[];return ko(n,function(n,e,u){r.push(t(n,e,u))}),r}function yr(n){var t=Ri(n),r=t.length;if(!r)return yu(true);if(1==r){var e=t[0],u=n[e];if(be(u))return function(n){return null!=n&&n[e]===u&&(typeof u!="undefined"||e in Ie(n))
17
+ }}for(var o=xu(r),i=xu(r);r--;)u=n[t[r]],o[r]=u,i[r]=be(u);return function(n){return null!=n&&gr(Ie(n),t,o,i)}}function dr(n,t){return be(t)?function(r){return null!=r&&r[n]===t&&(typeof t!="undefined"||n in Ie(r))}:function(r){return null!=r&&hr(t,r[n],null,true)}}function mr(n,t,r,e,u){if(!nu(n))return n;var o=we(t.length)&&(yi(t)||ou(t));return(o?zt:lr)(t,function(t,i,f){if(h(t)){e||(e=[]),u||(u=[]);n:{t=e;for(var a=u,c=t.length,l=f[i];c--;)if(t[c]==l){n[i]=a[c],i=void 0;break n}c=n[i],f=r?r(c,l,i,n,f):w;
18
+ var s=typeof f=="undefined";s&&(f=l,we(l.length)&&(yi(l)||ou(l))?f=yi(c)?c:c&&c.length?Bt(c):[]:wi(l)||Xe(l)?f=Xe(c)?iu(c):wi(c)?c:{}:s=false),t.push(l),a.push(f),s?n[i]=mr(f,l,r,t,a):(f===f?f!==c:c===c)&&(n[i]=f),i=void 0}return i}a=n[i],f=r?r(a,t,i,n,f):w,(l=typeof f=="undefined")&&(f=t),!o&&typeof f=="undefined"||!l&&(f===f?f===a:a!==a)||(n[i]=f)}),n}function wr(n){return function(t){return null==t?w:t[n]}}function br(n,t){return n+Zu(ho()*(t-n+1))}function xr(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)
19
+ }),r}function Ar(n,t,r){var e=-1,u=n.length;for(t=null==t?0:+t||0,0>t&&(t=-t>u?0:u+t),r=typeof r=="undefined"||r>u?u:+r||0,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=xu(u);++e<u;)r[e]=n[e+t];return r}function jr(n,t){var r;return ko(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}function Or(n,t){var r=n.length;for(n.sort(t);r--;)n[r]=n[r].c;return n}function Er(t,r,e){var u=-1,o=t.length,i=we(o)?xu(o):[];return ko(t,function(n){for(var t=r.length,e=xu(t);t--;)e[t]=null==n?w:n[r[t]];i[++u]={a:e,b:u,c:n}}),Or(i,function(t,r){var u;
20
+ n:{u=-1;for(var o=t.a,i=r.a,f=o.length,a=e.length;++u<f;){var c=n(o[u],i[u]);if(c){u=u<a?c*(e[u]?1:-1):c;break n}}u=t.b-r.b}return u})}function Ir(n,t){var r=0;return ko(n,function(n,e,u){r+=+t(n,e,u)||0}),r}function kr(n,t){var e=-1,u=he(),o=n.length,i=u==r,f=i&&200<=o,a=f?Uo():null,c=[];a?(u=Pt,i=false):(f=false,a=t?[]:c);n:for(;++e<o;){var l=n[e],s=t?t(l,e,n):l;if(i&&l===l){for(var p=a.length;p--;)if(a[p]===s)continue n;t&&a.push(s),c.push(l)}else 0>u(a,s,0)&&((t||f)&&a.push(s),c.push(l))}return c}function Rr(n,t){for(var r=-1,e=t.length,u=xu(e);++r<e;)u[r]=n[t[r]];
21
+ return u}function Sr(n,t,r,e){for(var u=n.length,o=e?u:-1;(e?o--:++o<u)&&t(n[o],o,n););return r?Ar(n,e?0:o,e?o+1:u):Ar(n,e?o+1:0,e?u:o)}function Cr(n,t){var r=n;r instanceof Nt&&(r=r.value());for(var e=-1,u=t.length;++e<u;){var r=[r],o=t[e];Ju.apply(r,o.args),r=o.func.apply(o.thisArg,r)}return r}function Tr(n,t,r){var e=0,u=n?n.length:e;if(typeof t=="number"&&t===t&&u<=mo){for(;e<u;){var o=e+u>>>1,i=n[o];(r?i<=t:i<t)?e=o+1:u=o}return u}return Ur(n,t,du,r)}function Ur(n,t,r,e){t=r(t);for(var u=0,o=n?n.length:0,i=t!==t,f=typeof t=="undefined";u<o;){var a=Zu((u+o)/2),c=r(n[a]),l=c===c;
22
+ (i?l||e:f?l&&(e||typeof c!="undefined"):e?c<=t:c<t)?u=a+1:o=a}return co(o,yo)}function Fr(n,t,r){if(typeof n!="function")return du;if(typeof t=="undefined")return n;switch(r){case 1:return function(r){return n.call(t,r)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,o){return n.call(t,r,e,u,o)};case 5:return function(r,e,u,o,i){return n.call(t,r,e,u,o,i)}}return function(){return n.apply(t,arguments)}}function Wr(n){return Ku.call(n,0)}function Nr(n,t,r){for(var e=r.length,u=-1,o=ao(n.length-e,0),i=-1,f=t.length,a=xu(o+f);++i<f;)a[i]=t[i];
23
+ for(;++u<e;)a[r[u]]=n[u];for(;o--;)a[i++]=n[u++];return a}function Lr(n,t,r){for(var e=-1,u=r.length,o=-1,i=ao(n.length-u,0),f=-1,a=t.length,c=xu(i+a);++o<i;)c[o]=n[o];for(i=o;++f<a;)c[i+f]=t[f];for(;++e<u;)c[i+r[e]]=n[o++];return c}function $r(n,t){return function(r,e,u){var o=t?t():{};if(e=pe(e,u,3),yi(r)){u=-1;for(var i=r.length;++u<i;){var f=r[u];n(o,f,e(f,u,r),r)}}else ko(r,function(t,r,u){n(o,t,e(t,r,u),u)});return o}}function Pr(n){return function(){var t=arguments,r=t.length,e=t[0];if(2>r||null==e)return e;
24
+ var u=t[r-2],o=t[r-1],i=t[3];for(3<r&&typeof u=="function"?(u=Fr(u,o,5),r-=2):(u=2<r&&typeof o=="function"?o:null,r-=u?1:0),i&&de(t[1],t[2],i)&&(u=3==r?null:u,r=2),o=0;++o<r;)(i=t[o])&&n(e,i,u);return e}}function Br(n,t){return function(r,e){var u=r?r.length:0;if(!we(u))return n(r,e);for(var o=t?u:-1,i=Ie(r);(t?o--:++o<u)&&false!==e(i[o],o,i););return r}}function zr(n){return function(t,r,e){var u=Ie(t);e=e(t);for(var o=e.length,i=n?o:-1;n?i--:++i<o;){var f=e[i];if(false===r(u[f],f,u))break}return t}}function Mr(n,t){function r(){return(this&&this!==Mt&&this instanceof r?e:n).apply(t,arguments)
25
+ }var e=qr(n);return r}function Dr(n){return function(t){var r=-1;t=gu(lu(t));for(var e=t.length,u="";++r<e;)u=n(u,t[r],r);return u}}function qr(n){return function(){var t=Io(n.prototype),r=n.apply(t,arguments);return nu(r)?r:t}}function Kr(n){function t(r,e,u){return u&&de(r,e,u)&&(e=null),r=fe(r,n,null,null,null,null,null,e),r.placeholder=t.placeholder,r}return t}function Vr(n,t){return function(r,e,u){u&&de(r,e,u)&&(e=null);var i=pe(),f=null==e;if(i===tr&&f||(f=false,e=i(e,u,3)),f){if(e=yi(r),e||!uu(r))return n(e?r:Ee(r));
26
+ e=o}return se(r,e,t)}}function Yr(n,r){return function(e,u,o){return u=pe(u,o,3),yi(e)?(u=t(e,u,r),-1<u?e[u]:w):fr(e,u,n)}}function Zr(n){return function(r,e,u){return r&&r.length?(e=pe(e,u,3),t(r,e,n)):-1}}function Gr(n){return function(t,r,e){return r=pe(r,e,3),fr(t,r,n,true)}}function Jr(n){return function(){var t=arguments.length;if(!t)return function(){return arguments[0]};for(var r,e=n?t:-1,u=0,o=xu(t);n?e--:++e<t;){var i=o[u++]=arguments[e];if(typeof i!="function")throw new Cu($);var f=r?"":Wo(i);
27
+ r="wrapper"==f?new Wt([]):r}for(e=r?-1:t;++e<t;)i=o[e],f=Wo(i),r=(u="wrapper"==f?Fo(i):null)&&me(u[0])?r[Wo(u[0])].apply(r,u[3]):1==i.length&&me(i)?r[f]():r.thru(i);return function(){var n=arguments;if(r&&1==n.length&&yi(n[0]))return r.plant(n[0]).value();for(var e=0,n=o[e].apply(this,n);++e<t;)n=o[e].call(this,n);return n}}}function Xr(n,t){return function(r,e,u){return typeof e=="function"&&typeof u=="undefined"&&yi(r)?n(r,e):t(r,Fr(e,u,3))}}function Hr(n){return function(t,r,e){return(typeof r!="function"||typeof e!="undefined")&&(r=Fr(r,e,3)),n(t,r,au)
28
+ }}function Qr(n){return function(t,r,e){return(typeof r!="function"||typeof e!="undefined")&&(r=Fr(r,e,3)),n(t,r)}}function ne(n){return function(t,r,e){return(t=u(t))&&(n?t:"")+ue(t,r,e)+(n?"":t)}}function te(n){var t=Je(function(r,e){var u=g(e,t.placeholder);return fe(r,n,null,e,u)});return t}function re(n,t){return function(r,e,u,o){var i=3>arguments.length;return typeof e=="function"&&typeof o=="undefined"&&yi(r)?n(r,e,u,i):xr(r,pe(e,o,4),u,i,t)}}function ee(n,t,r,e,u,o,i,f,a,c){function l(){for(var b=arguments.length,j=b,O=xu(b);j--;)O[j]=arguments[j];
29
+ if(e&&(O=Nr(O,e,u)),o&&(O=Lr(O,o,i)),_||y){var j=l.placeholder,E=g(O,j),b=b-E.length;if(b<c){var R=f?Bt(f):null,b=ao(c-b,0),S=_?E:null,E=_?null:E,C=_?O:null,O=_?null:O;return t|=_?I:k,t&=~(_?k:I),v||(t&=~(x|A)),O=[n,t,r,C,S,O,E,R,a,b],R=ee.apply(w,O),me(n)&&No(R,O),R.placeholder=j,R}}if(j=p?r:this,h&&(n=j[m]),f)for(R=O.length,b=co(f.length,R),S=Bt(O);b--;)E=f[b],O[b]=ye(E,R)?S[E]:w;return s&&a<O.length&&(O.length=a),(this&&this!==Mt&&this instanceof l?d||qr(n):n).apply(j,O)}var s=t&R,p=t&x,h=t&A,_=t&O,v=t&j,y=t&E,d=!h&&qr(n),m=n;
30
+ return l}function ue(n,t,r){return n=n.length,t=+t,n<t&&io(t)?(t-=n,r=null==r?" ":r+"",hu(r,Vu(t/r.length)).slice(0,t)):""}function oe(n,t,r,e){function u(){for(var t=-1,f=arguments.length,a=-1,c=e.length,l=xu(f+c);++a<c;)l[a]=e[a];for(;f--;)l[a++]=arguments[++t];return(this&&this!==Mt&&this instanceof u?i:n).apply(o?r:this,l)}var o=t&x,i=qr(n);return u}function ie(n){return function(t,r,e,u){var o=pe(e);return o===tr&&null==e?Tr(t,r,n):Ur(t,r,o(e,u,1),n)}}function fe(n,t,r,e,u,o,i,f){var a=t&A;if(!a&&typeof n!="function")throw new Cu($);
31
+ var c=e?e.length:0;if(c||(t&=~(I|k),e=u=null),c-=u?u.length:0,t&k){var l=e,s=u;e=u=null}var p=a?null:Fo(n);return r=[n,t,r,e,u,l,s,o,i,f],p&&(e=r[1],t=p[1],f=e|t,u=t==R&&e==O||t==R&&e==S&&r[7].length<=p[8]||t==(R|S)&&e==O,(f<R||u)&&(t&x&&(r[2]=p[2],f|=e&x?0:j),(e=p[3])&&(u=r[3],r[3]=u?Nr(u,e,p[4]):Bt(e),r[4]=u?g(r[3],P):Bt(p[4])),(e=p[5])&&(u=r[5],r[5]=u?Lr(u,e,p[6]):Bt(e),r[6]=u?g(r[5],P):Bt(p[6])),(e=p[7])&&(r[7]=Bt(e)),t&R&&(r[8]=null==r[8]?p[8]:co(r[8],p[8])),null==r[9]&&(r[9]=p[9]),r[0]=p[0],r[1]=f),t=r[1],f=r[9]),r[9]=null==f?a?0:n.length:ao(f-c,0)||0,(p?To:No)(t==x?Mr(r[0],r[2]):t!=I&&t!=(x|I)||r[4].length?ee.apply(w,r):oe.apply(w,r),r)
32
+ }function ae(n,t,r,e,u,o,i){var f=-1,a=n.length,c=t.length,l=true;if(a!=c&&(!u||c<=a))return false;for(;l&&++f<a;){var s=n[f],p=t[f],l=w;if(e&&(l=u?e(p,s,f):e(s,p,f)),typeof l=="undefined")if(u)for(var h=c;h--&&(p=t[h],!(l=s&&s===p||r(s,p,e,u,o,i))););else l=s&&s===p||r(s,p,e,u,o,i)}return!!l}function ce(n,t,r){switch(r){case M:case D:return+n==+t;case q:return n.name==t.name&&n.message==t.message;case V:return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case Z:case G:return n==t+""}return false}function le(n,t,r,e,u,o,i){var f=Ri(n),a=f.length,c=Ri(t).length;
33
+ if(a!=c&&!u)return false;for(var c=u,l=-1;++l<a;){var s=f[l],p=u?s in t:Pu.call(t,s);if(p){var h=n[s],_=t[s],p=w;e&&(p=u?e(_,h,s):e(h,_,s)),typeof p=="undefined"&&(p=h&&h===_||r(h,_,e,u,o,i))}if(!p)return false;c||(c="constructor"==s)}return c||(r=n.constructor,e=t.constructor,!(r!=e&&"constructor"in n&&"constructor"in t)||typeof r=="function"&&r instanceof r&&typeof e=="function"&&e instanceof e)?true:false}function se(n,t,r){var e=r?go:_o,u=e,o=u;return ko(n,function(n,i,f){i=t(n,i,f),((r?i<u:i>u)||i===e&&i===o)&&(u=i,o=n)
34
+ }),o}function pe(n,t,r){var e=Ut.callback||vu,e=e===vu?tr:e;return r?e(n,t,r):e}function he(n,t,e){var u=Ut.indexOf||Te,u=u===Te?r:u;return n?u(n,t,e):u}function _e(n){var t=n.length,r=new n.constructor(t);return t&&"string"==typeof n[0]&&Pu.call(n,"index")&&(r.index=n.index,r.input=n.input),r}function ge(n){return n=n.constructor,typeof n=="function"&&n instanceof n||(n=ku),new n}function ve(n,t,r){var e=n.constructor;switch(t){case J:return Wr(n);case M:case D:return new e(+n);case X:case H:case Q:case nt:case tt:case rt:case et:case ut:case ot:return e instanceof e&&(e=jo[t]),t=n.buffer,new e(r?Wr(t):t,n.byteOffset,n.length);
35
+ case V:case G:return new e(n);case Z:var u=new e(n.source,dt.exec(n));u.lastIndex=n.lastIndex}return u}function ye(n,t){return n=+n,t=null==t?bo:t,-1<n&&0==n%1&&n<t}function de(n,t,r){if(!nu(r))return false;var e=typeof t;return"number"==e?(e=r.length,e=we(e)&&ye(t,e)):e="string"==e&&t in r,e?(t=r[t],n===n?n===t:t!==t):false}function me(n){var t=Wo(n);return!!t&&n===Ut[t]&&t in Nt.prototype}function we(n){return typeof n=="number"&&-1<n&&0==n%1&&n<=bo}function be(n){return n===n&&(0===n?0<1/n:!nu(n))}function xe(n,t){n=Ie(n);
36
+ for(var r=-1,e=t.length,u={};++r<e;){var o=t[r];o in n&&(u[o]=n[o])}return u}function Ae(n,t){var r={};return cr(n,function(n,e,u){t(n,e,u)&&(r[e]=n)}),r}function je(n){var t,r=Ut.support;if(!h(n)||zu.call(n)!=Y||Dt(n)||!(Pu.call(n,"constructor")||(t=n.constructor,typeof t!="function"||t instanceof t))||!r.argsTag&&Xe(n))return false;var e;return r.ownLast?(cr(n,function(n,t,r){return e=Pu.call(r,t),false}),false!==e):(cr(n,function(n,t){e=t}),typeof e=="undefined"||Pu.call(n,e))}function Oe(n){for(var t=au(n),r=t.length,e=r&&n.length,u=Ut.support,u=e&&we(e)&&(yi(n)||u.nonEnumStrings&&uu(n)||u.nonEnumArgs&&Xe(n)),o=-1,i=[];++o<r;){var f=t[o];
37
+ (u&&ye(f,e)||Pu.call(n,f))&&i.push(f)}return i}function Ee(n){return null==n?[]:we(n.length)?Ut.support.unindexedChars&&uu(n)?n.split(""):nu(n)?n:ku(n):cu(n)}function Ie(n){if(Ut.support.unindexedChars&&uu(n)){for(var t=-1,r=n.length,e=ku(n);++t<r;)e[t]=n.charAt(t);return e}return nu(n)?n:ku(n)}function ke(n){return n instanceof Nt?n.clone():new Wt(n.__wrapped__,n.__chain__,Bt(n.__actions__))}function Re(n,t,r){return n&&n.length?((r?de(n,t,r):null==t)&&(t=1),Ar(n,0>t?0:t)):[]}function Se(n,t,r){var e=n?n.length:0;
38
+ return e?((r?de(n,t,r):null==t)&&(t=1),t=e-(+t||0),Ar(n,0,0>t?0:t)):[]}function Ce(n){return n?n[0]:w}function Te(n,t,e){var u=n?n.length:0;if(!u)return-1;if(typeof e=="number")e=0>e?ao(u+e,0):e;else if(e)return e=Tr(n,t),n=n[e],(t===t?t===n:n!==n)?e:-1;return r(n,t,e||0)}function Ue(n){var t=n?n.length:0;return t?n[t-1]:w}function Fe(n){return Re(n,1)}function We(n,t,e,u){if(!n||!n.length)return[];null!=t&&typeof t!="boolean"&&(u=e,e=de(n,t,u)?null:t,t=false);var o=pe();if((o!==tr||null!=e)&&(e=o(e,u,3)),t&&he()==r){t=e;
39
+ var i;e=-1,u=n.length;for(var o=-1,f=[];++e<u;){var a=n[e],c=t?t(a,e,n):a;e&&i===c||(i=c,f[++o]=a)}n=f}else n=kr(n,e);return n}function Ne(n){for(var t=-1,r=(n&&n.length&&Zt(Yt(n,$u)))>>>0,e=xu(r);++t<r;)e[t]=Yt(n,wr(t));return e}function Le(n,t){var r=-1,e=n?n.length:0,u={};for(!e||t||yi(n[0])||(t=[]);++r<e;){var o=n[r];t?u[o]=t[r]:o&&(u[o[0]]=o[1])}return u}function $e(n){return n=Ut(n),n.__chain__=true,n}function Pe(n,t,r){return t.call(r,n)}function Be(n,t,r){var e=yi(n)?Kt:or;return r&&de(n,t,r)&&(t=null),(typeof t!="function"||typeof r!="undefined")&&(t=pe(t,r,3)),e(n,t)
40
+ }function ze(n,t,r){var e=yi(n)?Vt:ir;return t=pe(t,r,3),e(n,t)}function Me(n,t,r,e){var u=n?n.length:0;return we(u)||(n=cu(n),u=n.length),u?(r=typeof r!="number"||e&&de(t,r,e)?0:0>r?ao(u+r,0):r||0,typeof n=="string"||!yi(n)&&uu(n)?r<u&&-1<n.indexOf(t,r):-1<he(n,t,r)):false}function De(n,t,r){var e=yi(n)?Yt:vr;return t=pe(t,r,3),e(n,t)}function qe(n,t,r){return(r?de(n,t,r):null==t)?(n=Ee(n),t=n.length,0<t?n[br(0,t-1)]:w):(n=Ke(n),n.length=co(0>t?0:+t||0,n.length),n)}function Ke(n){n=Ee(n);for(var t=-1,r=n.length,e=xu(r);++t<r;){var u=br(0,t);
41
+ t!=u&&(e[t]=e[u]),e[u]=n[t]}return e}function Ve(n,t,r){var e=yi(n)?Gt:jr;return r&&de(n,t,r)&&(t=null),(typeof t!="function"||typeof r!="undefined")&&(t=pe(t,r,3)),e(n,t)}function Ye(n,t){var r;if(typeof t!="function"){if(typeof n!="function")throw new Cu($);var e=n;n=t,t=e}return function(){return 0<--n?r=t.apply(this,arguments):t=null,r}}function Ze(n,t,r){function e(){var r=t-(ui()-c);0>=r||r>t?(f&&Yu(f),r=p,f=s=p=w,r&&(h=ui(),a=n.apply(l,i),s||f||(i=l=null))):s=Qu(e,r)}function u(){s&&Yu(s),f=s=p=w,(g||_!==t)&&(h=ui(),a=n.apply(l,i),s||f||(i=l=null))
42
+ }function o(){if(i=arguments,c=ui(),l=this,p=g&&(s||!v),false===_)var r=v&&!s;else{f||v||(h=c);var o=_-(c-h),y=0>=o||o>_;y?(f&&(f=Yu(f)),h=c,a=n.apply(l,i)):f||(f=Qu(u,o))}return y&&s?s=Yu(s):s||t===_||(s=Qu(e,t)),r&&(y=true,a=n.apply(l,i)),!y||s||f||(i=l=null),a}var i,f,a,c,l,s,p,h=0,_=false,g=true;if(typeof n!="function")throw new Cu($);if(t=0>t?0:+t||0,true===r)var v=true,g=false;else nu(r)&&(v=r.leading,_="maxWait"in r&&ao(+r.maxWait||0,t),g="trailing"in r?r.trailing:g);return o.cancel=function(){s&&Yu(s),f&&Yu(f),f=s=p=w
43
+ },o}function Ge(n,t){function r(){var e=arguments,u=r.cache,o=t?t.apply(this,e):e[0];return u.has(o)?u.get(o):(e=n.apply(this,e),u.set(o,e),e)}if(typeof n!="function"||t&&typeof t!="function")throw new Cu($);return r.cache=new Ge.Cache,r}function Je(n,t){if(typeof n!="function")throw new Cu($);return t=ao(typeof t=="undefined"?n.length-1:+t||0,0),function(){for(var r=arguments,e=-1,u=ao(r.length-t,0),o=xu(u);++e<u;)o[e]=r[t+e];switch(t){case 0:return n.call(this,o);case 1:return n.call(this,r[0],o);
44
+ case 2:return n.call(this,r[0],r[1],o)}for(u=xu(t+1),e=-1;++e<t;)u[e]=r[e];return u[t]=o,n.apply(this,u)}}function Xe(n){return we(h(n)?n.length:w)&&zu.call(n)==B}function He(n){return!!n&&1===n.nodeType&&h(n)&&(Ut.support.nodeTag?-1<zu.call(n).indexOf("Element"):Dt(n))}function Qe(n){return h(n)&&typeof n.message=="string"&&zu.call(n)==q}function nu(n){var t=typeof n;return"function"==t||!!n&&"object"==t}function tu(n){return null==n?false:zu.call(n)==K?Du.test(Lu.call(n)):h(n)&&(Dt(n)?Du:wt).test(n)
45
+ }function ru(n){return typeof n=="number"||h(n)&&zu.call(n)==V}function eu(n){return nu(n)&&zu.call(n)==Z}function uu(n){return typeof n=="string"||h(n)&&zu.call(n)==G}function ou(n){return h(n)&&we(n.length)&&!!St[zu.call(n)]}function iu(n){return nr(n,au(n))}function fu(n){return pr(n,au(n))}function au(n){if(null==n)return[];nu(n)||(n=ku(n));for(var t=n.length,r=Ut.support,t=t&&we(t)&&(yi(n)||r.nonEnumStrings&&uu(n)||r.nonEnumArgs&&Xe(n))&&t||0,e=n.constructor,u=-1,e=mi(e)&&e.prototype||Fu,o=e===n,i=xu(t),f=0<t,a=r.enumErrorProps&&(n===Uu||n instanceof ju),c=r.enumPrototypes&&mi(n);++u<t;)i[u]=u+"";
46
+ for(var l in n)c&&"prototype"==l||a&&("message"==l||"name"==l)||f&&ye(l,t)||"constructor"==l&&(o||!Pu.call(n,l))||i.push(l);if(r.nonEnumShadows&&n!==Fu)for(t=n===Wu?G:n===Uu?q:zu.call(n),r=Oo[t]||Oo[Y],t==Y&&(e=Fu),t=Rt.length;t--;)l=Rt[t],u=r[l],o&&u||(u?!Pu.call(n,l):n[l]===e[l])||i.push(l);return i}function cu(n){return Rr(n,Ri(n))}function lu(n){return(n=u(n))&&n.replace(bt,c).replace(vt,"")}function su(n){return(n=u(n))&&jt.test(n)?n.replace(At,"\\$&"):n}function pu(n,t,r){return r&&de(n,t,r)&&(t=0),po(n,t)
47
+ }function hu(n,t){var r="";if(n=u(n),t=+t,1>t||!n||!io(t))return r;do t%2&&(r+=n),t=Zu(t/2),n+=n;while(t);return r}function _u(n,t,r){var e=n;return(n=u(n))?(r?de(e,t,r):null==t)?n.slice(v(n),y(n)+1):(t+="",n.slice(i(n,t),f(n,t)+1)):n}function gu(n,t,r){return r&&de(n,t,r)&&(t=null),n=u(n),n.match(t||Et)||[]}function vu(n,t,r){return r&&de(n,t,r)&&(t=null),h(n)?mu(n):tr(n,t)}function yu(n){return function(){return n}}function du(n){return n}function mu(n){return yr(rr(n,true))}function wu(n,t,r){if(null==r){var e=nu(t),u=e&&Ri(t);
48
+ ((u=u&&u.length&&pr(t,u))?u.length:e)||(u=false,r=t,t=n,n=this)}u||(u=pr(t,Ri(t)));var o=true,e=-1,i=mi(n),f=u.length;false===r?o=false:nu(r)&&"chain"in r&&(o=r.chain);for(;++e<f;){r=u[e];var a=t[r];n[r]=a,i&&(n.prototype[r]=function(t){return function(){var r=this.__chain__;if(o||r){var e=n(this.__wrapped__);return(e.__actions__=Bt(this.__actions__)).push({func:t,args:arguments,thisArg:n}),e.__chain__=r,e}return r=[this.value()],Ju.apply(r,arguments),t.apply(n,r)}}(a))}return n}function bu(){}_=_?qt.defaults(Mt.Object(),_,qt.pick(Mt,kt)):Mt;
49
+ var xu=_.Array,Au=_.Date,ju=_.Error,Ou=_.Function,Eu=_.Math,Iu=_.Number,ku=_.Object,Ru=_.RegExp,Su=_.String,Cu=_.TypeError,Tu=xu.prototype,Uu=ju.prototype,Fu=ku.prototype,Wu=Su.prototype,Nu=(Nu=_.window)&&Nu.document,Lu=Ou.prototype.toString,$u=wr("length"),Pu=Fu.hasOwnProperty,Bu=0,zu=Fu.toString,Mu=_._,Du=Ru("^"+su(zu).replace(/toString|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),qu=tu(qu=_.ArrayBuffer)&&qu,Ku=tu(Ku=qu&&new qu(0).slice)&&Ku,Vu=Eu.ceil,Yu=_.clearTimeout,Zu=Eu.floor,Gu=tu(Gu=ku.getPrototypeOf)&&Gu,Ju=Tu.push,Xu=Fu.propertyIsEnumerable,Hu=tu(Hu=_.Set)&&Hu,Qu=_.setTimeout,no=Tu.splice,to=tu(to=_.Uint8Array)&&to,ro=tu(ro=_.WeakMap)&&ro,eo=function(){try{var n=tu(n=_.Float64Array)&&n,t=new n(new qu(10),0,1)&&n
50
+ }catch(r){}return t}(),uo=tu(uo=xu.isArray)&&uo,oo=tu(oo=ku.create)&&oo,io=_.isFinite,fo=tu(fo=ku.keys)&&fo,ao=Eu.max,co=Eu.min,lo=tu(lo=Au.now)&&lo,so=tu(so=Iu.isFinite)&&so,po=_.parseInt,ho=Eu.random,_o=Iu.NEGATIVE_INFINITY,go=Iu.POSITIVE_INFINITY,vo=Eu.pow(2,32)-1,yo=vo-1,mo=vo>>>1,wo=eo?eo.BYTES_PER_ELEMENT:0,bo=Eu.pow(2,53)-1,xo=ro&&new ro,Ao={},jo={};jo[X]=_.Float32Array,jo[H]=_.Float64Array,jo[Q]=_.Int8Array,jo[nt]=_.Int16Array,jo[tt]=_.Int32Array,jo[rt]=_.Uint8Array,jo[et]=_.Uint8ClampedArray,jo[ut]=_.Uint16Array,jo[ot]=_.Uint32Array;
51
+ var Oo={};Oo[z]=Oo[D]=Oo[V]={constructor:true,toLocaleString:true,toString:true,valueOf:true},Oo[M]=Oo[G]={constructor:true,toString:true,valueOf:true},Oo[q]=Oo[K]=Oo[Z]={constructor:true,toString:true},Oo[Y]={constructor:true},zt(Rt,function(n){for(var t in Oo)if(Pu.call(Oo,t)){var r=Oo[t];r[n]=Pu.call(r,n)}});var Eo=Ut.support={};!function(n){function t(){this.x=1}var r={0:1,length:1},e=[];t.prototype={valueOf:1,y:1};for(var u in new t)e.push(u);Eo.argsTag=zu.call(arguments)==B,Eo.enumErrorProps=Xu.call(Uu,"message")||Xu.call(Uu,"name"),Eo.enumPrototypes=Xu.call(t,"prototype"),Eo.funcDecomp=/\bthis\b/.test(function(){return this
52
+ }),Eo.funcNames=typeof Ou.name=="string",Eo.nodeTag=zu.call(Nu)!=Y,Eo.nonEnumStrings=!Xu.call("x",0),Eo.nonEnumShadows=!/valueOf/.test(e),Eo.ownLast="x"!=e[0],Eo.spliceObjects=(no.call(r,0,1),!r[0]),Eo.unindexedChars="xx"!="x"[0]+ku("x")[0];try{Eo.dom=11===Nu.createDocumentFragment().nodeType}catch(o){Eo.dom=false}try{Eo.nonEnumArgs=!Xu.call(arguments,1)}catch(i){Eo.nonEnumArgs=true}}(0,0),Ut.templateSettings={escape:ht,evaluate:_t,interpolate:gt,variable:"",imports:{_:Ut}};var Io=function(){function n(){}return function(t){if(nu(t)){n.prototype=t;
53
+ var r=new n;n.prototype=null}return r||_.Object()}}(),ko=Br(lr),Ro=Br(sr,true),So=zr(),Co=zr(true),To=xo?function(n,t){return xo.set(n,t),n}:du;Ku||(Wr=qu&&to?function(n){var t=n.byteLength,r=eo?Zu(t/wo):0,e=r*wo,u=new qu(t);if(r){var o=new eo(u,0,r);o.set(new eo(n,0,r))}return t!=e&&(o=new to(u,e),o.set(new to(n,e))),u}:yu(null));var Uo=oo&&Hu?function(n){return new $t(n)}:yu(null),Fo=xo?function(n){return xo.get(n)}:bu,Wo=function(){return Eo.funcNames?"constant"==yu.name?wr("name"):function(n){for(var t=n.name,r=Ao[t],e=r?r.length:0;e--;){var u=r[e],o=u.func;
54
+ if(null==o||o==n)return u.name}return t}:yu("")}(),No=function(){var n=0,t=0;return function(r,e){var u=ui(),o=F-(u-t);if(t=u,0<o){if(++n>=U)return r}else n=0;return To(r,e)}}(),Lo=Je(function(n,t){return yi(n)||Xe(n)?ur(n,ar(t,false,true)):[]}),$o=Zr(),Po=Zr(true),Bo=Je(function(t,r){t||(t=[]),r=ar(r);var e=r.length,u=Qt(t,r);for(r.sort(n);e--;){var o=parseFloat(r[e]);if(o!=i&&ye(o)){var i=o;no.call(t,o,1)}}return u}),zo=ie(),Mo=ie(true),Do=Je(function(n){return kr(ar(n,false,true))}),qo=Je(function(n,t){return yi(n)||Xe(n)?ur(n,t):[]
55
+ }),Ko=Je(Ne),Vo=Je(function(n,t){return we(n?n.length:0)&&(n=Ee(n)),Qt(n,ar(t))}),Yo=$r(function(n,t,r){Pu.call(n,r)?++n[r]:n[r]=1}),Zo=Yr(ko),Go=Yr(Ro,true),Jo=Xr(zt,ko),Xo=Xr(function(n,t){for(var r=n.length;r--&&false!==t(n[r],r,n););return n},Ro),Ho=$r(function(n,t,r){Pu.call(n,r)?n[r].push(t):n[r]=[t]}),Qo=$r(function(n,t,r){n[r]=t}),ni=Je(function(n,t,r){var e=-1,u=typeof t=="function",o=n?n.length:0,i=we(o)?xu(o):[];return ko(n,function(n){var o=u?t:null!=n&&n[t];i[++e]=o?o.apply(n,r):w}),i}),ti=$r(function(n,t,r){n[r?0:1].push(t)
56
+ },function(){return[[],[]]}),ri=re(function(n,t,r,e){var u=-1,o=n.length;for(e&&o&&(r=n[++u]);++u<o;)r=t(r,n[u],u,n);return r},ko),ei=re(function(n,t,r,e){var u=n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r},Ro),ui=lo||function(){return(new Au).getTime()},oi=Je(function(n,t,r){var e=x;if(r.length)var u=g(r,oi.placeholder),e=e|I;return fe(n,e,t,r,u)}),ii=Je(function(n,t){t=t.length?ar(t):fu(n);for(var r=-1,e=t.length;++r<e;){var u=t[r];n[u]=fe(n[u],x,n)}return n}),fi=Je(function(n,t,r){var e=x|A;
57
+ if(r.length)var u=g(r,fi.placeholder),e=e|I;return fe(t,e,n,r,u)}),ai=Kr(O),ci=Kr(E),li=Je(function(n,t){return er(n,1,t)}),si=Je(function(n,t,r){return er(n,t,r)}),pi=Jr(),hi=Jr(true),_i=te(I),gi=te(k),vi=Je(function(n,t){return fe(n,S,null,null,null,ar(t))});Eo.argsTag||(Xe=function(n){return we(h(n)?n.length:w)&&Pu.call(n,"callee")&&!Xu.call(n,"callee")});var yi=uo||function(n){return h(n)&&we(n.length)&&zu.call(n)==z};Eo.dom||(He=function(n){return!!n&&1===n.nodeType&&h(n)&&!wi(n)});var di=so||function(n){return typeof n=="number"&&io(n)
58
+ },mi=e(/x/)||to&&!e(to)?function(n){return zu.call(n)==K}:e,wi=Gu?function(n){if(!n||zu.call(n)!=Y||!Ut.support.argsTag&&Xe(n))return false;var t=n.valueOf,r=tu(t)&&(r=Gu(t))&&Gu(r);return r?n==r||Gu(n)==r:je(n)}:je,bi=Pr(Ht),xi=Je(function(n){var t=n[0];return null==t?t:(n.push(Jt),bi.apply(w,n))}),Ai=Gr(lr),ji=Gr(sr),Oi=Hr(So),Ei=Hr(Co),Ii=Qr(lr),ki=Qr(sr),Ri=fo?function(n){if(n)var t=n.constructor,r=n.length;return typeof t=="function"&&t.prototype===n||(typeof n=="function"?Ut.support.enumPrototypes:r&&we(r))?Oe(n):nu(n)?fo(n):[]
59
+ }:Oe,Si=Pr(mr),Ci=Je(function(n,t){if(null==n)return{};if("function"!=typeof t[0])return t=Yt(ar(t),Su),xe(n,ur(au(n),t));var r=Fr(t[0],t[1],3);return Ae(n,function(n,t,e){return!r(n,t,e)})}),Ti=Je(function(n,t){return null==n?{}:"function"==typeof t[0]?Ae(n,Fr(t[0],t[1],3)):xe(n,ar(t))}),Ui=Dr(function(n,t,r){return t=t.toLowerCase(),n+(r?t.charAt(0).toUpperCase()+t.slice(1):t)}),Fi=Dr(function(n,t,r){return n+(r?"-":"")+t.toLowerCase()}),Wi=ne(),Ni=ne(true);8!=po(It+"08")&&(pu=function(n,t,r){return(r?de(n,t,r):null==t)?t=0:t&&(t=+t),n=_u(n),po(n,t||(mt.test(n)?16:10))
60
+ });var Li=Dr(function(n,t,r){return n+(r?"_":"")+t.toLowerCase()}),$i=Dr(function(n,t,r){return n+(r?" ":"")+(t.charAt(0).toUpperCase()+t.slice(1))}),Pi=Je(function(n,t){try{return n.apply(w,t)}catch(r){return Qe(r)?r:new ju(r)}}),Bi=Vr(Zt),zi=Vr(function(n){for(var t=-1,r=n.length,e=go;++t<r;){var u=n[t];u<e&&(e=u)}return e},true);return Ut.prototype=Ft.prototype,Wt.prototype=Io(Ft.prototype),Wt.prototype.constructor=Wt,Nt.prototype=Io(Ft.prototype),Nt.prototype.constructor=Nt,Lt.prototype["delete"]=function(n){return this.has(n)&&delete this.__data__[n]
61
+ },Lt.prototype.get=function(n){return"__proto__"==n?w:this.__data__[n]},Lt.prototype.has=function(n){return"__proto__"!=n&&Pu.call(this.__data__,n)},Lt.prototype.set=function(n,t){return"__proto__"!=n&&(this.__data__[n]=t),this},$t.prototype.push=function(n){var t=this.data;typeof n=="string"||nu(n)?t.set.add(n):t.hash[n]=true},Ge.Cache=Lt,Ut.after=function(n,t){if(typeof t!="function"){if(typeof n!="function")throw new Cu($);var r=n;n=t,t=r}return n=io(n=+n)?n:0,function(){return 1>--n?t.apply(this,arguments):void 0
62
+ }},Ut.ary=function(n,t,r){return r&&de(n,t,r)&&(t=null),t=n&&null==t?n.length:ao(+t||0,0),fe(n,R,null,null,null,null,t)},Ut.assign=bi,Ut.at=Vo,Ut.before=Ye,Ut.bind=oi,Ut.bindAll=ii,Ut.bindKey=fi,Ut.callback=vu,Ut.chain=$e,Ut.chunk=function(n,t,r){t=(r?de(n,t,r):null==t)?1:ao(+t||1,1),r=0;for(var e=n?n.length:0,u=-1,o=xu(Vu(e/t));r<e;)o[++u]=Ar(n,r,r+=t);return o},Ut.compact=function(n){for(var t=-1,r=n?n.length:0,e=-1,u=[];++t<r;){var o=n[t];o&&(u[++e]=o)}return u},Ut.constant=yu,Ut.countBy=Yo,Ut.create=function(n,t,r){var e=Io(n);
63
+ return r&&de(n,t,r)&&(t=null),t?nr(t,e,Ri(t)):e},Ut.curry=ai,Ut.curryRight=ci,Ut.debounce=Ze,Ut.defaults=xi,Ut.defer=li,Ut.delay=si,Ut.difference=Lo,Ut.drop=Re,Ut.dropRight=Se,Ut.dropRightWhile=function(n,t,r){return n&&n.length?Sr(n,pe(t,r,3),true,true):[]},Ut.dropWhile=function(n,t,r){return n&&n.length?Sr(n,pe(t,r,3),true):[]},Ut.fill=function(n,t,r,e){var u=n?n.length:0;if(!u)return[];for(r&&typeof r!="number"&&de(n,t,r)&&(r=0,e=u),u=n.length,r=null==r?0:+r||0,0>r&&(r=-r>u?0:u+r),e=typeof e=="undefined"||e>u?u:+e||0,0>e&&(e+=u),u=r>e?0:e>>>0,r>>>=0;r<u;)n[r++]=t;
64
+ return n},Ut.filter=ze,Ut.flatten=function(n,t,r){var e=n?n.length:0;return r&&de(n,t,r)&&(t=false),e?ar(n,t):[]},Ut.flattenDeep=function(n){return n&&n.length?ar(n,true):[]},Ut.flow=pi,Ut.flowRight=hi,Ut.forEach=Jo,Ut.forEachRight=Xo,Ut.forIn=Oi,Ut.forInRight=Ei,Ut.forOwn=Ii,Ut.forOwnRight=ki,Ut.functions=fu,Ut.groupBy=Ho,Ut.indexBy=Qo,Ut.initial=function(n){return Se(n,1)},Ut.intersection=function(){for(var n=[],t=-1,e=arguments.length,u=[],o=he(),i=o==r;++t<e;){var f=arguments[t];(yi(f)||Xe(f))&&(n.push(f),u.push(i&&120<=f.length?Uo(t&&f):null))
65
+ }var e=n.length,i=n[0],a=-1,c=i?i.length:0,l=[],s=u[0];n:for(;++a<c;)if(f=i[a],0>(s?Pt(s,f):o(l,f,0))){for(t=e;--t;){var p=u[t];if(0>(p?Pt(p,f):o(n[t],f,0)))continue n}s&&s.push(f),l.push(f)}return l},Ut.invert=function(n,t,r){r&&de(n,t,r)&&(t=null),r=-1;for(var e=Ri(n),u=e.length,o={};++r<u;){var i=e[r],f=n[i];t?Pu.call(o,f)?o[f].push(i):o[f]=[i]:o[f]=i}return o},Ut.invoke=ni,Ut.keys=Ri,Ut.keysIn=au,Ut.map=De,Ut.mapValues=function(n,t,r){var e={};return t=pe(t,r,3),lr(n,function(n,r,u){e[r]=t(n,r,u)
66
+ }),e},Ut.matches=mu,Ut.matchesProperty=function(n,t){return dr(n+"",rr(t,true))},Ut.memoize=Ge,Ut.merge=Si,Ut.mixin=wu,Ut.negate=function(n){if(typeof n!="function")throw new Cu($);return function(){return!n.apply(this,arguments)}},Ut.omit=Ci,Ut.once=function(n){return Ye(n,2)},Ut.pairs=function(n){for(var t=-1,r=Ri(n),e=r.length,u=xu(e);++t<e;){var o=r[t];u[t]=[o,n[o]]}return u},Ut.partial=_i,Ut.partialRight=gi,Ut.partition=ti,Ut.pick=Ti,Ut.pluck=function(n,t){return De(n,wr(t))},Ut.property=function(n){return wr(n+"")
67
+ },Ut.propertyOf=function(n){return function(t){return null==n?w:n[t]}},Ut.pull=function(){var n=arguments,t=n[0];if(!t||!t.length)return t;for(var r=0,e=he(),u=n.length;++r<u;)for(var o=0,i=n[r];-1<(o=e(t,i,o));)no.call(t,o,1);return t},Ut.pullAt=Bo,Ut.range=function(n,t,r){r&&de(n,t,r)&&(t=r=null),n=+n||0,r=null==r?1:+r||0,null==t?(t=n,n=0):t=+t||0;var e=-1;t=ao(Vu((t-n)/(r||1)),0);for(var u=xu(t);++e<t;)u[e]=n,n+=r;return u},Ut.rearg=vi,Ut.reject=function(n,t,r){var e=yi(n)?Vt:ir;return t=pe(t,r,3),e(n,function(n,r,e){return!t(n,r,e)
68
+ })},Ut.remove=function(n,t,r){var e=-1,u=n?n.length:0,o=[];for(t=pe(t,r,3);++e<u;)r=n[e],t(r,e,n)&&(o.push(r),no.call(n,e--,1),u--);return o},Ut.rest=Fe,Ut.restParam=Je,Ut.shuffle=Ke,Ut.slice=function(n,t,r){var e=n?n.length:0;return e?(r&&typeof r!="number"&&de(n,t,r)&&(t=0,r=e),Ar(n,t,r)):[]},Ut.sortBy=function(n,t,r){if(null==n)return[];var e=-1,u=n.length,o=we(u)?xu(u):[];return r&&de(n,t,r)&&(t=null),t=pe(t,r,3),ko(n,function(n,r,u){o[++e]={a:t(n,r,u),b:e,c:n}}),Or(o,a)},Ut.sortByAll=function(){var n=arguments,t=n[0],r=n[3],e=0,u=n.length-1;
69
+ if(null==t)return[];for(var o=xu(u);e<u;)o[e]=n[++e];return r&&de(n[1],n[2],r)&&(o=n[1]),Er(t,ar(o),[])},Ut.sortByOrder=function(n,t,r,e){return null==n?[]:(e&&de(t,r,e)&&(r=null),yi(t)||(t=null==t?[]:[t]),yi(r)||(r=null==r?[]:[r]),Er(n,t,r))},Ut.spread=function(n){if(typeof n!="function")throw new Cu($);return function(t){return n.apply(this,t)}},Ut.take=function(n,t,r){return n&&n.length?((r?de(n,t,r):null==t)&&(t=1),Ar(n,0,0>t?0:t)):[]},Ut.takeRight=function(n,t,r){var e=n?n.length:0;return e?((r?de(n,t,r):null==t)&&(t=1),t=e-(+t||0),Ar(n,0>t?0:t)):[]
70
+ },Ut.takeRightWhile=function(n,t,r){return n&&n.length?Sr(n,pe(t,r,3),false,true):[]},Ut.takeWhile=function(n,t,r){return n&&n.length?Sr(n,pe(t,r,3)):[]},Ut.tap=function(n,t,r){return t.call(r,n),n},Ut.throttle=function(n,t,r){var e=true,u=true;if(typeof n!="function")throw new Cu($);return false===r?e=false:nu(r)&&(e="leading"in r?!!r.leading:e,u="trailing"in r?!!r.trailing:u),Tt.leading=e,Tt.maxWait=+t,Tt.trailing=u,Ze(n,t,Tt)},Ut.thru=Pe,Ut.times=function(n,t,r){if(n=+n,1>n||!io(n))return[];var e=-1,u=xu(co(n,vo));
71
+ for(t=Fr(t,r,1);++e<n;)e<vo?u[e]=t(e):t(e);return u},Ut.toArray=function(n){var t=n?n.length:0;return we(t)?t?Ut.support.unindexedChars&&uu(n)?n.split(""):Bt(n):[]:cu(n)},Ut.toPlainObject=iu,Ut.transform=function(n,t,r,e){var u=yi(n)||ou(n);return t=pe(t,e,4),null==r&&(u||nu(n)?(e=n.constructor,r=u?yi(n)?new e:[]:Io(mi(e)&&e.prototype)):r={}),(u?zt:lr)(n,function(n,e,u){return t(r,n,e,u)}),r},Ut.union=Do,Ut.uniq=We,Ut.unzip=Ne,Ut.values=cu,Ut.valuesIn=function(n){return Rr(n,au(n))},Ut.where=function(n,t){return ze(n,yr(t))
72
+ },Ut.without=qo,Ut.wrap=function(n,t){return t=null==t?du:t,fe(t,I,null,[n],[])},Ut.xor=function(){for(var n=-1,t=arguments.length;++n<t;){var r=arguments[n];if(yi(r)||Xe(r))var e=e?ur(e,r).concat(ur(r,e)):r}return e?kr(e):[]},Ut.zip=Ko,Ut.zipObject=Le,Ut.backflow=hi,Ut.collect=De,Ut.compose=hi,Ut.each=Jo,Ut.eachRight=Xo,Ut.extend=bi,Ut.iteratee=vu,Ut.methods=fu,Ut.object=Le,Ut.select=ze,Ut.tail=Fe,Ut.unique=We,wu(Ut,Ut),Ut.add=function(n,t){return n+t},Ut.attempt=Pi,Ut.camelCase=Ui,Ut.capitalize=function(n){return(n=u(n))&&n.charAt(0).toUpperCase()+n.slice(1)
73
+ },Ut.clone=function(n,t,r,e){return t&&typeof t!="boolean"&&de(n,t,r)?t=false:typeof t=="function"&&(e=r,r=t,t=false),r=typeof r=="function"&&Fr(r,e,1),rr(n,t,r)},Ut.cloneDeep=function(n,t,r){return t=typeof t=="function"&&Fr(t,r,1),rr(n,true,t)},Ut.deburr=lu,Ut.endsWith=function(n,t,r){n=u(n),t+="";var e=n.length;return r=typeof r=="undefined"?e:co(0>r?0:+r||0,e),r-=t.length,0<=r&&n.indexOf(t,r)==r},Ut.escape=function(n){return(n=u(n))&&pt.test(n)?n.replace(lt,l):n},Ut.escapeRegExp=su,Ut.every=Be,Ut.find=Zo,Ut.findIndex=$o,Ut.findKey=Ai,Ut.findLast=Go,Ut.findLastIndex=Po,Ut.findLastKey=ji,Ut.findWhere=function(n,t){return Zo(n,yr(t))
74
+ },Ut.first=Ce,Ut.has=function(n,t){return n?Pu.call(n,t):false},Ut.identity=du,Ut.includes=Me,Ut.indexOf=Te,Ut.inRange=function(n,t,r){return t=+t||0,"undefined"===typeof r?(r=t,t=0):r=+r||0,n>=t&&n<r},Ut.isArguments=Xe,Ut.isArray=yi,Ut.isBoolean=function(n){return true===n||false===n||h(n)&&zu.call(n)==M},Ut.isDate=function(n){return h(n)&&zu.call(n)==D},Ut.isElement=He,Ut.isEmpty=function(n){if(null==n)return true;var t=n.length;return we(t)&&(yi(n)||uu(n)||Xe(n)||h(n)&&mi(n.splice))?!t:!Ri(n).length},Ut.isEqual=function(n,t,r,e){return r=typeof r=="function"&&Fr(r,e,3),!r&&be(n)&&be(t)?n===t:(e=r?r(n,t):w,typeof e=="undefined"?hr(n,t,r):!!e)
75
+ },Ut.isError=Qe,Ut.isFinite=di,Ut.isFunction=mi,Ut.isMatch=function(n,t,r,e){var u=Ri(t),o=u.length;if(!o)return true;if(null==n)return false;if(r=typeof r=="function"&&Fr(r,e,3),!r&&1==o){var i=u[0];if(e=t[i],be(e))return e===n[i]&&(typeof e!="undefined"||i in Ie(n))}for(var i=xu(o),f=xu(o);o--;)e=i[o]=t[u[o]],f[o]=be(e);return gr(Ie(n),u,i,f,r)},Ut.isNaN=function(n){return ru(n)&&n!=+n},Ut.isNative=tu,Ut.isNull=function(n){return null===n},Ut.isNumber=ru,Ut.isObject=nu,Ut.isPlainObject=wi,Ut.isRegExp=eu,Ut.isString=uu,Ut.isTypedArray=ou,Ut.isUndefined=function(n){return typeof n=="undefined"
76
+ },Ut.kebabCase=Fi,Ut.last=Ue,Ut.lastIndexOf=function(n,t,r){var e=n?n.length:0;if(!e)return-1;var u=e;if(typeof r=="number")u=(0>r?ao(e+r,0):co(r||0,e-1))+1;else if(r)return u=Tr(n,t,true)-1,n=n[u],(t===t?t===n:n!==n)?u:-1;if(t!==t)return p(n,u,true);for(;u--;)if(n[u]===t)return u;return-1},Ut.max=Bi,Ut.min=zi,Ut.noConflict=function(){return _._=Mu,this},Ut.noop=bu,Ut.now=ui,Ut.pad=function(n,t,r){n=u(n),t=+t;var e=n.length;return e<t&&io(t)?(e=(t-e)/2,t=Zu(e),e=Vu(e),r=ue("",e,r),r.slice(0,t)+n+r):n
77
+ },Ut.padLeft=Wi,Ut.padRight=Ni,Ut.parseInt=pu,Ut.random=function(n,t,r){r&&de(n,t,r)&&(t=r=null);var e=null==n,u=null==t;return null==r&&(u&&typeof n=="boolean"?(r=n,n=1):typeof t=="boolean"&&(r=t,u=true)),e&&u&&(t=1,u=false),n=+n||0,u?(t=n,n=0):t=+t||0,r||n%1||t%1?(r=ho(),co(n+r*(t-n+parseFloat("1e-"+((r+"").length-1))),t)):br(n,t)},Ut.reduce=ri,Ut.reduceRight=ei,Ut.repeat=hu,Ut.result=function(n,t,r){return t=null==n?w:n[t],typeof t=="undefined"&&(t=r),mi(t)?t.call(n):t},Ut.runInContext=m,Ut.size=function(n){var t=n?n.length:0;
78
+ return we(t)?t:Ri(n).length},Ut.snakeCase=Li,Ut.some=Ve,Ut.sortedIndex=zo,Ut.sortedLastIndex=Mo,Ut.startCase=$i,Ut.startsWith=function(n,t,r){return n=u(n),r=null==r?0:co(0>r?0:+r||0,n.length),n.lastIndexOf(t,r)==r},Ut.sum=function(n,t,r){r&&de(n,t,r)&&(t=null);var e=pe(),u=null==t;if(e===tr&&u||(u=false,t=e(t,r,3)),u){for(n=yi(n)?n:Ee(n),t=n.length,r=0;t--;)r+=+n[t]||0;n=r}else n=Ir(n,t);return n},Ut.template=function(n,t,r){var e=Ut.templateSettings;r&&de(n,t,r)&&(t=r=null),n=u(n),t=Ht(Ht({},r||t),e,Xt),r=Ht(Ht({},t.imports),e.imports,Xt);
79
+ var o,i,f=Ri(r),a=Rr(r,f),c=0;r=t.interpolate||xt;var l="__p+='";r=Ru((t.escape||xt).source+"|"+r.source+"|"+(r===gt?yt:xt).source+"|"+(t.evaluate||xt).source+"|$","g");var p="sourceURL"in t?"//# sourceURL="+t.sourceURL+"\n":"";if(n.replace(r,function(t,r,e,u,f,a){return e||(e=u),l+=n.slice(c,a).replace(Ot,s),r&&(o=true,l+="'+__e("+r+")+'"),f&&(i=true,l+="';"+f+";\n__p+='"),e&&(l+="'+((__t=("+e+"))==null?'':__t)+'"),c=a+t.length,t}),l+="';",(t=t.variable)||(l="with(obj){"+l+"}"),l=(i?l.replace(it,""):l).replace(ft,"$1").replace(at,"$1;"),l="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(o?",__e=_.escape":"")+(i?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+l+"return __p}",t=Pi(function(){return Ou(f,p+"return "+l).apply(w,a)
80
+ }),t.source=l,Qe(t))throw t;return t},Ut.trim=_u,Ut.trimLeft=function(n,t,r){var e=n;return(n=u(n))?n.slice((r?de(e,t,r):null==t)?v(n):i(n,t+"")):n},Ut.trimRight=function(n,t,r){var e=n;return(n=u(n))?(r?de(e,t,r):null==t)?n.slice(0,y(n)+1):n.slice(0,f(n,t+"")+1):n},Ut.trunc=function(n,t,r){r&&de(n,t,r)&&(t=null);var e=C;if(r=T,null!=t)if(nu(t)){var o="separator"in t?t.separator:o,e="length"in t?+t.length||0:e;r="omission"in t?u(t.omission):r}else e=+t||0;if(n=u(n),e>=n.length)return n;if(e-=r.length,1>e)return r;
81
+ if(t=n.slice(0,e),null==o)return t+r;if(eu(o)){if(n.slice(e).search(o)){var i,f=n.slice(0,e);for(o.global||(o=Ru(o.source,(dt.exec(o)||"")+"g")),o.lastIndex=0;n=o.exec(f);)i=n.index;t=t.slice(0,null==i?e:i)}}else n.indexOf(o,e)!=e&&(o=t.lastIndexOf(o),-1<o&&(t=t.slice(0,o)));return t+r},Ut.unescape=function(n){return(n=u(n))&&st.test(n)?n.replace(ct,d):n},Ut.uniqueId=function(n){var t=++Bu;return u(n)+t},Ut.words=gu,Ut.all=Be,Ut.any=Ve,Ut.contains=Me,Ut.detect=Zo,Ut.foldl=ri,Ut.foldr=ei,Ut.head=Ce,Ut.include=Me,Ut.inject=ri,wu(Ut,function(){var n={};
82
+ return lr(Ut,function(t,r){Ut.prototype[r]||(n[r]=t)}),n}(),false),Ut.sample=qe,Ut.prototype.sample=function(n){return this.__chain__||null!=n?this.thru(function(t){return qe(t,n)}):qe(this.value())},Ut.VERSION=b,zt("bind bindKey curry curryRight partial partialRight".split(" "),function(n){Ut[n].placeholder=Ut}),zt(["dropWhile","filter","map","takeWhile"],function(n,t){var r=t!=L,e=t==W;Nt.prototype[n]=function(n,u){var o=this.__filtered__,i=o&&e?new Nt(this):this.clone();return(i.__iteratees__||(i.__iteratees__=[])).push({done:false,count:0,index:0,iteratee:pe(n,u,1),limit:-1,type:t}),i.__filtered__=o||r,i
83
+ }}),zt(["drop","take"],function(n,t){var r=n+"While";Nt.prototype[n]=function(r){var e=this.__filtered__,u=e&&!t?this.dropWhile():this.clone();return r=null==r?1:ao(Zu(r)||0,0),e?t?u.__takeCount__=co(u.__takeCount__,r):Ue(u.__iteratees__).limit=r:(u.__views__||(u.__views__=[])).push({size:r,type:n+(0>u.__dir__?"Right":"")}),u},Nt.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()},Nt.prototype[n+"RightWhile"]=function(n,t){return this.reverse()[r](n,t).reverse()}}),zt(["first","last"],function(n,t){var r="take"+(t?"Right":"");
84
+ Nt.prototype[n]=function(){return this[r](1).value()[0]}}),zt(["initial","rest"],function(n,t){var r="drop"+(t?"":"Right");Nt.prototype[n]=function(){return this[r](1)}}),zt(["pluck","where"],function(n,t){var r=t?"filter":"map",e=t?yr:wr;Nt.prototype[n]=function(n){return this[r](e(n))}}),Nt.prototype.compact=function(){return this.filter(du)},Nt.prototype.reject=function(n,t){return n=pe(n,t,1),this.filter(function(t){return!n(t)})},Nt.prototype.slice=function(n,t){n=null==n?0:+n||0;var r=0>n?this.takeRight(-n):this.drop(n);
85
+ return typeof t!="undefined"&&(t=+t||0,r=0>t?r.dropRight(-t):r.take(t-n)),r},Nt.prototype.toArray=function(){return this.drop(0)},lr(Nt.prototype,function(n,t){var r=Ut[t];if(r){var e=/^(?:filter|map|reject)|While$/.test(t),u=/^(?:first|last)$/.test(t);Ut.prototype[t]=function(){function t(n){return n=[n],Ju.apply(n,o),r.apply(Ut,n)}var o=arguments,i=this.__chain__,f=this.__wrapped__,a=!!this.__actions__.length,c=f instanceof Nt,l=o[0],s=c||yi(f);return s&&e&&typeof l=="function"&&1!=l.length&&(c=s=false),c=c&&!a,u&&!i?c?n.call(f):r.call(Ut,this.value()):s?(f=n.apply(c?f:new Nt(this),o),u||!a&&!f.__actions__||(f.__actions__||(f.__actions__=[])).push({func:Pe,args:[t],thisArg:Ut}),new Wt(f,i)):this.thru(t)
86
+ }}}),zt("concat join pop push replace shift sort splice split unshift".split(" "),function(n){var t=(/^(?:replace|split)$/.test(n)?Wu:Tu)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:join|pop|replace|shift)$/.test(n),u=Eo.spliceObjects||!/^(?:pop|shift|splice)$/.test(n)?t:function(){var n=t.apply(this,arguments);return 0===this.length&&delete this[0],n};Ut.prototype[n]=function(){var n=arguments;return e&&!this.__chain__?u.apply(this.value(),n):this[r](function(t){return u.apply(t,n)
87
+ })}}),lr(Nt.prototype,function(n,t){var r=Ut[t];if(r){var e=r.name;(Ao[e]||(Ao[e]=[])).push({name:t,func:r})}}),Ao[ee(null,A).name]=[{name:"wrapper",func:null}],Nt.prototype.clone=function(){var n=this.__actions__,t=this.__iteratees__,r=this.__views__,e=new Nt(this.__wrapped__);return e.__actions__=n?Bt(n):null,e.__dir__=this.__dir__,e.__filtered__=this.__filtered__,e.__iteratees__=t?Bt(t):null,e.__takeCount__=this.__takeCount__,e.__views__=r?Bt(r):null,e},Nt.prototype.reverse=function(){if(this.__filtered__){var n=new Nt(this);
88
+ n.__dir__=-1,n.__filtered__=true}else n=this.clone(),n.__dir__*=-1;return n},Nt.prototype.value=function(){var n=this.__wrapped__.value();if(!yi(n))return Cr(n,this.__actions__);var t,r=this.__dir__,e=0>r;t=n.length;for(var u=this.__views__,o=0,i=-1,f=u?u.length:0;++i<f;){var a=u[i],c=a.size;switch(a.type){case"drop":o+=c;break;case"dropRight":t-=c;break;case"take":t=co(t,o+c);break;case"takeRight":o=ao(o,t-c)}}t={start:o,end:t},u=t.start,o=t.end,t=o-u,u=e?o:u-1,o=co(t,this.__takeCount__),f=(i=this.__iteratees__)?i.length:0,a=0,c=[];
89
+ n:for(;t--&&a<o;){for(var u=u+r,l=-1,s=n[u];++l<f;){var p=i[l],h=p.iteratee,_=p.type;if(_==W){if(p.done&&(e?u>p.index:u<p.index)&&(p.count=0,p.done=false),p.index=u,!(p.done||(_=p.limit,p.done=-1<_?p.count++>=_:!h(s))))continue n}else if(p=h(s),_==L)s=p;else if(!p){if(_==N)continue n;break n}}c[a++]=s}return c},Ut.prototype.chain=function(){return $e(this)},Ut.prototype.commit=function(){return new Wt(this.value(),this.__chain__)},Ut.prototype.plant=function(n){for(var t,r=this;r instanceof Ft;){var e=ke(r);
90
+ t?u.__wrapped__=e:t=e;var u=e,r=r.__wrapped__}return u.__wrapped__=n,t},Ut.prototype.reverse=function(){var n=this.__wrapped__;return n instanceof Nt?(this.__actions__.length&&(n=new Nt(this)),new Wt(n.reverse(),this.__chain__)):this.thru(function(n){return n.reverse()})},Ut.prototype.toString=function(){return this.value()+""},Ut.prototype.run=Ut.prototype.toJSON=Ut.prototype.valueOf=Ut.prototype.value=function(){return Cr(this.__wrapped__,this.__actions__)},Ut.prototype.collect=Ut.prototype.map,Ut.prototype.head=Ut.prototype.first,Ut.prototype.select=Ut.prototype.filter,Ut.prototype.tail=Ut.prototype.rest,Ut
91
+ }var w,b="3.6.0",x=1,A=2,j=4,O=8,E=16,I=32,k=64,R=128,S=256,C=30,T="...",U=150,F=16,W=0,N=1,L=2,$="Expected a function",P="__lodash_placeholder__",B="[object Arguments]",z="[object Array]",M="[object Boolean]",D="[object Date]",q="[object Error]",K="[object Function]",V="[object Number]",Y="[object Object]",Z="[object RegExp]",G="[object String]",J="[object ArrayBuffer]",X="[object Float32Array]",H="[object Float64Array]",Q="[object Int8Array]",nt="[object Int16Array]",tt="[object Int32Array]",rt="[object Uint8Array]",et="[object Uint8ClampedArray]",ut="[object Uint16Array]",ot="[object Uint32Array]",it=/\b__p\+='';/g,ft=/\b(__p\+=)''\+/g,at=/(__e\(.*?\)|\b__t\))\+'';/g,ct=/&(?:amp|lt|gt|quot|#39|#96);/g,lt=/[&<>"'`]/g,st=RegExp(ct.source),pt=RegExp(lt.source),ht=/<%-([\s\S]+?)%>/g,_t=/<%([\s\S]+?)%>/g,gt=/<%=([\s\S]+?)%>/g,vt=/[\u0300-\u036f\ufe20-\ufe23]/g,yt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,dt=/\w*$/,mt=/^0[xX]/,wt=/^\[object .+?Constructor\]$/,bt=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,xt=/($^)/,At=/[.*+?^${}()|[\]\/\\]/g,jt=RegExp(At.source),Ot=/['\n\r\u2028\u2029\\]/g,Et=RegExp("[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?=[A-Z\\xc0-\\xd6\\xd8-\\xde][a-z\\xdf-\\xf6\\xf8-\\xff]+)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+|[A-Z\\xc0-\\xd6\\xd8-\\xde]+|[0-9]+","g"),It=" \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",kt="Array ArrayBuffer Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Math Number Object RegExp Set String _ clearTimeout document isFinite parseInt setTimeout TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap window".split(" "),Rt="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),St={};
92
+ St[X]=St[H]=St[Q]=St[nt]=St[tt]=St[rt]=St[et]=St[ut]=St[ot]=true,St[B]=St[z]=St[J]=St[M]=St[D]=St[q]=St[K]=St["[object Map]"]=St[V]=St[Y]=St[Z]=St["[object Set]"]=St[G]=St["[object WeakMap]"]=false;var Ct={};Ct[B]=Ct[z]=Ct[J]=Ct[M]=Ct[D]=Ct[X]=Ct[H]=Ct[Q]=Ct[nt]=Ct[tt]=Ct[V]=Ct[Y]=Ct[Z]=Ct[G]=Ct[rt]=Ct[et]=Ct[ut]=Ct[ot]=true,Ct[q]=Ct[K]=Ct["[object Map]"]=Ct["[object Set]"]=Ct["[object WeakMap]"]=false;var Tt={leading:false,maxWait:0,trailing:false},Ut={"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss"},Ft={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","`":"&#96;"},Wt={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&#96;":"`"},Nt={"function":true,object:true},Lt={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},$t=Nt[typeof exports]&&exports&&!exports.nodeType&&exports,Pt=Nt[typeof module]&&module&&!module.nodeType&&module,Bt=Nt[typeof self]&&self&&self.Object&&self,Nt=Nt[typeof window]&&window&&window.Object&&window,zt=Pt&&Pt.exports===$t&&$t,Mt=$t&&Pt&&typeof global=="object"&&global||Nt!==(this&&this.window)&&Nt||Bt||this,Dt=function(){try{Object({toString:0}+"")
93
+ }catch(n){return function(){return false}}return function(n){return typeof n.toString!="function"&&typeof(n+"")=="string"}}(),qt=m();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(Mt._=qt, define(function(){return qt})):$t&&Pt?zt?(Pt.exports=qt)._=qt:$t._=qt:Mt._=qt}).call(this);
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * lodash 3.5.0 (Custom Build) <https://lodash.com/>
3
+ * lodash 3.6.0 (Custom Build) <https://lodash.com/>
4
4
  * Build: `lodash modern -o ./lodash.js`
5
5
  * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
6
6
  * Based on Underscore.js 1.8.2 <http://underscorejs.org/LICENSE>
@@ -13,7 +13,7 @@
13
13
  var undefined;
14
14
 
15
15
  /** Used as the semantic version number. */
16
- var VERSION = '3.5.0';
16
+ var VERSION = '3.6.0';
17
17
 
18
18
  /** Used to compose bitmasks for wrapper metadata. */
19
19
  var BIND_FLAG = 1,
@@ -23,8 +23,8 @@
23
23
  CURRY_RIGHT_FLAG = 16,
24
24
  PARTIAL_FLAG = 32,
25
25
  PARTIAL_RIGHT_FLAG = 64,
26
- REARG_FLAG = 128,
27
- ARY_FLAG = 256;
26
+ ARY_FLAG = 128,
27
+ REARG_FLAG = 256;
28
28
 
29
29
  /** Used as default options for `_.trunc`. */
30
30
  var DEFAULT_TRUNC_LENGTH = 30,
@@ -88,18 +88,18 @@
88
88
  reInterpolate = /<%=([\s\S]+?)%>/g;
89
89
 
90
90
  /**
91
- * Used to match ES template delimiters.
92
- * See the [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-template-literal-lexical-components)
93
- * for more details.
91
+ * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
92
+ */
93
+ var reComboMarks = /[\u0300-\u036f\ufe20-\ufe23]/g;
94
+
95
+ /**
96
+ * Used to match [ES template delimiters](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-template-literal-lexical-components).
94
97
  */
95
98
  var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
96
99
 
97
100
  /** Used to match `RegExp` flags from their coerced string values. */
98
101
  var reFlags = /\w*$/;
99
102
 
100
- /** Used to detect named functions. */
101
- var reFuncName = /^\s*function[ \n\r\t]+\w/;
102
-
103
103
  /** Used to detect hexadecimal string values. */
104
104
  var reHexPrefix = /^0[xX]/;
105
105
 
@@ -113,16 +113,13 @@
113
113
  var reNoMatch = /($^)/;
114
114
 
115
115
  /**
116
- * Used to match `RegExp` special characters.
117
- * See this [article on `RegExp` characters](http://www.regular-expressions.info/characters.html#special)
118
- * for more details.
116
+ * Used to match `RegExp` [special characters](http://www.regular-expressions.info/characters.html#special).
117
+ * In addition to special characters the forward slash is escaped to allow for
118
+ * easier `eval` use and `Function` compilation.
119
119
  */
120
120
  var reRegExpChars = /[.*+?^${}()|[\]\/\\]/g,
121
121
  reHasRegExpChars = RegExp(reRegExpChars.source);
122
122
 
123
- /** Used to detect functions containing a `this` reference. */
124
- var reThis = /\bthis\b/;
125
-
126
123
  /** Used to match unescaped characters in compiled string literals. */
127
124
  var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
128
125
 
@@ -153,7 +150,7 @@
153
150
  'Object', 'RegExp', 'Set', 'String', '_', 'clearTimeout', 'document',
154
151
  'isFinite', 'parseInt', 'setTimeout', 'TypeError', 'Uint8Array',
155
152
  'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',
156
- 'window', 'WinRTError'
153
+ 'window'
157
154
  ];
158
155
 
159
156
  /** Used to make template sourceURLs easier to identify. */
@@ -262,8 +259,11 @@
262
259
  /** Detect free variable `global` from Node.js. */
263
260
  var freeGlobal = freeExports && freeModule && typeof global == 'object' && global;
264
261
 
262
+ /** Detect free variable `self`. */
263
+ var freeSelf = objectTypes[typeof self] && self && self.Object && self;
264
+
265
265
  /** Detect free variable `window`. */
266
- var freeWindow = objectTypes[typeof window] && window;
266
+ var freeWindow = objectTypes[typeof window] && window && window.Object && window;
267
267
 
268
268
  /** Detect the popular CommonJS extension `module.exports`. */
269
269
  var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;
@@ -274,7 +274,7 @@
274
274
  * The `this` value is used if it is the global object to avoid Greasemonkey's
275
275
  * restricted `window` object, otherwise the `window` object is used.
276
276
  */
277
- var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || this;
277
+ var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;
278
278
 
279
279
  /*--------------------------------------------------------------------------*/
280
280
 
@@ -302,6 +302,28 @@
302
302
  return 0;
303
303
  }
304
304
 
305
+ /**
306
+ * The base implementation of `_.findIndex` and `_.findLastIndex` without
307
+ * support for callback shorthands and `this` binding.
308
+ *
309
+ * @private
310
+ * @param {Array} array The array to search.
311
+ * @param {Function} predicate The function invoked per iteration.
312
+ * @param {boolean} [fromRight] Specify iterating from right to left.
313
+ * @returns {number} Returns the index of the matched value, else `-1`.
314
+ */
315
+ function baseFindIndex(array, predicate, fromRight) {
316
+ var length = array.length,
317
+ index = fromRight ? length : -1;
318
+
319
+ while ((fromRight ? index-- : ++index < length)) {
320
+ if (predicate(array[index], index, array)) {
321
+ return index;
322
+ }
323
+ }
324
+ return -1;
325
+ }
326
+
305
327
  /**
306
328
  * The base implementation of `_.indexOf` without support for binary searches.
307
329
  *
@@ -488,7 +510,6 @@
488
510
 
489
511
  /**
490
512
  * Gets the index at which the first occurrence of `NaN` is found in `array`.
491
- * If `fromRight` is provided elements of `array` are iterated from right to left.
492
513
  *
493
514
  * @private
494
515
  * @param {Array} array The array to search.
@@ -517,7 +538,7 @@
517
538
  * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
518
539
  */
519
540
  function isObjectLike(value) {
520
- return (value && typeof value == 'object') || false;
541
+ return !!value && typeof value == 'object';
521
542
  }
522
543
 
523
544
  /**
@@ -639,19 +660,19 @@
639
660
  * @returns {Function} Returns a new `lodash` function.
640
661
  * @example
641
662
  *
642
- * _.mixin({ 'add': function(a, b) { return a + b; } });
663
+ * _.mixin({ 'foo': _.constant('foo') });
643
664
  *
644
665
  * var lodash = _.runInContext();
645
- * lodash.mixin({ 'sub': function(a, b) { return a - b; } });
666
+ * lodash.mixin({ 'bar': lodash.constant('bar') });
646
667
  *
647
- * _.isFunction(_.add);
668
+ * _.isFunction(_.foo);
648
669
  * // => true
649
- * _.isFunction(_.sub);
670
+ * _.isFunction(_.bar);
650
671
  * // => false
651
672
  *
652
- * lodash.isFunction(lodash.add);
673
+ * lodash.isFunction(lodash.foo);
653
674
  * // => false
654
- * lodash.isFunction(lodash.sub);
675
+ * lodash.isFunction(lodash.bar);
655
676
  * // => true
656
677
  *
657
678
  * // using `context` to mock `Date#getTime` use in `_.now`
@@ -704,9 +725,8 @@
704
725
  var idCounter = 0;
705
726
 
706
727
  /**
707
- * Used to resolve the `toStringTag` of values.
708
- * See the [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring)
709
- * for more details.
728
+ * Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring)
729
+ * of values.
710
730
  */
711
731
  var objToString = objectProto.toString;
712
732
 
@@ -771,15 +791,17 @@
771
791
  var FLOAT64_BYTES_PER_ELEMENT = Float64Array ? Float64Array.BYTES_PER_ELEMENT : 0;
772
792
 
773
793
  /**
774
- * Used as the maximum length of an array-like value.
775
- * See the [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)
776
- * for more details.
794
+ * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)
795
+ * of an array-like value.
777
796
  */
778
797
  var MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;
779
798
 
780
799
  /** Used to store function metadata. */
781
800
  var metaMap = WeakMap && new WeakMap;
782
801
 
802
+ /** Used to lookup unminified function names. */
803
+ var realNames = {};
804
+
783
805
  /*------------------------------------------------------------------------*/
784
806
 
785
807
  /**
@@ -929,7 +951,7 @@
929
951
  * @memberOf _.support
930
952
  * @type boolean
931
953
  */
932
- support.funcDecomp = !isNative(context.WinRTError) && reThis.test(runInContext);
954
+ support.funcDecomp = /\bthis\b/.test(function() { return this; });
933
955
 
934
956
  /**
935
957
  * Detect if `Function#name` is supported (all but IE).
@@ -1305,7 +1327,7 @@
1305
1327
 
1306
1328
  /**
1307
1329
  * A specialized version of `_.forEach` for arrays without support for callback
1308
- * shorthands or `this` binding.
1330
+ * shorthands and `this` binding.
1309
1331
  *
1310
1332
  * @private
1311
1333
  * @param {Array} array The array to iterate over.
@@ -1326,7 +1348,7 @@
1326
1348
 
1327
1349
  /**
1328
1350
  * A specialized version of `_.forEachRight` for arrays without support for
1329
- * callback shorthands or `this` binding.
1351
+ * callback shorthands and `this` binding.
1330
1352
  *
1331
1353
  * @private
1332
1354
  * @param {Array} array The array to iterate over.
@@ -1346,7 +1368,7 @@
1346
1368
 
1347
1369
  /**
1348
1370
  * A specialized version of `_.every` for arrays without support for callback
1349
- * shorthands or `this` binding.
1371
+ * shorthands and `this` binding.
1350
1372
  *
1351
1373
  * @private
1352
1374
  * @param {Array} array The array to iterate over.
@@ -1368,7 +1390,7 @@
1368
1390
 
1369
1391
  /**
1370
1392
  * A specialized version of `_.filter` for arrays without support for callback
1371
- * shorthands or `this` binding.
1393
+ * shorthands and `this` binding.
1372
1394
  *
1373
1395
  * @private
1374
1396
  * @param {Array} array The array to iterate over.
@@ -1392,7 +1414,7 @@
1392
1414
 
1393
1415
  /**
1394
1416
  * A specialized version of `_.map` for arrays without support for callback
1395
- * shorthands or `this` binding.
1417
+ * shorthands and `this` binding.
1396
1418
  *
1397
1419
  * @private
1398
1420
  * @param {Array} array The array to iterate over.
@@ -1454,7 +1476,7 @@
1454
1476
 
1455
1477
  /**
1456
1478
  * A specialized version of `_.reduce` for arrays without support for callback
1457
- * shorthands or `this` binding.
1479
+ * shorthands and `this` binding.
1458
1480
  *
1459
1481
  * @private
1460
1482
  * @param {Array} array The array to iterate over.
@@ -1479,7 +1501,7 @@
1479
1501
 
1480
1502
  /**
1481
1503
  * A specialized version of `_.reduceRight` for arrays without support for
1482
- * callback shorthands or `this` binding.
1504
+ * callback shorthands and `this` binding.
1483
1505
  *
1484
1506
  * @private
1485
1507
  * @param {Array} array The array to iterate over.
@@ -1502,7 +1524,7 @@
1502
1524
 
1503
1525
  /**
1504
1526
  * A specialized version of `_.some` for arrays without support for callback
1505
- * shorthands or `this` binding.
1527
+ * shorthands and `this` binding.
1506
1528
  *
1507
1529
  * @private
1508
1530
  * @param {Array} array The array to iterate over.
@@ -1522,6 +1544,23 @@
1522
1544
  return false;
1523
1545
  }
1524
1546
 
1547
+ /**
1548
+ * A specialized version of `_.sum` for arrays without support for iteratees.
1549
+ *
1550
+ * @private
1551
+ * @param {Array} array The array to iterate over.
1552
+ * @returns {number} Returns the sum.
1553
+ */
1554
+ function arraySum(array) {
1555
+ var length = array.length,
1556
+ result = 0;
1557
+
1558
+ while (length--) {
1559
+ result += +array[length] || 0;
1560
+ }
1561
+ return result;
1562
+ }
1563
+
1525
1564
  /**
1526
1565
  * Used by `_.defaults` to customize its `_.assign` use.
1527
1566
  *
@@ -1636,26 +1675,6 @@
1636
1675
  return object;
1637
1676
  }
1638
1677
 
1639
- /**
1640
- * The base implementation of `_.bindAll` without support for individual
1641
- * method name arguments.
1642
- *
1643
- * @private
1644
- * @param {Object} object The object to bind and assign the bound methods to.
1645
- * @param {string[]} methodNames The object method names to bind.
1646
- * @returns {Object} Returns `object`.
1647
- */
1648
- function baseBindAll(object, methodNames) {
1649
- var index = -1,
1650
- length = methodNames.length;
1651
-
1652
- while (++index < length) {
1653
- var key = methodNames[index];
1654
- object[key] = createWrapper(object[key], BIND_FLAG, object);
1655
- }
1656
- return object;
1657
- }
1658
-
1659
1678
  /**
1660
1679
  * The base implementation of `_.callback` which supports specifying the
1661
1680
  * number of arguments to provide to `func`.
@@ -1669,9 +1688,9 @@
1669
1688
  function baseCallback(func, thisArg, argCount) {
1670
1689
  var type = typeof func;
1671
1690
  if (type == 'function') {
1672
- return (typeof thisArg != 'undefined' && isBindable(func))
1673
- ? bindCallback(func, thisArg, argCount)
1674
- : func;
1691
+ return typeof thisArg == 'undefined'
1692
+ ? func
1693
+ : bindCallback(func, thisArg, argCount);
1675
1694
  }
1676
1695
  if (func == null) {
1677
1696
  return identity;
@@ -1778,14 +1797,14 @@
1778
1797
  * @private
1779
1798
  * @param {Function} func The function to delay.
1780
1799
  * @param {number} wait The number of milliseconds to delay invocation.
1781
- * @param {Object} args The `arguments` object to slice and provide to `func`.
1800
+ * @param {Object} args The arguments provide to `func`.
1782
1801
  * @returns {number} Returns the timer id.
1783
1802
  */
1784
- function baseDelay(func, wait, args, fromIndex) {
1803
+ function baseDelay(func, wait, args) {
1785
1804
  if (typeof func != 'function') {
1786
1805
  throw new TypeError(FUNC_ERROR_TEXT);
1787
1806
  }
1788
- return setTimeout(function() { func.apply(undefined, baseSlice(args, fromIndex)); }, wait);
1807
+ return setTimeout(function() { func.apply(undefined, args); }, wait);
1789
1808
  }
1790
1809
 
1791
1810
  /**
@@ -1844,21 +1863,7 @@
1844
1863
  * @param {Function} iteratee The function invoked per iteration.
1845
1864
  * @returns {Array|Object|string} Returns `collection`.
1846
1865
  */
1847
- function baseEach(collection, iteratee) {
1848
- var length = collection ? collection.length : 0;
1849
- if (!isLength(length)) {
1850
- return baseForOwn(collection, iteratee);
1851
- }
1852
- var index = -1,
1853
- iterable = toObject(collection);
1854
-
1855
- while (++index < length) {
1856
- if (iteratee(iterable[index], index, iterable) === false) {
1857
- break;
1858
- }
1859
- }
1860
- return collection;
1861
- }
1866
+ var baseEach = createBaseEach(baseForOwn);
1862
1867
 
1863
1868
  /**
1864
1869
  * The base implementation of `_.forEachRight` without support for callback
@@ -1869,23 +1874,11 @@
1869
1874
  * @param {Function} iteratee The function invoked per iteration.
1870
1875
  * @returns {Array|Object|string} Returns `collection`.
1871
1876
  */
1872
- function baseEachRight(collection, iteratee) {
1873
- var length = collection ? collection.length : 0;
1874
- if (!isLength(length)) {
1875
- return baseForOwnRight(collection, iteratee);
1876
- }
1877
- var iterable = toObject(collection);
1878
- while (length--) {
1879
- if (iteratee(iterable[length], length, iterable) === false) {
1880
- break;
1881
- }
1882
- }
1883
- return collection;
1884
- }
1877
+ var baseEachRight = createBaseEach(baseForOwnRight, true);
1885
1878
 
1886
1879
  /**
1887
1880
  * The base implementation of `_.every` without support for callback
1888
- * shorthands or `this` binding.
1881
+ * shorthands and `this` binding.
1889
1882
  *
1890
1883
  * @private
1891
1884
  * @param {Array|Object|string} collection The collection to iterate over.
@@ -1934,7 +1927,7 @@
1934
1927
 
1935
1928
  /**
1936
1929
  * The base implementation of `_.filter` without support for callback
1937
- * shorthands or `this` binding.
1930
+ * shorthands and `this` binding.
1938
1931
  *
1939
1932
  * @private
1940
1933
  * @param {Array|Object|string} collection The collection to iterate over.
@@ -1983,11 +1976,10 @@
1983
1976
  * @param {Array} array The array to flatten.
1984
1977
  * @param {boolean} isDeep Specify a deep flatten.
1985
1978
  * @param {boolean} isStrict Restrict flattening to arrays and `arguments` objects.
1986
- * @param {number} fromIndex The index to start from.
1987
1979
  * @returns {Array} Returns the new flattened array.
1988
1980
  */
1989
- function baseFlatten(array, isDeep, isStrict, fromIndex) {
1990
- var index = fromIndex - 1,
1981
+ function baseFlatten(array, isDeep, isStrict) {
1982
+ var index = -1,
1991
1983
  length = array.length,
1992
1984
  resIndex = -1,
1993
1985
  result = [];
@@ -1998,7 +1990,7 @@
1998
1990
  if (isObjectLike(value) && isLength(value.length) && (isArray(value) || isArguments(value))) {
1999
1991
  if (isDeep) {
2000
1992
  // Recursively flatten arrays (susceptible to call stack limits).
2001
- value = baseFlatten(value, isDeep, isStrict, 0);
1993
+ value = baseFlatten(value, isDeep, isStrict);
2002
1994
  }
2003
1995
  var valIndex = -1,
2004
1996
  valLength = value.length;
@@ -2026,20 +2018,7 @@
2026
2018
  * @param {Function} keysFunc The function to get the keys of `object`.
2027
2019
  * @returns {Object} Returns `object`.
2028
2020
  */
2029
- function baseFor(object, iteratee, keysFunc) {
2030
- var index = -1,
2031
- iterable = toObject(object),
2032
- props = keysFunc(object),
2033
- length = props.length;
2034
-
2035
- while (++index < length) {
2036
- var key = props[index];
2037
- if (iteratee(iterable[key], key, iterable) === false) {
2038
- break;
2039
- }
2040
- }
2041
- return object;
2042
- }
2021
+ var baseFor = createBaseFor();
2043
2022
 
2044
2023
  /**
2045
2024
  * This function is like `baseFor` except that it iterates over properties
@@ -2051,19 +2030,7 @@
2051
2030
  * @param {Function} keysFunc The function to get the keys of `object`.
2052
2031
  * @returns {Object} Returns `object`.
2053
2032
  */
2054
- function baseForRight(object, iteratee, keysFunc) {
2055
- var iterable = toObject(object),
2056
- props = keysFunc(object),
2057
- length = props.length;
2058
-
2059
- while (length--) {
2060
- var key = props[length];
2061
- if (iteratee(iterable[key], key, iterable) === false) {
2062
- break;
2063
- }
2064
- }
2065
- return object;
2066
- }
2033
+ var baseForRight = createBaseFor(true);
2067
2034
 
2068
2035
  /**
2069
2036
  * The base implementation of `_.forIn` without support for callback
@@ -2128,30 +2095,6 @@
2128
2095
  return result;
2129
2096
  }
2130
2097
 
2131
- /**
2132
- * The base implementation of `_.invoke` which requires additional arguments
2133
- * to be provided as an array of arguments rather than individually.
2134
- *
2135
- * @private
2136
- * @param {Array|Object|string} collection The collection to iterate over.
2137
- * @param {Function|string} methodName The name of the method to invoke or
2138
- * the function invoked per iteration.
2139
- * @param {Array} [args] The arguments to invoke the method with.
2140
- * @returns {Array} Returns the array of results.
2141
- */
2142
- function baseInvoke(collection, methodName, args) {
2143
- var index = -1,
2144
- isFunc = typeof methodName == 'function',
2145
- length = collection ? collection.length : 0,
2146
- result = isLength(length) ? Array(length) : [];
2147
-
2148
- baseEach(collection, function(value) {
2149
- var func = isFunc ? methodName : (value != null && value[methodName]);
2150
- result[++index] = func ? func.apply(value, args) : undefined;
2151
- });
2152
- return result;
2153
- }
2154
-
2155
2098
  /**
2156
2099
  * The base implementation of `_.isEqual` without support for `this` binding
2157
2100
  * `customizer` functions.
@@ -2160,12 +2103,12 @@
2160
2103
  * @param {*} value The value to compare.
2161
2104
  * @param {*} other The other value to compare.
2162
2105
  * @param {Function} [customizer] The function to customize comparing values.
2163
- * @param {boolean} [isWhere] Specify performing partial comparisons.
2106
+ * @param {boolean} [isLoose] Specify performing partial comparisons.
2164
2107
  * @param {Array} [stackA] Tracks traversed `value` objects.
2165
2108
  * @param {Array} [stackB] Tracks traversed `other` objects.
2166
2109
  * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
2167
2110
  */
2168
- function baseIsEqual(value, other, customizer, isWhere, stackA, stackB) {
2111
+ function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {
2169
2112
  // Exit early for identical values.
2170
2113
  if (value === other) {
2171
2114
  // Treat `+0` vs. `-0` as not equal.
@@ -2180,7 +2123,7 @@
2180
2123
  // Return `false` unless both values are `NaN`.
2181
2124
  return value !== value && other !== other;
2182
2125
  }
2183
- return baseIsEqualDeep(value, other, baseIsEqual, customizer, isWhere, stackA, stackB);
2126
+ return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);
2184
2127
  }
2185
2128
 
2186
2129
  /**
@@ -2193,12 +2136,12 @@
2193
2136
  * @param {Object} other The other object to compare.
2194
2137
  * @param {Function} equalFunc The function to determine equivalents of values.
2195
2138
  * @param {Function} [customizer] The function to customize comparing objects.
2196
- * @param {boolean} [isWhere] Specify performing partial comparisons.
2139
+ * @param {boolean} [isLoose] Specify performing partial comparisons.
2197
2140
  * @param {Array} [stackA=[]] Tracks traversed `value` objects.
2198
2141
  * @param {Array} [stackB=[]] Tracks traversed `other` objects.
2199
2142
  * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
2200
2143
  */
2201
- function baseIsEqualDeep(object, other, equalFunc, customizer, isWhere, stackA, stackB) {
2144
+ function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {
2202
2145
  var objIsArr = isArray(object),
2203
2146
  othIsArr = isArray(other),
2204
2147
  objTag = arrayTag,
@@ -2220,21 +2163,27 @@
2220
2163
  othIsArr = isTypedArray(other);
2221
2164
  }
2222
2165
  }
2223
- var objIsObj = objTag == objectTag,
2224
- othIsObj = othTag == objectTag,
2166
+ var objIsObj = (objTag == objectTag || (isLoose && objTag == funcTag)),
2167
+ othIsObj = (othTag == objectTag || (isLoose && othTag == funcTag)),
2225
2168
  isSameTag = objTag == othTag;
2226
2169
 
2227
2170
  if (isSameTag && !(objIsArr || objIsObj)) {
2228
2171
  return equalByTag(object, other, objTag);
2229
2172
  }
2230
- var valWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
2231
- othWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
2173
+ if (isLoose) {
2174
+ if (!isSameTag && !(objIsObj && othIsObj)) {
2175
+ return false;
2176
+ }
2177
+ } else {
2178
+ var valWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
2179
+ othWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
2232
2180
 
2233
- if (valWrapped || othWrapped) {
2234
- return equalFunc(valWrapped ? object.value() : object, othWrapped ? other.value() : other, customizer, isWhere, stackA, stackB);
2235
- }
2236
- if (!isSameTag) {
2237
- return false;
2181
+ if (valWrapped || othWrapped) {
2182
+ return equalFunc(valWrapped ? object.value() : object, othWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);
2183
+ }
2184
+ if (!isSameTag) {
2185
+ return false;
2186
+ }
2238
2187
  }
2239
2188
  // Assume cyclic values are equal.
2240
2189
  // For more information on detecting circular references see https://es5.github.io/#JO.
@@ -2251,7 +2200,7 @@
2251
2200
  stackA.push(object);
2252
2201
  stackB.push(other);
2253
2202
 
2254
- var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isWhere, stackA, stackB);
2203
+ var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);
2255
2204
 
2256
2205
  stackA.pop();
2257
2206
  stackB.pop();
@@ -2261,7 +2210,7 @@
2261
2210
 
2262
2211
  /**
2263
2212
  * The base implementation of `_.isMatch` without support for callback
2264
- * shorthands or `this` binding.
2213
+ * shorthands and `this` binding.
2265
2214
  *
2266
2215
  * @private
2267
2216
  * @param {Object} object The object to inspect.
@@ -2272,30 +2221,27 @@
2272
2221
  * @returns {boolean} Returns `true` if `object` is a match, else `false`.
2273
2222
  */
2274
2223
  function baseIsMatch(object, props, values, strictCompareFlags, customizer) {
2275
- var length = props.length;
2276
- if (object == null) {
2277
- return !length;
2278
- }
2279
2224
  var index = -1,
2225
+ length = props.length,
2280
2226
  noCustomizer = !customizer;
2281
2227
 
2282
2228
  while (++index < length) {
2283
2229
  if ((noCustomizer && strictCompareFlags[index])
2284
2230
  ? values[index] !== object[props[index]]
2285
- : !hasOwnProperty.call(object, props[index])
2231
+ : !(props[index] in object)
2286
2232
  ) {
2287
2233
  return false;
2288
2234
  }
2289
2235
  }
2290
2236
  index = -1;
2291
2237
  while (++index < length) {
2292
- var key = props[index];
2238
+ var key = props[index],
2239
+ objValue = object[key],
2240
+ srcValue = values[index];
2241
+
2293
2242
  if (noCustomizer && strictCompareFlags[index]) {
2294
- var result = hasOwnProperty.call(object, key);
2243
+ var result = typeof objValue != 'undefined' || (key in object);
2295
2244
  } else {
2296
- var objValue = object[key],
2297
- srcValue = values[index];
2298
-
2299
2245
  result = customizer ? customizer(objValue, srcValue, key) : undefined;
2300
2246
  if (typeof result == 'undefined') {
2301
2247
  result = baseIsEqual(srcValue, objValue, customizer, true);
@@ -2310,7 +2256,7 @@
2310
2256
 
2311
2257
  /**
2312
2258
  * The base implementation of `_.map` without support for callback shorthands
2313
- * or `this` binding.
2259
+ * and `this` binding.
2314
2260
  *
2315
2261
  * @private
2316
2262
  * @param {Array|Object|string} collection The collection to iterate over.
@@ -2336,13 +2282,17 @@
2336
2282
  var props = keys(source),
2337
2283
  length = props.length;
2338
2284
 
2285
+ if (!length) {
2286
+ return constant(true);
2287
+ }
2339
2288
  if (length == 1) {
2340
2289
  var key = props[0],
2341
2290
  value = source[key];
2342
2291
 
2343
2292
  if (isStrictComparable(value)) {
2344
2293
  return function(object) {
2345
- return object != null && object[key] === value && hasOwnProperty.call(object, key);
2294
+ return object != null && object[key] === value &&
2295
+ (typeof value != 'undefined' || (key in toObject(object)));
2346
2296
  };
2347
2297
  }
2348
2298
  }
@@ -2355,7 +2305,7 @@
2355
2305
  strictCompareFlags[length] = isStrictComparable(value);
2356
2306
  }
2357
2307
  return function(object) {
2358
- return baseIsMatch(object, props, values, strictCompareFlags);
2308
+ return object != null && baseIsMatch(toObject(object), props, values, strictCompareFlags);
2359
2309
  };
2360
2310
  }
2361
2311
 
@@ -2371,7 +2321,8 @@
2371
2321
  function baseMatchesProperty(key, value) {
2372
2322
  if (isStrictComparable(value)) {
2373
2323
  return function(object) {
2374
- return object != null && object[key] === value;
2324
+ return object != null && object[key] === value &&
2325
+ (typeof value != 'undefined' || (key in toObject(object)));
2375
2326
  };
2376
2327
  }
2377
2328
  return function(object) {
@@ -2451,7 +2402,7 @@
2451
2402
  if (isLength(srcValue.length) && (isArray(srcValue) || isTypedArray(srcValue))) {
2452
2403
  result = isArray(value)
2453
2404
  ? value
2454
- : (value ? arrayCopy(value) : []);
2405
+ : ((value && value.length) ? arrayCopy(value) : []);
2455
2406
  }
2456
2407
  else if (isPlainObject(srcValue) || isArguments(srcValue)) {
2457
2408
  result = isArguments(value)
@@ -2488,30 +2439,6 @@
2488
2439
  };
2489
2440
  }
2490
2441
 
2491
- /**
2492
- * The base implementation of `_.pullAt` without support for individual
2493
- * index arguments.
2494
- *
2495
- * @private
2496
- * @param {Array} array The array to modify.
2497
- * @param {number[]} indexes The indexes of elements to remove.
2498
- * @returns {Array} Returns the new array of removed elements.
2499
- */
2500
- function basePullAt(array, indexes) {
2501
- var length = indexes.length,
2502
- result = baseAt(array, indexes);
2503
-
2504
- indexes.sort(baseCompareAscending);
2505
- while (length--) {
2506
- var index = parseFloat(indexes[length]);
2507
- if (index != previous && isIndex(index)) {
2508
- var previous = index;
2509
- splice.call(array, index, 1);
2510
- }
2511
- }
2512
- return result;
2513
- }
2514
-
2515
2442
  /**
2516
2443
  * The base implementation of `_.random` without support for argument juggling
2517
2444
  * and returning floating-point numbers.
@@ -2527,7 +2454,7 @@
2527
2454
 
2528
2455
  /**
2529
2456
  * The base implementation of `_.reduce` and `_.reduceRight` without support
2530
- * for callback shorthands or `this` binding, which iterates over `collection`
2457
+ * for callback shorthands and `this` binding, which iterates over `collection`
2531
2458
  * using the provided `eachFunc`.
2532
2459
  *
2533
2460
  * @private
@@ -2594,7 +2521,7 @@
2594
2521
 
2595
2522
  /**
2596
2523
  * The base implementation of `_.some` without support for callback shorthands
2597
- * or `this` binding.
2524
+ * and `this` binding.
2598
2525
  *
2599
2526
  * @private
2600
2527
  * @param {Array|Object|string} collection The collection to iterate over.
@@ -2661,6 +2588,23 @@
2661
2588
  });
2662
2589
  }
2663
2590
 
2591
+ /**
2592
+ * The base implementation of `_.sum` without support for callback shorthands
2593
+ * and `this` binding.
2594
+ *
2595
+ * @private
2596
+ * @param {Array|Object|string} collection The collection to iterate over.
2597
+ * @param {Function} iteratee The function invoked per iteration.
2598
+ * @returns {number} Returns the sum.
2599
+ */
2600
+ function baseSum(collection, iteratee) {
2601
+ var result = 0;
2602
+ baseEach(collection, function(value, index, collection) {
2603
+ result += +iteratee(value, index, collection) || 0;
2604
+ });
2605
+ return result;
2606
+ }
2607
+
2664
2608
  /**
2665
2609
  * The base implementation of `_.uniq` without support for callback shorthands
2666
2610
  * and `this` binding.
@@ -2734,6 +2678,27 @@
2734
2678
  return result;
2735
2679
  }
2736
2680
 
2681
+ /**
2682
+ * The base implementation of `_.dropRightWhile`, `_.dropWhile`, `_.takeRightWhile`,
2683
+ * and `_.takeWhile` without support for callback shorthands and `this` binding.
2684
+ *
2685
+ * @private
2686
+ * @param {Array} array The array to query.
2687
+ * @param {Function} predicate The function invoked per iteration.
2688
+ * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
2689
+ * @param {boolean} [fromRight] Specify iterating from right to left.
2690
+ * @returns {Array} Returns the slice of `array`.
2691
+ */
2692
+ function baseWhile(array, predicate, isDrop, fromRight) {
2693
+ var length = array.length,
2694
+ index = fromRight ? length : -1;
2695
+
2696
+ while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {}
2697
+ return isDrop
2698
+ ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
2699
+ : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
2700
+ }
2701
+
2737
2702
  /**
2738
2703
  * The base implementation of `wrapperValue` which returns the result of
2739
2704
  * performing a sequence of actions on the unwrapped `value`, where each
@@ -2742,7 +2707,7 @@
2742
2707
  * @private
2743
2708
  * @param {*} value The unwrapped value.
2744
2709
  * @param {Array} actions Actions to peform to resolve the unwrapped value.
2745
- * @returns {*} Returns the resolved unwrapped value.
2710
+ * @returns {*} Returns the resolved value.
2746
2711
  */
2747
2712
  function baseWrapperValue(value, actions) {
2748
2713
  var result = value;
@@ -2769,8 +2734,7 @@
2769
2734
  * @private
2770
2735
  * @param {Array} array The sorted array to inspect.
2771
2736
  * @param {*} value The value to evaluate.
2772
- * @param {boolean} [retHighest] Specify returning the highest, instead
2773
- * of the lowest, index at which a value should be inserted into `array`.
2737
+ * @param {boolean} [retHighest] Specify returning the highest qualified index.
2774
2738
  * @returns {number} Returns the index at which `value` should be inserted
2775
2739
  * into `array`.
2776
2740
  */
@@ -2803,8 +2767,7 @@
2803
2767
  * @param {Array} array The sorted array to inspect.
2804
2768
  * @param {*} value The value to evaluate.
2805
2769
  * @param {Function} iteratee The function invoked per iteration.
2806
- * @param {boolean} [retHighest] Specify returning the highest, instead
2807
- * of the lowest, index at which a value should be inserted into `array`.
2770
+ * @param {boolean} [retHighest] Specify returning the highest qualified index.
2808
2771
  * @returns {number} Returns the index at which `value` should be inserted
2809
2772
  * into `array`.
2810
2773
  */
@@ -2970,6 +2933,9 @@
2970
2933
  * object composed from the results of running each element in the collection
2971
2934
  * through an iteratee.
2972
2935
  *
2936
+ * **Note:** This function is used to create `_.countBy`, `_.groupBy`, `_.indexBy`,
2937
+ * and `_.partition`.
2938
+ *
2973
2939
  * @private
2974
2940
  * @param {Function} setter The function to set keys and values of the accumulator object.
2975
2941
  * @param {Function} [initializer] The function to initialize the accumulator object.
@@ -3001,6 +2967,8 @@
3001
2967
  * Creates a function that assigns properties of source object(s) to a given
3002
2968
  * destination object.
3003
2969
  *
2970
+ * **Note:** This function is used to create `_.assign`, `_.defaults`, and `_.merge`.
2971
+ *
3004
2972
  * @private
3005
2973
  * @param {Function} assigner The function to assign values.
3006
2974
  * @returns {Function} Returns the new assigner function.
@@ -3040,6 +3008,56 @@
3040
3008
  };
3041
3009
  }
3042
3010
 
3011
+ /**
3012
+ * Creates a `baseEach` or `baseEachRight` function.
3013
+ *
3014
+ * @private
3015
+ * @param {Function} eachFunc The function to iterate over a collection.
3016
+ * @param {boolean} [fromRight] Specify iterating from right to left.
3017
+ * @returns {Function} Returns the new base function.
3018
+ */
3019
+ function createBaseEach(eachFunc, fromRight) {
3020
+ return function(collection, iteratee) {
3021
+ var length = collection ? collection.length : 0;
3022
+ if (!isLength(length)) {
3023
+ return eachFunc(collection, iteratee);
3024
+ }
3025
+ var index = fromRight ? length : -1,
3026
+ iterable = toObject(collection);
3027
+
3028
+ while ((fromRight ? index-- : ++index < length)) {
3029
+ if (iteratee(iterable[index], index, iterable) === false) {
3030
+ break;
3031
+ }
3032
+ }
3033
+ return collection;
3034
+ };
3035
+ }
3036
+
3037
+ /**
3038
+ * Creates a base function for `_.forIn` or `_.forInRight`.
3039
+ *
3040
+ * @private
3041
+ * @param {boolean} [fromRight] Specify iterating from right to left.
3042
+ * @returns {Function} Returns the new base function.
3043
+ */
3044
+ function createBaseFor(fromRight) {
3045
+ return function(object, iteratee, keysFunc) {
3046
+ var iterable = toObject(object),
3047
+ props = keysFunc(object),
3048
+ length = props.length,
3049
+ index = fromRight ? length : -1;
3050
+
3051
+ while ((fromRight ? index-- : ++index < length)) {
3052
+ var key = props[index];
3053
+ if (iteratee(iterable[key], key, iterable) === false) {
3054
+ break;
3055
+ }
3056
+ }
3057
+ return object;
3058
+ };
3059
+ }
3060
+
3043
3061
  /**
3044
3062
  * Creates a function that wraps `func` and invokes it with the `this`
3045
3063
  * binding of `thisArg`.
@@ -3070,41 +3088,6 @@
3070
3088
  return new SetCache(values);
3071
3089
  };
3072
3090
 
3073
- /**
3074
- * Creates a function to compose other functions into a single function.
3075
- *
3076
- * @private
3077
- * @param {boolean} [fromRight] Specify iterating from right to left.
3078
- * @returns {Function} Returns the new composer function.
3079
- */
3080
- function createComposer(fromRight) {
3081
- return function() {
3082
- var length = arguments.length,
3083
- index = length,
3084
- fromIndex = fromRight ? (length - 1) : 0;
3085
-
3086
- if (!length) {
3087
- return function() { return arguments[0]; };
3088
- }
3089
- var funcs = Array(length);
3090
- while (index--) {
3091
- funcs[index] = arguments[index];
3092
- if (typeof funcs[index] != 'function') {
3093
- throw new TypeError(FUNC_ERROR_TEXT);
3094
- }
3095
- }
3096
- return function() {
3097
- var index = fromIndex,
3098
- result = funcs[index].apply(this, arguments);
3099
-
3100
- while ((fromRight ? index-- : ++index < length)) {
3101
- result = funcs[index].call(this, result);
3102
- }
3103
- return result;
3104
- };
3105
- };
3106
- }
3107
-
3108
3091
  /**
3109
3092
  * Creates a function that produces compound words out of the words in a
3110
3093
  * given string.
@@ -3147,7 +3130,26 @@
3147
3130
  }
3148
3131
 
3149
3132
  /**
3150
- * Creates a function that gets the extremum value of a collection.
3133
+ * Creates a `_.curry` or `_.curryRight` function.
3134
+ *
3135
+ * @private
3136
+ * @param {boolean} flag The curry bit flag.
3137
+ * @returns {Function} Returns the new curry function.
3138
+ */
3139
+ function createCurry(flag) {
3140
+ function curryFunc(func, arity, guard) {
3141
+ if (guard && isIterateeCall(func, arity, guard)) {
3142
+ arity = null;
3143
+ }
3144
+ var result = createWrapper(func, flag, null, null, null, null, null, arity);
3145
+ result.placeholder = curryFunc.placeholder;
3146
+ return result;
3147
+ }
3148
+ return curryFunc;
3149
+ }
3150
+
3151
+ /**
3152
+ * Creates a `_.max` or `_.min` function.
3151
3153
  *
3152
3154
  * @private
3153
3155
  * @param {Function} arrayFunc The function to get the extremum value from an array.
@@ -3179,6 +3181,204 @@
3179
3181
  };
3180
3182
  }
3181
3183
 
3184
+ /**
3185
+ * Creates a `_.find` or `_.findLast` function.
3186
+ *
3187
+ * @private
3188
+ * @param {Function} eachFunc The function to iterate over a collection.
3189
+ * @param {boolean} [fromRight] Specify iterating from right to left.
3190
+ * @returns {Function} Returns the new find function.
3191
+ */
3192
+ function createFind(eachFunc, fromRight) {
3193
+ return function(collection, predicate, thisArg) {
3194
+ predicate = getCallback(predicate, thisArg, 3);
3195
+ if (isArray(collection)) {
3196
+ var index = baseFindIndex(collection, predicate, fromRight);
3197
+ return index > -1 ? collection[index] : undefined;
3198
+ }
3199
+ return baseFind(collection, predicate, eachFunc);
3200
+ }
3201
+ }
3202
+
3203
+ /**
3204
+ * Creates a `_.findIndex` or `_.findLastIndex` function.
3205
+ *
3206
+ * @private
3207
+ * @param {boolean} [fromRight] Specify iterating from right to left.
3208
+ * @returns {Function} Returns the new find function.
3209
+ */
3210
+ function createFindIndex(fromRight) {
3211
+ return function(array, predicate, thisArg) {
3212
+ if (!(array && array.length)) {
3213
+ return -1;
3214
+ }
3215
+ predicate = getCallback(predicate, thisArg, 3);
3216
+ return baseFindIndex(array, predicate, fromRight);
3217
+ };
3218
+ }
3219
+
3220
+ /**
3221
+ * Creates a `_.findKey` or `_.findLastKey` function.
3222
+ *
3223
+ * @private
3224
+ * @param {Function} objectFunc The function to iterate over an object.
3225
+ * @returns {Function} Returns the new find function.
3226
+ */
3227
+ function createFindKey(objectFunc) {
3228
+ return function(object, predicate, thisArg) {
3229
+ predicate = getCallback(predicate, thisArg, 3);
3230
+ return baseFind(object, predicate, objectFunc, true);
3231
+ };
3232
+ }
3233
+
3234
+ /**
3235
+ * Creates a `_.flow` or `_.flowRight` function.
3236
+ *
3237
+ * @private
3238
+ * @param {boolean} [fromRight] Specify iterating from right to left.
3239
+ * @returns {Function} Returns the new flow function.
3240
+ */
3241
+ function createFlow(fromRight) {
3242
+ return function() {
3243
+ var length = arguments.length;
3244
+ if (!length) {
3245
+ return function() { return arguments[0]; };
3246
+ }
3247
+ var wrapper,
3248
+ index = fromRight ? length : -1,
3249
+ leftIndex = 0,
3250
+ funcs = Array(length);
3251
+
3252
+ while ((fromRight ? index-- : ++index < length)) {
3253
+ var func = funcs[leftIndex++] = arguments[index];
3254
+ if (typeof func != 'function') {
3255
+ throw new TypeError(FUNC_ERROR_TEXT);
3256
+ }
3257
+ var funcName = wrapper ? '' : getFuncName(func);
3258
+ wrapper = funcName == 'wrapper' ? new LodashWrapper([]) : wrapper;
3259
+ }
3260
+ index = wrapper ? -1 : length;
3261
+ while (++index < length) {
3262
+ func = funcs[index];
3263
+ funcName = getFuncName(func);
3264
+
3265
+ var data = funcName == 'wrapper' ? getData(func) : null;
3266
+ if (data && isLaziable(data[0])) {
3267
+ wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
3268
+ } else {
3269
+ wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func);
3270
+ }
3271
+ }
3272
+ return function() {
3273
+ var args = arguments;
3274
+ if (wrapper && args.length == 1 && isArray(args[0])) {
3275
+ return wrapper.plant(args[0]).value();
3276
+ }
3277
+ var index = 0,
3278
+ result = funcs[index].apply(this, args);
3279
+
3280
+ while (++index < length) {
3281
+ result = funcs[index].call(this, result);
3282
+ }
3283
+ return result;
3284
+ };
3285
+ };
3286
+ }
3287
+
3288
+ /**
3289
+ * Creates a function for `_.forEach` or `_.forEachRight`.
3290
+ *
3291
+ * @private
3292
+ * @param {Function} arrayFunc The function to iterate over an array.
3293
+ * @param {Function} eachFunc The function to iterate over a collection.
3294
+ * @returns {Function} Returns the new each function.
3295
+ */
3296
+ function createForEach(arrayFunc, eachFunc) {
3297
+ return function(collection, iteratee, thisArg) {
3298
+ return (typeof iteratee == 'function' && typeof thisArg == 'undefined' && isArray(collection))
3299
+ ? arrayFunc(collection, iteratee)
3300
+ : eachFunc(collection, bindCallback(iteratee, thisArg, 3));
3301
+ };
3302
+ }
3303
+
3304
+ /**
3305
+ * Creates a function for `_.forIn` or `_.forInRight`.
3306
+ *
3307
+ * @private
3308
+ * @param {Function} objectFunc The function to iterate over an object.
3309
+ * @returns {Function} Returns the new each function.
3310
+ */
3311
+ function createForIn(objectFunc) {
3312
+ return function(object, iteratee, thisArg) {
3313
+ if (typeof iteratee != 'function' || typeof thisArg != 'undefined') {
3314
+ iteratee = bindCallback(iteratee, thisArg, 3);
3315
+ }
3316
+ return objectFunc(object, iteratee, keysIn);
3317
+ };
3318
+ }
3319
+
3320
+ /**
3321
+ * Creates a function for `_.forOwn` or `_.forOwnRight`.
3322
+ *
3323
+ * @private
3324
+ * @param {Function} objectFunc The function to iterate over an object.
3325
+ * @returns {Function} Returns the new each function.
3326
+ */
3327
+ function createForOwn(objectFunc) {
3328
+ return function(object, iteratee, thisArg) {
3329
+ if (typeof iteratee != 'function' || typeof thisArg != 'undefined') {
3330
+ iteratee = bindCallback(iteratee, thisArg, 3);
3331
+ }
3332
+ return objectFunc(object, iteratee);
3333
+ };
3334
+ }
3335
+
3336
+ /**
3337
+ * Creates a function for `_.padLeft` or `_.padRight`.
3338
+ *
3339
+ * @private
3340
+ * @param {boolean} [fromRight] Specify padding from the right.
3341
+ * @returns {Function} Returns the new pad function.
3342
+ */
3343
+ function createPadDir(fromRight) {
3344
+ return function(string, length, chars) {
3345
+ string = baseToString(string);
3346
+ return string && ((fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string));
3347
+ };
3348
+ }
3349
+
3350
+ /**
3351
+ * Creates a `_.partial` or `_.partialRight` function.
3352
+ *
3353
+ * @private
3354
+ * @param {boolean} flag The partial bit flag.
3355
+ * @returns {Function} Returns the new partial function.
3356
+ */
3357
+ function createPartial(flag) {
3358
+ var partialFunc = restParam(function(func, partials) {
3359
+ var holders = replaceHolders(partials, partialFunc.placeholder);
3360
+ return createWrapper(func, flag, null, partials, holders);
3361
+ });
3362
+ return partialFunc;
3363
+ }
3364
+
3365
+ /**
3366
+ * Creates a function for `_.reduce` or `_.reduceRight`.
3367
+ *
3368
+ * @private
3369
+ * @param {Function} arrayFunc The function to iterate over an array.
3370
+ * @param {Function} eachFunc The function to iterate over a collection.
3371
+ * @returns {Function} Returns the new each function.
3372
+ */
3373
+ function createReduce(arrayFunc, eachFunc) {
3374
+ return function(collection, iteratee, accumulator, thisArg) {
3375
+ var initFromArray = arguments.length < 3;
3376
+ return (typeof iteratee == 'function' && typeof thisArg == 'undefined' && isArray(collection))
3377
+ ? arrayFunc(collection, iteratee, accumulator, initFromArray)
3378
+ : baseReduce(collection, getCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc);
3379
+ };
3380
+ }
3381
+
3182
3382
  /**
3183
3383
  * Creates a function that wraps `func` and invokes it with optional `this`
3184
3384
  * binding of, partial application, and currying.
@@ -3242,7 +3442,12 @@
3242
3442
  if (!isCurryBound) {
3243
3443
  bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);
3244
3444
  }
3245
- var result = createHybridWrapper(func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity);
3445
+ var newData = [func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity],
3446
+ result = createHybridWrapper.apply(undefined, newData);
3447
+
3448
+ if (isLaziable(func)) {
3449
+ setData(result, newData);
3450
+ }
3246
3451
  result.placeholder = placeholder;
3247
3452
  return result;
3248
3453
  }
@@ -3264,9 +3469,8 @@
3264
3469
  }
3265
3470
 
3266
3471
  /**
3267
- * Creates the pad required for `string` based on the given padding length.
3268
- * The `chars` string may be truncated if the number of padding characters
3269
- * exceeds the padding length.
3472
+ * Creates the padding required for `string` based on the given `length`.
3473
+ * The `chars` string is truncated if the number of characters exceeds `length`.
3270
3474
  *
3271
3475
  * @private
3272
3476
  * @param {string} string The string to create padding for.
@@ -3274,7 +3478,7 @@
3274
3478
  * @param {string} [chars=' '] The string used as padding.
3275
3479
  * @returns {string} Returns the pad for `string`.
3276
3480
  */
3277
- function createPad(string, length, chars) {
3481
+ function createPadding(string, length, chars) {
3278
3482
  var strLength = string.length;
3279
3483
  length = +length;
3280
3484
 
@@ -3323,6 +3527,22 @@
3323
3527
  return wrapper;
3324
3528
  }
3325
3529
 
3530
+ /**
3531
+ * Creates a `_.sortedIndex` or `_.sortedLastIndex` function.
3532
+ *
3533
+ * @private
3534
+ * @param {boolean} [retHighest] Specify returning the highest qualified index.
3535
+ * @returns {Function} Returns the new index function.
3536
+ */
3537
+ function createSortedIndex(retHighest) {
3538
+ return function(array, value, iteratee, thisArg) {
3539
+ var func = getCallback(iteratee);
3540
+ return (func === baseCallback && iteratee == null)
3541
+ ? binaryIndex(array, value, retHighest)
3542
+ : binaryIndexBy(array, value, func(iteratee, thisArg, 1), retHighest);
3543
+ };
3544
+ }
3545
+
3326
3546
  /**
3327
3547
  * Creates a function that either curries or invokes `func` with optional
3328
3548
  * `this` binding and partially applied arguments.
@@ -3365,10 +3585,10 @@
3365
3585
 
3366
3586
  partials = holders = null;
3367
3587
  }
3368
- var data = !isBindKey && getData(func),
3588
+ var data = isBindKey ? null : getData(func),
3369
3589
  newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity];
3370
3590
 
3371
- if (data && data !== true) {
3591
+ if (data) {
3372
3592
  mergeData(newData, data);
3373
3593
  bitmask = newData[1];
3374
3594
  arity = newData[9];
@@ -3397,18 +3617,18 @@
3397
3617
  * @param {Array} other The other array to compare.
3398
3618
  * @param {Function} equalFunc The function to determine equivalents of values.
3399
3619
  * @param {Function} [customizer] The function to customize comparing arrays.
3400
- * @param {boolean} [isWhere] Specify performing partial comparisons.
3620
+ * @param {boolean} [isLoose] Specify performing partial comparisons.
3401
3621
  * @param {Array} [stackA] Tracks traversed `value` objects.
3402
3622
  * @param {Array} [stackB] Tracks traversed `other` objects.
3403
3623
  * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
3404
3624
  */
3405
- function equalArrays(array, other, equalFunc, customizer, isWhere, stackA, stackB) {
3625
+ function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {
3406
3626
  var index = -1,
3407
3627
  arrLength = array.length,
3408
3628
  othLength = other.length,
3409
3629
  result = true;
3410
3630
 
3411
- if (arrLength != othLength && !(isWhere && othLength > arrLength)) {
3631
+ if (arrLength != othLength && !(isLoose && othLength > arrLength)) {
3412
3632
  return false;
3413
3633
  }
3414
3634
  // Deep compare the contents, ignoring non-numeric properties.
@@ -3418,23 +3638,23 @@
3418
3638
 
3419
3639
  result = undefined;
3420
3640
  if (customizer) {
3421
- result = isWhere
3641
+ result = isLoose
3422
3642
  ? customizer(othValue, arrValue, index)
3423
3643
  : customizer(arrValue, othValue, index);
3424
3644
  }
3425
3645
  if (typeof result == 'undefined') {
3426
3646
  // Recursively compare arrays (susceptible to call stack limits).
3427
- if (isWhere) {
3647
+ if (isLoose) {
3428
3648
  var othIndex = othLength;
3429
3649
  while (othIndex--) {
3430
3650
  othValue = other[othIndex];
3431
- result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer, isWhere, stackA, stackB);
3651
+ result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);
3432
3652
  if (result) {
3433
3653
  break;
3434
3654
  }
3435
3655
  }
3436
3656
  } else {
3437
- result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer, isWhere, stackA, stackB);
3657
+ result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);
3438
3658
  }
3439
3659
  }
3440
3660
  }
@@ -3490,26 +3710,26 @@
3490
3710
  * @param {Object} other The other object to compare.
3491
3711
  * @param {Function} equalFunc The function to determine equivalents of values.
3492
3712
  * @param {Function} [customizer] The function to customize comparing values.
3493
- * @param {boolean} [isWhere] Specify performing partial comparisons.
3713
+ * @param {boolean} [isLoose] Specify performing partial comparisons.
3494
3714
  * @param {Array} [stackA] Tracks traversed `value` objects.
3495
3715
  * @param {Array} [stackB] Tracks traversed `other` objects.
3496
3716
  * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
3497
3717
  */
3498
- function equalObjects(object, other, equalFunc, customizer, isWhere, stackA, stackB) {
3718
+ function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {
3499
3719
  var objProps = keys(object),
3500
3720
  objLength = objProps.length,
3501
3721
  othProps = keys(other),
3502
3722
  othLength = othProps.length;
3503
3723
 
3504
- if (objLength != othLength && !isWhere) {
3724
+ if (objLength != othLength && !isLoose) {
3505
3725
  return false;
3506
3726
  }
3507
- var hasCtor,
3727
+ var skipCtor = isLoose,
3508
3728
  index = -1;
3509
3729
 
3510
3730
  while (++index < objLength) {
3511
3731
  var key = objProps[index],
3512
- result = hasOwnProperty.call(other, key);
3732
+ result = isLoose ? key in other : hasOwnProperty.call(other, key);
3513
3733
 
3514
3734
  if (result) {
3515
3735
  var objValue = object[key],
@@ -3517,21 +3737,21 @@
3517
3737
 
3518
3738
  result = undefined;
3519
3739
  if (customizer) {
3520
- result = isWhere
3740
+ result = isLoose
3521
3741
  ? customizer(othValue, objValue, key)
3522
3742
  : customizer(objValue, othValue, key);
3523
3743
  }
3524
3744
  if (typeof result == 'undefined') {
3525
3745
  // Recursively compare objects (susceptible to call stack limits).
3526
- result = (objValue && objValue === othValue) || equalFunc(objValue, othValue, customizer, isWhere, stackA, stackB);
3746
+ result = (objValue && objValue === othValue) || equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB);
3527
3747
  }
3528
3748
  }
3529
3749
  if (!result) {
3530
3750
  return false;
3531
3751
  }
3532
- hasCtor || (hasCtor = key == 'constructor');
3752
+ skipCtor || (skipCtor = key == 'constructor');
3533
3753
  }
3534
- if (!hasCtor) {
3754
+ if (!skipCtor) {
3535
3755
  var objCtor = object.constructor,
3536
3756
  othCtor = other.constructor;
3537
3757
 
@@ -3549,7 +3769,7 @@
3549
3769
  /**
3550
3770
  * Gets the extremum value of `collection` invoking `iteratee` for each value
3551
3771
  * in `collection` to generate the criterion by which the value is ranked.
3552
- * The `iteratee` is invoked with three arguments; (value, index, collection).
3772
+ * The `iteratee` is invoked with three arguments: (value, index, collection).
3553
3773
  *
3554
3774
  * @private
3555
3775
  * @param {Array|Object|string} collection The collection to iterate over.
@@ -3600,6 +3820,37 @@
3600
3820
  return metaMap.get(func);
3601
3821
  };
3602
3822
 
3823
+ /**
3824
+ * Gets the name of `func`.
3825
+ *
3826
+ * @private
3827
+ * @param {Function} func The function to query.
3828
+ * @returns {string} Returns the function name.
3829
+ */
3830
+ var getFuncName = (function() {
3831
+ if (!support.funcNames) {
3832
+ return constant('');
3833
+ }
3834
+ if (constant.name == 'constant') {
3835
+ return baseProperty('name');
3836
+ }
3837
+ return function(func) {
3838
+ var result = func.name,
3839
+ array = realNames[result],
3840
+ length = array ? array.length : 0;
3841
+
3842
+ while (length--) {
3843
+ var data = array[length],
3844
+ otherFunc = data.func;
3845
+
3846
+ if (otherFunc == null || otherFunc == func) {
3847
+ return data.name;
3848
+ }
3849
+ }
3850
+ return result;
3851
+ };
3852
+ }());
3853
+
3603
3854
  /**
3604
3855
  * Gets the appropriate "indexOf" function. If the `_.indexOf` method is
3605
3856
  * customized this function returns the custom method, otherwise it returns
@@ -3717,31 +3968,6 @@
3717
3968
  return result;
3718
3969
  }
3719
3970
 
3720
- /**
3721
- * Checks if `func` is eligible for `this` binding.
3722
- *
3723
- * @private
3724
- * @param {Function} func The function to check.
3725
- * @returns {boolean} Returns `true` if `func` is eligible, else `false`.
3726
- */
3727
- function isBindable(func) {
3728
- var support = lodash.support,
3729
- result = !(support.funcNames ? func.name : support.funcDecomp);
3730
-
3731
- if (!result) {
3732
- var source = fnToString.call(func);
3733
- if (!support.funcNames) {
3734
- result = !reFuncName.test(source);
3735
- }
3736
- if (!result) {
3737
- // Check if `func` references the `this` keyword and store the result.
3738
- result = reThis.test(source) || isNative(func);
3739
- baseSetData(func, result);
3740
- }
3741
- }
3742
- return result;
3743
- }
3744
-
3745
3971
  /**
3746
3972
  * Checks if `value` is a valid array-like index.
3747
3973
  *
@@ -3783,12 +4009,22 @@
3783
4009
  return false;
3784
4010
  }
3785
4011
 
4012
+ /**
4013
+ * Checks if `func` has a lazy counterpart.
4014
+ *
4015
+ * @private
4016
+ * @param {Function} func The function to check.
4017
+ * @returns {boolean} Returns `true` if `func` has a lazy counterpart, else `false`.
4018
+ */
4019
+ function isLaziable(func) {
4020
+ var funcName = getFuncName(func);
4021
+ return !!funcName && func === lodash[funcName] && funcName in LazyWrapper.prototype;
4022
+ }
4023
+
3786
4024
  /**
3787
4025
  * Checks if `value` is a valid array-like length.
3788
4026
  *
3789
- * **Note:** This function is based on ES `ToLength`. See the
3790
- * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength)
3791
- * for more details.
4027
+ * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).
3792
4028
  *
3793
4029
  * @private
3794
4030
  * @param {*} value The value to check.
@@ -3828,22 +4064,13 @@
3828
4064
  function mergeData(data, source) {
3829
4065
  var bitmask = data[1],
3830
4066
  srcBitmask = source[1],
3831
- newBitmask = bitmask | srcBitmask;
3832
-
3833
- var arityFlags = ARY_FLAG | REARG_FLAG,
3834
- bindFlags = BIND_FLAG | BIND_KEY_FLAG,
3835
- comboFlags = arityFlags | bindFlags | CURRY_BOUND_FLAG | CURRY_RIGHT_FLAG;
4067
+ newBitmask = bitmask | srcBitmask,
4068
+ isCommon = newBitmask < ARY_FLAG;
3836
4069
 
3837
- var isAry = bitmask & ARY_FLAG && !(srcBitmask & ARY_FLAG),
3838
- isRearg = bitmask & REARG_FLAG && !(srcBitmask & REARG_FLAG),
3839
- argPos = (isRearg ? data : source)[7],
3840
- ary = (isAry ? data : source)[8];
3841
-
3842
- var isCommon = !(bitmask >= REARG_FLAG && srcBitmask > bindFlags) &&
3843
- !(bitmask > bindFlags && srcBitmask >= REARG_FLAG);
3844
-
3845
- var isCombo = (newBitmask >= arityFlags && newBitmask <= comboFlags) &&
3846
- (bitmask < REARG_FLAG || ((isRearg || isAry) && argPos.length <= ary));
4070
+ var isCombo =
4071
+ (srcBitmask == ARY_FLAG && bitmask == CURRY_FLAG) ||
4072
+ (srcBitmask == ARY_FLAG && bitmask == REARG_FLAG && data[7].length <= source[8]) ||
4073
+ (srcBitmask == (ARY_FLAG | REARG_FLAG) && bitmask == CURRY_FLAG);
3847
4074
 
3848
4075
  // Exit early if metadata can't be merged.
3849
4076
  if (!(isCommon || isCombo)) {
@@ -4162,10 +4389,9 @@
4162
4389
  * Creates an array excluding all values of the provided arrays using
4163
4390
  * `SameValueZero` for equality comparisons.
4164
4391
  *
4165
- * **Note:** `SameValueZero` comparisons are like strict equality comparisons,
4166
- * e.g. `===`, except that `NaN` matches `NaN`. See the
4167
- * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
4168
- * for more details.
4392
+ * **Note:** [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
4393
+ * comparisons are like strict equality comparisons, e.g. `===`, except that
4394
+ * `NaN` matches `NaN`.
4169
4395
  *
4170
4396
  * @static
4171
4397
  * @memberOf _
@@ -4178,19 +4404,11 @@
4178
4404
  * _.difference([1, 2, 3], [4, 2]);
4179
4405
  * // => [1, 3]
4180
4406
  */
4181
- function difference() {
4182
- var args = arguments,
4183
- index = -1,
4184
- length = args.length;
4185
-
4186
- while (++index < length) {
4187
- var value = args[index];
4188
- if (isArray(value) || isArguments(value)) {
4189
- break;
4190
- }
4191
- }
4192
- return baseDifference(value, baseFlatten(args, false, true, ++index));
4193
- }
4407
+ var difference = restParam(function(array, values) {
4408
+ return (isArray(array) || isArguments(array))
4409
+ ? baseDifference(array, baseFlatten(values, false, true))
4410
+ : [];
4411
+ });
4194
4412
 
4195
4413
  /**
4196
4414
  * Creates a slice of `array` with `n` elements dropped from the beginning.
@@ -4266,7 +4484,7 @@
4266
4484
  /**
4267
4485
  * Creates a slice of `array` excluding elements dropped from the end.
4268
4486
  * Elements are dropped until `predicate` returns falsey. The predicate is
4269
- * bound to `thisArg` and invoked with three arguments; (value, index, array).
4487
+ * bound to `thisArg` and invoked with three arguments: (value, index, array).
4270
4488
  *
4271
4489
  * If a property name is provided for `predicate` the created `_.property`
4272
4490
  * style callback returns the property value of the given element.
@@ -4313,19 +4531,15 @@
4313
4531
  * // => ['barney', 'fred', 'pebbles']
4314
4532
  */
4315
4533
  function dropRightWhile(array, predicate, thisArg) {
4316
- var length = array ? array.length : 0;
4317
- if (!length) {
4318
- return [];
4319
- }
4320
- predicate = getCallback(predicate, thisArg, 3);
4321
- while (length-- && predicate(array[length], length, array)) {}
4322
- return baseSlice(array, 0, length + 1);
4534
+ return (array && array.length)
4535
+ ? baseWhile(array, getCallback(predicate, thisArg, 3), true, true)
4536
+ : [];
4323
4537
  }
4324
4538
 
4325
4539
  /**
4326
4540
  * Creates a slice of `array` excluding elements dropped from the beginning.
4327
4541
  * Elements are dropped until `predicate` returns falsey. The predicate is
4328
- * bound to `thisArg` and invoked with three arguments; (value, index, array).
4542
+ * bound to `thisArg` and invoked with three arguments: (value, index, array).
4329
4543
  *
4330
4544
  * If a property name is provided for `predicate` the created `_.property`
4331
4545
  * style callback returns the property value of the given element.
@@ -4372,14 +4586,9 @@
4372
4586
  * // => ['barney', 'fred', 'pebbles']
4373
4587
  */
4374
4588
  function dropWhile(array, predicate, thisArg) {
4375
- var length = array ? array.length : 0;
4376
- if (!length) {
4377
- return [];
4378
- }
4379
- var index = -1;
4380
- predicate = getCallback(predicate, thisArg, 3);
4381
- while (++index < length && predicate(array[index], index, array)) {}
4382
- return baseSlice(array, index);
4589
+ return (array && array.length)
4590
+ ? baseWhile(array, getCallback(predicate, thisArg, 3), true)
4591
+ : [];
4383
4592
  }
4384
4593
 
4385
4594
  /**
@@ -4396,6 +4605,19 @@
4396
4605
  * @param {number} [start=0] The start position.
4397
4606
  * @param {number} [end=array.length] The end position.
4398
4607
  * @returns {Array} Returns `array`.
4608
+ * @example
4609
+ *
4610
+ * var array = [1, 2, 3];
4611
+ *
4612
+ * _.fill(array, 'a');
4613
+ * console.log(array);
4614
+ * // => ['a', 'a', 'a']
4615
+ *
4616
+ * _.fill(Array(3), 2);
4617
+ * // => [2, 2, 2]
4618
+ *
4619
+ * _.fill([4, 6, 8], '*', 1, 2);
4620
+ * // => [4, '*', 8]
4399
4621
  */
4400
4622
  function fill(array, value, start, end) {
4401
4623
  var length = array ? array.length : 0;
@@ -4411,7 +4633,7 @@
4411
4633
 
4412
4634
  /**
4413
4635
  * This method is like `_.find` except that it returns the index of the first
4414
- * element `predicate` returns truthy for, instead of the element itself.
4636
+ * element `predicate` returns truthy for instead of the element itself.
4415
4637
  *
4416
4638
  * If a property name is provided for `predicate` the created `_.property`
4417
4639
  * style callback returns the property value of the given element.
@@ -4457,18 +4679,7 @@
4457
4679
  * _.findIndex(users, 'active');
4458
4680
  * // => 2
4459
4681
  */
4460
- function findIndex(array, predicate, thisArg) {
4461
- var index = -1,
4462
- length = array ? array.length : 0;
4463
-
4464
- predicate = getCallback(predicate, thisArg, 3);
4465
- while (++index < length) {
4466
- if (predicate(array[index], index, array)) {
4467
- return index;
4468
- }
4469
- }
4470
- return -1;
4471
- }
4682
+ var findIndex = createFindIndex();
4472
4683
 
4473
4684
  /**
4474
4685
  * This method is like `_.findIndex` except that it iterates over elements
@@ -4518,16 +4729,7 @@
4518
4729
  * _.findLastIndex(users, 'active');
4519
4730
  * // => 0
4520
4731
  */
4521
- function findLastIndex(array, predicate, thisArg) {
4522
- var length = array ? array.length : 0;
4523
- predicate = getCallback(predicate, thisArg, 3);
4524
- while (length--) {
4525
- if (predicate(array[length], length, array)) {
4526
- return length;
4527
- }
4528
- }
4529
- return -1;
4530
- }
4732
+ var findLastIndex = createFindIndex(true);
4531
4733
 
4532
4734
  /**
4533
4735
  * Gets the first element of `array`.
@@ -4564,18 +4766,18 @@
4564
4766
  * @example
4565
4767
  *
4566
4768
  * _.flatten([1, [2, 3, [4]]]);
4567
- * // => [1, 2, 3, [4]];
4769
+ * // => [1, 2, 3, [4]]
4568
4770
  *
4569
4771
  * // using `isDeep`
4570
4772
  * _.flatten([1, [2, 3, [4]]], true);
4571
- * // => [1, 2, 3, 4];
4773
+ * // => [1, 2, 3, 4]
4572
4774
  */
4573
4775
  function flatten(array, isDeep, guard) {
4574
4776
  var length = array ? array.length : 0;
4575
4777
  if (guard && isIterateeCall(array, isDeep, guard)) {
4576
4778
  isDeep = false;
4577
4779
  }
4578
- return length ? baseFlatten(array, isDeep, false, 0) : [];
4780
+ return length ? baseFlatten(array, isDeep) : [];
4579
4781
  }
4580
4782
 
4581
4783
  /**
@@ -4589,11 +4791,11 @@
4589
4791
  * @example
4590
4792
  *
4591
4793
  * _.flattenDeep([1, [2, 3, [4]]]);
4592
- * // => [1, 2, 3, 4];
4794
+ * // => [1, 2, 3, 4]
4593
4795
  */
4594
4796
  function flattenDeep(array) {
4595
4797
  var length = array ? array.length : 0;
4596
- return length ? baseFlatten(array, true, false, 0) : [];
4798
+ return length ? baseFlatten(array, true) : [];
4597
4799
  }
4598
4800
 
4599
4801
  /**
@@ -4602,10 +4804,9 @@
4602
4804
  * it is used as the offset from the end of `array`. If `array` is sorted
4603
4805
  * providing `true` for `fromIndex` performs a faster binary search.
4604
4806
  *
4605
- * **Note:** `SameValueZero` comparisons are like strict equality comparisons,
4606
- * e.g. `===`, except that `NaN` matches `NaN`. See the
4607
- * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
4608
- * for more details.
4807
+ * **Note:** [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
4808
+ * comparisons are like strict equality comparisons, e.g. `===`, except that
4809
+ * `NaN` matches `NaN`.
4609
4810
  *
4610
4811
  * @static
4611
4812
  * @memberOf _
@@ -4668,10 +4869,9 @@
4668
4869
  * Creates an array of unique values in all provided arrays using `SameValueZero`
4669
4870
  * for equality comparisons.
4670
4871
  *
4671
- * **Note:** `SameValueZero` comparisons are like strict equality comparisons,
4672
- * e.g. `===`, except that `NaN` matches `NaN`. See the
4673
- * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
4674
- * for more details.
4872
+ * **Note:** [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
4873
+ * comparisons are like strict equality comparisons, e.g. `===`, except that
4874
+ * `NaN` matches `NaN`.
4675
4875
  *
4676
4876
  * @static
4677
4877
  * @memberOf _
@@ -4799,10 +4999,10 @@
4799
4999
  * comparisons.
4800
5000
  *
4801
5001
  * **Notes:**
4802
- * - Unlike `_.without`, this method mutates `array`.
4803
- * - `SameValueZero` comparisons are like strict equality comparisons, e.g. `===`,
4804
- * except that `NaN` matches `NaN`. See the [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
4805
- * for more details.
5002
+ * - Unlike `_.without`, this method mutates `array`
5003
+ * - [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
5004
+ * comparisons are like strict equality comparisons, e.g. `===`, except
5005
+ * that `NaN` matches `NaN`
4806
5006
  *
4807
5007
  * @static
4808
5008
  * @memberOf _
@@ -4865,14 +5065,28 @@
4865
5065
  * console.log(evens);
4866
5066
  * // => [10, 20]
4867
5067
  */
4868
- function pullAt(array) {
4869
- return basePullAt(array || [], baseFlatten(arguments, false, false, 1));
4870
- }
5068
+ var pullAt = restParam(function(array, indexes) {
5069
+ array || (array = []);
5070
+ indexes = baseFlatten(indexes);
5071
+
5072
+ var length = indexes.length,
5073
+ result = baseAt(array, indexes);
5074
+
5075
+ indexes.sort(baseCompareAscending);
5076
+ while (length--) {
5077
+ var index = parseFloat(indexes[length]);
5078
+ if (index != previous && isIndex(index)) {
5079
+ var previous = index;
5080
+ splice.call(array, index, 1);
5081
+ }
5082
+ }
5083
+ return result;
5084
+ });
4871
5085
 
4872
5086
  /**
4873
5087
  * Removes all elements from `array` that `predicate` returns truthy for
4874
5088
  * and returns an array of the removed elements. The predicate is bound to
4875
- * `thisArg` and invoked with three arguments; (value, index, array).
5089
+ * `thisArg` and invoked with three arguments: (value, index, array).
4876
5090
  *
4877
5091
  * If a property name is provided for `predicate` the created `_.property`
4878
5092
  * style callback returns the property value of the given element.
@@ -4976,14 +5190,14 @@
4976
5190
  * to compute their sort ranking. The iteratee is bound to `thisArg` and
4977
5191
  * invoked with one argument; (value).
4978
5192
  *
4979
- * If a property name is provided for `predicate` the created `_.property`
5193
+ * If a property name is provided for `iteratee` the created `_.property`
4980
5194
  * style callback returns the property value of the given element.
4981
5195
  *
4982
5196
  * If a value is also provided for `thisArg` the created `_.matchesProperty`
4983
5197
  * style callback returns `true` for elements that have a matching property
4984
5198
  * value, else `false`.
4985
5199
  *
4986
- * If an object is provided for `predicate` the created `_.matches` style
5200
+ * If an object is provided for `iteratee` the created `_.matches` style
4987
5201
  * callback returns `true` for elements that have the properties of the given
4988
5202
  * object, else `false`.
4989
5203
  *
@@ -5017,12 +5231,7 @@
5017
5231
  * _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');
5018
5232
  * // => 1
5019
5233
  */
5020
- function sortedIndex(array, value, iteratee, thisArg) {
5021
- var func = getCallback(iteratee);
5022
- return (func === baseCallback && iteratee == null)
5023
- ? binaryIndex(array, value)
5024
- : binaryIndexBy(array, value, func(iteratee, thisArg, 1));
5025
- }
5234
+ var sortedIndex = createSortedIndex();
5026
5235
 
5027
5236
  /**
5028
5237
  * This method is like `_.sortedIndex` except that it returns the highest
@@ -5044,12 +5253,7 @@
5044
5253
  * _.sortedLastIndex([4, 4, 5, 5], 5);
5045
5254
  * // => 4
5046
5255
  */
5047
- function sortedLastIndex(array, value, iteratee, thisArg) {
5048
- var func = getCallback(iteratee);
5049
- return (func === baseCallback && iteratee == null)
5050
- ? binaryIndex(array, value, true)
5051
- : binaryIndexBy(array, value, func(iteratee, thisArg, 1), true);
5052
- }
5256
+ var sortedLastIndex = createSortedIndex(true);
5053
5257
 
5054
5258
  /**
5055
5259
  * Creates a slice of `array` with `n` elements taken from the beginning.
@@ -5125,7 +5329,7 @@
5125
5329
  /**
5126
5330
  * Creates a slice of `array` with elements taken from the end. Elements are
5127
5331
  * taken until `predicate` returns falsey. The predicate is bound to `thisArg`
5128
- * and invoked with three arguments; (value, index, array).
5332
+ * and invoked with three arguments: (value, index, array).
5129
5333
  *
5130
5334
  * If a property name is provided for `predicate` the created `_.property`
5131
5335
  * style callback returns the property value of the given element.
@@ -5172,19 +5376,15 @@
5172
5376
  * // => []
5173
5377
  */
5174
5378
  function takeRightWhile(array, predicate, thisArg) {
5175
- var length = array ? array.length : 0;
5176
- if (!length) {
5177
- return [];
5178
- }
5179
- predicate = getCallback(predicate, thisArg, 3);
5180
- while (length-- && predicate(array[length], length, array)) {}
5181
- return baseSlice(array, length + 1);
5379
+ return (array && array.length)
5380
+ ? baseWhile(array, getCallback(predicate, thisArg, 3), false, true)
5381
+ : [];
5182
5382
  }
5183
5383
 
5184
5384
  /**
5185
5385
  * Creates a slice of `array` with elements taken from the beginning. Elements
5186
5386
  * are taken until `predicate` returns falsey. The predicate is bound to
5187
- * `thisArg` and invoked with three arguments; (value, index, array).
5387
+ * `thisArg` and invoked with three arguments: (value, index, array).
5188
5388
  *
5189
5389
  * If a property name is provided for `predicate` the created `_.property`
5190
5390
  * style callback returns the property value of the given element.
@@ -5231,24 +5431,18 @@
5231
5431
  * // => []
5232
5432
  */
5233
5433
  function takeWhile(array, predicate, thisArg) {
5234
- var length = array ? array.length : 0;
5235
- if (!length) {
5236
- return [];
5237
- }
5238
- var index = -1;
5239
- predicate = getCallback(predicate, thisArg, 3);
5240
- while (++index < length && predicate(array[index], index, array)) {}
5241
- return baseSlice(array, 0, index);
5434
+ return (array && array.length)
5435
+ ? baseWhile(array, getCallback(predicate, thisArg, 3))
5436
+ : [];
5242
5437
  }
5243
5438
 
5244
5439
  /**
5245
5440
  * Creates an array of unique values, in order, of the provided arrays using
5246
5441
  * `SameValueZero` for equality comparisons.
5247
5442
  *
5248
- * **Note:** `SameValueZero` comparisons are like strict equality comparisons,
5249
- * e.g. `===`, except that `NaN` matches `NaN`. See the
5250
- * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
5251
- * for more details.
5443
+ * **Note:** [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
5444
+ * comparisons are like strict equality comparisons, e.g. `===`, except that
5445
+ * `NaN` matches `NaN`.
5252
5446
  *
5253
5447
  * @static
5254
5448
  * @memberOf _
@@ -5260,9 +5454,9 @@
5260
5454
  * _.union([1, 2], [4, 2], [2, 1]);
5261
5455
  * // => [1, 2, 4]
5262
5456
  */
5263
- function union() {
5264
- return baseUniq(baseFlatten(arguments, false, true, 0));
5265
- }
5457
+ var union = restParam(function(arrays) {
5458
+ return baseUniq(baseFlatten(arrays, false, true));
5459
+ });
5266
5460
 
5267
5461
  /**
5268
5462
  * Creates a duplicate-value-free version of an array using `SameValueZero`
@@ -5270,23 +5464,22 @@
5270
5464
  * search algorithm for sorted arrays. If an iteratee function is provided it
5271
5465
  * is invoked for each value in the array to generate the criterion by which
5272
5466
  * uniqueness is computed. The `iteratee` is bound to `thisArg` and invoked
5273
- * with three arguments; (value, index, array).
5467
+ * with three arguments: (value, index, array).
5274
5468
  *
5275
- * If a property name is provided for `predicate` the created `_.property`
5469
+ * If a property name is provided for `iteratee` the created `_.property`
5276
5470
  * style callback returns the property value of the given element.
5277
5471
  *
5278
5472
  * If a value is also provided for `thisArg` the created `_.matchesProperty`
5279
5473
  * style callback returns `true` for elements that have a matching property
5280
5474
  * value, else `false`.
5281
5475
  *
5282
- * If an object is provided for `predicate` the created `_.matches` style
5476
+ * If an object is provided for `iteratee` the created `_.matches` style
5283
5477
  * callback returns `true` for elements that have the properties of the given
5284
5478
  * object, else `false`.
5285
5479
  *
5286
- * **Note:** `SameValueZero` comparisons are like strict equality comparisons,
5287
- * e.g. `===`, except that `NaN` matches `NaN`. See the
5288
- * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
5289
- * for more details.
5480
+ * **Note:** [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
5481
+ * comparisons are like strict equality comparisons, e.g. `===`, except that
5482
+ * `NaN` matches `NaN`.
5290
5483
  *
5291
5484
  * @static
5292
5485
  * @memberOf _
@@ -5368,10 +5561,9 @@
5368
5561
  * Creates an array excluding all provided values using `SameValueZero` for
5369
5562
  * equality comparisons.
5370
5563
  *
5371
- * **Note:** `SameValueZero` comparisons are like strict equality comparisons,
5372
- * e.g. `===`, except that `NaN` matches `NaN`. See the
5373
- * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
5374
- * for more details.
5564
+ * **Note:** [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
5565
+ * comparisons are like strict equality comparisons, e.g. `===`, except that
5566
+ * `NaN` matches `NaN`.
5375
5567
  *
5376
5568
  * @static
5377
5569
  * @memberOf _
@@ -5384,14 +5576,15 @@
5384
5576
  * _.without([1, 2, 1, 3], 1, 2);
5385
5577
  * // => [3]
5386
5578
  */
5387
- function without(array) {
5388
- return baseDifference(array, baseSlice(arguments, 1));
5389
- }
5579
+ var without = restParam(function(array, values) {
5580
+ return (isArray(array) || isArguments(array))
5581
+ ? baseDifference(array, values)
5582
+ : [];
5583
+ });
5390
5584
 
5391
5585
  /**
5392
- * Creates an array that is the symmetric difference of the provided arrays.
5393
- * See [Wikipedia](https://en.wikipedia.org/wiki/Symmetric_difference) for
5394
- * more details.
5586
+ * Creates an array that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
5587
+ * of the provided arrays.
5395
5588
  *
5396
5589
  * @static
5397
5590
  * @memberOf _
@@ -5433,20 +5626,13 @@
5433
5626
  * _.zip(['fred', 'barney'], [30, 40], [true, false]);
5434
5627
  * // => [['fred', 30, true], ['barney', 40, false]]
5435
5628
  */
5436
- function zip() {
5437
- var length = arguments.length,
5438
- array = Array(length);
5439
-
5440
- while (length--) {
5441
- array[length] = arguments[length];
5442
- }
5443
- return unzip(array);
5444
- }
5629
+ var zip = restParam(unzip);
5445
5630
 
5446
5631
  /**
5447
- * Creates an object composed from arrays of property names and values. Provide
5448
- * either a single two dimensional array, e.g. `[[key1, value1], [key2, value2]]`
5449
- * or two arrays, one of property names and one of corresponding values.
5632
+ * The inverse of `_.pairs`; this method returns an object composed from arrays
5633
+ * of property names and values. Provide either a single two dimensional array,
5634
+ * e.g. `[[key1, value1], [key2, value2]]` or two arrays, one of property names
5635
+ * and one of corresponding values.
5450
5636
  *
5451
5637
  * @static
5452
5638
  * @memberOf _
@@ -5457,6 +5643,9 @@
5457
5643
  * @returns {Object} Returns the new object.
5458
5644
  * @example
5459
5645
  *
5646
+ * _.zipObject([['fred', 30], ['barney', 40]]);
5647
+ * // => { 'fred': 30, 'barney': 40 }
5648
+ *
5460
5649
  * _.zipObject(['fred', 'barney'], [30, 40]);
5461
5650
  * // => { 'fred': 30, 'barney': 40 }
5462
5651
  */
@@ -5553,13 +5742,14 @@
5553
5742
  * @returns {*} Returns the result of `interceptor`.
5554
5743
  * @example
5555
5744
  *
5556
- * _([1, 2, 3])
5557
- * .last()
5745
+ * _(' abc ')
5746
+ * .chain()
5747
+ * .trim()
5558
5748
  * .thru(function(value) {
5559
5749
  * return [value];
5560
5750
  * })
5561
5751
  * .value();
5562
- * // => [3]
5752
+ * // => ['abc']
5563
5753
  */
5564
5754
  function thru(value, interceptor, thisArg) {
5565
5755
  return interceptor.call(thisArg, value);
@@ -5749,32 +5939,32 @@
5749
5939
  * _.at(['a', 'b', 'c'], [0, 2]);
5750
5940
  * // => ['a', 'c']
5751
5941
  *
5752
- * _.at(['fred', 'barney', 'pebbles'], 0, 2);
5753
- * // => ['fred', 'pebbles']
5942
+ * _.at(['barney', 'fred', 'pebbles'], 0, 2);
5943
+ * // => ['barney', 'pebbles']
5754
5944
  */
5755
- function at(collection) {
5945
+ var at = restParam(function(collection, props) {
5756
5946
  var length = collection ? collection.length : 0;
5757
5947
  if (isLength(length)) {
5758
5948
  collection = toIterable(collection);
5759
5949
  }
5760
- return baseAt(collection, baseFlatten(arguments, false, false, 1));
5761
- }
5950
+ return baseAt(collection, baseFlatten(props));
5951
+ });
5762
5952
 
5763
5953
  /**
5764
5954
  * Creates an object composed of keys generated from the results of running
5765
5955
  * each element of `collection` through `iteratee`. The corresponding value
5766
5956
  * of each key is the number of times the key was returned by `iteratee`.
5767
- * The `iteratee` is bound to `thisArg` and invoked with three arguments;
5957
+ * The `iteratee` is bound to `thisArg` and invoked with three arguments:
5768
5958
  * (value, index|key, collection).
5769
5959
  *
5770
- * If a property name is provided for `predicate` the created `_.property`
5960
+ * If a property name is provided for `iteratee` the created `_.property`
5771
5961
  * style callback returns the property value of the given element.
5772
5962
  *
5773
5963
  * If a value is also provided for `thisArg` the created `_.matchesProperty`
5774
5964
  * style callback returns `true` for elements that have a matching property
5775
5965
  * value, else `false`.
5776
5966
  *
5777
- * If an object is provided for `predicate` the created `_.matches` style
5967
+ * If an object is provided for `iteratee` the created `_.matches` style
5778
5968
  * callback returns `true` for elements that have the properties of the given
5779
5969
  * object, else `false`.
5780
5970
  *
@@ -5807,7 +5997,7 @@
5807
5997
 
5808
5998
  /**
5809
5999
  * Checks if `predicate` returns truthy for **all** elements of `collection`.
5810
- * The predicate is bound to `thisArg` and invoked with three arguments;
6000
+ * The predicate is bound to `thisArg` and invoked with three arguments:
5811
6001
  * (value, index|key, collection).
5812
6002
  *
5813
6003
  * If a property name is provided for `predicate` the created `_.property`
@@ -5855,6 +6045,9 @@
5855
6045
  */
5856
6046
  function every(collection, predicate, thisArg) {
5857
6047
  var func = isArray(collection) ? arrayEvery : baseEvery;
6048
+ if (thisArg && isIterateeCall(collection, predicate, thisArg)) {
6049
+ predicate = null;
6050
+ }
5858
6051
  if (typeof predicate != 'function' || typeof thisArg != 'undefined') {
5859
6052
  predicate = getCallback(predicate, thisArg, 3);
5860
6053
  }
@@ -5864,7 +6057,7 @@
5864
6057
  /**
5865
6058
  * Iterates over elements of `collection`, returning an array of all elements
5866
6059
  * `predicate` returns truthy for. The predicate is bound to `thisArg` and
5867
- * invoked with three arguments; (value, index|key, collection).
6060
+ * invoked with three arguments: (value, index|key, collection).
5868
6061
  *
5869
6062
  * If a property name is provided for `predicate` the created `_.property`
5870
6063
  * style callback returns the property value of the given element.
@@ -5919,7 +6112,7 @@
5919
6112
  /**
5920
6113
  * Iterates over elements of `collection`, returning the first element
5921
6114
  * `predicate` returns truthy for. The predicate is bound to `thisArg` and
5922
- * invoked with three arguments; (value, index|key, collection).
6115
+ * invoked with three arguments: (value, index|key, collection).
5923
6116
  *
5924
6117
  * If a property name is provided for `predicate` the created `_.property`
5925
6118
  * style callback returns the property value of the given element.
@@ -5966,14 +6159,7 @@
5966
6159
  * _.result(_.find(users, 'active'), 'user');
5967
6160
  * // => 'barney'
5968
6161
  */
5969
- function find(collection, predicate, thisArg) {
5970
- if (isArray(collection)) {
5971
- var index = findIndex(collection, predicate, thisArg);
5972
- return index > -1 ? collection[index] : undefined;
5973
- }
5974
- predicate = getCallback(predicate, thisArg, 3);
5975
- return baseFind(collection, predicate, baseEach);
5976
- }
6162
+ var find = createFind(baseEach);
5977
6163
 
5978
6164
  /**
5979
6165
  * This method is like `_.find` except that it iterates over elements of
@@ -5994,10 +6180,7 @@
5994
6180
  * });
5995
6181
  * // => 3
5996
6182
  */
5997
- function findLast(collection, predicate, thisArg) {
5998
- predicate = getCallback(predicate, thisArg, 3);
5999
- return baseFind(collection, predicate, baseEachRight);
6000
- }
6183
+ var findLast = createFind(baseEachRight, true);
6001
6184
 
6002
6185
  /**
6003
6186
  * Performs a deep comparison between each element in `collection` and the
@@ -6034,7 +6217,7 @@
6034
6217
 
6035
6218
  /**
6036
6219
  * Iterates over elements of `collection` invoking `iteratee` for each element.
6037
- * The `iteratee` is bound to `thisArg` and invoked with three arguments;
6220
+ * The `iteratee` is bound to `thisArg` and invoked with three arguments:
6038
6221
  * (value, index|key, collection). Iterator functions may exit iteration early
6039
6222
  * by explicitly returning `false`.
6040
6223
  *
@@ -6062,11 +6245,7 @@
6062
6245
  * });
6063
6246
  * // => logs each value-key pair and returns the object (iteration order is not guaranteed)
6064
6247
  */
6065
- function forEach(collection, iteratee, thisArg) {
6066
- return (typeof iteratee == 'function' && typeof thisArg == 'undefined' && isArray(collection))
6067
- ? arrayEach(collection, iteratee)
6068
- : baseEach(collection, bindCallback(iteratee, thisArg, 3));
6069
- }
6248
+ var forEach = createForEach(arrayEach, baseEach);
6070
6249
 
6071
6250
  /**
6072
6251
  * This method is like `_.forEach` except that it iterates over elements of
@@ -6084,30 +6263,26 @@
6084
6263
  *
6085
6264
  * _([1, 2]).forEachRight(function(n) {
6086
6265
  * console.log(n);
6087
- * }).join(',');
6266
+ * }).value();
6088
6267
  * // => logs each value from right to left and returns the array
6089
6268
  */
6090
- function forEachRight(collection, iteratee, thisArg) {
6091
- return (typeof iteratee == 'function' && typeof thisArg == 'undefined' && isArray(collection))
6092
- ? arrayEachRight(collection, iteratee)
6093
- : baseEachRight(collection, bindCallback(iteratee, thisArg, 3));
6094
- }
6269
+ var forEachRight = createForEach(arrayEachRight, baseEachRight);
6095
6270
 
6096
6271
  /**
6097
6272
  * Creates an object composed of keys generated from the results of running
6098
6273
  * each element of `collection` through `iteratee`. The corresponding value
6099
6274
  * of each key is an array of the elements responsible for generating the key.
6100
- * The `iteratee` is bound to `thisArg` and invoked with three arguments;
6275
+ * The `iteratee` is bound to `thisArg` and invoked with three arguments:
6101
6276
  * (value, index|key, collection).
6102
6277
  *
6103
- * If a property name is provided for `predicate` the created `_.property`
6278
+ * If a property name is provided for `iteratee` the created `_.property`
6104
6279
  * style callback returns the property value of the given element.
6105
6280
  *
6106
6281
  * If a value is also provided for `thisArg` the created `_.matchesProperty`
6107
6282
  * style callback returns `true` for elements that have a matching property
6108
6283
  * value, else `false`.
6109
6284
  *
6110
- * If an object is provided for `predicate` the created `_.matches` style
6285
+ * If an object is provided for `iteratee` the created `_.matches` style
6111
6286
  * callback returns `true` for elements that have the properties of the given
6112
6287
  * object, else `false`.
6113
6288
  *
@@ -6148,10 +6323,9 @@
6148
6323
  * comparisons. If `fromIndex` is negative, it is used as the offset from
6149
6324
  * the end of `collection`.
6150
6325
  *
6151
- * **Note:** `SameValueZero` comparisons are like strict equality comparisons,
6152
- * e.g. `===`, except that `NaN` matches `NaN`. See the
6153
- * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
6154
- * for more details.
6326
+ * **Note:** [`SameValueZero`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero)
6327
+ * comparisons are like strict equality comparisons, e.g. `===`, except that
6328
+ * `NaN` matches `NaN`.
6155
6329
  *
6156
6330
  * @static
6157
6331
  * @memberOf _
@@ -6160,6 +6334,7 @@
6160
6334
  * @param {Array|Object|string} collection The collection to search.
6161
6335
  * @param {*} target The value to search for.
6162
6336
  * @param {number} [fromIndex=0] The index to search from.
6337
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`.
6163
6338
  * @returns {boolean} Returns `true` if a matching element is found, else `false`.
6164
6339
  * @example
6165
6340
  *
@@ -6175,7 +6350,7 @@
6175
6350
  * _.includes('pebbles', 'eb');
6176
6351
  * // => true
6177
6352
  */
6178
- function includes(collection, target, fromIndex) {
6353
+ function includes(collection, target, fromIndex, guard) {
6179
6354
  var length = collection ? collection.length : 0;
6180
6355
  if (!isLength(length)) {
6181
6356
  collection = values(collection);
@@ -6184,10 +6359,10 @@
6184
6359
  if (!length) {
6185
6360
  return false;
6186
6361
  }
6187
- if (typeof fromIndex == 'number') {
6188
- fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);
6189
- } else {
6362
+ if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) {
6190
6363
  fromIndex = 0;
6364
+ } else {
6365
+ fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);
6191
6366
  }
6192
6367
  return (typeof collection == 'string' || !isArray(collection) && isString(collection))
6193
6368
  ? (fromIndex < length && collection.indexOf(target, fromIndex) > -1)
@@ -6198,17 +6373,17 @@
6198
6373
  * Creates an object composed of keys generated from the results of running
6199
6374
  * each element of `collection` through `iteratee`. The corresponding value
6200
6375
  * of each key is the last element responsible for generating the key. The
6201
- * iteratee function is bound to `thisArg` and invoked with three arguments;
6376
+ * iteratee function is bound to `thisArg` and invoked with three arguments:
6202
6377
  * (value, index|key, collection).
6203
6378
  *
6204
- * If a property name is provided for `predicate` the created `_.property`
6379
+ * If a property name is provided for `iteratee` the created `_.property`
6205
6380
  * style callback returns the property value of the given element.
6206
6381
  *
6207
6382
  * If a value is also provided for `thisArg` the created `_.matchesProperty`
6208
6383
  * style callback returns `true` for elements that have a matching property
6209
6384
  * value, else `false`.
6210
6385
  *
6211
- * If an object is provided for `predicate` the created `_.matches` style
6386
+ * If an object is provided for `iteratee` the created `_.matches` style
6212
6387
  * callback returns `true` for elements that have the properties of the given
6213
6388
  * object, else `false`.
6214
6389
  *
@@ -6266,23 +6441,32 @@
6266
6441
  * _.invoke([123, 456], String.prototype.split, '');
6267
6442
  * // => [['1', '2', '3'], ['4', '5', '6']]
6268
6443
  */
6269
- function invoke(collection, methodName) {
6270
- return baseInvoke(collection, methodName, baseSlice(arguments, 2));
6271
- }
6444
+ var invoke = restParam(function(collection, methodName, args) {
6445
+ var index = -1,
6446
+ isFunc = typeof methodName == 'function',
6447
+ length = collection ? collection.length : 0,
6448
+ result = isLength(length) ? Array(length) : [];
6449
+
6450
+ baseEach(collection, function(value) {
6451
+ var func = isFunc ? methodName : (value != null && value[methodName]);
6452
+ result[++index] = func ? func.apply(value, args) : undefined;
6453
+ });
6454
+ return result;
6455
+ });
6272
6456
 
6273
6457
  /**
6274
6458
  * Creates an array of values by running each element in `collection` through
6275
6459
  * `iteratee`. The `iteratee` is bound to `thisArg` and invoked with three
6276
- * arguments; (value, index|key, collection).
6460
+ * arguments: (value, index|key, collection).
6277
6461
  *
6278
- * If a property name is provided for `predicate` the created `_.property`
6462
+ * If a property name is provided for `iteratee` the created `_.property`
6279
6463
  * style callback returns the property value of the given element.
6280
6464
  *
6281
6465
  * If a value is also provided for `thisArg` the created `_.matchesProperty`
6282
6466
  * style callback returns `true` for elements that have a matching property
6283
6467
  * value, else `false`.
6284
6468
  *
6285
- * If an object is provided for `predicate` the created `_.matches` style
6469
+ * If an object is provided for `iteratee` the created `_.matches` style
6286
6470
  * callback returns `true` for elements that have the properties of the given
6287
6471
  * object, else `false`.
6288
6472
  *
@@ -6291,9 +6475,9 @@
6291
6475
  *
6292
6476
  * The guarded methods are:
6293
6477
  * `ary`, `callback`, `chunk`, `clone`, `create`, `curry`, `curryRight`, `drop`,
6294
- * `dropRight`, `fill`, `flatten`, `invert`, `max`, `min`, `parseInt`, `slice`,
6295
- * `sortBy`, `take`, `takeRight`, `template`, `trim`, `trimLeft`, `trimRight`,
6296
- * `trunc`, `random`, `range`, `sample`, `uniq`, and `words`
6478
+ * `dropRight`, `every`, `fill`, `flatten`, `invert`, `max`, `min`, `parseInt`,
6479
+ * `slice`, `sortBy`, `take`, `takeRight`, `template`, `trim`, `trimLeft`,
6480
+ * `trimRight`, `trunc`, `random`, `range`, `sample`, `some`, `uniq`, and `words`
6297
6481
  *
6298
6482
  * @static
6299
6483
  * @memberOf _
@@ -6336,7 +6520,7 @@
6336
6520
  * Creates an array of elements split into two groups, the first of which
6337
6521
  * contains elements `predicate` returns truthy for, while the second of which
6338
6522
  * contains elements `predicate` returns falsey for. The predicate is bound
6339
- * to `thisArg` and invoked with three arguments; (value, index|key, collection).
6523
+ * to `thisArg` and invoked with three arguments: (value, index|key, collection).
6340
6524
  *
6341
6525
  * If a property name is provided for `predicate` the created `_.property`
6342
6526
  * style callback returns the property value of the given element.
@@ -6427,14 +6611,14 @@
6427
6611
  * each element in `collection` through `iteratee`, where each successive
6428
6612
  * invocation is supplied the return value of the previous. If `accumulator`
6429
6613
  * is not provided the first element of `collection` is used as the initial
6430
- * value. The `iteratee` is bound to `thisArg`and invoked with four arguments;
6614
+ * value. The `iteratee` is bound to `thisArg` and invoked with four arguments:
6431
6615
  * (accumulator, value, index|key, collection).
6432
6616
  *
6433
6617
  * Many lodash methods are guarded to work as interatees for methods like
6434
6618
  * `_.reduce`, `_.reduceRight`, and `_.transform`.
6435
6619
  *
6436
6620
  * The guarded methods are:
6437
- * `assign`, `defaults`, `merge`, and `sortAllBy`
6621
+ * `assign`, `defaults`, `includes`, `merge`, `sortByAll`, and `sortByOrder`
6438
6622
  *
6439
6623
  * @static
6440
6624
  * @memberOf _
@@ -6458,10 +6642,7 @@
6458
6642
  * }, {});
6459
6643
  * // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed)
6460
6644
  */
6461
- function reduce(collection, iteratee, accumulator, thisArg) {
6462
- var func = isArray(collection) ? arrayReduce : baseReduce;
6463
- return func(collection, getCallback(iteratee, thisArg, 4), accumulator, arguments.length < 3, baseEach);
6464
- }
6645
+ var reduce = createReduce(arrayReduce, baseEach);
6465
6646
 
6466
6647
  /**
6467
6648
  * This method is like `_.reduce` except that it iterates over elements of
@@ -6485,10 +6666,7 @@
6485
6666
  * }, []);
6486
6667
  * // => [4, 5, 2, 3, 0, 1]
6487
6668
  */
6488
- function reduceRight(collection, iteratee, accumulator, thisArg) {
6489
- var func = isArray(collection) ? arrayReduceRight : baseReduce;
6490
- return func(collection, getCallback(iteratee, thisArg, 4), accumulator, arguments.length < 3, baseEachRight);
6491
- }
6669
+ var reduceRight = createReduce(arrayReduceRight, baseEachRight);
6492
6670
 
6493
6671
  /**
6494
6672
  * The opposite of `_.filter`; this method returns the elements of `collection`
@@ -6575,9 +6753,8 @@
6575
6753
  }
6576
6754
 
6577
6755
  /**
6578
- * Creates an array of shuffled values, using a version of the Fisher-Yates
6579
- * shuffle. See [Wikipedia](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle)
6580
- * for more details.
6756
+ * Creates an array of shuffled values, using a version of the
6757
+ * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
6581
6758
  *
6582
6759
  * @static
6583
6760
  * @memberOf _
@@ -6635,7 +6812,7 @@
6635
6812
  * Checks if `predicate` returns truthy for **any** element of `collection`.
6636
6813
  * The function returns as soon as it finds a passing value and does not iterate
6637
6814
  * over the entire collection. The predicate is bound to `thisArg` and invoked
6638
- * with three arguments; (value, index|key, collection).
6815
+ * with three arguments: (value, index|key, collection).
6639
6816
  *
6640
6817
  * If a property name is provided for `predicate` the created `_.property`
6641
6818
  * style callback returns the property value of the given element.
@@ -6682,6 +6859,9 @@
6682
6859
  */
6683
6860
  function some(collection, predicate, thisArg) {
6684
6861
  var func = isArray(collection) ? arraySome : baseSome;
6862
+ if (thisArg && isIterateeCall(collection, predicate, thisArg)) {
6863
+ predicate = null;
6864
+ }
6685
6865
  if (typeof predicate != 'function' || typeof thisArg != 'undefined') {
6686
6866
  predicate = getCallback(predicate, thisArg, 3);
6687
6867
  }
@@ -6692,17 +6872,17 @@
6692
6872
  * Creates an array of elements, sorted in ascending order by the results of
6693
6873
  * running each element in a collection through `iteratee`. This method performs
6694
6874
  * a stable sort, that is, it preserves the original sort order of equal elements.
6695
- * The `iteratee` is bound to `thisArg` and invoked with three arguments;
6875
+ * The `iteratee` is bound to `thisArg` and invoked with three arguments:
6696
6876
  * (value, index|key, collection).
6697
6877
  *
6698
- * If a property name is provided for `predicate` the created `_.property`
6878
+ * If a property name is provided for `iteratee` the created `_.property`
6699
6879
  * style callback returns the property value of the given element.
6700
6880
  *
6701
6881
  * If a value is also provided for `thisArg` the created `_.matchesProperty`
6702
6882
  * style callback returns `true` for elements that have a matching property
6703
6883
  * value, else `false`.
6704
6884
  *
6705
- * If an object is provided for `predicate` the created `_.matches` style
6885
+ * If an object is provided for `iteratee` the created `_.matches` style
6706
6886
  * callback returns `true` for elements that have the properties of the given
6707
6887
  * object, else `false`.
6708
6888
  *
@@ -6778,17 +6958,24 @@
6778
6958
  * _.map(_.sortByAll(users, ['user', 'age']), _.values);
6779
6959
  * // => [['barney', 26], ['barney', 36], ['fred', 30], ['fred', 40]]
6780
6960
  */
6781
- function sortByAll(collection) {
6961
+ function sortByAll() {
6962
+ var args = arguments,
6963
+ collection = args[0],
6964
+ guard = args[3],
6965
+ index = 0,
6966
+ length = args.length - 1;
6967
+
6782
6968
  if (collection == null) {
6783
6969
  return [];
6784
6970
  }
6785
- var args = arguments,
6786
- guard = args[3];
6787
-
6971
+ var props = Array(length);
6972
+ while (index < length) {
6973
+ props[index] = args[++index];
6974
+ }
6788
6975
  if (guard && isIterateeCall(args[1], args[2], guard)) {
6789
- args = [collection, args[1]];
6976
+ props = args[1];
6790
6977
  }
6791
- return baseSortByOrder(collection, baseFlatten(args, false, false, 1), []);
6978
+ return baseSortByOrder(collection, baseFlatten(props), []);
6792
6979
  }
6793
6980
 
6794
6981
  /**
@@ -7007,7 +7194,7 @@
7007
7194
  * @category Function
7008
7195
  * @param {Function} func The function to bind.
7009
7196
  * @param {*} thisArg The `this` binding of `func`.
7010
- * @param {...*} [args] The arguments to be partially applied.
7197
+ * @param {...*} [partials] The arguments to be partially applied.
7011
7198
  * @returns {Function} Returns the new bound function.
7012
7199
  * @example
7013
7200
  *
@@ -7026,16 +7213,14 @@
7026
7213
  * bound('hi');
7027
7214
  * // => 'hi fred!'
7028
7215
  */
7029
- function bind(func, thisArg) {
7216
+ var bind = restParam(function(func, thisArg, partials) {
7030
7217
  var bitmask = BIND_FLAG;
7031
- if (arguments.length > 2) {
7032
- var partials = baseSlice(arguments, 2),
7033
- holders = replaceHolders(partials, bind.placeholder);
7034
-
7218
+ if (partials.length) {
7219
+ var holders = replaceHolders(partials, bind.placeholder);
7035
7220
  bitmask |= PARTIAL_FLAG;
7036
7221
  }
7037
7222
  return createWrapper(func, bitmask, thisArg, partials, holders);
7038
- }
7223
+ });
7039
7224
 
7040
7225
  /**
7041
7226
  * Binds methods of an object to the object itself, overwriting the existing
@@ -7065,13 +7250,18 @@
7065
7250
  * jQuery('#docs').on('click', view.onClick);
7066
7251
  * // => logs 'clicked docs' when the element is clicked
7067
7252
  */
7068
- function bindAll(object) {
7069
- return baseBindAll(object,
7070
- arguments.length > 1
7071
- ? baseFlatten(arguments, false, false, 1)
7072
- : functions(object)
7073
- );
7074
- }
7253
+ var bindAll = restParam(function(object, methodNames) {
7254
+ methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object);
7255
+
7256
+ var index = -1,
7257
+ length = methodNames.length;
7258
+
7259
+ while (++index < length) {
7260
+ var key = methodNames[index];
7261
+ object[key] = createWrapper(object[key], BIND_FLAG, object);
7262
+ }
7263
+ return object;
7264
+ });
7075
7265
 
7076
7266
  /**
7077
7267
  * Creates a function that invokes the method at `object[key]` and prepends
@@ -7090,7 +7280,7 @@
7090
7280
  * @category Function
7091
7281
  * @param {Object} object The object the method belongs to.
7092
7282
  * @param {string} key The key of the method.
7093
- * @param {...*} [args] The arguments to be partially applied.
7283
+ * @param {...*} [partials] The arguments to be partially applied.
7094
7284
  * @returns {Function} Returns the new bound function.
7095
7285
  * @example
7096
7286
  *
@@ -7117,16 +7307,14 @@
7117
7307
  * bound('hi');
7118
7308
  * // => 'hiya fred!'
7119
7309
  */
7120
- function bindKey(object, key) {
7310
+ var bindKey = restParam(function(object, key, partials) {
7121
7311
  var bitmask = BIND_FLAG | BIND_KEY_FLAG;
7122
- if (arguments.length > 2) {
7123
- var partials = baseSlice(arguments, 2),
7124
- holders = replaceHolders(partials, bindKey.placeholder);
7125
-
7312
+ if (partials.length) {
7313
+ var holders = replaceHolders(partials, bindKey.placeholder);
7126
7314
  bitmask |= PARTIAL_FLAG;
7127
7315
  }
7128
7316
  return createWrapper(key, bitmask, object, partials, holders);
7129
- }
7317
+ });
7130
7318
 
7131
7319
  /**
7132
7320
  * Creates a function that accepts one or more arguments of `func` that when
@@ -7168,14 +7356,7 @@
7168
7356
  * curried(1)(_, 3)(2);
7169
7357
  * // => [1, 2, 3]
7170
7358
  */
7171
- function curry(func, arity, guard) {
7172
- if (guard && isIterateeCall(func, arity, guard)) {
7173
- arity = null;
7174
- }
7175
- var result = createWrapper(func, CURRY_FLAG, null, null, null, null, null, arity);
7176
- result.placeholder = curry.placeholder;
7177
- return result;
7178
- }
7359
+ var curry = createCurry(CURRY_FLAG);
7179
7360
 
7180
7361
  /**
7181
7362
  * This method is like `_.curry` except that arguments are applied to `func`
@@ -7214,14 +7395,7 @@
7214
7395
  * curried(3)(1, _)(2);
7215
7396
  * // => [1, 2, 3]
7216
7397
  */
7217
- function curryRight(func, arity, guard) {
7218
- if (guard && isIterateeCall(func, arity, guard)) {
7219
- arity = null;
7220
- }
7221
- var result = createWrapper(func, CURRY_RIGHT_FLAG, null, null, null, null, null, arity);
7222
- result.placeholder = curryRight.placeholder;
7223
- return result;
7224
- }
7398
+ var curryRight = createCurry(CURRY_RIGHT_FLAG);
7225
7399
 
7226
7400
  /**
7227
7401
  * Creates a function that delays invoking `func` until after `wait` milliseconds
@@ -7416,9 +7590,9 @@
7416
7590
  * }, 'deferred');
7417
7591
  * // logs 'deferred' after one or more milliseconds
7418
7592
  */
7419
- function defer(func) {
7420
- return baseDelay(func, 1, arguments, 1);
7421
- }
7593
+ var defer = restParam(function(func, args) {
7594
+ return baseDelay(func, 1, args);
7595
+ });
7422
7596
 
7423
7597
  /**
7424
7598
  * Invokes `func` after `wait` milliseconds. Any additional arguments are
@@ -7438,9 +7612,9 @@
7438
7612
  * }, 1000, 'later');
7439
7613
  * // => logs 'later' after one second
7440
7614
  */
7441
- function delay(func, wait) {
7442
- return baseDelay(func, wait, arguments, 2);
7443
- }
7615
+ var delay = restParam(function(func, wait, args) {
7616
+ return baseDelay(func, wait, args);
7617
+ });
7444
7618
 
7445
7619
  /**
7446
7620
  * Creates a function that returns the result of invoking the provided
@@ -7462,7 +7636,7 @@
7462
7636
  * addSquare(1, 2);
7463
7637
  * // => 9
7464
7638
  */
7465
- var flow = createComposer();
7639
+ var flow = createFlow();
7466
7640
 
7467
7641
  /**
7468
7642
  * This method is like `_.flow` except that it creates a function that
@@ -7484,7 +7658,7 @@
7484
7658
  * addSquare(1, 2);
7485
7659
  * // => 9
7486
7660
  */
7487
- var flowRight = createComposer(true);
7661
+ var flowRight = createFlow(true);
7488
7662
 
7489
7663
  /**
7490
7664
  * Creates a function that memoizes the result of `func`. If `resolver` is
@@ -7496,10 +7670,8 @@
7496
7670
  *
7497
7671
  * **Note:** The cache is exposed as the `cache` property on the memoized
7498
7672
  * function. Its creation may be customized by replacing the `_.memoize.Cache`
7499
- * constructor with one whose instances implement the ES `Map` method interface
7500
- * of `get`, `has`, and `set`. See the
7501
- * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-properties-of-the-map-prototype-object)
7502
- * for more details.
7673
+ * constructor with one whose instances implement the [`Map`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-properties-of-the-map-prototype-object)
7674
+ * method interface of `get`, `has`, and `set`.
7503
7675
  *
7504
7676
  * @static
7505
7677
  * @memberOf _
@@ -7590,7 +7762,7 @@
7590
7762
  /**
7591
7763
  * Creates a function that is restricted to invoking `func` once. Repeat calls
7592
7764
  * to the function return the value of the first call. The `func` is invoked
7593
- * with the `this` binding of the created function.
7765
+ * with the `this` binding and arguments of the created function.
7594
7766
  *
7595
7767
  * @static
7596
7768
  * @memberOf _
@@ -7623,7 +7795,7 @@
7623
7795
  * @memberOf _
7624
7796
  * @category Function
7625
7797
  * @param {Function} func The function to partially apply arguments to.
7626
- * @param {...*} [args] The arguments to be partially applied.
7798
+ * @param {...*} [partials] The arguments to be partially applied.
7627
7799
  * @returns {Function} Returns the new partially applied function.
7628
7800
  * @example
7629
7801
  *
@@ -7640,12 +7812,7 @@
7640
7812
  * greetFred('hi');
7641
7813
  * // => 'hi fred'
7642
7814
  */
7643
- function partial(func) {
7644
- var partials = baseSlice(arguments, 1),
7645
- holders = replaceHolders(partials, partial.placeholder);
7646
-
7647
- return createWrapper(func, PARTIAL_FLAG, null, partials, holders);
7648
- }
7815
+ var partial = createPartial(PARTIAL_FLAG);
7649
7816
 
7650
7817
  /**
7651
7818
  * This method is like `_.partial` except that partially applied arguments
@@ -7661,7 +7828,7 @@
7661
7828
  * @memberOf _
7662
7829
  * @category Function
7663
7830
  * @param {Function} func The function to partially apply arguments to.
7664
- * @param {...*} [args] The arguments to be partially applied.
7831
+ * @param {...*} [partials] The arguments to be partially applied.
7665
7832
  * @returns {Function} Returns the new partially applied function.
7666
7833
  * @example
7667
7834
  *
@@ -7678,12 +7845,7 @@
7678
7845
  * sayHelloTo('fred');
7679
7846
  * // => 'hello fred'
7680
7847
  */
7681
- function partialRight(func) {
7682
- var partials = baseSlice(arguments, 1),
7683
- holders = replaceHolders(partials, partialRight.placeholder);
7684
-
7685
- return createWrapper(func, PARTIAL_RIGHT_FLAG, null, partials, holders);
7686
- }
7848
+ var partialRight = createPartial(PARTIAL_RIGHT_FLAG);
7687
7849
 
7688
7850
  /**
7689
7851
  * Creates a function that invokes `func` with arguments arranged according
@@ -7713,29 +7875,80 @@
7713
7875
  * }, [1, 2, 3]);
7714
7876
  * // => [3, 6, 9]
7715
7877
  */
7716
- function rearg(func) {
7717
- var indexes = baseFlatten(arguments, false, false, 1);
7718
- return createWrapper(func, REARG_FLAG, null, null, null, indexes);
7719
- }
7878
+ var rearg = restParam(function(func, indexes) {
7879
+ return createWrapper(func, REARG_FLAG, null, null, null, baseFlatten(indexes));
7880
+ });
7720
7881
 
7721
7882
  /**
7722
7883
  * Creates a function that invokes `func` with the `this` binding of the
7723
- * created function and the array of arguments provided to the created
7724
- * function much like [Function#apply](http://es5.github.io/#x15.3.4.3).
7884
+ * created function and arguments from `start` and beyond provided as an array.
7885
+ *
7886
+ * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters).
7887
+ *
7888
+ * @static
7889
+ * @memberOf _
7890
+ * @category Function
7891
+ * @param {Function} func The function to apply a rest parameter to.
7892
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
7893
+ * @returns {Function} Returns the new function.
7894
+ * @example
7895
+ *
7896
+ * var say = _.restParam(function(what, names) {
7897
+ * return what + ' ' + _.initial(names).join(', ') +
7898
+ * (_.size(names) > 1 ? ', & ' : '') + _.last(names);
7899
+ * });
7900
+ *
7901
+ * say('hello', 'fred', 'barney', 'pebbles');
7902
+ * // => 'hello fred, barney, & pebbles'
7903
+ */
7904
+ function restParam(func, start) {
7905
+ if (typeof func != 'function') {
7906
+ throw new TypeError(FUNC_ERROR_TEXT);
7907
+ }
7908
+ start = nativeMax(typeof start == 'undefined' ? (func.length - 1) : (+start || 0), 0);
7909
+ return function() {
7910
+ var args = arguments,
7911
+ index = -1,
7912
+ length = nativeMax(args.length - start, 0),
7913
+ rest = Array(length);
7914
+
7915
+ while (++index < length) {
7916
+ rest[index] = args[start + index];
7917
+ }
7918
+ switch (start) {
7919
+ case 0: return func.call(this, rest);
7920
+ case 1: return func.call(this, args[0], rest);
7921
+ case 2: return func.call(this, args[0], args[1], rest);
7922
+ }
7923
+ var otherArgs = Array(start + 1);
7924
+ index = -1;
7925
+ while (++index < start) {
7926
+ otherArgs[index] = args[index];
7927
+ }
7928
+ otherArgs[start] = rest;
7929
+ return func.apply(this, otherArgs);
7930
+ };
7931
+ }
7932
+
7933
+ /**
7934
+ * Creates a function that invokes `func` with the `this` binding of the created
7935
+ * function and an array of arguments much like [`Function#apply`](https://es5.github.io/#x15.3.4.3).
7936
+ *
7937
+ * **Note:** This method is based on the [spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator).
7725
7938
  *
7726
7939
  * @static
7727
7940
  * @memberOf _
7728
7941
  * @category Function
7729
7942
  * @param {Function} func The function to spread arguments over.
7730
- * @returns {*} Returns the new function.
7943
+ * @returns {Function} Returns the new function.
7731
7944
  * @example
7732
7945
  *
7733
- * var spread = _.spread(function(who, what) {
7946
+ * var say = _.spread(function(who, what) {
7734
7947
  * return who + ' says ' + what;
7735
7948
  * });
7736
7949
  *
7737
- * spread(['Fred', 'hello']);
7738
- * // => 'Fred says hello'
7950
+ * say(['fred', 'hello']);
7951
+ * // => 'fred says hello'
7739
7952
  *
7740
7953
  * // with a Promise
7741
7954
  * var numbers = Promise.all([
@@ -7850,12 +8063,12 @@
7850
8063
  * cloning is handled by the method instead. The `customizer` is bound to
7851
8064
  * `thisArg` and invoked with two argument; (value [, index|key, object]).
7852
8065
  *
7853
- * **Note:** This method is loosely based on the structured clone algorithm.
8066
+ * **Note:** This method is loosely based on the
8067
+ * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).
7854
8068
  * The enumerable properties of `arguments` objects and objects created by
7855
8069
  * constructors other than `Object` are cloned to plain `Object` objects. An
7856
8070
  * empty object is returned for uncloneable values such as functions, DOM nodes,
7857
- * Maps, Sets, and WeakMaps. See the [HTML5 specification](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm)
7858
- * for more details.
8071
+ * Maps, Sets, and WeakMaps.
7859
8072
  *
7860
8073
  * @static
7861
8074
  * @memberOf _
@@ -7913,12 +8126,12 @@
7913
8126
  * is handled by the method instead. The `customizer` is bound to `thisArg`
7914
8127
  * and invoked with two argument; (value [, index|key, object]).
7915
8128
  *
7916
- * **Note:** This method is loosely based on the structured clone algorithm.
8129
+ * **Note:** This method is loosely based on the
8130
+ * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).
7917
8131
  * The enumerable properties of `arguments` objects and objects created by
7918
8132
  * constructors other than `Object` are cloned to plain `Object` objects. An
7919
8133
  * empty object is returned for uncloneable values such as functions, DOM nodes,
7920
- * Maps, Sets, and WeakMaps. See the [HTML5 specification](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm)
7921
- * for more details.
8134
+ * Maps, Sets, and WeakMaps.
7922
8135
  *
7923
8136
  * @static
7924
8137
  * @memberOf _
@@ -7975,7 +8188,7 @@
7975
8188
  */
7976
8189
  function isArguments(value) {
7977
8190
  var length = isObjectLike(value) ? value.length : undefined;
7978
- return (isLength(length) && objToString.call(value) == argsTag) || false;
8191
+ return isLength(length) && objToString.call(value) == argsTag;
7979
8192
  }
7980
8193
 
7981
8194
  /**
@@ -7995,7 +8208,7 @@
7995
8208
  * // => false
7996
8209
  */
7997
8210
  var isArray = nativeIsArray || function(value) {
7998
- return (isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag) || false;
8211
+ return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;
7999
8212
  };
8000
8213
 
8001
8214
  /**
@@ -8015,7 +8228,7 @@
8015
8228
  * // => false
8016
8229
  */
8017
8230
  function isBoolean(value) {
8018
- return (value === true || value === false || isObjectLike(value) && objToString.call(value) == boolTag) || false;
8231
+ return value === true || value === false || (isObjectLike(value) && objToString.call(value) == boolTag);
8019
8232
  }
8020
8233
 
8021
8234
  /**
@@ -8035,7 +8248,7 @@
8035
8248
  * // => false
8036
8249
  */
8037
8250
  function isDate(value) {
8038
- return (isObjectLike(value) && objToString.call(value) == dateTag) || false;
8251
+ return isObjectLike(value) && objToString.call(value) == dateTag;
8039
8252
  }
8040
8253
 
8041
8254
  /**
@@ -8055,13 +8268,13 @@
8055
8268
  * // => false
8056
8269
  */
8057
8270
  function isElement(value) {
8058
- return (value && value.nodeType === 1 && isObjectLike(value) &&
8059
- (objToString.call(value).indexOf('Element') > -1)) || false;
8271
+ return !!value && value.nodeType === 1 && isObjectLike(value) &&
8272
+ (objToString.call(value).indexOf('Element') > -1);
8060
8273
  }
8061
8274
  // Fallback for environments without DOM support.
8062
8275
  if (!support.dom) {
8063
8276
  isElement = function(value) {
8064
- return (value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value)) || false;
8277
+ return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value);
8065
8278
  };
8066
8279
  }
8067
8280
 
@@ -8109,7 +8322,7 @@
8109
8322
  * equivalent. If `customizer` is provided it is invoked to compare values.
8110
8323
  * If `customizer` returns `undefined` comparisons are handled by the method
8111
8324
  * instead. The `customizer` is bound to `thisArg` and invoked with three
8112
- * arguments; (value, other [, index|key]).
8325
+ * arguments: (value, other [, index|key]).
8113
8326
  *
8114
8327
  * **Note:** This method supports comparing arrays, booleans, `Date` objects,
8115
8328
  * numbers, `Object` objects, regexes, and strings. Objects are compared by
@@ -8174,15 +8387,13 @@
8174
8387
  * // => false
8175
8388
  */
8176
8389
  function isError(value) {
8177
- return (isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag) || false;
8390
+ return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag;
8178
8391
  }
8179
8392
 
8180
8393
  /**
8181
8394
  * Checks if `value` is a finite primitive number.
8182
8395
  *
8183
- * **Note:** This method is based on ES `Number.isFinite`. See the
8184
- * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isfinite)
8185
- * for more details.
8396
+ * **Note:** This method is based on [`Number.isFinite`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isfinite).
8186
8397
  *
8187
8398
  * @static
8188
8399
  * @memberOf _
@@ -8234,11 +8445,9 @@
8234
8445
  };
8235
8446
 
8236
8447
  /**
8237
- * Checks if `value` is the language type of `Object`.
8448
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
8238
8449
  * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
8239
8450
  *
8240
- * **Note:** See the [ES5 spec](https://es5.github.io/#x8) for more details.
8241
- *
8242
8451
  * @static
8243
8452
  * @memberOf _
8244
8453
  * @category Lang
@@ -8259,7 +8468,7 @@
8259
8468
  // Avoid a V8 JIT bug in Chrome 19-20.
8260
8469
  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
8261
8470
  var type = typeof value;
8262
- return type == 'function' || (value && type == 'object') || false;
8471
+ return type == 'function' || (!!value && type == 'object');
8263
8472
  }
8264
8473
 
8265
8474
  /**
@@ -8267,7 +8476,7 @@
8267
8476
  * `object` contains equivalent property values. If `customizer` is provided
8268
8477
  * it is invoked to compare values. If `customizer` returns `undefined`
8269
8478
  * comparisons are handled by the method instead. The `customizer` is bound
8270
- * to `thisArg` and invoked with three arguments; (value, other, index|key).
8479
+ * to `thisArg` and invoked with three arguments: (value, other, index|key).
8271
8480
  *
8272
8481
  * **Note:** This method supports comparing properties of arrays, booleans,
8273
8482
  * `Date` objects, numbers, `Object` objects, regexes, and strings. Functions
@@ -8305,13 +8514,19 @@
8305
8514
  var props = keys(source),
8306
8515
  length = props.length;
8307
8516
 
8517
+ if (!length) {
8518
+ return true;
8519
+ }
8520
+ if (object == null) {
8521
+ return false;
8522
+ }
8308
8523
  customizer = typeof customizer == 'function' && bindCallback(customizer, thisArg, 3);
8309
8524
  if (!customizer && length == 1) {
8310
8525
  var key = props[0],
8311
8526
  value = source[key];
8312
8527
 
8313
8528
  if (isStrictComparable(value)) {
8314
- return object != null && value === object[key] && hasOwnProperty.call(object, key);
8529
+ return value === object[key] && (typeof value != 'undefined' || (key in toObject(object)));
8315
8530
  }
8316
8531
  }
8317
8532
  var values = Array(length),
@@ -8321,15 +8536,14 @@
8321
8536
  value = values[length] = source[props[length]];
8322
8537
  strictCompareFlags[length] = isStrictComparable(value);
8323
8538
  }
8324
- return baseIsMatch(object, props, values, strictCompareFlags, customizer);
8539
+ return baseIsMatch(toObject(object), props, values, strictCompareFlags, customizer);
8325
8540
  }
8326
8541
 
8327
8542
  /**
8328
8543
  * Checks if `value` is `NaN`.
8329
8544
  *
8330
- * **Note:** This method is not the same as native `isNaN` which returns `true`
8331
- * for `undefined` and other non-numeric values. See the [ES5 spec](https://es5.github.io/#x15.1.2.4)
8332
- * for more details.
8545
+ * **Note:** This method is not the same as [`isNaN`](https://es5.github.io/#x15.1.2.4)
8546
+ * which returns `true` for `undefined` and other non-numeric values.
8333
8547
  *
8334
8548
  * @static
8335
8549
  * @memberOf _
@@ -8379,7 +8593,7 @@
8379
8593
  if (objToString.call(value) == funcTag) {
8380
8594
  return reNative.test(fnToString.call(value));
8381
8595
  }
8382
- return (isObjectLike(value) && reHostCtor.test(value)) || false;
8596
+ return isObjectLike(value) && reHostCtor.test(value);
8383
8597
  }
8384
8598
 
8385
8599
  /**
@@ -8425,7 +8639,7 @@
8425
8639
  * // => false
8426
8640
  */
8427
8641
  function isNumber(value) {
8428
- return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag) || false;
8642
+ return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag);
8429
8643
  }
8430
8644
 
8431
8645
  /**
@@ -8507,7 +8721,7 @@
8507
8721
  * // => false
8508
8722
  */
8509
8723
  function isString(value) {
8510
- return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag) || false;
8724
+ return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);
8511
8725
  }
8512
8726
 
8513
8727
  /**
@@ -8527,7 +8741,7 @@
8527
8741
  * // => false
8528
8742
  */
8529
8743
  function isTypedArray(value) {
8530
- return (isObjectLike(value) && isLength(value.length) && typedArrayTags[objToString.call(value)]) || false;
8744
+ return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];
8531
8745
  }
8532
8746
 
8533
8747
  /**
@@ -8609,7 +8823,7 @@
8609
8823
  * Assigns own enumerable properties of source object(s) to the destination
8610
8824
  * object. Subsequent sources overwrite property assignments of previous sources.
8611
8825
  * If `customizer` is provided it is invoked to produce the assigned values.
8612
- * The `customizer` is bound to `thisArg` and invoked with five arguments;
8826
+ * The `customizer` is bound to `thisArg` and invoked with five arguments:
8613
8827
  * (objectValue, sourceValue, key, object, source).
8614
8828
  *
8615
8829
  * @static
@@ -8694,18 +8908,18 @@
8694
8908
  * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
8695
8909
  * // => { 'user': 'barney', 'age': 36 }
8696
8910
  */
8697
- function defaults(object) {
8911
+ var defaults = restParam(function(args) {
8912
+ var object = args[0];
8698
8913
  if (object == null) {
8699
8914
  return object;
8700
8915
  }
8701
- var args = arrayCopy(arguments);
8702
8916
  args.push(assignDefaults);
8703
8917
  return assign.apply(undefined, args);
8704
- }
8918
+ });
8705
8919
 
8706
8920
  /**
8707
- * This method is like `_.findIndex` except that it returns the key of the
8708
- * first element `predicate` returns truthy for, instead of the element itself.
8921
+ * This method is like `_.find` except that it returns the key of the first
8922
+ * element `predicate` returns truthy for instead of the element itself.
8709
8923
  *
8710
8924
  * If a property name is provided for `predicate` the created `_.property`
8711
8925
  * style callback returns the property value of the given element.
@@ -8751,10 +8965,7 @@
8751
8965
  * _.findKey(users, 'active');
8752
8966
  * // => 'barney'
8753
8967
  */
8754
- function findKey(object, predicate, thisArg) {
8755
- predicate = getCallback(predicate, thisArg, 3);
8756
- return baseFind(object, predicate, baseForOwn, true);
8757
- }
8968
+ var findKey = createFindKey(baseForOwn);
8758
8969
 
8759
8970
  /**
8760
8971
  * This method is like `_.findKey` except that it iterates over elements of
@@ -8804,15 +9015,12 @@
8804
9015
  * _.findLastKey(users, 'active');
8805
9016
  * // => 'pebbles'
8806
9017
  */
8807
- function findLastKey(object, predicate, thisArg) {
8808
- predicate = getCallback(predicate, thisArg, 3);
8809
- return baseFind(object, predicate, baseForOwnRight, true);
8810
- }
9018
+ var findLastKey = createFindKey(baseForOwnRight);
8811
9019
 
8812
9020
  /**
8813
9021
  * Iterates over own and inherited enumerable properties of an object invoking
8814
9022
  * `iteratee` for each property. The `iteratee` is bound to `thisArg` and invoked
8815
- * with three arguments; (value, key, object). Iterator functions may exit
9023
+ * with three arguments: (value, key, object). Iterator functions may exit
8816
9024
  * iteration early by explicitly returning `false`.
8817
9025
  *
8818
9026
  * @static
@@ -8836,12 +9044,7 @@
8836
9044
  * });
8837
9045
  * // => logs 'a', 'b', and 'c' (iteration order is not guaranteed)
8838
9046
  */
8839
- function forIn(object, iteratee, thisArg) {
8840
- if (typeof iteratee != 'function' || typeof thisArg != 'undefined') {
8841
- iteratee = bindCallback(iteratee, thisArg, 3);
8842
- }
8843
- return baseFor(object, iteratee, keysIn);
8844
- }
9047
+ var forIn = createForIn(baseFor);
8845
9048
 
8846
9049
  /**
8847
9050
  * This method is like `_.forIn` except that it iterates over properties of
@@ -8868,15 +9071,12 @@
8868
9071
  * });
8869
9072
  * // => logs 'c', 'b', and 'a' assuming `_.forIn ` logs 'a', 'b', and 'c'
8870
9073
  */
8871
- function forInRight(object, iteratee, thisArg) {
8872
- iteratee = bindCallback(iteratee, thisArg, 3);
8873
- return baseForRight(object, iteratee, keysIn);
8874
- }
9074
+ var forInRight = createForIn(baseForRight);
8875
9075
 
8876
9076
  /**
8877
9077
  * Iterates over own enumerable properties of an object invoking `iteratee`
8878
9078
  * for each property. The `iteratee` is bound to `thisArg` and invoked with
8879
- * three arguments; (value, key, object). Iterator functions may exit iteration
9079
+ * three arguments: (value, key, object). Iterator functions may exit iteration
8880
9080
  * early by explicitly returning `false`.
8881
9081
  *
8882
9082
  * @static
@@ -8900,12 +9100,7 @@
8900
9100
  * });
8901
9101
  * // => logs 'a' and 'b' (iteration order is not guaranteed)
8902
9102
  */
8903
- function forOwn(object, iteratee, thisArg) {
8904
- if (typeof iteratee != 'function' || typeof thisArg != 'undefined') {
8905
- iteratee = bindCallback(iteratee, thisArg, 3);
8906
- }
8907
- return baseForOwn(object, iteratee);
8908
- }
9103
+ var forOwn = createForOwn(baseForOwn);
8909
9104
 
8910
9105
  /**
8911
9106
  * This method is like `_.forOwn` except that it iterates over properties of
@@ -8932,10 +9127,7 @@
8932
9127
  * });
8933
9128
  * // => logs 'b' and 'a' assuming `_.forOwn` logs 'a' and 'b'
8934
9129
  */
8935
- function forOwnRight(object, iteratee, thisArg) {
8936
- iteratee = bindCallback(iteratee, thisArg, 3);
8937
- return baseForRight(object, iteratee, keys);
8938
- }
9130
+ var forOwnRight = createForOwn(baseForOwnRight);
8939
9131
 
8940
9132
  /**
8941
9133
  * Creates an array of function property names from all enumerable properties,
@@ -9120,7 +9312,7 @@
9120
9312
  /**
9121
9313
  * Creates an object with the same keys as `object` and values generated by
9122
9314
  * running each own enumerable property of `object` through `iteratee`. The
9123
- * iteratee function is bound to `thisArg` and invoked with three arguments;
9315
+ * iteratee function is bound to `thisArg` and invoked with three arguments:
9124
9316
  * (value, key, object).
9125
9317
  *
9126
9318
  * If a property name is provided for `iteratee` the created `_.property`
@@ -9175,7 +9367,7 @@
9175
9367
  * provided it is invoked to produce the merged values of the destination and
9176
9368
  * source properties. If `customizer` returns `undefined` merging is handled
9177
9369
  * by the method instead. The `customizer` is bound to `thisArg` and invoked
9178
- * with five arguments; (objectValue, sourceValue, key, object, source).
9370
+ * with five arguments: (objectValue, sourceValue, key, object, source).
9179
9371
  *
9180
9372
  * @static
9181
9373
  * @memberOf _
@@ -9224,7 +9416,7 @@
9224
9416
  * Property names may be specified as individual arguments or as arrays of
9225
9417
  * property names. If `predicate` is provided it is invoked for each property
9226
9418
  * of `object` omitting the properties `predicate` returns truthy for. The
9227
- * predicate is bound to `thisArg` and invoked with three arguments;
9419
+ * predicate is bound to `thisArg` and invoked with three arguments:
9228
9420
  * (value, key, object).
9229
9421
  *
9230
9422
  * @static
@@ -9246,19 +9438,19 @@
9246
9438
  * _.omit(object, _.isNumber);
9247
9439
  * // => { 'user': 'fred' }
9248
9440
  */
9249
- function omit(object, predicate, thisArg) {
9441
+ var omit = restParam(function(object, props) {
9250
9442
  if (object == null) {
9251
9443
  return {};
9252
9444
  }
9253
- if (typeof predicate != 'function') {
9254
- var props = arrayMap(baseFlatten(arguments, false, false, 1), String);
9445
+ if (typeof props[0] != 'function') {
9446
+ var props = arrayMap(baseFlatten(props), String);
9255
9447
  return pickByArray(object, baseDifference(keysIn(object), props));
9256
9448
  }
9257
- predicate = bindCallback(predicate, thisArg, 3);
9449
+ var predicate = bindCallback(props[0], props[1], 3);
9258
9450
  return pickByCallback(object, function(value, key, object) {
9259
9451
  return !predicate(value, key, object);
9260
9452
  });
9261
- }
9453
+ });
9262
9454
 
9263
9455
  /**
9264
9456
  * Creates a two dimensional array of the key-value pairs for `object`,
@@ -9292,7 +9484,7 @@
9292
9484
  * names may be specified as individual arguments or as arrays of property
9293
9485
  * names. If `predicate` is provided it is invoked for each property of `object`
9294
9486
  * picking the properties `predicate` returns truthy for. The predicate is
9295
- * bound to `thisArg` and invoked with three arguments; (value, key, object).
9487
+ * bound to `thisArg` and invoked with three arguments: (value, key, object).
9296
9488
  *
9297
9489
  * @static
9298
9490
  * @memberOf _
@@ -9313,14 +9505,14 @@
9313
9505
  * _.pick(object, _.isString);
9314
9506
  * // => { 'user': 'fred' }
9315
9507
  */
9316
- function pick(object, predicate, thisArg) {
9508
+ var pick = restParam(function(object, props) {
9317
9509
  if (object == null) {
9318
9510
  return {};
9319
9511
  }
9320
- return typeof predicate == 'function'
9321
- ? pickByCallback(object, bindCallback(predicate, thisArg, 3))
9322
- : pickByArray(object, baseFlatten(arguments, false, false, 1));
9323
- }
9512
+ return typeof props[0] == 'function'
9513
+ ? pickByCallback(object, bindCallback(props[0], props[1], 3))
9514
+ : pickByArray(object, baseFlatten(props));
9515
+ });
9324
9516
 
9325
9517
  /**
9326
9518
  * Resolves the value of property `key` on `object`. If the value of `key` is
@@ -9365,7 +9557,7 @@
9365
9557
  * `accumulator` object which is the result of running each of its own enumerable
9366
9558
  * properties through `iteratee`, with each invocation potentially mutating
9367
9559
  * the `accumulator` object. The `iteratee` is bound to `thisArg` and invoked
9368
- * with four arguments; (accumulator, value, key, object). Iterator functions
9560
+ * with four arguments: (accumulator, value, key, object). Iterator functions
9369
9561
  * may exit iteration early by explicitly returning `false`.
9370
9562
  *
9371
9563
  * @static
@@ -9576,8 +9768,7 @@
9576
9768
  /*------------------------------------------------------------------------*/
9577
9769
 
9578
9770
  /**
9579
- * Converts `string` to camel case.
9580
- * See [Wikipedia](https://en.wikipedia.org/wiki/CamelCase) for more details.
9771
+ * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
9581
9772
  *
9582
9773
  * @static
9583
9774
  * @memberOf _
@@ -9619,9 +9810,8 @@
9619
9810
  }
9620
9811
 
9621
9812
  /**
9622
- * Deburrs `string` by converting latin-1 supplementary letters to basic latin letters.
9623
- * See [Wikipedia](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
9624
- * for more details.
9813
+ * Deburrs `string` by converting [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
9814
+ * to basic latin letters and removing [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
9625
9815
  *
9626
9816
  * @static
9627
9817
  * @memberOf _
@@ -9635,7 +9825,7 @@
9635
9825
  */
9636
9826
  function deburr(string) {
9637
9827
  string = baseToString(string);
9638
- return string && string.replace(reLatin1, deburrLetter);
9828
+ return string && string.replace(reLatin1, deburrLetter).replace(reComboMarks, '');
9639
9829
  }
9640
9830
 
9641
9831
  /**
@@ -9690,9 +9880,8 @@
9690
9880
  * [#108](https://html5sec.org/#108), and [#133](https://html5sec.org/#133) of
9691
9881
  * the [HTML5 Security Cheatsheet](https://html5sec.org/) for more details.
9692
9882
  *
9693
- * When working with HTML you should always quote attribute values to reduce
9694
- * XSS vectors. See [Ryan Grove's article](http://wonko.com/post/html-escaping)
9695
- * for more details.
9883
+ * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping)
9884
+ * to reduce XSS vectors.
9696
9885
  *
9697
9886
  * @static
9698
9887
  * @memberOf _
@@ -9713,8 +9902,8 @@
9713
9902
  }
9714
9903
 
9715
9904
  /**
9716
- * Escapes the `RegExp` special characters "\", "^", "$", ".", "|", "?", "*",
9717
- * "+", "(", ")", "[", "]", "{" and "}" in `string`.
9905
+ * Escapes the `RegExp` special characters "\", "/", "^", "$", ".", "|", "?",
9906
+ * "*", "+", "(", ")", "[", "]", "{" and "}" in `string`.
9718
9907
  *
9719
9908
  * @static
9720
9909
  * @memberOf _
@@ -9724,7 +9913,7 @@
9724
9913
  * @example
9725
9914
  *
9726
9915
  * _.escapeRegExp('[lodash](https://lodash.com/)');
9727
- * // => '\[lodash\]\(https://lodash\.com/\)'
9916
+ * // => '\[lodash\]\(https:\/\/lodash\.com\/\)'
9728
9917
  */
9729
9918
  function escapeRegExp(string) {
9730
9919
  string = baseToString(string);
@@ -9734,9 +9923,7 @@
9734
9923
  }
9735
9924
 
9736
9925
  /**
9737
- * Converts `string` to kebab case.
9738
- * See [Wikipedia](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles) for
9739
- * more details.
9926
+ * Converts `string` to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
9740
9927
  *
9741
9928
  * @static
9742
9929
  * @memberOf _
@@ -9759,9 +9946,8 @@
9759
9946
  });
9760
9947
 
9761
9948
  /**
9762
- * Pads `string` on the left and right sides if it is shorter then the given
9763
- * padding length. The `chars` string may be truncated if the number of padding
9764
- * characters can't be evenly divided by the padding length.
9949
+ * Pads `string` on the left and right sides if it is shorter than `length`.
9950
+ * Padding characters are truncated if they can't be evenly divided by `length`.
9765
9951
  *
9766
9952
  * @static
9767
9953
  * @memberOf _
@@ -9793,14 +9979,13 @@
9793
9979
  leftLength = floor(mid),
9794
9980
  rightLength = ceil(mid);
9795
9981
 
9796
- chars = createPad('', rightLength, chars);
9982
+ chars = createPadding('', rightLength, chars);
9797
9983
  return chars.slice(0, leftLength) + string + chars;
9798
9984
  }
9799
9985
 
9800
9986
  /**
9801
- * Pads `string` on the left side if it is shorter then the given padding
9802
- * length. The `chars` string may be truncated if the number of padding
9803
- * characters exceeds the padding length.
9987
+ * Pads `string` on the left side if it is shorter than `length`. Padding
9988
+ * characters are truncated if they exceed `length`.
9804
9989
  *
9805
9990
  * @static
9806
9991
  * @memberOf _
@@ -9820,15 +10005,11 @@
9820
10005
  * _.padLeft('abc', 3);
9821
10006
  * // => 'abc'
9822
10007
  */
9823
- function padLeft(string, length, chars) {
9824
- string = baseToString(string);
9825
- return string && (createPad(string, length, chars) + string);
9826
- }
10008
+ var padLeft = createPadDir();
9827
10009
 
9828
10010
  /**
9829
- * Pads `string` on the right side if it is shorter then the given padding
9830
- * length. The `chars` string may be truncated if the number of padding
9831
- * characters exceeds the padding length.
10011
+ * Pads `string` on the right side if it is shorter than `length`. Padding
10012
+ * characters are truncated if they exceed `length`.
9832
10013
  *
9833
10014
  * @static
9834
10015
  * @memberOf _
@@ -9848,18 +10029,15 @@
9848
10029
  * _.padRight('abc', 3);
9849
10030
  * // => 'abc'
9850
10031
  */
9851
- function padRight(string, length, chars) {
9852
- string = baseToString(string);
9853
- return string && (string + createPad(string, length, chars));
9854
- }
10032
+ var padRight = createPadDir(true);
9855
10033
 
9856
10034
  /**
9857
10035
  * Converts `string` to an integer of the specified radix. If `radix` is
9858
10036
  * `undefined` or `0`, a `radix` of `10` is used unless `value` is a hexadecimal,
9859
10037
  * in which case a `radix` of `16` is used.
9860
10038
  *
9861
- * **Note:** This method aligns with the ES5 implementation of `parseInt`.
9862
- * See the [ES5 spec](https://es5.github.io/#E) for more details.
10039
+ * **Note:** This method aligns with the [ES5 implementation](https://es5.github.io/#E)
10040
+ * of `parseInt`.
9863
10041
  *
9864
10042
  * @static
9865
10043
  * @memberOf _
@@ -9939,8 +10117,7 @@
9939
10117
  }
9940
10118
 
9941
10119
  /**
9942
- * Converts `string` to snake case.
9943
- * See [Wikipedia](https://en.wikipedia.org/wiki/Snake_case) for more details.
10120
+ * Converts `string` to [snake case](https://en.wikipedia.org/wiki/Snake_case).
9944
10121
  *
9945
10122
  * @static
9946
10123
  * @memberOf _
@@ -9963,9 +10140,7 @@
9963
10140
  });
9964
10141
 
9965
10142
  /**
9966
- * Converts `string` to start case.
9967
- * See [Wikipedia](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage)
9968
- * for more details.
10143
+ * Converts `string` to [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
9969
10144
  *
9970
10145
  * @static
9971
10146
  * @memberOf _
@@ -10024,9 +10199,9 @@
10024
10199
  * properties may be accessed as free variables in the template. If a setting
10025
10200
  * object is provided it takes precedence over `_.templateSettings` values.
10026
10201
  *
10027
- * **Note:** In the development build `_.template` utilizes sourceURLs for easier debugging.
10028
- * See the [HTML5 Rocks article on sourcemaps](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
10029
- * for more details.
10202
+ * **Note:** In the development build `_.template` utilizes
10203
+ * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
10204
+ * for easier debugging.
10030
10205
  *
10031
10206
  * For more information on precompiling templates see
10032
10207
  * [lodash's custom builds documentation](https://lodash.com/custom-builds).
@@ -10238,7 +10413,7 @@
10238
10413
  * // => 'abc'
10239
10414
  *
10240
10415
  * _.map([' foo ', ' bar '], _.trim);
10241
- * // => ['foo', 'bar]
10416
+ * // => ['foo', 'bar']
10242
10417
  */
10243
10418
  function trim(string, chars, guard) {
10244
10419
  var value = string;
@@ -10346,7 +10521,7 @@
10346
10521
  * 'length': 24,
10347
10522
  * 'separator': /,? +/
10348
10523
  * });
10349
- * //=> 'hi-diddly-ho there...'
10524
+ * // => 'hi-diddly-ho there...'
10350
10525
  *
10351
10526
  * _.trunc('hi-diddly-ho there, neighborino', {
10352
10527
  * 'omission': ' [...]'
@@ -10465,7 +10640,7 @@
10465
10640
  * @static
10466
10641
  * @memberOf _
10467
10642
  * @category Utility
10468
- * @param {*} func The function to attempt.
10643
+ * @param {Function} func The function to attempt.
10469
10644
  * @returns {*} Returns the `func` result or error object.
10470
10645
  * @example
10471
10646
  *
@@ -10478,20 +10653,13 @@
10478
10653
  * elements = [];
10479
10654
  * }
10480
10655
  */
10481
- function attempt() {
10482
- var func = arguments[0],
10483
- length = arguments.length,
10484
- args = Array(length ? (length - 1) : 0);
10485
-
10486
- while (--length > 0) {
10487
- args[length - 1] = arguments[length];
10488
- }
10656
+ var attempt = restParam(function(func, args) {
10489
10657
  try {
10490
10658
  return func.apply(undefined, args);
10491
10659
  } catch(e) {
10492
10660
  return isError(e) ? e : new Error(e);
10493
10661
  }
10494
- }
10662
+ });
10495
10663
 
10496
10664
  /**
10497
10665
  * Creates a function that invokes `func` with the `this` binding of `thisArg`
@@ -10628,12 +10796,11 @@
10628
10796
  *
10629
10797
  * var users = [
10630
10798
  * { 'user': 'barney' },
10631
- * { 'user': 'fred' },
10632
- * { 'user': 'pebbles' }
10799
+ * { 'user': 'fred' }
10633
10800
  * ];
10634
10801
  *
10635
10802
  * _.find(users, _.matchesProperty('user', 'fred'));
10636
- * // => { 'user': 'fred', 'age': 40 }
10803
+ * // => { 'user': 'fred' }
10637
10804
  */
10638
10805
  function matchesProperty(key, value) {
10639
10806
  return baseMatchesProperty(key + '', baseClone(value, true));
@@ -10644,6 +10811,9 @@
10644
10811
  * destination object. If `object` is a function then methods are added to
10645
10812
  * its prototype as well.
10646
10813
  *
10814
+ * **Note:** Use `_.runInContext` to create a pristine `lodash` function
10815
+ * for mixins to avoid conflicts caused by modifying the original.
10816
+ *
10647
10817
  * @static
10648
10818
  * @memberOf _
10649
10819
  * @category Utility
@@ -10661,7 +10831,7 @@
10661
10831
  * });
10662
10832
  * }
10663
10833
  *
10664
- * // use `_.runInContext` to avoid potential conflicts (esp. in Node.js)
10834
+ * // use `_.runInContext` to avoid conflicts (esp. in Node.js)
10665
10835
  * var _ = require('lodash').runInContext();
10666
10836
  *
10667
10837
  * _.mixin({ 'vowels': vowels });
@@ -10711,12 +10881,10 @@
10711
10881
  return function() {
10712
10882
  var chainAll = this.__chain__;
10713
10883
  if (chain || chainAll) {
10714
- var result = object(this.__wrapped__);
10715
- (result.__actions__ = arrayCopy(this.__actions__)).push({
10716
- 'func': func,
10717
- 'args': arguments,
10718
- 'thisArg': object
10719
- });
10884
+ var result = object(this.__wrapped__),
10885
+ actions = result.__actions__ = arrayCopy(this.__actions__);
10886
+
10887
+ actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
10720
10888
  result.__chain__ = chainAll;
10721
10889
  return result;
10722
10890
  }
@@ -10783,7 +10951,7 @@
10783
10951
  * var getName = _.property('user');
10784
10952
  *
10785
10953
  * _.map(users, getName);
10786
- * // => ['fred', barney']
10954
+ * // => ['fred', 'barney']
10787
10955
  *
10788
10956
  * _.pluck(_.sortBy(users, getName), 'user');
10789
10957
  * // => ['barney', 'fred']
@@ -10793,7 +10961,7 @@
10793
10961
  }
10794
10962
 
10795
10963
  /**
10796
- * The inverse of `_.property`; this method creates a function which returns
10964
+ * The opposite of `_.property`; this method creates a function which returns
10797
10965
  * the property value of a given key on `object`.
10798
10966
  *
10799
10967
  * @static
@@ -10971,16 +11139,16 @@
10971
11139
  * `-Infinity` is returned. If an iteratee function is provided it is invoked
10972
11140
  * for each value in `collection` to generate the criterion by which the value
10973
11141
  * is ranked. The `iteratee` is bound to `thisArg` and invoked with three
10974
- * arguments; (value, index, collection).
11142
+ * arguments: (value, index, collection).
10975
11143
  *
10976
- * If a property name is provided for `predicate` the created `_.property`
11144
+ * If a property name is provided for `iteratee` the created `_.property`
10977
11145
  * style callback returns the property value of the given element.
10978
11146
  *
10979
11147
  * If a value is also provided for `thisArg` the created `_.matchesProperty`
10980
11148
  * style callback returns `true` for elements that have a matching property
10981
11149
  * value, else `false`.
10982
11150
  *
10983
- * If an object is provided for `predicate` the created `_.matches` style
11151
+ * If an object is provided for `iteratee` the created `_.matches` style
10984
11152
  * callback returns `true` for elements that have the properties of the given
10985
11153
  * object, else `false`.
10986
11154
  *
@@ -11007,11 +11175,11 @@
11007
11175
  * _.max(users, function(chr) {
11008
11176
  * return chr.age;
11009
11177
  * });
11010
- * // => { 'user': 'fred', 'age': 40 };
11178
+ * // => { 'user': 'fred', 'age': 40 }
11011
11179
  *
11012
11180
  * // using the `_.property` callback shorthand
11013
11181
  * _.max(users, 'age');
11014
- * // => { 'user': 'fred', 'age': 40 };
11182
+ * // => { 'user': 'fred', 'age': 40 }
11015
11183
  */
11016
11184
  var max = createExtremum(arrayMax);
11017
11185
 
@@ -11020,16 +11188,16 @@
11020
11188
  * `Infinity` is returned. If an iteratee function is provided it is invoked
11021
11189
  * for each value in `collection` to generate the criterion by which the value
11022
11190
  * is ranked. The `iteratee` is bound to `thisArg` and invoked with three
11023
- * arguments; (value, index, collection).
11191
+ * arguments: (value, index, collection).
11024
11192
  *
11025
- * If a property name is provided for `predicate` the created `_.property`
11193
+ * If a property name is provided for `iteratee` the created `_.property`
11026
11194
  * style callback returns the property value of the given element.
11027
11195
  *
11028
11196
  * If a value is also provided for `thisArg` the created `_.matchesProperty`
11029
11197
  * style callback returns `true` for elements that have a matching property
11030
11198
  * value, else `false`.
11031
11199
  *
11032
- * If an object is provided for `predicate` the created `_.matches` style
11200
+ * If an object is provided for `iteratee` the created `_.matches` style
11033
11201
  * callback returns `true` for elements that have the properties of the given
11034
11202
  * object, else `false`.
11035
11203
  *
@@ -11056,11 +11224,11 @@
11056
11224
  * _.min(users, function(chr) {
11057
11225
  * return chr.age;
11058
11226
  * });
11059
- * // => { 'user': 'barney', 'age': 36 };
11227
+ * // => { 'user': 'barney', 'age': 36 }
11060
11228
  *
11061
11229
  * // using the `_.property` callback shorthand
11062
11230
  * _.min(users, 'age');
11063
- * // => { 'user': 'barney', 'age': 36 };
11231
+ * // => { 'user': 'barney', 'age': 36 }
11064
11232
  */
11065
11233
  var min = createExtremum(arrayMin, true);
11066
11234
 
@@ -11071,26 +11239,45 @@
11071
11239
  * @memberOf _
11072
11240
  * @category Math
11073
11241
  * @param {Array|Object|string} collection The collection to iterate over.
11242
+ * @param {Function|Object|string} [iteratee] The function invoked per iteration.
11243
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
11074
11244
  * @returns {number} Returns the sum.
11075
11245
  * @example
11076
11246
  *
11077
- * _.sum([4, 6, 2]);
11078
- * // => 12
11247
+ * _.sum([4, 6]);
11248
+ * // => 10
11249
+ *
11250
+ * _.sum({ 'a': 4, 'b': 6 });
11251
+ * // => 10
11252
+ *
11253
+ * var objects = [
11254
+ * { 'n': 4 },
11255
+ * { 'n': 6 }
11256
+ * ];
11257
+ *
11258
+ * _.sum(objects, function(object) {
11259
+ * return object.n;
11260
+ * });
11261
+ * // => 10
11079
11262
  *
11080
- * _.sum({ 'a': 4, 'b': 6, 'c': 2 });
11081
- * // => 12
11263
+ * // using the `_.property` callback shorthand
11264
+ * _.sum(objects, 'n');
11265
+ * // => 10
11082
11266
  */
11083
- function sum(collection) {
11084
- if (!isArray(collection)) {
11085
- collection = toIterable(collection);
11267
+ function sum(collection, iteratee, thisArg) {
11268
+ if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
11269
+ iteratee = null;
11086
11270
  }
11087
- var length = collection.length,
11088
- result = 0;
11271
+ var func = getCallback(),
11272
+ noIteratee = iteratee == null;
11089
11273
 
11090
- while (length--) {
11091
- result += +collection[length] || 0;
11274
+ if (!(func === baseCallback && noIteratee)) {
11275
+ noIteratee = false;
11276
+ iteratee = func(iteratee, thisArg, 3);
11092
11277
  }
11093
- return result;
11278
+ return noIteratee
11279
+ ? arraySum(isArray(collection) ? collection : toIterable(collection))
11280
+ : baseSum(collection, iteratee);
11094
11281
  }
11095
11282
 
11096
11283
  /*------------------------------------------------------------------------*/
@@ -11189,6 +11376,7 @@
11189
11376
  lodash.reject = reject;
11190
11377
  lodash.remove = remove;
11191
11378
  lodash.rest = rest;
11379
+ lodash.restParam = restParam;
11192
11380
  lodash.shuffle = shuffle;
11193
11381
  lodash.slice = slice;
11194
11382
  lodash.sortBy = sortBy;
@@ -11480,8 +11668,11 @@
11480
11668
 
11481
11669
  // Add `LazyWrapper` methods to `lodash.prototype`.
11482
11670
  baseForOwn(LazyWrapper.prototype, function(func, methodName) {
11483
- var lodashFunc = lodash[methodName],
11484
- checkIteratee = /^(?:filter|map|reject)|While$/.test(methodName),
11671
+ var lodashFunc = lodash[methodName];
11672
+ if (!lodashFunc) {
11673
+ return;
11674
+ }
11675
+ var checkIteratee = /^(?:filter|map|reject)|While$/.test(methodName),
11485
11676
  retUnwrapped = /^(?:first|last)$/.test(methodName);
11486
11677
 
11487
11678
  lodash.prototype[methodName] = function() {
@@ -11540,6 +11731,19 @@
11540
11731
  };
11541
11732
  });
11542
11733
 
11734
+ // Map minified function names to their real names.
11735
+ baseForOwn(LazyWrapper.prototype, function(func, methodName) {
11736
+ var lodashFunc = lodash[methodName];
11737
+ if (lodashFunc) {
11738
+ var key = lodashFunc.name,
11739
+ names = realNames[key] || (realNames[key] = []);
11740
+
11741
+ names.push({ 'name': methodName, 'func': lodashFunc });
11742
+ }
11743
+ });
11744
+
11745
+ realNames[createHybridWrapper(null, BIND_KEY_FLAG).name] = [{ 'name': 'wrapper', 'func': null }];
11746
+
11543
11747
  // Add functions to the lazy wrapper.
11544
11748
  LazyWrapper.prototype.clone = lazyClone;
11545
11749
  LazyWrapper.prototype.reverse = lazyReverse;