diff --git a/dist/main.js b/dist/main.js index 351abcfc..9ab3d9fd 100644 --- a/dist/main.js +++ b/dist/main.js @@ -1,4 +1,4 @@ -var t,e,n=require("crypto"),r=require("module"),i=require("events"),o=require("assert"),s=require("timers"),a=require("util"),c=require("stream"),u=c,l=c.Transform,f=C(require("typescript")),p=require("atom"),h=(t={},e=p,Object.keys(e).forEach((function(n){"default"!==n&&"__esModule"!==n&&Object.defineProperty(t,n,{enumerable:!0,get:function(){return e[n]}})})),t),d=p.CompositeDisposable,g=p.Emitter,m=p.BufferedNodeProcess,v=(p.BufferedProcess,p.Disposable),y=require("path"),w=y,b=y.dirname,_=require("fs"),x=_,S=C(_),k=require("child_process"),E=require("os");function C(t){return t&&t.__esModule?t.default:t}var T="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},A={};Object.defineProperty(A,"__esModule",{value:!0});var P=k,O=x,I=w;function j(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var N=j(E),D=j(O),F=j(I);const L=/\s+at.*(?:\(|\s)(.*)\)?/,M=/^(?:(?:(?:node|(?:internal\/[\w/]*|.*node_modules\/(?:babel-polyfill|pirates)\/.*)?\w+)\.js:\d+:\d+)|native)/,R=void 0===N.default.homedir?"":N.default.homedir();class B extends Error{constructor(t){if(!Array.isArray(t))throw new TypeError("Expected input to be an Array, got "+typeof t);let e=(t=[...t].map((t=>t instanceof Error?t:null!==t&&"object"==typeof t?Object.assign(new Error(t.message),t):new Error(t)))).map((t=>{return"string"==typeof t.stack?(t=>t.replace(/\s+at .*aggregate-error\/index.js:\d+:\d+\)?/g,""))((e=t.stack,n=Object.assign({pretty:!1},n),e.replace(/\\/g,"/").split("\n").filter((t=>{const e=t.match(L);if(null===e||!e[1])return!0;const n=e[1];return!n.includes(".app/Contents/Resources/electron.asar")&&!n.includes(".app/Contents/Resources/default_app.asar")&&!M.test(n)})).filter((t=>""!==t.trim())).map((t=>n.pretty?t.replace(L,((t,e)=>t.replace(e,e.replace(R,"~")))):t)).join("\n"))):String(t);var e,n})).join("\n");e="\n"+((t,e=1,n)=>{if(n={indent:" ",includeEmptyLines:!1,...n},"string"!=typeof t)throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof t}\``);if("number"!=typeof e)throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof e}\``);if("string"!=typeof n.indent)throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof n.indent}\``);if(0===e)return t;const r=n.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return t.replace(r,n.indent.repeat(e))})(e,4),super(e),this.name="AggregateError",Object.defineProperty(this,"_errors",{value:t})}*[Symbol.iterator](){for(const t of this._errors)yield t}}var z=B;const q=(t,e,n)=>new Promise(((r,i)=>{if(n=Object.assign({concurrency:1/0},n),"function"!=typeof e)throw new TypeError("Mapper function is required");const{concurrency:o}=n;if(!("number"==typeof o&&o>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${o}\` (${typeof o})`);const s=[],a=t[Symbol.iterator]();let c=!1,u=!1,l=0,f=0;const p=()=>{if(c)return;const t=a.next(),n=f;if(f++,t.done)return u=!0,void(0===l&&r(s));l++,Promise.resolve(t.value).then((t=>e(t,n))).then((t=>{s[n]=t,l--,p()}),(t=>{c=!0,i(t)}))};for(let t=0;t(await H(t,((t,n)=>Promise.all([e(t,n),t])),n)).filter((t=>Boolean(t[0]))).map((t=>t[1]));var V=$,W=$;V.default=W;const G="undefined"!=typeof atom,K="undefined"!=typeof atom&&(atom.inDevMode()||atom.inSpecMode()); +var t,e,n=require("crypto"),r=require("module"),i=require("events"),o=require("assert"),s=require("timers"),a=require("util"),c=require("stream"),u=c,l=c.Transform,f=C(require("typescript")),p=require("atom"),h=(t={},e=p,Object.keys(e).forEach((function(n){"default"!==n&&"__esModule"!==n&&Object.defineProperty(t,n,{enumerable:!0,get:function(){return e[n]}})})),t),d=p.CompositeDisposable,g=p.Emitter,m=p.BufferedNodeProcess,v=(p.BufferedProcess,p.Disposable),y=require("path"),w=y,b=y.dirname,_=require("fs"),x=_,S=C(_),k=require("child_process"),E=require("os");function C(t){return t&&t.__esModule?t.default:t}var T="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},A={};Object.defineProperty(A,"__esModule",{value:!0});var P=k,O=x,I=w;function j(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var N=j(E),L=j(O),D=j(I);const F=/\s+at.*(?:\(|\s)(.*)\)?/,M=/^(?:(?:(?:node|(?:internal\/[\w/]*|.*node_modules\/(?:babel-polyfill|pirates)\/.*)?\w+)\.js:\d+:\d+)|native)/,R=void 0===N.default.homedir?"":N.default.homedir();class B extends Error{constructor(t){if(!Array.isArray(t))throw new TypeError("Expected input to be an Array, got "+typeof t);let e=(t=[...t].map((t=>t instanceof Error?t:null!==t&&"object"==typeof t?Object.assign(new Error(t.message),t):new Error(t)))).map((t=>{return"string"==typeof t.stack?(t=>t.replace(/\s+at .*aggregate-error\/index.js:\d+:\d+\)?/g,""))((e=t.stack,n=Object.assign({pretty:!1},n),e.replace(/\\/g,"/").split("\n").filter((t=>{const e=t.match(F);if(null===e||!e[1])return!0;const n=e[1];return!n.includes(".app/Contents/Resources/electron.asar")&&!n.includes(".app/Contents/Resources/default_app.asar")&&!M.test(n)})).filter((t=>""!==t.trim())).map((t=>n.pretty?t.replace(F,((t,e)=>t.replace(e,e.replace(R,"~")))):t)).join("\n"))):String(t);var e,n})).join("\n");e="\n"+((t,e=1,n)=>{if(n={indent:" ",includeEmptyLines:!1,...n},"string"!=typeof t)throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof t}\``);if("number"!=typeof e)throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof e}\``);if("string"!=typeof n.indent)throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof n.indent}\``);if(0===e)return t;const r=n.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return t.replace(r,n.indent.repeat(e))})(e,4),super(e),this.name="AggregateError",Object.defineProperty(this,"_errors",{value:t})}*[Symbol.iterator](){for(const t of this._errors)yield t}}var z=B;const q=(t,e,n)=>new Promise(((r,i)=>{if(n=Object.assign({concurrency:1/0},n),"function"!=typeof e)throw new TypeError("Mapper function is required");const{concurrency:o}=n;if(!("number"==typeof o&&o>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${o}\` (${typeof o})`);const s=[],a=t[Symbol.iterator]();let c=!1,u=!1,l=0,f=0;const p=()=>{if(c)return;const t=a.next(),n=f;if(f++,t.done)return u=!0,void(0===l&&r(s));l++,Promise.resolve(t.value).then((t=>e(t,n))).then((t=>{s[n]=t,l--,p()}),(t=>{c=!0,i(t)}))};for(let t=0;t(await H(t,((t,n)=>Promise.all([e(t,n),t])),n)).filter((t=>Boolean(t[0]))).map((t=>t[1]));var V=$,W=$;V.default=W;const G="undefined"!=typeof atom,K="undefined"!=typeof atom&&(atom.inDevMode()||atom.inSpecMode()); /*! * escape-html * Copyright(c) 2012-2013 TJ Holowaychuk @@ -6,5 +6,5 @@ var t,e,n=require("crypto"),r=require("module"),i=require("events"),o=require("a * Copyright(c) 2015 Tiancheng "Timothy" Gu * MIT Licensed */ -var Q=/["'&<>]/,Z=function(t){var e,n=""+t,r=Q.exec(n);if(!r)return n;var i="",o=0,s=0;for(o=r.index;o{const i={stdout:r.stdout?[]:null,stderr:r.stderr?[]:null};r.on("error",e),r.stdout&&r.stdout.on("data",(function(t){i.stdout.push(t),n.handleStdout&&n.handleStdout(t)})),r.stderr&&r.stderr.on("data",(function(t){i.stderr.push(t),n.handleStderr&&n.handleStderr(t)})),r.on("close",(e=>{let r=null;null!=i.stdout&&(r=null===n.encoding||"buffer"===n.encoding?Buffer.concat(i.stdout):i.stdout.join(""));let o=null;null!=i.stderr&&(o=null===n.encoding||"buffer"===n.encoding?Buffer.concat(i.stderr):i.stderr.join("")),t({exitCode:e,stdout:r,stderr:o})}))}));return n.handleChildProcess(r),i}(t,e,{...n,handleChildProcess(t){r=t}});return i.kill=function(t){return r.kill(t)},i}async function Y(t){if(G){const e=await async function(t){var e;const n=atom.packages.getLoadedPackage(t.name);return null==n?null:null!==(e=n.metadata.version)&&void 0!==e?e:null}(t);if(e)return e}return async function(t){var e,n;const{directory:r}=t;if(null==r)return null;let i=null;try{i=JSON.parse(await D.default.promises.readFile(F.default.join(r,"package.json"),"utf8"))}catch(t){return null}return null!==(e=null===(n=i)||void 0===n?void 0:n.version)&&void 0!==e?e:null}(t)}const X=G?async function(t){return atom.packages.resolvePackagePath(t)}:async function(t){var e;const n=F.default.join(null!==(e=process.env.ATOM_HOME)&&void 0!==e?e:F.default.join(N.default.homedir(),".atom"),"packages",t);try{return await D.default.promises.access(n,D.default.constants.R_OK),n}catch(t){return null}};function tt(t,e){if(!t)throw new Error(null!=e?e:"Invariant violation")}async function et(t){const e=await(G?async function(t){const e=atom.packages.getLoadedPackage(t),n=e&&e.metadata["package-deps"];return Array.isArray(n)?n:[]}(t):async function(t){let e=null;try{e=await D.default.promises.stat(t)}catch(t){}if(null==e||!e.isDirectory())throw new Error("[Package-Deps] Expected packageName to be a readable directory in Node.js invocation");let n=null;try{const e=await D.default.promises.readFile(F.default.join(t,"package.json"),"utf8");n=JSON.parse(e)}catch(t){}const r=null==n||"object"!=typeof n?[]:n["package-deps"];return Array.isArray(r)?r:[]}(t));return K&&(tt(Array.isArray(e),`Dependencies for ${t} are not a valid array`),e.forEach(((e,n)=>{if(Array.isArray(e))e.forEach(((e,r)=>{const i=`Dependency#${n}#${r} for ${t} is invalid`;tt("string"==typeof e.name&&e.name.length>0,i),tt(null==e.minimumVersion||"string"==typeof e.minimumVersion&&e.minimumVersion.length>0,i)})),tt(e.length>0,`Dependency#${n} for ${t} has no group items`);else{const r=`Dependency#${n} for ${t} is invalid`;tt("string"==typeof e.name&&e.name.length>0,r),tt(null==e.minimumVersion||"string"==typeof e.minimumVersion&&e.minimumVersion.length>0,r)}}))),e}async function nt(t){if(null==t.directory)return!0;if(null==t.minimumVersion)return!1;const e=await Y(t);return null==e||1===function(t,e){for(var n=t.split("."),r=e.split("."),i=0;i<3;i++){var o=Number(n[i]),s=Number(r[i]);if(o>s)return 1;if(s>o)return-1;if(!isNaN(o)&&isNaN(s))return 1;if(isNaN(o)&&!isNaN(s))return-1}return 0}(t.minimumVersion,e)}const rt=new Set(["✓","done"]),it=/(?:Installing|Moving) (.*?) to .* (.*)/;let ot=!0;const st=G?function({packageName:t,dependencies:e}){const n=[],r=atom.notifications.addInfo(`Installing ${t} dependencies`,{detail:"Installing "+e.map((t=>t.name)).join(", "),dismissable:!0}),i=document.createElement("progress");i.max=e.length,i.style.width="100%";try{var o;const t=atom.views.getView(r),e=null!==(o=null==t?void 0:t.element)&&void 0!==o?o:null;if(null==e)throw new Error("Unable to get notification element from view");const n=e.querySelector(".detail-content");if(null==n)throw new Error("Content detail container not found inside the notification");n.appendChild(i)}catch(t){console.error("[Package-Deps] Error during showing installation progress to user",t)}return{handleFailure({dependency:t,error:e}){var r;n.push(t.name),i.value+=1,console.error(`[Package-Deps] Unable to install ${t.name}, Error:`,null!==(r=null==e?void 0:e.stack)&&void 0!==r?r:e)},handleDependencyInstalled(t){i.value+=1},handleComplete(){r.dismiss(),n.length>0?atom.notifications.addWarning(`Failed to install ${t} dependencies`,{detail:"These packages were not installed, check your console\nfor more info.\n"+n.join("\n"),dismissable:!0}):atom.notifications.addSuccess(`Installed ${t} dependencies`,{detail:"Installed "+e.map((t=>t.name)).join(", ")}),Promise.all(e.map((t=>n.includes(t.name)?null:atom.packages.activatePackage(t.name)))).catch((e=>{console.error("[Package-Deps] Error activating installed packages for "+t,e)}))}}}:function({dependencies:t}){let e=!1;return console.log("Installing dependencies:\n"+t.map((t=>" - "+t.name)).join("\n")),{handleFailure({dependency:t,error:n}){var r;e=!0,console.error(`Unable to install ${t.name}, Error:`,null!==(r=null==n?void 0:n.stack)&&void 0!==r?r:n)},handleDependencyInstalled(t){console.log("Successfully installed",t.name)},handleComplete(){console.log("Installation complete"),e&&(process.exitCode=1)}}},at=G?function({packageName:t,dependencies:e}){return new Promise((n=>{const r=e.filter((t=>!Array.isArray(t))),i=e.filter((t=>Array.isArray(t))),o=0===i.length,s=o?r.map((t=>t.name)).join(", "):"Something went wrong. Check your developer console",a=i.map((t=>t[0]));atom.packages.isPackageDisabled("notifications")&&console.warn("Enable notifications to install dependencies for "+t);const c=atom.notifications.addInfo(t+" needs to install dependencies",{dismissable:!0,icon:"cloud-download",detail:s,description:`Install dependenc${1===e.length?"y":"ies"}?`,buttons:[{text:"Yes",onDidClick:()=>{n(o?[]:r.concat(a)),c.dismiss()}},{text:"No Thanks",onDidClick:()=>{c.dismiss()}},{text:"Never",onDidClick:()=>{!function(t){var e;if(!G)return;const n=new Set(null!==(e=atom.config.get("atom-package-deps.ignored"))&&void 0!==e?e:[]);n.add(t),atom.config.set("atom-package-deps.ignored",Array.from(n))}(t),ot&&(ot=!1,atom.notifications.addInfo("How to reset package-deps memory",{dismissable:!0,description:"To modify the list of ignored files invoke 'Application: Open Your Config' and change the 'atom-package-deps' section"})),c.dismiss()}}]});if(c.onDidDismiss((()=>n([]))),!o)try{var u;const t=atom.views.getView(c),e=null!==(u=null==t?void 0:t.element)&&void 0!==u?u:null;if(null==e)throw new Error("Unable to get notification element from view");const n=e.querySelector(".detail-content");if(null==n)throw new Error("Content detail container not found inside the notification");if(n.innerHTML="",r.length>0){const t=document.createElement("div");t.innerHTML=`Packages without choices:
  • ${r.map((t=>Z(t.name))).join("
  • ")}
`,n.appendChild(t)}const o=document.createElement("div");o.innerHTML="Packages with choices:",n.appendChild(o);const s=document.createElement("ul");i.forEach(((t,e)=>{const n=document.createElement("li"),r=document.createElement("select");r.innerHTML=t.map((t=>``)).join("\n"),r.addEventListener("change",(()=>{const n=t.find((t=>t.name===r.value));null!=n&&(a[e]=n)})),n.style.marginTop="5px",n.appendChild(r),s.appendChild(n)})),n.appendChild(s)}catch(t){console.error("[Package-Deps] Error during showing package choices to user",t)}}))}:async function({dependencies:t}){return t.map((t=>Array.isArray(t)?t[0]:t))};var ct=async function(t){if(tt("string"==typeof t&&t.length>0,"[Package-Deps] Package name is required"),e=t,G&&(null!==(n=atom.config.get("atom-package-deps.ignored"))&&void 0!==n?n:[]).includes(e))return;var e,n;const r=await et(t);if(0===r.length)return;const i=await Promise.all(r.map((async t=>Array.isArray(t)?Promise.all(t.map((async t=>({...t,directory:await X(t.name)})))):{...t,directory:await X(t.name)}))),o=await V(i,(async function(t){return Array.isArray(t)?(await Promise.all(t.map((t=>nt(t))))).every(Boolean):nt(t)}));if(0===o.length)return;const s=await at({packageName:t,dependencies:o});if(0===s.length)return;const a=st({packageName:t,dependencies:s});await(async(t,e,{concurrency:n=1/0,stopOnError:r=!0}={})=>new Promise(((i,o)=>{if("function"!=typeof e)throw new TypeError("Mapper function is required");if(!Number.isSafeInteger(n)&&n!==1/0||!(n>=1))throw new TypeError(`Expected \`concurrency\` to be an integer from 1 and up or \`Infinity\`, got \`${n}\` (${typeof n})`);const s=[],a=[],c=t[Symbol.iterator]();let u=!1,l=!1,f=0,p=0;const h=()=>{if(u)return;const t=c.next(),n=p;if(p++,t.done)return l=!0,void(0===f&&(r||0===a.length?i(s):o(new z(a))));f++,(async()=>{try{const r=await t.value;s[n]=await e(r,n),f--,h()}catch(t){r?(u=!0,o(t)):(a.push(t),f--,h())}})()};for(let t=0;tht(t,e,...n);for(const t of pt)ht[t]=(e,...n)=>ht(t,e,...n);ut=ht;var gt,mt={},vt={};vt=new Map([["accentHeight","accent-height"],["alignmentBaseline","alignment-baseline"],["arabicForm","arabic-form"],["baselineShift","baseline-shift"],["capHeight","cap-height"],["className","class"],["clipPath","clip-path"],["clipRule","clip-rule"],["colorInterpolation","color-interpolation"],["colorInterpolationFilters","color-interpolation-filters"],["colorProfile","color-profile"],["colorRendering","color-rendering"],["dominantBaseline","dominant-baseline"],["enableBackground","enable-background"],["fillOpacity","fill-opacity"],["fillRule","fill-rule"],["floodColor","flood-color"],["floodOpacity","flood-opacity"],["fontFamily","font-family"],["fontSize","font-size"],["fontSizeAdjust","font-size-adjust"],["fontStretch","font-stretch"],["fontStyle","font-style"],["fontVariant","font-variant"],["fontWeight","font-weight"],["glyphName","glyph-name"],["glyphOrientationHorizontal","glyph-orientation-horizontal"],["glyphOrientationVertical","glyph-orientation-vertical"],["horizAdvX","horiz-adv-x"],["horizOriginX","horiz-origin-x"],["letterSpacing","letter-spacing"],["lightingColor","lighting-color"],["markerEnd","marker-end"],["markerMid","marker-mid"],["markerStart","marker-start"],["overlinePosition","overline-position"],["overlineThickness","overline-thickness"],["panose1","panose-1"],["paintOrder","paint-order"],["pointerEvents","pointer-events"],["renderingIntent","rendering-intent"],["shapeRendering","shape-rendering"],["stopColor","stop-color"],["stopOpacity","stop-opacity"],["strikethroughPosition","strikethrough-position"],["strikethroughThickness","strikethrough-thickness"],["strokeDasharray","stroke-dasharray"],["strokeDashoffset","stroke-dashoffset"],["strokeLinecap","stroke-linecap"],["strokeLinejoin","stroke-linejoin"],["strokeMiterlimit","stroke-miterlimit"],["strokeOpacity","stroke-opacity"],["strokeWidth","stroke-width"],["textAnchor","text-anchor"],["textDecoration","text-decoration"],["textRendering","text-rendering"],["underlinePosition","underline-position"],["underlineThickness","underline-thickness"],["unicodeBidi","unicode-bidi"],["unicodeRange","unicode-range"],["unitsPerEm","units-per-em"],["vAlphabetic","v-alphabetic"],["vHanging","v-hanging"],["vIdeographic","v-ideographic"],["vMathematical","v-mathematical"],["vertAdvY","vert-adv-y"],["vertOriginX","vert-origin-x"],["vertOriginY","vert-origin-y"],["wordSpacing","word-spacing"],["writingMode","writing-mode"],["xHeight","x-height"]]);var yt;function wt(t,e,n,r,i){if(n)for(var o in n)"ref"!==o&&"on"!==o&&(o in lt||i&&o in i||("dataset"===o?wt(t.dataset,null,n&&n.dataset,null,null):"innerHTML"!==o&&e&&pt.has(e.tag)?t.removeAttribute(vt.get(o)||o):(t[o]="",delete t[o])));if(i)for(var o in i)if("ref"!==o&&"on"!==o&&!(o in lt)){var s=n&&n[o],a=i[o];"dataset"===o?bt(t.dataset,s,a,!1):"style"===o&&"string"!=typeof a?("string"==typeof s&&(t.style="",s=null),bt(t.style,s,a,!0)):"attributes"===o?_t(t,s,a):a!==s&&("innerHTML"!==o&&r&&pt.has(r.tag)?t.setAttribute(vt.get(o)||o,a):r&&"input"===r.tag&&"value"===o&&t[o]===a||(t[o]=a))}}function bt(t,e,n,r){if(e)for(var i in e)n&&i in n||(r?t[i]="":delete t[i]);if(n)for(var i in n){const r=e&&e[i],o=n[i];o!==r&&(t[i]=o)}}function _t(t,e,n){if(e)for(var r in e)n&&r in n||t.removeAttribute(r);if(n)for(var r in n){const i=e&&e[r],o=n[r];o!==i&&t.setAttribute(r,o)}}function xt(t,e){let n;if(null!=t.text)n=document.createTextNode(t.text);else{const{tag:r,children:i}=t;let{props:o,context:s}=t;if(s&&(e={refs:s.refs,listenerContext:s}),"function"==typeof r){let s;o&&o.ref&&(s=o.ref);const a=new r(o||{},i);t.component=a,n=a.element,"function"==typeof s?s(a):e&&e.refs&&s&&(e.refs[s]=a)}else pt.has(r)?(n=document.createElementNS("http://www.w3.org/2000/svg",r),i&&St(n,i,e),o&>(n,null,t,e)):(n=document.createElement(r),i&&St(n,i,e),o&>(n,null,t,e))}return t.domNode=n,n}function St(t,e,n){for(let r=0;r0?(i=Tt.pop()).clear():i=new Map,It(i,e,o,s));var h=Ot(f),d=h?i.get(h):null;if(null==d)t.insertBefore(mt(f,r),a.domNode),f=n[++u];else{var g=e[d];Ct(g,f,r),e[d]=void 0,t.insertBefore(g.domNode,a.domNode),f=n[++u]}}else c=e[--s];else a=e[++o];if(o>s){var m=n[l+1]?n[l+1].domNode:null;for(let e=u;e<=l;e++)t.insertBefore(mt(n[e],r),m)}else if(u>l)for(let t=o;t<=s;t++){var v=e[t];v&&At(v,r&&r.refs)}i&&Tt.push(i)}(r,t.children,e.children,n),gt(r,t,e,n),i=r),e.domNode=i,i!==r&&r.parentNode&&r.parentNode.replaceChild(i,r),i}{const i=r.parentNode,o=r.nextSibling;At(t,n&&n.refs);const s=mt(e,n);return i&&i.insertBefore(s,o),e.domNode=s,s}}let Tt=[new Map,new Map,new Map,new Map];function At(t,e,n=!0){const{domNode:r,props:i,children:o,component:s}=t,a=i&&i.ref;if(s)"function"==typeof a?a(null):e&&a&&e[a]===s&&delete e[a],s.destroy&&s.destroy();else if("function"==typeof a?a(null):e&&a&&e[a]===r&&delete e[a],o)for(let t=0;t{this.resolveNextUpdatePromise=t}))),this.nextUpdatePromise}performUpdates(){for(;this.updateRequests.length>0;)this.updateRequests.shift()();for(this.pendingAnimationFrame=null;this.readRequests.length>0;)this.readRequests.shift()();if(this.nextUpdatePromise){let t=this.resolveNextUpdatePromise;this.nextUpdatePromise=null,this.resolveNextUpdatePromise=null,t()}}};let Nt=null;var Dt=function(){return Nt||(Nt=new jt),Nt};const Ft=new WeakSet;let Lt=0,Mt=0;function Rt(t){return null!=t&&!1!==t}function Bt(t,e){e.context=t,e.ambiguous&&(e.ambiguous.forEach((e=>{e.context=t})),delete e.ambiguous)}function zt(t,e=!0){if(!Rt(t.virtualNode))throw new Error((t.constructor?t.constructor.name+" instance":t)+" is not associated with a valid virtualNode. Perhaps this component was never initialized?");if(null==t.element)throw new Error((t.constructor?t.constructor.name+" instance":t)+" is not associated with a DOM element. Perhaps this component was never initialized?");let n=t.render();if(!Rt(n)){const e=t.constructor&&t.constructor.name?" in "+t.constructor.name:"";throw new Error("invalid falsy value "+n+" returned from render()"+e)}Bt(t,n),Lt++;let r=t.virtualNode,i=t.element,o=Et(r,n,{refs:t.refs,listenerContext:t});if(t.virtualNode=n,o!==i&&!e)throw new Error("The root node type changed on update, but the update was performed with the replaceNode option set to false");t.element=o,"function"==typeof t.writeAfterUpdate&&t.writeAfterUpdate(),"function"==typeof t.readAfterUpdate&&Dt().readDocument((function(){t.readAfterUpdate()})),Lt--}function qt(t,e=!0){Mt++,Ht(t.virtualNode),1===Mt&&e&&t.element.remove(),Mt--}function Ht(t){t.component&&"function"==typeof t.component.destroy?t.component.destroy():t.children&&t.children.forEach(Ht)}kt={initialize:function(t){if("function"!=typeof t.update)throw new Error("Etch components must implement `update(props, children)`.");let e=t.render();if(!Rt(e)){let n=t.constructor&&t.constructor.name?" in "+t.constructor.name:"";throw new Error("invalid falsy value "+e+" returned from render()"+n)}Bt(t,e),t.refs={},t.virtualNode=e,t.element=mt(t.virtualNode,{refs:t.refs,listenerContext:t})},update:function(t,e=!0){if(Lt>0)return zt(t,e),Promise.resolve();let n=Dt();return Ft.has(t)||(Ft.add(t),n.updateDocument((function(){Ft.delete(t),zt(t,e)}))),n.getNextUpdatePromise()},updateSync:zt,destroy:function(t,e=!0){if(Lt>0||Mt>0)return qt(t,e),Promise.resolve();let n=Dt();return n.updateDocument((function(){qt(t,e)})),n.getNextUpdatePromise()},destroySync:qt};const{initialize:Ut,update:$t,updateSync:Vt,destroy:Wt,destroySync:Gt}=kt;function Kt(t){void 0!==t&&("function"==typeof t.catch?t.catch((t=>{atom.notifications.addFatalError("Atom-Typescript error: "+t.message,{detail:t.toString(),stack:t.stack,dismissable:!0})})):atom.notifications.addFatalError("Atom-Typescript: non-promise passed to handlePromise. Please report this.",{stack:(new Error).stack,dismissable:!0}))}ft={dom:ut,render:mt,initialize:Ut,update:$t,updateSync:Vt,destroy:Wt,destroySync:Gt,setScheduler:function(t){Nt=t},getScheduler:Dt};var Qt=function(){var t=this,e={exports:this};return function(){var n,r="Expected a function",i="__lodash_hash_undefined__",o="__lodash_placeholder__",s=16,a=32,c=64,u=128,l=256,f=1/0,p=9007199254740991,h=NaN,d=4294967295,g=[["ary",u],["bind",1],["bindKey",2],["curry",8],["curryRight",s],["flip",512],["partial",a],["partialRight",c],["rearg",l]],m="[object Arguments]",v="[object Array]",y="[object Boolean]",w="[object Date]",b="[object Error]",_="[object Function]",x="[object GeneratorFunction]",S="[object Map]",k="[object Number]",E="[object Object]",C="[object Promise]",A="[object RegExp]",P="[object Set]",O="[object String]",I="[object Symbol]",j="[object WeakMap]",N="[object ArrayBuffer]",D="[object DataView]",F="[object Float32Array]",L="[object Float64Array]",M="[object Int8Array]",R="[object Int16Array]",B="[object Int32Array]",z="[object Uint8Array]",q="[object Uint8ClampedArray]",H="[object Uint16Array]",U="[object Uint32Array]",$=/\b__p \+= '';/g,V=/\b(__p \+=) '' \+/g,W=/(__e\(.*?\)|\b__t\)) \+\n'';/g,G=/&(?:amp|lt|gt|quot|#39);/g,K=/[&<>"']/g,Q=RegExp(G.source),Z=RegExp(K.source),J=/<%-([\s\S]+?)%>/g,Y=/<%([\s\S]+?)%>/g,X=/<%=([\s\S]+?)%>/g,tt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,et=/^\w*$/,nt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,rt=/[\\^$.*+?()[\]{}|]/g,it=RegExp(rt.source),ot=/^\s+/,st=/\s/,at=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,ct=/\{\n\/\* \[wrapped with (.+)\] \*/,ut=/,? & /,lt=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,ft=/[()=,{}\[\]\/\s]/,pt=/\\(\\)?/g,ht=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,dt=/\w*$/,gt=/^[-+]0x[0-9a-f]+$/i,mt=/^0b[01]+$/i,vt=/^\[object .+?Constructor\]$/,yt=/^0o[0-7]+$/i,wt=/^(?:0|[1-9]\d*)$/,bt=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,_t=/($^)/,xt=/['\n\r\u2028\u2029\\]/g,St="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",kt="\\u2700-\\u27bf",Et="a-z\\xdf-\\xf6\\xf8-\\xff",Ct="A-Z\\xc0-\\xd6\\xd8-\\xde",Tt="\\ufe0e\\ufe0f",At="\\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",Pt="['’]",Ot="[\\ud800-\\udfff]",It="["+At+"]",jt="["+St+"]",Nt="\\d+",Dt="[\\u2700-\\u27bf]",Ft="["+Et+"]",Lt="[^\\ud800-\\udfff"+At+Nt+kt+Et+Ct+"]",Mt="\\ud83c[\\udffb-\\udfff]",Rt="[^\\ud800-\\udfff]",Bt="(?:\\ud83c[\\udde6-\\uddff]){2}",zt="[\\ud800-\\udbff][\\udc00-\\udfff]",qt="["+Ct+"]",Ht="(?:"+Ft+"|"+Lt+")",Ut="(?:"+qt+"|"+Lt+")",$t="(?:['’](?:d|ll|m|re|s|t|ve))?",Vt="(?:['’](?:D|LL|M|RE|S|T|VE))?",Wt="(?:"+jt+"|"+Mt+")"+"?",Gt="[\\ufe0e\\ufe0f]?",Kt=Gt+Wt+("(?:\\u200d(?:"+[Rt,Bt,zt].join("|")+")"+Gt+Wt+")*"),Qt="(?:"+[Dt,Bt,zt].join("|")+")"+Kt,Zt="(?:"+[Rt+jt+"?",jt,Bt,zt,Ot].join("|")+")",Jt=RegExp(Pt,"g"),Yt=RegExp(jt,"g"),Xt=RegExp(Mt+"(?="+Mt+")|"+Zt+Kt,"g"),te=RegExp([qt+"?"+Ft+"+"+$t+"(?="+[It,qt,"$"].join("|")+")",Ut+"+"+Vt+"(?="+[It,qt+Ht,"$"].join("|")+")",qt+"?"+Ht+"+"+$t,qt+"+"+Vt,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Nt,Qt].join("|"),"g"),ee=RegExp("[\\u200d\\ud800-\\udfff"+St+Tt+"]"),ne=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,re=["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"],ie=-1,oe={};oe[F]=oe[L]=oe[M]=oe[R]=oe[B]=oe[z]=oe[q]=oe[H]=oe[U]=!0,oe[m]=oe[v]=oe[N]=oe[y]=oe[D]=oe[w]=oe[b]=oe[_]=oe[S]=oe[k]=oe[E]=oe[A]=oe[P]=oe[O]=oe[j]=!1;var se={};se[m]=se[v]=se[N]=se[D]=se[y]=se[w]=se[F]=se[L]=se[M]=se[R]=se[B]=se[S]=se[k]=se[E]=se[A]=se[P]=se[O]=se[I]=se[z]=se[q]=se[H]=se[U]=!0,se[b]=se[_]=se[j]=!1;var ae={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},ce=parseFloat,ue=parseInt,le="object"==typeof T&&T&&T.Object===Object&&T,fe="object"==typeof self&&self&&self.Object===Object&&self,pe=le||fe||Function("return this")(),he="object"==typeof t&&t&&!t.nodeType&&t,de=he&&"object"==typeof e&&e&&!e.nodeType&&e,ge=de&&de.exports===he,me=ge&&le.process,ve=function(){try{var t=de&&de.require&&de.require("util").types;return t||me&&me.binding&&me.binding("util")}catch(t){}}(),ye=ve&&ve.isArrayBuffer,we=ve&&ve.isDate,be=ve&&ve.isMap,_e=ve&&ve.isRegExp,xe=ve&&ve.isSet,Se=ve&&ve.isTypedArray;function ke(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 Ee(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i-1}function Ie(t,e,n){for(var r=-1,i=null==t?0:t.length;++r-1;);return n}function tn(t,e){for(var n=t.length;n--&&ze(e,t[n],0)>-1;);return n}function en(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}var nn=Ve({"À":"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"}),rn=Ve({"&":"&","<":"<",">":">",'"':""","'":"'"});function on(t){return"\\"+ae[t]}function sn(t){return ee.test(t)}function an(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n}function cn(t,e){return function(n){return t(e(n))}}function un(t,e){for(var n=-1,r=t.length,i=0,s=[];++n",""":'"',"'":"'"});var mn=function t(e){var T,st=(e=null==e?pe:mn.defaults(pe.Object(),e,mn.pick(pe,re))).Array,St=e.Date,kt=e.Error,Et=e.Function,Ct=e.Math,Tt=e.Object,At=e.RegExp,Pt=e.String,Ot=e.TypeError,It=st.prototype,jt=Et.prototype,Nt=Tt.prototype,Dt=e["__core-js_shared__"],Ft=jt.toString,Lt=Nt.hasOwnProperty,Mt=0,Rt=(T=/[^.]+$/.exec(Dt&&Dt.keys&&Dt.keys.IE_PROTO||""))?"Symbol(src)_1."+T:"",Bt=Nt.toString,zt=Ft.call(Tt),qt=pe._,Ht=At("^"+Ft.call(Lt).replace(rt,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ut=ge?e.Buffer:n,$t=e.Symbol,Vt=e.Uint8Array,Wt=Ut?Ut.allocUnsafe:n,Gt=cn(Tt.getPrototypeOf,Tt),Kt=Tt.create,Qt=Nt.propertyIsEnumerable,Zt=It.splice,Xt=$t?$t.isConcatSpreadable:n,ee=$t?$t.iterator:n,ae=$t?$t.toStringTag:n,le=function(){try{var t=ho(Tt,"defineProperty");return t({},"",{}),t}catch(t){}}(),fe=e.clearTimeout!==pe.clearTimeout&&e.clearTimeout,he=St&&St.now!==pe.Date.now&&St.now,de=e.setTimeout!==pe.setTimeout&&e.setTimeout,me=Ct.ceil,ve=Ct.floor,Me=Tt.getOwnPropertySymbols,Ve=Ut?Ut.isBuffer:n,vn=e.isFinite,yn=It.join,wn=cn(Tt.keys,Tt),bn=Ct.max,_n=Ct.min,xn=St.now,Sn=e.parseInt,kn=Ct.random,En=It.reverse,Cn=ho(e,"DataView"),Tn=ho(e,"Map"),An=ho(e,"Promise"),Pn=ho(e,"Set"),On=ho(e,"WeakMap"),In=ho(Tt,"create"),jn=On&&new On,Nn={},Dn=qo(Cn),Fn=qo(Tn),Ln=qo(An),Mn=qo(Pn),Rn=qo(On),Bn=$t?$t.prototype:n,zn=Bn?Bn.valueOf:n,qn=Bn?Bn.toString:n;function Hn(t){if(ia(t)&&!Gs(t)&&!(t instanceof Wn)){if(t instanceof Vn)return t;if(Lt.call(t,"__wrapped__"))return Ho(t)}return new Vn(t)}var Un=function(){function t(){}return function(e){if(!ra(e))return{};if(Kt)return Kt(e);t.prototype=e;var r=new t;return t.prototype=n,r}}();function $n(){}function Vn(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=n}function Wn(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=d,this.__views__=[]}function Gn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e=e?t:e)),t}function lr(t,e,r,i,o,s){var a,c=1&e,u=2&e,l=4&e;if(r&&(a=o?r(t,i,o,s):r(t)),a!==n)return a;if(!ra(t))return t;var f=Gs(t);if(f){if(a=function(t){var e=t.length,n=new t.constructor(e);e&&"string"==typeof t[0]&&Lt.call(t,"index")&&(n.index=t.index,n.input=t.input);return n}(t),!c)return Ii(t,a)}else{var p=vo(t),h=p==_||p==x;if(Js(t))return Ei(t,c);if(p==E||p==m||h&&!o){if(a=u||h?{}:wo(t),!c)return u?function(t,e){return ji(t,mo(t),e)}(t,function(t,e){return t&&ji(e,Fa(e),t)}(a,t)):function(t,e){return ji(t,go(t),e)}(t,sr(a,t))}else{if(!se[p])return o?t:{};a=function(t,e,n){var r=t.constructor;switch(e){case N:return Ci(t);case y:case w:return new r(+t);case D:return function(t,e){var n=e?Ci(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case F:case L:case M:case R:case B:case z:case q:case H:case U:return Ti(t,n);case S:return new r;case k:case O:return new r(t);case A:return function(t){var e=new t.constructor(t.source,dt.exec(t));return e.lastIndex=t.lastIndex,e}(t);case P:return new r;case I:return i=t,zn?Tt(zn.call(i)):{}}var i}(t,p,c)}}s||(s=new Jn);var d=s.get(t);if(d)return d;s.set(t,a),ua(t)?t.forEach((function(n){a.add(lr(n,e,r,n,t,s))})):oa(t)&&t.forEach((function(n,i){a.set(i,lr(n,e,r,i,t,s))}));var g=f?n:(l?u?so:oo:u?Fa:Da)(t);return Ce(g||t,(function(n,i){g&&(n=t[i=n]),rr(a,i,lr(n,e,r,i,t,s))})),a}function fr(t,e,r){var i=r.length;if(null==t)return!i;for(t=Tt(t);i--;){var o=r[i],s=e[o],a=t[o];if(a===n&&!(o in t)||!s(a))return!1}return!0}function pr(t,e,i){if("function"!=typeof t)throw new Ot(r);return Do((function(){t.apply(n,i)}),e)}function hr(t,e,n,r){var i=-1,o=Oe,s=!0,a=t.length,c=[],u=e.length;if(!a)return c;n&&(e=je(e,Ze(n))),r?(o=Ie,s=!1):e.length>=200&&(o=Ye,s=!1,e=new Zn(e));t:for(;++i-1},Kn.prototype.set=function(t,e){var n=this.__data__,r=ir(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},Qn.prototype.clear=function(){this.size=0,this.__data__={hash:new Gn,map:new(Tn||Kn),string:new Gn}},Qn.prototype.delete=function(t){var e=fo(this,t).delete(t);return this.size-=e?1:0,e},Qn.prototype.get=function(t){return fo(this,t).get(t)},Qn.prototype.has=function(t){return fo(this,t).has(t)},Qn.prototype.set=function(t,e){var n=fo(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Zn.prototype.add=Zn.prototype.push=function(t){return this.__data__.set(t,i),this},Zn.prototype.has=function(t){return this.__data__.has(t)},Jn.prototype.clear=function(){this.__data__=new Kn,this.size=0},Jn.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Jn.prototype.get=function(t){return this.__data__.get(t)},Jn.prototype.has=function(t){return this.__data__.has(t)},Jn.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Kn){var r=n.__data__;if(!Tn||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new Qn(r)}return n.set(t,e),this.size=n.size,this};var dr=Fi(xr),gr=Fi(Sr,!0);function mr(t,e){var n=!0;return dr(t,(function(t,r,i){return n=!!e(t,r,i)})),n}function vr(t,e,r){for(var i=-1,o=t.length;++i0&&n(a)?e>1?wr(a,e-1,n,r,i):Ne(i,a):r||(i[i.length]=a)}return i}var br=Li(),_r=Li(!0);function xr(t,e){return t&&br(t,e,Da)}function Sr(t,e){return t&&_r(t,e,Da)}function kr(t,e){return Pe(e,(function(e){return ta(t[e])}))}function Er(t,e){for(var r=0,i=(e=_i(e,t)).length;null!=t&&re}function Pr(t,e){return null!=t&&Lt.call(t,e)}function Or(t,e){return null!=t&&e in Tt(t)}function Ir(t,e,r){for(var i=r?Ie:Oe,o=t[0].length,s=t.length,a=s,c=st(s),u=1/0,l=[];a--;){var f=t[a];a&&e&&(f=je(f,Ze(e))),u=_n(f.length,u),c[a]=!r&&(e||o>=120&&f.length>=120)?new Zn(a&&f):n}f=t[0];var p=-1,h=c[0];t:for(;++p=a?c:c*("desc"==n[r]?-1:1)}return t.index-e.index}(t,e,n)}))}function Gr(t,e,n){for(var r=-1,i=e.length,o={};++r-1;)a!==t&&Zt.call(a,c,1),Zt.call(t,c,1);return t}function Qr(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;_o(i)?Zt.call(t,i,1):hi(t,i)}}return t}function Zr(t,e){return t+ve(kn()*(e-t+1))}function Jr(t,e){var n="";if(!t||e<1||e>p)return n;do{e%2&&(n+=t),(e=ve(e/2))&&(t+=t)}while(e);return n}function Yr(t,e){return Fo(Po(t,e,sc),t+"")}function Xr(t){return Xn(Ua(t))}function ti(t,e){var n=Ua(t);return Ro(n,ur(e,0,n.length))}function ei(t,e,r,i){if(!ra(t))return t;for(var o=-1,s=(e=_i(e,t)).length,a=s-1,c=t;null!=c&&++oi?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=st(i);++r>>1,s=t[o];null!==s&&!fa(s)&&(n?s<=e:s=200){var u=e?null:Ji(t);if(u)return ln(u);s=!1,i=Ye,c=new Zn}else c=e?[]:a;t:for(;++r=i?t:oi(t,e,r)}var ki=fe||function(t){return pe.clearTimeout(t)};function Ei(t,e){if(e)return t.slice();var n=t.length,r=Wt?Wt(n):new t.constructor(n);return t.copy(r),r}function Ci(t){var e=new t.constructor(t.byteLength);return new Vt(e).set(new Vt(t)),e}function Ti(t,e){var n=e?Ci(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Ai(t,e){if(t!==e){var r=t!==n,i=null===t,o=t==t,s=fa(t),a=e!==n,c=null===e,u=e==e,l=fa(e);if(!c&&!l&&!s&&t>e||s&&a&&u&&!c&&!l||i&&a&&u||!r&&u||!o)return 1;if(!i&&!s&&!l&&t1?r[o-1]:n,a=o>2?r[2]:n;for(s=t.length>3&&"function"==typeof s?(o--,s):n,a&&xo(r[0],r[1],a)&&(s=o<3?n:s,o=1),e=Tt(e);++i-1?o[s?e[a]:a]:n}}function qi(t){return io((function(e){var i=e.length,o=i,s=Vn.prototype.thru;for(t&&e.reverse();o--;){var a=e[o];if("function"!=typeof a)throw new Ot(r);if(s&&!c&&"wrapper"==co(a))var c=new Vn([],!0)}for(o=c?o:i;++o1&&y.reverse(),p&&lc))return!1;var l=s.get(t),f=s.get(e);if(l&&f)return l==e&&f==t;var p=-1,h=!0,d=2&r?new Zn:n;for(s.set(t,e),s.set(e,t);++p-1&&t%1==0&&t1?"& ":"")+e[r],e=e.join(n>2?", ":" "),t.replace(at,"{\n/* [wrapped with "+e+"] */\n")}(r,function(t,e){return Ce(g,(function(n){var r="_."+n[0];e&n[1]&&!Oe(t,r)&&t.push(r)})),t.sort()}(function(t){var e=t.match(ct);return e?e[1].split(ut):[]}(r),n)))}function Mo(t){var e=0,r=0;return function(){var i=xn(),o=16-(i-r);if(r=i,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(n,arguments)}}function Ro(t,e){var r=-1,i=t.length,o=i-1;for(e=e===n?i:e;++r1?t[e-1]:n;return r="function"==typeof r?(t.pop(),r):n,cs(t,r)}));function gs(t){var e=Hn(t);return e.__chain__=!0,e}function ms(t,e){return e(t)}var vs=io((function(t){var e=t.length,r=e?t[0]:0,i=this.__wrapped__,o=function(e){return cr(e,t)};return!(e>1||this.__actions__.length)&&i instanceof Wn&&_o(r)?((i=i.slice(r,+r+(e?1:0))).__actions__.push({func:ms,args:[o],thisArg:n}),new Vn(i,this.__chain__).thru((function(t){return e&&!t.length&&t.push(n),t}))):this.thru(o)}));var ys=Ni((function(t,e,n){Lt.call(t,n)?++t[n]:ar(t,n,1)}));var ws=zi(Wo),bs=zi(Go);function _s(t,e){return(Gs(t)?Ce:dr)(t,lo(e,3))}function xs(t,e){return(Gs(t)?Te:gr)(t,lo(e,3))}var Ss=Ni((function(t,e,n){Lt.call(t,n)?t[n].push(e):ar(t,n,[e])}));var ks=Yr((function(t,e,n){var r=-1,i="function"==typeof e,o=Qs(t)?st(t.length):[];return dr(t,(function(t){o[++r]=i?ke(e,t,n):jr(t,e,n)})),o})),Es=Ni((function(t,e,n){ar(t,n,e)}));function Cs(t,e){return(Gs(t)?je:qr)(t,lo(e,3))}var Ts=Ni((function(t,e,n){t[n?0:1].push(e)}),(function(){return[[],[]]}));var As=Yr((function(t,e){if(null==t)return[];var n=e.length;return n>1&&xo(t,e[0],e[1])?e=[]:n>2&&xo(e[0],e[1],e[2])&&(e=[e[0]]),Wr(t,wr(e,1),[])})),Ps=he||function(){return pe.Date.now()};function Os(t,e,r){return e=r?n:e,e=t&&null==e?t.length:e,Xi(t,u,n,n,n,n,e)}function Is(t,e){var i;if("function"!=typeof e)throw new Ot(r);return t=va(t),function(){return--t>0&&(i=e.apply(this,arguments)),t<=1&&(e=n),i}}var js=Yr((function(t,e,n){var r=1;if(n.length){var i=un(n,uo(js));r|=a}return Xi(t,r,e,n,i)})),Ns=Yr((function(t,e,n){var r=3;if(n.length){var i=un(n,uo(Ns));r|=a}return Xi(e,r,t,n,i)}));function Ds(t,e,i){var o,s,a,c,u,l,f=0,p=!1,h=!1,d=!0;if("function"!=typeof t)throw new Ot(r);function g(e){var r=o,i=s;return o=s=n,f=e,c=t.apply(i,r)}function m(t){return f=t,u=Do(y,e),p?g(t):c}function v(t){var r=t-l;return l===n||r>=e||r<0||h&&t-f>=a}function y(){var t=Ps();if(v(t))return w(t);u=Do(y,function(t){var n=e-(t-l);return h?_n(n,a-(t-f)):n}(t))}function w(t){return u=n,d&&o?g(t):(o=s=n,c)}function b(){var t=Ps(),r=v(t);if(o=arguments,s=this,l=t,r){if(u===n)return m(l);if(h)return ki(u),u=Do(y,e),g(l)}return u===n&&(u=Do(y,e)),c}return e=wa(e)||0,ra(i)&&(p=!!i.leading,a=(h="maxWait"in i)?bn(wa(i.maxWait)||0,e):a,d="trailing"in i?!!i.trailing:d),b.cancel=function(){u!==n&&ki(u),f=0,o=l=s=u=n},b.flush=function(){return u===n?c:w(Ps())},b}var Fs=Yr((function(t,e){return pr(t,1,e)})),Ls=Yr((function(t,e,n){return pr(t,wa(e)||0,n)}));function Ms(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new Ot(r);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 s=t.apply(this,r);return n.cache=o.set(i,s)||o,s};return n.cache=new(Ms.Cache||Qn),n}function Rs(t){if("function"!=typeof t)throw new Ot(r);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)}}Ms.Cache=Qn;var Bs=xi((function(t,e){var n=(e=1==e.length&&Gs(e[0])?je(e[0],Ze(lo())):je(wr(e,1),Ze(lo()))).length;return Yr((function(r){for(var i=-1,o=_n(r.length,n);++i=e})),Ws=Nr(function(){return arguments}())?Nr:function(t){return ia(t)&&Lt.call(t,"callee")&&!Qt.call(t,"callee")},Gs=st.isArray,Ks=ye?Ze(ye):function(t){return ia(t)&&Tr(t)==N};function Qs(t){return null!=t&&na(t.length)&&!ta(t)}function Zs(t){return ia(t)&&Qs(t)}var Js=Ve||wc,Ys=we?Ze(we):function(t){return ia(t)&&Tr(t)==w};function Xs(t){if(!ia(t))return!1;var e=Tr(t);return e==b||"[object DOMException]"==e||"string"==typeof t.message&&"string"==typeof t.name&&!aa(t)}function ta(t){if(!ra(t))return!1;var e=Tr(t);return e==_||e==x||"[object AsyncFunction]"==e||"[object Proxy]"==e}function ea(t){return"number"==typeof t&&t==va(t)}function na(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=p}function ra(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function ia(t){return null!=t&&"object"==typeof t}var oa=be?Ze(be):function(t){return ia(t)&&vo(t)==S};function sa(t){return"number"==typeof t||ia(t)&&Tr(t)==k}function aa(t){if(!ia(t)||Tr(t)!=E)return!1;var e=Gt(t);if(null===e)return!0;var n=Lt.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&Ft.call(n)==zt}var ca=_e?Ze(_e):function(t){return ia(t)&&Tr(t)==A};var ua=xe?Ze(xe):function(t){return ia(t)&&vo(t)==P};function la(t){return"string"==typeof t||!Gs(t)&&ia(t)&&Tr(t)==O}function fa(t){return"symbol"==typeof t||ia(t)&&Tr(t)==I}var pa=Se?Ze(Se):function(t){return ia(t)&&na(t.length)&&!!oe[Tr(t)]};var ha=Ki(zr),da=Ki((function(t,e){return t<=e}));function ga(t){if(!t)return[];if(Qs(t))return la(t)?hn(t):Ii(t);if(ee&&t[ee])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[ee]());var e=vo(t);return(e==S?an:e==P?ln:Ua)(t)}function ma(t){return t?(t=wa(t))===f||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function va(t){var e=ma(t),n=e%1;return e==e?n?e-n:e:0}function ya(t){return t?ur(va(t),0,d):0}function wa(t){if("number"==typeof t)return t;if(fa(t))return h;if(ra(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=ra(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=Qe(t);var n=mt.test(t);return n||yt.test(t)?ue(t.slice(2),n?2:8):gt.test(t)?h:+t}function ba(t){return ji(t,Fa(t))}function _a(t){return null==t?"":fi(t)}var xa=Di((function(t,e){if(Co(e)||Qs(e))ji(e,Da(e),t);else for(var n in e)Lt.call(e,n)&&rr(t,n,e[n])})),Sa=Di((function(t,e){ji(e,Fa(e),t)})),ka=Di((function(t,e,n,r){ji(e,Fa(e),t,r)})),Ea=Di((function(t,e,n,r){ji(e,Da(e),t,r)})),Ca=io(cr);var Ta=Yr((function(t,e){t=Tt(t);var r=-1,i=e.length,o=i>2?e[2]:n;for(o&&xo(e[0],e[1],o)&&(i=1);++r1),e})),ji(t,so(t),n),r&&(n=lr(n,7,no));for(var i=e.length;i--;)hi(n,e[i]);return n}));var Ba=io((function(t,e){return null==t?{}:function(t,e){return Gr(t,e,(function(e,n){return Oa(t,n)}))}(t,e)}));function za(t,e){if(null==t)return{};var n=je(so(t),(function(t){return[t]}));return e=lo(e),Gr(t,n,(function(t,n){return e(t,n[0])}))}var qa=Yi(Da),Ha=Yi(Fa);function Ua(t){return null==t?[]:Je(t,Da(t))}var $a=Ri((function(t,e,n){return e=e.toLowerCase(),t+(n?Va(e):e)}));function Va(t){return Xa(_a(t).toLowerCase())}function Wa(t){return(t=_a(t))&&t.replace(bt,nn).replace(Yt,"")}var Ga=Ri((function(t,e,n){return t+(n?"-":"")+e.toLowerCase()})),Ka=Ri((function(t,e,n){return t+(n?" ":"")+e.toLowerCase()})),Qa=Mi("toLowerCase");var Za=Ri((function(t,e,n){return t+(n?"_":"")+e.toLowerCase()}));var Ja=Ri((function(t,e,n){return t+(n?" ":"")+Xa(e)}));var Ya=Ri((function(t,e,n){return t+(n?" ":"")+e.toUpperCase()})),Xa=Mi("toUpperCase");function tc(t,e,r){return t=_a(t),(e=r?n:e)===n?function(t){return ne.test(t)}(t)?function(t){return t.match(te)||[]}(t):function(t){return t.match(lt)||[]}(t):t.match(e)||[]}var ec=Yr((function(t,e){try{return ke(t,n,e)}catch(t){return Xs(t)?t:new kt(t)}})),nc=io((function(t,e){return Ce(e,(function(e){e=zo(e),ar(t,e,js(t[e],t))})),t}));function rc(t){return function(){return t}}var ic=qi(),oc=qi(!0);function sc(t){return t}function ac(t){return Mr("function"==typeof t?t:lr(t,1))}var cc=Yr((function(t,e){return function(n){return jr(n,t,e)}})),uc=Yr((function(t,e){return function(n){return jr(t,n,e)}}));function lc(t,e,n){var r=Da(e),i=kr(e,r);null!=n||ra(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=kr(e,Da(e)));var o=!(ra(n)&&"chain"in n&&!n.chain),s=ta(t);return Ce(i,(function(n){var r=e[n];t[n]=r,s&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__),i=n.__actions__=Ii(this.__actions__);return i.push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,Ne([this.value()],arguments))})})),t}function fc(){}var pc=Vi(je),hc=Vi(Ae),dc=Vi(Le);function gc(t){return So(t)?$e(zo(t)):function(t){return function(e){return Er(e,t)}}(t)}var mc=Gi(),vc=Gi(!0);function yc(){return[]}function wc(){return!1}var bc=$i((function(t,e){return t+e}),0),_c=Zi("ceil"),xc=$i((function(t,e){return t/e}),1),Sc=Zi("floor");var kc=$i((function(t,e){return t*e}),1),Ec=Zi("round"),Cc=$i((function(t,e){return t-e}),0);return Hn.after=function(t,e){if("function"!=typeof e)throw new Ot(r);return t=va(t),function(){if(--t<1)return e.apply(this,arguments)}},Hn.ary=Os,Hn.assign=xa,Hn.assignIn=Sa,Hn.assignInWith=ka,Hn.assignWith=Ea,Hn.at=Ca,Hn.before=Is,Hn.bind=js,Hn.bindAll=nc,Hn.bindKey=Ns,Hn.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Gs(t)?t:[t]},Hn.chain=gs,Hn.chunk=function(t,e,r){e=(r?xo(t,e,r):e===n)?1:bn(va(e),0);var i=null==t?0:t.length;if(!i||e<1)return[];for(var o=0,s=0,a=st(me(i/e));oo?0:o+r),(i=i===n||i>o?o:va(i))<0&&(i+=o),i=r>i?0:ya(i);r>>0)?(t=_a(t))&&("string"==typeof e||null!=e&&!ca(e))&&!(e=fi(e))&&sn(t)?Si(hn(t),0,r):t.split(e,r):[]},Hn.spread=function(t,e){if("function"!=typeof t)throw new Ot(r);return e=null==e?0:bn(va(e),0),Yr((function(n){var r=n[e],i=Si(n,0,e);return r&&Ne(i,r),ke(t,this,i)}))},Hn.tail=function(t){var e=null==t?0:t.length;return e?oi(t,1,e):[]},Hn.take=function(t,e,r){return t&&t.length?oi(t,0,(e=r||e===n?1:va(e))<0?0:e):[]},Hn.takeRight=function(t,e,r){var i=null==t?0:t.length;return i?oi(t,(e=i-(e=r||e===n?1:va(e)))<0?0:e,i):[]},Hn.takeRightWhile=function(t,e){return t&&t.length?gi(t,lo(e,3),!1,!0):[]},Hn.takeWhile=function(t,e){return t&&t.length?gi(t,lo(e,3)):[]},Hn.tap=function(t,e){return e(t),t},Hn.throttle=function(t,e,n){var i=!0,o=!0;if("function"!=typeof t)throw new Ot(r);return ra(n)&&(i="leading"in n?!!n.leading:i,o="trailing"in n?!!n.trailing:o),Ds(t,e,{leading:i,maxWait:e,trailing:o})},Hn.thru=ms,Hn.toArray=ga,Hn.toPairs=qa,Hn.toPairsIn=Ha,Hn.toPath=function(t){return Gs(t)?je(t,zo):fa(t)?[t]:Ii(Bo(_a(t)))},Hn.toPlainObject=ba,Hn.transform=function(t,e,n){var r=Gs(t),i=r||Js(t)||pa(t);if(e=lo(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:ra(t)&&ta(o)?Un(Gt(t)):{}}return(i?Ce:xr)(t,(function(t,r,i){return e(n,t,r,i)})),n},Hn.unary=function(t){return Os(t,1)},Hn.union=is,Hn.unionBy=os,Hn.unionWith=ss,Hn.uniq=function(t){return t&&t.length?pi(t):[]},Hn.uniqBy=function(t,e){return t&&t.length?pi(t,lo(e,2)):[]},Hn.uniqWith=function(t,e){return e="function"==typeof e?e:n,t&&t.length?pi(t,n,e):[]},Hn.unset=function(t,e){return null==t||hi(t,e)},Hn.unzip=as,Hn.unzipWith=cs,Hn.update=function(t,e,n){return null==t?t:di(t,e,bi(n))},Hn.updateWith=function(t,e,r,i){return i="function"==typeof i?i:n,null==t?t:di(t,e,bi(r),i)},Hn.values=Ua,Hn.valuesIn=function(t){return null==t?[]:Je(t,Fa(t))},Hn.without=us,Hn.words=tc,Hn.wrap=function(t,e){return zs(bi(e),t)},Hn.xor=ls,Hn.xorBy=fs,Hn.xorWith=ps,Hn.zip=hs,Hn.zipObject=function(t,e){return yi(t||[],e||[],rr)},Hn.zipObjectDeep=function(t,e){return yi(t||[],e||[],ei)},Hn.zipWith=ds,Hn.entries=qa,Hn.entriesIn=Ha,Hn.extend=Sa,Hn.extendWith=ka,lc(Hn,Hn),Hn.add=bc,Hn.attempt=ec,Hn.camelCase=$a,Hn.capitalize=Va,Hn.ceil=_c,Hn.clamp=function(t,e,r){return r===n&&(r=e,e=n),r!==n&&(r=(r=wa(r))==r?r:0),e!==n&&(e=(e=wa(e))==e?e:0),ur(wa(t),e,r)},Hn.clone=function(t){return lr(t,4)},Hn.cloneDeep=function(t){return lr(t,5)},Hn.cloneDeepWith=function(t,e){return lr(t,5,e="function"==typeof e?e:n)},Hn.cloneWith=function(t,e){return lr(t,4,e="function"==typeof e?e:n)},Hn.conformsTo=function(t,e){return null==e||fr(t,e,Da(e))},Hn.deburr=Wa,Hn.defaultTo=function(t,e){return null==t||t!=t?e:t},Hn.divide=xc,Hn.endsWith=function(t,e,r){t=_a(t),e=fi(e);var i=t.length,o=r=r===n?i:ur(va(r),0,i);return(r-=e.length)>=0&&t.slice(r,o)==e},Hn.eq=Us,Hn.escape=function(t){return(t=_a(t))&&Z.test(t)?t.replace(K,rn):t},Hn.escapeRegExp=function(t){return(t=_a(t))&&it.test(t)?t.replace(rt,"\\$&"):t},Hn.every=function(t,e,r){var i=Gs(t)?Ae:mr;return r&&xo(t,e,r)&&(e=n),i(t,lo(e,3))},Hn.find=ws,Hn.findIndex=Wo,Hn.findKey=function(t,e){return Re(t,lo(e,3),xr)},Hn.findLast=bs,Hn.findLastIndex=Go,Hn.findLastKey=function(t,e){return Re(t,lo(e,3),Sr)},Hn.floor=Sc,Hn.forEach=_s,Hn.forEachRight=xs,Hn.forIn=function(t,e){return null==t?t:br(t,lo(e,3),Fa)},Hn.forInRight=function(t,e){return null==t?t:_r(t,lo(e,3),Fa)},Hn.forOwn=function(t,e){return t&&xr(t,lo(e,3))},Hn.forOwnRight=function(t,e){return t&&Sr(t,lo(e,3))},Hn.get=Pa,Hn.gt=$s,Hn.gte=Vs,Hn.has=function(t,e){return null!=t&&yo(t,e,Pr)},Hn.hasIn=Oa,Hn.head=Qo,Hn.identity=sc,Hn.includes=function(t,e,n,r){t=Qs(t)?t:Ua(t),n=n&&!r?va(n):0;var i=t.length;return n<0&&(n=bn(i+n,0)),la(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&ze(t,e,n)>-1},Hn.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:va(n);return i<0&&(i=bn(r+i,0)),ze(t,e,i)},Hn.inRange=function(t,e,r){return e=ma(e),r===n?(r=e,e=0):r=ma(r),function(t,e,n){return t>=_n(e,n)&&t=-9007199254740991&&t<=p},Hn.isSet=ua,Hn.isString=la,Hn.isSymbol=fa,Hn.isTypedArray=pa,Hn.isUndefined=function(t){return t===n},Hn.isWeakMap=function(t){return ia(t)&&vo(t)==j},Hn.isWeakSet=function(t){return ia(t)&&"[object WeakSet]"==Tr(t)},Hn.join=function(t,e){return null==t?"":yn.call(t,e)},Hn.kebabCase=Ga,Hn.last=Xo,Hn.lastIndexOf=function(t,e,r){var i=null==t?0:t.length;if(!i)return-1;var o=i;return r!==n&&(o=(o=va(r))<0?bn(i+o,0):_n(o,i-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,o):Be(t,He,o,!0)},Hn.lowerCase=Ka,Hn.lowerFirst=Qa,Hn.lt=ha,Hn.lte=da,Hn.max=function(t){return t&&t.length?vr(t,sc,Ar):n},Hn.maxBy=function(t,e){return t&&t.length?vr(t,lo(e,2),Ar):n},Hn.mean=function(t){return Ue(t,sc)},Hn.meanBy=function(t,e){return Ue(t,lo(e,2))},Hn.min=function(t){return t&&t.length?vr(t,sc,zr):n},Hn.minBy=function(t,e){return t&&t.length?vr(t,lo(e,2),zr):n},Hn.stubArray=yc,Hn.stubFalse=wc,Hn.stubObject=function(){return{}},Hn.stubString=function(){return""},Hn.stubTrue=function(){return!0},Hn.multiply=kc,Hn.nth=function(t,e){return t&&t.length?Vr(t,va(e)):n},Hn.noConflict=function(){return pe._===this&&(pe._=qt),this},Hn.noop=fc,Hn.now=Ps,Hn.pad=function(t,e,n){t=_a(t);var r=(e=va(e))?pn(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return Wi(ve(i),n)+t+Wi(me(i),n)},Hn.padEnd=function(t,e,n){t=_a(t);var r=(e=va(e))?pn(t):0;return e&&re){var i=t;t=e,e=i}if(r||t%1||e%1){var o=kn();return _n(t+o*(e-t+ce("1e-"+((o+"").length-1))),e)}return Zr(t,e)},Hn.reduce=function(t,e,n){var r=Gs(t)?De:We,i=arguments.length<3;return r(t,lo(e,4),n,i,dr)},Hn.reduceRight=function(t,e,n){var r=Gs(t)?Fe:We,i=arguments.length<3;return r(t,lo(e,4),n,i,gr)},Hn.repeat=function(t,e,r){return e=(r?xo(t,e,r):e===n)?1:va(e),Jr(_a(t),e)},Hn.replace=function(){var t=arguments,e=_a(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Hn.result=function(t,e,r){var i=-1,o=(e=_i(e,t)).length;for(o||(o=1,t=n);++ip)return[];var n=d,r=_n(t,d);e=lo(e),t-=d;for(var i=Ke(r,e);++n=s)return t;var c=r-pn(i);if(c<1)return i;var u=a?Si(a,0,c).join(""):t.slice(0,c);if(o===n)return u+i;if(a&&(c+=u.length-c),ca(o)){if(t.slice(c).search(o)){var l,f=u;for(o.global||(o=At(o.source,_a(dt.exec(o))+"g")),o.lastIndex=0;l=o.exec(f);)var p=l.index;u=u.slice(0,p===n?c:p)}}else if(t.indexOf(fi(o),c)!=c){var h=u.lastIndexOf(o);h>-1&&(u=u.slice(0,h))}return u+i},Hn.unescape=function(t){return(t=_a(t))&&Q.test(t)?t.replace(G,gn):t},Hn.uniqueId=function(t){var e=++Mt;return _a(t)+e},Hn.upperCase=Ya,Hn.upperFirst=Xa,Hn.each=_s,Hn.eachRight=xs,Hn.first=Qo,lc(Hn,function(){var t={};return xr(Hn,(function(e,n){Lt.call(Hn.prototype,n)||(t[n]=e)})),t}(),{chain:!1}),Hn.VERSION="4.17.21",Ce(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(t){Hn[t].placeholder=Hn})),Ce(["drop","take"],(function(t,e){Wn.prototype[t]=function(r){r=r===n?1:bn(va(r),0);var i=this.__filtered__&&!e?new Wn(this):this.clone();return i.__filtered__?i.__takeCount__=_n(r,i.__takeCount__):i.__views__.push({size:_n(r,d),type:t+(i.__dir__<0?"Right":"")}),i},Wn.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}})),Ce(["filter","map","takeWhile"],(function(t,e){var n=e+1,r=1==n||3==n;Wn.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:lo(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}})),Ce(["head","last"],(function(t,e){var n="take"+(e?"Right":"");Wn.prototype[t]=function(){return this[n](1).value()[0]}})),Ce(["initial","tail"],(function(t,e){var n="drop"+(e?"":"Right");Wn.prototype[t]=function(){return this.__filtered__?new Wn(this):this[n](1)}})),Wn.prototype.compact=function(){return this.filter(sc)},Wn.prototype.find=function(t){return this.filter(t).head()},Wn.prototype.findLast=function(t){return this.reverse().find(t)},Wn.prototype.invokeMap=Yr((function(t,e){return"function"==typeof t?new Wn(this):this.map((function(n){return jr(n,t,e)}))})),Wn.prototype.reject=function(t){return this.filter(Rs(lo(t)))},Wn.prototype.slice=function(t,e){t=va(t);var r=this;return r.__filtered__&&(t>0||e<0)?new Wn(r):(t<0?r=r.takeRight(-t):t&&(r=r.drop(t)),e!==n&&(r=(e=va(e))<0?r.dropRight(-e):r.take(e-t)),r)},Wn.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Wn.prototype.toArray=function(){return this.take(d)},xr(Wn.prototype,(function(t,e){var r=/^(?:filter|find|map|reject)|While$/.test(e),i=/^(?:head|last)$/.test(e),o=Hn[i?"take"+("last"==e?"Right":""):e],s=i||/^find/.test(e);o&&(Hn.prototype[e]=function(){var e=this.__wrapped__,a=i?[1]:arguments,c=e instanceof Wn,u=a[0],l=c||Gs(e),f=function(t){var e=o.apply(Hn,Ne([t],a));return i&&p?e[0]:e};l&&r&&"function"==typeof u&&1!=u.length&&(c=l=!1);var p=this.__chain__,h=!!this.__actions__.length,d=s&&!p,g=c&&!h;if(!s&&l){e=g?e:new Wn(this);var m=t.apply(e,a);return m.__actions__.push({func:ms,args:[f],thisArg:n}),new Vn(m,p)}return d&&g?t.apply(this,a):(m=this.thru(f),d?i?m.value()[0]:m.value():m)})})),Ce(["pop","push","shift","sort","splice","unshift"],(function(t){var e=It[t],n=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",r=/^(?:pop|shift)$/.test(t);Hn.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)}))}})),xr(Wn.prototype,(function(t,e){var n=Hn[e];if(n){var r=n.name+"";Lt.call(Nn,r)||(Nn[r]=[]),Nn[r].push({name:e,func:n})}})),Nn[Hi(n,2).name]=[{name:"wrapper",func:n}],Wn.prototype.clone=function(){var t=new Wn(this.__wrapped__);return t.__actions__=Ii(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Ii(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Ii(this.__views__),t},Wn.prototype.reverse=function(){if(this.__filtered__){var t=new Wn(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Wn.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){var r=-1,i=n.length;for(;++r=this.__values__.length;return{done:t,value:t?n:this.__values__[this.__index__++]}},Hn.prototype.plant=function(t){for(var e,r=this;r instanceof $n;){var i=Ho(r);i.__index__=0,i.__values__=n,e?o.__wrapped__=i:e=i;var o=i;r=r.__wrapped__}return o.__wrapped__=t,e},Hn.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Wn){var e=t;return this.__actions__.length&&(e=new Wn(this)),(e=e.reverse()).__actions__.push({func:ms,args:[rs],thisArg:n}),new Vn(e,this.__chain__)}return this.thru(rs)},Hn.prototype.toJSON=Hn.prototype.valueOf=Hn.prototype.value=function(){return mi(this.__wrapped__,this.__actions__)},Hn.prototype.first=Hn.prototype.head,ee&&(Hn.prototype[ee]=function(){return this}),Hn}();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(pe._=mn,define((function(){return mn}))):de?((de.exports=mn)._=mn,he._=mn):pe._=mn}.call(this),e.exports}.call({});const Zt=f.DiagnosticCategory;function Jt(t){return{line:t.row+1,offset:t.column+1}}function Yt(t){return new h.Point(t.line-1,t.offset-1)}function Xt(t){return te(t.start,t.end)}function te(t,e){return new h.Range(Yt(t),Yt(e))}function ee(t){const e=ne(t),n=e.formatCodeOptions;return{formatCodeOptions:{indentSize:atom.config.get("editor.tabLength"),tabSize:atom.config.get("editor.tabLength"),...n},compileOnSave:!!e.compileOnSave,preferences:e.preferences?e.preferences:{}}}function ne(t){".json"!==w.extname(t)&&(t+=".json");let{config:e}=f.readConfigFile(t,(t=>f.sys.readFile(t)));if(void 0===e)return{};if("string"==typeof e.extends){const n=ne(w.join(w.dirname(t),e.extends));e=Object.assign({},n,e)}return e}function re(t){return{label:oe(t.prefixDisplayParts)+t.parameters.map((t=>oe(t.displayParts))).join(oe(t.separatorDisplayParts))+oe(t.suffixDisplayParts),documentation:oe(t.documentation),parameters:t.parameters.map(ie)}}function ie(t){return{label:oe(t.displayParts),documentation:oe(t.documentation)}}function oe(t){return t.map((t=>t.text)).join("")}const se=function(){let t;return function(e,n){if(void 0===e)return!0;void 0===t&&(t=new Map(Object.values(f.Diagnostics).map((t=>[t.code,t.category]))));const r=t.get(e);return void 0===r||r===n}}();var ae,ce;function ue(t){return void 0!==t&&function(t){const e=atom.config.get("atom-typescript").tsFileExtensions;atom.config.get("atom-typescript").allowJS&&e.push(...atom.config.get("atom-typescript").jsFileExtensions);return e.includes(t)}(w.extname(t))}function le(){const t=atom.config.get("atom-typescript").tsSyntaxScopes;return atom.config.get("atom-typescript").allowJS&&t.push(...atom.config.get("atom-typescript").jsSyntaxScopes),t}function fe(t){return ue(t.getPath())&&pe(t)}function pe(t){const[e]=t.getRootScopeDescriptor().getScopesArray();return le().includes(e)}function he(t,e){const n=t.getPath();if(void 0!==n){return{file:n,...e?Jt(e):function(t){const e=t.getCursorBufferPosition();return{line:e.row+1,offset:e.column+1}}(t)}}}async function de(t,e){const n=new h.TextEditor({readonly:!0,keyboardInputEnabled:!1,showInvisibles:!1,tabLength:atom.config.get("editor.tabLength")}),r=atom.views.getView(n);try{return r.setUpdatedSynchronously(!0),r.style.pointerEvents="none",r.style.position="absolute",r.style.top="100vh",r.style.width="100vw",atom.grammars.assignLanguageMode(n.getBuffer(),e),n.setText(t),n.scrollToBufferPosition(n.getBuffer().getEndPosition()),atom.views.getView(atom.workspace).appendChild(r),await async function(t){return new Promise((e=>{const n=t.getBuffer().getLanguageMode(),r=t.component.getNextUpdatePromise();if(n.fullyTokenized||n.tree)e(r);else{const n=t.onDidTokenize((()=>{n.dispose(),e(r)}))}}))}(n),Array.from(r.querySelectorAll(".line:not(.dummy)")).map((t=>t.innerHTML))}finally{r.remove()}}const ge=null!==(ae=atom.config.get("linter-ui-default.longLineLength"))&&void 0!==ae?ae:4e3,me=(null!==(ce=atom.config.get("linter-ui-default.largeFileLineCount"))&&void 0!==ce?ce:3e3)/6;var ve={};function ye(t){const e=t.dataset.startLine;return void 0!==e?parseInt(e,10)-1:0}function we(t){const e=t.dataset.endLine;return void 0!==e?parseInt(e,10)-1:0}function be(t,e,n){const r=n.querySelectorAll(":scope > ol > li.node");if(0===r.length)return;for(const n of Array.from(r)){const r=ye(n),i=we(n);if(isFinite(r)&&isFinite(i)){if(t>=r&&e<=i){const r=be(t,e,n);return r||n}if(isFinite(i)&&e=i&&e<=o?n:void 0}function _e(t){return t.spans.length>0?t.spans[0].start.line-1:0}function xe(t,e){if(!t||!e)return t===e;if(t.text===e.text){if(e.collapsed&&(t.collapsed=!0),t.childItems&&e.childItems){let n,r;for(let i=0,o=t.childItems.length;i_e(t)-_e(e)));for(const e of t.childItems)Se(e)}}class ke{constructor(t){this.props=t,ft.initialize(this)}async update(t){this.props={...this.props,...t},await ft.update(this)}async destroy(){await ft.destroy(this)}render(){var t,e,n,r;const i=this.props.navTree,{ctrl:o}=this.props,s=(i.childItems?"nested-":"")+"item"+(i.collapsed?" collapsed":" expanded"),a=this.getStyles();return ft.dom("li",{className:"node entry exanded list-"+s,dataset:{startLine:null===(t=this.props.navTree.spans[0])||void 0===t||null===(e=t.start)||void 0===e?void 0:e.line,endLine:null===(n=this.props.navTree.spans[0])||void 0===n||null===(r=n.end)||void 0===r?void 0:r.line}},ft.dom("div",{className:"header list-item",on:{click:t=>this.entryClicked(t,i)}},ft.dom("span",{className:a},i.text)),ft.dom("ol",{className:"entries list-tree"},i.childItems?i.childItems.map((t=>ft.dom(ke,{navTree:t,ctrl:o}))):null))}getStyles(){const{kind:t}=this.props.navTree;let e="icon icon-"+t;const{kindModifiers:n}=this.props.navTree;return n&&(e+=" "+n.split(/[, ]/).map((t=>"modifier-"+t.trim())).join(" ")),e}entryClicked(t,e){t.stopPropagation();(function(t,e){return!!t.childItems&&e.target===e.currentTarget})(e,t)?(e.collapsed=!e.collapsed,Kt(ft.update(this))):this.props.ctrl.gotoNode(e)}}ve=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)};var Ee,Ce={},Te={};Ee="object"==typeof T&&T&&T.Object===Object&&T;var Ae="object"==typeof self&&self&&self.Object===Object&&self,Pe=Ee||Ae||Function("return this")();Ce=function(){return Te.Date.now()};var Oe={},Ie={},je={},Ne=/\s/;je=function(t){for(var e=t.length;e--&&Ne.test(t.charAt(e)););return e};var De=/^\s+/;Ie=function(t){return t?t.slice(0,je(t)+1).replace(De,""):t};var Fe,Le={},Me={};Fe=(Te=Pe).Symbol;var Re={},Be=Object.prototype,ze=Be.hasOwnProperty,qe=Be.toString,He=Fe?Fe.toStringTag:void 0;Re=function(t){var e=ze.call(t,He),n=t[He];try{t[He]=void 0;var r=!0}catch(t){}var i=qe.call(t);return r&&(e?t[He]=n:delete t[He]),i};var Ue={},$e=Object.prototype.toString;Ue=function(t){return $e.call(t)};var Ve=Fe?Fe.toStringTag:void 0;Me=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":Ve&&Ve in Object(t)?Re(t):Ue(t)};var We={};We=function(t){return null!=t&&"object"==typeof t};Le=function(t){return"symbol"==typeof t||We(t)&&"[object Symbol]"==Me(t)};var Ge=/^[-+]0x[0-9a-f]+$/i,Ke=/^0b[01]+$/i,Qe=/^0o[0-7]+$/i,Ze=parseInt;Oe=function(t){if("number"==typeof t)return t;if(Le(t))return NaN;if(ve(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=ve(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=Ie(t);var n=Ke.test(t);return n||Qe.test(t)?Ze(t.slice(2),n?2:8):Ge.test(t)?NaN:+t};var Je=Math.max,Ye=Math.min;var Xe=C((function(t,e,n){var r,i,o,s,a,c,u=0,l=!1,f=!1,p=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function h(e){var n=r,o=i;return r=i=void 0,u=e,s=t.apply(o,n)}function d(t){return u=t,a=setTimeout(m,e),l?h(t):s}function g(t){var n=t-c;return void 0===c||n>=e||n<0||f&&t-u>=o}function m(){var t=Ce();if(g(t))return v(t);a=setTimeout(m,function(t){var n=e-(t-c);return f?Ye(n,o-(t-u)):n}(t))}function v(t){return a=void 0,p&&r?h(t):(r=i=void 0,s)}function y(){var t=Ce(),n=g(t);if(r=arguments,i=this,c=t,n){if(void 0===a)return d(c);if(f)return clearTimeout(a),a=setTimeout(m,e),h(c)}return void 0===a&&(a=setTimeout(m,e)),s}return e=Oe(e)||0,ve(n)&&(l=!!n.leading,o=(f="maxWait"in n)?Je(Oe(n.maxWait)||0,e):o,p="trailing"in n?!!n.trailing:p),y.cancel=function(){void 0!==a&&clearTimeout(a),u=0,r=c=i=a=void 0},y.flush=function(){return void 0===a?s:v(Ce())},y}));class tn{constructor(t){this.props=t,this.subscriptions=new d,this.loadNavTree=async()=>{if(!this.editor)return;if(!this.getClient)return;const t=this.editor.getPath();if(void 0!==t)try{const e=await this.getClient(t),n=(await e.execute("navtree",{file:t})).body;n&&(this.setNavTree(n),await ft.update(this))}catch(e){console.error(e,t)}},this.selectAtCursorLine=({newBufferPosition:t})=>{var e,n;const r=this.firstNode();if(!r)return;const i=t.row,o=null!==(e=null===(n=be(i,i,r))||void 0===n?void 0:n.querySelector(".header"))&&void 0!==e?e:void 0,s=this.getSelectedNode();o!==s&&(s&&s.classList.remove("selected"),o&&o.classList.add("selected"))},this.subscribeToEditor=async t=>{if(this.editorScrolling&&this.editorScrolling.dispose(),this.editorChanging&&this.editorChanging.dispose(),!t||!fe(t))return this.update({navTree:null});this.editor=t,await this.loadNavTree();const e=function(t){if(t.largeFileMode)return 2e4;const e=t.getLineCount();if(e>=me)return e;{const n=t.getBuffer();for(let t=0,r=e;tge)return ge;return 0}}(t);this.editorScrolling=t.onDidChangeCursorPosition(this.selectAtCursorLine),this.editorChanging=t.onDidStopChanging(0===e?this.loadNavTree:Xe(this.loadNavTree,Math.max(e/5,300)))},Se(t.navTree),ft.initialize(this),this.subscriptions.add(atom.workspace.observeActiveTextEditor(this.subscribeToEditor),atom.commands.add("atom-text-editor.typescript-editor",{"typescript:reveal-in-semantic-view":{description:"Reveal the symbol under the text cursor in semantic view",didDispatch:t=>{const e=t.currentTarget.getModel();this.selectAtCursorLine({newBufferPosition:e.getCursorBufferPosition()})}}}))}async update(t){void 0!==t.navTree&&this.setNavTree(t.navTree),this.props={...this.props,...t},await ft.update(this)}async destroy(){this.editorScrolling&&this.editorScrolling.dispose(),this.editorChanging&&this.editorChanging.dispose(),this.editorScrolling=void 0,this.editorChanging=void 0,this.subscriptions.dispose(),await ft.destroy(this)}async setGetClient(t){this.getClient=t,await this.loadNavTree()}getSelectedNode(){var t;return null!==(t=this.element.querySelector(".header.selected"))&&void 0!==t?t:void 0}clearSelection(){const t=this.element.querySelectorAll(".header.selected");for(let e=0;e0?t.spans[0].start.offset-1:0}(t);this.editor.setCursorBufferPosition([e,n])}getCursorLine(){return this.editor?this.editor.getLastCursor().getBufferRow():void 0}setNavTree(t){if(Se(t),Qt.isEqual(t,this.props.navTree))return;xe(t,this.props.navTree),this.props.navTree=t;const e=this.firstNode();if(e){const t=this.getCursorLine();void 0!==t&&this.markSelection(be(t,t,e))}}scrollTo(t){const e=t;"function"==typeof e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded():e.scrollIntoView()}}class en{constructor(t){this.comp=new tn({navTree:t.navTree})}static create(t){return en.instance||(en.instance=new en(t)),en.instance}get element(){return this.comp.element}async setGetClient(t){await this.comp.setGetClient(t),await this.comp.update({})}getTitle(){return"TypeScript"}getURI(){return"atom-typescript://semantic-view"}async destroy(){en.instance=null,await this.comp.destroy()}getDefaultLocation(){return"right"}getAllowedLocations(){return["left","right"]}serialize(){return{deserializer:"atomts-semantic-view/SemanticView",data:{navTree:this.comp.props.navTree}}}}en.instance=null;var nn,rn=u,on=a,sn=s;nn=function(t,e){return an(t,e)};var an=function(t,e){return t?cn(t,e):new un(e)};nn.createStream=an;function cn(t,e){if(!t)throw new Error("expected readStream");if(!t.readable)throw new Error("readStream must be readable");var n=new un(e);return t.pipe(n),n}function un(t){rn.Transform.call(this,t),t=t||{},this._readableState.objectMode=!0,this._lineBuffer=[],this._keepEmptyLines=t.keepEmptyLines||!1,this._lastChunkEndedWithCR=!1;var e=this;this.on("pipe",(function(t){e.encoding||t instanceof rn.Readable&&(e.encoding=t._readableState.encoding)}))}nn.createLineStream=function(t){return console.log("WARNING: byline#createLineStream is deprecated and will be removed soon"),cn(t)},nn.LineStream=un,on.inherits(un,rn.Transform),un.prototype._transform=function(t,e,n){e=e||"utf8",Buffer.isBuffer(t)&&("buffer"==e?(t=t.toString(),e="utf8"):t=t.toString(e)),this._chunkEncoding=e;var r=t.split(/\r\n|[\n\v\f\r\x85\u2028\u2029]/g);this._lastChunkEndedWithCR&&"\n"==t[0]&&r.shift(),this._lineBuffer.length>0&&(this._lineBuffer[this._lineBuffer.length-1]+=r[0],r.shift()),this._lastChunkEndedWithCR="\r"==t[t.length-1],this._lineBuffer=this._lineBuffer.concat(r),this._pushBuffer(e,1,n)},un.prototype._pushBuffer=function(t,e,n){for(;this._lineBuffer.length>e;){var r=this._lineBuffer.shift();if((this._keepEmptyLines||r.length>0)&&!this.push(this._reencode(r,t))){var i=this;return void sn.setImmediate((function(){i._pushBuffer(t,e,n)}))}}n()},un.prototype._flush=function(t){this._pushBuffer(this._chunkEncoding,0,t)},un.prototype._reencode=function(t,e){return this.encoding&&this.encoding!=e?new Buffer(t,e).toString(this.encoding):this.encoding?t:new Buffer(t,e)};class ln{constructor(t){this.reportBusyWhile=t,this.callbacks=new Map,this.interval=0}async add(t,e){try{const n=new Promise(((n,r)=>{this.callbacks.set(t,{command:e,resolve:n,reject:r,started:Date.now()})}));return 0===this.interval&&(this.interval=window.setInterval((()=>{process.activateUvLoop()}),100)),await this.reportBusyWhile(e,(()=>n))}finally{this.callbacks.delete(t),0!==this.interval&&0===this.callbacks.size&&(clearInterval(this.interval),this.interval=0)}}rejectAll(t){for(const{reject:e}of this.callbacks.values())e(t);this.callbacks.clear()}resolve(t){const e=this.callbacks.get(t.request_seq);e?(window.atom_typescript_debug&&console.log("received response for",t.command,"in",Date.now()-e.started,"ms","with data",t.body),t.success?e.resolve(t):e.reject(new Error(t.message))):console.warn("unexpected response:",t)}resolveMS(t){const e=this.callbacks.get(t.request_seq);e?(window.atom_typescript_debug&&console.log(`received requestCompleted event for multistep command ${e.command} in ${Date.now()-e.started} ms`),e.resolve(void 0)):console.warn("unexpected requestCompleted event:",t)}error(t,e){const n=this.callbacks.get(t);n?n.reject(e):console.error(e)}}const fn=new Set(Object.keys({compileOnSaveAffectedFileList:!0,compileOnSaveEmitFile:!0,completionEntryDetails:!0,completions:!0,completionInfo:!0,configure:!0,definition:!0,format:!0,getCodeFixes:!0,getSupportedCodeFixes:!0,documentHighlights:!0,projectInfo:!0,quickinfo:!0,references:!0,reload:!0,rename:!0,navtree:!0,navto:!0,getApplicableRefactors:!0,getEditsForRefactor:!0,organizeImports:!0,signatureHelp:!0,getEditsForFileRename:!0,applyCodeActionCommand:!0})),pn=new Set(Object.keys({geterr:!0,geterrForProject:!0})),hn=new Set(Object.keys({configFileDiag:!0,semanticDiag:!0,suggestionDiag:!0,syntaxDiag:!0}));class dn{constructor(t,e,n){this.tsServerPath=t,this.version=e,this.reportBusyWhile=n,this.emitter=new g,this.seq=0,this.lastStderrOutput="",this.on=this.emitter.on.bind(this.emitter),this.exitHandler=(t,e=!0)=>{if(this.callbacks.rejectAll(t),e&&console.error("tsserver: ",t),this.server=void 0,this.emitter.emit("terminated"),e){let e=t.message;this.lastStderrOutput&&(e=`Last output from tsserver:\n${this.lastStderrOutput}\n\n${e}`),atom.notifications.addError("TypeScript server quit unexpectedly",{detail:e,stack:t.stack,dismissable:!0})}},this.onMessage=t=>{"response"===t.type?this.callbacks.resolve(t):this.onEvent(t)};const[r,i]=e.split(".").slice(0,2).map((t=>parseInt(t,10)));this.multistepSupported=r>2||2===r&&i>=2,this.callbacks=new ln(this.reportBusyWhile),this.server=this.startServer()}async execute(t,...e){this.server||(this.server=this.startServer(),this.emitter.emit("restarted"));const n={seq:this.seq++,command:t,arguments:e[0]};window.atom_typescript_debug&&console.log("sending request",n);let r=void 0;(function(t){return fn.has(t)}(t)||this.multistepSupported&&function(t){return pn.has(t)}(t))&&(r=this.callbacks.add(n.seq,t));try{if(!this.server.stdin)throw new Error("Server stdin is missing");this.server.stdin.write(JSON.stringify(n)+"\n")}catch(t){this.callbacks.error(n.seq,t)}return r}async restartServer(){if(this.server){const t=this.server,e=setTimeout((()=>t.kill()),1e4);await Promise.all([this.execute("exit"),new Promise((t=>{const e=this.emitter.once("terminated",(()=>{e.dispose(),t()}))}))]),clearTimeout(e)}this.server||(this.server=this.startServer(),this.emitter.emit("restarted"))}startServer(){window.atom_typescript_debug&&console.log("starting",this.tsServerPath);const t=function(t){const e=atom.config.get("atom-typescript").locale,n=e?["--locale",e]:[];return new m({command:t,args:n}).process}(this.tsServerPath);if(!t)throw new Error("ChildProcess failed to start");const e=this.exitHandler;if(t.once("error",e),t.once("exit",((t,n)=>{0===t?e(new Error("Server stopped normally"),!1):null!==t?e(new Error("exited with code: "+t)):null!==n&&e(new Error("terminated on signal: "+n))})),!t.stdout)throw new Error("ChildProcess stdout missing");if(!t.stderr)throw new Error("ChildProcess stderr missing");var n;return(n=t.stdout,n.pipe(mn()).pipe(new vn)).on("data",this.onMessage),t.stderr.on("data",(t=>{console.warn("tsserver stderr:",this.lastStderrOutput=t.toString())})),t}onEvent(t){var e;window.atom_typescript_debug&&console.log("received event",t),t.body&&(e=t.event,hn.has(e)?this.emitter.emit(t.event,t.body):"requestCompleted"===t.event&&this.callbacks.resolveMS(t.body))}}var gn,mn=C(nn);class vn extends l{constructor(){super({objectMode:!0})}_transform(t,e,n){const r=t.toString();try{r.startsWith("{")?this.push(JSON.parse(r)):r.startsWith("Content-Length:")||console.warn(r)}catch(t){console.error("client: failed to parse: ",r)}finally{n(void 0)}}}function yn(t,e){void 0===e&&(e=!1);var n=t.length,r=0,i="",o=0,s=16,a=0,c=0,u=0,l=0,f=0;function p(e,n){for(var i=0,o=0;i=48&&s<=57)o=16*o+s-48;else if(s>=65&&s<=70)o=16*o+s-65+10;else{if(!(s>=97&&s<=102))break;o=16*o+s-97+10}r++,i++}return i=n)return o=n,s=17;var e=t.charCodeAt(r);if(wn(e)){do{r++,i+=String.fromCharCode(e),e=t.charCodeAt(r)}while(wn(e));return s=15}if(bn(e))return r++,i+=String.fromCharCode(e),13===e&&10===t.charCodeAt(r)&&(r++,i+="\n"),a++,u=r,s=14;switch(e){case 123:return r++,s=1;case 125:return r++,s=2;case 91:return r++,s=3;case 93:return r++,s=4;case 58:return r++,s=6;case 44:return r++,s=5;case 34:return r++,i=function(){for(var e="",i=r;;){if(r>=n){e+=t.substring(i,r),f=2;break}var o=t.charCodeAt(r);if(34===o){e+=t.substring(i,r),r++;break}if(92!==o){if(o>=0&&o<=31){if(bn(o)){e+=t.substring(i,r),f=2;break}f=6}r++}else{if(e+=t.substring(i,r),++r>=n){f=2;break}switch(t.charCodeAt(r++)){case 34:e+='"';break;case 92:e+="\\";break;case 47:e+="/";break;case 98:e+="\b";break;case 102:e+="\f";break;case 110:e+="\n";break;case 114:e+="\r";break;case 116:e+="\t";break;case 117:var s=p(4,!0);s>=0?e+=String.fromCharCode(s):f=4;break;default:f=5}i=r}}return e}(),s=10;case 47:var h=r-1;if(47===t.charCodeAt(r+1)){for(r+=2;r=12&&t<=15);return t}:h,getToken:function(){return s},getTokenValue:function(){return i},getTokenOffset:function(){return o},getTokenLength:function(){return r-o},getTokenStartLine:function(){return c},getTokenStartCharacter:function(){return o-l},getTokenError:function(){return f}}}function wn(t){return 32===t||9===t||11===t||12===t||160===t||5760===t||t>=8192&&t<=8203||8239===t||8287===t||12288===t||65279===t}function bn(t){return 10===t||13===t||8232===t||8233===t}function _n(t){return t>=48&&t<=57}(gn||(gn={})).DEFAULT={allowTrailingComma:!1};var xn,Sn,kn=function(t,e,n){void 0===e&&(e=[]),void 0===n&&(n=gn.DEFAULT);var r=null,i=[],o=[];function s(t){Array.isArray(i)?i.push(t):null!==r&&(i[r]=t)}return function(t,e,n){void 0===n&&(n=gn.DEFAULT);var r=yn(t,!1);function i(t){return t?function(){return t(r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter())}:function(){return!0}}function o(t){return t?function(e){return t(e,r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter())}:function(){return!0}}var s=i(e.onObjectBegin),a=o(e.onObjectProperty),c=i(e.onObjectEnd),u=i(e.onArrayBegin),l=i(e.onArrayEnd),f=o(e.onLiteralValue),p=o(e.onSeparator),h=i(e.onComment),d=o(e.onError),g=n&&n.disallowComments,m=n&&n.allowTrailingComma;function v(){for(;;){var t=r.scan();switch(r.getTokenError()){case 4:y(14);break;case 5:y(15);break;case 3:y(13);break;case 1:g||y(11);break;case 2:y(12);break;case 6:y(16)}switch(t){case 12:case 13:g?y(10):h();break;case 16:y(1);break;case 15:case 14:break;default:return t}}}function y(t,e,n){if(void 0===e&&(e=[]),void 0===n&&(n=[]),d(t),e.length+n.length>0)for(var i=r.getToken();17!==i;){if(-1!==e.indexOf(i)){v();break}if(-1!==n.indexOf(i))break;i=v()}}function w(t){var e=r.getTokenValue();return t?f(e):a(e),v(),!0}function b(){switch(r.getToken()){case 11:var t=r.getTokenValue(),e=Number(t);isNaN(e)&&(y(2),e=0),f(e);break;case 7:f(null);break;case 8:f(!0);break;case 9:f(!1);break;default:return!1}return v(),!0}function _(){return 10!==r.getToken()?(y(3,[],[2,5]),!1):(w(!1),6===r.getToken()?(p(":"),v(),k()||y(4,[],[2,5])):y(5,[],[2,5]),!0)}function x(){s(),v();for(var t=!1;2!==r.getToken()&&17!==r.getToken();){if(5===r.getToken()){if(t||y(4,[],[]),p(","),v(),2===r.getToken()&&m)break}else t&&y(6,[],[]);_()||y(4,[],[2,5]),t=!0}return c(),2!==r.getToken()?y(7,[2],[]):v(),!0}function S(){u(),v();for(var t=!1;4!==r.getToken()&&17!==r.getToken();){if(5===r.getToken()){if(t||y(4,[],[]),p(","),v(),4===r.getToken()&&m)break}else t&&y(6,[],[]);k()||y(4,[],[4,5]),t=!0}return l(),4!==r.getToken()?y(8,[4],[]):v(),!0}function k(){switch(r.getToken()){case 3:return S();case 1:return x();case 10:return w(!0);default:return b()}}if(v(),17===r.getToken())return!!n.allowEmptyContent||(y(4,[],[]),!1);if(!k())return y(4,[],[]),!1;17!==r.getToken()&&y(9,[],[])}(t,{onObjectBegin:function(){var t={};s(t),o.push(i),i=t,r=null},onObjectProperty:function(t){r=t},onObjectEnd:function(){i=o.pop()},onArrayBegin:function(){var t=[];s(t),o.push(i),i=t,r=null},onArrayEnd:function(){i=o.pop()},onLiteralValue:s,onError:function(t,n,r){e.push({error:t,offset:n,length:r})}},n),i[0]},En=x,Cn=w;Sn=function(){var t=Error.prepareStackTrace;Error.prepareStackTrace=function(t,e){return e};var e=(new Error).stack;return Error.prepareStackTrace=t,e[2].getFileName()};var Tn,An,Pn,On,In,jn,Nn,Dn,Fn,Ln,Mn=w,Rn=!1;function Bn(){An={},Pn="win32"===process.platform,On=/^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/,In=/^([\s\S]*?)((?:\.{1,2}|[^\\\/]+?|)(\.[^.\/\\]*|))(?:[\\\/]*)$/,(jn={}).parse=function(t){if("string"!=typeof t)throw new TypeError("Parameter 'pathString' must be a string, not "+typeof t);var e,n,r,i,o,s=(e=t,n=On.exec(e),r=(n[1]||"")+(n[2]||""),i=n[3]||"",o=In.exec(i),[r,o[1],o[2],o[3]]);if(!s||4!==s.length)throw new TypeError("Invalid path '"+t+"'");return{root:s[0],dir:s[0]+s[1].slice(0,-1),base:s[2],ext:s[3],name:s[2].slice(0,s[2].length-s[3].length)}},Nn=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,(Dn={}).parse=function(t){if("string"!=typeof t)throw new TypeError("Parameter 'pathString' must be a string, not "+typeof t);var e,n=(e=t,Nn.exec(e).slice(1));if(!n||4!==n.length)throw new TypeError("Invalid path '"+t+"'");return n[1]=n[1]||"",n[2]=n[2]||"",n[3]=n[3]||"",{root:n[0],dir:n[0]+n[1].slice(0,-1),base:n[2],ext:n[3],name:n[2].slice(0,n[2].length-n[3].length)}},An=Pn?jn.parse:Dn.parse,Fn=Dn.parse,An.posix=Fn,Ln=jn.parse,An.win32=Ln}var zn=Mn.parse||(Rn||(Rn=!0,Bn()),An),qn=function(t,e){var n="/";/^([A-Za-z]:)/.test(t)?n="":/^\\\\/.test(t)&&(n="\\\\");for(var r=[t],i=zn(t);i.dir!==r[r.length-1];)r.push(i.dir),i=zn(i.dir);return r.reduce((function(t,r){return t.concat(e.map((function(t){return Mn.resolve(n,r,t)})))}),[])};Tn=function(t,e,n){var r=e&&e.moduleDirectory?[].concat(e.moduleDirectory):["node_modules"];if(e&&"function"==typeof e.paths)return e.paths(n,t,(function(){return qn(t,r)}),e);var i=qn(t,r);return e&&e.paths?i.concat(e.paths):i};var Hn;Hn=function(t,e){return e||{}};var Un,$n,Vn={},Wn={},Gn=Array.prototype.slice,Kn=Object.prototype.toString;function Qn(t,e){for(var n=t.split("."),r=e.split(" "),i=r.length>1?r[0]:"=",o=(r.length>1?r[1]:r[0]).split("."),s=0;s<3;++s){var a=parseInt(n[s]||0,10),c=parseInt(o[s]||0,10);if(a!==c)return"<"===i?a="===i&&a>=c}return">="===i}function Zn(t,e){var n=e.split(/ ?&& ?/);if(0===n.length)return!1;for(var r=0;r= 15","async_hooks":">= 8","buffer_ieee754":"< 0.9.7","buffer":true,"child_process":true,"cluster":true,"console":true,"constants":true,"crypto":true,"_debug_agent":">= 1 && < 8","_debugger":"< 8","dgram":true,"diagnostics_channel":">= 15.1","dns":true,"dns/promises":">= 15","domain":">= 0.7.12","events":true,"freelist":"< 6","fs":true,"fs/promises":[">= 10 && < 10.1",">= 14"],"_http_agent":">= 0.11.1","_http_client":">= 0.11.1","_http_common":">= 0.11.1","_http_incoming":">= 0.11.1","_http_outgoing":">= 0.11.1","_http_server":">= 0.11.1","http":true,"http2":">= 8.8","https":true,"inspector":">= 8.0.0","_linklist":"< 8","module":true,"net":true,"node-inspect/lib/_inspect":">= 7.6.0 && < 12","node-inspect/lib/internal/inspect_client":">= 7.6.0 && < 12","node-inspect/lib/internal/inspect_repl":">= 7.6.0 && < 12","os":true,"path":true,"path/posix":">= 15.3","path/win32":">= 15.3","perf_hooks":">= 8.5","process":">= 1","punycode":true,"querystring":true,"readline":true,"repl":true,"smalloc":">= 0.11.5 && < 3","_stream_duplex":">= 0.9.4","_stream_transform":">= 0.9.4","_stream_wrap":">= 1.4.1","_stream_passthrough":">= 0.9.4","_stream_readable":">= 0.9.4","_stream_writable":">= 0.9.4","stream":true,"stream/promises":">= 15","string_decoder":true,"sys":[">= 0.6 && < 0.7",">= 0.8"],"timers":true,"timers/promises":">= 15","_tls_common":">= 0.11.13","_tls_legacy":">= 0.11.3 && < 10","_tls_wrap":">= 0.11.3","tls":true,"trace_events":">= 10","tty":true,"url":true,"util":true,"util/types":">= 15.3","v8/tools/arguments":">= 10 && < 12","v8/tools/codemap":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8/tools/consarray":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8/tools/csvparser":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8/tools/logreader":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8/tools/profile_view":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8/tools/splaytree":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8":">= 1","vm":true,"wasi":">= 13.4 && < 13.5","worker_threads":">= 11.7","zlib":true}'),Un=function(t,e){return Vn(Jn,t)&&function(t,e){if("boolean"==typeof e)return e;var n=void 0===t?process.versions&&process.versions.node&&process.versions.node:t;if("string"!=typeof n)throw new TypeError(void 0===t?"Unable to determine current node version":"If provided, a valid node version is required");if(e&&"object"==typeof e){for(var r=0;r1?e[0]:"=",r=(e.length>1?e[1]:e[0]).split("."),i=0;i<3;++i){var o=parseInt(ir[i]||0,10),s=parseInt(r[i]||0,10);if(o!==s)return"<"===n?o="===n&&o>=s}return">="===n}function sr(t){var e=t.split(/ ?&& ?/);if(0===e.length)return!1;for(var n=0;n= 15","async_hooks":">= 8","buffer_ieee754":"< 0.9.7","buffer":true,"child_process":true,"cluster":true,"console":true,"constants":true,"crypto":true,"_debug_agent":">= 1 && < 8","_debugger":"< 8","dgram":true,"diagnostics_channel":">= 15.1","dns":true,"dns/promises":">= 15","domain":">= 0.7.12","events":true,"freelist":"< 6","fs":true,"fs/promises":[">= 10 && < 10.1",">= 14"],"_http_agent":">= 0.11.1","_http_client":">= 0.11.1","_http_common":">= 0.11.1","_http_incoming":">= 0.11.1","_http_outgoing":">= 0.11.1","_http_server":">= 0.11.1","http":true,"http2":">= 8.8","https":true,"inspector":">= 8.0.0","_linklist":"< 8","module":true,"net":true,"node-inspect/lib/_inspect":">= 7.6.0 && < 12","node-inspect/lib/internal/inspect_client":">= 7.6.0 && < 12","node-inspect/lib/internal/inspect_repl":">= 7.6.0 && < 12","os":true,"path":true,"path/posix":">= 15.3","path/win32":">= 15.3","perf_hooks":">= 8.5","process":">= 1","punycode":true,"querystring":true,"readline":true,"repl":true,"smalloc":">= 0.11.5 && < 3","_stream_duplex":">= 0.9.4","_stream_transform":">= 0.9.4","_stream_wrap":">= 1.4.1","_stream_passthrough":">= 0.9.4","_stream_readable":">= 0.9.4","_stream_writable":">= 0.9.4","stream":true,"stream/promises":">= 15","string_decoder":true,"sys":[">= 0.6 && < 0.7",">= 0.8"],"timers":true,"timers/promises":">= 15","_tls_common":">= 0.11.13","_tls_legacy":">= 0.11.3 && < 10","_tls_wrap":">= 0.11.3","tls":true,"trace_events":">= 10","tty":true,"url":true,"util":true,"util/types":">= 15.3","v8/tools/arguments":">= 10 && < 12","v8/tools/codemap":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8/tools/consarray":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8/tools/csvparser":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8/tools/logreader":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8/tools/profile_view":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8/tools/splaytree":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8":">= 1","vm":true,"wasi":">= 13.4 && < 13.5","worker_threads":">= 11.7","zlib":true}');var ur={};for(var lr in cr)Object.prototype.hasOwnProperty.call(cr,lr)&&(ur[lr]=ar(cr[lr]));xn.core=ur;xn.isCore=function(t){return Un(t)};var fr=x,pr=w,hr=fr.realpathSync&&"function"==typeof fr.realpathSync.native?fr.realpathSync.native:fr.realpathSync,dr=function(t){try{var e=fr.statSync(t)}catch(t){if(t&&("ENOENT"===t.code||"ENOTDIR"===t.code))return!1;throw t}return e.isFile()||e.isFIFO()},gr=function(t){try{var e=fr.statSync(t)}catch(t){if(t&&("ENOENT"===t.code||"ENOTDIR"===t.code))return!1;throw t}return e.isDirectory()},mr=function(t){try{return hr(t)}catch(t){if("ENOENT"!==t.code)throw t}return t},vr=function(t,e,n){return n&&!1===n.preserveSymlinks?t(e):e},yr=function(t,e){var n=t(e);try{return JSON.parse(n)}catch(t){}};async function wr(t,e){const{NODE_PATH:n}=process.env,r=e+".js",i=await async function(t,e){return new Promise(((n,r)=>br(t,e,((t,e)=>{t?r(t):void 0===e?r(new Error("Module path is undefined")):n(e)}))))}("typescript/lib/"+r,{basedir:w.dirname(t),paths:void 0!==n?n.split(w.delimiter):void 0}).catch((async()=>{const e=await async function(t){const e=await async function(t){let e=t,n=w.dirname(e);for(;e!==n;){const t=await xr(e,[[".atom-typescript.json"],[".atom","atom-typescript.json"],[".vscode","settings.json"]]);if(void 0!==t)return{basedir:e,configFile:t};e=n,n=w.dirname(e)}}(t);if(e)try{const t=kn(await async function(t){return new Promise(((e,n)=>x.readFile(t,((t,r)=>{t?n(t):e(r.toString("utf-8"))}))))}(e.configFile));let r;if("object"==typeof(n=t)&&null!==n&&"string"==typeof n.tsdkPath)r=t.tsdkPath;else{if(!function(t){return"object"==typeof t&&null!==t&&"string"==typeof t["typescript.tsdk"]}(t))return;r=w.dirname(t["typescript.tsdk"])}return w.isAbsolute(r)?r:w.join(e.basedir,r)}catch(t){console.warn(t)}var n}(w.dirname(t));if(void 0!==e){const t=w.join(e,"lib",r);if(await _r(t))return t}const n=atom.config.get("atom-typescript.tsdkPath");if(n){const t=w.join(n,"lib",r);if(await _r(t))return t}return require.resolve("typescript/lib/"+r)})),o=w.resolve(i,"../../package.json");return{version:require(o).version,pathToBin:i}}xn.sync=function(t,e){if("string"!=typeof t)throw new TypeError("Path must be a string.");var n=Hn(0,e),r=n.isFile||dr,i=n.readFileSync||fr.readFileSync,o=n.isDirectory||gr,s=n.realpathSync||mr,a=n.readPackageSync||yr;if(n.readFileSync&&n.readPackageSync)throw new TypeError("`readFileSync` and `readPackageSync` are mutually exclusive.");var c=n.packageIterator,u=n.extensions||[".js"],l=!1!==n.includeCoreModules,f=n.basedir||pr.dirname(Sn()),p=n.filename||f;n.paths=n.paths||[];var h=vr(s,pr.resolve(f),n);if(/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[/\\])/.test(t)){var d=pr.resolve(h,t);"."!==t&&".."!==t&&"/"!==t.slice(-1)||(d+="/");var g=y(d)||b(d);if(g)return vr(s,g,n)}else{if(l&&Un(t))return t;var m=function(t,e){for(var r=function(){return function(t,e,n){for(var r=Tn(e,n,t),i=0;ix.access(t,x.constants.F_OK,(t=>{e(!t)}))))}async function xr(t,e){for(const n of e){const e=w.join(t,...n);if(await _r(e))return e}}class Sr{constructor(t){this.reportBusyWhile=t,this.clients=new Map,this.memoizedClients=new Map,this.emitter=new g,this.subscriptions=new d,this.tsserverInstancePerTsconfig=atom.config.get("atom-typescript").tsserverInstancePerTsconfig,this.on=this.emitter.on.bind(this.emitter),this.diagnosticHandler=(t,e)=>n=>{const r=(i=n)&&i.triggerFile&&i.configFile?n.configFile:n.file;var i;r&&this.emitter.emit("diagnostics",{type:e,serverPath:t,filePath:r,diagnostics:n.diagnostics})}}async restartAllServers(){await this.reportBusyWhile("Restarting servers",(()=>Promise.all(Array.from(this.getAllClients()).map((t=>t.restartServer())))))}async get(t){const e=this.memoizedClients.get(t);if(e)return e;const n=this._get(t);this.memoizedClients.set(t,n);try{return await n}catch(e){throw this.memoizedClients.delete(t),e}}dispose(){this.emitter.dispose(),this.subscriptions.dispose(),this.memoizedClients.clear(),this.clients.clear()}async _get(t){const{pathToBin:e,version:n}=await wr(t,"tsserver"),r=this.tsserverInstancePerTsconfig?f.findConfigFile(t,(t=>f.sys.fileExists(t))):void 0;let i=this.clients.get(e);i||(i=new Map,this.clients.set(e,i));const o=i.get(r);if(o)return o;const s=new dn(e,n,this.reportBusyWhile);return i.set(r,s),this.subscriptions.add(s.on("configFileDiag",this.diagnosticHandler(e,"configFileDiag")),s.on("semanticDiag",this.diagnosticHandler(e,"semanticDiag")),s.on("syntaxDiag",this.diagnosticHandler(e,"syntaxDiag")),s.on("suggestionDiag",this.diagnosticHandler(e,"suggestionDiag"))),s}*getAllClients(){for(const t of this.clients.values())yield*t.values()}}function kr(t){return{grammarScopes:le(),priority:100,async highlight(e,n){if(!fe(e))return;const r=he(e,n);if(!r)return;const i=await t(r.file),o=await i.execute("documentHighlights",{...r,filesToSearch:[r.file]});return o.body?Array.from(function*(t,e){for(const n of e)n.file===t&&(yield*n.highlightSpans.map(Xt))}(r.file,o.body)):void 0}}}async function Er(t,e,n){if(void 0===t)return null;const r=e.dom("div",{className:"atom-typescript-datatip-tooltip-kind"},t.kind,function(t,e){return void 0===e?null:t.dom("span",{className:"atom-typescript-datatip-tooltip-kind-modifiers"},e)}(t.kindModifiers)),i=t.tags?t.tags.map((t=>{const n="atom-typescript-datatip-tooltip-doc-tag atom-typescript-datatip-tooltip-doc-tag-name-"+t.name;return e.dom("div",{className:n},e.dom("span",{className:"atom-typescript-datatip-tooltip-doc-tag-name"},t.name),function(t,e){if(void 0===e)return null;const[,n,r]=/^\s*(\S*)([^]*)$/.exec(e);return t.dom("span",{className:"atom-typescript-datatip-tooltip-doc-tag-text"},t.dom("span",{className:"atom-typescript-datatip-tooltip-doc-tag-text-first-word"},n),r)}(e,t.text))})):null,o=e.dom("div",{className:"atom-typescript-datatip-tooltip-doc"},t.documentation,i),s=t.displayString.replace(/^\(.+?\)\s+/,"");return[await n(s),r,o]}const Cr=Symbol.for("react.element"),Tr={dom:(t,e,...n)=>n.length>0?{$$typeof:Cr,type:t,ref:null,props:{...e,children:n}}:{$$typeof:Cr,type:t,ref:null,props:{...e}}};class Ar{constructor(t){this.getClient=t,this.providerName="TypeScript type tooltips",this.priority=100,this.grammarScopes=le()}async datatip(t,e){try{const n=t.getPath();if(void 0===n)return;const r=await this.getClient(n),i=(await r.execute("quickinfo",{file:n,line:e.row+1,offset:e.column+1})).body,o=await Er(i,Tr,Pr);return{component:()=>Tr.dom("div",{className:"atom-typescript-datatip-tooltip"},o),range:h.Range.fromObject([Yt(i.start),Yt(i.end)])}}catch(t){return}}}async function Pr(t){const e=atom.config.get("editor.fontFamily"),n=await de(t.replace(/\r?\n$/,""),"source.ts");return Tr.dom("div",{style:{fontFamily:e},className:"atom-typescript-datatip-tooltip-code",dangerouslySetInnerHTML:{__html:n.join("\n")}})}function Or(t){const e=Xt(t);return{path:t.file,position:e.start,range:e,language:"TypeScript"}}function Ir(t){return{uri:t.file,range:te(t.start,t.end),name:void 0}}class jr{constructor(t){this.props=t,ft.initialize(this)}async update(t){return this.props={...this.props,...t},ft.update(this)}render(){const t={fontFamily:atom.config.get("editor.fontFamily")};return ft.dom("div",{className:"editor editor-colors",style:t,innerHTML:this.props.highlightedText})}}var Nr,Dr,Fr,Lr={},Mr=!1;function Rr(){return Mr||(Mr=!0,function(){var t,e;t=w.sep,Nr=function(e,n,r){var i,o,s,a,c;for(o=e.length-1;e[o]===t;)o--;for(c=0,s=o,i=null;o>=0;)e[o]===t?(c++,null==i&&(i=e.substring(o+1,s+1))):0===o&&(s0&&f.push({candidate:a,score:l}));f.sort(n),r=f.map(t)}return null!=u&&(r=r.slice(0,u)),r}}.call(Br={})),Br}var Hr,Ur,$r,Vr=!1;function Wr(){return Vr||(Vr=!0,function(){var t;t=w.sep,Hr=function(e,n){var r,i,o;for(i=e.length-1;e[i]===t;)i--;for(o=i,r=null;i>=0;)e[i]===t?null==r&&(r=e.substring(i+1,o+1)):0===i&&(or;n<=r?e++:e--)p.push(e);return p}.apply(this);for(u=e.length,l=t.length,i=0,o=0,a=[];ie;0<=e?t++:t--)l.push(t);return l}.apply(this);if(c=-1!==i.indexOf(t),i=i.replace(e,""),a=r.match(n,i),!c)for(o=r.basenameMatch(n,i),a=a.concat(o).sort((function(t,e){return t-e})),u=null,s=0;sft.dom("span",{className:t.type},t.text))))}match(t){return t.query?function(t,e){let n=0,r=[];const i=[],o=Lr.match(t,e);let s;for(s of o){if(s<0)continue;const e=t.substring(n,s);e&&(r.length>0&&i.push({text:r.join(""),type:"character-match"}),r=[],i.push({text:e})),r.push(t[s]),n=s+1}r.length>0&&i.push({text:r.join(""),type:"character-match"});return i.push({text:t.substring(n)}),i}(t.label,t.query):[{text:t.label}]}}var Kr={},Qr=Kr&&Kr.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Kr,"__esModule",{value:!0});const Zr=h,Jr=Qr(ft),Yr=Jr.default.dom,Xr=Qr(Lr);Kr=class{constructor(t){this.props=t,this.props.hasOwnProperty("initialSelectionIndex")||(this.props.initialSelectionIndex=0),t.initiallyVisibleItemCount&&this.initializeVisibilityObserver(),this.computeItems(!1),this.disposables=new Zr.CompositeDisposable,Jr.default.initialize(this),this.element.classList.add("select-list"),this.disposables.add(this.refs.queryEditor.onDidChange(this.didChangeQuery.bind(this))),t.skipCommandsRegistration||this.disposables.add(this.registerAtomCommands());const e=this.refs.queryEditor.element,n=this.didLoseFocus.bind(this);e.addEventListener("blur",n),this.didClickItemsList=!1,this.element.addEventListener("mousedown",(t=>{t.target===this.refs.items&&(this.didClickItemsList=!0)})),this.disposables.add(new Zr.Disposable((()=>{e.removeEventListener("blur",n)})))}static setScheduler(t){Jr.default.setScheduler(t)}static getScheduler(){return Jr.default.getScheduler()}initializeVisibilityObserver(){this.visibilityObserver=new IntersectionObserver((t=>{for(const e of t)if(e.intersectionRatio>0){const t=e.target;this.visibilityObserver.unobserve(t);const n=Array.from(this.refs.items.children).indexOf(t);n>=0&&this.renderItemAtIndex(n)}}))}focus(){this.refs.queryEditor.element.focus()}didLoseFocus(t){this.didClickItemsList||this.element.contains(t.relatedTarget)?(this.didClickItemsList=!1,this.refs.queryEditor.element.focus()):document.hasFocus()&&this.cancelSelection()}reset(){this.refs.queryEditor.setText("")}destroy(){return this.disposables.dispose(),this.visibilityObserver&&this.visibilityObserver.disconnect(),Jr.default.destroy(this)}registerAtomCommands(){return atom.commands.add(this.element,{"core:move-up":t=>{this.selectPrevious(),t.stopPropagation()},"core:move-down":t=>{this.selectNext(),t.stopPropagation()},"core:move-to-top":t=>{this.selectFirst(),t.stopPropagation()},"core:move-to-bottom":t=>{this.selectLast(),t.stopPropagation()},"core:confirm":t=>{this.confirmSelection(),t.stopPropagation()},"core:cancel":t=>{this.cancelSelection(),t.stopPropagation()}})}update(t){let e=!1;return"items"in t&&(this.props.items=t.items,e=!0),"maxResults"in t&&(this.props.maxResults=t.maxResults,e=!0),"filter"in t&&(this.props.filter=t.filter,e=!0),"filterQuery"in t&&(this.props.filterQuery=t.filterQuery,e=!0),"query"in t&&(this.refs.queryEditor.setText(t.query),e=!1),"selectQuery"in t&&(t.selectQuery?this.refs.queryEditor.selectAll():this.refs.queryEditor.clearSelections()),"order"in t&&(this.props.order=t.order),"emptyMessage"in t&&(this.props.emptyMessage=t.emptyMessage),"errorMessage"in t&&(this.props.errorMessage=t.errorMessage),"infoMessage"in t&&(this.props.infoMessage=t.infoMessage),"loadingMessage"in t&&(this.props.loadingMessage=t.loadingMessage),"loadingBadge"in t&&(this.props.loadingBadge=t.loadingBadge),"itemsClassList"in t&&(this.props.itemsClassList=t.itemsClassList),"initialSelectionIndex"in t&&(this.props.initialSelectionIndex=t.initialSelectionIndex),e&&this.computeItems(),Jr.default.update(this)}render(){return Yr.div({},Yr(Zr.TextEditor,{ref:"queryEditor",mini:!0}),this.renderLoadingMessage(),this.renderInfoMessage(),this.renderErrorMessage(),this.renderItems())}renderItems(){if(this.items.length>0){const t=["list-group"].concat(this.props.itemsClassList||[]).join(" ");return this.visibilityObserver&&Jr.default.getScheduler().updateDocument((()=>{Array.from(this.refs.items.children).slice(this.props.initiallyVisibleItemCount).forEach((t=>{this.visibilityObserver.observe(t)}))})),this.listItems=this.items.map(((t,e)=>{const n=this.getSelectedItem()===t,r=!this.props.initiallyVisibleItemCount||ethis.didClickItem(e)})})),Yr.ol({className:t,ref:"items"},...this.listItems)}return!this.props.loadingMessage&&this.props.emptyMessage?Yr.span({ref:"emptyMessage"},this.props.emptyMessage):""}renderErrorMessage(){return this.props.errorMessage?Yr.span({ref:"errorMessage"},this.props.errorMessage):""}renderInfoMessage(){return this.props.infoMessage?Yr.span({ref:"infoMessage"},this.props.infoMessage):""}renderLoadingMessage(){return this.props.loadingMessage?Yr.div({className:"loading"},Yr.span({ref:"loadingMessage",className:"loading-message"},this.props.loadingMessage),this.props.loadingBadge?Yr.span({ref:"loadingBadge",className:"badge"},this.props.loadingBadge):""):""}getQuery(){return this.refs&&this.refs.queryEditor?this.refs.queryEditor.getText():""}getFilterQuery(){return this.props.filterQuery?this.props.filterQuery(this.getQuery()):this.getQuery()}didChangeQuery(){this.props.didChangeQuery&&this.props.didChangeQuery(this.getFilterQuery()),this.computeItems()}didClickItem(t){this.selectIndex(t),this.confirmSelection()}computeItems(t){this.listItems=null,this.visibilityObserver&&this.visibilityObserver.disconnect();const e=this.props.filter||this.fuzzyFilter.bind(this);this.items=e(this.props.items.slice(),this.getFilterQuery()),this.props.order&&this.items.sort(this.props.order),this.props.maxResults&&(this.items=this.items.slice(0,this.props.maxResults)),this.selectIndex(this.props.initialSelectionIndex,t)}fuzzyFilter(t,e){if(0===e.length)return t;{const n=[];for(const r of t){const t=this.props.filterKeyForItem?this.props.filterKeyForItem(r):r,i=Xr.default.score(t,e);i>0&&n.push({item:r,score:i})}return n.sort(((t,e)=>e.score-t.score)),n.map((t=>t.item))}}getSelectedItem(){return void 0===this.selectionIndex?null:this.items[this.selectionIndex]}renderItemAtIndex(t){const e=this.items[t],n=this.getSelectedItem()===e,r=this.listItems[t].component;this.visibilityObserver&&this.visibilityObserver.unobserve(r.element),r.update({element:this.props.elementForItem(e,{selected:n,index:t,visible:!0}),selected:n,onclick:()=>this.didClickItem(t)})}selectPrevious(){return void 0===this.selectionIndex?this.selectLast():this.selectIndex(this.selectionIndex-1)}selectNext(){return void 0===this.selectionIndex?this.selectFirst():this.selectIndex(this.selectionIndex+1)}selectFirst(){return this.selectIndex(0)}selectLast(){return this.selectIndex(this.items.length-1)}selectNone(){return this.selectIndex(void 0)}selectIndex(t,e=!0){t>=this.items.length?t=0:t<0&&(t=this.items.length-1);const n=this.selectionIndex;return this.selectionIndex=t,void 0!==t&&this.props.didChangeSelection&&this.props.didChangeSelection(this.getSelectedItem()),e?this.listItems?(n>=0&&this.renderItemAtIndex(n),t>=0&&this.renderItemAtIndex(t),Jr.default.getScheduler().getNextUpdatePromise()):Jr.default.update(this):Promise.resolve()}selectItem(t){const e=this.items.indexOf(t);if(-1===e)throw new Error("Cannot select the specified item because it does not exist.");return this.selectIndex(e)}confirmSelection(){const t=this.getSelectedItem();null!=t?this.props.didConfirmSelection&&this.props.didConfirmSelection(t):this.props.didConfirmEmptySelection&&this.props.didConfirmEmptySelection()}cancelSelection(){this.props.didCancelSelection&&this.props.didCancelSelection()}};class ti{constructor(t){this.mouseDown=this.mouseDown.bind(this),this.mouseUp=this.mouseUp.bind(this),this.didClick=this.didClick.bind(this),this.selected=t.selected,this.onclick=t.onclick,this.element=t.element,this.element.addEventListener("mousedown",this.mouseDown),this.element.addEventListener("mouseup",this.mouseUp),this.element.addEventListener("click",this.didClick),this.selected&&this.element.classList.add("selected"),this.domEventsDisposable=new Zr.Disposable((()=>{this.element.removeEventListener("mousedown",this.mouseDown),this.element.removeEventListener("mouseup",this.mouseUp),this.element.removeEventListener("click",this.didClick)})),Jr.default.getScheduler().updateDocument(this.scrollIntoViewIfNeeded.bind(this))}mouseDown(t){t.preventDefault()}mouseUp(t){t.preventDefault()}didClick(t){t.preventDefault(),this.onclick()}destroy(){this.element.remove(),this.domEventsDisposable.dispose()}update(t){this.element.removeEventListener("mousedown",this.mouseDown),this.element.removeEventListener("mouseup",this.mouseUp),this.element.removeEventListener("click",this.didClick),this.element.parentNode.replaceChild(t.element,this.element),this.element=t.element,this.element.addEventListener("mousedown",this.mouseDown),this.element.addEventListener("mouseup",this.mouseUp),this.element.addEventListener("click",this.didClick),t.selected&&this.element.classList.add("selected"),this.selected=t.selected,this.onclick=t.onclick,Jr.default.getScheduler().updateDocument(this.scrollIntoViewIfNeeded.bind(this))}scrollIntoViewIfNeeded(){this.selected&&this.element.scrollIntoViewIfNeeded(!1)}}var ei=C(Kr);async function ni({items:t,itemTemplate:e,itemFilterKey:n,didChangeSelection:r}){let i;const o=document.activeElement;try{return await new Promise((o=>{let s,a,c="Loading...",u=!1;const l=t=>{u||Kt(f.update(t))};"function"==typeof t&&(s=async e=>{const n=setTimeout((()=>l({loadingMessage:"Loading..."})),300),r=await t(e);clearTimeout(n),l({items:r,emptyMessage:"Nothing matches the search value",loadingMessage:void 0})},c=void 0,a="Please enter a search value");const f=new ei({items:[],elementForItem:t=>ft.render(e(t,f)),filterKeyForItem:t=>""+t[n],didChangeSelection:r,didCancelSelection:()=>{u=!0,o(void 0)},didConfirmSelection:t=>{u=!0,o(t)},loadingMessage:c,didChangeQuery:s,emptyMessage:a,itemsClassList:["atom-typescript"]});"function"!=typeof t&&Kt(Promise.resolve(t).then((t=>{l({items:t,loadingMessage:void 0})}))),i=atom.workspace.addModalPanel({item:f,visible:!0}),f.focus()}))}finally{i&&i.destroy(),o&&o.focus()}}const ri=[];function ii(t,e,n){ri.push({selector:t,command:e,desc:n})}async function oi(t,e,n){const r=Promise.all(t.body.refs.map((async t=>{var e;const n=(await new Promise(((e,n)=>x.readFile(t.file,((t,r)=>{t?n(t):e(r.toString("utf-8"))}))))).split(/\r?\n/g),r=void 0!==t.contextStart&&void 0!==t.contextEnd?n.slice(t.contextStart.line-1,t.contextEnd.line):n,i=(await de(r.join("\n"),"source.tsx"))[t.start.line-((null===(e=t.contextStart)||void 0===e?void 0:e.line)||1)];return{...t,hlText:i}}))),i=await ni({items:r,itemTemplate:(t,e)=>ft.dom("li",null,ft.dom(Gr,{label:atom.project.relativize(t.file),query:e.getFilterQuery()}),ft.dom("div",{className:"pull-right"},"line: ",t.start.line),ft.dom(jr,{highlightedText:t.hlText})),itemFilterKey:"file"});i&&await n(e,i)}async function si(t,e,n){if(t.body)if(t.body.length>1){const r=await ni({items:t.body,itemTemplate:(t,e)=>ft.dom("li",null,ft.dom(Gr,{label:t.file,query:e.getFilterQuery()}),ft.dom("div",{className:"pull-right"},"line: ",t.start.line)),itemFilterKey:"file"});r&&await n(e,r)}else t.body.length>0&&await n(e,t.body[0])}function ai(t){const e=t.spans.map(Xt).reduce(((t,e)=>e.union(t)));return{kind:ui[t.kind],plainText:t.text,startPosition:e.start,endPosition:e.end,landingPosition:t.nameSpan?Xt(t.nameSpan).start:void 0,children:t.childItems?t.childItems.map(ai).sort(ci):[]}}function ci(t,e){const n=t.landingPosition?t.landingPosition:t.startPosition,r=e.landingPosition?e.landingPosition:e.startPosition;return n.compare(r)}ii("atom-text-editor","typescript:find-references",(t=>({description:"Find where symbol under text cursor is referenced",async didDispatch(e){const n=he(e);if(!n)return;const r=await t.getClient(n.file),i=await r.execute("references",n);await oi(i,e,t.histGoForward)}}))),ii("atom-text-editor","typescript:go-to-declaration",(t=>({description:"Go to declaration of symbol under text cursor",async didDispatch(e){const n=he(e);if(!n)return;const r=await t.getClient(n.file),i=await r.execute("definition",n);await si(i,e,t.histGoForward)}})));const ui={directory:"file",module:"module","external module name":"module",class:"class","local class":"class",method:"method",property:"property",getter:"property",setter:"property","JSX attribute":"field",constructor:"constructor",enum:"enum",interface:"interface",type:"interface",function:"function","local function":"function",label:"variable",alias:"variable",var:"variable",let:"variable","local var":"variable",parameter:"variable","enum member":"constant",const:"constant",string:"string","":void 0,warning:void 0,keyword:void 0,script:void 0,call:void 0,index:void 0,construct:void 0,"type parameter":void 0,"primitive type":void 0};class li{constructor(t){this.getClient=t,this.triggerCharacters=new Set([]),this.grammarScopes=le(),this.priority=100,this.disposables=new d;const e=new Set(["<","(",","]),n=new Set([]);this.disposables.add(atom.config.observe("atom-typescript.sigHelpDisplayOnChange",(t=>{this.triggerCharacters=t?e:n})))}dispose(){this.disposables.dispose()}async getSignatureHelp(t,e){try{const n=t.getPath();if(void 0===n)return;const r=await this.getClient(n),i=(await r.execute("signatureHelp",{file:n,line:e.row+1,offset:e.column+1})).body;return{signatures:i.items.map(re),activeParameter:i.argumentIndex,activeSignature:i.selectedItemIndex}}catch(t){return}}}function fi(t){return ft.dom("li",null,t.description)}class pi{constructor(t,e){this.getClient=t,this.applyEdits=e,this.selector=le().map((t=>t.includes(".")?"."+t:t)).join(", "),this.disableForSelector=".comment",this.inclusionPriority=3,this.suggestionPriority=atom.config.get("atom-typescript").autocompletionSuggestionPriority,this.excludeLowerPriority=!1}async getSuggestions(t){const e=function(t){const e=t.editor.getPath();if(void 0===e)return;return{file:e,line:t.bufferPosition.row+1,offset:t.bufferPosition.column+1}}(t),n=function(t){const e=t.editor.getBuffer().getTextInRange([[t.bufferPosition.row,0],t.bufferPosition]).match(hi);return e?e[0]:""}(t);if(!e)return[];const r=function(t){if(void 0===t)return;if(!t)return;const e=t.slice(-1);if(wi.has(e))return e;return}(function(t,e){let n;const r=new h.Range([0,0],e);return t.backwardsScanInRange(/\S/,r,(({matchText:t,stop:e})=>{n=t,e()})),n}(t.editor.getBuffer(),t.bufferPosition));if(!n&&!t.activatedManually&&!r)return[];if(gi(t.scopeDescriptor.getScopesArray(),"string.template.")&&!gi(t.scopeDescriptor.getScopesArray(),"template.expression."))return[];try{let i=await this.getSuggestionsWithCache({prefix:n,location:e,triggerCharacter:r,activatedManually:t.activatedManually});return i=Lr.filter(i,n,{key:"displayText"}),i.map((r=>({replacementPrefix:r.replacementRange?t.editor.getTextInBufferRange(r.replacementRange):n,location:e,...this.getDetailsFromCache(r),...vi(t,r)})))}catch(t){return[]}}async getSuggestionDetailsOnSelect(t){return"text"in t&&!("rightLabel"in t)?this.getAdditionalDetails(t):null}onDidInsertSuggestion(t){const e=t.suggestion;if(!e.hasAction)return;if(!this.lastSuggestions)return;const n=this.lastSuggestions.client;let r=this.getDetailsFromCache(e);Kt((async()=>{var t;if(r||(r=await this.getAdditionalDetails(e)),!(null===(t=r)||void 0===t?void 0:t.details.codeActions))return;let i;i=1===r.details.codeActions.length?r.details.codeActions[0]:await ni({items:r.details.codeActions,itemTemplate:fi,itemFilterKey:"description"}),i&&(await this.applyEdits(i.changes),i.commands&&await Promise.all(i.commands.map((t=>n.execute("applyCodeActionCommand",{command:t})))))})())}async getAdditionalDetails(t){var e;if(void 0===t.identifier)return null;if(!this.lastSuggestions)return null;const n=await this.lastSuggestions.client.execute("completionEntryDetails",{entryNames:[t.identifier],...this.lastSuggestions.location});if(!n.body)return null;const[r]=n.body;if(!r)return null;let i=r.displayParts;i.length>=3&&"("===i[0].text&&i[1].text===t.leftLabel&&")"===i[2].text&&(i=i.slice(3));let o=i.map((t=>t.text)).join("");const s=t.hasAction&&1===(null===(e=r.codeActions)||void 0===e?void 0:e.length)?r.codeActions[0].description+"\n\n":"";s&&(o=s);const a=s+r.displayParts.map((t=>t.text)).join("")+(r.documentation?"\n\n"+r.documentation.map((t=>t.text)).join(" "):"");return this.lastSuggestions.details.set(t.displayText,{details:r,rightLabel:o,description:a}),{...t,details:r,rightLabel:o,description:a}}getDetailsFromCache(t){if(!this.lastSuggestions)return null;const e=this.lastSuggestions.details.get(t.displayText);return e||null}async getSuggestionsWithCache({prefix:t,location:e,triggerCharacter:n,activatedManually:r}){if(this.lastSuggestions&&!r){const n=this.lastSuggestions.location,r=di(this.lastSuggestions.prefix,n.offset),i=di(t,e.offset);if(n.file===e.file&&n.line===e.line&&r===i&&0!==this.lastSuggestions.suggestions.length)return this.lastSuggestions.suggestions}const i=await this.getClient(e.file),o=await async function({client:t,location:e,triggerCharacter:n}){if(parseInt(t.version.split(".")[0],10)>=3){var r;const i=await t.execute("completionInfo",{includeExternalModuleExports:!1,includeInsertTextCompletions:!0,triggerCharacter:n,...e});return i.body.entries.map(mi.bind(null,null===(r=i.body)||void 0===r?void 0:r.isMemberCompletion))}return(await t.execute("completions",{includeExternalModuleExports:!1,includeInsertTextCompletions:!0,...e})).body.map(mi.bind(null,void 0))}({client:i,location:e,triggerCharacter:r?void 0:n});return this.lastSuggestions={client:i,location:e,prefix:t,suggestions:o,details:new Map},o}}const hi=/(?:(?![\u{10000}-\u{10FFFF}])[\$_\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Lo}\p{Nl}])(?:(?![\u{10000}-\u{10FFFF}])[\$_\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Lo}\p{Nl}\u200C\u200D\p{Mn}\p{Mc}\p{Nd}\p{Pc}])*$/u;function di(t,e){return e-("."===t?0:t.length)}function gi(t,e){for(const n of t)if(n.includes(e))return!0;return!1}function mi(t,e){return{displayText:e.name,text:void 0!==e.insertText?e.insertText:e.name,leftLabel:e.kind,replacementRange:e.replacementSpan?Xt(e.replacementSpan):void 0,type:yi[e.kind],isMemberCompletion:t,identifier:void 0!==e.source?{name:e.name,source:e.source}:e.name,hasAction:e.hasAction}}function vi(t,e){return atom.config.get("atom-typescript.autocompleteParens")&&["function","method"].includes(e.leftLabel)&&!function(t){const e=t.editor.getBuffer(),n=t.bufferPosition;return!!e.getTextInRange([n,[n.row,e.lineLengthForRow(n.row)]]).match(/\s*\(/)}(t)?{...e,snippet:e.text+"($1)",text:void 0}:e}const yi={directory:"require",module:"import","external module name":"import",class:"class","local class":"class",method:"method",property:"property",getter:"property",setter:"property","JSX attribute":"property",constructor:"method",enum:"type",interface:"type",type:"type","type parameter":"type","primitive type":"type",function:"function","local function":"function",label:"variable",alias:"import",var:"variable",let:"variable","local var":"variable",parameter:"variable","enum member":"constant",const:"constant",string:"value",keyword:"keyword","":void 0,warning:void 0,script:void 0,call:void 0,index:void 0,construct:void 0},wi=new Set(Object.keys({".":null,'"':null,"'":null,"`":null,"/":null,"@":null,"<":null,"#":null}));async function bi(t,e){const n=await async function(t,e){try{return await t.execute("getApplicableRefactors",{triggerReason:"invoked",...e})}catch{return}}(t,e);if(!n)return[];if(void 0===n.body||0===n.body.length)return[];const r=[];for(const t of n.body)for(const n of t.actions)r.push({refactorName:t.name,refactorDescription:t.description,refactorRange:e,actionName:n.name,actionDescription:n.description,inlineable:void 0===t.inlineable||t.inlineable});return r}async function _i(t,e,n){const r=await e.execute("getEditsForRefactor",{...t.refactorRange,refactor:t.refactorName,action:t.actionName});if(void 0===r.body)return;const{edits:i,renameFilename:o,renameLocation:s}=r.body;if(await n.applyEdits(i),void 0===o||void 0===s)return;const a=await atom.workspace.open(o,{searchAllPanes:!0,initialLine:s.line-1,initialColumn:s.offset-1});await atom.commands.dispatch(atom.views.getView(a),"typescript:rename-refactor")}ii("atom-text-editor","typescript:refactor-selection",(t=>({description:"Get a list of applicable refactors to selected code",async didDispatch(e){const n=he(e);if(!n)return;const r=e.getSelectedBufferRange(),i=await t.getClient(n.file),o=r.isEmpty()?n:{file:n.file,startLine:r.start.row+1,startOffset:r.start.column+1,endLine:r.end.row+1,endOffset:r.end.column+1},s=await bi(i,o);if(0===s.length)return void atom.notifications.addInfo("AtomTS: No applicable refactors for the selection");const a=await ni({items:s,itemTemplate:(t,e)=>ft.dom("li",null,ft.dom(Gr,{label:`${t.refactorDescription}: ${t.actionDescription}`,query:e.getFilterQuery()})),itemFilterKey:"actionDescription"});void 0!==a&&await _i(a,i,t)}})));class xi{constructor(t,e,n){this.clientResolver=t,this.errorPusher=e,this.applyEdits=n,this.supportedFixes=new WeakMap}async getFixableRanges(t,e){const n=t.getPath();if(void 0===n)return[];const r=this.errorPusher.getErrorsInRange(n,e),i=await this.clientResolver.get(n),o=await this.getSupportedFixes(i);return Array.from(r).filter((t=>void 0!==t.code&&o.has(t.code))).map((t=>Xt(t)))}async runCodeFix(t,e){const n=t.getPath();if(void 0===n)return[];const r=await this.clientResolver.get(n),i=await this.getSupportedFixes(r),o=Array.from(this.errorPusher.getErrorsAt(n,e)).filter((t=>void 0!==t.code&&i.has(t.code))).map((t=>r.execute("getCodeFixes",{file:n,startLine:t.start.line,startOffset:t.start.offset,endLine:t.end.line,endOffset:t.end.offset,errorCodes:[t.code]}))),s=await Promise.all(o),a=[];for(const t of s)if(t.body)for(const e of t.body)a.push(e);const c=await bi(r,{file:n,...Jt(e)});return a.push(...c),a}async applyFix(t){if("changes"in t)return this.applyEdits(t.changes);return _i(t,await this.clientResolver.get(t.refactorRange.file),{applyEdits:this.applyEdits})}dispose(){}async getSupportedFixes(t){let e=this.supportedFixes.get(t);if(e)return e;const n=await t.execute("getSupportedCodeFixes");if(!n.body)throw new Error("No code fixes are supported");return e=new Set(n.body.map((t=>parseInt(t,10)))),this.supportedFixes.set(t,e),e}}async function Si(t,e){let n;try{return await new Promise(((r,i)=>{try{const o=new m({command:t,args:["--init"],options:{cwd:e},exit:t=>{0===t?r():i(new Error("Tsc ended with nonzero exit code "+t))}});n=o.onWillThrowError(i)}catch(t){i(t)}}))}finally{n&&n.dispose()}}ii("atom-text-editor","typescript:build",(t=>({description:"Compile all files in project related to current active text editor",async didDispatch(e){const n=e.getPath();if(void 0===n)return;const r=await t.getClient(n);t.reportBuildStatus(void 0);const i=await r.execute("projectInfo",{file:n,needFileNameList:!0}),o=new Set(i.body.fileNames);o.delete(i.body.configFileName);let s=0;const a=[...o.values()].map((e=>{return n=r.execute("compileOnSaveEmitFile",{file:e,forced:!0}),i=()=>{s+=1,t.reportProgress({max:o.size,value:s})},n.then(i,i),n;var n,i}));try{if((await Promise.all(a)).some((t=>!1===t.body)))throw new Error("Emit failed");t.reportBuildStatus({success:!0})}catch(e){const n=e;console.error(n),t.reportBuildStatus({success:!1,message:n.message})}}}))),ii("atom-text-editor","typescript:check-all-files",(t=>({description:"Typecheck all files in project related to current active text editor",async didDispatch(e){var n;const r=e.getPath();if(void 0===r)return;const i=await t.getClient(r),o=await i.execute("projectInfo",{file:r,needFileNameList:!0}),s=new Set(null===(n=o.body.fileNames)||void 0===n?void 0:n.filter((t=>!t.endsWith("tsconfig.json")&&!t.includes(`${w.sep}node_modules${w.sep}`)))),a=s.size;if(i.multistepSupported){const e=i.on("syntaxDiag",(e=>{"file"in e&&s.delete(e.file),t.reportProgress({max:a,value:a-s.size})}));t.reportProgress({max:a,value:0}),await i.execute("geterrForProject",{file:r,delay:0}),e.dispose()}else{let e;const n=i.on("syntaxDiag",(r=>{void 0!==e&&window.clearTimeout(e),e=window.setTimeout((()=>{s.clear(),n.dispose(),t.reportProgress({max:a,value:a})}),2e3),"file"in r&&s.delete(r.file),0===s.size&&(n.dispose(),window.clearTimeout(e)),t.reportProgress({max:a,value:a-s.size})}));t.reportProgress({max:a,value:0}),await i.execute("geterrForProject",{file:r,delay:0})}}}))),ii("atom-workspace","typescript:clear-errors",(t=>({description:"Clear error messages",didDispatch(){t.clearErrors()}}))),ii("atom-text-editor","typescript:format-code",(t=>({description:"Format code in currently active text editor",async didDispatch(e){const n=e.getPath();if(void 0===n)return;const r=[];for(const t of e.getSelectedBufferRanges())t.isEmpty()||r.push({line:(i=t).start.row+1,offset:i.start.column+1,endLine:i.end.row+1,endOffset:i.end.column+1});var i;if(0===r.length){const t=e.getBuffer().getEndPosition();r.push({line:1,offset:1,endLine:t.row+1,endOffset:t.column+1})}const o=await t.getClient(n),s=[];for(const t of r){const e=await o.execute("format",{...t,file:n});e.body&&s.push(...e.body)}s.length>0&&e.transact((()=>{!function(t,e){for(let n=e.length-1;n>=0;n--)t.setTextInBufferRange(Xt(e[n]),e[n].newText)}(e,s)}))}}))),ii("atom-text-editor","typescript:initialize-config",(()=>({description:"Create tsconfig.json in the project related to currently-active text edtior",async didDispatch(t,e){const n=atom.project.getDirectories();if(0===n.length)return e();const r=t.getPath();if(void 0===r)return;const i=(await wr(r,"tsc")).pathToBin;for(const t of n)t.contains(r)&&(await Si(i,t.getPath()),atom.notifications.addSuccess("Successfully created tsconfig.json in "+t.getPath()))}}))),ii("atom-text-editor","typescript:organize-imports",(t=>({description:"Organize module imports",async didDispatch(e){const n=e.getPath();if(void 0===n)return;const r=await t.getClient(n),i=await r.execute("organizeImports",{scope:{type:"file",args:{file:n}}});i.body.length>0&&await t.applyEdits(i.body)}}))),ii("atom-text-editor","typescript:reload-projects",(t=>({description:"Reload projects",async didDispatch(e){const n=e.getPath();if(void 0===n)return;const r=await t.getClient(n);await r.execute("reloadProjects")}})));var ki,Ei,Ci={},Ti=!1;function Ai(){return Ti||(Ti=!0,ki={},function(){var t="object"==typeof self&&self.self===self&&self||"object"==typeof T&&T.global===T&&T||this||{},e=t._,n=Array.prototype,r=Object.prototype,i="undefined"!=typeof Symbol?Symbol.prototype:null,o=n.push,s=n.slice,a=r.toString,c=r.hasOwnProperty,u=Array.isArray,l=Object.keys,f=Object.create,p=function(){},h=function(t){return t instanceof h?t:this instanceof h?void(this._wrapped=t):new h(t)};void 0===ki||ki.nodeType?t._=h:(!module.nodeType&&ki&&(ki=h),Ei=h,ki._=Ei),h.VERSION="1.9.1";var d,g=function(t,e,n){if(void 0===e)return t;switch(null==n?3:n){case 1:return function(n){return t.call(e,n)};case 3:return function(n,r,i){return t.call(e,n,r,i)};case 4:return function(n,r,i,o){return t.call(e,n,r,i,o)}}return function(){return t.apply(e,arguments)}},m=function(t,e,n){return h.iteratee!==d?h.iteratee(t,e):null==t?h.identity:h.isFunction(t)?g(t,e,n):h.isObject(t)&&!h.isArray(t)?h.matcher(t):h.property(t)};h.iteratee=d=function(t,e){return m(t,e,1/0)};var v=function(t,e){return e=null==e?t.length-1:+e,function(){for(var n=Math.max(arguments.length-e,0),r=Array(n),i=0;i=0&&e<=x};h.each=h.forEach=function(t,e,n){var r,i;if(e=g(e,n),k(t))for(r=0,i=t.length;r0?0:s-1;for(i||(r=e[o?o[a]:a],a+=t);a>=0&&a=3;return e(t,g(n,i,4),r,o)}};h.reduce=h.foldl=h.inject=E(1),h.reduceRight=h.foldr=E(-1),h.find=h.detect=function(t,e,n){var r=(k(t)?h.findIndex:h.findKey)(t,e,n);if(void 0!==r&&-1!==r)return t[r]},h.filter=h.select=function(t,e,n){var r=[];return e=m(e,n),h.each(t,(function(t,n,i){e(t,n,i)&&r.push(t)})),r},h.reject=function(t,e,n){return h.filter(t,h.negate(m(e)),n)},h.every=h.all=function(t,e,n){e=m(e,n);for(var r=!k(t)&&h.keys(t),i=(r||t).length,o=0;o=0},h.invoke=v((function(t,e,n){var r,i;return h.isFunction(e)?i=e:h.isArray(e)&&(r=e.slice(0,-1),e=e[e.length-1]),h.map(t,(function(t){var o=i;if(!o){if(r&&r.length&&(t=_(t,r)),null==t)return;o=t[e]}return null==o?o:o.apply(t,n)}))})),h.pluck=function(t,e){return h.map(t,h.property(e))},h.where=function(t,e){return h.filter(t,h.matcher(e))},h.findWhere=function(t,e){return h.find(t,h.matcher(e))},h.max=function(t,e,n){var r,i,o=-1/0,s=-1/0;if(null==e||"number"==typeof e&&"object"!=typeof t[0]&&null!=t)for(var a=0,c=(t=k(t)?t:h.values(t)).length;ao&&(o=r);else e=m(e,n),h.each(t,(function(t,n,r){((i=e(t,n,r))>s||i===-1/0&&o===-1/0)&&(o=t,s=i)}));return o},h.min=function(t,e,n){var r,i,o=1/0,s=1/0;if(null==e||"number"==typeof e&&"object"!=typeof t[0]&&null!=t)for(var a=0,c=(t=k(t)?t:h.values(t)).length;ar||void 0===n)return 1;if(n0?0:i-1;o>=0&&o0?a=o>=0?o:Math.max(o+c,a):c=o>=0?Math.min(o+1,c):o+c+1;else if(n&&o&&c)return r[o=n(r,i)]===i?o:-1;if(i!=i)return(o=e(s.call(r,a,c),h.isNaN))>=0?o+a:-1;for(o=t>0?a:c-1;o>=0&&oe?(r&&(clearTimeout(r),r=null),a=u,s=t.apply(i,o),r||(i=o=null)):r||!1===n.trailing||(r=setTimeout(c,l)),s};return u.cancel=function(){clearTimeout(r),a=0,r=i=o=null},u},h.debounce=function(t,e,n){var r,i,o=function(e,n){r=null,n&&(i=t.apply(e,n))},s=v((function(s){if(r&&clearTimeout(r),n){var a=!r;r=setTimeout(o,e),a&&(i=t.apply(this,s))}else r=h.delay(o,e,this,s);return i}));return s.cancel=function(){clearTimeout(r),r=null},s},h.wrap=function(t,e){return h.partial(e,t)},h.negate=function(t){return function(){return!t.apply(this,arguments)}},h.compose=function(){var t=arguments,e=t.length-1;return function(){for(var n=e,r=t[e].apply(this,arguments);n--;)r=t[n].call(this,r);return r}},h.after=function(t,e){return function(){if(--t<1)return e.apply(this,arguments)}},h.before=function(t,e){var n;return function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=null),n}},h.once=h.partial(h.before,2),h.restArguments=v;var N=!{toString:null}.propertyIsEnumerable("toString"),D=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],F=function(t,e){var n=D.length,i=t.constructor,o=h.isFunction(i)&&i.prototype||r,s="constructor";for(b(t,s)&&!h.contains(e,s)&&e.push(s);n--;)(s=D[n])in t&&t[s]!==o[s]&&!h.contains(e,s)&&e.push(s)};h.keys=function(t){if(!h.isObject(t))return[];if(l)return l(t);var e=[];for(var n in t)b(t,n)&&e.push(n);return N&&F(t,e),e},h.allKeys=function(t){if(!h.isObject(t))return[];var e=[];for(var n in t)e.push(n);return N&&F(t,e),e},h.values=function(t){for(var e=h.keys(t),n=e.length,r=Array(n),i=0;i1&&(r=g(r,e[1])),e=h.allKeys(t)):(r=B,e=P(e,!1,!1),t=Object(t));for(var i=0,o=e.length;i1&&(n=e[1])):(e=h.map(P(e,!1,!1),String),r=function(t,n){return!h.contains(e,n)}),h.pick(t,r,n)})),h.defaults=L(h.allKeys,!0),h.create=function(t,e){var n=y(t);return e&&h.extendOwn(n,e),n},h.clone=function(t){return h.isObject(t)?h.isArray(t)?t.slice():h.extend({},t):t},h.tap=function(t,e){return e(t),t},h.isMatch=function(t,e){var n=h.keys(e),r=n.length;if(null==t)return!r;for(var i=Object(t),o=0;o":">",'"':""","'":"'","`":"`"},H=h.invert(q),U=function(t){var e=function(e){return t[e]},n="(?:"+h.keys(t).join("|")+")",r=RegExp(n),i=RegExp(n,"g");return function(t){return t=null==t?"":""+t,r.test(t)?t.replace(i,e):t}};h.escape=U(q),h.unescape=U(H),h.result=function(t,e,n){h.isArray(e)||(e=[e]);var r=e.length;if(!r)return h.isFunction(n)?n.call(t):n;for(var i=0;i/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var V=/(.)^/,W={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},G=/\\|'|\r|\n|\u2028|\u2029/g,K=function(t){return"\\"+W[t]};h.template=function(t,e,n){!e&&n&&(e=n),e=h.defaults({},e,h.templateSettings);var r,i=RegExp([(e.escape||V).source,(e.interpolate||V).source,(e.evaluate||V).source].join("|")+"|$","g"),o=0,s="__p+='";t.replace(i,(function(e,n,r,i,a){return s+=t.slice(o,a).replace(G,K),o=a+e.length,n?s+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":r?s+="'+\n((__t=("+r+"))==null?'':__t)+\n'":i&&(s+="';\n"+i+"\n__p+='"),e})),s+="';\n",e.variable||(s="with(obj||{}){\n"+s+"}\n"),s="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+s+"return __p;\n";try{r=new Function(e.variable||"obj","_",s)}catch(t){throw t.source=s,t}var a=function(t){return r.call(this,t,h)},c=e.variable||"obj";return a.source="function("+c+"){\n"+s+"}",a},h.chain=function(t){var e=h(t);return e._chain=!0,e};var Q=function(t,e){return t._chain?h(e).chain():e};h.mixin=function(t){return h.each(h.functions(t),(function(e){var n=h[e]=t[e];h.prototype[e]=function(){var t=[this._wrapped];return o.apply(t,arguments),Q(this,n.apply(h,t))}})),h},h.mixin(h),h.each(["pop","push","reverse","shift","sort","splice","unshift"],(function(t){var e=n[t];h.prototype[t]=function(){var n=this._wrapped;return e.apply(n,arguments),"shift"!==t&&"splice"!==t||0!==n.length||delete n[0],Q(this,n)}})),h.each(["concat","join","slice"],(function(t){var e=n[t];h.prototype[t]=function(){return Q(this,e.apply(this._wrapped,arguments))}})),h.prototype.value=function(){return this._wrapped},h.prototype.valueOf=h.prototype.toJSON=h.prototype.value,h.prototype.toString=function(){return String(this._wrapped)},"function"==typeof define&&define.amd&&define("underscore",[],(function(){return h}))}()),ki}var Pi,Oi=!1;function Ii(){return Oi||(Oi=!0,function(){var t,e,n,r,i,o,s,a,c=[].slice;a=Ai(),n={cmd:"⌘",ctrl:"⌃",alt:"⌥",option:"⌥",shift:"⇧",enter:"⏎",left:"←",right:"→",up:"↑",down:"↓"},r={cmd:"Cmd",ctrl:"Ctrl",alt:"Alt",option:"Alt",shift:"Shift",enter:"Enter",left:"Left",right:"Right",up:"Up",down:"Down"},o={"~":"`",_:"-","+":"=","|":"\\","{":"[","}":"]",":":";",'"':"'","<":",",">":".","?":"/"},s=function(t){var e,n,r,i,o;if(r=0,n=[],null==t)return n;for(e=i=0,o=t.length;i=0&&t.splice(n,1),t},setValueForKeyPath:function(t,e,n){var r,i;for(i=s(e);i.length>1;)null==t[r=i.shift()]&&(t[r]={}),t=t[r];return null!=n?t[i.shift()]=n:delete t[i.shift()]},hasKeyPath:function(t,e){var n,r,i,o;for(i=0,o=(r=s(e)).length;i0?s<=a:s>=a;o=s+=i)u.push(t.splice.apply(t,[e+o,0].concat(c.call(r.slice(o,o+i)))));return u},sum:function(t){var e,n,r;for(e=0,n=0,r=t.length;n=0&&t.length%1==0}function p(t,e){for(var n=-1,r=t.length;++n3?t(r,i,c,a):(s=o,o=i,t(r,c,a))}}function N(t,e){return e}function D(t,e,r){r=r||n;var i=f(e)?[]:{};t(e,(function(t,e,n){t(b((function(t,r){r.length<=1&&(r=r[0]),i[e]=r,n(t)})))}),(function(t){r(t,i)}))}function F(t,e,n,r){var i=[];t(e,(function(t,e,r){n(t,(function(t,e){i=i.concat(e||[]),r(t)}))}),(function(t){r(t,i)}))}function L(t,r,i){if(null==r)r=1;else if(0===r)throw new Error("Concurrency must not be zero");function o(t,r,i,o){if(null!=o&&"function"!=typeof o)throw new Error("task callback must be a function");if(t.started=!0,l(r)||(r=[r]),0===r.length&&t.idle())return e.setImmediate((function(){t.drain()}));p(r,(function(e){var r={data:e,callback:o||n};i?t.tasks.unshift(r):t.tasks.push(r),t.tasks.length===t.concurrency&&t.saturated()})),e.setImmediate(t.process)}function s(t,e){return function(){c-=1;var n=!1,r=arguments;p(e,(function(t){p(u,(function(e,r){e!==t||n||(u.splice(r,1),n=!0)})),t.callback.apply(t,r)})),t.tasks.length+c===0&&t.drain(),t.process()}}var c=0,u=[],f={tasks:[],concurrency:r,payload:i,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){o(f,t,!1,e)},kill:function(){f.drain=n,f.tasks=[]},unshift:function(t,e){o(f,t,!0,e)},process:function(){for(;!f.paused&&cr?1:0}e.map(t,(function(t,e){n(t,(function(n,r){n?e(n):e(null,{value:t,criteria:r})}))}),(function(t,e){if(t)return r(t);r(null,h(e.sort(i),(function(t){return t.value})))}))},e.auto=function(t,r,i){"function"==typeof arguments[1]&&(i=r,r=null),i=c(i||n);var o=y(t),s=o.length;if(!s)return i(null);r||(r=s);var a={},u=0,f=!1,h=[];function d(t){h.unshift(t)}function w(t){var e=v(h,t);e>=0&&h.splice(e,1)}function _(){s--,p(h.slice(0),(function(t){t()}))}d((function(){s||i(null,a)})),p(o,(function(n){if(!f){for(var o,s=l(t[n])?t[n]:[t[n]],c=b((function(t,r){if(u--,r.length<=1&&(r=r[0]),t){var o={};m(a,(function(t,e){o[e]=t})),o[n]=r,f=!0,i(t,o)}else a[n]=r,e.setImmediate(_)})),p=s.slice(0,s.length-1),h=p.length;h--;){if(!(o=t[p[h]]))throw new Error("Has nonexistent dependency in "+p.join(", "));if(l(o)&&v(o,n)>=0)throw new Error("Has cyclic dependencies")}y()?(u++,s[s.length-1](c,a)):d((function t(){y()&&(u++,w(t),s[s.length-1](c,a))}))}function y(){return u3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");function l(t,n){function r(t,e){return function(r){t((function(t,n){r(!t||e,{err:t,result:n})}),n)}}function i(t){return function(e){setTimeout((function(){e(null)}),t)}}for(;a.times;){var o=!(a.times-=1);s.push(r(a.task,o)),!o&&a.interval>0&&s.push(i(a.interval))}e.series(s,(function(e,n){n=n[n.length-1],(t||a.callback)(n.err,n.result)}))}return u<=2&&"function"==typeof t&&(r=n,n=t),"function"!=typeof t&&c(a,t),a.callback=r,a.task=n,a.callback?l():l},e.waterfall=function(t,r){if(r=c(r||n),!l(t)){var i=new Error("First argument to waterfall must be an array of functions");return r(i)}if(!t.length)return r();!function t(e){return b((function(n,i){if(n)r.apply(null,[n].concat(i));else{var o=e.next();o?i.push(t(o)):i.push(r),z(e).apply(null,i)}}))}(e.iterator(t))()},e.parallel=function(t,n){D(e.eachOf,t,n)},e.parallelLimit=function(t,e,n){D(k(e),t,n)},e.series=function(t,n){D(e.eachOfSeries,t,n)},e.iterator=function(t){return function e(n){function r(){return t.length&&t[n].apply(null,arguments),r.next()}return r.next=function(){return n>>1);n(e,t[o])>=0?r=o:i=o-1}return r}(t.tasks,a,i)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),e.setImmediate(t.process)}))}(o,t,r,s)},delete o.unshift,o},e.cargo=function(t,e){return L(t,1,e)},e.log=M("log"),e.dir=M("dir"),e.memoize=function(t,n){var i={},o={},s=Object.prototype.hasOwnProperty;n=n||r;var a=b((function(r){var a=r.pop(),c=n.apply(null,r);s.call(i,c)?e.setImmediate((function(){a.apply(null,i[c])})):s.call(o,c)?o[c].push(a):(o[c]=[a],t.apply(null,r.concat([b((function(t){i[c]=t;var e=o[c];delete o[c];for(var n=0,r=e.length;n=t.length)return e&&(e[a]=t),n(null,t);Gi.lastIndex=r;var c=Gi.exec(t);return s=i,i+=c[0],o=s+c[1],r=Gi.lastIndex,u[o]||e&&e[o]===o?process.nextTick(f):e&&Object.prototype.hasOwnProperty.call(e,o)?d(e[o]):Vi.lstat(o,p)}function p(t,r){if(t)return n(t);if(!r.isSymbolicLink())return u[o]=!0,e&&(e[o]=o),process.nextTick(f);if(!$i){var i=r.dev.toString(32)+":"+r.ino.toString(32);if(c.hasOwnProperty(i))return h(null,c[i],o)}Vi.stat(o,(function(t){if(t)return n(t);Vi.readlink(o,(function(t,e){$i||(c[i]=e),h(t,e)}))}))}function h(t,r,i){if(t)return n(t);var o=Ui.resolve(s,r);e&&(e[i]=o),d(o)}function d(e){t=Ui.resolve(e,t.slice(r)),l()}l()},Hi.realpath=Zi),Hi}var to,eo,no,ro,io,oo,so,ao=!1;function co(t){return t&&"realpath"===t.syscall&&("ELOOP"===t.code||"ENOMEM"===t.code||"ENAMETOOLONG"===t.code)}function uo(t,e,n){if(oo)return no(t,e,n);"function"==typeof e&&(n=e,e=null),no(t,e,(function(r,i){co(r)?so.realpath(t,e,n):n(r,i)}))}function lo(t,e){if(oo)return ro(t,e);try{return ro(t,e)}catch(n){if(co(n))return so.realpathSync(t,e);throw n}}function fo(){eo.realpath=uo,eo.realpathSync=lo}function po(){eo.realpath=no,eo.realpathSync=ro}function ho(){return ao||(ao=!0,to={},to=uo,uo.realpath=uo,uo.sync=lo,uo.realpathSync=lo,uo.monkeypatch=fo,uo.unmonkeypatch=po,no=(eo=x).realpath,ro=eo.realpathSync,io=process.version,oo=/^v[0-5]\./.test(io),so=Xi()),to}var go,mo,vo=!1;function yo(){return vo||(vo=!0,go={},go=function(t,e){for(var n=[],r=0;r=0&&u>0){for(r=[],o=n.length;l>=0&&!a;)l==c?(r.push(l),c=n.indexOf(t,l+1)):1==r.length?a=[r.pop(),u]:((i=r.pop())=0?c:u;r.length&&(a=[o,s])}return a}function ko(){return bo||(bo=!0,wo={},wo=_o,_o.range=So),wo}var Eo,Co,To,Ao,Po,Oo,Io,jo,No=!1;function Do(t){return parseInt(t,10)==t?parseInt(t,10):t.charCodeAt(0)}function Fo(t){return t.split(Ao).join("\\").split(Po).join("{").split(Oo).join("}").split(Io).join(",").split(jo).join(".")}function Lo(t){if(!t)return[""];var e=[],n=To("{","}",t);if(!n)return t.split(",");var r=n.pre,i=n.body,o=n.post,s=r.split(",");s[s.length-1]+="{"+i+"}";var a=Lo(o);return o.length&&(s[s.length-1]+=a.shift(),s.push.apply(s,a)),e.push.apply(e,s),e}function Mo(t){return t?("{}"===t.substr(0,2)&&(t="\\{\\}"+t.substr(2)),Ho(function(t){return t.split("\\\\").join(Ao).split("\\{").join(Po).split("\\}").join(Oo).split("\\,").join(Io).split("\\.").join(jo)}(t),!0).map(Fo)):[]}function Ro(t){return"{"+t+"}"}function Bo(t){return/^-?0\d/.test(t)}function zo(t,e){return t<=e}function qo(t,e){return t>=e}function Ho(t,e){var n=[],r=To("{","}",t);if(!r||/\$$/.test(r.pre))return[t];var i,o=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(r.body),s=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(r.body),a=o||s,c=r.body.indexOf(",")>=0;if(!a&&!c)return r.post.match(/,.*\}/)?Ho(t=r.pre+"{"+r.body+Oo+r.post):[t];if(a)i=r.body.split(/\.\./);else if(1===(i=Lo(r.body)).length&&1===(i=Ho(i[0],!1).map(Ro)).length)return(f=r.post.length?Ho(r.post,!1):[""]).map((function(t){return r.pre+i[0]+t}));var u,l=r.pre,f=r.post.length?Ho(r.post,!1):[""];if(a){var p=Do(i[0]),h=Do(i[1]),d=Math.max(i[0].length,i[1].length),g=3==i.length?Math.abs(Do(i[2])):1,m=zo;h0){var _=new Array(b+1).join("0");w=y<0?"-"+_+w.slice(1):_+w}}u.push(w)}}else u=Co(i,(function(t){return Ho(t,!1)}));for(var x=0;x65536)throw new TypeError("pattern is too long");var n=this.options;if(!n.noglobstar&&"**"===t)return Wo;if(""===t)return"";var r,i="",o=!!n.nocase,s=!1,a=[],c=[],u=!1,l=-1,f=-1,p="."===t.charAt(0)?"":n.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",h=this;function d(){if(r){switch(r){case"*":i+=Zo,o=!0;break;case"?":i+=Qo,o=!0;break;default:i+="\\"+r}h.debug("clearStateChar %j %j",r,i),r=!1}}for(var g,m=0,v=t.length;m-1;k--){var E=c[k],C=i.slice(0,E.reStart),T=i.slice(E.reStart,E.reEnd-8),A=i.slice(E.reEnd-8,E.reEnd),P=i.slice(E.reEnd);A+=P;var O=C.split("(").length-1,I=P;for(m=0;m=0&&!(r=t[i]);i--);for(i=0;i>> no match, partial?",t,f,e,p),f!==s))}if("string"==typeof u?(c=r.nocase?l.toLowerCase()===u.toLowerCase():l===u,this.debug("string match",u,l,c)):(c=l.match(u),this.debug("pattern match",u,l,c)),!c)return!1}if(i===s&&o===a)return!0;if(i===s)return n;if(o===a)return i===s-1&&""===t[i];throw new Error("wtf?")}}function ds(){return ns||(ns=!0,hs()),$o}var gs,ms=!1;function vs(){return ms||(ms=!0,gs={},gs="function"==typeof Object.create?function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:function(t,e){t.super_=e;var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}),gs}var ys,ws,bs,_s=!1;function xs(t){return"/"===t.charAt(0)}function Ss(t){var e=/^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/.exec(t),n=e[1]||"",r=Boolean(n&&":"!==n.charAt(1));return Boolean(e[2]||r)}function ks(){return _s||(_s=!0,ys={},ys="win32"===process.platform?Ss:xs,ws=xs,ys.posix=ws,bs=Ss,ys.win32=bs),ys}var Es,Cs,Ts,As,Ps,Os,Is,js,Ns,Ds,Fs,Ls,Ms,Rs=!1;function Bs(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function zs(t,e){return t.toLowerCase().localeCompare(e.toLowerCase())}function qs(t,e){return t.localeCompare(e)}function Hs(t){var e=null;if("/**"===t.slice(-3)){var n=t.replace(/(\/\*\*)+$/,"");e=new Ms(n,{dot:!0})}return{matcher:new Ms(t,{dot:!0}),gmatcher:e}}function Us(t,e,n){if(n||(n={}),n.matchBase&&-1===e.indexOf("/")){if(n.noglobstar)throw new Error("base matching requires globstar");e="**/"+e}t.silent=!!n.silent,t.pattern=e,t.strict=!1!==n.strict,t.realpath=!!n.realpath,t.realpathCache=n.realpathCache||Object.create(null),t.follow=!!n.follow,t.dot=!!n.dot,t.mark=!!n.mark,t.nodir=!!n.nodir,t.nodir&&(t.mark=!0),t.sync=!!n.sync,t.nounique=!!n.nounique,t.nonull=!!n.nonull,t.nosort=!!n.nosort,t.nocase=!!n.nocase,t.stat=!!n.stat,t.noprocess=!!n.noprocess,t.absolute=!!n.absolute,t.maxLength=n.maxLength||1/0,t.cache=n.cache||Object.create(null),t.statCache=n.statCache||Object.create(null),t.symlinks=n.symlinks||Object.create(null),function(t,e){t.ignore=e.ignore||[],Array.isArray(t.ignore)||(t.ignore=[t.ignore]),t.ignore.length&&(t.ignore=t.ignore.map(Hs))}(t,n),t.changedCwd=!1;var r=process.cwd();Bs(n,"cwd")?(t.cwd=Ds.resolve(n.cwd),t.changedCwd=t.cwd!==r):t.cwd=r,t.root=n.root||Ds.resolve(t.cwd,"/"),t.root=Ds.resolve(t.root),"win32"===process.platform&&(t.root=t.root.replace(/\\/g,"/")),t.cwdAbs=Ls(t.cwd)?t.cwd:Ws(t,t.cwd),"win32"===process.platform&&(t.cwdAbs=t.cwdAbs.replace(/\\/g,"/")),t.nomount=!!n.nomount,n.nonegate=!0,n.nocomment=!0,t.minimatch=new Ms(e,n),t.options=t.minimatch.options}function $s(t){for(var e=t.nounique,n=e?[]:Object.create(null),r=0,i=t.matches.length;rthis.maxLength)return!1;if(!this.stat&&oa(this.cache,e)){var r=this.cache[e];if(Array.isArray(r)&&(r="DIR"),!n||"DIR"===r)return r;if(n&&"FILE"===r)return!1}var i=this.statCache[e];if(!i){var o;try{o=Js.lstatSync(e)}catch(t){if(t&&("ENOENT"===t.code||"ENOTDIR"===t.code))return this.statCache[e]=!1,!1}if(o&&o.isSymbolicLink())try{i=Js.statSync(e)}catch(t){i=o}else i=o}return this.statCache[e]=i,r=!0,i&&(r=i.isDirectory()?"DIR":"FILE"),this.cache[e]=this.cache[e]||r,(!n||"FILE"!==r)&&r},la.prototype._mark=function(t){return ra.mark(this,t)},la.prototype._makeAbs=function(t){return ra.makeAbs(this,t)}),Zs}var pa,ha=!1;function da(t,e){if(t&&e)return da(t)(e);if("function"!=typeof t)throw new TypeError("need wrapper function");return Object.keys(t).forEach((function(e){n[e]=t[e]})),n;function n(){for(var e=new Array(arguments.length),n=0;nr?(n.splice(0,r),process.nextTick((function(){e.apply(null,i)}))):delete Ea[t]}}))}(t))}function Pa(t){for(var e=t.length,n=[],r=0;r1)return!0;for(var i=0;ithis.maxLength)return e();if(!this.stat&&Ua(this.cache,n)){var i=this.cache[n];if(Array.isArray(i)&&(i="DIR"),!r||"DIR"===i)return e(null,i);if(r&&"FILE"===i)return e()}var o=this.statCache[n];if(void 0!==o){if(!1===o)return e(null,o);var s=o.isDirectory()?"DIR":"FILE";return r&&"FILE"===s?e():e(null,s,o)}var a=this,c=$a("stat\0"+n,(function(r,i){if(i&&i.isSymbolicLink())return ja.stat(n,(function(r,o){r?a._stat2(t,n,null,i,e):a._stat2(t,n,r,o,e)}));a._stat2(t,n,r,i,e)}));c&&ja.lstat(n,c)},Ja.prototype._stat2=function(t,e,n,r,i){if(n&&("ENOENT"===n.code||"ENOTDIR"===n.code))return this.statCache[e]=!1,i();var o="/"===t.slice(-1);if(this.statCache[e]=r,"/"===e.slice(-1)&&r&&!r.isDirectory())return i(null,!1,r);var s=!0;return r&&(s=r.isDirectory()?"DIR":"FILE"),this.cache[e]=this.cache[e]||s,o&&"FILE"===s?i():i(null,s,r)}}function Xa(){return Qa||(Qa=!0,Ya()),Ia}var tc,ec,nc,rc,ic,oc,sc,ac,cc,uc=!1;function lc(t){["unlink","chmod","stat","lstat","rmdir","readdir"].forEach((function(e){t[e]=t[e]||rc[e],t[e+="Sync"]=t[e]||rc[e]})),t.maxBusyTries=t.maxBusyTries||3,t.emfileWait=t.emfileWait||1e3,!1===t.glob&&(t.disableGlob=!0),t.disableGlob=t.disableGlob||!1,t.glob=t.glob||sc}function fc(t,e,n){"function"==typeof e&&(n=e,e={}),ec(t,"rimraf: missing path"),ec.equal(typeof t,"string","rimraf: path should be a string"),ec.equal(typeof n,"function","rimraf: callback function required"),ec(e,"rimraf: invalid options argument provided"),ec.equal(typeof e,"object","rimraf: options should be object"),lc(e);var r=0,i=null,o=0;if(e.disableGlob||!ic.hasMagic(t))return s(null,[t]);function s(t,s){return t?n(t):0===(o=s.length)?n():void s.forEach((function(t){pc(t,e,(function s(a){if(a){if(("EBUSY"===a.code||"ENOTEMPTY"===a.code||"EPERM"===a.code)&&r1&&(e=n.shift()),t=n.shift(),u.readdir(r,(function(n,i){return null!=n?t(n):(e&&(i=l.filterExtensions(i,e)),i=(i=i.sort((function(t,e){return t.toLowerCase().localeCompare(e.toLowerCase())}))).map((function(t){return v.join(r,t)})),t(null,i))}))},filterExtensions:function(t,e){return e=e.map((function(t){return""===t?t:"."+t.replace(/^\./,"")})),t.filter((function(t){return _.include(e,v.extname(t))}))},listTreeSync:function(t){var e,n;return n=[],e=function(t){return n.push(t),!0},l.traverseTreeSync(t,e,e),n},move:function(t,e,n){return p(t,e,(function(r,i){var o,s;if(!r)return i?(s=v.dirname(e),u.exists(s,(function(r){if(!r)return l.makeTree(s,(function(r){if(!r)return u.rename(t,e,n);n(r)}));u.rename(t,e,n)}))):((o=new Error("'"+e+"' already exists.")).code="EEXIST",void n(o));n(r)}))},moveSync:function(t,e){var n,r;if(!h(t,e))throw(n=new Error("'"+e+"' already exists.")).code="EEXIST",n;return r=v.dirname(e),u.existsSync(r)||l.makeTreeSync(r),u.renameSync(t,e)},removeSync:function(t){return y.sync(t)},remove:function(t,e){return y(t,e)},writeFileSync:function(t,e,n){return m.sync(v.dirname(t)),u.writeFileSync(t,e,n)},writeFile:function(t,e,n,r){return r=_.last(arguments),m(v.dirname(t),(function(i){return null!=i?"function"==typeof r?r(i):void 0:u.writeFile(t,e,n,r)}))},copy:function(t,e,n){return m(v.dirname(e),(function(r){var i,o;if(null==r)return(o=u.createReadStream(t)).on("error",(function(t){return"function"==typeof n&&n(t),n=null})),(i=u.createWriteStream(e)).on("error",(function(t){return"function"==typeof n&&n(t),n=null})),i.on("close",(function(){return"function"==typeof n&&n(),n=null})),o.pipe(i);"function"==typeof n&&n(r)}))},copySync:function(t,e){var n,r,i,o,s,a,c;for(o=u.readdirSync(t),m.sync(e),c=[],s=0,a=o.length;s0;)r=new Buffer(n),i=u.readSync(s,r,0,r.length,o),u.writeSync(a,r,0,i,o),c.push(o+=i);return c}finally{null!=s&&u.closeSync(s),null!=a&&u.closeSync(a)}},makeTreeSync:function(t){if(!l.isDirectorySync(t))return m.sync(t)},makeTree:function(t,e){return l.isDirectory(t,(function(n){return n?"function"==typeof e?e():void 0:m(t,(function(t){return"function"==typeof e?e(t):void 0}))}))},traverseTreeSync:function(t,e,n){var r;if(null==n&&(n=e),l.isDirectorySync(t))return(r=function(t,e,n){var i,o,s,a,c,l,f;for(c=0,l=(f=u.readdirSync(t)).length;c0},p=function(t,e,n){return u.stat(t,(function(r,i){if(!r)return u.stat(e,(function(r,o){if(!r||"ENOENT"!==r.code)return n(void 0,t.toLowerCase()===e.toLowerCase()&&i.dev===o.dev&&i.ino===o.ino);n(void 0,!0)}));n(r)}))},h=function(t,e){var n,r;return r=b(t),n=b(e),!r||!n||t.toLowerCase()===e.toLowerCase()&&r.dev===n.dev&&r.ino===n.ino},Ci=new Proxy({},{get:function(t,e){var n;return null!=(n=l[e])?n:u[e]},set:function(t,e,n){return l[e]=n}})}).call(Ci);class wc{constructor(t){this.props=t,this.model=atom.workspace.buildTextEditor({mini:!0,softWrapped:!0,lineNumberGutterVisible:!1}),this.element=atom.views.getView(this.model),this.model.setText(t.initialText),t.selectAll?this.model.selectAll():this.model.getLastCursor().moveToEndOfScreenLine(),this.setReadOnly(),this.setGrammar(),this.model.scrollToBufferPosition([0,0])}async update(t){this.element=atom.views.getView(this.model),this.props={...this.props,...t},this.setReadOnly(),this.setGrammar()}focus(){this.element.focus()}getModel(){return this.model}setReadOnly(){this.model.setReadOnly(!!this.props.readOnly)}setGrammar(){void 0!==this.props.grammar?atom.textEditors.setGrammarOverride(this.model,this.props.grammar):atom.textEditors.clearGrammarOverride(this.model)}}class bc{constructor(t){this.props=t,ft.initialize(this)}async update(t){this.props={...this.props,...t},await ft.update(this)}render(){return ft.dom("div",{className:"atomts-rename-view",ref:"main"},ft.dom("div",{className:"block"},ft.dom("div",null,ft.dom("span",{ref:"title"},this.props.title),ft.dom("span",{className:"subtle-info-message"},ft.dom("span",null,"Close this panel with "),ft.dom("span",{className:"highlight"},"esc"),ft.dom("span",null," key. And commit with the "),ft.dom("span",{className:"highlight"},"enter"),ft.dom("span",null," key."))),ft.dom("div",{className:"find-container block"},ft.dom("div",{className:"editor-container"},ft.dom(wc,{ref:"editor",initialText:this.props.initialText,selectAll:this.props.selectAll}))),this.renderValidationMessage()))}async destroy(){await ft.destroy(this)}focus(){return this.refs.editor.focus()}getText(){return this.refs.editor.getModel().getText()}renderValidationMessage(){return void 0!==this.props.validationMessage?ft.dom("div",{className:"highlight-error"},this.props.validationMessage):null}}async function _c(t){const e=new bc({title:t.title,initialText:t.text,selectAll:t.autoSelect}),n=atom.workspace.addModalPanel({item:e,priority:1e3}),r=document.activeElement;e.focus();const i=new d;try{return await new Promise((n=>{i.add(atom.commands.add(e.refs.main,{"core:cancel":()=>{n(void 0)},"core:confirm":()=>{const r=e.getText(),i=t.onValidate(r);i?Kt(e.update({validationMessage:i})):n(r)}}))}))}finally{n.destroy(),i.dispose(),r&&r.focus()}}function xc(t){const e=new d;for(const n of ri)if("atom-text-editor"===n.selector){const r=n.desc(t);e.add(atom.commands.add(n.selector,n.command,{...r,async didDispatch(t){try{const e=t.currentTarget.getModel();fe(e)?await r.didDispatch(e,(()=>t.abortKeyBinding())):(t.abortKeyBinding(),pe(e)&&atom.notifications.addWarning("Atom-TypeScript cancelled last command: Current editor has no file path",{description:`Atom-TypeScript needs to determine the file path of the current editor to execute \`${n.command}\`, which it failed to do. You probably just need to save the current file somewhere.`,dismissable:!0}))}catch(t){Sc(t)}}}))}else{const r=n.desc(t);e.add(atom.commands.add(n.selector,n.command,{...r,async didDispatch(){try{await r.didDispatch()}catch(t){Sc(t)}}}))}return e}function Sc(t){atom.notifications.addFatalError("Something went wrong, see details below.",{detail:t.message,dismissable:!0,stack:t.stack})}ii("atom-text-editor","typescript:rename-file",(t=>({description:"Rename current file",async didDispatch(e){const n=e.getPath();if(!n)return;const r=await _c({autoSelect:!0,title:"Rename File",text:n,onValidate:t=>t.trim()?"":"If you want to abort : Press esc to exit"});if(!r)return;const i=await t.getClient(n),o=await i.execute("getEditsForFileRename",{oldFilePath:n,newFilePath:r});await t.applyEdits(o.body),await new Promise(((t,i)=>{Ci.move(n,r,(n=>{n?i(n):(e.getBuffer().setPath(r),t())}))}))}}))),ii("atom-text-editor","typescript:rename-refactor",(t=>({description:"Rename symbol under text cursor everywhere it is used",async didDispatch(e){const n=he(e);if(!n)return;const r=await t.getClient(n.file),i=await r.execute("rename",n),{info:o,locs:s}=i.body;if(!o.canRename)return void atom.notifications.addInfo("AtomTS: Rename not available at cursor location");const a=await _c({autoSelect:!0,title:"Rename Variable",text:o.displayName,onValidate:t=>t.replace(/\s/g,"")!==t.trim()?"The new variable must not contain a space":t.trim()?"":"If you want to abort : Press esc to exit"});void 0!==a&&await t.applyEdits(s.map((t=>({fileName:t.file,textChanges:t.locs.map((t=>({...t,newText:a})))}))))}}))),ii("atom-workspace","typescript:restart-all-servers",(t=>({description:"Kill all tsserver instances. They will be auto-restarted",async didDispatch(){t.killAllServers()}}))),ii("atom-workspace","typescript:return-from-declaration",(t=>({description:"If used `go-to-declaration`, return to previous text cursor position",async didDispatch(){await t.histGoBack()}}))),ii("atom-workspace","typescript:show-editor-position-history",(t=>({description:"If used `go-to-declaration`, return to previous text cursor position",async didDispatch(){await t.histShowHistory()}}))),ii("atom-text-editor","typescript:toggle-semantic-view",(t=>({description:"Toggle semantic view outline",didDispatch(){t.toggleSemanticViewController()}}))),ii("atom-text-editor","typescript:show-tooltip",(t=>({description:"Show type tooltip at current text cursor position",didDispatch:async e=>t.showTooltipAt(e)}))),ii("atom-text-editor","typescript:show-signature-help",(t=>({description:"Show signature help tooltip at current text cursor position",didDispatch:async e=>t.showSigHelpAt(e)}))),ii("atom-text-editor","typescript:hide-signature-help",(t=>({description:"Hide the currently visible signature help",async didDispatch(e,n){t.hideSigHelpAt(e)||n()}}))),ii("atom-text-editor","typescript:signature-help-next",(t=>({description:"Show next signature help if available",async didDispatch(e,n){t.rotateSigHelp(e,1)||n()}}))),ii("atom-text-editor","typescript:signature-help-prev",(t=>({description:"Show previous signature help if available",async didDispatch(e,n){t.rotateSigHelp(e,-1)||n()}}))),ii("atom-text-editor","typescript:toggle-file-symbols",(t=>({description:"Toggle view for finding file symbols",async didDispatch(e){t.toggleFileSymbolsView(e)}}))),ii("atom-text-editor","typescript:toggle-project-symbols",(t=>({description:"Toggle view for finding file symbols",async didDispatch(e){t.toggleProjectSymbolsView(e)}})));class kc{constructor(t,e){this.children=e,this.props={...t,delay:{show:0,hide:0}},ft.initialize(this),this.tooltipDisposable=atom.tooltips.add(this.element,this.props)}async update(t,e){this.props={...this.props,...t},this.children=e,await ft.update(this),this.tooltipDisposable.dispose(),this.tooltipDisposable=atom.tooltips.add(this.element,this.props)}render(){return ft.dom("div",{className:"inline-block"},this.children?this.children:null)}async destroy(){await ft.destroy(this),this.tooltipDisposable.dispose()}}class Ec{constructor(t){this.hiddenBuildStatus=!1,this.disposables=new d,this.buildStatusClicked=()=>{this.props.buildStatus.success||atom.notifications.addError("Build failed",{detail:this.props.buildStatus.message,dismissable:!0})},this.props={...t},this.setHideBuildStatus(atom.config.get("atom-typescript").buildStatusTimeout),this.resetBuildStatusTimeout(),ft.initialize(this),this.disposables.add(atom.config.onDidChange("atom-typescript.buildStatusTimeout",(({newValue:t})=>{this.setHideBuildStatus(t),Kt(this.update({}))})))}async update(t){const e=void 0!==t.buildStatus&&t.buildStatus.success!==this.props.buildStatus.success;this.props={...this.props,...t},e&&this.resetBuildStatusTimeout(),await ft.update(this)}render(){if(this.hiddenBuildStatus)return ft.dom("span",null);let t,e;return this.props.buildStatus.success?(t="highlight-success",e="Emit Success"):(t="highlight-error",e="Emit Failed"),ft.dom(kc,{title:this.props.buildStatus.success?"Build was successful":"Build failed; click to show error message"},ft.dom("span",{className:t,on:{click:this.buildStatusClicked}},e))}async destroy(){await ft.destroy(this)}resetBuildStatusTimeout(){this.hiddenBuildStatus=!1,this.props.buildStatus.success&&this.hideBuildStatus()}setHideBuildStatus(t){this.hideBuildStatus=t>0?Qt.debounce((()=>{this.hiddenBuildStatus=!0,Kt(ft.update(this))}),1e3*t):0===t?()=>{this.hiddenBuildStatus=!0}:()=>{}}}class Cc{constructor(t){this.props={...t},ft.initialize(this)}async update(t){this.props={...this.props,...t},await ft.update(this)}render(){return ft.dom(kc,{title:()=>this.props.tsConfigPath.startsWith("/dev/null")?"No tsconfig.json":"Click to open "+atom.project.relativize(this.props.tsConfigPath)},ft.dom("a",{className:"inline-block",href:"",on:{click:t=>{t.preventDefault(),this.openConfigPath()}}},this.props.tsConfigPath.startsWith("/dev/null")?"No project":b((t=this.props.tsConfigPath,"~"+atom.project.relativize(t)))));var t}async destroy(){await ft.destroy(this)}openConfigPath(){this.props.tsConfigPath.startsWith("/dev/null")?atom.notifications.addInfo("No tsconfig for current file"):Kt(atom.workspace.open(this.props.tsConfigPath))}}class Tc{constructor(t={}){this.props={visible:!0,pending:[],progress:{max:0,value:0},...t},ft.initialize(this)}async update(t){this.props={...this.props,...t},await ft.update(this)}render(){return ft.dom("ts-status-panel",{className:this.props.visible?"":"hide"},this.renderVersion(),this.renderPending(),this.renderConfigPath(),this.renderStatus(),this.renderProgress())}async destroy(){await ft.destroy(this)}dispose(){Kt(this.destroy())}async show(){await this.update({visible:!0})}async hide(){await this.update({visible:!1})}renderVersion(){return void 0!==this.props.clientVersion?ft.dom(kc,{title:"Active TypeScript version"},this.props.clientVersion):null}renderPending(){return this.props.pending.length>0?ft.dom(kc,{title:`Pending Requests:
    ${this.props.pending.map((({title:t})=>`
  • ${t}
  • `)).join("")}
`,html:!0},ft.dom("span",{ref:"pendingCounter"},this.props.pending.length.toString()),ft.dom("span",{ref:"pendingSpinner",className:"loading loading-spinner-tiny inline-block",style:{marginLeft:"5px",opacity:"0.5",verticalAlign:"sub"}})):null}renderConfigPath(){return void 0!==this.props.tsConfigPath?ft.dom(Cc,{tsConfigPath:this.props.tsConfigPath}):null}renderStatus(){return this.props.buildStatus?ft.dom(Ec,{buildStatus:this.props.buildStatus}):null}renderProgress(){return this.props.progress.value0;)e=this.prevCursorPositions.pop();if(e)return this.open({file:e.file,start:{line:e.line,offset:e.offset}});atom.notifications.addInfo("AtomTS: Previous position not found.")}async goForward(t,e){const n=he(t);if(n){this.prevCursorPositions.push(n);const t=100;this.prevCursorPositions.length>t&&this.prevCursorPositions.splice(0,this.prevCursorPositions.length-t)}return this.open(e)}async showHistory(){const t=await ni({items:this.getHistory().slice().reverse().map(((t,e)=>({...t,idx:e}))),itemTemplate:(t,e)=>ft.dom("li",{className:"two-lines"},ft.dom("div",{className:"primary-line"},ft.dom(Gr,{label:t.file,query:e.getFilterQuery()})),ft.dom("div",{className:"secondary-line"},"Line: ",t.line,", column: ",t.offset)),itemFilterKey:"file"});t&&await this.goHistory(t.idx+1)}getHistory(){return this.prevCursorPositions}dispose(){}serialize(){return this.prevCursorPositions}async open(t){const e=await atom.workspace.open(t.file,{initialLine:t.start.line-1,initialColumn:t.start.offset-1,searchAllPanes:!0});return atom.workspace.isTextEditor(e)&&e.scrollToCursorPosition({center:!0}),e}}class Pc{constructor(t,e){let n,r,i;this.getClient=t,this.editor=e,this.disposables=new d,this.occurrenceMarkers=[],this.disposed=!1;let o=!1;this.disposables.add(atom.config.observe("atom-typescript.occurrenceHighlightDebounceTimeout",(t=>{n=Qt.debounce((()=>{Kt(this.update())}),t),i=3.5*t})),e.onDidChangeCursorPosition((()=>{void 0===r?n():o=!0})),e.onDidChangePath((()=>n())),e.onDidChangeGrammar((()=>n())),e.onDidChange((()=>{void 0!==r&&clearTimeout(r),r=window.setTimeout((()=>{o&&(n(),o=!1),r=void 0}),i)})))}dispose(){this.disposed||(this.disposed=!0,this.disposables.dispose(),this.clearMarkers())}clearMarkers(){for(const t of this.occurrenceMarkers)t.destroy();this.occurrenceMarkers=[]}async update(){if(this.disposed)return;if(!fe(this.editor))return void this.clearMarkers();const t=this.editor.getPath();if(void 0===t)return;const e=await this.getClient(t);if(this.disposed)return;const n=this.editor.getLastCursor().getBufferPosition();try{const r=await e.execute("documentHighlights",{file:t,line:n.row+1,offset:n.column+1,filesToSearch:[t]});if(this.disposed)return;const i=Array.from(this.getNewOccurrenceMarkers(r.body));for(const t of this.occurrenceMarkers)i.includes(t)||t.destroy();this.occurrenceMarkers=i}catch(t){window.atom_typescript_debug&&console.error(t)}}*getNewOccurrenceMarkers(t){for(const e of t)if(e.file===this.editor.getPath())for(const t of e.highlightSpans){const e=Xt(t),n=this.occurrenceMarkers.find((t=>t.getBufferRange().isEqual(e)));if(n)yield n;else{const t=this.editor.markBufferRange(e);this.editor.decorateMarker(t,{type:"highlight",class:"atom-typescript-occurrence"}),yield t}}}}class Oc{constructor(t){this.disposables=new d,this.disposables.add(atom.workspace.observeTextEditors((e=>{const n=new Pc(t,e);this.disposables.add(n,e.onDidDestroy((()=>{this.disposables.remove(n),n.dispose()})))})))}dispose(){this.disposables.dispose()}}function Ic(t,e,n,r){let i,o=n.right,s=!1,a="";t.style.left="",t.style.top="",t.style.right="",t.style.bottom="";const c=e.clientWidth,u=getComputedStyle(t),l=parseInt(u.width,10),f=parseInt(u.height,10);if(o+l>=c&&(o=c-l-10),o<0&&(a="pre-wrap",o=10,s=10),"bottom"===r){const t=e.clientHeight;i=n.bottom,i+f>=t&&(i=n.top-f)}else"top"===r&&(i=n.top-f,i<0&&(i=n.bottom));t.style.left=o+"px",t.style.top=i+"px",!1!==s&&(t.style.right=s+"px"),a&&(t.style.whiteSpace=a)}class jc{constructor(t){this.parent=t,this.props={left:0,right:0,top:0,bottom:0},ft.initialize(this)}async destroy(){return ft.destroy(this)}async update(t){var e,n,r;void 0!==(null===(e=t.sigHelp)||void 0===e?void 0:e.selectedItemIndex)&&(null===(n=t.sigHelp)||void 0===n?void 0:n.selectedItemIndex)!==(null===(r=this.props.sigHelp)||void 0===r?void 0:r.selectedItemIndex)&&(this.props.visibleItem=void 0),this.props={...this.props,...t},void 0===this.props.sigHelp?this.props.visibleItem=void 0:void 0!==this.props.visibleItem&&(this.props.visibleItem=this.props.visibleItem%this.props.sigHelp.items.length,this.props.visibleItem<0&&(this.props.visibleItem+=this.props.sigHelp.items.length)),await ft.update(this)}writeAfterUpdate(){Ic(this.element,this.parent,this.props,atom.config.get("atom-typescript").sigHelpPosition)}render(){return ft.dom("div",{className:"atom-typescript-tooltip tooltip",key:this.sigHelpHash()},ft.dom("div",{className:"tooltip-inner"},this.tooltipContents()))}sigHelpHash(){if(!this.props.sigHelp)return;const{start:t,end:e}=this.props.sigHelp.applicableSpan;return`${t.line}:${t.offset}-${e.line}:${e.offset}`}tooltipContents(){if(!this.props.sigHelp)return"…";const{sigHelp:t}=this.props,e=void 0!==this.props.visibleItem?this.props.visibleItem:t.selectedItemIndex,n=t.items.length,r=["atom-typescript-tooltip-signature-help"];function i(n){const i=[];return n===t.selectedItemIndex&&i.push("atom-typescript-tooltip-signature-help-selected"),n===e&&i.push("atom-typescript-tooltip-signature-help-visible"),[...r,...i].join(" ")}return n>1&&r.push("atom-typescript-tooltip-signature-help-changable"),t.items.map(((e,n)=>ft.dom("div",{className:i(n)},ft.dom("div",null,oe(e.prefixDisplayParts),this.renderSigHelpParams(e.parameters,t.argumentIndex),oe(e.suffixDisplayParts),ft.dom("div",{className:"atom-typescript-tooltip-signature-help-documentation"},oe(e.documentation))))))}renderSigHelpParams(t,e){return t.map(((t,n)=>ft.dom("span",{className:"atom-typescript-tooltip-signature-help-parameter"},n>0?", ":null,ft.dom("span",{className:n===e?"atom-typescript-tooltip-signature-help-selected":void 0},oe(t.displayParts)))))}}class Nc{constructor(t,e,n){this.deps=t,this.editor=e,this.cancelled=!1,this.disposables=new h.CompositeDisposable;const r=atom.views.getView(this.editor);this.view=new jc(r),r.appendChild(this.view.element);const i=Qt.debounce(this.updateTooltip.bind(this),100,{leading:!0});this.disposables.add(this.editor.onDidChangeCursorPosition((t=>{n=t.newBufferPosition,Kt(i(n))})),r.onDidChangeScrollTop((()=>{setImmediate((()=>this.updateTooltipPosition(n)))})),r.onDidChangeScrollLeft((()=>{setImmediate((()=>this.updateTooltipPosition(n)))}))),Kt(this.updateTooltip(n))}isDisposed(){return this.cancelled}dispose(){this.cancelled||(this.cancelled=!0,this.disposables.dispose(),Kt(this.view.destroy()))}async rotateSigHelp(t){const{visibleItem:e,sigHelp:n}=this.view.props,r=void 0!==e?e:void 0!==(null==n?void 0:n.selectedItemIndex)?null==n?void 0:n.selectedItemIndex:0;await this.view.update({visibleItem:r+t})}async updateTooltip(t){if(this.cancelled)return;let e;try{e=this.computeTooltipPosition(t)}catch(t){return void console.warn(t)}const n=await this.getMessage(t);this.cancelled||(n?await this.view.update({...e,sigHelp:n}):this.dispose())}updateTooltipPosition(t){if(this.cancelled)return;const e=this.computeTooltipPosition(t);Kt(this.view.update({...e}))}computeTooltipPosition(t){const e=atom.views.getView(this.editor),n=e.pixelPositionForBufferPosition(t),r=e.querySelector(".lines").getBoundingClientRect(),i=this.editor.getLineHeightInPixels(),o=e.getBoundingClientRect(),s=n.top+r.top-o.top+i/2,a=n.left+r.left-o.left,c=.7*i;return{left:a,right:a,top:s-c,bottom:s+c}}async getMessage(t){if(!fe(this.editor))return;const e=this.editor.getPath();if(void 0===e)return;const n=await this.deps.getClient(e);try{return(await n.execute("signatureHelp",{file:e,line:t.row+1,offset:t.column+1})).body}catch(t){return}}}class Dc{constructor(t){this.deps=t,this.subscriptions=new h.CompositeDisposable,this.editorMap=new WeakMap,this.stoppedChanging=t=>e=>{if(!atom.config.get("atom-typescript.sigHelpDisplayOnChange"))return;if(void 0===t.getPath())return;const n=t.getLastCursor().getBufferPosition(),[r]=e.changes.filter((t=>t.newRange.containsPoint(n)));r&&null!==r.newText.match(/[<(,]/)&&Kt(this.showTooltip(t,n))},this.subscriptions.add(atom.workspace.observeTextEditors((t=>{const e=new h.CompositeDisposable;e.add(t.onDidDestroy((()=>{e.dispose(),this.subscriptions.remove(e);const n=this.editorMap.get(t);n&&n.dispose()})),t.onDidStopChanging(this.stoppedChanging(t))),this.subscriptions.add(e)})))}dispose(){this.subscriptions.dispose();for(const t of atom.workspace.getTextEditors()){const e=this.editorMap.get(t);e&&e.dispose()}}async showTooltipAt(t){const e=t.getLastCursor().getBufferPosition();return this.showTooltip(t,e)}rotateSigHelp(t,e){const n=this.editorMap.get(t);return!(!n||n.isDisposed())&&(Kt(n.rotateSigHelp(e)),!0)}hideTooltipAt(t){const e=this.editorMap.get(t);return!(!e||e.isDisposed())&&(e.dispose(),!0)}async showTooltip(t,e){const n=this.editorMap.get(t);n&&!n.isDisposed()||this.editorMap.set(t,new Nc(this.deps,t,e))}}function Fc(t,e,n,r){const i=e=>{const i=e.target.closest(n);i&&t.contains(i)&&r(e)};return t.addEventListener(e,i),new v((()=>{t.removeEventListener(e,i)}))}class Lc{constructor(){this.tooltip=null,this.props={left:0,right:0,top:0,bottom:0},ft.initialize(this)}async destroy(){return ft.destroy(this)}async update(t){this.props={...this.props,...t},this.tooltip=await Er(this.props.info,ft,(t=>ft.dom("div",{className:"atom-typescript-tooltip-tooltip-code"},t))),await ft.update(this)}writeAfterUpdate(){Ic(this.element,document.body,this.props,atom.config.get("atom-typescript").tooltipPosition)}render(){return ft.dom("div",{className:"atom-typescript-tooltip tooltip"},ft.dom("div",{className:"tooltip-inner"},this.tooltip))}}class Mc{constructor(t,e,n,r){this.getClient=t,this.cancelled=!1,Kt(this.initialize(e,n,r))}dispose(){this.cancelled=!0,this.view&&(Kt(this.view.destroy()),this.view=void 0)}async initialize(t,e,n){const r=atom.views.getView(t);let i,o;try{i=r.pixelPositionForBufferPosition(n),o=r.pixelPositionForBufferPosition(n.traverse([0,1]))}catch(e){return void console.warn(e)}if(i.left>=o.left)return;const s=.7*t.getLineHeightInPixels(),a={left:e.clientX,right:e.clientX,top:e.clientY-s,bottom:e.clientY+s},c=await this.getMessage(t,n);this.cancelled||void 0!==c&&await this.showTooltip(a,c)}async getMessage(t,e){let n;const r=await this.getClient(t);if(!r)return;const i=t.getPath();try{if(void 0===i)return;n=await r.execute("quickinfo",{file:i,line:e.row+1,offset:e.column+1})}catch(t){return}return n.body}async showTooltip(t,e){this.view=new Lc,document.body.appendChild(this.view.element),await this.view.update({...t,info:e})}}class Rc{constructor(t){this.getClientInternal=t,this.subscriptions=new h.CompositeDisposable,this.editorMap=new WeakMap,this.getClient=async t=>{const e=t.getPath();if(void 0!==e&&fe(t)&&S.existsSync(e))return this.getClientInternal(e)},this.clearExprTypeTimeout=()=>{void 0!==this.exprTypeTimeout&&(clearTimeout(this.exprTypeTimeout),this.exprTypeTimeout=void 0),this.hideExpressionType()},this.trackMouseMovement=t=>{let e;return n=>{const r=function(t,e){const n=atom.views.getView(t).getComponent().screenPositionForMouseEvent(e);if(!isNaN(n.row)&&!isNaN(n.column))return t.bufferPositionForScreenPosition(n)}(t,n);r&&(e&&e.isEqual(r)&&this.pendingTooltip||(e=r,this.clearExprTypeTimeout(),this.exprTypeTimeout=window.setTimeout((()=>this.showExpressionType(t,n,r)),atom.config.get("atom-typescript").tooltipDelay)))}},this.subscriptions.add(atom.workspace.observeTextEditors((t=>{const e=atom.views.getView(t),n=e.querySelector(".lines");this.editorMap.set(t,{rawView:e,lines:n});const r=new h.CompositeDisposable;r.add(Fc(e,"mousemove",".scroll-view",this.trackMouseMovement(t)),Fc(e,"mouseout",".scroll-view",this.clearExprTypeTimeout),Fc(e,"keydown",".scroll-view",this.clearExprTypeTimeout),e.onDidChangeScrollTop(this.clearExprTypeTimeout),e.onDidChangeScrollLeft(this.clearExprTypeTimeout),t.onDidDestroy((()=>{r.dispose(),this.subscriptions.remove(r),this.clearExprTypeTimeout()}))),this.subscriptions.add(r)})))}dispose(){this.subscriptions.dispose(),this.clearExprTypeTimeout()}showExpressionAt(t){const e=t.getLastCursor().getBufferPosition(),n=atom.views.getView(t);let r;try{r=n.pixelPositionForBufferPosition(e)}catch(t){return void console.warn(t)}this.showExpressionType(t,this.mousePositionForPixelPosition(t,r),e)}mousePositionForPixelPosition(t,e){const n=atom.views.getView(t).querySelector(".lines").getBoundingClientRect();return{clientY:e.top+n.top+t.getLineHeightInPixels()/2,clientX:e.left+n.left}}showExpressionType(t,e,n){this.pendingTooltip&&this.pendingTooltip.dispose(),this.pendingTooltip=new Mc(this.getClient,t,e,n)}hideExpressionType(){this.pendingTooltip&&(this.pendingTooltip.dispose(),this.pendingTooltip=void 0)}}class Bc{constructor(t){this.getClient=t,this.subscriptions=new d;const e=atom.workspace.paneForURI("atom-typescript://semantic-view");e&&(this.view=e.itemForURI("atom-typescript://semantic-view")),this.view&&Kt(this.view.setGetClient(this.getClient)),this.subscriptions.add(new v((()=>{this.view&&(atom.workspace.hide(this.view),Kt(this.view.destroy()))})),atom.config.observe("atom-typescript.showSemanticView",(t=>{t?Kt(this.show()):this.hide()})))}dispose(){this.subscriptions.dispose()}async toggle(){this.view?await atom.workspace.toggle(this.view):await this.show()}async show(){this.view||(this.view=en.create({navTree:null}),await this.view.setGetClient(this.getClient)),await atom.workspace.open(this.view,{searchAllPanes:!0})}hide(){return!!this.view&&atom.workspace.hide(this.view)}}class zc{constructor(t){this.position=t.position,this.name=t.name,this.type=t.type,this.parent=t.parent,this.file=t.file}static fromNavTree(t,e){const n=t.spans[0].start;return new zc({name:t.text,type:t.kind,position:{row:n.line-1,column:n.offset-1},parent:null!=e?e:null})}static fromNavto(t,e){const n=t.start;return new zc({name:t.name,type:t.kind,position:{row:n.line-1,column:n.offset-1},parent:null!=e?e:null,file:t.file})}}async function qc(t,e){const n=await async function(t,e){try{const n=await e.getClient(t);return(await n.execute("navtree",{file:t})).body}catch(e){console.error(t,e)}}(t,e);return n&&n.childItems?Array.from(Uc(n.childItems)):[]}async function Hc(t,e,n){const r=await async function(t,e,n){try{const r=await n.getClient(t);return(await r.execute("navto",{file:t,currentFileOnly:!1,searchValue:e,maxResultCount:1e3})).body}catch(e){console.error(t,e)}}(t,e,n);return r?Array.from(function*(t,e){for(const n of t)yield zc.fromNavto(n,e)}(r)):[]}function*Uc(t,e){t.sort(((t,e)=>t.spans[0].start.line-e.spans[0].start.line));for(const n of t){const t=zc.fromNavTree(n,e);yield t,n.childItems&&(yield*Uc(n.childItems,t))}}async function $c(t,e,n){if(void 0!==t.file)return n(e,{file:t.file,start:{line:t.position.row+1,offset:t.position.column+1}})}async function Vc(t,e){const n=t.getPath();if(void 0!==n){let r;atom.config.get("symbols-view.quickJumpToFileSymbol")&&(r=function(t){const e=atom.views.getView(t).getScrollTop();return{bufferRanges:t.getSelectedBufferRanges(),scrollTop:e}}(t));const i=await ni({items:qc(n,e),itemTemplate:({name:t,position:e},n)=>ft.dom("li",{className:"two-lines"},ft.dom("div",{className:"primary-line"},ft.dom(Gr,{label:t,query:n.getFilterQuery()})),ft.dom("div",{className:"secondary-line"},"Line "+(e.row+1))),didChangeSelection(e){atom.config.get("symbols-view.quickJumpToFileSymbol")&&e&&t.setCursorBufferPosition(e.position)},itemFilterKey:"name"});i?await $c(i,t,e.histGoForward):r&&function(t,{bufferRanges:e,scrollTop:n}){const r=atom.views.getView(t);t.setSelectedBufferRanges(e),r.setScrollTop(n)}(t,r)}}class Wc{constructor(t){this.deps=t}toggleFileView(t){Kt(Vc(t,this.deps))}toggleProjectView(t){Kt(async function(t,e){const n=t.getPath();if(void 0!==n){const r=await ni({items:t=>Hc(n,t,e),itemTemplate({name:t,position:e,file:n},r){const i=atom.project.relativize(n);return ft.dom("li",{className:"two-lines"},ft.dom("div",{className:"primary-line"},ft.dom(Gr,{label:t,query:r.getFilterQuery()})),ft.dom("div",{className:"secondary-line"},`File ${i} line ${e.row+1}`))},itemFilterKey:"name"});r&&await $c(r,t,e.histGoForward)}}(t,this.deps))}dispose(){}}class Gc{constructor(){this.errors=new Map,this.fileGrammars=new Map,this.pushErrors=Qt.debounce(this.pushErrors.bind(this),100)}*getErrorsInRange(t,e){for(const n of this.errors.values()){const r=n.get(w.normalize(t));r&&(yield*r.filter((t=>Xt(t).intersectsWith(e))))}}*getErrorsAt(t,e){for(const n of this.errors.values()){const r=n.get(w.normalize(t));r&&(yield*r.filter((t=>Xt(t).containsPoint(e))))}}setErrors(t,e,n){let r=this.errors.get(t);r||(r=new Map,this.errors.set(t,r)),r.set(w.normalize(e),n),this.pushErrors()}clearFileErrors(t){for(const e of this.errors.values())e.delete(t);this.pushErrors()}clear(){this.linter&&this.linter.clearMessages()}setLinter(t){this.linter=t,this.pushErrors()}dispose(){this.clear(),this.linter&&this.linter.dispose(),this.linter=void 0}pushErrors(){this.linter&&this.linter.setAllMessages(this.getLinterErrors())}getLinterErrors(){if(atom.config.get("atom-typescript.suppressAllDiagnostics"))return[];const t=[];for(const e of this.errors.values())for(const[n,r]of e){const e=atom.workspace.getTextEditors().find((t=>t.getPath()===n)),i=e?e.getGrammar().scopeName:this.selectGrammar(n);if(!Kc("suppressAllDiagnostics",i))for(const e of r){if(Kc("ignoredDiagnosticCodes",i).includes(""+e.code))continue;if(Kc("ignoreUnusedSuggestionDiagnostics",i)&&e.reportsUnnecessary)continue;if("suggestion"===e.category&&Kc("ignoredSuggestionDiagnostics",i).includes(""+e.code))continue;if(Kc("ignoreNonSuggestionSuggestionDiagnostics",i)&&"suggestion"===e.category&&!se(e.code,Zt.Suggestion))continue;let{start:r,end:o}=e;r&&o||(r=o={line:1,offset:1}),t.push({severity:this.getSeverity(Kc("unusedAsInfo",i),e),excerpt:e.text,location:{file:n,position:te(r,o)}})}}return t}selectGrammar(t){const e=this.fileGrammars.get(t);if(void 0!==e)return e;const n=atom.grammars.selectGrammar(t,"").scopeName;return this.fileGrammars.set(t,n),n}getSeverity(t,e){if(t&&6133===e.code)return"info";switch(e.category){case"error":return"error";case"warning":return"warning";default:return"info"}}}function Kc(t,e){return atom.config.get("atom-typescript."+t,{scope:[e]})}class Qc{constructor(t,e){let n;this.buffer=t,this.deps=e,this.events=new h.Emitter,this.compileOnSave=!1,this.subscriptions=new h.CompositeDisposable,this.on=this.events.on.bind(this.events),this.dispose=()=>{this.subscriptions.dispose(),Kt(this.close())},this.init=async()=>{this.state&&(await this.state.client.execute("open",{file:this.state.filePath,fileContent:this.buffer.getText()}),Kt(this.getErr({allFiles:!1,delay:0})))},this.close=async()=>{if(await this.openPromise,this.state){const t=this.state.client,e=this.state.filePath;this.deps.clearFileErrors(e),this.state.subscriptions.dispose(),this.state=void 0,await t.execute("close",{file:e})}},this.onDidChangePath=t=>{Kt(this.close().then((()=>{this.openPromise=this.open(t)})))},this.onDidSave=async()=>{await Promise.all([this.getErr({allFiles:!0,delay:100}),this.doCompileOnSave()])},this.onDidChangeText=async({changes:t})=>{if(0===t.length||!this.state)return;const{client:e,filePath:n}=this.state;await Promise.all(t.reduceRight(((t,{oldRange:r,newText:i})=>(t.push(e.execute("change",{file:n,line:r.start.row+1,offset:r.start.column+1,endLine:r.end.row+1,endOffset:r.end.column+1,insertString:i})),t)),[]))},this.subscriptions.add(atom.config.observe("atom-typescript.getErrDebounceTimeout",(t=>{n=Qt.debounce((()=>{Kt(this.getErr({allFiles:!1,delay:0}))}),t)})),t.onDidChangePath(this.onDidChangePath),t.onDidDestroy(this.dispose),t.onDidSave((()=>{Kt(this.onDidSave())})),t.onDidStopChanging((({changes:t})=>{t.length>0&&this.deps.reportBuildStatus(void 0)})),t.onDidChangeText((t=>{Kt(this.onDidChangeText(t)),n()}))),this.openPromise=this.open(this.buffer.getPath())}static create(t,e){const n=Qc.bufferMap.get(t);if(n)return n;{const n=new Qc(t,e);return Qc.bufferMap.set(t,n),n}}getPath(){return this.state&&this.state.filePath}getInfo(){if(this.state)return{clientVersion:this.state.client.version,tsConfigPath:this.state.configFile&&this.state.configFile.getPath()}}async getErr(t){if(!this.state)return;const e=t.allFiles?Array.from(function*(){for(const t of atom.workspace.getTextEditors())fe(t)&&(yield t.getPath())}()):[this.state.filePath];await this.state.client.execute("geterr",{files:e,delay:t.delay})}async compile(){if(!this.state)return;const{client:t,filePath:e}=this.state,n=await t.execute("compileOnSaveAffectedFileList",{file:e}),r=Qt.flatten(n.body.map((t=>t.fileNames)));if(0===r.length)return;const i=r.map((e=>t.execute("compileOnSaveEmitFile",{file:e})));if(!(await Promise.all(i)).every((t=>!!t.body)))throw new Error("Some files failed to emit")}async doCompileOnSave(){if(this.compileOnSave){this.deps.reportBuildStatus(void 0);try{await this.compile(),this.deps.reportBuildStatus({success:!0})}catch(t){const e=t;console.error("Save failed with error",e),this.deps.reportBuildStatus({success:!1,message:e.message})}}}async open(t){if(void 0===t||!ue(t))return this.close();{const e=await this.deps.getClient(t);this.state={client:e,filePath:t,configFile:void 0,subscriptions:new h.CompositeDisposable},this.state.subscriptions.add(e.on("restarted",(()=>Kt(this.init())))),await this.init();const n=await e.execute("projectInfo",{needFileNameList:!1,file:t});void 0!==n.body.configFileName&&(this.state.configFile=new h.File(n.body.configFileName),await this.readConfigFile(),this.state.subscriptions.add(this.state.configFile.onDidChange((()=>Kt(this.readConfigFile()))))),this.events.emit("opened")}}async readConfigFile(){if(!this.state||!this.state.configFile)return;const t=ee(this.state.configFile.getPath());this.compileOnSave=t.compileOnSave;const e=atom.config.get("atom-typescript");await this.state.client.execute("configure",{file:this.state.filePath,formatOptions:t.formatCodeOptions,preferences:{includeCompletionsWithInsertText:!0,includeCompletionsForModuleExports:e.includeCompletionsForModuleExports,quotePreference:e.quotePreference,importModuleSpecifierEnding:e.importModuleSpecifierEnding,importModuleSpecifierPreference:"auto"===e.importModuleSpecifierPreference?void 0:e.importModuleSpecifierPreference,...t.preferences}})}}Qc.bufferMap=new WeakMap;class Zc{constructor(t,e){this.editor=t,this.opts=e,this.subscriptions=new d,this.isTypescript=!1,this.destroy=()=>{atom.views.getView(this.editor).classList.remove("typescript-editor"),this.subscriptions.dispose()},this.didActivate=()=>{this.isTypescript&&this.reportInfo()},this.onOpened=()=>{atom.workspace.getActiveTextEditor()===this.editor&&this.reportInfo()},this.checkIfTypescript=()=>{this.isTypescript=fe(this.editor),this.isTypescript?atom.views.getView(this.editor).classList.add("typescript-editor"):atom.views.getView(this.editor).classList.remove("typescript-editor")},this.buffer=Qc.create(t.getBuffer(),e),this.subscriptions.add(this.buffer.on("opened",this.onOpened)),this.checkIfTypescript(),this.subscriptions.add(t.onDidChangePath(this.checkIfTypescript),t.onDidChangeGrammar(this.checkIfTypescript),t.onDidDestroy(this.destroy),t.onDidSave((()=>{atom.config.get("atom-typescript.checkAllFilesOnSave")&&atom.commands.dispatch(atom.views.getView(t),"typescript:check-all-files")})))}static createFactory(t){return e=>{let n=Zc.editorMap.get(e);return n||(n=new Zc(e,t),Zc.editorMap.set(e,n)),n}}static lookupPane(t){return Zc.editorMap.get(t)}reportInfo(){const t=this.buffer.getInfo();t&&this.opts.reportClientInfo(t)}}Zc.editorMap=new WeakMap;class Jc{constructor(t){this.usingBuiltinTooltipManager=!0,this.usingBuiltinSigHelpManager=!0,this.pending=new Set,this.clearErrors=()=>{this.errorPusher.clear()},this.clearFileErrors=t=>{this.errorPusher.clearFileErrors(t)},this.getClient=async t=>this.clientResolver.get(t),this.killAllServers=()=>{Kt(this.clientResolver.restartAllServers())},this.withBuffer=async(t,e)=>{const n=w.normalize(t),r=atom.workspace.getTextEditors().find((t=>t.getPath()===n));if(r)return e(r.getBuffer());const i=await h.TextBuffer.load(n);try{return await e(i)}finally{i.isModified()&&await i.save(),i.destroy()}},this.reportBusyWhile=async(t,e)=>{if(this.busySignalService)return this.busySignalService.reportBusyWhile(t,e);{const n={title:t};try{return this.pending.add(n),this.drawPending(Array.from(this.pending)),await e()}finally{this.pending.delete(n),this.drawPending(Array.from(this.pending))}}},this.reportProgress=t=>{Kt(this.statusPanel.update({progress:t}))},this.reportBuildStatus=t=>{Kt(this.statusPanel.update({buildStatus:t}))},this.reportClientInfo=t=>{Kt(this.statusPanel.update(t))},this.applyEdits=async t=>{Promise.all(t.map((t=>this.withBuffer(t.fileName,(async e=>{e.transact((()=>{const n=t.textChanges.map((t=>({range:Xt(t),newText:t.newText}))).reverse().sort(((t,e)=>e.range.compare(t.range)));for(const t of n)e.setTextInRange(t.range,t.newText)}))})))))},this.showTooltipAt=async t=>{this.usingBuiltinTooltipManager?this.tooltipManager.showExpressionAt(t):await atom.commands.dispatch(atom.views.getView(t),"datatip:toggle")},this.showSigHelpAt=async t=>{this.usingBuiltinSigHelpManager?await this.sigHelpManager.showTooltipAt(t):await atom.commands.dispatch(atom.views.getView(t),"signature-help:show")},this.hideSigHelpAt=t=>!!this.usingBuiltinSigHelpManager&&this.sigHelpManager.hideTooltipAt(t),this.rotateSigHelp=(t,e)=>!!this.usingBuiltinSigHelpManager&&this.sigHelpManager.rotateSigHelp(t,e),this.histGoForward=(t,e)=>this.editorPosHist.goForward(t,e),this.drawPending=Qt.throttle((t=>Kt(this.statusPanel.update({pending:t}))),100,{leading:!1}),this.subscriptions=new d,this.clientResolver=new Sr(this.reportBusyWhile),this.subscriptions.add(this.clientResolver),this.statusPanel=new Tc,this.subscriptions.add(this.statusPanel),this.errorPusher=new Gc,this.subscriptions.add(this.errorPusher),this.codefixProvider=new xi(this.clientResolver,this.errorPusher,this.applyEdits),this.subscriptions.add(this.codefixProvider),this.semanticViewController=new Bc(this.getClient),this.subscriptions.add(this.semanticViewController),this.editorPosHist=new Ac(t&&t.editorPosHistState),this.subscriptions.add(this.editorPosHist),this.symbolsViewController=new Wc({histGoForward:this.histGoForward,getClient:this.getClient}),this.subscriptions.add(this.symbolsViewController),this.tooltipManager=new Rc(this.getClient),this.subscriptions.add(this.tooltipManager),this.sigHelpManager=new Dc({getClient:this.getClient}),this.subscriptions.add(this.sigHelpManager),this.occurrenceManager=new Oc(this.getClient),this.subscriptions.add(this.occurrenceManager),this.typescriptPaneFactory=Zc.createFactory({clearFileErrors:this.clearFileErrors,getClient:this.getClient,reportBuildStatus:this.reportBuildStatus,reportClientInfo:this.reportClientInfo}),this.subscribeEditors(),this.subscriptions.add(xc({getClient:this.getClient,applyEdits:this.applyEdits,clearErrors:this.clearErrors,killAllServers:this.killAllServers,reportProgress:this.reportProgress,reportBuildStatus:this.reportBuildStatus,toggleSemanticViewController:()=>{Kt(this.semanticViewController.toggle())},toggleFileSymbolsView:t=>{this.symbolsViewController.toggleFileView(t)},toggleProjectSymbolsView:t=>{this.symbolsViewController.toggleProjectView(t)},histGoForward:this.histGoForward,histGoBack:()=>this.editorPosHist.goBack(),histShowHistory:()=>this.editorPosHist.showHistory(),showTooltipAt:this.showTooltipAt,showSigHelpAt:this.showSigHelpAt,hideSigHelpAt:this.hideSigHelpAt,rotateSigHelp:this.rotateSigHelp}))}destroy(){this.subscriptions.dispose();for(const t of atom.workspace.getTextEditors()){const e=Zc.lookupPane(t);e&&e.destroy()}}serialize(){return{version:"0.1",editorPosHistState:this.editorPosHist.serialize()}}consumeLinter(t){const e=t({name:"TypeScript"});this.errorPusher.setLinter(e),this.subscriptions.add(this.clientResolver.on("diagnostics",(({type:t,filePath:e,diagnostics:n})=>{this.errorPusher.setErrors(t,e,n)})))}consumeStatusBar(t){let e=100;for(const n of t.getRightTiles())"GRAMMAR-SELECTOR-STATUS"===atom.views.getView(n.getItem()).tagName&&(e=n.getPriority()-1);const n=t.addRightTile({item:this.statusPanel,priority:e}),r=new h.Disposable((()=>{n.destroy()}));return this.subscriptions.add(r),r}consumeDatatipService(t){if(atom.config.get("atom-typescript").preferBuiltinTooltips)return;const e=t.addProvider(new Ar(this.getClient));return this.subscriptions.add(e),this.tooltipManager.dispose(),this.usingBuiltinTooltipManager=!1,e}consumeSigHelpService(t){if(atom.config.get("atom-typescript").preferBuiltinSigHelp)return;const e=new li(this.getClient),n=t(e);return this.subscriptions.add(n,e),this.sigHelpManager.dispose(),this.usingBuiltinSigHelpManager=!1,n}consumeBusySignal(t){if(atom.config.get("atom-typescript").preferBuiltinBusySignal)return;this.busySignalService=t;const e={dispose:()=>{this.busySignalService&&this.busySignalService.dispose(),this.busySignalService=void 0}};return this.subscriptions.add(e),e}provideAutocomplete(){return[new pi(this.getClient,this.applyEdits)]}provideIntentions(){return t=this.codefixProvider,{grammarScopes:["*"],getIntentions:async({bufferPosition:e,textEditor:n})=>(await t.runCodeFix(n,e)).map((e=>({priority:100,title:"description"in e?e.description:e.actionDescription,selected:()=>{Kt(t.applyFix(e))}})))};var t}provideIntentionsHighlight(){return t=this.codefixProvider,{grammarScopes:["*"],getIntentions:async({visibleRange:e,textEditor:n})=>(await t.getFixableRanges(n,e)).map((t=>({range:t,created:t=>{}})))};var t}provideCodeActions(){return t=this.codefixProvider,{grammarScopes:le(),priority:0,getCodeActions:async(e,n)=>(await t.runCodeFix(e,n.start)).map((e=>({getTitle:async()=>"description"in e?e.description:e.actionDescription,dispose:()=>{},apply:async()=>{await t.applyFix(e)}})))};var t}provideHyperclick(){return t=this.getClient,e=this.histGoForward,{priority:0,providerName:"typescript-hyperclick-provider",wordRegExp:/([A-Za-z0-9_])+|['"`](\\.|[^'"`\\\\])*['"`]/g,async getSuggestionForWord(n,r,i){if(!fe(n))return;const o=n.getPath();return void 0!==o?{range:i,callback:async()=>{var r;const s={file:o,line:i.start.row+1,offset:i.start.column+1},a=await t(s.file),c=await a.execute("definition",s),u=c.body?c.body[0]:void 0;if(1===(null===(r=c.body)||void 0===r?void 0:r.length)&&(null==u?void 0:u.start.line)===s.line&&(null==u?void 0:u.start.offset)===s.offset){const t=await a.execute("references",s);await oi(t,n,e)}else await si(c,n,e)}}:void 0}};var t,e}provideReferences(){return t=this.getClient,{isEditorSupported:async t=>fe(t),async findReferences(e,n){const r=he(e,n);if(!r)return;const i=await t(r.file),o=await i.execute("references",r);return o.body?{type:"data",baseUri:r.file,referencedSymbolName:o.body.symbolDisplayString,references:o.body.refs.map(Ir)}:void 0}};var t}provideOutlines(){return t=this.getClient,{name:"Atom-TypeScript",grammarScopes:le(),priority:100,updateOnEdit:!0,async getOutline(e){const n=e.getPath();if(void 0===n)return;const r=await t(n),i=(await r.execute("navtree",{file:n})).body;return i?{outlineTrees:[ai(i)]}:void 0}};var t}provideDefinitions(){var t;if(!atom.config.get("atom-typescript").disableAtomIdeDefinitions)return t=this.getClient,{name:"atom-typescript",priority:0,grammarScopes:le(),wordRegExp:/([A-Za-z0-9_])+|['"`](\\.|[^'"`\\\\])*['"`]/g,async getDefinition(e,n){if(!fe(e))return;const r=he(e,n);if(!r)return;const i=await t(r.file),o=await i.execute("definition",r);return o.body&&0!==o.body.length?{queryRange:void 0,definitions:o.body.map(Or)}:void 0}}}provideCodeHighlight(){if(!atom.config.get("atom-typescript").preferBuiltinOccurrenceHighlight)return this.occurrenceManager.dispose(),kr(this.getClient)}subscribeEditors(){this.subscriptions.add(atom.workspace.observeTextEditors((t=>{this.typescriptPaneFactory(t)})),atom.workspace.onDidChangeActiveTextEditor((t=>{if(t&&fe(t)){Kt(this.statusPanel.show());const e=Zc.lookupPane(t);e&&e.didActivate()}else Kt(this.statusPanel.hide())})))}}let Yc;var Xc=C(ft);exports.activate=function(t){Xc.setScheduler(atom.views),Yc=new Jc(t),setImmediate((()=>Kt(async function(){["atom-ide-ui","linter","nuclide"].some((t=>atom.packages.isPackageLoaded(t)))||await A.install("atom-typescript",!0)}())))},exports.deactivate=function(){Yc&&Yc.destroy(),Yc=void 0},exports.serialize=function(){return Yc?Yc.serialize():void 0},exports.deserializeSemanticView=function(t){return en.create(t.data)},exports.consumeLinter=function(t){if(Yc)return Yc.consumeLinter(t)},exports.consumeStatusBar=function(t){if(Yc)return Yc.consumeStatusBar(t)},exports.consumeDatatipService=function(t){if(Yc)return Yc.consumeDatatipService(t)},exports.consumeSignatureHelp=function(t){if(Yc)return Yc.consumeSigHelpService(t)},exports.consumeBusySignal=function(t){if(Yc)return Yc.consumeBusySignal(t)},exports.provideAutocomplete=function(){if(Yc)return Yc.provideAutocomplete()},exports.provideIntentions=function(){if(Yc)return Yc.provideIntentions()},exports.provideIntentionsHighlight=function(){if(Yc)return Yc.provideIntentionsHighlight()},exports.provideCodeActions=function(){if(Yc)return Yc.provideCodeActions()},exports.provideHyperclick=function(){if(Yc)return Yc.provideHyperclick()},exports.provideReferences=function(){if(Yc)return Yc.provideReferences()},exports.provideOutlines=function(){if(Yc)return Yc.provideOutlines()},exports.provideDefinitions=function(){if(Yc)return Yc.provideDefinitions()},exports.provideCodeHighlight=function(){if(Yc)return Yc.provideCodeHighlight()}; +var Q=/["'&<>]/,Z=function(t){var e,n=""+t,r=Q.exec(n);if(!r)return n;var i="",o=0,s=0;for(o=r.index;o{const i={stdout:r.stdout?[]:null,stderr:r.stderr?[]:null};r.on("error",e),r.stdout&&r.stdout.on("data",(function(t){i.stdout.push(t),n.handleStdout&&n.handleStdout(t)})),r.stderr&&r.stderr.on("data",(function(t){i.stderr.push(t),n.handleStderr&&n.handleStderr(t)})),r.on("close",(e=>{let r=null;null!=i.stdout&&(r=null===n.encoding||"buffer"===n.encoding?Buffer.concat(i.stdout):i.stdout.join(""));let o=null;null!=i.stderr&&(o=null===n.encoding||"buffer"===n.encoding?Buffer.concat(i.stderr):i.stderr.join("")),t({exitCode:e,stdout:r,stderr:o})}))}));return n.handleChildProcess(r),i}(t,e,{...n,handleChildProcess(t){r=t}});return i.kill=function(t){return r.kill(t)},i}async function Y(t){if(G){const e=await async function(t){var e;const n=atom.packages.getLoadedPackage(t.name);return null==n?null:null!==(e=n.metadata.version)&&void 0!==e?e:null}(t);if(e)return e}return async function(t){var e,n;const{directory:r}=t;if(null==r)return null;let i=null;try{i=JSON.parse(await L.default.promises.readFile(D.default.join(r,"package.json"),"utf8"))}catch(t){return null}return null!==(e=null===(n=i)||void 0===n?void 0:n.version)&&void 0!==e?e:null}(t)}const X=G?async function(t){return atom.packages.resolvePackagePath(t)}:async function(t){var e;const n=D.default.join(null!==(e=process.env.ATOM_HOME)&&void 0!==e?e:D.default.join(N.default.homedir(),".atom"),"packages",t);try{return await L.default.promises.access(n,L.default.constants.R_OK),n}catch(t){return null}};function tt(t,e){if(!t)throw new Error(null!=e?e:"Invariant violation")}async function et(t){const e=await(G?async function(t){const e=atom.packages.getLoadedPackage(t),n=e&&e.metadata["package-deps"];return Array.isArray(n)?n:[]}(t):async function(t){let e=null;try{e=await L.default.promises.stat(t)}catch(t){}if(null==e||!e.isDirectory())throw new Error("[Package-Deps] Expected packageName to be a readable directory in Node.js invocation");let n=null;try{const e=await L.default.promises.readFile(D.default.join(t,"package.json"),"utf8");n=JSON.parse(e)}catch(t){}const r=null==n||"object"!=typeof n?[]:n["package-deps"];return Array.isArray(r)?r:[]}(t));return K&&(tt(Array.isArray(e),`Dependencies for ${t} are not a valid array`),e.forEach(((e,n)=>{if(Array.isArray(e))e.forEach(((e,r)=>{const i=`Dependency#${n}#${r} for ${t} is invalid`;tt("string"==typeof e.name&&e.name.length>0,i),tt(null==e.minimumVersion||"string"==typeof e.minimumVersion&&e.minimumVersion.length>0,i)})),tt(e.length>0,`Dependency#${n} for ${t} has no group items`);else{const r=`Dependency#${n} for ${t} is invalid`;tt("string"==typeof e.name&&e.name.length>0,r),tt(null==e.minimumVersion||"string"==typeof e.minimumVersion&&e.minimumVersion.length>0,r)}}))),e}async function nt(t){if(null==t.directory)return!0;if(null==t.minimumVersion)return!1;const e=await Y(t);return null==e||1===function(t,e){for(var n=t.split("."),r=e.split("."),i=0;i<3;i++){var o=Number(n[i]),s=Number(r[i]);if(o>s)return 1;if(s>o)return-1;if(!isNaN(o)&&isNaN(s))return 1;if(isNaN(o)&&!isNaN(s))return-1}return 0}(t.minimumVersion,e)}const rt=new Set(["✓","done"]),it=/(?:Installing|Moving) (.*?) to .* (.*)/;let ot=!0;const st=G?function({packageName:t,dependencies:e}){const n=[],r=atom.notifications.addInfo(`Installing ${t} dependencies`,{detail:"Installing "+e.map((t=>t.name)).join(", "),dismissable:!0}),i=document.createElement("progress");i.max=e.length,i.style.width="100%";try{var o;const t=atom.views.getView(r),e=null!==(o=null==t?void 0:t.element)&&void 0!==o?o:null;if(null==e)throw new Error("Unable to get notification element from view");const n=e.querySelector(".detail-content");if(null==n)throw new Error("Content detail container not found inside the notification");n.appendChild(i)}catch(t){console.error("[Package-Deps] Error during showing installation progress to user",t)}return{handleFailure({dependency:t,error:e}){var r;n.push(t.name),i.value+=1,console.error(`[Package-Deps] Unable to install ${t.name}, Error:`,null!==(r=null==e?void 0:e.stack)&&void 0!==r?r:e)},handleDependencyInstalled(t){i.value+=1},handleComplete(){r.dismiss(),n.length>0?atom.notifications.addWarning(`Failed to install ${t} dependencies`,{detail:"These packages were not installed, check your console\nfor more info.\n"+n.join("\n"),dismissable:!0}):atom.notifications.addSuccess(`Installed ${t} dependencies`,{detail:"Installed "+e.map((t=>t.name)).join(", ")}),Promise.all(e.map((t=>n.includes(t.name)?null:atom.packages.activatePackage(t.name)))).catch((e=>{console.error("[Package-Deps] Error activating installed packages for "+t,e)}))}}}:function({dependencies:t}){let e=!1;return console.log("Installing dependencies:\n"+t.map((t=>" - "+t.name)).join("\n")),{handleFailure({dependency:t,error:n}){var r;e=!0,console.error(`Unable to install ${t.name}, Error:`,null!==(r=null==n?void 0:n.stack)&&void 0!==r?r:n)},handleDependencyInstalled(t){console.log("Successfully installed",t.name)},handleComplete(){console.log("Installation complete"),e&&(process.exitCode=1)}}},at=G?function({packageName:t,dependencies:e}){return new Promise((n=>{const r=e.filter((t=>!Array.isArray(t))),i=e.filter((t=>Array.isArray(t))),o=0===i.length,s=o?r.map((t=>t.name)).join(", "):"Something went wrong. Check your developer console",a=i.map((t=>t[0]));atom.packages.isPackageDisabled("notifications")&&console.warn("Enable notifications to install dependencies for "+t);const c=atom.notifications.addInfo(t+" needs to install dependencies",{dismissable:!0,icon:"cloud-download",detail:s,description:`Install dependenc${1===e.length?"y":"ies"}?`,buttons:[{text:"Yes",onDidClick:()=>{n(o?[]:r.concat(a)),c.dismiss()}},{text:"No Thanks",onDidClick:()=>{c.dismiss()}},{text:"Never",onDidClick:()=>{!function(t){var e;if(!G)return;const n=new Set(null!==(e=atom.config.get("atom-package-deps.ignored"))&&void 0!==e?e:[]);n.add(t),atom.config.set("atom-package-deps.ignored",Array.from(n))}(t),ot&&(ot=!1,atom.notifications.addInfo("How to reset package-deps memory",{dismissable:!0,description:"To modify the list of ignored files invoke 'Application: Open Your Config' and change the 'atom-package-deps' section"})),c.dismiss()}}]});if(c.onDidDismiss((()=>n([]))),!o)try{var u;const t=atom.views.getView(c),e=null!==(u=null==t?void 0:t.element)&&void 0!==u?u:null;if(null==e)throw new Error("Unable to get notification element from view");const n=e.querySelector(".detail-content");if(null==n)throw new Error("Content detail container not found inside the notification");if(n.innerHTML="",r.length>0){const t=document.createElement("div");t.innerHTML=`Packages without choices:
  • ${r.map((t=>Z(t.name))).join("
  • ")}
`,n.appendChild(t)}const o=document.createElement("div");o.innerHTML="Packages with choices:",n.appendChild(o);const s=document.createElement("ul");i.forEach(((t,e)=>{const n=document.createElement("li"),r=document.createElement("select");r.innerHTML=t.map((t=>``)).join("\n"),r.addEventListener("change",(()=>{const n=t.find((t=>t.name===r.value));null!=n&&(a[e]=n)})),n.style.marginTop="5px",n.appendChild(r),s.appendChild(n)})),n.appendChild(s)}catch(t){console.error("[Package-Deps] Error during showing package choices to user",t)}}))}:async function({dependencies:t}){return t.map((t=>Array.isArray(t)?t[0]:t))};var ct=async function(t){if(tt("string"==typeof t&&t.length>0,"[Package-Deps] Package name is required"),e=t,G&&(null!==(n=atom.config.get("atom-package-deps.ignored"))&&void 0!==n?n:[]).includes(e))return;var e,n;const r=await et(t);if(0===r.length)return;const i=await Promise.all(r.map((async t=>Array.isArray(t)?Promise.all(t.map((async t=>({...t,directory:await X(t.name)})))):{...t,directory:await X(t.name)}))),o=await V(i,(async function(t){return Array.isArray(t)?(await Promise.all(t.map((t=>nt(t))))).every(Boolean):nt(t)}));if(0===o.length)return;const s=await at({packageName:t,dependencies:o});if(0===s.length)return;const a=st({packageName:t,dependencies:s});await(async(t,e,{concurrency:n=1/0,stopOnError:r=!0}={})=>new Promise(((i,o)=>{if("function"!=typeof e)throw new TypeError("Mapper function is required");if(!Number.isSafeInteger(n)&&n!==1/0||!(n>=1))throw new TypeError(`Expected \`concurrency\` to be an integer from 1 and up or \`Infinity\`, got \`${n}\` (${typeof n})`);const s=[],a=[],c=t[Symbol.iterator]();let u=!1,l=!1,f=0,p=0;const h=()=>{if(u)return;const t=c.next(),n=p;if(p++,t.done)return l=!0,void(0===f&&(r||0===a.length?i(s):o(new z(a))));f++,(async()=>{try{const r=await t.value;s[n]=await e(r,n),f--,h()}catch(t){r?(u=!0,o(t)):(a.push(t),f--,h())}})()};for(let t=0;tht(t,e,...n);for(const t of pt)ht[t]=(e,...n)=>ht(t,e,...n);ut=ht;var gt,mt={},vt={};vt=new Map([["accentHeight","accent-height"],["alignmentBaseline","alignment-baseline"],["arabicForm","arabic-form"],["baselineShift","baseline-shift"],["capHeight","cap-height"],["className","class"],["clipPath","clip-path"],["clipRule","clip-rule"],["colorInterpolation","color-interpolation"],["colorInterpolationFilters","color-interpolation-filters"],["colorProfile","color-profile"],["colorRendering","color-rendering"],["dominantBaseline","dominant-baseline"],["enableBackground","enable-background"],["fillOpacity","fill-opacity"],["fillRule","fill-rule"],["floodColor","flood-color"],["floodOpacity","flood-opacity"],["fontFamily","font-family"],["fontSize","font-size"],["fontSizeAdjust","font-size-adjust"],["fontStretch","font-stretch"],["fontStyle","font-style"],["fontVariant","font-variant"],["fontWeight","font-weight"],["glyphName","glyph-name"],["glyphOrientationHorizontal","glyph-orientation-horizontal"],["glyphOrientationVertical","glyph-orientation-vertical"],["horizAdvX","horiz-adv-x"],["horizOriginX","horiz-origin-x"],["letterSpacing","letter-spacing"],["lightingColor","lighting-color"],["markerEnd","marker-end"],["markerMid","marker-mid"],["markerStart","marker-start"],["overlinePosition","overline-position"],["overlineThickness","overline-thickness"],["panose1","panose-1"],["paintOrder","paint-order"],["pointerEvents","pointer-events"],["renderingIntent","rendering-intent"],["shapeRendering","shape-rendering"],["stopColor","stop-color"],["stopOpacity","stop-opacity"],["strikethroughPosition","strikethrough-position"],["strikethroughThickness","strikethrough-thickness"],["strokeDasharray","stroke-dasharray"],["strokeDashoffset","stroke-dashoffset"],["strokeLinecap","stroke-linecap"],["strokeLinejoin","stroke-linejoin"],["strokeMiterlimit","stroke-miterlimit"],["strokeOpacity","stroke-opacity"],["strokeWidth","stroke-width"],["textAnchor","text-anchor"],["textDecoration","text-decoration"],["textRendering","text-rendering"],["underlinePosition","underline-position"],["underlineThickness","underline-thickness"],["unicodeBidi","unicode-bidi"],["unicodeRange","unicode-range"],["unitsPerEm","units-per-em"],["vAlphabetic","v-alphabetic"],["vHanging","v-hanging"],["vIdeographic","v-ideographic"],["vMathematical","v-mathematical"],["vertAdvY","vert-adv-y"],["vertOriginX","vert-origin-x"],["vertOriginY","vert-origin-y"],["wordSpacing","word-spacing"],["writingMode","writing-mode"],["xHeight","x-height"]]);var yt;function wt(t,e,n,r,i){if(n)for(var o in n)"ref"!==o&&"on"!==o&&(o in lt||i&&o in i||("dataset"===o?wt(t.dataset,null,n&&n.dataset,null,null):"innerHTML"!==o&&e&&pt.has(e.tag)?t.removeAttribute(vt.get(o)||o):(t[o]="",delete t[o])));if(i)for(var o in i)if("ref"!==o&&"on"!==o&&!(o in lt)){var s=n&&n[o],a=i[o];"dataset"===o?bt(t.dataset,s,a,!1):"style"===o&&"string"!=typeof a?("string"==typeof s&&(t.style="",s=null),bt(t.style,s,a,!0)):"attributes"===o?_t(t,s,a):a!==s&&("innerHTML"!==o&&r&&pt.has(r.tag)?t.setAttribute(vt.get(o)||o,a):r&&"input"===r.tag&&"value"===o&&t[o]===a||(t[o]=a))}}function bt(t,e,n,r){if(e)for(var i in e)n&&i in n||(r?t[i]="":delete t[i]);if(n)for(var i in n){const r=e&&e[i],o=n[i];o!==r&&(t[i]=o)}}function _t(t,e,n){if(e)for(var r in e)n&&r in n||t.removeAttribute(r);if(n)for(var r in n){const i=e&&e[r],o=n[r];o!==i&&t.setAttribute(r,o)}}function xt(t,e){let n;if(null!=t.text)n=document.createTextNode(t.text);else{const{tag:r,children:i}=t;let{props:o,context:s}=t;if(s&&(e={refs:s.refs,listenerContext:s}),"function"==typeof r){let s;o&&o.ref&&(s=o.ref);const a=new r(o||{},i);t.component=a,n=a.element,"function"==typeof s?s(a):e&&e.refs&&s&&(e.refs[s]=a)}else pt.has(r)?(n=document.createElementNS("http://www.w3.org/2000/svg",r),i&&St(n,i,e),o&>(n,null,t,e)):(n=document.createElement(r),i&&St(n,i,e),o&>(n,null,t,e))}return t.domNode=n,n}function St(t,e,n){for(let r=0;r0?(i=Tt.pop()).clear():i=new Map,It(i,e,o,s));var h=Ot(f),d=h?i.get(h):null;if(null==d)t.insertBefore(mt(f,r),a.domNode),f=n[++u];else{var g=e[d];Ct(g,f,r),e[d]=void 0,t.insertBefore(g.domNode,a.domNode),f=n[++u]}}else c=e[--s];else a=e[++o];if(o>s){var m=n[l+1]?n[l+1].domNode:null;for(let e=u;e<=l;e++)t.insertBefore(mt(n[e],r),m)}else if(u>l)for(let t=o;t<=s;t++){var v=e[t];v&&At(v,r&&r.refs)}i&&Tt.push(i)}(r,t.children,e.children,n),gt(r,t,e,n),i=r),e.domNode=i,i!==r&&r.parentNode&&r.parentNode.replaceChild(i,r),i}{const i=r.parentNode,o=r.nextSibling;At(t,n&&n.refs);const s=mt(e,n);return i&&i.insertBefore(s,o),e.domNode=s,s}}let Tt=[new Map,new Map,new Map,new Map];function At(t,e,n=!0){const{domNode:r,props:i,children:o,component:s}=t,a=i&&i.ref;if(s)"function"==typeof a?a(null):e&&a&&e[a]===s&&delete e[a],s.destroy&&s.destroy();else if("function"==typeof a?a(null):e&&a&&e[a]===r&&delete e[a],o)for(let t=0;t{this.resolveNextUpdatePromise=t}))),this.nextUpdatePromise}performUpdates(){for(;this.updateRequests.length>0;)this.updateRequests.shift()();for(this.pendingAnimationFrame=null;this.readRequests.length>0;)this.readRequests.shift()();if(this.nextUpdatePromise){let t=this.resolveNextUpdatePromise;this.nextUpdatePromise=null,this.resolveNextUpdatePromise=null,t()}}};let Nt=null;var Lt=function(){return Nt||(Nt=new jt),Nt};const Dt=new WeakSet;let Ft=0,Mt=0;function Rt(t){return null!=t&&!1!==t}function Bt(t,e){e.context=t,e.ambiguous&&(e.ambiguous.forEach((e=>{e.context=t})),delete e.ambiguous)}function zt(t,e=!0){if(!Rt(t.virtualNode))throw new Error((t.constructor?t.constructor.name+" instance":t)+" is not associated with a valid virtualNode. Perhaps this component was never initialized?");if(null==t.element)throw new Error((t.constructor?t.constructor.name+" instance":t)+" is not associated with a DOM element. Perhaps this component was never initialized?");let n=t.render();if(!Rt(n)){const e=t.constructor&&t.constructor.name?" in "+t.constructor.name:"";throw new Error("invalid falsy value "+n+" returned from render()"+e)}Bt(t,n),Ft++;let r=t.virtualNode,i=t.element,o=Et(r,n,{refs:t.refs,listenerContext:t});if(t.virtualNode=n,o!==i&&!e)throw new Error("The root node type changed on update, but the update was performed with the replaceNode option set to false");t.element=o,"function"==typeof t.writeAfterUpdate&&t.writeAfterUpdate(),"function"==typeof t.readAfterUpdate&&Lt().readDocument((function(){t.readAfterUpdate()})),Ft--}function qt(t,e=!0){Mt++,Ht(t.virtualNode),1===Mt&&e&&t.element.remove(),Mt--}function Ht(t){t.component&&"function"==typeof t.component.destroy?t.component.destroy():t.children&&t.children.forEach(Ht)}kt={initialize:function(t){if("function"!=typeof t.update)throw new Error("Etch components must implement `update(props, children)`.");let e=t.render();if(!Rt(e)){let n=t.constructor&&t.constructor.name?" in "+t.constructor.name:"";throw new Error("invalid falsy value "+e+" returned from render()"+n)}Bt(t,e),t.refs={},t.virtualNode=e,t.element=mt(t.virtualNode,{refs:t.refs,listenerContext:t})},update:function(t,e=!0){if(Ft>0)return zt(t,e),Promise.resolve();let n=Lt();return Dt.has(t)||(Dt.add(t),n.updateDocument((function(){Dt.delete(t),zt(t,e)}))),n.getNextUpdatePromise()},updateSync:zt,destroy:function(t,e=!0){if(Ft>0||Mt>0)return qt(t,e),Promise.resolve();let n=Lt();return n.updateDocument((function(){qt(t,e)})),n.getNextUpdatePromise()},destroySync:qt};const{initialize:Ut,update:$t,updateSync:Vt,destroy:Wt,destroySync:Gt}=kt;function Kt(t){void 0!==t&&("function"==typeof t.catch?t.catch((t=>{atom.notifications.addFatalError("Atom-Typescript error: "+t.message,{detail:t.toString(),stack:t.stack,dismissable:!0})})):atom.notifications.addFatalError("Atom-Typescript: non-promise passed to handlePromise. Please report this.",{stack:(new Error).stack,dismissable:!0}))}ft={dom:ut,render:mt,initialize:Ut,update:$t,updateSync:Vt,destroy:Wt,destroySync:Gt,setScheduler:function(t){Nt=t},getScheduler:Lt};var Qt=function(){var t=this,e={exports:this};return function(){var n,r="Expected a function",i="__lodash_hash_undefined__",o="__lodash_placeholder__",s=16,a=32,c=64,u=128,l=256,f=1/0,p=9007199254740991,h=NaN,d=4294967295,g=[["ary",u],["bind",1],["bindKey",2],["curry",8],["curryRight",s],["flip",512],["partial",a],["partialRight",c],["rearg",l]],m="[object Arguments]",v="[object Array]",y="[object Boolean]",w="[object Date]",b="[object Error]",_="[object Function]",x="[object GeneratorFunction]",S="[object Map]",k="[object Number]",E="[object Object]",C="[object Promise]",A="[object RegExp]",P="[object Set]",O="[object String]",I="[object Symbol]",j="[object WeakMap]",N="[object ArrayBuffer]",L="[object DataView]",D="[object Float32Array]",F="[object Float64Array]",M="[object Int8Array]",R="[object Int16Array]",B="[object Int32Array]",z="[object Uint8Array]",q="[object Uint8ClampedArray]",H="[object Uint16Array]",U="[object Uint32Array]",$=/\b__p \+= '';/g,V=/\b(__p \+=) '' \+/g,W=/(__e\(.*?\)|\b__t\)) \+\n'';/g,G=/&(?:amp|lt|gt|quot|#39);/g,K=/[&<>"']/g,Q=RegExp(G.source),Z=RegExp(K.source),J=/<%-([\s\S]+?)%>/g,Y=/<%([\s\S]+?)%>/g,X=/<%=([\s\S]+?)%>/g,tt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,et=/^\w*$/,nt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,rt=/[\\^$.*+?()[\]{}|]/g,it=RegExp(rt.source),ot=/^\s+/,st=/\s/,at=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,ct=/\{\n\/\* \[wrapped with (.+)\] \*/,ut=/,? & /,lt=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,ft=/[()=,{}\[\]\/\s]/,pt=/\\(\\)?/g,ht=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,dt=/\w*$/,gt=/^[-+]0x[0-9a-f]+$/i,mt=/^0b[01]+$/i,vt=/^\[object .+?Constructor\]$/,yt=/^0o[0-7]+$/i,wt=/^(?:0|[1-9]\d*)$/,bt=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,_t=/($^)/,xt=/['\n\r\u2028\u2029\\]/g,St="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",kt="\\u2700-\\u27bf",Et="a-z\\xdf-\\xf6\\xf8-\\xff",Ct="A-Z\\xc0-\\xd6\\xd8-\\xde",Tt="\\ufe0e\\ufe0f",At="\\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",Pt="['’]",Ot="[\\ud800-\\udfff]",It="["+At+"]",jt="["+St+"]",Nt="\\d+",Lt="[\\u2700-\\u27bf]",Dt="["+Et+"]",Ft="[^\\ud800-\\udfff"+At+Nt+kt+Et+Ct+"]",Mt="\\ud83c[\\udffb-\\udfff]",Rt="[^\\ud800-\\udfff]",Bt="(?:\\ud83c[\\udde6-\\uddff]){2}",zt="[\\ud800-\\udbff][\\udc00-\\udfff]",qt="["+Ct+"]",Ht="(?:"+Dt+"|"+Ft+")",Ut="(?:"+qt+"|"+Ft+")",$t="(?:['’](?:d|ll|m|re|s|t|ve))?",Vt="(?:['’](?:D|LL|M|RE|S|T|VE))?",Wt="(?:"+jt+"|"+Mt+")"+"?",Gt="[\\ufe0e\\ufe0f]?",Kt=Gt+Wt+("(?:\\u200d(?:"+[Rt,Bt,zt].join("|")+")"+Gt+Wt+")*"),Qt="(?:"+[Lt,Bt,zt].join("|")+")"+Kt,Zt="(?:"+[Rt+jt+"?",jt,Bt,zt,Ot].join("|")+")",Jt=RegExp(Pt,"g"),Yt=RegExp(jt,"g"),Xt=RegExp(Mt+"(?="+Mt+")|"+Zt+Kt,"g"),te=RegExp([qt+"?"+Dt+"+"+$t+"(?="+[It,qt,"$"].join("|")+")",Ut+"+"+Vt+"(?="+[It,qt+Ht,"$"].join("|")+")",qt+"?"+Ht+"+"+$t,qt+"+"+Vt,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Nt,Qt].join("|"),"g"),ee=RegExp("[\\u200d\\ud800-\\udfff"+St+Tt+"]"),ne=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,re=["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"],ie=-1,oe={};oe[D]=oe[F]=oe[M]=oe[R]=oe[B]=oe[z]=oe[q]=oe[H]=oe[U]=!0,oe[m]=oe[v]=oe[N]=oe[y]=oe[L]=oe[w]=oe[b]=oe[_]=oe[S]=oe[k]=oe[E]=oe[A]=oe[P]=oe[O]=oe[j]=!1;var se={};se[m]=se[v]=se[N]=se[L]=se[y]=se[w]=se[D]=se[F]=se[M]=se[R]=se[B]=se[S]=se[k]=se[E]=se[A]=se[P]=se[O]=se[I]=se[z]=se[q]=se[H]=se[U]=!0,se[b]=se[_]=se[j]=!1;var ae={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},ce=parseFloat,ue=parseInt,le="object"==typeof T&&T&&T.Object===Object&&T,fe="object"==typeof self&&self&&self.Object===Object&&self,pe=le||fe||Function("return this")(),he="object"==typeof t&&t&&!t.nodeType&&t,de=he&&"object"==typeof e&&e&&!e.nodeType&&e,ge=de&&de.exports===he,me=ge&&le.process,ve=function(){try{var t=de&&de.require&&de.require("util").types;return t||me&&me.binding&&me.binding("util")}catch(t){}}(),ye=ve&&ve.isArrayBuffer,we=ve&&ve.isDate,be=ve&&ve.isMap,_e=ve&&ve.isRegExp,xe=ve&&ve.isSet,Se=ve&&ve.isTypedArray;function ke(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 Ee(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i-1}function Ie(t,e,n){for(var r=-1,i=null==t?0:t.length;++r-1;);return n}function tn(t,e){for(var n=t.length;n--&&ze(e,t[n],0)>-1;);return n}function en(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}var nn=Ve({"À":"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"}),rn=Ve({"&":"&","<":"<",">":">",'"':""","'":"'"});function on(t){return"\\"+ae[t]}function sn(t){return ee.test(t)}function an(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n}function cn(t,e){return function(n){return t(e(n))}}function un(t,e){for(var n=-1,r=t.length,i=0,s=[];++n",""":'"',"'":"'"});var mn=function t(e){var T,st=(e=null==e?pe:mn.defaults(pe.Object(),e,mn.pick(pe,re))).Array,St=e.Date,kt=e.Error,Et=e.Function,Ct=e.Math,Tt=e.Object,At=e.RegExp,Pt=e.String,Ot=e.TypeError,It=st.prototype,jt=Et.prototype,Nt=Tt.prototype,Lt=e["__core-js_shared__"],Dt=jt.toString,Ft=Nt.hasOwnProperty,Mt=0,Rt=(T=/[^.]+$/.exec(Lt&&Lt.keys&&Lt.keys.IE_PROTO||""))?"Symbol(src)_1."+T:"",Bt=Nt.toString,zt=Dt.call(Tt),qt=pe._,Ht=At("^"+Dt.call(Ft).replace(rt,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ut=ge?e.Buffer:n,$t=e.Symbol,Vt=e.Uint8Array,Wt=Ut?Ut.allocUnsafe:n,Gt=cn(Tt.getPrototypeOf,Tt),Kt=Tt.create,Qt=Nt.propertyIsEnumerable,Zt=It.splice,Xt=$t?$t.isConcatSpreadable:n,ee=$t?$t.iterator:n,ae=$t?$t.toStringTag:n,le=function(){try{var t=ho(Tt,"defineProperty");return t({},"",{}),t}catch(t){}}(),fe=e.clearTimeout!==pe.clearTimeout&&e.clearTimeout,he=St&&St.now!==pe.Date.now&&St.now,de=e.setTimeout!==pe.setTimeout&&e.setTimeout,me=Ct.ceil,ve=Ct.floor,Me=Tt.getOwnPropertySymbols,Ve=Ut?Ut.isBuffer:n,vn=e.isFinite,yn=It.join,wn=cn(Tt.keys,Tt),bn=Ct.max,_n=Ct.min,xn=St.now,Sn=e.parseInt,kn=Ct.random,En=It.reverse,Cn=ho(e,"DataView"),Tn=ho(e,"Map"),An=ho(e,"Promise"),Pn=ho(e,"Set"),On=ho(e,"WeakMap"),In=ho(Tt,"create"),jn=On&&new On,Nn={},Ln=qo(Cn),Dn=qo(Tn),Fn=qo(An),Mn=qo(Pn),Rn=qo(On),Bn=$t?$t.prototype:n,zn=Bn?Bn.valueOf:n,qn=Bn?Bn.toString:n;function Hn(t){if(ia(t)&&!Gs(t)&&!(t instanceof Wn)){if(t instanceof Vn)return t;if(Ft.call(t,"__wrapped__"))return Ho(t)}return new Vn(t)}var Un=function(){function t(){}return function(e){if(!ra(e))return{};if(Kt)return Kt(e);t.prototype=e;var r=new t;return t.prototype=n,r}}();function $n(){}function Vn(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=n}function Wn(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=d,this.__views__=[]}function Gn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e=e?t:e)),t}function lr(t,e,r,i,o,s){var a,c=1&e,u=2&e,l=4&e;if(r&&(a=o?r(t,i,o,s):r(t)),a!==n)return a;if(!ra(t))return t;var f=Gs(t);if(f){if(a=function(t){var e=t.length,n=new t.constructor(e);e&&"string"==typeof t[0]&&Ft.call(t,"index")&&(n.index=t.index,n.input=t.input);return n}(t),!c)return Ii(t,a)}else{var p=vo(t),h=p==_||p==x;if(Js(t))return Ei(t,c);if(p==E||p==m||h&&!o){if(a=u||h?{}:wo(t),!c)return u?function(t,e){return ji(t,mo(t),e)}(t,function(t,e){return t&&ji(e,Da(e),t)}(a,t)):function(t,e){return ji(t,go(t),e)}(t,sr(a,t))}else{if(!se[p])return o?t:{};a=function(t,e,n){var r=t.constructor;switch(e){case N:return Ci(t);case y:case w:return new r(+t);case L:return function(t,e){var n=e?Ci(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case D:case F:case M:case R:case B:case z:case q:case H:case U:return Ti(t,n);case S:return new r;case k:case O:return new r(t);case A:return function(t){var e=new t.constructor(t.source,dt.exec(t));return e.lastIndex=t.lastIndex,e}(t);case P:return new r;case I:return i=t,zn?Tt(zn.call(i)):{}}var i}(t,p,c)}}s||(s=new Jn);var d=s.get(t);if(d)return d;s.set(t,a),ua(t)?t.forEach((function(n){a.add(lr(n,e,r,n,t,s))})):oa(t)&&t.forEach((function(n,i){a.set(i,lr(n,e,r,i,t,s))}));var g=f?n:(l?u?so:oo:u?Da:La)(t);return Ce(g||t,(function(n,i){g&&(n=t[i=n]),rr(a,i,lr(n,e,r,i,t,s))})),a}function fr(t,e,r){var i=r.length;if(null==t)return!i;for(t=Tt(t);i--;){var o=r[i],s=e[o],a=t[o];if(a===n&&!(o in t)||!s(a))return!1}return!0}function pr(t,e,i){if("function"!=typeof t)throw new Ot(r);return Lo((function(){t.apply(n,i)}),e)}function hr(t,e,n,r){var i=-1,o=Oe,s=!0,a=t.length,c=[],u=e.length;if(!a)return c;n&&(e=je(e,Ze(n))),r?(o=Ie,s=!1):e.length>=200&&(o=Ye,s=!1,e=new Zn(e));t:for(;++i-1},Kn.prototype.set=function(t,e){var n=this.__data__,r=ir(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},Qn.prototype.clear=function(){this.size=0,this.__data__={hash:new Gn,map:new(Tn||Kn),string:new Gn}},Qn.prototype.delete=function(t){var e=fo(this,t).delete(t);return this.size-=e?1:0,e},Qn.prototype.get=function(t){return fo(this,t).get(t)},Qn.prototype.has=function(t){return fo(this,t).has(t)},Qn.prototype.set=function(t,e){var n=fo(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},Zn.prototype.add=Zn.prototype.push=function(t){return this.__data__.set(t,i),this},Zn.prototype.has=function(t){return this.__data__.has(t)},Jn.prototype.clear=function(){this.__data__=new Kn,this.size=0},Jn.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Jn.prototype.get=function(t){return this.__data__.get(t)},Jn.prototype.has=function(t){return this.__data__.has(t)},Jn.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Kn){var r=n.__data__;if(!Tn||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new Qn(r)}return n.set(t,e),this.size=n.size,this};var dr=Di(xr),gr=Di(Sr,!0);function mr(t,e){var n=!0;return dr(t,(function(t,r,i){return n=!!e(t,r,i)})),n}function vr(t,e,r){for(var i=-1,o=t.length;++i0&&n(a)?e>1?wr(a,e-1,n,r,i):Ne(i,a):r||(i[i.length]=a)}return i}var br=Fi(),_r=Fi(!0);function xr(t,e){return t&&br(t,e,La)}function Sr(t,e){return t&&_r(t,e,La)}function kr(t,e){return Pe(e,(function(e){return ta(t[e])}))}function Er(t,e){for(var r=0,i=(e=_i(e,t)).length;null!=t&&re}function Pr(t,e){return null!=t&&Ft.call(t,e)}function Or(t,e){return null!=t&&e in Tt(t)}function Ir(t,e,r){for(var i=r?Ie:Oe,o=t[0].length,s=t.length,a=s,c=st(s),u=1/0,l=[];a--;){var f=t[a];a&&e&&(f=je(f,Ze(e))),u=_n(f.length,u),c[a]=!r&&(e||o>=120&&f.length>=120)?new Zn(a&&f):n}f=t[0];var p=-1,h=c[0];t:for(;++p=a?c:c*("desc"==n[r]?-1:1)}return t.index-e.index}(t,e,n)}))}function Gr(t,e,n){for(var r=-1,i=e.length,o={};++r-1;)a!==t&&Zt.call(a,c,1),Zt.call(t,c,1);return t}function Qr(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;_o(i)?Zt.call(t,i,1):hi(t,i)}}return t}function Zr(t,e){return t+ve(kn()*(e-t+1))}function Jr(t,e){var n="";if(!t||e<1||e>p)return n;do{e%2&&(n+=t),(e=ve(e/2))&&(t+=t)}while(e);return n}function Yr(t,e){return Do(Po(t,e,sc),t+"")}function Xr(t){return Xn(Ua(t))}function ti(t,e){var n=Ua(t);return Ro(n,ur(e,0,n.length))}function ei(t,e,r,i){if(!ra(t))return t;for(var o=-1,s=(e=_i(e,t)).length,a=s-1,c=t;null!=c&&++oi?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=st(i);++r>>1,s=t[o];null!==s&&!fa(s)&&(n?s<=e:s=200){var u=e?null:Ji(t);if(u)return ln(u);s=!1,i=Ye,c=new Zn}else c=e?[]:a;t:for(;++r=i?t:oi(t,e,r)}var ki=fe||function(t){return pe.clearTimeout(t)};function Ei(t,e){if(e)return t.slice();var n=t.length,r=Wt?Wt(n):new t.constructor(n);return t.copy(r),r}function Ci(t){var e=new t.constructor(t.byteLength);return new Vt(e).set(new Vt(t)),e}function Ti(t,e){var n=e?Ci(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Ai(t,e){if(t!==e){var r=t!==n,i=null===t,o=t==t,s=fa(t),a=e!==n,c=null===e,u=e==e,l=fa(e);if(!c&&!l&&!s&&t>e||s&&a&&u&&!c&&!l||i&&a&&u||!r&&u||!o)return 1;if(!i&&!s&&!l&&t1?r[o-1]:n,a=o>2?r[2]:n;for(s=t.length>3&&"function"==typeof s?(o--,s):n,a&&xo(r[0],r[1],a)&&(s=o<3?n:s,o=1),e=Tt(e);++i-1?o[s?e[a]:a]:n}}function qi(t){return io((function(e){var i=e.length,o=i,s=Vn.prototype.thru;for(t&&e.reverse();o--;){var a=e[o];if("function"!=typeof a)throw new Ot(r);if(s&&!c&&"wrapper"==co(a))var c=new Vn([],!0)}for(o=c?o:i;++o1&&y.reverse(),p&&lc))return!1;var l=s.get(t),f=s.get(e);if(l&&f)return l==e&&f==t;var p=-1,h=!0,d=2&r?new Zn:n;for(s.set(t,e),s.set(e,t);++p-1&&t%1==0&&t1?"& ":"")+e[r],e=e.join(n>2?", ":" "),t.replace(at,"{\n/* [wrapped with "+e+"] */\n")}(r,function(t,e){return Ce(g,(function(n){var r="_."+n[0];e&n[1]&&!Oe(t,r)&&t.push(r)})),t.sort()}(function(t){var e=t.match(ct);return e?e[1].split(ut):[]}(r),n)))}function Mo(t){var e=0,r=0;return function(){var i=xn(),o=16-(i-r);if(r=i,o>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(n,arguments)}}function Ro(t,e){var r=-1,i=t.length,o=i-1;for(e=e===n?i:e;++r1?t[e-1]:n;return r="function"==typeof r?(t.pop(),r):n,cs(t,r)}));function gs(t){var e=Hn(t);return e.__chain__=!0,e}function ms(t,e){return e(t)}var vs=io((function(t){var e=t.length,r=e?t[0]:0,i=this.__wrapped__,o=function(e){return cr(e,t)};return!(e>1||this.__actions__.length)&&i instanceof Wn&&_o(r)?((i=i.slice(r,+r+(e?1:0))).__actions__.push({func:ms,args:[o],thisArg:n}),new Vn(i,this.__chain__).thru((function(t){return e&&!t.length&&t.push(n),t}))):this.thru(o)}));var ys=Ni((function(t,e,n){Ft.call(t,n)?++t[n]:ar(t,n,1)}));var ws=zi(Wo),bs=zi(Go);function _s(t,e){return(Gs(t)?Ce:dr)(t,lo(e,3))}function xs(t,e){return(Gs(t)?Te:gr)(t,lo(e,3))}var Ss=Ni((function(t,e,n){Ft.call(t,n)?t[n].push(e):ar(t,n,[e])}));var ks=Yr((function(t,e,n){var r=-1,i="function"==typeof e,o=Qs(t)?st(t.length):[];return dr(t,(function(t){o[++r]=i?ke(e,t,n):jr(t,e,n)})),o})),Es=Ni((function(t,e,n){ar(t,n,e)}));function Cs(t,e){return(Gs(t)?je:qr)(t,lo(e,3))}var Ts=Ni((function(t,e,n){t[n?0:1].push(e)}),(function(){return[[],[]]}));var As=Yr((function(t,e){if(null==t)return[];var n=e.length;return n>1&&xo(t,e[0],e[1])?e=[]:n>2&&xo(e[0],e[1],e[2])&&(e=[e[0]]),Wr(t,wr(e,1),[])})),Ps=he||function(){return pe.Date.now()};function Os(t,e,r){return e=r?n:e,e=t&&null==e?t.length:e,Xi(t,u,n,n,n,n,e)}function Is(t,e){var i;if("function"!=typeof e)throw new Ot(r);return t=va(t),function(){return--t>0&&(i=e.apply(this,arguments)),t<=1&&(e=n),i}}var js=Yr((function(t,e,n){var r=1;if(n.length){var i=un(n,uo(js));r|=a}return Xi(t,r,e,n,i)})),Ns=Yr((function(t,e,n){var r=3;if(n.length){var i=un(n,uo(Ns));r|=a}return Xi(e,r,t,n,i)}));function Ls(t,e,i){var o,s,a,c,u,l,f=0,p=!1,h=!1,d=!0;if("function"!=typeof t)throw new Ot(r);function g(e){var r=o,i=s;return o=s=n,f=e,c=t.apply(i,r)}function m(t){return f=t,u=Lo(y,e),p?g(t):c}function v(t){var r=t-l;return l===n||r>=e||r<0||h&&t-f>=a}function y(){var t=Ps();if(v(t))return w(t);u=Lo(y,function(t){var n=e-(t-l);return h?_n(n,a-(t-f)):n}(t))}function w(t){return u=n,d&&o?g(t):(o=s=n,c)}function b(){var t=Ps(),r=v(t);if(o=arguments,s=this,l=t,r){if(u===n)return m(l);if(h)return ki(u),u=Lo(y,e),g(l)}return u===n&&(u=Lo(y,e)),c}return e=wa(e)||0,ra(i)&&(p=!!i.leading,a=(h="maxWait"in i)?bn(wa(i.maxWait)||0,e):a,d="trailing"in i?!!i.trailing:d),b.cancel=function(){u!==n&&ki(u),f=0,o=l=s=u=n},b.flush=function(){return u===n?c:w(Ps())},b}var Ds=Yr((function(t,e){return pr(t,1,e)})),Fs=Yr((function(t,e,n){return pr(t,wa(e)||0,n)}));function Ms(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new Ot(r);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 s=t.apply(this,r);return n.cache=o.set(i,s)||o,s};return n.cache=new(Ms.Cache||Qn),n}function Rs(t){if("function"!=typeof t)throw new Ot(r);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)}}Ms.Cache=Qn;var Bs=xi((function(t,e){var n=(e=1==e.length&&Gs(e[0])?je(e[0],Ze(lo())):je(wr(e,1),Ze(lo()))).length;return Yr((function(r){for(var i=-1,o=_n(r.length,n);++i=e})),Ws=Nr(function(){return arguments}())?Nr:function(t){return ia(t)&&Ft.call(t,"callee")&&!Qt.call(t,"callee")},Gs=st.isArray,Ks=ye?Ze(ye):function(t){return ia(t)&&Tr(t)==N};function Qs(t){return null!=t&&na(t.length)&&!ta(t)}function Zs(t){return ia(t)&&Qs(t)}var Js=Ve||wc,Ys=we?Ze(we):function(t){return ia(t)&&Tr(t)==w};function Xs(t){if(!ia(t))return!1;var e=Tr(t);return e==b||"[object DOMException]"==e||"string"==typeof t.message&&"string"==typeof t.name&&!aa(t)}function ta(t){if(!ra(t))return!1;var e=Tr(t);return e==_||e==x||"[object AsyncFunction]"==e||"[object Proxy]"==e}function ea(t){return"number"==typeof t&&t==va(t)}function na(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=p}function ra(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function ia(t){return null!=t&&"object"==typeof t}var oa=be?Ze(be):function(t){return ia(t)&&vo(t)==S};function sa(t){return"number"==typeof t||ia(t)&&Tr(t)==k}function aa(t){if(!ia(t)||Tr(t)!=E)return!1;var e=Gt(t);if(null===e)return!0;var n=Ft.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&Dt.call(n)==zt}var ca=_e?Ze(_e):function(t){return ia(t)&&Tr(t)==A};var ua=xe?Ze(xe):function(t){return ia(t)&&vo(t)==P};function la(t){return"string"==typeof t||!Gs(t)&&ia(t)&&Tr(t)==O}function fa(t){return"symbol"==typeof t||ia(t)&&Tr(t)==I}var pa=Se?Ze(Se):function(t){return ia(t)&&na(t.length)&&!!oe[Tr(t)]};var ha=Ki(zr),da=Ki((function(t,e){return t<=e}));function ga(t){if(!t)return[];if(Qs(t))return la(t)?hn(t):Ii(t);if(ee&&t[ee])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[ee]());var e=vo(t);return(e==S?an:e==P?ln:Ua)(t)}function ma(t){return t?(t=wa(t))===f||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function va(t){var e=ma(t),n=e%1;return e==e?n?e-n:e:0}function ya(t){return t?ur(va(t),0,d):0}function wa(t){if("number"==typeof t)return t;if(fa(t))return h;if(ra(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=ra(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=Qe(t);var n=mt.test(t);return n||yt.test(t)?ue(t.slice(2),n?2:8):gt.test(t)?h:+t}function ba(t){return ji(t,Da(t))}function _a(t){return null==t?"":fi(t)}var xa=Li((function(t,e){if(Co(e)||Qs(e))ji(e,La(e),t);else for(var n in e)Ft.call(e,n)&&rr(t,n,e[n])})),Sa=Li((function(t,e){ji(e,Da(e),t)})),ka=Li((function(t,e,n,r){ji(e,Da(e),t,r)})),Ea=Li((function(t,e,n,r){ji(e,La(e),t,r)})),Ca=io(cr);var Ta=Yr((function(t,e){t=Tt(t);var r=-1,i=e.length,o=i>2?e[2]:n;for(o&&xo(e[0],e[1],o)&&(i=1);++r1),e})),ji(t,so(t),n),r&&(n=lr(n,7,no));for(var i=e.length;i--;)hi(n,e[i]);return n}));var Ba=io((function(t,e){return null==t?{}:function(t,e){return Gr(t,e,(function(e,n){return Oa(t,n)}))}(t,e)}));function za(t,e){if(null==t)return{};var n=je(so(t),(function(t){return[t]}));return e=lo(e),Gr(t,n,(function(t,n){return e(t,n[0])}))}var qa=Yi(La),Ha=Yi(Da);function Ua(t){return null==t?[]:Je(t,La(t))}var $a=Ri((function(t,e,n){return e=e.toLowerCase(),t+(n?Va(e):e)}));function Va(t){return Xa(_a(t).toLowerCase())}function Wa(t){return(t=_a(t))&&t.replace(bt,nn).replace(Yt,"")}var Ga=Ri((function(t,e,n){return t+(n?"-":"")+e.toLowerCase()})),Ka=Ri((function(t,e,n){return t+(n?" ":"")+e.toLowerCase()})),Qa=Mi("toLowerCase");var Za=Ri((function(t,e,n){return t+(n?"_":"")+e.toLowerCase()}));var Ja=Ri((function(t,e,n){return t+(n?" ":"")+Xa(e)}));var Ya=Ri((function(t,e,n){return t+(n?" ":"")+e.toUpperCase()})),Xa=Mi("toUpperCase");function tc(t,e,r){return t=_a(t),(e=r?n:e)===n?function(t){return ne.test(t)}(t)?function(t){return t.match(te)||[]}(t):function(t){return t.match(lt)||[]}(t):t.match(e)||[]}var ec=Yr((function(t,e){try{return ke(t,n,e)}catch(t){return Xs(t)?t:new kt(t)}})),nc=io((function(t,e){return Ce(e,(function(e){e=zo(e),ar(t,e,js(t[e],t))})),t}));function rc(t){return function(){return t}}var ic=qi(),oc=qi(!0);function sc(t){return t}function ac(t){return Mr("function"==typeof t?t:lr(t,1))}var cc=Yr((function(t,e){return function(n){return jr(n,t,e)}})),uc=Yr((function(t,e){return function(n){return jr(t,n,e)}}));function lc(t,e,n){var r=La(e),i=kr(e,r);null!=n||ra(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=kr(e,La(e)));var o=!(ra(n)&&"chain"in n&&!n.chain),s=ta(t);return Ce(i,(function(n){var r=e[n];t[n]=r,s&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__),i=n.__actions__=Ii(this.__actions__);return i.push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,Ne([this.value()],arguments))})})),t}function fc(){}var pc=Vi(je),hc=Vi(Ae),dc=Vi(Fe);function gc(t){return So(t)?$e(zo(t)):function(t){return function(e){return Er(e,t)}}(t)}var mc=Gi(),vc=Gi(!0);function yc(){return[]}function wc(){return!1}var bc=$i((function(t,e){return t+e}),0),_c=Zi("ceil"),xc=$i((function(t,e){return t/e}),1),Sc=Zi("floor");var kc=$i((function(t,e){return t*e}),1),Ec=Zi("round"),Cc=$i((function(t,e){return t-e}),0);return Hn.after=function(t,e){if("function"!=typeof e)throw new Ot(r);return t=va(t),function(){if(--t<1)return e.apply(this,arguments)}},Hn.ary=Os,Hn.assign=xa,Hn.assignIn=Sa,Hn.assignInWith=ka,Hn.assignWith=Ea,Hn.at=Ca,Hn.before=Is,Hn.bind=js,Hn.bindAll=nc,Hn.bindKey=Ns,Hn.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Gs(t)?t:[t]},Hn.chain=gs,Hn.chunk=function(t,e,r){e=(r?xo(t,e,r):e===n)?1:bn(va(e),0);var i=null==t?0:t.length;if(!i||e<1)return[];for(var o=0,s=0,a=st(me(i/e));oo?0:o+r),(i=i===n||i>o?o:va(i))<0&&(i+=o),i=r>i?0:ya(i);r>>0)?(t=_a(t))&&("string"==typeof e||null!=e&&!ca(e))&&!(e=fi(e))&&sn(t)?Si(hn(t),0,r):t.split(e,r):[]},Hn.spread=function(t,e){if("function"!=typeof t)throw new Ot(r);return e=null==e?0:bn(va(e),0),Yr((function(n){var r=n[e],i=Si(n,0,e);return r&&Ne(i,r),ke(t,this,i)}))},Hn.tail=function(t){var e=null==t?0:t.length;return e?oi(t,1,e):[]},Hn.take=function(t,e,r){return t&&t.length?oi(t,0,(e=r||e===n?1:va(e))<0?0:e):[]},Hn.takeRight=function(t,e,r){var i=null==t?0:t.length;return i?oi(t,(e=i-(e=r||e===n?1:va(e)))<0?0:e,i):[]},Hn.takeRightWhile=function(t,e){return t&&t.length?gi(t,lo(e,3),!1,!0):[]},Hn.takeWhile=function(t,e){return t&&t.length?gi(t,lo(e,3)):[]},Hn.tap=function(t,e){return e(t),t},Hn.throttle=function(t,e,n){var i=!0,o=!0;if("function"!=typeof t)throw new Ot(r);return ra(n)&&(i="leading"in n?!!n.leading:i,o="trailing"in n?!!n.trailing:o),Ls(t,e,{leading:i,maxWait:e,trailing:o})},Hn.thru=ms,Hn.toArray=ga,Hn.toPairs=qa,Hn.toPairsIn=Ha,Hn.toPath=function(t){return Gs(t)?je(t,zo):fa(t)?[t]:Ii(Bo(_a(t)))},Hn.toPlainObject=ba,Hn.transform=function(t,e,n){var r=Gs(t),i=r||Js(t)||pa(t);if(e=lo(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:ra(t)&&ta(o)?Un(Gt(t)):{}}return(i?Ce:xr)(t,(function(t,r,i){return e(n,t,r,i)})),n},Hn.unary=function(t){return Os(t,1)},Hn.union=is,Hn.unionBy=os,Hn.unionWith=ss,Hn.uniq=function(t){return t&&t.length?pi(t):[]},Hn.uniqBy=function(t,e){return t&&t.length?pi(t,lo(e,2)):[]},Hn.uniqWith=function(t,e){return e="function"==typeof e?e:n,t&&t.length?pi(t,n,e):[]},Hn.unset=function(t,e){return null==t||hi(t,e)},Hn.unzip=as,Hn.unzipWith=cs,Hn.update=function(t,e,n){return null==t?t:di(t,e,bi(n))},Hn.updateWith=function(t,e,r,i){return i="function"==typeof i?i:n,null==t?t:di(t,e,bi(r),i)},Hn.values=Ua,Hn.valuesIn=function(t){return null==t?[]:Je(t,Da(t))},Hn.without=us,Hn.words=tc,Hn.wrap=function(t,e){return zs(bi(e),t)},Hn.xor=ls,Hn.xorBy=fs,Hn.xorWith=ps,Hn.zip=hs,Hn.zipObject=function(t,e){return yi(t||[],e||[],rr)},Hn.zipObjectDeep=function(t,e){return yi(t||[],e||[],ei)},Hn.zipWith=ds,Hn.entries=qa,Hn.entriesIn=Ha,Hn.extend=Sa,Hn.extendWith=ka,lc(Hn,Hn),Hn.add=bc,Hn.attempt=ec,Hn.camelCase=$a,Hn.capitalize=Va,Hn.ceil=_c,Hn.clamp=function(t,e,r){return r===n&&(r=e,e=n),r!==n&&(r=(r=wa(r))==r?r:0),e!==n&&(e=(e=wa(e))==e?e:0),ur(wa(t),e,r)},Hn.clone=function(t){return lr(t,4)},Hn.cloneDeep=function(t){return lr(t,5)},Hn.cloneDeepWith=function(t,e){return lr(t,5,e="function"==typeof e?e:n)},Hn.cloneWith=function(t,e){return lr(t,4,e="function"==typeof e?e:n)},Hn.conformsTo=function(t,e){return null==e||fr(t,e,La(e))},Hn.deburr=Wa,Hn.defaultTo=function(t,e){return null==t||t!=t?e:t},Hn.divide=xc,Hn.endsWith=function(t,e,r){t=_a(t),e=fi(e);var i=t.length,o=r=r===n?i:ur(va(r),0,i);return(r-=e.length)>=0&&t.slice(r,o)==e},Hn.eq=Us,Hn.escape=function(t){return(t=_a(t))&&Z.test(t)?t.replace(K,rn):t},Hn.escapeRegExp=function(t){return(t=_a(t))&&it.test(t)?t.replace(rt,"\\$&"):t},Hn.every=function(t,e,r){var i=Gs(t)?Ae:mr;return r&&xo(t,e,r)&&(e=n),i(t,lo(e,3))},Hn.find=ws,Hn.findIndex=Wo,Hn.findKey=function(t,e){return Re(t,lo(e,3),xr)},Hn.findLast=bs,Hn.findLastIndex=Go,Hn.findLastKey=function(t,e){return Re(t,lo(e,3),Sr)},Hn.floor=Sc,Hn.forEach=_s,Hn.forEachRight=xs,Hn.forIn=function(t,e){return null==t?t:br(t,lo(e,3),Da)},Hn.forInRight=function(t,e){return null==t?t:_r(t,lo(e,3),Da)},Hn.forOwn=function(t,e){return t&&xr(t,lo(e,3))},Hn.forOwnRight=function(t,e){return t&&Sr(t,lo(e,3))},Hn.get=Pa,Hn.gt=$s,Hn.gte=Vs,Hn.has=function(t,e){return null!=t&&yo(t,e,Pr)},Hn.hasIn=Oa,Hn.head=Qo,Hn.identity=sc,Hn.includes=function(t,e,n,r){t=Qs(t)?t:Ua(t),n=n&&!r?va(n):0;var i=t.length;return n<0&&(n=bn(i+n,0)),la(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&ze(t,e,n)>-1},Hn.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:va(n);return i<0&&(i=bn(r+i,0)),ze(t,e,i)},Hn.inRange=function(t,e,r){return e=ma(e),r===n?(r=e,e=0):r=ma(r),function(t,e,n){return t>=_n(e,n)&&t=-9007199254740991&&t<=p},Hn.isSet=ua,Hn.isString=la,Hn.isSymbol=fa,Hn.isTypedArray=pa,Hn.isUndefined=function(t){return t===n},Hn.isWeakMap=function(t){return ia(t)&&vo(t)==j},Hn.isWeakSet=function(t){return ia(t)&&"[object WeakSet]"==Tr(t)},Hn.join=function(t,e){return null==t?"":yn.call(t,e)},Hn.kebabCase=Ga,Hn.last=Xo,Hn.lastIndexOf=function(t,e,r){var i=null==t?0:t.length;if(!i)return-1;var o=i;return r!==n&&(o=(o=va(r))<0?bn(i+o,0):_n(o,i-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,o):Be(t,He,o,!0)},Hn.lowerCase=Ka,Hn.lowerFirst=Qa,Hn.lt=ha,Hn.lte=da,Hn.max=function(t){return t&&t.length?vr(t,sc,Ar):n},Hn.maxBy=function(t,e){return t&&t.length?vr(t,lo(e,2),Ar):n},Hn.mean=function(t){return Ue(t,sc)},Hn.meanBy=function(t,e){return Ue(t,lo(e,2))},Hn.min=function(t){return t&&t.length?vr(t,sc,zr):n},Hn.minBy=function(t,e){return t&&t.length?vr(t,lo(e,2),zr):n},Hn.stubArray=yc,Hn.stubFalse=wc,Hn.stubObject=function(){return{}},Hn.stubString=function(){return""},Hn.stubTrue=function(){return!0},Hn.multiply=kc,Hn.nth=function(t,e){return t&&t.length?Vr(t,va(e)):n},Hn.noConflict=function(){return pe._===this&&(pe._=qt),this},Hn.noop=fc,Hn.now=Ps,Hn.pad=function(t,e,n){t=_a(t);var r=(e=va(e))?pn(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return Wi(ve(i),n)+t+Wi(me(i),n)},Hn.padEnd=function(t,e,n){t=_a(t);var r=(e=va(e))?pn(t):0;return e&&re){var i=t;t=e,e=i}if(r||t%1||e%1){var o=kn();return _n(t+o*(e-t+ce("1e-"+((o+"").length-1))),e)}return Zr(t,e)},Hn.reduce=function(t,e,n){var r=Gs(t)?Le:We,i=arguments.length<3;return r(t,lo(e,4),n,i,dr)},Hn.reduceRight=function(t,e,n){var r=Gs(t)?De:We,i=arguments.length<3;return r(t,lo(e,4),n,i,gr)},Hn.repeat=function(t,e,r){return e=(r?xo(t,e,r):e===n)?1:va(e),Jr(_a(t),e)},Hn.replace=function(){var t=arguments,e=_a(t[0]);return t.length<3?e:e.replace(t[1],t[2])},Hn.result=function(t,e,r){var i=-1,o=(e=_i(e,t)).length;for(o||(o=1,t=n);++ip)return[];var n=d,r=_n(t,d);e=lo(e),t-=d;for(var i=Ke(r,e);++n=s)return t;var c=r-pn(i);if(c<1)return i;var u=a?Si(a,0,c).join(""):t.slice(0,c);if(o===n)return u+i;if(a&&(c+=u.length-c),ca(o)){if(t.slice(c).search(o)){var l,f=u;for(o.global||(o=At(o.source,_a(dt.exec(o))+"g")),o.lastIndex=0;l=o.exec(f);)var p=l.index;u=u.slice(0,p===n?c:p)}}else if(t.indexOf(fi(o),c)!=c){var h=u.lastIndexOf(o);h>-1&&(u=u.slice(0,h))}return u+i},Hn.unescape=function(t){return(t=_a(t))&&Q.test(t)?t.replace(G,gn):t},Hn.uniqueId=function(t){var e=++Mt;return _a(t)+e},Hn.upperCase=Ya,Hn.upperFirst=Xa,Hn.each=_s,Hn.eachRight=xs,Hn.first=Qo,lc(Hn,function(){var t={};return xr(Hn,(function(e,n){Ft.call(Hn.prototype,n)||(t[n]=e)})),t}(),{chain:!1}),Hn.VERSION="4.17.21",Ce(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(t){Hn[t].placeholder=Hn})),Ce(["drop","take"],(function(t,e){Wn.prototype[t]=function(r){r=r===n?1:bn(va(r),0);var i=this.__filtered__&&!e?new Wn(this):this.clone();return i.__filtered__?i.__takeCount__=_n(r,i.__takeCount__):i.__views__.push({size:_n(r,d),type:t+(i.__dir__<0?"Right":"")}),i},Wn.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}})),Ce(["filter","map","takeWhile"],(function(t,e){var n=e+1,r=1==n||3==n;Wn.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:lo(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}})),Ce(["head","last"],(function(t,e){var n="take"+(e?"Right":"");Wn.prototype[t]=function(){return this[n](1).value()[0]}})),Ce(["initial","tail"],(function(t,e){var n="drop"+(e?"":"Right");Wn.prototype[t]=function(){return this.__filtered__?new Wn(this):this[n](1)}})),Wn.prototype.compact=function(){return this.filter(sc)},Wn.prototype.find=function(t){return this.filter(t).head()},Wn.prototype.findLast=function(t){return this.reverse().find(t)},Wn.prototype.invokeMap=Yr((function(t,e){return"function"==typeof t?new Wn(this):this.map((function(n){return jr(n,t,e)}))})),Wn.prototype.reject=function(t){return this.filter(Rs(lo(t)))},Wn.prototype.slice=function(t,e){t=va(t);var r=this;return r.__filtered__&&(t>0||e<0)?new Wn(r):(t<0?r=r.takeRight(-t):t&&(r=r.drop(t)),e!==n&&(r=(e=va(e))<0?r.dropRight(-e):r.take(e-t)),r)},Wn.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Wn.prototype.toArray=function(){return this.take(d)},xr(Wn.prototype,(function(t,e){var r=/^(?:filter|find|map|reject)|While$/.test(e),i=/^(?:head|last)$/.test(e),o=Hn[i?"take"+("last"==e?"Right":""):e],s=i||/^find/.test(e);o&&(Hn.prototype[e]=function(){var e=this.__wrapped__,a=i?[1]:arguments,c=e instanceof Wn,u=a[0],l=c||Gs(e),f=function(t){var e=o.apply(Hn,Ne([t],a));return i&&p?e[0]:e};l&&r&&"function"==typeof u&&1!=u.length&&(c=l=!1);var p=this.__chain__,h=!!this.__actions__.length,d=s&&!p,g=c&&!h;if(!s&&l){e=g?e:new Wn(this);var m=t.apply(e,a);return m.__actions__.push({func:ms,args:[f],thisArg:n}),new Vn(m,p)}return d&&g?t.apply(this,a):(m=this.thru(f),d?i?m.value()[0]:m.value():m)})})),Ce(["pop","push","shift","sort","splice","unshift"],(function(t){var e=It[t],n=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",r=/^(?:pop|shift)$/.test(t);Hn.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)}))}})),xr(Wn.prototype,(function(t,e){var n=Hn[e];if(n){var r=n.name+"";Ft.call(Nn,r)||(Nn[r]=[]),Nn[r].push({name:e,func:n})}})),Nn[Hi(n,2).name]=[{name:"wrapper",func:n}],Wn.prototype.clone=function(){var t=new Wn(this.__wrapped__);return t.__actions__=Ii(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Ii(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Ii(this.__views__),t},Wn.prototype.reverse=function(){if(this.__filtered__){var t=new Wn(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Wn.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){var r=-1,i=n.length;for(;++r=this.__values__.length;return{done:t,value:t?n:this.__values__[this.__index__++]}},Hn.prototype.plant=function(t){for(var e,r=this;r instanceof $n;){var i=Ho(r);i.__index__=0,i.__values__=n,e?o.__wrapped__=i:e=i;var o=i;r=r.__wrapped__}return o.__wrapped__=t,e},Hn.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Wn){var e=t;return this.__actions__.length&&(e=new Wn(this)),(e=e.reverse()).__actions__.push({func:ms,args:[rs],thisArg:n}),new Vn(e,this.__chain__)}return this.thru(rs)},Hn.prototype.toJSON=Hn.prototype.valueOf=Hn.prototype.value=function(){return mi(this.__wrapped__,this.__actions__)},Hn.prototype.first=Hn.prototype.head,ee&&(Hn.prototype[ee]=function(){return this}),Hn}();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(pe._=mn,define((function(){return mn}))):de?((de.exports=mn)._=mn,he._=mn):pe._=mn}.call(this),e.exports}.call({});const Zt=f.DiagnosticCategory;function Jt(t){return{line:t.row+1,offset:t.column+1}}function Yt(t){return new h.Point(t.line-1,t.offset-1)}function Xt(t){return te(t.start,t.end)}function te(t,e){return new h.Range(Yt(t),Yt(e))}function ee(t){const e=ne(t),n=e.formatCodeOptions;return{formatCodeOptions:{indentSize:atom.config.get("editor.tabLength"),tabSize:atom.config.get("editor.tabLength"),...n},compileOnSave:!!e.compileOnSave,preferences:e.preferences?e.preferences:{}}}function ne(t){".json"!==w.extname(t)&&(t+=".json");let{config:e}=f.readConfigFile(t,(t=>f.sys.readFile(t)));if(void 0===e)return{};if("string"==typeof e.extends){const n=ne(w.join(w.dirname(t),e.extends));e=Object.assign({},n,e)}return e}function re(t){return{label:oe(t.prefixDisplayParts)+t.parameters.map((t=>oe(t.displayParts))).join(oe(t.separatorDisplayParts))+oe(t.suffixDisplayParts),documentation:oe(t.documentation),parameters:t.parameters.map(ie)}}function ie(t){return{label:oe(t.displayParts),documentation:oe(t.documentation)}}function oe(t){return t.map((t=>t.text)).join("")}const se=function(){let t;return function(e,n){if(void 0===e)return!0;void 0===t&&(t=new Map(Object.values(f.Diagnostics).map((t=>[t.code,t.category]))));const r=t.get(e);return void 0===r||r===n}}();function ae(t){return void 0!==t&&function(t){const e=atom.config.get("atom-typescript").tsFileExtensions;atom.config.get("atom-typescript").allowJS&&e.push(...atom.config.get("atom-typescript").jsFileExtensions);return e.includes(t)}(w.extname(t))}function ce(){const t=atom.config.get("atom-typescript").tsSyntaxScopes;return atom.config.get("atom-typescript").allowJS&&t.push(...atom.config.get("atom-typescript").jsSyntaxScopes),t}function ue(t){return ae(t.getPath())&&le(t)}function le(t){const[e]=t.getRootScopeDescriptor().getScopesArray();return ce().includes(e)}function fe(t,e){const n=t.getPath();if(void 0!==n){return{file:n,...e?Jt(e):function(t){const e=t.getCursorBufferPosition();return{line:e.row+1,offset:e.column+1}}(t)}}}async function pe(t,e){const n=new h.TextEditor({readonly:!0,keyboardInputEnabled:!1,showInvisibles:!1,tabLength:atom.config.get("editor.tabLength")}),r=atom.views.getView(n);try{return r.setUpdatedSynchronously(!0),r.style.pointerEvents="none",r.style.position="absolute",r.style.top="100vh",r.style.width="100vw",atom.grammars.assignLanguageMode(n.getBuffer(),e),n.setText(t),n.scrollToBufferPosition(n.getBuffer().getEndPosition()),atom.views.getView(atom.workspace).appendChild(r),await async function(t){return new Promise((e=>{const n=t.getBuffer().getLanguageMode(),r=t.component.getNextUpdatePromise();if(n.fullyTokenized||n.tree)e(r);else{const n=t.onDidTokenize((()=>{n.dispose(),e(r)}))}}))}(n),Array.from(r.querySelectorAll(".line:not(.dummy)")).map((t=>t.innerHTML))}finally{r.remove()}}var he={};function de(t){const e=t.dataset.startLine;return void 0!==e?parseInt(e,10)-1:0}function ge(t){const e=t.dataset.endLine;return void 0!==e?parseInt(e,10)-1:0}function me(t,e,n){const r=n.querySelectorAll(":scope > ol > li.node");if(0===r.length)return;for(const n of Array.from(r)){const r=de(n),i=ge(n);if(isFinite(r)&&isFinite(i)){if(t>=r&&e<=i){const r=me(t,e,n);return r||n}if(isFinite(i)&&e=i&&e<=o?n:void 0}function ve(t){return t.spans.length>0?t.spans[0].start.line-1:0}function ye(t,e){if(!t||!e)return t===e;if(t.text===e.text){if(e.collapsed&&(t.collapsed=!0),t.childItems&&e.childItems){let n,r;for(let i=0,o=t.childItems.length;ive(t)-ve(e)));for(const e of t.childItems)we(e)}}class be{constructor(t){this.props=t,ft.initialize(this)}async update(t){this.props={...this.props,...t},await ft.update(this)}async destroy(){await ft.destroy(this)}render(){var t,e,n,r;const i=this.props.navTree,{ctrl:o}=this.props,s=(i.childItems?"nested-":"")+"item"+(i.collapsed?" collapsed":" expanded"),a=this.getStyles();return ft.dom("li",{className:"node entry exanded list-"+s,dataset:{startLine:null===(t=this.props.navTree.spans[0])||void 0===t||null===(e=t.start)||void 0===e?void 0:e.line,endLine:null===(n=this.props.navTree.spans[0])||void 0===n||null===(r=n.end)||void 0===r?void 0:r.line}},ft.dom("div",{className:"header list-item",on:{click:t=>this.entryClicked(t,i)}},ft.dom("span",{className:a},i.text)),ft.dom("ol",{className:"entries list-tree"},i.childItems?i.childItems.map((t=>ft.dom(be,{navTree:t,ctrl:o}))):null))}getStyles(){const{kind:t}=this.props.navTree;let e="icon icon-"+t;const{kindModifiers:n}=this.props.navTree;return n&&(e+=" "+n.split(/[, ]/).map((t=>"modifier-"+t.trim())).join(" ")),e}entryClicked(t,e){t.stopPropagation();(function(t,e){return!!t.childItems&&e.target===e.currentTarget})(e,t)?(e.collapsed=!e.collapsed,Kt(ft.update(this))):this.props.ctrl.gotoNode(e)}}he=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)};var _e,xe={},Se={};_e="object"==typeof T&&T&&T.Object===Object&&T;var ke="object"==typeof self&&self&&self.Object===Object&&self,Ee=_e||ke||Function("return this")();xe=function(){return Se.Date.now()};var Ce={},Te={},Ae={},Pe=/\s/;Ae=function(t){for(var e=t.length;e--&&Pe.test(t.charAt(e)););return e};var Oe=/^\s+/;Te=function(t){return t?t.slice(0,Ae(t)+1).replace(Oe,""):t};var Ie,je={},Ne={};Ie=(Se=Ee).Symbol;var Le={},De=Object.prototype,Fe=De.hasOwnProperty,Me=De.toString,Re=Ie?Ie.toStringTag:void 0;Le=function(t){var e=Fe.call(t,Re),n=t[Re];try{t[Re]=void 0;var r=!0}catch(t){}var i=Me.call(t);return r&&(e?t[Re]=n:delete t[Re]),i};var Be={},ze=Object.prototype.toString;Be=function(t){return ze.call(t)};var qe=Ie?Ie.toStringTag:void 0;Ne=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":qe&&qe in Object(t)?Le(t):Be(t)};var He={};He=function(t){return null!=t&&"object"==typeof t};je=function(t){return"symbol"==typeof t||He(t)&&"[object Symbol]"==Ne(t)};var Ue=/^[-+]0x[0-9a-f]+$/i,$e=/^0b[01]+$/i,Ve=/^0o[0-7]+$/i,We=parseInt;Ce=function(t){if("number"==typeof t)return t;if(je(t))return NaN;if(he(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=he(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=Te(t);var n=$e.test(t);return n||Ve.test(t)?We(t.slice(2),n?2:8):Ue.test(t)?NaN:+t};var Ge=Math.max,Ke=Math.min;var Qe=C((function(t,e,n){var r,i,o,s,a,c,u=0,l=!1,f=!1,p=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function h(e){var n=r,o=i;return r=i=void 0,u=e,s=t.apply(o,n)}function d(t){return u=t,a=setTimeout(m,e),l?h(t):s}function g(t){var n=t-c;return void 0===c||n>=e||n<0||f&&t-u>=o}function m(){var t=xe();if(g(t))return v(t);a=setTimeout(m,function(t){var n=e-(t-c);return f?Ke(n,o-(t-u)):n}(t))}function v(t){return a=void 0,p&&r?h(t):(r=i=void 0,s)}function y(){var t=xe(),n=g(t);if(r=arguments,i=this,c=t,n){if(void 0===a)return d(c);if(f)return clearTimeout(a),a=setTimeout(m,e),h(c)}return void 0===a&&(a=setTimeout(m,e)),s}return e=Ce(e)||0,he(n)&&(l=!!n.leading,o=(f="maxWait"in n)?Ge(Ce(n.maxWait)||0,e):o,p="trailing"in n?!!n.trailing:p),y.cancel=function(){void 0!==a&&clearTimeout(a),u=0,r=c=i=a=void 0},y.flush=function(){return void 0===a?s:v(xe())},y}));class Ze{constructor(t){this.props=t,this.subscriptions=new d,this.longLineLength=4e3,this.largeFileLineCount=500,this.loadNavTree=async()=>{if(!this.editor)return;if(!this.getClient)return;const t=this.editor.getPath();if(void 0!==t)try{const e=await this.getClient(t),n=(await e.execute("navtree",{file:t})).body;n&&(this.setNavTree(n),await ft.update(this))}catch(e){console.error(e,t)}},this.selectAtCursorLine=({newBufferPosition:t})=>{var e,n;const r=this.firstNode();if(!r)return;const i=t.row,o=null!==(e=null===(n=me(i,i,r))||void 0===n?void 0:n.querySelector(".header"))&&void 0!==e?e:void 0,s=this.getSelectedNode();o!==s&&(s&&s.classList.remove("selected"),o&&o.classList.add("selected"))},this.subscribeToEditor=async t=>{if(this.editorScrolling&&this.editorScrolling.dispose(),this.editorChanging&&this.editorChanging.dispose(),!t||!ue(t))return this.update({navTree:null});this.editor=t,await this.loadNavTree();const e=this.lineCountIfLarge(t);atom.config.get("atom-typescript.largeFileNoFollowCursor")&&0!==e||(this.editorScrolling=t.onDidChangeCursorPosition(this.selectAtCursorLine)),this.editorChanging=t.onDidStopChanging(0===e?this.loadNavTree:Qe(this.loadNavTree,Math.max(e/5,300)))},we(t.navTree),ft.initialize(this),this.subscriptions.add(atom.workspace.observeActiveTextEditor(this.subscribeToEditor),atom.commands.add("atom-text-editor.typescript-editor",{"typescript:reveal-in-semantic-view":{description:"Reveal the symbol under the text cursor in semantic view",didDispatch:t=>{const e=t.currentTarget.getModel();this.selectAtCursorLine({newBufferPosition:e.getCursorBufferPosition()})}}}),atom.config.observe("atom-typescript.longLineLength",(t=>{t>0&&(this.longLineLength=t)})),atom.config.observe("atom-typescript.largeFileLineCount",(t=>{t>0&&(this.largeFileLineCount=t)})),atom.config.observe("linter-ui-default.longLineLength",(t=>{atom.config.get("atom-typescript.longLineLength")>0||"number"==typeof t&&(this.longLineLength=t)})),atom.config.observe("linter-ui-default.largeFileLineCount",(t=>{atom.config.get("atom-typescript.largeFileLineCount")>0||"number"==typeof t&&(this.largeFileLineCount=t/6)})))}async update(t){void 0!==t.navTree&&this.setNavTree(t.navTree),this.props={...this.props,...t},await ft.update(this)}async destroy(){this.editorScrolling&&this.editorScrolling.dispose(),this.editorChanging&&this.editorChanging.dispose(),this.editorScrolling=void 0,this.editorChanging=void 0,this.subscriptions.dispose(),await ft.destroy(this)}async setGetClient(t){this.getClient=t,await this.loadNavTree()}getSelectedNode(){var t;return null!==(t=this.element.querySelector(".header.selected"))&&void 0!==t?t:void 0}clearSelection(){const t=this.element.querySelectorAll(".header.selected");for(let e=0;e0?t.spans[0].start.offset-1:0}(t);this.editor.setCursorBufferPosition([e,n])}getCursorLine(){return this.editor?this.editor.getLastCursor().getBufferRow():void 0}setNavTree(t){if(we(t),Qt.isEqual(t,this.props.navTree))return;ye(t,this.props.navTree),this.props.navTree=t;const e=this.firstNode();if(e){const t=this.getCursorLine();void 0!==t&&this.markSelection(me(t,t,e))}}scrollTo(t){const e=t;"function"==typeof e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded():e.scrollIntoView()}lineCountIfLarge(t){const e=t.getLineCount();if(e>=this.largeFileLineCount)return e;{const n=t.getBuffer();for(let t=0,r=e;tthis.longLineLength)return this.longLineLength;return 0}}}class Je{constructor(t){this.comp=new Ze({navTree:t.navTree})}static create(t){return Je.instance||(Je.instance=new Je(t)),Je.instance}get element(){return this.comp.element}async setGetClient(t){await this.comp.setGetClient(t),await this.comp.update({})}getTitle(){return"TypeScript"}getURI(){return"atom-typescript://semantic-view"}async destroy(){Je.instance=null,await this.comp.destroy()}getDefaultLocation(){return"right"}getAllowedLocations(){return["left","right"]}serialize(){return{deserializer:"atomts-semantic-view/SemanticView",data:{navTree:this.comp.props.navTree}}}}Je.instance=null;var Ye,Xe=u,tn=a,en=s;Ye=function(t,e){return nn(t,e)};var nn=function(t,e){return t?rn(t,e):new on(e)};Ye.createStream=nn;function rn(t,e){if(!t)throw new Error("expected readStream");if(!t.readable)throw new Error("readStream must be readable");var n=new on(e);return t.pipe(n),n}function on(t){Xe.Transform.call(this,t),t=t||{},this._readableState.objectMode=!0,this._lineBuffer=[],this._keepEmptyLines=t.keepEmptyLines||!1,this._lastChunkEndedWithCR=!1;var e=this;this.on("pipe",(function(t){e.encoding||t instanceof Xe.Readable&&(e.encoding=t._readableState.encoding)}))}Ye.createLineStream=function(t){return console.log("WARNING: byline#createLineStream is deprecated and will be removed soon"),rn(t)},Ye.LineStream=on,tn.inherits(on,Xe.Transform),on.prototype._transform=function(t,e,n){e=e||"utf8",Buffer.isBuffer(t)&&("buffer"==e?(t=t.toString(),e="utf8"):t=t.toString(e)),this._chunkEncoding=e;var r=t.split(/\r\n|[\n\v\f\r\x85\u2028\u2029]/g);this._lastChunkEndedWithCR&&"\n"==t[0]&&r.shift(),this._lineBuffer.length>0&&(this._lineBuffer[this._lineBuffer.length-1]+=r[0],r.shift()),this._lastChunkEndedWithCR="\r"==t[t.length-1],this._lineBuffer=this._lineBuffer.concat(r),this._pushBuffer(e,1,n)},on.prototype._pushBuffer=function(t,e,n){for(;this._lineBuffer.length>e;){var r=this._lineBuffer.shift();if((this._keepEmptyLines||r.length>0)&&!this.push(this._reencode(r,t))){var i=this;return void en.setImmediate((function(){i._pushBuffer(t,e,n)}))}}n()},on.prototype._flush=function(t){this._pushBuffer(this._chunkEncoding,0,t)},on.prototype._reencode=function(t,e){return this.encoding&&this.encoding!=e?new Buffer(t,e).toString(this.encoding):this.encoding?t:new Buffer(t,e)};class sn{constructor(t){this.reportBusyWhile=t,this.callbacks=new Map,this.interval=0}async add(t,e){try{const n=new Promise(((n,r)=>{this.callbacks.set(t,{command:e,resolve:n,reject:r,started:Date.now()})}));return 0===this.interval&&(this.interval=window.setInterval((()=>{process.activateUvLoop()}),100)),await this.reportBusyWhile(e,(()=>n))}finally{this.callbacks.delete(t),0!==this.interval&&0===this.callbacks.size&&(clearInterval(this.interval),this.interval=0)}}rejectAll(t){for(const{reject:e}of this.callbacks.values())e(t);this.callbacks.clear()}resolve(t){const e=this.callbacks.get(t.request_seq);e?(window.atom_typescript_debug&&console.log("received response for",t.command,"in",Date.now()-e.started,"ms","with data",t.body),t.success?e.resolve(t):e.reject(new Error(t.message))):console.warn("unexpected response:",t)}resolveMS(t){const e=this.callbacks.get(t.request_seq);e?(window.atom_typescript_debug&&console.log(`received requestCompleted event for multistep command ${e.command} in ${Date.now()-e.started} ms`),e.resolve(void 0)):console.warn("unexpected requestCompleted event:",t)}error(t,e){const n=this.callbacks.get(t);n?n.reject(e):console.error(e)}}const an=new Set(Object.keys({compileOnSaveAffectedFileList:!0,compileOnSaveEmitFile:!0,completionEntryDetails:!0,completions:!0,completionInfo:!0,configure:!0,definition:!0,format:!0,getCodeFixes:!0,getSupportedCodeFixes:!0,documentHighlights:!0,projectInfo:!0,quickinfo:!0,references:!0,reload:!0,rename:!0,navtree:!0,navto:!0,getApplicableRefactors:!0,getEditsForRefactor:!0,organizeImports:!0,signatureHelp:!0,getEditsForFileRename:!0,applyCodeActionCommand:!0})),cn=new Set(Object.keys({geterr:!0,geterrForProject:!0})),un=new Set(Object.keys({configFileDiag:!0,semanticDiag:!0,suggestionDiag:!0,syntaxDiag:!0}));class ln{constructor(t,e,n){this.tsServerPath=t,this.version=e,this.reportBusyWhile=n,this.emitter=new g,this.seq=0,this.lastStderrOutput="",this.on=this.emitter.on.bind(this.emitter),this.exitHandler=(t,e=!0)=>{if(this.callbacks.rejectAll(t),e&&console.error("tsserver: ",t),this.server=void 0,this.emitter.emit("terminated"),e){let e=t.message;this.lastStderrOutput&&(e=`Last output from tsserver:\n${this.lastStderrOutput}\n\n${e}`),atom.notifications.addError("TypeScript server quit unexpectedly",{detail:e,stack:t.stack,dismissable:!0})}},this.onMessage=t=>{"response"===t.type?this.callbacks.resolve(t):this.onEvent(t)};const[r,i]=e.split(".").slice(0,2).map((t=>parseInt(t,10)));this.multistepSupported=r>2||2===r&&i>=2,this.callbacks=new sn(this.reportBusyWhile),this.server=this.startServer()}async execute(t,...e){this.server||(this.server=this.startServer(),this.emitter.emit("restarted"));const n={seq:this.seq++,command:t,arguments:e[0]};window.atom_typescript_debug&&console.log("sending request",n);let r=void 0;(function(t){return an.has(t)}(t)||this.multistepSupported&&function(t){return cn.has(t)}(t))&&(r=this.callbacks.add(n.seq,t));try{if(!this.server.stdin)throw new Error("Server stdin is missing");this.server.stdin.write(JSON.stringify(n)+"\n")}catch(t){this.callbacks.error(n.seq,t)}return r}async restartServer(){if(this.server){const t=this.server,e=setTimeout((()=>t.kill()),1e4);await Promise.all([this.execute("exit"),new Promise((t=>{const e=this.emitter.once("terminated",(()=>{e.dispose(),t()}))}))]),clearTimeout(e)}this.server||(this.server=this.startServer(),this.emitter.emit("restarted"))}startServer(){window.atom_typescript_debug&&console.log("starting",this.tsServerPath);const t=function(t){const e=atom.config.get("atom-typescript").locale,n=e?["--locale",e]:[];return new m({command:t,args:n}).process}(this.tsServerPath);if(!t)throw new Error("ChildProcess failed to start");const e=this.exitHandler;if(t.once("error",e),t.once("exit",((t,n)=>{0===t?e(new Error("Server stopped normally"),!1):null!==t?e(new Error("exited with code: "+t)):null!==n&&e(new Error("terminated on signal: "+n))})),!t.stdout)throw new Error("ChildProcess stdout missing");if(!t.stderr)throw new Error("ChildProcess stderr missing");var n;return(n=t.stdout,n.pipe(pn()).pipe(new hn)).on("data",this.onMessage),t.stderr.on("data",(t=>{console.warn("tsserver stderr:",this.lastStderrOutput=t.toString())})),t}onEvent(t){var e;window.atom_typescript_debug&&console.log("received event",t),t.body&&(e=t.event,un.has(e)?this.emitter.emit(t.event,t.body):"requestCompleted"===t.event&&this.callbacks.resolveMS(t.body))}}var fn,pn=C(Ye);class hn extends l{constructor(){super({objectMode:!0})}_transform(t,e,n){const r=t.toString();try{r.startsWith("{")?this.push(JSON.parse(r)):r.startsWith("Content-Length:")||console.warn(r)}catch(t){console.error("client: failed to parse: ",r)}finally{n(void 0)}}}function dn(t,e){void 0===e&&(e=!1);var n=t.length,r=0,i="",o=0,s=16,a=0,c=0,u=0,l=0,f=0;function p(e,n){for(var i=0,o=0;i=48&&s<=57)o=16*o+s-48;else if(s>=65&&s<=70)o=16*o+s-65+10;else{if(!(s>=97&&s<=102))break;o=16*o+s-97+10}r++,i++}return i=n)return o=n,s=17;var e=t.charCodeAt(r);if(gn(e)){do{r++,i+=String.fromCharCode(e),e=t.charCodeAt(r)}while(gn(e));return s=15}if(mn(e))return r++,i+=String.fromCharCode(e),13===e&&10===t.charCodeAt(r)&&(r++,i+="\n"),a++,u=r,s=14;switch(e){case 123:return r++,s=1;case 125:return r++,s=2;case 91:return r++,s=3;case 93:return r++,s=4;case 58:return r++,s=6;case 44:return r++,s=5;case 34:return r++,i=function(){for(var e="",i=r;;){if(r>=n){e+=t.substring(i,r),f=2;break}var o=t.charCodeAt(r);if(34===o){e+=t.substring(i,r),r++;break}if(92!==o){if(o>=0&&o<=31){if(mn(o)){e+=t.substring(i,r),f=2;break}f=6}r++}else{if(e+=t.substring(i,r),++r>=n){f=2;break}switch(t.charCodeAt(r++)){case 34:e+='"';break;case 92:e+="\\";break;case 47:e+="/";break;case 98:e+="\b";break;case 102:e+="\f";break;case 110:e+="\n";break;case 114:e+="\r";break;case 116:e+="\t";break;case 117:var s=p(4,!0);s>=0?e+=String.fromCharCode(s):f=4;break;default:f=5}i=r}}return e}(),s=10;case 47:var h=r-1;if(47===t.charCodeAt(r+1)){for(r+=2;r=12&&t<=15);return t}:h,getToken:function(){return s},getTokenValue:function(){return i},getTokenOffset:function(){return o},getTokenLength:function(){return r-o},getTokenStartLine:function(){return c},getTokenStartCharacter:function(){return o-l},getTokenError:function(){return f}}}function gn(t){return 32===t||9===t||11===t||12===t||160===t||5760===t||t>=8192&&t<=8203||8239===t||8287===t||12288===t||65279===t}function mn(t){return 10===t||13===t||8232===t||8233===t}function vn(t){return t>=48&&t<=57}(fn||(fn={})).DEFAULT={allowTrailingComma:!1};var yn,wn,bn=function(t,e,n){void 0===e&&(e=[]),void 0===n&&(n=fn.DEFAULT);var r=null,i=[],o=[];function s(t){Array.isArray(i)?i.push(t):null!==r&&(i[r]=t)}return function(t,e,n){void 0===n&&(n=fn.DEFAULT);var r=dn(t,!1);function i(t){return t?function(){return t(r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter())}:function(){return!0}}function o(t){return t?function(e){return t(e,r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter())}:function(){return!0}}var s=i(e.onObjectBegin),a=o(e.onObjectProperty),c=i(e.onObjectEnd),u=i(e.onArrayBegin),l=i(e.onArrayEnd),f=o(e.onLiteralValue),p=o(e.onSeparator),h=i(e.onComment),d=o(e.onError),g=n&&n.disallowComments,m=n&&n.allowTrailingComma;function v(){for(;;){var t=r.scan();switch(r.getTokenError()){case 4:y(14);break;case 5:y(15);break;case 3:y(13);break;case 1:g||y(11);break;case 2:y(12);break;case 6:y(16)}switch(t){case 12:case 13:g?y(10):h();break;case 16:y(1);break;case 15:case 14:break;default:return t}}}function y(t,e,n){if(void 0===e&&(e=[]),void 0===n&&(n=[]),d(t),e.length+n.length>0)for(var i=r.getToken();17!==i;){if(-1!==e.indexOf(i)){v();break}if(-1!==n.indexOf(i))break;i=v()}}function w(t){var e=r.getTokenValue();return t?f(e):a(e),v(),!0}function b(){switch(r.getToken()){case 11:var t=r.getTokenValue(),e=Number(t);isNaN(e)&&(y(2),e=0),f(e);break;case 7:f(null);break;case 8:f(!0);break;case 9:f(!1);break;default:return!1}return v(),!0}function _(){return 10!==r.getToken()?(y(3,[],[2,5]),!1):(w(!1),6===r.getToken()?(p(":"),v(),k()||y(4,[],[2,5])):y(5,[],[2,5]),!0)}function x(){s(),v();for(var t=!1;2!==r.getToken()&&17!==r.getToken();){if(5===r.getToken()){if(t||y(4,[],[]),p(","),v(),2===r.getToken()&&m)break}else t&&y(6,[],[]);_()||y(4,[],[2,5]),t=!0}return c(),2!==r.getToken()?y(7,[2],[]):v(),!0}function S(){u(),v();for(var t=!1;4!==r.getToken()&&17!==r.getToken();){if(5===r.getToken()){if(t||y(4,[],[]),p(","),v(),4===r.getToken()&&m)break}else t&&y(6,[],[]);k()||y(4,[],[4,5]),t=!0}return l(),4!==r.getToken()?y(8,[4],[]):v(),!0}function k(){switch(r.getToken()){case 3:return S();case 1:return x();case 10:return w(!0);default:return b()}}if(v(),17===r.getToken())return!!n.allowEmptyContent||(y(4,[],[]),!1);if(!k())return y(4,[],[]),!1;17!==r.getToken()&&y(9,[],[])}(t,{onObjectBegin:function(){var t={};s(t),o.push(i),i=t,r=null},onObjectProperty:function(t){r=t},onObjectEnd:function(){i=o.pop()},onArrayBegin:function(){var t=[];s(t),o.push(i),i=t,r=null},onArrayEnd:function(){i=o.pop()},onLiteralValue:s,onError:function(t,n,r){e.push({error:t,offset:n,length:r})}},n),i[0]},_n=x,xn=w;wn=function(){var t=Error.prepareStackTrace;Error.prepareStackTrace=function(t,e){return e};var e=(new Error).stack;return Error.prepareStackTrace=t,e[2].getFileName()};var Sn,kn,En,Cn,Tn,An,Pn,On,In,jn,Nn=w,Ln=!1;function Dn(){kn={},En="win32"===process.platform,Cn=/^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/,Tn=/^([\s\S]*?)((?:\.{1,2}|[^\\\/]+?|)(\.[^.\/\\]*|))(?:[\\\/]*)$/,(An={}).parse=function(t){if("string"!=typeof t)throw new TypeError("Parameter 'pathString' must be a string, not "+typeof t);var e,n,r,i,o,s=(e=t,n=Cn.exec(e),r=(n[1]||"")+(n[2]||""),i=n[3]||"",o=Tn.exec(i),[r,o[1],o[2],o[3]]);if(!s||4!==s.length)throw new TypeError("Invalid path '"+t+"'");return{root:s[0],dir:s[0]+s[1].slice(0,-1),base:s[2],ext:s[3],name:s[2].slice(0,s[2].length-s[3].length)}},Pn=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,(On={}).parse=function(t){if("string"!=typeof t)throw new TypeError("Parameter 'pathString' must be a string, not "+typeof t);var e,n=(e=t,Pn.exec(e).slice(1));if(!n||4!==n.length)throw new TypeError("Invalid path '"+t+"'");return n[1]=n[1]||"",n[2]=n[2]||"",n[3]=n[3]||"",{root:n[0],dir:n[0]+n[1].slice(0,-1),base:n[2],ext:n[3],name:n[2].slice(0,n[2].length-n[3].length)}},kn=En?An.parse:On.parse,In=On.parse,kn.posix=In,jn=An.parse,kn.win32=jn}var Fn=Nn.parse||(Ln||(Ln=!0,Dn()),kn),Mn=function(t,e){var n="/";/^([A-Za-z]:)/.test(t)?n="":/^\\\\/.test(t)&&(n="\\\\");for(var r=[t],i=Fn(t);i.dir!==r[r.length-1];)r.push(i.dir),i=Fn(i.dir);return r.reduce((function(t,r){return t.concat(e.map((function(t){return Nn.resolve(n,r,t)})))}),[])};Sn=function(t,e,n){var r=e&&e.moduleDirectory?[].concat(e.moduleDirectory):["node_modules"];if(e&&"function"==typeof e.paths)return e.paths(n,t,(function(){return Mn(t,r)}),e);var i=Mn(t,r);return e&&e.paths?i.concat(e.paths):i};var Rn;Rn=function(t,e){return e||{}};var Bn,zn,qn={},Hn={},Un=Array.prototype.slice,$n=Object.prototype.toString;function Vn(t,e){for(var n=t.split("."),r=e.split(" "),i=r.length>1?r[0]:"=",o=(r.length>1?r[1]:r[0]).split("."),s=0;s<3;++s){var a=parseInt(n[s]||0,10),c=parseInt(o[s]||0,10);if(a!==c)return"<"===i?a="===i&&a>=c}return">="===i}function Wn(t,e){var n=e.split(/ ?&& ?/);if(0===n.length)return!1;for(var r=0;r= 15","async_hooks":">= 8","buffer_ieee754":"< 0.9.7","buffer":true,"child_process":true,"cluster":true,"console":true,"constants":true,"crypto":true,"_debug_agent":">= 1 && < 8","_debugger":"< 8","dgram":true,"diagnostics_channel":">= 15.1","dns":true,"dns/promises":">= 15","domain":">= 0.7.12","events":true,"freelist":"< 6","fs":true,"fs/promises":[">= 10 && < 10.1",">= 14"],"_http_agent":">= 0.11.1","_http_client":">= 0.11.1","_http_common":">= 0.11.1","_http_incoming":">= 0.11.1","_http_outgoing":">= 0.11.1","_http_server":">= 0.11.1","http":true,"http2":">= 8.8","https":true,"inspector":">= 8.0.0","_linklist":"< 8","module":true,"net":true,"node-inspect/lib/_inspect":">= 7.6.0 && < 12","node-inspect/lib/internal/inspect_client":">= 7.6.0 && < 12","node-inspect/lib/internal/inspect_repl":">= 7.6.0 && < 12","os":true,"path":true,"path/posix":">= 15.3","path/win32":">= 15.3","perf_hooks":">= 8.5","process":">= 1","punycode":true,"querystring":true,"readline":true,"repl":true,"smalloc":">= 0.11.5 && < 3","_stream_duplex":">= 0.9.4","_stream_transform":">= 0.9.4","_stream_wrap":">= 1.4.1","_stream_passthrough":">= 0.9.4","_stream_readable":">= 0.9.4","_stream_writable":">= 0.9.4","stream":true,"stream/promises":">= 15","string_decoder":true,"sys":[">= 0.6 && < 0.7",">= 0.8"],"timers":true,"timers/promises":">= 15","_tls_common":">= 0.11.13","_tls_legacy":">= 0.11.3 && < 10","_tls_wrap":">= 0.11.3","tls":true,"trace_events":">= 10","tty":true,"url":true,"util":true,"util/types":">= 15.3","v8/tools/arguments":">= 10 && < 12","v8/tools/codemap":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8/tools/consarray":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8/tools/csvparser":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8/tools/logreader":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8/tools/profile_view":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8/tools/splaytree":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8":">= 1","vm":true,"wasi":">= 13.4 && < 13.5","worker_threads":">= 11.7","zlib":true}'),Bn=function(t,e){return qn(Gn,t)&&function(t,e){if("boolean"==typeof e)return e;var n=void 0===t?process.versions&&process.versions.node&&process.versions.node:t;if("string"!=typeof n)throw new TypeError(void 0===t?"Unable to determine current node version":"If provided, a valid node version is required");if(e&&"object"==typeof e){for(var r=0;r1?e[0]:"=",r=(e.length>1?e[1]:e[0]).split("."),i=0;i<3;++i){var o=parseInt(tr[i]||0,10),s=parseInt(r[i]||0,10);if(o!==s)return"<"===n?o="===n&&o>=s}return">="===n}function nr(t){var e=t.split(/ ?&& ?/);if(0===e.length)return!1;for(var n=0;n= 15","async_hooks":">= 8","buffer_ieee754":"< 0.9.7","buffer":true,"child_process":true,"cluster":true,"console":true,"constants":true,"crypto":true,"_debug_agent":">= 1 && < 8","_debugger":"< 8","dgram":true,"diagnostics_channel":">= 15.1","dns":true,"dns/promises":">= 15","domain":">= 0.7.12","events":true,"freelist":"< 6","fs":true,"fs/promises":[">= 10 && < 10.1",">= 14"],"_http_agent":">= 0.11.1","_http_client":">= 0.11.1","_http_common":">= 0.11.1","_http_incoming":">= 0.11.1","_http_outgoing":">= 0.11.1","_http_server":">= 0.11.1","http":true,"http2":">= 8.8","https":true,"inspector":">= 8.0.0","_linklist":"< 8","module":true,"net":true,"node-inspect/lib/_inspect":">= 7.6.0 && < 12","node-inspect/lib/internal/inspect_client":">= 7.6.0 && < 12","node-inspect/lib/internal/inspect_repl":">= 7.6.0 && < 12","os":true,"path":true,"path/posix":">= 15.3","path/win32":">= 15.3","perf_hooks":">= 8.5","process":">= 1","punycode":true,"querystring":true,"readline":true,"repl":true,"smalloc":">= 0.11.5 && < 3","_stream_duplex":">= 0.9.4","_stream_transform":">= 0.9.4","_stream_wrap":">= 1.4.1","_stream_passthrough":">= 0.9.4","_stream_readable":">= 0.9.4","_stream_writable":">= 0.9.4","stream":true,"stream/promises":">= 15","string_decoder":true,"sys":[">= 0.6 && < 0.7",">= 0.8"],"timers":true,"timers/promises":">= 15","_tls_common":">= 0.11.13","_tls_legacy":">= 0.11.3 && < 10","_tls_wrap":">= 0.11.3","tls":true,"trace_events":">= 10","tty":true,"url":true,"util":true,"util/types":">= 15.3","v8/tools/arguments":">= 10 && < 12","v8/tools/codemap":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8/tools/consarray":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8/tools/csvparser":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8/tools/logreader":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8/tools/profile_view":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8/tools/splaytree":[">= 4.4.0 && < 5",">= 5.2.0 && < 12"],"v8":">= 1","vm":true,"wasi":">= 13.4 && < 13.5","worker_threads":">= 11.7","zlib":true}');var or={};for(var sr in ir)Object.prototype.hasOwnProperty.call(ir,sr)&&(or[sr]=rr(ir[sr]));yn.core=or;yn.isCore=function(t){return Bn(t)};var ar=x,cr=w,ur=ar.realpathSync&&"function"==typeof ar.realpathSync.native?ar.realpathSync.native:ar.realpathSync,lr=function(t){try{var e=ar.statSync(t)}catch(t){if(t&&("ENOENT"===t.code||"ENOTDIR"===t.code))return!1;throw t}return e.isFile()||e.isFIFO()},fr=function(t){try{var e=ar.statSync(t)}catch(t){if(t&&("ENOENT"===t.code||"ENOTDIR"===t.code))return!1;throw t}return e.isDirectory()},pr=function(t){try{return ur(t)}catch(t){if("ENOENT"!==t.code)throw t}return t},hr=function(t,e,n){return n&&!1===n.preserveSymlinks?t(e):e},dr=function(t,e){var n=t(e);try{return JSON.parse(n)}catch(t){}};async function gr(t,e){const{NODE_PATH:n}=process.env,r=e+".js",i=await async function(t,e){return new Promise(((n,r)=>mr(t,e,((t,e)=>{t?r(t):void 0===e?r(new Error("Module path is undefined")):n(e)}))))}("typescript/lib/"+r,{basedir:w.dirname(t),paths:void 0!==n?n.split(w.delimiter):void 0}).catch((async()=>{const e=await async function(t){const e=await async function(t){let e=t,n=w.dirname(e);for(;e!==n;){const t=await yr(e,[[".atom-typescript.json"],[".atom","atom-typescript.json"],[".vscode","settings.json"]]);if(void 0!==t)return{basedir:e,configFile:t};e=n,n=w.dirname(e)}}(t);if(e)try{const t=bn(await async function(t){return new Promise(((e,n)=>x.readFile(t,((t,r)=>{t?n(t):e(r.toString("utf-8"))}))))}(e.configFile));let r;if("object"==typeof(n=t)&&null!==n&&"string"==typeof n.tsdkPath)r=t.tsdkPath;else{if(!function(t){return"object"==typeof t&&null!==t&&"string"==typeof t["typescript.tsdk"]}(t))return;r=w.dirname(t["typescript.tsdk"])}return w.isAbsolute(r)?r:w.join(e.basedir,r)}catch(t){console.warn(t)}var n}(w.dirname(t));if(void 0!==e){const t=w.join(e,"lib",r);if(await vr(t))return t}const n=atom.config.get("atom-typescript.tsdkPath");if(n){const t=w.join(n,"lib",r);if(await vr(t))return t}return require.resolve("typescript/lib/"+r)})),o=w.resolve(i,"../../package.json");return{version:require(o).version,pathToBin:i}}yn.sync=function(t,e){if("string"!=typeof t)throw new TypeError("Path must be a string.");var n=Rn(0,e),r=n.isFile||lr,i=n.readFileSync||ar.readFileSync,o=n.isDirectory||fr,s=n.realpathSync||pr,a=n.readPackageSync||dr;if(n.readFileSync&&n.readPackageSync)throw new TypeError("`readFileSync` and `readPackageSync` are mutually exclusive.");var c=n.packageIterator,u=n.extensions||[".js"],l=!1!==n.includeCoreModules,f=n.basedir||cr.dirname(wn()),p=n.filename||f;n.paths=n.paths||[];var h=hr(s,cr.resolve(f),n);if(/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[/\\])/.test(t)){var d=cr.resolve(h,t);"."!==t&&".."!==t&&"/"!==t.slice(-1)||(d+="/");var g=y(d)||b(d);if(g)return hr(s,g,n)}else{if(l&&Bn(t))return t;var m=function(t,e){for(var r=function(){return function(t,e,n){for(var r=Sn(e,n,t),i=0;ix.access(t,x.constants.F_OK,(t=>{e(!t)}))))}async function yr(t,e){for(const n of e){const e=w.join(t,...n);if(await vr(e))return e}}class wr{constructor(t){this.reportBusyWhile=t,this.clients=new Map,this.memoizedClients=new Map,this.emitter=new g,this.subscriptions=new d,this.tsserverInstancePerTsconfig=atom.config.get("atom-typescript").tsserverInstancePerTsconfig,this.on=this.emitter.on.bind(this.emitter),this.diagnosticHandler=(t,e)=>n=>{const r=(i=n)&&i.triggerFile&&i.configFile?n.configFile:n.file;var i;r&&this.emitter.emit("diagnostics",{type:e,serverPath:t,filePath:r,diagnostics:n.diagnostics})}}async restartAllServers(){await this.reportBusyWhile("Restarting servers",(()=>Promise.all(Array.from(this.getAllClients()).map((t=>t.restartServer())))))}async get(t){const e=this.memoizedClients.get(t);if(e)return e;const n=this._get(t);this.memoizedClients.set(t,n);try{return await n}catch(e){throw this.memoizedClients.delete(t),e}}dispose(){this.emitter.dispose(),this.subscriptions.dispose(),this.memoizedClients.clear(),this.clients.clear()}async _get(t){const{pathToBin:e,version:n}=await gr(t,"tsserver"),r=this.tsserverInstancePerTsconfig?f.findConfigFile(t,(t=>f.sys.fileExists(t))):void 0;let i=this.clients.get(e);i||(i=new Map,this.clients.set(e,i));const o=i.get(r);if(o)return o;const s=new ln(e,n,this.reportBusyWhile);return i.set(r,s),this.subscriptions.add(s.on("configFileDiag",this.diagnosticHandler(e,"configFileDiag")),s.on("semanticDiag",this.diagnosticHandler(e,"semanticDiag")),s.on("syntaxDiag",this.diagnosticHandler(e,"syntaxDiag")),s.on("suggestionDiag",this.diagnosticHandler(e,"suggestionDiag"))),s}*getAllClients(){for(const t of this.clients.values())yield*t.values()}}function br(t){return{grammarScopes:ce(),priority:100,async highlight(e,n){if(!ue(e))return;const r=fe(e,n);if(!r)return;const i=await t(r.file),o=await i.execute("documentHighlights",{...r,filesToSearch:[r.file]});return o.body?Array.from(function*(t,e){for(const n of e)n.file===t&&(yield*n.highlightSpans.map(Xt))}(r.file,o.body)):void 0}}}async function _r(t,e,n){if(void 0===t)return null;const r=e.dom("div",{className:"atom-typescript-datatip-tooltip-kind"},t.kind,function(t,e){return void 0===e?null:t.dom("span",{className:"atom-typescript-datatip-tooltip-kind-modifiers"},e)}(t.kindModifiers)),i=t.tags?t.tags.map((t=>{const n="atom-typescript-datatip-tooltip-doc-tag atom-typescript-datatip-tooltip-doc-tag-name-"+t.name;return e.dom("div",{className:n},e.dom("span",{className:"atom-typescript-datatip-tooltip-doc-tag-name"},t.name),function(t,e){if(void 0===e)return null;const[,n,r]=/^\s*(\S*)([^]*)$/.exec(e);return t.dom("span",{className:"atom-typescript-datatip-tooltip-doc-tag-text"},t.dom("span",{className:"atom-typescript-datatip-tooltip-doc-tag-text-first-word"},n),r)}(e,t.text))})):null,o=e.dom("div",{className:"atom-typescript-datatip-tooltip-doc"},t.documentation,i),s=t.displayString.replace(/^\(.+?\)\s+/,"");return[await n(s),r,o]}const xr=Symbol.for("react.element"),Sr={dom:(t,e,...n)=>n.length>0?{$$typeof:xr,type:t,ref:null,props:{...e,children:n}}:{$$typeof:xr,type:t,ref:null,props:{...e}}};class kr{constructor(t){this.getClient=t,this.providerName="TypeScript type tooltips",this.priority=100,this.grammarScopes=ce()}async datatip(t,e){try{const n=t.getPath();if(void 0===n)return;const r=await this.getClient(n),i=(await r.execute("quickinfo",{file:n,line:e.row+1,offset:e.column+1})).body,o=await _r(i,Sr,Er);return{component:()=>Sr.dom("div",{className:"atom-typescript-datatip-tooltip"},o),range:h.Range.fromObject([Yt(i.start),Yt(i.end)])}}catch(t){return}}}async function Er(t){const e=atom.config.get("editor.fontFamily"),n=await pe(t.replace(/\r?\n$/,""),"source.ts");return Sr.dom("div",{style:{fontFamily:e},className:"atom-typescript-datatip-tooltip-code",dangerouslySetInnerHTML:{__html:n.join("\n")}})}function Cr(t){const e=Xt(t);return{path:t.file,position:e.start,range:e,language:"TypeScript"}}function Tr(t){return{uri:t.file,range:te(t.start,t.end),name:void 0}}class Ar{constructor(t){this.props=t,ft.initialize(this)}async update(t){return this.props={...this.props,...t},ft.update(this)}render(){const t={fontFamily:atom.config.get("editor.fontFamily")};return ft.dom("div",{className:"editor editor-colors",style:t,innerHTML:this.props.highlightedText})}}var Pr,Or,Ir,jr={},Nr=!1;function Lr(){return Nr||(Nr=!0,function(){var t,e;t=w.sep,Pr=function(e,n,r){var i,o,s,a,c;for(o=e.length-1;e[o]===t;)o--;for(c=0,s=o,i=null;o>=0;)e[o]===t?(c++,null==i&&(i=e.substring(o+1,s+1))):0===o&&(s0&&f.push({candidate:a,score:l}));f.sort(n),r=f.map(t)}return null!=u&&(r=r.slice(0,u)),r}}.call(Dr={})),Dr}var Rr,Br,zr,qr=!1;function Hr(){return qr||(qr=!0,function(){var t;t=w.sep,Rr=function(e,n){var r,i,o;for(i=e.length-1;e[i]===t;)i--;for(o=i,r=null;i>=0;)e[i]===t?null==r&&(r=e.substring(i+1,o+1)):0===i&&(or;n<=r?e++:e--)p.push(e);return p}.apply(this);for(u=e.length,l=t.length,i=0,o=0,a=[];ie;0<=e?t++:t--)l.push(t);return l}.apply(this);if(c=-1!==i.indexOf(t),i=i.replace(e,""),a=r.match(n,i),!c)for(o=r.basenameMatch(n,i),a=a.concat(o).sort((function(t,e){return t-e})),u=null,s=0;sft.dom("span",{className:t.type},t.text))))}match(t){return t.query?function(t,e){let n=0,r=[];const i=[],o=jr.match(t,e);let s;for(s of o){if(s<0)continue;const e=t.substring(n,s);e&&(r.length>0&&i.push({text:r.join(""),type:"character-match"}),r=[],i.push({text:e})),r.push(t[s]),n=s+1}r.length>0&&i.push({text:r.join(""),type:"character-match"});return i.push({text:t.substring(n)}),i}(t.label,t.query):[{text:t.label}]}}var $r={},Vr=$r&&$r.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty($r,"__esModule",{value:!0});const Wr=h,Gr=Vr(ft),Kr=Gr.default.dom,Qr=Vr(jr);$r=class{constructor(t){this.props=t,this.props.hasOwnProperty("initialSelectionIndex")||(this.props.initialSelectionIndex=0),t.initiallyVisibleItemCount&&this.initializeVisibilityObserver(),this.computeItems(!1),this.disposables=new Wr.CompositeDisposable,Gr.default.initialize(this),this.element.classList.add("select-list"),this.disposables.add(this.refs.queryEditor.onDidChange(this.didChangeQuery.bind(this))),t.skipCommandsRegistration||this.disposables.add(this.registerAtomCommands());const e=this.refs.queryEditor.element,n=this.didLoseFocus.bind(this);e.addEventListener("blur",n),this.didClickItemsList=!1,this.element.addEventListener("mousedown",(t=>{t.target===this.refs.items&&(this.didClickItemsList=!0)})),this.disposables.add(new Wr.Disposable((()=>{e.removeEventListener("blur",n)})))}static setScheduler(t){Gr.default.setScheduler(t)}static getScheduler(){return Gr.default.getScheduler()}initializeVisibilityObserver(){this.visibilityObserver=new IntersectionObserver((t=>{for(const e of t)if(e.intersectionRatio>0){const t=e.target;this.visibilityObserver.unobserve(t);const n=Array.from(this.refs.items.children).indexOf(t);n>=0&&this.renderItemAtIndex(n)}}))}focus(){this.refs.queryEditor.element.focus()}didLoseFocus(t){this.didClickItemsList||this.element.contains(t.relatedTarget)?(this.didClickItemsList=!1,this.refs.queryEditor.element.focus()):document.hasFocus()&&this.cancelSelection()}reset(){this.refs.queryEditor.setText("")}destroy(){return this.disposables.dispose(),this.visibilityObserver&&this.visibilityObserver.disconnect(),Gr.default.destroy(this)}registerAtomCommands(){return atom.commands.add(this.element,{"core:move-up":t=>{this.selectPrevious(),t.stopPropagation()},"core:move-down":t=>{this.selectNext(),t.stopPropagation()},"core:move-to-top":t=>{this.selectFirst(),t.stopPropagation()},"core:move-to-bottom":t=>{this.selectLast(),t.stopPropagation()},"core:confirm":t=>{this.confirmSelection(),t.stopPropagation()},"core:cancel":t=>{this.cancelSelection(),t.stopPropagation()}})}update(t){let e=!1;return"items"in t&&(this.props.items=t.items,e=!0),"maxResults"in t&&(this.props.maxResults=t.maxResults,e=!0),"filter"in t&&(this.props.filter=t.filter,e=!0),"filterQuery"in t&&(this.props.filterQuery=t.filterQuery,e=!0),"query"in t&&(this.refs.queryEditor.setText(t.query),e=!1),"selectQuery"in t&&(t.selectQuery?this.refs.queryEditor.selectAll():this.refs.queryEditor.clearSelections()),"order"in t&&(this.props.order=t.order),"emptyMessage"in t&&(this.props.emptyMessage=t.emptyMessage),"errorMessage"in t&&(this.props.errorMessage=t.errorMessage),"infoMessage"in t&&(this.props.infoMessage=t.infoMessage),"loadingMessage"in t&&(this.props.loadingMessage=t.loadingMessage),"loadingBadge"in t&&(this.props.loadingBadge=t.loadingBadge),"itemsClassList"in t&&(this.props.itemsClassList=t.itemsClassList),"initialSelectionIndex"in t&&(this.props.initialSelectionIndex=t.initialSelectionIndex),e&&this.computeItems(),Gr.default.update(this)}render(){return Kr.div({},Kr(Wr.TextEditor,{ref:"queryEditor",mini:!0}),this.renderLoadingMessage(),this.renderInfoMessage(),this.renderErrorMessage(),this.renderItems())}renderItems(){if(this.items.length>0){const t=["list-group"].concat(this.props.itemsClassList||[]).join(" ");return this.visibilityObserver&&Gr.default.getScheduler().updateDocument((()=>{Array.from(this.refs.items.children).slice(this.props.initiallyVisibleItemCount).forEach((t=>{this.visibilityObserver.observe(t)}))})),this.listItems=this.items.map(((t,e)=>{const n=this.getSelectedItem()===t,r=!this.props.initiallyVisibleItemCount||ethis.didClickItem(e)})})),Kr.ol({className:t,ref:"items"},...this.listItems)}return!this.props.loadingMessage&&this.props.emptyMessage?Kr.span({ref:"emptyMessage"},this.props.emptyMessage):""}renderErrorMessage(){return this.props.errorMessage?Kr.span({ref:"errorMessage"},this.props.errorMessage):""}renderInfoMessage(){return this.props.infoMessage?Kr.span({ref:"infoMessage"},this.props.infoMessage):""}renderLoadingMessage(){return this.props.loadingMessage?Kr.div({className:"loading"},Kr.span({ref:"loadingMessage",className:"loading-message"},this.props.loadingMessage),this.props.loadingBadge?Kr.span({ref:"loadingBadge",className:"badge"},this.props.loadingBadge):""):""}getQuery(){return this.refs&&this.refs.queryEditor?this.refs.queryEditor.getText():""}getFilterQuery(){return this.props.filterQuery?this.props.filterQuery(this.getQuery()):this.getQuery()}didChangeQuery(){this.props.didChangeQuery&&this.props.didChangeQuery(this.getFilterQuery()),this.computeItems()}didClickItem(t){this.selectIndex(t),this.confirmSelection()}computeItems(t){this.listItems=null,this.visibilityObserver&&this.visibilityObserver.disconnect();const e=this.props.filter||this.fuzzyFilter.bind(this);this.items=e(this.props.items.slice(),this.getFilterQuery()),this.props.order&&this.items.sort(this.props.order),this.props.maxResults&&(this.items=this.items.slice(0,this.props.maxResults)),this.selectIndex(this.props.initialSelectionIndex,t)}fuzzyFilter(t,e){if(0===e.length)return t;{const n=[];for(const r of t){const t=this.props.filterKeyForItem?this.props.filterKeyForItem(r):r,i=Qr.default.score(t,e);i>0&&n.push({item:r,score:i})}return n.sort(((t,e)=>e.score-t.score)),n.map((t=>t.item))}}getSelectedItem(){return void 0===this.selectionIndex?null:this.items[this.selectionIndex]}renderItemAtIndex(t){const e=this.items[t],n=this.getSelectedItem()===e,r=this.listItems[t].component;this.visibilityObserver&&this.visibilityObserver.unobserve(r.element),r.update({element:this.props.elementForItem(e,{selected:n,index:t,visible:!0}),selected:n,onclick:()=>this.didClickItem(t)})}selectPrevious(){return void 0===this.selectionIndex?this.selectLast():this.selectIndex(this.selectionIndex-1)}selectNext(){return void 0===this.selectionIndex?this.selectFirst():this.selectIndex(this.selectionIndex+1)}selectFirst(){return this.selectIndex(0)}selectLast(){return this.selectIndex(this.items.length-1)}selectNone(){return this.selectIndex(void 0)}selectIndex(t,e=!0){t>=this.items.length?t=0:t<0&&(t=this.items.length-1);const n=this.selectionIndex;return this.selectionIndex=t,void 0!==t&&this.props.didChangeSelection&&this.props.didChangeSelection(this.getSelectedItem()),e?this.listItems?(n>=0&&this.renderItemAtIndex(n),t>=0&&this.renderItemAtIndex(t),Gr.default.getScheduler().getNextUpdatePromise()):Gr.default.update(this):Promise.resolve()}selectItem(t){const e=this.items.indexOf(t);if(-1===e)throw new Error("Cannot select the specified item because it does not exist.");return this.selectIndex(e)}confirmSelection(){const t=this.getSelectedItem();null!=t?this.props.didConfirmSelection&&this.props.didConfirmSelection(t):this.props.didConfirmEmptySelection&&this.props.didConfirmEmptySelection()}cancelSelection(){this.props.didCancelSelection&&this.props.didCancelSelection()}};class Zr{constructor(t){this.mouseDown=this.mouseDown.bind(this),this.mouseUp=this.mouseUp.bind(this),this.didClick=this.didClick.bind(this),this.selected=t.selected,this.onclick=t.onclick,this.element=t.element,this.element.addEventListener("mousedown",this.mouseDown),this.element.addEventListener("mouseup",this.mouseUp),this.element.addEventListener("click",this.didClick),this.selected&&this.element.classList.add("selected"),this.domEventsDisposable=new Wr.Disposable((()=>{this.element.removeEventListener("mousedown",this.mouseDown),this.element.removeEventListener("mouseup",this.mouseUp),this.element.removeEventListener("click",this.didClick)})),Gr.default.getScheduler().updateDocument(this.scrollIntoViewIfNeeded.bind(this))}mouseDown(t){t.preventDefault()}mouseUp(t){t.preventDefault()}didClick(t){t.preventDefault(),this.onclick()}destroy(){this.element.remove(),this.domEventsDisposable.dispose()}update(t){this.element.removeEventListener("mousedown",this.mouseDown),this.element.removeEventListener("mouseup",this.mouseUp),this.element.removeEventListener("click",this.didClick),this.element.parentNode.replaceChild(t.element,this.element),this.element=t.element,this.element.addEventListener("mousedown",this.mouseDown),this.element.addEventListener("mouseup",this.mouseUp),this.element.addEventListener("click",this.didClick),t.selected&&this.element.classList.add("selected"),this.selected=t.selected,this.onclick=t.onclick,Gr.default.getScheduler().updateDocument(this.scrollIntoViewIfNeeded.bind(this))}scrollIntoViewIfNeeded(){this.selected&&this.element.scrollIntoViewIfNeeded(!1)}}var Jr=C($r);async function Yr({items:t,itemTemplate:e,itemFilterKey:n,didChangeSelection:r}){let i;const o=document.activeElement;try{return await new Promise((o=>{let s,a,c="Loading...",u=!1;const l=t=>{u||Kt(f.update(t))};"function"==typeof t&&(s=async e=>{const n=setTimeout((()=>l({loadingMessage:"Loading..."})),300),r=await t(e);clearTimeout(n),l({items:r,emptyMessage:"Nothing matches the search value",loadingMessage:void 0})},c=void 0,a="Please enter a search value");const f=new Jr({items:[],elementForItem:t=>ft.render(e(t,f)),filterKeyForItem:t=>""+t[n],didChangeSelection:r,didCancelSelection:()=>{u=!0,o(void 0)},didConfirmSelection:t=>{u=!0,o(t)},loadingMessage:c,didChangeQuery:s,emptyMessage:a,itemsClassList:["atom-typescript"]});"function"!=typeof t&&Kt(Promise.resolve(t).then((t=>{l({items:t,loadingMessage:void 0})}))),i=atom.workspace.addModalPanel({item:f,visible:!0}),f.focus()}))}finally{i&&i.destroy(),o&&o.focus()}}const Xr=[];function ti(t,e,n){Xr.push({selector:t,command:e,desc:n})}async function ei(t,e,n){const r=Promise.all(t.body.refs.map((async t=>{var e;const n=(await new Promise(((e,n)=>x.readFile(t.file,((t,r)=>{t?n(t):e(r.toString("utf-8"))}))))).split(/\r?\n/g),r=void 0!==t.contextStart&&void 0!==t.contextEnd?n.slice(t.contextStart.line-1,t.contextEnd.line):n,i=(await pe(r.join("\n"),"source.tsx"))[t.start.line-((null===(e=t.contextStart)||void 0===e?void 0:e.line)||1)];return{...t,hlText:i}}))),i=await Yr({items:r,itemTemplate:(t,e)=>ft.dom("li",null,ft.dom(Ur,{label:atom.project.relativize(t.file),query:e.getFilterQuery()}),ft.dom("div",{className:"pull-right"},"line: ",t.start.line),ft.dom(Ar,{highlightedText:t.hlText})),itemFilterKey:"file"});i&&await n(e,i)}async function ni(t,e,n){if(t.body)if(t.body.length>1){const r=await Yr({items:t.body,itemTemplate:(t,e)=>ft.dom("li",null,ft.dom(Ur,{label:t.file,query:e.getFilterQuery()}),ft.dom("div",{className:"pull-right"},"line: ",t.start.line)),itemFilterKey:"file"});r&&await n(e,r)}else t.body.length>0&&await n(e,t.body[0])}function ri(t){const e=t.spans.map(Xt).reduce(((t,e)=>e.union(t)));return{kind:oi[t.kind],plainText:t.text,startPosition:e.start,endPosition:e.end,landingPosition:t.nameSpan?Xt(t.nameSpan).start:void 0,children:t.childItems?t.childItems.map(ri).sort(ii):[]}}function ii(t,e){const n=t.landingPosition?t.landingPosition:t.startPosition,r=e.landingPosition?e.landingPosition:e.startPosition;return n.compare(r)}ti("atom-text-editor","typescript:find-references",(t=>({description:"Find where symbol under text cursor is referenced",async didDispatch(e){const n=fe(e);if(!n)return;const r=await t.getClient(n.file),i=await r.execute("references",n);await ei(i,e,t.histGoForward)}}))),ti("atom-text-editor","typescript:go-to-declaration",(t=>({description:"Go to declaration of symbol under text cursor",async didDispatch(e){const n=fe(e);if(!n)return;const r=await t.getClient(n.file),i=await r.execute("definition",n);await ni(i,e,t.histGoForward)}})));const oi={directory:"file",module:"module","external module name":"module",class:"class","local class":"class",method:"method",property:"property",getter:"property",setter:"property","JSX attribute":"field",constructor:"constructor",enum:"enum",interface:"interface",type:"interface",function:"function","local function":"function",label:"variable",alias:"variable",var:"variable",let:"variable","local var":"variable",parameter:"variable","enum member":"constant",const:"constant",string:"string","":void 0,warning:void 0,keyword:void 0,script:void 0,call:void 0,index:void 0,construct:void 0,"type parameter":void 0,"primitive type":void 0};class si{constructor(t){this.getClient=t,this.triggerCharacters=new Set([]),this.grammarScopes=ce(),this.priority=100,this.disposables=new d;const e=new Set(["<","(",","]),n=new Set([]);this.disposables.add(atom.config.observe("atom-typescript.sigHelpDisplayOnChange",(t=>{this.triggerCharacters=t?e:n})))}dispose(){this.disposables.dispose()}async getSignatureHelp(t,e){try{const n=t.getPath();if(void 0===n)return;const r=await this.getClient(n),i=(await r.execute("signatureHelp",{file:n,line:e.row+1,offset:e.column+1})).body;return{signatures:i.items.map(re),activeParameter:i.argumentIndex,activeSignature:i.selectedItemIndex}}catch(t){return}}}function ai(t){return ft.dom("li",null,t.description)}class ci{constructor(t,e){this.getClient=t,this.applyEdits=e,this.selector=ce().map((t=>t.includes(".")?"."+t:t)).join(", "),this.disableForSelector=".comment",this.inclusionPriority=3,this.suggestionPriority=atom.config.get("atom-typescript").autocompletionSuggestionPriority,this.excludeLowerPriority=!1}async getSuggestions(t){const e=function(t){const e=t.editor.getPath();if(void 0===e)return;return{file:e,line:t.bufferPosition.row+1,offset:t.bufferPosition.column+1}}(t),n=function(t){const e=t.editor.getBuffer().getTextInRange([[t.bufferPosition.row,0],t.bufferPosition]).match(ui);return e?e[0]:""}(t);if(!e)return[];const r=function(t){if(void 0===t)return;if(!t)return;const e=t.slice(-1);if(gi.has(e))return e;return}(function(t,e){let n;const r=new h.Range([0,0],e);return t.backwardsScanInRange(/\S/,r,(({matchText:t,stop:e})=>{n=t,e()})),n}(t.editor.getBuffer(),t.bufferPosition));if(!n&&!t.activatedManually&&!r)return[];if(fi(t.scopeDescriptor.getScopesArray(),"string.template.")&&!fi(t.scopeDescriptor.getScopesArray(),"template.expression."))return[];try{let i=await this.getSuggestionsWithCache({prefix:n,location:e,triggerCharacter:r,activatedManually:t.activatedManually});return i=jr.filter(i,n,{key:"displayText"}),i.map((r=>({replacementPrefix:r.replacementRange?t.editor.getTextInBufferRange(r.replacementRange):n,location:e,...this.getDetailsFromCache(r),...hi(t,r)})))}catch(t){return[]}}async getSuggestionDetailsOnSelect(t){return"text"in t&&!("rightLabel"in t)?this.getAdditionalDetails(t):null}onDidInsertSuggestion(t){const e=t.suggestion;if(!e.hasAction)return;if(!this.lastSuggestions)return;const n=this.lastSuggestions.client;let r=this.getDetailsFromCache(e);Kt((async()=>{var t;if(r||(r=await this.getAdditionalDetails(e)),!(null===(t=r)||void 0===t?void 0:t.details.codeActions))return;let i;i=1===r.details.codeActions.length?r.details.codeActions[0]:await Yr({items:r.details.codeActions,itemTemplate:ai,itemFilterKey:"description"}),i&&(await this.applyEdits(i.changes),i.commands&&await Promise.all(i.commands.map((t=>n.execute("applyCodeActionCommand",{command:t})))))})())}async getAdditionalDetails(t){var e;if(void 0===t.identifier)return null;if(!this.lastSuggestions)return null;const n=await this.lastSuggestions.client.execute("completionEntryDetails",{entryNames:[t.identifier],...this.lastSuggestions.location});if(!n.body)return null;const[r]=n.body;if(!r)return null;let i=r.displayParts;i.length>=3&&"("===i[0].text&&i[1].text===t.leftLabel&&")"===i[2].text&&(i=i.slice(3));let o=i.map((t=>t.text)).join("");const s=t.hasAction&&1===(null===(e=r.codeActions)||void 0===e?void 0:e.length)?r.codeActions[0].description+"\n\n":"";s&&(o=s);const a=s+r.displayParts.map((t=>t.text)).join("")+(r.documentation?"\n\n"+r.documentation.map((t=>t.text)).join(" "):"");return this.lastSuggestions.details.set(t.displayText,{details:r,rightLabel:o,description:a}),{...t,details:r,rightLabel:o,description:a}}getDetailsFromCache(t){if(!this.lastSuggestions)return null;const e=this.lastSuggestions.details.get(t.displayText);return e||null}async getSuggestionsWithCache({prefix:t,location:e,triggerCharacter:n,activatedManually:r}){if(this.lastSuggestions&&!r){const n=this.lastSuggestions.location,r=li(this.lastSuggestions.prefix,n.offset),i=li(t,e.offset);if(n.file===e.file&&n.line===e.line&&r===i&&0!==this.lastSuggestions.suggestions.length)return this.lastSuggestions.suggestions}const i=await this.getClient(e.file),o=await async function({client:t,location:e,triggerCharacter:n}){if(parseInt(t.version.split(".")[0],10)>=3){var r;const i=await t.execute("completionInfo",{includeExternalModuleExports:!1,includeInsertTextCompletions:!0,triggerCharacter:n,...e});return i.body.entries.map(pi.bind(null,null===(r=i.body)||void 0===r?void 0:r.isMemberCompletion))}return(await t.execute("completions",{includeExternalModuleExports:!1,includeInsertTextCompletions:!0,...e})).body.map(pi.bind(null,void 0))}({client:i,location:e,triggerCharacter:r?void 0:n});return this.lastSuggestions={client:i,location:e,prefix:t,suggestions:o,details:new Map},o}}const ui=/(?:(?![\u{10000}-\u{10FFFF}])[\$_\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Lo}\p{Nl}])(?:(?![\u{10000}-\u{10FFFF}])[\$_\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Lo}\p{Nl}\u200C\u200D\p{Mn}\p{Mc}\p{Nd}\p{Pc}])*$/u;function li(t,e){return e-("."===t?0:t.length)}function fi(t,e){for(const n of t)if(n.includes(e))return!0;return!1}function pi(t,e){return{displayText:e.name,text:void 0!==e.insertText?e.insertText:e.name,leftLabel:e.kind,replacementRange:e.replacementSpan?Xt(e.replacementSpan):void 0,type:di[e.kind],isMemberCompletion:t,identifier:void 0!==e.source?{name:e.name,source:e.source}:e.name,hasAction:e.hasAction}}function hi(t,e){return atom.config.get("atom-typescript.autocompleteParens")&&["function","method"].includes(e.leftLabel)&&!function(t){const e=t.editor.getBuffer(),n=t.bufferPosition;return!!e.getTextInRange([n,[n.row,e.lineLengthForRow(n.row)]]).match(/\s*\(/)}(t)?{...e,snippet:e.text+"($1)",text:void 0}:e}const di={directory:"require",module:"import","external module name":"import",class:"class","local class":"class",method:"method",property:"property",getter:"property",setter:"property","JSX attribute":"property",constructor:"method",enum:"type",interface:"type",type:"type","type parameter":"type","primitive type":"type",function:"function","local function":"function",label:"variable",alias:"import",var:"variable",let:"variable","local var":"variable",parameter:"variable","enum member":"constant",const:"constant",string:"value",keyword:"keyword","":void 0,warning:void 0,script:void 0,call:void 0,index:void 0,construct:void 0},gi=new Set(Object.keys({".":null,'"':null,"'":null,"`":null,"/":null,"@":null,"<":null,"#":null}));async function mi(t,e){const n=await async function(t,e){try{return await t.execute("getApplicableRefactors",{triggerReason:"invoked",...e})}catch{return}}(t,e);if(!n)return[];if(void 0===n.body||0===n.body.length)return[];const r=[];for(const t of n.body)for(const n of t.actions)r.push({refactorName:t.name,refactorDescription:t.description,refactorRange:e,actionName:n.name,actionDescription:n.description,inlineable:void 0===t.inlineable||t.inlineable});return r}async function vi(t,e,n){const r=await e.execute("getEditsForRefactor",{...t.refactorRange,refactor:t.refactorName,action:t.actionName});if(void 0===r.body)return;const{edits:i,renameFilename:o,renameLocation:s}=r.body;if(await n.applyEdits(i),void 0===o||void 0===s)return;const a=await atom.workspace.open(o,{searchAllPanes:!0,initialLine:s.line-1,initialColumn:s.offset-1});await atom.commands.dispatch(atom.views.getView(a),"typescript:rename-refactor")}ti("atom-text-editor","typescript:refactor-selection",(t=>({description:"Get a list of applicable refactors to selected code",async didDispatch(e){const n=fe(e);if(!n)return;const r=e.getSelectedBufferRange(),i=await t.getClient(n.file),o=r.isEmpty()?n:{file:n.file,startLine:r.start.row+1,startOffset:r.start.column+1,endLine:r.end.row+1,endOffset:r.end.column+1},s=await mi(i,o);if(0===s.length)return void atom.notifications.addInfo("AtomTS: No applicable refactors for the selection");const a=await Yr({items:s,itemTemplate:(t,e)=>ft.dom("li",null,ft.dom(Ur,{label:`${t.refactorDescription}: ${t.actionDescription}`,query:e.getFilterQuery()})),itemFilterKey:"actionDescription"});void 0!==a&&await vi(a,i,t)}})));class yi{constructor(t,e,n){this.clientResolver=t,this.errorPusher=e,this.applyEdits=n,this.supportedFixes=new WeakMap}async getFixableRanges(t,e){const n=t.getPath();if(void 0===n)return[];const r=this.errorPusher.getErrorsInRange(n,e),i=await this.clientResolver.get(n),o=await this.getSupportedFixes(i);return Array.from(r).filter((t=>void 0!==t.code&&o.has(t.code))).map((t=>Xt(t)))}async runCodeFix(t,e){const n=t.getPath();if(void 0===n)return[];const r=await this.clientResolver.get(n),i=await this.getSupportedFixes(r),o=Array.from(this.errorPusher.getErrorsAt(n,e)).filter((t=>void 0!==t.code&&i.has(t.code))).map((t=>r.execute("getCodeFixes",{file:n,startLine:t.start.line,startOffset:t.start.offset,endLine:t.end.line,endOffset:t.end.offset,errorCodes:[t.code]}))),s=await Promise.all(o),a=[];for(const t of s)if(t.body)for(const e of t.body)a.push(e);const c=await mi(r,{file:n,...Jt(e)});return a.push(...c),a}async applyFix(t){if("changes"in t)return this.applyEdits(t.changes);return vi(t,await this.clientResolver.get(t.refactorRange.file),{applyEdits:this.applyEdits})}dispose(){}async getSupportedFixes(t){let e=this.supportedFixes.get(t);if(e)return e;const n=await t.execute("getSupportedCodeFixes");if(!n.body)throw new Error("No code fixes are supported");return e=new Set(n.body.map((t=>parseInt(t,10)))),this.supportedFixes.set(t,e),e}}async function wi(t,e){let n;try{return await new Promise(((r,i)=>{try{const o=new m({command:t,args:["--init"],options:{cwd:e},exit:t=>{0===t?r():i(new Error("Tsc ended with nonzero exit code "+t))}});n=o.onWillThrowError(i)}catch(t){i(t)}}))}finally{n&&n.dispose()}}ti("atom-text-editor","typescript:build",(t=>({description:"Compile all files in project related to current active text editor",async didDispatch(e){const n=e.getPath();if(void 0===n)return;const r=await t.getClient(n);t.reportBuildStatus(void 0);const i=await r.execute("projectInfo",{file:n,needFileNameList:!0}),o=new Set(i.body.fileNames);o.delete(i.body.configFileName);let s=0;const a=[...o.values()].map((e=>{return n=r.execute("compileOnSaveEmitFile",{file:e,forced:!0}),i=()=>{s+=1,t.reportProgress({max:o.size,value:s})},n.then(i,i),n;var n,i}));try{if((await Promise.all(a)).some((t=>!1===t.body)))throw new Error("Emit failed");t.reportBuildStatus({success:!0})}catch(e){const n=e;console.error(n),t.reportBuildStatus({success:!1,message:n.message})}}}))),ti("atom-text-editor","typescript:check-all-files",(t=>({description:"Typecheck all files in project related to current active text editor",async didDispatch(e){var n;const r=e.getPath();if(void 0===r)return;const i=await t.getClient(r),o=await i.execute("projectInfo",{file:r,needFileNameList:!0}),s=new Set(null===(n=o.body.fileNames)||void 0===n?void 0:n.filter((t=>!t.endsWith("tsconfig.json")&&!t.includes(`${w.sep}node_modules${w.sep}`)))),a=s.size;if(i.multistepSupported){const e=i.on("syntaxDiag",(e=>{"file"in e&&s.delete(e.file),t.reportProgress({max:a,value:a-s.size})}));t.reportProgress({max:a,value:0}),await i.execute("geterrForProject",{file:r,delay:0}),e.dispose()}else{let e;const n=i.on("syntaxDiag",(r=>{void 0!==e&&window.clearTimeout(e),e=window.setTimeout((()=>{s.clear(),n.dispose(),t.reportProgress({max:a,value:a})}),2e3),"file"in r&&s.delete(r.file),0===s.size&&(n.dispose(),window.clearTimeout(e)),t.reportProgress({max:a,value:a-s.size})}));t.reportProgress({max:a,value:0}),await i.execute("geterrForProject",{file:r,delay:0})}}}))),ti("atom-workspace","typescript:clear-errors",(t=>({description:"Clear error messages",didDispatch(){t.clearErrors()}}))),ti("atom-text-editor","typescript:format-code",(t=>({description:"Format code in currently active text editor",async didDispatch(e){const n=e.getPath();if(void 0===n)return;const r=[];for(const t of e.getSelectedBufferRanges())t.isEmpty()||r.push({line:(i=t).start.row+1,offset:i.start.column+1,endLine:i.end.row+1,endOffset:i.end.column+1});var i;if(0===r.length){const t=e.getBuffer().getEndPosition();r.push({line:1,offset:1,endLine:t.row+1,endOffset:t.column+1})}const o=await t.getClient(n),s=[];for(const t of r){const e=await o.execute("format",{...t,file:n});e.body&&s.push(...e.body)}s.length>0&&e.transact((()=>{!function(t,e){for(let n=e.length-1;n>=0;n--)t.setTextInBufferRange(Xt(e[n]),e[n].newText)}(e,s)}))}}))),ti("atom-text-editor","typescript:initialize-config",(()=>({description:"Create tsconfig.json in the project related to currently-active text edtior",async didDispatch(t,e){const n=atom.project.getDirectories();if(0===n.length)return e();const r=t.getPath();if(void 0===r)return;const i=(await gr(r,"tsc")).pathToBin;for(const t of n)t.contains(r)&&(await wi(i,t.getPath()),atom.notifications.addSuccess("Successfully created tsconfig.json in "+t.getPath()))}}))),ti("atom-text-editor","typescript:organize-imports",(t=>({description:"Organize module imports",async didDispatch(e){const n=e.getPath();if(void 0===n)return;const r=await t.getClient(n),i=await r.execute("organizeImports",{scope:{type:"file",args:{file:n}}});i.body.length>0&&await t.applyEdits(i.body)}}))),ti("atom-text-editor","typescript:reload-projects",(t=>({description:"Reload projects",async didDispatch(e){const n=e.getPath();if(void 0===n)return;const r=await t.getClient(n);await r.execute("reloadProjects")}})));var bi,_i,xi={},Si=!1;function ki(){return Si||(Si=!0,bi={},function(){var t="object"==typeof self&&self.self===self&&self||"object"==typeof T&&T.global===T&&T||this||{},e=t._,n=Array.prototype,r=Object.prototype,i="undefined"!=typeof Symbol?Symbol.prototype:null,o=n.push,s=n.slice,a=r.toString,c=r.hasOwnProperty,u=Array.isArray,l=Object.keys,f=Object.create,p=function(){},h=function(t){return t instanceof h?t:this instanceof h?void(this._wrapped=t):new h(t)};void 0===bi||bi.nodeType?t._=h:(!module.nodeType&&bi&&(bi=h),_i=h,bi._=_i),h.VERSION="1.9.1";var d,g=function(t,e,n){if(void 0===e)return t;switch(null==n?3:n){case 1:return function(n){return t.call(e,n)};case 3:return function(n,r,i){return t.call(e,n,r,i)};case 4:return function(n,r,i,o){return t.call(e,n,r,i,o)}}return function(){return t.apply(e,arguments)}},m=function(t,e,n){return h.iteratee!==d?h.iteratee(t,e):null==t?h.identity:h.isFunction(t)?g(t,e,n):h.isObject(t)&&!h.isArray(t)?h.matcher(t):h.property(t)};h.iteratee=d=function(t,e){return m(t,e,1/0)};var v=function(t,e){return e=null==e?t.length-1:+e,function(){for(var n=Math.max(arguments.length-e,0),r=Array(n),i=0;i=0&&e<=x};h.each=h.forEach=function(t,e,n){var r,i;if(e=g(e,n),k(t))for(r=0,i=t.length;r0?0:s-1;for(i||(r=e[o?o[a]:a],a+=t);a>=0&&a=3;return e(t,g(n,i,4),r,o)}};h.reduce=h.foldl=h.inject=E(1),h.reduceRight=h.foldr=E(-1),h.find=h.detect=function(t,e,n){var r=(k(t)?h.findIndex:h.findKey)(t,e,n);if(void 0!==r&&-1!==r)return t[r]},h.filter=h.select=function(t,e,n){var r=[];return e=m(e,n),h.each(t,(function(t,n,i){e(t,n,i)&&r.push(t)})),r},h.reject=function(t,e,n){return h.filter(t,h.negate(m(e)),n)},h.every=h.all=function(t,e,n){e=m(e,n);for(var r=!k(t)&&h.keys(t),i=(r||t).length,o=0;o=0},h.invoke=v((function(t,e,n){var r,i;return h.isFunction(e)?i=e:h.isArray(e)&&(r=e.slice(0,-1),e=e[e.length-1]),h.map(t,(function(t){var o=i;if(!o){if(r&&r.length&&(t=_(t,r)),null==t)return;o=t[e]}return null==o?o:o.apply(t,n)}))})),h.pluck=function(t,e){return h.map(t,h.property(e))},h.where=function(t,e){return h.filter(t,h.matcher(e))},h.findWhere=function(t,e){return h.find(t,h.matcher(e))},h.max=function(t,e,n){var r,i,o=-1/0,s=-1/0;if(null==e||"number"==typeof e&&"object"!=typeof t[0]&&null!=t)for(var a=0,c=(t=k(t)?t:h.values(t)).length;ao&&(o=r);else e=m(e,n),h.each(t,(function(t,n,r){((i=e(t,n,r))>s||i===-1/0&&o===-1/0)&&(o=t,s=i)}));return o},h.min=function(t,e,n){var r,i,o=1/0,s=1/0;if(null==e||"number"==typeof e&&"object"!=typeof t[0]&&null!=t)for(var a=0,c=(t=k(t)?t:h.values(t)).length;ar||void 0===n)return 1;if(n0?0:i-1;o>=0&&o0?a=o>=0?o:Math.max(o+c,a):c=o>=0?Math.min(o+1,c):o+c+1;else if(n&&o&&c)return r[o=n(r,i)]===i?o:-1;if(i!=i)return(o=e(s.call(r,a,c),h.isNaN))>=0?o+a:-1;for(o=t>0?a:c-1;o>=0&&oe?(r&&(clearTimeout(r),r=null),a=u,s=t.apply(i,o),r||(i=o=null)):r||!1===n.trailing||(r=setTimeout(c,l)),s};return u.cancel=function(){clearTimeout(r),a=0,r=i=o=null},u},h.debounce=function(t,e,n){var r,i,o=function(e,n){r=null,n&&(i=t.apply(e,n))},s=v((function(s){if(r&&clearTimeout(r),n){var a=!r;r=setTimeout(o,e),a&&(i=t.apply(this,s))}else r=h.delay(o,e,this,s);return i}));return s.cancel=function(){clearTimeout(r),r=null},s},h.wrap=function(t,e){return h.partial(e,t)},h.negate=function(t){return function(){return!t.apply(this,arguments)}},h.compose=function(){var t=arguments,e=t.length-1;return function(){for(var n=e,r=t[e].apply(this,arguments);n--;)r=t[n].call(this,r);return r}},h.after=function(t,e){return function(){if(--t<1)return e.apply(this,arguments)}},h.before=function(t,e){var n;return function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=null),n}},h.once=h.partial(h.before,2),h.restArguments=v;var N=!{toString:null}.propertyIsEnumerable("toString"),L=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],D=function(t,e){var n=L.length,i=t.constructor,o=h.isFunction(i)&&i.prototype||r,s="constructor";for(b(t,s)&&!h.contains(e,s)&&e.push(s);n--;)(s=L[n])in t&&t[s]!==o[s]&&!h.contains(e,s)&&e.push(s)};h.keys=function(t){if(!h.isObject(t))return[];if(l)return l(t);var e=[];for(var n in t)b(t,n)&&e.push(n);return N&&D(t,e),e},h.allKeys=function(t){if(!h.isObject(t))return[];var e=[];for(var n in t)e.push(n);return N&&D(t,e),e},h.values=function(t){for(var e=h.keys(t),n=e.length,r=Array(n),i=0;i1&&(r=g(r,e[1])),e=h.allKeys(t)):(r=B,e=P(e,!1,!1),t=Object(t));for(var i=0,o=e.length;i1&&(n=e[1])):(e=h.map(P(e,!1,!1),String),r=function(t,n){return!h.contains(e,n)}),h.pick(t,r,n)})),h.defaults=F(h.allKeys,!0),h.create=function(t,e){var n=y(t);return e&&h.extendOwn(n,e),n},h.clone=function(t){return h.isObject(t)?h.isArray(t)?t.slice():h.extend({},t):t},h.tap=function(t,e){return e(t),t},h.isMatch=function(t,e){var n=h.keys(e),r=n.length;if(null==t)return!r;for(var i=Object(t),o=0;o":">",'"':""","'":"'","`":"`"},H=h.invert(q),U=function(t){var e=function(e){return t[e]},n="(?:"+h.keys(t).join("|")+")",r=RegExp(n),i=RegExp(n,"g");return function(t){return t=null==t?"":""+t,r.test(t)?t.replace(i,e):t}};h.escape=U(q),h.unescape=U(H),h.result=function(t,e,n){h.isArray(e)||(e=[e]);var r=e.length;if(!r)return h.isFunction(n)?n.call(t):n;for(var i=0;i/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var V=/(.)^/,W={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},G=/\\|'|\r|\n|\u2028|\u2029/g,K=function(t){return"\\"+W[t]};h.template=function(t,e,n){!e&&n&&(e=n),e=h.defaults({},e,h.templateSettings);var r,i=RegExp([(e.escape||V).source,(e.interpolate||V).source,(e.evaluate||V).source].join("|")+"|$","g"),o=0,s="__p+='";t.replace(i,(function(e,n,r,i,a){return s+=t.slice(o,a).replace(G,K),o=a+e.length,n?s+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":r?s+="'+\n((__t=("+r+"))==null?'':__t)+\n'":i&&(s+="';\n"+i+"\n__p+='"),e})),s+="';\n",e.variable||(s="with(obj||{}){\n"+s+"}\n"),s="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+s+"return __p;\n";try{r=new Function(e.variable||"obj","_",s)}catch(t){throw t.source=s,t}var a=function(t){return r.call(this,t,h)},c=e.variable||"obj";return a.source="function("+c+"){\n"+s+"}",a},h.chain=function(t){var e=h(t);return e._chain=!0,e};var Q=function(t,e){return t._chain?h(e).chain():e};h.mixin=function(t){return h.each(h.functions(t),(function(e){var n=h[e]=t[e];h.prototype[e]=function(){var t=[this._wrapped];return o.apply(t,arguments),Q(this,n.apply(h,t))}})),h},h.mixin(h),h.each(["pop","push","reverse","shift","sort","splice","unshift"],(function(t){var e=n[t];h.prototype[t]=function(){var n=this._wrapped;return e.apply(n,arguments),"shift"!==t&&"splice"!==t||0!==n.length||delete n[0],Q(this,n)}})),h.each(["concat","join","slice"],(function(t){var e=n[t];h.prototype[t]=function(){return Q(this,e.apply(this._wrapped,arguments))}})),h.prototype.value=function(){return this._wrapped},h.prototype.valueOf=h.prototype.toJSON=h.prototype.value,h.prototype.toString=function(){return String(this._wrapped)},"function"==typeof define&&define.amd&&define("underscore",[],(function(){return h}))}()),bi}var Ei,Ci=!1;function Ti(){return Ci||(Ci=!0,function(){var t,e,n,r,i,o,s,a,c=[].slice;a=ki(),n={cmd:"⌘",ctrl:"⌃",alt:"⌥",option:"⌥",shift:"⇧",enter:"⏎",left:"←",right:"→",up:"↑",down:"↓"},r={cmd:"Cmd",ctrl:"Ctrl",alt:"Alt",option:"Alt",shift:"Shift",enter:"Enter",left:"Left",right:"Right",up:"Up",down:"Down"},o={"~":"`",_:"-","+":"=","|":"\\","{":"[","}":"]",":":";",'"':"'","<":",",">":".","?":"/"},s=function(t){var e,n,r,i,o;if(r=0,n=[],null==t)return n;for(e=i=0,o=t.length;i=0&&t.splice(n,1),t},setValueForKeyPath:function(t,e,n){var r,i;for(i=s(e);i.length>1;)null==t[r=i.shift()]&&(t[r]={}),t=t[r];return null!=n?t[i.shift()]=n:delete t[i.shift()]},hasKeyPath:function(t,e){var n,r,i,o;for(i=0,o=(r=s(e)).length;i0?s<=a:s>=a;o=s+=i)u.push(t.splice.apply(t,[e+o,0].concat(c.call(r.slice(o,o+i)))));return u},sum:function(t){var e,n,r;for(e=0,n=0,r=t.length;n=0&&t.length%1==0}function p(t,e){for(var n=-1,r=t.length;++n3?t(r,i,c,a):(s=o,o=i,t(r,c,a))}}function N(t,e){return e}function L(t,e,r){r=r||n;var i=f(e)?[]:{};t(e,(function(t,e,n){t(b((function(t,r){r.length<=1&&(r=r[0]),i[e]=r,n(t)})))}),(function(t){r(t,i)}))}function D(t,e,n,r){var i=[];t(e,(function(t,e,r){n(t,(function(t,e){i=i.concat(e||[]),r(t)}))}),(function(t){r(t,i)}))}function F(t,r,i){if(null==r)r=1;else if(0===r)throw new Error("Concurrency must not be zero");function o(t,r,i,o){if(null!=o&&"function"!=typeof o)throw new Error("task callback must be a function");if(t.started=!0,l(r)||(r=[r]),0===r.length&&t.idle())return e.setImmediate((function(){t.drain()}));p(r,(function(e){var r={data:e,callback:o||n};i?t.tasks.unshift(r):t.tasks.push(r),t.tasks.length===t.concurrency&&t.saturated()})),e.setImmediate(t.process)}function s(t,e){return function(){c-=1;var n=!1,r=arguments;p(e,(function(t){p(u,(function(e,r){e!==t||n||(u.splice(r,1),n=!0)})),t.callback.apply(t,r)})),t.tasks.length+c===0&&t.drain(),t.process()}}var c=0,u=[],f={tasks:[],concurrency:r,payload:i,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(t,e){o(f,t,!1,e)},kill:function(){f.drain=n,f.tasks=[]},unshift:function(t,e){o(f,t,!0,e)},process:function(){for(;!f.paused&&cr?1:0}e.map(t,(function(t,e){n(t,(function(n,r){n?e(n):e(null,{value:t,criteria:r})}))}),(function(t,e){if(t)return r(t);r(null,h(e.sort(i),(function(t){return t.value})))}))},e.auto=function(t,r,i){"function"==typeof arguments[1]&&(i=r,r=null),i=c(i||n);var o=y(t),s=o.length;if(!s)return i(null);r||(r=s);var a={},u=0,f=!1,h=[];function d(t){h.unshift(t)}function w(t){var e=v(h,t);e>=0&&h.splice(e,1)}function _(){s--,p(h.slice(0),(function(t){t()}))}d((function(){s||i(null,a)})),p(o,(function(n){if(!f){for(var o,s=l(t[n])?t[n]:[t[n]],c=b((function(t,r){if(u--,r.length<=1&&(r=r[0]),t){var o={};m(a,(function(t,e){o[e]=t})),o[n]=r,f=!0,i(t,o)}else a[n]=r,e.setImmediate(_)})),p=s.slice(0,s.length-1),h=p.length;h--;){if(!(o=t[p[h]]))throw new Error("Has nonexistent dependency in "+p.join(", "));if(l(o)&&v(o,n)>=0)throw new Error("Has cyclic dependencies")}y()?(u++,s[s.length-1](c,a)):d((function t(){y()&&(u++,w(t),s[s.length-1](c,a))}))}function y(){return u3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");function l(t,n){function r(t,e){return function(r){t((function(t,n){r(!t||e,{err:t,result:n})}),n)}}function i(t){return function(e){setTimeout((function(){e(null)}),t)}}for(;a.times;){var o=!(a.times-=1);s.push(r(a.task,o)),!o&&a.interval>0&&s.push(i(a.interval))}e.series(s,(function(e,n){n=n[n.length-1],(t||a.callback)(n.err,n.result)}))}return u<=2&&"function"==typeof t&&(r=n,n=t),"function"!=typeof t&&c(a,t),a.callback=r,a.task=n,a.callback?l():l},e.waterfall=function(t,r){if(r=c(r||n),!l(t)){var i=new Error("First argument to waterfall must be an array of functions");return r(i)}if(!t.length)return r();!function t(e){return b((function(n,i){if(n)r.apply(null,[n].concat(i));else{var o=e.next();o?i.push(t(o)):i.push(r),z(e).apply(null,i)}}))}(e.iterator(t))()},e.parallel=function(t,n){L(e.eachOf,t,n)},e.parallelLimit=function(t,e,n){L(k(e),t,n)},e.series=function(t,n){L(e.eachOfSeries,t,n)},e.iterator=function(t){return function e(n){function r(){return t.length&&t[n].apply(null,arguments),r.next()}return r.next=function(){return n>>1);n(e,t[o])>=0?r=o:i=o-1}return r}(t.tasks,a,i)+1,0,a),t.tasks.length===t.concurrency&&t.saturated(),e.setImmediate(t.process)}))}(o,t,r,s)},delete o.unshift,o},e.cargo=function(t,e){return F(t,1,e)},e.log=M("log"),e.dir=M("dir"),e.memoize=function(t,n){var i={},o={},s=Object.prototype.hasOwnProperty;n=n||r;var a=b((function(r){var a=r.pop(),c=n.apply(null,r);s.call(i,c)?e.setImmediate((function(){a.apply(null,i[c])})):s.call(o,c)?o[c].push(a):(o[c]=[a],t.apply(null,r.concat([b((function(t){i[c]=t;var e=o[c];delete o[c];for(var n=0,r=e.length;n=t.length)return e&&(e[a]=t),n(null,t);Ui.lastIndex=r;var c=Ui.exec(t);return s=i,i+=c[0],o=s+c[1],r=Ui.lastIndex,u[o]||e&&e[o]===o?process.nextTick(f):e&&Object.prototype.hasOwnProperty.call(e,o)?d(e[o]):qi.lstat(o,p)}function p(t,r){if(t)return n(t);if(!r.isSymbolicLink())return u[o]=!0,e&&(e[o]=o),process.nextTick(f);if(!zi){var i=r.dev.toString(32)+":"+r.ino.toString(32);if(c.hasOwnProperty(i))return h(null,c[i],o)}qi.stat(o,(function(t){if(t)return n(t);qi.readlink(o,(function(t,e){zi||(c[i]=e),h(t,e)}))}))}function h(t,r,i){if(t)return n(t);var o=Bi.resolve(s,r);e&&(e[i]=o),d(o)}function d(e){t=Bi.resolve(e,t.slice(r)),l()}l()},Ri.realpath=Wi),Ri}var Zi,Ji,Yi,Xi,to,eo,no,ro=!1;function io(t){return t&&"realpath"===t.syscall&&("ELOOP"===t.code||"ENOMEM"===t.code||"ENAMETOOLONG"===t.code)}function oo(t,e,n){if(eo)return Yi(t,e,n);"function"==typeof e&&(n=e,e=null),Yi(t,e,(function(r,i){io(r)?no.realpath(t,e,n):n(r,i)}))}function so(t,e){if(eo)return Xi(t,e);try{return Xi(t,e)}catch(n){if(io(n))return no.realpathSync(t,e);throw n}}function ao(){Ji.realpath=oo,Ji.realpathSync=so}function co(){Ji.realpath=Yi,Ji.realpathSync=Xi}function uo(){return ro||(ro=!0,Zi={},Zi=oo,oo.realpath=oo,oo.sync=so,oo.realpathSync=so,oo.monkeypatch=ao,oo.unmonkeypatch=co,Yi=(Ji=x).realpath,Xi=Ji.realpathSync,to=process.version,eo=/^v[0-5]\./.test(to),no=Qi()),Zi}var lo,fo,po=!1;function ho(){return po||(po=!0,lo={},lo=function(t,e){for(var n=[],r=0;r=0&&u>0){for(r=[],o=n.length;l>=0&&!a;)l==c?(r.push(l),c=n.indexOf(t,l+1)):1==r.length?a=[r.pop(),u]:((i=r.pop())=0?c:u;r.length&&(a=[o,s])}return a}function bo(){return mo||(mo=!0,go={},go=vo,vo.range=wo),go}var _o,xo,So,ko,Eo,Co,To,Ao,Po=!1;function Oo(t){return parseInt(t,10)==t?parseInt(t,10):t.charCodeAt(0)}function Io(t){return t.split(ko).join("\\").split(Eo).join("{").split(Co).join("}").split(To).join(",").split(Ao).join(".")}function jo(t){if(!t)return[""];var e=[],n=So("{","}",t);if(!n)return t.split(",");var r=n.pre,i=n.body,o=n.post,s=r.split(",");s[s.length-1]+="{"+i+"}";var a=jo(o);return o.length&&(s[s.length-1]+=a.shift(),s.push.apply(s,a)),e.push.apply(e,s),e}function No(t){return t?("{}"===t.substr(0,2)&&(t="\\{\\}"+t.substr(2)),Ro(function(t){return t.split("\\\\").join(ko).split("\\{").join(Eo).split("\\}").join(Co).split("\\,").join(To).split("\\.").join(Ao)}(t),!0).map(Io)):[]}function Lo(t){return"{"+t+"}"}function Do(t){return/^-?0\d/.test(t)}function Fo(t,e){return t<=e}function Mo(t,e){return t>=e}function Ro(t,e){var n=[],r=So("{","}",t);if(!r||/\$$/.test(r.pre))return[t];var i,o=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(r.body),s=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(r.body),a=o||s,c=r.body.indexOf(",")>=0;if(!a&&!c)return r.post.match(/,.*\}/)?Ro(t=r.pre+"{"+r.body+Co+r.post):[t];if(a)i=r.body.split(/\.\./);else if(1===(i=jo(r.body)).length&&1===(i=Ro(i[0],!1).map(Lo)).length)return(f=r.post.length?Ro(r.post,!1):[""]).map((function(t){return r.pre+i[0]+t}));var u,l=r.pre,f=r.post.length?Ro(r.post,!1):[""];if(a){var p=Oo(i[0]),h=Oo(i[1]),d=Math.max(i[0].length,i[1].length),g=3==i.length?Math.abs(Oo(i[2])):1,m=Fo;h0){var _=new Array(b+1).join("0");w=y<0?"-"+_+w.slice(1):_+w}}u.push(w)}}else u=xo(i,(function(t){return Ro(t,!1)}));for(var x=0;x65536)throw new TypeError("pattern is too long");var n=this.options;if(!n.noglobstar&&"**"===t)return Ho;if(""===t)return"";var r,i="",o=!!n.nocase,s=!1,a=[],c=[],u=!1,l=-1,f=-1,p="."===t.charAt(0)?"":n.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",h=this;function d(){if(r){switch(r){case"*":i+=Wo,o=!0;break;case"?":i+=Vo,o=!0;break;default:i+="\\"+r}h.debug("clearStateChar %j %j",r,i),r=!1}}for(var g,m=0,v=t.length;m-1;k--){var E=c[k],C=i.slice(0,E.reStart),T=i.slice(E.reStart,E.reEnd-8),A=i.slice(E.reEnd-8,E.reEnd),P=i.slice(E.reEnd);A+=P;var O=C.split("(").length-1,I=P;for(m=0;m=0&&!(r=t[i]);i--);for(i=0;i>> no match, partial?",t,f,e,p),f!==s))}if("string"==typeof u?(c=r.nocase?l.toLowerCase()===u.toLowerCase():l===u,this.debug("string match",u,l,c)):(c=l.match(u),this.debug("pattern match",u,l,c)),!c)return!1}if(i===s&&o===a)return!0;if(i===s)return n;if(o===a)return i===s-1&&""===t[i];throw new Error("wtf?")}}function ls(){return Yo||(Yo=!0,us()),zo}var fs,ps=!1;function hs(){return ps||(ps=!0,fs={},fs="function"==typeof Object.create?function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:function(t,e){t.super_=e;var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}),fs}var ds,gs,ms,vs=!1;function ys(t){return"/"===t.charAt(0)}function ws(t){var e=/^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/.exec(t),n=e[1]||"",r=Boolean(n&&":"!==n.charAt(1));return Boolean(e[2]||r)}function bs(){return vs||(vs=!0,ds={},ds="win32"===process.platform?ws:ys,gs=ys,ds.posix=gs,ms=ws,ds.win32=ms),ds}var _s,xs,Ss,ks,Es,Cs,Ts,As,Ps,Os,Is,js,Ns,Ls=!1;function Ds(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function Fs(t,e){return t.toLowerCase().localeCompare(e.toLowerCase())}function Ms(t,e){return t.localeCompare(e)}function Rs(t){var e=null;if("/**"===t.slice(-3)){var n=t.replace(/(\/\*\*)+$/,"");e=new Ns(n,{dot:!0})}return{matcher:new Ns(t,{dot:!0}),gmatcher:e}}function Bs(t,e,n){if(n||(n={}),n.matchBase&&-1===e.indexOf("/")){if(n.noglobstar)throw new Error("base matching requires globstar");e="**/"+e}t.silent=!!n.silent,t.pattern=e,t.strict=!1!==n.strict,t.realpath=!!n.realpath,t.realpathCache=n.realpathCache||Object.create(null),t.follow=!!n.follow,t.dot=!!n.dot,t.mark=!!n.mark,t.nodir=!!n.nodir,t.nodir&&(t.mark=!0),t.sync=!!n.sync,t.nounique=!!n.nounique,t.nonull=!!n.nonull,t.nosort=!!n.nosort,t.nocase=!!n.nocase,t.stat=!!n.stat,t.noprocess=!!n.noprocess,t.absolute=!!n.absolute,t.maxLength=n.maxLength||1/0,t.cache=n.cache||Object.create(null),t.statCache=n.statCache||Object.create(null),t.symlinks=n.symlinks||Object.create(null),function(t,e){t.ignore=e.ignore||[],Array.isArray(t.ignore)||(t.ignore=[t.ignore]),t.ignore.length&&(t.ignore=t.ignore.map(Rs))}(t,n),t.changedCwd=!1;var r=process.cwd();Ds(n,"cwd")?(t.cwd=Os.resolve(n.cwd),t.changedCwd=t.cwd!==r):t.cwd=r,t.root=n.root||Os.resolve(t.cwd,"/"),t.root=Os.resolve(t.root),"win32"===process.platform&&(t.root=t.root.replace(/\\/g,"/")),t.cwdAbs=js(t.cwd)?t.cwd:Hs(t,t.cwd),"win32"===process.platform&&(t.cwdAbs=t.cwdAbs.replace(/\\/g,"/")),t.nomount=!!n.nomount,n.nonegate=!0,n.nocomment=!0,t.minimatch=new Ns(e,n),t.options=t.minimatch.options}function zs(t){for(var e=t.nounique,n=e?[]:Object.create(null),r=0,i=t.matches.length;rthis.maxLength)return!1;if(!this.stat&&ea(this.cache,e)){var r=this.cache[e];if(Array.isArray(r)&&(r="DIR"),!n||"DIR"===r)return r;if(n&&"FILE"===r)return!1}var i=this.statCache[e];if(!i){var o;try{o=Gs.lstatSync(e)}catch(t){if(t&&("ENOENT"===t.code||"ENOTDIR"===t.code))return this.statCache[e]=!1,!1}if(o&&o.isSymbolicLink())try{i=Gs.statSync(e)}catch(t){i=o}else i=o}return this.statCache[e]=i,r=!0,i&&(r=i.isDirectory()?"DIR":"FILE"),this.cache[e]=this.cache[e]||r,(!n||"FILE"!==r)&&r},sa.prototype._mark=function(t){return Xs.mark(this,t)},sa.prototype._makeAbs=function(t){return Xs.makeAbs(this,t)}),Ws}var ca,ua=!1;function la(t,e){if(t&&e)return la(t)(e);if("function"!=typeof t)throw new TypeError("need wrapper function");return Object.keys(t).forEach((function(e){n[e]=t[e]})),n;function n(){for(var e=new Array(arguments.length),n=0;nr?(n.splice(0,r),process.nextTick((function(){e.apply(null,i)}))):delete _a[t]}}))}(t))}function Ea(t){for(var e=t.length,n=[],r=0;r1)return!0;for(var i=0;ithis.maxLength)return e();if(!this.stat&&Ba(this.cache,n)){var i=this.cache[n];if(Array.isArray(i)&&(i="DIR"),!r||"DIR"===i)return e(null,i);if(r&&"FILE"===i)return e()}var o=this.statCache[n];if(void 0!==o){if(!1===o)return e(null,o);var s=o.isDirectory()?"DIR":"FILE";return r&&"FILE"===s?e():e(null,s,o)}var a=this,c=za("stat\0"+n,(function(r,i){if(i&&i.isSymbolicLink())return Aa.stat(n,(function(r,o){r?a._stat2(t,n,null,i,e):a._stat2(t,n,r,o,e)}));a._stat2(t,n,r,i,e)}));c&&Aa.lstat(n,c)},Ga.prototype._stat2=function(t,e,n,r,i){if(n&&("ENOENT"===n.code||"ENOTDIR"===n.code))return this.statCache[e]=!1,i();var o="/"===t.slice(-1);if(this.statCache[e]=r,"/"===e.slice(-1)&&r&&!r.isDirectory())return i(null,!1,r);var s=!0;return r&&(s=r.isDirectory()?"DIR":"FILE"),this.cache[e]=this.cache[e]||s,o&&"FILE"===s?i():i(null,s,r)}}function Qa(){return Va||(Va=!0,Ka()),Ta}var Za,Ja,Ya,Xa,tc,ec,nc,rc,ic,oc=!1;function sc(t){["unlink","chmod","stat","lstat","rmdir","readdir"].forEach((function(e){t[e]=t[e]||Xa[e],t[e+="Sync"]=t[e]||Xa[e]})),t.maxBusyTries=t.maxBusyTries||3,t.emfileWait=t.emfileWait||1e3,!1===t.glob&&(t.disableGlob=!0),t.disableGlob=t.disableGlob||!1,t.glob=t.glob||nc}function ac(t,e,n){"function"==typeof e&&(n=e,e={}),Ja(t,"rimraf: missing path"),Ja.equal(typeof t,"string","rimraf: path should be a string"),Ja.equal(typeof n,"function","rimraf: callback function required"),Ja(e,"rimraf: invalid options argument provided"),Ja.equal(typeof e,"object","rimraf: options should be object"),sc(e);var r=0,i=null,o=0;if(e.disableGlob||!tc.hasMagic(t))return s(null,[t]);function s(t,s){return t?n(t):0===(o=s.length)?n():void s.forEach((function(t){cc(t,e,(function s(a){if(a){if(("EBUSY"===a.code||"ENOTEMPTY"===a.code||"EPERM"===a.code)&&r1&&(e=n.shift()),t=n.shift(),u.readdir(r,(function(n,i){return null!=n?t(n):(e&&(i=l.filterExtensions(i,e)),i=(i=i.sort((function(t,e){return t.toLowerCase().localeCompare(e.toLowerCase())}))).map((function(t){return v.join(r,t)})),t(null,i))}))},filterExtensions:function(t,e){return e=e.map((function(t){return""===t?t:"."+t.replace(/^\./,"")})),t.filter((function(t){return _.include(e,v.extname(t))}))},listTreeSync:function(t){var e,n;return n=[],e=function(t){return n.push(t),!0},l.traverseTreeSync(t,e,e),n},move:function(t,e,n){return p(t,e,(function(r,i){var o,s;if(!r)return i?(s=v.dirname(e),u.exists(s,(function(r){if(!r)return l.makeTree(s,(function(r){if(!r)return u.rename(t,e,n);n(r)}));u.rename(t,e,n)}))):((o=new Error("'"+e+"' already exists.")).code="EEXIST",void n(o));n(r)}))},moveSync:function(t,e){var n,r;if(!h(t,e))throw(n=new Error("'"+e+"' already exists.")).code="EEXIST",n;return r=v.dirname(e),u.existsSync(r)||l.makeTreeSync(r),u.renameSync(t,e)},removeSync:function(t){return y.sync(t)},remove:function(t,e){return y(t,e)},writeFileSync:function(t,e,n){return m.sync(v.dirname(t)),u.writeFileSync(t,e,n)},writeFile:function(t,e,n,r){return r=_.last(arguments),m(v.dirname(t),(function(i){return null!=i?"function"==typeof r?r(i):void 0:u.writeFile(t,e,n,r)}))},copy:function(t,e,n){return m(v.dirname(e),(function(r){var i,o;if(null==r)return(o=u.createReadStream(t)).on("error",(function(t){return"function"==typeof n&&n(t),n=null})),(i=u.createWriteStream(e)).on("error",(function(t){return"function"==typeof n&&n(t),n=null})),i.on("close",(function(){return"function"==typeof n&&n(),n=null})),o.pipe(i);"function"==typeof n&&n(r)}))},copySync:function(t,e){var n,r,i,o,s,a,c;for(o=u.readdirSync(t),m.sync(e),c=[],s=0,a=o.length;s0;)r=new Buffer(n),i=u.readSync(s,r,0,r.length,o),u.writeSync(a,r,0,i,o),c.push(o+=i);return c}finally{null!=s&&u.closeSync(s),null!=a&&u.closeSync(a)}},makeTreeSync:function(t){if(!l.isDirectorySync(t))return m.sync(t)},makeTree:function(t,e){return l.isDirectory(t,(function(n){return n?"function"==typeof e?e():void 0:m(t,(function(t){return"function"==typeof e?e(t):void 0}))}))},traverseTreeSync:function(t,e,n){var r;if(null==n&&(n=e),l.isDirectorySync(t))return(r=function(t,e,n){var i,o,s,a,c,l,f;for(c=0,l=(f=u.readdirSync(t)).length;c0},p=function(t,e,n){return u.stat(t,(function(r,i){if(!r)return u.stat(e,(function(r,o){if(!r||"ENOENT"!==r.code)return n(void 0,t.toLowerCase()===e.toLowerCase()&&i.dev===o.dev&&i.ino===o.ino);n(void 0,!0)}));n(r)}))},h=function(t,e){var n,r;return r=b(t),n=b(e),!r||!n||t.toLowerCase()===e.toLowerCase()&&r.dev===n.dev&&r.ino===n.ino},xi=new Proxy({},{get:function(t,e){var n;return null!=(n=l[e])?n:u[e]},set:function(t,e,n){return l[e]=n}})}).call(xi);class gc{constructor(t){this.props=t,this.model=atom.workspace.buildTextEditor({mini:!0,softWrapped:!0,lineNumberGutterVisible:!1}),this.element=atom.views.getView(this.model),this.model.setText(t.initialText),t.selectAll?this.model.selectAll():this.model.getLastCursor().moveToEndOfScreenLine(),this.setReadOnly(),this.setGrammar(),this.model.scrollToBufferPosition([0,0])}async update(t){this.element=atom.views.getView(this.model),this.props={...this.props,...t},this.setReadOnly(),this.setGrammar()}focus(){this.element.focus()}getModel(){return this.model}setReadOnly(){this.model.setReadOnly(!!this.props.readOnly)}setGrammar(){void 0!==this.props.grammar?atom.textEditors.setGrammarOverride(this.model,this.props.grammar):atom.textEditors.clearGrammarOverride(this.model)}}class mc{constructor(t){this.props=t,ft.initialize(this)}async update(t){this.props={...this.props,...t},await ft.update(this)}render(){return ft.dom("div",{className:"atomts-rename-view",ref:"main"},ft.dom("div",{className:"block"},ft.dom("div",null,ft.dom("span",{ref:"title"},this.props.title),ft.dom("span",{className:"subtle-info-message"},ft.dom("span",null,"Close this panel with "),ft.dom("span",{className:"highlight"},"esc"),ft.dom("span",null," key. And commit with the "),ft.dom("span",{className:"highlight"},"enter"),ft.dom("span",null," key."))),ft.dom("div",{className:"find-container block"},ft.dom("div",{className:"editor-container"},ft.dom(gc,{ref:"editor",initialText:this.props.initialText,selectAll:this.props.selectAll}))),this.renderValidationMessage()))}async destroy(){await ft.destroy(this)}focus(){return this.refs.editor.focus()}getText(){return this.refs.editor.getModel().getText()}renderValidationMessage(){return void 0!==this.props.validationMessage?ft.dom("div",{className:"highlight-error"},this.props.validationMessage):null}}async function vc(t){const e=new mc({title:t.title,initialText:t.text,selectAll:t.autoSelect}),n=atom.workspace.addModalPanel({item:e,priority:1e3}),r=document.activeElement;e.focus();const i=new d;try{return await new Promise((n=>{i.add(atom.commands.add(e.refs.main,{"core:cancel":()=>{n(void 0)},"core:confirm":()=>{const r=e.getText(),i=t.onValidate(r);i?Kt(e.update({validationMessage:i})):n(r)}}))}))}finally{n.destroy(),i.dispose(),r&&r.focus()}}function yc(t){const e=new d;for(const n of Xr)if("atom-text-editor"===n.selector){const r=n.desc(t);e.add(atom.commands.add(n.selector,n.command,{...r,async didDispatch(t){try{const e=t.currentTarget.getModel();ue(e)?await r.didDispatch(e,(()=>t.abortKeyBinding())):(t.abortKeyBinding(),le(e)&&atom.notifications.addWarning("Atom-TypeScript cancelled last command: Current editor has no file path",{description:`Atom-TypeScript needs to determine the file path of the current editor to execute \`${n.command}\`, which it failed to do. You probably just need to save the current file somewhere.`,dismissable:!0}))}catch(t){wc(t)}}}))}else{const r=n.desc(t);e.add(atom.commands.add(n.selector,n.command,{...r,async didDispatch(){try{await r.didDispatch()}catch(t){wc(t)}}}))}return e}function wc(t){atom.notifications.addFatalError("Something went wrong, see details below.",{detail:t.message,dismissable:!0,stack:t.stack})}ti("atom-text-editor","typescript:rename-file",(t=>({description:"Rename current file",async didDispatch(e){const n=e.getPath();if(!n)return;const r=await vc({autoSelect:!0,title:"Rename File",text:n,onValidate:t=>t.trim()?"":"If you want to abort : Press esc to exit"});if(!r)return;const i=await t.getClient(n),o=await i.execute("getEditsForFileRename",{oldFilePath:n,newFilePath:r});await t.applyEdits(o.body),await new Promise(((t,i)=>{xi.move(n,r,(n=>{n?i(n):(e.getBuffer().setPath(r),t())}))}))}}))),ti("atom-text-editor","typescript:rename-refactor",(t=>({description:"Rename symbol under text cursor everywhere it is used",async didDispatch(e){const n=fe(e);if(!n)return;const r=await t.getClient(n.file),i=await r.execute("rename",n),{info:o,locs:s}=i.body;if(!o.canRename)return void atom.notifications.addInfo("AtomTS: Rename not available at cursor location");const a=await vc({autoSelect:!0,title:"Rename Variable",text:o.displayName,onValidate:t=>t.replace(/\s/g,"")!==t.trim()?"The new variable must not contain a space":t.trim()?"":"If you want to abort : Press esc to exit"});void 0!==a&&await t.applyEdits(s.map((t=>({fileName:t.file,textChanges:t.locs.map((t=>({...t,newText:a})))}))))}}))),ti("atom-workspace","typescript:restart-all-servers",(t=>({description:"Kill all tsserver instances. They will be auto-restarted",async didDispatch(){t.killAllServers()}}))),ti("atom-workspace","typescript:return-from-declaration",(t=>({description:"If used `go-to-declaration`, return to previous text cursor position",async didDispatch(){await t.histGoBack()}}))),ti("atom-workspace","typescript:show-editor-position-history",(t=>({description:"If used `go-to-declaration`, return to previous text cursor position",async didDispatch(){await t.histShowHistory()}}))),ti("atom-text-editor","typescript:toggle-semantic-view",(t=>({description:"Toggle semantic view outline",didDispatch(){t.toggleSemanticViewController()}}))),ti("atom-text-editor","typescript:show-tooltip",(t=>({description:"Show type tooltip at current text cursor position",didDispatch:async e=>t.showTooltipAt(e)}))),ti("atom-text-editor","typescript:show-signature-help",(t=>({description:"Show signature help tooltip at current text cursor position",didDispatch:async e=>t.showSigHelpAt(e)}))),ti("atom-text-editor","typescript:hide-signature-help",(t=>({description:"Hide the currently visible signature help",async didDispatch(e,n){t.hideSigHelpAt(e)||n()}}))),ti("atom-text-editor","typescript:signature-help-next",(t=>({description:"Show next signature help if available",async didDispatch(e,n){t.rotateSigHelp(e,1)||n()}}))),ti("atom-text-editor","typescript:signature-help-prev",(t=>({description:"Show previous signature help if available",async didDispatch(e,n){t.rotateSigHelp(e,-1)||n()}}))),ti("atom-text-editor","typescript:toggle-file-symbols",(t=>({description:"Toggle view for finding file symbols",async didDispatch(e){t.toggleFileSymbolsView(e)}}))),ti("atom-text-editor","typescript:toggle-project-symbols",(t=>({description:"Toggle view for finding file symbols",async didDispatch(e){t.toggleProjectSymbolsView(e)}})));class bc{constructor(t,e){this.children=e,this.props={...t,delay:{show:0,hide:0}},ft.initialize(this),this.tooltipDisposable=atom.tooltips.add(this.element,this.props)}async update(t,e){this.props={...this.props,...t},this.children=e,await ft.update(this),this.tooltipDisposable.dispose(),this.tooltipDisposable=atom.tooltips.add(this.element,this.props)}render(){return ft.dom("div",{className:"inline-block"},this.children?this.children:null)}async destroy(){await ft.destroy(this),this.tooltipDisposable.dispose()}}class _c{constructor(t){this.hiddenBuildStatus=!1,this.disposables=new d,this.buildStatusClicked=()=>{this.props.buildStatus.success||atom.notifications.addError("Build failed",{detail:this.props.buildStatus.message,dismissable:!0})},this.props={...t},this.setHideBuildStatus(atom.config.get("atom-typescript").buildStatusTimeout),this.resetBuildStatusTimeout(),ft.initialize(this),this.disposables.add(atom.config.onDidChange("atom-typescript.buildStatusTimeout",(({newValue:t})=>{this.setHideBuildStatus(t),Kt(this.update({}))})))}async update(t){const e=void 0!==t.buildStatus&&t.buildStatus.success!==this.props.buildStatus.success;this.props={...this.props,...t},e&&this.resetBuildStatusTimeout(),await ft.update(this)}render(){if(this.hiddenBuildStatus)return ft.dom("span",null);let t,e;return this.props.buildStatus.success?(t="highlight-success",e="Emit Success"):(t="highlight-error",e="Emit Failed"),ft.dom(bc,{title:this.props.buildStatus.success?"Build was successful":"Build failed; click to show error message"},ft.dom("span",{className:t,on:{click:this.buildStatusClicked}},e))}async destroy(){await ft.destroy(this)}resetBuildStatusTimeout(){this.hiddenBuildStatus=!1,this.props.buildStatus.success&&this.hideBuildStatus()}setHideBuildStatus(t){this.hideBuildStatus=t>0?Qt.debounce((()=>{this.hiddenBuildStatus=!0,Kt(ft.update(this))}),1e3*t):0===t?()=>{this.hiddenBuildStatus=!0}:()=>{}}}class xc{constructor(t){this.props={...t},ft.initialize(this)}async update(t){this.props={...this.props,...t},await ft.update(this)}render(){return ft.dom(bc,{title:()=>this.props.tsConfigPath.startsWith("/dev/null")?"No tsconfig.json":"Click to open "+atom.project.relativize(this.props.tsConfigPath)},ft.dom("a",{className:"inline-block",href:"",on:{click:t=>{t.preventDefault(),this.openConfigPath()}}},this.props.tsConfigPath.startsWith("/dev/null")?"No project":b((t=this.props.tsConfigPath,"~"+atom.project.relativize(t)))));var t}async destroy(){await ft.destroy(this)}openConfigPath(){this.props.tsConfigPath.startsWith("/dev/null")?atom.notifications.addInfo("No tsconfig for current file"):Kt(atom.workspace.open(this.props.tsConfigPath))}}class Sc{constructor(t={}){this.props={visible:!0,pending:[],progress:{max:0,value:0},...t},ft.initialize(this)}async update(t){this.props={...this.props,...t},await ft.update(this)}render(){return ft.dom("ts-status-panel",{className:this.props.visible?"":"hide"},this.renderVersion(),this.renderPending(),this.renderConfigPath(),this.renderStatus(),this.renderProgress())}async destroy(){await ft.destroy(this)}dispose(){Kt(this.destroy())}async show(){await this.update({visible:!0})}async hide(){await this.update({visible:!1})}renderVersion(){return void 0!==this.props.clientVersion?ft.dom(bc,{title:"Active TypeScript version"},this.props.clientVersion):null}renderPending(){return this.props.pending.length>0?ft.dom(bc,{title:`Pending Requests:
    ${this.props.pending.map((({title:t})=>`
  • ${t}
  • `)).join("")}
`,html:!0},ft.dom("span",{ref:"pendingCounter"},this.props.pending.length.toString()),ft.dom("span",{ref:"pendingSpinner",className:"loading loading-spinner-tiny inline-block",style:{marginLeft:"5px",opacity:"0.5",verticalAlign:"sub"}})):null}renderConfigPath(){return void 0!==this.props.tsConfigPath?ft.dom(xc,{tsConfigPath:this.props.tsConfigPath}):null}renderStatus(){return this.props.buildStatus?ft.dom(_c,{buildStatus:this.props.buildStatus}):null}renderProgress(){return this.props.progress.value0;)e=this.prevCursorPositions.pop();if(e)return this.open({file:e.file,start:{line:e.line,offset:e.offset}});atom.notifications.addInfo("AtomTS: Previous position not found.")}async goForward(t,e){const n=fe(t);if(n){this.prevCursorPositions.push(n);const t=100;this.prevCursorPositions.length>t&&this.prevCursorPositions.splice(0,this.prevCursorPositions.length-t)}return this.open(e)}async showHistory(){const t=await Yr({items:this.getHistory().slice().reverse().map(((t,e)=>({...t,idx:e}))),itemTemplate:(t,e)=>ft.dom("li",{className:"two-lines"},ft.dom("div",{className:"primary-line"},ft.dom(Ur,{label:t.file,query:e.getFilterQuery()})),ft.dom("div",{className:"secondary-line"},"Line: ",t.line,", column: ",t.offset)),itemFilterKey:"file"});t&&await this.goHistory(t.idx+1)}getHistory(){return this.prevCursorPositions}dispose(){}serialize(){return this.prevCursorPositions}async open(t){const e=await atom.workspace.open(t.file,{initialLine:t.start.line-1,initialColumn:t.start.offset-1,searchAllPanes:!0});return atom.workspace.isTextEditor(e)&&e.scrollToCursorPosition({center:!0}),e}}class Ec{constructor(t,e){let n,r,i;this.getClient=t,this.editor=e,this.disposables=new d,this.occurrenceMarkers=[],this.disposed=!1;let o=!1;this.disposables.add(atom.config.observe("atom-typescript.occurrenceHighlightDebounceTimeout",(t=>{n=Qt.debounce((()=>{Kt(this.update())}),t),i=3.5*t})),e.onDidChangeCursorPosition((()=>{void 0===r?n():o=!0})),e.onDidChangePath((()=>n())),e.onDidChangeGrammar((()=>n())),e.onDidChange((()=>{void 0!==r&&clearTimeout(r),r=window.setTimeout((()=>{o&&(n(),o=!1),r=void 0}),i)})))}dispose(){this.disposed||(this.disposed=!0,this.disposables.dispose(),this.clearMarkers())}clearMarkers(){for(const t of this.occurrenceMarkers)t.destroy();this.occurrenceMarkers=[]}async update(){if(this.disposed)return;if(!ue(this.editor))return void this.clearMarkers();const t=this.editor.getPath();if(void 0===t)return;const e=await this.getClient(t);if(this.disposed)return;const n=this.editor.getLastCursor().getBufferPosition();try{const r=await e.execute("documentHighlights",{file:t,line:n.row+1,offset:n.column+1,filesToSearch:[t]});if(this.disposed)return;const i=Array.from(this.getNewOccurrenceMarkers(r.body));for(const t of this.occurrenceMarkers)i.includes(t)||t.destroy();this.occurrenceMarkers=i}catch(t){window.atom_typescript_debug&&console.error(t)}}*getNewOccurrenceMarkers(t){for(const e of t)if(e.file===this.editor.getPath())for(const t of e.highlightSpans){const e=Xt(t),n=this.occurrenceMarkers.find((t=>t.getBufferRange().isEqual(e)));if(n)yield n;else{const t=this.editor.markBufferRange(e);this.editor.decorateMarker(t,{type:"highlight",class:"atom-typescript-occurrence"}),yield t}}}}class Cc{constructor(t){this.disposables=new d,this.disposables.add(atom.workspace.observeTextEditors((e=>{const n=new Ec(t,e);this.disposables.add(n,e.onDidDestroy((()=>{this.disposables.remove(n),n.dispose()})))})))}dispose(){this.disposables.dispose()}}function Tc(t,e,n,r){let i,o=n.right,s=!1,a="";t.style.left="",t.style.top="",t.style.right="",t.style.bottom="";const c=e.clientWidth,u=getComputedStyle(t),l=parseInt(u.width,10),f=parseInt(u.height,10);if(o+l>=c&&(o=c-l-10),o<0&&(a="pre-wrap",o=10,s=10),"bottom"===r){const t=e.clientHeight;i=n.bottom,i+f>=t&&(i=n.top-f)}else"top"===r&&(i=n.top-f,i<0&&(i=n.bottom));t.style.left=o+"px",t.style.top=i+"px",!1!==s&&(t.style.right=s+"px"),a&&(t.style.whiteSpace=a)}class Ac{constructor(t){this.parent=t,this.props={left:0,right:0,top:0,bottom:0},ft.initialize(this)}async destroy(){return ft.destroy(this)}async update(t){var e,n,r;void 0!==(null===(e=t.sigHelp)||void 0===e?void 0:e.selectedItemIndex)&&(null===(n=t.sigHelp)||void 0===n?void 0:n.selectedItemIndex)!==(null===(r=this.props.sigHelp)||void 0===r?void 0:r.selectedItemIndex)&&(this.props.visibleItem=void 0),this.props={...this.props,...t},void 0===this.props.sigHelp?this.props.visibleItem=void 0:void 0!==this.props.visibleItem&&(this.props.visibleItem=this.props.visibleItem%this.props.sigHelp.items.length,this.props.visibleItem<0&&(this.props.visibleItem+=this.props.sigHelp.items.length)),await ft.update(this)}writeAfterUpdate(){Tc(this.element,this.parent,this.props,atom.config.get("atom-typescript").sigHelpPosition)}render(){return ft.dom("div",{className:"atom-typescript-tooltip tooltip",key:this.sigHelpHash()},ft.dom("div",{className:"tooltip-inner"},this.tooltipContents()))}sigHelpHash(){if(!this.props.sigHelp)return;const{start:t,end:e}=this.props.sigHelp.applicableSpan;return`${t.line}:${t.offset}-${e.line}:${e.offset}`}tooltipContents(){if(!this.props.sigHelp)return"…";const{sigHelp:t}=this.props,e=void 0!==this.props.visibleItem?this.props.visibleItem:t.selectedItemIndex,n=t.items.length,r=["atom-typescript-tooltip-signature-help"];function i(n){const i=[];return n===t.selectedItemIndex&&i.push("atom-typescript-tooltip-signature-help-selected"),n===e&&i.push("atom-typescript-tooltip-signature-help-visible"),[...r,...i].join(" ")}return n>1&&r.push("atom-typescript-tooltip-signature-help-changable"),t.items.map(((e,n)=>ft.dom("div",{className:i(n)},ft.dom("div",null,oe(e.prefixDisplayParts),this.renderSigHelpParams(e.parameters,t.argumentIndex),oe(e.suffixDisplayParts),ft.dom("div",{className:"atom-typescript-tooltip-signature-help-documentation"},oe(e.documentation))))))}renderSigHelpParams(t,e){return t.map(((t,n)=>ft.dom("span",{className:"atom-typescript-tooltip-signature-help-parameter"},n>0?", ":null,ft.dom("span",{className:n===e?"atom-typescript-tooltip-signature-help-selected":void 0},oe(t.displayParts)))))}}class Pc{constructor(t,e,n){this.deps=t,this.editor=e,this.cancelled=!1,this.disposables=new h.CompositeDisposable;const r=atom.views.getView(this.editor);this.view=new Ac(r),r.appendChild(this.view.element);const i=Qt.debounce(this.updateTooltip.bind(this),100,{leading:!0});this.disposables.add(this.editor.onDidChangeCursorPosition((t=>{n=t.newBufferPosition,Kt(i(n))})),r.onDidChangeScrollTop((()=>{setImmediate((()=>this.updateTooltipPosition(n)))})),r.onDidChangeScrollLeft((()=>{setImmediate((()=>this.updateTooltipPosition(n)))}))),Kt(this.updateTooltip(n))}isDisposed(){return this.cancelled}dispose(){this.cancelled||(this.cancelled=!0,this.disposables.dispose(),Kt(this.view.destroy()))}async rotateSigHelp(t){const{visibleItem:e,sigHelp:n}=this.view.props,r=void 0!==e?e:void 0!==(null==n?void 0:n.selectedItemIndex)?null==n?void 0:n.selectedItemIndex:0;await this.view.update({visibleItem:r+t})}async updateTooltip(t){if(this.cancelled)return;let e;try{e=this.computeTooltipPosition(t)}catch(t){return void console.warn(t)}const n=await this.getMessage(t);this.cancelled||(n?await this.view.update({...e,sigHelp:n}):this.dispose())}updateTooltipPosition(t){if(this.cancelled)return;const e=this.computeTooltipPosition(t);Kt(this.view.update({...e}))}computeTooltipPosition(t){const e=atom.views.getView(this.editor),n=e.pixelPositionForBufferPosition(t),r=e.querySelector(".lines").getBoundingClientRect(),i=this.editor.getLineHeightInPixels(),o=e.getBoundingClientRect(),s=n.top+r.top-o.top+i/2,a=n.left+r.left-o.left,c=.7*i;return{left:a,right:a,top:s-c,bottom:s+c}}async getMessage(t){if(!ue(this.editor))return;const e=this.editor.getPath();if(void 0===e)return;const n=await this.deps.getClient(e);try{return(await n.execute("signatureHelp",{file:e,line:t.row+1,offset:t.column+1})).body}catch(t){return}}}class Oc{constructor(t){this.deps=t,this.subscriptions=new h.CompositeDisposable,this.editorMap=new WeakMap,this.stoppedChanging=t=>e=>{if(!atom.config.get("atom-typescript.sigHelpDisplayOnChange"))return;if(void 0===t.getPath())return;const n=t.getLastCursor().getBufferPosition(),[r]=e.changes.filter((t=>t.newRange.containsPoint(n)));r&&null!==r.newText.match(/[<(,]/)&&Kt(this.showTooltip(t,n))},this.subscriptions.add(atom.workspace.observeTextEditors((t=>{const e=new h.CompositeDisposable;e.add(t.onDidDestroy((()=>{e.dispose(),this.subscriptions.remove(e);const n=this.editorMap.get(t);n&&n.dispose()})),t.onDidStopChanging(this.stoppedChanging(t))),this.subscriptions.add(e)})))}dispose(){this.subscriptions.dispose();for(const t of atom.workspace.getTextEditors()){const e=this.editorMap.get(t);e&&e.dispose()}}async showTooltipAt(t){const e=t.getLastCursor().getBufferPosition();return this.showTooltip(t,e)}rotateSigHelp(t,e){const n=this.editorMap.get(t);return!(!n||n.isDisposed())&&(Kt(n.rotateSigHelp(e)),!0)}hideTooltipAt(t){const e=this.editorMap.get(t);return!(!e||e.isDisposed())&&(e.dispose(),!0)}async showTooltip(t,e){const n=this.editorMap.get(t);n&&!n.isDisposed()||this.editorMap.set(t,new Pc(this.deps,t,e))}}function Ic(t,e,n,r){const i=e=>{const i=e.target.closest(n);i&&t.contains(i)&&r(e)};return t.addEventListener(e,i),new v((()=>{t.removeEventListener(e,i)}))}class jc{constructor(){this.tooltip=null,this.props={left:0,right:0,top:0,bottom:0},ft.initialize(this)}async destroy(){return ft.destroy(this)}async update(t){this.props={...this.props,...t},this.tooltip=await _r(this.props.info,ft,(t=>ft.dom("div",{className:"atom-typescript-tooltip-tooltip-code"},t))),await ft.update(this)}writeAfterUpdate(){Tc(this.element,document.body,this.props,atom.config.get("atom-typescript").tooltipPosition)}render(){return ft.dom("div",{className:"atom-typescript-tooltip tooltip"},ft.dom("div",{className:"tooltip-inner"},this.tooltip))}}class Nc{constructor(t,e,n,r){this.getClient=t,this.cancelled=!1,Kt(this.initialize(e,n,r))}dispose(){this.cancelled=!0,this.view&&(Kt(this.view.destroy()),this.view=void 0)}async initialize(t,e,n){const r=atom.views.getView(t);let i,o;try{i=r.pixelPositionForBufferPosition(n),o=r.pixelPositionForBufferPosition(n.traverse([0,1]))}catch(e){return void console.warn(e)}if(i.left>=o.left)return;const s=.7*t.getLineHeightInPixels(),a={left:e.clientX,right:e.clientX,top:e.clientY-s,bottom:e.clientY+s},c=await this.getMessage(t,n);this.cancelled||void 0!==c&&await this.showTooltip(a,c)}async getMessage(t,e){let n;const r=await this.getClient(t);if(!r)return;const i=t.getPath();try{if(void 0===i)return;n=await r.execute("quickinfo",{file:i,line:e.row+1,offset:e.column+1})}catch(t){return}return n.body}async showTooltip(t,e){this.view=new jc,document.body.appendChild(this.view.element),await this.view.update({...t,info:e})}}class Lc{constructor(t){this.getClientInternal=t,this.subscriptions=new h.CompositeDisposable,this.editorMap=new WeakMap,this.getClient=async t=>{const e=t.getPath();if(void 0!==e&&ue(t)&&S.existsSync(e))return this.getClientInternal(e)},this.clearExprTypeTimeout=()=>{void 0!==this.exprTypeTimeout&&(clearTimeout(this.exprTypeTimeout),this.exprTypeTimeout=void 0),this.hideExpressionType()},this.trackMouseMovement=t=>{let e;return n=>{const r=function(t,e){const n=atom.views.getView(t).getComponent().screenPositionForMouseEvent(e);if(!isNaN(n.row)&&!isNaN(n.column))return t.bufferPositionForScreenPosition(n)}(t,n);r&&(e&&e.isEqual(r)&&this.pendingTooltip||(e=r,this.clearExprTypeTimeout(),this.exprTypeTimeout=window.setTimeout((()=>this.showExpressionType(t,n,r)),atom.config.get("atom-typescript").tooltipDelay)))}},this.subscriptions.add(atom.workspace.observeTextEditors((t=>{const e=atom.views.getView(t),n=e.querySelector(".lines");this.editorMap.set(t,{rawView:e,lines:n});const r=new h.CompositeDisposable;r.add(Ic(e,"mousemove",".scroll-view",this.trackMouseMovement(t)),Ic(e,"mouseout",".scroll-view",this.clearExprTypeTimeout),Ic(e,"keydown",".scroll-view",this.clearExprTypeTimeout),e.onDidChangeScrollTop(this.clearExprTypeTimeout),e.onDidChangeScrollLeft(this.clearExprTypeTimeout),t.onDidDestroy((()=>{r.dispose(),this.subscriptions.remove(r),this.clearExprTypeTimeout()}))),this.subscriptions.add(r)})))}dispose(){this.subscriptions.dispose(),this.clearExprTypeTimeout()}showExpressionAt(t){const e=t.getLastCursor().getBufferPosition(),n=atom.views.getView(t);let r;try{r=n.pixelPositionForBufferPosition(e)}catch(t){return void console.warn(t)}this.showExpressionType(t,this.mousePositionForPixelPosition(t,r),e)}mousePositionForPixelPosition(t,e){const n=atom.views.getView(t).querySelector(".lines").getBoundingClientRect();return{clientY:e.top+n.top+t.getLineHeightInPixels()/2,clientX:e.left+n.left}}showExpressionType(t,e,n){this.pendingTooltip&&this.pendingTooltip.dispose(),this.pendingTooltip=new Nc(this.getClient,t,e,n)}hideExpressionType(){this.pendingTooltip&&(this.pendingTooltip.dispose(),this.pendingTooltip=void 0)}}class Dc{constructor(t){this.getClient=t,this.subscriptions=new d;const e=atom.workspace.paneForURI("atom-typescript://semantic-view");e&&(this.view=e.itemForURI("atom-typescript://semantic-view")),this.view&&Kt(this.view.setGetClient(this.getClient)),this.subscriptions.add(new v((()=>{this.view&&(atom.workspace.hide(this.view),Kt(this.view.destroy()))})),atom.config.observe("atom-typescript.showSemanticView",(t=>{t?Kt(this.show()):this.hide()})))}dispose(){this.subscriptions.dispose()}async toggle(){this.view?await atom.workspace.toggle(this.view):await this.show()}async show(){this.view||(this.view=Je.create({navTree:null}),await this.view.setGetClient(this.getClient)),await atom.workspace.open(this.view,{searchAllPanes:!0})}hide(){return!!this.view&&atom.workspace.hide(this.view)}}class Fc{constructor(t){this.position=t.position,this.name=t.name,this.type=t.type,this.parent=t.parent,this.file=t.file}static fromNavTree(t,e){const n=t.spans[0].start;return new Fc({name:t.text,type:t.kind,position:{row:n.line-1,column:n.offset-1},parent:null!=e?e:null})}static fromNavto(t,e){const n=t.start;return new Fc({name:t.name,type:t.kind,position:{row:n.line-1,column:n.offset-1},parent:null!=e?e:null,file:t.file})}}async function Mc(t,e){const n=await async function(t,e){try{const n=await e.getClient(t);return(await n.execute("navtree",{file:t})).body}catch(e){console.error(t,e)}}(t,e);return n&&n.childItems?Array.from(Bc(n.childItems)):[]}async function Rc(t,e,n){const r=await async function(t,e,n){try{const r=await n.getClient(t);return(await r.execute("navto",{file:t,currentFileOnly:!1,searchValue:e,maxResultCount:1e3})).body}catch(e){console.error(t,e)}}(t,e,n);return r?Array.from(function*(t,e){for(const n of t)yield Fc.fromNavto(n,e)}(r)):[]}function*Bc(t,e){t.sort(((t,e)=>t.spans[0].start.line-e.spans[0].start.line));for(const n of t){const t=Fc.fromNavTree(n,e);yield t,n.childItems&&(yield*Bc(n.childItems,t))}}async function zc(t,e,n){if(void 0!==t.file)return n(e,{file:t.file,start:{line:t.position.row+1,offset:t.position.column+1}})}async function qc(t,e){const n=t.getPath();if(void 0!==n){let r;atom.config.get("symbols-view.quickJumpToFileSymbol")&&(r=function(t){const e=atom.views.getView(t).getScrollTop();return{bufferRanges:t.getSelectedBufferRanges(),scrollTop:e}}(t));const i=await Yr({items:Mc(n,e),itemTemplate:({name:t,position:e},n)=>ft.dom("li",{className:"two-lines"},ft.dom("div",{className:"primary-line"},ft.dom(Ur,{label:t,query:n.getFilterQuery()})),ft.dom("div",{className:"secondary-line"},"Line "+(e.row+1))),didChangeSelection(e){atom.config.get("symbols-view.quickJumpToFileSymbol")&&e&&t.setCursorBufferPosition(e.position)},itemFilterKey:"name"});i?await zc(i,t,e.histGoForward):r&&function(t,{bufferRanges:e,scrollTop:n}){const r=atom.views.getView(t);t.setSelectedBufferRanges(e),r.setScrollTop(n)}(t,r)}}class Hc{constructor(t){this.deps=t}toggleFileView(t){Kt(qc(t,this.deps))}toggleProjectView(t){Kt(async function(t,e){const n=t.getPath();if(void 0!==n){const r=await Yr({items:t=>Rc(n,t,e),itemTemplate({name:t,position:e,file:n},r){const i=atom.project.relativize(n);return ft.dom("li",{className:"two-lines"},ft.dom("div",{className:"primary-line"},ft.dom(Ur,{label:t,query:r.getFilterQuery()})),ft.dom("div",{className:"secondary-line"},`File ${i} line ${e.row+1}`))},itemFilterKey:"name"});r&&await zc(r,t,e.histGoForward)}}(t,this.deps))}dispose(){}}class Uc{constructor(){this.errors=new Map,this.fileGrammars=new Map,this.pushErrors=Qt.debounce(this.pushErrors.bind(this),100)}*getErrorsInRange(t,e){for(const n of this.errors.values()){const r=n.get(w.normalize(t));r&&(yield*r.filter((t=>Xt(t).intersectsWith(e))))}}*getErrorsAt(t,e){for(const n of this.errors.values()){const r=n.get(w.normalize(t));r&&(yield*r.filter((t=>Xt(t).containsPoint(e))))}}setErrors(t,e,n){let r=this.errors.get(t);r||(r=new Map,this.errors.set(t,r)),r.set(w.normalize(e),n),this.pushErrors()}clearFileErrors(t){for(const e of this.errors.values())e.delete(t);this.pushErrors()}clear(){this.linter&&this.linter.clearMessages()}setLinter(t){this.linter=t,this.pushErrors()}dispose(){this.clear(),this.linter&&this.linter.dispose(),this.linter=void 0}pushErrors(){this.linter&&this.linter.setAllMessages(this.getLinterErrors())}getLinterErrors(){if(atom.config.get("atom-typescript.suppressAllDiagnostics"))return[];const t=[];for(const e of this.errors.values())for(const[n,r]of e){const e=atom.workspace.getTextEditors().find((t=>t.getPath()===n)),i=e?e.getGrammar().scopeName:this.selectGrammar(n);if(!$c("suppressAllDiagnostics",i))for(const e of r){if($c("ignoredDiagnosticCodes",i).includes(""+e.code))continue;if($c("ignoreUnusedSuggestionDiagnostics",i)&&e.reportsUnnecessary)continue;if("suggestion"===e.category&&$c("ignoredSuggestionDiagnostics",i).includes(""+e.code))continue;if($c("ignoreNonSuggestionSuggestionDiagnostics",i)&&"suggestion"===e.category&&!se(e.code,Zt.Suggestion))continue;let{start:r,end:o}=e;r&&o||(r=o={line:1,offset:1}),t.push({severity:this.getSeverity($c("unusedAsInfo",i),e),excerpt:e.text,location:{file:n,position:te(r,o)}})}}return t}selectGrammar(t){const e=this.fileGrammars.get(t);if(void 0!==e)return e;const n=atom.grammars.selectGrammar(t,"").scopeName;return this.fileGrammars.set(t,n),n}getSeverity(t,e){if(t&&6133===e.code)return"info";switch(e.category){case"error":return"error";case"warning":return"warning";default:return"info"}}}function $c(t,e){return atom.config.get("atom-typescript."+t,{scope:[e]})}class Vc{constructor(t,e){let n;this.buffer=t,this.deps=e,this.events=new h.Emitter,this.compileOnSave=!1,this.subscriptions=new h.CompositeDisposable,this.on=this.events.on.bind(this.events),this.dispose=()=>{this.subscriptions.dispose(),Kt(this.close())},this.init=async()=>{this.state&&(await this.state.client.execute("open",{file:this.state.filePath,fileContent:this.buffer.getText()}),Kt(this.getErr({allFiles:!1,delay:0})))},this.close=async()=>{if(await this.openPromise,this.state){const t=this.state.client,e=this.state.filePath;this.deps.clearFileErrors(e),this.state.subscriptions.dispose(),this.state=void 0,await t.execute("close",{file:e})}},this.onDidChangePath=t=>{Kt(this.close().then((()=>{this.openPromise=this.open(t)})))},this.onDidSave=async()=>{await Promise.all([this.getErr({allFiles:!0,delay:100}),this.doCompileOnSave()])},this.onDidChangeText=async({changes:t})=>{if(0===t.length||!this.state)return;const{client:e,filePath:n}=this.state;await Promise.all(t.reduceRight(((t,{oldRange:r,newText:i})=>(t.push(e.execute("change",{file:n,line:r.start.row+1,offset:r.start.column+1,endLine:r.end.row+1,endOffset:r.end.column+1,insertString:i})),t)),[]))},this.subscriptions.add(atom.config.observe("atom-typescript.getErrDebounceTimeout",(t=>{n=Qt.debounce((()=>{Kt(this.getErr({allFiles:!1,delay:0}))}),t)})),t.onDidChangePath(this.onDidChangePath),t.onDidDestroy(this.dispose),t.onDidSave((()=>{Kt(this.onDidSave())})),t.onDidStopChanging((({changes:t})=>{t.length>0&&this.deps.reportBuildStatus(void 0)})),t.onDidChangeText((t=>{Kt(this.onDidChangeText(t)),n()}))),this.openPromise=this.open(this.buffer.getPath())}static create(t,e){const n=Vc.bufferMap.get(t);if(n)return n;{const n=new Vc(t,e);return Vc.bufferMap.set(t,n),n}}getPath(){return this.state&&this.state.filePath}getInfo(){if(this.state)return{clientVersion:this.state.client.version,tsConfigPath:this.state.configFile&&this.state.configFile.getPath()}}async getErr(t){if(!this.state)return;const e=t.allFiles?Array.from(function*(){for(const t of atom.workspace.getTextEditors())ue(t)&&(yield t.getPath())}()):[this.state.filePath];await this.state.client.execute("geterr",{files:e,delay:t.delay})}async compile(){if(!this.state)return;const{client:t,filePath:e}=this.state,n=await t.execute("compileOnSaveAffectedFileList",{file:e}),r=Qt.flatten(n.body.map((t=>t.fileNames)));if(0===r.length)return;const i=r.map((e=>t.execute("compileOnSaveEmitFile",{file:e})));if(!(await Promise.all(i)).every((t=>!!t.body)))throw new Error("Some files failed to emit")}async doCompileOnSave(){if(this.compileOnSave){this.deps.reportBuildStatus(void 0);try{await this.compile(),this.deps.reportBuildStatus({success:!0})}catch(t){const e=t;console.error("Save failed with error",e),this.deps.reportBuildStatus({success:!1,message:e.message})}}}async open(t){if(void 0===t||!ae(t))return this.close();{const e=await this.deps.getClient(t);this.state={client:e,filePath:t,configFile:void 0,subscriptions:new h.CompositeDisposable},this.state.subscriptions.add(e.on("restarted",(()=>Kt(this.init())))),await this.init();const n=await e.execute("projectInfo",{needFileNameList:!1,file:t});void 0!==n.body.configFileName&&(this.state.configFile=new h.File(n.body.configFileName),await this.readConfigFile(),this.state.subscriptions.add(this.state.configFile.onDidChange((()=>Kt(this.readConfigFile()))))),this.events.emit("opened")}}async readConfigFile(){if(!this.state||!this.state.configFile)return;const t=ee(this.state.configFile.getPath());this.compileOnSave=t.compileOnSave;const e=atom.config.get("atom-typescript");await this.state.client.execute("configure",{file:this.state.filePath,formatOptions:t.formatCodeOptions,preferences:{includeCompletionsWithInsertText:!0,includeCompletionsForModuleExports:e.includeCompletionsForModuleExports,quotePreference:e.quotePreference,importModuleSpecifierEnding:e.importModuleSpecifierEnding,importModuleSpecifierPreference:"auto"===e.importModuleSpecifierPreference?void 0:e.importModuleSpecifierPreference,...t.preferences}})}}Vc.bufferMap=new WeakMap;class Wc{constructor(t,e){this.editor=t,this.opts=e,this.subscriptions=new d,this.isTypescript=!1,this.destroy=()=>{atom.views.getView(this.editor).classList.remove("typescript-editor"),this.subscriptions.dispose()},this.didActivate=()=>{this.isTypescript&&this.reportInfo()},this.onOpened=()=>{atom.workspace.getActiveTextEditor()===this.editor&&this.reportInfo()},this.checkIfTypescript=()=>{this.isTypescript=ue(this.editor),this.isTypescript?atom.views.getView(this.editor).classList.add("typescript-editor"):atom.views.getView(this.editor).classList.remove("typescript-editor")},this.buffer=Vc.create(t.getBuffer(),e),this.subscriptions.add(this.buffer.on("opened",this.onOpened)),this.checkIfTypescript(),this.subscriptions.add(t.onDidChangePath(this.checkIfTypescript),t.onDidChangeGrammar(this.checkIfTypescript),t.onDidDestroy(this.destroy),t.onDidSave((()=>{atom.config.get("atom-typescript.checkAllFilesOnSave")&&atom.commands.dispatch(atom.views.getView(t),"typescript:check-all-files")})))}static createFactory(t){return e=>{let n=Wc.editorMap.get(e);return n||(n=new Wc(e,t),Wc.editorMap.set(e,n)),n}}static lookupPane(t){return Wc.editorMap.get(t)}reportInfo(){const t=this.buffer.getInfo();t&&this.opts.reportClientInfo(t)}}Wc.editorMap=new WeakMap;class Gc{constructor(t){this.usingBuiltinTooltipManager=!0,this.usingBuiltinSigHelpManager=!0,this.pending=new Set,this.clearErrors=()=>{this.errorPusher.clear()},this.clearFileErrors=t=>{this.errorPusher.clearFileErrors(t)},this.getClient=async t=>this.clientResolver.get(t),this.killAllServers=()=>{Kt(this.clientResolver.restartAllServers())},this.withBuffer=async(t,e)=>{const n=w.normalize(t),r=atom.workspace.getTextEditors().find((t=>t.getPath()===n));if(r)return e(r.getBuffer());const i=await h.TextBuffer.load(n);try{return await e(i)}finally{i.isModified()&&await i.save(),i.destroy()}},this.reportBusyWhile=async(t,e)=>{if(this.busySignalService)return this.busySignalService.reportBusyWhile(t,e);{const n={title:t};try{return this.pending.add(n),this.drawPending(Array.from(this.pending)),await e()}finally{this.pending.delete(n),this.drawPending(Array.from(this.pending))}}},this.reportProgress=t=>{Kt(this.statusPanel.update({progress:t}))},this.reportBuildStatus=t=>{Kt(this.statusPanel.update({buildStatus:t}))},this.reportClientInfo=t=>{Kt(this.statusPanel.update(t))},this.applyEdits=async t=>{Promise.all(t.map((t=>this.withBuffer(t.fileName,(async e=>{e.transact((()=>{const n=t.textChanges.map((t=>({range:Xt(t),newText:t.newText}))).reverse().sort(((t,e)=>e.range.compare(t.range)));for(const t of n)e.setTextInRange(t.range,t.newText)}))})))))},this.showTooltipAt=async t=>{this.usingBuiltinTooltipManager?this.tooltipManager.showExpressionAt(t):await atom.commands.dispatch(atom.views.getView(t),"datatip:toggle")},this.showSigHelpAt=async t=>{this.usingBuiltinSigHelpManager?await this.sigHelpManager.showTooltipAt(t):await atom.commands.dispatch(atom.views.getView(t),"signature-help:show")},this.hideSigHelpAt=t=>!!this.usingBuiltinSigHelpManager&&this.sigHelpManager.hideTooltipAt(t),this.rotateSigHelp=(t,e)=>!!this.usingBuiltinSigHelpManager&&this.sigHelpManager.rotateSigHelp(t,e),this.histGoForward=(t,e)=>this.editorPosHist.goForward(t,e),this.drawPending=Qt.throttle((t=>Kt(this.statusPanel.update({pending:t}))),100,{leading:!1}),this.subscriptions=new d,this.clientResolver=new wr(this.reportBusyWhile),this.subscriptions.add(this.clientResolver),this.statusPanel=new Sc,this.subscriptions.add(this.statusPanel),this.errorPusher=new Uc,this.subscriptions.add(this.errorPusher),this.codefixProvider=new yi(this.clientResolver,this.errorPusher,this.applyEdits),this.subscriptions.add(this.codefixProvider),this.semanticViewController=new Dc(this.getClient),this.subscriptions.add(this.semanticViewController),this.editorPosHist=new kc(t&&t.editorPosHistState),this.subscriptions.add(this.editorPosHist),this.symbolsViewController=new Hc({histGoForward:this.histGoForward,getClient:this.getClient}),this.subscriptions.add(this.symbolsViewController),this.tooltipManager=new Lc(this.getClient),this.subscriptions.add(this.tooltipManager),this.sigHelpManager=new Oc({getClient:this.getClient}),this.subscriptions.add(this.sigHelpManager),this.occurrenceManager=new Cc(this.getClient),this.subscriptions.add(this.occurrenceManager),this.typescriptPaneFactory=Wc.createFactory({clearFileErrors:this.clearFileErrors,getClient:this.getClient,reportBuildStatus:this.reportBuildStatus,reportClientInfo:this.reportClientInfo}),this.subscribeEditors(),this.subscriptions.add(yc({getClient:this.getClient,applyEdits:this.applyEdits,clearErrors:this.clearErrors,killAllServers:this.killAllServers,reportProgress:this.reportProgress,reportBuildStatus:this.reportBuildStatus,toggleSemanticViewController:()=>{Kt(this.semanticViewController.toggle())},toggleFileSymbolsView:t=>{this.symbolsViewController.toggleFileView(t)},toggleProjectSymbolsView:t=>{this.symbolsViewController.toggleProjectView(t)},histGoForward:this.histGoForward,histGoBack:()=>this.editorPosHist.goBack(),histShowHistory:()=>this.editorPosHist.showHistory(),showTooltipAt:this.showTooltipAt,showSigHelpAt:this.showSigHelpAt,hideSigHelpAt:this.hideSigHelpAt,rotateSigHelp:this.rotateSigHelp}))}destroy(){this.subscriptions.dispose();for(const t of atom.workspace.getTextEditors()){const e=Wc.lookupPane(t);e&&e.destroy()}}serialize(){return{version:"0.1",editorPosHistState:this.editorPosHist.serialize()}}consumeLinter(t){const e=t({name:"TypeScript"});this.errorPusher.setLinter(e),this.subscriptions.add(this.clientResolver.on("diagnostics",(({type:t,filePath:e,diagnostics:n})=>{this.errorPusher.setErrors(t,e,n)})))}consumeStatusBar(t){let e=100;for(const n of t.getRightTiles())"GRAMMAR-SELECTOR-STATUS"===atom.views.getView(n.getItem()).tagName&&(e=n.getPriority()-1);const n=t.addRightTile({item:this.statusPanel,priority:e}),r=new h.Disposable((()=>{n.destroy()}));return this.subscriptions.add(r),r}consumeDatatipService(t){if(atom.config.get("atom-typescript").preferBuiltinTooltips)return;const e=t.addProvider(new kr(this.getClient));return this.subscriptions.add(e),this.tooltipManager.dispose(),this.usingBuiltinTooltipManager=!1,e}consumeSigHelpService(t){if(atom.config.get("atom-typescript").preferBuiltinSigHelp)return;const e=new si(this.getClient),n=t(e);return this.subscriptions.add(n,e),this.sigHelpManager.dispose(),this.usingBuiltinSigHelpManager=!1,n}consumeBusySignal(t){if(atom.config.get("atom-typescript").preferBuiltinBusySignal)return;this.busySignalService=t;const e={dispose:()=>{this.busySignalService&&this.busySignalService.dispose(),this.busySignalService=void 0}};return this.subscriptions.add(e),e}provideAutocomplete(){return[new ci(this.getClient,this.applyEdits)]}provideIntentions(){return t=this.codefixProvider,{grammarScopes:["*"],getIntentions:async({bufferPosition:e,textEditor:n})=>(await t.runCodeFix(n,e)).map((e=>({priority:100,title:"description"in e?e.description:e.actionDescription,selected:()=>{Kt(t.applyFix(e))}})))};var t}provideIntentionsHighlight(){return t=this.codefixProvider,{grammarScopes:["*"],getIntentions:async({visibleRange:e,textEditor:n})=>(await t.getFixableRanges(n,e)).map((t=>({range:t,created:t=>{}})))};var t}provideCodeActions(){return t=this.codefixProvider,{grammarScopes:ce(),priority:0,getCodeActions:async(e,n)=>(await t.runCodeFix(e,n.start)).map((e=>({getTitle:async()=>"description"in e?e.description:e.actionDescription,dispose:()=>{},apply:async()=>{await t.applyFix(e)}})))};var t}provideHyperclick(){return t=this.getClient,e=this.histGoForward,{priority:0,providerName:"typescript-hyperclick-provider",wordRegExp:/([A-Za-z0-9_])+|['"`](\\.|[^'"`\\\\])*['"`]/g,async getSuggestionForWord(n,r,i){if(!ue(n))return;const o=n.getPath();return void 0!==o?{range:i,callback:async()=>{var r;const s={file:o,line:i.start.row+1,offset:i.start.column+1},a=await t(s.file),c=await a.execute("definition",s),u=c.body?c.body[0]:void 0;if(1===(null===(r=c.body)||void 0===r?void 0:r.length)&&(null==u?void 0:u.start.line)===s.line&&(null==u?void 0:u.start.offset)===s.offset){const t=await a.execute("references",s);await ei(t,n,e)}else await ni(c,n,e)}}:void 0}};var t,e}provideReferences(){return t=this.getClient,{isEditorSupported:async t=>ue(t),async findReferences(e,n){const r=fe(e,n);if(!r)return;const i=await t(r.file),o=await i.execute("references",r);return o.body?{type:"data",baseUri:r.file,referencedSymbolName:o.body.symbolDisplayString,references:o.body.refs.map(Tr)}:void 0}};var t}provideOutlines(){return t=this.getClient,{name:"Atom-TypeScript",grammarScopes:ce(),priority:100,updateOnEdit:!0,async getOutline(e){const n=e.getPath();if(void 0===n)return;const r=await t(n),i=(await r.execute("navtree",{file:n})).body;return i?{outlineTrees:[ri(i)]}:void 0}};var t}provideDefinitions(){var t;if(!atom.config.get("atom-typescript").disableAtomIdeDefinitions)return t=this.getClient,{name:"atom-typescript",priority:0,grammarScopes:ce(),wordRegExp:/([A-Za-z0-9_])+|['"`](\\.|[^'"`\\\\])*['"`]/g,async getDefinition(e,n){if(!ue(e))return;const r=fe(e,n);if(!r)return;const i=await t(r.file),o=await i.execute("definition",r);return o.body&&0!==o.body.length?{queryRange:void 0,definitions:o.body.map(Cr)}:void 0}}}provideCodeHighlight(){if(!atom.config.get("atom-typescript").preferBuiltinOccurrenceHighlight)return this.occurrenceManager.dispose(),br(this.getClient)}subscribeEditors(){this.subscriptions.add(atom.workspace.observeTextEditors((t=>{this.typescriptPaneFactory(t)})),atom.workspace.onDidChangeActiveTextEditor((t=>{if(t&&ue(t)){Kt(this.statusPanel.show());const e=Wc.lookupPane(t);e&&e.didActivate()}else Kt(this.statusPanel.hide())})))}}let Kc;var Qc=C(ft);exports.activate=function(t){Qc.setScheduler(atom.views),Kc=new Gc(t),setImmediate((()=>Kt(async function(){["atom-ide-ui","linter","nuclide"].some((t=>atom.packages.isPackageLoaded(t)))||await A.install("atom-typescript",!0)}())))},exports.deactivate=function(){Kc&&Kc.destroy(),Kc=void 0},exports.serialize=function(){return Kc?Kc.serialize():void 0},exports.deserializeSemanticView=function(t){return Je.create(t.data)},exports.consumeLinter=function(t){if(Kc)return Kc.consumeLinter(t)},exports.consumeStatusBar=function(t){if(Kc)return Kc.consumeStatusBar(t)},exports.consumeDatatipService=function(t){if(Kc)return Kc.consumeDatatipService(t)},exports.consumeSignatureHelp=function(t){if(Kc)return Kc.consumeSigHelpService(t)},exports.consumeBusySignal=function(t){if(Kc)return Kc.consumeBusySignal(t)},exports.provideAutocomplete=function(){if(Kc)return Kc.provideAutocomplete()},exports.provideIntentions=function(){if(Kc)return Kc.provideIntentions()},exports.provideIntentionsHighlight=function(){if(Kc)return Kc.provideIntentionsHighlight()},exports.provideCodeActions=function(){if(Kc)return Kc.provideCodeActions()},exports.provideHyperclick=function(){if(Kc)return Kc.provideHyperclick()},exports.provideReferences=function(){if(Kc)return Kc.provideReferences()},exports.provideOutlines=function(){if(Kc)return Kc.provideOutlines()},exports.provideDefinitions=function(){if(Kc)return Kc.provideDefinitions()},exports.provideCodeHighlight=function(){if(Kc)return Kc.provideCodeHighlight()}; //# sourceMappingURL=main.js.map diff --git a/dist/main.js.map b/dist/main.js.map index 776eb7b8..bd1add6b 100644 --- a/dist/main.js.map +++ b/dist/main.js.map @@ -1 +1 @@ -{"mappings":"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U,IAAMC,IAAU,IAAKC,IAAU,IACzCC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IACxDC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IACxDC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IACxDC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IACvEC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IACvEC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IACxDC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IACxDC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IACxDC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IACvEC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IACvEC,IAAU,IAAMC,IAAU,IAC1BC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IACzCC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IACvEC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IACvEC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IACxDC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IACxDC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IACzCC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IACzCC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IACzCC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IACzCC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IACxDC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IACxDC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IACzCC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IACzCC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IACtFC,IAAU,IAAMC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IAAKC,IAAU,IAAKC,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","sources":["./node_modules/@parcel/scope-hoisting/lib/helpers.js","./node_modules/atom-package-deps/lib/index.js","./node_modules/etch/lib/event-listener-props.js","./node_modules/etch/lib/dom.js","./node_modules/etch/lib/svg-tags.js","./node_modules/etch/lib/svg-attribute-translations.js","./node_modules/etch/lib/update-props.js","./node_modules/etch/lib/render.js","./node_modules/etch/lib/update-ref.js","./node_modules/etch/lib/patch.js","./node_modules/etch/lib/default-scheduler.js","./node_modules/etch/lib/scheduler-assignment.js","./node_modules/etch/lib/component-helpers.js","./node_modules/etch/lib/index.js","./lib/utils.ts","./node_modules/lodash/lodash.js","./lib/main/atom/utils/ts.ts","./lib/main/atom/utils/atom.ts","./lib/main/atom/views/outline/navTreeUtils.ts","./lib/main/atom/views/outline/navigationNodeComponent.tsx","./node_modules/lodash/isObject.js","./node_modules/lodash/_freeGlobal.js","./node_modules/lodash/_root.js","./node_modules/lodash/now.js","./node_modules/lodash/_trimmedEndIndex.js","./node_modules/lodash/_baseTrim.js","./node_modules/lodash/_Symbol.js","./node_modules/lodash/_getRawTag.js","./node_modules/lodash/_objectToString.js","./node_modules/lodash/_baseGetTag.js","./node_modules/lodash/isObjectLike.js","./node_modules/lodash/isSymbol.js","./node_modules/lodash/toNumber.js","./node_modules/lodash/debounce.js","./lib/main/atom/views/outline/navigationTreeComponent.tsx","./lib/main/atom/views/outline/semanticView.ts","./node_modules/byline/lib/byline.js","./lib/client/callbacks.ts","./lib/client/client.ts","./node_modules/jsonc-parser/lib/esm/impl/parser.js","./node_modules/jsonc-parser/lib/esm/impl/scanner.js","./node_modules/jsonc-parser/lib/esm/main.js","./node_modules/resolve/lib/async.js","./node_modules/resolve/lib/caller.js","./node_modules/path-parse/index.js","./node_modules/resolve/lib/node-modules-paths.js","./node_modules/resolve/lib/normalize-options.js","./node_modules/function-bind/implementation.js","./node_modules/has/src/index.js","./node_modules/is-core-module/index.js","./node_modules/function-bind/index.js","./node_modules/is-core-module/core.json","./node_modules/resolve/lib/core.js","./node_modules/resolve/lib/core.json","./node_modules/resolve/index.js","./node_modules/resolve/lib/is-core.js","./node_modules/resolve/lib/sync.js","./lib/client/resolveBinary.ts","./lib/client/clientResolver.ts","./lib/main/atom-ide/codeHighlightProvider.ts","./lib/main/atom/tooltips/tooltipRenderer.tsx","./lib/main/atom-ide/datatipProvider.tsx","./lib/main/atom-ide/definitionsProvider.ts","./lib/main/atom-ide/findReferencesProvider.ts","./lib/main/atom/components/tsView.tsx","./node_modules/fuzzaldrin/lib/scorer.js","./node_modules/fuzzaldrin/lib/filter.js","./node_modules/fuzzaldrin/lib/matcher.js","./node_modules/fuzzaldrin/lib/fuzzaldrin.js","./lib/main/atom/views/highlightComponent.tsx","./node_modules/atom-select-list/lib/select-list-view.js","./lib/main/atom/views/simpleSelectionView.tsx","./lib/main/atom/commands/registry.ts","./lib/main/atom/commands/findReferences.tsx","./lib/main/atom/commands/goToDeclaration.tsx","./lib/main/atom-ide/outlineProvider.ts","./lib/main/atom-ide/sigHelpProvider.ts","./lib/main/atom/codeActionTemplate.tsx","./lib/main/atom/autoCompleteProvider.ts","./lib/main/atom/commands/refactorCode.tsx","./lib/main/atom/codefix/codefixProvider.ts","./lib/main/atom/commands/initializeConfig.ts","./lib/main/atom/commands/build.ts","./lib/main/atom/commands/checkAllFiles.ts","./lib/main/atom/commands/clearErrors.ts","./lib/main/atom/commands/formatCode.ts","./lib/main/atom/commands/organizeImports.ts","./lib/main/atom/commands/reloadProjects.ts","./node_modules/underscore-plus/node_modules/underscore/underscore.js","./node_modules/underscore-plus/lib/underscore-plus.js","./node_modules/async/lib/async.js","./node_modules/mkdirp/index.js","./node_modules/fs.realpath/old.js","./node_modules/fs.realpath/index.js","./node_modules/concat-map/index.js","./node_modules/balanced-match/index.js","./node_modules/brace-expansion/index.js","./node_modules/minimatch/minimatch.js","./node_modules/inherits/inherits_browser.js","./node_modules/path-is-absolute/index.js","./node_modules/rimraf/node_modules/glob/common.js","./node_modules/rimraf/node_modules/glob/sync.js","./node_modules/wrappy/wrappy.js","./node_modules/once/once.js","./node_modules/inflight/inflight.js","./node_modules/rimraf/node_modules/glob/glob.js","./node_modules/rimraf/rimraf.js","./node_modules/fs-plus/lib/fs-plus.js","./lib/main/atom/components/miniEditor.ts","./lib/main/atom/views/renameView.tsx","./lib/main/atom/commands/index.ts","./lib/main/atom/commands/renameFile.ts","./lib/main/atom/commands/renameRefactor.ts","./lib/main/atom/commands/restartAllServers.ts","./lib/main/atom/commands/returnFromDeclaration.tsx","./lib/main/atom/commands/semanticView.ts","./lib/main/atom/commands/showTooltip.ts","./lib/main/atom/commands/sigHelp.ts","./lib/main/atom/commands/symbolsView.ts","./lib/main/atom/components/statusPanel/tooltip.tsx","./lib/main/atom/components/statusPanel/buildStatus.tsx","./lib/main/atom/components/statusPanel/configPath.tsx","./lib/main/atom/components/statusPanel/index.tsx","./lib/main/atom/editorPositionHistoryManager.tsx","./lib/main/atom/occurrence/controller.ts","./lib/main/atom/occurrence/manager.ts","./lib/main/atom/tooltips/util.ts","./lib/main/atom/sigHelp/tooltipView.tsx","./lib/main/atom/sigHelp/controller.ts","./lib/main/atom/sigHelp/manager.ts","./lib/main/atom/utils/element-listener.ts","./lib/main/atom/tooltips/tooltipView.tsx","./lib/main/atom/tooltips/controller.ts","./lib/main/atom/tooltips/manager.ts","./lib/main/atom/views/outline/semanticViewController.ts","./lib/main/atom/views/symbols/symbolsTag.ts","./lib/main/atom/views/symbols/generator.ts","./lib/main/atom/views/symbols/utils.ts","./lib/main/atom/views/symbols/fileSymbolsView.tsx","./lib/main/atom/views/symbols/symbolsViewController.ts","./lib/main/atom/views/symbols/projectSymbolsView.tsx","./lib/main/errorPusher.ts","./lib/main/typescriptBuffer.ts","./lib/main/typescriptEditorPane.ts","./lib/main/pluginManager.ts","./lib/main/atom/codefix/intentionsProvider.ts","./lib/main/atom-ide/codeActionsProvider.ts","./lib/main/atom-ide/hyperclickProvider.ts","./lib/main/atomts.ts"],"sourcesContent":["function $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\nfunction $parcel$defineInteropFlag(a) {\n Object.defineProperty(a, '__esModule', {value: true});\n}\n\nfunction $parcel$exportWildcard(dest, source) {\n Object.keys(source).forEach(function(key) {\n if (key === 'default' || key === '__esModule') {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function get() {\n return source[key];\n },\n });\n });\n\n return dest;\n}\n\nfunction $parcel$missingModule(name) {\n var err = new Error(\"Cannot find module '\" + name + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n}\n\nvar $parcel$global =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar os = require('os');\nvar child_process = require('child_process');\nvar fs = require('fs');\nvar path = require('path');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar os__default = /*#__PURE__*/_interopDefaultLegacy(os);\nvar fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);\nvar path__default = /*#__PURE__*/_interopDefaultLegacy(path);\n\nvar indentString = (string, count = 1, options) => {\n\toptions = {\n\t\tindent: ' ',\n\t\tincludeEmptyLines: false,\n\t\t...options\n\t};\n\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(\n\t\t\t`Expected \\`input\\` to be a \\`string\\`, got \\`${typeof string}\\``\n\t\t);\n\t}\n\n\tif (typeof count !== 'number') {\n\t\tthrow new TypeError(\n\t\t\t`Expected \\`count\\` to be a \\`number\\`, got \\`${typeof count}\\``\n\t\t);\n\t}\n\n\tif (typeof options.indent !== 'string') {\n\t\tthrow new TypeError(\n\t\t\t`Expected \\`options.indent\\` to be a \\`string\\`, got \\`${typeof options.indent}\\``\n\t\t);\n\t}\n\n\tif (count === 0) {\n\t\treturn string;\n\t}\n\n\tconst regex = options.includeEmptyLines ? /^/gm : /^(?!\\s*$)/gm;\n\n\treturn string.replace(regex, options.indent.repeat(count));\n};\n\nconst extractPathRegex = /\\s+at.*(?:\\(|\\s)(.*)\\)?/;\nconst pathRegex = /^(?:(?:(?:node|(?:internal\\/[\\w/]*|.*node_modules\\/(?:babel-polyfill|pirates)\\/.*)?\\w+)\\.js:\\d+:\\d+)|native)/;\nconst homeDir = typeof os__default['default'].homedir === 'undefined' ? '' : os__default['default'].homedir();\n\nvar cleanStack = (stack, options) => {\n\toptions = Object.assign({pretty: false}, options);\n\n\treturn stack.replace(/\\\\/g, '/')\n\t\t.split('\\n')\n\t\t.filter(line => {\n\t\t\tconst pathMatches = line.match(extractPathRegex);\n\t\t\tif (pathMatches === null || !pathMatches[1]) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst match = pathMatches[1];\n\n\t\t\t// Electron\n\t\t\tif (\n\t\t\t\tmatch.includes('.app/Contents/Resources/electron.asar') ||\n\t\t\t\tmatch.includes('.app/Contents/Resources/default_app.asar')\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn !pathRegex.test(match);\n\t\t})\n\t\t.filter(line => line.trim() !== '')\n\t\t.map(line => {\n\t\t\tif (options.pretty) {\n\t\t\t\treturn line.replace(extractPathRegex, (m, p1) => m.replace(p1, p1.replace(homeDir, '~')));\n\t\t\t}\n\n\t\t\treturn line;\n\t\t})\n\t\t.join('\\n');\n};\n\nconst cleanInternalStack = stack => stack.replace(/\\s+at .*aggregate-error\\/index.js:\\d+:\\d+\\)?/g, '');\n\nclass AggregateError extends Error {\n\tconstructor(errors) {\n\t\tif (!Array.isArray(errors)) {\n\t\t\tthrow new TypeError(`Expected input to be an Array, got ${typeof errors}`);\n\t\t}\n\n\t\terrors = [...errors].map(error => {\n\t\t\tif (error instanceof Error) {\n\t\t\t\treturn error;\n\t\t\t}\n\n\t\t\tif (error !== null && typeof error === 'object') {\n\t\t\t\t// Handle plain error objects with message property and/or possibly other metadata\n\t\t\t\treturn Object.assign(new Error(error.message), error);\n\t\t\t}\n\n\t\t\treturn new Error(error);\n\t\t});\n\n\t\tlet message = errors\n\t\t\t.map(error => {\n\t\t\t\t// The `stack` property is not standardized, so we can't assume it exists\n\t\t\t\treturn typeof error.stack === 'string' ? cleanInternalStack(cleanStack(error.stack)) : String(error);\n\t\t\t})\n\t\t\t.join('\\n');\n\t\tmessage = '\\n' + indentString(message, 4);\n\t\tsuper(message);\n\n\t\tthis.name = 'AggregateError';\n\n\t\tObject.defineProperty(this, '_errors', {value: errors});\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tfor (const error of this._errors) {\n\t\t\tyield error;\n\t\t}\n\t}\n}\n\nvar aggregateError = AggregateError;\n\nvar pMap = async (\n\titerable,\n\tmapper,\n\t{\n\t\tconcurrency = Infinity,\n\t\tstopOnError = true\n\t} = {}\n) => {\n\treturn new Promise((resolve, reject) => {\n\t\tif (typeof mapper !== 'function') {\n\t\t\tthrow new TypeError('Mapper function is required');\n\t\t}\n\n\t\tif (!((Number.isSafeInteger(concurrency) || concurrency === Infinity) && concurrency >= 1)) {\n\t\t\tthrow new TypeError(`Expected \\`concurrency\\` to be an integer from 1 and up or \\`Infinity\\`, got \\`${concurrency}\\` (${typeof concurrency})`);\n\t\t}\n\n\t\tconst result = [];\n\t\tconst errors = [];\n\t\tconst iterator = iterable[Symbol.iterator]();\n\t\tlet isRejected = false;\n\t\tlet isIterableDone = false;\n\t\tlet resolvingCount = 0;\n\t\tlet currentIndex = 0;\n\n\t\tconst next = () => {\n\t\t\tif (isRejected) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst nextItem = iterator.next();\n\t\t\tconst index = currentIndex;\n\t\t\tcurrentIndex++;\n\n\t\t\tif (nextItem.done) {\n\t\t\t\tisIterableDone = true;\n\n\t\t\t\tif (resolvingCount === 0) {\n\t\t\t\t\tif (!stopOnError && errors.length !== 0) {\n\t\t\t\t\t\treject(new aggregateError(errors));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve(result);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresolvingCount++;\n\n\t\t\t(async () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst element = await nextItem.value;\n\t\t\t\t\tresult[index] = await mapper(element, index);\n\t\t\t\t\tresolvingCount--;\n\t\t\t\t\tnext();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (stopOnError) {\n\t\t\t\t\t\tisRejected = true;\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors.push(error);\n\t\t\t\t\t\tresolvingCount--;\n\t\t\t\t\t\tnext();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})();\n\t\t};\n\n\t\tfor (let i = 0; i < concurrency; i++) {\n\t\t\tnext();\n\n\t\t\tif (isIterableDone) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n};\n\nconst pMap$1 = (iterable, mapper, options) => new Promise((resolve, reject) => {\n\toptions = Object.assign({\n\t\tconcurrency: Infinity\n\t}, options);\n\n\tif (typeof mapper !== 'function') {\n\t\tthrow new TypeError('Mapper function is required');\n\t}\n\n\tconst {concurrency} = options;\n\n\tif (!(typeof concurrency === 'number' && concurrency >= 1)) {\n\t\tthrow new TypeError(`Expected \\`concurrency\\` to be a number from 1 and up, got \\`${concurrency}\\` (${typeof concurrency})`);\n\t}\n\n\tconst ret = [];\n\tconst iterator = iterable[Symbol.iterator]();\n\tlet isRejected = false;\n\tlet isIterableDone = false;\n\tlet resolvingCount = 0;\n\tlet currentIndex = 0;\n\n\tconst next = () => {\n\t\tif (isRejected) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst nextItem = iterator.next();\n\t\tconst i = currentIndex;\n\t\tcurrentIndex++;\n\n\t\tif (nextItem.done) {\n\t\t\tisIterableDone = true;\n\n\t\t\tif (resolvingCount === 0) {\n\t\t\t\tresolve(ret);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tresolvingCount++;\n\n\t\tPromise.resolve(nextItem.value)\n\t\t\t.then(element => mapper(element, i))\n\t\t\t.then(\n\t\t\t\tvalue => {\n\t\t\t\t\tret[i] = value;\n\t\t\t\t\tresolvingCount--;\n\t\t\t\t\tnext();\n\t\t\t\t},\n\t\t\t\terror => {\n\t\t\t\t\tisRejected = true;\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\t\t\t);\n\t};\n\n\tfor (let i = 0; i < concurrency; i++) {\n\t\tnext();\n\n\t\tif (isIterableDone) {\n\t\t\tbreak;\n\t\t}\n\t}\n});\n\nvar pMap_1 = pMap$1;\n// TODO: Remove this for the next major release\nvar _default = pMap$1;\npMap_1.default = _default;\n\nconst pFilter = async (iterable, filterer, options) => {\n\tconst values = await pMap_1(\n\t\titerable,\n\t\t(element, index) => Promise.all([filterer(element, index), element]),\n\t\toptions\n\t);\n\treturn values.filter(value => Boolean(value[0])).map(value => value[1]);\n};\n\nvar pFilter_1 = pFilter;\n// TODO: Remove this for the next major release\nvar _default$1 = pFilter;\npFilter_1.default = _default$1;\n\nconst IS_ATOM = typeof atom !== 'undefined';\nconst IS_DEV = typeof atom !== 'undefined' && (atom.inDevMode() || atom.inSpecMode());\nconst IGNORED_CONFIG_NAME = 'atom-package-deps.ignored';\n\n/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nvar escapeHtml_1 = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n\nasync function spawnInternal(command, args, options) {\n const spawnedProcess = child_process.spawn(command, args, options);\n const promise = new Promise((resolve, reject) => {\n const output = {\n stdout: spawnedProcess.stdout ? [] : null,\n stderr: spawnedProcess.stderr ? [] : null,\n };\n spawnedProcess.on('error', reject);\n if (spawnedProcess.stdout) {\n spawnedProcess.stdout.on('data', function (chunk) {\n output.stdout.push(chunk);\n if (options.handleStdout) {\n options.handleStdout(chunk);\n }\n });\n }\n if (spawnedProcess.stderr) {\n spawnedProcess.stderr.on('data', function (chunk) {\n output.stderr.push(chunk);\n if (options.handleStderr) {\n options.handleStderr(chunk);\n }\n });\n }\n spawnedProcess.on('close', code => {\n let outputStdout = null;\n if (output.stdout != null) {\n outputStdout =\n options.encoding === null || options.encoding === 'buffer'\n ? Buffer.concat(output.stdout)\n : output.stdout.join('');\n }\n let outputStderr = null;\n if (output.stderr != null) {\n outputStderr =\n options.encoding === null || options.encoding === 'buffer'\n ? Buffer.concat(output.stderr)\n : output.stderr.join('');\n }\n resolve({\n exitCode: code,\n stdout: outputStdout,\n stderr: outputStderr,\n });\n });\n });\n options.handleChildProcess(spawnedProcess);\n return promise;\n}\nfunction spawn(command, args, options) {\n let spawnedProcess;\n const promise = spawnInternal(command, args, {\n ...options,\n handleChildProcess(_spawnedProcess) {\n spawnedProcess = _spawnedProcess;\n },\n });\n promise.kill = function (signal) {\n // TODO: kill all subprocesses on windows with wmic?\n return spawnedProcess.kill(signal);\n };\n return promise;\n}\n\nvar semverCompare = function cmp (a, b) {\n var pa = a.split('.');\n var pb = b.split('.');\n for (var i = 0; i < 3; i++) {\n var na = Number(pa[i]);\n var nb = Number(pb[i]);\n if (na > nb) return 1;\n if (nb > na) return -1;\n if (!isNaN(na) && isNaN(nb)) return 1;\n if (isNaN(na) && !isNaN(nb)) return -1;\n }\n return 0;\n};\n\nasync function getDependencies(packageName) {\n const packageModule = atom.packages.getLoadedPackage(packageName);\n const packageDependencies = packageModule && packageModule.metadata['package-deps'];\n return Array.isArray(packageDependencies) ? packageDependencies : [];\n}\nasync function resolveDependencyPath(packageName) {\n return atom.packages.resolvePackagePath(packageName);\n}\nasync function getInstalledDependencyVersion(dependency) {\n var _packageModule$metada;\n\n const packageModule = atom.packages.getLoadedPackage(dependency.name);\n return packageModule == null ? null : (_packageModule$metada = packageModule.metadata.version) !== null && _packageModule$metada !== void 0 ? _packageModule$metada : null;\n}\n\nasync function getDependencies$1(packageName) {\n let packageStats = null;\n\n try {\n packageStats = await fs__default['default'].promises.stat(packageName);\n } catch (_) {// No Op\n }\n\n if (packageStats == null || !packageStats.isDirectory()) {\n throw new Error(`[Package-Deps] Expected packageName to be a readable directory in Node.js invocation`);\n }\n\n let parsed = null;\n\n try {\n const contents = await fs__default['default'].promises.readFile(path__default['default'].join(packageName, 'package.json'), 'utf8');\n parsed = JSON.parse(contents);\n } catch (_) {// Ignore JSON read errors and such\n }\n\n const packageDependencies = parsed == null || typeof parsed !== 'object' ? [] : parsed['package-deps'];\n return Array.isArray(packageDependencies) ? packageDependencies : [];\n}\nasync function resolveDependencyPath$1(packageName) {\n var _process$env$ATOM_HOM;\n\n const packageDirectory = path__default['default'].join((_process$env$ATOM_HOM = process.env.ATOM_HOME) !== null && _process$env$ATOM_HOM !== void 0 ? _process$env$ATOM_HOM : path__default['default'].join(os__default['default'].homedir(), '.atom'), 'packages', packageName);\n\n try {\n await fs__default['default'].promises.access(packageDirectory, fs__default['default'].constants.R_OK);\n return packageDirectory;\n } catch (_) {\n return null;\n }\n}\nasync function getInstalledDependencyVersion$1(dependency) {\n var _manifest$version, _manifest;\n\n const {\n directory\n } = dependency;\n\n if (directory == null) {\n // Not possible to get version without resolved directory in Node.js version\n return null;\n }\n\n let manifest = null;\n\n try {\n manifest = JSON.parse(await fs__default['default'].promises.readFile(path__default['default'].join(directory, 'package.json'), 'utf8'));\n } catch (_) {\n return null;\n }\n\n return (_manifest$version = (_manifest = manifest) === null || _manifest === void 0 ? void 0 : _manifest.version) !== null && _manifest$version !== void 0 ? _manifest$version : null;\n}\n\n/**\n * Internal helpers\n */\n\nasync function getInstalledDependencyVersion$2(dependency) {\n if (IS_ATOM) {\n const atomPackageVersion = await getInstalledDependencyVersion(dependency);\n\n if (atomPackageVersion) {\n return atomPackageVersion;\n } // If the package isn't activated, it won't be loaded, so fallback to reading manifest file instead\n\n }\n\n return getInstalledDependencyVersion$1(dependency);\n}\n/**\n * Exported helpers\n */\n\n\nconst resolveDependencyPath$2 = IS_ATOM ? resolveDependencyPath : resolveDependencyPath$1;\nfunction invariant(condition, message) {\n if (!condition) {\n throw new Error(message !== null && message !== void 0 ? message : 'Invariant violation');\n }\n}\nasync function getDependencies$2(name) {\n const dependencies = await (IS_ATOM ? getDependencies(name) : getDependencies$1(name));\n\n if (IS_DEV) {\n invariant(Array.isArray(dependencies), `Dependencies for ${name} are not a valid array`);\n dependencies.forEach((item, index) => {\n if (Array.isArray(item)) {\n item.forEach((subitem, subindex) => {\n const invalidMessage = `Dependency#${index}#${subindex} for ${name} is invalid`;\n invariant(typeof subitem.name === 'string' && subitem.name.length > 0, invalidMessage);\n invariant(subitem.minimumVersion == null || typeof subitem.minimumVersion === 'string' && subitem.minimumVersion.length > 0, invalidMessage);\n });\n invariant(item.length > 0, `Dependency#${index} for ${name} has no group items`);\n } else {\n const invalidMessage = `Dependency#${index} for ${name} is invalid`;\n invariant(typeof item.name === 'string' && item.name.length > 0, invalidMessage);\n invariant(item.minimumVersion == null || typeof item.minimumVersion === 'string' && item.minimumVersion.length > 0, invalidMessage);\n }\n });\n }\n\n return dependencies;\n}\nasync function shouldInstallDependency(dependency) {\n if (dependency.directory == null) {\n // Not installed, so install\n return true;\n }\n\n if (dependency.minimumVersion == null) {\n // Already installed and no version defined, so skip\n return false;\n }\n\n const version = await getInstalledDependencyVersion$2(dependency);\n\n if (version == null) {\n // Unable to get current version, so install\n return true;\n }\n\n return semverCompare(dependency.minimumVersion, version) === 1;\n}\nfunction isPackageIgnored(name) {\n var _atom$config$get;\n\n if (!IS_ATOM) {\n // Never ignored in CLI\n return false;\n }\n\n const ignoredPackages = (_atom$config$get = atom.config.get(IGNORED_CONFIG_NAME)) !== null && _atom$config$get !== void 0 ? _atom$config$get : [];\n\n if (ignoredPackages.includes(name)) {\n return true;\n }\n\n return false;\n}\nfunction markPackageAsIgnored(name) {\n var _atom$config$get2;\n\n if (!IS_ATOM) {\n // No op in CLI\n return;\n }\n\n const ignoredPackages = new Set((_atom$config$get2 = atom.config.get(IGNORED_CONFIG_NAME)) !== null && _atom$config$get2 !== void 0 ? _atom$config$get2 : []);\n ignoredPackages.add(name);\n atom.config.set(IGNORED_CONFIG_NAME, Array.from(ignoredPackages));\n}\nconst INSTALL_VALID_TICKS = new Set(['✓', 'done']);\nconst INSTALL_VALIDATION_REGEXP = /(?:Installing|Moving) (.*?) to .* (.*)/; // Example success output: Uninstalling linter-ui-default ✓\n\nasync function installPackage(dependency) {\n const apmPath = IS_ATOM ? atom.packages.getApmPath() : 'apm';\n const {\n stdout,\n stderr\n } = await spawn(apmPath, ['install', dependency.name, '--production', '--color', 'false']);\n const match = INSTALL_VALIDATION_REGEXP.exec(stdout.trim());\n\n if (match != null && INSTALL_VALID_TICKS.has(match[2])) {\n // Installation complete and verified\n return;\n }\n\n const error = new Error(`Error installing dependency: ${dependency.name}`);\n error.stack = stderr.trim();\n throw error;\n}\n\nlet showResetInstruction = true;\nfunction confirmPackagesToInstall({\n packageName,\n dependencies\n}) {\n return new Promise(resolve => {\n const ungroupedDependencies = dependencies.filter(item => !Array.isArray(item));\n const groupedDependencies = dependencies.filter(item => Array.isArray(item));\n const skipGroups = groupedDependencies.length === 0;\n const detail = skipGroups ? ungroupedDependencies.map(item => item.name).join(', ') : 'Something went wrong. Check your developer console';\n const groupChoices = groupedDependencies.map(item => item[0]); // If Atom \"notifications\" package is disabled output a warning in case no other notifications package is installed.\n\n if (atom.packages.isPackageDisabled('notifications')) {\n console.warn(`Enable notifications to install dependencies for ${packageName}`);\n }\n\n const notification = atom.notifications.addInfo(`${packageName} needs to install dependencies`, {\n dismissable: true,\n icon: 'cloud-download',\n detail,\n description: `Install dependenc${dependencies.length === 1 ? 'y' : 'ies'}?`,\n buttons: [{\n text: 'Yes',\n onDidClick: () => {\n if (skipGroups) {\n resolve([]);\n } else {\n resolve(ungroupedDependencies.concat(groupChoices));\n }\n\n notification.dismiss();\n }\n }, {\n text: 'No Thanks',\n onDidClick: () => {\n notification.dismiss();\n }\n }, {\n text: 'Never',\n onDidClick: () => {\n markPackageAsIgnored(packageName);\n\n if (showResetInstruction) {\n showResetInstruction = false;\n atom.notifications.addInfo('How to reset package-deps memory', {\n dismissable: true,\n description: \"To modify the list of ignored files invoke 'Application: Open Your Config' and change the 'atom-package-deps' section\"\n });\n }\n\n notification.dismiss();\n }\n }]\n });\n notification.onDidDismiss(() => resolve([]));\n\n if (skipGroups) {\n return;\n } // Handle groups\n\n\n try {\n var _notificationView$ele;\n\n const notificationView = atom.views.getView(notification);\n const notificationElement = (_notificationView$ele = notificationView === null || notificationView === void 0 ? void 0 : notificationView.element) !== null && _notificationView$ele !== void 0 ? _notificationView$ele : null;\n\n if (notificationElement == null) {\n throw new Error('Unable to get notification element from view');\n }\n\n const notificationContent = notificationElement.querySelector('.detail-content');\n\n if (notificationContent == null) {\n throw new Error('Content detail container not found inside the notification');\n } // Clear the contents and add some skel\n\n\n notificationContent.innerHTML = ''; // Add list of ungroup dependencies to the top of the notification\n\n if (ungroupedDependencies.length > 0) {\n const ungroupedLine = document.createElement('div');\n ungroupedLine.innerHTML = `Packages without choices:
  • ${ungroupedDependencies.map(item => escapeHtml_1(item.name)).join('
  • ')}
`;\n notificationContent.appendChild(ungroupedLine);\n } // Create a label line for groups\n\n\n const groupLabelLine = document.createElement('div');\n groupLabelLine.innerHTML = `Packages with choices:`;\n notificationContent.appendChild(groupLabelLine); // Create one line per group with a select inside\n\n const groupedList = document.createElement('ul');\n groupedDependencies.forEach((item, index) => {\n const listItem = document.createElement('li');\n const select = document.createElement('select');\n select.innerHTML = item.map(subitem => ``).join('\\n');\n select.addEventListener('change', () => {\n // Change the selected value for this index for resolve to use\n const subitem = item.find(entry => entry.name === select.value);\n\n if (subitem != null) {\n groupChoices[index] = subitem;\n }\n });\n listItem.style.marginTop = '5px';\n listItem.appendChild(select);\n groupedList.appendChild(listItem);\n });\n notificationContent.appendChild(groupedList);\n } catch (err) {\n console.error('[Package-Deps] Error during showing package choices to user', err);\n }\n });\n}\nfunction getView({\n packageName,\n dependencies\n}) {\n const failed = [];\n const notification = atom.notifications.addInfo(`Installing ${packageName} dependencies`, {\n detail: `Installing ${dependencies.map(item => item.name).join(', ')}`,\n dismissable: true\n });\n const progress = document.createElement('progress');\n progress.max = dependencies.length;\n progress.style.width = '100%';\n\n try {\n var _notificationView$ele2;\n\n const notificationView = atom.views.getView(notification);\n const notificationElement = (_notificationView$ele2 = notificationView === null || notificationView === void 0 ? void 0 : notificationView.element) !== null && _notificationView$ele2 !== void 0 ? _notificationView$ele2 : null;\n\n if (notificationElement == null) {\n throw new Error('Unable to get notification element from view');\n }\n\n const notificationContent = notificationElement.querySelector('.detail-content');\n\n if (notificationContent == null) {\n throw new Error('Content detail container not found inside the notification');\n }\n\n notificationContent.appendChild(progress);\n } catch (err) {\n console.error('[Package-Deps] Error during showing installation progress to user', err);\n }\n\n return {\n handleFailure({\n dependency,\n error\n }) {\n var _error$stack;\n\n failed.push(dependency.name);\n progress.value += 1;\n console.error(`[Package-Deps] Unable to install ${dependency.name}, Error:`, (_error$stack = error === null || error === void 0 ? void 0 : error.stack) !== null && _error$stack !== void 0 ? _error$stack : error);\n },\n\n handleDependencyInstalled(dependency) {\n progress.value += 1;\n },\n\n handleComplete() {\n notification.dismiss();\n\n if (failed.length > 0) {\n atom.notifications.addWarning(`Failed to install ${packageName} dependencies`, {\n detail: `These packages were not installed, check your console\\nfor more info.\\n${failed.join('\\n')}`,\n dismissable: true\n });\n } else {\n atom.notifications.addSuccess(`Installed ${packageName} dependencies`, {\n detail: `Installed ${dependencies.map(item => item.name).join(', ')}`\n });\n }\n\n Promise.all(dependencies.map(item => {\n if (!failed.includes(item.name)) {\n return atom.packages.activatePackage(item.name);\n }\n\n return null;\n })).catch(err => {\n console.error(`[Package-Deps] Error activating installed packages for ${packageName}`, err);\n });\n }\n\n };\n}\n\nasync function confirmPackagesToInstall$1({\n dependencies\n}) {\n // No user interaction on the CLI. Install the first (aka \"default\" choice) package\n return dependencies.map(item => Array.isArray(item) ? item[0] : item);\n}\nfunction getView$1({\n dependencies\n}) {\n let failed = false;\n console.log(`Installing dependencies:\\n${dependencies.map(item => ` - ${item.name}`).join('\\n')}`);\n return {\n handleFailure({\n dependency,\n error\n }) {\n var _error$stack;\n\n failed = true;\n console.error(`Unable to install ${dependency.name}, Error:`, (_error$stack = error === null || error === void 0 ? void 0 : error.stack) !== null && _error$stack !== void 0 ? _error$stack : error);\n },\n\n handleDependencyInstalled(dependency) {\n console.log('Successfully installed', dependency.name);\n },\n\n handleComplete() {\n console.log('Installation complete');\n\n if (failed) {\n // Fail the invocation\n process.exitCode = 1;\n }\n }\n\n };\n}\n\nconst getView$2 = IS_ATOM ? getView : getView$1;\nconst confirmPackagesToInstall$2 = IS_ATOM ? confirmPackagesToInstall : confirmPackagesToInstall$1;\n\nasync function install(packageName) {\n invariant(typeof packageName === 'string' && packageName.length > 0, '[Package-Deps] Package name is required');\n\n if (isPackageIgnored(packageName)) {\n // User ignored this package\n return;\n } // Get list of relevant dependencies\n\n\n const dependencies = await getDependencies$2(packageName);\n\n if (dependencies.length === 0) {\n // Short-circuit\n return;\n } // Resolve directories of relevant dependencies\n\n\n const resolvedDependencies = await Promise.all(dependencies.map(async item => {\n if (Array.isArray(item)) {\n return Promise.all(item.map(async subitem => ({ ...subitem,\n directory: await resolveDependencyPath$2(subitem.name)\n })));\n }\n\n return { ...item,\n directory: await resolveDependencyPath$2(item.name)\n };\n })); // Filter out already installed, in range dependencies\n // If one dependency from a group is already installed, whole group is ignored\n\n const dependenciesToInstall = await pFilter_1(resolvedDependencies, async function (item) {\n if (Array.isArray(item)) {\n return (await Promise.all(item.map(subitem => shouldInstallDependency(subitem)))).every(Boolean);\n }\n\n return shouldInstallDependency(item);\n });\n\n if (dependenciesToInstall.length === 0) {\n // Short-circuit if all have been skipped\n return;\n }\n\n const chosenDependencies = await confirmPackagesToInstall$2({\n packageName,\n dependencies: dependenciesToInstall\n });\n\n if (chosenDependencies.length === 0) {\n // Short-circuit if user interaction cancelled all\n return;\n }\n\n const view = getView$2({\n packageName,\n dependencies: chosenDependencies\n });\n await pMap(chosenDependencies, async function (dependency) {\n try {\n await installPackage(dependency);\n view.handleDependencyInstalled(dependency);\n } catch (err) {\n view.handleFailure({\n dependency,\n error: err\n });\n }\n }, {\n concurrency: 2\n });\n view.handleComplete();\n}\n\nexports.install = install;\n","module.exports = {\n onCopy: 'copy',\n onCut: 'cut',\n onPaste: 'paste',\n onCompositionEnd: 'compositionend',\n onCompositionStart: 'compositionstart',\n onCompositionUpdate: 'compositionupdate',\n onKeyDown: 'keydown',\n onKeyPress: 'keypress',\n onKeyUp: 'keyup',\n onFocus: 'focus',\n onBlur: 'blur',\n onChange: 'change',\n onInput: 'input',\n onSubmit: 'submit',\n onClick: 'click',\n onContextMenu: 'contextmenu',\n onDoubleClick: 'dblclick',\n onDrag: 'drag',\n onDragEnd: 'dragend',\n onDragEnter: 'dragenter',\n onDragExit: 'dragexit',\n onDragLeave: 'dragleave',\n onDragOver: 'dragover',\n onDragStart: 'dragstart',\n onDrop: 'drop',\n onMouseDown: 'mousedown',\n onMouseEnter: 'mouseenter',\n onMouseLeave: 'mouseleave',\n onMouseMove: 'mousemove',\n onMouseOut: 'mouseout',\n onMouseOver: 'mouseover',\n onMouseUp: 'mouseup',\n onSelect: 'select',\n onTouchCancel: 'touchcancel',\n onTouchEnd: 'touchend',\n onTouchMove: 'touchmove',\n onTouchStart: 'touchstart',\n onScroll: 'scroll',\n onWheel: 'wheel',\n onAbort: 'abort',\n onCanPlay: 'canplay',\n onCanPlayThrough: 'canplaythrough',\n onDurationChange: 'durationchange',\n onEmptied: 'emptied',\n onEncrypted: 'encrypted',\n onEnded: 'ended',\n onError: 'error',\n onLoadedData: 'loadeddata',\n onLoadedMetadata: 'loadedmetadata',\n onLoadStart: 'loadstart',\n onPause: 'pause',\n onPlay: 'play',\n onPlaying: 'playing',\n onProgress: 'progress',\n onRateChange: 'ratechange',\n onSeeked: 'seeked',\n onSeeking: 'seeking',\n onStalled: 'stalled',\n onSuspend: 'suspend',\n onTimeUpdate: 'timeupdate',\n onVolumeChange: 'volumechange',\n onWaiting: 'waiting',\n onLoad: 'load',\n onAnimationStart: 'animationstart',\n onAnimationEnd: 'animationend',\n onAnimationIteration: 'animationiteration',\n onTransitionEnd: 'transitionend'\n}\n","const EVENT_LISTENER_PROPS = require('./event-listener-props')\nconst SVG_TAGS = require('./svg-tags')\n\nfunction dom (tag, props, ...children) {\n let ambiguous = []\n\n for (let i = 0; i < children.length;) {\n const child = children[i]\n switch (typeof child) {\n case 'string':\n case 'number':\n children[i] = {text: child}\n i++\n break;\n\n case 'object':\n if (Array.isArray(child)) {\n children.splice(i, 1, ...child)\n } else if (!child) {\n children.splice(i, 1)\n } else {\n if (!child.context) {\n ambiguous.push(child)\n if (child.ambiguous && child.ambiguous.length) {\n ambiguous = ambiguous.concat(child.ambiguous)\n }\n }\n i++\n }\n break;\n\n default:\n throw new Error(`Invalid child node: ${child}`)\n }\n }\n\n if (props) {\n for (const propName in props) {\n const eventName = EVENT_LISTENER_PROPS[propName]\n if (eventName) {\n if (!props.on) props.on = {}\n props.on[eventName] = props[propName]\n }\n }\n\n if (props.class) {\n props.className = props.class\n }\n }\n\n return {tag, props, children, ambiguous}\n}\n\nconst HTML_TAGS = [\n 'a', 'abbr', 'address', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo',\n 'blockquote', 'body', 'button', 'canvas', 'caption', 'cite', 'code',\n 'colgroup', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl',\n 'dt', 'em', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2',\n 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'html', 'i', 'iframe', 'ins', 'kbd',\n 'label', 'legend', 'li', 'main', 'map', 'mark', 'menu', 'meter', 'nav',\n 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'pre',\n 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section',\n 'select', 'small', 'span', 'strong', 'style', 'sub', 'summary', 'sup',\n 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title',\n 'tr', 'u', 'ul', 'var', 'video', 'area', 'base', 'br', 'col', 'command',\n 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source',\n 'track', 'wbr'\n]\n\nfor (const tagName of HTML_TAGS) {\n dom[tagName] = (props, ...children) => {\n return dom(tagName, props, ...children)\n }\n}\n\nfor (const tagName of SVG_TAGS) {\n dom[tagName] = (props, ...children) => {\n return dom(tagName, props, ...children)\n }\n}\n\n\nmodule.exports = dom\n","// taken from https://github.com/facebook/react/blob/67f8524e88abbf1ac0fd86d38a0477d11fbc7b3e/src/isomorphic/classic/element/ReactDOMFactories.js#L153\nmodule.exports = new Set([\n 'circle',\n 'clipPath',\n 'defs',\n 'ellipse',\n 'g',\n 'image',\n 'line',\n 'linearGradient',\n 'mask',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialGradient',\n 'rect',\n 'stop',\n 'svg',\n 'text',\n 'tspan'\n])\n","// Based on https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute\nmodule.exports = new Map([\n ['accentHeight', 'accent-height'],\n ['alignmentBaseline', 'alignment-baseline'],\n ['arabicForm', 'arabic-form'],\n ['baselineShift', 'baseline-shift'],\n ['capHeight', 'cap-height'],\n ['className', 'class'],\n ['clipPath', 'clip-path'],\n ['clipRule', 'clip-rule'],\n ['colorInterpolation', 'color-interpolation'],\n ['colorInterpolationFilters', 'color-interpolation-filters'],\n ['colorProfile', 'color-profile'],\n ['colorRendering', 'color-rendering'],\n ['dominantBaseline', 'dominant-baseline'],\n ['enableBackground', 'enable-background'],\n ['fillOpacity', 'fill-opacity'],\n ['fillRule', 'fill-rule'],\n ['floodColor', 'flood-color'],\n ['floodOpacity', 'flood-opacity'],\n ['fontFamily', 'font-family'],\n ['fontSize', 'font-size'],\n ['fontSizeAdjust', 'font-size-adjust'],\n ['fontStretch', 'font-stretch'],\n ['fontStyle', 'font-style'],\n ['fontVariant', 'font-variant'],\n ['fontWeight', 'font-weight'],\n ['glyphName', 'glyph-name'],\n ['glyphOrientationHorizontal', 'glyph-orientation-horizontal'],\n ['glyphOrientationVertical', 'glyph-orientation-vertical'],\n ['horizAdvX', 'horiz-adv-x'],\n ['horizOriginX', 'horiz-origin-x'],\n ['letterSpacing', 'letter-spacing'],\n ['lightingColor', 'lighting-color'],\n ['markerEnd', 'marker-end'],\n ['markerMid', 'marker-mid'],\n ['markerStart', 'marker-start'],\n ['overlinePosition', 'overline-position'],\n ['overlineThickness', 'overline-thickness'],\n ['panose1', 'panose-1'],\n ['paintOrder', 'paint-order'],\n ['pointerEvents', 'pointer-events'],\n ['renderingIntent', 'rendering-intent'],\n ['shapeRendering', 'shape-rendering'],\n ['stopColor', 'stop-color'],\n ['stopOpacity', 'stop-opacity'],\n ['strikethroughPosition', 'strikethrough-position'],\n ['strikethroughThickness', 'strikethrough-thickness'],\n ['strokeDasharray', 'stroke-dasharray'],\n ['strokeDashoffset', 'stroke-dashoffset'],\n ['strokeLinecap', 'stroke-linecap'],\n ['strokeLinejoin', 'stroke-linejoin'],\n ['strokeMiterlimit', 'stroke-miterlimit'],\n ['strokeOpacity', 'stroke-opacity'],\n ['strokeWidth', 'stroke-width'],\n ['textAnchor', 'text-anchor'],\n ['textDecoration', 'text-decoration'],\n ['textRendering', 'text-rendering'],\n ['underlinePosition', 'underline-position'],\n ['underlineThickness', 'underline-thickness'],\n ['unicodeBidi', 'unicode-bidi'],\n ['unicodeRange', 'unicode-range'],\n ['unitsPerEm', 'units-per-em'],\n ['vAlphabetic', 'v-alphabetic'],\n ['vHanging', 'v-hanging'],\n ['vIdeographic', 'v-ideographic'],\n ['vMathematical', 'v-mathematical'],\n ['vertAdvY', 'vert-adv-y'],\n ['vertOriginX', 'vert-origin-x'],\n ['vertOriginY', 'vert-origin-y'],\n ['wordSpacing', 'word-spacing'],\n ['writingMode', 'writing-mode'],\n ['xHeight', 'x-height'],\n])\n","const EVENT_LISTENER_PROPS = require('./event-listener-props')\nconst SVG_TAGS = require('./svg-tags')\nconst SVG_ATTRIBUTE_TRANSLATIONS = require('./svg-attribute-translations')\nconst EMPTY = ''\n\nconst updateRef = require('./update-ref')\n\nmodule.exports = function (domNode, oldVirtualNode, newVirtualNode, options) {\n const oldProps = oldVirtualNode && oldVirtualNode.props\n const newProps = newVirtualNode.props\n\n let refs, listenerContext\n if (options) {\n refs = options.refs\n listenerContext = options.listenerContext\n }\n updateProps(domNode, oldVirtualNode, oldProps, newVirtualNode, newProps)\n if (refs) updateRef(domNode, oldProps && oldProps.ref, newProps && newProps.ref, refs)\n updateEventListeners(domNode, oldVirtualNode, newVirtualNode, listenerContext)\n}\n\n// Using var to avoid \"Unsupported phi use of variable\" deoptimization in Chrome 56\nfunction updateProps (domNode, oldVirtualNode, oldProps, newVirtualNode, newProps) {\n if (oldProps) {\n for (var name in oldProps) {\n if (name === 'ref' || name === 'on') continue\n if (name in EVENT_LISTENER_PROPS) continue\n if (!newProps || !(name in newProps)) {\n if (name === 'dataset') {\n updateProps(domNode.dataset, null, oldProps && oldProps.dataset, null, null)\n } else if (name !== 'innerHTML' && oldVirtualNode && SVG_TAGS.has(oldVirtualNode.tag)) {\n domNode.removeAttribute(SVG_ATTRIBUTE_TRANSLATIONS.get(name) || name)\n } else {\n // Clear property for objects that don't support deletion (e.g. style\n // or className). If we used null instead of an empty string, the DOM\n // could sometimes stringify the value and mistakenly assign 'null'.\n domNode[name] = EMPTY\n delete domNode[name]\n }\n }\n }\n }\n\n if (newProps) {\n for (var name in newProps) {\n if (name === 'ref' || name === 'on') continue\n if (name in EVENT_LISTENER_PROPS) continue\n var oldValue = oldProps && oldProps[name]\n var newValue = newProps[name]\n if (name === 'dataset') {\n updateNestedProps(domNode.dataset, oldValue, newValue, false)\n } else if (name === 'style' && typeof newValue !== 'string') {\n if (typeof oldValue === 'string') {\n domNode.style = ''\n oldValue = null\n }\n updateNestedProps(domNode.style, oldValue, newValue, true)\n } else if (name === 'attributes') {\n updateAttributes(domNode, oldValue, newValue)\n } else {\n if (newValue !== oldValue) {\n if (name !== 'innerHTML' && newVirtualNode && SVG_TAGS.has(newVirtualNode.tag)) {\n domNode.setAttribute(SVG_ATTRIBUTE_TRANSLATIONS.get(name) || name, newValue)\n } else if (newVirtualNode && newVirtualNode.tag === 'input'\n && name === 'value' && domNode[name] === newValue) {\n // Do not update `value` of an `input` unless it differs.\n // Every change will reset the cursor position.\n } else {\n domNode[name] = newValue\n }\n }\n }\n }\n }\n}\n\nfunction updateNestedProps (domProps, oldProps, newProps, isStyleObject) {\n if (oldProps) {\n for (var name in oldProps) {\n if (!newProps || !(name in newProps)) {\n if (isStyleObject) {\n domProps[name] = EMPTY\n } else {\n delete domProps[name]\n }\n }\n }\n }\n\n if (newProps) {\n for (var name in newProps) {\n const oldValue = oldProps && oldProps[name]\n const newValue = newProps[name]\n if (newValue !== oldValue) {\n domProps[name] = newValue\n }\n }\n }\n}\n\nfunction updateAttributes (domNode, oldAttributes, newAttributes) {\n if (oldAttributes) {\n for (var name in oldAttributes) {\n if (!newAttributes || !(name in newAttributes)) {\n domNode.removeAttribute(name)\n }\n }\n }\n\n if (newAttributes) {\n for (var name in newAttributes) {\n const oldValue = oldAttributes && oldAttributes[name]\n const newValue = newAttributes[name]\n if (newValue !== oldValue) {\n domNode.setAttribute(name, newValue)\n }\n }\n }\n}\n\nfunction updateEventListeners (domNode, oldVirtualNode, newVirtualNode, listenerContext) {\n const oldListeners = oldVirtualNode && oldVirtualNode.props && oldVirtualNode.props.on\n const newListeners = newVirtualNode.props && newVirtualNode.props.on\n\n for (const eventName in oldListeners) {\n if (!(newListeners && eventName in newListeners)) {\n let listenerToRemove\n if (oldVirtualNode && oldVirtualNode.boundListeners && oldVirtualNode.boundListeners[eventName]) {\n listenerToRemove = oldVirtualNode.boundListeners[eventName]\n } else {\n listenerToRemove = oldListeners[eventName]\n }\n domNode.removeEventListener(eventName, listenerToRemove)\n }\n }\n\n for (const eventName in newListeners) {\n const oldListener = oldListeners && oldListeners[eventName]\n const newListener = newListeners[eventName]\n\n if (newListener !== oldListener) {\n if (oldListener) {\n let listenerToRemove\n if (oldVirtualNode && oldVirtualNode.boundListeners && oldVirtualNode.boundListeners[eventName]) {\n listenerToRemove = oldVirtualNode.boundListeners[eventName]\n } else {\n listenerToRemove = oldListener\n }\n domNode.removeEventListener(eventName, listenerToRemove)\n }\n if (newListener) {\n let listenerToAdd\n if (listenerContext) {\n listenerToAdd = newListener.bind(listenerContext)\n if (!newVirtualNode.boundListeners) newVirtualNode.boundListeners = {}\n newVirtualNode.boundListeners[eventName] = listenerToAdd\n } else {\n listenerToAdd = newListener\n }\n domNode.addEventListener(eventName, listenerToAdd)\n }\n }\n }\n}\n","const updateProps = require('./update-props')\nconst SVG_TAGS = require('./svg-tags')\n\nfunction render (virtualNode, options) {\n let domNode\n if (virtualNode.text != null) {\n domNode = document.createTextNode(virtualNode.text)\n } else {\n const {tag, children} = virtualNode\n let {props, context} = virtualNode\n\n if (context) {\n options = {refs: context.refs, listenerContext: context}\n }\n\n if (typeof tag === 'function') {\n let ref\n if (props && props.ref) {\n ref = props.ref\n }\n const component = new tag(props || {}, children)\n virtualNode.component = component\n domNode = component.element\n if (typeof ref === \"function\") {\n ref(component)\n } else if (options && options.refs && ref) {\n options.refs[ref] = component\n }\n } else if (SVG_TAGS.has(tag)) {\n domNode = document.createElementNS(\"http://www.w3.org/2000/svg\", tag);\n if (children) addChildren(domNode, children, options)\n if (props) updateProps(domNode, null, virtualNode, options)\n } else {\n domNode = document.createElement(tag)\n if (children) addChildren(domNode, children, options)\n if (props) updateProps(domNode, null, virtualNode, options)\n }\n }\n virtualNode.domNode = domNode\n return domNode\n}\n\nfunction addChildren (parent, children, options) {\n for (let i = 0; i < children.length; i++) {\n parent.appendChild(render(children[i], options))\n }\n}\n\nmodule.exports = render\n","module.exports = function updateRef (domNode, oldRefName, newRefName, refs) {\n if (newRefName !== oldRefName) {\n if (typeof oldRefName === 'function') oldRefName(null)\n else if (oldRefName && refs[oldRefName] === domNode) delete refs[oldRefName]\n if (typeof newRefName === 'function') newRefName(domNode)\n else if (newRefName) refs[newRefName] = domNode\n }\n}\n","const render = require('./render')\nconst updateProps = require('./update-props')\nconst updateRef = require('./update-ref')\n\nfunction patch (oldVirtualNode, newVirtualNode, options) {\n const oldNode = oldVirtualNode.domNode\n\n if (newVirtualNode === oldVirtualNode) return oldNode\n\n if (virtualNodesAreEqual(oldVirtualNode, newVirtualNode)) {\n let newNode\n if (newVirtualNode.text != null) {\n oldNode.nodeValue = newVirtualNode.text\n newNode = oldNode\n } else {\n if (typeof newVirtualNode.tag === 'function') {\n newNode = updateComponent(oldVirtualNode, newVirtualNode, options)\n } else {\n updateChildren(oldNode, oldVirtualNode.children, newVirtualNode.children, options)\n updateProps(oldNode, oldVirtualNode, newVirtualNode, options)\n newNode = oldNode\n }\n }\n newVirtualNode.domNode = newNode\n if (newNode !== oldNode && oldNode.parentNode) {\n oldNode.parentNode.replaceChild(newNode, oldNode)\n }\n return newNode\n } else {\n const parentNode = oldNode.parentNode\n const nextSibling = oldNode.nextSibling\n removeVirtualNode(oldVirtualNode, options && options.refs)\n const newNode = render(newVirtualNode, options)\n if (parentNode) parentNode.insertBefore(newNode, nextSibling)\n newVirtualNode.domNode = newNode\n return newNode\n }\n}\n\nfunction updateComponent (oldVirtualNode, newVirtualNode, options) {\n const {component, props: oldProps} = oldVirtualNode\n let {props: newProps, children: newChildren} = newVirtualNode\n newVirtualNode.component = component\n const refs = options && options.refs\n if (refs) updateRef(component, oldProps && oldProps.ref, newProps && newProps.ref, refs)\n component.update(newProps || {}, newChildren)\n return component.element\n}\n\nlet mapPool = [new Map(), new Map(), new Map(), new Map()]\n\nfunction updateChildren (parentElement, oldChildren, newChildren, options) {\n var oldStartIndex = 0\n var oldEndIndex = oldChildren.length - 1\n var oldStartChild = oldChildren[0]\n var oldEndChild = oldChildren[oldEndIndex]\n\n var newStartIndex = 0\n var newEndIndex = newChildren.length - 1\n var newStartChild = newChildren[0]\n var newEndChild = newChildren[newEndIndex]\n\n var oldIndicesByKey\n\n while (oldStartIndex <= oldEndIndex && newStartIndex <= newEndIndex) {\n if (!oldStartChild) {\n oldStartChild = oldChildren[++oldStartIndex]\n } else if (!oldEndChild) {\n oldEndChild = oldChildren[--oldEndIndex]\n } else if (virtualNodesAreEqual(oldStartChild, newStartChild)) {\n patch(oldStartChild, newStartChild, options)\n oldStartChild = oldChildren[++oldStartIndex]\n newStartChild = newChildren[++newStartIndex]\n } else if (virtualNodesAreEqual(oldEndChild, newEndChild)) {\n patch(oldEndChild, newEndChild, options)\n oldEndChild = oldChildren[--oldEndIndex]\n newEndChild = newChildren[--newEndIndex]\n } else if (virtualNodesAreEqual(oldStartChild, newEndChild)) {\n patch(oldStartChild, newEndChild, options)\n parentElement.insertBefore(oldStartChild.domNode, oldEndChild.domNode.nextSibling)\n oldStartChild = oldChildren[++oldStartIndex]\n newEndChild = newChildren[--newEndIndex]\n } else if (virtualNodesAreEqual(oldEndChild, newStartChild)) {\n patch(oldEndChild, newStartChild, options)\n parentElement.insertBefore(oldEndChild.domNode, oldStartChild.domNode);\n oldEndChild = oldChildren[--oldEndIndex]\n newStartChild = newChildren[++newStartIndex]\n } else {\n if (!oldIndicesByKey) {\n if (mapPool.length > 0) {\n oldIndicesByKey = mapPool.pop()\n oldIndicesByKey.clear()\n } else {\n oldIndicesByKey = new Map()\n }\n mapOldKeysToIndices(oldIndicesByKey, oldChildren, oldStartIndex, oldEndIndex)\n }\n\n var key = getKey(newStartChild)\n var oldIndex = key ? oldIndicesByKey.get(key) : null\n if (oldIndex == null) {\n parentElement.insertBefore(render(newStartChild, options), oldStartChild.domNode)\n newStartChild = newChildren[++newStartIndex]\n } else {\n var oldChildToMove = oldChildren[oldIndex]\n patch(oldChildToMove, newStartChild, options)\n oldChildren[oldIndex] = undefined\n parentElement.insertBefore(oldChildToMove.domNode, oldStartChild.domNode)\n newStartChild = newChildren[++newStartIndex]\n }\n }\n }\n\n if (oldStartIndex > oldEndIndex) {\n var subsequentElement = newChildren[newEndIndex + 1] ? newChildren[newEndIndex + 1].domNode : null\n for (let i = newStartIndex; i <= newEndIndex; i++) {\n parentElement.insertBefore(render(newChildren[i], options), subsequentElement)\n }\n } else if (newStartIndex > newEndIndex) {\n for (let i = oldStartIndex; i <= oldEndIndex; i++) {\n var child = oldChildren[i]\n if (child) removeVirtualNode(child, options && options.refs)\n }\n }\n\n if (oldIndicesByKey) mapPool.push(oldIndicesByKey)\n}\n\nfunction removeVirtualNode (virtualNode, refs, removeDOMNode = true) {\n const {domNode, props, children, component} = virtualNode\n const ref = props && props.ref\n if (component) {\n if (typeof ref === 'function') ref(null)\n else if (refs && ref && refs[ref] === component) delete refs[ref]\n if (component.destroy) component.destroy()\n } else {\n if (typeof ref === 'function') ref(null)\n else if (refs && ref && refs[ref] === domNode) delete refs[ref]\n if (children) {\n for (let i = 0; i < children.length; i++) {\n removeVirtualNode(children[i], refs, false)\n }\n }\n }\n\n if (removeDOMNode) domNode.remove()\n}\n\nfunction virtualNodesAreEqual (oldVirtualNode, newVirtualNode) {\n return (\n getKey(oldVirtualNode) === getKey(newVirtualNode)\n && oldVirtualNode.tag === newVirtualNode.tag\n )\n}\n\nfunction getKey (virtualNode) {\n return virtualNode.props ? virtualNode.props.key : undefined\n}\n\nfunction mapOldKeysToIndices (oldIndicesByKey, children, startIndex, endIndex) {\n for (let i = startIndex; i <= endIndex; i++) {\n const key = getKey(children[i])\n if (key) oldIndicesByKey.set(key, i)\n }\n return oldIndicesByKey\n}\n\nmodule.exports = patch\n","// If the scheduler is not customized via `etch.setScheduler`, an instance of\n// this class will be used to schedule updates to the document. The\n// `updateDocument` method accepts functions to be run at some point in the\n// future, then runs them on the next animation frame.\nmodule.exports = class DefaultScheduler {\n constructor () {\n this.updateRequests = []\n this.readRequests = []\n this.pendingAnimationFrame = null\n this.performUpdates = this.performUpdates.bind(this)\n this.performingUpdates = false\n }\n\n // Enqueues functions that write to the DOM to be performed on the next\n // animation frame. Functions passed to this method should *never* read from\n // the DOM, because that could cause synchronous reflows.\n updateDocument (fn) {\n this.updateRequests.push(fn)\n if (!this.pendingAnimationFrame) {\n this.pendingAnimationFrame = window.requestAnimationFrame(this.performUpdates)\n }\n }\n\n readDocument (fn) {\n this.readRequests.push(fn)\n if (!this.pendingAnimationFrame) {\n this.pendingAnimationFrame = window.requestAnimationFrame(this.performUpdates)\n }\n }\n\n // Returns a promise that will resolve at the end of the next update cycle,\n // after all the functions passed to `updateDocument` and `updateDocumentSync`\n // have been run.\n getNextUpdatePromise () {\n if (!this.nextUpdatePromise) {\n this.nextUpdatePromise = new Promise(resolve => {\n this.resolveNextUpdatePromise = resolve\n })\n }\n return this.nextUpdatePromise\n }\n\n // Performs all the pending document updates. If running these update\n // functions causes *more* updates to be enqueued, they are run synchronously\n // in this update cycle without waiting for another frame.\n performUpdates () {\n while (this.updateRequests.length > 0) {\n this.updateRequests.shift()()\n }\n\n // We don't clear the pending frame until all update requests are processed.\n // This ensures updates requested within other updates are processed in the\n // current frame.\n this.pendingAnimationFrame = null\n\n // Now that updates are processed, we can perform all pending document reads\n // without the risk of interleaving them with writes and causing layout\n // thrashing.\n while (this.readRequests.length > 0) {\n this.readRequests.shift()()\n }\n\n if (this.nextUpdatePromise) {\n let resolveNextUpdatePromise = this.resolveNextUpdatePromise\n this.nextUpdatePromise = null\n this.resolveNextUpdatePromise = null\n resolveNextUpdatePromise()\n }\n }\n}\n","// This file implements getter and setter functions for a scheduler to be used\n// by this library when updating the DOM. The scheduler's job is to ensure that\n// DOM interaction is performed efficiently. When using `etch` in Atom, you\n// should tell `etch` to use Atom's scheduler by calling\n// `setScheduler(atom.views)`.\n//\n// Schedulers should support the following interface:\n// * `updateDocument(fn)` This method is asynchronous. It enqueues functions to\n// be executed later.\n// * `getNextUpdatePromise()` This function should return a promise that\n// resolves after all pending document update functions have been invoked.\n//\n// Schedulers could support the following optional methods, which are supported\n// by Atom's scheduler.\n//\n// * `readDocument` This method can be invoked by clients other than `etch` when\n// it is necessary to read from the DOM. Functions enqueued via this method\n// should not be run until all document update functions have been executed.\n// Batching updates and reads in this way will prevent forced synchronous\n// reflows.\n// * `pollDocument` This method is similar to `readDocument`, but it runs the\n// associated functions repeatedly. Again, they should be scheduled in such a\n// way so as to avoid synchronous reflows.\n\nconst DefaultScheduler = require('./default-scheduler')\n\nlet scheduler = null\n\nmodule.exports.setScheduler = function setScheduler (customScheduler) {\n scheduler = customScheduler\n}\n\nmodule.exports.getScheduler = function getScheduler () {\n if (!scheduler) {\n scheduler = new DefaultScheduler()\n }\n return scheduler\n}\n","const render = require('./render')\nconst patch = require('./patch')\nconst {getScheduler} = require('./scheduler-assignment')\n\nconst componentsWithPendingUpdates = new WeakSet()\nlet syncUpdatesInProgressCounter = 0\nlet syncDestructionsInProgressCounter = 0\n\nfunction isValidVirtualNode (virtualNode) {\n return virtualNode != null && virtualNode !== false\n}\n\nfunction applyContext (context, virtualNode) {\n virtualNode.context = context\n if (virtualNode.ambiguous) {\n virtualNode.ambiguous.forEach(node => {\n node.context = context\n })\n delete virtualNode.ambiguous\n }\n}\n\n// This function associates a component object with a DOM element by calling\n// the components `render` method, assigning an `.element` property on the\n// object and also returning the element.\n//\n// It also assigns a `virtualNode` property based on the return value of the\n// `render` method. This will be used later by `performElementUpdate` to diff\n// the new results of `render` with the previous results when updating the\n// component's element.\n//\n// Finally, this function also associates the component with a `refs` object,\n// which is populated with references to elements based on `ref` properties on\n// nodes of the `virtual-dom` tree. Before calling into `virtual-dom` to create\n// the DOM tree, it pushes this `refs` object to a shared stack so it can be\n// accessed by hooks during the creation of individual elements.\nfunction initialize(component) {\n if (typeof component.update !== 'function') {\n throw new Error('Etch components must implement `update(props, children)`.')\n }\n\n let virtualNode = component.render()\n if (!isValidVirtualNode(virtualNode)) {\n let namePart = component.constructor && component.constructor.name ? ' in ' + component.constructor.name : ''\n throw new Error('invalid falsy value ' + virtualNode + ' returned from render()' + namePart)\n }\n\n applyContext(component, virtualNode)\n\n component.refs = {}\n component.virtualNode = virtualNode\n component.element = render(component.virtualNode, {\n refs: component.refs, listenerContext: component\n })\n}\n\n// This function receives a component that has already been associated with an\n// element via a previous call to `initialize` and updates this element by\n// calling `render` on the component.\n//\n// When called in normal circumstances, it uses the scheduler to defer this\n// update until the next animation frame, and will only perform one update of a\n// given component in a given frame. This means you can call `update`\n// repeatedly in a given tick without causing redundant updates.\n//\n// If this function called during another synchronous update (for example, as a\n// result of a call to `update` on a child component), the update is performed\n// synchronously.\n//\n// Returns a promise that will resolve when the requested update has been\n// completed.\nfunction update (component, replaceNode=true) {\n if (syncUpdatesInProgressCounter > 0) {\n updateSync(component, replaceNode)\n return Promise.resolve()\n }\n\n let scheduler = getScheduler()\n\n if (!componentsWithPendingUpdates.has(component)) {\n componentsWithPendingUpdates.add(component)\n scheduler.updateDocument(function () {\n componentsWithPendingUpdates.delete(component)\n updateSync(component, replaceNode)\n })\n }\n\n return scheduler.getNextUpdatePromise()\n}\n\n// Synchronsly updates the DOM element associated with a component object. .\n// This method assumes the presence of `.element` and `.virtualNode`\n// properties on the component, which are assigned in the `initialize`\n// function.\n//\n// It calls `render` on the component to obtain the desired state of the DOM,\n// then `diff`s it with the previous state and `patch`es the element based on\n// the resulting diff. During the patch operation, it pushes the component's\n// `refs` object to a shared stack so that references to DOM elements can be\n// updated.\n//\n// If `update` is called during the invocation of `updateSync`,\n// the requests are processed synchronously as well. We track whether this is\n// the case by incrementing and decrementing `syncUpdatesInProgressCounter`\n// around the call.\n//\n// For now, etch does not allow the root tag of the `render` method to change\n// between invocations, because we want to preserve a one-to-one relationship\n// between component objects and DOM elements for simplicity.\nfunction updateSync (component, replaceNode=true) {\n if (!isValidVirtualNode(component.virtualNode)) {\n throw new Error(`${component.constructor ? component.constructor.name + ' instance' : component} is not associated with a valid virtualNode. Perhaps this component was never initialized?`)\n }\n\n if (component.element == null) {\n throw new Error(`${component.constructor ? component.constructor.name + ' instance' : component} is not associated with a DOM element. Perhaps this component was never initialized?`)\n }\n\n let newVirtualNode = component.render()\n if (!isValidVirtualNode(newVirtualNode)) {\n const namePart = component.constructor && component.constructor.name ? ' in ' + component.constructor.name : ''\n throw new Error('invalid falsy value ' + newVirtualNode + ' returned from render()' + namePart)\n }\n\n applyContext(component, newVirtualNode)\n\n syncUpdatesInProgressCounter++\n let oldVirtualNode = component.virtualNode\n let oldDomNode = component.element\n let newDomNode = patch(oldVirtualNode, newVirtualNode, {\n refs: component.refs,\n listenerContext: component\n })\n component.virtualNode = newVirtualNode\n if (newDomNode !== oldDomNode && !replaceNode) {\n throw new Error('The root node type changed on update, but the update was performed with the replaceNode option set to false')\n } else {\n component.element = newDomNode\n }\n\n // We can safely perform additional writes after a DOM update synchronously,\n // but any reads need to be deferred until all writes are completed to avoid\n // DOM thrashing. Requested reads occur at the end of the the current frame\n // if this method was invoked via the scheduler. Otherwise, if `updateSync`\n // was invoked outside of the scheduler, the default scheduler will defer\n // reads until the next animation frame.\n if (typeof component.writeAfterUpdate === 'function') {\n component.writeAfterUpdate()\n }\n if (typeof component.readAfterUpdate === 'function') {\n getScheduler().readDocument(function () {\n component.readAfterUpdate()\n })\n }\n\n syncUpdatesInProgressCounter--\n}\n\n// Removes the component's associated element and calls `destroy` on any child\n// components. Normally, this function is asynchronous and will perform the\n// destruction on the next animation frame. If called as the result of another\n// update or destruction, it calls `destroy` on child components synchronously.\n// If called as the result of destroying a component higher in the DOM, the\n// element is not removed to avoid redundant DOM manipulation. Returns a promise\n// that resolves when the destruction is completed.\nfunction destroy (component, removeNode=true) {\n if (syncUpdatesInProgressCounter > 0 || syncDestructionsInProgressCounter > 0) {\n destroySync(component, removeNode)\n return Promise.resolve()\n }\n\n let scheduler = getScheduler()\n scheduler.updateDocument(function () {\n destroySync(component, removeNode)\n })\n return scheduler.getNextUpdatePromise()\n}\n\n// A synchronous version of `destroy`.\n//\n// Note that we track whether `destroy` calls are in progress and only remove\n// the element if we are not a nested call.\nfunction destroySync (component, removeNode=true) {\n syncDestructionsInProgressCounter++\n destroyChildComponents(component.virtualNode)\n if (syncDestructionsInProgressCounter === 1 && removeNode) component.element.remove()\n syncDestructionsInProgressCounter--\n}\n\nfunction destroyChildComponents(virtualNode) {\n if (virtualNode.component && typeof virtualNode.component.destroy === 'function') {\n virtualNode.component.destroy()\n } else if (virtualNode.children) {\n virtualNode.children.forEach(destroyChildComponents)\n }\n}\n\nmodule.exports = {\n initialize,\n update, updateSync,\n destroy, destroySync\n}\n","const dom = require('./dom')\nconst render = require('./render')\nconst {initialize, update, updateSync, destroy, destroySync} = require('./component-helpers')\nconst {setScheduler, getScheduler} = require('./scheduler-assignment')\n\nmodule.exports = {\n dom, render,\n initialize, update, updateSync, destroy, destroySync,\n setScheduler, getScheduler\n}\n","export function handlePromise(promise: Promise | undefined): void {\n if (promise === undefined) return\n // tslint:disable-next-line:strict-type-predicates no-unbound-method\n if (typeof promise.catch !== \"function\") {\n atom.notifications.addFatalError(\n \"Atom-Typescript: non-promise passed to handlePromise. Please report this.\",\n {\n stack: new Error().stack,\n dismissable: true,\n },\n )\n return\n }\n promise.catch((err: Error) => {\n atom.notifications.addFatalError(`Atom-Typescript error: ${err.message}`, {\n detail: err.toString(),\n stack: err.stack,\n dismissable: true,\n })\n })\n}\n","/**\n * @license\n * Lodash \n * Copyright OpenJS 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.21';\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 INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\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 whitespace. */\n var reTrimStart = /^\\s+/;\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\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 /**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\n var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\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 `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\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 * 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 `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\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 } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\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 stack || (stack = new Stack);\n if (isObject(srcValue)) {\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) || 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 if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, 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 (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\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 var low = 0,\n high = array == null ? 0 : array.length;\n if (high === 0) {\n return 0;\n }\n\n value = iteratee(value);\n var 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 && nativeIsFinite(number)) {\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 // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\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 // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\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 * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\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 if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\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 * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', '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': 30 },\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', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['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 clearTimeout(timerId);\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 = baseTrim(value);\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': '