diff --git a/dist/index.js b/dist/index.js index f3b89a6..2461bd2 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,4 +1,4 @@ -!function(t,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.gltfBoundingBox=n():t.gltfBoundingBox=n()}(this,function(){return function(t){var n={};function r(e){if(n[e])return n[e].exports;var i=n[e]={i:e,l:!1,exports:{}};return t[e].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=t,r.c=n,r.d=function(t,n,e){r.o(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:e})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,n){if(1&n&&(t=r(t)),8&n)return t;if(4&n&&"object"==typeof t&&t&&t.__esModule)return t;var e=Object.create(null);if(r.r(e),Object.defineProperty(e,"default",{enumerable:!0,value:t}),2&n&&"string"!=typeof t)for(var i in t)r.d(e,i,function(n){return t[n]}.bind(null,i));return e},r.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(n,"a",n),n},r.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},r.p="",r(r.s=6)}([function(t,n,r){"use strict";n.Matrix=r(8)},function(t,n,r){(function(t,e){var i; +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.gltfBoundingBox=e():t.gltfBoundingBox=e()}(this,function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=7)}([function(t,e,n){"use strict";e.Matrix=n(9)},function(t,e,n){(function(t,r){var i; /** * @license * Lodash @@ -6,12 +6,16 @@ * Released under MIT license * Based on Underscore.js 1.8.3 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */(function(){var u,o=200,f="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",a="Expected a function",c="__lodash_hash_undefined__",s=500,l="__lodash_placeholder__",h=1,p=2,v=4,g=1,_=2,y=1,d=2,w=4,m=8,b=16,A=32,x=64,E=128,R=256,B=512,P=30,j="...",O=800,I=16,S=1,T=2,M=1/0,U=9007199254740991,L=1.7976931348623157e308,k=NaN,D=4294967295,C=D-1,z=D>>>1,Y=[["ary",E],["bind",y],["bindKey",d],["curry",m],["curryRight",b],["flip",B],["partial",A],["partialRight",x],["rearg",R]],N="[object Arguments]",W="[object Array]",F="[object AsyncFunction]",$="[object Boolean]",q="[object Date]",V="[object DOMException]",Z="[object Error]",K="[object Function]",G="[object GeneratorFunction]",J="[object Map]",H="[object Number]",X="[object Null]",Q="[object Object]",tt="[object Proxy]",nt="[object RegExp]",rt="[object Set]",et="[object String]",it="[object Symbol]",ut="[object Undefined]",ot="[object WeakMap]",ft="[object WeakSet]",at="[object ArrayBuffer]",ct="[object DataView]",st="[object Float32Array]",lt="[object Float64Array]",ht="[object Int8Array]",pt="[object Int16Array]",vt="[object Int32Array]",gt="[object Uint8Array]",_t="[object Uint8ClampedArray]",yt="[object Uint16Array]",dt="[object Uint32Array]",wt=/\b__p \+= '';/g,mt=/\b(__p \+=) '' \+/g,bt=/(__e\(.*?\)|\b__t\)) \+\n'';/g,At=/&(?:amp|lt|gt|quot|#39);/g,xt=/[&<>"']/g,Et=RegExp(At.source),Rt=RegExp(xt.source),Bt=/<%-([\s\S]+?)%>/g,Pt=/<%([\s\S]+?)%>/g,jt=/<%=([\s\S]+?)%>/g,Ot=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,It=/^\w*$/,St=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Tt=/[\\^$.*+?()[\]{}|]/g,Mt=RegExp(Tt.source),Ut=/^\s+|\s+$/g,Lt=/^\s+/,kt=/\s+$/,Dt=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Ct=/\{\n\/\* \[wrapped with (.+)\] \*/,zt=/,? & /,Yt=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Nt=/\\(\\)?/g,Wt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Ft=/\w*$/,$t=/^[-+]0x[0-9a-f]+$/i,qt=/^0b[01]+$/i,Vt=/^\[object .+?Constructor\]$/,Zt=/^0o[0-7]+$/i,Kt=/^(?:0|[1-9]\d*)$/,Gt=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Jt=/($^)/,Ht=/['\n\r\u2028\u2029\\]/g,Xt="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Qt="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\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",tn="[\\ud800-\\udfff]",nn="["+Qt+"]",rn="["+Xt+"]",en="\\d+",un="[\\u2700-\\u27bf]",on="[a-z\\xdf-\\xf6\\xf8-\\xff]",fn="[^\\ud800-\\udfff"+Qt+en+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",an="\\ud83c[\\udffb-\\udfff]",cn="[^\\ud800-\\udfff]",sn="(?:\\ud83c[\\udde6-\\uddff]){2}",ln="[\\ud800-\\udbff][\\udc00-\\udfff]",hn="[A-Z\\xc0-\\xd6\\xd8-\\xde]",pn="(?:"+on+"|"+fn+")",vn="(?:"+hn+"|"+fn+")",gn="(?:"+rn+"|"+an+")"+"?",_n="[\\ufe0e\\ufe0f]?"+gn+("(?:\\u200d(?:"+[cn,sn,ln].join("|")+")[\\ufe0e\\ufe0f]?"+gn+")*"),yn="(?:"+[un,sn,ln].join("|")+")"+_n,dn="(?:"+[cn+rn+"?",rn,sn,ln,tn].join("|")+")",wn=RegExp("['’]","g"),mn=RegExp(rn,"g"),bn=RegExp(an+"(?="+an+")|"+dn+_n,"g"),An=RegExp([hn+"?"+on+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[nn,hn,"$"].join("|")+")",vn+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[nn,hn+pn,"$"].join("|")+")",hn+"?"+pn+"+(?:['’](?:d|ll|m|re|s|t|ve))?",hn+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",en,yn].join("|"),"g"),xn=RegExp("[\\u200d\\ud800-\\udfff"+Xt+"\\ufe0e\\ufe0f]"),En=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Rn=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Bn=-1,Pn={};Pn[st]=Pn[lt]=Pn[ht]=Pn[pt]=Pn[vt]=Pn[gt]=Pn[_t]=Pn[yt]=Pn[dt]=!0,Pn[N]=Pn[W]=Pn[at]=Pn[$]=Pn[ct]=Pn[q]=Pn[Z]=Pn[K]=Pn[J]=Pn[H]=Pn[Q]=Pn[nt]=Pn[rt]=Pn[et]=Pn[ot]=!1;var jn={};jn[N]=jn[W]=jn[at]=jn[ct]=jn[$]=jn[q]=jn[st]=jn[lt]=jn[ht]=jn[pt]=jn[vt]=jn[J]=jn[H]=jn[Q]=jn[nt]=jn[rt]=jn[et]=jn[it]=jn[gt]=jn[_t]=jn[yt]=jn[dt]=!0,jn[Z]=jn[K]=jn[ot]=!1;var On={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},In=parseFloat,Sn=parseInt,Tn="object"==typeof t&&t&&t.Object===Object&&t,Mn="object"==typeof self&&self&&self.Object===Object&&self,Un=Tn||Mn||Function("return this")(),Ln="object"==typeof n&&n&&!n.nodeType&&n,kn=Ln&&"object"==typeof e&&e&&!e.nodeType&&e,Dn=kn&&kn.exports===Ln,Cn=Dn&&Tn.process,zn=function(){try{var t=kn&&kn.require&&kn.require("util").types;return t||Cn&&Cn.binding&&Cn.binding("util")}catch(t){}}(),Yn=zn&&zn.isArrayBuffer,Nn=zn&&zn.isDate,Wn=zn&&zn.isMap,Fn=zn&&zn.isRegExp,$n=zn&&zn.isSet,qn=zn&&zn.isTypedArray;function Vn(t,n,r){switch(r.length){case 0:return t.call(n);case 1:return t.call(n,r[0]);case 2:return t.call(n,r[0],r[1]);case 3:return t.call(n,r[0],r[1],r[2])}return t.apply(n,r)}function Zn(t,n,r,e){for(var i=-1,u=null==t?0:t.length;++i-1}function Qn(t,n,r){for(var e=-1,i=null==t?0:t.length;++e-1;);return r}function br(t,n){for(var r=t.length;r--&&ar(n,t[r],0)>-1;);return r}var Ar=pr({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),xr=pr({"&":"&","<":"<",">":">",'"':""","'":"'"});function Er(t){return"\\"+On[t]}function Rr(t){return xn.test(t)}function Br(t){var n=-1,r=Array(t.size);return t.forEach(function(t,e){r[++n]=[e,t]}),r}function Pr(t,n){return function(r){return t(n(r))}}function jr(t,n){for(var r=-1,e=t.length,i=0,u=[];++r",""":'"',"'":"'"});var Lr=function t(n){var r=(n=null==n?Un:Lr.defaults(Un.Object(),n,Lr.pick(Un,Rn))).Array,e=n.Date,i=n.Error,Xt=n.Function,Qt=n.Math,tn=n.Object,nn=n.RegExp,rn=n.String,en=n.TypeError,un=r.prototype,on=Xt.prototype,fn=tn.prototype,an=n["__core-js_shared__"],cn=on.toString,sn=fn.hasOwnProperty,ln=0,hn=function(){var t=/[^.]+$/.exec(an&&an.keys&&an.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),pn=fn.toString,vn=cn.call(tn),gn=Un._,_n=nn("^"+cn.call(sn).replace(Tt,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),yn=Dn?n.Buffer:u,dn=n.Symbol,bn=n.Uint8Array,xn=yn?yn.allocUnsafe:u,On=Pr(tn.getPrototypeOf,tn),Tn=tn.create,Mn=fn.propertyIsEnumerable,Ln=un.splice,kn=dn?dn.isConcatSpreadable:u,Cn=dn?dn.iterator:u,zn=dn?dn.toStringTag:u,ur=function(){try{var t=Cu(tn,"defineProperty");return t({},"",{}),t}catch(t){}}(),pr=n.clearTimeout!==Un.clearTimeout&&n.clearTimeout,kr=e&&e.now!==Un.Date.now&&e.now,Dr=n.setTimeout!==Un.setTimeout&&n.setTimeout,Cr=Qt.ceil,zr=Qt.floor,Yr=tn.getOwnPropertySymbols,Nr=yn?yn.isBuffer:u,Wr=n.isFinite,Fr=un.join,$r=Pr(tn.keys,tn),qr=Qt.max,Vr=Qt.min,Zr=e.now,Kr=n.parseInt,Gr=Qt.random,Jr=un.reverse,Hr=Cu(n,"DataView"),Xr=Cu(n,"Map"),Qr=Cu(n,"Promise"),te=Cu(n,"Set"),ne=Cu(n,"WeakMap"),re=Cu(tn,"create"),ee=ne&&new ne,ie={},ue=co(Hr),oe=co(Xr),fe=co(Qr),ae=co(te),ce=co(ne),se=dn?dn.prototype:u,le=se?se.valueOf:u,he=se?se.toString:u;function pe(t){if(jf(t)&&!yf(t)&&!(t instanceof ye)){if(t instanceof _e)return t;if(sn.call(t,"__wrapped__"))return so(t)}return new _e(t)}var ve=function(){function t(){}return function(n){if(!Pf(n))return{};if(Tn)return Tn(n);t.prototype=n;var r=new t;return t.prototype=u,r}}();function ge(){}function _e(t,n){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!n,this.__index__=0,this.__values__=u}function ye(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=D,this.__views__=[]}function de(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n=n?t:n)),t}function Le(t,n,r,e,i,o){var f,a=n&h,c=n&p,s=n&v;if(r&&(f=i?r(t,e,i,o):r(t)),f!==u)return f;if(!Pf(t))return t;var l=yf(t);if(l){if(f=function(t){var n=t.length,r=new t.constructor(n);return n&&"string"==typeof t[0]&&sn.call(t,"index")&&(r.index=t.index,r.input=t.input),r}(t),!a)return ru(t,f)}else{var g=Nu(t),_=g==K||g==G;if(bf(t))return Ji(t,a);if(g==Q||g==N||_&&!i){if(f=c||_?{}:Fu(t),!a)return c?function(t,n){return eu(t,Yu(t),n)}(t,function(t,n){return t&&eu(n,ua(n),t)}(f,t)):function(t,n){return eu(t,zu(t),n)}(t,Se(f,t))}else{if(!jn[g])return i?t:{};f=function(t,n,r){var e=t.constructor;switch(n){case at:return Hi(t);case $:case q:return new e(+t);case ct:return function(t,n){var r=n?Hi(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}(t,r);case st:case lt:case ht:case pt:case vt:case gt:case _t:case yt:case dt:return Xi(t,r);case J:return new e;case H:case et:return new e(t);case nt:return function(t){var n=new t.constructor(t.source,Ft.exec(t));return n.lastIndex=t.lastIndex,n}(t);case rt:return new e;case it:return function(t){return le?tn(le.call(t)):{}}(t)}}(t,g,a)}}o||(o=new Ae);var y=o.get(t);if(y)return y;if(o.set(t,f),Mf(t))return t.forEach(function(e){f.add(Le(e,n,r,e,t,o))}),f;if(Of(t))return t.forEach(function(e,i){f.set(i,Le(e,n,r,i,t,o))}),f;var d=l?u:(s?c?Su:Iu:c?ua:ia)(t);return Kn(d||t,function(e,i){d&&(e=t[i=e]),je(f,i,Le(e,n,r,i,t,o))}),f}function ke(t,n,r){var e=r.length;if(null==t)return!e;for(t=tn(t);e--;){var i=r[e],o=n[i],f=t[i];if(f===u&&!(i in t)||!o(f))return!1}return!0}function De(t,n,r){if("function"!=typeof t)throw new en(a);return ro(function(){t.apply(u,r)},n)}function Ce(t,n,r,e){var i=-1,u=Xn,f=!0,a=t.length,c=[],s=n.length;if(!a)return c;r&&(n=tr(n,yr(r))),e?(u=Qn,f=!1):n.length>=o&&(u=wr,f=!1,n=new be(n));t:for(;++i-1},we.prototype.set=function(t,n){var r=this.__data__,e=Oe(r,t);return e<0?(++this.size,r.push([t,n])):r[e][1]=n,this},me.prototype.clear=function(){this.size=0,this.__data__={hash:new de,map:new(Xr||we),string:new de}},me.prototype.delete=function(t){var n=ku(this,t).delete(t);return this.size-=n?1:0,n},me.prototype.get=function(t){return ku(this,t).get(t)},me.prototype.has=function(t){return ku(this,t).has(t)},me.prototype.set=function(t,n){var r=ku(this,t),e=r.size;return r.set(t,n),this.size+=r.size==e?0:1,this},be.prototype.add=be.prototype.push=function(t){return this.__data__.set(t,c),this},be.prototype.has=function(t){return this.__data__.has(t)},Ae.prototype.clear=function(){this.__data__=new we,this.size=0},Ae.prototype.delete=function(t){var n=this.__data__,r=n.delete(t);return this.size=n.size,r},Ae.prototype.get=function(t){return this.__data__.get(t)},Ae.prototype.has=function(t){return this.__data__.has(t)},Ae.prototype.set=function(t,n){var r=this.__data__;if(r instanceof we){var e=r.__data__;if(!Xr||e.length0&&r(f)?n>1?$e(f,n-1,r,e,i):nr(i,f):e||(i[i.length]=f)}return i}var qe=fu(),Ve=fu(!0);function Ze(t,n){return t&&qe(t,n,ia)}function Ke(t,n){return t&&Ve(t,n,ia)}function Ge(t,n){return Hn(n,function(n){return Ef(t[n])})}function Je(t,n){for(var r=0,e=(n=Vi(n,t)).length;null!=t&&rn}function ti(t,n){return null!=t&&sn.call(t,n)}function ni(t,n){return null!=t&&n in tn(t)}function ri(t,n,e){for(var i=e?Qn:Xn,o=t[0].length,f=t.length,a=f,c=r(f),s=1/0,l=[];a--;){var h=t[a];a&&n&&(h=tr(h,yr(n))),s=Vr(h.length,s),c[a]=!e&&(n||o>=120&&h.length>=120)?new be(a&&h):u}h=t[0];var p=-1,v=c[0];t:for(;++p=f)return a;var c=r[e];return a*("desc"==c?-1:1)}}return t.index-n.index}(t,n,r)})}function di(t,n,r){for(var e=-1,i=n.length,u={};++e-1;)f!==t&&Ln.call(f,a,1),Ln.call(t,a,1);return t}function mi(t,n){for(var r=t?n.length:0,e=r-1;r--;){var i=n[r];if(r==e||i!==u){var u=i;qu(i)?Ln.call(t,i,1):Ci(t,i)}}return t}function bi(t,n){return t+zr(Gr()*(n-t+1))}function Ai(t,n){var r="";if(!t||n<1||n>U)return r;do{n%2&&(r+=t),(n=zr(n/2))&&(t+=t)}while(n);return r}function xi(t,n){return eo(Qu(t,n,Ia),t+"")}function Ei(t){return Ee(pa(t))}function Ri(t,n){var r=pa(t);return oo(r,Ue(n,0,r.length))}function Bi(t,n,r,e){if(!Pf(t))return t;for(var i=-1,o=(n=Vi(n,t)).length,f=o-1,a=t;null!=a&&++iu?0:u+n),(e=e>u?u:e)<0&&(e+=u),u=n>e?0:e-n>>>0,n>>>=0;for(var o=r(u);++i>>1,o=t[u];null!==o&&!Lf(o)&&(r?o<=n:o=o){var s=n?null:Au(t);if(s)return Ir(s);f=!1,i=wr,c=new be}else c=n?[]:a;t:for(;++e=e?t:Ii(t,n,r)}var Gi=pr||function(t){return Un.clearTimeout(t)};function Ji(t,n){if(n)return t.slice();var r=t.length,e=xn?xn(r):new t.constructor(r);return t.copy(e),e}function Hi(t){var n=new t.constructor(t.byteLength);return new bn(n).set(new bn(t)),n}function Xi(t,n){var r=n?Hi(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}function Qi(t,n){if(t!==n){var r=t!==u,e=null===t,i=t==t,o=Lf(t),f=n!==u,a=null===n,c=n==n,s=Lf(n);if(!a&&!s&&!o&&t>n||o&&f&&c&&!a&&!s||e&&f&&c||!r&&c||!i)return 1;if(!e&&!o&&!s&&t1?r[i-1]:u,f=i>2?r[2]:u;for(o=t.length>3&&"function"==typeof o?(i--,o):u,f&&Vu(r[0],r[1],f)&&(o=i<3?u:o,i=1),n=tn(n);++e-1?i[o?n[f]:f]:u}}function hu(t){return Ou(function(n){var r=n.length,e=r,i=_e.prototype.thru;for(t&&n.reverse();e--;){var o=n[e];if("function"!=typeof o)throw new en(a);if(i&&!f&&"wrapper"==Mu(o))var f=new _e([],!0)}for(e=f?e:r;++e1&&m.reverse(),h&&sa))return!1;var s=o.get(t);if(s&&o.get(n))return s==n;var l=-1,h=!0,p=r&_?new be:u;for(o.set(t,n),o.set(n,t);++l-1&&t%1==0&&t1?"& ":"")+n[e],n=n.join(r>2?", ":" "),t.replace(Dt,"{\n/* [wrapped with "+n+"] */\n")}(e,function(t,n){return Kn(Y,function(r){var e="_."+r[0];n&r[1]&&!Xn(t,e)&&t.push(e)}),t.sort()}(function(t){var n=t.match(Ct);return n?n[1].split(zt):[]}(e),r)))}function uo(t){var n=0,r=0;return function(){var e=Zr(),i=I-(e-r);if(r=e,i>0){if(++n>=O)return arguments[0]}else n=0;return t.apply(u,arguments)}}function oo(t,n){var r=-1,e=t.length,i=e-1;for(n=n===u?e:n;++r1?t[n-1]:u;return So(t,r="function"==typeof r?(t.pop(),r):u)});function Co(t){var n=pe(t);return n.__chain__=!0,n}function zo(t,n){return n(t)}var Yo=Ou(function(t){var n=t.length,r=n?t[0]:0,e=this.__wrapped__,i=function(n){return Me(n,t)};return!(n>1||this.__actions__.length)&&e instanceof ye&&qu(r)?((e=e.slice(r,+r+(n?1:0))).__actions__.push({func:zo,args:[i],thisArg:u}),new _e(e,this.__chain__).thru(function(t){return n&&!t.length&&t.push(u),t})):this.thru(i)});var No=iu(function(t,n,r){sn.call(t,r)?++t[r]:Te(t,r,1)});var Wo=lu(vo),Fo=lu(go);function $o(t,n){return(yf(t)?Kn:ze)(t,Lu(n,3))}function qo(t,n){return(yf(t)?Gn:Ye)(t,Lu(n,3))}var Vo=iu(function(t,n,r){sn.call(t,r)?t[r].push(n):Te(t,r,[n])});var Zo=xi(function(t,n,e){var i=-1,u="function"==typeof n,o=wf(t)?r(t.length):[];return ze(t,function(t){o[++i]=u?Vn(n,t,e):ei(t,n,e)}),o}),Ko=iu(function(t,n,r){Te(t,r,n)});function Go(t,n){return(yf(t)?tr:hi)(t,Lu(n,3))}var Jo=iu(function(t,n,r){t[r?0:1].push(n)},function(){return[[],[]]});var Ho=xi(function(t,n){if(null==t)return[];var r=n.length;return r>1&&Vu(t,n[0],n[1])?n=[]:r>2&&Vu(n[0],n[1],n[2])&&(n=[n[0]]),yi(t,$e(n,1),[])}),Xo=kr||function(){return Un.Date.now()};function Qo(t,n,r){return n=r?u:n,n=t&&null==n?t.length:n,Eu(t,E,u,u,u,u,n)}function tf(t,n){var r;if("function"!=typeof n)throw new en(a);return t=Nf(t),function(){return--t>0&&(r=n.apply(this,arguments)),t<=1&&(n=u),r}}var nf=xi(function(t,n,r){var e=y;if(r.length){var i=jr(r,Uu(nf));e|=A}return Eu(t,e,n,r,i)}),rf=xi(function(t,n,r){var e=y|d;if(r.length){var i=jr(r,Uu(rf));e|=A}return Eu(n,e,t,r,i)});function ef(t,n,r){var e,i,o,f,c,s,l=0,h=!1,p=!1,v=!0;if("function"!=typeof t)throw new en(a);function g(n){var r=e,o=i;return e=i=u,l=n,f=t.apply(o,r)}function _(t){var r=t-s;return s===u||r>=n||r<0||p&&t-l>=o}function y(){var t=Xo();if(_(t))return d(t);c=ro(y,function(t){var r=n-(t-s);return p?Vr(r,o-(t-l)):r}(t))}function d(t){return c=u,v&&e?g(t):(e=i=u,f)}function w(){var t=Xo(),r=_(t);if(e=arguments,i=this,s=t,r){if(c===u)return function(t){return l=t,c=ro(y,n),h?g(t):f}(s);if(p)return c=ro(y,n),g(s)}return c===u&&(c=ro(y,n)),f}return n=Ff(n)||0,Pf(r)&&(h=!!r.leading,o=(p="maxWait"in r)?qr(Ff(r.maxWait)||0,n):o,v="trailing"in r?!!r.trailing:v),w.cancel=function(){c!==u&&Gi(c),l=0,e=s=i=c=u},w.flush=function(){return c===u?f:d(Xo())},w}var uf=xi(function(t,n){return De(t,1,n)}),of=xi(function(t,n,r){return De(t,Ff(n)||0,r)});function ff(t,n){if("function"!=typeof t||null!=n&&"function"!=typeof n)throw new en(a);var r=function(){var e=arguments,i=n?n.apply(this,e):e[0],u=r.cache;if(u.has(i))return u.get(i);var o=t.apply(this,e);return r.cache=u.set(i,o)||u,o};return r.cache=new(ff.Cache||me),r}function af(t){if("function"!=typeof t)throw new en(a);return function(){var n=arguments;switch(n.length){case 0:return!t.call(this);case 1:return!t.call(this,n[0]);case 2:return!t.call(this,n[0],n[1]);case 3:return!t.call(this,n[0],n[1],n[2])}return!t.apply(this,n)}}ff.Cache=me;var cf=Zi(function(t,n){var r=(n=1==n.length&&yf(n[0])?tr(n[0],yr(Lu())):tr($e(n,1),yr(Lu()))).length;return xi(function(e){for(var i=-1,u=Vr(e.length,r);++i=n}),_f=ii(function(){return arguments}())?ii:function(t){return jf(t)&&sn.call(t,"callee")&&!Mn.call(t,"callee")},yf=r.isArray,df=Yn?yr(Yn):function(t){return jf(t)&&Xe(t)==at};function wf(t){return null!=t&&Bf(t.length)&&!Ef(t)}function mf(t){return jf(t)&&wf(t)}var bf=Nr||Fa,Af=Nn?yr(Nn):function(t){return jf(t)&&Xe(t)==q};function xf(t){if(!jf(t))return!1;var n=Xe(t);return n==Z||n==V||"string"==typeof t.message&&"string"==typeof t.name&&!Sf(t)}function Ef(t){if(!Pf(t))return!1;var n=Xe(t);return n==K||n==G||n==F||n==tt}function Rf(t){return"number"==typeof t&&t==Nf(t)}function Bf(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=U}function Pf(t){var n=typeof t;return null!=t&&("object"==n||"function"==n)}function jf(t){return null!=t&&"object"==typeof t}var Of=Wn?yr(Wn):function(t){return jf(t)&&Nu(t)==J};function If(t){return"number"==typeof t||jf(t)&&Xe(t)==H}function Sf(t){if(!jf(t)||Xe(t)!=Q)return!1;var n=On(t);if(null===n)return!0;var r=sn.call(n,"constructor")&&n.constructor;return"function"==typeof r&&r instanceof r&&cn.call(r)==vn}var Tf=Fn?yr(Fn):function(t){return jf(t)&&Xe(t)==nt};var Mf=$n?yr($n):function(t){return jf(t)&&Nu(t)==rt};function Uf(t){return"string"==typeof t||!yf(t)&&jf(t)&&Xe(t)==et}function Lf(t){return"symbol"==typeof t||jf(t)&&Xe(t)==it}var kf=qn?yr(qn):function(t){return jf(t)&&Bf(t.length)&&!!Pn[Xe(t)]};var Df=wu(li),Cf=wu(function(t,n){return t<=n});function zf(t){if(!t)return[];if(wf(t))return Uf(t)?Mr(t):ru(t);if(Cn&&t[Cn])return function(t){for(var n,r=[];!(n=t.next()).done;)r.push(n.value);return r}(t[Cn]());var n=Nu(t);return(n==J?Br:n==rt?Ir:pa)(t)}function Yf(t){return t?(t=Ff(t))===M||t===-M?(t<0?-1:1)*L:t==t?t:0:0===t?t:0}function Nf(t){var n=Yf(t),r=n%1;return n==n?r?n-r:n:0}function Wf(t){return t?Ue(Nf(t),0,D):0}function Ff(t){if("number"==typeof t)return t;if(Lf(t))return k;if(Pf(t)){var n="function"==typeof t.valueOf?t.valueOf():t;t=Pf(n)?n+"":n}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(Ut,"");var r=qt.test(t);return r||Zt.test(t)?Sn(t.slice(2),r?2:8):$t.test(t)?k:+t}function $f(t){return eu(t,ua(t))}function qf(t){return null==t?"":ki(t)}var Vf=uu(function(t,n){if(Ju(n)||wf(n))eu(n,ia(n),t);else for(var r in n)sn.call(n,r)&&je(t,r,n[r])}),Zf=uu(function(t,n){eu(n,ua(n),t)}),Kf=uu(function(t,n,r,e){eu(n,ua(n),t,e)}),Gf=uu(function(t,n,r,e){eu(n,ia(n),t,e)}),Jf=Ou(Me);var Hf=xi(function(t,n){t=tn(t);var r=-1,e=n.length,i=e>2?n[2]:u;for(i&&Vu(n[0],n[1],i)&&(e=1);++r1),n}),eu(t,Su(t),r),e&&(r=Le(r,h|p|v,Pu));for(var i=n.length;i--;)Ci(r,n[i]);return r});var ca=Ou(function(t,n){return null==t?{}:function(t,n){return di(t,n,function(n,r){return ta(t,r)})}(t,n)});function sa(t,n){if(null==t)return{};var r=tr(Su(t),function(t){return[t]});return n=Lu(n),di(t,r,function(t,r){return n(t,r[0])})}var la=xu(ia),ha=xu(ua);function pa(t){return null==t?[]:dr(t,ia(t))}var va=cu(function(t,n,r){return n=n.toLowerCase(),t+(r?ga(n):n)});function ga(t){return xa(qf(t).toLowerCase())}function _a(t){return(t=qf(t))&&t.replace(Gt,Ar).replace(mn,"")}var ya=cu(function(t,n,r){return t+(r?"-":"")+n.toLowerCase()}),da=cu(function(t,n,r){return t+(r?" ":"")+n.toLowerCase()}),wa=au("toLowerCase");var ma=cu(function(t,n,r){return t+(r?"_":"")+n.toLowerCase()});var ba=cu(function(t,n,r){return t+(r?" ":"")+xa(n)});var Aa=cu(function(t,n,r){return t+(r?" ":"")+n.toUpperCase()}),xa=au("toUpperCase");function Ea(t,n,r){return t=qf(t),(n=r?u:n)===u?function(t){return En.test(t)}(t)?function(t){return t.match(An)||[]}(t):function(t){return t.match(Yt)||[]}(t):t.match(n)||[]}var Ra=xi(function(t,n){try{return Vn(t,u,n)}catch(t){return xf(t)?t:new i(t)}}),Ba=Ou(function(t,n){return Kn(n,function(n){n=ao(n),Te(t,n,nf(t[n],t))}),t});function Pa(t){return function(){return t}}var ja=hu(),Oa=hu(!0);function Ia(t){return t}function Sa(t){return ai("function"==typeof t?t:Le(t,h))}var Ta=xi(function(t,n){return function(r){return ei(r,t,n)}}),Ma=xi(function(t,n){return function(r){return ei(t,r,n)}});function Ua(t,n,r){var e=ia(n),i=Ge(n,e);null!=r||Pf(n)&&(i.length||!e.length)||(r=n,n=t,t=this,i=Ge(n,ia(n)));var u=!(Pf(r)&&"chain"in r&&!r.chain),o=Ef(t);return Kn(i,function(r){var e=n[r];t[r]=e,o&&(t.prototype[r]=function(){var n=this.__chain__;if(u||n){var r=t(this.__wrapped__);return(r.__actions__=ru(this.__actions__)).push({func:e,args:arguments,thisArg:t}),r.__chain__=n,r}return e.apply(t,nr([this.value()],arguments))})}),t}function La(){}var ka=_u(tr),Da=_u(Jn),Ca=_u(ir);function za(t){return Zu(t)?hr(ao(t)):function(t){return function(n){return Je(n,t)}}(t)}var Ya=du(),Na=du(!0);function Wa(){return[]}function Fa(){return!1}var $a=gu(function(t,n){return t+n},0),qa=bu("ceil"),Va=gu(function(t,n){return t/n},1),Za=bu("floor");var Ka=gu(function(t,n){return t*n},1),Ga=bu("round"),Ja=gu(function(t,n){return t-n},0);return pe.after=function(t,n){if("function"!=typeof n)throw new en(a);return t=Nf(t),function(){if(--t<1)return n.apply(this,arguments)}},pe.ary=Qo,pe.assign=Vf,pe.assignIn=Zf,pe.assignInWith=Kf,pe.assignWith=Gf,pe.at=Jf,pe.before=tf,pe.bind=nf,pe.bindAll=Ba,pe.bindKey=rf,pe.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return yf(t)?t:[t]},pe.chain=Co,pe.chunk=function(t,n,e){n=(e?Vu(t,n,e):n===u)?1:qr(Nf(n),0);var i=null==t?0:t.length;if(!i||n<1)return[];for(var o=0,f=0,a=r(Cr(i/n));oi?0:i+r),(e=e===u||e>i?i:Nf(e))<0&&(e+=i),e=r>e?0:Wf(e);r>>0)?(t=qf(t))&&("string"==typeof n||null!=n&&!Tf(n))&&!(n=ki(n))&&Rr(t)?Ki(Mr(t),0,r):t.split(n,r):[]},pe.spread=function(t,n){if("function"!=typeof t)throw new en(a);return n=null==n?0:qr(Nf(n),0),xi(function(r){var e=r[n],i=Ki(r,0,n);return e&&nr(i,e),Vn(t,this,i)})},pe.tail=function(t){var n=null==t?0:t.length;return n?Ii(t,1,n):[]},pe.take=function(t,n,r){return t&&t.length?Ii(t,0,(n=r||n===u?1:Nf(n))<0?0:n):[]},pe.takeRight=function(t,n,r){var e=null==t?0:t.length;return e?Ii(t,(n=e-(n=r||n===u?1:Nf(n)))<0?0:n,e):[]},pe.takeRightWhile=function(t,n){return t&&t.length?Yi(t,Lu(n,3),!1,!0):[]},pe.takeWhile=function(t,n){return t&&t.length?Yi(t,Lu(n,3)):[]},pe.tap=function(t,n){return n(t),t},pe.throttle=function(t,n,r){var e=!0,i=!0;if("function"!=typeof t)throw new en(a);return Pf(r)&&(e="leading"in r?!!r.leading:e,i="trailing"in r?!!r.trailing:i),ef(t,n,{leading:e,maxWait:n,trailing:i})},pe.thru=zo,pe.toArray=zf,pe.toPairs=la,pe.toPairsIn=ha,pe.toPath=function(t){return yf(t)?tr(t,ao):Lf(t)?[t]:ru(fo(qf(t)))},pe.toPlainObject=$f,pe.transform=function(t,n,r){var e=yf(t),i=e||bf(t)||kf(t);if(n=Lu(n,4),null==r){var u=t&&t.constructor;r=i?e?new u:[]:Pf(t)&&Ef(u)?ve(On(t)):{}}return(i?Kn:Ze)(t,function(t,e,i){return n(r,t,e,i)}),r},pe.unary=function(t){return Qo(t,1)},pe.union=Po,pe.unionBy=jo,pe.unionWith=Oo,pe.uniq=function(t){return t&&t.length?Di(t):[]},pe.uniqBy=function(t,n){return t&&t.length?Di(t,Lu(n,2)):[]},pe.uniqWith=function(t,n){return n="function"==typeof n?n:u,t&&t.length?Di(t,u,n):[]},pe.unset=function(t,n){return null==t||Ci(t,n)},pe.unzip=Io,pe.unzipWith=So,pe.update=function(t,n,r){return null==t?t:zi(t,n,qi(r))},pe.updateWith=function(t,n,r,e){return e="function"==typeof e?e:u,null==t?t:zi(t,n,qi(r),e)},pe.values=pa,pe.valuesIn=function(t){return null==t?[]:dr(t,ua(t))},pe.without=To,pe.words=Ea,pe.wrap=function(t,n){return sf(qi(n),t)},pe.xor=Mo,pe.xorBy=Uo,pe.xorWith=Lo,pe.zip=ko,pe.zipObject=function(t,n){return Fi(t||[],n||[],je)},pe.zipObjectDeep=function(t,n){return Fi(t||[],n||[],Bi)},pe.zipWith=Do,pe.entries=la,pe.entriesIn=ha,pe.extend=Zf,pe.extendWith=Kf,Ua(pe,pe),pe.add=$a,pe.attempt=Ra,pe.camelCase=va,pe.capitalize=ga,pe.ceil=qa,pe.clamp=function(t,n,r){return r===u&&(r=n,n=u),r!==u&&(r=(r=Ff(r))==r?r:0),n!==u&&(n=(n=Ff(n))==n?n:0),Ue(Ff(t),n,r)},pe.clone=function(t){return Le(t,v)},pe.cloneDeep=function(t){return Le(t,h|v)},pe.cloneDeepWith=function(t,n){return Le(t,h|v,n="function"==typeof n?n:u)},pe.cloneWith=function(t,n){return Le(t,v,n="function"==typeof n?n:u)},pe.conformsTo=function(t,n){return null==n||ke(t,n,ia(n))},pe.deburr=_a,pe.defaultTo=function(t,n){return null==t||t!=t?n:t},pe.divide=Va,pe.endsWith=function(t,n,r){t=qf(t),n=ki(n);var e=t.length,i=r=r===u?e:Ue(Nf(r),0,e);return(r-=n.length)>=0&&t.slice(r,i)==n},pe.eq=pf,pe.escape=function(t){return(t=qf(t))&&Rt.test(t)?t.replace(xt,xr):t},pe.escapeRegExp=function(t){return(t=qf(t))&&Mt.test(t)?t.replace(Tt,"\\$&"):t},pe.every=function(t,n,r){var e=yf(t)?Jn:Ne;return r&&Vu(t,n,r)&&(n=u),e(t,Lu(n,3))},pe.find=Wo,pe.findIndex=vo,pe.findKey=function(t,n){return or(t,Lu(n,3),Ze)},pe.findLast=Fo,pe.findLastIndex=go,pe.findLastKey=function(t,n){return or(t,Lu(n,3),Ke)},pe.floor=Za,pe.forEach=$o,pe.forEachRight=qo,pe.forIn=function(t,n){return null==t?t:qe(t,Lu(n,3),ua)},pe.forInRight=function(t,n){return null==t?t:Ve(t,Lu(n,3),ua)},pe.forOwn=function(t,n){return t&&Ze(t,Lu(n,3))},pe.forOwnRight=function(t,n){return t&&Ke(t,Lu(n,3))},pe.get=Qf,pe.gt=vf,pe.gte=gf,pe.has=function(t,n){return null!=t&&Wu(t,n,ti)},pe.hasIn=ta,pe.head=yo,pe.identity=Ia,pe.includes=function(t,n,r,e){t=wf(t)?t:pa(t),r=r&&!e?Nf(r):0;var i=t.length;return r<0&&(r=qr(i+r,0)),Uf(t)?r<=i&&t.indexOf(n,r)>-1:!!i&&ar(t,n,r)>-1},pe.indexOf=function(t,n,r){var e=null==t?0:t.length;if(!e)return-1;var i=null==r?0:Nf(r);return i<0&&(i=qr(e+i,0)),ar(t,n,i)},pe.inRange=function(t,n,r){return n=Yf(n),r===u?(r=n,n=0):r=Yf(r),function(t,n,r){return t>=Vr(n,r)&&t=-U&&t<=U},pe.isSet=Mf,pe.isString=Uf,pe.isSymbol=Lf,pe.isTypedArray=kf,pe.isUndefined=function(t){return t===u},pe.isWeakMap=function(t){return jf(t)&&Nu(t)==ot},pe.isWeakSet=function(t){return jf(t)&&Xe(t)==ft},pe.join=function(t,n){return null==t?"":Fr.call(t,n)},pe.kebabCase=ya,pe.last=Ao,pe.lastIndexOf=function(t,n,r){var e=null==t?0:t.length;if(!e)return-1;var i=e;return r!==u&&(i=(i=Nf(r))<0?qr(e+i,0):Vr(i,e-1)),n==n?function(t,n,r){for(var e=r+1;e--;)if(t[e]===n)return e;return e}(t,n,i):fr(t,sr,i,!0)},pe.lowerCase=da,pe.lowerFirst=wa,pe.lt=Df,pe.lte=Cf,pe.max=function(t){return t&&t.length?We(t,Ia,Qe):u},pe.maxBy=function(t,n){return t&&t.length?We(t,Lu(n,2),Qe):u},pe.mean=function(t){return lr(t,Ia)},pe.meanBy=function(t,n){return lr(t,Lu(n,2))},pe.min=function(t){return t&&t.length?We(t,Ia,li):u},pe.minBy=function(t,n){return t&&t.length?We(t,Lu(n,2),li):u},pe.stubArray=Wa,pe.stubFalse=Fa,pe.stubObject=function(){return{}},pe.stubString=function(){return""},pe.stubTrue=function(){return!0},pe.multiply=Ka,pe.nth=function(t,n){return t&&t.length?_i(t,Nf(n)):u},pe.noConflict=function(){return Un._===this&&(Un._=gn),this},pe.noop=La,pe.now=Xo,pe.pad=function(t,n,r){t=qf(t);var e=(n=Nf(n))?Tr(t):0;if(!n||e>=n)return t;var i=(n-e)/2;return yu(zr(i),r)+t+yu(Cr(i),r)},pe.padEnd=function(t,n,r){t=qf(t);var e=(n=Nf(n))?Tr(t):0;return n&&en){var e=t;t=n,n=e}if(r||t%1||n%1){var i=Gr();return Vr(t+i*(n-t+In("1e-"+((i+"").length-1))),n)}return bi(t,n)},pe.reduce=function(t,n,r){var e=yf(t)?rr:vr,i=arguments.length<3;return e(t,Lu(n,4),r,i,ze)},pe.reduceRight=function(t,n,r){var e=yf(t)?er:vr,i=arguments.length<3;return e(t,Lu(n,4),r,i,Ye)},pe.repeat=function(t,n,r){return n=(r?Vu(t,n,r):n===u)?1:Nf(n),Ai(qf(t),n)},pe.replace=function(){var t=arguments,n=qf(t[0]);return t.length<3?n:n.replace(t[1],t[2])},pe.result=function(t,n,r){var e=-1,i=(n=Vi(n,t)).length;for(i||(i=1,t=u);++eU)return[];var r=D,e=Vr(t,D);n=Lu(n),t-=D;for(var i=_r(e,n);++r=o)return t;var a=r-Tr(e);if(a<1)return e;var c=f?Ki(f,0,a).join(""):t.slice(0,a);if(i===u)return c+e;if(f&&(a+=c.length-a),Tf(i)){if(t.slice(a).search(i)){var s,l=c;for(i.global||(i=nn(i.source,qf(Ft.exec(i))+"g")),i.lastIndex=0;s=i.exec(l);)var h=s.index;c=c.slice(0,h===u?a:h)}}else if(t.indexOf(ki(i),a)!=a){var p=c.lastIndexOf(i);p>-1&&(c=c.slice(0,p))}return c+e},pe.unescape=function(t){return(t=qf(t))&&Et.test(t)?t.replace(At,Ur):t},pe.uniqueId=function(t){var n=++ln;return qf(t)+n},pe.upperCase=Aa,pe.upperFirst=xa,pe.each=$o,pe.eachRight=qo,pe.first=yo,Ua(pe,function(){var t={};return Ze(pe,function(n,r){sn.call(pe.prototype,r)||(t[r]=n)}),t}(),{chain:!1}),pe.VERSION="4.17.10",Kn(["bind","bindKey","curry","curryRight","partial","partialRight"],function(t){pe[t].placeholder=pe}),Kn(["drop","take"],function(t,n){ye.prototype[t]=function(r){r=r===u?1:qr(Nf(r),0);var e=this.__filtered__&&!n?new ye(this):this.clone();return e.__filtered__?e.__takeCount__=Vr(r,e.__takeCount__):e.__views__.push({size:Vr(r,D),type:t+(e.__dir__<0?"Right":"")}),e},ye.prototype[t+"Right"]=function(n){return this.reverse()[t](n).reverse()}}),Kn(["filter","map","takeWhile"],function(t,n){var r=n+1,e=r==S||3==r;ye.prototype[t]=function(t){var n=this.clone();return n.__iteratees__.push({iteratee:Lu(t,3),type:r}),n.__filtered__=n.__filtered__||e,n}}),Kn(["head","last"],function(t,n){var r="take"+(n?"Right":"");ye.prototype[t]=function(){return this[r](1).value()[0]}}),Kn(["initial","tail"],function(t,n){var r="drop"+(n?"":"Right");ye.prototype[t]=function(){return this.__filtered__?new ye(this):this[r](1)}}),ye.prototype.compact=function(){return this.filter(Ia)},ye.prototype.find=function(t){return this.filter(t).head()},ye.prototype.findLast=function(t){return this.reverse().find(t)},ye.prototype.invokeMap=xi(function(t,n){return"function"==typeof t?new ye(this):this.map(function(r){return ei(r,t,n)})}),ye.prototype.reject=function(t){return this.filter(af(Lu(t)))},ye.prototype.slice=function(t,n){t=Nf(t);var r=this;return r.__filtered__&&(t>0||n<0)?new ye(r):(t<0?r=r.takeRight(-t):t&&(r=r.drop(t)),n!==u&&(r=(n=Nf(n))<0?r.dropRight(-n):r.take(n-t)),r)},ye.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},ye.prototype.toArray=function(){return this.take(D)},Ze(ye.prototype,function(t,n){var r=/^(?:filter|find|map|reject)|While$/.test(n),e=/^(?:head|last)$/.test(n),i=pe[e?"take"+("last"==n?"Right":""):n],o=e||/^find/.test(n);i&&(pe.prototype[n]=function(){var n=this.__wrapped__,f=e?[1]:arguments,a=n instanceof ye,c=f[0],s=a||yf(n),l=function(t){var n=i.apply(pe,nr([t],f));return e&&h?n[0]:n};s&&r&&"function"==typeof c&&1!=c.length&&(a=s=!1);var h=this.__chain__,p=!!this.__actions__.length,v=o&&!h,g=a&&!p;if(!o&&s){n=g?n:new ye(this);var _=t.apply(n,f);return _.__actions__.push({func:zo,args:[l],thisArg:u}),new _e(_,h)}return v&&g?t.apply(this,f):(_=this.thru(l),v?e?_.value()[0]:_.value():_)})}),Kn(["pop","push","shift","sort","splice","unshift"],function(t){var n=un[t],r=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",e=/^(?:pop|shift)$/.test(t);pe.prototype[t]=function(){var t=arguments;if(e&&!this.__chain__){var i=this.value();return n.apply(yf(i)?i:[],t)}return this[r](function(r){return n.apply(yf(r)?r:[],t)})}}),Ze(ye.prototype,function(t,n){var r=pe[n];if(r){var e=r.name+"";(ie[e]||(ie[e]=[])).push({name:n,func:r})}}),ie[pu(u,d).name]=[{name:"wrapper",func:u}],ye.prototype.clone=function(){var t=new ye(this.__wrapped__);return t.__actions__=ru(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=ru(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=ru(this.__views__),t},ye.prototype.reverse=function(){if(this.__filtered__){var t=new ye(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},ye.prototype.value=function(){var t=this.__wrapped__.value(),n=this.__dir__,r=yf(t),e=n<0,i=r?t.length:0,u=function(t,n,r){for(var e=-1,i=r.length;++e=this.__values__.length;return{done:t,value:t?u:this.__values__[this.__index__++]}},pe.prototype.plant=function(t){for(var n,r=this;r instanceof ge;){var e=so(r);e.__index__=0,e.__values__=u,n?i.__wrapped__=e:n=e;var i=e;r=r.__wrapped__}return i.__wrapped__=t,n},pe.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof ye){var n=t;return this.__actions__.length&&(n=new ye(this)),(n=n.reverse()).__actions__.push({func:zo,args:[Bo],thisArg:u}),new _e(n,this.__chain__)}return this.thru(Bo)},pe.prototype.toJSON=pe.prototype.valueOf=pe.prototype.value=function(){return Ni(this.__wrapped__,this.__actions__)},pe.prototype.first=pe.prototype.head,Cn&&(pe.prototype[Cn]=function(){return this}),pe}();Un._=Lr,(i=function(){return Lr}.call(n,r,n,e))===u||(e.exports=i)}).call(this)}).call(this,r(2),r(10)(t))},function(t,n){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(r=window)}t.exports=r},function(t,n,r){"use strict";(function(r){Object.defineProperty(n,"__esModule",{value:!0});var e={loadPositions:function(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=t.meshes[n];if(0===(i.primitives?i.primitives.length:0))return console.error("gltfReader: Mesh has no primitive."),null;var u=[];return i.primitives.forEach(function(n){n.attributes&&(u=u.concat(e._loadAccessor(t,n.attributes.POSITION,r)))}),u},_loadAccessor:function(t,n,r){if(void 0===n)return null;var i=t.accessors[n],u=i.byteOffset||0,o=e._loadBufferView(t,i.bufferView,u,r),f=[];switch(i.componentType){case 5123:for(var a=0;a1&&void 0!==arguments[1]?arguments[1]:0;return e._operation(Math.ceil,t,n)},_operation:function(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;if(0===r)return t(n);var e=Math.pow(10,r);return t(n*e)/e}};n.default=e,t.exports=n.default},function(t,n,r){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var e=r(0),i=r(1),u=r(3),o=function(t){return t&&t.__esModule?t:{default:t}}(r(4));function f(t){if(Array.isArray(t)){for(var n=0,r=Array(t.length);n1&&void 0!==arguments[1]?arguments[1]:[],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},e=r.precision,i=r.ceilDimensions,u=this.getMeshesTransformMatrices(t.nodes,t,n).reduce(function(t,n){return t.min=t.min.map(function(t,r){return tn[r]?t:n[r]}),t},{min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]}),f=i?o.default.ceil:o.default.round;return{dimensions:{width:f(u.max[0]-u.min[0],e),depth:f(u.max[2]-u.min[2],e),height:f(u.max[1]-u.min[1],e)},center:{x:o.default.round((u.max[0]+u.min[0])/2,e+1),y:o.default.round((u.max[2]+u.min[2])/2,e+1),z:o.default.round((u.max[1]+u.min[1])/2,e+1)}}},getMeshesTransformMatrices:function(t,n,r){var i=this;return t.forEach(function(t,n){return t.index=n}),t.filter(function(t){return void 0!==t.mesh}).reduce(function(o,a){var c=i.getParentNodesMatrices(a,t).map(function(t){return new e.Matrix(4,4,!1).setData(t)}),s=e.Matrix.multiply.apply(e.Matrix,f(c)),l=i.getPointsFromArray((0,u.loadPositions)(n,a.mesh,r)).map(function(t){return e.Matrix.multiply(t,s)});return o.concat(l)},[])},getParentNodesMatrices:function(t,n){var r=n.find(function(n){return n.children&&(0,i.includes)(n.children,t.index)}),e=t.matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];return void 0!==r?[e].concat(f(this.getParentNodesMatrices(r,n))).filter(function(t){return t}):[e]},getPointsFromArray:function(t){for(var n=[],r=0;r1&&void 0!==arguments[1]?arguments[1]:[],r=arguments[2];if(r=Object.assign({precision:0,ceilDimensions:!1},r),Boolean(t.readUInt32LE)){if(2===t.readUInt32LE(4))return u.default.computeBoundings(t,r);throw new Error("gltf-bounding-box only currently handles glTF1 and glTF/glb2.")}if(1==+t.asset.version)return e.default.computeBoundings(t,r);if(2==+t.asset.version)return i.default.computeBoundings(t,n,r);throw new Error("gltf-bounding-box only currently handles glTF1 and glTF/glb2.")}};n.default=f,t.exports=n.default},function(t,n,r){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var e=r(0),i=r(1),u=r(3),o=function(t){return t&&t.__esModule?t:{default:t}}(r(4));function f(t){if(Array.isArray(t)){for(var n=0,r=Array(t.length);n1&&void 0!==arguments[1]?arguments[1]:{},r=n.precision,e=n.ceilDimensions,i=this.getMeshesTransformMatrices(t.nodes,t).reduce(function(t,n){return t.min=t.min.map(function(t,r){return tn[r]?t:n[r]}),t},{min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]}),u=!0===e?o.default.ceil:o.default.round;return{dimensions:{width:u(i.max[0]-i.min[0],r),depth:u(i.max[2]-i.min[2],r),height:u(i.max[1]-i.min[1],r)},center:{x:o.default.round((i.max[0]+i.min[0])/2,r+1),y:o.default.round((i.max[2]+i.min[2])/2,r+1),z:o.default.round((i.max[1]+i.min[1])/2,r+1)}}},getMeshesTransformMatrices:function(t,n){var r=this;return Object.keys(t).filter(function(n){return t[n].meshes}).reduce(function(n,r){return[].concat(f(n),f(t[r].meshes.map(function(t){return{mesh:t,nodeName:r}})))},[]).reduce(function(i,o){var a=o.mesh,c=o.nodeName,s=r.getParentNodesMatrices(c,t).map(function(t){return new e.Matrix(4,4,!1).setData(t)}),l=e.Matrix.multiply.apply(e.Matrix,f(s)),h=r.getPointsFromArray((0,u.loadPositions)(n,a)).map(function(t){return e.Matrix.multiply(t,l)});return i.concat(h)},[])},getParentNodesMatrices:function(t,n){var r=Object.keys(n).find(function(r){return n[r].children&&(0,i.includes)(n[r].children,t)}),e=n[t].matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];return r?[e].concat(f(this.getParentNodesMatrices(r,n))).filter(function(t){return t}):[e]},getPointsFromArray:function(t){for(var n=[],r=0;r=4){for(var g=0,_=this._cache||(this._cache={}),y=_.tempMatrix||(_.tempMatrix=new i(this.rows,this.cols,!1)),d=0;d>>1,F=[["ary",E],["bind",v],["bindKey",y],["curry",b],["curryRight",_],["flip",T],["partial",w],["partialRight",M],["rearg",S]],H="[object Arguments]",k="[object Array]",j="[object AsyncFunction]",V="[object Boolean]",W="[object Date]",q="[object DOMException]",Y="[object Error]",X="[object Function]",J="[object GeneratorFunction]",Z="[object Map]",Q="[object Number]",K="[object Null]",$="[object Object]",tt="[object Proxy]",et="[object RegExp]",nt="[object Set]",rt="[object String]",it="[object Symbol]",ot="[object Undefined]",at="[object WeakMap]",st="[object WeakSet]",ut="[object ArrayBuffer]",ct="[object DataView]",lt="[object Float32Array]",ht="[object Float64Array]",ft="[object Int8Array]",pt="[object Int16Array]",dt="[object Int32Array]",mt="[object Uint8Array]",gt="[object Uint8ClampedArray]",vt="[object Uint16Array]",yt="[object Uint32Array]",xt=/\b__p \+= '';/g,bt=/\b(__p \+=) '' \+/g,_t=/(__e\(.*?\)|\b__t\)) \+\n'';/g,wt=/&(?:amp|lt|gt|quot|#39);/g,Mt=/[&<>"']/g,Et=RegExp(wt.source),St=RegExp(Mt.source),Tt=/<%-([\s\S]+?)%>/g,At=/<%([\s\S]+?)%>/g,Lt=/<%=([\s\S]+?)%>/g,Rt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Pt=/^\w*$/,Ct=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ot=/[\\^$.*+?()[\]{}|]/g,It=RegExp(Ot.source),Dt=/^\s+|\s+$/g,Bt=/^\s+/,Nt=/\s+$/,Ut=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,zt=/\{\n\/\* \[wrapped with (.+)\] \*/,Gt=/,? & /,Ft=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Ht=/\\(\\)?/g,kt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,jt=/\w*$/,Vt=/^[-+]0x[0-9a-f]+$/i,Wt=/^0b[01]+$/i,qt=/^\[object .+?Constructor\]$/,Yt=/^0o[0-7]+$/i,Xt=/^(?:0|[1-9]\d*)$/,Jt=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Zt=/($^)/,Qt=/['\n\r\u2028\u2029\\]/g,Kt="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",$t="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\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",te="[\\ud800-\\udfff]",ee="["+$t+"]",ne="["+Kt+"]",re="\\d+",ie="[\\u2700-\\u27bf]",oe="[a-z\\xdf-\\xf6\\xf8-\\xff]",ae="[^\\ud800-\\udfff"+$t+re+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",se="\\ud83c[\\udffb-\\udfff]",ue="[^\\ud800-\\udfff]",ce="(?:\\ud83c[\\udde6-\\uddff]){2}",le="[\\ud800-\\udbff][\\udc00-\\udfff]",he="[A-Z\\xc0-\\xd6\\xd8-\\xde]",fe="(?:"+oe+"|"+ae+")",pe="(?:"+he+"|"+ae+")",de="(?:"+ne+"|"+se+")"+"?",me="[\\ufe0e\\ufe0f]?"+de+("(?:\\u200d(?:"+[ue,ce,le].join("|")+")[\\ufe0e\\ufe0f]?"+de+")*"),ge="(?:"+[ie,ce,le].join("|")+")"+me,ve="(?:"+[ue+ne+"?",ne,ce,le,te].join("|")+")",ye=RegExp("['’]","g"),xe=RegExp(ne,"g"),be=RegExp(se+"(?="+se+")|"+ve+me,"g"),_e=RegExp([he+"?"+oe+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[ee,he,"$"].join("|")+")",pe+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[ee,he+fe,"$"].join("|")+")",he+"?"+fe+"+(?:['’](?:d|ll|m|re|s|t|ve))?",he+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",re,ge].join("|"),"g"),we=RegExp("[\\u200d\\ud800-\\udfff"+Kt+"\\ufe0e\\ufe0f]"),Me=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Ee=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Se=-1,Te={};Te[lt]=Te[ht]=Te[ft]=Te[pt]=Te[dt]=Te[mt]=Te[gt]=Te[vt]=Te[yt]=!0,Te[H]=Te[k]=Te[ut]=Te[V]=Te[ct]=Te[W]=Te[Y]=Te[X]=Te[Z]=Te[Q]=Te[$]=Te[et]=Te[nt]=Te[rt]=Te[at]=!1;var Ae={};Ae[H]=Ae[k]=Ae[ut]=Ae[ct]=Ae[V]=Ae[W]=Ae[lt]=Ae[ht]=Ae[ft]=Ae[pt]=Ae[dt]=Ae[Z]=Ae[Q]=Ae[$]=Ae[et]=Ae[nt]=Ae[rt]=Ae[it]=Ae[mt]=Ae[gt]=Ae[vt]=Ae[yt]=!0,Ae[Y]=Ae[X]=Ae[at]=!1;var Le={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Re=parseFloat,Pe=parseInt,Ce="object"==typeof t&&t&&t.Object===Object&&t,Oe="object"==typeof self&&self&&self.Object===Object&&self,Ie=Ce||Oe||Function("return this")(),De="object"==typeof e&&e&&!e.nodeType&&e,Be=De&&"object"==typeof r&&r&&!r.nodeType&&r,Ne=Be&&Be.exports===De,Ue=Ne&&Ce.process,ze=function(){try{var t=Be&&Be.require&&Be.require("util").types;return t||Ue&&Ue.binding&&Ue.binding("util")}catch(t){}}(),Ge=ze&&ze.isArrayBuffer,Fe=ze&&ze.isDate,He=ze&&ze.isMap,ke=ze&&ze.isRegExp,je=ze&&ze.isSet,Ve=ze&&ze.isTypedArray;function We(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function qe(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i-1}function Ke(t,e,n){for(var r=-1,i=null==t?0:t.length;++r-1;);return n}function _n(t,e){for(var n=t.length;n--&&un(e,t[n],0)>-1;);return n}var wn=pn({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),Mn=pn({"&":"&","<":"<",">":">",'"':""","'":"'"});function En(t){return"\\"+Le[t]}function Sn(t){return we.test(t)}function Tn(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function An(t,e){return function(n){return t(e(n))}}function Ln(t,e){for(var n=-1,r=t.length,i=0,o=[];++n",""":'"',"'":"'"});var Bn=function t(e){var n=(e=null==e?Ie:Bn.defaults(Ie.Object(),e,Bn.pick(Ie,Ee))).Array,r=e.Date,i=e.Error,Kt=e.Function,$t=e.Math,te=e.Object,ee=e.RegExp,ne=e.String,re=e.TypeError,ie=n.prototype,oe=Kt.prototype,ae=te.prototype,se=e["__core-js_shared__"],ue=oe.toString,ce=ae.hasOwnProperty,le=0,he=function(){var t=/[^.]+$/.exec(se&&se.keys&&se.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),fe=ae.toString,pe=ue.call(te),de=Ie._,me=ee("^"+ue.call(ce).replace(Ot,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),ge=Ne?e.Buffer:o,ve=e.Symbol,be=e.Uint8Array,we=ge?ge.allocUnsafe:o,Le=An(te.getPrototypeOf,te),Ce=te.create,Oe=ae.propertyIsEnumerable,De=ie.splice,Be=ve?ve.isConcatSpreadable:o,Ue=ve?ve.iterator:o,ze=ve?ve.toStringTag:o,on=function(){try{var t=Go(te,"defineProperty");return t({},"",{}),t}catch(t){}}(),pn=e.clearTimeout!==Ie.clearTimeout&&e.clearTimeout,Nn=r&&r.now!==Ie.Date.now&&r.now,Un=e.setTimeout!==Ie.setTimeout&&e.setTimeout,zn=$t.ceil,Gn=$t.floor,Fn=te.getOwnPropertySymbols,Hn=ge?ge.isBuffer:o,kn=e.isFinite,jn=ie.join,Vn=An(te.keys,te),Wn=$t.max,qn=$t.min,Yn=r.now,Xn=e.parseInt,Jn=$t.random,Zn=ie.reverse,Qn=Go(e,"DataView"),Kn=Go(e,"Map"),$n=Go(e,"Promise"),tr=Go(e,"Set"),er=Go(e,"WeakMap"),nr=Go(te,"create"),rr=er&&new er,ir={},or=la(Qn),ar=la(Kn),sr=la($n),ur=la(tr),cr=la(er),lr=ve?ve.prototype:o,hr=lr?lr.valueOf:o,fr=lr?lr.toString:o;function pr(t){if(As(t)&&!gs(t)&&!(t instanceof vr)){if(t instanceof gr)return t;if(ce.call(t,"__wrapped__"))return ha(t)}return new gr(t)}var dr=function(){function t(){}return function(e){if(!Ts(e))return{};if(Ce)return Ce(e);t.prototype=e;var n=new t;return t.prototype=o,n}}();function mr(){}function gr(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=o}function vr(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=U,this.__views__=[]}function yr(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e=e?t:e)),t}function Br(t,e,n,r,i,a){var s,u=e&f,c=e&p,l=e&d;if(n&&(s=i?n(t,r,i,a):n(t)),s!==o)return s;if(!Ts(t))return t;var h=gs(t);if(h){if(s=function(t){var e=t.length,n=new t.constructor(e);return e&&"string"==typeof t[0]&&ce.call(t,"index")&&(n.index=t.index,n.input=t.input),n}(t),!u)return no(t,s)}else{var m=ko(t),g=m==X||m==J;if(bs(t))return Zi(t,u);if(m==$||m==H||g&&!i){if(s=c||g?{}:Vo(t),!u)return c?function(t,e){return ro(t,Ho(t),e)}(t,function(t,e){return t&&ro(e,iu(e),t)}(s,t)):function(t,e){return ro(t,Fo(t),e)}(t,Cr(s,t))}else{if(!Ae[m])return i?t:{};s=function(t,e,n){var r=t.constructor;switch(e){case ut:return Qi(t);case V:case W:return new r(+t);case ct:return function(t,e){var n=e?Qi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case lt:case ht:case ft:case pt:case dt:case mt:case gt:case vt:case yt:return Ki(t,n);case Z:return new r;case Q:case rt:return new r(t);case et:return function(t){var e=new t.constructor(t.source,jt.exec(t));return e.lastIndex=t.lastIndex,e}(t);case nt:return new r;case it:return function(t){return hr?te(hr.call(t)):{}}(t)}}(t,m,u)}}a||(a=new wr);var v=a.get(t);if(v)return v;if(a.set(t,s),Os(t))return t.forEach(function(r){s.add(Br(r,e,n,r,t,a))}),s;if(Ls(t))return t.forEach(function(r,i){s.set(i,Br(r,e,n,i,t,a))}),s;var y=h?o:(l?c?Oo:Co:c?iu:ru)(t);return Ye(y||t,function(r,i){y&&(r=t[i=r]),Lr(s,i,Br(r,e,n,i,t,a))}),s}function Nr(t,e,n){var r=n.length;if(null==t)return!r;for(t=te(t);r--;){var i=n[r],a=e[i],s=t[i];if(s===o&&!(i in t)||!a(s))return!1}return!0}function Ur(t,e,n){if("function"!=typeof t)throw new re(u);return ra(function(){t.apply(o,n)},e)}function zr(t,e,n,r){var i=-1,o=Qe,s=!0,u=t.length,c=[],l=e.length;if(!u)return c;n&&(e=$e(e,vn(n))),r?(o=Ke,s=!1):e.length>=a&&(o=xn,s=!1,e=new _r(e));t:for(;++i-1},xr.prototype.set=function(t,e){var n=this.__data__,r=Rr(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},br.prototype.clear=function(){this.size=0,this.__data__={hash:new yr,map:new(Kn||xr),string:new yr}},br.prototype.delete=function(t){var e=Uo(this,t).delete(t);return this.size-=e?1:0,e},br.prototype.get=function(t){return Uo(this,t).get(t)},br.prototype.has=function(t){return Uo(this,t).has(t)},br.prototype.set=function(t,e){var n=Uo(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},_r.prototype.add=_r.prototype.push=function(t){return this.__data__.set(t,c),this},_r.prototype.has=function(t){return this.__data__.has(t)},wr.prototype.clear=function(){this.__data__=new xr,this.size=0},wr.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},wr.prototype.get=function(t){return this.__data__.get(t)},wr.prototype.has=function(t){return this.__data__.has(t)},wr.prototype.set=function(t,e){var n=this.__data__;if(n instanceof xr){var r=n.__data__;if(!Kn||r.length0&&n(s)?e>1?Vr(s,e-1,n,r,i):tn(i,s):r||(i[i.length]=s)}return i}var Wr=so(),qr=so(!0);function Yr(t,e){return t&&Wr(t,e,ru)}function Xr(t,e){return t&&qr(t,e,ru)}function Jr(t,e){return Ze(e,function(e){return Ms(t[e])})}function Zr(t,e){for(var n=0,r=(e=qi(e,t)).length;null!=t&&ne}function ti(t,e){return null!=t&&ce.call(t,e)}function ei(t,e){return null!=t&&e in te(t)}function ni(t,e,r){for(var i=r?Ke:Qe,a=t[0].length,s=t.length,u=s,c=n(s),l=1/0,h=[];u--;){var f=t[u];u&&e&&(f=$e(f,vn(e))),l=qn(f.length,l),c[u]=!r&&(e||a>=120&&f.length>=120)?new _r(u&&f):o}f=t[0];var p=-1,d=c[0];t:for(;++p=s)return u;var c=n[r];return u*("desc"==c?-1:1)}}return t.index-e.index}(t,e,n)})}function yi(t,e,n){for(var r=-1,i=e.length,o={};++r-1;)s!==t&&De.call(s,u,1),De.call(t,u,1);return t}function bi(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;qo(i)?De.call(t,i,1):zi(t,i)}}return t}function _i(t,e){return t+Gn(Jn()*(e-t+1))}function wi(t,e){var n="";if(!t||e<1||e>D)return n;do{e%2&&(n+=t),(e=Gn(e/2))&&(t+=t)}while(e);return n}function Mi(t,e){return ia(ta(t,e,Ru),t+"")}function Ei(t){return Er(fu(t))}function Si(t,e){var n=fu(t);return sa(n,Dr(e,0,n.length))}function Ti(t,e,n,r){if(!Ts(t))return t;for(var i=-1,a=(e=qi(e,t)).length,s=a-1,u=t;null!=u&&++io?0:o+e),(r=r>o?o:r)<0&&(r+=o),o=e>r?0:r-e>>>0,e>>>=0;for(var a=n(o);++i>>1,a=t[o];null!==a&&!Ds(a)&&(n?a<=e:a=a){var l=e?null:Mo(t);if(l)return Pn(l);s=!1,i=xn,c=new _r}else c=e?[]:u;t:for(;++r=r?t:Pi(t,e,n)}var Ji=pn||function(t){return Ie.clearTimeout(t)};function Zi(t,e){if(e)return t.slice();var n=t.length,r=we?we(n):new t.constructor(n);return t.copy(r),r}function Qi(t){var e=new t.constructor(t.byteLength);return new be(e).set(new be(t)),e}function Ki(t,e){var n=e?Qi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function $i(t,e){if(t!==e){var n=t!==o,r=null===t,i=t==t,a=Ds(t),s=e!==o,u=null===e,c=e==e,l=Ds(e);if(!u&&!l&&!a&&t>e||a&&s&&c&&!u&&!l||r&&s&&c||!n&&c||!i)return 1;if(!r&&!a&&!l&&t1?n[i-1]:o,s=i>2?n[2]:o;for(a=t.length>3&&"function"==typeof a?(i--,a):o,s&&Yo(n[0],n[1],s)&&(a=i<3?o:a,i=1),e=te(e);++r-1?i[a?e[s]:s]:o}}function fo(t){return Po(function(e){var n=e.length,r=n,i=gr.prototype.thru;for(t&&e.reverse();r--;){var a=e[r];if("function"!=typeof a)throw new re(u);if(i&&!s&&"wrapper"==Do(a))var s=new gr([],!0)}for(r=s?r:n;++r1&&b.reverse(),f&&lu))return!1;var l=a.get(t);if(l&&a.get(e))return l==e;var h=-1,f=!0,p=n&g?new _r:o;for(a.set(t,e),a.set(e,t);++h-1&&t%1==0&&t1?"& ":"")+e[r],e=e.join(n>2?", ":" "),t.replace(Ut,"{\n/* [wrapped with "+e+"] */\n")}(r,function(t,e){return Ye(F,function(n){var r="_."+n[0];e&n[1]&&!Qe(t,r)&&t.push(r)}),t.sort()}(function(t){var e=t.match(zt);return e?e[1].split(Gt):[]}(r),n)))}function aa(t){var e=0,n=0;return function(){var r=Yn(),i=P-(r-n);if(n=r,i>0){if(++e>=R)return arguments[0]}else e=0;return t.apply(o,arguments)}}function sa(t,e){var n=-1,r=t.length,i=r-1;for(e=e===o?r:e;++n1?t[e-1]:o;return Ca(t,n="function"==typeof n?(t.pop(),n):o)});function za(t){var e=pr(t);return e.__chain__=!0,e}function Ga(t,e){return e(t)}var Fa=Po(function(t){var e=t.length,n=e?t[0]:0,r=this.__wrapped__,i=function(e){return Ir(e,t)};return!(e>1||this.__actions__.length)&&r instanceof vr&&qo(n)?((r=r.slice(n,+n+(e?1:0))).__actions__.push({func:Ga,args:[i],thisArg:o}),new gr(r,this.__chain__).thru(function(t){return e&&!t.length&&t.push(o),t})):this.thru(i)});var Ha=io(function(t,e,n){ce.call(t,n)?++t[n]:Or(t,n,1)});var ka=ho(ma),ja=ho(ga);function Va(t,e){return(gs(t)?Ye:Gr)(t,No(e,3))}function Wa(t,e){return(gs(t)?Xe:Fr)(t,No(e,3))}var qa=io(function(t,e,n){ce.call(t,n)?t[n].push(e):Or(t,n,[e])});var Ya=Mi(function(t,e,r){var i=-1,o="function"==typeof e,a=ys(t)?n(t.length):[];return Gr(t,function(t){a[++i]=o?We(e,t,r):ri(t,e,r)}),a}),Xa=io(function(t,e,n){Or(t,n,e)});function Ja(t,e){return(gs(t)?$e:fi)(t,No(e,3))}var Za=io(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]});var Qa=Mi(function(t,e){if(null==t)return[];var n=e.length;return n>1&&Yo(t,e[0],e[1])?e=[]:n>2&&Yo(e[0],e[1],e[2])&&(e=[e[0]]),vi(t,Vr(e,1),[])}),Ka=Nn||function(){return Ie.Date.now()};function $a(t,e,n){return e=n?o:e,e=t&&null==e?t.length:e,So(t,E,o,o,o,o,e)}function ts(t,e){var n;if("function"!=typeof e)throw new re(u);return t=Fs(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=o),n}}var es=Mi(function(t,e,n){var r=v;if(n.length){var i=Ln(n,Bo(es));r|=w}return So(t,r,e,n,i)}),ns=Mi(function(t,e,n){var r=v|y;if(n.length){var i=Ln(n,Bo(ns));r|=w}return So(e,r,t,n,i)});function rs(t,e,n){var r,i,a,s,c,l,h=0,f=!1,p=!1,d=!0;if("function"!=typeof t)throw new re(u);function m(e){var n=r,a=i;return r=i=o,h=e,s=t.apply(a,n)}function g(t){var n=t-l;return l===o||n>=e||n<0||p&&t-h>=a}function v(){var t=Ka();if(g(t))return y(t);c=ra(v,function(t){var n=e-(t-l);return p?qn(n,a-(t-h)):n}(t))}function y(t){return c=o,d&&r?m(t):(r=i=o,s)}function x(){var t=Ka(),n=g(t);if(r=arguments,i=this,l=t,n){if(c===o)return function(t){return h=t,c=ra(v,e),f?m(t):s}(l);if(p)return c=ra(v,e),m(l)}return c===o&&(c=ra(v,e)),s}return e=ks(e)||0,Ts(n)&&(f=!!n.leading,a=(p="maxWait"in n)?Wn(ks(n.maxWait)||0,e):a,d="trailing"in n?!!n.trailing:d),x.cancel=function(){c!==o&&Ji(c),h=0,r=l=i=c=o},x.flush=function(){return c===o?s:y(Ka())},x}var is=Mi(function(t,e){return Ur(t,1,e)}),os=Mi(function(t,e,n){return Ur(t,ks(e)||0,n)});function as(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new re(u);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=t.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(as.Cache||br),n}function ss(t){if("function"!=typeof t)throw new re(u);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}as.Cache=br;var us=Yi(function(t,e){var n=(e=1==e.length&&gs(e[0])?$e(e[0],vn(No())):$e(Vr(e,1),vn(No()))).length;return Mi(function(r){for(var i=-1,o=qn(r.length,n);++i=e}),ms=ii(function(){return arguments}())?ii:function(t){return As(t)&&ce.call(t,"callee")&&!Oe.call(t,"callee")},gs=n.isArray,vs=Ge?vn(Ge):function(t){return As(t)&&Kr(t)==ut};function ys(t){return null!=t&&Ss(t.length)&&!Ms(t)}function xs(t){return As(t)&&ys(t)}var bs=Hn||ku,_s=Fe?vn(Fe):function(t){return As(t)&&Kr(t)==W};function ws(t){if(!As(t))return!1;var e=Kr(t);return e==Y||e==q||"string"==typeof t.message&&"string"==typeof t.name&&!Ps(t)}function Ms(t){if(!Ts(t))return!1;var e=Kr(t);return e==X||e==J||e==j||e==tt}function Es(t){return"number"==typeof t&&t==Fs(t)}function Ss(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=D}function Ts(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function As(t){return null!=t&&"object"==typeof t}var Ls=He?vn(He):function(t){return As(t)&&ko(t)==Z};function Rs(t){return"number"==typeof t||As(t)&&Kr(t)==Q}function Ps(t){if(!As(t)||Kr(t)!=$)return!1;var e=Le(t);if(null===e)return!0;var n=ce.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&ue.call(n)==pe}var Cs=ke?vn(ke):function(t){return As(t)&&Kr(t)==et};var Os=je?vn(je):function(t){return As(t)&&ko(t)==nt};function Is(t){return"string"==typeof t||!gs(t)&&As(t)&&Kr(t)==rt}function Ds(t){return"symbol"==typeof t||As(t)&&Kr(t)==it}var Bs=Ve?vn(Ve):function(t){return As(t)&&Ss(t.length)&&!!Te[Kr(t)]};var Ns=bo(hi),Us=bo(function(t,e){return t<=e});function zs(t){if(!t)return[];if(ys(t))return Is(t)?In(t):no(t);if(Ue&&t[Ue])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[Ue]());var e=ko(t);return(e==Z?Tn:e==nt?Pn:fu)(t)}function Gs(t){return t?(t=ks(t))===I||t===-I?(t<0?-1:1)*B:t==t?t:0:0===t?t:0}function Fs(t){var e=Gs(t),n=e%1;return e==e?n?e-n:e:0}function Hs(t){return t?Dr(Fs(t),0,U):0}function ks(t){if("number"==typeof t)return t;if(Ds(t))return N;if(Ts(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=Ts(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(Dt,"");var n=Wt.test(t);return n||Yt.test(t)?Pe(t.slice(2),n?2:8):Vt.test(t)?N:+t}function js(t){return ro(t,iu(t))}function Vs(t){return null==t?"":Ni(t)}var Ws=oo(function(t,e){if(Qo(e)||ys(e))ro(e,ru(e),t);else for(var n in e)ce.call(e,n)&&Lr(t,n,e[n])}),qs=oo(function(t,e){ro(e,iu(e),t)}),Ys=oo(function(t,e,n,r){ro(e,iu(e),t,r)}),Xs=oo(function(t,e,n,r){ro(e,ru(e),t,r)}),Js=Po(Ir);var Zs=Mi(function(t,e){t=te(t);var n=-1,r=e.length,i=r>2?e[2]:o;for(i&&Yo(e[0],e[1],i)&&(r=1);++n1),e}),ro(t,Oo(t),n),r&&(n=Br(n,f|p|d,Lo));for(var i=e.length;i--;)zi(n,e[i]);return n});var uu=Po(function(t,e){return null==t?{}:function(t,e){return yi(t,e,function(e,n){return $s(t,n)})}(t,e)});function cu(t,e){if(null==t)return{};var n=$e(Oo(t),function(t){return[t]});return e=No(e),yi(t,n,function(t,n){return e(t,n[0])})}var lu=Eo(ru),hu=Eo(iu);function fu(t){return null==t?[]:yn(t,ru(t))}var pu=co(function(t,e,n){return e=e.toLowerCase(),t+(n?du(e):e)});function du(t){return wu(Vs(t).toLowerCase())}function mu(t){return(t=Vs(t))&&t.replace(Jt,wn).replace(xe,"")}var gu=co(function(t,e,n){return t+(n?"-":"")+e.toLowerCase()}),vu=co(function(t,e,n){return t+(n?" ":"")+e.toLowerCase()}),yu=uo("toLowerCase");var xu=co(function(t,e,n){return t+(n?"_":"")+e.toLowerCase()});var bu=co(function(t,e,n){return t+(n?" ":"")+wu(e)});var _u=co(function(t,e,n){return t+(n?" ":"")+e.toUpperCase()}),wu=uo("toUpperCase");function Mu(t,e,n){return t=Vs(t),(e=n?o:e)===o?function(t){return Me.test(t)}(t)?function(t){return t.match(_e)||[]}(t):function(t){return t.match(Ft)||[]}(t):t.match(e)||[]}var Eu=Mi(function(t,e){try{return We(t,o,e)}catch(t){return ws(t)?t:new i(t)}}),Su=Po(function(t,e){return Ye(e,function(e){e=ca(e),Or(t,e,es(t[e],t))}),t});function Tu(t){return function(){return t}}var Au=fo(),Lu=fo(!0);function Ru(t){return t}function Pu(t){return ui("function"==typeof t?t:Br(t,f))}var Cu=Mi(function(t,e){return function(n){return ri(n,t,e)}}),Ou=Mi(function(t,e){return function(n){return ri(t,n,e)}});function Iu(t,e,n){var r=ru(e),i=Jr(e,r);null!=n||Ts(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=Jr(e,ru(e)));var o=!(Ts(n)&&"chain"in n&&!n.chain),a=Ms(t);return Ye(i,function(n){var r=e[n];t[n]=r,a&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__);return(n.__actions__=no(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,tn([this.value()],arguments))})}),t}function Du(){}var Bu=vo($e),Nu=vo(Je),Uu=vo(rn);function zu(t){return Xo(t)?fn(ca(t)):function(t){return function(e){return Zr(e,t)}}(t)}var Gu=xo(),Fu=xo(!0);function Hu(){return[]}function ku(){return!1}var ju=go(function(t,e){return t+e},0),Vu=wo("ceil"),Wu=go(function(t,e){return t/e},1),qu=wo("floor");var Yu=go(function(t,e){return t*e},1),Xu=wo("round"),Ju=go(function(t,e){return t-e},0);return pr.after=function(t,e){if("function"!=typeof e)throw new re(u);return t=Fs(t),function(){if(--t<1)return e.apply(this,arguments)}},pr.ary=$a,pr.assign=Ws,pr.assignIn=qs,pr.assignInWith=Ys,pr.assignWith=Xs,pr.at=Js,pr.before=ts,pr.bind=es,pr.bindAll=Su,pr.bindKey=ns,pr.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return gs(t)?t:[t]},pr.chain=za,pr.chunk=function(t,e,r){e=(r?Yo(t,e,r):e===o)?1:Wn(Fs(e),0);var i=null==t?0:t.length;if(!i||e<1)return[];for(var a=0,s=0,u=n(zn(i/e));ai?0:i+n),(r=r===o||r>i?i:Fs(r))<0&&(r+=i),r=n>r?0:Hs(r);n>>0)?(t=Vs(t))&&("string"==typeof e||null!=e&&!Cs(e))&&!(e=Ni(e))&&Sn(t)?Xi(In(t),0,n):t.split(e,n):[]},pr.spread=function(t,e){if("function"!=typeof t)throw new re(u);return e=null==e?0:Wn(Fs(e),0),Mi(function(n){var r=n[e],i=Xi(n,0,e);return r&&tn(i,r),We(t,this,i)})},pr.tail=function(t){var e=null==t?0:t.length;return e?Pi(t,1,e):[]},pr.take=function(t,e,n){return t&&t.length?Pi(t,0,(e=n||e===o?1:Fs(e))<0?0:e):[]},pr.takeRight=function(t,e,n){var r=null==t?0:t.length;return r?Pi(t,(e=r-(e=n||e===o?1:Fs(e)))<0?0:e,r):[]},pr.takeRightWhile=function(t,e){return t&&t.length?Fi(t,No(e,3),!1,!0):[]},pr.takeWhile=function(t,e){return t&&t.length?Fi(t,No(e,3)):[]},pr.tap=function(t,e){return e(t),t},pr.throttle=function(t,e,n){var r=!0,i=!0;if("function"!=typeof t)throw new re(u);return Ts(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),rs(t,e,{leading:r,maxWait:e,trailing:i})},pr.thru=Ga,pr.toArray=zs,pr.toPairs=lu,pr.toPairsIn=hu,pr.toPath=function(t){return gs(t)?$e(t,ca):Ds(t)?[t]:no(ua(Vs(t)))},pr.toPlainObject=js,pr.transform=function(t,e,n){var r=gs(t),i=r||bs(t)||Bs(t);if(e=No(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:Ts(t)&&Ms(o)?dr(Le(t)):{}}return(i?Ye:Yr)(t,function(t,r,i){return e(n,t,r,i)}),n},pr.unary=function(t){return $a(t,1)},pr.union=Aa,pr.unionBy=La,pr.unionWith=Ra,pr.uniq=function(t){return t&&t.length?Ui(t):[]},pr.uniqBy=function(t,e){return t&&t.length?Ui(t,No(e,2)):[]},pr.uniqWith=function(t,e){return e="function"==typeof e?e:o,t&&t.length?Ui(t,o,e):[]},pr.unset=function(t,e){return null==t||zi(t,e)},pr.unzip=Pa,pr.unzipWith=Ca,pr.update=function(t,e,n){return null==t?t:Gi(t,e,Wi(n))},pr.updateWith=function(t,e,n,r){return r="function"==typeof r?r:o,null==t?t:Gi(t,e,Wi(n),r)},pr.values=fu,pr.valuesIn=function(t){return null==t?[]:yn(t,iu(t))},pr.without=Oa,pr.words=Mu,pr.wrap=function(t,e){return cs(Wi(e),t)},pr.xor=Ia,pr.xorBy=Da,pr.xorWith=Ba,pr.zip=Na,pr.zipObject=function(t,e){return ji(t||[],e||[],Lr)},pr.zipObjectDeep=function(t,e){return ji(t||[],e||[],Ti)},pr.zipWith=Ua,pr.entries=lu,pr.entriesIn=hu,pr.extend=qs,pr.extendWith=Ys,Iu(pr,pr),pr.add=ju,pr.attempt=Eu,pr.camelCase=pu,pr.capitalize=du,pr.ceil=Vu,pr.clamp=function(t,e,n){return n===o&&(n=e,e=o),n!==o&&(n=(n=ks(n))==n?n:0),e!==o&&(e=(e=ks(e))==e?e:0),Dr(ks(t),e,n)},pr.clone=function(t){return Br(t,d)},pr.cloneDeep=function(t){return Br(t,f|d)},pr.cloneDeepWith=function(t,e){return Br(t,f|d,e="function"==typeof e?e:o)},pr.cloneWith=function(t,e){return Br(t,d,e="function"==typeof e?e:o)},pr.conformsTo=function(t,e){return null==e||Nr(t,e,ru(e))},pr.deburr=mu,pr.defaultTo=function(t,e){return null==t||t!=t?e:t},pr.divide=Wu,pr.endsWith=function(t,e,n){t=Vs(t),e=Ni(e);var r=t.length,i=n=n===o?r:Dr(Fs(n),0,r);return(n-=e.length)>=0&&t.slice(n,i)==e},pr.eq=fs,pr.escape=function(t){return(t=Vs(t))&&St.test(t)?t.replace(Mt,Mn):t},pr.escapeRegExp=function(t){return(t=Vs(t))&&It.test(t)?t.replace(Ot,"\\$&"):t},pr.every=function(t,e,n){var r=gs(t)?Je:Hr;return n&&Yo(t,e,n)&&(e=o),r(t,No(e,3))},pr.find=ka,pr.findIndex=ma,pr.findKey=function(t,e){return an(t,No(e,3),Yr)},pr.findLast=ja,pr.findLastIndex=ga,pr.findLastKey=function(t,e){return an(t,No(e,3),Xr)},pr.floor=qu,pr.forEach=Va,pr.forEachRight=Wa,pr.forIn=function(t,e){return null==t?t:Wr(t,No(e,3),iu)},pr.forInRight=function(t,e){return null==t?t:qr(t,No(e,3),iu)},pr.forOwn=function(t,e){return t&&Yr(t,No(e,3))},pr.forOwnRight=function(t,e){return t&&Xr(t,No(e,3))},pr.get=Ks,pr.gt=ps,pr.gte=ds,pr.has=function(t,e){return null!=t&&jo(t,e,ti)},pr.hasIn=$s,pr.head=ya,pr.identity=Ru,pr.includes=function(t,e,n,r){t=ys(t)?t:fu(t),n=n&&!r?Fs(n):0;var i=t.length;return n<0&&(n=Wn(i+n,0)),Is(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&un(t,e,n)>-1},pr.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:Fs(n);return i<0&&(i=Wn(r+i,0)),un(t,e,i)},pr.inRange=function(t,e,n){return e=Gs(e),n===o?(n=e,e=0):n=Gs(n),function(t,e,n){return t>=qn(e,n)&&t=-D&&t<=D},pr.isSet=Os,pr.isString=Is,pr.isSymbol=Ds,pr.isTypedArray=Bs,pr.isUndefined=function(t){return t===o},pr.isWeakMap=function(t){return As(t)&&ko(t)==at},pr.isWeakSet=function(t){return As(t)&&Kr(t)==st},pr.join=function(t,e){return null==t?"":jn.call(t,e)},pr.kebabCase=gu,pr.last=wa,pr.lastIndexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=r;return n!==o&&(i=(i=Fs(n))<0?Wn(r+i,0):qn(i,r-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,i):sn(t,ln,i,!0)},pr.lowerCase=vu,pr.lowerFirst=yu,pr.lt=Ns,pr.lte=Us,pr.max=function(t){return t&&t.length?kr(t,Ru,$r):o},pr.maxBy=function(t,e){return t&&t.length?kr(t,No(e,2),$r):o},pr.mean=function(t){return hn(t,Ru)},pr.meanBy=function(t,e){return hn(t,No(e,2))},pr.min=function(t){return t&&t.length?kr(t,Ru,hi):o},pr.minBy=function(t,e){return t&&t.length?kr(t,No(e,2),hi):o},pr.stubArray=Hu,pr.stubFalse=ku,pr.stubObject=function(){return{}},pr.stubString=function(){return""},pr.stubTrue=function(){return!0},pr.multiply=Yu,pr.nth=function(t,e){return t&&t.length?gi(t,Fs(e)):o},pr.noConflict=function(){return Ie._===this&&(Ie._=de),this},pr.noop=Du,pr.now=Ka,pr.pad=function(t,e,n){t=Vs(t);var r=(e=Fs(e))?On(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return yo(Gn(i),n)+t+yo(zn(i),n)},pr.padEnd=function(t,e,n){t=Vs(t);var r=(e=Fs(e))?On(t):0;return e&&re){var r=t;t=e,e=r}if(n||t%1||e%1){var i=Jn();return qn(t+i*(e-t+Re("1e-"+((i+"").length-1))),e)}return _i(t,e)},pr.reduce=function(t,e,n){var r=gs(t)?en:dn,i=arguments.length<3;return r(t,No(e,4),n,i,Gr)},pr.reduceRight=function(t,e,n){var r=gs(t)?nn:dn,i=arguments.length<3;return r(t,No(e,4),n,i,Fr)},pr.repeat=function(t,e,n){return e=(n?Yo(t,e,n):e===o)?1:Fs(e),wi(Vs(t),e)},pr.replace=function(){var t=arguments,e=Vs(t[0]);return t.length<3?e:e.replace(t[1],t[2])},pr.result=function(t,e,n){var r=-1,i=(e=qi(e,t)).length;for(i||(i=1,t=o);++rD)return[];var n=U,r=qn(t,U);e=No(e),t-=U;for(var i=gn(r,e);++n=a)return t;var u=n-On(r);if(u<1)return r;var c=s?Xi(s,0,u).join(""):t.slice(0,u);if(i===o)return c+r;if(s&&(u+=c.length-u),Cs(i)){if(t.slice(u).search(i)){var l,h=c;for(i.global||(i=ee(i.source,Vs(jt.exec(i))+"g")),i.lastIndex=0;l=i.exec(h);)var f=l.index;c=c.slice(0,f===o?u:f)}}else if(t.indexOf(Ni(i),u)!=u){var p=c.lastIndexOf(i);p>-1&&(c=c.slice(0,p))}return c+r},pr.unescape=function(t){return(t=Vs(t))&&Et.test(t)?t.replace(wt,Dn):t},pr.uniqueId=function(t){var e=++le;return Vs(t)+e},pr.upperCase=_u,pr.upperFirst=wu,pr.each=Va,pr.eachRight=Wa,pr.first=ya,Iu(pr,function(){var t={};return Yr(pr,function(e,n){ce.call(pr.prototype,n)||(t[n]=e)}),t}(),{chain:!1}),pr.VERSION="4.17.10",Ye(["bind","bindKey","curry","curryRight","partial","partialRight"],function(t){pr[t].placeholder=pr}),Ye(["drop","take"],function(t,e){vr.prototype[t]=function(n){n=n===o?1:Wn(Fs(n),0);var r=this.__filtered__&&!e?new vr(this):this.clone();return r.__filtered__?r.__takeCount__=qn(n,r.__takeCount__):r.__views__.push({size:qn(n,U),type:t+(r.__dir__<0?"Right":"")}),r},vr.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}}),Ye(["filter","map","takeWhile"],function(t,e){var n=e+1,r=n==C||3==n;vr.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:No(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),Ye(["head","last"],function(t,e){var n="take"+(e?"Right":"");vr.prototype[t]=function(){return this[n](1).value()[0]}}),Ye(["initial","tail"],function(t,e){var n="drop"+(e?"":"Right");vr.prototype[t]=function(){return this.__filtered__?new vr(this):this[n](1)}}),vr.prototype.compact=function(){return this.filter(Ru)},vr.prototype.find=function(t){return this.filter(t).head()},vr.prototype.findLast=function(t){return this.reverse().find(t)},vr.prototype.invokeMap=Mi(function(t,e){return"function"==typeof t?new vr(this):this.map(function(n){return ri(n,t,e)})}),vr.prototype.reject=function(t){return this.filter(ss(No(t)))},vr.prototype.slice=function(t,e){t=Fs(t);var n=this;return n.__filtered__&&(t>0||e<0)?new vr(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==o&&(n=(e=Fs(e))<0?n.dropRight(-e):n.take(e-t)),n)},vr.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},vr.prototype.toArray=function(){return this.take(U)},Yr(vr.prototype,function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),r=/^(?:head|last)$/.test(e),i=pr[r?"take"+("last"==e?"Right":""):e],a=r||/^find/.test(e);i&&(pr.prototype[e]=function(){var e=this.__wrapped__,s=r?[1]:arguments,u=e instanceof vr,c=s[0],l=u||gs(e),h=function(t){var e=i.apply(pr,tn([t],s));return r&&f?e[0]:e};l&&n&&"function"==typeof c&&1!=c.length&&(u=l=!1);var f=this.__chain__,p=!!this.__actions__.length,d=a&&!f,m=u&&!p;if(!a&&l){e=m?e:new vr(this);var g=t.apply(e,s);return g.__actions__.push({func:Ga,args:[h],thisArg:o}),new gr(g,f)}return d&&m?t.apply(this,s):(g=this.thru(h),d?r?g.value()[0]:g.value():g)})}),Ye(["pop","push","shift","sort","splice","unshift"],function(t){var e=ie[t],n=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",r=/^(?:pop|shift)$/.test(t);pr.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return e.apply(gs(i)?i:[],t)}return this[n](function(n){return e.apply(gs(n)?n:[],t)})}}),Yr(vr.prototype,function(t,e){var n=pr[e];if(n){var r=n.name+"";(ir[r]||(ir[r]=[])).push({name:e,func:n})}}),ir[po(o,y).name]=[{name:"wrapper",func:o}],vr.prototype.clone=function(){var t=new vr(this.__wrapped__);return t.__actions__=no(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=no(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=no(this.__views__),t},vr.prototype.reverse=function(){if(this.__filtered__){var t=new vr(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},vr.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=gs(t),r=e<0,i=n?t.length:0,o=function(t,e,n){for(var r=-1,i=n.length;++r=this.__values__.length;return{done:t,value:t?o:this.__values__[this.__index__++]}},pr.prototype.plant=function(t){for(var e,n=this;n instanceof mr;){var r=ha(n);r.__index__=0,r.__values__=o,e?i.__wrapped__=r:e=r;var i=r;n=n.__wrapped__}return i.__wrapped__=t,e},pr.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof vr){var e=t;return this.__actions__.length&&(e=new vr(this)),(e=e.reverse()).__actions__.push({func:Ga,args:[Ta],thisArg:o}),new gr(e,this.__chain__)}return this.thru(Ta)},pr.prototype.toJSON=pr.prototype.valueOf=pr.prototype.value=function(){return Hi(this.__wrapped__,this.__actions__)},pr.prototype.first=pr.prototype.head,Ue&&(pr.prototype[Ue]=function(){return this}),pr}();Ie._=Bn,(i=function(){return Bn}.call(e,n,e,r))===o||(r.exports=i)}).call(this)}).call(this,n(2),n(11)(t))},function(t,e){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){"use strict";(function(n){Object.defineProperty(e,"__esModule",{value:!0});var r={loadPositions:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=t.meshes[e];if(0===(i.primitives?i.primitives.length:0))return console.error("gltfReader: Mesh has no primitive."),null;var o=[];return i.primitives.forEach(function(e){e.attributes&&(o=o.concat(r._loadAccessor(t,e.attributes.POSITION,n)))}),o},_loadAccessor:function(t,e,n){if(void 0===e)return null;var i=t.accessors[e],o=i.byteOffset||0,a=r._loadBufferView(t,i.bufferView,o,n),s=[];switch(i.componentType){case 5123:for(var u=0;u1&&void 0!==arguments[1]?arguments[1]:0;return r._operation(Math.ceil,t,e)},_operation:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;if(0===n)return t(e);var r=Math.pow(10,n);return t(e*r)/r}};e.default=r,t.exports=e.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(16),i={getTRSMatrix:function(t){var e=t.translation,n=t.rotation,r=t.scale,o=e?i._affineT(e):i._I(),a=n?i._affineR(n):i._I(),s=r?i._affineS(r):i._I();return o.multiply(a).multiply(s).toArray()},_affineT:function(t){return i._affine({t:t})},_affineR:function(t){return i._affine({r:t})},_affineS:function(t){return i._affine({s:t})},_I:function(){return(new r.Matrix4).identity()},_affine:function(t){var e=t.t,n=t.r,i=t.s;return e?(new r.Matrix4).makeTranslation(e[0],e[1],e[2]):n?(new r.Matrix4).makeRotationFromQuaternion(new r.Quaternion(n[0],n[1],n[2],n[3])):i?(new r.Matrix4).makeScale(i[0],i[1],i[2]):void 0}};e.default=i,t.exports=e.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(0),i=n(1),o=n(3),a=u(n(4)),s=u(n(5));function u(t){return t&&t.__esModule?t:{default:t}}function c(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.precision,i=n.ceilDimensions,o=this.getMeshesTransformMatrices(t.nodes,t,e).reduce(function(t,e){return t.min=t.min.map(function(t,n){return te[n]?t:e[n]}),t},{min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]}),s=i?a.default.ceil:a.default.round;return{dimensions:{width:s(o.max[0]-o.min[0],r),depth:s(o.max[2]-o.min[2],r),height:s(o.max[1]-o.min[1],r)},center:{x:a.default.round((o.max[0]+o.min[0])/2,r+1),y:a.default.round((o.max[2]+o.min[2])/2,r+1),z:a.default.round((o.max[1]+o.min[1])/2,r+1)}}},getMeshesTransformMatrices:function(t,e,n){var i=this;return t.forEach(function(t,e){return t.index=e}),t.filter(function(t){return void 0!==t.mesh}).reduce(function(a,s){var u=i.getParentNodesMatrices(s,t).map(function(t){return new r.Matrix(4,4,!1).setData(t)}),l=r.Matrix.multiply.apply(r.Matrix,c(u)),h=i.getPointsFromArray((0,o.loadPositions)(e,s.mesh,n)).map(function(t){return r.Matrix.multiply(t,l)});return a.concat(h)},[])},getParentNodesMatrices:function(t,e){var n=e.find(function(e){return e.children&&(0,i.includes)(e.children,t.index)}),r=t.matrix||s.default.getTRSMatrix(t);return"Cylinder"===t.name&&console.log(r),void 0!==n?[r].concat(c(this.getParentNodesMatrices(n,e))).filter(function(t){return t}):[r]},getPointsFromArray:function(t){for(var e=[],n=0;n1&&void 0!==arguments[1]?arguments[1]:[],n=arguments[2];if(n=Object.assign({precision:0,ceilDimensions:!1},n),Boolean(t.readUInt32LE)){if(2===t.readUInt32LE(4))return o.default.computeBoundings(t,n);throw new Error("gltf-bounding-box only currently handles glTF1 and glTF/glb2.")}if(1==+t.asset.version)return r.default.computeBoundings(t,n);if(2==+t.asset.version)return i.default.computeBoundings(t,e,n);throw new Error("gltf-bounding-box only currently handles glTF1 and glTF/glb2.")}};e.default=s,t.exports=e.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(0),i=n(1),o=n(3),a=u(n(4)),s=u(n(5));function u(t){return t&&t.__esModule?t:{default:t}}function c(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e1&&void 0!==arguments[1]?arguments[1]:{},n=e.precision,r=e.ceilDimensions,i=this.getMeshesTransformMatrices(t.nodes,t).reduce(function(t,e){return t.min=t.min.map(function(t,n){return te[n]?t:e[n]}),t},{min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]}),o=!0===r?a.default.ceil:a.default.round;return{dimensions:{width:o(i.max[0]-i.min[0],n),depth:o(i.max[2]-i.min[2],n),height:o(i.max[1]-i.min[1],n)},center:{x:a.default.round((i.max[0]+i.min[0])/2,n+1),y:a.default.round((i.max[2]+i.min[2])/2,n+1),z:a.default.round((i.max[1]+i.min[1])/2,n+1)}}},getMeshesTransformMatrices:function(t,e){var n=this;return Object.keys(t).filter(function(e){return t[e].meshes}).reduce(function(e,n){return[].concat(c(e),c(t[n].meshes.map(function(t){return{mesh:t,nodeName:n}})))},[]).reduce(function(i,a){var s=a.mesh,u=a.nodeName,l=n.getParentNodesMatrices(u,t).map(function(t){return new r.Matrix(4,4,!1).setData(t)}),h=r.Matrix.multiply.apply(r.Matrix,c(l)),f=n.getPointsFromArray((0,o.loadPositions)(e,s)).map(function(t){return r.Matrix.multiply(t,h)});return i.concat(f)},[])},getParentNodesMatrices:function(t,e){var n=Object.keys(e).find(function(n){return e[n].children&&(0,i.includes)(e[n].children,t)}),r=e[t].matrix||s.default.getTRSMatrix(e[t]);return n?[r].concat(c(this.getParentNodesMatrices(n,e))).filter(function(t){return t}):[r]},getPointsFromArray:function(t){for(var e=[],n=0;n=4){for(var m=0,g=this._cache||(this._cache={}),v=g.tempMatrix||(g.tempMatrix=new i(this.rows,this.cols,!1)),y=0;y * @license MIT */ -var e=r(12),i=r(13),u=r(14);function o(){return a.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function f(t,n){if(o()=o())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o().toString(16)+" bytes");return 0|t}function v(t,n){if(a.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var e=!1;;)switch(n){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return Y(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return N(t).length;default:if(e)return Y(t).length;n=(""+n).toLowerCase(),e=!0}}function g(t,n,r){var e=t[n];t[n]=t[r],t[r]=e}function _(t,n,r,e,i){if(0===t.length)return-1;if("string"==typeof r?(e=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof n&&(n=a.from(n,e)),a.isBuffer(n))return 0===n.length?-1:y(t,n,r,e,i);if("number"==typeof n)return n&=255,a.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,n,r):Uint8Array.prototype.lastIndexOf.call(t,n,r):y(t,[n],r,e,i);throw new TypeError("val must be string, number or Buffer")}function y(t,n,r,e,i){var u,o=1,f=t.length,a=n.length;if(void 0!==e&&("ucs2"===(e=String(e).toLowerCase())||"ucs-2"===e||"utf16le"===e||"utf-16le"===e)){if(t.length<2||n.length<2)return-1;o=2,f/=2,a/=2,r/=2}function c(t,n){return 1===o?t[n]:t.readUInt16BE(n*o)}if(i){var s=-1;for(u=r;uf&&(r=f-a),u=r;u>=0;u--){for(var l=!0,h=0;hi&&(e=i):e=i;var u=n.length;if(u%2!=0)throw new TypeError("Invalid hex string");e>u/2&&(e=u/2);for(var o=0;o>8,i=r%256,u.push(i),u.push(e);return u}(n,t.length-r),t,r,e)}function E(t,n,r){return 0===n&&r===t.length?e.fromByteArray(t):e.fromByteArray(t.slice(n,r))}function R(t,n,r){r=Math.min(t.length,r);for(var e=[],i=n;i239?4:c>223?3:c>191?2:1;if(i+l<=r)switch(l){case 1:c<128&&(s=c);break;case 2:128==(192&(u=t[i+1]))&&(a=(31&c)<<6|63&u)>127&&(s=a);break;case 3:u=t[i+1],o=t[i+2],128==(192&u)&&128==(192&o)&&(a=(15&c)<<12|(63&u)<<6|63&o)>2047&&(a<55296||a>57343)&&(s=a);break;case 4:u=t[i+1],o=t[i+2],f=t[i+3],128==(192&u)&&128==(192&o)&&128==(192&f)&&(a=(15&c)<<18|(63&u)<<12|(63&o)<<6|63&f)>65535&&a<1114112&&(s=a)}null===s?(s=65533,l=1):s>65535&&(s-=65536,e.push(s>>>10&1023|55296),s=56320|1023&s),e.push(s),i+=l}return function(t){var n=t.length;if(n<=B)return String.fromCharCode.apply(String,t);var r="",e=0;for(;ethis.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(n>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return O(this,n,r);case"utf8":case"utf-8":return R(this,n,r);case"ascii":return P(this,n,r);case"latin1":case"binary":return j(this,n,r);case"base64":return E(this,n,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,n,r);default:if(e)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),e=!0}}.apply(this,arguments)},a.prototype.equals=function(t){if(!a.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===a.compare(this,t)},a.prototype.inspect=function(){var t="",r=n.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(t+=" ... ")),""},a.prototype.compare=function(t,n,r,e,i){if(!a.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===n&&(n=0),void 0===r&&(r=t?t.length:0),void 0===e&&(e=0),void 0===i&&(i=this.length),n<0||r>t.length||e<0||i>this.length)throw new RangeError("out of range index");if(e>=i&&n>=r)return 0;if(e>=i)return-1;if(n>=r)return 1;if(n>>>=0,r>>>=0,e>>>=0,i>>>=0,this===t)return 0;for(var u=i-e,o=r-n,f=Math.min(u,o),c=this.slice(e,i),s=t.slice(n,r),l=0;li)&&(r=i),t.length>0&&(r<0||n<0)||n>this.length)throw new RangeError("Attempt to write outside buffer bounds");e||(e="utf8");for(var u=!1;;)switch(e){case"hex":return d(this,t,n,r);case"utf8":case"utf-8":return w(this,t,n,r);case"ascii":return m(this,t,n,r);case"latin1":case"binary":return b(this,t,n,r);case"base64":return A(this,t,n,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,t,n,r);default:if(u)throw new TypeError("Unknown encoding: "+e);e=(""+e).toLowerCase(),u=!0}},a.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var B=4096;function P(t,n,r){var e="";r=Math.min(t.length,r);for(var i=n;ie)&&(r=e);for(var i="",u=n;ur)throw new RangeError("Trying to access beyond buffer length")}function T(t,n,r,e,i,u){if(!a.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(n>i||nt.length)throw new RangeError("Index out of range")}function M(t,n,r,e){n<0&&(n=65535+n+1);for(var i=0,u=Math.min(t.length-r,2);i>>8*(e?i:1-i)}function U(t,n,r,e){n<0&&(n=4294967295+n+1);for(var i=0,u=Math.min(t.length-r,4);i>>8*(e?i:3-i)&255}function L(t,n,r,e,i,u){if(r+e>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function k(t,n,r,e,u){return u||L(t,0,r,4),i.write(t,n,r,e,23,4),r+4}function D(t,n,r,e,u){return u||L(t,0,r,8),i.write(t,n,r,e,52,8),r+8}a.prototype.slice=function(t,n){var r,e=this.length;if(t=~~t,n=void 0===n?e:~~n,t<0?(t+=e)<0&&(t=0):t>e&&(t=e),n<0?(n+=e)<0&&(n=0):n>e&&(n=e),n0&&(i*=256);)e+=this[t+--n]*i;return e},a.prototype.readUInt8=function(t,n){return n||S(t,1,this.length),this[t]},a.prototype.readUInt16LE=function(t,n){return n||S(t,2,this.length),this[t]|this[t+1]<<8},a.prototype.readUInt16BE=function(t,n){return n||S(t,2,this.length),this[t]<<8|this[t+1]},a.prototype.readUInt32LE=function(t,n){return n||S(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},a.prototype.readUInt32BE=function(t,n){return n||S(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},a.prototype.readIntLE=function(t,n,r){t|=0,n|=0,r||S(t,n,this.length);for(var e=this[t],i=1,u=0;++u=(i*=128)&&(e-=Math.pow(2,8*n)),e},a.prototype.readIntBE=function(t,n,r){t|=0,n|=0,r||S(t,n,this.length);for(var e=n,i=1,u=this[t+--e];e>0&&(i*=256);)u+=this[t+--e]*i;return u>=(i*=128)&&(u-=Math.pow(2,8*n)),u},a.prototype.readInt8=function(t,n){return n||S(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},a.prototype.readInt16LE=function(t,n){n||S(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt16BE=function(t,n){n||S(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt32LE=function(t,n){return n||S(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},a.prototype.readInt32BE=function(t,n){return n||S(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},a.prototype.readFloatLE=function(t,n){return n||S(t,4,this.length),i.read(this,t,!0,23,4)},a.prototype.readFloatBE=function(t,n){return n||S(t,4,this.length),i.read(this,t,!1,23,4)},a.prototype.readDoubleLE=function(t,n){return n||S(t,8,this.length),i.read(this,t,!0,52,8)},a.prototype.readDoubleBE=function(t,n){return n||S(t,8,this.length),i.read(this,t,!1,52,8)},a.prototype.writeUIntLE=function(t,n,r,e){(t=+t,n|=0,r|=0,e)||T(this,t,n,r,Math.pow(2,8*r)-1,0);var i=1,u=0;for(this[n]=255&t;++u=0&&(u*=256);)this[n+i]=t/u&255;return n+r},a.prototype.writeUInt8=function(t,n,r){return t=+t,n|=0,r||T(this,t,n,1,255,0),a.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[n]=255&t,n+1},a.prototype.writeUInt16LE=function(t,n,r){return t=+t,n|=0,r||T(this,t,n,2,65535,0),a.TYPED_ARRAY_SUPPORT?(this[n]=255&t,this[n+1]=t>>>8):M(this,t,n,!0),n+2},a.prototype.writeUInt16BE=function(t,n,r){return t=+t,n|=0,r||T(this,t,n,2,65535,0),a.TYPED_ARRAY_SUPPORT?(this[n]=t>>>8,this[n+1]=255&t):M(this,t,n,!1),n+2},a.prototype.writeUInt32LE=function(t,n,r){return t=+t,n|=0,r||T(this,t,n,4,4294967295,0),a.TYPED_ARRAY_SUPPORT?(this[n+3]=t>>>24,this[n+2]=t>>>16,this[n+1]=t>>>8,this[n]=255&t):U(this,t,n,!0),n+4},a.prototype.writeUInt32BE=function(t,n,r){return t=+t,n|=0,r||T(this,t,n,4,4294967295,0),a.TYPED_ARRAY_SUPPORT?(this[n]=t>>>24,this[n+1]=t>>>16,this[n+2]=t>>>8,this[n+3]=255&t):U(this,t,n,!1),n+4},a.prototype.writeIntLE=function(t,n,r,e){if(t=+t,n|=0,!e){var i=Math.pow(2,8*r-1);T(this,t,n,r,i-1,-i)}var u=0,o=1,f=0;for(this[n]=255&t;++u>0)-f&255;return n+r},a.prototype.writeIntBE=function(t,n,r,e){if(t=+t,n|=0,!e){var i=Math.pow(2,8*r-1);T(this,t,n,r,i-1,-i)}var u=r-1,o=1,f=0;for(this[n+u]=255&t;--u>=0&&(o*=256);)t<0&&0===f&&0!==this[n+u+1]&&(f=1),this[n+u]=(t/o>>0)-f&255;return n+r},a.prototype.writeInt8=function(t,n,r){return t=+t,n|=0,r||T(this,t,n,1,127,-128),a.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[n]=255&t,n+1},a.prototype.writeInt16LE=function(t,n,r){return t=+t,n|=0,r||T(this,t,n,2,32767,-32768),a.TYPED_ARRAY_SUPPORT?(this[n]=255&t,this[n+1]=t>>>8):M(this,t,n,!0),n+2},a.prototype.writeInt16BE=function(t,n,r){return t=+t,n|=0,r||T(this,t,n,2,32767,-32768),a.TYPED_ARRAY_SUPPORT?(this[n]=t>>>8,this[n+1]=255&t):M(this,t,n,!1),n+2},a.prototype.writeInt32LE=function(t,n,r){return t=+t,n|=0,r||T(this,t,n,4,2147483647,-2147483648),a.TYPED_ARRAY_SUPPORT?(this[n]=255&t,this[n+1]=t>>>8,this[n+2]=t>>>16,this[n+3]=t>>>24):U(this,t,n,!0),n+4},a.prototype.writeInt32BE=function(t,n,r){return t=+t,n|=0,r||T(this,t,n,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),a.TYPED_ARRAY_SUPPORT?(this[n]=t>>>24,this[n+1]=t>>>16,this[n+2]=t>>>8,this[n+3]=255&t):U(this,t,n,!1),n+4},a.prototype.writeFloatLE=function(t,n,r){return k(this,t,n,!0,r)},a.prototype.writeFloatBE=function(t,n,r){return k(this,t,n,!1,r)},a.prototype.writeDoubleLE=function(t,n,r){return D(this,t,n,!0,r)},a.prototype.writeDoubleBE=function(t,n,r){return D(this,t,n,!1,r)},a.prototype.copy=function(t,n,r,e){if(r||(r=0),e||0===e||(e=this.length),n>=t.length&&(n=t.length),n||(n=0),e>0&&e=this.length)throw new RangeError("sourceStart out of bounds");if(e<0)throw new RangeError("sourceEnd out of bounds");e>this.length&&(e=this.length),t.length-n=0;--i)t[i+n]=this[i+r];else if(u<1e3||!a.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(u=n;u55295&&r<57344){if(!i){if(r>56319){(n-=3)>-1&&u.push(239,191,189);continue}if(o+1===e){(n-=3)>-1&&u.push(239,191,189);continue}i=r;continue}if(r<56320){(n-=3)>-1&&u.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(n-=3)>-1&&u.push(239,191,189);if(i=null,r<128){if((n-=1)<0)break;u.push(r)}else if(r<2048){if((n-=2)<0)break;u.push(r>>6|192,63&r|128)}else if(r<65536){if((n-=3)<0)break;u.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((n-=4)<0)break;u.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return u}function N(t){return e.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(C,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function W(t,n,r,e){for(var i=0;i=n.length||i>=t.length);++i)n[i+r]=t[i];return i}}).call(this,r(2))},function(t,n,r){"use strict";n.byteLength=function(t){var n=c(t),r=n[0],e=n[1];return 3*(r+e)/4-e},n.toByteArray=function(t){for(var n,r=c(t),e=r[0],o=r[1],f=new u(function(t,n,r){return 3*(n+r)/4-r}(0,e,o)),a=0,s=o>0?e-4:e,l=0;l>16&255,f[a++]=n>>8&255,f[a++]=255&n;2===o&&(n=i[t.charCodeAt(l)]<<2|i[t.charCodeAt(l+1)]>>4,f[a++]=255&n);1===o&&(n=i[t.charCodeAt(l)]<<10|i[t.charCodeAt(l+1)]<<4|i[t.charCodeAt(l+2)]>>2,f[a++]=n>>8&255,f[a++]=255&n);return f},n.fromByteArray=function(t){for(var n,r=t.length,i=r%3,u=[],o=0,f=r-i;of?f:o+16383));1===i?(n=t[r-1],u.push(e[n>>2]+e[n<<4&63]+"==")):2===i&&(n=(t[r-2]<<8)+t[r-1],u.push(e[n>>10]+e[n>>4&63]+e[n<<2&63]+"="));return u.join("")};for(var e=[],i=[],u="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f=0,a=o.length;f0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=n),[r,r===n?0:4-r%4]}function s(t){return e[t>>18&63]+e[t>>12&63]+e[t>>6&63]+e[63&t]}function l(t,n,r){for(var e,i=[],u=n;u>1,s=-7,l=r?i-1:0,h=r?-1:1,p=t[n+l];for(l+=h,u=p&(1<<-s)-1,p>>=-s,s+=f;s>0;u=256*u+t[n+l],l+=h,s-=8);for(o=u&(1<<-s)-1,u>>=-s,s+=e;s>0;o=256*o+t[n+l],l+=h,s-=8);if(0===u)u=1-c;else{if(u===a)return o?NaN:1/0*(p?-1:1);o+=Math.pow(2,e),u-=c}return(p?-1:1)*o*Math.pow(2,u-e)},n.write=function(t,n,r,e,i,u){var o,f,a,c=8*u-i-1,s=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=e?0:u-1,v=e?1:-1,g=n<0||0===n&&1/n<0?1:0;for(n=Math.abs(n),isNaN(n)||n===1/0?(f=isNaN(n)?1:0,o=s):(o=Math.floor(Math.log(n)/Math.LN2),n*(a=Math.pow(2,-o))<1&&(o--,a*=2),(n+=o+l>=1?h/a:h*Math.pow(2,1-l))*a>=2&&(o++,a/=2),o+l>=s?(f=0,o=s):o+l>=1?(f=(n*a-1)*Math.pow(2,i),o+=l):(f=n*Math.pow(2,l-1)*Math.pow(2,i),o=0));i>=8;t[r+p]=255&f,p+=v,f/=256,i-=8);for(o=o<0;t[r+p]=255&o,p+=v,o/=256,c-=8);t[r+p-v]|=128*g}},function(t,n){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,n,r){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var e=function(t){return t&&t.__esModule?t:{default:t}}(r(5));var i={computeBoundings:function(t,n){var r=t.readUInt32LE(12),i=t.slice(20,20+r),u=JSON.parse(i.toString()),o=20+r,f=t.readUInt32LE(o),a=t.slice(o+8,o+8+f);return e.default.computeBoundings(u,[a],n)}};n.default=i,t.exports=n.default}])}); +var r=n(13),i=n(14),o=n(15);function a(){return u.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(t,e){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|t}function d(t,e){if(u.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var r=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return F(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return H(t).length;default:if(r)return F(t).length;e=(""+e).toLowerCase(),r=!0}}function m(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function g(t,e,n,r,i){if(0===t.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=i?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(i)return-1;n=t.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof e&&(e=u.from(e,r)),u.isBuffer(e))return 0===e.length?-1:v(t,e,n,r,i);if("number"==typeof e)return e&=255,u.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):v(t,[e],n,r,i);throw new TypeError("val must be string, number or Buffer")}function v(t,e,n,r,i){var o,a=1,s=t.length,u=e.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(t.length<2||e.length<2)return-1;a=2,s/=2,u/=2,n/=2}function c(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}if(i){var l=-1;for(o=n;os&&(n=s-u),o=n;o>=0;o--){for(var h=!0,f=0;fi&&(r=i):r=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var a=0;a>8,i=n%256,o.push(i),o.push(r);return o}(e,t.length-n),t,n,r)}function E(t,e,n){return 0===e&&n===t.length?r.fromByteArray(t):r.fromByteArray(t.slice(e,n))}function S(t,e,n){n=Math.min(t.length,n);for(var r=[],i=e;i239?4:c>223?3:c>191?2:1;if(i+h<=n)switch(h){case 1:c<128&&(l=c);break;case 2:128==(192&(o=t[i+1]))&&(u=(31&c)<<6|63&o)>127&&(l=u);break;case 3:o=t[i+1],a=t[i+2],128==(192&o)&&128==(192&a)&&(u=(15&c)<<12|(63&o)<<6|63&a)>2047&&(u<55296||u>57343)&&(l=u);break;case 4:o=t[i+1],a=t[i+2],s=t[i+3],128==(192&o)&&128==(192&a)&&128==(192&s)&&(u=(15&c)<<18|(63&o)<<12|(63&a)<<6|63&s)>65535&&u<1114112&&(l=u)}null===l?(l=65533,h=1):l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l),i+=h}return function(t){var e=t.length;if(e<=T)return String.fromCharCode.apply(String,t);var n="",r=0;for(;rthis.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return R(this,e,n);case"utf8":case"utf-8":return S(this,e,n);case"ascii":return A(this,e,n);case"latin1":case"binary":return L(this,e,n);case"base64":return E(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}.apply(this,arguments)},u.prototype.equals=function(t){if(!u.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===u.compare(this,t)},u.prototype.inspect=function(){var t="",n=e.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(t+=" ... ")),""},u.prototype.compare=function(t,e,n,r,i){if(!u.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),e<0||n>t.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&e>=n)return 0;if(r>=i)return-1;if(e>=n)return 1;if(e>>>=0,n>>>=0,r>>>=0,i>>>=0,this===t)return 0;for(var o=i-r,a=n-e,s=Math.min(o,a),c=this.slice(r,i),l=t.slice(e,n),h=0;hi)&&(n=i),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return y(this,t,e,n);case"utf8":case"utf-8":return x(this,t,e,n);case"ascii":return b(this,t,e,n);case"latin1":case"binary":return _(this,t,e,n);case"base64":return w(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return M(this,t,e,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},u.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var T=4096;function A(t,e,n){var r="";n=Math.min(t.length,n);for(var i=e;ir)&&(n=r);for(var i="",o=e;on)throw new RangeError("Trying to access beyond buffer length")}function O(t,e,n,r,i,o){if(!u.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function I(t,e,n,r){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-n,2);i>>8*(r?i:1-i)}function D(t,e,n,r){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-n,4);i>>8*(r?i:3-i)&255}function B(t,e,n,r,i,o){if(n+r>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function N(t,e,n,r,o){return o||B(t,0,n,4),i.write(t,e,n,r,23,4),n+4}function U(t,e,n,r,o){return o||B(t,0,n,8),i.write(t,e,n,r,52,8),n+8}u.prototype.slice=function(t,e){var n,r=this.length;if(t=~~t,e=void 0===e?r:~~e,t<0?(t+=r)<0&&(t=0):t>r&&(t=r),e<0?(e+=r)<0&&(e=0):e>r&&(e=r),e0&&(i*=256);)r+=this[t+--e]*i;return r},u.prototype.readUInt8=function(t,e){return e||C(t,1,this.length),this[t]},u.prototype.readUInt16LE=function(t,e){return e||C(t,2,this.length),this[t]|this[t+1]<<8},u.prototype.readUInt16BE=function(t,e){return e||C(t,2,this.length),this[t]<<8|this[t+1]},u.prototype.readUInt32LE=function(t,e){return e||C(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},u.prototype.readUInt32BE=function(t,e){return e||C(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},u.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||C(t,e,this.length);for(var r=this[t],i=1,o=0;++o=(i*=128)&&(r-=Math.pow(2,8*e)),r},u.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||C(t,e,this.length);for(var r=e,i=1,o=this[t+--r];r>0&&(i*=256);)o+=this[t+--r]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*e)),o},u.prototype.readInt8=function(t,e){return e||C(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},u.prototype.readInt16LE=function(t,e){e||C(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt16BE=function(t,e){e||C(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},u.prototype.readInt32LE=function(t,e){return e||C(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},u.prototype.readInt32BE=function(t,e){return e||C(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},u.prototype.readFloatLE=function(t,e){return e||C(t,4,this.length),i.read(this,t,!0,23,4)},u.prototype.readFloatBE=function(t,e){return e||C(t,4,this.length),i.read(this,t,!1,23,4)},u.prototype.readDoubleLE=function(t,e){return e||C(t,8,this.length),i.read(this,t,!0,52,8)},u.prototype.readDoubleBE=function(t,e){return e||C(t,8,this.length),i.read(this,t,!1,52,8)},u.prototype.writeUIntLE=function(t,e,n,r){(t=+t,e|=0,n|=0,r)||O(this,t,e,n,Math.pow(2,8*n)-1,0);var i=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+i]=t/o&255;return e+n},u.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||O(this,t,e,1,255,0),u.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},u.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||O(this,t,e,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):I(this,t,e,!0),e+2},u.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||O(this,t,e,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):I(this,t,e,!1),e+2},u.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||O(this,t,e,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):D(this,t,e,!0),e+4},u.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||O(this,t,e,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):D(this,t,e,!1),e+4},u.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);O(this,t,e,n,i-1,-i)}var o=0,a=1,s=0;for(this[e]=255&t;++o>0)-s&255;return e+n},u.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e|=0,!r){var i=Math.pow(2,8*n-1);O(this,t,e,n,i-1,-i)}var o=n-1,a=1,s=0;for(this[e+o]=255&t;--o>=0&&(a*=256);)t<0&&0===s&&0!==this[e+o+1]&&(s=1),this[e+o]=(t/a>>0)-s&255;return e+n},u.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||O(this,t,e,1,127,-128),u.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},u.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||O(this,t,e,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):I(this,t,e,!0),e+2},u.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||O(this,t,e,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):I(this,t,e,!1),e+2},u.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||O(this,t,e,4,2147483647,-2147483648),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):D(this,t,e,!0),e+4},u.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||O(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):D(this,t,e,!1),e+4},u.prototype.writeFloatLE=function(t,e,n){return N(this,t,e,!0,n)},u.prototype.writeFloatBE=function(t,e,n){return N(this,t,e,!1,n)},u.prototype.writeDoubleLE=function(t,e,n){return U(this,t,e,!0,n)},u.prototype.writeDoubleBE=function(t,e,n){return U(this,t,e,!1,n)},u.prototype.copy=function(t,e,n,r){if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;--i)t[i+e]=this[i+n];else if(o<1e3||!u.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(o=e;o55295&&n<57344){if(!i){if(n>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===r){(e-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(e-=3)>-1&&o.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((e-=1)<0)break;o.push(n)}else if(n<2048){if((e-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function H(t){return r.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(z,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function k(t,e,n,r){for(var i=0;i=e.length||i>=t.length);++i)e[i+n]=t[i];return i}}).call(this,n(2))},function(t,e,n){"use strict";e.byteLength=function(t){var e=c(t),n=e[0],r=e[1];return 3*(n+r)/4-r},e.toByteArray=function(t){for(var e,n=c(t),r=n[0],a=n[1],s=new o(function(t,e,n){return 3*(e+n)/4-n}(0,r,a)),u=0,l=a>0?r-4:r,h=0;h>16&255,s[u++]=e>>8&255,s[u++]=255&e;2===a&&(e=i[t.charCodeAt(h)]<<2|i[t.charCodeAt(h+1)]>>4,s[u++]=255&e);1===a&&(e=i[t.charCodeAt(h)]<<10|i[t.charCodeAt(h+1)]<<4|i[t.charCodeAt(h+2)]>>2,s[u++]=e>>8&255,s[u++]=255&e);return s},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,o=[],a=0,s=n-i;as?s:a+16383));1===i?(e=t[n-1],o.push(r[e>>2]+r[e<<4&63]+"==")):2===i&&(e=(t[n-2]<<8)+t[n-1],o.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"="));return o.join("")};for(var r=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,u=a.length;s0)throw new Error("Invalid string. Length must be a multiple of 4");var n=t.indexOf("=");return-1===n&&(n=e),[n,n===e?0:4-n%4]}function l(t){return r[t>>18&63]+r[t>>12&63]+r[t>>6&63]+r[63&t]}function h(t,e,n){for(var r,i=[],o=e;o>1,l=-7,h=n?i-1:0,f=n?-1:1,p=t[e+h];for(h+=f,o=p&(1<<-l)-1,p>>=-l,l+=s;l>0;o=256*o+t[e+h],h+=f,l-=8);for(a=o&(1<<-l)-1,o>>=-l,l+=r;l>0;a=256*a+t[e+h],h+=f,l-=8);if(0===o)o=1-c;else{if(o===u)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,r),o-=c}return(p?-1:1)*a*Math.pow(2,o-r)},e.write=function(t,e,n,r,i,o){var a,s,u,c=8*o-i-1,l=(1<>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:o-1,d=r?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=l):(a=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-a))<1&&(a--,u*=2),(e+=a+h>=1?f/u:f*Math.pow(2,1-h))*u>=2&&(a++,u/=2),a+h>=l?(s=0,a=l):a+h>=1?(s=(e*u-1)*Math.pow(2,i),a+=h):(s=e*Math.pow(2,h-1)*Math.pow(2,i),a=0));i>=8;t[n+p]=255&s,p+=d,s/=256,i-=8);for(a=a<0;t[n+p]=255&a,p+=d,a/=256,c-=8);t[n+p-d]|=128*m}},function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},function(t,e,n){"use strict";function r(){}n.r(e),n.d(e,"WebGLMultisampleRenderTarget",function(){return Ze}),n.d(e,"WebGLRenderTargetCube",function(){return Qe}),n.d(e,"WebGLRenderTarget",function(){return Je}),n.d(e,"WebGLRenderer",function(){return _i}),n.d(e,"ShaderLib",function(){return fn}),n.d(e,"UniformsLib",function(){return hn}),n.d(e,"UniformsUtils",function(){return un}),n.d(e,"ShaderChunk",function(){return on}),n.d(e,"FogExp2",function(){return wi}),n.d(e,"Fog",function(){return Mi}),n.d(e,"Scene",function(){return Ei}),n.d(e,"Sprite",function(){return Li}),n.d(e,"LOD",function(){return Ri}),n.d(e,"SkinnedMesh",function(){return Pi}),n.d(e,"Skeleton",function(){return Ci}),n.d(e,"Bone",function(){return Oi}),n.d(e,"Mesh",function(){return Xn}),n.d(e,"LineSegments",function(){return Bi}),n.d(e,"LineLoop",function(){return Ni}),n.d(e,"Line",function(){return Di}),n.d(e,"Points",function(){return zi}),n.d(e,"Group",function(){return fi}),n.d(e,"VideoTexture",function(){return Gi}),n.d(e,"DataTexture",function(){return Ke}),n.d(e,"DataTexture2DArray",function(){return Qn}),n.d(e,"DataTexture3D",function(){return Kn}),n.d(e,"CompressedTexture",function(){return Fi}),n.d(e,"CubeTexture",function(){return Zn}),n.d(e,"CanvasTexture",function(){return Hi}),n.d(e,"DepthTexture",function(){return ki}),n.d(e,"Texture",function(){return Ye}),n.d(e,"AnimationLoader",function(){return Da}),n.d(e,"CompressedTextureLoader",function(){return Ba}),n.d(e,"DataTextureLoader",function(){return Na}),n.d(e,"CubeTextureLoader",function(){return za}),n.d(e,"TextureLoader",function(){return Ga}),n.d(e,"ObjectLoader",function(){return Es}),n.d(e,"MaterialLoader",function(){return bs}),n.d(e,"BufferGeometryLoader",function(){return ws}),n.d(e,"DefaultLoadingManager",function(){return Ca}),n.d(e,"LoadingManager",function(){return Pa}),n.d(e,"ImageLoader",function(){return Ua}),n.d(e,"ImageBitmapLoader",function(){return Rs}),n.d(e,"FontLoader",function(){return Is}),n.d(e,"FileLoader",function(){return Ia}),n.d(e,"Loader",function(){return Ds}),n.d(e,"LoaderUtils",function(){return _s}),n.d(e,"Cache",function(){return Ra}),n.d(e,"AudioLoader",function(){return Ns}),n.d(e,"SpotLightShadow",function(){return fs}),n.d(e,"SpotLight",function(){return ps}),n.d(e,"PointLight",function(){return ds}),n.d(e,"RectAreaLight",function(){return xs}),n.d(e,"HemisphereLight",function(){return ls}),n.d(e,"DirectionalLightShadow",function(){return gs}),n.d(e,"DirectionalLight",function(){return vs}),n.d(e,"AmbientLight",function(){return ys}),n.d(e,"LightShadow",function(){return hs}),n.d(e,"Light",function(){return cs}),n.d(e,"StereoCamera",function(){return Us}),n.d(e,"PerspectiveCamera",function(){return di}),n.d(e,"OrthographicCamera",function(){return ms}),n.d(e,"CubeCamera",function(){return zs}),n.d(e,"ArrayCamera",function(){return mi}),n.d(e,"Camera",function(){return pi}),n.d(e,"AudioListener",function(){return Fs}),n.d(e,"PositionalAudio",function(){return ks}),n.d(e,"AudioContext",function(){return Bs}),n.d(e,"AudioAnalyser",function(){return js}),n.d(e,"Audio",function(){return Hs}),n.d(e,"VectorKeyframeTrack",function(){return Ta}),n.d(e,"StringKeyframeTrack",function(){return Sa}),n.d(e,"QuaternionKeyframeTrack",function(){return Ea}),n.d(e,"NumberKeyframeTrack",function(){return wa}),n.d(e,"ColorKeyframeTrack",function(){return _a}),n.d(e,"BooleanKeyframeTrack",function(){return ba}),n.d(e,"PropertyMixer",function(){return Vs}),n.d(e,"PropertyBinding",function(){return Xs}),n.d(e,"KeyframeTrack",function(){return xa}),n.d(e,"AnimationUtils",function(){return da}),n.d(e,"AnimationObjectGroup",function(){return Js}),n.d(e,"AnimationMixer",function(){return Qs}),n.d(e,"AnimationClip",function(){return Aa}),n.d(e,"Uniform",function(){return Ks}),n.d(e,"InstancedBufferGeometry",function(){return $s}),n.d(e,"BufferGeometry",function(){return Bn}),n.d(e,"Geometry",function(){return _n}),n.d(e,"InterleavedBufferAttribute",function(){return Ti}),n.d(e,"InstancedInterleavedBuffer",function(){return tu}),n.d(e,"InterleavedBuffer",function(){return Si}),n.d(e,"InstancedBufferAttribute",function(){return eu}),n.d(e,"Face3",function(){return mn}),n.d(e,"Object3D",function(){return xn}),n.d(e,"Raycaster",function(){return nu}),n.d(e,"Layers",function(){return vn}),n.d(e,"EventDispatcher",function(){return r}),n.d(e,"Clock",function(){return Gs}),n.d(e,"QuaternionLinearInterpolant",function(){return Ma}),n.d(e,"LinearInterpolant",function(){return va}),n.d(e,"DiscreteInterpolant",function(){return ya}),n.d(e,"CubicInterpolant",function(){return ga}),n.d(e,"Interpolant",function(){return ma}),n.d(e,"Triangle",function(){return qn}),n.d(e,"Math",function(){return Fe}),n.d(e,"Spherical",function(){return ou}),n.d(e,"Cylindrical",function(){return au}),n.d(e,"Plane",function(){return en}),n.d(e,"Frustum",function(){return nn}),n.d(e,"Sphere",function(){return tn}),n.d(e,"Ray",function(){return Wn}),n.d(e,"Matrix4",function(){return rn}),n.d(e,"Matrix3",function(){return Ve}),n.d(e,"Box3",function(){return $e}),n.d(e,"Box2",function(){return su}),n.d(e,"Line3",function(){return uu}),n.d(e,"Euler",function(){return gn}),n.d(e,"Vector4",function(){return Xe}),n.d(e,"Vector3",function(){return je}),n.d(e,"Vector2",function(){return He}),n.d(e,"Quaternion",function(){return ke}),n.d(e,"Color",function(){return ln}),n.d(e,"ImmediateRenderObject",function(){return cu}),n.d(e,"VertexNormalsHelper",function(){return lu}),n.d(e,"SpotLightHelper",function(){return hu}),n.d(e,"SkeletonHelper",function(){return fu}),n.d(e,"PointLightHelper",function(){return pu}),n.d(e,"RectAreaLightHelper",function(){return du}),n.d(e,"HemisphereLightHelper",function(){return mu}),n.d(e,"GridHelper",function(){return gu}),n.d(e,"PolarGridHelper",function(){return vu}),n.d(e,"PositionalAudioHelper",function(){return yu}),n.d(e,"FaceNormalsHelper",function(){return xu}),n.d(e,"DirectionalLightHelper",function(){return bu}),n.d(e,"CameraHelper",function(){return _u}),n.d(e,"BoxHelper",function(){return wu}),n.d(e,"Box3Helper",function(){return Mu}),n.d(e,"PlaneHelper",function(){return Eu}),n.d(e,"ArrowHelper",function(){return Su}),n.d(e,"AxesHelper",function(){return Tu}),n.d(e,"Shape",function(){return us}),n.d(e,"Path",function(){return ss}),n.d(e,"ShapePath",function(){return Ps}),n.d(e,"Font",function(){return Cs}),n.d(e,"CurvePath",function(){return as}),n.d(e,"Curve",function(){return Fa}),n.d(e,"ImageUtils",function(){return We}),n.d(e,"ShapeUtils",function(){return Co}),n.d(e,"WebGLUtils",function(){return hi}),n.d(e,"WireframeGeometry",function(){return ji}),n.d(e,"ParametricGeometry",function(){return Vi}),n.d(e,"ParametricBufferGeometry",function(){return Wi}),n.d(e,"TetrahedronGeometry",function(){return Xi}),n.d(e,"TetrahedronBufferGeometry",function(){return Ji}),n.d(e,"OctahedronGeometry",function(){return Zi}),n.d(e,"OctahedronBufferGeometry",function(){return Qi}),n.d(e,"IcosahedronGeometry",function(){return Ki}),n.d(e,"IcosahedronBufferGeometry",function(){return $i}),n.d(e,"DodecahedronGeometry",function(){return to}),n.d(e,"DodecahedronBufferGeometry",function(){return eo}),n.d(e,"PolyhedronGeometry",function(){return qi}),n.d(e,"PolyhedronBufferGeometry",function(){return Yi}),n.d(e,"TubeGeometry",function(){return no}),n.d(e,"TubeBufferGeometry",function(){return ro}),n.d(e,"TorusKnotGeometry",function(){return io}),n.d(e,"TorusKnotBufferGeometry",function(){return oo}),n.d(e,"TorusGeometry",function(){return ao}),n.d(e,"TorusBufferGeometry",function(){return so}),n.d(e,"TextGeometry",function(){return zo}),n.d(e,"TextBufferGeometry",function(){return Go}),n.d(e,"SphereGeometry",function(){return Fo}),n.d(e,"SphereBufferGeometry",function(){return Ho}),n.d(e,"RingGeometry",function(){return ko}),n.d(e,"RingBufferGeometry",function(){return jo}),n.d(e,"PlaneGeometry",function(){return zn}),n.d(e,"PlaneBufferGeometry",function(){return Gn}),n.d(e,"LatheGeometry",function(){return Vo}),n.d(e,"LatheBufferGeometry",function(){return Wo}),n.d(e,"ShapeGeometry",function(){return qo}),n.d(e,"ShapeBufferGeometry",function(){return Yo}),n.d(e,"ExtrudeGeometry",function(){return Do}),n.d(e,"ExtrudeBufferGeometry",function(){return Bo}),n.d(e,"EdgesGeometry",function(){return Jo}),n.d(e,"ConeGeometry",function(){return Ko}),n.d(e,"ConeBufferGeometry",function(){return $o}),n.d(e,"CylinderGeometry",function(){return Zo}),n.d(e,"CylinderBufferGeometry",function(){return Qo}),n.d(e,"CircleGeometry",function(){return ta}),n.d(e,"CircleBufferGeometry",function(){return ea}),n.d(e,"BoxGeometry",function(){return Nn}),n.d(e,"CubeGeometry",function(){return Nn}),n.d(e,"BoxBufferGeometry",function(){return Un}),n.d(e,"ShadowMaterial",function(){return ra}),n.d(e,"SpriteMaterial",function(){return Ai}),n.d(e,"RawShaderMaterial",function(){return ia}),n.d(e,"ShaderMaterial",function(){return Vn}),n.d(e,"PointsMaterial",function(){return Ui}),n.d(e,"MeshPhysicalMaterial",function(){return aa}),n.d(e,"MeshStandardMaterial",function(){return oa}),n.d(e,"MeshPhongMaterial",function(){return sa}),n.d(e,"MeshToonMaterial",function(){return ua}),n.d(e,"MeshNormalMaterial",function(){return ca}),n.d(e,"MeshLambertMaterial",function(){return la}),n.d(e,"MeshDepthMaterial",function(){return si}),n.d(e,"MeshDistanceMaterial",function(){return ui}),n.d(e,"MeshBasicMaterial",function(){return Yn}),n.d(e,"MeshMatcapMaterial",function(){return ha}),n.d(e,"LineDashedMaterial",function(){return fa}),n.d(e,"LineBasicMaterial",function(){return Ii}),n.d(e,"Material",function(){return Hn}),n.d(e,"Float64BufferAttribute",function(){return Cn}),n.d(e,"Float32BufferAttribute",function(){return Pn}),n.d(e,"Uint32BufferAttribute",function(){return Rn}),n.d(e,"Int32BufferAttribute",function(){return Ln}),n.d(e,"Uint16BufferAttribute",function(){return An}),n.d(e,"Int16BufferAttribute",function(){return Tn}),n.d(e,"Uint8ClampedBufferAttribute",function(){return Sn}),n.d(e,"Uint8BufferAttribute",function(){return En}),n.d(e,"Int8BufferAttribute",function(){return Mn}),n.d(e,"BufferAttribute",function(){return wn}),n.d(e,"ArcCurve",function(){return ka}),n.d(e,"CatmullRomCurve3",function(){return Xa}),n.d(e,"CubicBezierCurve",function(){return Ka}),n.d(e,"CubicBezierCurve3",function(){return $a}),n.d(e,"EllipseCurve",function(){return Ha}),n.d(e,"LineCurve",function(){return ts}),n.d(e,"LineCurve3",function(){return es}),n.d(e,"QuadraticBezierCurve",function(){return ns}),n.d(e,"QuadraticBezierCurve3",function(){return rs}),n.d(e,"SplineCurve",function(){return is}),n.d(e,"REVISION",function(){return o}),n.d(e,"MOUSE",function(){return a}),n.d(e,"CullFaceNone",function(){return s}),n.d(e,"CullFaceBack",function(){return u}),n.d(e,"CullFaceFront",function(){return c}),n.d(e,"CullFaceFrontBack",function(){return l}),n.d(e,"FrontFaceDirectionCW",function(){return h}),n.d(e,"FrontFaceDirectionCCW",function(){return f}),n.d(e,"BasicShadowMap",function(){return p}),n.d(e,"PCFShadowMap",function(){return d}),n.d(e,"PCFSoftShadowMap",function(){return m}),n.d(e,"FrontSide",function(){return g}),n.d(e,"BackSide",function(){return v}),n.d(e,"DoubleSide",function(){return y}),n.d(e,"FlatShading",function(){return x}),n.d(e,"SmoothShading",function(){return b}),n.d(e,"NoColors",function(){return _}),n.d(e,"FaceColors",function(){return w}),n.d(e,"VertexColors",function(){return M}),n.d(e,"NoBlending",function(){return E}),n.d(e,"NormalBlending",function(){return S}),n.d(e,"AdditiveBlending",function(){return T}),n.d(e,"SubtractiveBlending",function(){return A}),n.d(e,"MultiplyBlending",function(){return L}),n.d(e,"CustomBlending",function(){return R}),n.d(e,"AddEquation",function(){return P}),n.d(e,"SubtractEquation",function(){return C}),n.d(e,"ReverseSubtractEquation",function(){return O}),n.d(e,"MinEquation",function(){return I}),n.d(e,"MaxEquation",function(){return D}),n.d(e,"ZeroFactor",function(){return B}),n.d(e,"OneFactor",function(){return N}),n.d(e,"SrcColorFactor",function(){return U}),n.d(e,"OneMinusSrcColorFactor",function(){return z}),n.d(e,"SrcAlphaFactor",function(){return G}),n.d(e,"OneMinusSrcAlphaFactor",function(){return F}),n.d(e,"DstAlphaFactor",function(){return H}),n.d(e,"OneMinusDstAlphaFactor",function(){return k}),n.d(e,"DstColorFactor",function(){return j}),n.d(e,"OneMinusDstColorFactor",function(){return V}),n.d(e,"SrcAlphaSaturateFactor",function(){return W}),n.d(e,"NeverDepth",function(){return q}),n.d(e,"AlwaysDepth",function(){return Y}),n.d(e,"LessDepth",function(){return X}),n.d(e,"LessEqualDepth",function(){return J}),n.d(e,"EqualDepth",function(){return Z}),n.d(e,"GreaterEqualDepth",function(){return Q}),n.d(e,"GreaterDepth",function(){return K}),n.d(e,"NotEqualDepth",function(){return $}),n.d(e,"MultiplyOperation",function(){return tt}),n.d(e,"MixOperation",function(){return et}),n.d(e,"AddOperation",function(){return nt}),n.d(e,"NoToneMapping",function(){return rt}),n.d(e,"LinearToneMapping",function(){return it}),n.d(e,"ReinhardToneMapping",function(){return ot}),n.d(e,"Uncharted2ToneMapping",function(){return at}),n.d(e,"CineonToneMapping",function(){return st}),n.d(e,"ACESFilmicToneMapping",function(){return ut}),n.d(e,"UVMapping",function(){return ct}),n.d(e,"CubeReflectionMapping",function(){return lt}),n.d(e,"CubeRefractionMapping",function(){return ht}),n.d(e,"EquirectangularReflectionMapping",function(){return ft}),n.d(e,"EquirectangularRefractionMapping",function(){return pt}),n.d(e,"SphericalReflectionMapping",function(){return dt}),n.d(e,"CubeUVReflectionMapping",function(){return mt}),n.d(e,"CubeUVRefractionMapping",function(){return gt}),n.d(e,"RepeatWrapping",function(){return vt}),n.d(e,"ClampToEdgeWrapping",function(){return yt}),n.d(e,"MirroredRepeatWrapping",function(){return xt}),n.d(e,"NearestFilter",function(){return bt}),n.d(e,"NearestMipMapNearestFilter",function(){return _t}),n.d(e,"NearestMipMapLinearFilter",function(){return wt}),n.d(e,"LinearFilter",function(){return Mt}),n.d(e,"LinearMipMapNearestFilter",function(){return Et}),n.d(e,"LinearMipMapLinearFilter",function(){return St}),n.d(e,"UnsignedByteType",function(){return Tt}),n.d(e,"ByteType",function(){return At}),n.d(e,"ShortType",function(){return Lt}),n.d(e,"UnsignedShortType",function(){return Rt}),n.d(e,"IntType",function(){return Pt}),n.d(e,"UnsignedIntType",function(){return Ct}),n.d(e,"FloatType",function(){return Ot}),n.d(e,"HalfFloatType",function(){return It}),n.d(e,"UnsignedShort4444Type",function(){return Dt}),n.d(e,"UnsignedShort5551Type",function(){return Bt}),n.d(e,"UnsignedShort565Type",function(){return Nt}),n.d(e,"UnsignedInt248Type",function(){return Ut}),n.d(e,"AlphaFormat",function(){return zt}),n.d(e,"RGBFormat",function(){return Gt}),n.d(e,"RGBAFormat",function(){return Ft}),n.d(e,"LuminanceFormat",function(){return Ht}),n.d(e,"LuminanceAlphaFormat",function(){return kt}),n.d(e,"RGBEFormat",function(){return jt}),n.d(e,"DepthFormat",function(){return Vt}),n.d(e,"DepthStencilFormat",function(){return Wt}),n.d(e,"RedFormat",function(){return qt}),n.d(e,"RGB_S3TC_DXT1_Format",function(){return Yt}),n.d(e,"RGBA_S3TC_DXT1_Format",function(){return Xt}),n.d(e,"RGBA_S3TC_DXT3_Format",function(){return Jt}),n.d(e,"RGBA_S3TC_DXT5_Format",function(){return Zt}),n.d(e,"RGB_PVRTC_4BPPV1_Format",function(){return Qt}),n.d(e,"RGB_PVRTC_2BPPV1_Format",function(){return Kt}),n.d(e,"RGBA_PVRTC_4BPPV1_Format",function(){return $t}),n.d(e,"RGBA_PVRTC_2BPPV1_Format",function(){return te}),n.d(e,"RGB_ETC1_Format",function(){return ee}),n.d(e,"RGBA_ASTC_4x4_Format",function(){return ne}),n.d(e,"RGBA_ASTC_5x4_Format",function(){return re}),n.d(e,"RGBA_ASTC_5x5_Format",function(){return ie}),n.d(e,"RGBA_ASTC_6x5_Format",function(){return oe}),n.d(e,"RGBA_ASTC_6x6_Format",function(){return ae}),n.d(e,"RGBA_ASTC_8x5_Format",function(){return se}),n.d(e,"RGBA_ASTC_8x6_Format",function(){return ue}),n.d(e,"RGBA_ASTC_8x8_Format",function(){return ce}),n.d(e,"RGBA_ASTC_10x5_Format",function(){return le}),n.d(e,"RGBA_ASTC_10x6_Format",function(){return he}),n.d(e,"RGBA_ASTC_10x8_Format",function(){return fe}),n.d(e,"RGBA_ASTC_10x10_Format",function(){return pe}),n.d(e,"RGBA_ASTC_12x10_Format",function(){return de}),n.d(e,"RGBA_ASTC_12x12_Format",function(){return me}),n.d(e,"LoopOnce",function(){return ge}),n.d(e,"LoopRepeat",function(){return ve}),n.d(e,"LoopPingPong",function(){return ye}),n.d(e,"InterpolateDiscrete",function(){return xe}),n.d(e,"InterpolateLinear",function(){return be}),n.d(e,"InterpolateSmooth",function(){return _e}),n.d(e,"ZeroCurvatureEnding",function(){return we}),n.d(e,"ZeroSlopeEnding",function(){return Me}),n.d(e,"WrapAroundEnding",function(){return Ee}),n.d(e,"TrianglesDrawMode",function(){return Se}),n.d(e,"TriangleStripDrawMode",function(){return Te}),n.d(e,"TriangleFanDrawMode",function(){return Ae}),n.d(e,"LinearEncoding",function(){return Le}),n.d(e,"sRGBEncoding",function(){return Re}),n.d(e,"GammaEncoding",function(){return Pe}),n.d(e,"RGBEEncoding",function(){return Ce}),n.d(e,"LogLuvEncoding",function(){return Oe}),n.d(e,"RGBM7Encoding",function(){return Ie}),n.d(e,"RGBM16Encoding",function(){return De}),n.d(e,"RGBDEncoding",function(){return Be}),n.d(e,"BasicDepthPacking",function(){return Ne}),n.d(e,"RGBADepthPacking",function(){return Ue}),n.d(e,"TangentSpaceNormalMap",function(){return ze}),n.d(e,"ObjectSpaceNormalMap",function(){return Ge}),n.d(e,"Face4",function(){return Au}),n.d(e,"LineStrip",function(){return Lu}),n.d(e,"LinePieces",function(){return Ru}),n.d(e,"MeshFaceMaterial",function(){return Pu}),n.d(e,"MultiMaterial",function(){return Cu}),n.d(e,"PointCloud",function(){return Ou}),n.d(e,"Particle",function(){return Iu}),n.d(e,"ParticleSystem",function(){return Du}),n.d(e,"PointCloudMaterial",function(){return Bu}),n.d(e,"ParticleBasicMaterial",function(){return Nu}),n.d(e,"ParticleSystemMaterial",function(){return Uu}),n.d(e,"Vertex",function(){return zu}),n.d(e,"DynamicBufferAttribute",function(){return Gu}),n.d(e,"Int8Attribute",function(){return Fu}),n.d(e,"Uint8Attribute",function(){return Hu}),n.d(e,"Uint8ClampedAttribute",function(){return ku}),n.d(e,"Int16Attribute",function(){return ju}),n.d(e,"Uint16Attribute",function(){return Vu}),n.d(e,"Int32Attribute",function(){return Wu}),n.d(e,"Uint32Attribute",function(){return qu}),n.d(e,"Float32Attribute",function(){return Yu}),n.d(e,"Float64Attribute",function(){return Xu}),n.d(e,"ClosedSplineCurve3",function(){return Ju}),n.d(e,"SplineCurve3",function(){return Zu}),n.d(e,"Spline",function(){return Qu}),n.d(e,"AxisHelper",function(){return Ku}),n.d(e,"BoundingBoxHelper",function(){return $u}),n.d(e,"EdgesHelper",function(){return tc}),n.d(e,"WireframeHelper",function(){return ec}),n.d(e,"XHRLoader",function(){return nc}),n.d(e,"BinaryTextureLoader",function(){return rc}),n.d(e,"GeometryUtils",function(){return ic}),n.d(e,"Projector",function(){return oc}),n.d(e,"CanvasRenderer",function(){return ac}),n.d(e,"JSONLoader",function(){return sc}),n.d(e,"SceneUtils",function(){return uc}),n.d(e,"LensFlare",function(){return cc}),void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,-52)),void 0===Number.isInteger&&(Number.isInteger=function(t){return"number"==typeof t&&isFinite(t)&&Math.floor(t)===t}),void 0===Math.sign&&(Math.sign=function(t){return t<0?-1:t>0?1:+t}),"name"in Function.prototype==!1&&Object.defineProperty(Function.prototype,"name",{get:function(){return this.toString().match(/^\s*function\s*([^\(\s]*)/)[1]}}),void 0===Object.assign&&(Object.assign=function(t){if(void 0===t||null===t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),n=1;n>8&255]+t[e>>16&255]+t[e>>24&255]+"-"+t[255&n]+t[n>>8&255]+"-"+t[n>>16&15|64]+t[n>>24&255]+"-"+t[63&r|128]+t[r>>8&255]+"-"+t[r>>16&255]+t[r>>24&255]+t[255&i]+t[i>>8&255]+t[i>>16&255]+t[i>>24&255]).toUpperCase()}}(),clamp:function(t,e,n){return Math.max(e,Math.min(n,t))},euclideanModulo:function(t,e){return(t%e+e)%e},mapLinear:function(t,e,n,r,i){return r+(t-e)*(i-r)/(n-e)},lerp:function(t,e,n){return(1-n)*t+n*e},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},degToRad:function(t){return t*Fe.DEG2RAD},radToDeg:function(t){return t*Fe.RAD2DEG},isPowerOfTwo:function(t){return 0==(t&t-1)&&0!==t},ceilPowerOfTwo:function(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))},floorPowerOfTwo:function(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}};function He(t,e){this.x=t||0,this.y=e||0}function ke(t,e,n,r){this._x=t||0,this._y=e||0,this._z=n||0,this._w=void 0!==r?r:1}function je(t,e,n){this.x=t||0,this.y=e||0,this.z=n||0}function Ve(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}Object.defineProperties(He.prototype,{width:{get:function(){return this.x},set:function(t){this.x=t}},height:{get:function(){return this.y},set:function(t){this.y=t}}}),Object.assign(He.prototype,{isVector2:!0,set:function(t,e){return this.x=t,this.y=e,this},setScalar:function(t){return this.x=t,this.y=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(t){return this.x=t.x,this.y=t.y,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)},addScalar:function(t){return this.x+=t,this.y+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)},subScalar:function(t){return this.x-=t,this.y-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this},multiply:function(t){return this.x*=t.x,this.y*=t.y,this},multiplyScalar:function(t){return this.x*=t,this.y*=t,this},divide:function(t){return this.x/=t.x,this.y/=t.y,this},divideScalar:function(t){return this.multiplyScalar(1/t)},applyMatrix3:function(t){var e=this.x,n=this.y,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6],this.y=r[1]*e+r[4]*n+r[7],this},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this},clampScalar:function(){var t=new He,e=new He;return function(n,r){return t.set(n,n),e.set(r,r),this.clamp(t,e)}}(),clampLength:function(t,e){var n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this},negate:function(){return this.x=-this.x,this.y=-this.y,this},dot:function(t){return this.x*t.x+this.y*t.y},cross:function(t){return this.x*t.y-this.y*t.x},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){var t=Math.atan2(this.y,this.x);return t<0&&(t+=2*Math.PI),t},distanceTo:function(t){return Math.sqrt(this.distanceToSquared(t))},distanceToSquared:function(t){var e=this.x-t.x,n=this.y-t.y;return e*e+n*n},manhattanDistanceTo:function(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)},setLength:function(t){return this.normalize().multiplyScalar(t)},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this},lerpVectors:function(t,e,n){return this.subVectors(e,t).multiplyScalar(n).add(t)},equals:function(t){return t.x===this.x&&t.y===this.y},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t},fromBufferAttribute:function(t,e,n){return void 0!==n&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this},rotateAround:function(t,e){var n=Math.cos(e),r=Math.sin(e),i=this.x-t.x,o=this.y-t.y;return this.x=i*n-o*r+t.x,this.y=i*r+o*n+t.y,this}}),Object.assign(ke,{slerp:function(t,e,n,r){return n.copy(t).slerp(e,r)},slerpFlat:function(t,e,n,r,i,o,a){var s=n[r+0],u=n[r+1],c=n[r+2],l=n[r+3],h=i[o+0],f=i[o+1],p=i[o+2],d=i[o+3];if(l!==d||s!==h||u!==f||c!==p){var m=1-a,g=s*h+u*f+c*p+l*d,v=g>=0?1:-1,y=1-g*g;if(y>Number.EPSILON){var x=Math.sqrt(y),b=Math.atan2(x,g*v);m=Math.sin(m*b)/x,a=Math.sin(a*b)/x}var _=a*v;if(s=s*m+h*_,u=u*m+f*_,c=c*m+p*_,l=l*m+d*_,m===1-a){var w=1/Math.sqrt(s*s+u*u+c*c+l*l);s*=w,u*=w,c*=w,l*=w}}t[e]=s,t[e+1]=u,t[e+2]=c,t[e+3]=l}}),Object.defineProperties(ke.prototype,{x:{get:function(){return this._x},set:function(t){this._x=t,this.onChangeCallback()}},y:{get:function(){return this._y},set:function(t){this._y=t,this.onChangeCallback()}},z:{get:function(){return this._z},set:function(t){this._z=t,this.onChangeCallback()}},w:{get:function(){return this._w},set:function(t){this._w=t,this.onChangeCallback()}}}),Object.assign(ke.prototype,{isQuaternion:!0,set:function(t,e,n,r){return this._x=t,this._y=e,this._z=n,this._w=r,this.onChangeCallback(),this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this.onChangeCallback(),this},setFromEuler:function(t,e){if(!t||!t.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var n=t._x,r=t._y,i=t._z,o=t.order,a=Math.cos,s=Math.sin,u=a(n/2),c=a(r/2),l=a(i/2),h=s(n/2),f=s(r/2),p=s(i/2);return"XYZ"===o?(this._x=h*c*l+u*f*p,this._y=u*f*l-h*c*p,this._z=u*c*p+h*f*l,this._w=u*c*l-h*f*p):"YXZ"===o?(this._x=h*c*l+u*f*p,this._y=u*f*l-h*c*p,this._z=u*c*p-h*f*l,this._w=u*c*l+h*f*p):"ZXY"===o?(this._x=h*c*l-u*f*p,this._y=u*f*l+h*c*p,this._z=u*c*p+h*f*l,this._w=u*c*l-h*f*p):"ZYX"===o?(this._x=h*c*l-u*f*p,this._y=u*f*l+h*c*p,this._z=u*c*p-h*f*l,this._w=u*c*l+h*f*p):"YZX"===o?(this._x=h*c*l+u*f*p,this._y=u*f*l+h*c*p,this._z=u*c*p-h*f*l,this._w=u*c*l-h*f*p):"XZY"===o&&(this._x=h*c*l-u*f*p,this._y=u*f*l-h*c*p,this._z=u*c*p+h*f*l,this._w=u*c*l+h*f*p),!1!==e&&this.onChangeCallback(),this},setFromAxisAngle:function(t,e){var n=e/2,r=Math.sin(n);return this._x=t.x*r,this._y=t.y*r,this._z=t.z*r,this._w=Math.cos(n),this.onChangeCallback(),this},setFromRotationMatrix:function(t){var e,n=t.elements,r=n[0],i=n[4],o=n[8],a=n[1],s=n[5],u=n[9],c=n[2],l=n[6],h=n[10],f=r+s+h;return f>0?(e=.5/Math.sqrt(f+1),this._w=.25/e,this._x=(l-u)*e,this._y=(o-c)*e,this._z=(a-i)*e):r>s&&r>h?(e=2*Math.sqrt(1+r-s-h),this._w=(l-u)/e,this._x=.25*e,this._y=(i+a)/e,this._z=(o+c)/e):s>h?(e=2*Math.sqrt(1+s-r-h),this._w=(o-c)/e,this._x=(i+a)/e,this._y=.25*e,this._z=(u+l)/e):(e=2*Math.sqrt(1+h-r-s),this._w=(a-i)/e,this._x=(o+c)/e,this._y=(u+l)/e,this._z=.25*e),this.onChangeCallback(),this},setFromUnitVectors:function(t,e){var n=t.dot(e)+1;return n<1e-6?(n=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()},angleTo:function(t){return 2*Math.acos(Math.abs(Fe.clamp(this.dot(t),-1,1)))},rotateTowards:function(t,e){var n=this.angleTo(t);if(0===n)return this;var r=Math.min(1,e/n);return this.slerp(t,r),this},inverse:function(){return this.conjugate()},conjugate:function(){return this._x*=-1,this._y*=-1,this._z*=-1,this.onChangeCallback(),this},dot:function(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this.onChangeCallback(),this},multiply:function(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)},premultiply:function(t){return this.multiplyQuaternions(t,this)},multiplyQuaternions:function(t,e){var n=t._x,r=t._y,i=t._z,o=t._w,a=e._x,s=e._y,u=e._z,c=e._w;return this._x=n*c+o*a+r*u-i*s,this._y=r*c+o*s+i*a-n*u,this._z=i*c+o*u+n*s-r*a,this._w=o*c-n*a-r*s-i*u,this.onChangeCallback(),this},slerp:function(t,e){if(0===e)return this;if(1===e)return this.copy(t);var n=this._x,r=this._y,i=this._z,o=this._w,a=o*t._w+n*t._x+r*t._y+i*t._z;if(a<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),a>=1)return this._w=o,this._x=n,this._y=r,this._z=i,this;var s=1-a*a;if(s<=Number.EPSILON){var u=1-e;return this._w=u*o+e*this._w,this._x=u*n+e*this._x,this._y=u*r+e*this._y,this._z=u*i+e*this._z,this.normalize()}var c=Math.sqrt(s),l=Math.atan2(c,a),h=Math.sin((1-e)*l)/c,f=Math.sin(e*l)/c;return this._w=o*h+this._w*f,this._x=n*h+this._x*f,this._y=r*h+this._y*f,this._z=i*h+this._z*f,this.onChangeCallback(),this},equals:function(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w},fromArray:function(t,e){return void 0===e&&(e=0),this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this.onChangeCallback(),this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t},onChange:function(t){return this.onChangeCallback=t,this},onChangeCallback:function(){}}),Object.assign(je.prototype,{isVector3:!0,set:function(t,e,n){return this.x=t,this.y=e,this.z=n,this},setScalar:function(t){return this.x=t,this.y=t,this.z=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setZ:function(t){return this.z=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)},addScalar:function(t){return this.x+=t,this.y+=t,this.z+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)},subScalar:function(t){return this.x-=t,this.y-=t,this.z-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this},multiply:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)},multiplyScalar:function(t){return this.x*=t,this.y*=t,this.z*=t,this},multiplyVectors:function(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this},applyEuler:function(){var t=new ke;return function(e){return e&&e.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(t.setFromEuler(e))}}(),applyAxisAngle:function(){var t=new ke;return function(e,n){return this.applyQuaternion(t.setFromAxisAngle(e,n))}}(),applyMatrix3:function(t){var e=this.x,n=this.y,r=this.z,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6]*r,this.y=i[1]*e+i[4]*n+i[7]*r,this.z=i[2]*e+i[5]*n+i[8]*r,this},applyMatrix4:function(t){var e=this.x,n=this.y,r=this.z,i=t.elements,o=1/(i[3]*e+i[7]*n+i[11]*r+i[15]);return this.x=(i[0]*e+i[4]*n+i[8]*r+i[12])*o,this.y=(i[1]*e+i[5]*n+i[9]*r+i[13])*o,this.z=(i[2]*e+i[6]*n+i[10]*r+i[14])*o,this},applyQuaternion:function(t){var e=this.x,n=this.y,r=this.z,i=t.x,o=t.y,a=t.z,s=t.w,u=s*e+o*r-a*n,c=s*n+a*e-i*r,l=s*r+i*n-o*e,h=-i*e-o*n-a*r;return this.x=u*s+h*-i+c*-a-l*-o,this.y=c*s+h*-o+l*-i-u*-a,this.z=l*s+h*-a+u*-o-c*-i,this},project:function(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)},unproject:function(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)},transformDirection:function(t){var e=this.x,n=this.y,r=this.z,i=t.elements;return this.x=i[0]*e+i[4]*n+i[8]*r,this.y=i[1]*e+i[5]*n+i[9]*r,this.z=i[2]*e+i[6]*n+i[10]*r,this.normalize()},divide:function(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this},divideScalar:function(t){return this.multiplyScalar(1/t)},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this},clampScalar:function(){var t=new je,e=new je;return function(n,r){return t.set(n,n,n),e.set(r,r,r),this.clamp(t,e)}}(),clampLength:function(t,e){var n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(t){return this.normalize().multiplyScalar(t)},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this},lerpVectors:function(t,e,n){return this.subVectors(e,t).multiplyScalar(n).add(t)},cross:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e)):this.crossVectors(this,t)},crossVectors:function(t,e){var n=t.x,r=t.y,i=t.z,o=e.x,a=e.y,s=e.z;return this.x=r*s-i*a,this.y=i*o-n*s,this.z=n*a-r*o,this},projectOnVector:function(t){var e=t.dot(this)/t.lengthSq();return this.copy(t).multiplyScalar(e)},projectOnPlane:function(){var t=new je;return function(e){return t.copy(this).projectOnVector(e),this.sub(t)}}(),reflect:function(){var t=new je;return function(e){return this.sub(t.copy(e).multiplyScalar(2*this.dot(e)))}}(),angleTo:function(t){var e=this.dot(t)/Math.sqrt(this.lengthSq()*t.lengthSq());return Math.acos(Fe.clamp(e,-1,1))},distanceTo:function(t){return Math.sqrt(this.distanceToSquared(t))},distanceToSquared:function(t){var e=this.x-t.x,n=this.y-t.y,r=this.z-t.z;return e*e+n*n+r*r},manhattanDistanceTo:function(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)},setFromSpherical:function(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)},setFromSphericalCoords:function(t,e,n){var r=Math.sin(e)*t;return this.x=r*Math.sin(n),this.y=Math.cos(e)*t,this.z=r*Math.cos(n),this},setFromCylindrical:function(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)},setFromCylindricalCoords:function(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this},setFromMatrixPosition:function(t){var e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this},setFromMatrixScale:function(t){var e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),r=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=r,this},setFromMatrixColumn:function(t,e){return this.fromArray(t.elements,4*e)},equals:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this.z=t[e+2],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t},fromBufferAttribute:function(t,e,n){return void 0!==n&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}}),Object.assign(Ve.prototype,{isMatrix3:!0,set:function(t,e,n,r,i,o,a,s,u){var c=this.elements;return c[0]=t,c[1]=r,c[2]=a,c[3]=e,c[4]=i,c[5]=s,c[6]=n,c[7]=o,c[8]=u,this},identity:function(){return this.set(1,0,0,0,1,0,0,0,1),this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(t){var e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this},setFromMatrix4:function(t){var e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this},applyToBufferAttribute:function(){var t=new je;return function(e){for(var n=0,r=e.count;n2048||e.height>2048?e.toDataURL("image/jpeg",.6):e.toDataURL("image/png")}},qe=0;function Ye(t,e,n,r,i,o,a,s,u,c){Object.defineProperty(this,"id",{value:qe++}),this.uuid=Fe.generateUUID(),this.name="",this.image=void 0!==t?t:Ye.DEFAULT_IMAGE,this.mipmaps=[],this.mapping=void 0!==e?e:Ye.DEFAULT_MAPPING,this.wrapS=void 0!==n?n:yt,this.wrapT=void 0!==r?r:yt,this.magFilter=void 0!==i?i:Mt,this.minFilter=void 0!==o?o:St,this.anisotropy=void 0!==u?u:1,this.format=void 0!==a?a:Ft,this.type=void 0!==s?s:Tt,this.offset=new He(0,0),this.repeat=new He(1,1),this.center=new He(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Ve,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=void 0!==c?c:Le,this.version=0,this.onUpdate=null}function Xe(t,e,n,r){this.x=t||0,this.y=e||0,this.z=n||0,this.w=void 0!==r?r:1}function Je(t,e,n){this.width=t,this.height=e,this.scissor=new Xe(0,0,t,e),this.scissorTest=!1,this.viewport=new Xe(0,0,t,e),n=n||{},this.texture=new Ye(void 0,void 0,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.encoding),this.texture.generateMipmaps=void 0!==n.generateMipmaps&&n.generateMipmaps,this.texture.minFilter=void 0!==n.minFilter?n.minFilter:Mt,this.depthBuffer=void 0===n.depthBuffer||n.depthBuffer,this.stencilBuffer=void 0===n.stencilBuffer||n.stencilBuffer,this.depthTexture=void 0!==n.depthTexture?n.depthTexture:null}function Ze(t,e,n){Je.call(this,t,e,n),this.samples=4}function Qe(t,e,n){Je.call(this,t,e,n)}function Ke(t,e,n,r,i,o,a,s,u,c,l,h){Ye.call(this,null,o,a,s,u,c,r,i,l,h),this.image={data:t,width:e,height:n},this.magFilter=void 0!==u?u:bt,this.minFilter=void 0!==c?c:bt,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}function $e(t,e){this.min=void 0!==t?t:new je(1/0,1/0,1/0),this.max=void 0!==e?e:new je(-1/0,-1/0,-1/0)}function tn(t,e){this.center=void 0!==t?t:new je,this.radius=void 0!==e?e:0}function en(t,e){this.normal=void 0!==t?t:new je(1,0,0),this.constant=void 0!==e?e:0}function nn(t,e,n,r,i,o){this.planes=[void 0!==t?t:new en,void 0!==e?e:new en,void 0!==n?n:new en,void 0!==r?r:new en,void 0!==i?i:new en,void 0!==o?o:new en]}function rn(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}Ye.DEFAULT_IMAGE=void 0,Ye.DEFAULT_MAPPING=ct,Ye.prototype=Object.assign(Object.create(r.prototype),{constructor:Ye,isTexture:!0,updateMatrix:function(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this},toJSON:function(t){var e=void 0===t||"string"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];var n={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){var r=this.image;if(void 0===r.uuid&&(r.uuid=Fe.generateUUID()),!e&&void 0===t.images[r.uuid]){var i;if(Array.isArray(r)){i=[];for(var o=0,a=r.length;o1)switch(this.wrapS){case vt:t.x=t.x-Math.floor(t.x);break;case yt:t.x=t.x<0?0:1;break;case xt:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case vt:t.y=t.y-Math.floor(t.y);break;case yt:t.y=t.y<0?0:1;break;case xt:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}}),Object.defineProperty(Ye.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(Xe.prototype,{isVector4:!0,set:function(t,e,n,r){return this.x=t,this.y=e,this.z=n,this.w=r,this},setScalar:function(t){return this.x=t,this.y=t,this.z=t,this.w=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setZ:function(t){return this.z=t,this},setW:function(t){return this.w=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)},addScalar:function(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)},subScalar:function(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this},multiplyScalar:function(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this},applyMatrix4:function(t){var e=this.x,n=this.y,r=this.z,i=this.w,o=t.elements;return this.x=o[0]*e+o[4]*n+o[8]*r+o[12]*i,this.y=o[1]*e+o[5]*n+o[9]*r+o[13]*i,this.z=o[2]*e+o[6]*n+o[10]*r+o[14]*i,this.w=o[3]*e+o[7]*n+o[11]*r+o[15]*i,this},divideScalar:function(t){return this.multiplyScalar(1/t)},setAxisAngleFromQuaternion:function(t){this.w=2*Math.acos(t.w);var e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this},setAxisAngleFromRotationMatrix:function(t){var e,n,r,i,o=t.elements,a=o[0],s=o[4],u=o[8],c=o[1],l=o[5],h=o[9],f=o[2],p=o[6],d=o[10];if(Math.abs(s-c)<.01&&Math.abs(u-f)<.01&&Math.abs(h-p)<.01){if(Math.abs(s+c)<.1&&Math.abs(u+f)<.1&&Math.abs(h+p)<.1&&Math.abs(a+l+d-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;var m=(a+1)/2,g=(l+1)/2,v=(d+1)/2,y=(s+c)/4,x=(u+f)/4,b=(h+p)/4;return m>g&&m>v?m<.01?(n=0,r=.707106781,i=.707106781):(r=y/(n=Math.sqrt(m)),i=x/n):g>v?g<.01?(n=.707106781,r=0,i=.707106781):(n=y/(r=Math.sqrt(g)),i=b/r):v<.01?(n=.707106781,r=.707106781,i=0):(n=x/(i=Math.sqrt(v)),r=b/i),this.set(n,r,i,e),this}var _=Math.sqrt((p-h)*(p-h)+(u-f)*(u-f)+(c-s)*(c-s));return Math.abs(_)<.001&&(_=1),this.x=(p-h)/_,this.y=(u-f)/_,this.z=(c-s)/_,this.w=Math.acos((a+l+d-1)/2),this},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this},clampScalar:function(){var t,e;return function(n,r){return void 0===t&&(t=new Xe,e=new Xe),t.set(n,n,n,n),e.set(r,r,r,r),this.clamp(t,e)}}(),clampLength:function(t,e){var n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(t){return this.normalize().multiplyScalar(t)},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this},lerpVectors:function(t,e,n){return this.subVectors(e,t).multiplyScalar(n).add(t)},equals:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t},fromBufferAttribute:function(t,e,n){return void 0!==n&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}}),Je.prototype=Object.assign(Object.create(r.prototype),{constructor:Je,isWebGLRenderTarget:!0,setSize:function(t,e){this.width===t&&this.height===e||(this.width=t,this.height=e,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.width=t.width,this.height=t.height,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),Ze.prototype=Object.assign(Object.create(Je.prototype),{constructor:Ze,isWebGLMultisampleRenderTarget:!0,copy:function(t){return Je.prototype.copy.call(this,t),this.samples=t.samples,this}}),Qe.prototype=Object.create(Je.prototype),Qe.prototype.constructor=Qe,Qe.prototype.isWebGLRenderTargetCube=!0,Ke.prototype=Object.create(Ye.prototype),Ke.prototype.constructor=Ke,Ke.prototype.isDataTexture=!0,Object.assign($e.prototype,{isBox3:!0,set:function(t,e){return this.min.copy(t),this.max.copy(e),this},setFromArray:function(t){for(var e=1/0,n=1/0,r=1/0,i=-1/0,o=-1/0,a=-1/0,s=0,u=t.length;si&&(i=c),l>o&&(o=l),h>a&&(a=h)}return this.min.set(e,n,r),this.max.set(i,o,a),this},setFromBufferAttribute:function(t){for(var e=1/0,n=1/0,r=1/0,i=-1/0,o=-1/0,a=-1/0,s=0,u=t.count;si&&(i=c),l>o&&(o=l),h>a&&(a=h)}return this.min.set(e,n,r),this.max.set(i,o,a),this},setFromPoints:function(t){this.makeEmpty();for(var e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)},containsBox:function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z},getParameter:function(t,e){return void 0===e&&(console.warn("THREE.Box3: .getParameter() target is now required"),e=new je),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)},intersectsSphere:function(){var t=new je;return function(e){return this.clampPoint(e.center,t),t.distanceToSquared(e.center)<=e.radius*e.radius}}(),intersectsPlane:function(t){var e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant},intersectsTriangle:function(){var t=new je,e=new je,n=new je,r=new je,i=new je,o=new je,a=new je,s=new je,u=new je,c=new je;function l(r){var i,o;for(i=0,o=r.length-3;i<=o;i+=3){a.fromArray(r,i);var s=u.x*Math.abs(a.x)+u.y*Math.abs(a.y)+u.z*Math.abs(a.z),c=t.dot(a),l=e.dot(a),h=n.dot(a);if(Math.max(-Math.max(c,l,h),Math.min(c,l,h))>s)return!1}return!0}return function(a){if(this.isEmpty())return!1;this.getCenter(s),u.subVectors(this.max,s),t.subVectors(a.a,s),e.subVectors(a.b,s),n.subVectors(a.c,s),r.subVectors(e,t),i.subVectors(n,e),o.subVectors(t,n);var h=[0,-r.z,r.y,0,-i.z,i.y,0,-o.z,o.y,r.z,0,-r.x,i.z,0,-i.x,o.z,0,-o.x,-r.y,r.x,0,-i.y,i.x,0,-o.y,o.x,0];return!!l(h)&&(!!l(h=[1,0,0,0,1,0,0,0,1])&&(c.crossVectors(r,i),l(h=[c.x,c.y,c.z])))}}(),clampPoint:function(t,e){return void 0===e&&(console.warn("THREE.Box3: .clampPoint() target is now required"),e=new je),e.copy(t).clamp(this.min,this.max)},distanceToPoint:function(){var t=new je;return function(e){return t.copy(e).clamp(this.min,this.max).sub(e).length()}}(),getBoundingSphere:function(){var t=new je;return function(e){return void 0===e&&console.error("THREE.Box3: .getBoundingSphere() target is now required"),this.getCenter(e.center),e.radius=.5*this.getSize(t).length(),e}}(),intersect:function(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this},union:function(t){return this.min.min(t.min),this.max.max(t.max),this},applyMatrix4:function(){var t=[new je,new je,new je,new je,new je,new je,new je,new je];return function(e){return this.isEmpty()?this:(t[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),t[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),t[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),t[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),t[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),t[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),t[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),t[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(t),this)}}(),translate:function(t){return this.min.add(t),this.max.add(t),this},equals:function(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}),Object.assign(tn.prototype,{set:function(t,e){return this.center.copy(t),this.radius=e,this},setFromPoints:function(){var t=new $e;return function(e,n){var r=this.center;void 0!==n?r.copy(n):t.setFromPoints(e).getCenter(r);for(var i=0,o=0,a=e.length;othis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e},getBoundingBox:function(t){return void 0===t&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),t=new $e),t.set(this.center,this.center),t.expandByScalar(this.radius),t},applyMatrix4:function(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this},translate:function(t){return this.center.add(t),this},equals:function(t){return t.center.equals(this.center)&&t.radius===this.radius}}),Object.assign(en.prototype,{set:function(t,e){return this.normal.copy(t),this.constant=e,this},setComponents:function(t,e,n,r){return this.normal.set(t,e,n),this.constant=r,this},setFromNormalAndCoplanarPoint:function(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this},setFromCoplanarPoints:function(){var t=new je,e=new je;return function(n,r,i){var o=t.subVectors(i,r).cross(e.subVectors(n,r)).normalize();return this.setFromNormalAndCoplanarPoint(o,n),this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.normal.copy(t.normal),this.constant=t.constant,this},normalize:function(){var t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this},negate:function(){return this.constant*=-1,this.normal.negate(),this},distanceToPoint:function(t){return this.normal.dot(t)+this.constant},distanceToSphere:function(t){return this.distanceToPoint(t.center)-t.radius},projectPoint:function(t,e){return void 0===e&&(console.warn("THREE.Plane: .projectPoint() target is now required"),e=new je),e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t)},intersectLine:function(){var t=new je;return function(e,n){void 0===n&&(console.warn("THREE.Plane: .intersectLine() target is now required"),n=new je);var r=e.delta(t),i=this.normal.dot(r);if(0===i)return 0===this.distanceToPoint(e.start)?n.copy(e.start):void 0;var o=-(e.start.dot(this.normal)+this.constant)/i;return o<0||o>1?void 0:n.copy(r).multiplyScalar(o).add(e.start)}}(),intersectsLine:function(t){var e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0},intersectsBox:function(t){return t.intersectsPlane(this)},intersectsSphere:function(t){return t.intersectsPlane(this)},coplanarPoint:function(t){return void 0===t&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),t=new je),t.copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(){var t=new je,e=new Ve;return function(n,r){var i=r||e.getNormalMatrix(n),o=this.coplanarPoint(t).applyMatrix4(n),a=this.normal.applyMatrix3(i).normalize();return this.constant=-o.dot(a),this}}(),translate:function(t){return this.constant-=t.dot(this.normal),this},equals:function(t){return t.normal.equals(this.normal)&&t.constant===this.constant}}),Object.assign(nn.prototype,{set:function(t,e,n,r,i,o){var a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(n),a[3].copy(r),a[4].copy(i),a[5].copy(o),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){for(var e=this.planes,n=0;n<6;n++)e[n].copy(t.planes[n]);return this},setFromMatrix:function(t){var e=this.planes,n=t.elements,r=n[0],i=n[1],o=n[2],a=n[3],s=n[4],u=n[5],c=n[6],l=n[7],h=n[8],f=n[9],p=n[10],d=n[11],m=n[12],g=n[13],v=n[14],y=n[15];return e[0].setComponents(a-r,l-s,d-h,y-m).normalize(),e[1].setComponents(a+r,l+s,d+h,y+m).normalize(),e[2].setComponents(a+i,l+u,d+f,y+g).normalize(),e[3].setComponents(a-i,l-u,d-f,y-g).normalize(),e[4].setComponents(a-o,l-c,d-p,y-v).normalize(),e[5].setComponents(a+o,l+c,d+p,y+v).normalize(),this},intersectsObject:function(){var t=new tn;return function(e){var n=e.geometry;return null===n.boundingSphere&&n.computeBoundingSphere(),t.copy(n.boundingSphere).applyMatrix4(e.matrixWorld),this.intersectsSphere(t)}}(),intersectsSprite:function(){var t=new tn;return function(e){return t.center.set(0,0,0),t.radius=.7071067811865476,t.applyMatrix4(e.matrixWorld),this.intersectsSphere(t)}}(),intersectsSphere:function(t){for(var e=this.planes,n=t.center,r=-t.radius,i=0;i<6;i++){if(e[i].distanceToPoint(n)0?e.max.x:e.min.x,t.y=i.normal.y>0?e.max.y:e.min.y,t.z=i.normal.z>0?e.max.z:e.min.z,i.distanceToPoint(t)<0)return!1}return!0}}(),containsPoint:function(t){for(var e=this.planes,n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}}),Object.assign(rn.prototype,{isMatrix4:!0,set:function(t,e,n,r,i,o,a,s,u,c,l,h,f,p,d,m){var g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=r,g[1]=i,g[5]=o,g[9]=a,g[13]=s,g[2]=u,g[6]=c,g[10]=l,g[14]=h,g[3]=f,g[7]=p,g[11]=d,g[15]=m,this},identity:function(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this},clone:function(){return(new rn).fromArray(this.elements)},copy:function(t){var e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this},copyPosition:function(t){var e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this},extractBasis:function(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this},makeBasis:function(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this},extractRotation:function(){var t=new je;return function(e){var n=this.elements,r=e.elements,i=1/t.setFromMatrixColumn(e,0).length(),o=1/t.setFromMatrixColumn(e,1).length(),a=1/t.setFromMatrixColumn(e,2).length();return n[0]=r[0]*i,n[1]=r[1]*i,n[2]=r[2]*i,n[3]=0,n[4]=r[4]*o,n[5]=r[5]*o,n[6]=r[6]*o,n[7]=0,n[8]=r[8]*a,n[9]=r[9]*a,n[10]=r[10]*a,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,this}}(),makeRotationFromEuler:function(t){t&&t.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var e=this.elements,n=t.x,r=t.y,i=t.z,o=Math.cos(n),a=Math.sin(n),s=Math.cos(r),u=Math.sin(r),c=Math.cos(i),l=Math.sin(i);if("XYZ"===t.order){var h=o*c,f=o*l,p=a*c,d=a*l;e[0]=s*c,e[4]=-s*l,e[8]=u,e[1]=f+p*u,e[5]=h-d*u,e[9]=-a*s,e[2]=d-h*u,e[6]=p+f*u,e[10]=o*s}else if("YXZ"===t.order){var m=s*c,g=s*l,v=u*c,y=u*l;e[0]=m+y*a,e[4]=v*a-g,e[8]=o*u,e[1]=o*l,e[5]=o*c,e[9]=-a,e[2]=g*a-v,e[6]=y+m*a,e[10]=o*s}else if("ZXY"===t.order){m=s*c,g=s*l,v=u*c,y=u*l;e[0]=m-y*a,e[4]=-o*l,e[8]=v+g*a,e[1]=g+v*a,e[5]=o*c,e[9]=y-m*a,e[2]=-o*u,e[6]=a,e[10]=o*s}else if("ZYX"===t.order){h=o*c,f=o*l,p=a*c,d=a*l;e[0]=s*c,e[4]=p*u-f,e[8]=h*u+d,e[1]=s*l,e[5]=d*u+h,e[9]=f*u-p,e[2]=-u,e[6]=a*s,e[10]=o*s}else if("YZX"===t.order){var x=o*s,b=o*u,_=a*s,w=a*u;e[0]=s*c,e[4]=w-x*l,e[8]=_*l+b,e[1]=l,e[5]=o*c,e[9]=-a*c,e[2]=-u*c,e[6]=b*l+_,e[10]=x-w*l}else if("XZY"===t.order){x=o*s,b=o*u,_=a*s,w=a*u;e[0]=s*c,e[4]=-l,e[8]=u*c,e[1]=x*l+w,e[5]=o*c,e[9]=b*l-_,e[2]=_*l-b,e[6]=a*c,e[10]=w*l+x}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},makeRotationFromQuaternion:function(){var t=new je(0,0,0),e=new je(1,1,1);return function(n){return this.compose(t,n,e)}}(),lookAt:function(){var t=new je,e=new je,n=new je;return function(r,i,o){var a=this.elements;return n.subVectors(r,i),0===n.lengthSq()&&(n.z=1),n.normalize(),t.crossVectors(o,n),0===t.lengthSq()&&(1===Math.abs(o.z)?n.x+=1e-4:n.z+=1e-4,n.normalize(),t.crossVectors(o,n)),t.normalize(),e.crossVectors(n,t),a[0]=t.x,a[4]=e.x,a[8]=n.x,a[1]=t.y,a[5]=e.y,a[9]=n.y,a[2]=t.z,a[6]=e.z,a[10]=n.z,this}}(),multiply:function(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)},premultiply:function(t){return this.multiplyMatrices(t,this)},multiplyMatrices:function(t,e){var n=t.elements,r=e.elements,i=this.elements,o=n[0],a=n[4],s=n[8],u=n[12],c=n[1],l=n[5],h=n[9],f=n[13],p=n[2],d=n[6],m=n[10],g=n[14],v=n[3],y=n[7],x=n[11],b=n[15],_=r[0],w=r[4],M=r[8],E=r[12],S=r[1],T=r[5],A=r[9],L=r[13],R=r[2],P=r[6],C=r[10],O=r[14],I=r[3],D=r[7],B=r[11],N=r[15];return i[0]=o*_+a*S+s*R+u*I,i[4]=o*w+a*T+s*P+u*D,i[8]=o*M+a*A+s*C+u*B,i[12]=o*E+a*L+s*O+u*N,i[1]=c*_+l*S+h*R+f*I,i[5]=c*w+l*T+h*P+f*D,i[9]=c*M+l*A+h*C+f*B,i[13]=c*E+l*L+h*O+f*N,i[2]=p*_+d*S+m*R+g*I,i[6]=p*w+d*T+m*P+g*D,i[10]=p*M+d*A+m*C+g*B,i[14]=p*E+d*L+m*O+g*N,i[3]=v*_+y*S+x*R+b*I,i[7]=v*w+y*T+x*P+b*D,i[11]=v*M+y*A+x*C+b*B,i[15]=v*E+y*L+x*O+b*N,this},multiplyScalar:function(t){var e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this},applyToBufferAttribute:function(){var t=new je;return function(e){for(var n=0,r=e.count;n 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick( specularColor, dotNV );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\t#if ! defined( PHYSICAL ) && ! defined( PHONG ) && ! defined( MATCAP )\n\t\tvarying vec3 vViewPosition;\n\t#endif\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG ) && ! defined( MATCAP )\n\tvarying vec3 vViewPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG ) && ! defined( MATCAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_textureSize (1024.0)\nint getFaceFromDirection(vec3 direction) {\n\tvec3 absDirection = abs(direction);\n\tint face = -1;\n\tif( absDirection.x > absDirection.z ) {\n\t\tif(absDirection.x > absDirection.y )\n\t\t\tface = direction.x > 0.0 ? 0 : 3;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\telse {\n\t\tif(absDirection.z > absDirection.y )\n\t\t\tface = direction.z > 0.0 ? 2 : 5;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\treturn face;\n}\n#define cubeUV_maxLods1 (log2(cubeUV_textureSize*0.25) - 1.0)\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n\tfloat dxRoughness = dFdx(roughness);\n\tfloat dyRoughness = dFdy(roughness);\n\tvec3 dx = dFdx( vec * scale * dxRoughness );\n\tvec3 dy = dFdy( vec * scale * dyRoughness );\n\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\n\td = clamp(d, 1.0, cubeUV_rangeClamp);\n\tfloat mipLevel = 0.5 * log2(d);\n\treturn vec2(floor(mipLevel), fract(mipLevel));\n}\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n\tfloat a = 16.0 * cubeUV_rcpTextureSize;\n\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n\tfloat powScale = exp2_packed.x * exp2_packed.y;\n\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n\tbool bRes = mipLevel == 0.0;\n\tscale = bRes && (scale < a) ? a : scale;\n\tvec3 r;\n\tvec2 offset;\n\tint face = getFaceFromDirection(direction);\n\tfloat rcpPowScale = 1.0 / powScale;\n\tif( face == 0) {\n\t\tr = vec3(direction.x, -direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 1) {\n\t\tr = vec3(direction.y, direction.x, direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 2) {\n\t\tr = vec3(direction.z, direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 3) {\n\t\tr = vec3(direction.x, direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse if( face == 4) {\n\t\tr = vec3(direction.y, direction.x, -direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse {\n\t\tr = vec3(direction.z, -direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\tr = normalize(r);\n\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\n\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n\tvec2 base = offset + vec2( texelOffset );\n\treturn base + s * ( scale - 2.0 * texelOffset );\n}\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\nvec4 textureCubeUV( sampler2D envMap, vec3 reflectedDirection, float roughness ) {\n\tfloat roughnessVal = roughness* cubeUV_maxLods3;\n\tfloat r1 = floor(roughnessVal);\n\tfloat r2 = r1 + 1.0;\n\tfloat t = fract(roughnessVal);\n\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n\tfloat s = mipInfo.y;\n\tfloat level0 = mipInfo.x;\n\tfloat level1 = level0 + 1.0;\n\tlevel1 = level1 > 5.0 ? 5.0 : level1;\n\tlevel0 += min( floor( s + 0.5 ), 5.0 );\n\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n\tvec4 result = mix(color10, color20, t);\n\treturn vec4(result.rgb, 1.0);\n}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = normalMatrix * objectNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = normalMatrix * objectTangent;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = min( floor( D ) / 255.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\tenvColor = envMapTexelToLinear( envColor );\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_pars_fragment:"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\n\tuniform float reflectivity;\n\tuniform float envMapIntensity;\n#endif\n#ifdef USE_ENVMAP\n\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\n\t\tvarying vec3 vWorldPosition;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, queryVec, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent ));\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tfogDepth = -mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef TOON\n\tuniform sampler2D gradientMap;\n\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\t\tfloat dotNL = dot( normal, lightDirection );\n\t\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t\t#ifdef USE_GRADIENTMAP\n\t\t\treturn texture2D( gradientMap, coord ).rgb;\n\t\t#else\n\t\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t\t#endif\n\t}\n#endif",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n#endif",lights_pars_begin:"uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t\tfloat shadowCameraNear;\n\t\tfloat shadowCameraFar;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifdef TOON\n\t\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#else\n\t\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\t\tvec3 irradiance = dotNL * directLight.color;\n\t#endif\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef STANDARD\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.clearCoat = saturate( clearCoat );\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n\t#ifndef STANDARD\n\t\tfloat clearCoat;\n\t\tfloat clearCoatRoughness;\n\t#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifndef STANDARD\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\t#ifndef STANDARD\n\t\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\t#endif\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifndef STANDARD\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\tfloat dotNL = dotNV;\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\tfloat clearCoatInv = 1.0 - clearCoatDHR;\n\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec3 singleScattering = vec3( 0.0 );\n\t\tvec3 multiScattering = vec3( 0.0 );\n\t\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\t\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\t\tvec3 diffuse = material.diffuseColor;\n\t\treflectedLight.indirectSpecular += clearCoatInv * radiance * singleScattering;\n\t\treflectedLight.indirectDiffuse += multiScattering * cosineWeightedIrradiance;\n\t\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n\t#else\n\t\treflectedLight.indirectSpecular += clearCoatInv * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n\t#endif\n\t#ifndef STANDARD\n\t\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\n#define Material_ClearCoat_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearCoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tirradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), maxMipLevel );\n\t#ifndef STANDARD\n\t\tclearCoatRadiance += getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), maxMipLevel );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, irradiance, clearCoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t#else\n\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\tgl_Position.z *= gl_Position.w;\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#ifdef USE_MAP\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif",map_particle_pars_fragment:"#ifdef USE_MAP\n\tuniform mat3 uvTransform;\n\tuniform sampler2D map;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\t#endif\n#endif",normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t#endif\n#endif",normal_fragment_maps:"#ifdef USE_NORMALMAP\n\t#ifdef OBJECTSPACE_NORMALMAP\n\t\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\t#ifdef FLIP_SIDED\n\t\t\tnormal = - normal;\n\t\t#endif\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\tnormal = normalize( normalMatrix * normal );\n\t#else\n\t\t#ifdef USE_TANGENT\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\t\tmapN.xy = normalScale * mapN.xy;\n\t\t\tnormal = normalize( vTBN * mapN );\n\t\t#else\n\t\t\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n\t\t#endif\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\t#ifdef OBJECTSPACE_NORMALMAP\n\t\tuniform mat3 normalMatrix;\n\t#else\n\t\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\t\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\t\tvec2 st0 = dFdx( vUv.st );\n\t\t\tvec2 st1 = dFdy( vUv.st );\n\t\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\t\tvec3 N = normalize( surf_norm );\n\t\t\tmat3 tsn = mat3( S, T, N );\n\t\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\t\tmapN.xy *= normalScale;\n\t\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\treturn normalize( tsn * mapN );\n\t\t}\n\t#endif\n#endif",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#if defined( DITHERING )\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#if defined( DITHERING )\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n\t\tconst vec2 offset = vec2( 0.0, 1.0 );\n\t\tvec2 texelSize = vec2( 1.0 ) / size;\n\t\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\n\t\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n\t\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n\t\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n\t\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n\t\tvec2 f = fract( uv * size + 0.5 );\n\t\tfloat a = mix( lb, lt, f.y );\n\t\tfloat b = mix( rb, rt, f.y );\n\t\tfloat c = mix( a, b, f.x );\n\t\treturn c;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tDirectionalLight directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tSpotLight spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tPointLight pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n\t#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( ( color * ( 2.51 * color + 0.03 ) ) / ( color * ( 2.43 * color + 0.59 ) + 0.14 ) );\n}",uv_pars_fragment:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = uv2;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - gl_FragCoord.z ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\t#endif\n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_frag:"#define PHYSICAL\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifndef STANDARD\n\tuniform float clearCoat;\n\tuniform float clearCoatRoughness;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define PHYSICAL\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n}",shadow_vert:"#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"};function an(t){var e={};for(var n in t)for(var r in e[n]={},t[n]){var i=t[n][r];i&&(i.isColor||i.isMatrix3||i.isMatrix4||i.isVector2||i.isVector3||i.isVector4||i.isTexture)?e[n][r]=i.clone():Array.isArray(i)?e[n][r]=i.slice():e[n][r]=i}return e}function sn(t){for(var e={},n=0;n>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this},setRGB:function(t,e,n){return this.r=t,this.g=e,this.b=n,this},setHSL:function(){function t(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}return function(e,n,r){if(e=Fe.euclideanModulo(e,1),n=Fe.clamp(n,0,1),r=Fe.clamp(r,0,1),0===n)this.r=this.g=this.b=r;else{var i=r<=.5?r*(1+n):r+n-r*n,o=2*r-i;this.r=t(o,i,e+1/3),this.g=t(o,i,e),this.b=t(o,i,e-1/3)}return this}}(),setStyle:function(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}var n;if(n=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(t)){var r,i=n[1],o=n[2];switch(i){case"rgb":case"rgba":if(r=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o))return this.r=Math.min(255,parseInt(r[1],10))/255,this.g=Math.min(255,parseInt(r[2],10))/255,this.b=Math.min(255,parseInt(r[3],10))/255,e(r[5]),this;if(r=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o))return this.r=Math.min(100,parseInt(r[1],10))/100,this.g=Math.min(100,parseInt(r[2],10))/100,this.b=Math.min(100,parseInt(r[3],10))/100,e(r[5]),this;break;case"hsl":case"hsla":if(r=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o)){var a=parseFloat(r[1])/360,s=parseInt(r[2],10)/100,u=parseInt(r[3],10)/100;return e(r[5]),this.setHSL(a,s,u)}}}else if(n=/^\#([A-Fa-f0-9]+)$/.exec(t)){var c,l=(c=n[1]).length;if(3===l)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===l)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}t&&t.length>0&&(void 0!==(c=cn[t])?this.setHex(c):console.warn("THREE.Color: Unknown color "+t));return this},clone:function(){return new this.constructor(this.r,this.g,this.b)},copy:function(t){return this.r=t.r,this.g=t.g,this.b=t.b,this},copyGammaToLinear:function(t,e){return void 0===e&&(e=2),this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this},copyLinearToGamma:function(t,e){void 0===e&&(e=2);var n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this},convertGammaToLinear:function(t){return this.copyGammaToLinear(this,t),this},convertLinearToGamma:function(t){return this.copyLinearToGamma(this,t),this},copySRGBToLinear:function(){function t(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}return function(e){return this.r=t(e.r),this.g=t(e.g),this.b=t(e.b),this}}(),copyLinearToSRGB:function(){function t(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}return function(e){return this.r=t(e.r),this.g=t(e.g),this.b=t(e.b),this}}(),convertSRGBToLinear:function(){return this.copySRGBToLinear(this),this},convertLinearToSRGB:function(){return this.copyLinearToSRGB(this),this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(t){void 0===t&&(console.warn("THREE.Color: .getHSL() target is now required"),t={h:0,s:0,l:0});var e,n,r=this.r,i=this.g,o=this.b,a=Math.max(r,i,o),s=Math.min(r,i,o),u=(s+a)/2;if(s===a)e=0,n=0;else{var c=a-s;switch(n=u<=.5?c/(a+s):c/(2-a-s),a){case r:e=(i-o)/c+(i1){for(var e=0;e1){for(var e=0;e0){r.children=[];for(s=0;s0&&(n.geometries=h),f.length>0&&(n.materials=f),p.length>0&&(n.textures=p),d.length>0&&(n.images=d),a.length>0&&(n.shapes=a)}return n.object=r,n;function m(t){var e=[];for(var n in t){var r=t[n];delete r.metadata,e.push(r)}return e}},clone:function(t){return(new this.constructor).copy(this,t)},copy:function(t,e){if(void 0===e&&(e=!0),this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(var n=0;ne&&(e=t[n]);return e}_n.prototype=Object.assign(Object.create(r.prototype),{constructor:_n,isGeometry:!0,applyMatrix:function(t){for(var e=(new Ve).getNormalMatrix(t),n=0,r=this.vertices.length;n0)for(c=0;c0&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){var t,e,n;for(this.computeFaceNormals(),t=0,e=this.faces.length;t0&&(this.normalsNeedUpdate=!0)},computeMorphNormals:function(){var t,e,n,r,i;for(n=0,r=this.faces.length;n=0;n--){var d=f[n];for(this.faces.splice(d,1),a=0,s=this.faceVertexUvs.length;a0,g=p.vertexNormals.length>0,v=1!==p.color.r||1!==p.color.g||1!==p.color.b,y=p.vertexColors.length>0,x=0;if(x=M(x=M(x=M(x=M(x=M(x=M(x=M(x=M(x,0,0),1,!0),2,!1),3,d),4,m),5,g),6,v),7,y),a.push(x),a.push(p.a,p.b,p.c),a.push(p.materialIndex),d){var b=this.faceVertexUvs[0][i];a.push(T(b[0]),T(b[1]),T(b[2]))}if(m&&a.push(E(p.normal)),g){var _=p.vertexNormals;a.push(E(_[0]),E(_[1]),E(_[2]))}if(v&&a.push(S(p.color)),y){var w=p.vertexColors;a.push(S(w[0]),S(w[1]),S(w[2]))}}function M(t,e,n){return n?t|1<0&&(t.data.colors=c),h.length>0&&(t.data.uvs=[h]),t.data.faces=a,t},clone:function(){return(new _n).copy(this)},copy:function(t){var e,n,r,i,o,a;this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.name=t.name;var s=t.vertices;for(e=0,n=s.length;e0,a=i[1]&&i[1].length>0,s=t.morphTargets,u=s.length;if(u>0){e=[];for(var c=0;c0){l=[];for(c=0;c0&&0===n.length&&console.error("THREE.DirectGeometry: Faceless geometries are not supported.");for(c=0;c0?1:-1,c.push(R.x,R.y,R.z),l.push(y/m),l.push(1-x/g),A+=1}}for(x=0;x65535?Rn:An)(t,1):this.index=t},addAttribute:function(t,e){return e&&e.isBufferAttribute||e&&e.isInterleavedBufferAttribute?"index"===t?(console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(e),this):(this.attributes[t]=e,this):(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.addAttribute(t,new wn(arguments[1],arguments[2])))},getAttribute:function(t){return this.attributes[t]},removeAttribute:function(t){return delete this.attributes[t],this},addGroup:function(t,e,n){this.groups.push({start:t,count:e,materialIndex:void 0!==n?n:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(t,e){this.drawRange.start=t,this.drawRange.count=e},applyMatrix:function(t){var e=this.attributes.position;void 0!==e&&(t.applyToBufferAttribute(e),e.needsUpdate=!0);var n=this.attributes.normal;void 0!==n&&((new Ve).getNormalMatrix(t).applyToBufferAttribute(n),n.needsUpdate=!0);var r=this.attributes.tangent;void 0!==r&&((new Ve).getNormalMatrix(t).applyToBufferAttribute(r),r.needsUpdate=!0);return null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},rotateX:function(){var t=new rn;return function(e){return t.makeRotationX(e),this.applyMatrix(t),this}}(),rotateY:function(){var t=new rn;return function(e){return t.makeRotationY(e),this.applyMatrix(t),this}}(),rotateZ:function(){var t=new rn;return function(e){return t.makeRotationZ(e),this.applyMatrix(t),this}}(),translate:function(){var t=new rn;return function(e,n,r){return t.makeTranslation(e,n,r),this.applyMatrix(t),this}}(),scale:function(){var t=new rn;return function(e,n,r){return t.makeScale(e,n,r),this.applyMatrix(t),this}}(),lookAt:function(){var t=new xn;return function(e){t.lookAt(e),t.updateMatrix(),this.applyMatrix(t.matrix)}}(),center:function(){var t=new je;return function(){return this.computeBoundingBox(),this.boundingBox.getCenter(t).negate(),this.translate(t.x,t.y,t.z),this}}(),setFromObject:function(t){var e=t.geometry;if(t.isPoints||t.isLine){var n=new Pn(3*e.vertices.length,3),r=new Pn(3*e.colors.length,3);if(this.addAttribute("position",n.copyVector3sArray(e.vertices)),this.addAttribute("color",r.copyColorsArray(e.colors)),e.lineDistances&&e.lineDistances.length===e.vertices.length){var i=new Pn(e.lineDistances.length,1);this.addAttribute("lineDistance",i.copyArray(e.lineDistances))}null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone())}else t.isMesh&&e&&e.isGeometry&&this.fromGeometry(e);return this},setFromPoints:function(t){for(var e=[],n=0,r=t.length;n0){var n=new Float32Array(3*t.normals.length);this.addAttribute("normal",new wn(n,3).copyVector3sArray(t.normals))}if(t.colors.length>0){var r=new Float32Array(3*t.colors.length);this.addAttribute("color",new wn(r,3).copyColorsArray(t.colors))}if(t.uvs.length>0){var i=new Float32Array(2*t.uvs.length);this.addAttribute("uv",new wn(i,2).copyVector2sArray(t.uvs))}if(t.uvs2.length>0){var o=new Float32Array(2*t.uvs2.length);this.addAttribute("uv2",new wn(o,2).copyVector2sArray(t.uvs2))}for(var a in this.groups=t.groups,t.morphTargets){for(var s=[],u=t.morphTargets[a],c=0,l=u.length;c0){var p=new Pn(4*t.skinIndices.length,4);this.addAttribute("skinIndex",p.copyVector4sArray(t.skinIndices))}if(t.skinWeights.length>0){var d=new Pn(4*t.skinWeights.length,4);this.addAttribute("skinWeight",d.copyVector4sArray(t.skinWeights))}return null!==t.boundingSphere&&(this.boundingSphere=t.boundingSphere.clone()),null!==t.boundingBox&&(this.boundingBox=t.boundingBox.clone()),this},computeBoundingBox:function(){var t=new $e;return function(){null===this.boundingBox&&(this.boundingBox=new $e);var e=this.attributes.position,n=this.morphAttributes.position;if(void 0!==e){if(this.boundingBox.setFromBufferAttribute(e),n)for(var r=0,i=n.length;r0&&(t.userData=this.userData),void 0!==this.parameters){var e=this.parameters;for(var n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};var r=this.index;null!==r&&(t.data.index={type:r.array.constructor.name,array:Array.prototype.slice.call(r.array)});var i=this.attributes;for(var n in i){var o={itemSize:(f=i[n]).itemSize,type:f.array.constructor.name,array:Array.prototype.slice.call(f.array),normalized:f.normalized};""!==f.name&&(o.name=f.name),t.data.attributes[n]=o}var a={},s=!1;for(var n in this.morphAttributes){for(var u=this.morphAttributes[n],c=[],l=0,h=u.length;l0&&(a[n]=c,s=!0)}s&&(t.data.morphAttributes=a);var p=this.groups;p.length>0&&(t.data.groups=JSON.parse(JSON.stringify(p)));var d=this.boundingSphere;return null!==d&&(t.data.boundingSphere={center:d.center.toArray(),radius:d.radius}),t},clone:function(){return(new Bn).copy(this)},copy:function(t){var e,n,r;this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.name=t.name;var i=t.index;null!==i&&this.setIndex(i.clone());var o=t.attributes;for(e in o){var a=o[e];this.addAttribute(e,a.clone())}var s=t.morphAttributes;for(e in s){var u=[],c=s[e];for(n=0,r=c.length;n0&&(n.alphaTest=this.alphaTest),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets&&(n.morphTargets=!0),!0===this.skinning&&(n.skinning=!0),!1===this.visible&&(n.visible=!1),"{}"!==JSON.stringify(this.userData)&&(n.userData=this.userData),e){var i=r(t.textures),o=r(t.images);i.length>0&&(n.textures=i),o.length>0&&(n.images=o)}return n},clone:function(){return(new this.constructor).copy(this)},copy:function(t){this.name=t.name,this.fog=t.fog,this.lights=t.lights,this.blending=t.blending,this.side=t.side,this.flatShading=t.flatShading,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.userData=JSON.parse(JSON.stringify(t.userData)),this.clipShadows=t.clipShadows,this.clipIntersection=t.clipIntersection;var e=t.clippingPlanes,n=null;if(null!==e){var r=e.length;n=new Array(r);for(var i=0;i!==r;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.shadowSide=t.shadowSide,this},dispose:function(){this.dispatchEvent({type:"dispose"})}});var kn="void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",jn="void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}";function Vn(t){Hn.call(this),this.type="ShaderMaterial",this.defines={},this.uniforms={},this.vertexShader=kn,this.fragmentShader=jn,this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,void 0!==t&&(void 0!==t.attributes&&console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead."),this.setValues(t))}function Wn(t,e){this.origin=void 0!==t?t:new je,this.direction=void 0!==e?e:new je}function qn(t,e,n){this.a=void 0!==t?t:new je,this.b=void 0!==e?e:new je,this.c=void 0!==n?n:new je}function Yn(t){Hn.call(this),this.type="MeshBasicMaterial",this.color=new ln(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=tt,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.lights=!1,this.setValues(t)}function Xn(t,e){xn.call(this),this.type="Mesh",this.geometry=void 0!==t?t:new Bn,this.material=void 0!==e?e:new Yn({color:16777215*Math.random()}),this.drawMode=Se,this.updateMorphTargets()}function Jn(t,e){return Math.abs(e[1])-Math.abs(t[1])}function Zn(t,e,n,r,i,o,a,s,u,c){t=void 0!==t?t:[],e=void 0!==e?e:lt,a=void 0!==a?a:Gt,Ye.call(this,t,e,n,r,i,o,a,s,u,c),this.flipY=!1}function Qn(t,e,n,r){Ye.call(this,null),this.image={data:t,width:e,height:n,depth:r},this.magFilter=bt,this.minFilter=bt,this.wrapR=yt,this.generateMipmaps=!1,this.flipY=!1}function Kn(t,e,n,r){Ye.call(this,null),this.image={data:t,width:e,height:n,depth:r},this.magFilter=bt,this.minFilter=bt,this.wrapR=yt,this.generateMipmaps=!1,this.flipY=!1}Vn.prototype=Object.create(Hn.prototype),Vn.prototype.constructor=Vn,Vn.prototype.isShaderMaterial=!0,Vn.prototype.copy=function(t){return Hn.prototype.copy.call(this,t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=an(t.uniforms),this.defines=Object.assign({},t.defines),this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.lights=t.lights,this.clipping=t.clipping,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.extensions=t.extensions,this},Vn.prototype.toJSON=function(t){var e=Hn.prototype.toJSON.call(this,t);for(var n in e.uniforms={},this.uniforms){var r=this.uniforms[n].value;r&&r.isTexture?e.uniforms[n]={type:"t",value:r.toJSON(t).uuid}:r&&r.isColor?e.uniforms[n]={type:"c",value:r.getHex()}:r&&r.isVector2?e.uniforms[n]={type:"v2",value:r.toArray()}:r&&r.isVector3?e.uniforms[n]={type:"v3",value:r.toArray()}:r&&r.isVector4?e.uniforms[n]={type:"v4",value:r.toArray()}:r&&r.isMatrix3?e.uniforms[n]={type:"m3",value:r.toArray()}:r&&r.isMatrix4?e.uniforms[n]={type:"m4",value:r.toArray()}:e.uniforms[n]={value:r}}Object.keys(this.defines).length>0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;var i={};for(var o in this.extensions)!0===this.extensions[o]&&(i[o]=!0);return Object.keys(i).length>0&&(e.extensions=i),e},Object.assign(Wn.prototype,{set:function(t,e){return this.origin.copy(t),this.direction.copy(e),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this},at:function(t,e){return void 0===e&&(console.warn("THREE.Ray: .at() target is now required"),e=new je),e.copy(this.direction).multiplyScalar(t).add(this.origin)},lookAt:function(t){return this.direction.copy(t).sub(this.origin).normalize(),this},recast:function(){var t=new je;return function(e){return this.origin.copy(this.at(e,t)),this}}(),closestPointToPoint:function(t,e){void 0===e&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),e=new je),e.subVectors(t,this.origin);var n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)},distanceToPoint:function(t){return Math.sqrt(this.distanceSqToPoint(t))},distanceSqToPoint:function(){var t=new je;return function(e){var n=t.subVectors(e,this.origin).dot(this.direction);return n<0?this.origin.distanceToSquared(e):(t.copy(this.direction).multiplyScalar(n).add(this.origin),t.distanceToSquared(e))}}(),distanceSqToSegment:function(){var t=new je,e=new je,n=new je;return function(r,i,o,a){t.copy(r).add(i).multiplyScalar(.5),e.copy(i).sub(r).normalize(),n.copy(this.origin).sub(t);var s,u,c,l,h=.5*r.distanceTo(i),f=-this.direction.dot(e),p=n.dot(this.direction),d=-n.dot(e),m=n.lengthSq(),g=Math.abs(1-f*f);if(g>0)if(u=f*p-d,l=h*g,(s=f*d-p)>=0)if(u>=-l)if(u<=l){var v=1/g;c=(s*=v)*(s+f*(u*=v)+2*p)+u*(f*s+u+2*d)+m}else u=h,c=-(s=Math.max(0,-(f*u+p)))*s+u*(u+2*d)+m;else u=-h,c=-(s=Math.max(0,-(f*u+p)))*s+u*(u+2*d)+m;else u<=-l?c=-(s=Math.max(0,-(-f*h+p)))*s+(u=s>0?-h:Math.min(Math.max(-h,-d),h))*(u+2*d)+m:u<=l?(s=0,c=(u=Math.min(Math.max(-h,-d),h))*(u+2*d)+m):c=-(s=Math.max(0,-(f*h+p)))*s+(u=s>0?h:Math.min(Math.max(-h,-d),h))*(u+2*d)+m;else u=f>0?-h:h,c=-(s=Math.max(0,-(f*u+p)))*s+u*(u+2*d)+m;return o&&o.copy(this.direction).multiplyScalar(s).add(this.origin),a&&a.copy(e).multiplyScalar(u).add(t),c}}(),intersectSphere:function(){var t=new je;return function(e,n){t.subVectors(e.center,this.origin);var r=t.dot(this.direction),i=t.dot(t)-r*r,o=e.radius*e.radius;if(i>o)return null;var a=Math.sqrt(o-i),s=r-a,u=r+a;return s<0&&u<0?null:s<0?this.at(u,n):this.at(s,n)}}(),intersectsSphere:function(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius},distanceToPlane:function(t){var e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;var n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null},intersectPlane:function(t,e){var n=this.distanceToPlane(t);return null===n?null:this.at(n,e)},intersectsPlane:function(t){var e=t.distanceToPoint(this.origin);return 0===e||t.normal.dot(this.direction)*e<0},intersectBox:function(t,e){var n,r,i,o,a,s,u=1/this.direction.x,c=1/this.direction.y,l=1/this.direction.z,h=this.origin;return u>=0?(n=(t.min.x-h.x)*u,r=(t.max.x-h.x)*u):(n=(t.max.x-h.x)*u,r=(t.min.x-h.x)*u),c>=0?(i=(t.min.y-h.y)*c,o=(t.max.y-h.y)*c):(i=(t.max.y-h.y)*c,o=(t.min.y-h.y)*c),n>o||i>r?null:((i>n||n!=n)&&(n=i),(o=0?(a=(t.min.z-h.z)*l,s=(t.max.z-h.z)*l):(a=(t.max.z-h.z)*l,s=(t.min.z-h.z)*l),n>s||a>r?null:((a>n||n!=n)&&(n=a),(s=0?n:r,e)))},intersectsBox:function(){var t=new je;return function(e){return null!==this.intersectBox(e,t)}}(),intersectTriangle:function(){var t=new je,e=new je,n=new je,r=new je;return function(i,o,a,s,u){e.subVectors(o,i),n.subVectors(a,i),r.crossVectors(e,n);var c,l=this.direction.dot(r);if(l>0){if(s)return null;c=1}else{if(!(l<0))return null;c=-1,l=-l}t.subVectors(this.origin,i);var h=c*this.direction.dot(n.crossVectors(t,n));if(h<0)return null;var f=c*this.direction.dot(e.cross(t));if(f<0)return null;if(h+f>l)return null;var p=-c*t.dot(r);return p<0?null:this.at(p/l,u)}}(),applyMatrix4:function(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this},equals:function(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}}),Object.assign(qn,{getNormal:function(){var t=new je;return function(e,n,r,i){void 0===i&&(console.warn("THREE.Triangle: .getNormal() target is now required"),i=new je),i.subVectors(r,n),t.subVectors(e,n),i.cross(t);var o=i.lengthSq();return o>0?i.multiplyScalar(1/Math.sqrt(o)):i.set(0,0,0)}}(),getBarycoord:function(){var t=new je,e=new je,n=new je;return function(r,i,o,a,s){t.subVectors(a,i),e.subVectors(o,i),n.subVectors(r,i);var u=t.dot(t),c=t.dot(e),l=t.dot(n),h=e.dot(e),f=e.dot(n),p=u*h-c*c;if(void 0===s&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),s=new je),0===p)return s.set(-2,-1,-1);var d=1/p,m=(h*l-c*f)*d,g=(u*f-c*l)*d;return s.set(1-m-g,g,m)}}(),containsPoint:function(){var t=new je;return function(e,n,r,i){return qn.getBarycoord(e,n,r,i,t),t.x>=0&&t.y>=0&&t.x+t.y<=1}}(),getUV:function(){var t=new je;return function(e,n,r,i,o,a,s,u){return this.getBarycoord(e,n,r,i,t),u.set(0,0),u.addScaledVector(o,t.x),u.addScaledVector(a,t.y),u.addScaledVector(s,t.z),u}}()}),Object.assign(qn.prototype,{set:function(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this},setFromPointsAndIndices:function(t,e,n,r){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[r]),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this},getArea:function(){var t=new je,e=new je;return function(){return t.subVectors(this.c,this.b),e.subVectors(this.a,this.b),.5*t.cross(e).length()}}(),getMidpoint:function(t){return void 0===t&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),t=new je),t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},getNormal:function(t){return qn.getNormal(this.a,this.b,this.c,t)},getPlane:function(t){return void 0===t&&(console.warn("THREE.Triangle: .getPlane() target is now required"),t=new je),t.setFromCoplanarPoints(this.a,this.b,this.c)},getBarycoord:function(t,e){return qn.getBarycoord(t,this.a,this.b,this.c,e)},containsPoint:function(t){return qn.containsPoint(t,this.a,this.b,this.c)},getUV:function(t,e,n,r,i){return qn.getUV(t,this.a,this.b,this.c,e,n,r,i)},intersectsBox:function(t){return t.intersectsTriangle(this)},closestPointToPoint:function(){var t=new je,e=new je,n=new je,r=new je,i=new je,o=new je;return function(a,s){void 0===s&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),s=new je);var u,c,l=this.a,h=this.b,f=this.c;t.subVectors(h,l),e.subVectors(f,l),r.subVectors(a,l);var p=t.dot(r),d=e.dot(r);if(p<=0&&d<=0)return s.copy(l);i.subVectors(a,h);var m=t.dot(i),g=e.dot(i);if(m>=0&&g<=m)return s.copy(h);var v=p*g-m*d;if(v<=0&&p>=0&&m<=0)return u=p/(p-m),s.copy(l).addScaledVector(t,u);o.subVectors(a,f);var y=t.dot(o),x=e.dot(o);if(x>=0&&y<=x)return s.copy(f);var b=y*d-p*x;if(b<=0&&d>=0&&x<=0)return c=d/(d-x),s.copy(l).addScaledVector(e,c);var _=m*x-y*g;if(_<=0&&g-m>=0&&y-x>=0)return n.subVectors(f,h),c=(g-m)/(g-m+(y-x)),s.copy(h).addScaledVector(n,c);var w=1/(_+b+v);return u=b*w,c=v*w,s.copy(l).addScaledVector(t,u).addScaledVector(e,c)}}(),equals:function(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}),Yn.prototype=Object.create(Hn.prototype),Yn.prototype.constructor=Yn,Yn.prototype.isMeshBasicMaterial=!0,Yn.prototype.copy=function(t){return Hn.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this},Xn.prototype=Object.assign(Object.create(xn.prototype),{constructor:Xn,isMesh:!0,setDrawMode:function(t){this.drawMode=t},copy:function(t){return xn.prototype.copy.call(this,t),this.drawMode=t.drawMode,void 0!==t.morphTargetInfluences&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),void 0!==t.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this},updateMorphTargets:function(){var t,e,n,r=this.geometry;if(r.isBufferGeometry){var i=r.morphAttributes,o=Object.keys(i);if(o.length>0){var a=i[o[0]];if(void 0!==a)for(this.morphTargetInfluences=[],this.morphTargetDictionary={},t=0,e=a.length;t0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}},raycast:function(){var t=new rn,e=new Wn,n=new tn,r=new je,i=new je,o=new je,a=new je,s=new je,u=new je,c=new je,l=new je,h=new je,f=new He,p=new He,d=new He,m=new je,g=new je;function x(t,e,n,r,i,o,a,s){if(null===(e.side===v?r.intersectTriangle(a,o,i,!0,s):r.intersectTriangle(i,o,a,e.side!==y,s)))return null;g.copy(s),g.applyMatrix4(t.matrixWorld);var u=n.ray.origin.distanceTo(g);return un.far?null:{distance:u,point:g.clone(),object:t}}function b(t,e,n,g,v,y,b,_,w,M){r.fromBufferAttribute(v,_),i.fromBufferAttribute(v,w),o.fromBufferAttribute(v,M);var E=t.morphTargetInfluences;if(e.morphTargets&&y&&E){c.set(0,0,0),l.set(0,0,0),h.set(0,0,0);for(var S=0,T=y.length;S0&&(I=U);for(var z=0,G=N.length;z0)return t;var i=e*n,o=rr[i];if(void 0===o&&(o=new Float32Array(i),rr[i]=o),0!==e){r.toArray(o,0);for(var a=1,s=0;a!==e;++a)s+=n,t[a].toArray(o,s)}return o}function cr(t,e){if(t.length!==e.length)return!1;for(var n=0,r=t.length;n/gm,function(t,e){var n=on[e];if(void 0===n)throw new Error("Can not resolve #include <"+e+">");return Qr(n)})}function Kr(t){return t.replace(/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(t,e,n,r){for(var i="",o=parseInt(e);o0?t.gammaFactor:1,_=a.isWebGL2?"":function(t,e,n){return[(t=t||{}).derivatives||e.envMapCubeUV||e.bumpMap||e.normalMap&&!e.objectSpaceNormalMap||e.flatShading?"#extension GL_OES_standard_derivatives : enable":"",(t.fragDepth||e.logarithmicDepthBuffer)&&n.get("EXT_frag_depth")?"#extension GL_EXT_frag_depth : enable":"",t.drawBuffers&&n.get("WEBGL_draw_buffers")?"#extension GL_EXT_draw_buffers : require":"",(t.shaderTextureLOD||e.envMap)&&n.get("EXT_shader_texture_lod")?"#extension GL_EXT_shader_texture_lod : enable":""].filter(Xr).join("\n")}(r.extensions,o,e),w=function(t){var e=[];for(var n in t){var r=t[n];!1!==r&&e.push("#define "+n+" "+r)}return e.join("\n")}(c),M=u.createProgram();if(r.isRawShaderMaterial?((y=[w].filter(Xr).join("\n")).length>0&&(y+="\n"),(x=[_,w].filter(Xr).join("\n")).length>0&&(x+="\n")):(y=["precision "+o.precision+" float;","precision "+o.precision+" int;","#define SHADER_NAME "+i.name,w,o.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+b,"#define MAX_BONES "+o.maxBones,o.useFog&&o.fog?"#define USE_FOG":"",o.useFog&&o.fogExp?"#define FOG_EXP2":"",o.map?"#define USE_MAP":"",o.envMap?"#define USE_ENVMAP":"",o.envMap?"#define "+g:"",o.lightMap?"#define USE_LIGHTMAP":"",o.aoMap?"#define USE_AOMAP":"",o.emissiveMap?"#define USE_EMISSIVEMAP":"",o.bumpMap?"#define USE_BUMPMAP":"",o.normalMap?"#define USE_NORMALMAP":"",o.normalMap&&o.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",o.displacementMap&&o.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",o.specularMap?"#define USE_SPECULARMAP":"",o.roughnessMap?"#define USE_ROUGHNESSMAP":"",o.metalnessMap?"#define USE_METALNESSMAP":"",o.alphaMap?"#define USE_ALPHAMAP":"",o.vertexTangents?"#define USE_TANGENT":"",o.vertexColors?"#define USE_COLOR":"",o.flatShading?"#define FLAT_SHADED":"",o.skinning?"#define USE_SKINNING":"",o.useVertexTexture?"#define BONE_TEXTURE":"",o.morphTargets?"#define USE_MORPHTARGETS":"",o.morphNormals&&!1===o.flatShading?"#define USE_MORPHNORMALS":"",o.doubleSided?"#define DOUBLE_SIDED":"",o.flipSided?"#define FLIP_SIDED":"",o.shadowMapEnabled?"#define USE_SHADOWMAP":"",o.shadowMapEnabled?"#define "+f:"",o.sizeAttenuation?"#define USE_SIZEATTENUATION":"",o.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",o.logarithmicDepthBuffer&&(a.isWebGL2||e.get("EXT_frag_depth"))?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#ifdef USE_COLOR","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(Xr).join("\n"),x=[_,"precision "+o.precision+" float;","precision "+o.precision+" int;","#define SHADER_NAME "+i.name,w,o.alphaTest?"#define ALPHATEST "+o.alphaTest+(o.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+b,o.useFog&&o.fog?"#define USE_FOG":"",o.useFog&&o.fogExp?"#define FOG_EXP2":"",o.map?"#define USE_MAP":"",o.matcap?"#define USE_MATCAP":"",o.envMap?"#define USE_ENVMAP":"",o.envMap?"#define "+p:"",o.envMap?"#define "+g:"",o.envMap?"#define "+v:"",o.lightMap?"#define USE_LIGHTMAP":"",o.aoMap?"#define USE_AOMAP":"",o.emissiveMap?"#define USE_EMISSIVEMAP":"",o.bumpMap?"#define USE_BUMPMAP":"",o.normalMap?"#define USE_NORMALMAP":"",o.normalMap&&o.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",o.specularMap?"#define USE_SPECULARMAP":"",o.roughnessMap?"#define USE_ROUGHNESSMAP":"",o.metalnessMap?"#define USE_METALNESSMAP":"",o.alphaMap?"#define USE_ALPHAMAP":"",o.vertexTangents?"#define USE_TANGENT":"",o.vertexColors?"#define USE_COLOR":"",o.gradientMap?"#define USE_GRADIENTMAP":"",o.flatShading?"#define FLAT_SHADED":"",o.doubleSided?"#define DOUBLE_SIDED":"",o.flipSided?"#define FLIP_SIDED":"",o.shadowMapEnabled?"#define USE_SHADOWMAP":"",o.shadowMapEnabled?"#define "+f:"",o.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",o.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",o.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",o.logarithmicDepthBuffer&&(a.isWebGL2||e.get("EXT_frag_depth"))?"#define USE_LOGDEPTHBUF_EXT":"",o.envMap&&(a.isWebGL2||e.get("EXT_shader_texture_lod"))?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;",o.toneMapping!==rt?"#define TONE_MAPPING":"",o.toneMapping!==rt?on.tonemapping_pars_fragment:"",o.toneMapping!==rt?function(t,e){var n;switch(e){case it:n="Linear";break;case ot:n="Reinhard";break;case at:n="Uncharted2";break;case st:n="OptimizedCineon";break;case ut:n="ACESFilmic";break;default:throw new Error("unsupported toneMapping: "+e)}return"vec3 "+t+"( vec3 color ) { return "+n+"ToneMapping( color ); }"}("toneMapping",o.toneMapping):"",o.dithering?"#define DITHERING":"",o.outputEncoding||o.mapEncoding||o.matcapEncoding||o.envMapEncoding||o.emissiveMapEncoding?on.encodings_pars_fragment:"",o.mapEncoding?Yr("mapTexelToLinear",o.mapEncoding):"",o.matcapEncoding?Yr("matcapTexelToLinear",o.matcapEncoding):"",o.envMapEncoding?Yr("envMapTexelToLinear",o.envMapEncoding):"",o.emissiveMapEncoding?Yr("emissiveMapTexelToLinear",o.emissiveMapEncoding):"",o.outputEncoding?function(t,e){var n=qr(e);return"vec4 "+t+"( vec4 value ) { return LinearTo"+n[0]+n[1]+"; }"}("linearToOutputTexel",o.outputEncoding):"",o.depthPacking?"#define DEPTH_PACKING "+r.depthPacking:"","\n"].filter(Xr).join("\n")),l=Zr(l=Jr(l=Qr(l),o),o),h=Zr(h=Jr(h=Qr(h),o),o),l=Kr(l),h=Kr(h),a.isWebGL2&&!r.isRawShaderMaterial){var E=!1,S=/^\s*#version\s+300\s+es\s*\n/;r.isShaderMaterial&&null!==l.match(S)&&null!==h.match(S)&&(E=!0,l=l.replace(S,""),h=h.replace(S,"")),y=["#version 300 es\n","#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+y,x=["#version 300 es\n","#define varying in",E?"":"out highp vec4 pc_fragColor;",E?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+x}var T=x+h,A=Vr(u,35633,y+l),L=Vr(u,35632,T);u.attachShader(M,A),u.attachShader(M,L),void 0!==r.index0AttributeName?u.bindAttribLocation(M,0,r.index0AttributeName):!0===o.morphTargets&&u.bindAttribLocation(M,0,"position"),u.linkProgram(M);var R,P,C=u.getProgramInfoLog(M).trim(),O=u.getShaderInfoLog(A).trim(),I=u.getShaderInfoLog(L).trim(),D=!0,B=!0;return!1===u.getProgramParameter(M,35714)?(D=!1,console.error("THREE.WebGLProgram: shader error: ",u.getError(),"35715",u.getProgramParameter(M,35715),"gl.getProgramInfoLog",C,O,I)):""!==C?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",C):""!==O&&""!==I||(B=!1),B&&(this.diagnostics={runnable:D,material:r,programLog:C,vertexShader:{log:O,prefix:y},fragmentShader:{log:I,prefix:x}}),u.deleteShader(A),u.deleteShader(L),this.getUniforms=function(){return void 0===R&&(R=new jr(u,M,s)),R},this.getAttributes=function(){return void 0===P&&(P=function(t,e){for(var n={},r=t.getProgramParameter(e,35721),i=0;i0,maxBones:f,useVertexTexture:n.floatVertexTextures,morphTargets:e.morphTargets,morphNormals:e.morphNormals,maxMorphTargets:t.maxMorphTargets,maxMorphNormals:t.maxMorphNormals,numDirLights:r.directional.length,numPointLights:r.point.length,numSpotLights:r.spot.length,numRectAreaLights:r.rectArea.length,numHemiLights:r.hemi.length,numClippingPlanes:u,numClipIntersection:c,dithering:e.dithering,shadowMapEnabled:t.shadowMap.enabled&&l.receiveShadow&&i.length>0,shadowMapType:t.shadowMap.type,toneMapping:t.toneMapping,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:e.premultipliedAlpha,alphaTest:e.alphaTest,doubleSided:e.side===y,flipSided:e.side===v,depthPacking:void 0!==e.depthPacking&&e.depthPacking}},this.getProgramCode=function(e,n){var r=[];if(n.shaderID?r.push(n.shaderID):(r.push(e.fragmentShader),r.push(e.vertexShader)),void 0!==e.defines)for(var i in e.defines)r.push(i),r.push(e.defines[i]);for(var o=0;o1&&n.sort(ei),r.length>1&&r.sort(ni)}}}var ii=0;function oi(){var t=new function(){var t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];var n;switch(e.type){case"DirectionalLight":n={direction:new je,color:new ln,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new He};break;case"SpotLight":n={position:new je,direction:new je,color:new ln,distance:0,coneCos:0,penumbraCos:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new He};break;case"PointLight":n={position:new je,color:new ln,distance:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new He,shadowCameraNear:1,shadowCameraFar:1e3};break;case"HemisphereLight":n={direction:new je,skyColor:new ln,groundColor:new ln};break;case"RectAreaLight":n={color:new ln,position:new je,halfWidth:new je,halfHeight:new je}}return t[e.id]=n,n}}},e={id:ii++,hash:{stateID:-1,directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,shadowsLength:-1},ambient:[0,0,0],directional:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],point:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]},n=new je,r=new rn,i=new rn;return{setup:function(o,a,s){for(var u=0,c=0,l=0,h=0,f=0,p=0,d=0,m=0,g=s.matrixWorldInverse,v=0,y=o.length;v0:s&&s.isGeometry&&(g=s.morphTargets&&s.morphTargets.length>0)),e.isSkinnedMesh&&!1===n.skinning&&console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",e);var v=e.isSkinnedMesh&&n.skinning,y=0;g&&(y|=c),v&&(y|=l),u=h[y]}if(t.localClippingEnabled&&!0===n.clipShadows&&0!==n.clippingPlanes.length){var b=u.uuid,_=n.uuid,w=m[b];void 0===w&&(w={},m[b]=w);var M=w[_];void 0===M&&(M=u.clone(),w[_]=M),u=M}return u.visible=n.visible,u.wireframe=n.wireframe,u.side=null!=n.shadowSide?n.shadowSide:x[n.side],u.clipShadows=n.clipShadows,u.clippingPlanes=n.clippingPlanes,u.clipIntersection=n.clipIntersection,u.wireframeLinewidth=n.wireframeLinewidth,u.linewidth=n.linewidth,r&&u.isMeshDistanceMaterial&&(u.referencePosition.copy(i),u.nearDistance=o,u.farDistance=a),u}function C(n,i,o,a){if(!1!==n.visible){if(n.layers.test(i.layers)&&(n.isMesh||n.isLine||n.isPoints)&&n.castShadow&&(!n.frustumCulled||r.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(o.matrixWorldInverse,n.matrixWorld);var s=e.update(n),c=n.material;if(Array.isArray(c))for(var l=s.groups,h=0,f=l.length;hr||t.height>r)&&(i=r/Math.max(t.width,t.height)),i<1||!0===e){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){var o=e?Fe.floorPowerOfTwo:Math.floor,a=o(i*t.width),u=o(i*t.height);void 0===s&&(s=l(a,u));var c=n?l(a,u):s;return c.width=a,c.height=u,c.getContext("2d").drawImage(t,0,0,a,u),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+t.width+"x"+t.height+") to ("+a+"x"+u+")."),c}return"data"in t&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+t.width+"x"+t.height+")."),t}return t}function f(t){return Fe.isPowerOfTwo(t.width)&&Fe.isPowerOfTwo(t.height)}function p(t,e){return t.generateMipmaps&&e&&t.minFilter!==bt&&t.minFilter!==Mt}function d(e,n,i,o){t.generateMipmap(e),r.get(n).__maxMipLevel=Math.log(Math.max(i,o))*Math.LOG2E}function m(t,n){if(!i.isWebGL2)return t;var r=t;return 6403===t&&(5126===n&&(r=33326),5131===n&&(r=33325),5121===n&&(r=33321)),6407===t&&(5126===n&&(r=34837),5131===n&&(r=34843),5121===n&&(r=32849)),6408===t&&(5126===n&&(r=34836),5131===n&&(r=34842),5121===n&&(r=32856)),33325===r||33326===r||34842===r||34836===r?e.get("EXT_color_buffer_float"):34843!==r&&34837!==r||console.warn("THREE.WebGLRenderer: Floating point textures with RGB format not supported. Please use RGBA instead."),r}function g(t){return t===bt||t===_t||t===wt?9728:9729}function v(e){var n=e.target;n.removeEventListener("dispose",v),function(e){var n=r.get(e);if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture),r.remove(e)}(n),n.isVideoTexture&&delete u[n.id],a.memory.textures--}function y(e){var n=e.target;n.removeEventListener("dispose",y),function(e){var n=r.get(e),i=r.get(e.texture);if(!e)return;void 0!==i.__webglTexture&&t.deleteTexture(i.__webglTexture);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLRenderTargetCube)for(var o=0;o<6;o++)t.deleteFramebuffer(n.__webglFramebuffer[o]),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer[o]);else t.deleteFramebuffer(n.__webglFramebuffer),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer);r.remove(e.texture),r.remove(e)}(n),a.memory.textures--}var x=0;function b(t,e){var i=r.get(t);if(t.isVideoTexture&&function(t){var e=t.id,n=a.render.frame;u[e]!==n&&(u[e]=n,t.update())}(t),t.version>0&&i.__version!==t.version){var o=t.image;if(void 0===o)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else{if(!1!==o.complete)return void S(i,t,e);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.activeTexture(33984+e),n.bindTexture(3553,i.__webglTexture)}function _(e,a){var s=r.get(e);if(6===e.image.length)if(e.version>0&&s.__version!==e.version){E(s,e),n.activeTexture(33984+a),n.bindTexture(34067,s.__webglTexture),t.pixelStorei(37440,e.flipY);for(var u=e&&e.isCompressedTexture,c=e.image[0]&&e.image[0].isDataTexture,l=[],g=0;g<6;g++)l[g]=u||c?c?e.image[g].image:e.image[g]:h(e.image[g],!1,!0,i.maxCubemapSize);var v=l[0],y=f(v)||i.isWebGL2,x=o.convert(e.format),b=o.convert(e.type),_=m(x,b);M(34067,e,y);for(g=0;g<6;g++)if(u)for(var w,S=l[g].mipmaps,T=0,A=S.length;T-1?n.compressedTexImage2D(34069+g,T,_,w.width,w.height,0,w.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):n.texImage2D(34069+g,T,_,w.width,w.height,0,x,b,w.data);else c?n.texImage2D(34069+g,0,_,l[g].width,l[g].height,0,x,b,l[g].data):n.texImage2D(34069+g,0,_,x,b,l[g]);s.__maxMipLevel=u?S.length-1:0,p(e,y)&&d(34067,e,v.width,v.height),s.__version=e.version,e.onUpdate&&e.onUpdate(e)}else n.activeTexture(33984+a),n.bindTexture(34067,s.__webglTexture)}function w(t,e){n.activeTexture(33984+e),n.bindTexture(34067,r.get(t).__webglTexture)}function M(n,a,s){var u;if(s?(t.texParameteri(n,10242,o.convert(a.wrapS)),t.texParameteri(n,10243,o.convert(a.wrapT)),32879!==n&&35866!==n||t.texParameteri(n,32882,o.convert(a.wrapR)),t.texParameteri(n,10240,o.convert(a.magFilter)),t.texParameteri(n,10241,o.convert(a.minFilter))):(t.texParameteri(n,10242,33071),t.texParameteri(n,10243,33071),32879!==n&&35866!==n||t.texParameteri(n,32882,33071),a.wrapS===yt&&a.wrapT===yt||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."),t.texParameteri(n,10240,g(a.magFilter)),t.texParameteri(n,10241,g(a.minFilter)),a.minFilter!==bt&&a.minFilter!==Mt&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")),u=e.get("EXT_texture_filter_anisotropic")){if(a.type===Ot&&null===e.get("OES_texture_float_linear"))return;if(a.type===It&&null===(i.isWebGL2||e.get("OES_texture_half_float_linear")))return;(a.anisotropy>1||r.get(a).__currentAnisotropy)&&(t.texParameterf(n,u.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(a.anisotropy,i.getMaxAnisotropy())),r.get(a).__currentAnisotropy=a.anisotropy)}}function E(e,n){void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener("dispose",v),e.__webglTexture=t.createTexture(),a.memory.textures++)}function S(e,r,a){var s=3553;r.isDataTexture2DArray&&(s=35866),r.isDataTexture3D&&(s=32879),E(e,r),n.activeTexture(33984+a),n.bindTexture(s,e.__webglTexture),t.pixelStorei(37440,r.flipY),t.pixelStorei(37441,r.premultiplyAlpha),t.pixelStorei(3317,r.unpackAlignment);var u=function(t){return!i.isWebGL2&&(t.wrapS!==yt||t.wrapT!==yt||t.minFilter!==bt&&t.minFilter!==Mt)}(r)&&!1===f(r.image),c=h(r.image,u,!1,i.maxTextureSize),l=f(c)||i.isWebGL2,g=o.convert(r.format),v=o.convert(r.type),y=m(g,v);M(s,r,l);var x,b=r.mipmaps;if(r.isDepthTexture){if(y=6402,r.type===Ot){if(!i.isWebGL2)throw new Error("Float Depth Texture only supported in WebGL2.0");y=36012}else i.isWebGL2&&(y=33189);r.format===Vt&&6402===y&&r.type!==Rt&&r.type!==Ct&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),r.type=Rt,v=o.convert(r.type)),r.format===Wt&&(y=34041,r.type!==Ut&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),r.type=Ut,v=o.convert(r.type))),n.texImage2D(3553,0,y,c.width,c.height,0,g,v,null)}else if(r.isDataTexture)if(b.length>0&&l){for(var _=0,w=b.length;_-1?n.compressedTexImage2D(3553,_,y,x.width,x.height,0,x.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):n.texImage2D(3553,_,y,x.width,x.height,0,g,v,x.data);e.__maxMipLevel=b.length-1}else if(r.isDataTexture2DArray)n.texImage3D(35866,0,y,c.width,c.height,c.depth,0,g,v,c.data),e.__maxMipLevel=0;else if(r.isDataTexture3D)n.texImage3D(32879,0,y,c.width,c.height,c.depth,0,g,v,c.data),e.__maxMipLevel=0;else if(b.length>0&&l){for(_=0,w=b.length;_=i.maxTextures&&console.warn("THREE.WebGLTextures: Trying to use "+t+" texture units while this GPU supports only "+i.maxTextures),x+=1,t},this.resetTextureUnits=function(){x=0},this.setTexture2D=b,this.setTexture2DArray=function(t,e){var i=r.get(t);t.version>0&&i.__version!==t.version?S(i,t,e):(n.activeTexture(33984+e),n.bindTexture(35866,i.__webglTexture))},this.setTexture3D=function(t,e){var i=r.get(t);t.version>0&&i.__version!==t.version?S(i,t,e):(n.activeTexture(33984+e),n.bindTexture(32879,i.__webglTexture))},this.setTextureCube=_,this.setTextureCubeDynamic=w,this.setupRenderTarget=function(e){var s=r.get(e),u=r.get(e.texture);e.addEventListener("dispose",y),u.__webglTexture=t.createTexture(),a.memory.textures++;var c=!0===e.isWebGLRenderTargetCube,l=!0===e.isWebGLMultisampleRenderTarget,h=f(e)||i.isWebGL2;if(c){s.__webglFramebuffer=[];for(var g=0;g<6;g++)s.__webglFramebuffer[g]=t.createFramebuffer()}else if(s.__webglFramebuffer=t.createFramebuffer(),l)if(i.isWebGL2){s.__webglMultisampledFramebuffer=t.createFramebuffer(),s.__webglColorRenderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,s.__webglColorRenderbuffer);var v=m(o.convert(e.texture.format),o.convert(e.texture.type)),x=R(e);t.renderbufferStorageMultisample(36161,x,v,e.width,e.height),t.bindFramebuffer(36160,s.__webglMultisampledFramebuffer),t.framebufferRenderbuffer(36160,36064,36161,s.__webglColorRenderbuffer),t.bindRenderbuffer(36161,null),e.depthBuffer&&(s.__webglDepthRenderbuffer=t.createRenderbuffer(),A(s.__webglDepthRenderbuffer,e,!0)),t.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.");if(c){for(n.bindTexture(34067,u.__webglTexture),M(34067,e.texture,h),g=0;g<6;g++)T(s.__webglFramebuffer[g],e,36064,34069+g);p(e.texture,h)&&d(34067,e.texture,e.width,e.height),n.bindTexture(34067,null)}else n.bindTexture(3553,u.__webglTexture),M(3553,e.texture,h),T(s.__webglFramebuffer,e,36064,3553),p(e.texture,h)&&d(3553,e.texture,e.width,e.height),n.bindTexture(3553,null);e.depthBuffer&&L(e)},this.updateRenderTargetMipmap=function(t){var e=t.texture;if(p(e,f(t)||i.isWebGL2)){var o=t.isWebGLRenderTargetCube?34067:3553,a=r.get(e).__webglTexture;n.bindTexture(o,a),d(o,e,t.width,t.height),n.bindTexture(o,null)}},this.updateMultisampleRenderTarget=function(e){if(e.isWebGLMultisampleRenderTarget)if(i.isWebGL2){var n=r.get(e);t.bindFramebuffer(36008,n.__webglMultisampledFramebuffer),t.bindFramebuffer(36009,n.__webglFramebuffer);var o=e.width,a=e.height,s=16384;e.depthBuffer&&(s|=256),e.stencilBuffer&&(s|=1024),t.blitFramebuffer(0,0,o,a,0,0,o,a,s,9728)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")},this.safeSetTexture2D=function(t,e){t&&t.isWebGLRenderTarget&&(!1===P&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),P=!0),t=t.texture),b(t,e)},this.safeSetTextureCube=function(t,e){t&&t.isWebGLRenderTargetCube&&(!1===C&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."),C=!0),t=t.texture),t&&t.isCubeTexture||Array.isArray(t.image)&&6===t.image.length?_(t,e):w(t,e)}}function hi(t,e,n){return{convert:function(t){var r;if(t===vt)return 10497;if(t===yt)return 33071;if(t===xt)return 33648;if(t===bt)return 9728;if(t===_t)return 9984;if(t===wt)return 9986;if(t===Mt)return 9729;if(t===Et)return 9985;if(t===St)return 9987;if(t===Tt)return 5121;if(t===Dt)return 32819;if(t===Bt)return 32820;if(t===Nt)return 33635;if(t===At)return 5120;if(t===Lt)return 5122;if(t===Rt)return 5123;if(t===Pt)return 5124;if(t===Ct)return 5125;if(t===Ot)return 5126;if(t===It){if(n.isWebGL2)return 5131;if(null!==(r=e.get("OES_texture_half_float")))return r.HALF_FLOAT_OES}if(t===zt)return 6406;if(t===Gt)return 6407;if(t===Ft)return 6408;if(t===Ht)return 6409;if(t===kt)return 6410;if(t===Vt)return 6402;if(t===Wt)return 34041;if(t===qt)return 6403;if(t===P)return 32774;if(t===C)return 32778;if(t===O)return 32779;if(t===B)return 0;if(t===N)return 1;if(t===U)return 768;if(t===z)return 769;if(t===G)return 770;if(t===F)return 771;if(t===H)return 772;if(t===k)return 773;if(t===j)return 774;if(t===V)return 775;if(t===W)return 776;if((t===Yt||t===Xt||t===Jt||t===Zt)&&null!==(r=e.get("WEBGL_compressed_texture_s3tc"))){if(t===Yt)return r.COMPRESSED_RGB_S3TC_DXT1_EXT;if(t===Xt)return r.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(t===Jt)return r.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(t===Zt)return r.COMPRESSED_RGBA_S3TC_DXT5_EXT}if((t===Qt||t===Kt||t===$t||t===te)&&null!==(r=e.get("WEBGL_compressed_texture_pvrtc"))){if(t===Qt)return r.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(t===Kt)return r.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(t===$t)return r.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(t===te)return r.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(t===ee&&null!==(r=e.get("WEBGL_compressed_texture_etc1")))return r.COMPRESSED_RGB_ETC1_WEBGL;if((t===ne||t===re||t===ie||t===oe||t===ae||t===se||t===ue||t===ce||t===le||t===he||t===fe||t===pe||t===de||t===me)&&null!==(r=e.get("WEBGL_compressed_texture_astc")))return t;if(t===I||t===D){if(n.isWebGL2){if(t===I)return 32775;if(t===D)return 32776}if(null!==(r=e.get("EXT_blend_minmax"))){if(t===I)return r.MIN_EXT;if(t===D)return r.MAX_EXT}}if(t===Ut){if(n.isWebGL2)return 34042;if(null!==(r=e.get("WEBGL_depth_texture")))return r.UNSIGNED_INT_24_8_WEBGL}return 0}}}function fi(){xn.call(this),this.type="Group"}function pi(){xn.call(this),this.type="Camera",this.matrixWorldInverse=new rn,this.projectionMatrix=new rn,this.projectionMatrixInverse=new rn}function di(t,e,n,r){pi.call(this),this.type="PerspectiveCamera",this.fov=void 0!==t?t:50,this.zoom=1,this.near=void 0!==n?n:.1,this.far=void 0!==r?r:2e3,this.focus=10,this.aspect=void 0!==e?e:1,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}function mi(t){di.call(this),this.cameras=t||[]}si.prototype=Object.create(Hn.prototype),si.prototype.constructor=si,si.prototype.isMeshDepthMaterial=!0,si.prototype.copy=function(t){return Hn.prototype.copy.call(this,t),this.depthPacking=t.depthPacking,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this},ui.prototype=Object.create(Hn.prototype),ui.prototype.constructor=ui,ui.prototype.isMeshDistanceMaterial=!0,ui.prototype.copy=function(t){return Hn.prototype.copy.call(this,t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this},fi.prototype=Object.assign(Object.create(xn.prototype),{constructor:fi,isGroup:!0}),pi.prototype=Object.assign(Object.create(xn.prototype),{constructor:pi,isCamera:!0,copy:function(t,e){return xn.prototype.copy.call(this,t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this},getWorldDirection:function(t){void 0===t&&(console.warn("THREE.Camera: .getWorldDirection() target is now required"),t=new je),this.updateMatrixWorld(!0);var e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()},updateMatrixWorld:function(t){xn.prototype.updateMatrixWorld.call(this,t),this.matrixWorldInverse.getInverse(this.matrixWorld)},clone:function(){return(new this.constructor).copy(this)}}),di.prototype=Object.assign(Object.create(pi.prototype),{constructor:di,isPerspectiveCamera:!0,copy:function(t,e){return pi.prototype.copy.call(this,t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this},setFocalLength:function(t){var e=.5*this.getFilmHeight()/t;this.fov=2*Fe.RAD2DEG*Math.atan(e),this.updateProjectionMatrix()},getFocalLength:function(){var t=Math.tan(.5*Fe.DEG2RAD*this.fov);return.5*this.getFilmHeight()/t},getEffectiveFOV:function(){return 2*Fe.RAD2DEG*Math.atan(Math.tan(.5*Fe.DEG2RAD*this.fov)/this.zoom)},getFilmWidth:function(){return this.filmGauge*Math.min(this.aspect,1)},getFilmHeight:function(){return this.filmGauge/Math.max(this.aspect,1)},setViewOffset:function(t,e,n,r,i,o){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=r,this.view.width=i,this.view.height=o,this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()},updateProjectionMatrix:function(){var t=this.near,e=t*Math.tan(.5*Fe.DEG2RAD*this.fov)/this.zoom,n=2*e,r=this.aspect*n,i=-.5*r,o=this.view;if(null!==this.view&&this.view.enabled){var a=o.fullWidth,s=o.fullHeight;i+=o.offsetX*r/a,e-=o.offsetY*n/s,r*=o.width/a,n*=o.height/s}var u=this.filmOffset;0!==u&&(i+=t*u/this.getFilmWidth()),this.projectionMatrix.makePerspective(i,i+r,e,e-n,t,this.far),this.projectionMatrixInverse.getInverse(this.projectionMatrix)},toJSON:function(t){var e=xn.prototype.toJSON.call(this,t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}),mi.prototype=Object.assign(Object.create(di.prototype),{constructor:mi,isArrayCamera:!0});var gi,vi=new je,yi=new je;function xi(t,e,n){vi.setFromMatrixPosition(e.matrixWorld),yi.setFromMatrixPosition(n.matrixWorld);var r=vi.distanceTo(yi),i=e.projectionMatrix.elements,o=n.projectionMatrix.elements,a=i[14]/(i[10]-1),s=i[14]/(i[10]+1),u=(i[9]+1)/i[5],c=(i[9]-1)/i[5],l=(i[8]-1)/i[0],h=(o[8]+1)/o[0],f=a*l,p=a*h,d=r/(-l+h),m=d*-l;e.matrixWorld.decompose(t.position,t.quaternion,t.scale),t.translateX(m),t.translateZ(d),t.matrixWorld.compose(t.position,t.quaternion,t.scale),t.matrixWorldInverse.getInverse(t.matrixWorld);var g=a+d,v=s+d,y=f-m,x=p+(r-m),b=u*s/v*g,_=c*s/v*g;t.projectionMatrix.makePerspective(y,x,b,_,g,v)}function bi(t){var e=this,n=null,r=null,i=null,o=[],a=new rn,s=new rn,u=1,c="stage";"undefined"!=typeof window&&"VRFrameData"in window&&(r=new window.VRFrameData,window.addEventListener("vrdisplaypresentchange",x,!1));var l=new rn,h=new ke,f=new je,p=new di;p.bounds=new Xe(0,0,.5,1),p.layers.enable(1);var d=new di;d.bounds=new Xe(.5,0,.5,1),d.layers.enable(2);var m=new mi([p,d]);function g(){return null!==n&&!0===n.isPresenting}m.layers.enable(1),m.layers.enable(2);var v,y=new He;function x(){if(g()){var r=n.getEyeParameters("left"),i=r.renderWidth*u,o=r.renderHeight*u;v=t.getPixelRatio(),t.getSize(y),t.setDrawingBufferSize(2*i,o,1),w.start()}else e.enabled&&t.setDrawingBufferSize(y.width,y.height,v),w.stop()}var b=[];function _(t){for(var e=navigator.getGamepads&&navigator.getGamepads(),n=0,r=0,i=e.length;n0),t.numPlanes=n,t.numIntersection=0}function c(e,n,r,i){var u=null!==e?e.length:0,c=null;if(0!==u){if(c=s.value,!0!==i||null===c){var l=r+4*u,h=n.matrixWorldInverse;a.getNormalMatrix(h),(null===c||c.length0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}var o="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext,a=void 0!==n.precision?n.precision:"highp",s=i(a);s!==a&&(console.warn("THREE.WebGLRenderer:",a,"not supported, using",s,"instead."),a=s);var u=!0===n.logarithmicDepthBuffer,c=t.getParameter(34930),l=t.getParameter(35660),h=t.getParameter(3379),f=t.getParameter(34076),p=t.getParameter(34921),d=t.getParameter(36347),m=t.getParameter(36348),g=t.getParameter(36349),v=l>0,y=o||!!e.get("OES_texture_float");return{isWebGL2:o,getMaxAnisotropy:function(){if(void 0!==r)return r;var n=e.get("EXT_texture_filter_anisotropic");return r=null!==n?t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0},getMaxPrecision:i,precision:a,logarithmicDepthBuffer:u,maxTextures:c,maxVertexTextures:l,maxTextureSize:h,maxCubemapSize:f,maxAttributes:p,maxVertexUniforms:d,maxVaryings:m,maxFragmentUniforms:g,vertexTextures:v,floatFragmentTextures:y,floatVertexTextures:v&&y,maxSamples:o?t.getParameter(36183):0}}(x,b,t)).isWebGL2||(b.get("WEBGL_depth_texture"),b.get("OES_texture_float"),b.get("OES_texture_half_float"),b.get("OES_texture_half_float_linear"),b.get("OES_standard_derivatives"),b.get("OES_element_index_uint"),b.get("ANGLE_instanced_arrays")),b.get("OES_texture_float_linear"),j=new hi(x,b,_),(w=new function(t,e,n,r){var i=new function(){var e=!1,n=new Xe,r=null,i=new Xe(0,0,0,0);return{setMask:function(n){r===n||e||(t.colorMask(n,n,n,n),r=n)},setLocked:function(t){e=t},setClear:function(e,r,o,a,s){!0===s&&(e*=a,r*=a,o*=a),n.set(e,r,o,a),!1===i.equals(n)&&(t.clearColor(e,r,o,a),i.copy(n))},reset:function(){e=!1,r=null,i.set(-1,0,0,0)}}},o=new function(){var e=!1,n=null,r=null,i=null;return{setTest:function(t){t?ot(2929):at(2929)},setMask:function(r){n===r||e||(t.depthMask(r),n=r)},setFunc:function(e){if(r!==e){if(e)switch(e){case q:t.depthFunc(512);break;case Y:t.depthFunc(519);break;case X:t.depthFunc(513);break;case J:t.depthFunc(515);break;case Z:t.depthFunc(514);break;case Q:t.depthFunc(518);break;case K:t.depthFunc(516);break;case $:t.depthFunc(517);break;default:t.depthFunc(515)}else t.depthFunc(515);r=e}},setLocked:function(t){e=t},setClear:function(e){i!==e&&(t.clearDepth(e),i=e)},reset:function(){e=!1,n=null,r=null,i=null}}},a=new function(){var e=!1,n=null,r=null,i=null,o=null,a=null,s=null,u=null,c=null;return{setTest:function(t){t?ot(2960):at(2960)},setMask:function(r){n===r||e||(t.stencilMask(r),n=r)},setFunc:function(e,n,a){r===e&&i===n&&o===a||(t.stencilFunc(e,n,a),r=e,i=n,o=a)},setOp:function(e,n,r){a===e&&s===n&&u===r||(t.stencilOp(e,n,r),a=e,s=n,u=r)},setLocked:function(t){e=t},setClear:function(e){c!==e&&(t.clearStencil(e),c=e)},reset:function(){e=!1,n=null,r=null,i=null,o=null,a=null,s=null,u=null,c=null}}},l=t.getParameter(34921),h=new Uint8Array(l),f=new Uint8Array(l),p=new Uint8Array(l),d={},m=null,g=null,x=null,b=null,_=null,w=null,M=null,C=null,O=null,I=null,D=!1,B=null,N=null,U=null,z=null,G=null,F=t.getParameter(35661),H=!1,k=0,j=t.getParameter(7938);-1!==j.indexOf("WebGL")?(k=parseFloat(/^WebGL\ ([0-9])/.exec(j)[1]),H=k>=1):-1!==j.indexOf("OpenGL ES")&&(k=parseFloat(/^OpenGL\ ES\ ([0-9])/.exec(j)[1]),H=k>=2);var V=null,W={},tt=new Xe,et=new Xe;function nt(e,n,r){var i=new Uint8Array(4),o=t.createTexture();t.bindTexture(e,o),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(var a=0;a65535?Rn:An)(o,1),e.update(n,34963),i[t.id]=n,n}}}(x,I,M),B=new function(t,e){var n={};return{update:function(r){var i=e.render.frame,o=r.geometry,a=t.get(r,o);return n[a.id]!==i&&(o.isGeometry&&a.updateFromObject(r),t.update(a),n[a.id]=i),a},dispose:function(){n={}}}}(D,M),F=new function(t){var e={},n=new Float32Array(8);return{update:function(r,i,o,a){var s=r.morphTargetInfluences,u=s.length,c=e[i.id];if(void 0===c){c=[];for(var l=0;l=0){var u=r[a];if(void 0!==u){var c=u.normalized,l=u.itemSize,h=I.get(u);if(void 0===h)continue;var f=h.buffer,p=h.type,d=h.bytesPerElement;if(u.isInterleavedBufferAttribute){var m=u.data,g=m.stride,v=u.offset;m&&m.isInstancedInterleavedBuffer?(w.enableAttributeAndDivisor(s,m.meshPerAttribute),void 0===n.maxInstancedCount&&(n.maxInstancedCount=m.meshPerAttribute*m.count)):w.enableAttribute(s),x.bindBuffer(34962,f),x.vertexAttribPointer(s,l,p,c,g*d,v*d)}else u.isInstancedBufferAttribute?(w.enableAttributeAndDivisor(s,u.meshPerAttribute),void 0===n.maxInstancedCount&&(n.maxInstancedCount=u.meshPerAttribute*u.count)):w.enableAttribute(s),x.bindBuffer(34962,f),x.vertexAttribPointer(s,l,p,c,0,0)}else if(void 0!==o){var y=o[a];if(void 0!==y)switch(y.length){case 2:x.vertexAttrib2fv(s,y);break;case 3:x.vertexAttrib3fv(s,y);break;case 4:x.vertexAttrib4fv(s,y);break;default:x.vertexAttrib1fv(s,y)}}}}w.disableUnusedAttributes()}(r,s,n),null!==l&&x.bindBuffer(34963,c.buffer));var d=1/0;null!==l?d=l.count:void 0!==h&&(d=h.count);var m=n.drawRange.start*f,g=n.drawRange.count*f,v=null!==o?o.start*f:0,y=null!==o?o.count*f:1/0,M=Math.max(m,v),E=Math.min(d,m+g,v+y)-1,S=Math.max(0,E-M+1);if(0!==S){if(i.isMesh)if(!0===r.wireframe)w.setLineWidth(r.wireframeLinewidth*Mt()),p.setMode(1);else switch(i.drawMode){case Se:p.setMode(4);break;case Te:p.setMode(5);break;case Ae:p.setMode(6)}else if(i.isLine){var T=r.linewidth;void 0===T&&(T=1),w.setLineWidth(T*Mt()),i.isLineSegments?p.setMode(1):i.isLineLoop?p.setMode(2):p.setMode(3)}else i.isPoints?p.setMode(0):i.isSprite&&p.setMode(4);n&&n.isInstancedBufferGeometry?n.maxInstancedCount>0&&p.renderInstances(n,M,S):p.render(M,S)}},this.compile=function(t,e){(m=z.get(t,e)).init(),t.traverse(function(t){t.isLight&&(m.pushLight(t),t.castShadow&&m.pushShadow(t))}),m.setupLights(e),t.traverse(function(e){if(e.material)if(Array.isArray(e.material))for(var n=0;n=0&&t.numSupportedMorphTargets++}if(t.morphNormals){t.numSupportedMorphNormals=0;for(d=0;d=0&&t.numSupportedMorphNormals++}var g=r.shader.uniforms;(t.isShaderMaterial||t.isRawShaderMaterial)&&!0!==t.clipping||(r.numClippingPlanes=yt.numPlanes,r.numIntersection=yt.numIntersection,g.clippingPlanes=yt.uniform),r.fog=e,void 0===a&&(r.lightsHash=a={}),a.stateID=s.stateID,a.directionalLength=s.directionalLength,a.pointLength=s.pointLength,a.spotLength=s.spotLength,a.rectAreaLength=s.rectAreaLength,a.hemiLength=s.hemiLength,a.shadowsLength=s.shadowsLength,t.lights&&(g.ambientLightColor.value=i.state.ambient,g.directionalLights.value=i.state.directional,g.spotLights.value=i.state.spot,g.rectAreaLights.value=i.state.rectArea,g.pointLights.value=i.state.point,g.hemisphereLights.value=i.state.hemi,g.directionalShadowMap.value=i.state.directionalShadowMap,g.directionalShadowMatrix.value=i.state.directionalShadowMatrix,g.spotShadowMap.value=i.state.spotShadowMap,g.spotShadowMatrix.value=i.state.spotShadowMatrix,g.pointShadowMap.value=i.state.pointShadowMap,g.pointShadowMatrix.value=i.state.pointShadowMatrix);var v=r.program.getUniforms(),y=jr.seqWithValue(v.seq,g);r.uniformsList=y}function Ht(t,e,n,r){O.resetTextureUnits();var i=C.get(n),o=m.state.lights,a=i.lightsHash,s=o.state.hash;if(xt&&(bt||t!==at)){var u=t===at&&n.id===rt;yt.setState(n.clippingPlanes,n.clipIntersection,n.clipShadows,t,i,u)}!1===n.needsUpdate&&(void 0===i.program?n.needsUpdate=!0:n.fog&&i.fog!==e?n.needsUpdate=!0:(!n.lights||a.stateID===s.stateID&&a.directionalLength===s.directionalLength&&a.pointLength===s.pointLength&&a.spotLength===s.spotLength&&a.rectAreaLength===s.rectAreaLength&&a.hemiLength===s.hemiLength&&a.shadowsLength===s.shadowsLength)&&(void 0===i.numClippingPlanes||i.numClippingPlanes===yt.numPlanes&&i.numIntersection===yt.numIntersection)||(n.needsUpdate=!0)),n.needsUpdate&&(Gt(n,e,r),n.needsUpdate=!1);var c=!1,l=!1,h=!1,f=i.program,p=f.getUniforms(),d=i.shader.uniforms;if(w.useProgram(f.program)&&(c=!0,l=!0,h=!0),n.id!==rt&&(rt=n.id,l=!0),c||at!==t){if(p.setValue(x,"projectionMatrix",t.projectionMatrix),_.logarithmicDepthBuffer&&p.setValue(x,"logDepthBufFC",2/(Math.log(t.far+1)/Math.LN2)),at!==t&&(at=t,l=!0,h=!0),n.isShaderMaterial||n.isMeshPhongMaterial||n.isMeshStandardMaterial||n.envMap){var g=p.map.cameraPosition;void 0!==g&&g.setValue(x,wt.setFromMatrixPosition(t.matrixWorld))}(n.isMeshPhongMaterial||n.isMeshLambertMaterial||n.isMeshBasicMaterial||n.isMeshStandardMaterial||n.isShaderMaterial||n.skinning)&&p.setValue(x,"viewMatrix",t.matrixWorldInverse)}if(n.skinning){p.setOptional(x,r,"bindMatrix"),p.setOptional(x,r,"bindMatrixInverse");var y=r.skeleton;if(y){var b=y.bones;if(_.floatVertexTextures){if(void 0===y.boneTexture){var M=Math.sqrt(4*b.length);M=Fe.ceilPowerOfTwo(M),M=Math.max(M,4);var E=new Float32Array(M*M*4);E.set(y.boneMatrices);var S=new Ke(E,M,M,Ft,Ot);S.needsUpdate=!0,y.boneMatrices=E,y.boneTexture=S,y.boneTextureSize=M}p.setValue(x,"boneTexture",y.boneTexture,O),p.setValue(x,"boneTextureSize",y.boneTextureSize)}else p.setOptional(x,y,"boneMatrices")}}return l&&(p.setValue(x,"toneMappingExposure",V.toneMappingExposure),p.setValue(x,"toneMappingWhitePoint",V.toneMappingWhitePoint),n.lights&&function(t,e){t.ambientLightColor.needsUpdate=e,t.directionalLights.needsUpdate=e,t.pointLights.needsUpdate=e,t.spotLights.needsUpdate=e,t.rectAreaLights.needsUpdate=e,t.hemisphereLights.needsUpdate=e}(d,h),e&&n.fog&&function(t,e){t.fogColor.value=e.color,e.isFog?(t.fogNear.value=e.near,t.fogFar.value=e.far):e.isFogExp2&&(t.fogDensity.value=e.density)}(d,e),n.isMeshBasicMaterial?kt(d,n):n.isMeshLambertMaterial?(kt(d,n),function(t,e){e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap)}(d,n)):n.isMeshPhongMaterial?(kt(d,n),n.isMeshToonMaterial?function(t,e){jt(t,e),e.gradientMap&&(t.gradientMap.value=e.gradientMap)}(d,n):jt(d,n)):n.isMeshStandardMaterial?(kt(d,n),n.isMeshPhysicalMaterial?function(t,e){Vt(t,e),t.reflectivity.value=e.reflectivity,t.clearCoat.value=e.clearCoat,t.clearCoatRoughness.value=e.clearCoatRoughness}(d,n):Vt(d,n)):n.isMeshMatcapMaterial?(kt(d,n),function(t,e){e.matcap&&(t.matcap.value=e.matcap);e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===v&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===v&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(d,n)):n.isMeshDepthMaterial?(kt(d,n),function(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(d,n)):n.isMeshDistanceMaterial?(kt(d,n),function(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias);t.referencePosition.value.copy(e.referencePosition),t.nearDistance.value=e.nearDistance,t.farDistance.value=e.farDistance}(d,n)):n.isMeshNormalMaterial?(kt(d,n),function(t,e){e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===v&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===v&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(d,n)):n.isLineBasicMaterial?(function(t,e){t.diffuse.value=e.color,t.opacity.value=e.opacity}(d,n),n.isLineDashedMaterial&&function(t,e){t.dashSize.value=e.dashSize,t.totalSize.value=e.dashSize+e.gapSize,t.scale.value=e.scale}(d,n)):n.isPointsMaterial?function(t,e){t.diffuse.value=e.color,t.opacity.value=e.opacity,t.size.value=e.size*pt,t.scale.value=.5*ft,t.map.value=e.map,null!==e.map&&(!0===e.map.matrixAutoUpdate&&e.map.updateMatrix(),t.uvTransform.value.copy(e.map.matrix))}(d,n):n.isSpriteMaterial?function(t,e){t.diffuse.value=e.color,t.opacity.value=e.opacity,t.rotation.value=e.rotation,t.map.value=e.map,null!==e.map&&(!0===e.map.matrixAutoUpdate&&e.map.updateMatrix(),t.uvTransform.value.copy(e.map.matrix))}(d,n):n.isShadowMaterial&&(d.color.value=n.color,d.opacity.value=n.opacity),void 0!==d.ltc_1&&(d.ltc_1.value=hn.LTC_1),void 0!==d.ltc_2&&(d.ltc_2.value=hn.LTC_2),jr.upload(x,i.uniformsList,d,O)),n.isShaderMaterial&&!0===n.uniformsNeedUpdate&&(jr.upload(x,i.uniformsList,d,O),n.uniformsNeedUpdate=!1),n.isSpriteMaterial&&p.setValue(x,"center",r.center),p.setValue(x,"modelViewMatrix",r.modelViewMatrix),p.setValue(x,"normalMatrix",r.normalMatrix),p.setValue(x,"modelMatrix",r.matrixWorld),f}function kt(t,e){var n;t.opacity.value=e.opacity,e.color&&(t.diffuse.value=e.color),e.emissive&&t.emissive.value.copy(e.emissive).multiplyScalar(e.emissiveIntensity),e.map&&(t.map.value=e.map),e.alphaMap&&(t.alphaMap.value=e.alphaMap),e.specularMap&&(t.specularMap.value=e.specularMap),e.envMap&&(t.envMap.value=e.envMap,t.flipEnvMap.value=e.envMap.isCubeTexture?-1:1,t.reflectivity.value=e.reflectivity,t.refractionRatio.value=e.refractionRatio,t.maxMipLevel.value=C.get(e.envMap).__maxMipLevel),e.lightMap&&(t.lightMap.value=e.lightMap,t.lightMapIntensity.value=e.lightMapIntensity),e.aoMap&&(t.aoMap.value=e.aoMap,t.aoMapIntensity.value=e.aoMapIntensity),e.map?n=e.map:e.specularMap?n=e.specularMap:e.displacementMap?n=e.displacementMap:e.normalMap?n=e.normalMap:e.bumpMap?n=e.bumpMap:e.roughnessMap?n=e.roughnessMap:e.metalnessMap?n=e.metalnessMap:e.alphaMap?n=e.alphaMap:e.emissiveMap&&(n=e.emissiveMap),void 0!==n&&(n.isWebGLRenderTarget&&(n=n.texture),!0===n.matrixAutoUpdate&&n.updateMatrix(),t.uvTransform.value.copy(n.matrix))}function jt(t,e){t.specular.value=e.specular,t.shininess.value=Math.max(e.shininess,1e-4),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap),e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===v&&(t.bumpScale.value*=-1)),e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===v&&t.normalScale.value.negate()),e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}function Vt(t,e){t.roughness.value=e.roughness,t.metalness.value=e.metalness,e.roughnessMap&&(t.roughnessMap.value=e.roughnessMap),e.metalnessMap&&(t.metalnessMap.value=e.metalnessMap),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap),e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===v&&(t.bumpScale.value*=-1)),e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===v&&t.normalScale.value.negate()),e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias),e.envMap&&(t.envMapIntensity.value=e.envMapIntensity)}Nt.setAnimationLoop(function(t){At.isPresenting()||Bt&&Bt(t)}),"undefined"!=typeof window&&Nt.setContext(window),this.setAnimationLoop=function(t){Bt=t,At.setAnimationLoop(t),Nt.start()},this.render=function(t,e){var n,r;if(void 0!==arguments[2]&&(console.warn("THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead."),n=arguments[2]),void 0!==arguments[3]&&(console.warn("THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead."),r=arguments[3]),e&&e.isCamera){if(!W){ot.geometry=null,ot.program=null,ot.wireframe=!1,rt=-1,at=null,!0===t.autoUpdate&&t.updateMatrixWorld(),null===e.parent&&e.updateMatrixWorld(),At.enabled&&(e=At.getCamera(e)),(m=z.get(t,e)).init(),t.onBeforeRender(V,t,e,n||et),_t.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),vt.setFromMatrix(_t),bt=this.localClippingEnabled,xt=yt.init(this.clippingPlanes,bt,e),(d=U.get(t,e)).init(),function t(e,n,r,i){if(!1===e.visible)return;var o=e.layers.test(n.layers);if(o)if(e.isGroup)r=e.renderOrder;else if(e.isLight)m.pushLight(e),e.castShadow&&m.pushShadow(e);else if(e.isSprite){if(!e.frustumCulled||vt.intersectsSprite(e)){i&&wt.setFromMatrixPosition(e.matrixWorld).applyMatrix4(_t);var a=B.update(e),s=e.material;s.visible&&d.push(e,a,s,r,wt.z,null)}}else if(e.isImmediateRenderObject)i&&wt.setFromMatrixPosition(e.matrixWorld).applyMatrix4(_t),d.push(e,null,e.material,r,wt.z,null);else if((e.isMesh||e.isLine||e.isPoints)&&(e.isSkinnedMesh&&e.skeleton.update(),!e.frustumCulled||vt.intersectsObject(e))){i&&wt.setFromMatrixPosition(e.matrixWorld).applyMatrix4(_t);var a=B.update(e),s=e.material;if(Array.isArray(s))for(var u=a.groups,c=0,l=u.length;c=0&&e<=t.width-r&&n>=0&&n<=t.height-i&&x.readPixels(e,n,r,i,j.convert(c),j.convert(l),o):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{s&&x.bindFramebuffer(36160,nt)}}}else console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.")},this.copyFramebufferToTexture=function(t,e,n){var r=e.image.width,i=e.image.height,o=j.convert(e.format);O.setTexture2D(e,0),x.copyTexImage2D(3553,n||0,o,t.x,t.y,r,i,0)},this.copyTextureToTexture=function(t,e,n,r){var i=e.image.width,o=e.image.height,a=j.convert(n.format),s=j.convert(n.type);O.setTexture2D(n,0),e.isDataTexture?x.texSubImage2D(3553,r||0,t.x,t.y,i,o,a,s,e.image.data):x.texSubImage2D(3553,r||0,t.x,t.y,a,s,e.image)}}function wi(t,e){this.name="",this.color=new ln(t),this.density=void 0!==e?e:25e-5}function Mi(t,e,n){this.name="",this.color=new ln(t),this.near=void 0!==e?e:1,this.far=void 0!==n?n:1e3}function Ei(){xn.call(this),this.type="Scene",this.background=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0}function Si(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.dynamic=!1,this.updateRange={offset:0,count:-1},this.version=0}function Ti(t,e,n,r){this.data=t,this.itemSize=e,this.offset=n,this.normalized=!0===r}function Ai(t){Hn.call(this),this.type="SpriteMaterial",this.color=new ln(16777215),this.map=null,this.rotation=0,this.sizeAttenuation=!0,this.lights=!1,this.transparent=!0,this.setValues(t)}function Li(t){if(xn.call(this),this.type="Sprite",void 0===gi){gi=new Bn;var e=new Si(new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),5);gi.setIndex([0,1,2,0,2,3]),gi.addAttribute("position",new Ti(e,3,0,!1)),gi.addAttribute("uv",new Ti(e,2,3,!1))}this.geometry=gi,this.material=void 0!==t?t:new Ai,this.center=new He(.5,.5)}function Ri(){xn.call(this),this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}})}function Pi(t,e){t&&t.isGeometry&&console.error("THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."),Xn.call(this,t,e),this.type="SkinnedMesh",this.bindMode="attached",this.bindMatrix=new rn,this.bindMatrixInverse=new rn}function Ci(t,e){if(t=t||[],this.bones=t.slice(0),this.boneMatrices=new Float32Array(16*this.bones.length),void 0===e)this.calculateInverses();else if(this.bones.length===e.length)this.boneInverses=e.slice(0);else{console.warn("THREE.Skeleton boneInverses is the wrong length."),this.boneInverses=[];for(var n=0,r=this.bones.length;n=0?(t(g-1e-5,m,h),f.subVectors(l,h)):(t(g+1e-5,m,h),f.subVectors(h,l)),m-1e-5>=0?(t(g,m-1e-5,h),p.subVectors(l,h)):(t(g,m+1e-5,h),p.subVectors(h,l)),c.crossVectors(f,p).normalize(),s.push(c.x,c.y,c.z),u.push(g,m)}}for(r=0;r.9&&a<.1&&(e<.2&&(o[t+0]+=1),n<.2&&(o[t+2]+=1),r<.2&&(o[t+4]+=1))}}()}(),this.addAttribute("position",new Pn(i,3)),this.addAttribute("normal",new Pn(i.slice(),3)),this.addAttribute("uv",new Pn(o,2)),0===r?this.computeVertexNormals():this.normalizeNormals()}function Xi(t,e){_n.call(this),this.type="TetrahedronGeometry",this.parameters={radius:t,detail:e},this.fromBufferGeometry(new Ji(t,e)),this.mergeVertices()}function Ji(t,e){Yi.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],t,e),this.type="TetrahedronBufferGeometry",this.parameters={radius:t,detail:e}}function Zi(t,e){_n.call(this),this.type="OctahedronGeometry",this.parameters={radius:t,detail:e},this.fromBufferGeometry(new Qi(t,e)),this.mergeVertices()}function Qi(t,e){Yi.call(this,[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],t,e),this.type="OctahedronBufferGeometry",this.parameters={radius:t,detail:e}}function Ki(t,e){_n.call(this),this.type="IcosahedronGeometry",this.parameters={radius:t,detail:e},this.fromBufferGeometry(new $i(t,e)),this.mergeVertices()}function $i(t,e){var n=(1+Math.sqrt(5))/2,r=[-1,n,0,1,n,0,-1,-n,0,1,-n,0,0,-1,n,0,1,n,0,-1,-n,0,1,-n,n,0,-1,n,0,1,-n,0,-1,-n,0,1];Yi.call(this,r,[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],t,e),this.type="IcosahedronBufferGeometry",this.parameters={radius:t,detail:e}}function to(t,e){_n.call(this),this.type="DodecahedronGeometry",this.parameters={radius:t,detail:e},this.fromBufferGeometry(new eo(t,e)),this.mergeVertices()}function eo(t,e){var n=(1+Math.sqrt(5))/2,r=1/n,i=[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-r,-n,0,-r,n,0,r,-n,0,r,n,-r,-n,0,-r,n,0,r,-n,0,r,n,0,-n,0,-r,n,0,-r,-n,0,r,n,0,r];Yi.call(this,i,[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],t,e),this.type="DodecahedronBufferGeometry",this.parameters={radius:t,detail:e}}function no(t,e,n,r,i,o){_n.call(this),this.type="TubeGeometry",this.parameters={path:t,tubularSegments:e,radius:n,radialSegments:r,closed:i},void 0!==o&&console.warn("THREE.TubeGeometry: taper has been removed.");var a=new ro(t,e,n,r,i);this.tangents=a.tangents,this.normals=a.normals,this.binormals=a.binormals,this.fromBufferGeometry(a),this.mergeVertices()}function ro(t,e,n,r,i){Bn.call(this),this.type="TubeBufferGeometry",this.parameters={path:t,tubularSegments:e,radius:n,radialSegments:r,closed:i},e=e||64,n=n||1,r=r||8,i=i||!1;var o=t.computeFrenetFrames(e,i);this.tangents=o.tangents,this.normals=o.normals,this.binormals=o.binormals;var a,s,u=new je,c=new je,l=new He,h=new je,f=[],p=[],d=[],m=[];function g(i){h=t.getPointAt(i/e,h);var a=o.normals[i],l=o.binormals[i];for(s=0;s<=r;s++){var d=s/r*Math.PI*2,m=Math.sin(d),g=-Math.cos(d);c.x=g*a.x+m*l.x,c.y=g*a.y+m*l.y,c.z=g*a.z+m*l.z,c.normalize(),p.push(c.x,c.y,c.z),u.x=h.x+n*c.x,u.y=h.y+n*c.y,u.z=h.z+n*c.z,f.push(u.x,u.y,u.z)}}!function(){for(a=0;ar.far||i.push({distance:y,point:t.clone(),uv:qn.getUV(t,a,s,u,c,l,h,new He),face:null,object:this})}}}(),clone:function(){return new this.constructor(this.material).copy(this)},copy:function(t){return xn.prototype.copy.call(this,t),void 0!==t.center&&this.center.copy(t.center),this}}),Ri.prototype=Object.assign(Object.create(xn.prototype),{constructor:Ri,copy:function(t){xn.prototype.copy.call(this,t,!1);for(var e=t.levels,n=0,r=e.length;n1){t.setFromMatrixPosition(n.matrixWorld),e.setFromMatrixPosition(this.matrixWorld);var i=t.distanceTo(e);r[0].object.visible=!0;for(var o=1,a=r.length;o=r[o].distance;o++)r[o-1].object.visible=!1,r[o].object.visible=!0;for(;oc))p.applyMatrix4(this.matrixWorld),(E=r.ray.origin.distanceTo(p))r.far||i.push({distance:E,point:f.clone().applyMatrix4(this.matrixWorld),index:y,face:null,faceIndex:null,object:this})}else for(y=0,x=g.length/3-1;yc))p.applyMatrix4(this.matrixWorld),(E=r.ray.origin.distanceTo(p))r.far||i.push({distance:E,point:f.clone().applyMatrix4(this.matrixWorld),index:y,face:null,faceIndex:null,object:this})}}else if(a.isGeometry){var w=a.vertices,M=w.length;for(y=0;yc))p.applyMatrix4(this.matrixWorld),(E=r.ray.origin.distanceTo(p))r.far||i.push({distance:E,point:f.clone().applyMatrix4(this.matrixWorld),index:y,face:null,faceIndex:null,object:this})}}}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),Bi.prototype=Object.assign(Object.create(Di.prototype),{constructor:Bi,isLineSegments:!0,computeLineDistances:function(){var t=new je,e=new je;return function(){var n=this.geometry;if(n.isBufferGeometry)if(null===n.index){for(var r=n.attributes.position,i=[],o=0,a=r.count;or.far)return;i.push({distance:u,distanceToRay:Math.sqrt(a),point:f.clone(),index:n,face:null,object:o})}}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),Gi.prototype=Object.assign(Object.create(Ye.prototype),{constructor:Gi,isVideoTexture:!0,update:function(){var t=this.image;t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}),Fi.prototype=Object.create(Ye.prototype),Fi.prototype.constructor=Fi,Fi.prototype.isCompressedTexture=!0,Hi.prototype=Object.create(Ye.prototype),Hi.prototype.constructor=Hi,Hi.prototype.isCanvasTexture=!0,ki.prototype=Object.create(Ye.prototype),ki.prototype.constructor=ki,ki.prototype.isDepthTexture=!0,ji.prototype=Object.create(Bn.prototype),ji.prototype.constructor=ji,Vi.prototype=Object.create(_n.prototype),Vi.prototype.constructor=Vi,Wi.prototype=Object.create(Bn.prototype),Wi.prototype.constructor=Wi,qi.prototype=Object.create(_n.prototype),qi.prototype.constructor=qi,Yi.prototype=Object.create(Bn.prototype),Yi.prototype.constructor=Yi,Xi.prototype=Object.create(_n.prototype),Xi.prototype.constructor=Xi,Ji.prototype=Object.create(Yi.prototype),Ji.prototype.constructor=Ji,Zi.prototype=Object.create(_n.prototype),Zi.prototype.constructor=Zi,Qi.prototype=Object.create(Yi.prototype),Qi.prototype.constructor=Qi,Ki.prototype=Object.create(_n.prototype),Ki.prototype.constructor=Ki,$i.prototype=Object.create(Yi.prototype),$i.prototype.constructor=$i,to.prototype=Object.create(_n.prototype),to.prototype.constructor=to,eo.prototype=Object.create(Yi.prototype),eo.prototype.constructor=eo,no.prototype=Object.create(_n.prototype),no.prototype.constructor=no,ro.prototype=Object.create(Bn.prototype),ro.prototype.constructor=ro,ro.prototype.toJSON=function(){var t=Bn.prototype.toJSON.call(this);return t.path=this.parameters.path.toJSON(),t},io.prototype=Object.create(_n.prototype),io.prototype.constructor=io,oo.prototype=Object.create(Bn.prototype),oo.prototype.constructor=oo,ao.prototype=Object.create(_n.prototype),ao.prototype.constructor=ao,so.prototype=Object.create(Bn.prototype),so.prototype.constructor=so;var uo=function(t,e,n){n=n||2;var r,i,o,a,s,u,c,l=e&&e.length,h=l?e[0]*n:t.length,f=co(t,0,h,n,!0),p=[];if(!f)return p;if(l&&(f=function(t,e,n,r){var i,o,a,s,u,c=[];for(i=0,o=e.length;i80*n){r=o=t[0],i=a=t[1];for(var d=n;do&&(o=s),u>a&&(a=u);c=0!==(c=Math.max(o-r,a-i))?1/c:0}return ho(f,p,n,r,i,c),p};function co(t,e,n,r,i){var o,a;if(i===function(t,e,n,r){for(var i=0,o=e,a=n-r;o0)for(o=e;o=e;o-=r)a=Lo(o,t[o],t[o+1],a);return a&&Eo(a,a.next)&&(Ro(a),a=a.next),a}function lo(t,e){if(!t)return t;e||(e=t);var n,r=t;do{if(n=!1,r.steiner||!Eo(r,r.next)&&0!==Mo(r.prev,r,r.next))r=r.next;else{if(Ro(r),(r=e=r.prev)===r.next)break;n=!0}}while(n||r!==e);return e}function ho(t,e,n,r,i,o,a){if(t){!a&&o&&function(t,e,n,r){var i=t;do{null===i.z&&(i.z=xo(i.x,i.y,e,n,r)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,function(t){var e,n,r,i,o,a,s,u,c=1;do{for(n=t,t=null,o=null,a=0;n;){for(a++,r=n,s=0,e=0;e0||u>0&&r;)0!==s&&(0===u||!r||n.z<=r.z)?(i=n,n=n.nextZ,s--):(i=r,r=r.nextZ,u--),o?o.nextZ=i:t=i,i.prevZ=o,o=i;n=r}o.nextZ=null,c*=2}while(a>1)}(i)}(t,r,i,o);for(var s,u,c=t;t.prev!==t.next;)if(s=t.prev,u=t.next,o?po(t,r,i,o):fo(t))e.push(s.i/n),e.push(t.i/n),e.push(u.i/n),Ro(t),t=u.next,c=u.next;else if((t=u)===c){a?1===a?ho(t=mo(t,e,n),e,n,r,i,o,2):2===a&&go(t,e,n,r,i,o):ho(lo(t),e,n,r,i,o,1);break}}}function fo(t){var e=t.prev,n=t,r=t.next;if(Mo(e,n,r)>=0)return!1;for(var i=t.next.next;i!==t.prev;){if(_o(e.x,e.y,n.x,n.y,r.x,r.y,i.x,i.y)&&Mo(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function po(t,e,n,r){var i=t.prev,o=t,a=t.next;if(Mo(i,o,a)>=0)return!1;for(var s=i.xo.x?i.x>a.x?i.x:a.x:o.x>a.x?o.x:a.x,l=i.y>o.y?i.y>a.y?i.y:a.y:o.y>a.y?o.y:a.y,h=xo(s,u,e,n,r),f=xo(c,l,e,n,r),p=t.nextZ;p&&p.z<=f;){if(p!==t.prev&&p!==t.next&&_o(i.x,i.y,o.x,o.y,a.x,a.y,p.x,p.y)&&Mo(p.prev,p,p.next)>=0)return!1;p=p.nextZ}for(p=t.prevZ;p&&p.z>=h;){if(p!==t.prev&&p!==t.next&&_o(i.x,i.y,o.x,o.y,a.x,a.y,p.x,p.y)&&Mo(p.prev,p,p.next)>=0)return!1;p=p.prevZ}return!0}function mo(t,e,n){var r=t;do{var i=r.prev,o=r.next.next;!Eo(i,o)&&So(i,r,r.next,o)&&To(i,o)&&To(o,i)&&(e.push(i.i/n),e.push(r.i/n),e.push(o.i/n),Ro(r),Ro(r.next),r=t=o),r=r.next}while(r!==t);return r}function go(t,e,n,r,i,o){var a=t;do{for(var s=a.next.next;s!==a.prev;){if(a.i!==s.i&&wo(a,s)){var u=Ao(a,s);return a=lo(a,a.next),u=lo(u,u.next),ho(a,e,n,r,i,o),void ho(u,e,n,r,i,o)}s=s.next}a=a.next}while(a!==t)}function vo(t,e){return t.x-e.x}function yo(t,e){if(e=function(t,e){var n,r=e,i=t.x,o=t.y,a=-1/0;do{if(o<=r.y&&o>=r.next.y&&r.next.y!==r.y){var s=r.x+(o-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(s<=i&&s>a){if(a=s,s===i){if(o===r.y)return r;if(o===r.next.y)return r.next}n=r.x=r.x&&r.x>=l&&i!==r.x&&_o(on.x)&&To(r,t)&&(n=r,f=u),r=r.next;return n}(t,e)){var n=Ao(e,t);lo(n,n.next)}}function xo(t,e,n,r,i){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*i)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-r)*i)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function bo(t){var e=t,n=t;do{e.x=0&&(t-a)*(r-s)-(n-a)*(e-s)>=0&&(n-a)*(o-s)-(i-a)*(r-s)>=0}function wo(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&So(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&To(t,e)&&To(e,t)&&function(t,e){var n=t,r=!1,i=(t.x+e.x)/2,o=(t.y+e.y)/2;do{n.y>o!=n.next.y>o&&n.next.y!==n.y&&i<(n.next.x-n.x)*(o-n.y)/(n.next.y-n.y)+n.x&&(r=!r),n=n.next}while(n!==t);return r}(t,e)}function Mo(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function Eo(t,e){return t.x===e.x&&t.y===e.y}function So(t,e,n,r){return!!(Eo(t,e)&&Eo(n,r)||Eo(t,r)&&Eo(n,e))||Mo(t,e,n)>0!=Mo(t,e,r)>0&&Mo(n,r,t)>0!=Mo(n,r,e)>0}function To(t,e){return Mo(t.prev,t,t.next)<0?Mo(t,e,t.next)>=0&&Mo(t,t.prev,e)>=0:Mo(t,e,t.prev)<0||Mo(t,t.next,e)<0}function Ao(t,e){var n=new Po(t.i,t.x,t.y),r=new Po(e.i,e.x,e.y),i=t.next,o=e.prev;return t.next=e,e.prev=t,n.next=i,i.prev=n,r.next=n,n.prev=r,o.next=r,r.prev=o,r}function Lo(t,e,n,r){var i=new Po(t,e,n);return r?(i.next=r.next,i.prev=r,r.next.prev=i,r.next=i):(i.prev=i,i.next=i),i}function Ro(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function Po(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}var Co={area:function(t){for(var e=t.length,n=0,r=e-1,i=0;i2&&t[e-1].equals(t[0])&&t.pop()}function Io(t,e){for(var n=0;nNumber.EPSILON){var f=Math.sqrt(l),p=Math.sqrt(u*u+c*c),d=e.x-s/f,m=e.y+a/f,g=((n.x-c/p-d)*c-(n.y+u/p-m)*u)/(a*c-s*u),v=(r=d+a*g-t.x)*r+(i=m+s*g-t.y)*i;if(v<=2)return new He(r,i);o=Math.sqrt(v/2)}else{var y=!1;a>Number.EPSILON?u>Number.EPSILON&&(y=!0):a<-Number.EPSILON?u<-Number.EPSILON&&(y=!0):Math.sign(s)===Math.sign(c)&&(y=!0),y?(r=-s,i=a,o=Math.sqrt(l)):(r=a,i=s,o=Math.sqrt(l/2))}return new He(r/o,i/o)}for(var G=[],F=0,H=L.length,k=H-1,j=F+1;F=0;P--){for(O=P/f,I=l*Math.cos(O*Math.PI/2),C=h*Math.sin(O*Math.PI/2),F=0,H=L.length;F=0;){n=F,(r=F-1)<0&&(r=t.length-1);var i=0,o=s+2*f;for(i=0;i0)&&d.push(w,M,S),(u!==n-1||c0&&v(!0),e>0&&v(!1)),this.setIndex(c),this.addAttribute("position",new Pn(l,3)),this.addAttribute("normal",new Pn(h,3)),this.addAttribute("uv",new Pn(f,2))}function Ko(t,e,n,r,i,o,a){Zo.call(this,0,t,e,n,r,i,o,a),this.type="ConeGeometry",this.parameters={radius:t,height:e,radialSegments:n,heightSegments:r,openEnded:i,thetaStart:o,thetaLength:a}}function $o(t,e,n,r,i,o,a){Qo.call(this,0,t,e,n,r,i,o,a),this.type="ConeBufferGeometry",this.parameters={radius:t,height:e,radialSegments:n,heightSegments:r,openEnded:i,thetaStart:o,thetaLength:a}}function ta(t,e,n,r){_n.call(this),this.type="CircleGeometry",this.parameters={radius:t,segments:e,thetaStart:n,thetaLength:r},this.fromBufferGeometry(new ea(t,e,n,r)),this.mergeVertices()}function ea(t,e,n,r){Bn.call(this),this.type="CircleBufferGeometry",this.parameters={radius:t,segments:e,thetaStart:n,thetaLength:r},t=t||1,e=void 0!==e?Math.max(3,e):8,n=void 0!==n?n:0,r=void 0!==r?r:2*Math.PI;var i,o,a=[],s=[],u=[],c=[],l=new je,h=new He;for(s.push(0,0,0),u.push(0,0,1),c.push(.5,.5),o=0,i=3;o<=e;o++,i+=3){var f=n+o/e*r;l.x=t*Math.cos(f),l.y=t*Math.sin(f),s.push(l.x,l.y,l.z),u.push(0,0,1),h.x=(s[i]/t+1)/2,h.y=(s[i+1]/t+1)/2,c.push(h.x,h.y)}for(i=1;i<=e;i++)a.push(i,i+1,0);this.setIndex(a),this.addAttribute("position",new Pn(s,3)),this.addAttribute("normal",new Pn(u,3)),this.addAttribute("uv",new Pn(c,2))}zo.prototype=Object.create(_n.prototype),zo.prototype.constructor=zo,Go.prototype=Object.create(Bo.prototype),Go.prototype.constructor=Go,Fo.prototype=Object.create(_n.prototype),Fo.prototype.constructor=Fo,Ho.prototype=Object.create(Bn.prototype),Ho.prototype.constructor=Ho,ko.prototype=Object.create(_n.prototype),ko.prototype.constructor=ko,jo.prototype=Object.create(Bn.prototype),jo.prototype.constructor=jo,Vo.prototype=Object.create(_n.prototype),Vo.prototype.constructor=Vo,Wo.prototype=Object.create(Bn.prototype),Wo.prototype.constructor=Wo,qo.prototype=Object.create(_n.prototype),qo.prototype.constructor=qo,qo.prototype.toJSON=function(){var t=_n.prototype.toJSON.call(this);return Xo(this.parameters.shapes,t)},Yo.prototype=Object.create(Bn.prototype),Yo.prototype.constructor=Yo,Yo.prototype.toJSON=function(){var t=Bn.prototype.toJSON.call(this);return Xo(this.parameters.shapes,t)},Jo.prototype=Object.create(Bn.prototype),Jo.prototype.constructor=Jo,Zo.prototype=Object.create(_n.prototype),Zo.prototype.constructor=Zo,Qo.prototype=Object.create(Bn.prototype),Qo.prototype.constructor=Qo,Ko.prototype=Object.create(Zo.prototype),Ko.prototype.constructor=Ko,$o.prototype=Object.create(Qo.prototype),$o.prototype.constructor=$o,ta.prototype=Object.create(_n.prototype),ta.prototype.constructor=ta,ea.prototype=Object.create(Bn.prototype),ea.prototype.constructor=ea;var na=Object.freeze({WireframeGeometry:ji,ParametricGeometry:Vi,ParametricBufferGeometry:Wi,TetrahedronGeometry:Xi,TetrahedronBufferGeometry:Ji,OctahedronGeometry:Zi,OctahedronBufferGeometry:Qi,IcosahedronGeometry:Ki,IcosahedronBufferGeometry:$i,DodecahedronGeometry:to,DodecahedronBufferGeometry:eo,PolyhedronGeometry:qi,PolyhedronBufferGeometry:Yi,TubeGeometry:no,TubeBufferGeometry:ro,TorusKnotGeometry:io,TorusKnotBufferGeometry:oo,TorusGeometry:ao,TorusBufferGeometry:so,TextGeometry:zo,TextBufferGeometry:Go,SphereGeometry:Fo,SphereBufferGeometry:Ho,RingGeometry:ko,RingBufferGeometry:jo,PlaneGeometry:zn,PlaneBufferGeometry:Gn,LatheGeometry:Vo,LatheBufferGeometry:Wo,ShapeGeometry:qo,ShapeBufferGeometry:Yo,ExtrudeGeometry:Do,ExtrudeBufferGeometry:Bo,EdgesGeometry:Jo,ConeGeometry:Ko,ConeBufferGeometry:$o,CylinderGeometry:Zo,CylinderBufferGeometry:Qo,CircleGeometry:ta,CircleBufferGeometry:ea,BoxGeometry:Nn,BoxBufferGeometry:Un});function ra(t){Hn.call(this),this.type="ShadowMaterial",this.color=new ln(0),this.transparent=!0,this.setValues(t)}function ia(t){Vn.call(this,t),this.type="RawShaderMaterial"}function oa(t){Hn.call(this),this.defines={STANDARD:""},this.type="MeshStandardMaterial",this.color=new ln(16777215),this.roughness=.5,this.metalness=.5,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ln(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ze,this.normalScale=new He(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function aa(t){oa.call(this),this.defines={PHYSICAL:""},this.type="MeshPhysicalMaterial",this.reflectivity=.5,this.clearCoat=0,this.clearCoatRoughness=0,this.setValues(t)}function sa(t){Hn.call(this),this.type="MeshPhongMaterial",this.color=new ln(16777215),this.specular=new ln(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ln(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ze,this.normalScale=new He(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=tt,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function ua(t){sa.call(this),this.defines={TOON:""},this.type="MeshToonMaterial",this.gradientMap=null,this.setValues(t)}function ca(t){Hn.call(this),this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ze,this.normalScale=new He(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function la(t){Hn.call(this),this.type="MeshLambertMaterial",this.color=new ln(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ln(0),this.emissiveIntensity=1,this.emissiveMap=null,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=tt,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function ha(t){Hn.call(this),this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new ln(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ze,this.normalScale=new He(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.lights=!1,this.setValues(t)}function fa(t){Ii.call(this),this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(t)}ra.prototype=Object.create(Hn.prototype),ra.prototype.constructor=ra,ra.prototype.isShadowMaterial=!0,ra.prototype.copy=function(t){return Hn.prototype.copy.call(this,t),this.color.copy(t.color),this},ia.prototype=Object.create(Vn.prototype),ia.prototype.constructor=ia,ia.prototype.isRawShaderMaterial=!0,oa.prototype=Object.create(Hn.prototype),oa.prototype.constructor=oa,oa.prototype.isMeshStandardMaterial=!0,oa.prototype.copy=function(t){return Hn.prototype.copy.call(this,t),this.defines={STANDARD:""},this.color.copy(t.color),this.roughness=t.roughness,this.metalness=t.metalness,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.roughnessMap=t.roughnessMap,this.metalnessMap=t.metalnessMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapIntensity=t.envMapIntensity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this},aa.prototype=Object.create(oa.prototype),aa.prototype.constructor=aa,aa.prototype.isMeshPhysicalMaterial=!0,aa.prototype.copy=function(t){return oa.prototype.copy.call(this,t),this.defines={PHYSICAL:""},this.reflectivity=t.reflectivity,this.clearCoat=t.clearCoat,this.clearCoatRoughness=t.clearCoatRoughness,this},sa.prototype=Object.create(Hn.prototype),sa.prototype.constructor=sa,sa.prototype.isMeshPhongMaterial=!0,sa.prototype.copy=function(t){return Hn.prototype.copy.call(this,t),this.color.copy(t.color),this.specular.copy(t.specular),this.shininess=t.shininess,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this},ua.prototype=Object.create(sa.prototype),ua.prototype.constructor=ua,ua.prototype.isMeshToonMaterial=!0,ua.prototype.copy=function(t){return sa.prototype.copy.call(this,t),this.gradientMap=t.gradientMap,this},ca.prototype=Object.create(Hn.prototype),ca.prototype.constructor=ca,ca.prototype.isMeshNormalMaterial=!0,ca.prototype.copy=function(t){return Hn.prototype.copy.call(this,t),this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this},la.prototype=Object.create(Hn.prototype),la.prototype.constructor=la,la.prototype.isMeshLambertMaterial=!0,la.prototype.copy=function(t){return Hn.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this},ha.prototype=Object.create(Hn.prototype),ha.prototype.constructor=ha,ha.prototype.isMeshMatcapMaterial=!0,ha.prototype.copy=function(t){return Hn.prototype.copy.call(this,t),this.defines={MATCAP:""},this.color.copy(t.color),this.matcap=t.matcap,this.map=t.map,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this},fa.prototype=Object.create(Ii.prototype),fa.prototype.constructor=fa,fa.prototype.isLineDashedMaterial=!0,fa.prototype.copy=function(t){return Ii.prototype.copy.call(this,t),this.scale=t.scale,this.dashSize=t.dashSize,this.gapSize=t.gapSize,this};var pa=Object.freeze({ShadowMaterial:ra,SpriteMaterial:Ai,RawShaderMaterial:ia,ShaderMaterial:Vn,PointsMaterial:Ui,MeshPhysicalMaterial:aa,MeshStandardMaterial:oa,MeshPhongMaterial:sa,MeshToonMaterial:ua,MeshNormalMaterial:ca,MeshLambertMaterial:la,MeshDepthMaterial:si,MeshDistanceMaterial:ui,MeshBasicMaterial:Yn,MeshMatcapMaterial:ha,LineDashedMaterial:fa,LineBasicMaterial:Ii,Material:Hn}),da={arraySlice:function(t,e,n){return da.isTypedArray(t)?new t.constructor(t.subarray(e,void 0!==n?n:t.length)):t.slice(e,n)},convertArray:function(t,e,n){return!t||!n&&t.constructor===e?t:"number"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t)},isTypedArray:function(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)},getKeyframeOrder:function(t){for(var e=t.length,n=new Array(e),r=0;r!==e;++r)n[r]=r;return n.sort(function(e,n){return t[e]-t[n]}),n},sortedArray:function(t,e,n){for(var r=t.length,i=new t.constructor(r),o=0,a=0;a!==r;++o)for(var s=n[o]*e,u=0;u!==e;++u)i[a++]=t[s+u];return i},flattenJSON:function(t,e,n,r){for(var i=1,o=t[0];void 0!==o&&void 0===o[r];)o=t[i++];if(void 0!==o){var a=o[r];if(void 0!==a)if(Array.isArray(a))do{void 0!==(a=o[r])&&(e.push(o.time),n.push.apply(n,a)),o=t[i++]}while(void 0!==o);else if(void 0!==a.toArray)do{void 0!==(a=o[r])&&(e.push(o.time),a.toArray(n,n.length)),o=t[i++]}while(void 0!==o);else do{void 0!==(a=o[r])&&(e.push(o.time),n.push(a)),o=t[i++]}while(void 0!==o)}}};function ma(t,e,n,r){this.parameterPositions=t,this._cachedIndex=0,this.resultBuffer=void 0!==r?r:new e.constructor(n),this.sampleValues=e,this.valueSize=n}function ga(t,e,n,r){ma.call(this,t,e,n,r),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0}function va(t,e,n,r){ma.call(this,t,e,n,r)}function ya(t,e,n,r){ma.call(this,t,e,n,r)}function xa(t,e,n,r){if(void 0===t)throw new Error("THREE.KeyframeTrack: track name is undefined");if(void 0===e||0===e.length)throw new Error("THREE.KeyframeTrack: no keyframes in track named "+t);this.name=t,this.times=da.convertArray(e,this.TimeBufferType),this.values=da.convertArray(n,this.ValueBufferType),this.setInterpolation(r||this.DefaultInterpolation)}function ba(t,e,n){xa.call(this,t,e,n)}function _a(t,e,n,r){xa.call(this,t,e,n,r)}function wa(t,e,n,r){xa.call(this,t,e,n,r)}function Ma(t,e,n,r){ma.call(this,t,e,n,r)}function Ea(t,e,n,r){xa.call(this,t,e,n,r)}function Sa(t,e,n,r){xa.call(this,t,e,n,r)}function Ta(t,e,n,r){xa.call(this,t,e,n,r)}function Aa(t,e,n){this.name=t,this.tracks=n,this.duration=void 0!==e?e:-1,this.uuid=Fe.generateUUID(),this.duration<0&&this.resetDuration()}function La(t){if(void 0===t.type)throw new Error("THREE.KeyframeTrack: track type undefined, can not parse");var e=function(t){switch(t.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return wa;case"vector":case"vector2":case"vector3":case"vector4":return Ta;case"color":return _a;case"quaternion":return Ea;case"bool":case"boolean":return ba;case"string":return Sa}throw new Error("THREE.KeyframeTrack: Unsupported typeName: "+t)}(t.type);if(void 0===t.times){var n=[],r=[];da.flattenJSON(t.keys,n,r,"value"),t.times=n,t.values=r}return void 0!==e.parse?e.parse(t):new e(t.name,t.times,t.values,t.interpolation)}Object.assign(ma.prototype,{evaluate:function(t){var e=this.parameterPositions,n=this._cachedIndex,r=e[n],i=e[n-1];t:{e:{var o;n:{r:if(!(t=i)break t;var s=e[1];t=(i=e[--n-1]))break e}o=n,n=0}for(;n>>1;te;)--o;if(++o,0!==i||o!==r){i>=o&&(i=(o=Math.max(o,1))-1);var a=this.getValueSize();this.times=da.arraySlice(n,i,o),this.values=da.arraySlice(this.values,i*a,o*a)}return this},validate:function(){var t=!0,e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);var n=this.times,r=this.values,i=n.length;0===i&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);for(var o=null,a=0;a!==i;a++){var s=n[a];if("number"==typeof s&&isNaN(s)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,a,s),t=!1;break}if(null!==o&&o>s){console.error("THREE.KeyframeTrack: Out of order keys.",this,a,s,o),t=!1;break}o=s}if(void 0!==r&&da.isTypedArray(r)){a=0;for(var u=r.length;a!==u;++a){var c=r[a];if(isNaN(c)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,a,c),t=!1;break}}}return t},optimize:function(){for(var t=this.times,e=this.values,n=this.getValueSize(),r=this.getInterpolation()===_e,i=1,o=t.length-1,a=1;a0){t[i]=t[o];for(d=o*n,m=i*n,f=0;f!==n;++f)e[m+f]=e[d+f];++i}return i!==t.length&&(this.times=da.arraySlice(t,0,i),this.values=da.arraySlice(e,0,i*n)),this},clone:function(){var t=da.arraySlice(this.times,0),e=da.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}),ba.prototype=Object.assign(Object.create(xa.prototype),{constructor:ba,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:xe,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),_a.prototype=Object.assign(Object.create(xa.prototype),{constructor:_a,ValueTypeName:"color"}),wa.prototype=Object.assign(Object.create(xa.prototype),{constructor:wa,ValueTypeName:"number"}),Ma.prototype=Object.assign(Object.create(ma.prototype),{constructor:Ma,interpolate_:function(t,e,n,r){for(var i=this.resultBuffer,o=this.sampleValues,a=this.valueSize,s=t*a,u=(n-e)/(r-e),c=s+a;s!==c;s+=4)ke.slerpFlat(i,0,o,s-a,o,s,u);return i}}),Ea.prototype=Object.assign(Object.create(xa.prototype),{constructor:Ea,ValueTypeName:"quaternion",DefaultInterpolation:be,InterpolantFactoryMethodLinear:function(t){return new Ma(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodSmooth:void 0}),Sa.prototype=Object.assign(Object.create(xa.prototype),{constructor:Sa,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:xe,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),Ta.prototype=Object.assign(Object.create(xa.prototype),{constructor:Ta,ValueTypeName:"vector"}),Object.assign(Aa,{parse:function(t){for(var e=[],n=t.tracks,r=1/(t.fps||1),i=0,o=n.length;i!==o;++i)e.push(La(n[i]).scale(r));return new Aa(t.name,t.duration,e)},toJSON:function(t){for(var e=[],n=t.tracks,r={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid},i=0,o=n.length;i!==o;++i)e.push(xa.toJSON(n[i]));return r},CreateFromMorphTargetSequence:function(t,e,n,r){for(var i=e.length,o=[],a=0;a1){var c=r[h=u[1]];c||(r[h]=c=[]),c.push(s)}}var l=[];for(var h in r)l.push(Aa.CreateFromMorphTargetSequence(h,r[h],e,n));return l},parseAnimation:function(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;for(var n=function(t,e,n,r,i){if(0!==n.length){var o=[],a=[];da.flattenJSON(n,o,a,r),0!==o.length&&i.push(new t(e,o,a))}},r=[],i=t.name||"default",o=t.length||-1,a=t.fps||30,s=t.hierarchy||[],u=0;u0||0===t.search(/^data\:image\/jpeg/);i.format=r?Gt:Ft,i.needsUpdate=!0,void 0!==e&&e(i)},n,r),i},setCrossOrigin:function(t){return this.crossOrigin=t,this},setPath:function(t){return this.path=t,this}}),Object.assign(Fa.prototype,{getPoint:function(){return console.warn("THREE.Curve: .getPoint() not implemented."),null},getPointAt:function(t,e){var n=this.getUtoTmapping(t);return this.getPoint(n,e)},getPoints:function(t){void 0===t&&(t=5);for(var e=[],n=0;n<=t;n++)e.push(this.getPoint(n/t));return e},getSpacedPoints:function(t){void 0===t&&(t=5);for(var e=[],n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e},getLength:function(){var t=this.getLengths();return t[t.length-1]},getLengths:function(t){if(void 0===t&&(t=this.arcLengthDivisions),this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var e,n,r=[],i=this.getPoint(0),o=0;for(r.push(0),n=1;n<=t;n++)o+=(e=this.getPoint(n/t)).distanceTo(i),r.push(o),i=e;return this.cacheArcLengths=r,r},updateArcLengths:function(){this.needsUpdate=!0,this.getLengths()},getUtoTmapping:function(t,e){var n,r=this.getLengths(),i=0,o=r.length;n=e||t*r[o-1];for(var a,s=0,u=o-1;s<=u;)if((a=r[i=Math.floor(s+(u-s)/2)]-n)<0)s=i+1;else{if(!(a>0)){u=i;break}u=i-1}if(r[i=u]===n)return i/(o-1);var c=r[i];return(i+(n-c)/(r[i+1]-c))/(o-1)},getTangent:function(t){var e=t-1e-4,n=t+1e-4;e<0&&(e=0),n>1&&(n=1);var r=this.getPoint(e);return this.getPoint(n).clone().sub(r).normalize()},getTangentAt:function(t){var e=this.getUtoTmapping(t);return this.getTangent(e)},computeFrenetFrames:function(t,e){var n,r,i,o=new je,a=[],s=[],u=[],c=new je,l=new rn;for(n=0;n<=t;n++)r=n/t,a[n]=this.getTangentAt(r),a[n].normalize();s[0]=new je,u[0]=new je;var h=Number.MAX_VALUE,f=Math.abs(a[0].x),p=Math.abs(a[0].y),d=Math.abs(a[0].z);for(f<=h&&(h=f,o.set(1,0,0)),p<=h&&(h=p,o.set(0,1,0)),d<=h&&o.set(0,0,1),c.crossVectors(a[0],o).normalize(),s[0].crossVectors(a[0],c),u[0].crossVectors(a[0],s[0]),n=1;n<=t;n++)s[n]=s[n-1].clone(),u[n]=u[n-1].clone(),c.crossVectors(a[n-1],a[n]),c.length()>Number.EPSILON&&(c.normalize(),i=Math.acos(Fe.clamp(a[n-1].dot(a[n]),-1,1)),s[n].applyMatrix4(l.makeRotationAxis(c,i))),u[n].crossVectors(a[n],s[n]);if(!0===e)for(i=Math.acos(Fe.clamp(s[0].dot(s[t]),-1,1)),i/=t,a[0].dot(c.crossVectors(s[0],s[t]))>0&&(i=-i),n=1;n<=t;n++)s[n].applyMatrix4(l.makeRotationAxis(a[n],i*n)),u[n].crossVectors(a[n],s[n]);return{tangents:a,normals:s,binormals:u}},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this},toJSON:function(){var t={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t},fromJSON:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}),Ha.prototype=Object.create(Fa.prototype),Ha.prototype.constructor=Ha,Ha.prototype.isEllipseCurve=!0,Ha.prototype.getPoint=function(t,e){for(var n=e||new He,r=2*Math.PI,i=this.aEndAngle-this.aStartAngle,o=Math.abs(i)r;)i-=r;i0?0:(Math.floor(Math.abs(l)/u)+1)*u:0===h&&l===u-1&&(l=u-2,h=1),this.closed||l>0?n=s[(l-1)%u]:(Va.subVectors(s[0],s[1]).add(s[0]),n=Va),r=s[l%u],i=s[(l+1)%u],this.closed||l+2r.length-2?r.length-1:o+1],l=r[o>r.length-3?r.length-1:o+2];return n.set(Ja(a,s.x,u.x,c.x,l.x),Ja(a,s.y,u.y,c.y,l.y)),n},is.prototype.copy=function(t){Fa.prototype.copy.call(this,t),this.points=[];for(var e=0,n=t.points.length;e=e){var i=n[r]-e,o=this.curves[r],a=o.getLength(),s=0===a?0:1-i/a;return o.getPointAt(s)}r++}return null},getLength:function(){var t=this.getCurveLengths();return t[t.length-1]},updateArcLengths:function(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var t=[],e=0,n=0,r=this.curves.length;n1&&!n[n.length-1].equals(n[0])&&n.push(n[0]),n},copy:function(t){Fa.prototype.copy.call(this,t),this.curves=[];for(var e=0,n=t.curves.length;e0){var c=u.getPoint(0);c.equals(this.currentPoint)||this.lineTo(c.x,c.y)}this.curves.push(u);var l=u.getPoint(1);this.currentPoint.copy(l)},copy:function(t){return as.prototype.copy.call(this,t),this.currentPoint.copy(t.currentPoint),this},toJSON:function(){var t=as.prototype.toJSON.call(this);return t.currentPoint=this.currentPoint.toArray(),t},fromJSON:function(t){return as.prototype.fromJSON.call(this,t),this.currentPoint.fromArray(t.currentPoint),this}}),us.prototype=Object.assign(Object.create(ss.prototype),{constructor:us,getPointsHoles:function(t){for(var e=[],n=0,r=this.holes.length;n0){var o=new Ua(new Pa(e));o.setCrossOrigin(this.crossOrigin);for(var a=0,s=t.length;a0?new Pi(a,s):new Xn(a,s),void 0!==t.drawMode&&r.setDrawMode(t.drawMode);break;case"LOD":r=new Ri;break;case"Line":r=new Di(i(t.geometry),o(t.material),t.mode);break;case"LineLoop":r=new Ni(i(t.geometry),o(t.material));break;case"LineSegments":r=new Bi(i(t.geometry),o(t.material));break;case"PointCloud":case"Points":r=new zi(i(t.geometry),o(t.material));break;case"Sprite":r=new Li(o(t.material));break;case"Group":r=new fi;break;default:r=new xn}if(r.uuid=t.uuid,void 0!==t.name&&(r.name=t.name),void 0!==t.matrix?(r.matrix.fromArray(t.matrix),void 0!==t.matrixAutoUpdate&&(r.matrixAutoUpdate=t.matrixAutoUpdate),r.matrixAutoUpdate&&r.matrix.decompose(r.position,r.quaternion,r.scale)):(void 0!==t.position&&r.position.fromArray(t.position),void 0!==t.rotation&&r.rotation.fromArray(t.rotation),void 0!==t.quaternion&&r.quaternion.fromArray(t.quaternion),void 0!==t.scale&&r.scale.fromArray(t.scale)),void 0!==t.castShadow&&(r.castShadow=t.castShadow),void 0!==t.receiveShadow&&(r.receiveShadow=t.receiveShadow),t.shadow&&(void 0!==t.shadow.bias&&(r.shadow.bias=t.shadow.bias),void 0!==t.shadow.radius&&(r.shadow.radius=t.shadow.radius),void 0!==t.shadow.mapSize&&r.shadow.mapSize.fromArray(t.shadow.mapSize),void 0!==t.shadow.camera&&(r.shadow.camera=this.parseObject(t.shadow.camera))),void 0!==t.visible&&(r.visible=t.visible),void 0!==t.frustumCulled&&(r.frustumCulled=t.frustumCulled),void 0!==t.renderOrder&&(r.renderOrder=t.renderOrder),void 0!==t.userData&&(r.userData=t.userData),void 0!==t.layers&&(r.layers.mask=t.layers),void 0!==t.children)for(var u=t.children,c=0;cNumber.EPSILON){if(c<0&&(a=e[o],u=-u,s=e[i],c=-c),t.ys.y)continue;if(t.y===a.y){if(t.x===a.x)return!0}else{var l=c*(t.x-a.x)-u*(t.y-a.y);if(0===l)return!0;if(l<0)continue;r=!r}}else{if(t.y!==a.y)continue;if(s.x<=t.x&&t.x<=a.x||a.x<=t.x&&t.x<=s.x)return!0}}return r}var i=Co.isClockWise,o=this.subPaths;if(0===o.length)return[];if(!0===e)return n(o);var a,s,u,c=[];if(1===o.length)return s=o[0],(u=new us).curves=s.curves,c.push(u),c;var l=!i(o[0].getPoints());l=t?!l:l;var h,f,p=[],d=[],m=[],g=0;d[g]=void 0,m[g]=[];for(var v=0,y=o.length;v1){for(var x=!1,b=[],_=0,w=d.length;_0&&(x||(m=p))}v=0;for(var L=d.length;v0){this.source.connect(this.filters[0]);for(var t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(var t=1,e=this.filters.length;t=.5)for(var o=0;o!==i;++o)t[e+o]=t[n+o]},_slerp:function(t,e,n,r){ke.slerpFlat(t,e,t,e,t,n,r)},_lerp:function(t,e,n,r,i){for(var o=1-r,a=0;a!==i;++a){var s=e+a;t[s]=t[s]*o+t[n+a]*r}}});var Ws,qs;function Ys(t,e,n){var r=n||Xs.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,r)}function Xs(t,e,n){this.path=e,this.parsedPath=n||Xs.parseTrackName(e),this.node=Xs.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t}function Js(){this.uuid=Fe.generateUUID(),this._objects=Array.prototype.slice.call(arguments),this.nCachedObjects_=0;var t={};this._indicesByUUID=t;for(var e=0,n=arguments.length;e!==n;++e)t[arguments[e].uuid]=e;this._paths=[],this._parsedPaths=[],this._bindings=[],this._bindingsIndicesByPath={};var r=this;this.stats={objects:{get total(){return r._objects.length},get inUse(){return this.total-r.nCachedObjects_}},get bindingsPerObject(){return r._bindings.length}}}function Zs(t,e,n){this._mixer=t,this._clip=e,this._localRoot=n||null;for(var r=e.tracks,i=r.length,o=new Array(i),a={endingStart:we,endingEnd:we},s=0;s!==i;++s){var u=r[s].createInterpolant(null);o[s]=u,u.settings=a}this._interpolantSettings=a,this._interpolants=o,this._propertyBindings=new Array(i),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=ve,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}function Qs(t){this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}function Ks(t){"string"==typeof t&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),t=arguments[1]),this.value=t}function $s(){Bn.call(this),this.type="InstancedBufferGeometry",this.maxInstancedCount=void 0}function tu(t,e,n){Si.call(this,t,e),this.meshPerAttribute=n||1}function eu(t,e,n,r){"number"==typeof n&&(r=n,n=!1,console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.")),wn.call(this,t,e,n),this.meshPerAttribute=r||1}function nu(t,e,n,r){this.ray=new Wn(t,e),this.near=n||0,this.far=r||1/0,this.params={Mesh:{},Line:{},LOD:{},Points:{threshold:1},Sprite:{}},Object.defineProperties(this.params,{PointCloud:{get:function(){return console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points."),this.Points}}})}function ru(t,e){return t.distance-e.distance}function iu(t,e,n,r){if(!1!==t.visible&&(t.raycast(e,n),!0===r))for(var i=t.children,o=0,a=i.length;o=e){var l=e++,h=t[l];n[h.uuid]=c,t[c]=h,n[u]=l,t[l]=s;for(var f=0,p=i;f!==p;++f){var d=r[f],m=d[l],g=d[c];d[c]=m,d[l]=g}}}this.nCachedObjects_=e},uncache:function(){for(var t=this._objects,e=t.length,n=this.nCachedObjects_,r=this._indicesByUUID,i=this._bindings,o=i.length,a=0,s=arguments.length;a!==s;++a){var u=arguments[a].uuid,c=r[u];if(void 0!==c)if(delete r[u],c0)for(var u=this._interpolants,c=this._propertyBindings,l=0,h=u.length;l!==h;++l)u[l].evaluate(a),c[l].accumulate(r,s)}else this._updateWeight(t)},_updateWeight:function(t){var e=0;if(this.enabled){e=this.weight;var n=this._weightInterpolant;if(null!==n){var r=n.evaluate(t)[0];e*=r,t>n.parameterPositions[1]&&(this.stopFading(),0===r&&(this.enabled=!1))}}return this._effectiveWeight=e,e},_updateTimeScale:function(t){var e=0;if(!this.paused){e=this.timeScale;var n=this._timeScaleInterpolant;if(null!==n)e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}return this._effectiveTimeScale=e,e},_updateTime:function(t){var e=this.time+t,n=this._clip.duration,r=this.loop,i=this._loopCount,o=r===ye;if(0===t)return-1===i?e:o&&1==(1&i)?n-e:e;if(r===ge){-1===i&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(e>=n)e=n;else{if(!(e<0))break t;e=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===i&&(t>=0?(i=0,this._setEndings(!0,0===this.repetitions,o)):this._setEndings(0===this.repetitions,!0,o)),e>=n||e<0){var a=Math.floor(e/n);e-=n*a,i+=Math.abs(a);var s=this.repetitions-i;if(s<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,e=t>0?n:0,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===s){var u=t<0;this._setEndings(u,!u,o)}else this._setEndings(!1,!1,o);this._loopCount=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:a})}}if(o&&1==(1&i))return this.time=e,n-e}return this.time=e,e},_setEndings:function(t,e,n){var r=this._interpolantSettings;n?(r.endingStart=Me,r.endingEnd=Me):(r.endingStart=t?this.zeroSlopeAtStart?Me:we:Ee,r.endingEnd=e?this.zeroSlopeAtEnd?Me:we:Ee)},_scheduleFading:function(t,e,n){var r=this._mixer,i=r.time,o=this._weightInterpolant;null===o&&(o=r._lendControlInterpolant(),this._weightInterpolant=o);var a=o.parameterPositions,s=o.sampleValues;return a[0]=i,s[0]=e,a[1]=i+t,s[1]=n,this}}),Qs.prototype=Object.assign(Object.create(r.prototype),{constructor:Qs,_bindAction:function(t,e){var n=t._localRoot||this._root,r=t._clip.tracks,i=r.length,o=t._propertyBindings,a=t._interpolants,s=n.uuid,u=this._bindingsByRootAndName,c=u[s];void 0===c&&(c={},u[s]=c);for(var l=0;l!==i;++l){var h=r[l],f=h.name,p=c[f];if(void 0!==p)o[l]=p;else{if(void 0!==(p=o[l])){null===p._cacheIndex&&(++p.referenceCount,this._addInactiveBinding(p,s,f));continue}var d=e&&e._propertyBindings[l].binding.parsedPath;++(p=new Vs(Xs.create(n,f,d),h.ValueTypeName,h.getValueSize())).referenceCount,this._addInactiveBinding(p,s,f),o[l]=p}a[l].resultBuffer=p.buffer}},_activateAction:function(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){var e=(t._localRoot||this._root).uuid,n=t._clip.uuid,r=this._actionsByClip[n];this._bindAction(t,r&&r.knownActions[0]),this._addInactiveAction(t,n,e)}for(var i=t._propertyBindings,o=0,a=i.length;o!==a;++o){var s=i[o];0==s.useCount++&&(this._lendBinding(s),s.saveOriginalState())}this._lendAction(t)}},_deactivateAction:function(t){if(this._isActiveAction(t)){for(var e=t._propertyBindings,n=0,r=e.length;n!==r;++n){var i=e[n];0==--i.useCount&&(i.restoreOriginalState(),this._takeBackBinding(i))}this._takeBackAction(t)}},_initMemoryManager:function(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;var t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}},_isActiveAction:function(t){var e=t._cacheIndex;return null!==e&&ethis.max.x||t.ythis.max.y)},containsBox:function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y},getParameter:function(t,e){return void 0===e&&(console.warn("THREE.Box2: .getParameter() target is now required"),e=new He),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)},clampPoint:function(t,e){return void 0===e&&(console.warn("THREE.Box2: .clampPoint() target is now required"),e=new He),e.copy(t).clamp(this.min,this.max)},distanceToPoint:function(){var t=new He;return function(e){return t.copy(e).clamp(this.min,this.max).sub(e).length()}}(),intersect:function(t){return this.min.max(t.min),this.max.min(t.max),this},union:function(t){return this.min.min(t.min),this.max.max(t.max),this},translate:function(t){return this.min.add(t),this.max.add(t),this},equals:function(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}),Object.assign(uu.prototype,{set:function(t,e){return this.start.copy(t),this.end.copy(e),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.start.copy(t.start),this.end.copy(t.end),this},getCenter:function(t){return void 0===t&&(console.warn("THREE.Line3: .getCenter() target is now required"),t=new je),t.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(t){return void 0===t&&(console.warn("THREE.Line3: .delta() target is now required"),t=new je),t.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(t,e){return void 0===e&&(console.warn("THREE.Line3: .at() target is now required"),e=new je),this.delta(e).multiplyScalar(t).add(this.start)},closestPointToPointParameter:function(){var t=new je,e=new je;return function(n,r){t.subVectors(n,this.start),e.subVectors(this.end,this.start);var i=e.dot(e),o=e.dot(t)/i;return r&&(o=Fe.clamp(o,0,1)),o}}(),closestPointToPoint:function(t,e,n){var r=this.closestPointToPointParameter(t,e);return void 0===n&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),n=new je),this.delta(n).multiplyScalar(r).add(this.start)},applyMatrix4:function(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this},equals:function(t){return t.start.equals(this.start)&&t.end.equals(this.end)}}),cu.prototype=Object.create(xn.prototype),cu.prototype.constructor=cu,cu.prototype.isImmediateRenderObject=!0,lu.prototype=Object.create(Bi.prototype),lu.prototype.constructor=lu,lu.prototype.update=function(){var t=new je,e=new je,n=new Ve;return function(){var r=["a","b","c"];this.object.updateMatrixWorld(!0),n.getNormalMatrix(this.object.matrixWorld);var i=this.object.matrixWorld,o=this.geometry.attributes.position,a=this.object.geometry;if(a&&a.isGeometry)for(var s=a.vertices,u=a.faces,c=0,l=0,h=u.length;l1&&t.multiplyScalar(1/e),this.children[0].material.color.copy(this.material.color)}},du.prototype.dispose=function(){this.geometry.dispose(),this.material.dispose(),this.children[0].geometry.dispose(),this.children[0].material.dispose()},mu.prototype=Object.create(xn.prototype),mu.prototype.constructor=mu,mu.prototype.dispose=function(){this.children[0].geometry.dispose(),this.children[0].material.dispose()},mu.prototype.update=function(){var t=new je,e=new ln,n=new ln;return function(){var r=this.children[0];if(void 0!==this.color)this.material.color.set(this.color);else{var i=r.geometry.getAttribute("color");e.copy(this.light.color),n.copy(this.light.groundColor);for(var o=0,a=i.count;o.99999?this.quaternion.set(0,0,0,1):n.y<-.99999?this.quaternion.set(1,0,0,0):(e.set(n.z,0,-n.x).normalize(),t=Math.acos(n.y),this.quaternion.setFromAxisAngle(e,t))}}(),Su.prototype.setLength=function(t,e,n){void 0===e&&(e=.2*t),void 0===n&&(n=.2*e),this.line.scale.set(1,Math.max(0,t-e),1),this.line.updateMatrix(),this.cone.scale.set(n,e,n),this.cone.position.y=t,this.cone.updateMatrix()},Su.prototype.setColor=function(t){this.line.material.color.copy(t),this.cone.material.color.copy(t)},Su.prototype.copy=function(t){return xn.prototype.copy.call(this,t,!1),this.line.copy(t.line),this.cone.copy(t.cone),this},Su.prototype.clone=function(){return(new this.constructor).copy(this)},Tu.prototype=Object.create(Bi.prototype),Tu.prototype.constructor=Tu;var Lu=0,Ru=1;function Pu(t){return console.warn("THREE.MeshFaceMaterial has been removed. Use an Array instead."),t}function Cu(t){return void 0===t&&(t=[]),console.warn("THREE.MultiMaterial has been removed. Use an Array instead."),t.isMultiMaterial=!0,t.materials=t,t.clone=function(){return t.slice()},t}function Ou(t,e){return console.warn("THREE.PointCloud has been renamed to THREE.Points."),new zi(t,e)}function Iu(t){return console.warn("THREE.Particle has been renamed to THREE.Sprite."),new Li(t)}function Du(t,e){return console.warn("THREE.ParticleSystem has been renamed to THREE.Points."),new zi(t,e)}function Bu(t){return console.warn("THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial."),new Ui(t)}function Nu(t){return console.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial."),new Ui(t)}function Uu(t){return console.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial."),new Ui(t)}function zu(t,e,n){return console.warn("THREE.Vertex has been removed. Use THREE.Vector3 instead."),new je(t,e,n)}function Gu(t,e){return console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead."),new wn(t,e).setDynamic(!0)}function Fu(t,e){return console.warn("THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead."),new Mn(t,e)}function Hu(t,e){return console.warn("THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead."),new En(t,e)}function ku(t,e){return console.warn("THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead."),new Sn(t,e)}function ju(t,e){return console.warn("THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead."),new Tn(t,e)}function Vu(t,e){return console.warn("THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead."),new An(t,e)}function Wu(t,e){return console.warn("THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead."),new Ln(t,e)}function qu(t,e){return console.warn("THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead."),new Rn(t,e)}function Yu(t,e){return console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead."),new Pn(t,e)}function Xu(t,e){return console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead."),new Cn(t,e)}function Ju(t){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead."),Xa.call(this,t),this.type="catmullrom",this.closed=!0}function Zu(t){console.warn("THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead."),Xa.call(this,t),this.type="catmullrom"}function Qu(t){console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead."),Xa.call(this,t),this.type="catmullrom"}function Ku(t){return console.warn("THREE.AxisHelper has been renamed to THREE.AxesHelper."),new Tu(t)}function $u(t,e){return console.warn("THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead."),new wu(t,e)}function tc(t,e){return console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead."),new Bi(new Jo(t.geometry),new Ii({color:void 0!==e?e:16777215}))}function ec(t,e){return console.warn("THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead."),new Bi(new ji(t.geometry),new Ii({color:void 0!==e?e:16777215}))}function nc(t){return console.warn("THREE.XHRLoader has been renamed to THREE.FileLoader."),new Ia(t)}function rc(t){return console.warn("THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader."),new Na(t)}Fa.create=function(t,e){return console.log("THREE.Curve.create() has been deprecated"),t.prototype=Object.create(Fa.prototype),t.prototype.constructor=t,t.prototype.getPoint=e,t},Object.assign(as.prototype,{createPointsGeometry:function(t){console.warn("THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");var e=this.getPoints(t);return this.createGeometry(e)},createSpacedPointsGeometry:function(t){console.warn("THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");var e=this.getSpacedPoints(t);return this.createGeometry(e)},createGeometry:function(t){console.warn("THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");for(var e=new _n,n=0,r=t.length;n","\"","escapeStringChar","chr","hasUnicode","string","test","mapToArray","map","size","forEach","overArg","transform","arg","replaceHolders","placeholder","safeGet","setToArray","set","setToPairs","stringSize","lastIndex","unicodeSize","stringToArray","match","unicodeToArray","split","asciiToArray","unescapeHtmlChar","&","<",">",""","'","_","runInContext","context","defaults","pick","Date","Error","Math","String","TypeError","arrayProto","funcProto","objectProto","coreJsData","funcToString","toString","idCounter","maskSrcKey","uid","exec","keys","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","replace","Buffer","Uint8Array","allocUnsafe","getPrototype","getPrototypeOf","objectCreate","propertyIsEnumerable","splice","spreadableSymbol","isConcatSpreadable","symIterator","iterator","symToStringTag","getNative","ctxClearTimeout","clearTimeout","ctxNow","now","ctxSetTimeout","setTimeout","nativeCeil","ceil","nativeFloor","floor","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeIsFinite","isFinite","nativeJoin","nativeKeys","nativeMax","max","nativeMin","min","nativeNow","nativeParseInt","nativeRandom","random","nativeReverse","reverse","DataView","Map","Promise","Set","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","valueOf","symbolToString","lodash","isObjectLike","isArray","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","proto","isObject","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","entries","clear","entry","ListCache","MapCache","SetCache","__data__","add","Stack","data","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","push","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","eq","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","configurable","writable","baseAt","paths","skip","number","lower","upper","baseClone","bitmask","customizer","stack","isDeep","isFlat","isFull","constructor","input","initCloneArray","tag","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","Ctor","cloneArrayBuffer","dataView","buffer","byteOffset","byteLength","cloneDataView","cloneTypedArray","regexp","cloneRegExp","symbol","cloneSymbol","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","wait","baseDifference","includes","isCommon","valuesLength","outer","computed","valuesIndex","templateSettings","escape","evaluate","interpolate","variable","imports","pop","hash","getMapData","pairs","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","depth","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","isFunction","baseGet","path","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseGt","other","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","maxLength","Infinity","seen","baseInvoke","parent","last","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","message","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","baseIsNative","isMasked","baseIteratee","identity","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","newValue","isTyped","isArrayLikeObject","isPlainObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","comparer","sort","baseSortBy","criteria","objCriteria","othCriteria","ordersLength","compareAscending","order","compareMultiple","basePickBy","baseSet","basePullAll","indexOf","basePullAt","indexes","previous","baseUnset","baseRepeat","baseRest","start","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","end","baseSome","baseSortedIndex","retHighest","low","high","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","id","slice","copy","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","iterable","createCaseFirst","methodName","charAt","trailing","createCompounder","callback","words","deburr","createCtor","arguments","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","wrapper","getFuncName","funcName","getData","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","countHolders","newHolders","createRecurry","fn","arrLength","oldArray","reorder","createInverter","toIteratee","baseInverter","createMathOperation","operator","defaultValue","createOver","arrayFunc","createPadding","chars","charsLength","createRange","step","toFinite","baseRange","createRelationalOperation","toNumber","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","toInteger","pair","noop","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrValue","flatten","otherFunc","type","isKeyable","getValue","stubArray","hasPath","hasFunc","isLength","ArrayBuffer","resolve","ctorString","isMaskable","stubFalse","otherArgs","shortOut","reference","details","insertWrapDetails","updateWrapDetails","getWrapDetails","count","lastCalled","stamp","remaining","rand","memoize","memoizeCapped","charCodeAt","quote","subString","clone","difference","differenceBy","differenceWith","findIndex","findLastIndex","head","intersection","mapped","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","group","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","chain","interceptor","wrapperAt","countBy","find","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","before","bindKey","debounce","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","time","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","leadingEdge","cancel","flush","defer","delay","resolver","memoized","Cache","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","gt","gte","isError","isInteger","isNumber","isString","lt","lte","toArray","next","done","iteratorToArray","remainder","toLength","isBinary","assign","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invert","invertBy","invoke","merge","omit","basePick","pickBy","prop","toPairs","toPairsIn","camelCase","word","toLowerCase","capitalize","upperFirst","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","toUpperCase","pattern","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","method","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","range","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplier","multiplicand","round","subtract","minuend","subtrahend","after","castArray","chunk","compact","concat","cond","conforms","baseConforms","properties","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","fill","baseFill","filter","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functions","functionsIn","initial","mapKeys","mapValues","matches","matchesProperty","nthArg","omitBy","once","orderBy","propertyOf","pullAllBy","pullAllWith","reject","remove","rest","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","separator","limit","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","update","updateWith","valuesIn","wrap","zipObject","zipObjectDeep","entriesIn","extend","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","target","position","escapeRegExp","every","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isElement","isEmpty","isEqual","isEqualWith","isMatch","isMatchWith","isNaN","isNative","isNil","isNull","isSafeInteger","isUndefined","isWeakMap","isWeakSet","lastIndexOf","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","noConflict","pad","strLength","padEnd","padStart","radix","floating","temp","reduce","reduceRight","repeat","sample","some","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startsWith","sum","sumBy","template","settings","isEscaping","isEvaluating","importsKeys","importsValues","reDelimiters","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","times","toLower","toSafeInteger","toUpper","trim","trimEnd","trimStart","truncate","omission","search","substring","newEnd","unescape","uniqueId","prefix","each","eachRight","first","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","dir","isRight","view","getView","iterLength","takeCount","iterIndex","commit","wrapped","toJSON","g","eval","window","gltfReader","loadPositions","gltf","meshName","buffers","mesh","meshes","primitives","console","error","positions","primitive","attributes","_loadAccessor","POSITION","accessorName","accessor","accessors","_loadBufferView","bufferView","componentType","readUInt16LE","readFloatLE","bufferViewName","bufferViews","_loadBuffer","bufferName","uri","from","precise","_operation","operation","factor","pow","_matrixmath","_lodash","_gltfReader","gltf2BoundingBox","computeBoundings","_ref","ceilDimensions","boundings","getMeshesTransformMatrices","nodes","acc","point","elt","dimensionRound","dimensions","width","height","center","x","y","z","_this","node","matrices","getParentNodesMatrices","transformMatrix","matrix","_toConsumableArray","transformedPoints","getPointsFromArray","childNode","parentNode","children","childNodeMatrix","res","gltfBoundingBox","Boolean","readUInt32LE","glb2BoundingBox","asset","version","gltf1BoundingBox","dimensionsRound","nodeName","_ref2","childNodeName","parentNodeName","nodeMatrix","opt_rows","opt_cols","opt_setInitial","rows","cols","_cache","setIdentityData","setEmptyData","removeRow","row","colsPerRow","removeColumn","col","var_args","outputMatrix","shift","toLogString","opt_indentation","opt_separator","opt_start","opt_end","beginning","sep","indentation","numValues","startIndex","isIdentity","newRows","getWithLength","rowsInTarget","colsInTarget","numValuesInTarget","rowsInCurrent","colsInCurrent","tempData","currentCol","currentRow","outputIndex","giveBack","scale","power","transpose","numRows","numCols","determinant","getDeterminant","invertedDeterminant","m0","m1","m2","m3","matrixOfCoFactors","tempMatrix","coFactor","rowAlternate","colAlternate","originalDeterminant","product","a","b","f","h","equals","pool","inUse","defineProperties","originalLength","webpackPolyfill","deprecate","base64","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","that","RangeError","__proto__","encodingOrOffset","fromArrayLike","fromArrayBuffer","encoding","isEncoding","actual","write","fromString","obj","len","checked","val","isnan","fromObject","assertSize","isView","loweredCase","utf8ToBytes","base64ToBytes","swap","bidirectionalIndexOf","arrayIndexOf","arr","indexSize","valLength","read","buf","readUInt16BE","foundIndex","found","j","hexWrite","Number","strLen","parsed","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","base64Slice","fromByteArray","utf8Slice","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","foo","subarray","typedArraySupport","poolSize","_augment","species","allocUnsafeSlow","_isBuffer","compare","list","pos","swap16","swap32","swap64","hexSlice","asciiSlice","latin1Slice","utf16leSlice","inspect","thisStart","thisEnd","thisCopy","targetCopy","_arr","ret","out","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","code","INVALID_BASE64_RE","leadSurrogate","toByteArray","stringtrim","base64clean","src","dst","b64","lens","getLens","validLen","placeHoldersLen","tmp","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","parts","len2","encodeChunk","lookup","tripletToBase64","num","output","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","abs","log","LN2","glb","jsonChunkLength","jsonChunkData","JSON","parse","binChunkOffset","binChunkLength","binChunkData"],"mappings":"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","file":"index.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"gltfBoundingBox\"] = factory();\n\telse\n\t\troot[\"gltfBoundingBox\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 6);\n","/**\n * @module matrixmath\n *\n * @property {Object} Matrix The Matrix class.\n */\n'use strict';\n\nexports.Matrix = require('./Matrix');\n","/**\n * @license\n * Lodash \n * Copyright JS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.10';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading and trailing whitespace. */\n var reTrim = /^\\s+|\\s+$/g,\n reTrimStart = /^\\s+/,\n reTrimEnd = /\\s+$/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\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',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n return key == '__proto__'\n ? undefined\n : object[key];\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n\n return result;\n }\n\n if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n\n return result;\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n if (isObject(srcValue)) {\n stack || (stack = new Stack);\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n value = iteratee(value);\n\n var low = 0,\n high = array == null ? 0 : array.length,\n valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '

' + func(text) + '

';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '

fred, barney, & pebbles

'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<%- value %>');\n * compiled({ 'value': '