@excalidraw/excalidraw 0.16.1-6920-3a6028b → 0.16.1-6920-d3d0bd0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/excalidraw-assets/{vendor-2846daa016c867f96ee4.js → vendor-1d7fa3a52ac368151052.js} +2 -2
- package/dist/excalidraw-assets-dev/{vendor-537f046869926dc3235f.js → vendor-69c110bed9124a145b63.js} +6 -6
- package/dist/excalidraw.development.js +13 -13
- package/dist/excalidraw.production.min.js +1 -1
- package/package.json +1 -1
- package/types/actions/actionClipboard.d.ts +251 -8
- package/types/actions/manager.d.ts +1 -1
- package/types/clipboard.d.ts +21 -3
- package/types/components/App.d.ts +1 -3
- package/types/components/ContextMenu.d.ts +2 -1
- package/types/constants.d.ts +1 -0
- package/types/data/transform.d.ts +6 -2
- package/types/element/newElement.d.ts +3 -1
- package/types/scene/export.d.ts +0 -1
- package/types/utils.d.ts +2 -0
- /package/dist/excalidraw-assets/{vendor-2846daa016c867f96ee4.js.LICENSE.txt → vendor-1d7fa3a52ac368151052.js.LICENSE.txt} +0 -0
- /package/types/packages/excalidraw/dist/excalidraw-assets/{vendor-2846daa016c867f96ee4.d.ts → vendor-1d7fa3a52ac368151052.d.ts} +0 -0
- /package/types/packages/excalidraw/dist/excalidraw-assets-dev/{vendor-537f046869926dc3235f.d.ts → vendor-69c110bed9124a145b63.d.ts} +0 -0
package/dist/excalidraw-assets-dev/{vendor-537f046869926dc3235f.js → vendor-69c110bed9124a145b63.js}
RENAMED
|
@@ -95,7 +95,7 @@ eval("!function(e,t){ true?module.exports=t():0}(this,(function(){\"use strict\"
|
|
|
95
95
|
\**************************************************/
|
|
96
96
|
/***/ ((module, exports, __webpack_require__) => {
|
|
97
97
|
|
|
98
|
-
eval("/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = ({\"VITE_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"VITE_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"VITE_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"VITE_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"VITE_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"VITE_APP_PORTAL_URL\":\"\",\"VITE_APP_PLUS_LP\":\"https://plus.excalidraw.com\",\"VITE_APP_PLUS_APP\":\"https://app.excalidraw.com\",\"VITE_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"VITE_APP_DEV_ENABLE_SW\":\"\",\"VITE_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"VITE_APP_DISABLE_TRACKING\":\"true\",\"FAST_REFRESH\":\"false\",\"VITE_APP_PORT\":\"3000\",\"VITE_APP_DEBUG_ENABLE_TEXT_CONTAINER_BOUNDING_BOX\":\"\",\"VITE_APP_COLLAPSE_OVERLAY\":\"true\",\"VITE_APP_ENABLE_ESLINT\":\"true\",\"VITE_PKG_NAME\":\"@excalidraw/excalidraw\",\"VITE_PKG_VERSION\":\"0.16.1-6920-3a6028b\",\"VITE_IS_EXCALIDRAW_NPM_PACKAGE\":true}).DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = __webpack_require__(/*! ./common */ \"../../../node_modules/debug/src/common.js\")(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9icm93c2VyLmpzLmpzIiwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIsWUFBWTtBQUNaLFlBQVk7QUFDWixpQkFBaUI7QUFDakIsZUFBZTtBQUNmLGVBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNENBQTRDOztBQUV2RDtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU0sbXJDQUFXO0FBQ2pCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLDJEQUFVOztBQUVuQyxPQUFPLFlBQVk7O0FBRW5CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvYnJvd3Nlci5qcz9mOGUyIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIHdlYiBicm93c2VyIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuc3RvcmFnZSA9IGxvY2Fsc3RvcmFnZSgpO1xuZXhwb3J0cy5kZXN0cm95ID0gKCgpID0+IHtcblx0bGV0IHdhcm5lZCA9IGZhbHNlO1xuXG5cdHJldHVybiAoKSA9PiB7XG5cdFx0aWYgKCF3YXJuZWQpIHtcblx0XHRcdHdhcm5lZCA9IHRydWU7XG5cdFx0XHRjb25zb2xlLndhcm4oJ0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nKTtcblx0XHR9XG5cdH07XG59KSgpO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFtcblx0JyMwMDAwQ0MnLFxuXHQnIzAwMDBGRicsXG5cdCcjMDAzM0NDJyxcblx0JyMwMDMzRkYnLFxuXHQnIzAwNjZDQycsXG5cdCcjMDA2NkZGJyxcblx0JyMwMDk5Q0MnLFxuXHQnIzAwOTlGRicsXG5cdCcjMDBDQzAwJyxcblx0JyMwMENDMzMnLFxuXHQnIzAwQ0M2NicsXG5cdCcjMDBDQzk5Jyxcblx0JyMwMENDQ0MnLFxuXHQnIzAwQ0NGRicsXG5cdCcjMzMwMENDJyxcblx0JyMzMzAwRkYnLFxuXHQnIzMzMzNDQycsXG5cdCcjMzMzM0ZGJyxcblx0JyMzMzY2Q0MnLFxuXHQnIzMzNjZGRicsXG5cdCcjMzM5OUNDJyxcblx0JyMzMzk5RkYnLFxuXHQnIzMzQ0MwMCcsXG5cdCcjMzNDQzMzJyxcblx0JyMzM0NDNjYnLFxuXHQnIzMzQ0M5OScsXG5cdCcjMzNDQ0NDJyxcblx0JyMzM0NDRkYnLFxuXHQnIzY2MDBDQycsXG5cdCcjNjYwMEZGJyxcblx0JyM2NjMzQ0MnLFxuXHQnIzY2MzNGRicsXG5cdCcjNjZDQzAwJyxcblx0JyM2NkNDMzMnLFxuXHQnIzk5MDBDQycsXG5cdCcjOTkwMEZGJyxcblx0JyM5OTMzQ0MnLFxuXHQnIzk5MzNGRicsXG5cdCcjOTlDQzAwJyxcblx0JyM5OUNDMzMnLFxuXHQnI0NDMDAwMCcsXG5cdCcjQ0MwMDMzJyxcblx0JyNDQzAwNjYnLFxuXHQnI0NDMDA5OScsXG5cdCcjQ0MwMENDJyxcblx0JyNDQzAwRkYnLFxuXHQnI0NDMzMwMCcsXG5cdCcjQ0MzMzMzJyxcblx0JyNDQzMzNjYnLFxuXHQnI0NDMzM5OScsXG5cdCcjQ0MzM0NDJyxcblx0JyNDQzMzRkYnLFxuXHQnI0NDNjYwMCcsXG5cdCcjQ0M2NjMzJyxcblx0JyNDQzk5MDAnLFxuXHQnI0NDOTkzMycsXG5cdCcjQ0NDQzAwJyxcblx0JyNDQ0NDMzMnLFxuXHQnI0ZGMDAwMCcsXG5cdCcjRkYwMDMzJyxcblx0JyNGRjAwNjYnLFxuXHQnI0ZGMDA5OScsXG5cdCcjRkYwMENDJyxcblx0JyNGRjAwRkYnLFxuXHQnI0ZGMzMwMCcsXG5cdCcjRkYzMzMzJyxcblx0JyNGRjMzNjYnLFxuXHQnI0ZGMzM5OScsXG5cdCcjRkYzM0NDJyxcblx0JyNGRjMzRkYnLFxuXHQnI0ZGNjYwMCcsXG5cdCcjRkY2NjMzJyxcblx0JyNGRjk5MDAnLFxuXHQnI0ZGOTkzMycsXG5cdCcjRkZDQzAwJyxcblx0JyNGRkNDMzMnXG5dO1xuXG4vKipcbiAqIEN1cnJlbnRseSBvbmx5IFdlYktpdC1iYXNlZCBXZWIgSW5zcGVjdG9ycywgRmlyZWZveCA+PSB2MzEsXG4gKiBhbmQgdGhlIEZpcmVidWcgZXh0ZW5zaW9uIChhbnkgRmlyZWZveCB2ZXJzaW9uKSBhcmUga25vd25cbiAqIHRvIHN1cHBvcnQgXCIlY1wiIENTUyBjdXN0b21pemF0aW9ucy5cbiAqXG4gKiBUT0RPOiBhZGQgYSBgbG9jYWxTdG9yYWdlYCB2YXJpYWJsZSB0byBleHBsaWNpdGx5IGVuYWJsZS9kaXNhYmxlIGNvbG9yc1xuICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiB1c2VDb2xvcnMoKSB7XG5cdC8vIE5COiBJbiBhbiBFbGVjdHJvbiBwcmVsb2FkIHNjcmlwdCwgZG9jdW1lbnQgd2lsbCBiZSBkZWZpbmVkIGJ1dCBub3QgZnVsbHlcblx0Ly8gaW5pdGlhbGl6ZWQuIFNpbmNlIHdlIGtub3cgd2UncmUgaW4gQ2hyb21lLCB3ZSdsbCBqdXN0IGRldGVjdCB0aGlzIGNhc2Vcblx0Ly8gZXhwbGljaXRseVxuXHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnByb2Nlc3MgJiYgKHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicgfHwgd2luZG93LnByb2Nlc3MuX19ud2pzKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Ly8gSW50ZXJuZXQgRXhwbG9yZXIgYW5kIEVkZ2UgZG8gbm90IHN1cHBvcnQgY29sb3JzLlxuXHRpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhlZGdlfHRyaWRlbnQpXFwvKFxcZCspLykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBJcyB3ZWJraXQ/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE2NDU5NjA2LzM3Njc3M1xuXHQvLyBkb2N1bWVudCBpcyB1bmRlZmluZWQgaW4gcmVhY3QtbmF0aXZlOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL3B1bGwvMTYzMlxuXHRyZXR1cm4gKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuV2Via2l0QXBwZWFyYW5jZSkgfHxcblx0XHQvLyBJcyBmaXJlYnVnPyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zOTgxMjAvMzc2NzczXG5cdFx0KHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5jb25zb2xlICYmICh3aW5kb3cuY29uc29sZS5maXJlYnVnIHx8ICh3aW5kb3cuY29uc29sZS5leGNlcHRpb24gJiYgd2luZG93LmNvbnNvbGUudGFibGUpKSkgfHxcblx0XHQvLyBJcyBmaXJlZm94ID49IHYzMT9cblx0XHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1Rvb2xzL1dlYl9Db25zb2xlI1N0eWxpbmdfbWVzc2FnZXNcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSAmJiBwYXJzZUludChSZWdFeHAuJDEsIDEwKSA+PSAzMSkgfHxcblx0XHQvLyBEb3VibGUgY2hlY2sgd2Via2l0IGluIHVzZXJBZ2VudCBqdXN0IGluIGNhc2Ugd2UgYXJlIGluIGEgd29ya2VyXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcHBsZXdlYmtpdFxcLyhcXGQrKS8pKTtcbn1cblxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0YXJnc1swXSA9ICh0aGlzLnVzZUNvbG9ycyA/ICclYycgOiAnJykgK1xuXHRcdHRoaXMubmFtZXNwYWNlICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnICVjJyA6ICcgJykgK1xuXHRcdGFyZ3NbMF0gK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICclYyAnIDogJyAnKSArXG5cdFx0JysnICsgbW9kdWxlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKTtcblxuXHRpZiAoIXRoaXMudXNlQ29sb3JzKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgYyA9ICdjb2xvcjogJyArIHRoaXMuY29sb3I7XG5cdGFyZ3Muc3BsaWNlKDEsIDAsIGMsICdjb2xvcjogaW5oZXJpdCcpO1xuXG5cdC8vIFRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG5cdC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cblx0Ly8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG5cdGxldCBpbmRleCA9IDA7XG5cdGxldCBsYXN0QyA9IDA7XG5cdGFyZ3NbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLCBtYXRjaCA9PiB7XG5cdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGluZGV4Kys7XG5cdFx0aWYgKG1hdGNoID09PSAnJWMnKSB7XG5cdFx0XHQvLyBXZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcblx0XHRcdC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG5cdFx0XHRsYXN0QyA9IGluZGV4O1xuXHRcdH1cblx0fSk7XG5cblx0YXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUuZGVidWcoKWAgd2hlbiBhdmFpbGFibGUuXG4gKiBOby1vcCB3aGVuIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYSBcImZ1bmN0aW9uXCIuXG4gKiBJZiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGF2YWlsYWJsZSwgZmFsbHMgYmFja1xuICogdG8gYGNvbnNvbGUubG9nYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5leHBvcnRzLmxvZyA9IGNvbnNvbGUuZGVidWcgfHwgY29uc29sZS5sb2cgfHwgKCgpID0+IHt9KTtcblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHR0cnkge1xuXHRcdGlmIChuYW1lc3BhY2VzKSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2Uuc2V0SXRlbSgnZGVidWcnLCBuYW1lc3BhY2VzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnJlbW92ZUl0ZW0oJ2RlYnVnJyk7XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRsZXQgcjtcblx0dHJ5IHtcblx0XHRyID0gZXhwb3J0cy5zdG9yYWdlLmdldEl0ZW0oJ2RlYnVnJyk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG5cblx0Ly8gSWYgZGVidWcgaXNuJ3Qgc2V0IGluIExTLCBhbmQgd2UncmUgaW4gRWxlY3Ryb24sIHRyeSB0byBsb2FkICRERUJVR1xuXHRpZiAoIXIgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICdlbnYnIGluIHByb2Nlc3MpIHtcblx0XHRyID0gcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cblxuXHRyZXR1cm4gcjtcbn1cblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG5cdHRyeSB7XG5cdFx0Ly8gVFZNTEtpdCAoQXBwbGUgVFYgSlMgUnVudGltZSkgZG9lcyBub3QgaGF2ZSBhIHdpbmRvdyBvYmplY3QsIGp1c3QgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dFxuXHRcdC8vIFRoZSBCcm93c2VyIGFsc28gaGFzIGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHQuXG5cdFx0cmV0dXJuIGxvY2FsU3RvcmFnZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJWogdG8gYEpTT04uc3RyaW5naWZ5KClgLCBzaW5jZSBubyBXZWIgSW5zcGVjdG9ycyBkbyB0aGF0IGJ5IGRlZmF1bHQuXG4gKi9cblxuZm9ybWF0dGVycy5qID0gZnVuY3Rpb24gKHYpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuICdbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogJyArIGVycm9yLm1lc3NhZ2U7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/debug/src/browser.js\n");
|
|
98
|
+
eval("/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = ({\"VITE_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"VITE_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"VITE_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"VITE_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"VITE_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"VITE_APP_PORTAL_URL\":\"\",\"VITE_APP_PLUS_LP\":\"https://plus.excalidraw.com\",\"VITE_APP_PLUS_APP\":\"https://app.excalidraw.com\",\"VITE_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"VITE_APP_DEV_ENABLE_SW\":\"\",\"VITE_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"VITE_APP_DISABLE_TRACKING\":\"true\",\"FAST_REFRESH\":\"false\",\"VITE_APP_PORT\":\"3000\",\"VITE_APP_DEBUG_ENABLE_TEXT_CONTAINER_BOUNDING_BOX\":\"\",\"VITE_APP_COLLAPSE_OVERLAY\":\"true\",\"VITE_APP_ENABLE_ESLINT\":\"true\",\"VITE_PKG_NAME\":\"@excalidraw/excalidraw\",\"VITE_PKG_VERSION\":\"0.16.1-6920-d3d0bd0\",\"VITE_IS_EXCALIDRAW_NPM_PACKAGE\":true}).DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = __webpack_require__(/*! ./common */ \"../../../node_modules/debug/src/common.js\")(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9icm93c2VyLmpzLmpzIiwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEIsWUFBWTtBQUNaLFlBQVk7QUFDWixpQkFBaUI7QUFDakIsZUFBZTtBQUNmLGVBQWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNENBQTRDOztBQUV2RDtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU0sbXJDQUFXO0FBQ2pCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLDJEQUFVOztBQUVuQyxPQUFPLFlBQVk7O0FBRW5CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvYnJvd3Nlci5qcz9mOGUyIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIHdlYiBicm93c2VyIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuc3RvcmFnZSA9IGxvY2Fsc3RvcmFnZSgpO1xuZXhwb3J0cy5kZXN0cm95ID0gKCgpID0+IHtcblx0bGV0IHdhcm5lZCA9IGZhbHNlO1xuXG5cdHJldHVybiAoKSA9PiB7XG5cdFx0aWYgKCF3YXJuZWQpIHtcblx0XHRcdHdhcm5lZCA9IHRydWU7XG5cdFx0XHRjb25zb2xlLndhcm4oJ0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nKTtcblx0XHR9XG5cdH07XG59KSgpO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFtcblx0JyMwMDAwQ0MnLFxuXHQnIzAwMDBGRicsXG5cdCcjMDAzM0NDJyxcblx0JyMwMDMzRkYnLFxuXHQnIzAwNjZDQycsXG5cdCcjMDA2NkZGJyxcblx0JyMwMDk5Q0MnLFxuXHQnIzAwOTlGRicsXG5cdCcjMDBDQzAwJyxcblx0JyMwMENDMzMnLFxuXHQnIzAwQ0M2NicsXG5cdCcjMDBDQzk5Jyxcblx0JyMwMENDQ0MnLFxuXHQnIzAwQ0NGRicsXG5cdCcjMzMwMENDJyxcblx0JyMzMzAwRkYnLFxuXHQnIzMzMzNDQycsXG5cdCcjMzMzM0ZGJyxcblx0JyMzMzY2Q0MnLFxuXHQnIzMzNjZGRicsXG5cdCcjMzM5OUNDJyxcblx0JyMzMzk5RkYnLFxuXHQnIzMzQ0MwMCcsXG5cdCcjMzNDQzMzJyxcblx0JyMzM0NDNjYnLFxuXHQnIzMzQ0M5OScsXG5cdCcjMzNDQ0NDJyxcblx0JyMzM0NDRkYnLFxuXHQnIzY2MDBDQycsXG5cdCcjNjYwMEZGJyxcblx0JyM2NjMzQ0MnLFxuXHQnIzY2MzNGRicsXG5cdCcjNjZDQzAwJyxcblx0JyM2NkNDMzMnLFxuXHQnIzk5MDBDQycsXG5cdCcjOTkwMEZGJyxcblx0JyM5OTMzQ0MnLFxuXHQnIzk5MzNGRicsXG5cdCcjOTlDQzAwJyxcblx0JyM5OUNDMzMnLFxuXHQnI0NDMDAwMCcsXG5cdCcjQ0MwMDMzJyxcblx0JyNDQzAwNjYnLFxuXHQnI0NDMDA5OScsXG5cdCcjQ0MwMENDJyxcblx0JyNDQzAwRkYnLFxuXHQnI0NDMzMwMCcsXG5cdCcjQ0MzMzMzJyxcblx0JyNDQzMzNjYnLFxuXHQnI0NDMzM5OScsXG5cdCcjQ0MzM0NDJyxcblx0JyNDQzMzRkYnLFxuXHQnI0NDNjYwMCcsXG5cdCcjQ0M2NjMzJyxcblx0JyNDQzk5MDAnLFxuXHQnI0NDOTkzMycsXG5cdCcjQ0NDQzAwJyxcblx0JyNDQ0NDMzMnLFxuXHQnI0ZGMDAwMCcsXG5cdCcjRkYwMDMzJyxcblx0JyNGRjAwNjYnLFxuXHQnI0ZGMDA5OScsXG5cdCcjRkYwMENDJyxcblx0JyNGRjAwRkYnLFxuXHQnI0ZGMzMwMCcsXG5cdCcjRkYzMzMzJyxcblx0JyNGRjMzNjYnLFxuXHQnI0ZGMzM5OScsXG5cdCcjRkYzM0NDJyxcblx0JyNGRjMzRkYnLFxuXHQnI0ZGNjYwMCcsXG5cdCcjRkY2NjMzJyxcblx0JyNGRjk5MDAnLFxuXHQnI0ZGOTkzMycsXG5cdCcjRkZDQzAwJyxcblx0JyNGRkNDMzMnXG5dO1xuXG4vKipcbiAqIEN1cnJlbnRseSBvbmx5IFdlYktpdC1iYXNlZCBXZWIgSW5zcGVjdG9ycywgRmlyZWZveCA+PSB2MzEsXG4gKiBhbmQgdGhlIEZpcmVidWcgZXh0ZW5zaW9uIChhbnkgRmlyZWZveCB2ZXJzaW9uKSBhcmUga25vd25cbiAqIHRvIHN1cHBvcnQgXCIlY1wiIENTUyBjdXN0b21pemF0aW9ucy5cbiAqXG4gKiBUT0RPOiBhZGQgYSBgbG9jYWxTdG9yYWdlYCB2YXJpYWJsZSB0byBleHBsaWNpdGx5IGVuYWJsZS9kaXNhYmxlIGNvbG9yc1xuICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiB1c2VDb2xvcnMoKSB7XG5cdC8vIE5COiBJbiBhbiBFbGVjdHJvbiBwcmVsb2FkIHNjcmlwdCwgZG9jdW1lbnQgd2lsbCBiZSBkZWZpbmVkIGJ1dCBub3QgZnVsbHlcblx0Ly8gaW5pdGlhbGl6ZWQuIFNpbmNlIHdlIGtub3cgd2UncmUgaW4gQ2hyb21lLCB3ZSdsbCBqdXN0IGRldGVjdCB0aGlzIGNhc2Vcblx0Ly8gZXhwbGljaXRseVxuXHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnByb2Nlc3MgJiYgKHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicgfHwgd2luZG93LnByb2Nlc3MuX19ud2pzKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Ly8gSW50ZXJuZXQgRXhwbG9yZXIgYW5kIEVkZ2UgZG8gbm90IHN1cHBvcnQgY29sb3JzLlxuXHRpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhlZGdlfHRyaWRlbnQpXFwvKFxcZCspLykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBJcyB3ZWJraXQ/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE2NDU5NjA2LzM3Njc3M1xuXHQvLyBkb2N1bWVudCBpcyB1bmRlZmluZWQgaW4gcmVhY3QtbmF0aXZlOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL3B1bGwvMTYzMlxuXHRyZXR1cm4gKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuV2Via2l0QXBwZWFyYW5jZSkgfHxcblx0XHQvLyBJcyBmaXJlYnVnPyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zOTgxMjAvMzc2NzczXG5cdFx0KHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5jb25zb2xlICYmICh3aW5kb3cuY29uc29sZS5maXJlYnVnIHx8ICh3aW5kb3cuY29uc29sZS5leGNlcHRpb24gJiYgd2luZG93LmNvbnNvbGUudGFibGUpKSkgfHxcblx0XHQvLyBJcyBmaXJlZm94ID49IHYzMT9cblx0XHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1Rvb2xzL1dlYl9Db25zb2xlI1N0eWxpbmdfbWVzc2FnZXNcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSAmJiBwYXJzZUludChSZWdFeHAuJDEsIDEwKSA+PSAzMSkgfHxcblx0XHQvLyBEb3VibGUgY2hlY2sgd2Via2l0IGluIHVzZXJBZ2VudCBqdXN0IGluIGNhc2Ugd2UgYXJlIGluIGEgd29ya2VyXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcHBsZXdlYmtpdFxcLyhcXGQrKS8pKTtcbn1cblxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0YXJnc1swXSA9ICh0aGlzLnVzZUNvbG9ycyA/ICclYycgOiAnJykgK1xuXHRcdHRoaXMubmFtZXNwYWNlICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnICVjJyA6ICcgJykgK1xuXHRcdGFyZ3NbMF0gK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICclYyAnIDogJyAnKSArXG5cdFx0JysnICsgbW9kdWxlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKTtcblxuXHRpZiAoIXRoaXMudXNlQ29sb3JzKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgYyA9ICdjb2xvcjogJyArIHRoaXMuY29sb3I7XG5cdGFyZ3Muc3BsaWNlKDEsIDAsIGMsICdjb2xvcjogaW5oZXJpdCcpO1xuXG5cdC8vIFRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG5cdC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cblx0Ly8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG5cdGxldCBpbmRleCA9IDA7XG5cdGxldCBsYXN0QyA9IDA7XG5cdGFyZ3NbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLCBtYXRjaCA9PiB7XG5cdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGluZGV4Kys7XG5cdFx0aWYgKG1hdGNoID09PSAnJWMnKSB7XG5cdFx0XHQvLyBXZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcblx0XHRcdC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG5cdFx0XHRsYXN0QyA9IGluZGV4O1xuXHRcdH1cblx0fSk7XG5cblx0YXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUuZGVidWcoKWAgd2hlbiBhdmFpbGFibGUuXG4gKiBOby1vcCB3aGVuIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYSBcImZ1bmN0aW9uXCIuXG4gKiBJZiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGF2YWlsYWJsZSwgZmFsbHMgYmFja1xuICogdG8gYGNvbnNvbGUubG9nYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5leHBvcnRzLmxvZyA9IGNvbnNvbGUuZGVidWcgfHwgY29uc29sZS5sb2cgfHwgKCgpID0+IHt9KTtcblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHR0cnkge1xuXHRcdGlmIChuYW1lc3BhY2VzKSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2Uuc2V0SXRlbSgnZGVidWcnLCBuYW1lc3BhY2VzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnJlbW92ZUl0ZW0oJ2RlYnVnJyk7XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRsZXQgcjtcblx0dHJ5IHtcblx0XHRyID0gZXhwb3J0cy5zdG9yYWdlLmdldEl0ZW0oJ2RlYnVnJyk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG5cblx0Ly8gSWYgZGVidWcgaXNuJ3Qgc2V0IGluIExTLCBhbmQgd2UncmUgaW4gRWxlY3Ryb24sIHRyeSB0byBsb2FkICRERUJVR1xuXHRpZiAoIXIgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICdlbnYnIGluIHByb2Nlc3MpIHtcblx0XHRyID0gcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cblxuXHRyZXR1cm4gcjtcbn1cblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG5cdHRyeSB7XG5cdFx0Ly8gVFZNTEtpdCAoQXBwbGUgVFYgSlMgUnVudGltZSkgZG9lcyBub3QgaGF2ZSBhIHdpbmRvdyBvYmplY3QsIGp1c3QgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dFxuXHRcdC8vIFRoZSBCcm93c2VyIGFsc28gaGFzIGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHQuXG5cdFx0cmV0dXJuIGxvY2FsU3RvcmFnZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJWogdG8gYEpTT04uc3RyaW5naWZ5KClgLCBzaW5jZSBubyBXZWIgSW5zcGVjdG9ycyBkbyB0aGF0IGJ5IGRlZmF1bHQuXG4gKi9cblxuZm9ybWF0dGVycy5qID0gZnVuY3Rpb24gKHYpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuICdbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogJyArIGVycm9yLm1lc3NhZ2U7XG5cdH1cbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/debug/src/browser.js\n");
|
|
99
99
|
|
|
100
100
|
/***/ }),
|
|
101
101
|
|
|
@@ -320,7 +320,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
320
320
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
321
321
|
|
|
322
322
|
"use strict";
|
|
323
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SequenceToExcalidrawSkeletonConvertor\": () => (/* binding */ SequenceToExcalidrawSkeletonConvertor)\n/* harmony export */ });\n/* harmony import */ var _GraphConverter_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GraphConverter.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/GraphConverter.js\");\n/* harmony import */ var nanoid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! nanoid */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/node_modules/nanoid/index.browser.js\");\n\n\n// Arrow mapper for the supported sequence arrow types\nconst EXCALIDRAW_STROKE_STYLE_FOR_ARROW = {\n SOLID: \"solid\",\n DOTTED: \"dotted\",\n SOLID_CROSS: \"solid\",\n DOTTED_CROSS: \"dotted\",\n SOLID_OPEN: \"solid\",\n DOTTED_OPEN: \"dotted\",\n SOLID_POINT: \"solid\",\n DOTTED_POINT: \"dotted\",\n};\nconst createLine = (line) => {\n const lineElement = {\n type: \"line\",\n x: line.startX,\n y: line.startY,\n points: [\n [0, 0],\n [line.endX - line.startX, line.endY - line.startY],\n ],\n width: line.endX - line.startX,\n height: line.endY - line.startY,\n strokeStyle: line.strokeStyle || \"solid\",\n strokeColor: line.strokeColor || \"#000\",\n strokeWidth: line.strokeWidth || 1,\n };\n if (line.groupId) {\n Object.assign(lineElement, { groupIds: [line.groupId] });\n }\n if (line.id) {\n Object.assign(lineElement, { id: line.id });\n }\n return lineElement;\n};\nconst createText = (element) => {\n const textElement = {\n type: \"text\",\n x: element.x,\n y: element.y,\n width: element.width,\n height: element.height,\n text: element.text || \"\",\n fontSize: element.fontSize,\n verticalAlign: \"middle\",\n };\n if (element.groupId) {\n Object.assign(textElement, { groupIds: [element.groupId] });\n }\n if (element.id) {\n Object.assign(textElement, { id: element.id });\n }\n return textElement;\n};\nconst createContainer = (element) => {\n let extraProps = {};\n if (element.type === \"rectangle\" && element.subtype === \"activation\") {\n extraProps = {\n backgroundColor: \"#e9ecef\",\n fillStyle: \"solid\",\n };\n }\n const container = {\n id: element.id,\n type: element.type,\n x: element.x,\n y: element.y,\n width: element.width,\n height: element.height,\n label: {\n text: element?.label?.text || \"\",\n fontSize: element?.label?.fontSize,\n verticalAlign: \"middle\",\n strokeColor: element.label?.color || \"#000\",\n },\n strokeStyle: element?.strokeStyle,\n strokeWidth: element?.strokeWidth,\n strokeColor: element?.strokeColor,\n backgroundColor: element?.bgColor,\n fillStyle: \"solid\",\n ...extraProps,\n };\n if (element.groupId) {\n Object.assign(container, { groupIds: [element.groupId] });\n }\n return container;\n};\nconst createArrow = (arrow) => {\n const strokeStyle = EXCALIDRAW_STROKE_STYLE_FOR_ARROW[arrow.strokeStyle];\n const arrowElement = {\n type: \"arrow\",\n x: arrow.startX,\n y: arrow.startY,\n points: arrow.points || [\n [0, 0],\n [arrow.endX - arrow.startX, arrow.endY - arrow.startY],\n ],\n width: arrow.endX - arrow.startX,\n height: arrow.endY - arrow.startY,\n strokeStyle,\n endArrowhead: arrow.strokeStyle === \"SOLID_OPEN\" || arrow.strokeStyle === \"DOTTED_OPEN\"\n ? null\n : \"arrow\",\n label: {\n text: arrow?.label?.text || \"\",\n fontSize: 16,\n },\n roundness: {\n type: 2,\n },\n };\n if (arrow.groupId) {\n Object.assign(arrowElement, { groupIds: [arrow.groupId] });\n }\n return arrowElement;\n};\nconst SequenceToExcalidrawSkeletonConvertor = new _GraphConverter_js__WEBPACK_IMPORTED_MODULE_0__.GraphConverter({\n converter: (chart) => {\n const elements = [];\n const activations = [];\n Object.values(chart.nodes).forEach((node) => {\n if (!node || !node.length) {\n return;\n }\n node.forEach((element) => {\n let excalidrawElement;\n switch (element.type) {\n case \"line\":\n excalidrawElement = createLine(element);\n break;\n case \"rectangle\":\n case \"ellipse\":\n excalidrawElement = createContainer(element);\n break;\n case \"text\":\n excalidrawElement = createText(element);\n break;\n default:\n throw `unknown type ${element.type}`;\n break;\n }\n if (element.type === \"rectangle\" && element?.subtype === \"activation\") {\n activations.push(excalidrawElement);\n }\n else {\n elements.push(excalidrawElement);\n }\n });\n });\n Object.values(chart.lines).forEach((line) => {\n if (!line) {\n return;\n }\n elements.push(createLine(line));\n });\n Object.values(chart.arrows).forEach((arrow) => {\n if (!arrow) {\n return;\n }\n elements.push(createArrow(arrow));\n if (arrow.sequenceNumber) {\n elements.push(createContainer(arrow.sequenceNumber));\n }\n });\n elements.push(...activations);\n // loops\n if (chart.loops) {\n const { lines, texts, nodes } = chart.loops;\n lines.forEach((line) => {\n elements.push(createLine(line));\n });\n texts.forEach((text) => {\n elements.push(createText(text));\n });\n nodes.forEach((node) => {\n elements.push(createContainer(node));\n });\n }\n if (chart.groups) {\n chart.groups.forEach((group) => {\n const { actorKeys, name } = group;\n let minX = Infinity;\n let minY = Infinity;\n let maxX = 0;\n let maxY = 0;\n if (!actorKeys.length) {\n return;\n }\n const actors = elements.filter((ele) => {\n if (ele.id) {\n const hyphenIndex = ele.id.indexOf(\"-\");\n const id = ele.id.substring(0, hyphenIndex);\n return actorKeys.includes(id);\n }\n });\n actors.forEach((actor) => {\n minX = Math.min(minX, actor.x);\n minY = Math.min(minY, actor.y);\n maxX = Math.max(maxX, actor.x + actor.width);\n maxY = Math.max(maxY, actor.y + actor.height);\n });\n // Draw the outer rectangle enclosing the group elements\n const PADDING = 10;\n const groupRectX = minX - PADDING;\n const groupRectY = minY - PADDING;\n const groupRectWidth = maxX - minX + PADDING * 2;\n const groupRectHeight = maxY - minY + PADDING * 2;\n const groupRect = createContainer({\n type: \"rectangle\",\n x: groupRectX,\n y: groupRectY,\n width: groupRectWidth,\n height: groupRectHeight,\n bgColor: group.fill,\n });\n elements.unshift(groupRect);\n const frameId = (0,nanoid__WEBPACK_IMPORTED_MODULE_1__.nanoid)();\n // compute frame coordinates and dimensions\n const frameWidth = groupRectWidth + PADDING * 2;\n const frameHeight = groupRectHeight + PADDING * 2;\n const frameX1 = groupRectX - PADDING;\n const frameY1 = groupRectY - PADDING;\n const frameX2 = frameX1 + frameWidth;\n const frameY2 = frameY1 + frameHeight;\n elements.forEach((ele) => {\n if (ele.x >= frameX1 &&\n ele.x + ele.width <= frameX2 &&\n ele.y >= frameY1 &&\n ele.y + ele.height <= frameY2) {\n Object.assign(ele, { frameId });\n if (ele?.label?.text) {\n Object.assign(ele, {\n label: { ...ele.label, frameId },\n });\n }\n }\n });\n // TODO remove extra attributes once we support frames in programmatic API\n const frame = {\n type: \"frame\",\n version: 262,\n versionNonce: 1383486180,\n isDeleted: false,\n id: frameId,\n fillStyle: \"solid\",\n strokeWidth: 1,\n strokeStyle: \"solid\",\n roughness: 0,\n opacity: 100,\n angle: 0,\n x: frameX1,\n y: frameY1,\n strokeColor: \"#bbb\",\n backgroundColor: \"transparent\",\n width: frameWidth,\n height: frameHeight,\n seed: 1792453604,\n groupIds: [],\n frameId: null,\n roundness: null,\n boundElements: [],\n updated: 1697731885168,\n link: null,\n locked: false,\n name,\n };\n elements.push(frame);\n });\n }\n console.log(elements, \"excalidraw elements\");\n return { elements };\n },\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L2NvbnZlcnRlci90eXBlcy9zZXF1ZW5jZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBc0Q7QUFDdEI7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLDBCQUEwQjtBQUMvRDtBQUNBO0FBQ0EscUNBQXFDLGFBQWE7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLDZCQUE2QjtBQUNsRTtBQUNBO0FBQ0EscUNBQXFDLGdCQUFnQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNkJBQTZCO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLHNDQUFzQywyQkFBMkI7QUFDakU7QUFDQTtBQUNBO0FBQ08sa0RBQWtELDhEQUFjO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxhQUFhO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isc0JBQXNCO0FBQzFDO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixrQkFBa0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGdDQUFnQyw4Q0FBTTtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsU0FBUztBQUN0RDtBQUNBO0FBQ0EseUNBQXlDLHVCQUF1QjtBQUNoRSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixLQUFLO0FBQ0wsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGV4Y2FsaWRyYXcvbWVybWFpZC10by1leGNhbGlkcmF3L2Rpc3QvY29udmVydGVyL3R5cGVzL3NlcXVlbmNlLmpzP2Q3NWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR3JhcGhDb252ZXJ0ZXIgfSBmcm9tIFwiLi4vR3JhcGhDb252ZXJ0ZXIuanNcIjtcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gXCJuYW5vaWRcIjtcbi8vIEFycm93IG1hcHBlciBmb3IgdGhlIHN1cHBvcnRlZCBzZXF1ZW5jZSBhcnJvdyB0eXBlc1xuY29uc3QgRVhDQUxJRFJBV19TVFJPS0VfU1RZTEVfRk9SX0FSUk9XID0ge1xuICAgIFNPTElEOiBcInNvbGlkXCIsXG4gICAgRE9UVEVEOiBcImRvdHRlZFwiLFxuICAgIFNPTElEX0NST1NTOiBcInNvbGlkXCIsXG4gICAgRE9UVEVEX0NST1NTOiBcImRvdHRlZFwiLFxuICAgIFNPTElEX09QRU46IFwic29saWRcIixcbiAgICBET1RURURfT1BFTjogXCJkb3R0ZWRcIixcbiAgICBTT0xJRF9QT0lOVDogXCJzb2xpZFwiLFxuICAgIERPVFRFRF9QT0lOVDogXCJkb3R0ZWRcIixcbn07XG5jb25zdCBjcmVhdGVMaW5lID0gKGxpbmUpID0+IHtcbiAgICBjb25zdCBsaW5lRWxlbWVudCA9IHtcbiAgICAgICAgdHlwZTogXCJsaW5lXCIsXG4gICAgICAgIHg6IGxpbmUuc3RhcnRYLFxuICAgICAgICB5OiBsaW5lLnN0YXJ0WSxcbiAgICAgICAgcG9pbnRzOiBbXG4gICAgICAgICAgICBbMCwgMF0sXG4gICAgICAgICAgICBbbGluZS5lbmRYIC0gbGluZS5zdGFydFgsIGxpbmUuZW5kWSAtIGxpbmUuc3RhcnRZXSxcbiAgICAgICAgXSxcbiAgICAgICAgd2lkdGg6IGxpbmUuZW5kWCAtIGxpbmUuc3RhcnRYLFxuICAgICAgICBoZWlnaHQ6IGxpbmUuZW5kWSAtIGxpbmUuc3RhcnRZLFxuICAgICAgICBzdHJva2VTdHlsZTogbGluZS5zdHJva2VTdHlsZSB8fCBcInNvbGlkXCIsXG4gICAgICAgIHN0cm9rZUNvbG9yOiBsaW5lLnN0cm9rZUNvbG9yIHx8IFwiIzAwMFwiLFxuICAgICAgICBzdHJva2VXaWR0aDogbGluZS5zdHJva2VXaWR0aCB8fCAxLFxuICAgIH07XG4gICAgaWYgKGxpbmUuZ3JvdXBJZCkge1xuICAgICAgICBPYmplY3QuYXNzaWduKGxpbmVFbGVtZW50LCB7IGdyb3VwSWRzOiBbbGluZS5ncm91cElkXSB9KTtcbiAgICB9XG4gICAgaWYgKGxpbmUuaWQpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihsaW5lRWxlbWVudCwgeyBpZDogbGluZS5pZCB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbmVFbGVtZW50O1xufTtcbmNvbnN0IGNyZWF0ZVRleHQgPSAoZWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHRleHRFbGVtZW50ID0ge1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgeDogZWxlbWVudC54LFxuICAgICAgICB5OiBlbGVtZW50LnksXG4gICAgICAgIHdpZHRoOiBlbGVtZW50LndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGVsZW1lbnQuaGVpZ2h0LFxuICAgICAgICB0ZXh0OiBlbGVtZW50LnRleHQgfHwgXCJcIixcbiAgICAgICAgZm9udFNpemU6IGVsZW1lbnQuZm9udFNpemUsXG4gICAgICAgIHZlcnRpY2FsQWxpZ246IFwibWlkZGxlXCIsXG4gICAgfTtcbiAgICBpZiAoZWxlbWVudC5ncm91cElkKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGV4dEVsZW1lbnQsIHsgZ3JvdXBJZHM6IFtlbGVtZW50Lmdyb3VwSWRdIH0pO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5pZCkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRleHRFbGVtZW50LCB7IGlkOiBlbGVtZW50LmlkIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGV4dEVsZW1lbnQ7XG59O1xuY29uc3QgY3JlYXRlQ29udGFpbmVyID0gKGVsZW1lbnQpID0+IHtcbiAgICBsZXQgZXh0cmFQcm9wcyA9IHt9O1xuICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFwicmVjdGFuZ2xlXCIgJiYgZWxlbWVudC5zdWJ0eXBlID09PSBcImFjdGl2YXRpb25cIikge1xuICAgICAgICBleHRyYVByb3BzID0ge1xuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiNlOWVjZWZcIixcbiAgICAgICAgICAgIGZpbGxTdHlsZTogXCJzb2xpZFwiLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBjb250YWluZXIgPSB7XG4gICAgICAgIGlkOiBlbGVtZW50LmlkLFxuICAgICAgICB0eXBlOiBlbGVtZW50LnR5cGUsXG4gICAgICAgIHg6IGVsZW1lbnQueCxcbiAgICAgICAgeTogZWxlbWVudC55LFxuICAgICAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgIHRleHQ6IGVsZW1lbnQ/LmxhYmVsPy50ZXh0IHx8IFwiXCIsXG4gICAgICAgICAgICBmb250U2l6ZTogZWxlbWVudD8ubGFiZWw/LmZvbnRTaXplLFxuICAgICAgICAgICAgdmVydGljYWxBbGlnbjogXCJtaWRkbGVcIixcbiAgICAgICAgICAgIHN0cm9rZUNvbG9yOiBlbGVtZW50LmxhYmVsPy5jb2xvciB8fCBcIiMwMDBcIixcbiAgICAgICAgfSxcbiAgICAgICAgc3Ryb2tlU3R5bGU6IGVsZW1lbnQ/LnN0cm9rZVN0eWxlLFxuICAgICAgICBzdHJva2VXaWR0aDogZWxlbWVudD8uc3Ryb2tlV2lkdGgsXG4gICAgICAgIHN0cm9rZUNvbG9yOiBlbGVtZW50Py5zdHJva2VDb2xvcixcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBlbGVtZW50Py5iZ0NvbG9yLFxuICAgICAgICBmaWxsU3R5bGU6IFwic29saWRcIixcbiAgICAgICAgLi4uZXh0cmFQcm9wcyxcbiAgICB9O1xuICAgIGlmIChlbGVtZW50Lmdyb3VwSWQpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihjb250YWluZXIsIHsgZ3JvdXBJZHM6IFtlbGVtZW50Lmdyb3VwSWRdIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY29udGFpbmVyO1xufTtcbmNvbnN0IGNyZWF0ZUFycm93ID0gKGFycm93KSA9PiB7XG4gICAgY29uc3Qgc3Ryb2tlU3R5bGUgPSBFWENBTElEUkFXX1NUUk9LRV9TVFlMRV9GT1JfQVJST1dbYXJyb3cuc3Ryb2tlU3R5bGVdO1xuICAgIGNvbnN0IGFycm93RWxlbWVudCA9IHtcbiAgICAgICAgdHlwZTogXCJhcnJvd1wiLFxuICAgICAgICB4OiBhcnJvdy5zdGFydFgsXG4gICAgICAgIHk6IGFycm93LnN0YXJ0WSxcbiAgICAgICAgcG9pbnRzOiBhcnJvdy5wb2ludHMgfHwgW1xuICAgICAgICAgICAgWzAsIDBdLFxuICAgICAgICAgICAgW2Fycm93LmVuZFggLSBhcnJvdy5zdGFydFgsIGFycm93LmVuZFkgLSBhcnJvdy5zdGFydFldLFxuICAgICAgICBdLFxuICAgICAgICB3aWR0aDogYXJyb3cuZW5kWCAtIGFycm93LnN0YXJ0WCxcbiAgICAgICAgaGVpZ2h0OiBhcnJvdy5lbmRZIC0gYXJyb3cuc3RhcnRZLFxuICAgICAgICBzdHJva2VTdHlsZSxcbiAgICAgICAgZW5kQXJyb3doZWFkOiBhcnJvdy5zdHJva2VTdHlsZSA9PT0gXCJTT0xJRF9PUEVOXCIgfHwgYXJyb3cuc3Ryb2tlU3R5bGUgPT09IFwiRE9UVEVEX09QRU5cIlxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IFwiYXJyb3dcIixcbiAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgIHRleHQ6IGFycm93Py5sYWJlbD8udGV4dCB8fCBcIlwiLFxuICAgICAgICAgICAgZm9udFNpemU6IDE2LFxuICAgICAgICB9LFxuICAgICAgICByb3VuZG5lc3M6IHtcbiAgICAgICAgICAgIHR5cGU6IDIsXG4gICAgICAgIH0sXG4gICAgfTtcbiAgICBpZiAoYXJyb3cuZ3JvdXBJZCkge1xuICAgICAgICBPYmplY3QuYXNzaWduKGFycm93RWxlbWVudCwgeyBncm91cElkczogW2Fycm93Lmdyb3VwSWRdIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYXJyb3dFbGVtZW50O1xufTtcbmV4cG9ydCBjb25zdCBTZXF1ZW5jZVRvRXhjYWxpZHJhd1NrZWxldG9uQ29udmVydG9yID0gbmV3IEdyYXBoQ29udmVydGVyKHtcbiAgICBjb252ZXJ0ZXI6IChjaGFydCkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IFtdO1xuICAgICAgICBjb25zdCBhY3RpdmF0aW9ucyA9IFtdO1xuICAgICAgICBPYmplY3QudmFsdWVzKGNoYXJ0Lm5vZGVzKS5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9kZS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGV4Y2FsaWRyYXdFbGVtZW50O1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJsaW5lXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBleGNhbGlkcmF3RWxlbWVudCA9IGNyZWF0ZUxpbmUoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInJlY3RhbmdsZVwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZWxsaXBzZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgZXhjYWxpZHJhd0VsZW1lbnQgPSBjcmVhdGVDb250YWluZXIoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2FsaWRyYXdFbGVtZW50ID0gY3JlYXRlVGV4dChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYHVua25vd24gdHlwZSAke2VsZW1lbnQudHlwZX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFwicmVjdGFuZ2xlXCIgJiYgZWxlbWVudD8uc3VidHlwZSA9PT0gXCJhY3RpdmF0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZhdGlvbnMucHVzaChleGNhbGlkcmF3RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKGV4Y2FsaWRyYXdFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC52YWx1ZXMoY2hhcnQubGluZXMpLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICAgICAgICAgIGlmICghbGluZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goY3JlYXRlTGluZShsaW5lKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QudmFsdWVzKGNoYXJ0LmFycm93cykuZm9yRWFjaCgoYXJyb3cpID0+IHtcbiAgICAgICAgICAgIGlmICghYXJyb3cpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKGNyZWF0ZUFycm93KGFycm93KSk7XG4gICAgICAgICAgICBpZiAoYXJyb3cuc2VxdWVuY2VOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKGNyZWF0ZUNvbnRhaW5lcihhcnJvdy5zZXF1ZW5jZU51bWJlcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudHMucHVzaCguLi5hY3RpdmF0aW9ucyk7XG4gICAgICAgIC8vIGxvb3BzXG4gICAgICAgIGlmIChjaGFydC5sb29wcykge1xuICAgICAgICAgICAgY29uc3QgeyBsaW5lcywgdGV4dHMsIG5vZGVzIH0gPSBjaGFydC5sb29wcztcbiAgICAgICAgICAgIGxpbmVzLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKGNyZWF0ZUxpbmUobGluZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0ZXh0cy5mb3JFYWNoKCh0ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChjcmVhdGVUZXh0KHRleHQpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goY3JlYXRlQ29udGFpbmVyKG5vZGUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFydC5ncm91cHMpIHtcbiAgICAgICAgICAgIGNoYXJ0Lmdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgYWN0b3JLZXlzLCBuYW1lIH0gPSBncm91cDtcbiAgICAgICAgICAgICAgICBsZXQgbWluWCA9IEluZmluaXR5O1xuICAgICAgICAgICAgICAgIGxldCBtaW5ZID0gSW5maW5pdHk7XG4gICAgICAgICAgICAgICAgbGV0IG1heFggPSAwO1xuICAgICAgICAgICAgICAgIGxldCBtYXhZID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoIWFjdG9yS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBhY3RvcnMgPSBlbGVtZW50cy5maWx0ZXIoKGVsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoeXBoZW5JbmRleCA9IGVsZS5pZC5pbmRleE9mKFwiLVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gZWxlLmlkLnN1YnN0cmluZygwLCBoeXBoZW5JbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWN0b3JLZXlzLmluY2x1ZGVzKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFjdG9ycy5mb3JFYWNoKChhY3RvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgYWN0b3IueCk7XG4gICAgICAgICAgICAgICAgICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCBhY3Rvci55KTtcbiAgICAgICAgICAgICAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIGFjdG9yLnggKyBhY3Rvci53aWR0aCk7XG4gICAgICAgICAgICAgICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBhY3Rvci55ICsgYWN0b3IuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBEcmF3IHRoZSBvdXRlciByZWN0YW5nbGUgZW5jbG9zaW5nIHRoZSBncm91cCBlbGVtZW50c1xuICAgICAgICAgICAgICAgIGNvbnN0IFBBRERJTkcgPSAxMDtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cFJlY3RYID0gbWluWCAtIFBBRERJTkc7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBSZWN0WSA9IG1pblkgLSBQQURESU5HO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwUmVjdFdpZHRoID0gbWF4WCAtIG1pblggKyBQQURESU5HICogMjtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cFJlY3RIZWlnaHQgPSBtYXhZIC0gbWluWSArIFBBRERJTkcgKiAyO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwUmVjdCA9IGNyZWF0ZUNvbnRhaW5lcih7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicmVjdGFuZ2xlXCIsXG4gICAgICAgICAgICAgICAgICAgIHg6IGdyb3VwUmVjdFgsXG4gICAgICAgICAgICAgICAgICAgIHk6IGdyb3VwUmVjdFksXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBncm91cFJlY3RXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBncm91cFJlY3RIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIGJnQ29sb3I6IGdyb3VwLmZpbGwsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZWxlbWVudHMudW5zaGlmdChncm91cFJlY3QpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZyYW1lSWQgPSBuYW5vaWQoKTtcbiAgICAgICAgICAgICAgICAvLyBjb21wdXRlIGZyYW1lIGNvb3JkaW5hdGVzIGFuZCBkaW1lbnNpb25zXG4gICAgICAgICAgICAgICAgY29uc3QgZnJhbWVXaWR0aCA9IGdyb3VwUmVjdFdpZHRoICsgUEFERElORyAqIDI7XG4gICAgICAgICAgICAgICAgY29uc3QgZnJhbWVIZWlnaHQgPSBncm91cFJlY3RIZWlnaHQgKyBQQURESU5HICogMjtcbiAgICAgICAgICAgICAgICBjb25zdCBmcmFtZVgxID0gZ3JvdXBSZWN0WCAtIFBBRERJTkc7XG4gICAgICAgICAgICAgICAgY29uc3QgZnJhbWVZMSA9IGdyb3VwUmVjdFkgLSBQQURESU5HO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZyYW1lWDIgPSBmcmFtZVgxICsgZnJhbWVXaWR0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBmcmFtZVkyID0gZnJhbWVZMSArIGZyYW1lSGVpZ2h0O1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlLnggPj0gZnJhbWVYMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlLnggKyBlbGUud2lkdGggPD0gZnJhbWVYMiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlLnkgPj0gZnJhbWVZMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlLnkgKyBlbGUuaGVpZ2h0IDw9IGZyYW1lWTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZWxlLCB7IGZyYW1lSWQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlPy5sYWJlbD8udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZWxlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB7IC4uLmVsZS5sYWJlbCwgZnJhbWVJZCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gVE9ETyByZW1vdmUgZXh0cmEgYXR0cmlidXRlcyBvbmNlIHdlIHN1cHBvcnQgZnJhbWVzIGluIHByb2dyYW1tYXRpYyBBUElcbiAgICAgICAgICAgICAgICBjb25zdCBmcmFtZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJmcmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiAyNjIsXG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb25Ob25jZTogMTM4MzQ4NjE4MCxcbiAgICAgICAgICAgICAgICAgICAgaXNEZWxldGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGZyYW1lSWQsXG4gICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogXCJzb2xpZFwiLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlU3R5bGU6IFwic29saWRcIixcbiAgICAgICAgICAgICAgICAgICAgcm91Z2huZXNzOiAwLFxuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxMDAsXG4gICAgICAgICAgICAgICAgICAgIGFuZ2xlOiAwLFxuICAgICAgICAgICAgICAgICAgICB4OiBmcmFtZVgxLFxuICAgICAgICAgICAgICAgICAgICB5OiBmcmFtZVkxLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VDb2xvcjogXCIjYmJiXCIsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogZnJhbWVXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBmcmFtZUhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgc2VlZDogMTc5MjQ1MzYwNCxcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBJZHM6IFtdLFxuICAgICAgICAgICAgICAgICAgICBmcmFtZUlkOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICByb3VuZG5lc3M6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kRWxlbWVudHM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkOiAxNjk3NzMxODg1MTY4LFxuICAgICAgICAgICAgICAgICAgICBsaW5rOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBsb2NrZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChmcmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhlbGVtZW50cywgXCJleGNhbGlkcmF3IGVsZW1lbnRzXCIpO1xuICAgICAgICByZXR1cm4geyBlbGVtZW50cyB9O1xuICAgIH0sXG59KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/types/sequence.js\n");
|
|
323
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SequenceToExcalidrawSkeletonConvertor\": () => (/* binding */ SequenceToExcalidrawSkeletonConvertor)\n/* harmony export */ });\n/* harmony import */ var _GraphConverter_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../GraphConverter.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/GraphConverter.js\");\n/* harmony import */ var nanoid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! nanoid */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/node_modules/nanoid/index.browser.js\");\n\n\n// Arrow mapper for the supported sequence arrow types\nconst EXCALIDRAW_STROKE_STYLE_FOR_ARROW = {\n SOLID: \"solid\",\n DOTTED: \"dotted\",\n SOLID_CROSS: \"solid\",\n DOTTED_CROSS: \"dotted\",\n SOLID_OPEN: \"solid\",\n DOTTED_OPEN: \"dotted\",\n SOLID_POINT: \"solid\",\n DOTTED_POINT: \"dotted\",\n};\nconst createLine = (line) => {\n const lineElement = {\n type: \"line\",\n x: line.startX,\n y: line.startY,\n points: [\n [0, 0],\n [line.endX - line.startX, line.endY - line.startY],\n ],\n width: line.endX - line.startX,\n height: line.endY - line.startY,\n strokeStyle: line.strokeStyle || \"solid\",\n strokeColor: line.strokeColor || \"#000\",\n strokeWidth: line.strokeWidth || 1,\n };\n if (line.groupId) {\n Object.assign(lineElement, { groupIds: [line.groupId] });\n }\n if (line.id) {\n Object.assign(lineElement, { id: line.id });\n }\n return lineElement;\n};\nconst createText = (element) => {\n const textElement = {\n type: \"text\",\n x: element.x,\n y: element.y,\n width: element.width,\n height: element.height,\n text: element.text || \"\",\n fontSize: element.fontSize,\n verticalAlign: \"middle\",\n };\n if (element.groupId) {\n Object.assign(textElement, { groupIds: [element.groupId] });\n }\n if (element.id) {\n Object.assign(textElement, { id: element.id });\n }\n return textElement;\n};\nconst createContainer = (element) => {\n let extraProps = {};\n if (element.type === \"rectangle\" && element.subtype === \"activation\") {\n extraProps = {\n backgroundColor: \"#e9ecef\",\n fillStyle: \"solid\",\n };\n }\n const container = {\n id: element.id,\n type: element.type,\n x: element.x,\n y: element.y,\n width: element.width,\n height: element.height,\n label: {\n text: element?.label?.text || \"\",\n fontSize: element?.label?.fontSize,\n verticalAlign: \"middle\",\n strokeColor: element.label?.color || \"#000\",\n },\n strokeStyle: element?.strokeStyle,\n strokeWidth: element?.strokeWidth,\n strokeColor: element?.strokeColor,\n backgroundColor: element?.bgColor,\n fillStyle: \"solid\",\n ...extraProps,\n };\n if (element.groupId) {\n Object.assign(container, { groupIds: [element.groupId] });\n }\n return container;\n};\nconst createArrow = (arrow) => {\n const strokeStyle = EXCALIDRAW_STROKE_STYLE_FOR_ARROW[arrow.strokeStyle];\n const arrowElement = {\n type: \"arrow\",\n x: arrow.startX,\n y: arrow.startY,\n points: arrow.points || [\n [0, 0],\n [arrow.endX - arrow.startX, arrow.endY - arrow.startY],\n ],\n width: arrow.endX - arrow.startX,\n height: arrow.endY - arrow.startY,\n strokeStyle,\n endArrowhead: arrow.strokeStyle === \"SOLID_OPEN\" || arrow.strokeStyle === \"DOTTED_OPEN\"\n ? null\n : \"arrow\",\n label: {\n text: arrow?.label?.text || \"\",\n fontSize: 16,\n },\n roundness: {\n type: 2,\n },\n };\n if (arrow.groupId) {\n Object.assign(arrowElement, { groupIds: [arrow.groupId] });\n }\n return arrowElement;\n};\nconst SequenceToExcalidrawSkeletonConvertor = new _GraphConverter_js__WEBPACK_IMPORTED_MODULE_0__.GraphConverter({\n converter: (chart) => {\n const elements = [];\n const activations = [];\n Object.values(chart.nodes).forEach((node) => {\n if (!node || !node.length) {\n return;\n }\n node.forEach((element) => {\n let excalidrawElement;\n switch (element.type) {\n case \"line\":\n excalidrawElement = createLine(element);\n break;\n case \"rectangle\":\n case \"ellipse\":\n excalidrawElement = createContainer(element);\n break;\n case \"text\":\n excalidrawElement = createText(element);\n break;\n default:\n throw `unknown type ${element.type}`;\n break;\n }\n if (element.type === \"rectangle\" && element?.subtype === \"activation\") {\n activations.push(excalidrawElement);\n }\n else {\n elements.push(excalidrawElement);\n }\n });\n });\n Object.values(chart.lines).forEach((line) => {\n if (!line) {\n return;\n }\n elements.push(createLine(line));\n });\n Object.values(chart.arrows).forEach((arrow) => {\n if (!arrow) {\n return;\n }\n elements.push(createArrow(arrow));\n if (arrow.sequenceNumber) {\n elements.push(createContainer(arrow.sequenceNumber));\n }\n });\n elements.push(...activations);\n // loops\n if (chart.loops) {\n const { lines, texts, nodes } = chart.loops;\n lines.forEach((line) => {\n elements.push(createLine(line));\n });\n texts.forEach((text) => {\n elements.push(createText(text));\n });\n nodes.forEach((node) => {\n elements.push(createContainer(node));\n });\n }\n if (chart.groups) {\n chart.groups.forEach((group) => {\n const { actorKeys, name } = group;\n let minX = Infinity;\n let minY = Infinity;\n let maxX = 0;\n let maxY = 0;\n if (!actorKeys.length) {\n return;\n }\n const actors = elements.filter((ele) => {\n if (ele.id) {\n const hyphenIndex = ele.id.indexOf(\"-\");\n const id = ele.id.substring(0, hyphenIndex);\n return actorKeys.includes(id);\n }\n });\n actors.forEach((actor) => {\n minX = Math.min(minX, actor.x);\n minY = Math.min(minY, actor.y);\n maxX = Math.max(maxX, actor.x + actor.width);\n maxY = Math.max(maxY, actor.y + actor.height);\n });\n // Draw the outer rectangle enclosing the group elements\n const PADDING = 10;\n const groupRectX = minX - PADDING;\n const groupRectY = minY - PADDING;\n const groupRectWidth = maxX - minX + PADDING * 2;\n const groupRectHeight = maxY - minY + PADDING * 2;\n const groupRect = createContainer({\n type: \"rectangle\",\n x: groupRectX,\n y: groupRectY,\n width: groupRectWidth,\n height: groupRectHeight,\n bgColor: group.fill,\n });\n elements.unshift(groupRect);\n const frameId = (0,nanoid__WEBPACK_IMPORTED_MODULE_1__.nanoid)();\n // compute frame coordinates and dimensions\n const frameWidth = groupRectWidth + PADDING * 2;\n const frameHeight = groupRectHeight + PADDING * 2;\n const frameX1 = groupRectX - PADDING;\n const frameY1 = groupRectY - PADDING;\n const frameX2 = frameX1 + frameWidth;\n const frameY2 = frameY1 + frameHeight;\n elements.forEach((ele) => {\n if (ele.x >= frameX1 &&\n ele.x + ele.width <= frameX2 &&\n ele.y >= frameY1 &&\n ele.y + ele.height <= frameY2) {\n Object.assign(ele, { frameId });\n if (ele?.label?.text) {\n Object.assign(ele, {\n label: { ...ele.label, frameId },\n });\n }\n }\n });\n // TODO remove extra attributes once we support frames in programmatic API\n const frame = {\n type: \"frame\",\n version: 262,\n versionNonce: 1383486180,\n isDeleted: false,\n id: frameId,\n fillStyle: \"solid\",\n strokeWidth: 1,\n strokeStyle: \"solid\",\n roughness: 0,\n opacity: 100,\n angle: 0,\n x: frameX1,\n y: frameY1,\n strokeColor: \"#bbb\",\n backgroundColor: \"transparent\",\n width: frameWidth,\n height: frameHeight,\n seed: 1792453604,\n groupIds: [],\n frameId: null,\n roundness: null,\n boundElements: [],\n updated: 1697731885168,\n link: null,\n locked: false,\n name,\n };\n elements.push(frame);\n });\n }\n return { elements };\n },\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L2NvbnZlcnRlci90eXBlcy9zZXF1ZW5jZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBc0Q7QUFDdEI7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLDBCQUEwQjtBQUMvRDtBQUNBO0FBQ0EscUNBQXFDLGFBQWE7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLDZCQUE2QjtBQUNsRTtBQUNBO0FBQ0EscUNBQXFDLGdCQUFnQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsNkJBQTZCO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLHNDQUFzQywyQkFBMkI7QUFDakU7QUFDQTtBQUNBO0FBQ08sa0RBQWtELDhEQUFjO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxhQUFhO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isc0JBQXNCO0FBQzFDO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixrQkFBa0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGdDQUFnQyw4Q0FBTTtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsU0FBUztBQUN0RDtBQUNBO0FBQ0EseUNBQXlDLHVCQUF1QjtBQUNoRSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxpQkFBaUI7QUFDakIsS0FBSztBQUNMLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L2NvbnZlcnRlci90eXBlcy9zZXF1ZW5jZS5qcz9kNzVhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdyYXBoQ29udmVydGVyIH0gZnJvbSBcIi4uL0dyYXBoQ29udmVydGVyLmpzXCI7XG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tIFwibmFub2lkXCI7XG4vLyBBcnJvdyBtYXBwZXIgZm9yIHRoZSBzdXBwb3J0ZWQgc2VxdWVuY2UgYXJyb3cgdHlwZXNcbmNvbnN0IEVYQ0FMSURSQVdfU1RST0tFX1NUWUxFX0ZPUl9BUlJPVyA9IHtcbiAgICBTT0xJRDogXCJzb2xpZFwiLFxuICAgIERPVFRFRDogXCJkb3R0ZWRcIixcbiAgICBTT0xJRF9DUk9TUzogXCJzb2xpZFwiLFxuICAgIERPVFRFRF9DUk9TUzogXCJkb3R0ZWRcIixcbiAgICBTT0xJRF9PUEVOOiBcInNvbGlkXCIsXG4gICAgRE9UVEVEX09QRU46IFwiZG90dGVkXCIsXG4gICAgU09MSURfUE9JTlQ6IFwic29saWRcIixcbiAgICBET1RURURfUE9JTlQ6IFwiZG90dGVkXCIsXG59O1xuY29uc3QgY3JlYXRlTGluZSA9IChsaW5lKSA9PiB7XG4gICAgY29uc3QgbGluZUVsZW1lbnQgPSB7XG4gICAgICAgIHR5cGU6IFwibGluZVwiLFxuICAgICAgICB4OiBsaW5lLnN0YXJ0WCxcbiAgICAgICAgeTogbGluZS5zdGFydFksXG4gICAgICAgIHBvaW50czogW1xuICAgICAgICAgICAgWzAsIDBdLFxuICAgICAgICAgICAgW2xpbmUuZW5kWCAtIGxpbmUuc3RhcnRYLCBsaW5lLmVuZFkgLSBsaW5lLnN0YXJ0WV0sXG4gICAgICAgIF0sXG4gICAgICAgIHdpZHRoOiBsaW5lLmVuZFggLSBsaW5lLnN0YXJ0WCxcbiAgICAgICAgaGVpZ2h0OiBsaW5lLmVuZFkgLSBsaW5lLnN0YXJ0WSxcbiAgICAgICAgc3Ryb2tlU3R5bGU6IGxpbmUuc3Ryb2tlU3R5bGUgfHwgXCJzb2xpZFwiLFxuICAgICAgICBzdHJva2VDb2xvcjogbGluZS5zdHJva2VDb2xvciB8fCBcIiMwMDBcIixcbiAgICAgICAgc3Ryb2tlV2lkdGg6IGxpbmUuc3Ryb2tlV2lkdGggfHwgMSxcbiAgICB9O1xuICAgIGlmIChsaW5lLmdyb3VwSWQpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihsaW5lRWxlbWVudCwgeyBncm91cElkczogW2xpbmUuZ3JvdXBJZF0gfSk7XG4gICAgfVxuICAgIGlmIChsaW5lLmlkKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24obGluZUVsZW1lbnQsIHsgaWQ6IGxpbmUuaWQgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaW5lRWxlbWVudDtcbn07XG5jb25zdCBjcmVhdGVUZXh0ID0gKGVsZW1lbnQpID0+IHtcbiAgICBjb25zdCB0ZXh0RWxlbWVudCA9IHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgIHg6IGVsZW1lbnQueCxcbiAgICAgICAgeTogZWxlbWVudC55LFxuICAgICAgICB3aWR0aDogZWxlbWVudC53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBlbGVtZW50LmhlaWdodCxcbiAgICAgICAgdGV4dDogZWxlbWVudC50ZXh0IHx8IFwiXCIsXG4gICAgICAgIGZvbnRTaXplOiBlbGVtZW50LmZvbnRTaXplLFxuICAgICAgICB2ZXJ0aWNhbEFsaWduOiBcIm1pZGRsZVwiLFxuICAgIH07XG4gICAgaWYgKGVsZW1lbnQuZ3JvdXBJZCkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRleHRFbGVtZW50LCB7IGdyb3VwSWRzOiBbZWxlbWVudC5ncm91cElkXSB9KTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQuaWQpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0ZXh0RWxlbWVudCwgeyBpZDogZWxlbWVudC5pZCB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRleHRFbGVtZW50O1xufTtcbmNvbnN0IGNyZWF0ZUNvbnRhaW5lciA9IChlbGVtZW50KSA9PiB7XG4gICAgbGV0IGV4dHJhUHJvcHMgPSB7fTtcbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBcInJlY3RhbmdsZVwiICYmIGVsZW1lbnQuc3VidHlwZSA9PT0gXCJhY3RpdmF0aW9uXCIpIHtcbiAgICAgICAgZXh0cmFQcm9wcyA9IHtcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjZTllY2VmXCIsXG4gICAgICAgICAgICBmaWxsU3R5bGU6IFwic29saWRcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgY29udGFpbmVyID0ge1xuICAgICAgICBpZDogZWxlbWVudC5pZCxcbiAgICAgICAgdHlwZTogZWxlbWVudC50eXBlLFxuICAgICAgICB4OiBlbGVtZW50LngsXG4gICAgICAgIHk6IGVsZW1lbnQueSxcbiAgICAgICAgd2lkdGg6IGVsZW1lbnQud2lkdGgsXG4gICAgICAgIGhlaWdodDogZWxlbWVudC5oZWlnaHQsXG4gICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICB0ZXh0OiBlbGVtZW50Py5sYWJlbD8udGV4dCB8fCBcIlwiLFxuICAgICAgICAgICAgZm9udFNpemU6IGVsZW1lbnQ/LmxhYmVsPy5mb250U2l6ZSxcbiAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IFwibWlkZGxlXCIsXG4gICAgICAgICAgICBzdHJva2VDb2xvcjogZWxlbWVudC5sYWJlbD8uY29sb3IgfHwgXCIjMDAwXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHN0cm9rZVN0eWxlOiBlbGVtZW50Py5zdHJva2VTdHlsZSxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IGVsZW1lbnQ/LnN0cm9rZVdpZHRoLFxuICAgICAgICBzdHJva2VDb2xvcjogZWxlbWVudD8uc3Ryb2tlQ29sb3IsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogZWxlbWVudD8uYmdDb2xvcixcbiAgICAgICAgZmlsbFN0eWxlOiBcInNvbGlkXCIsXG4gICAgICAgIC4uLmV4dHJhUHJvcHMsXG4gICAgfTtcbiAgICBpZiAoZWxlbWVudC5ncm91cElkKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oY29udGFpbmVyLCB7IGdyb3VwSWRzOiBbZWxlbWVudC5ncm91cElkXSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbn07XG5jb25zdCBjcmVhdGVBcnJvdyA9IChhcnJvdykgPT4ge1xuICAgIGNvbnN0IHN0cm9rZVN0eWxlID0gRVhDQUxJRFJBV19TVFJPS0VfU1RZTEVfRk9SX0FSUk9XW2Fycm93LnN0cm9rZVN0eWxlXTtcbiAgICBjb25zdCBhcnJvd0VsZW1lbnQgPSB7XG4gICAgICAgIHR5cGU6IFwiYXJyb3dcIixcbiAgICAgICAgeDogYXJyb3cuc3RhcnRYLFxuICAgICAgICB5OiBhcnJvdy5zdGFydFksXG4gICAgICAgIHBvaW50czogYXJyb3cucG9pbnRzIHx8IFtcbiAgICAgICAgICAgIFswLCAwXSxcbiAgICAgICAgICAgIFthcnJvdy5lbmRYIC0gYXJyb3cuc3RhcnRYLCBhcnJvdy5lbmRZIC0gYXJyb3cuc3RhcnRZXSxcbiAgICAgICAgXSxcbiAgICAgICAgd2lkdGg6IGFycm93LmVuZFggLSBhcnJvdy5zdGFydFgsXG4gICAgICAgIGhlaWdodDogYXJyb3cuZW5kWSAtIGFycm93LnN0YXJ0WSxcbiAgICAgICAgc3Ryb2tlU3R5bGUsXG4gICAgICAgIGVuZEFycm93aGVhZDogYXJyb3cuc3Ryb2tlU3R5bGUgPT09IFwiU09MSURfT1BFTlwiIHx8IGFycm93LnN0cm9rZVN0eWxlID09PSBcIkRPVFRFRF9PUEVOXCJcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBcImFycm93XCIsXG4gICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICB0ZXh0OiBhcnJvdz8ubGFiZWw/LnRleHQgfHwgXCJcIixcbiAgICAgICAgICAgIGZvbnRTaXplOiAxNixcbiAgICAgICAgfSxcbiAgICAgICAgcm91bmRuZXNzOiB7XG4gICAgICAgICAgICB0eXBlOiAyLFxuICAgICAgICB9LFxuICAgIH07XG4gICAgaWYgKGFycm93Lmdyb3VwSWQpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhcnJvd0VsZW1lbnQsIHsgZ3JvdXBJZHM6IFthcnJvdy5ncm91cElkXSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFycm93RWxlbWVudDtcbn07XG5leHBvcnQgY29uc3QgU2VxdWVuY2VUb0V4Y2FsaWRyYXdTa2VsZXRvbkNvbnZlcnRvciA9IG5ldyBHcmFwaENvbnZlcnRlcih7XG4gICAgY29udmVydGVyOiAoY2hhcnQpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBbXTtcbiAgICAgICAgY29uc3QgYWN0aXZhdGlvbnMgPSBbXTtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhjaGFydC5ub2RlcykuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFub2RlIHx8ICFub2RlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBleGNhbGlkcmF3RWxlbWVudDtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwibGluZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgZXhjYWxpZHJhd0VsZW1lbnQgPSBjcmVhdGVMaW5lKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJyZWN0YW5nbGVcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVsbGlwc2VcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2FsaWRyYXdFbGVtZW50ID0gY3JlYXRlQ29udGFpbmVyKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBleGNhbGlkcmF3RWxlbWVudCA9IGNyZWF0ZVRleHQoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGB1bmtub3duIHR5cGUgJHtlbGVtZW50LnR5cGV9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBcInJlY3RhbmdsZVwiICYmIGVsZW1lbnQ/LnN1YnR5cGUgPT09IFwiYWN0aXZhdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2YXRpb25zLnB1c2goZXhjYWxpZHJhd0VsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChleGNhbGlkcmF3RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QudmFsdWVzKGNoYXJ0LmxpbmVzKS5mb3JFYWNoKChsaW5lKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKGNyZWF0ZUxpbmUobGluZSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhjaGFydC5hcnJvd3MpLmZvckVhY2goKGFycm93KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWFycm93KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbWVudHMucHVzaChjcmVhdGVBcnJvdyhhcnJvdykpO1xuICAgICAgICAgICAgaWYgKGFycm93LnNlcXVlbmNlTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChjcmVhdGVDb250YWluZXIoYXJyb3cuc2VxdWVuY2VOdW1iZXIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnRzLnB1c2goLi4uYWN0aXZhdGlvbnMpO1xuICAgICAgICAvLyBsb29wc1xuICAgICAgICBpZiAoY2hhcnQubG9vcHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbGluZXMsIHRleHRzLCBub2RlcyB9ID0gY2hhcnQubG9vcHM7XG4gICAgICAgICAgICBsaW5lcy5mb3JFYWNoKChsaW5lKSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChjcmVhdGVMaW5lKGxpbmUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGV4dHMuZm9yRWFjaCgodGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goY3JlYXRlVGV4dCh0ZXh0KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKGNyZWF0ZUNvbnRhaW5lcihub2RlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhcnQuZ3JvdXBzKSB7XG4gICAgICAgICAgICBjaGFydC5ncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGFjdG9yS2V5cywgbmFtZSB9ID0gZ3JvdXA7XG4gICAgICAgICAgICAgICAgbGV0IG1pblggPSBJbmZpbml0eTtcbiAgICAgICAgICAgICAgICBsZXQgbWluWSA9IEluZmluaXR5O1xuICAgICAgICAgICAgICAgIGxldCBtYXhYID0gMDtcbiAgICAgICAgICAgICAgICBsZXQgbWF4WSA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKCFhY3RvcktleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0b3JzID0gZWxlbWVudHMuZmlsdGVyKChlbGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZS5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaHlwaGVuSW5kZXggPSBlbGUuaWQuaW5kZXhPZihcIi1cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGVsZS5pZC5zdWJzdHJpbmcoMCwgaHlwaGVuSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjdG9yS2V5cy5pbmNsdWRlcyhpZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhY3RvcnMuZm9yRWFjaCgoYWN0b3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIGFjdG9yLngpO1xuICAgICAgICAgICAgICAgICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgYWN0b3IueSk7XG4gICAgICAgICAgICAgICAgICAgIG1heFggPSBNYXRoLm1heChtYXhYLCBhY3Rvci54ICsgYWN0b3Iud2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgYWN0b3IueSArIGFjdG9yLmhlaWdodCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gRHJhdyB0aGUgb3V0ZXIgcmVjdGFuZ2xlIGVuY2xvc2luZyB0aGUgZ3JvdXAgZWxlbWVudHNcbiAgICAgICAgICAgICAgICBjb25zdCBQQURESU5HID0gMTA7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBSZWN0WCA9IG1pblggLSBQQURESU5HO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwUmVjdFkgPSBtaW5ZIC0gUEFERElORztcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cFJlY3RXaWR0aCA9IG1heFggLSBtaW5YICsgUEFERElORyAqIDI7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBSZWN0SGVpZ2h0ID0gbWF4WSAtIG1pblkgKyBQQURESU5HICogMjtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cFJlY3QgPSBjcmVhdGVDb250YWluZXIoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInJlY3RhbmdsZVwiLFxuICAgICAgICAgICAgICAgICAgICB4OiBncm91cFJlY3RYLFxuICAgICAgICAgICAgICAgICAgICB5OiBncm91cFJlY3RZLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogZ3JvdXBSZWN0V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogZ3JvdXBSZWN0SGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICBiZ0NvbG9yOiBncm91cC5maWxsLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnVuc2hpZnQoZ3JvdXBSZWN0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBmcmFtZUlkID0gbmFub2lkKCk7XG4gICAgICAgICAgICAgICAgLy8gY29tcHV0ZSBmcmFtZSBjb29yZGluYXRlcyBhbmQgZGltZW5zaW9uc1xuICAgICAgICAgICAgICAgIGNvbnN0IGZyYW1lV2lkdGggPSBncm91cFJlY3RXaWR0aCArIFBBRERJTkcgKiAyO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZyYW1lSGVpZ2h0ID0gZ3JvdXBSZWN0SGVpZ2h0ICsgUEFERElORyAqIDI7XG4gICAgICAgICAgICAgICAgY29uc3QgZnJhbWVYMSA9IGdyb3VwUmVjdFggLSBQQURESU5HO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZyYW1lWTEgPSBncm91cFJlY3RZIC0gUEFERElORztcbiAgICAgICAgICAgICAgICBjb25zdCBmcmFtZVgyID0gZnJhbWVYMSArIGZyYW1lV2lkdGg7XG4gICAgICAgICAgICAgICAgY29uc3QgZnJhbWVZMiA9IGZyYW1lWTEgKyBmcmFtZUhlaWdodDtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5mb3JFYWNoKChlbGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZS54ID49IGZyYW1lWDEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZS54ICsgZWxlLndpZHRoIDw9IGZyYW1lWDIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZS55ID49IGZyYW1lWTEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZS55ICsgZWxlLmhlaWdodCA8PSBmcmFtZVkyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGVsZSwgeyBmcmFtZUlkIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZT8ubGFiZWw/LnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGVsZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogeyAuLi5lbGUubGFiZWwsIGZyYW1lSWQgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIFRPRE8gcmVtb3ZlIGV4dHJhIGF0dHJpYnV0ZXMgb25jZSB3ZSBzdXBwb3J0IGZyYW1lcyBpbiBwcm9ncmFtbWF0aWMgQVBJXG4gICAgICAgICAgICAgICAgY29uc3QgZnJhbWUgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZnJhbWVcIixcbiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogMjYyLFxuICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uTm9uY2U6IDEzODM0ODYxODAsXG4gICAgICAgICAgICAgICAgICAgIGlzRGVsZXRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGlkOiBmcmFtZUlkLFxuICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IFwic29saWRcIixcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZVN0eWxlOiBcInNvbGlkXCIsXG4gICAgICAgICAgICAgICAgICAgIHJvdWdobmVzczogMCxcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTAwLFxuICAgICAgICAgICAgICAgICAgICBhbmdsZTogMCxcbiAgICAgICAgICAgICAgICAgICAgeDogZnJhbWVYMSxcbiAgICAgICAgICAgICAgICAgICAgeTogZnJhbWVZMSxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlQ29sb3I6IFwiI2JiYlwiLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGZyYW1lV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogZnJhbWVIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHNlZWQ6IDE3OTI0NTM2MDQsXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwSWRzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgZnJhbWVJZDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcm91bmRuZXNzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBib3VuZEVsZW1lbnRzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZDogMTY5NzczMTg4NTE2OCxcbiAgICAgICAgICAgICAgICAgICAgbGluazogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbG9ja2VkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2goZnJhbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZWxlbWVudHMgfTtcbiAgICB9LFxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/converter/types/sequence.js\n");
|
|
324
324
|
|
|
325
325
|
/***/ }),
|
|
326
326
|
|
|
@@ -364,7 +364,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
364
364
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
365
365
|
|
|
366
366
|
"use strict";
|
|
367
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"parseMermaid\": () => (/* binding */ parseMermaid)\n/* harmony export */ });\n/* harmony import */ var mermaid__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! mermaid */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/constants.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/utils.js\");\n/* harmony import */ var _parser_flowchart_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./parser/flowchart.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/parser/flowchart.js\");\n/* harmony import */ var _parser_sequence_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./parser/sequence.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/parser/sequence.js\");\n\n\n\n\n\nconst processMermaidTextWithOptions = (definition, options) => {\n const diagramInitOptions = {\n // Add options for rendering flowchart in linear curves (for better extracting arrow path points) and custom font size\n flowchart: {\n curve: options?.curve || \"basis\",\n },\n // Increase the Mermaid's font size by multiplying with 1.25 to match the Excalidraw Virgil font\n themeVariables: {\n fontSize: `${_constants_js__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_FONT_SIZE * 1.25}px`,\n },\n };\n const fullDefinition = `%%{init: ${JSON.stringify(diagramInitOptions)}}%%\\n${definition}`;\n return fullDefinition;\n};\n// Fallback to Svg\nconst convertSvgToGraphImage = (svgContainer) => {\n // Extract SVG width and height\n // TODO: make width and height change dynamically based on user's screen dimension\n const svgEl = svgContainer.querySelector(\"svg\");\n if (!svgEl) {\n throw new Error(\"SVG element not found\");\n }\n const rect = svgEl.getBoundingClientRect();\n const width = rect.width;\n const height = rect.height;\n // Set width and height explictly since in firefox it gets set to 0\n // if the width and height are not expilcitly set\n // eg in some cases like er Diagram, gnatt, width and height is set as 100%\n // which sets the dimensions as 0 in firefox and thus the diagram isn't rendered\n svgEl.setAttribute(\"width\", `${width}`);\n svgEl.setAttribute(\"height\", `${height}`);\n // Convert SVG to image\n const mimeType = \"image/svg+xml\";\n const decoded = unescape(encodeURIComponent(svgEl.outerHTML));\n const base64 = btoa(decoded);\n const dataURL = `data:image/svg+xml;base64,${base64}`;\n const graphImage = {\n type: \"graphImage\",\n mimeType,\n dataURL,\n width,\n height,\n };\n return graphImage;\n};\nconst parseMermaid = async (definition) => {\n mermaid__WEBPACK_IMPORTED_MODULE_4__.K.initialize({ startOnLoad: false });\n const fullDefinition = processMermaidTextWithOptions(definition, {\n curve: (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.isSupportedDiagram)(definition) ? \"linear\" : \"basis\",\n });\n // Parse the diagram\n const diagram = await mermaid__WEBPACK_IMPORTED_MODULE_4__.K.mermaidAPI.getDiagramFromText(fullDefinition);\n // Render the SVG diagram\n const { svg } = await mermaid__WEBPACK_IMPORTED_MODULE_4__.K.render(\"mermaid-to-excalidraw\", fullDefinition);\n // Append Svg to DOM\n const svgContainer = document.createElement(\"div\");\n svgContainer.setAttribute(\"style\", `opacity: 0; position: relative; z-index: -1;`);\n svgContainer.innerHTML = svg;\n svgContainer.id = \"mermaid-diagram\";\n document.body.appendChild(svgContainer);\n let data;\n switch (diagram.type) {\n case \"flowchart-v2\": {\n data = (0,_parser_flowchart_js__WEBPACK_IMPORTED_MODULE_2__.parseMermaidFlowChartDiagram)(diagram, svgContainer);\n break;\n }\n case \"sequence\": {\n data = (0,_parser_sequence_js__WEBPACK_IMPORTED_MODULE_3__.parseMermaidSequenceDiagram)(diagram, svgContainer);\n break;\n }\n // fallback to image if diagram type not-supported\n default: {\n data = convertSvgToGraphImage(svgContainer);\n }\n }\n svgContainer.remove();\n return data;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L3BhcnNlTWVybWFpZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBOEI7QUFDcUI7QUFDSDtBQUNxQjtBQUNGO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLHlCQUF5Qiw0REFBaUIsUUFBUTtBQUNsRCxTQUFTO0FBQ1Q7QUFDQSwrQkFBK0IsUUFBUSxvQ0FBb0MsTUFBTSxXQUFXO0FBQzVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsTUFBTTtBQUN6QyxvQ0FBb0MsT0FBTztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxTQUFTLE9BQU87QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUCxJQUFJLGlEQUFrQixHQUFHLG9CQUFvQjtBQUM3QztBQUNBLGVBQWUsNkRBQWtCO0FBQ2pDLEtBQUs7QUFDTDtBQUNBLDBCQUEwQixvRUFBcUM7QUFDL0Q7QUFDQSxZQUFZLE1BQU0sUUFBUSw2Q0FBYztBQUN4QztBQUNBO0FBQ0Esb0RBQW9ELG9CQUFvQixZQUFZO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixrRkFBNEI7QUFDL0M7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGdGQUEyQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGV4Y2FsaWRyYXcvbWVybWFpZC10by1leGNhbGlkcmF3L2Rpc3QvcGFyc2VNZXJtYWlkLmpzP2VhYzkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1lcm1haWQgZnJvbSBcIm1lcm1haWRcIjtcbmltcG9ydCB7IERFRkFVTFRfRk9OVF9TSVpFIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBpc1N1cHBvcnRlZERpYWdyYW0gfSBmcm9tIFwiLi91dGlscy5qc1wiO1xuaW1wb3J0IHsgcGFyc2VNZXJtYWlkRmxvd0NoYXJ0RGlhZ3JhbSB9IGZyb20gXCIuL3BhcnNlci9mbG93Y2hhcnQuanNcIjtcbmltcG9ydCB7IHBhcnNlTWVybWFpZFNlcXVlbmNlRGlhZ3JhbSB9IGZyb20gXCIuL3BhcnNlci9zZXF1ZW5jZS5qc1wiO1xuY29uc3QgcHJvY2Vzc01lcm1haWRUZXh0V2l0aE9wdGlvbnMgPSAoZGVmaW5pdGlvbiwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGRpYWdyYW1Jbml0T3B0aW9ucyA9IHtcbiAgICAgICAgLy8gQWRkIG9wdGlvbnMgZm9yIHJlbmRlcmluZyBmbG93Y2hhcnQgaW4gbGluZWFyIGN1cnZlcyAoZm9yIGJldHRlciBleHRyYWN0aW5nIGFycm93IHBhdGggcG9pbnRzKSBhbmQgY3VzdG9tIGZvbnQgc2l6ZVxuICAgICAgICBmbG93Y2hhcnQ6IHtcbiAgICAgICAgICAgIGN1cnZlOiBvcHRpb25zPy5jdXJ2ZSB8fCBcImJhc2lzXCIsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIEluY3JlYXNlIHRoZSBNZXJtYWlkJ3MgZm9udCBzaXplIGJ5IG11bHRpcGx5aW5nIHdpdGggMS4yNSB0byBtYXRjaCB0aGUgRXhjYWxpZHJhdyBWaXJnaWwgZm9udFxuICAgICAgICB0aGVtZVZhcmlhYmxlczoge1xuICAgICAgICAgICAgZm9udFNpemU6IGAke0RFRkFVTFRfRk9OVF9TSVpFICogMS4yNX1weGAsXG4gICAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBmdWxsRGVmaW5pdGlvbiA9IGAlJXtpbml0OiAke0pTT04uc3RyaW5naWZ5KGRpYWdyYW1Jbml0T3B0aW9ucyl9fSUlXFxuJHtkZWZpbml0aW9ufWA7XG4gICAgcmV0dXJuIGZ1bGxEZWZpbml0aW9uO1xufTtcbi8vIEZhbGxiYWNrIHRvIFN2Z1xuY29uc3QgY29udmVydFN2Z1RvR3JhcGhJbWFnZSA9IChzdmdDb250YWluZXIpID0+IHtcbiAgICAvLyBFeHRyYWN0IFNWRyB3aWR0aCBhbmQgaGVpZ2h0XG4gICAgLy8gVE9ETzogbWFrZSB3aWR0aCBhbmQgaGVpZ2h0IGNoYW5nZSBkeW5hbWljYWxseSBiYXNlZCBvbiB1c2VyJ3Mgc2NyZWVuIGRpbWVuc2lvblxuICAgIGNvbnN0IHN2Z0VsID0gc3ZnQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCJzdmdcIik7XG4gICAgaWYgKCFzdmdFbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTVkcgZWxlbWVudCBub3QgZm91bmRcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlY3QgPSBzdmdFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB3aWR0aCA9IHJlY3Qud2lkdGg7XG4gICAgY29uc3QgaGVpZ2h0ID0gcmVjdC5oZWlnaHQ7XG4gICAgLy8gU2V0IHdpZHRoIGFuZCBoZWlnaHQgZXhwbGljdGx5IHNpbmNlIGluIGZpcmVmb3ggaXQgZ2V0cyBzZXQgdG8gMFxuICAgIC8vIGlmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBub3QgZXhwaWxjaXRseSBzZXRcbiAgICAvLyBlZyBpbiBzb21lIGNhc2VzIGxpa2UgZXIgRGlhZ3JhbSwgZ25hdHQsIHdpZHRoIGFuZCBoZWlnaHQgaXMgc2V0IGFzIDEwMCVcbiAgICAvLyB3aGljaCBzZXRzIHRoZSBkaW1lbnNpb25zIGFzIDAgaW4gZmlyZWZveCBhbmQgdGh1cyB0aGUgZGlhZ3JhbSBpc24ndCByZW5kZXJlZFxuICAgIHN2Z0VsLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRofWApO1xuICAgIHN2Z0VsLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBgJHtoZWlnaHR9YCk7XG4gICAgLy8gQ29udmVydCBTVkcgdG8gaW1hZ2VcbiAgICBjb25zdCBtaW1lVHlwZSA9IFwiaW1hZ2Uvc3ZnK3htbFwiO1xuICAgIGNvbnN0IGRlY29kZWQgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3ZnRWwub3V0ZXJIVE1MKSk7XG4gICAgY29uc3QgYmFzZTY0ID0gYnRvYShkZWNvZGVkKTtcbiAgICBjb25zdCBkYXRhVVJMID0gYGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJHtiYXNlNjR9YDtcbiAgICBjb25zdCBncmFwaEltYWdlID0ge1xuICAgICAgICB0eXBlOiBcImdyYXBoSW1hZ2VcIixcbiAgICAgICAgbWltZVR5cGUsXG4gICAgICAgIGRhdGFVUkwsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgfTtcbiAgICByZXR1cm4gZ3JhcGhJbWFnZTtcbn07XG5leHBvcnQgY29uc3QgcGFyc2VNZXJtYWlkID0gYXN5bmMgKGRlZmluaXRpb24pID0+IHtcbiAgICBtZXJtYWlkLmluaXRpYWxpemUoeyBzdGFydE9uTG9hZDogZmFsc2UgfSk7XG4gICAgY29uc3QgZnVsbERlZmluaXRpb24gPSBwcm9jZXNzTWVybWFpZFRleHRXaXRoT3B0aW9ucyhkZWZpbml0aW9uLCB7XG4gICAgICAgIGN1cnZlOiBpc1N1cHBvcnRlZERpYWdyYW0oZGVmaW5pdGlvbikgPyBcImxpbmVhclwiIDogXCJiYXNpc1wiLFxuICAgIH0pO1xuICAgIC8vIFBhcnNlIHRoZSBkaWFncmFtXG4gICAgY29uc3QgZGlhZ3JhbSA9IGF3YWl0IG1lcm1haWQubWVybWFpZEFQSS5nZXREaWFncmFtRnJvbVRleHQoZnVsbERlZmluaXRpb24pO1xuICAgIC8vIFJlbmRlciB0aGUgU1ZHIGRpYWdyYW1cbiAgICBjb25zdCB7IHN2ZyB9ID0gYXdhaXQgbWVybWFpZC5yZW5kZXIoXCJtZXJtYWlkLXRvLWV4Y2FsaWRyYXdcIiwgZnVsbERlZmluaXRpb24pO1xuICAgIC8vIEFwcGVuZCBTdmcgdG8gRE9NXG4gICAgY29uc3Qgc3ZnQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBzdmdDb250YWluZXIuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgYG9wYWNpdHk6IDA7IHBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogLTE7YCk7XG4gICAgc3ZnQ29udGFpbmVyLmlubmVySFRNTCA9IHN2ZztcbiAgICBzdmdDb250YWluZXIuaWQgPSBcIm1lcm1haWQtZGlhZ3JhbVwiO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3ZnQ29udGFpbmVyKTtcbiAgICBsZXQgZGF0YTtcbiAgICBzd2l0Y2ggKGRpYWdyYW0udHlwZSkge1xuICAgICAgICBjYXNlIFwiZmxvd2NoYXJ0LXYyXCI6IHtcbiAgICAgICAgICAgIGRhdGEgPSBwYXJzZU1lcm1haWRGbG93Q2hhcnREaWFncmFtKGRpYWdyYW0sIHN2Z0NvbnRhaW5lcik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwic2VxdWVuY2VcIjoge1xuICAgICAgICAgICAgZGF0YSA9IHBhcnNlTWVybWFpZFNlcXVlbmNlRGlhZ3JhbShkaWFncmFtLCBzdmdDb250YWluZXIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmFsbGJhY2sgdG8gaW1hZ2UgaWYgZGlhZ3JhbSB0eXBlIG5vdC1zdXBwb3J0ZWRcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgZGF0YSA9IGNvbnZlcnRTdmdUb0dyYXBoSW1hZ2Uoc3ZnQ29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdmdDb250YWluZXIucmVtb3ZlKCk7XG4gICAgcmV0dXJuIGRhdGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/parseMermaid.js\n");
|
|
367
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"parseMermaid\": () => (/* binding */ parseMermaid)\n/* harmony export */ });\n/* harmony import */ var mermaid__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! mermaid */ \"../../../node_modules/mermaid/dist/mermaid-b0ad2de1.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/constants.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/utils.js\");\n/* harmony import */ var _parser_flowchart_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./parser/flowchart.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/parser/flowchart.js\");\n/* harmony import */ var _parser_sequence_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./parser/sequence.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/parser/sequence.js\");\n\n\n\n\n\nconst processMermaidTextWithOptions = (definition, options) => {\n const diagramInitOptions = {\n // Add options for rendering flowchart in linear curves (for better extracting arrow path points) and custom font size\n flowchart: {\n curve: options?.curve || \"basis\",\n },\n // Increase the Mermaid's font size by multiplying with 1.25 to match the Excalidraw Virgil font\n themeVariables: {\n fontSize: `${_constants_js__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_FONT_SIZE * 1.25}px`,\n },\n };\n const fullDefinition = `%%{init: ${JSON.stringify(diagramInitOptions)}}%%\\n${definition}`;\n return fullDefinition;\n};\n// Fallback to Svg\nconst convertSvgToGraphImage = (svgContainer) => {\n // Extract SVG width and height\n // TODO: make width and height change dynamically based on user's screen dimension\n const svgEl = svgContainer.querySelector(\"svg\");\n if (!svgEl) {\n throw new Error(\"SVG element not found\");\n }\n const rect = svgEl.getBoundingClientRect();\n const width = rect.width;\n const height = rect.height;\n // Set width and height explictly since in firefox it gets set to 0\n // if the width and height are not expilcitly set\n // eg in some cases like er Diagram, gnatt, width and height is set as 100%\n // which sets the dimensions as 0 in firefox and thus the diagram isn't rendered\n svgEl.setAttribute(\"width\", `${width}`);\n svgEl.setAttribute(\"height\", `${height}`);\n // Convert SVG to image\n const mimeType = \"image/svg+xml\";\n const decoded = unescape(encodeURIComponent(svgEl.outerHTML));\n const base64 = btoa(decoded);\n const dataURL = `data:image/svg+xml;base64,${base64}`;\n const graphImage = {\n type: \"graphImage\",\n mimeType,\n dataURL,\n width,\n height,\n };\n return graphImage;\n};\nconst parseMermaid = async (definition) => {\n mermaid__WEBPACK_IMPORTED_MODULE_4__.K.initialize({ startOnLoad: false });\n const fullDefinition = processMermaidTextWithOptions(definition, {\n curve: (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.isSupportedDiagram)(definition) ? \"linear\" : \"basis\",\n });\n // Parse the diagram\n const diagram = await mermaid__WEBPACK_IMPORTED_MODULE_4__.K.mermaidAPI.getDiagramFromText((0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.encodeEntities)(fullDefinition));\n // Render the SVG diagram\n const { svg } = await mermaid__WEBPACK_IMPORTED_MODULE_4__.K.render(\"mermaid-to-excalidraw\", fullDefinition);\n // Append Svg to DOM\n const svgContainer = document.createElement(\"div\");\n svgContainer.setAttribute(\"style\", `opacity: 0; position: relative; z-index: -1;`);\n svgContainer.innerHTML = svg;\n svgContainer.id = \"mermaid-diagram\";\n document.body.appendChild(svgContainer);\n let data;\n switch (diagram.type) {\n case \"flowchart-v2\": {\n data = (0,_parser_flowchart_js__WEBPACK_IMPORTED_MODULE_2__.parseMermaidFlowChartDiagram)(diagram, svgContainer);\n break;\n }\n case \"sequence\": {\n data = (0,_parser_sequence_js__WEBPACK_IMPORTED_MODULE_3__.parseMermaidSequenceDiagram)(diagram, svgContainer);\n break;\n }\n // fallback to image if diagram type not-supported\n default: {\n data = convertSvgToGraphImage(svgContainer);\n }\n }\n svgContainer.remove();\n return data;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L3BhcnNlTWVybWFpZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBOEI7QUFDcUI7QUFDYTtBQUNLO0FBQ0Y7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EseUJBQXlCLDREQUFpQixRQUFRO0FBQ2xELFNBQVM7QUFDVDtBQUNBLCtCQUErQixRQUFRLG9DQUFvQyxNQUFNLFdBQVc7QUFDNUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxNQUFNO0FBQ3pDLG9DQUFvQyxPQUFPO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLFNBQVMsT0FBTztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQLElBQUksaURBQWtCLEdBQUcsb0JBQW9CO0FBQzdDO0FBQ0EsZUFBZSw2REFBa0I7QUFDakMsS0FBSztBQUNMO0FBQ0EsMEJBQTBCLG9FQUFxQyxDQUFDLHlEQUFjO0FBQzlFO0FBQ0EsWUFBWSxNQUFNLFFBQVEsNkNBQWM7QUFDeEM7QUFDQTtBQUNBLG9EQUFvRCxvQkFBb0IsWUFBWTtBQUNwRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsa0ZBQTRCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixnRkFBMkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L3BhcnNlTWVybWFpZC5qcz9lYWM5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtZXJtYWlkIGZyb20gXCJtZXJtYWlkXCI7XG5pbXBvcnQgeyBERUZBVUxUX0ZPTlRfU0laRSB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgZW5jb2RlRW50aXRpZXMsIGlzU3VwcG9ydGVkRGlhZ3JhbSB9IGZyb20gXCIuL3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZU1lcm1haWRGbG93Q2hhcnREaWFncmFtIH0gZnJvbSBcIi4vcGFyc2VyL2Zsb3djaGFydC5qc1wiO1xuaW1wb3J0IHsgcGFyc2VNZXJtYWlkU2VxdWVuY2VEaWFncmFtIH0gZnJvbSBcIi4vcGFyc2VyL3NlcXVlbmNlLmpzXCI7XG5jb25zdCBwcm9jZXNzTWVybWFpZFRleHRXaXRoT3B0aW9ucyA9IChkZWZpbml0aW9uLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZGlhZ3JhbUluaXRPcHRpb25zID0ge1xuICAgICAgICAvLyBBZGQgb3B0aW9ucyBmb3IgcmVuZGVyaW5nIGZsb3djaGFydCBpbiBsaW5lYXIgY3VydmVzIChmb3IgYmV0dGVyIGV4dHJhY3RpbmcgYXJyb3cgcGF0aCBwb2ludHMpIGFuZCBjdXN0b20gZm9udCBzaXplXG4gICAgICAgIGZsb3djaGFydDoge1xuICAgICAgICAgICAgY3VydmU6IG9wdGlvbnM/LmN1cnZlIHx8IFwiYmFzaXNcIixcbiAgICAgICAgfSxcbiAgICAgICAgLy8gSW5jcmVhc2UgdGhlIE1lcm1haWQncyBmb250IHNpemUgYnkgbXVsdGlwbHlpbmcgd2l0aCAxLjI1IHRvIG1hdGNoIHRoZSBFeGNhbGlkcmF3IFZpcmdpbCBmb250XG4gICAgICAgIHRoZW1lVmFyaWFibGVzOiB7XG4gICAgICAgICAgICBmb250U2l6ZTogYCR7REVGQVVMVF9GT05UX1NJWkUgKiAxLjI1fXB4YCxcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IGZ1bGxEZWZpbml0aW9uID0gYCUle2luaXQ6ICR7SlNPTi5zdHJpbmdpZnkoZGlhZ3JhbUluaXRPcHRpb25zKX19JSVcXG4ke2RlZmluaXRpb259YDtcbiAgICByZXR1cm4gZnVsbERlZmluaXRpb247XG59O1xuLy8gRmFsbGJhY2sgdG8gU3ZnXG5jb25zdCBjb252ZXJ0U3ZnVG9HcmFwaEltYWdlID0gKHN2Z0NvbnRhaW5lcikgPT4ge1xuICAgIC8vIEV4dHJhY3QgU1ZHIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAvLyBUT0RPOiBtYWtlIHdpZHRoIGFuZCBoZWlnaHQgY2hhbmdlIGR5bmFtaWNhbGx5IGJhc2VkIG9uIHVzZXIncyBzY3JlZW4gZGltZW5zaW9uXG4gICAgY29uc3Qgc3ZnRWwgPSBzdmdDb250YWluZXIucXVlcnlTZWxlY3RvcihcInN2Z1wiKTtcbiAgICBpZiAoIXN2Z0VsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNWRyBlbGVtZW50IG5vdCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVjdCA9IHN2Z0VsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHdpZHRoID0gcmVjdC53aWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSByZWN0LmhlaWdodDtcbiAgICAvLyBTZXQgd2lkdGggYW5kIGhlaWdodCBleHBsaWN0bHkgc2luY2UgaW4gZmlyZWZveCBpdCBnZXRzIHNldCB0byAwXG4gICAgLy8gaWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIG5vdCBleHBpbGNpdGx5IHNldFxuICAgIC8vIGVnIGluIHNvbWUgY2FzZXMgbGlrZSBlciBEaWFncmFtLCBnbmF0dCwgd2lkdGggYW5kIGhlaWdodCBpcyBzZXQgYXMgMTAwJVxuICAgIC8vIHdoaWNoIHNldHMgdGhlIGRpbWVuc2lvbnMgYXMgMCBpbiBmaXJlZm94IGFuZCB0aHVzIHRoZSBkaWFncmFtIGlzbid0IHJlbmRlcmVkXG4gICAgc3ZnRWwuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgYCR7d2lkdGh9YCk7XG4gICAgc3ZnRWwuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIGAke2hlaWdodH1gKTtcbiAgICAvLyBDb252ZXJ0IFNWRyB0byBpbWFnZVxuICAgIGNvbnN0IG1pbWVUeXBlID0gXCJpbWFnZS9zdmcreG1sXCI7XG4gICAgY29uc3QgZGVjb2RlZCA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdmdFbC5vdXRlckhUTUwpKTtcbiAgICBjb25zdCBiYXNlNjQgPSBidG9hKGRlY29kZWQpO1xuICAgIGNvbnN0IGRhdGFVUkwgPSBgZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwke2Jhc2U2NH1gO1xuICAgIGNvbnN0IGdyYXBoSW1hZ2UgPSB7XG4gICAgICAgIHR5cGU6IFwiZ3JhcGhJbWFnZVwiLFxuICAgICAgICBtaW1lVHlwZSxcbiAgICAgICAgZGF0YVVSTCxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICB9O1xuICAgIHJldHVybiBncmFwaEltYWdlO1xufTtcbmV4cG9ydCBjb25zdCBwYXJzZU1lcm1haWQgPSBhc3luYyAoZGVmaW5pdGlvbikgPT4ge1xuICAgIG1lcm1haWQuaW5pdGlhbGl6ZSh7IHN0YXJ0T25Mb2FkOiBmYWxzZSB9KTtcbiAgICBjb25zdCBmdWxsRGVmaW5pdGlvbiA9IHByb2Nlc3NNZXJtYWlkVGV4dFdpdGhPcHRpb25zKGRlZmluaXRpb24sIHtcbiAgICAgICAgY3VydmU6IGlzU3VwcG9ydGVkRGlhZ3JhbShkZWZpbml0aW9uKSA/IFwibGluZWFyXCIgOiBcImJhc2lzXCIsXG4gICAgfSk7XG4gICAgLy8gUGFyc2UgdGhlIGRpYWdyYW1cbiAgICBjb25zdCBkaWFncmFtID0gYXdhaXQgbWVybWFpZC5tZXJtYWlkQVBJLmdldERpYWdyYW1Gcm9tVGV4dChlbmNvZGVFbnRpdGllcyhmdWxsRGVmaW5pdGlvbikpO1xuICAgIC8vIFJlbmRlciB0aGUgU1ZHIGRpYWdyYW1cbiAgICBjb25zdCB7IHN2ZyB9ID0gYXdhaXQgbWVybWFpZC5yZW5kZXIoXCJtZXJtYWlkLXRvLWV4Y2FsaWRyYXdcIiwgZnVsbERlZmluaXRpb24pO1xuICAgIC8vIEFwcGVuZCBTdmcgdG8gRE9NXG4gICAgY29uc3Qgc3ZnQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBzdmdDb250YWluZXIuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgYG9wYWNpdHk6IDA7IHBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogLTE7YCk7XG4gICAgc3ZnQ29udGFpbmVyLmlubmVySFRNTCA9IHN2ZztcbiAgICBzdmdDb250YWluZXIuaWQgPSBcIm1lcm1haWQtZGlhZ3JhbVwiO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3ZnQ29udGFpbmVyKTtcbiAgICBsZXQgZGF0YTtcbiAgICBzd2l0Y2ggKGRpYWdyYW0udHlwZSkge1xuICAgICAgICBjYXNlIFwiZmxvd2NoYXJ0LXYyXCI6IHtcbiAgICAgICAgICAgIGRhdGEgPSBwYXJzZU1lcm1haWRGbG93Q2hhcnREaWFncmFtKGRpYWdyYW0sIHN2Z0NvbnRhaW5lcik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwic2VxdWVuY2VcIjoge1xuICAgICAgICAgICAgZGF0YSA9IHBhcnNlTWVybWFpZFNlcXVlbmNlRGlhZ3JhbShkaWFncmFtLCBzdmdDb250YWluZXIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmFsbGJhY2sgdG8gaW1hZ2UgaWYgZGlhZ3JhbSB0eXBlIG5vdC1zdXBwb3J0ZWRcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgZGF0YSA9IGNvbnZlcnRTdmdUb0dyYXBoSW1hZ2Uoc3ZnQ29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdmdDb250YWluZXIucmVtb3ZlKCk7XG4gICAgcmV0dXJuIGRhdGE7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/parseMermaid.js\n");
|
|
368
368
|
|
|
369
369
|
/***/ }),
|
|
370
370
|
|
|
@@ -386,7 +386,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
386
386
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
387
387
|
|
|
388
388
|
"use strict";
|
|
389
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"parseMermaidSequenceDiagram\": () => (/* binding */ parseMermaidSequenceDiagram)\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/constants.js\");\n/* harmony import */ var nanoid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! nanoid */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/node_modules/nanoid/index.browser.js\");\n\n\n// Currently mermaid supported these 6 arrow types, the names are taken from mermaidParser.LINETYPE\nconst SEQUENCE_ARROW_TYPES = {\n 0: \"SOLID\",\n 1: \"DOTTED\",\n 3: \"SOLID_CROSS\",\n 4: \"DOTTED_CROSS\",\n 5: \"SOLID_OPEN\",\n 6: \"DOTTED_OPEN\",\n 24: \"SOLID_POINT\",\n 25: \"DOTTED_POINT\",\n};\nconst MESSAGE_TYPE = {\n SOLID: 0,\n DOTTED: 1,\n NOTE: 2,\n SOLID_CROSS: 3,\n DOTTED_CROSS: 4,\n SOLID_OPEN: 5,\n DOTTED_OPEN: 6,\n LOOP_START: 10,\n LOOP_END: 11,\n ALT_START: 12,\n ALT_ELSE: 13,\n ALT_END: 14,\n OPT_START: 15,\n OPT_END: 16,\n ACTIVE_START: 17,\n ACTIVE_END: 18,\n PAR_START: 19,\n PAR_AND: 20,\n PAR_END: 21,\n RECT_START: 22,\n RECT_END: 23,\n SOLID_POINT: 24,\n DOTTED_POINT: 25,\n AUTONUMBER: 26,\n CRITICAL_START: 27,\n CRITICAL_OPTION: 28,\n CRITICAL_END: 29,\n BREAK_START: 30,\n BREAK_END: 31,\n PAR_OVER_START: 32,\n};\nconst createContainerElement = (node, type, opts = {}) => {\n const container = {};\n container.type = type;\n const { text, subtype, id, groupId } = opts;\n container.id = id;\n if (groupId) {\n container.groupId = groupId;\n }\n if (text) {\n container.label = {\n text,\n fontSize: 16,\n };\n }\n const boundingBox = node.getBBox();\n container.x = boundingBox.x;\n container.y = boundingBox.y;\n container.width = boundingBox.width;\n container.height = boundingBox.height;\n container.subtype = subtype;\n switch (subtype) {\n case \"highlight\":\n const bgColor = node.getAttribute(\"fill\");\n if (bgColor) {\n container.bgColor = bgColor;\n }\n break;\n case \"note\":\n container.strokeStyle = \"dashed\";\n break;\n }\n return container;\n};\nconst createTextElement = (textNode, text, opts) => {\n const node = {};\n const x = Number(textNode.getAttribute(\"x\"));\n const y = Number(textNode.getAttribute(\"y\"));\n node.type = \"text\";\n node.text = text;\n if (opts?.id) {\n node.id = opts.id;\n }\n if (opts?.groupId) {\n node.groupId = opts.groupId;\n }\n const boundingBox = textNode.getBBox();\n node.width = boundingBox.width;\n node.height = boundingBox.height;\n node.x = x - boundingBox.width / 2;\n node.y = y;\n const fontSize = parseInt(getComputedStyle(textNode).fontSize);\n node.fontSize = fontSize;\n return node;\n};\nconst createLineElement = (lineNode, startX, startY, endX, endY, opts) => {\n const line = {};\n line.startX = startX;\n line.startY = startY;\n line.endX = endX;\n if (opts?.groupId) {\n line.groupId = opts.groupId;\n }\n if (opts?.id) {\n line.id = opts.id;\n }\n // Make sure lines don't overlap with the nodes, in mermaid it overlaps but isn't visible as its pushed back and containers are non transparent\n line.endY = endY;\n line.strokeColor = lineNode.getAttribute(\"stroke\");\n line.strokeWidth = Number(lineNode.getAttribute(\"stroke-width\"));\n line.type = \"line\";\n return line;\n};\nconst createArrowElement = (arrowNode, message) => {\n const arrow = {};\n arrow.label = { text: message.message, fontSize: 16 };\n const tagName = arrowNode.tagName;\n if (tagName === \"line\") {\n arrow.startX = Number(arrowNode.getAttribute(\"x1\"));\n arrow.startY = Number(arrowNode.getAttribute(\"y1\"));\n arrow.endX = Number(arrowNode.getAttribute(\"x2\"));\n arrow.endY = Number(arrowNode.getAttribute(\"y2\"));\n }\n else if (tagName === \"path\") {\n const dAttr = arrowNode.getAttribute(\"d\");\n if (!dAttr) {\n throw new Error('Path element does not contain a \"d\" attribute');\n }\n // Split the d attribute based on M (Move To) and C (Curve) commands\n const commands = dAttr.split(/(?=[LC])/);\n const startPosition = commands[0]\n .substring(1)\n .split(\",\")\n .map((coord) => parseFloat(coord));\n const points = [];\n commands.forEach((command) => {\n const currPoints = command\n .substring(1)\n .trim()\n .split(\" \")\n .map((pos) => {\n const [x, y] = pos.split(\",\");\n return [\n parseFloat(x) - startPosition[0],\n parseFloat(y) - startPosition[1],\n ];\n });\n points.push(...currPoints);\n });\n const endPosition = points[points.length - 1];\n arrow.startX = startPosition[0];\n arrow.startY = startPosition[1];\n arrow.endX = endPosition[0];\n arrow.endY = endPosition[1];\n arrow.points = points;\n }\n if (message) {\n // In mermaid the text is positioned above arrow but in Excalidraw\n // its postioned on the arrow hence the elements below it might look cluttered so shifting the arrow by an offset of 10px\n const offset = 10;\n arrow.startY = arrow.startY - offset;\n arrow.endY = arrow.endY - offset;\n }\n const showSequenceNumber = !!arrowNode.nextElementSibling?.classList.contains(\"sequenceNumber\");\n if (showSequenceNumber) {\n const text = arrowNode.nextElementSibling?.textContent;\n const height = 30;\n const yOffset = height / 2;\n const xOffset = 10;\n const sequenceNumber = {\n type: \"rectangle\",\n x: arrow.startX - xOffset,\n y: arrow.startY - yOffset,\n label: { text, fontSize: 14 },\n bgColor: \"#e9ecef\",\n height,\n subtype: \"sequence\",\n };\n arrow.sequenceNumber = sequenceNumber;\n }\n arrow.strokeColor = arrowNode.getAttribute(\"stroke\");\n arrow.strokeWidth = Number(arrowNode.getAttribute(\"stroke-width\"));\n arrow.type = \"arrow\";\n arrow.strokeStyle = SEQUENCE_ARROW_TYPES[message.type];\n return arrow;\n};\nconst createActorSymbol = (rootNode, text, opts) => {\n if (!rootNode) {\n throw \"root node not found\";\n }\n const groupId = (0,nanoid__WEBPACK_IMPORTED_MODULE_1__.nanoid)();\n const children = Array.from(rootNode.children);\n const nodeElements = [];\n children.forEach((child, index) => {\n const id = `${opts?.id}-${index}`;\n let ele;\n switch (child.tagName) {\n case \"line\":\n const startX = Number(child.getAttribute(\"x1\"));\n const startY = Number(child.getAttribute(\"y1\"));\n const endX = Number(child.getAttribute(\"x2\"));\n const endY = Number(child.getAttribute(\"y2\"));\n ele = createLineElement(child, startX, startY, endX, endY, { groupId, id });\n break;\n case \"text\":\n ele = createTextElement(child, text, { groupId, id });\n break;\n case \"circle\":\n ele = createContainerElement(child, \"ellipse\", {\n text: child.textContent || undefined,\n groupId,\n id,\n });\n default:\n ele = createContainerElement(child, _constants_js__WEBPACK_IMPORTED_MODULE_0__.SVG_TO_SHAPE_MAPPER[child.tagName], { text: child.textContent || undefined, groupId, id });\n }\n nodeElements.push(ele);\n });\n return nodeElements;\n};\nconst parseActor = (actors, containerEl) => {\n const actorRootNodes = Array.from(containerEl.querySelectorAll(\".actor\"))\n .filter((node) => node.tagName === \"text\")\n .map((actor) => actor.tagName === \"text\" && actor.parentElement);\n const nodes = [];\n const lines = [];\n const actorsLength = Object.keys(actors).length;\n Object.values(actors).forEach((actor, index) => {\n //@ts-ignore\n // For each actor there are two nodes top and bottom which is connected by a line\n const topRootNode = actorRootNodes[index];\n //@ts-ignore\n const bottomRootNode = actorRootNodes[actorsLength + index];\n if (!topRootNode) {\n throw \"root not found\";\n }\n const text = actor.description;\n if (actor.type === \"participant\") {\n // creating top actor node element\n const topNodeElement = createContainerElement(topRootNode.firstChild, \"rectangle\", { id: `${actor.name}-top`, text, subtype: \"actor\" });\n if (!topNodeElement) {\n throw \"Top Node element not found!\";\n }\n nodes.push([topNodeElement]);\n // creating bottom actor node element\n const bottomNodeElement = createContainerElement(bottomRootNode.firstChild, \"rectangle\", { id: `${actor.name}-bottom`, text, subtype: \"actor\" });\n nodes.push([bottomNodeElement]);\n // Get the line connecting the top and bottom nodes. As per the DOM, the line is rendered as first child of parent element\n const lineNode = topRootNode.previousElementSibling;\n if (lineNode?.tagName !== \"line\") {\n throw \"Line not found\";\n }\n const startX = Number(lineNode.getAttribute(\"x1\"));\n if (!topNodeElement.height) {\n throw \"Top node element height is null\";\n }\n const startY = topNodeElement.y + topNodeElement.height;\n // Make sure lines don't overlap with the nodes, in mermaid it overlaps but isn't visible as its pushed back and containers are non transparent\n const endY = bottomNodeElement.y;\n const endX = Number(lineNode.getAttribute(\"x2\"));\n const line = createLineElement(lineNode, startX, startY, endX, endY);\n lines.push(line);\n }\n else if (actor.type === \"actor\") {\n const topNodeElement = createActorSymbol(topRootNode, text, {\n id: `${actor.name}-top`,\n });\n nodes.push(topNodeElement);\n const bottomNodeElement = createActorSymbol(bottomRootNode, text, {\n id: `${actor.name}-bottom`,\n });\n nodes.push(bottomNodeElement);\n // Get the line connecting the top and bottom nodes. As per the DOM, the line is rendered as first child of parent element\n const lineNode = topRootNode.previousElementSibling;\n if (lineNode?.tagName !== \"line\") {\n throw \"Line not found\";\n }\n const startX = Number(lineNode.getAttribute(\"x1\"));\n const startY = Number(lineNode.getAttribute(\"y1\"));\n const endX = Number(lineNode.getAttribute(\"x2\"));\n // Make sure lines don't overlap with the nodes, in mermaid it overlaps but isn't visible as its pushed back and containers are non transparent\n const bottomEllipseNode = bottomNodeElement.find((node) => node.type === \"ellipse\");\n const endY = bottomEllipseNode.y;\n const line = createLineElement(lineNode, startX, startY, endX, endY);\n lines.push(line);\n }\n });\n return { nodes, lines };\n};\nconst computeArrows = (messages, containerEl) => {\n const arrows = [];\n const arrowNodes = Array.from(containerEl.querySelectorAll('[class*=\"messageLine\"]'));\n const supportedMessageTypes = Object.keys(SEQUENCE_ARROW_TYPES);\n const arrowMessages = messages.filter((message) => supportedMessageTypes.includes(message.type.toString()));\n arrowNodes.forEach((arrowNode, index) => {\n const message = arrowMessages[index];\n const arrow = createArrowElement(arrowNode, message);\n arrows.push(arrow);\n });\n return arrows;\n};\nconst computeNotes = (messages, containerEl) => {\n const noteNodes = Array.from(containerEl.querySelectorAll(\".note\")).map((node) => node.parentElement);\n const noteText = messages.filter((message) => message.type === MESSAGE_TYPE.NOTE);\n const notes = [];\n noteNodes.forEach((node, index) => {\n if (!node) {\n return;\n }\n const rect = node.firstChild;\n const text = noteText[index].message;\n const note = createContainerElement(rect, \"rectangle\", {\n text,\n subtype: \"note\",\n });\n notes.push(note);\n });\n return notes;\n};\nconst parseActivations = (containerEl) => {\n const activationNodes = Array.from(containerEl.querySelectorAll(`[class*=activation]`));\n const activations = [];\n activationNodes.forEach((node) => {\n const rect = createContainerElement(node, \"rectangle\", {\n text: \"\",\n subtype: \"activation\",\n });\n activations.push(rect);\n });\n return activations;\n};\nconst parseLoops = (messages, containerEl) => {\n const lineNodes = Array.from(containerEl.querySelectorAll(\".loopLine\"));\n const lines = [];\n const texts = [];\n const nodes = [];\n lineNodes.forEach((node) => {\n const startX = Number(node.getAttribute(\"x1\"));\n const startY = Number(node.getAttribute(\"y1\"));\n const endX = Number(node.getAttribute(\"x2\"));\n const endY = Number(node.getAttribute(\"y2\"));\n const line = createLineElement(node, startX, startY, endX, endY);\n line.strokeStyle = \"dotted\";\n line.strokeColor = \"#adb5bd\";\n line.strokeWidth = 2;\n lines.push(line);\n });\n const loopTextNodes = Array.from(containerEl.querySelectorAll(\".loopText\"));\n const criticalMessages = messages\n .filter((message) => message.type === MESSAGE_TYPE.CRITICAL_START)\n .map((message) => message.message);\n loopTextNodes.forEach((node) => {\n const text = node.textContent || \"\";\n const textElement = createTextElement(node, text);\n // The text is rendered between [ ] in DOM hence getting the text excluding the [ ]\n const rawText = text.match(/\\[(.*?)\\]/)?.[1] || \"\";\n const isCritical = criticalMessages.includes(rawText);\n // For critical label the coordinates are not accurate in mermaid as there is\n // no padding left hence shifting the text next to critical label by 16px (font size)\n if (isCritical) {\n textElement.x += 16;\n }\n texts.push(textElement);\n });\n const labelBoxes = Array.from(containerEl?.querySelectorAll(\".labelBox\"));\n const labelTextNode = Array.from(containerEl?.querySelectorAll(\".labelText\"));\n labelBoxes.forEach((labelBox, index) => {\n const labelText = labelTextNode[index]?.textContent || \"\";\n const container = createContainerElement(labelBox, \"rectangle\", {\n text: labelText,\n });\n container.strokeColor = \"#adb5bd\";\n container.bgColor = \"#e9ecef\";\n // So width is calculated based on label\n container.width = undefined;\n nodes.push(container);\n });\n return { lines, texts, nodes };\n};\nconst computeHighlights = (containerEl) => {\n const rects = Array.from(containerEl.querySelectorAll(\".rect\"))\n // Only drawing specifically for highlights as the same selector is for grouping as well. For grouping we\n // draw it ourselves\n .filter((node) => node.parentElement?.tagName !== \"g\");\n const nodes = [];\n rects.forEach((rect) => {\n const node = createContainerElement(rect, \"rectangle\", {\n text: \"\",\n subtype: \"highlight\",\n });\n nodes.push(node);\n });\n return nodes;\n};\nconst parseMermaidSequenceDiagram = (diagram, containerEl) => {\n diagram.parse();\n // Get mermaid parsed data from parser shared variable `yy`\n const mermaidParser = diagram.parser.yy;\n const nodes = [];\n const groups = mermaidParser.getBoxes();\n const bgHightlights = computeHighlights(containerEl);\n const actorData = mermaidParser.getActors();\n const { nodes: actors, lines } = parseActor(actorData, containerEl);\n const messages = mermaidParser.getMessages();\n const arrows = computeArrows(messages, containerEl);\n const notes = computeNotes(messages, containerEl);\n const activations = parseActivations(containerEl);\n const loops = parseLoops(messages, containerEl);\n nodes.push(bgHightlights);\n nodes.push(...actors);\n nodes.push(notes);\n nodes.push(activations);\n return { type: \"sequence\", lines, arrows, nodes, loops, groups };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L3BhcnNlci9zZXF1ZW5jZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBc0Q7QUFDdEI7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQ7QUFDQTtBQUNBLFlBQVksNkJBQTZCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0JBQW9CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLDhDQUFNO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixTQUFTLEdBQUcsTUFBTTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZFQUE2RSxhQUFhO0FBQzFGO0FBQ0E7QUFDQSx1REFBdUQsYUFBYTtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxvREFBb0QsOERBQW1CLG1CQUFtQixtREFBbUQ7QUFDN0k7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpR0FBaUcsT0FBTyxXQUFXLCtCQUErQjtBQUNsSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUdBQXVHLE9BQU8sV0FBVyxrQ0FBa0M7QUFDM0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsV0FBVztBQUNsQyxhQUFhO0FBQ2I7QUFDQTtBQUNBLHVCQUF1QixXQUFXO0FBQ2xDLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksdUJBQXVCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGV4Y2FsaWRyYXcvbWVybWFpZC10by1leGNhbGlkcmF3L2Rpc3QvcGFyc2VyL3NlcXVlbmNlLmpzP2Y5MGMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU1ZHX1RPX1NIQVBFX01BUFBFUiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gXCJuYW5vaWRcIjtcbi8vIEN1cnJlbnRseSBtZXJtYWlkIHN1cHBvcnRlZCB0aGVzZSA2IGFycm93IHR5cGVzLCB0aGUgbmFtZXMgYXJlIHRha2VuIGZyb20gbWVybWFpZFBhcnNlci5MSU5FVFlQRVxuY29uc3QgU0VRVUVOQ0VfQVJST1dfVFlQRVMgPSB7XG4gICAgMDogXCJTT0xJRFwiLFxuICAgIDE6IFwiRE9UVEVEXCIsXG4gICAgMzogXCJTT0xJRF9DUk9TU1wiLFxuICAgIDQ6IFwiRE9UVEVEX0NST1NTXCIsXG4gICAgNTogXCJTT0xJRF9PUEVOXCIsXG4gICAgNjogXCJET1RURURfT1BFTlwiLFxuICAgIDI0OiBcIlNPTElEX1BPSU5UXCIsXG4gICAgMjU6IFwiRE9UVEVEX1BPSU5UXCIsXG59O1xuY29uc3QgTUVTU0FHRV9UWVBFID0ge1xuICAgIFNPTElEOiAwLFxuICAgIERPVFRFRDogMSxcbiAgICBOT1RFOiAyLFxuICAgIFNPTElEX0NST1NTOiAzLFxuICAgIERPVFRFRF9DUk9TUzogNCxcbiAgICBTT0xJRF9PUEVOOiA1LFxuICAgIERPVFRFRF9PUEVOOiA2LFxuICAgIExPT1BfU1RBUlQ6IDEwLFxuICAgIExPT1BfRU5EOiAxMSxcbiAgICBBTFRfU1RBUlQ6IDEyLFxuICAgIEFMVF9FTFNFOiAxMyxcbiAgICBBTFRfRU5EOiAxNCxcbiAgICBPUFRfU1RBUlQ6IDE1LFxuICAgIE9QVF9FTkQ6IDE2LFxuICAgIEFDVElWRV9TVEFSVDogMTcsXG4gICAgQUNUSVZFX0VORDogMTgsXG4gICAgUEFSX1NUQVJUOiAxOSxcbiAgICBQQVJfQU5EOiAyMCxcbiAgICBQQVJfRU5EOiAyMSxcbiAgICBSRUNUX1NUQVJUOiAyMixcbiAgICBSRUNUX0VORDogMjMsXG4gICAgU09MSURfUE9JTlQ6IDI0LFxuICAgIERPVFRFRF9QT0lOVDogMjUsXG4gICAgQVVUT05VTUJFUjogMjYsXG4gICAgQ1JJVElDQUxfU1RBUlQ6IDI3LFxuICAgIENSSVRJQ0FMX09QVElPTjogMjgsXG4gICAgQ1JJVElDQUxfRU5EOiAyOSxcbiAgICBCUkVBS19TVEFSVDogMzAsXG4gICAgQlJFQUtfRU5EOiAzMSxcbiAgICBQQVJfT1ZFUl9TVEFSVDogMzIsXG59O1xuY29uc3QgY3JlYXRlQ29udGFpbmVyRWxlbWVudCA9IChub2RlLCB0eXBlLCBvcHRzID0ge30pID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSB7fTtcbiAgICBjb250YWluZXIudHlwZSA9IHR5cGU7XG4gICAgY29uc3QgeyB0ZXh0LCBzdWJ0eXBlLCBpZCwgZ3JvdXBJZCB9ID0gb3B0cztcbiAgICBjb250YWluZXIuaWQgPSBpZDtcbiAgICBpZiAoZ3JvdXBJZCkge1xuICAgICAgICBjb250YWluZXIuZ3JvdXBJZCA9IGdyb3VwSWQ7XG4gICAgfVxuICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIGNvbnRhaW5lci5sYWJlbCA9IHtcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICBmb250U2l6ZTogMTYsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGJvdW5kaW5nQm94ID0gbm9kZS5nZXRCQm94KCk7XG4gICAgY29udGFpbmVyLnggPSBib3VuZGluZ0JveC54O1xuICAgIGNvbnRhaW5lci55ID0gYm91bmRpbmdCb3gueTtcbiAgICBjb250YWluZXIud2lkdGggPSBib3VuZGluZ0JveC53aWR0aDtcbiAgICBjb250YWluZXIuaGVpZ2h0ID0gYm91bmRpbmdCb3guaGVpZ2h0O1xuICAgIGNvbnRhaW5lci5zdWJ0eXBlID0gc3VidHlwZTtcbiAgICBzd2l0Y2ggKHN1YnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImhpZ2hsaWdodFwiOlxuICAgICAgICAgICAgY29uc3QgYmdDb2xvciA9IG5vZGUuZ2V0QXR0cmlidXRlKFwiZmlsbFwiKTtcbiAgICAgICAgICAgIGlmIChiZ0NvbG9yKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmJnQ29sb3IgPSBiZ0NvbG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJub3RlXCI6XG4gICAgICAgICAgICBjb250YWluZXIuc3Ryb2tlU3R5bGUgPSBcImRhc2hlZFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBjb250YWluZXI7XG59O1xuY29uc3QgY3JlYXRlVGV4dEVsZW1lbnQgPSAodGV4dE5vZGUsIHRleHQsIG9wdHMpID0+IHtcbiAgICBjb25zdCBub2RlID0ge307XG4gICAgY29uc3QgeCA9IE51bWJlcih0ZXh0Tm9kZS5nZXRBdHRyaWJ1dGUoXCJ4XCIpKTtcbiAgICBjb25zdCB5ID0gTnVtYmVyKHRleHROb2RlLmdldEF0dHJpYnV0ZShcInlcIikpO1xuICAgIG5vZGUudHlwZSA9IFwidGV4dFwiO1xuICAgIG5vZGUudGV4dCA9IHRleHQ7XG4gICAgaWYgKG9wdHM/LmlkKSB7XG4gICAgICAgIG5vZGUuaWQgPSBvcHRzLmlkO1xuICAgIH1cbiAgICBpZiAob3B0cz8uZ3JvdXBJZCkge1xuICAgICAgICBub2RlLmdyb3VwSWQgPSBvcHRzLmdyb3VwSWQ7XG4gICAgfVxuICAgIGNvbnN0IGJvdW5kaW5nQm94ID0gdGV4dE5vZGUuZ2V0QkJveCgpO1xuICAgIG5vZGUud2lkdGggPSBib3VuZGluZ0JveC53aWR0aDtcbiAgICBub2RlLmhlaWdodCA9IGJvdW5kaW5nQm94LmhlaWdodDtcbiAgICBub2RlLnggPSB4IC0gYm91bmRpbmdCb3gud2lkdGggLyAyO1xuICAgIG5vZGUueSA9IHk7XG4gICAgY29uc3QgZm9udFNpemUgPSBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKHRleHROb2RlKS5mb250U2l6ZSk7XG4gICAgbm9kZS5mb250U2l6ZSA9IGZvbnRTaXplO1xuICAgIHJldHVybiBub2RlO1xufTtcbmNvbnN0IGNyZWF0ZUxpbmVFbGVtZW50ID0gKGxpbmVOb2RlLCBzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgb3B0cykgPT4ge1xuICAgIGNvbnN0IGxpbmUgPSB7fTtcbiAgICBsaW5lLnN0YXJ0WCA9IHN0YXJ0WDtcbiAgICBsaW5lLnN0YXJ0WSA9IHN0YXJ0WTtcbiAgICBsaW5lLmVuZFggPSBlbmRYO1xuICAgIGlmIChvcHRzPy5ncm91cElkKSB7XG4gICAgICAgIGxpbmUuZ3JvdXBJZCA9IG9wdHMuZ3JvdXBJZDtcbiAgICB9XG4gICAgaWYgKG9wdHM/LmlkKSB7XG4gICAgICAgIGxpbmUuaWQgPSBvcHRzLmlkO1xuICAgIH1cbiAgICAvLyBNYWtlIHN1cmUgbGluZXMgZG9uJ3Qgb3ZlcmxhcCB3aXRoIHRoZSBub2RlcywgaW4gbWVybWFpZCBpdCBvdmVybGFwcyBidXQgaXNuJ3QgdmlzaWJsZSBhcyBpdHMgcHVzaGVkIGJhY2sgYW5kIGNvbnRhaW5lcnMgYXJlIG5vbiB0cmFuc3BhcmVudFxuICAgIGxpbmUuZW5kWSA9IGVuZFk7XG4gICAgbGluZS5zdHJva2VDb2xvciA9IGxpbmVOb2RlLmdldEF0dHJpYnV0ZShcInN0cm9rZVwiKTtcbiAgICBsaW5lLnN0cm9rZVdpZHRoID0gTnVtYmVyKGxpbmVOb2RlLmdldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiKSk7XG4gICAgbGluZS50eXBlID0gXCJsaW5lXCI7XG4gICAgcmV0dXJuIGxpbmU7XG59O1xuY29uc3QgY3JlYXRlQXJyb3dFbGVtZW50ID0gKGFycm93Tm9kZSwgbWVzc2FnZSkgPT4ge1xuICAgIGNvbnN0IGFycm93ID0ge307XG4gICAgYXJyb3cubGFiZWwgPSB7IHRleHQ6IG1lc3NhZ2UubWVzc2FnZSwgZm9udFNpemU6IDE2IH07XG4gICAgY29uc3QgdGFnTmFtZSA9IGFycm93Tm9kZS50YWdOYW1lO1xuICAgIGlmICh0YWdOYW1lID09PSBcImxpbmVcIikge1xuICAgICAgICBhcnJvdy5zdGFydFggPSBOdW1iZXIoYXJyb3dOb2RlLmdldEF0dHJpYnV0ZShcIngxXCIpKTtcbiAgICAgICAgYXJyb3cuc3RhcnRZID0gTnVtYmVyKGFycm93Tm9kZS5nZXRBdHRyaWJ1dGUoXCJ5MVwiKSk7XG4gICAgICAgIGFycm93LmVuZFggPSBOdW1iZXIoYXJyb3dOb2RlLmdldEF0dHJpYnV0ZShcIngyXCIpKTtcbiAgICAgICAgYXJyb3cuZW5kWSA9IE51bWJlcihhcnJvd05vZGUuZ2V0QXR0cmlidXRlKFwieTJcIikpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0YWdOYW1lID09PSBcInBhdGhcIikge1xuICAgICAgICBjb25zdCBkQXR0ciA9IGFycm93Tm9kZS5nZXRBdHRyaWJ1dGUoXCJkXCIpO1xuICAgICAgICBpZiAoIWRBdHRyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhdGggZWxlbWVudCBkb2VzIG5vdCBjb250YWluIGEgXCJkXCIgYXR0cmlidXRlJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU3BsaXQgdGhlIGQgYXR0cmlidXRlIGJhc2VkIG9uIE0gKE1vdmUgVG8pICBhbmQgQyAoQ3VydmUpIGNvbW1hbmRzXG4gICAgICAgIGNvbnN0IGNvbW1hbmRzID0gZEF0dHIuc3BsaXQoLyg/PVtMQ10pLyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSBjb21tYW5kc1swXVxuICAgICAgICAgICAgLnN1YnN0cmluZygxKVxuICAgICAgICAgICAgLnNwbGl0KFwiLFwiKVxuICAgICAgICAgICAgLm1hcCgoY29vcmQpID0+IHBhcnNlRmxvYXQoY29vcmQpKTtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gW107XG4gICAgICAgIGNvbW1hbmRzLmZvckVhY2goKGNvbW1hbmQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJQb2ludHMgPSBjb21tYW5kXG4gICAgICAgICAgICAgICAgLnN1YnN0cmluZygxKVxuICAgICAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgICAgICAuc3BsaXQoXCIgXCIpXG4gICAgICAgICAgICAgICAgLm1hcCgocG9zKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgW3gsIHldID0gcG9zLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHgpIC0gc3RhcnRQb3NpdGlvblswXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VGbG9hdCh5KSAtIHN0YXJ0UG9zaXRpb25bMV0sXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcG9pbnRzLnB1c2goLi4uY3VyclBvaW50cyk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlbmRQb3NpdGlvbiA9IHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGFycm93LnN0YXJ0WCA9IHN0YXJ0UG9zaXRpb25bMF07XG4gICAgICAgIGFycm93LnN0YXJ0WSA9IHN0YXJ0UG9zaXRpb25bMV07XG4gICAgICAgIGFycm93LmVuZFggPSBlbmRQb3NpdGlvblswXTtcbiAgICAgICAgYXJyb3cuZW5kWSA9IGVuZFBvc2l0aW9uWzFdO1xuICAgICAgICBhcnJvdy5wb2ludHMgPSBwb2ludHM7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgIC8vIEluIG1lcm1haWQgdGhlIHRleHQgaXMgcG9zaXRpb25lZCBhYm92ZSBhcnJvdyBidXQgaW4gRXhjYWxpZHJhd1xuICAgICAgICAvLyBpdHMgcG9zdGlvbmVkIG9uIHRoZSBhcnJvdyBoZW5jZSB0aGUgZWxlbWVudHMgYmVsb3cgaXQgbWlnaHQgbG9vayBjbHV0dGVyZWQgc28gc2hpZnRpbmcgdGhlIGFycm93IGJ5IGFuIG9mZnNldCBvZiAxMHB4XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IDEwO1xuICAgICAgICBhcnJvdy5zdGFydFkgPSBhcnJvdy5zdGFydFkgLSBvZmZzZXQ7XG4gICAgICAgIGFycm93LmVuZFkgPSBhcnJvdy5lbmRZIC0gb2Zmc2V0O1xuICAgIH1cbiAgICBjb25zdCBzaG93U2VxdWVuY2VOdW1iZXIgPSAhIWFycm93Tm9kZS5uZXh0RWxlbWVudFNpYmxpbmc/LmNsYXNzTGlzdC5jb250YWlucyhcInNlcXVlbmNlTnVtYmVyXCIpO1xuICAgIGlmIChzaG93U2VxdWVuY2VOdW1iZXIpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGFycm93Tm9kZS5uZXh0RWxlbWVudFNpYmxpbmc/LnRleHRDb250ZW50O1xuICAgICAgICBjb25zdCBoZWlnaHQgPSAzMDtcbiAgICAgICAgY29uc3QgeU9mZnNldCA9IGhlaWdodCAvIDI7XG4gICAgICAgIGNvbnN0IHhPZmZzZXQgPSAxMDtcbiAgICAgICAgY29uc3Qgc2VxdWVuY2VOdW1iZXIgPSB7XG4gICAgICAgICAgICB0eXBlOiBcInJlY3RhbmdsZVwiLFxuICAgICAgICAgICAgeDogYXJyb3cuc3RhcnRYIC0geE9mZnNldCxcbiAgICAgICAgICAgIHk6IGFycm93LnN0YXJ0WSAtIHlPZmZzZXQsXG4gICAgICAgICAgICBsYWJlbDogeyB0ZXh0LCBmb250U2l6ZTogMTQgfSxcbiAgICAgICAgICAgIGJnQ29sb3I6IFwiI2U5ZWNlZlwiLFxuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgc3VidHlwZTogXCJzZXF1ZW5jZVwiLFxuICAgICAgICB9O1xuICAgICAgICBhcnJvdy5zZXF1ZW5jZU51bWJlciA9IHNlcXVlbmNlTnVtYmVyO1xuICAgIH1cbiAgICBhcnJvdy5zdHJva2VDb2xvciA9IGFycm93Tm9kZS5nZXRBdHRyaWJ1dGUoXCJzdHJva2VcIik7XG4gICAgYXJyb3cuc3Ryb2tlV2lkdGggPSBOdW1iZXIoYXJyb3dOb2RlLmdldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiKSk7XG4gICAgYXJyb3cudHlwZSA9IFwiYXJyb3dcIjtcbiAgICBhcnJvdy5zdHJva2VTdHlsZSA9IFNFUVVFTkNFX0FSUk9XX1RZUEVTW21lc3NhZ2UudHlwZV07XG4gICAgcmV0dXJuIGFycm93O1xufTtcbmNvbnN0IGNyZWF0ZUFjdG9yU3ltYm9sID0gKHJvb3ROb2RlLCB0ZXh0LCBvcHRzKSA9PiB7XG4gICAgaWYgKCFyb290Tm9kZSkge1xuICAgICAgICB0aHJvdyBcInJvb3Qgbm9kZSBub3QgZm91bmRcIjtcbiAgICB9XG4gICAgY29uc3QgZ3JvdXBJZCA9IG5hbm9pZCgpO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gQXJyYXkuZnJvbShyb290Tm9kZS5jaGlsZHJlbik7XG4gICAgY29uc3Qgbm9kZUVsZW1lbnRzID0gW107XG4gICAgY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gYCR7b3B0cz8uaWR9LSR7aW5kZXh9YDtcbiAgICAgICAgbGV0IGVsZTtcbiAgICAgICAgc3dpdGNoIChjaGlsZC50YWdOYW1lKSB7XG4gICAgICAgICAgICBjYXNlIFwibGluZVwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0WCA9IE51bWJlcihjaGlsZC5nZXRBdHRyaWJ1dGUoXCJ4MVwiKSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRZID0gTnVtYmVyKGNoaWxkLmdldEF0dHJpYnV0ZShcInkxXCIpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRYID0gTnVtYmVyKGNoaWxkLmdldEF0dHJpYnV0ZShcIngyXCIpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRZID0gTnVtYmVyKGNoaWxkLmdldEF0dHJpYnV0ZShcInkyXCIpKTtcbiAgICAgICAgICAgICAgICBlbGUgPSBjcmVhdGVMaW5lRWxlbWVudChjaGlsZCwgc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIHsgZ3JvdXBJZCwgaWQgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidGV4dFwiOlxuICAgICAgICAgICAgICAgIGVsZSA9IGNyZWF0ZVRleHRFbGVtZW50KGNoaWxkLCB0ZXh0LCB7IGdyb3VwSWQsIGlkIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImNpcmNsZVwiOlxuICAgICAgICAgICAgICAgIGVsZSA9IGNyZWF0ZUNvbnRhaW5lckVsZW1lbnQoY2hpbGQsIFwiZWxsaXBzZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGNoaWxkLnRleHRDb250ZW50IHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBJZCxcbiAgICAgICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGVsZSA9IGNyZWF0ZUNvbnRhaW5lckVsZW1lbnQoY2hpbGQsIFNWR19UT19TSEFQRV9NQVBQRVJbY2hpbGQudGFnTmFtZV0sIHsgdGV4dDogY2hpbGQudGV4dENvbnRlbnQgfHwgdW5kZWZpbmVkLCBncm91cElkLCBpZCB9KTtcbiAgICAgICAgfVxuICAgICAgICBub2RlRWxlbWVudHMucHVzaChlbGUpO1xuICAgIH0pO1xuICAgIHJldHVybiBub2RlRWxlbWVudHM7XG59O1xuY29uc3QgcGFyc2VBY3RvciA9IChhY3RvcnMsIGNvbnRhaW5lckVsKSA9PiB7XG4gICAgY29uc3QgYWN0b3JSb290Tm9kZXMgPSBBcnJheS5mcm9tKGNvbnRhaW5lckVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYWN0b3JcIikpXG4gICAgICAgIC5maWx0ZXIoKG5vZGUpID0+IG5vZGUudGFnTmFtZSA9PT0gXCJ0ZXh0XCIpXG4gICAgICAgIC5tYXAoKGFjdG9yKSA9PiBhY3Rvci50YWdOYW1lID09PSBcInRleHRcIiAmJiBhY3Rvci5wYXJlbnRFbGVtZW50KTtcbiAgICBjb25zdCBub2RlcyA9IFtdO1xuICAgIGNvbnN0IGxpbmVzID0gW107XG4gICAgY29uc3QgYWN0b3JzTGVuZ3RoID0gT2JqZWN0LmtleXMoYWN0b3JzKS5sZW5ndGg7XG4gICAgT2JqZWN0LnZhbHVlcyhhY3RvcnMpLmZvckVhY2goKGFjdG9yLCBpbmRleCkgPT4ge1xuICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgLy8gRm9yIGVhY2ggYWN0b3IgdGhlcmUgYXJlIHR3byBub2RlcyB0b3AgYW5kIGJvdHRvbSB3aGljaCBpcyBjb25uZWN0ZWQgYnkgYSBsaW5lXG4gICAgICAgIGNvbnN0IHRvcFJvb3ROb2RlID0gYWN0b3JSb290Tm9kZXNbaW5kZXhdO1xuICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgY29uc3QgYm90dG9tUm9vdE5vZGUgPSBhY3RvclJvb3ROb2Rlc1thY3RvcnNMZW5ndGggKyBpbmRleF07XG4gICAgICAgIGlmICghdG9wUm9vdE5vZGUpIHtcbiAgICAgICAgICAgIHRocm93IFwicm9vdCBub3QgZm91bmRcIjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZXh0ID0gYWN0b3IuZGVzY3JpcHRpb247XG4gICAgICAgIGlmIChhY3Rvci50eXBlID09PSBcInBhcnRpY2lwYW50XCIpIHtcbiAgICAgICAgICAgIC8vIGNyZWF0aW5nIHRvcCBhY3RvciBub2RlIGVsZW1lbnRcbiAgICAgICAgICAgIGNvbnN0IHRvcE5vZGVFbGVtZW50ID0gY3JlYXRlQ29udGFpbmVyRWxlbWVudCh0b3BSb290Tm9kZS5maXJzdENoaWxkLCBcInJlY3RhbmdsZVwiLCB7IGlkOiBgJHthY3Rvci5uYW1lfS10b3BgLCB0ZXh0LCBzdWJ0eXBlOiBcImFjdG9yXCIgfSk7XG4gICAgICAgICAgICBpZiAoIXRvcE5vZGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgXCJUb3AgTm9kZSBlbGVtZW50IG5vdCBmb3VuZCFcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGVzLnB1c2goW3RvcE5vZGVFbGVtZW50XSk7XG4gICAgICAgICAgICAvLyBjcmVhdGluZyBib3R0b20gYWN0b3Igbm9kZSBlbGVtZW50XG4gICAgICAgICAgICBjb25zdCBib3R0b21Ob2RlRWxlbWVudCA9IGNyZWF0ZUNvbnRhaW5lckVsZW1lbnQoYm90dG9tUm9vdE5vZGUuZmlyc3RDaGlsZCwgXCJyZWN0YW5nbGVcIiwgeyBpZDogYCR7YWN0b3IubmFtZX0tYm90dG9tYCwgdGV4dCwgc3VidHlwZTogXCJhY3RvclwiIH0pO1xuICAgICAgICAgICAgbm9kZXMucHVzaChbYm90dG9tTm9kZUVsZW1lbnRdKTtcbiAgICAgICAgICAgIC8vIEdldCB0aGUgbGluZSBjb25uZWN0aW5nIHRoZSB0b3AgYW5kIGJvdHRvbSBub2Rlcy4gQXMgcGVyIHRoZSBET00sIHRoZSBsaW5lIGlzIHJlbmRlcmVkIGFzIGZpcnN0IGNoaWxkIG9mIHBhcmVudCBlbGVtZW50XG4gICAgICAgICAgICBjb25zdCBsaW5lTm9kZSA9IHRvcFJvb3ROb2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgICAgICAgICBpZiAobGluZU5vZGU/LnRhZ05hbWUgIT09IFwibGluZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgXCJMaW5lIG5vdCBmb3VuZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3RhcnRYID0gTnVtYmVyKGxpbmVOb2RlLmdldEF0dHJpYnV0ZShcIngxXCIpKTtcbiAgICAgICAgICAgIGlmICghdG9wTm9kZUVsZW1lbnQuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgXCJUb3Agbm9kZSBlbGVtZW50IGhlaWdodCBpcyBudWxsXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdGFydFkgPSB0b3BOb2RlRWxlbWVudC55ICsgdG9wTm9kZUVsZW1lbnQuaGVpZ2h0O1xuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGxpbmVzIGRvbid0IG92ZXJsYXAgd2l0aCB0aGUgbm9kZXMsIGluIG1lcm1haWQgaXQgb3ZlcmxhcHMgYnV0IGlzbid0IHZpc2libGUgYXMgaXRzIHB1c2hlZCBiYWNrIGFuZCBjb250YWluZXJzIGFyZSBub24gdHJhbnNwYXJlbnRcbiAgICAgICAgICAgIGNvbnN0IGVuZFkgPSBib3R0b21Ob2RlRWxlbWVudC55O1xuICAgICAgICAgICAgY29uc3QgZW5kWCA9IE51bWJlcihsaW5lTm9kZS5nZXRBdHRyaWJ1dGUoXCJ4MlwiKSk7XG4gICAgICAgICAgICBjb25zdCBsaW5lID0gY3JlYXRlTGluZUVsZW1lbnQobGluZU5vZGUsIHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZKTtcbiAgICAgICAgICAgIGxpbmVzLnB1c2gobGluZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYWN0b3IudHlwZSA9PT0gXCJhY3RvclwiKSB7XG4gICAgICAgICAgICBjb25zdCB0b3BOb2RlRWxlbWVudCA9IGNyZWF0ZUFjdG9yU3ltYm9sKHRvcFJvb3ROb2RlLCB0ZXh0LCB7XG4gICAgICAgICAgICAgICAgaWQ6IGAke2FjdG9yLm5hbWV9LXRvcGAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG5vZGVzLnB1c2godG9wTm9kZUVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgYm90dG9tTm9kZUVsZW1lbnQgPSBjcmVhdGVBY3RvclN5bWJvbChib3R0b21Sb290Tm9kZSwgdGV4dCwge1xuICAgICAgICAgICAgICAgIGlkOiBgJHthY3Rvci5uYW1lfS1ib3R0b21gLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBub2Rlcy5wdXNoKGJvdHRvbU5vZGVFbGVtZW50KTtcbiAgICAgICAgICAgIC8vIEdldCB0aGUgbGluZSBjb25uZWN0aW5nIHRoZSB0b3AgYW5kIGJvdHRvbSBub2Rlcy4gQXMgcGVyIHRoZSBET00sIHRoZSBsaW5lIGlzIHJlbmRlcmVkIGFzIGZpcnN0IGNoaWxkIG9mIHBhcmVudCBlbGVtZW50XG4gICAgICAgICAgICBjb25zdCBsaW5lTm9kZSA9IHRvcFJvb3ROb2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgICAgICAgICBpZiAobGluZU5vZGU/LnRhZ05hbWUgIT09IFwibGluZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgXCJMaW5lIG5vdCBmb3VuZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3RhcnRYID0gTnVtYmVyKGxpbmVOb2RlLmdldEF0dHJpYnV0ZShcIngxXCIpKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0WSA9IE51bWJlcihsaW5lTm9kZS5nZXRBdHRyaWJ1dGUoXCJ5MVwiKSk7XG4gICAgICAgICAgICBjb25zdCBlbmRYID0gTnVtYmVyKGxpbmVOb2RlLmdldEF0dHJpYnV0ZShcIngyXCIpKTtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBsaW5lcyBkb24ndCBvdmVybGFwIHdpdGggdGhlIG5vZGVzLCBpbiBtZXJtYWlkIGl0IG92ZXJsYXBzIGJ1dCBpc24ndCB2aXNpYmxlIGFzIGl0cyBwdXNoZWQgYmFjayBhbmQgY29udGFpbmVycyBhcmUgbm9uIHRyYW5zcGFyZW50XG4gICAgICAgICAgICBjb25zdCBib3R0b21FbGxpcHNlTm9kZSA9IGJvdHRvbU5vZGVFbGVtZW50LmZpbmQoKG5vZGUpID0+IG5vZGUudHlwZSA9PT0gXCJlbGxpcHNlXCIpO1xuICAgICAgICAgICAgY29uc3QgZW5kWSA9IGJvdHRvbUVsbGlwc2VOb2RlLnk7XG4gICAgICAgICAgICBjb25zdCBsaW5lID0gY3JlYXRlTGluZUVsZW1lbnQobGluZU5vZGUsIHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZKTtcbiAgICAgICAgICAgIGxpbmVzLnB1c2gobGluZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4geyBub2RlcywgbGluZXMgfTtcbn07XG5jb25zdCBjb21wdXRlQXJyb3dzID0gKG1lc3NhZ2VzLCBjb250YWluZXJFbCkgPT4ge1xuICAgIGNvbnN0IGFycm93cyA9IFtdO1xuICAgIGNvbnN0IGFycm93Tm9kZXMgPSBBcnJheS5mcm9tKGNvbnRhaW5lckVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tjbGFzcyo9XCJtZXNzYWdlTGluZVwiXScpKTtcbiAgICBjb25zdCBzdXBwb3J0ZWRNZXNzYWdlVHlwZXMgPSBPYmplY3Qua2V5cyhTRVFVRU5DRV9BUlJPV19UWVBFUyk7XG4gICAgY29uc3QgYXJyb3dNZXNzYWdlcyA9IG1lc3NhZ2VzLmZpbHRlcigobWVzc2FnZSkgPT4gc3VwcG9ydGVkTWVzc2FnZVR5cGVzLmluY2x1ZGVzKG1lc3NhZ2UudHlwZS50b1N0cmluZygpKSk7XG4gICAgYXJyb3dOb2Rlcy5mb3JFYWNoKChhcnJvd05vZGUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhcnJvd01lc3NhZ2VzW2luZGV4XTtcbiAgICAgICAgY29uc3QgYXJyb3cgPSBjcmVhdGVBcnJvd0VsZW1lbnQoYXJyb3dOb2RlLCBtZXNzYWdlKTtcbiAgICAgICAgYXJyb3dzLnB1c2goYXJyb3cpO1xuICAgIH0pO1xuICAgIHJldHVybiBhcnJvd3M7XG59O1xuY29uc3QgY29tcHV0ZU5vdGVzID0gKG1lc3NhZ2VzLCBjb250YWluZXJFbCkgPT4ge1xuICAgIGNvbnN0IG5vdGVOb2RlcyA9IEFycmF5LmZyb20oY29udGFpbmVyRWwucXVlcnlTZWxlY3RvckFsbChcIi5ub3RlXCIpKS5tYXAoKG5vZGUpID0+IG5vZGUucGFyZW50RWxlbWVudCk7XG4gICAgY29uc3Qgbm90ZVRleHQgPSBtZXNzYWdlcy5maWx0ZXIoKG1lc3NhZ2UpID0+IG1lc3NhZ2UudHlwZSA9PT0gTUVTU0FHRV9UWVBFLk5PVEUpO1xuICAgIGNvbnN0IG5vdGVzID0gW107XG4gICAgbm90ZU5vZGVzLmZvckVhY2goKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlY3QgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgICAgIGNvbnN0IHRleHQgPSBub3RlVGV4dFtpbmRleF0ubWVzc2FnZTtcbiAgICAgICAgY29uc3Qgbm90ZSA9IGNyZWF0ZUNvbnRhaW5lckVsZW1lbnQocmVjdCwgXCJyZWN0YW5nbGVcIiwge1xuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIHN1YnR5cGU6IFwibm90ZVwiLFxuICAgICAgICB9KTtcbiAgICAgICAgbm90ZXMucHVzaChub3RlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gbm90ZXM7XG59O1xuY29uc3QgcGFyc2VBY3RpdmF0aW9ucyA9IChjb250YWluZXJFbCkgPT4ge1xuICAgIGNvbnN0IGFjdGl2YXRpb25Ob2RlcyA9IEFycmF5LmZyb20oY29udGFpbmVyRWwucXVlcnlTZWxlY3RvckFsbChgW2NsYXNzKj1hY3RpdmF0aW9uXWApKTtcbiAgICBjb25zdCBhY3RpdmF0aW9ucyA9IFtdO1xuICAgIGFjdGl2YXRpb25Ob2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBjcmVhdGVDb250YWluZXJFbGVtZW50KG5vZGUsIFwicmVjdGFuZ2xlXCIsIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICBzdWJ0eXBlOiBcImFjdGl2YXRpb25cIixcbiAgICAgICAgfSk7XG4gICAgICAgIGFjdGl2YXRpb25zLnB1c2gocmVjdCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjdGl2YXRpb25zO1xufTtcbmNvbnN0IHBhcnNlTG9vcHMgPSAobWVzc2FnZXMsIGNvbnRhaW5lckVsKSA9PiB7XG4gICAgY29uc3QgbGluZU5vZGVzID0gQXJyYXkuZnJvbShjb250YWluZXJFbC5xdWVyeVNlbGVjdG9yQWxsKFwiLmxvb3BMaW5lXCIpKTtcbiAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgIGNvbnN0IHRleHRzID0gW107XG4gICAgY29uc3Qgbm9kZXMgPSBbXTtcbiAgICBsaW5lTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICBjb25zdCBzdGFydFggPSBOdW1iZXIobm9kZS5nZXRBdHRyaWJ1dGUoXCJ4MVwiKSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0WSA9IE51bWJlcihub2RlLmdldEF0dHJpYnV0ZShcInkxXCIpKTtcbiAgICAgICAgY29uc3QgZW5kWCA9IE51bWJlcihub2RlLmdldEF0dHJpYnV0ZShcIngyXCIpKTtcbiAgICAgICAgY29uc3QgZW5kWSA9IE51bWJlcihub2RlLmdldEF0dHJpYnV0ZShcInkyXCIpKTtcbiAgICAgICAgY29uc3QgbGluZSA9IGNyZWF0ZUxpbmVFbGVtZW50KG5vZGUsIHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZKTtcbiAgICAgICAgbGluZS5zdHJva2VTdHlsZSA9IFwiZG90dGVkXCI7XG4gICAgICAgIGxpbmUuc3Ryb2tlQ29sb3IgPSBcIiNhZGI1YmRcIjtcbiAgICAgICAgbGluZS5zdHJva2VXaWR0aCA9IDI7XG4gICAgICAgIGxpbmVzLnB1c2gobGluZSk7XG4gICAgfSk7XG4gICAgY29uc3QgbG9vcFRleHROb2RlcyA9IEFycmF5LmZyb20oY29udGFpbmVyRWwucXVlcnlTZWxlY3RvckFsbChcIi5sb29wVGV4dFwiKSk7XG4gICAgY29uc3QgY3JpdGljYWxNZXNzYWdlcyA9IG1lc3NhZ2VzXG4gICAgICAgIC5maWx0ZXIoKG1lc3NhZ2UpID0+IG1lc3NhZ2UudHlwZSA9PT0gTUVTU0FHRV9UWVBFLkNSSVRJQ0FMX1NUQVJUKVxuICAgICAgICAubWFwKChtZXNzYWdlKSA9PiBtZXNzYWdlLm1lc3NhZ2UpO1xuICAgIGxvb3BUZXh0Tm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICBjb25zdCB0ZXh0ID0gbm9kZS50ZXh0Q29udGVudCB8fCBcIlwiO1xuICAgICAgICBjb25zdCB0ZXh0RWxlbWVudCA9IGNyZWF0ZVRleHRFbGVtZW50KG5vZGUsIHRleHQpO1xuICAgICAgICAvLyBUaGUgdGV4dCBpcyByZW5kZXJlZCBiZXR3ZWVuIFsgXSBpbiBET00gaGVuY2UgZ2V0dGluZyB0aGUgdGV4dCBleGNsdWRpbmcgdGhlIFsgXVxuICAgICAgICBjb25zdCByYXdUZXh0ID0gdGV4dC5tYXRjaCgvXFxbKC4qPylcXF0vKT8uWzFdIHx8IFwiXCI7XG4gICAgICAgIGNvbnN0IGlzQ3JpdGljYWwgPSBjcml0aWNhbE1lc3NhZ2VzLmluY2x1ZGVzKHJhd1RleHQpO1xuICAgICAgICAvLyBGb3IgY3JpdGljYWwgbGFiZWwgdGhlIGNvb3JkaW5hdGVzIGFyZSBub3QgYWNjdXJhdGUgaW4gbWVybWFpZCBhcyB0aGVyZSBpc1xuICAgICAgICAvLyBubyBwYWRkaW5nIGxlZnQgaGVuY2Ugc2hpZnRpbmcgdGhlIHRleHQgbmV4dCB0byBjcml0aWNhbCBsYWJlbCBieSAxNnB4IChmb250IHNpemUpXG4gICAgICAgIGlmIChpc0NyaXRpY2FsKSB7XG4gICAgICAgICAgICB0ZXh0RWxlbWVudC54ICs9IDE2O1xuICAgICAgICB9XG4gICAgICAgIHRleHRzLnB1c2godGV4dEVsZW1lbnQpO1xuICAgIH0pO1xuICAgIGNvbnN0IGxhYmVsQm94ZXMgPSBBcnJheS5mcm9tKGNvbnRhaW5lckVsPy5xdWVyeVNlbGVjdG9yQWxsKFwiLmxhYmVsQm94XCIpKTtcbiAgICBjb25zdCBsYWJlbFRleHROb2RlID0gQXJyYXkuZnJvbShjb250YWluZXJFbD8ucXVlcnlTZWxlY3RvckFsbChcIi5sYWJlbFRleHRcIikpO1xuICAgIGxhYmVsQm94ZXMuZm9yRWFjaCgobGFiZWxCb3gsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGxhYmVsVGV4dCA9IGxhYmVsVGV4dE5vZGVbaW5kZXhdPy50ZXh0Q29udGVudCB8fCBcIlwiO1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBjcmVhdGVDb250YWluZXJFbGVtZW50KGxhYmVsQm94LCBcInJlY3RhbmdsZVwiLCB7XG4gICAgICAgICAgICB0ZXh0OiBsYWJlbFRleHQsXG4gICAgICAgIH0pO1xuICAgICAgICBjb250YWluZXIuc3Ryb2tlQ29sb3IgPSBcIiNhZGI1YmRcIjtcbiAgICAgICAgY29udGFpbmVyLmJnQ29sb3IgPSBcIiNlOWVjZWZcIjtcbiAgICAgICAgLy8gU28gd2lkdGggaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiBsYWJlbFxuICAgICAgICBjb250YWluZXIud2lkdGggPSB1bmRlZmluZWQ7XG4gICAgICAgIG5vZGVzLnB1c2goY29udGFpbmVyKTtcbiAgICB9KTtcbiAgICByZXR1cm4geyBsaW5lcywgdGV4dHMsIG5vZGVzIH07XG59O1xuY29uc3QgY29tcHV0ZUhpZ2hsaWdodHMgPSAoY29udGFpbmVyRWwpID0+IHtcbiAgICBjb25zdCByZWN0cyA9IEFycmF5LmZyb20oY29udGFpbmVyRWwucXVlcnlTZWxlY3RvckFsbChcIi5yZWN0XCIpKVxuICAgICAgICAvLyBPbmx5IGRyYXdpbmcgc3BlY2lmaWNhbGx5IGZvciBoaWdobGlnaHRzIGFzIHRoZSBzYW1lIHNlbGVjdG9yIGlzIGZvciBncm91cGluZyBhcyB3ZWxsLiBGb3IgZ3JvdXBpbmcgd2VcbiAgICAgICAgLy8gZHJhdyBpdCBvdXJzZWx2ZXNcbiAgICAgICAgLmZpbHRlcigobm9kZSkgPT4gbm9kZS5wYXJlbnRFbGVtZW50Py50YWdOYW1lICE9PSBcImdcIik7XG4gICAgY29uc3Qgbm9kZXMgPSBbXTtcbiAgICByZWN0cy5mb3JFYWNoKChyZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBjcmVhdGVDb250YWluZXJFbGVtZW50KHJlY3QsIFwicmVjdGFuZ2xlXCIsIHtcbiAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICBzdWJ0eXBlOiBcImhpZ2hsaWdodFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gbm9kZXM7XG59O1xuZXhwb3J0IGNvbnN0IHBhcnNlTWVybWFpZFNlcXVlbmNlRGlhZ3JhbSA9IChkaWFncmFtLCBjb250YWluZXJFbCkgPT4ge1xuICAgIGRpYWdyYW0ucGFyc2UoKTtcbiAgICAvLyBHZXQgbWVybWFpZCBwYXJzZWQgZGF0YSBmcm9tIHBhcnNlciBzaGFyZWQgdmFyaWFibGUgYHl5YFxuICAgIGNvbnN0IG1lcm1haWRQYXJzZXIgPSBkaWFncmFtLnBhcnNlci55eTtcbiAgICBjb25zdCBub2RlcyA9IFtdO1xuICAgIGNvbnN0IGdyb3VwcyA9IG1lcm1haWRQYXJzZXIuZ2V0Qm94ZXMoKTtcbiAgICBjb25zdCBiZ0hpZ2h0bGlnaHRzID0gY29tcHV0ZUhpZ2hsaWdodHMoY29udGFpbmVyRWwpO1xuICAgIGNvbnN0IGFjdG9yRGF0YSA9IG1lcm1haWRQYXJzZXIuZ2V0QWN0b3JzKCk7XG4gICAgY29uc3QgeyBub2RlczogYWN0b3JzLCBsaW5lcyB9ID0gcGFyc2VBY3RvcihhY3RvckRhdGEsIGNvbnRhaW5lckVsKTtcbiAgICBjb25zdCBtZXNzYWdlcyA9IG1lcm1haWRQYXJzZXIuZ2V0TWVzc2FnZXMoKTtcbiAgICBjb25zdCBhcnJvd3MgPSBjb21wdXRlQXJyb3dzKG1lc3NhZ2VzLCBjb250YWluZXJFbCk7XG4gICAgY29uc3Qgbm90ZXMgPSBjb21wdXRlTm90ZXMobWVzc2FnZXMsIGNvbnRhaW5lckVsKTtcbiAgICBjb25zdCBhY3RpdmF0aW9ucyA9IHBhcnNlQWN0aXZhdGlvbnMoY29udGFpbmVyRWwpO1xuICAgIGNvbnN0IGxvb3BzID0gcGFyc2VMb29wcyhtZXNzYWdlcywgY29udGFpbmVyRWwpO1xuICAgIG5vZGVzLnB1c2goYmdIaWdodGxpZ2h0cyk7XG4gICAgbm9kZXMucHVzaCguLi5hY3RvcnMpO1xuICAgIG5vZGVzLnB1c2gobm90ZXMpO1xuICAgIG5vZGVzLnB1c2goYWN0aXZhdGlvbnMpO1xuICAgIHJldHVybiB7IHR5cGU6IFwic2VxdWVuY2VcIiwgbGluZXMsIGFycm93cywgbm9kZXMsIGxvb3BzLCBncm91cHMgfTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/parser/sequence.js\n");
|
|
389
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"parseMermaidSequenceDiagram\": () => (/* binding */ parseMermaidSequenceDiagram)\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/constants.js\");\n/* harmony import */ var nanoid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! nanoid */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/node_modules/nanoid/index.browser.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/utils.js\");\n\n\n\n// Currently mermaid supported these 6 arrow types, the names are taken from mermaidParser.LINETYPE\nconst SEQUENCE_ARROW_TYPES = {\n 0: \"SOLID\",\n 1: \"DOTTED\",\n 3: \"SOLID_CROSS\",\n 4: \"DOTTED_CROSS\",\n 5: \"SOLID_OPEN\",\n 6: \"DOTTED_OPEN\",\n 24: \"SOLID_POINT\",\n 25: \"DOTTED_POINT\",\n};\nconst MESSAGE_TYPE = {\n SOLID: 0,\n DOTTED: 1,\n NOTE: 2,\n SOLID_CROSS: 3,\n DOTTED_CROSS: 4,\n SOLID_OPEN: 5,\n DOTTED_OPEN: 6,\n LOOP_START: 10,\n LOOP_END: 11,\n ALT_START: 12,\n ALT_ELSE: 13,\n ALT_END: 14,\n OPT_START: 15,\n OPT_END: 16,\n ACTIVE_START: 17,\n ACTIVE_END: 18,\n PAR_START: 19,\n PAR_AND: 20,\n PAR_END: 21,\n RECT_START: 22,\n RECT_END: 23,\n SOLID_POINT: 24,\n DOTTED_POINT: 25,\n AUTONUMBER: 26,\n CRITICAL_START: 27,\n CRITICAL_OPTION: 28,\n CRITICAL_END: 29,\n BREAK_START: 30,\n BREAK_END: 31,\n PAR_OVER_START: 32,\n};\nconst createContainerElement = (node, type, opts = {}) => {\n const container = {};\n container.type = type;\n const { text, subtype, id, groupId } = opts;\n container.id = id;\n if (groupId) {\n container.groupId = groupId;\n }\n if (text) {\n container.label = {\n text: (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.entityCodesToText)(text),\n fontSize: 16,\n };\n }\n const boundingBox = node.getBBox();\n container.x = boundingBox.x;\n container.y = boundingBox.y;\n container.width = boundingBox.width;\n container.height = boundingBox.height;\n container.subtype = subtype;\n switch (subtype) {\n case \"highlight\":\n const bgColor = node.getAttribute(\"fill\");\n if (bgColor) {\n container.bgColor = bgColor;\n }\n break;\n case \"note\":\n container.strokeStyle = \"dashed\";\n break;\n }\n return container;\n};\nconst createTextElement = (textNode, text, opts) => {\n const node = {};\n const x = Number(textNode.getAttribute(\"x\"));\n const y = Number(textNode.getAttribute(\"y\"));\n node.type = \"text\";\n node.text = (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.entityCodesToText)(text);\n if (opts?.id) {\n node.id = opts.id;\n }\n if (opts?.groupId) {\n node.groupId = opts.groupId;\n }\n const boundingBox = textNode.getBBox();\n node.width = boundingBox.width;\n node.height = boundingBox.height;\n node.x = x - boundingBox.width / 2;\n node.y = y;\n const fontSize = parseInt(getComputedStyle(textNode).fontSize);\n node.fontSize = fontSize;\n return node;\n};\nconst createLineElement = (lineNode, startX, startY, endX, endY, opts) => {\n const line = {};\n line.startX = startX;\n line.startY = startY;\n line.endX = endX;\n if (opts?.groupId) {\n line.groupId = opts.groupId;\n }\n if (opts?.id) {\n line.id = opts.id;\n }\n // Make sure lines don't overlap with the nodes, in mermaid it overlaps but isn't visible as its pushed back and containers are non transparent\n line.endY = endY;\n line.strokeColor = lineNode.getAttribute(\"stroke\");\n line.strokeWidth = Number(lineNode.getAttribute(\"stroke-width\"));\n line.type = \"line\";\n return line;\n};\nconst createArrowElement = (arrowNode, message) => {\n const arrow = {};\n arrow.label = { text: (0,_utils_js__WEBPACK_IMPORTED_MODULE_1__.entityCodesToText)(message.message), fontSize: 16 };\n const tagName = arrowNode.tagName;\n if (tagName === \"line\") {\n arrow.startX = Number(arrowNode.getAttribute(\"x1\"));\n arrow.startY = Number(arrowNode.getAttribute(\"y1\"));\n arrow.endX = Number(arrowNode.getAttribute(\"x2\"));\n arrow.endY = Number(arrowNode.getAttribute(\"y2\"));\n }\n else if (tagName === \"path\") {\n const dAttr = arrowNode.getAttribute(\"d\");\n if (!dAttr) {\n throw new Error('Path element does not contain a \"d\" attribute');\n }\n // Split the d attribute based on M (Move To) and C (Curve) commands\n const commands = dAttr.split(/(?=[LC])/);\n const startPosition = commands[0]\n .substring(1)\n .split(\",\")\n .map((coord) => parseFloat(coord));\n const points = [];\n commands.forEach((command) => {\n const currPoints = command\n .substring(1)\n .trim()\n .split(\" \")\n .map((pos) => {\n const [x, y] = pos.split(\",\");\n return [\n parseFloat(x) - startPosition[0],\n parseFloat(y) - startPosition[1],\n ];\n });\n points.push(...currPoints);\n });\n const endPosition = points[points.length - 1];\n arrow.startX = startPosition[0];\n arrow.startY = startPosition[1];\n arrow.endX = endPosition[0];\n arrow.endY = endPosition[1];\n arrow.points = points;\n }\n if (message) {\n // In mermaid the text is positioned above arrow but in Excalidraw\n // its postioned on the arrow hence the elements below it might look cluttered so shifting the arrow by an offset of 10px\n const offset = 10;\n arrow.startY = arrow.startY - offset;\n arrow.endY = arrow.endY - offset;\n }\n const showSequenceNumber = !!arrowNode.nextElementSibling?.classList.contains(\"sequenceNumber\");\n if (showSequenceNumber) {\n const text = arrowNode.nextElementSibling?.textContent;\n const height = 30;\n const yOffset = height / 2;\n const xOffset = 10;\n const sequenceNumber = {\n type: \"rectangle\",\n x: arrow.startX - xOffset,\n y: arrow.startY - yOffset,\n label: { text, fontSize: 14 },\n bgColor: \"#e9ecef\",\n height,\n subtype: \"sequence\",\n };\n arrow.sequenceNumber = sequenceNumber;\n }\n arrow.strokeColor = arrowNode.getAttribute(\"stroke\");\n arrow.strokeWidth = Number(arrowNode.getAttribute(\"stroke-width\"));\n arrow.type = \"arrow\";\n arrow.strokeStyle = SEQUENCE_ARROW_TYPES[message.type];\n return arrow;\n};\nconst createActorSymbol = (rootNode, text, opts) => {\n if (!rootNode) {\n throw \"root node not found\";\n }\n const groupId = (0,nanoid__WEBPACK_IMPORTED_MODULE_2__.nanoid)();\n const children = Array.from(rootNode.children);\n const nodeElements = [];\n children.forEach((child, index) => {\n const id = `${opts?.id}-${index}`;\n let ele;\n switch (child.tagName) {\n case \"line\":\n const startX = Number(child.getAttribute(\"x1\"));\n const startY = Number(child.getAttribute(\"y1\"));\n const endX = Number(child.getAttribute(\"x2\"));\n const endY = Number(child.getAttribute(\"y2\"));\n ele = createLineElement(child, startX, startY, endX, endY, { groupId, id });\n break;\n case \"text\":\n ele = createTextElement(child, text, { groupId, id });\n break;\n case \"circle\":\n ele = createContainerElement(child, \"ellipse\", {\n text: child.textContent || undefined,\n groupId,\n id,\n });\n default:\n ele = createContainerElement(child, _constants_js__WEBPACK_IMPORTED_MODULE_0__.SVG_TO_SHAPE_MAPPER[child.tagName], { text: child.textContent || undefined, groupId, id });\n }\n nodeElements.push(ele);\n });\n return nodeElements;\n};\nconst parseActor = (actors, containerEl) => {\n const actorRootNodes = Array.from(containerEl.querySelectorAll(\".actor\"))\n .filter((node) => node.tagName === \"text\")\n .map((actor) => actor.tagName === \"text\" && actor.parentElement);\n const nodes = [];\n const lines = [];\n const actorsLength = Object.keys(actors).length;\n Object.values(actors).forEach((actor, index) => {\n //@ts-ignore\n // For each actor there are two nodes top and bottom which is connected by a line\n const topRootNode = actorRootNodes[index];\n //@ts-ignore\n const bottomRootNode = actorRootNodes[actorsLength + index];\n if (!topRootNode) {\n throw \"root not found\";\n }\n const text = actor.description;\n if (actor.type === \"participant\") {\n // creating top actor node element\n const topNodeElement = createContainerElement(topRootNode.firstChild, \"rectangle\", { id: `${actor.name}-top`, text, subtype: \"actor\" });\n if (!topNodeElement) {\n throw \"Top Node element not found!\";\n }\n nodes.push([topNodeElement]);\n // creating bottom actor node element\n const bottomNodeElement = createContainerElement(bottomRootNode.firstChild, \"rectangle\", { id: `${actor.name}-bottom`, text, subtype: \"actor\" });\n nodes.push([bottomNodeElement]);\n // Get the line connecting the top and bottom nodes. As per the DOM, the line is rendered as first child of parent element\n const lineNode = topRootNode.previousElementSibling;\n if (lineNode?.tagName !== \"line\") {\n throw \"Line not found\";\n }\n const startX = Number(lineNode.getAttribute(\"x1\"));\n if (!topNodeElement.height) {\n throw \"Top node element height is null\";\n }\n const startY = topNodeElement.y + topNodeElement.height;\n // Make sure lines don't overlap with the nodes, in mermaid it overlaps but isn't visible as its pushed back and containers are non transparent\n const endY = bottomNodeElement.y;\n const endX = Number(lineNode.getAttribute(\"x2\"));\n const line = createLineElement(lineNode, startX, startY, endX, endY);\n lines.push(line);\n }\n else if (actor.type === \"actor\") {\n const topNodeElement = createActorSymbol(topRootNode, text, {\n id: `${actor.name}-top`,\n });\n nodes.push(topNodeElement);\n const bottomNodeElement = createActorSymbol(bottomRootNode, text, {\n id: `${actor.name}-bottom`,\n });\n nodes.push(bottomNodeElement);\n // Get the line connecting the top and bottom nodes. As per the DOM, the line is rendered as first child of parent element\n const lineNode = topRootNode.previousElementSibling;\n if (lineNode?.tagName !== \"line\") {\n throw \"Line not found\";\n }\n const startX = Number(lineNode.getAttribute(\"x1\"));\n const startY = Number(lineNode.getAttribute(\"y1\"));\n const endX = Number(lineNode.getAttribute(\"x2\"));\n // Make sure lines don't overlap with the nodes, in mermaid it overlaps but isn't visible as its pushed back and containers are non transparent\n const bottomEllipseNode = bottomNodeElement.find((node) => node.type === \"ellipse\");\n const endY = bottomEllipseNode.y;\n const line = createLineElement(lineNode, startX, startY, endX, endY);\n lines.push(line);\n }\n });\n return { nodes, lines };\n};\nconst computeArrows = (messages, containerEl) => {\n const arrows = [];\n const arrowNodes = Array.from(containerEl.querySelectorAll('[class*=\"messageLine\"]'));\n const supportedMessageTypes = Object.keys(SEQUENCE_ARROW_TYPES);\n const arrowMessages = messages.filter((message) => supportedMessageTypes.includes(message.type.toString()));\n arrowNodes.forEach((arrowNode, index) => {\n const message = arrowMessages[index];\n const arrow = createArrowElement(arrowNode, message);\n arrows.push(arrow);\n });\n return arrows;\n};\nconst computeNotes = (messages, containerEl) => {\n const noteNodes = Array.from(containerEl.querySelectorAll(\".note\")).map((node) => node.parentElement);\n const noteText = messages.filter((message) => message.type === MESSAGE_TYPE.NOTE);\n const notes = [];\n noteNodes.forEach((node, index) => {\n if (!node) {\n return;\n }\n const rect = node.firstChild;\n const text = noteText[index].message;\n const note = createContainerElement(rect, \"rectangle\", {\n text,\n subtype: \"note\",\n });\n notes.push(note);\n });\n return notes;\n};\nconst parseActivations = (containerEl) => {\n const activationNodes = Array.from(containerEl.querySelectorAll(`[class*=activation]`));\n const activations = [];\n activationNodes.forEach((node) => {\n const rect = createContainerElement(node, \"rectangle\", {\n text: \"\",\n subtype: \"activation\",\n });\n activations.push(rect);\n });\n return activations;\n};\nconst parseLoops = (messages, containerEl) => {\n const lineNodes = Array.from(containerEl.querySelectorAll(\".loopLine\"));\n const lines = [];\n const texts = [];\n const nodes = [];\n lineNodes.forEach((node) => {\n const startX = Number(node.getAttribute(\"x1\"));\n const startY = Number(node.getAttribute(\"y1\"));\n const endX = Number(node.getAttribute(\"x2\"));\n const endY = Number(node.getAttribute(\"y2\"));\n const line = createLineElement(node, startX, startY, endX, endY);\n line.strokeStyle = \"dotted\";\n line.strokeColor = \"#adb5bd\";\n line.strokeWidth = 2;\n lines.push(line);\n });\n const loopTextNodes = Array.from(containerEl.querySelectorAll(\".loopText\"));\n const criticalMessages = messages\n .filter((message) => message.type === MESSAGE_TYPE.CRITICAL_START)\n .map((message) => message.message);\n loopTextNodes.forEach((node) => {\n const text = node.textContent || \"\";\n const textElement = createTextElement(node, text);\n // The text is rendered between [ ] in DOM hence getting the text excluding the [ ]\n const rawText = text.match(/\\[(.*?)\\]/)?.[1] || \"\";\n const isCritical = criticalMessages.includes(rawText);\n // For critical label the coordinates are not accurate in mermaid as there is\n // no padding left hence shifting the text next to critical label by 16px (font size)\n if (isCritical) {\n textElement.x += 16;\n }\n texts.push(textElement);\n });\n const labelBoxes = Array.from(containerEl?.querySelectorAll(\".labelBox\"));\n const labelTextNode = Array.from(containerEl?.querySelectorAll(\".labelText\"));\n labelBoxes.forEach((labelBox, index) => {\n const labelText = labelTextNode[index]?.textContent || \"\";\n const container = createContainerElement(labelBox, \"rectangle\", {\n text: labelText,\n });\n container.strokeColor = \"#adb5bd\";\n container.bgColor = \"#e9ecef\";\n // So width is calculated based on label\n container.width = undefined;\n nodes.push(container);\n });\n return { lines, texts, nodes };\n};\nconst computeHighlights = (containerEl) => {\n const rects = Array.from(containerEl.querySelectorAll(\".rect\"))\n // Only drawing specifically for highlights as the same selector is for grouping as well. For grouping we\n // draw it ourselves\n .filter((node) => node.parentElement?.tagName !== \"g\");\n const nodes = [];\n rects.forEach((rect) => {\n const node = createContainerElement(rect, \"rectangle\", {\n text: \"\",\n subtype: \"highlight\",\n });\n nodes.push(node);\n });\n return nodes;\n};\nconst parseMermaidSequenceDiagram = (diagram, containerEl) => {\n diagram.parse();\n // Get mermaid parsed data from parser shared variable `yy`\n const mermaidParser = diagram.parser.yy;\n const nodes = [];\n const groups = mermaidParser.getBoxes();\n const bgHightlights = computeHighlights(containerEl);\n const actorData = mermaidParser.getActors();\n const { nodes: actors, lines } = parseActor(actorData, containerEl);\n const messages = mermaidParser.getMessages();\n const arrows = computeArrows(messages, containerEl);\n const notes = computeNotes(messages, containerEl);\n const activations = parseActivations(containerEl);\n const loops = parseLoops(messages, containerEl);\n nodes.push(bgHightlights);\n nodes.push(...actors);\n nodes.push(notes);\n nodes.push(activations);\n return { type: \"sequence\", lines, arrows, nodes, loops, groups };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L3BhcnNlci9zZXF1ZW5jZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXNEO0FBQ3RCO0FBQ2dCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQSxZQUFZLDZCQUE2QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsNERBQWlCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiw0REFBaUI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixNQUFNLDREQUFpQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG9CQUFvQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQiw4Q0FBTTtBQUMxQjtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsU0FBUyxHQUFHLE1BQU07QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2RUFBNkUsYUFBYTtBQUMxRjtBQUNBO0FBQ0EsdURBQXVELGFBQWE7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0Esb0RBQW9ELDhEQUFtQixtQkFBbUIsbURBQW1EO0FBQzdJO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUdBQWlHLE9BQU8sV0FBVywrQkFBK0I7QUFDbEo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVHQUF1RyxPQUFPLFdBQVcsa0NBQWtDO0FBQzNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFdBQVc7QUFDbEMsYUFBYTtBQUNiO0FBQ0E7QUFDQSx1QkFBdUIsV0FBVztBQUNsQyxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHVCQUF1QjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L3BhcnNlci9zZXF1ZW5jZS5qcz9mOTBjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNWR19UT19TSEFQRV9NQVBQRVIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tIFwibmFub2lkXCI7XG5pbXBvcnQgeyBlbnRpdHlDb2Rlc1RvVGV4dCB9IGZyb20gXCIuLi91dGlscy5qc1wiO1xuLy8gQ3VycmVudGx5IG1lcm1haWQgc3VwcG9ydGVkIHRoZXNlIDYgYXJyb3cgdHlwZXMsIHRoZSBuYW1lcyBhcmUgdGFrZW4gZnJvbSBtZXJtYWlkUGFyc2VyLkxJTkVUWVBFXG5jb25zdCBTRVFVRU5DRV9BUlJPV19UWVBFUyA9IHtcbiAgICAwOiBcIlNPTElEXCIsXG4gICAgMTogXCJET1RURURcIixcbiAgICAzOiBcIlNPTElEX0NST1NTXCIsXG4gICAgNDogXCJET1RURURfQ1JPU1NcIixcbiAgICA1OiBcIlNPTElEX09QRU5cIixcbiAgICA2OiBcIkRPVFRFRF9PUEVOXCIsXG4gICAgMjQ6IFwiU09MSURfUE9JTlRcIixcbiAgICAyNTogXCJET1RURURfUE9JTlRcIixcbn07XG5jb25zdCBNRVNTQUdFX1RZUEUgPSB7XG4gICAgU09MSUQ6IDAsXG4gICAgRE9UVEVEOiAxLFxuICAgIE5PVEU6IDIsXG4gICAgU09MSURfQ1JPU1M6IDMsXG4gICAgRE9UVEVEX0NST1NTOiA0LFxuICAgIFNPTElEX09QRU46IDUsXG4gICAgRE9UVEVEX09QRU46IDYsXG4gICAgTE9PUF9TVEFSVDogMTAsXG4gICAgTE9PUF9FTkQ6IDExLFxuICAgIEFMVF9TVEFSVDogMTIsXG4gICAgQUxUX0VMU0U6IDEzLFxuICAgIEFMVF9FTkQ6IDE0LFxuICAgIE9QVF9TVEFSVDogMTUsXG4gICAgT1BUX0VORDogMTYsXG4gICAgQUNUSVZFX1NUQVJUOiAxNyxcbiAgICBBQ1RJVkVfRU5EOiAxOCxcbiAgICBQQVJfU1RBUlQ6IDE5LFxuICAgIFBBUl9BTkQ6IDIwLFxuICAgIFBBUl9FTkQ6IDIxLFxuICAgIFJFQ1RfU1RBUlQ6IDIyLFxuICAgIFJFQ1RfRU5EOiAyMyxcbiAgICBTT0xJRF9QT0lOVDogMjQsXG4gICAgRE9UVEVEX1BPSU5UOiAyNSxcbiAgICBBVVRPTlVNQkVSOiAyNixcbiAgICBDUklUSUNBTF9TVEFSVDogMjcsXG4gICAgQ1JJVElDQUxfT1BUSU9OOiAyOCxcbiAgICBDUklUSUNBTF9FTkQ6IDI5LFxuICAgIEJSRUFLX1NUQVJUOiAzMCxcbiAgICBCUkVBS19FTkQ6IDMxLFxuICAgIFBBUl9PVkVSX1NUQVJUOiAzMixcbn07XG5jb25zdCBjcmVhdGVDb250YWluZXJFbGVtZW50ID0gKG5vZGUsIHR5cGUsIG9wdHMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHt9O1xuICAgIGNvbnRhaW5lci50eXBlID0gdHlwZTtcbiAgICBjb25zdCB7IHRleHQsIHN1YnR5cGUsIGlkLCBncm91cElkIH0gPSBvcHRzO1xuICAgIGNvbnRhaW5lci5pZCA9IGlkO1xuICAgIGlmIChncm91cElkKSB7XG4gICAgICAgIGNvbnRhaW5lci5ncm91cElkID0gZ3JvdXBJZDtcbiAgICB9XG4gICAgaWYgKHRleHQpIHtcbiAgICAgICAgY29udGFpbmVyLmxhYmVsID0ge1xuICAgICAgICAgICAgdGV4dDogZW50aXR5Q29kZXNUb1RleHQodGV4dCksXG4gICAgICAgICAgICBmb250U2l6ZTogMTYsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGJvdW5kaW5nQm94ID0gbm9kZS5nZXRCQm94KCk7XG4gICAgY29udGFpbmVyLnggPSBib3VuZGluZ0JveC54O1xuICAgIGNvbnRhaW5lci55ID0gYm91bmRpbmdCb3gueTtcbiAgICBjb250YWluZXIud2lkdGggPSBib3VuZGluZ0JveC53aWR0aDtcbiAgICBjb250YWluZXIuaGVpZ2h0ID0gYm91bmRpbmdCb3guaGVpZ2h0O1xuICAgIGNvbnRhaW5lci5zdWJ0eXBlID0gc3VidHlwZTtcbiAgICBzd2l0Y2ggKHN1YnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImhpZ2hsaWdodFwiOlxuICAgICAgICAgICAgY29uc3QgYmdDb2xvciA9IG5vZGUuZ2V0QXR0cmlidXRlKFwiZmlsbFwiKTtcbiAgICAgICAgICAgIGlmIChiZ0NvbG9yKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmJnQ29sb3IgPSBiZ0NvbG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJub3RlXCI6XG4gICAgICAgICAgICBjb250YWluZXIuc3Ryb2tlU3R5bGUgPSBcImRhc2hlZFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBjb250YWluZXI7XG59O1xuY29uc3QgY3JlYXRlVGV4dEVsZW1lbnQgPSAodGV4dE5vZGUsIHRleHQsIG9wdHMpID0+IHtcbiAgICBjb25zdCBub2RlID0ge307XG4gICAgY29uc3QgeCA9IE51bWJlcih0ZXh0Tm9kZS5nZXRBdHRyaWJ1dGUoXCJ4XCIpKTtcbiAgICBjb25zdCB5ID0gTnVtYmVyKHRleHROb2RlLmdldEF0dHJpYnV0ZShcInlcIikpO1xuICAgIG5vZGUudHlwZSA9IFwidGV4dFwiO1xuICAgIG5vZGUudGV4dCA9IGVudGl0eUNvZGVzVG9UZXh0KHRleHQpO1xuICAgIGlmIChvcHRzPy5pZCkge1xuICAgICAgICBub2RlLmlkID0gb3B0cy5pZDtcbiAgICB9XG4gICAgaWYgKG9wdHM/Lmdyb3VwSWQpIHtcbiAgICAgICAgbm9kZS5ncm91cElkID0gb3B0cy5ncm91cElkO1xuICAgIH1cbiAgICBjb25zdCBib3VuZGluZ0JveCA9IHRleHROb2RlLmdldEJCb3goKTtcbiAgICBub2RlLndpZHRoID0gYm91bmRpbmdCb3gud2lkdGg7XG4gICAgbm9kZS5oZWlnaHQgPSBib3VuZGluZ0JveC5oZWlnaHQ7XG4gICAgbm9kZS54ID0geCAtIGJvdW5kaW5nQm94LndpZHRoIC8gMjtcbiAgICBub2RlLnkgPSB5O1xuICAgIGNvbnN0IGZvbnRTaXplID0gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0Tm9kZSkuZm9udFNpemUpO1xuICAgIG5vZGUuZm9udFNpemUgPSBmb250U2l6ZTtcbiAgICByZXR1cm4gbm9kZTtcbn07XG5jb25zdCBjcmVhdGVMaW5lRWxlbWVudCA9IChsaW5lTm9kZSwgc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIG9wdHMpID0+IHtcbiAgICBjb25zdCBsaW5lID0ge307XG4gICAgbGluZS5zdGFydFggPSBzdGFydFg7XG4gICAgbGluZS5zdGFydFkgPSBzdGFydFk7XG4gICAgbGluZS5lbmRYID0gZW5kWDtcbiAgICBpZiAob3B0cz8uZ3JvdXBJZCkge1xuICAgICAgICBsaW5lLmdyb3VwSWQgPSBvcHRzLmdyb3VwSWQ7XG4gICAgfVxuICAgIGlmIChvcHRzPy5pZCkge1xuICAgICAgICBsaW5lLmlkID0gb3B0cy5pZDtcbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIGxpbmVzIGRvbid0IG92ZXJsYXAgd2l0aCB0aGUgbm9kZXMsIGluIG1lcm1haWQgaXQgb3ZlcmxhcHMgYnV0IGlzbid0IHZpc2libGUgYXMgaXRzIHB1c2hlZCBiYWNrIGFuZCBjb250YWluZXJzIGFyZSBub24gdHJhbnNwYXJlbnRcbiAgICBsaW5lLmVuZFkgPSBlbmRZO1xuICAgIGxpbmUuc3Ryb2tlQ29sb3IgPSBsaW5lTm9kZS5nZXRBdHRyaWJ1dGUoXCJzdHJva2VcIik7XG4gICAgbGluZS5zdHJva2VXaWR0aCA9IE51bWJlcihsaW5lTm9kZS5nZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIikpO1xuICAgIGxpbmUudHlwZSA9IFwibGluZVwiO1xuICAgIHJldHVybiBsaW5lO1xufTtcbmNvbnN0IGNyZWF0ZUFycm93RWxlbWVudCA9IChhcnJvd05vZGUsIG1lc3NhZ2UpID0+IHtcbiAgICBjb25zdCBhcnJvdyA9IHt9O1xuICAgIGFycm93LmxhYmVsID0geyB0ZXh0OiBlbnRpdHlDb2Rlc1RvVGV4dChtZXNzYWdlLm1lc3NhZ2UpLCBmb250U2l6ZTogMTYgfTtcbiAgICBjb25zdCB0YWdOYW1lID0gYXJyb3dOb2RlLnRhZ05hbWU7XG4gICAgaWYgKHRhZ05hbWUgPT09IFwibGluZVwiKSB7XG4gICAgICAgIGFycm93LnN0YXJ0WCA9IE51bWJlcihhcnJvd05vZGUuZ2V0QXR0cmlidXRlKFwieDFcIikpO1xuICAgICAgICBhcnJvdy5zdGFydFkgPSBOdW1iZXIoYXJyb3dOb2RlLmdldEF0dHJpYnV0ZShcInkxXCIpKTtcbiAgICAgICAgYXJyb3cuZW5kWCA9IE51bWJlcihhcnJvd05vZGUuZ2V0QXR0cmlidXRlKFwieDJcIikpO1xuICAgICAgICBhcnJvdy5lbmRZID0gTnVtYmVyKGFycm93Tm9kZS5nZXRBdHRyaWJ1dGUoXCJ5MlwiKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRhZ05hbWUgPT09IFwicGF0aFwiKSB7XG4gICAgICAgIGNvbnN0IGRBdHRyID0gYXJyb3dOb2RlLmdldEF0dHJpYnV0ZShcImRcIik7XG4gICAgICAgIGlmICghZEF0dHIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGF0aCBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gYSBcImRcIiBhdHRyaWJ1dGUnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTcGxpdCB0aGUgZCBhdHRyaWJ1dGUgYmFzZWQgb24gTSAoTW92ZSBUbykgIGFuZCBDIChDdXJ2ZSkgY29tbWFuZHNcbiAgICAgICAgY29uc3QgY29tbWFuZHMgPSBkQXR0ci5zcGxpdCgvKD89W0xDXSkvKTtcbiAgICAgICAgY29uc3Qgc3RhcnRQb3NpdGlvbiA9IGNvbW1hbmRzWzBdXG4gICAgICAgICAgICAuc3Vic3RyaW5nKDEpXG4gICAgICAgICAgICAuc3BsaXQoXCIsXCIpXG4gICAgICAgICAgICAubWFwKChjb29yZCkgPT4gcGFyc2VGbG9hdChjb29yZCkpO1xuICAgICAgICBjb25zdCBwb2ludHMgPSBbXTtcbiAgICAgICAgY29tbWFuZHMuZm9yRWFjaCgoY29tbWFuZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VyclBvaW50cyA9IGNvbW1hbmRcbiAgICAgICAgICAgICAgICAuc3Vic3RyaW5nKDEpXG4gICAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgICAgIC5zcGxpdChcIiBcIilcbiAgICAgICAgICAgICAgICAubWFwKChwb3MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBbeCwgeV0gPSBwb3Muc3BsaXQoXCIsXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoeCkgLSBzdGFydFBvc2l0aW9uWzBdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHkpIC0gc3RhcnRQb3NpdGlvblsxXSxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwb2ludHMucHVzaCguLi5jdXJyUG9pbnRzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVuZFBvc2l0aW9uID0gcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgYXJyb3cuc3RhcnRYID0gc3RhcnRQb3NpdGlvblswXTtcbiAgICAgICAgYXJyb3cuc3RhcnRZID0gc3RhcnRQb3NpdGlvblsxXTtcbiAgICAgICAgYXJyb3cuZW5kWCA9IGVuZFBvc2l0aW9uWzBdO1xuICAgICAgICBhcnJvdy5lbmRZID0gZW5kUG9zaXRpb25bMV07XG4gICAgICAgIGFycm93LnBvaW50cyA9IHBvaW50cztcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgLy8gSW4gbWVybWFpZCB0aGUgdGV4dCBpcyBwb3NpdGlvbmVkIGFib3ZlIGFycm93IGJ1dCBpbiBFeGNhbGlkcmF3XG4gICAgICAgIC8vIGl0cyBwb3N0aW9uZWQgb24gdGhlIGFycm93IGhlbmNlIHRoZSBlbGVtZW50cyBiZWxvdyBpdCBtaWdodCBsb29rIGNsdXR0ZXJlZCBzbyBzaGlmdGluZyB0aGUgYXJyb3cgYnkgYW4gb2Zmc2V0IG9mIDEwcHhcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gMTA7XG4gICAgICAgIGFycm93LnN0YXJ0WSA9IGFycm93LnN0YXJ0WSAtIG9mZnNldDtcbiAgICAgICAgYXJyb3cuZW5kWSA9IGFycm93LmVuZFkgLSBvZmZzZXQ7XG4gICAgfVxuICAgIGNvbnN0IHNob3dTZXF1ZW5jZU51bWJlciA9ICEhYXJyb3dOb2RlLm5leHRFbGVtZW50U2libGluZz8uY2xhc3NMaXN0LmNvbnRhaW5zKFwic2VxdWVuY2VOdW1iZXJcIik7XG4gICAgaWYgKHNob3dTZXF1ZW5jZU51bWJlcikge1xuICAgICAgICBjb25zdCB0ZXh0ID0gYXJyb3dOb2RlLm5leHRFbGVtZW50U2libGluZz8udGV4dENvbnRlbnQ7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IDMwO1xuICAgICAgICBjb25zdCB5T2Zmc2V0ID0gaGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3QgeE9mZnNldCA9IDEwO1xuICAgICAgICBjb25zdCBzZXF1ZW5jZU51bWJlciA9IHtcbiAgICAgICAgICAgIHR5cGU6IFwicmVjdGFuZ2xlXCIsXG4gICAgICAgICAgICB4OiBhcnJvdy5zdGFydFggLSB4T2Zmc2V0LFxuICAgICAgICAgICAgeTogYXJyb3cuc3RhcnRZIC0geU9mZnNldCxcbiAgICAgICAgICAgIGxhYmVsOiB7IHRleHQsIGZvbnRTaXplOiAxNCB9LFxuICAgICAgICAgICAgYmdDb2xvcjogXCIjZTllY2VmXCIsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICBzdWJ0eXBlOiBcInNlcXVlbmNlXCIsXG4gICAgICAgIH07XG4gICAgICAgIGFycm93LnNlcXVlbmNlTnVtYmVyID0gc2VxdWVuY2VOdW1iZXI7XG4gICAgfVxuICAgIGFycm93LnN0cm9rZUNvbG9yID0gYXJyb3dOb2RlLmdldEF0dHJpYnV0ZShcInN0cm9rZVwiKTtcbiAgICBhcnJvdy5zdHJva2VXaWR0aCA9IE51bWJlcihhcnJvd05vZGUuZ2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIpKTtcbiAgICBhcnJvdy50eXBlID0gXCJhcnJvd1wiO1xuICAgIGFycm93LnN0cm9rZVN0eWxlID0gU0VRVUVOQ0VfQVJST1dfVFlQRVNbbWVzc2FnZS50eXBlXTtcbiAgICByZXR1cm4gYXJyb3c7XG59O1xuY29uc3QgY3JlYXRlQWN0b3JTeW1ib2wgPSAocm9vdE5vZGUsIHRleHQsIG9wdHMpID0+IHtcbiAgICBpZiAoIXJvb3ROb2RlKSB7XG4gICAgICAgIHRocm93IFwicm9vdCBub2RlIG5vdCBmb3VuZFwiO1xuICAgIH1cbiAgICBjb25zdCBncm91cElkID0gbmFub2lkKCk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBBcnJheS5mcm9tKHJvb3ROb2RlLmNoaWxkcmVuKTtcbiAgICBjb25zdCBub2RlRWxlbWVudHMgPSBbXTtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSBgJHtvcHRzPy5pZH0tJHtpbmRleH1gO1xuICAgICAgICBsZXQgZWxlO1xuICAgICAgICBzd2l0Y2ggKGNoaWxkLnRhZ05hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsaW5lXCI6XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRYID0gTnVtYmVyKGNoaWxkLmdldEF0dHJpYnV0ZShcIngxXCIpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydFkgPSBOdW1iZXIoY2hpbGQuZ2V0QXR0cmlidXRlKFwieTFcIikpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFggPSBOdW1iZXIoY2hpbGQuZ2V0QXR0cmlidXRlKFwieDJcIikpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZFkgPSBOdW1iZXIoY2hpbGQuZ2V0QXR0cmlidXRlKFwieTJcIikpO1xuICAgICAgICAgICAgICAgIGVsZSA9IGNyZWF0ZUxpbmVFbGVtZW50KGNoaWxkLCBzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgeyBncm91cElkLCBpZCB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICAgICAgICAgICAgZWxlID0gY3JlYXRlVGV4dEVsZW1lbnQoY2hpbGQsIHRleHQsIHsgZ3JvdXBJZCwgaWQgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiY2lyY2xlXCI6XG4gICAgICAgICAgICAgICAgZWxlID0gY3JlYXRlQ29udGFpbmVyRWxlbWVudChjaGlsZCwgXCJlbGxpcHNlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogY2hpbGQudGV4dENvbnRlbnQgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBncm91cElkLFxuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZWxlID0gY3JlYXRlQ29udGFpbmVyRWxlbWVudChjaGlsZCwgU1ZHX1RPX1NIQVBFX01BUFBFUltjaGlsZC50YWdOYW1lXSwgeyB0ZXh0OiBjaGlsZC50ZXh0Q29udGVudCB8fCB1bmRlZmluZWQsIGdyb3VwSWQsIGlkIH0pO1xuICAgICAgICB9XG4gICAgICAgIG5vZGVFbGVtZW50cy5wdXNoKGVsZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5vZGVFbGVtZW50cztcbn07XG5jb25zdCBwYXJzZUFjdG9yID0gKGFjdG9ycywgY29udGFpbmVyRWwpID0+IHtcbiAgICBjb25zdCBhY3RvclJvb3ROb2RlcyA9IEFycmF5LmZyb20oY29udGFpbmVyRWwucXVlcnlTZWxlY3RvckFsbChcIi5hY3RvclwiKSlcbiAgICAgICAgLmZpbHRlcigobm9kZSkgPT4gbm9kZS50YWdOYW1lID09PSBcInRleHRcIilcbiAgICAgICAgLm1hcCgoYWN0b3IpID0+IGFjdG9yLnRhZ05hbWUgPT09IFwidGV4dFwiICYmIGFjdG9yLnBhcmVudEVsZW1lbnQpO1xuICAgIGNvbnN0IG5vZGVzID0gW107XG4gICAgY29uc3QgbGluZXMgPSBbXTtcbiAgICBjb25zdCBhY3RvcnNMZW5ndGggPSBPYmplY3Qua2V5cyhhY3RvcnMpLmxlbmd0aDtcbiAgICBPYmplY3QudmFsdWVzKGFjdG9ycykuZm9yRWFjaCgoYWN0b3IsIGluZGV4KSA9PiB7XG4gICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAvLyBGb3IgZWFjaCBhY3RvciB0aGVyZSBhcmUgdHdvIG5vZGVzIHRvcCBhbmQgYm90dG9tIHdoaWNoIGlzIGNvbm5lY3RlZCBieSBhIGxpbmVcbiAgICAgICAgY29uc3QgdG9wUm9vdE5vZGUgPSBhY3RvclJvb3ROb2Rlc1tpbmRleF07XG4gICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICBjb25zdCBib3R0b21Sb290Tm9kZSA9IGFjdG9yUm9vdE5vZGVzW2FjdG9yc0xlbmd0aCArIGluZGV4XTtcbiAgICAgICAgaWYgKCF0b3BSb290Tm9kZSkge1xuICAgICAgICAgICAgdGhyb3cgXCJyb290IG5vdCBmb3VuZFwiO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRleHQgPSBhY3Rvci5kZXNjcmlwdGlvbjtcbiAgICAgICAgaWYgKGFjdG9yLnR5cGUgPT09IFwicGFydGljaXBhbnRcIikge1xuICAgICAgICAgICAgLy8gY3JlYXRpbmcgdG9wIGFjdG9yIG5vZGUgZWxlbWVudFxuICAgICAgICAgICAgY29uc3QgdG9wTm9kZUVsZW1lbnQgPSBjcmVhdGVDb250YWluZXJFbGVtZW50KHRvcFJvb3ROb2RlLmZpcnN0Q2hpbGQsIFwicmVjdGFuZ2xlXCIsIHsgaWQ6IGAke2FjdG9yLm5hbWV9LXRvcGAsIHRleHQsIHN1YnR5cGU6IFwiYWN0b3JcIiB9KTtcbiAgICAgICAgICAgIGlmICghdG9wTm9kZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBcIlRvcCBOb2RlIGVsZW1lbnQgbm90IGZvdW5kIVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9kZXMucHVzaChbdG9wTm9kZUVsZW1lbnRdKTtcbiAgICAgICAgICAgIC8vIGNyZWF0aW5nIGJvdHRvbSBhY3RvciBub2RlIGVsZW1lbnRcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbU5vZGVFbGVtZW50ID0gY3JlYXRlQ29udGFpbmVyRWxlbWVudChib3R0b21Sb290Tm9kZS5maXJzdENoaWxkLCBcInJlY3RhbmdsZVwiLCB7IGlkOiBgJHthY3Rvci5uYW1lfS1ib3R0b21gLCB0ZXh0LCBzdWJ0eXBlOiBcImFjdG9yXCIgfSk7XG4gICAgICAgICAgICBub2Rlcy5wdXNoKFtib3R0b21Ob2RlRWxlbWVudF0pO1xuICAgICAgICAgICAgLy8gR2V0IHRoZSBsaW5lIGNvbm5lY3RpbmcgdGhlIHRvcCBhbmQgYm90dG9tIG5vZGVzLiBBcyBwZXIgdGhlIERPTSwgdGhlIGxpbmUgaXMgcmVuZGVyZWQgYXMgZmlyc3QgY2hpbGQgb2YgcGFyZW50IGVsZW1lbnRcbiAgICAgICAgICAgIGNvbnN0IGxpbmVOb2RlID0gdG9wUm9vdE5vZGUucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgICAgICAgICAgIGlmIChsaW5lTm9kZT8udGFnTmFtZSAhPT0gXCJsaW5lXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBcIkxpbmUgbm90IGZvdW5kXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdGFydFggPSBOdW1iZXIobGluZU5vZGUuZ2V0QXR0cmlidXRlKFwieDFcIikpO1xuICAgICAgICAgICAgaWYgKCF0b3BOb2RlRWxlbWVudC5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBcIlRvcCBub2RlIGVsZW1lbnQgaGVpZ2h0IGlzIG51bGxcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0WSA9IHRvcE5vZGVFbGVtZW50LnkgKyB0b3BOb2RlRWxlbWVudC5oZWlnaHQ7XG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgbGluZXMgZG9uJ3Qgb3ZlcmxhcCB3aXRoIHRoZSBub2RlcywgaW4gbWVybWFpZCBpdCBvdmVybGFwcyBidXQgaXNuJ3QgdmlzaWJsZSBhcyBpdHMgcHVzaGVkIGJhY2sgYW5kIGNvbnRhaW5lcnMgYXJlIG5vbiB0cmFuc3BhcmVudFxuICAgICAgICAgICAgY29uc3QgZW5kWSA9IGJvdHRvbU5vZGVFbGVtZW50Lnk7XG4gICAgICAgICAgICBjb25zdCBlbmRYID0gTnVtYmVyKGxpbmVOb2RlLmdldEF0dHJpYnV0ZShcIngyXCIpKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBjcmVhdGVMaW5lRWxlbWVudChsaW5lTm9kZSwgc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFkpO1xuICAgICAgICAgICAgbGluZXMucHVzaChsaW5lKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhY3Rvci50eXBlID09PSBcImFjdG9yXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvcE5vZGVFbGVtZW50ID0gY3JlYXRlQWN0b3JTeW1ib2wodG9wUm9vdE5vZGUsIHRleHQsIHtcbiAgICAgICAgICAgICAgICBpZDogYCR7YWN0b3IubmFtZX0tdG9wYCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbm9kZXMucHVzaCh0b3BOb2RlRWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBib3R0b21Ob2RlRWxlbWVudCA9IGNyZWF0ZUFjdG9yU3ltYm9sKGJvdHRvbVJvb3ROb2RlLCB0ZXh0LCB7XG4gICAgICAgICAgICAgICAgaWQ6IGAke2FjdG9yLm5hbWV9LWJvdHRvbWAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG5vZGVzLnB1c2goYm90dG9tTm9kZUVsZW1lbnQpO1xuICAgICAgICAgICAgLy8gR2V0IHRoZSBsaW5lIGNvbm5lY3RpbmcgdGhlIHRvcCBhbmQgYm90dG9tIG5vZGVzLiBBcyBwZXIgdGhlIERPTSwgdGhlIGxpbmUgaXMgcmVuZGVyZWQgYXMgZmlyc3QgY2hpbGQgb2YgcGFyZW50IGVsZW1lbnRcbiAgICAgICAgICAgIGNvbnN0IGxpbmVOb2RlID0gdG9wUm9vdE5vZGUucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgICAgICAgICAgIGlmIChsaW5lTm9kZT8udGFnTmFtZSAhPT0gXCJsaW5lXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBcIkxpbmUgbm90IGZvdW5kXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdGFydFggPSBOdW1iZXIobGluZU5vZGUuZ2V0QXR0cmlidXRlKFwieDFcIikpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRZID0gTnVtYmVyKGxpbmVOb2RlLmdldEF0dHJpYnV0ZShcInkxXCIpKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZFggPSBOdW1iZXIobGluZU5vZGUuZ2V0QXR0cmlidXRlKFwieDJcIikpO1xuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGxpbmVzIGRvbid0IG92ZXJsYXAgd2l0aCB0aGUgbm9kZXMsIGluIG1lcm1haWQgaXQgb3ZlcmxhcHMgYnV0IGlzbid0IHZpc2libGUgYXMgaXRzIHB1c2hlZCBiYWNrIGFuZCBjb250YWluZXJzIGFyZSBub24gdHJhbnNwYXJlbnRcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbUVsbGlwc2VOb2RlID0gYm90dG9tTm9kZUVsZW1lbnQuZmluZCgobm9kZSkgPT4gbm9kZS50eXBlID09PSBcImVsbGlwc2VcIik7XG4gICAgICAgICAgICBjb25zdCBlbmRZID0gYm90dG9tRWxsaXBzZU5vZGUueTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBjcmVhdGVMaW5lRWxlbWVudChsaW5lTm9kZSwgc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFkpO1xuICAgICAgICAgICAgbGluZXMucHVzaChsaW5lKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7IG5vZGVzLCBsaW5lcyB9O1xufTtcbmNvbnN0IGNvbXB1dGVBcnJvd3MgPSAobWVzc2FnZXMsIGNvbnRhaW5lckVsKSA9PiB7XG4gICAgY29uc3QgYXJyb3dzID0gW107XG4gICAgY29uc3QgYXJyb3dOb2RlcyA9IEFycmF5LmZyb20oY29udGFpbmVyRWwucXVlcnlTZWxlY3RvckFsbCgnW2NsYXNzKj1cIm1lc3NhZ2VMaW5lXCJdJykpO1xuICAgIGNvbnN0IHN1cHBvcnRlZE1lc3NhZ2VUeXBlcyA9IE9iamVjdC5rZXlzKFNFUVVFTkNFX0FSUk9XX1RZUEVTKTtcbiAgICBjb25zdCBhcnJvd01lc3NhZ2VzID0gbWVzc2FnZXMuZmlsdGVyKChtZXNzYWdlKSA9PiBzdXBwb3J0ZWRNZXNzYWdlVHlwZXMuaW5jbHVkZXMobWVzc2FnZS50eXBlLnRvU3RyaW5nKCkpKTtcbiAgICBhcnJvd05vZGVzLmZvckVhY2goKGFycm93Tm9kZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGFycm93TWVzc2FnZXNbaW5kZXhdO1xuICAgICAgICBjb25zdCBhcnJvdyA9IGNyZWF0ZUFycm93RWxlbWVudChhcnJvd05vZGUsIG1lc3NhZ2UpO1xuICAgICAgICBhcnJvd3MucHVzaChhcnJvdyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFycm93cztcbn07XG5jb25zdCBjb21wdXRlTm90ZXMgPSAobWVzc2FnZXMsIGNvbnRhaW5lckVsKSA9PiB7XG4gICAgY29uc3Qgbm90ZU5vZGVzID0gQXJyYXkuZnJvbShjb250YWluZXJFbC5xdWVyeVNlbGVjdG9yQWxsKFwiLm5vdGVcIikpLm1hcCgobm9kZSkgPT4gbm9kZS5wYXJlbnRFbGVtZW50KTtcbiAgICBjb25zdCBub3RlVGV4dCA9IG1lc3NhZ2VzLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS50eXBlID09PSBNRVNTQUdFX1RZUEUuTk9URSk7XG4gICAgY29uc3Qgbm90ZXMgPSBbXTtcbiAgICBub3RlTm9kZXMuZm9yRWFjaCgobm9kZSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVjdCA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgICAgY29uc3QgdGV4dCA9IG5vdGVUZXh0W2luZGV4XS5tZXNzYWdlO1xuICAgICAgICBjb25zdCBub3RlID0gY3JlYXRlQ29udGFpbmVyRWxlbWVudChyZWN0LCBcInJlY3RhbmdsZVwiLCB7XG4gICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgc3VidHlwZTogXCJub3RlXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBub3Rlcy5wdXNoKG5vdGUpO1xuICAgIH0pO1xuICAgIHJldHVybiBub3Rlcztcbn07XG5jb25zdCBwYXJzZUFjdGl2YXRpb25zID0gKGNvbnRhaW5lckVsKSA9PiB7XG4gICAgY29uc3QgYWN0aXZhdGlvbk5vZGVzID0gQXJyYXkuZnJvbShjb250YWluZXJFbC5xdWVyeVNlbGVjdG9yQWxsKGBbY2xhc3MqPWFjdGl2YXRpb25dYCkpO1xuICAgIGNvbnN0IGFjdGl2YXRpb25zID0gW107XG4gICAgYWN0aXZhdGlvbk5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgcmVjdCA9IGNyZWF0ZUNvbnRhaW5lckVsZW1lbnQobm9kZSwgXCJyZWN0YW5nbGVcIiwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHN1YnR5cGU6IFwiYWN0aXZhdGlvblwiLFxuICAgICAgICB9KTtcbiAgICAgICAgYWN0aXZhdGlvbnMucHVzaChyZWN0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWN0aXZhdGlvbnM7XG59O1xuY29uc3QgcGFyc2VMb29wcyA9IChtZXNzYWdlcywgY29udGFpbmVyRWwpID0+IHtcbiAgICBjb25zdCBsaW5lTm9kZXMgPSBBcnJheS5mcm9tKGNvbnRhaW5lckVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubG9vcExpbmVcIikpO1xuICAgIGNvbnN0IGxpbmVzID0gW107XG4gICAgY29uc3QgdGV4dHMgPSBbXTtcbiAgICBjb25zdCBub2RlcyA9IFtdO1xuICAgIGxpbmVOb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0WCA9IE51bWJlcihub2RlLmdldEF0dHJpYnV0ZShcIngxXCIpKTtcbiAgICAgICAgY29uc3Qgc3RhcnRZID0gTnVtYmVyKG5vZGUuZ2V0QXR0cmlidXRlKFwieTFcIikpO1xuICAgICAgICBjb25zdCBlbmRYID0gTnVtYmVyKG5vZGUuZ2V0QXR0cmlidXRlKFwieDJcIikpO1xuICAgICAgICBjb25zdCBlbmRZID0gTnVtYmVyKG5vZGUuZ2V0QXR0cmlidXRlKFwieTJcIikpO1xuICAgICAgICBjb25zdCBsaW5lID0gY3JlYXRlTGluZUVsZW1lbnQobm9kZSwgc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFkpO1xuICAgICAgICBsaW5lLnN0cm9rZVN0eWxlID0gXCJkb3R0ZWRcIjtcbiAgICAgICAgbGluZS5zdHJva2VDb2xvciA9IFwiI2FkYjViZFwiO1xuICAgICAgICBsaW5lLnN0cm9rZVdpZHRoID0gMjtcbiAgICAgICAgbGluZXMucHVzaChsaW5lKTtcbiAgICB9KTtcbiAgICBjb25zdCBsb29wVGV4dE5vZGVzID0gQXJyYXkuZnJvbShjb250YWluZXJFbC5xdWVyeVNlbGVjdG9yQWxsKFwiLmxvb3BUZXh0XCIpKTtcbiAgICBjb25zdCBjcml0aWNhbE1lc3NhZ2VzID0gbWVzc2FnZXNcbiAgICAgICAgLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS50eXBlID09PSBNRVNTQUdFX1RZUEUuQ1JJVElDQUxfU1RBUlQpXG4gICAgICAgIC5tYXAoKG1lc3NhZ2UpID0+IG1lc3NhZ2UubWVzc2FnZSk7XG4gICAgbG9vcFRleHROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBub2RlLnRleHRDb250ZW50IHx8IFwiXCI7XG4gICAgICAgIGNvbnN0IHRleHRFbGVtZW50ID0gY3JlYXRlVGV4dEVsZW1lbnQobm9kZSwgdGV4dCk7XG4gICAgICAgIC8vIFRoZSB0ZXh0IGlzIHJlbmRlcmVkIGJldHdlZW4gWyBdIGluIERPTSBoZW5jZSBnZXR0aW5nIHRoZSB0ZXh0IGV4Y2x1ZGluZyB0aGUgWyBdXG4gICAgICAgIGNvbnN0IHJhd1RleHQgPSB0ZXh0Lm1hdGNoKC9cXFsoLio/KVxcXS8pPy5bMV0gfHwgXCJcIjtcbiAgICAgICAgY29uc3QgaXNDcml0aWNhbCA9IGNyaXRpY2FsTWVzc2FnZXMuaW5jbHVkZXMocmF3VGV4dCk7XG4gICAgICAgIC8vIEZvciBjcml0aWNhbCBsYWJlbCB0aGUgY29vcmRpbmF0ZXMgYXJlIG5vdCBhY2N1cmF0ZSBpbiBtZXJtYWlkIGFzIHRoZXJlIGlzXG4gICAgICAgIC8vIG5vIHBhZGRpbmcgbGVmdCBoZW5jZSBzaGlmdGluZyB0aGUgdGV4dCBuZXh0IHRvIGNyaXRpY2FsIGxhYmVsIGJ5IDE2cHggKGZvbnQgc2l6ZSlcbiAgICAgICAgaWYgKGlzQ3JpdGljYWwpIHtcbiAgICAgICAgICAgIHRleHRFbGVtZW50LnggKz0gMTY7XG4gICAgICAgIH1cbiAgICAgICAgdGV4dHMucHVzaCh0ZXh0RWxlbWVudCk7XG4gICAgfSk7XG4gICAgY29uc3QgbGFiZWxCb3hlcyA9IEFycmF5LmZyb20oY29udGFpbmVyRWw/LnF1ZXJ5U2VsZWN0b3JBbGwoXCIubGFiZWxCb3hcIikpO1xuICAgIGNvbnN0IGxhYmVsVGV4dE5vZGUgPSBBcnJheS5mcm9tKGNvbnRhaW5lckVsPy5xdWVyeVNlbGVjdG9yQWxsKFwiLmxhYmVsVGV4dFwiKSk7XG4gICAgbGFiZWxCb3hlcy5mb3JFYWNoKChsYWJlbEJveCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgbGFiZWxUZXh0ID0gbGFiZWxUZXh0Tm9kZVtpbmRleF0/LnRleHRDb250ZW50IHx8IFwiXCI7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGNyZWF0ZUNvbnRhaW5lckVsZW1lbnQobGFiZWxCb3gsIFwicmVjdGFuZ2xlXCIsIHtcbiAgICAgICAgICAgIHRleHQ6IGxhYmVsVGV4dCxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnRhaW5lci5zdHJva2VDb2xvciA9IFwiI2FkYjViZFwiO1xuICAgICAgICBjb250YWluZXIuYmdDb2xvciA9IFwiI2U5ZWNlZlwiO1xuICAgICAgICAvLyBTbyB3aWR0aCBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIGxhYmVsXG4gICAgICAgIGNvbnRhaW5lci53aWR0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbm9kZXMucHVzaChjb250YWluZXIpO1xuICAgIH0pO1xuICAgIHJldHVybiB7IGxpbmVzLCB0ZXh0cywgbm9kZXMgfTtcbn07XG5jb25zdCBjb21wdXRlSGlnaGxpZ2h0cyA9IChjb250YWluZXJFbCkgPT4ge1xuICAgIGNvbnN0IHJlY3RzID0gQXJyYXkuZnJvbShjb250YWluZXJFbC5xdWVyeVNlbGVjdG9yQWxsKFwiLnJlY3RcIikpXG4gICAgICAgIC8vIE9ubHkgZHJhd2luZyBzcGVjaWZpY2FsbHkgZm9yIGhpZ2hsaWdodHMgYXMgdGhlIHNhbWUgc2VsZWN0b3IgaXMgZm9yIGdyb3VwaW5nIGFzIHdlbGwuIEZvciBncm91cGluZyB3ZVxuICAgICAgICAvLyBkcmF3IGl0IG91cnNlbHZlc1xuICAgICAgICAuZmlsdGVyKChub2RlKSA9PiBub2RlLnBhcmVudEVsZW1lbnQ/LnRhZ05hbWUgIT09IFwiZ1wiKTtcbiAgICBjb25zdCBub2RlcyA9IFtdO1xuICAgIHJlY3RzLmZvckVhY2goKHJlY3QpID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGNyZWF0ZUNvbnRhaW5lckVsZW1lbnQocmVjdCwgXCJyZWN0YW5nbGVcIiwge1xuICAgICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICAgIHN1YnR5cGU6IFwiaGlnaGxpZ2h0XCIsXG4gICAgICAgIH0pO1xuICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgIH0pO1xuICAgIHJldHVybiBub2Rlcztcbn07XG5leHBvcnQgY29uc3QgcGFyc2VNZXJtYWlkU2VxdWVuY2VEaWFncmFtID0gKGRpYWdyYW0sIGNvbnRhaW5lckVsKSA9PiB7XG4gICAgZGlhZ3JhbS5wYXJzZSgpO1xuICAgIC8vIEdldCBtZXJtYWlkIHBhcnNlZCBkYXRhIGZyb20gcGFyc2VyIHNoYXJlZCB2YXJpYWJsZSBgeXlgXG4gICAgY29uc3QgbWVybWFpZFBhcnNlciA9IGRpYWdyYW0ucGFyc2VyLnl5O1xuICAgIGNvbnN0IG5vZGVzID0gW107XG4gICAgY29uc3QgZ3JvdXBzID0gbWVybWFpZFBhcnNlci5nZXRCb3hlcygpO1xuICAgIGNvbnN0IGJnSGlnaHRsaWdodHMgPSBjb21wdXRlSGlnaGxpZ2h0cyhjb250YWluZXJFbCk7XG4gICAgY29uc3QgYWN0b3JEYXRhID0gbWVybWFpZFBhcnNlci5nZXRBY3RvcnMoKTtcbiAgICBjb25zdCB7IG5vZGVzOiBhY3RvcnMsIGxpbmVzIH0gPSBwYXJzZUFjdG9yKGFjdG9yRGF0YSwgY29udGFpbmVyRWwpO1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gbWVybWFpZFBhcnNlci5nZXRNZXNzYWdlcygpO1xuICAgIGNvbnN0IGFycm93cyA9IGNvbXB1dGVBcnJvd3MobWVzc2FnZXMsIGNvbnRhaW5lckVsKTtcbiAgICBjb25zdCBub3RlcyA9IGNvbXB1dGVOb3RlcyhtZXNzYWdlcywgY29udGFpbmVyRWwpO1xuICAgIGNvbnN0IGFjdGl2YXRpb25zID0gcGFyc2VBY3RpdmF0aW9ucyhjb250YWluZXJFbCk7XG4gICAgY29uc3QgbG9vcHMgPSBwYXJzZUxvb3BzKG1lc3NhZ2VzLCBjb250YWluZXJFbCk7XG4gICAgbm9kZXMucHVzaChiZ0hpZ2h0bGlnaHRzKTtcbiAgICBub2Rlcy5wdXNoKC4uLmFjdG9ycyk7XG4gICAgbm9kZXMucHVzaChub3Rlcyk7XG4gICAgbm9kZXMucHVzaChhY3RpdmF0aW9ucyk7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJzZXF1ZW5jZVwiLCBsaW5lcywgYXJyb3dzLCBub2RlcywgbG9vcHMsIGdyb3VwcyB9O1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/parser/sequence.js\n");
|
|
390
390
|
|
|
391
391
|
/***/ }),
|
|
392
392
|
|
|
@@ -397,7 +397,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
397
397
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
398
398
|
|
|
399
399
|
"use strict";
|
|
400
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"entityCodesToText\": () => (/* binding */ entityCodesToText),\n/* harmony export */ \"getTransformAttr\": () => (/* binding */ getTransformAttr),\n/* harmony export */ \"isSupportedDiagram\": () => (/* binding */ isSupportedDiagram)\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/constants.js\");\n\n// Check if the definition is a supported diagram\nconst isSupportedDiagram = (definition) => {\n return _constants_js__WEBPACK_IMPORTED_MODULE_0__.SUPPORTED_DIAGRAM_TYPES.some((chartType) => definition.trim().startsWith(chartType));\n};\n// Convert mermaid entity codes to text e.g. \"#9829;\" to \"♥\"\nconst entityCodesToText = (input) => {\n const modifiedInput = input\n .replace(/#(\\d+);/g, \"&#$1;\")\n .replace(/#([a-z]+);/g, \"&$1;\");\n const element = document.createElement(\"textarea\");\n element.innerHTML = modifiedInput;\n return element.value;\n};\nconst getTransformAttr = (el) => {\n const transformAttr = el.getAttribute(\"transform\");\n const translateMatch = transformAttr?.match(/translate\\(([\\d.-]+),\\s*([\\d.-]+)\\)/);\n let transformX = 0;\n let transformY = 0;\n if (translateMatch) {\n transformX = Number(translateMatch[1]);\n transformY = Number(translateMatch[2]);\n }\n return { transformX, transformY };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
400
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"decodeEntities\": () => (/* binding */ decodeEntities),\n/* harmony export */ \"encodeEntities\": () => (/* binding */ encodeEntities),\n/* harmony export */ \"entityCodesToText\": () => (/* binding */ entityCodesToText),\n/* harmony export */ \"getTransformAttr\": () => (/* binding */ getTransformAttr),\n/* harmony export */ \"isSupportedDiagram\": () => (/* binding */ isSupportedDiagram)\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants.js */ \"../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/constants.js\");\n\n// Check if the definition is a supported diagram\nconst isSupportedDiagram = (definition) => {\n return _constants_js__WEBPACK_IMPORTED_MODULE_0__.SUPPORTED_DIAGRAM_TYPES.some((chartType) => definition.trim().startsWith(chartType));\n};\n// Convert mermaid entity codes to text e.g. \"#9829;\" to \"♥\"\nconst entityCodesToText = (input) => {\n input = decodeEntities(input);\n const modifiedInput = input\n .replace(/#(\\d+);/g, \"&#$1;\")\n .replace(/#([a-z]+);/g, \"&$1;\");\n const element = document.createElement(\"textarea\");\n element.innerHTML = modifiedInput;\n return element.value;\n};\nconst getTransformAttr = (el) => {\n const transformAttr = el.getAttribute(\"transform\");\n const translateMatch = transformAttr?.match(/translate\\(([\\d.-]+),\\s*([\\d.-]+)\\)/);\n let transformX = 0;\n let transformY = 0;\n if (translateMatch) {\n transformX = Number(translateMatch[1]);\n transformY = Number(translateMatch[2]);\n }\n return { transformX, transformY };\n};\n//TODO Once fixed in mermaid this will be removed\nconst encodeEntities = (text) => {\n let txt = text;\n txt = txt.replace(/style.*:\\S*#.*;/g, (s) => {\n return s.substring(0, s.length - 1);\n });\n txt = txt.replace(/classDef.*:\\S*#.*;/g, (s) => {\n return s.substring(0, s.length - 1);\n });\n txt = txt.replace(/#\\w+;/g, (s) => {\n const innerTxt = s.substring(1, s.length - 1);\n const isInt = /^\\+?\\d+$/.test(innerTxt);\n if (isInt) {\n return `fl°°${innerTxt}¶ß`;\n }\n return `fl°${innerTxt}¶ß`;\n });\n return txt;\n};\nconst decodeEntities = function (text) {\n return text.replace(/fl°°/g, \"#\").replace(/fl°/g, \"&\").replace(/¶ß/g, \";\");\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L3V0aWxzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUF5RDtBQUN6RDtBQUNPO0FBQ1AsV0FBVyx1RUFBNEI7QUFDdkM7QUFDQSxvREFBb0Q7QUFDN0M7QUFDUDtBQUNBO0FBQ0EseUJBQXlCLFVBQVU7QUFDbkMsNEJBQTRCLFNBQVM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNPO0FBQ1A7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQSxLQUFLO0FBQ0wseUNBQXlDO0FBQ3pDO0FBQ0EsS0FBSztBQUNMLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsU0FBUztBQUNsQztBQUNBLG9CQUFvQixTQUFTO0FBQzdCLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUCwwRUFBMEU7QUFDMUUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BleGNhbGlkcmF3L21lcm1haWQtdG8tZXhjYWxpZHJhdy9kaXN0L3V0aWxzLmpzPzIzMzgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU1VQUE9SVEVEX0RJQUdSQU1fVFlQRVMgfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcbi8vIENoZWNrIGlmIHRoZSBkZWZpbml0aW9uIGlzIGEgc3VwcG9ydGVkIGRpYWdyYW1cbmV4cG9ydCBjb25zdCBpc1N1cHBvcnRlZERpYWdyYW0gPSAoZGVmaW5pdGlvbikgPT4ge1xuICAgIHJldHVybiBTVVBQT1JURURfRElBR1JBTV9UWVBFUy5zb21lKChjaGFydFR5cGUpID0+IGRlZmluaXRpb24udHJpbSgpLnN0YXJ0c1dpdGgoY2hhcnRUeXBlKSk7XG59O1xuLy8gQ29udmVydCBtZXJtYWlkIGVudGl0eSBjb2RlcyB0byB0ZXh0IGUuZy4gXCIjOTgyOTtcIiB0byBcIuKZpVwiXG5leHBvcnQgY29uc3QgZW50aXR5Q29kZXNUb1RleHQgPSAoaW5wdXQpID0+IHtcbiAgICBpbnB1dCA9IGRlY29kZUVudGl0aWVzKGlucHV0KTtcbiAgICBjb25zdCBtb2RpZmllZElucHV0ID0gaW5wdXRcbiAgICAgICAgLnJlcGxhY2UoLyMoXFxkKyk7L2csIFwiJiMkMTtcIilcbiAgICAgICAgLnJlcGxhY2UoLyMoW2Etel0rKTsvZywgXCImJDE7XCIpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIik7XG4gICAgZWxlbWVudC5pbm5lckhUTUwgPSBtb2RpZmllZElucHV0O1xuICAgIHJldHVybiBlbGVtZW50LnZhbHVlO1xufTtcbmV4cG9ydCBjb25zdCBnZXRUcmFuc2Zvcm1BdHRyID0gKGVsKSA9PiB7XG4gICAgY29uc3QgdHJhbnNmb3JtQXR0ciA9IGVsLmdldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiKTtcbiAgICBjb25zdCB0cmFuc2xhdGVNYXRjaCA9IHRyYW5zZm9ybUF0dHI/Lm1hdGNoKC90cmFuc2xhdGVcXCgoW1xcZC4tXSspLFxccyooW1xcZC4tXSspXFwpLyk7XG4gICAgbGV0IHRyYW5zZm9ybVggPSAwO1xuICAgIGxldCB0cmFuc2Zvcm1ZID0gMDtcbiAgICBpZiAodHJhbnNsYXRlTWF0Y2gpIHtcbiAgICAgICAgdHJhbnNmb3JtWCA9IE51bWJlcih0cmFuc2xhdGVNYXRjaFsxXSk7XG4gICAgICAgIHRyYW5zZm9ybVkgPSBOdW1iZXIodHJhbnNsYXRlTWF0Y2hbMl0pO1xuICAgIH1cbiAgICByZXR1cm4geyB0cmFuc2Zvcm1YLCB0cmFuc2Zvcm1ZIH07XG59O1xuLy9UT0RPIE9uY2UgZml4ZWQgaW4gbWVybWFpZCB0aGlzIHdpbGwgYmUgcmVtb3ZlZFxuZXhwb3J0IGNvbnN0IGVuY29kZUVudGl0aWVzID0gKHRleHQpID0+IHtcbiAgICBsZXQgdHh0ID0gdGV4dDtcbiAgICB0eHQgPSB0eHQucmVwbGFjZSgvc3R5bGUuKjpcXFMqIy4qOy9nLCAocykgPT4ge1xuICAgICAgICByZXR1cm4gcy5zdWJzdHJpbmcoMCwgcy5sZW5ndGggLSAxKTtcbiAgICB9KTtcbiAgICB0eHQgPSB0eHQucmVwbGFjZSgvY2xhc3NEZWYuKjpcXFMqIy4qOy9nLCAocykgPT4ge1xuICAgICAgICByZXR1cm4gcy5zdWJzdHJpbmcoMCwgcy5sZW5ndGggLSAxKTtcbiAgICB9KTtcbiAgICB0eHQgPSB0eHQucmVwbGFjZSgvI1xcdys7L2csIChzKSA9PiB7XG4gICAgICAgIGNvbnN0IGlubmVyVHh0ID0gcy5zdWJzdHJpbmcoMSwgcy5sZW5ndGggLSAxKTtcbiAgICAgICAgY29uc3QgaXNJbnQgPSAvXlxcKz9cXGQrJC8udGVzdChpbm5lclR4dCk7XG4gICAgICAgIGlmIChpc0ludCkge1xuICAgICAgICAgICAgcmV0dXJuIGDvrILCsMKwJHtpbm5lclR4dH3CtsOfYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYO+sgsKwJHtpbm5lclR4dH3CtsOfYDtcbiAgICB9KTtcbiAgICByZXR1cm4gdHh0O1xufTtcbmV4cG9ydCBjb25zdCBkZWNvZGVFbnRpdGllcyA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgcmV0dXJuIHRleHQucmVwbGFjZSgv76yCwrDCsC9nLCBcIiNcIikucmVwbGFjZSgv76yCwrAvZywgXCImXCIpLnJlcGxhY2UoL8K2w58vZywgXCI7XCIpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@excalidraw/mermaid-to-excalidraw/dist/utils.js\n");
|
|
401
401
|
|
|
402
402
|
/***/ }),
|
|
403
403
|
|
|
@@ -7624,7 +7624,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
7624
7624
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
7625
7625
|
|
|
7626
7626
|
"use strict";
|
|
7627
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n\n\nlet FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM, isTTY=true;\nif (typeof process !== 'undefined') {\n\t({ FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM } = ({\"VITE_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"VITE_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"VITE_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"VITE_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"VITE_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"VITE_APP_PORTAL_URL\":\"\",\"VITE_APP_PLUS_LP\":\"https://plus.excalidraw.com\",\"VITE_APP_PLUS_APP\":\"https://app.excalidraw.com\",\"VITE_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"VITE_APP_DEV_ENABLE_SW\":\"\",\"VITE_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"VITE_APP_DISABLE_TRACKING\":\"true\",\"FAST_REFRESH\":\"false\",\"VITE_APP_PORT\":\"3000\",\"VITE_APP_DEBUG_ENABLE_TEXT_CONTAINER_BOUNDING_BOX\":\"\",\"VITE_APP_COLLAPSE_OVERLAY\":\"true\",\"VITE_APP_ENABLE_ESLINT\":\"true\",\"VITE_PKG_NAME\":\"@excalidraw/excalidraw\",\"VITE_PKG_VERSION\":\"0.16.1-6920-
|
|
7627
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n\n\nlet FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM, isTTY=true;\nif (typeof process !== 'undefined') {\n\t({ FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM } = ({\"VITE_APP_BACKEND_V2_GET_URL\":\"https://json-dev.excalidraw.com/api/v2/\",\"VITE_APP_BACKEND_V2_POST_URL\":\"https://json-dev.excalidraw.com/api/v2/post/\",\"VITE_APP_LIBRARY_URL\":\"https://libraries.excalidraw.com\",\"VITE_APP_LIBRARY_BACKEND\":\"https://us-central1-excalidraw-room-persistence.cloudfunctions.net/libraries\",\"VITE_APP_WS_SERVER_URL\":\"http://localhost:3002\",\"VITE_APP_PORTAL_URL\":\"\",\"VITE_APP_PLUS_LP\":\"https://plus.excalidraw.com\",\"VITE_APP_PLUS_APP\":\"https://app.excalidraw.com\",\"VITE_APP_FIREBASE_CONFIG\":\"{\\\"apiKey\\\":\\\"AIzaSyCMkxA60XIW8KbqMYL7edC4qT5l4qHX2h8\\\",\\\"authDomain\\\":\\\"excalidraw-oss-dev.firebaseapp.com\\\",\\\"projectId\\\":\\\"excalidraw-oss-dev\\\",\\\"storageBucket\\\":\\\"excalidraw-oss-dev.appspot.com\\\",\\\"messagingSenderId\\\":\\\"664559512677\\\",\\\"appId\\\":\\\"1:664559512677:web:a385181f2928d328a7aa8c\\\"}\",\"VITE_APP_DEV_ENABLE_SW\":\"\",\"VITE_APP_DEV_DISABLE_LIVE_RELOAD\":\"\",\"VITE_APP_DISABLE_TRACKING\":\"true\",\"FAST_REFRESH\":\"false\",\"VITE_APP_PORT\":\"3000\",\"VITE_APP_DEBUG_ENABLE_TEXT_CONTAINER_BOUNDING_BOX\":\"\",\"VITE_APP_COLLAPSE_OVERLAY\":\"true\",\"VITE_APP_ENABLE_ESLINT\":\"true\",\"VITE_PKG_NAME\":\"@excalidraw/excalidraw\",\"VITE_PKG_VERSION\":\"0.16.1-6920-d3d0bd0\",\"VITE_IS_EXCALIDRAW_NPM_PACKAGE\":true}) || 0);\n\tisTTY = process.stdout && process.stdout.isTTY;\n}\n\nconst $ = {\n\tenabled: !NODE_DISABLE_COLORS && NO_COLOR == null && TERM !== 'dumb' && (\n\t\tFORCE_COLOR != null && FORCE_COLOR !== '0' || isTTY\n\t),\n\n\t// modifiers\n\treset: init(0, 0),\n\tbold: init(1, 22),\n\tdim: init(2, 22),\n\titalic: init(3, 23),\n\tunderline: init(4, 24),\n\tinverse: init(7, 27),\n\thidden: init(8, 28),\n\tstrikethrough: init(9, 29),\n\n\t// colors\n\tblack: init(30, 39),\n\tred: init(31, 39),\n\tgreen: init(32, 39),\n\tyellow: init(33, 39),\n\tblue: init(34, 39),\n\tmagenta: init(35, 39),\n\tcyan: init(36, 39),\n\twhite: init(37, 39),\n\tgray: init(90, 39),\n\tgrey: init(90, 39),\n\n\t// background colors\n\tbgBlack: init(40, 49),\n\tbgRed: init(41, 49),\n\tbgGreen: init(42, 49),\n\tbgYellow: init(43, 49),\n\tbgBlue: init(44, 49),\n\tbgMagenta: init(45, 49),\n\tbgCyan: init(46, 49),\n\tbgWhite: init(47, 49)\n};\n\nfunction run(arr, str) {\n\tlet i=0, tmp, beg='', end='';\n\tfor (; i < arr.length; i++) {\n\t\ttmp = arr[i];\n\t\tbeg += tmp.open;\n\t\tend += tmp.close;\n\t\tif (!!~str.indexOf(tmp.close)) {\n\t\t\tstr = str.replace(tmp.rgx, tmp.close + tmp.open);\n\t\t}\n\t}\n\treturn beg + str + end;\n}\n\nfunction chain(has, keys) {\n\tlet ctx = { has, keys };\n\n\tctx.reset = $.reset.bind(ctx);\n\tctx.bold = $.bold.bind(ctx);\n\tctx.dim = $.dim.bind(ctx);\n\tctx.italic = $.italic.bind(ctx);\n\tctx.underline = $.underline.bind(ctx);\n\tctx.inverse = $.inverse.bind(ctx);\n\tctx.hidden = $.hidden.bind(ctx);\n\tctx.strikethrough = $.strikethrough.bind(ctx);\n\n\tctx.black = $.black.bind(ctx);\n\tctx.red = $.red.bind(ctx);\n\tctx.green = $.green.bind(ctx);\n\tctx.yellow = $.yellow.bind(ctx);\n\tctx.blue = $.blue.bind(ctx);\n\tctx.magenta = $.magenta.bind(ctx);\n\tctx.cyan = $.cyan.bind(ctx);\n\tctx.white = $.white.bind(ctx);\n\tctx.gray = $.gray.bind(ctx);\n\tctx.grey = $.grey.bind(ctx);\n\n\tctx.bgBlack = $.bgBlack.bind(ctx);\n\tctx.bgRed = $.bgRed.bind(ctx);\n\tctx.bgGreen = $.bgGreen.bind(ctx);\n\tctx.bgYellow = $.bgYellow.bind(ctx);\n\tctx.bgBlue = $.bgBlue.bind(ctx);\n\tctx.bgMagenta = $.bgMagenta.bind(ctx);\n\tctx.bgCyan = $.bgCyan.bind(ctx);\n\tctx.bgWhite = $.bgWhite.bind(ctx);\n\n\treturn ctx;\n}\n\nfunction init(open, close) {\n\tlet blk = {\n\t\topen: `\\x1b[${open}m`,\n\t\tclose: `\\x1b[${close}m`,\n\t\trgx: new RegExp(`\\\\x1b\\\\[${close}m`, 'g')\n\t};\n\treturn function (txt) {\n\t\tif (this !== void 0 && this.has !== void 0) {\n\t\t\t!!~this.has.indexOf(open) || (this.has.push(open),this.keys.push(blk));\n\t\t\treturn txt === void 0 ? this : $.enabled ? run(this.keys, txt+'') : txt+'';\n\t\t}\n\t\treturn txt === void 0 ? chain([open], [blk]) : $.enabled ? run([blk], txt+'') : txt+'';\n\t};\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ($);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2tsZXVyL2luZGV4Lm1qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWE7O0FBRWI7QUFDQTtBQUNBLElBQUksbURBQW1ELEVBQUUsbXJDQUFXLElBQUksQ0FBRTtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRLGdCQUFnQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0IsS0FBSztBQUNyQixpQkFBaUIsTUFBTTtBQUN2Qiw2QkFBNkIsTUFBTTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsQ0FBQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9rbGV1ci9pbmRleC5tanM/MmE5ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmxldCBGT1JDRV9DT0xPUiwgTk9ERV9ESVNBQkxFX0NPTE9SUywgTk9fQ09MT1IsIFRFUk0sIGlzVFRZPXRydWU7XG5pZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnKSB7XG5cdCh7IEZPUkNFX0NPTE9SLCBOT0RFX0RJU0FCTEVfQ09MT1JTLCBOT19DT0xPUiwgVEVSTSB9ID0gcHJvY2Vzcy5lbnYgfHwge30pO1xuXHRpc1RUWSA9IHByb2Nlc3Muc3Rkb3V0ICYmIHByb2Nlc3Muc3Rkb3V0LmlzVFRZO1xufVxuXG5jb25zdCAkID0ge1xuXHRlbmFibGVkOiAhTk9ERV9ESVNBQkxFX0NPTE9SUyAmJiBOT19DT0xPUiA9PSBudWxsICYmIFRFUk0gIT09ICdkdW1iJyAmJiAoXG5cdFx0Rk9SQ0VfQ09MT1IgIT0gbnVsbCAmJiBGT1JDRV9DT0xPUiAhPT0gJzAnIHx8IGlzVFRZXG5cdCksXG5cblx0Ly8gbW9kaWZpZXJzXG5cdHJlc2V0OiBpbml0KDAsIDApLFxuXHRib2xkOiBpbml0KDEsIDIyKSxcblx0ZGltOiBpbml0KDIsIDIyKSxcblx0aXRhbGljOiBpbml0KDMsIDIzKSxcblx0dW5kZXJsaW5lOiBpbml0KDQsIDI0KSxcblx0aW52ZXJzZTogaW5pdCg3LCAyNyksXG5cdGhpZGRlbjogaW5pdCg4LCAyOCksXG5cdHN0cmlrZXRocm91Z2g6IGluaXQoOSwgMjkpLFxuXG5cdC8vIGNvbG9yc1xuXHRibGFjazogaW5pdCgzMCwgMzkpLFxuXHRyZWQ6IGluaXQoMzEsIDM5KSxcblx0Z3JlZW46IGluaXQoMzIsIDM5KSxcblx0eWVsbG93OiBpbml0KDMzLCAzOSksXG5cdGJsdWU6IGluaXQoMzQsIDM5KSxcblx0bWFnZW50YTogaW5pdCgzNSwgMzkpLFxuXHRjeWFuOiBpbml0KDM2LCAzOSksXG5cdHdoaXRlOiBpbml0KDM3LCAzOSksXG5cdGdyYXk6IGluaXQoOTAsIDM5KSxcblx0Z3JleTogaW5pdCg5MCwgMzkpLFxuXG5cdC8vIGJhY2tncm91bmQgY29sb3JzXG5cdGJnQmxhY2s6IGluaXQoNDAsIDQ5KSxcblx0YmdSZWQ6IGluaXQoNDEsIDQ5KSxcblx0YmdHcmVlbjogaW5pdCg0MiwgNDkpLFxuXHRiZ1llbGxvdzogaW5pdCg0MywgNDkpLFxuXHRiZ0JsdWU6IGluaXQoNDQsIDQ5KSxcblx0YmdNYWdlbnRhOiBpbml0KDQ1LCA0OSksXG5cdGJnQ3lhbjogaW5pdCg0NiwgNDkpLFxuXHRiZ1doaXRlOiBpbml0KDQ3LCA0OSlcbn07XG5cbmZ1bmN0aW9uIHJ1bihhcnIsIHN0cikge1xuXHRsZXQgaT0wLCB0bXAsIGJlZz0nJywgZW5kPScnO1xuXHRmb3IgKDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHRcdHRtcCA9IGFycltpXTtcblx0XHRiZWcgKz0gdG1wLm9wZW47XG5cdFx0ZW5kICs9IHRtcC5jbG9zZTtcblx0XHRpZiAoISF+c3RyLmluZGV4T2YodG1wLmNsb3NlKSkge1xuXHRcdFx0c3RyID0gc3RyLnJlcGxhY2UodG1wLnJneCwgdG1wLmNsb3NlICsgdG1wLm9wZW4pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYmVnICsgc3RyICsgZW5kO1xufVxuXG5mdW5jdGlvbiBjaGFpbihoYXMsIGtleXMpIHtcblx0bGV0IGN0eCA9IHsgaGFzLCBrZXlzIH07XG5cblx0Y3R4LnJlc2V0ID0gJC5yZXNldC5iaW5kKGN0eCk7XG5cdGN0eC5ib2xkID0gJC5ib2xkLmJpbmQoY3R4KTtcblx0Y3R4LmRpbSA9ICQuZGltLmJpbmQoY3R4KTtcblx0Y3R4Lml0YWxpYyA9ICQuaXRhbGljLmJpbmQoY3R4KTtcblx0Y3R4LnVuZGVybGluZSA9ICQudW5kZXJsaW5lLmJpbmQoY3R4KTtcblx0Y3R4LmludmVyc2UgPSAkLmludmVyc2UuYmluZChjdHgpO1xuXHRjdHguaGlkZGVuID0gJC5oaWRkZW4uYmluZChjdHgpO1xuXHRjdHguc3RyaWtldGhyb3VnaCA9ICQuc3RyaWtldGhyb3VnaC5iaW5kKGN0eCk7XG5cblx0Y3R4LmJsYWNrID0gJC5ibGFjay5iaW5kKGN0eCk7XG5cdGN0eC5yZWQgPSAkLnJlZC5iaW5kKGN0eCk7XG5cdGN0eC5ncmVlbiA9ICQuZ3JlZW4uYmluZChjdHgpO1xuXHRjdHgueWVsbG93ID0gJC55ZWxsb3cuYmluZChjdHgpO1xuXHRjdHguYmx1ZSA9ICQuYmx1ZS5iaW5kKGN0eCk7XG5cdGN0eC5tYWdlbnRhID0gJC5tYWdlbnRhLmJpbmQoY3R4KTtcblx0Y3R4LmN5YW4gPSAkLmN5YW4uYmluZChjdHgpO1xuXHRjdHgud2hpdGUgPSAkLndoaXRlLmJpbmQoY3R4KTtcblx0Y3R4LmdyYXkgPSAkLmdyYXkuYmluZChjdHgpO1xuXHRjdHguZ3JleSA9ICQuZ3JleS5iaW5kKGN0eCk7XG5cblx0Y3R4LmJnQmxhY2sgPSAkLmJnQmxhY2suYmluZChjdHgpO1xuXHRjdHguYmdSZWQgPSAkLmJnUmVkLmJpbmQoY3R4KTtcblx0Y3R4LmJnR3JlZW4gPSAkLmJnR3JlZW4uYmluZChjdHgpO1xuXHRjdHguYmdZZWxsb3cgPSAkLmJnWWVsbG93LmJpbmQoY3R4KTtcblx0Y3R4LmJnQmx1ZSA9ICQuYmdCbHVlLmJpbmQoY3R4KTtcblx0Y3R4LmJnTWFnZW50YSA9ICQuYmdNYWdlbnRhLmJpbmQoY3R4KTtcblx0Y3R4LmJnQ3lhbiA9ICQuYmdDeWFuLmJpbmQoY3R4KTtcblx0Y3R4LmJnV2hpdGUgPSAkLmJnV2hpdGUuYmluZChjdHgpO1xuXG5cdHJldHVybiBjdHg7XG59XG5cbmZ1bmN0aW9uIGluaXQob3BlbiwgY2xvc2UpIHtcblx0bGV0IGJsayA9IHtcblx0XHRvcGVuOiBgXFx4MWJbJHtvcGVufW1gLFxuXHRcdGNsb3NlOiBgXFx4MWJbJHtjbG9zZX1tYCxcblx0XHRyZ3g6IG5ldyBSZWdFeHAoYFxcXFx4MWJcXFxcWyR7Y2xvc2V9bWAsICdnJylcblx0fTtcblx0cmV0dXJuIGZ1bmN0aW9uICh0eHQpIHtcblx0XHRpZiAodGhpcyAhPT0gdm9pZCAwICYmIHRoaXMuaGFzICE9PSB2b2lkIDApIHtcblx0XHRcdCEhfnRoaXMuaGFzLmluZGV4T2Yob3BlbikgfHwgKHRoaXMuaGFzLnB1c2gob3BlbiksdGhpcy5rZXlzLnB1c2goYmxrKSk7XG5cdFx0XHRyZXR1cm4gdHh0ID09PSB2b2lkIDAgPyB0aGlzIDogJC5lbmFibGVkID8gcnVuKHRoaXMua2V5cywgdHh0KycnKSA6IHR4dCsnJztcblx0XHR9XG5cdFx0cmV0dXJuIHR4dCA9PT0gdm9pZCAwID8gY2hhaW4oW29wZW5dLCBbYmxrXSkgOiAkLmVuYWJsZWQgPyBydW4oW2Jsa10sIHR4dCsnJykgOiB0eHQrJyc7XG5cdH07XG59XG5cbmV4cG9ydCBkZWZhdWx0ICQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/kleur/index.mjs\n");
|
|
7628
7628
|
|
|
7629
7629
|
/***/ }),
|
|
7630
7630
|
|