@marcosnbj/excalidraw
Version:
Excalidraw as a React component
51 lines (43 loc) • 9.35 MB
JavaScript
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("react"), require("react-dom"));
else if(typeof define === 'function' && define.amd)
define(["react", "react-dom"], factory);
else if(typeof exports === 'object')
exports["ExcalidrawLib"] = factory(require("react"), require("react-dom"));
else
root["ExcalidrawLib"] = factory(root["React"], root["ReactDOM"]);
})(globalThis, (__WEBPACK_EXTERNAL_MODULE_react__, __WEBPACK_EXTERNAL_MODULE_react_dom__) => {
return /******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "../../../node_modules/@braintree/sanitize-url/dist/index.js":
/*!*******************************************************************!*\
!*** ../../../node_modules/@braintree/sanitize-url/dist/index.js ***!
\*******************************************************************/
/***/ ((__unused_webpack_module, exports) => {
"use strict";
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.sanitizeUrl = void 0;\nvar invalidProtocolRegex = /^([^\\w]*)(javascript|data|vbscript)/im;\nvar htmlEntitiesRegex = /&#(\\w+)(^\\w|;)?/g;\nvar htmlCtrlEntityRegex = /&(newline|tab);/gi;\nvar ctrlCharactersRegex = /[\\u0000-\\u001F\\u007F-\\u009F\\u2000-\\u200D\\uFEFF]/gim;\nvar urlSchemeRegex = /^.+(:|:)/gim;\nvar relativeFirstCharacters = [\".\", \"/\"];\nfunction isRelativeUrlWithoutProtocol(url) {\n return relativeFirstCharacters.indexOf(url[0]) > -1;\n}\n// adapted from https://stackoverflow.com/a/29824550/2601552\nfunction decodeHtmlCharacters(str) {\n return str.replace(htmlEntitiesRegex, function (match, dec) {\n return String.fromCharCode(dec);\n });\n}\nfunction sanitizeUrl(url) {\n var sanitizedUrl = decodeHtmlCharacters(url || \"\")\n .replace(htmlCtrlEntityRegex, \"\")\n .replace(ctrlCharactersRegex, \"\")\n .trim();\n if (!sanitizedUrl) {\n return \"about:blank\";\n }\n if (isRelativeUrlWithoutProtocol(sanitizedUrl)) {\n return sanitizedUrl;\n }\n var urlSchemeParseResults = sanitizedUrl.match(urlSchemeRegex);\n if (!urlSchemeParseResults) {\n return sanitizedUrl;\n }\n var urlScheme = urlSchemeParseResults[0];\n if (invalidProtocolRegex.test(urlScheme)) {\n return \"about:blank\";\n }\n return sanitizedUrl;\n}\nexports.sanitizeUrl = sanitizeUrl;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BicmFpbnRyZWUvc2FuaXRpemUtdXJsL2Rpc3QvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsbUJBQW1CO0FBQ25CO0FBQ0Esc0NBQXNDO0FBQ3RDLDBDQUEwQztBQUMxQztBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYnJhaW50cmVlL3Nhbml0aXplLXVybC9kaXN0L2luZGV4LmpzP2NkM2IiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnNhbml0aXplVXJsID0gdm9pZCAwO1xudmFyIGludmFsaWRQcm90b2NvbFJlZ2V4ID0gL14oW15cXHddKikoamF2YXNjcmlwdHxkYXRhfHZic2NyaXB0KS9pbTtcbnZhciBodG1sRW50aXRpZXNSZWdleCA9IC8mIyhcXHcrKSheXFx3fDspPy9nO1xudmFyIGh0bWxDdHJsRW50aXR5UmVnZXggPSAvJihuZXdsaW5lfHRhYik7L2dpO1xudmFyIGN0cmxDaGFyYWN0ZXJzUmVnZXggPSAvW1xcdTAwMDAtXFx1MDAxRlxcdTAwN0YtXFx1MDA5RlxcdTIwMDAtXFx1MjAwRFxcdUZFRkZdL2dpbTtcbnZhciB1cmxTY2hlbWVSZWdleCA9IC9eLisoOnwmY29sb247KS9naW07XG52YXIgcmVsYXRpdmVGaXJzdENoYXJhY3RlcnMgPSBbXCIuXCIsIFwiL1wiXTtcbmZ1bmN0aW9uIGlzUmVsYXRpdmVVcmxXaXRob3V0UHJvdG9jb2wodXJsKSB7XG4gICAgcmV0dXJuIHJlbGF0aXZlRmlyc3RDaGFyYWN0ZXJzLmluZGV4T2YodXJsWzBdKSA+IC0xO1xufVxuLy8gYWRhcHRlZCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yOTgyNDU1MC8yNjAxNTUyXG5mdW5jdGlvbiBkZWNvZGVIdG1sQ2hhcmFjdGVycyhzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoaHRtbEVudGl0aWVzUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgZGVjKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGRlYyk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBzYW5pdGl6ZVVybCh1cmwpIHtcbiAgICB2YXIgc2FuaXRpemVkVXJsID0gZGVjb2RlSHRtbENoYXJhY3RlcnModXJsIHx8IFwiXCIpXG4gICAgICAgIC5yZXBsYWNlKGh0bWxDdHJsRW50aXR5UmVnZXgsIFwiXCIpXG4gICAgICAgIC5yZXBsYWNlKGN0cmxDaGFyYWN0ZXJzUmVnZXgsIFwiXCIpXG4gICAgICAgIC50cmltKCk7XG4gICAgaWYgKCFzYW5pdGl6ZWRVcmwpIHtcbiAgICAgICAgcmV0dXJuIFwiYWJvdXQ6YmxhbmtcIjtcbiAgICB9XG4gICAgaWYgKGlzUmVsYXRpdmVVcmxXaXRob3V0UHJvdG9jb2woc2FuaXRpemVkVXJsKSkge1xuICAgICAgICByZXR1cm4gc2FuaXRpemVkVXJsO1xuICAgIH1cbiAgICB2YXIgdXJsU2NoZW1lUGFyc2VSZXN1bHRzID0gc2FuaXRpemVkVXJsLm1hdGNoKHVybFNjaGVtZVJlZ2V4KTtcbiAgICBpZiAoIXVybFNjaGVtZVBhcnNlUmVzdWx0cykge1xuICAgICAgICByZXR1cm4gc2FuaXRpemVkVXJsO1xuICAgIH1cbiAgICB2YXIgdXJsU2NoZW1lID0gdXJsU2NoZW1lUGFyc2VSZXN1bHRzWzBdO1xuICAgIGlmIChpbnZhbGlkUHJvdG9jb2xSZWdleC50ZXN0KHVybFNjaGVtZSkpIHtcbiAgICAgICAgcmV0dXJuIFwiYWJvdXQ6YmxhbmtcIjtcbiAgICB9XG4gICAgcmV0dXJuIHNhbml0aXplZFVybDtcbn1cbmV4cG9ydHMuc2FuaXRpemVVcmwgPSBzYW5pdGl6ZVVybDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@braintree/sanitize-url/dist/index.js\n");
/***/ }),
/***/ "../../../node_modules/@excalidraw/laser-pointer/dist/esm.js":
/*!*******************************************************************!*\
!*** ../../../node_modules/@excalidraw/laser-pointer/dist/esm.js ***!
\*******************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"LaserPointer\": () => (/* binding */ $94cfa2cfccc8cc22$export$6531021b3bf36eae)\n/* harmony export */ });\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nvar $94cfa2cfccc8cc22$exports = {};\n\n$parcel$export($94cfa2cfccc8cc22$exports, \"LaserPointer\", () => $94cfa2cfccc8cc22$export$6531021b3bf36eae);\nfunction $8cd7efb5af385306$export$e16d8520af44a096([ax, ay, ar], [bx, by, br]) {\n return [\n ax + bx,\n ay + by,\n ar + br\n ];\n}\nfunction $8cd7efb5af385306$export$f93b5905241a7cca([ax, ay, ar], [bx, by, br]) {\n return [\n ax - bx,\n ay - by,\n ar - br\n ];\n}\nfunction $8cd7efb5af385306$export$1c8884ee32bdf443([x, y, r], s) {\n return [\n x * s,\n y * s,\n r * s\n ];\n}\nfunction $8cd7efb5af385306$export$1991ecd29cc92c6b([x, y, r]) {\n return [\n x / Math.sqrt(x ** 2 + y ** 2),\n y / Math.sqrt(x ** 2 + y ** 2),\n r\n ];\n}\nfunction $8cd7efb5af385306$export$855df823ceb9b81b([x, y, r], rad) {\n return [\n Math.cos(rad) * x - Math.sin(rad) * y,\n Math.sin(rad) * x + Math.cos(rad) * y,\n r\n ];\n}\nfunction $8cd7efb5af385306$export$92d8e23769117a5e(a, b, t) {\n return $8cd7efb5af385306$export$e16d8520af44a096(a, $8cd7efb5af385306$export$1c8884ee32bdf443($8cd7efb5af385306$export$f93b5905241a7cca(b, a), t));\n}\nfunction $8cd7efb5af385306$export$3a89f8d6f6bf6c9f(a, b, t) {\n return a + (b - a) * t;\n}\nfunction $8cd7efb5af385306$export$944b09d2ad10b378(p, p1, p2) {\n return Math.atan2(p2[1] - p[1], p2[0] - p[0]) - Math.atan2(p1[1] - p[1], p1[0] - p[0]);\n}\nfunction $8cd7efb5af385306$export$3c05aaf71f141f73(a) {\n return Math.atan2(Math.sin(a), Math.cos(a));\n}\nfunction $8cd7efb5af385306$export$1b9bab504faa9305([x, y]) {\n return Math.sqrt(x ** 2 + y ** 2);\n}\nfunction $8cd7efb5af385306$export$6c4a311cc157c764([ax, ay], [bx, by]) {\n return Math.sqrt((bx - ax) ** 2 + (by - ay) ** 2);\n}\nfunction $8cd7efb5af385306$export$46f6d3e1b4bd7c8b(point, direction, radius) {\n return [\n $8cd7efb5af385306$export$e16d8520af44a096(point, $8cd7efb5af385306$export$1c8884ee32bdf443($8cd7efb5af385306$export$1991ecd29cc92c6b($8cd7efb5af385306$export$855df823ceb9b81b(direction, Math.PI / 2)), radius)),\n $8cd7efb5af385306$export$e16d8520af44a096(point, $8cd7efb5af385306$export$1c8884ee32bdf443($8cd7efb5af385306$export$1991ecd29cc92c6b($8cd7efb5af385306$export$855df823ceb9b81b(direction, -Math.PI / 2)), radius))\n ];\n}\nfunction $8cd7efb5af385306$export$ccb1b4dfbd3f36a7(ps) {\n if (ps.length < 2) return 0;\n let len = 0;\n for(let i = 1; i <= ps.length - 1; i++)len += $8cd7efb5af385306$export$6c4a311cc157c764(ps[i - 1], ps[i]);\n len += $8cd7efb5af385306$export$6c4a311cc157c764(ps[ps.length - 2], ps[ps.length - 1]);\n return len;\n}\nconst $8cd7efb5af385306$export$7d15b64cf5a3a4c4 = (v, min, max)=>Math.max(min, Math.min(max, v));\nfunction $8cd7efb5af385306$export$548cc43590159af6(p3, p1, p2) {\n const sMag = $8cd7efb5af385306$export$6c4a311cc157c764(p1, p2);\n if (sMag === 0) return $8cd7efb5af385306$export$6c4a311cc157c764(p3, p1);\n const u = $8cd7efb5af385306$export$7d15b64cf5a3a4c4(((p3[0] - p1[0]) * (p2[0] - p1[0]) + (p3[1] - p1[1]) * (p2[1] - p1[1])) / sMag ** 2, 0, 1);\n const pi = [\n p1[0] + u * (p2[0] - p1[0]),\n p1[1] + u * (p2[1] - p1[1]),\n p3[2]\n ];\n return $8cd7efb5af385306$export$6c4a311cc157c764(pi, p3);\n}\n\n\n\nfunction $34bab0059f842ce6$export$ef693d1572e64fb8(points, epsilon) {\n if (epsilon === 0) return points;\n if (points.length <= 2) return points;\n const first = points[0];\n const last = points[points.length - 1];\n const [maxDistance, maxIndex] = points.reduce(([maxDistance, maxIndex], point, index)=>{\n const distance = (0, $8cd7efb5af385306$export$548cc43590159af6)(point, first, last);\n return distance > maxDistance ? [\n distance,\n index\n ] : [\n maxDistance,\n maxIndex\n ];\n }, [\n 0,\n -1\n ]);\n if (maxDistance >= epsilon) {\n const maxIndexPoint = points[maxIndex];\n return [\n ...$34bab0059f842ce6$export$ef693d1572e64fb8([\n first,\n ...points.slice(1, maxIndex),\n maxIndexPoint\n ], epsilon).slice(0, -1),\n maxIndexPoint,\n ...$34bab0059f842ce6$export$ef693d1572e64fb8([\n maxIndexPoint,\n ...points.slice(maxIndex, -1),\n last\n ], epsilon).slice(1)\n ];\n } else return [\n first,\n last\n ];\n}\n\n\nclass $94cfa2cfccc8cc22$export$6531021b3bf36eae {\n static #_ = (()=>{\n this.defaults = {\n size: 2,\n streamline: 0.45,\n simplify: 0.1,\n simplifyPhase: \"output\",\n sizeMapping: ()=>1\n };\n })();\n static #_1 = (()=>{\n this.constants = {\n cornerDetectionMaxAngle: 120,\n cornerDetectionVariance: (s)=>s > 35 ? 0.5 : 1,\n maxTailLength: 50\n };\n })();\n constructor(options){\n this.originalPoints = [];\n this.stablePoints = [];\n this.tailPoints = [];\n this.isFresh = true;\n this.options = Object.assign({}, $94cfa2cfccc8cc22$export$6531021b3bf36eae.defaults, options);\n }\n get lastPoint() {\n return this.tailPoints[this.tailPoints.length - 1] ?? this.stablePoints[this.stablePoints.length - 1];\n }\n addPoint(point) {\n const lastPoint = this.originalPoints[this.originalPoints.length - 1];\n if (lastPoint && lastPoint[0] === point[0] && lastPoint[1] === point[1]) return;\n this.originalPoints.push(point);\n if (this.isFresh) {\n this.isFresh = false;\n this.stablePoints.push(point);\n return;\n }\n if (this.options.streamline > 0) point = $8cd7efb5af385306$export$92d8e23769117a5e(this.lastPoint, point, 1 - this.options.streamline);\n this.tailPoints.push(point);\n if ($8cd7efb5af385306$export$ccb1b4dfbd3f36a7(this.tailPoints) > $94cfa2cfccc8cc22$export$6531021b3bf36eae.constants.maxTailLength) this.stabilizeTail();\n }\n close() {\n this.stabilizeTail();\n }\n stabilizeTail() {\n if (this.options.simplify > 0 && this.options.simplifyPhase == \"tail\") throw new Error(\"Not implemented yet\");\n else {\n this.stablePoints.push(...this.tailPoints);\n this.tailPoints = [];\n }\n }\n getSize(sizeOverride, pressure, index, totalLength, runningLength) {\n return (sizeOverride ?? this.options.size) * this.options.sizeMapping({\n pressure: pressure,\n runningLength: runningLength,\n currentIndex: index,\n totalLength: totalLength\n });\n }\n getStrokeOutline(sizeOverride) {\n if (this.isFresh) return [];\n let points = [\n ...this.stablePoints,\n ...this.tailPoints\n ];\n if (this.options.simplify > 0 && this.options.simplifyPhase === \"input\") points = (0, $34bab0059f842ce6$export$ef693d1572e64fb8)(points, this.options.simplify);\n const len = points.length;\n if (len === 0) return [];\n if (len === 1) {\n const c = points[0];\n const ps = [];\n for(let theta = 0; theta <= Math.PI * 2; theta += Math.PI / 16)ps.push($8cd7efb5af385306$export$e16d8520af44a096(c, $8cd7efb5af385306$export$1c8884ee32bdf443($8cd7efb5af385306$export$855df823ceb9b81b([\n 1,\n 0,\n 0\n ], theta), this.getSize(sizeOverride, c[2], 0, len, 0))));\n ps.push($8cd7efb5af385306$export$e16d8520af44a096(c, $8cd7efb5af385306$export$1c8884ee32bdf443([\n 1,\n 0,\n 0\n ], this.getSize(sizeOverride, c[2], 0, len, 0))));\n return ps;\n }\n if (len === 2) {\n const c = points[0];\n const n = points[1];\n const ps = [];\n const pAngle = $8cd7efb5af385306$export$944b09d2ad10b378(c, [\n c[0],\n c[1] - 100,\n c[2]\n ], n);\n for(let theta = pAngle; theta <= Math.PI + pAngle; theta += Math.PI / 16)ps.push($8cd7efb5af385306$export$e16d8520af44a096(c, $8cd7efb5af385306$export$1c8884ee32bdf443($8cd7efb5af385306$export$855df823ceb9b81b([\n 1,\n 0,\n 0\n ], theta), this.getSize(sizeOverride, c[2], 0, len, 0))));\n for(let theta = Math.PI + pAngle; theta <= Math.PI * 2 + pAngle; theta += Math.PI / 16)ps.push($8cd7efb5af385306$export$e16d8520af44a096(n, $8cd7efb5af385306$export$1c8884ee32bdf443($8cd7efb5af385306$export$855df823ceb9b81b([\n 1,\n 0,\n 0\n ], theta), this.getSize(sizeOverride, n[2], 0, len, 0))));\n ps.push(ps[0]);\n return ps;\n }\n const forwardPoints = [];\n const backwardPoints = [];\n let speed = 0;\n let prevSpeed = 0;\n let visibleStartIndex = 0;\n let runningLength = 0;\n for(let i = 1; i < len - 1; i++){\n const p = points[i - 1], c = points[i], n = points[i + 1];\n let pressure = c[2];\n const d = $8cd7efb5af385306$export$6c4a311cc157c764(p, c);\n runningLength += d;\n speed = prevSpeed + (d - prevSpeed) * 0.2;\n const cSize = this.getSize(sizeOverride, pressure, i, len, runningLength);\n if (cSize === 0) {\n visibleStartIndex = i + 1;\n continue;\n }\n const dirPC = $8cd7efb5af385306$export$1991ecd29cc92c6b($8cd7efb5af385306$export$f93b5905241a7cca(p, c));\n const dirNC = $8cd7efb5af385306$export$1991ecd29cc92c6b($8cd7efb5af385306$export$f93b5905241a7cca(n, c));\n const p1dirPC = $8cd7efb5af385306$export$855df823ceb9b81b(dirPC, Math.PI / 2);\n const p2dirPC = $8cd7efb5af385306$export$855df823ceb9b81b(dirPC, -Math.PI / 2);\n const p1dirNC = $8cd7efb5af385306$export$855df823ceb9b81b(dirNC, Math.PI / 2);\n const p2dirNC = $8cd7efb5af385306$export$855df823ceb9b81b(dirNC, -Math.PI / 2);\n const p1PC = $8cd7efb5af385306$export$e16d8520af44a096(c, $8cd7efb5af385306$export$1c8884ee32bdf443(p1dirPC, cSize));\n const p2PC = $8cd7efb5af385306$export$e16d8520af44a096(c, $8cd7efb5af385306$export$1c8884ee32bdf443(p2dirPC, cSize));\n const p1NC = $8cd7efb5af385306$export$e16d8520af44a096(c, $8cd7efb5af385306$export$1c8884ee32bdf443(p1dirNC, cSize));\n const p2NC = $8cd7efb5af385306$export$e16d8520af44a096(c, $8cd7efb5af385306$export$1c8884ee32bdf443(p2dirNC, cSize));\n const ftdir = $8cd7efb5af385306$export$e16d8520af44a096(p1dirPC, p2dirNC);\n const btdir = $8cd7efb5af385306$export$e16d8520af44a096(p2dirPC, p1dirNC);\n const paPC = $8cd7efb5af385306$export$e16d8520af44a096(c, $8cd7efb5af385306$export$1c8884ee32bdf443($8cd7efb5af385306$export$1b9bab504faa9305(ftdir) === 0 ? dirPC : $8cd7efb5af385306$export$1991ecd29cc92c6b(ftdir), cSize));\n const paNC = $8cd7efb5af385306$export$e16d8520af44a096(c, $8cd7efb5af385306$export$1c8884ee32bdf443($8cd7efb5af385306$export$1b9bab504faa9305(btdir) === 0 ? dirNC : $8cd7efb5af385306$export$1991ecd29cc92c6b(btdir), cSize));\n const cAngle = $8cd7efb5af385306$export$3c05aaf71f141f73($8cd7efb5af385306$export$944b09d2ad10b378(c, p, n));\n const D_ANGLE = $94cfa2cfccc8cc22$export$6531021b3bf36eae.constants.cornerDetectionMaxAngle / 180 * Math.PI * $94cfa2cfccc8cc22$export$6531021b3bf36eae.constants.cornerDetectionVariance(speed);\n if (Math.abs(cAngle) < D_ANGLE) {\n const tAngle = Math.abs($8cd7efb5af385306$export$3c05aaf71f141f73(Math.PI - cAngle)) // turn angle\n ;\n if (tAngle === 0) continue;\n if (cAngle < 0) {\n backwardPoints.push(p2PC, paNC);\n for(let theta = 0; theta <= tAngle; theta += tAngle / 4)forwardPoints.push($8cd7efb5af385306$export$e16d8520af44a096(c, $8cd7efb5af385306$export$855df823ceb9b81b($8cd7efb5af385306$export$1c8884ee32bdf443(p1dirPC, cSize), theta)));\n for(let theta = tAngle; theta >= 0; theta -= tAngle / 4)backwardPoints.push($8cd7efb5af385306$export$e16d8520af44a096(c, $8cd7efb5af385306$export$855df823ceb9b81b($8cd7efb5af385306$export$1c8884ee32bdf443(p1dirPC, cSize), theta)));\n backwardPoints.push(paNC, p1NC);\n } else {\n forwardPoints.push(p1PC, paPC);\n for(let theta = 0; theta <= tAngle; theta += tAngle / 4)backwardPoints.push($8cd7efb5af385306$export$e16d8520af44a096(c, $8cd7efb5af385306$export$855df823ceb9b81b($8cd7efb5af385306$export$1c8884ee32bdf443(p1dirPC, -cSize), -theta)));\n for(let theta = tAngle; theta >= 0; theta -= tAngle / 4)forwardPoints.push($8cd7efb5af385306$export$e16d8520af44a096(c, $8cd7efb5af385306$export$855df823ceb9b81b($8cd7efb5af385306$export$1c8884ee32bdf443(p1dirPC, -cSize), -theta)));\n forwardPoints.push(paPC, p2NC);\n }\n } else {\n forwardPoints.push(paPC);\n backwardPoints.push(paNC);\n }\n prevSpeed = speed;\n }\n const first = points[visibleStartIndex];\n const second = points[visibleStartIndex + 1];\n const penultimate = points[len - 2];\n const ultimate = points[len - 1];\n if (visibleStartIndex >= len - 2) return [];\n const dirFS = $8cd7efb5af385306$export$1991ecd29cc92c6b($8cd7efb5af385306$export$f93b5905241a7cca(second, first));\n const dirPU = $8cd7efb5af385306$export$1991ecd29cc92c6b($8cd7efb5af385306$export$f93b5905241a7cca(penultimate, ultimate));\n const ppdirFS = $8cd7efb5af385306$export$855df823ceb9b81b(dirFS, -Math.PI / 2);\n const ppdirPU = $8cd7efb5af385306$export$855df823ceb9b81b(dirPU, Math.PI / 2);\n const startCapSize = this.getSize(sizeOverride, first[2], 0, len, 0);\n const startCap = [];\n const endCapSize = this.getSize(sizeOverride, penultimate[2], len - 2, len, runningLength);\n const endCap = [];\n for(let theta = 0; theta <= Math.PI; theta += Math.PI / 16)startCap.unshift($8cd7efb5af385306$export$e16d8520af44a096(first, $8cd7efb5af385306$export$855df823ceb9b81b($8cd7efb5af385306$export$1c8884ee32bdf443(ppdirFS, startCapSize), -theta)));\n startCap.unshift($8cd7efb5af385306$export$e16d8520af44a096(first, $8cd7efb5af385306$export$1c8884ee32bdf443(ppdirFS, -startCapSize)));\n for(let theta = 0; theta <= Math.PI; theta += Math.PI / 16)endCap.push($8cd7efb5af385306$export$e16d8520af44a096(ultimate, $8cd7efb5af385306$export$855df823ceb9b81b($8cd7efb5af385306$export$1c8884ee32bdf443(ppdirPU, -endCapSize), -theta)));\n const strokeOutline = [\n ...startCap,\n ...forwardPoints,\n ...endCap.reverse(),\n ...backwardPoints.reverse()\n ];\n if (startCap.length > 0) strokeOutline.push(startCap[0]);\n if (this.options.simplify > 0 && this.options.simplifyPhase === \"output\") return (0, $34bab0059f842ce6$export$ef693d1572e64fb8)(strokeOutline, this.options.simplify);\n return strokeOutline;\n }\n}\n\n\n\n\n\n//# sourceMappingURL=esm.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L2xhc2VyLXBvaW50ZXIvZGlzdC9lc20uanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0EsK0JBQStCLHFEQUFxRDtBQUNwRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixvQkFBb0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0Isc0JBQXNCO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsMkJBQTJCO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLCtCQUErQjtBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixhQUFhO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsaUJBQWlCO0FBQ3hELDRDQUE0QyxZQUFZO0FBQ3hEO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0EsdUNBQXVDLGlCQUFpQjtBQUN4RCw0Q0FBNEMsWUFBWTtBQUN4RDtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixrQkFBa0I7QUFDN0M7QUFDQSwyQkFBMkIsa0JBQWtCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS21FO0FBQ25FIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AZXhjYWxpZHJhdy9sYXNlci1wb2ludGVyL2Rpc3QvZXNtLmpzPzA2NzQiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gJHBhcmNlbCRleHBvcnQoZSwgbiwgdiwgcykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgbiwge2dldDogdiwgc2V0OiBzLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWV9KTtcbn1cbnZhciAkOTRjZmEyY2ZjY2M4Y2MyMiRleHBvcnRzID0ge307XG5cbiRwYXJjZWwkZXhwb3J0KCQ5NGNmYTJjZmNjYzhjYzIyJGV4cG9ydHMsIFwiTGFzZXJQb2ludGVyXCIsICgpID0+ICQ5NGNmYTJjZmNjYzhjYzIyJGV4cG9ydCQ2NTMxMDIxYjNiZjM2ZWFlKTtcbmZ1bmN0aW9uICQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCRlMTZkODUyMGFmNDRhMDk2KFtheCwgYXksIGFyXSwgW2J4LCBieSwgYnJdKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgYXggKyBieCxcbiAgICAgICAgYXkgKyBieSxcbiAgICAgICAgYXIgKyBiclxuICAgIF07XG59XG5mdW5jdGlvbiAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkZjkzYjU5MDUyNDFhN2NjYShbYXgsIGF5LCBhcl0sIFtieCwgYnksIGJyXSkge1xuICAgIHJldHVybiBbXG4gICAgICAgIGF4IC0gYngsXG4gICAgICAgIGF5IC0gYnksXG4gICAgICAgIGFyIC0gYnJcbiAgICBdO1xufVxuZnVuY3Rpb24gJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDFjODg4NGVlMzJiZGY0NDMoW3gsIHksIHJdLCBzKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgeCAqIHMsXG4gICAgICAgIHkgKiBzLFxuICAgICAgICByICogc1xuICAgIF07XG59XG5mdW5jdGlvbiAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkMTk5MWVjZDI5Y2M5MmM2YihbeCwgeSwgcl0pIHtcbiAgICByZXR1cm4gW1xuICAgICAgICB4IC8gTWF0aC5zcXJ0KHggKiogMiArIHkgKiogMiksXG4gICAgICAgIHkgLyBNYXRoLnNxcnQoeCAqKiAyICsgeSAqKiAyKSxcbiAgICAgICAgclxuICAgIF07XG59XG5mdW5jdGlvbiAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkODU1ZGY4MjNjZWI5YjgxYihbeCwgeSwgcl0sIHJhZCkge1xuICAgIHJldHVybiBbXG4gICAgICAgIE1hdGguY29zKHJhZCkgKiB4IC0gTWF0aC5zaW4ocmFkKSAqIHksXG4gICAgICAgIE1hdGguc2luKHJhZCkgKiB4ICsgTWF0aC5jb3MocmFkKSAqIHksXG4gICAgICAgIHJcbiAgICBdO1xufVxuZnVuY3Rpb24gJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDkyZDhlMjM3NjkxMTdhNWUoYSwgYiwgdCkge1xuICAgIHJldHVybiAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkZTE2ZDg1MjBhZjQ0YTA5NihhLCAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkMWM4ODg0ZWUzMmJkZjQ0MygkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkZjkzYjU5MDUyNDFhN2NjYShiLCBhKSwgdCkpO1xufVxuZnVuY3Rpb24gJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDNhODlmOGQ2ZjZiZjZjOWYoYSwgYiwgdCkge1xuICAgIHJldHVybiBhICsgKGIgLSBhKSAqIHQ7XG59XG5mdW5jdGlvbiAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkOTQ0YjA5ZDJhZDEwYjM3OChwLCBwMSwgcDIpIHtcbiAgICByZXR1cm4gTWF0aC5hdGFuMihwMlsxXSAtIHBbMV0sIHAyWzBdIC0gcFswXSkgLSBNYXRoLmF0YW4yKHAxWzFdIC0gcFsxXSwgcDFbMF0gLSBwWzBdKTtcbn1cbmZ1bmN0aW9uICQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCQzYzA1YWFmNzFmMTQxZjczKGEpIHtcbiAgICByZXR1cm4gTWF0aC5hdGFuMihNYXRoLnNpbihhKSwgTWF0aC5jb3MoYSkpO1xufVxuZnVuY3Rpb24gJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDFiOWJhYjUwNGZhYTkzMDUoW3gsIHldKSB7XG4gICAgcmV0dXJuIE1hdGguc3FydCh4ICoqIDIgKyB5ICoqIDIpO1xufVxuZnVuY3Rpb24gJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDZjNGEzMTFjYzE1N2M3NjQoW2F4LCBheV0sIFtieCwgYnldKSB7XG4gICAgcmV0dXJuIE1hdGguc3FydCgoYnggLSBheCkgKiogMiArIChieSAtIGF5KSAqKiAyKTtcbn1cbmZ1bmN0aW9uICQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCQ0NmY2ZDNlMWI0YmQ3YzhiKHBvaW50LCBkaXJlY3Rpb24sIHJhZGl1cykge1xuICAgIHJldHVybiBbXG4gICAgICAgICQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCRlMTZkODUyMGFmNDRhMDk2KHBvaW50LCAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkMWM4ODg0ZWUzMmJkZjQ0MygkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkMTk5MWVjZDI5Y2M5MmM2YigkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkODU1ZGY4MjNjZWI5YjgxYihkaXJlY3Rpb24sIE1hdGguUEkgLyAyKSksIHJhZGl1cykpLFxuICAgICAgICAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkZTE2ZDg1MjBhZjQ0YTA5Nihwb2ludCwgJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDFjODg4NGVlMzJiZGY0NDMoJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDE5OTFlY2QyOWNjOTJjNmIoJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDg1NWRmODIzY2ViOWI4MWIoZGlyZWN0aW9uLCAtTWF0aC5QSSAvIDIpKSwgcmFkaXVzKSlcbiAgICBdO1xufVxuZnVuY3Rpb24gJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JGNjYjFiNGRmYmQzZjM2YTcocHMpIHtcbiAgICBpZiAocHMubGVuZ3RoIDwgMikgcmV0dXJuIDA7XG4gICAgbGV0IGxlbiA9IDA7XG4gICAgZm9yKGxldCBpID0gMTsgaSA8PSBwcy5sZW5ndGggLSAxOyBpKyspbGVuICs9ICQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCQ2YzRhMzExY2MxNTdjNzY0KHBzW2kgLSAxXSwgcHNbaV0pO1xuICAgIGxlbiArPSAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkNmM0YTMxMWNjMTU3Yzc2NChwc1twcy5sZW5ndGggLSAyXSwgcHNbcHMubGVuZ3RoIC0gMV0pO1xuICAgIHJldHVybiBsZW47XG59XG5jb25zdCAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkN2QxNWI2NGNmNWEzYTRjNCA9ICh2LCBtaW4sIG1heCk9Pk1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCB2KSk7XG5mdW5jdGlvbiAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkNTQ4Y2M0MzU5MDE1OWFmNihwMywgcDEsIHAyKSB7XG4gICAgY29uc3Qgc01hZyA9ICQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCQ2YzRhMzExY2MxNTdjNzY0KHAxLCBwMik7XG4gICAgaWYgKHNNYWcgPT09IDApIHJldHVybiAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkNmM0YTMxMWNjMTU3Yzc2NChwMywgcDEpO1xuICAgIGNvbnN0IHUgPSAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkN2QxNWI2NGNmNWEzYTRjNCgoKHAzWzBdIC0gcDFbMF0pICogKHAyWzBdIC0gcDFbMF0pICsgKHAzWzFdIC0gcDFbMV0pICogKHAyWzFdIC0gcDFbMV0pKSAvIHNNYWcgKiogMiwgMCwgMSk7XG4gICAgY29uc3QgcGkgPSBbXG4gICAgICAgIHAxWzBdICsgdSAqIChwMlswXSAtIHAxWzBdKSxcbiAgICAgICAgcDFbMV0gKyB1ICogKHAyWzFdIC0gcDFbMV0pLFxuICAgICAgICBwM1syXVxuICAgIF07XG4gICAgcmV0dXJuICQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCQ2YzRhMzExY2MxNTdjNzY0KHBpLCBwMyk7XG59XG5cblxuXG5mdW5jdGlvbiAkMzRiYWIwMDU5Zjg0MmNlNiRleHBvcnQkZWY2OTNkMTU3MmU2NGZiOChwb2ludHMsIGVwc2lsb24pIHtcbiAgICBpZiAoZXBzaWxvbiA9PT0gMCkgcmV0dXJuIHBvaW50cztcbiAgICBpZiAocG9pbnRzLmxlbmd0aCA8PSAyKSByZXR1cm4gcG9pbnRzO1xuICAgIGNvbnN0IGZpcnN0ID0gcG9pbnRzWzBdO1xuICAgIGNvbnN0IGxhc3QgPSBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IFttYXhEaXN0YW5jZSwgbWF4SW5kZXhdID0gcG9pbnRzLnJlZHVjZSgoW21heERpc3RhbmNlLCBtYXhJbmRleF0sIHBvaW50LCBpbmRleCk9PntcbiAgICAgICAgY29uc3QgZGlzdGFuY2UgPSAoMCwgJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDU0OGNjNDM1OTAxNTlhZjYpKHBvaW50LCBmaXJzdCwgbGFzdCk7XG4gICAgICAgIHJldHVybiBkaXN0YW5jZSA+IG1heERpc3RhbmNlID8gW1xuICAgICAgICAgICAgZGlzdGFuY2UsXG4gICAgICAgICAgICBpbmRleFxuICAgICAgICBdIDogW1xuICAgICAgICAgICAgbWF4RGlzdGFuY2UsXG4gICAgICAgICAgICBtYXhJbmRleFxuICAgICAgICBdO1xuICAgIH0sIFtcbiAgICAgICAgMCxcbiAgICAgICAgLTFcbiAgICBdKTtcbiAgICBpZiAobWF4RGlzdGFuY2UgPj0gZXBzaWxvbikge1xuICAgICAgICBjb25zdCBtYXhJbmRleFBvaW50ID0gcG9pbnRzW21heEluZGV4XTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLiQzNGJhYjAwNTlmODQyY2U2JGV4cG9ydCRlZjY5M2QxNTcyZTY0ZmI4KFtcbiAgICAgICAgICAgICAgICBmaXJzdCxcbiAgICAgICAgICAgICAgICAuLi5wb2ludHMuc2xpY2UoMSwgbWF4SW5kZXgpLFxuICAgICAgICAgICAgICAgIG1heEluZGV4UG9pbnRcbiAgICAgICAgICAgIF0sIGVwc2lsb24pLnNsaWNlKDAsIC0xKSxcbiAgICAgICAgICAgIG1heEluZGV4UG9pbnQsXG4gICAgICAgICAgICAuLi4kMzRiYWIwMDU5Zjg0MmNlNiRleHBvcnQkZWY2OTNkMTU3MmU2NGZiOChbXG4gICAgICAgICAgICAgICAgbWF4SW5kZXhQb2ludCxcbiAgICAgICAgICAgICAgICAuLi5wb2ludHMuc2xpY2UobWF4SW5kZXgsIC0xKSxcbiAgICAgICAgICAgICAgICBsYXN0XG4gICAgICAgICAgICBdLCBlcHNpbG9uKS5zbGljZSgxKVxuICAgICAgICBdO1xuICAgIH0gZWxzZSByZXR1cm4gW1xuICAgICAgICBmaXJzdCxcbiAgICAgICAgbGFzdFxuICAgIF07XG59XG5cblxuY2xhc3MgJDk0Y2ZhMmNmY2NjOGNjMjIkZXhwb3J0JDY1MzEwMjFiM2JmMzZlYWUge1xuICAgIHN0YXRpYyAjXyA9ICgoKT0+e1xuICAgICAgICB0aGlzLmRlZmF1bHRzID0ge1xuICAgICAgICAgICAgc2l6ZTogMixcbiAgICAgICAgICAgIHN0cmVhbWxpbmU6IDAuNDUsXG4gICAgICAgICAgICBzaW1wbGlmeTogMC4xLFxuICAgICAgICAgICAgc2ltcGxpZnlQaGFzZTogXCJvdXRwdXRcIixcbiAgICAgICAgICAgIHNpemVNYXBwaW5nOiAoKT0+MVxuICAgICAgICB9O1xuICAgIH0pKCk7XG4gICAgc3RhdGljICNfMSA9ICgoKT0+e1xuICAgICAgICB0aGlzLmNvbnN0YW50cyA9IHtcbiAgICAgICAgICAgIGNvcm5lckRldGVjdGlvbk1heEFuZ2xlOiAxMjAsXG4gICAgICAgICAgICBjb3JuZXJEZXRlY3Rpb25WYXJpYW5jZTogKHMpPT5zID4gMzUgPyAwLjUgOiAxLFxuICAgICAgICAgICAgbWF4VGFpbExlbmd0aDogNTBcbiAgICAgICAgfTtcbiAgICB9KSgpO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpe1xuICAgICAgICB0aGlzLm9yaWdpbmFsUG9pbnRzID0gW107XG4gICAgICAgIHRoaXMuc3RhYmxlUG9pbnRzID0gW107XG4gICAgICAgIHRoaXMudGFpbFBvaW50cyA9IFtdO1xuICAgICAgICB0aGlzLmlzRnJlc2ggPSB0cnVlO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCAkOTRjZmEyY2ZjY2M4Y2MyMiRleHBvcnQkNjUzMTAyMWIzYmYzNmVhZS5kZWZhdWx0cywgb3B0aW9ucyk7XG4gICAgfVxuICAgIGdldCBsYXN0UG9pbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhaWxQb2ludHNbdGhpcy50YWlsUG9pbnRzLmxlbmd0aCAtIDFdID8/IHRoaXMuc3RhYmxlUG9pbnRzW3RoaXMuc3RhYmxlUG9pbnRzLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICBhZGRQb2ludChwb2ludCkge1xuICAgICAgICBjb25zdCBsYXN0UG9pbnQgPSB0aGlzLm9yaWdpbmFsUG9pbnRzW3RoaXMub3JpZ2luYWxQb2ludHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmIChsYXN0UG9pbnQgJiYgbGFzdFBvaW50WzBdID09PSBwb2ludFswXSAmJiBsYXN0UG9pbnRbMV0gPT09IHBvaW50WzFdKSByZXR1cm47XG4gICAgICAgIHRoaXMub3JpZ2luYWxQb2ludHMucHVzaChwb2ludCk7XG4gICAgICAgIGlmICh0aGlzLmlzRnJlc2gpIHtcbiAgICAgICAgICAgIHRoaXMuaXNGcmVzaCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zdGFibGVQb2ludHMucHVzaChwb2ludCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zdHJlYW1saW5lID4gMCkgcG9pbnQgPSAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkOTJkOGUyMzc2OTExN2E1ZSh0aGlzLmxhc3RQb2ludCwgcG9pbnQsIDEgLSB0aGlzLm9wdGlvbnMuc3RyZWFtbGluZSk7XG4gICAgICAgIHRoaXMudGFpbFBvaW50cy5wdXNoKHBvaW50KTtcbiAgICAgICAgaWYgKCQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCRjY2IxYjRkZmJkM2YzNmE3KHRoaXMudGFpbFBvaW50cykgPiAkOTRjZmEyY2ZjY2M4Y2MyMiRleHBvcnQkNjUzMTAyMWIzYmYzNmVhZS5jb25zdGFudHMubWF4VGFpbExlbmd0aCkgdGhpcy5zdGFiaWxpemVUYWlsKCk7XG4gICAgfVxuICAgIGNsb3NlKCkge1xuICAgICAgICB0aGlzLnN0YWJpbGl6ZVRhaWwoKTtcbiAgICB9XG4gICAgc3RhYmlsaXplVGFpbCgpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaW1wbGlmeSA+IDAgJiYgdGhpcy5vcHRpb25zLnNpbXBsaWZ5UGhhc2UgPT0gXCJ0YWlsXCIpIHRocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZCB5ZXRcIik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGFibGVQb2ludHMucHVzaCguLi50aGlzLnRhaWxQb2ludHMpO1xuICAgICAgICAgICAgdGhpcy50YWlsUG9pbnRzID0gW107XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0U2l6ZShzaXplT3ZlcnJpZGUsIHByZXNzdXJlLCBpbmRleCwgdG90YWxMZW5ndGgsIHJ1bm5pbmdMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIChzaXplT3ZlcnJpZGUgPz8gdGhpcy5vcHRpb25zLnNpemUpICogdGhpcy5vcHRpb25zLnNpemVNYXBwaW5nKHtcbiAgICAgICAgICAgIHByZXNzdXJlOiBwcmVzc3VyZSxcbiAgICAgICAgICAgIHJ1bm5pbmdMZW5ndGg6IHJ1bm5pbmdMZW5ndGgsXG4gICAgICAgICAgICBjdXJyZW50SW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgdG90YWxMZW5ndGg6IHRvdGFsTGVuZ3RoXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRTdHJva2VPdXRsaW5lKHNpemVPdmVycmlkZSkge1xuICAgICAgICBpZiAodGhpcy5pc0ZyZXNoKSByZXR1cm4gW107XG4gICAgICAgIGxldCBwb2ludHMgPSBbXG4gICAgICAgICAgICAuLi50aGlzLnN0YWJsZVBvaW50cyxcbiAgICAgICAgICAgIC4uLnRoaXMudGFpbFBvaW50c1xuICAgICAgICBdO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNpbXBsaWZ5ID4gMCAmJiB0aGlzLm9wdGlvbnMuc2ltcGxpZnlQaGFzZSA9PT0gXCJpbnB1dFwiKSBwb2ludHMgPSAoMCwgJDM0YmFiMDA1OWY4NDJjZTYkZXhwb3J0JGVmNjkzZDE1NzJlNjRmYjgpKHBvaW50cywgdGhpcy5vcHRpb25zLnNpbXBsaWZ5KTtcbiAgICAgICAgY29uc3QgbGVuID0gcG9pbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgICBpZiAobGVuID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gcG9pbnRzWzBdO1xuICAgICAgICAgICAgY29uc3QgcHMgPSBbXTtcbiAgICAgICAgICAgIGZvcihsZXQgdGhldGEgPSAwOyB0aGV0YSA8PSBNYXRoLlBJICogMjsgdGhldGEgKz0gTWF0aC5QSSAvIDE2KXBzLnB1c2goJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JGUxNmQ4NTIwYWY0NGEwOTYoYywgJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDFjODg4NGVlMzJiZGY0NDMoJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDg1NWRmODIzY2ViOWI4MWIoW1xuICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICBdLCB0aGV0YSksIHRoaXMuZ2V0U2l6ZShzaXplT3ZlcnJpZGUsIGNbMl0sIDAsIGxlbiwgMCkpKSk7XG4gICAgICAgICAgICBwcy5wdXNoKCQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCRlMTZkODUyMGFmNDRhMDk2KGMsICQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCQxYzg4ODRlZTMyYmRmNDQzKFtcbiAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgXSwgdGhpcy5nZXRTaXplKHNpemVPdmVycmlkZSwgY1syXSwgMCwgbGVuLCAwKSkpKTtcbiAgICAgICAgICAgIHJldHVybiBwcztcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVuID09PSAyKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gcG9pbnRzWzBdO1xuICAgICAgICAgICAgY29uc3QgbiA9IHBvaW50c1sxXTtcbiAgICAgICAgICAgIGNvbnN0IHBzID0gW107XG4gICAgICAgICAgICBjb25zdCBwQW5nbGUgPSAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkOTQ0YjA5ZDJhZDEwYjM3OChjLCBbXG4gICAgICAgICAgICAgICAgY1swXSxcbiAgICAgICAgICAgICAgICBjWzFdIC0gMTAwLFxuICAgICAgICAgICAgICAgIGNbMl1cbiAgICAgICAgICAgIF0sIG4pO1xuICAgICAgICAgICAgZm9yKGxldCB0aGV0YSA9IHBBbmdsZTsgdGhldGEgPD0gTWF0aC5QSSArIHBBbmdsZTsgdGhldGEgKz0gTWF0aC5QSSAvIDE2KXBzLnB1c2goJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JGUxNmQ4NTIwYWY0NGEwOTYoYywgJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDFjODg4NGVlMzJiZGY0NDMoJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDg1NWRmODIzY2ViOWI4MWIoW1xuICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICBdLCB0aGV0YSksIHRoaXMuZ2V0U2l6ZShzaXplT3ZlcnJpZGUsIGNbMl0sIDAsIGxlbiwgMCkpKSk7XG4gICAgICAgICAgICBmb3IobGV0IHRoZXRhID0gTWF0aC5QSSArIHBBbmdsZTsgdGhldGEgPD0gTWF0aC5QSSAqIDIgKyBwQW5nbGU7IHRoZXRhICs9IE1hdGguUEkgLyAxNilwcy5wdXNoKCQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCRlMTZkODUyMGFmNDRhMDk2KG4sICQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCQxYzg4ODRlZTMyYmRmNDQzKCQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCQ4NTVkZjgyM2NlYjliODFiKFtcbiAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgXSwgdGhldGEpLCB0aGlzLmdldFNpemUoc2l6ZU92ZXJyaWRlLCBuWzJdLCAwLCBsZW4sIDApKSkpO1xuICAgICAgICAgICAgcHMucHVzaChwc1swXSk7XG4gICAgICAgICAgICByZXR1cm4gcHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9yd2FyZFBvaW50cyA9IFtdO1xuICAgICAgICBjb25zdCBiYWNrd2FyZFBvaW50cyA9IFtdO1xuICAgICAgICBsZXQgc3BlZWQgPSAwO1xuICAgICAgICBsZXQgcHJldlNwZWVkID0gMDtcbiAgICAgICAgbGV0IHZpc2libGVTdGFydEluZGV4ID0gMDtcbiAgICAgICAgbGV0IHJ1bm5pbmdMZW5ndGggPSAwO1xuICAgICAgICBmb3IobGV0IGkgPSAxOyBpIDwgbGVuIC0gMTsgaSsrKXtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBwb2ludHNbaSAtIDFdLCBjID0gcG9pbnRzW2ldLCBuID0gcG9pbnRzW2kgKyAxXTtcbiAgICAgICAgICAgIGxldCBwcmVzc3VyZSA9IGNbMl07XG4gICAgICAgICAgICBjb25zdCBkID0gJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDZjNGEzMTFjYzE1N2M3NjQocCwgYyk7XG4gICAgICAgICAgICBydW5uaW5nTGVuZ3RoICs9IGQ7XG4gICAgICAgICAgICBzcGVlZCA9IHByZXZTcGVlZCArIChkIC0gcHJldlNwZWVkKSAqIDAuMjtcbiAgICAgICAgICAgIGNvbnN0IGNTaXplID0gdGhpcy5nZXRTaXplKHNpemVPdmVycmlkZSwgcHJlc3N1cmUsIGksIGxlbiwgcnVubmluZ0xlbmd0aCk7XG4gICAgICAgICAgICBpZiAoY1NpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleCA9IGkgKyAxO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGlyUEMgPSAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkMTk5MWVjZDI5Y2M5MmM2YigkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkZjkzYjU5MDUyNDFhN2NjYShwLCBjKSk7XG4gICAgICAgICAgICBjb25zdCBkaXJOQyA9ICQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCQxOTkxZWNkMjljYzkyYzZiKCQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCRmOTNiNTkwNTI0MWE3Y2NhKG4sIGMpKTtcbiAgICAgICAgICAgIGNvbnN0IHAxZGlyUEMgPSAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkODU1ZGY4MjNjZWI5YjgxYihkaXJQQywgTWF0aC5QSSAvIDIpO1xuICAgICAgICAgICAgY29uc3QgcDJkaXJQQyA9ICQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCQ4NTVkZjgyM2NlYjliODFiKGRpclBDLCAtTWF0aC5QSSAvIDIpO1xuICAgICAgICAgICAgY29uc3QgcDFkaXJOQyA9ICQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCQ4NTVkZjgyM2NlYjliODFiKGRpck5DLCBNYXRoLlBJIC8gMik7XG4gICAgICAgICAgICBjb25zdCBwMmRpck5DID0gJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDg1NWRmODIzY2ViOWI4MWIoZGlyTkMsIC1NYXRoLlBJIC8gMik7XG4gICAgICAgICAgICBjb25zdCBwMVBDID0gJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JGUxNmQ4NTIwYWY0NGEwOTYoYywgJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDFjODg4NGVlMzJiZGY0NDMocDFkaXJQQywgY1NpemUpKTtcbiAgICAgICAgICAgIGNvbnN0IHAyUEMgPSAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkZTE2ZDg1MjBhZjQ0YTA5NihjLCAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkMWM4ODg0ZWUzMmJkZjQ0MyhwMmRpclBDLCBjU2l6ZSkpO1xuICAgICAgICAgICAgY29uc3QgcDFOQyA9ICQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCRlMTZkODUyMGFmNDRhMDk2KGMsICQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCQxYzg4ODRlZTMyYmRmNDQzKHAxZGlyTkMsIGNTaXplKSk7XG4gICAgICAgICAgICBjb25zdCBwMk5DID0gJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JGUxNmQ4NTIwYWY0NGEwOTYoYywgJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDFjODg4NGVlMzJiZGY0NDMocDJkaXJOQywgY1NpemUpKTtcbiAgICAgICAgICAgIGNvbnN0IGZ0ZGlyID0gJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JGUxNmQ4NTIwYWY0NGEwOTYocDFkaXJQQywgcDJkaXJOQyk7XG4gICAgICAgICAgICBjb25zdCBidGRpciA9ICQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCRlMTZkODUyMGFmNDRhMDk2KHAyZGlyUEMsIHAxZGlyTkMpO1xuICAgICAgICAgICAgY29uc3QgcGFQQyA9ICQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCRlMTZkODUyMGFmNDRhMDk2KGMsICQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCQxYzg4ODRlZTMyYmRmNDQzKCQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCQxYjliYWI1MDRmYWE5MzA1KGZ0ZGlyKSA9PT0gMCA/IGRpclBDIDogJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDE5OTFlY2QyOWNjOTJjNmIoZnRkaXIpLCBjU2l6ZSkpO1xuICAgICAgICAgICAgY29uc3QgcGFOQyA9ICQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCRlMTZkODUyMGFmNDRhMDk2KGMsICQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCQxYzg4ODRlZTMyYmRmNDQzKCQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCQxYjliYWI1MDRmYWE5MzA1KGJ0ZGlyKSA9PT0gMCA/IGRpck5DIDogJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDE5OTFlY2QyOWNjOTJjNmIoYnRkaXIpLCBjU2l6ZSkpO1xuICAgICAgICAgICAgY29uc3QgY0FuZ2xlID0gJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDNjMDVhYWY3MWYxNDFmNzMoJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDk0NGIwOWQyYWQxMGIzNzgoYywgcCwgbikpO1xuICAgICAgICAgICAgY29uc3QgRF9BTkdMRSA9ICQ5NGNmYTJjZmNjYzhjYzIyJGV4cG9ydCQ2NTMxMDIxYjNiZjM2ZWFlLmNvbnN0YW50cy5jb3JuZXJEZXRlY3Rpb25NYXhBbmdsZSAvIDE4MCAqIE1hdGguUEkgKiAkOTRjZmEyY2ZjY2M4Y2MyMiRleHBvcnQkNjUzMTAyMWIzYmYzNmVhZS5jb25zdGFudHMuY29ybmVyRGV0ZWN0aW9uVmFyaWFuY2Uoc3BlZWQpO1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGNBbmdsZSkgPCBEX0FOR0xFKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdEFuZ2xlID0gTWF0aC5hYnMoJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDNjMDVhYWY3MWYxNDFmNzMoTWF0aC5QSSAtIGNBbmdsZSkpIC8vIHR1cm4gYW5nbGVcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgaWYgKHRBbmdsZSA9PT0gMCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKGNBbmdsZSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja3dhcmRQb2ludHMucHVzaChwMlBDLCBwYU5DKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCB0aGV0YSA9IDA7IHRoZXRhIDw9IHRBbmdsZTsgdGhldGEgKz0gdEFuZ2xlIC8gNClmb3J3YXJkUG9pbnRzLnB1c2goJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JGUxNmQ4NTIwYWY0NGEwOTYoYywgJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDg1NWRmODIzY2ViOWI4MWIoJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDFjODg4NGVlMzJiZGY0NDMocDFkaXJQQywgY1NpemUpLCB0aGV0YSkpKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCB0aGV0YSA9IHRBbmdsZTsgdGhldGEgPj0gMDsgdGhldGEgLT0gdEFuZ2xlIC8gNCliYWNrd2FyZFBvaW50cy5wdXNoKCQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCRlMTZkODUyMGFmNDRhMDk2KGMsICQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCQ4NTVkZjgyM2NlYjliODFiKCQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCQxYzg4ODRlZTMyYmRmNDQzKHAxZGlyUEMsIGNTaXplKSwgdGhldGEpKSk7XG4gICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkUG9pbnRzLnB1c2gocGFOQywgcDFOQyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yd2FyZFBvaW50cy5wdXNoKHAxUEMsIHBhUEMpO1xuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IHRoZXRhID0gMDsgdGhldGEgPD0gdEFuZ2xlOyB0aGV0YSArPSB0QW5nbGUgLyA0KWJhY2t3YXJkUG9pbnRzLnB1c2goJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JGUxNmQ4NTIwYWY0NGEwOTYoYywgJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDg1NWRmODIzY2ViOWI4MWIoJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDFjODg4NGVlMzJiZGY0NDMocDFkaXJQQywgLWNTaXplKSwgLXRoZXRhKSkpO1xuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IHRoZXRhID0gdEFuZ2xlOyB0aGV0YSA+PSAwOyB0aGV0YSAtPSB0QW5nbGUgLyA0KWZvcndhcmRQb2ludHMucHVzaCgkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkZTE2ZDg1MjBhZjQ0YTA5NihjLCAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkODU1ZGY4MjNjZWI5YjgxYigkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkMWM4ODg0ZWUzMmJkZjQ0MyhwMWRpclBDLCAtY1NpemUpLCAtdGhldGEpKSk7XG4gICAgICAgICAgICAgICAgICAgIGZvcndhcmRQb2ludHMucHVzaChwYVBDLCBwMk5DKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvcndhcmRQb2ludHMucHVzaChwYVBDKTtcbiAgICAgICAgICAgICAgICBiYWNrd2FyZFBvaW50cy5wdXNoKHBhTkMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJldlNwZWVkID0gc3BlZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlyc3QgPSBwb2ludHNbdmlzaWJsZVN0YXJ0SW5kZXhdO1xuICAgICAgICBjb25zdCBzZWNvbmQgPSBwb2ludHNbdmlzaWJsZVN0YXJ0SW5kZXggKyAxXTtcbiAgICAgICAgY29uc3QgcGVudWx0aW1hdGUgPSBwb2ludHNbbGVuIC0gMl07XG4gICAgICAgIGNvbnN0IHVsdGltYXRlID0gcG9pbnRzW2xlbiAtIDFdO1xuICAgICAgICBpZiAodmlzaWJsZVN0YXJ0SW5kZXggPj0gbGVuIC0gMikgcmV0dXJuIFtdO1xuICAgICAgICBjb25zdCBkaXJGUyA9ICQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCQxOTkxZWNkMjljYzkyYzZiKCQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCRmOTNiNTkwNTI0MWE3Y2NhKHNlY29uZCwgZmlyc3QpKTtcbiAgICAgICAgY29uc3QgZGlyUFUgPSAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkMTk5MWVjZDI5Y2M5MmM2YigkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkZjkzYjU5MDUyNDFhN2NjYShwZW51bHRpbWF0ZSwgdWx0aW1hdGUpKTtcbiAgICAgICAgY29uc3QgcHBkaXJGUyA9ICQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCQ4NTVkZjgyM2NlYjliODFiKGRpckZTLCAtTWF0aC5QSSAvIDIpO1xuICAgICAgICBjb25zdCBwcGRpclBVID0gJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDg1NWRmODIzY2ViOWI4MWIoZGlyUFUsIE1hdGguUEkgLyAyKTtcbiAgICAgICAgY29uc3Qgc3RhcnRDYXBTaXplID0gdGhpcy5nZXRTaXplKHNpemVPdmVycmlkZSwgZmlyc3RbMl0sIDAsIGxlbiwgMCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2FwID0gW107XG4gICAgICAgIGNvbnN0IGVuZENhcFNpemUgPSB0aGlzLmdldFNpemUoc2l6ZU92ZXJyaWRlLCBwZW51bHRpbWF0ZVsyXSwgbGVuIC0gMiwgbGVuLCBydW5uaW5nTGVuZ3RoKTtcbiAgICAgICAgY29uc3QgZW5kQ2FwID0gW107XG4gICAgICAgIGZvcihsZXQgdGhldGEgPSAwOyB0aGV0YSA8PSBNYXRoLlBJOyB0aGV0YSArPSBNYXRoLlBJIC8gMTYpc3RhcnRDYXAudW5zaGlmdCgkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkZTE2ZDg1MjBhZjQ0YTA5NihmaXJzdCwgJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDg1NWRmODIzY2ViOWI4MWIoJDhjZDdlZmI1YWYzODUzMDYkZXhwb3J0JDFjODg4NGVlMzJiZGY0NDMocHBkaXJGUywgc3RhcnRDYXBTaXplKSwgLXRoZXRhKSkpO1xuICAgICAgICBzdGFydENhcC51bnNoaWZ0KCQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCRlMTZkODUyMGFmNDRhMDk2KGZpcnN0LCAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkMWM4ODg0ZWUzMmJkZjQ0MyhwcGRpckZTLCAtc3RhcnRDYXBTaXplKSkpO1xuICAgICAgICBmb3IobGV0IHRoZXRhID0gMDsgdGhldGEgPD0gTWF0aC5QSTsgdGhldGEgKz0gTWF0aC5QSSAvIDE2KWVuZENhcC5wdXNoKCQ4Y2Q3ZWZiNWFmMzg1MzA2JGV4cG9ydCRlMTZkODUyMGFmNDRhMDk2KHVsdGltYXRlLCAkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkODU1ZGY4MjNjZWI5YjgxYigkOGNkN2VmYjVhZjM4NTMwNiRleHBvcnQkMWM4ODg0ZWUzMmJkZjQ0MyhwcGRpclBVLCAtZW5kQ2FwU2l6ZSksIC10aGV0YSkpKTtcbiAgICAgICAgY29uc3Qgc3Ryb2tlT3V0bGluZSA9IFtcbiAgICAgICAgICAgIC4uLnN0YXJ0Q2FwLFxuICAgICAgICAgICAgLi4uZm9yd2FyZFBvaW50cyxcbiAgICAgICAgICAgIC4uLmVuZENhcC5yZXZlcnNlKCksXG4gICAgICAgICAgICAuLi5iYWNrd2FyZFBvaW50cy5yZXZlcnNlKClcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKHN0YXJ0Q2FwLmxlbmd0aCA+IDApIHN0cm9rZU91dGxpbmUucHVzaChzdGFydENhcFswXSk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2ltcGxpZnkgPiAwICYmIHRoaXMub3B0aW9ucy5zaW1wbGlmeVBoYXNlID09PSBcIm91dHB1dFwiKSByZXR1cm4gKDAsICQzNGJhYjAwNTlmODQyY2U2JGV4cG9ydCRlZjY5M2QxNTcyZTY0ZmI4KShzdHJva2VPdXRsaW5lLCB0aGlzLm9wdGlvbnMuc2ltcGxpZnkpO1xuICAgICAgICByZXR1cm4gc3Ryb2tlT3V0bGluZTtcbiAgICB9XG59XG5cblxuXG5cbmV4cG9ydCB7JDk0Y2ZhMmNmY2NjOGNjMjIkZXhwb3J0JDY1MzEwMjFiM2JmMzZlYWUgYXMgTGFzZXJQb2ludGVyfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVzbS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/laser-pointer/dist/esm.js\n");
/***/ }),
/***/ "../../../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.esm.js":
/*!**************************************************************************************!*\
!*** ../../../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.esm.js ***!
\**************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"arrow\": () => (/* binding */ arrow),\n/* harmony export */ \"autoPlacement\": () => (/* reexport safe */ _floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.autoPlacement),\n/* harmony export */ \"autoUpdate\": () => (/* reexport safe */ _floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.autoUpdate),\n/* harmony export */ \"computePosition\": () => (/* reexport safe */ _floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.computePosition),\n/* harmony export */ \"detectOverflow\": () => (/* reexport safe */ _floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.detectOverflow),\n/* harmony export */ \"flip\": () => (/* reexport safe */ _floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.flip),\n/* harmony export */ \"getOverflowAncestors\": () => (/* reexport safe */ _floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.getOverflowAncestors),\n/* harmony export */ \"hide\": () => (/* reexport safe */ _floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.hide),\n/* harmony export */ \"inline\": () => (/* reexport safe */ _floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.inline),\n/* harmony export */ \"limitShift\": () => (/* reexport safe */ _floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.limitShift),\n/* harmony export */ \"offset\": () => (/* reexport safe */ _floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.offset),\n/* harmony export */ \"shift\": () => (/* reexport safe */ _floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.shift),\n/* harmony export */ \"size\": () => (/* reexport safe */ _floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__.size),\n/* harmony export */ \"useFloating\": () => (/* binding */ useFloating)\n/* harmony export */ });\n/* harmony import */ var _floating_ui_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @floating-ui/dom */ \"../../../node_modules/@floating-ui/dom/dist/floating-ui.dom.browser.mjs\");\n/* harmony import */ var _floating_ui_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @floating-ui/dom */ \"../../../node_modules/@floating-ui/core/dist/floating-ui.core.browser.mjs\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"react\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-dom */ \"react-dom\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\n\n\n\nvar index = typeof document !== 'undefined' ? react__WEBPACK_IMPORTED_MODULE_1__.useLayoutEffect : react__WEBPACK_IMPORTED_MODULE_1__.useEffect;\n\n// Fork of `fast-deep-equal` that only does the comparisons we need and compares\n// functions\nfunction deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n\n if (typeof a !== typeof b) {\n return false;\n }\n\n if (typeof a === 'function' && a.toString() === b.toString()) {\n return true;\n }\n\n let length, i, keys;\n\n if (a && b && typeof a == 'object') {\