summaryrefslogtreecommitdiff
path: root/themes/blowfish/assets/lib/mermaid/styles-0beab977.js.map
blob: 778e0397ec29ebb84d566bc0be577f8dbe6f1070 (plain)
1
{"version":3,"file":"styles-0beab977.js","sources":["../src/diagrams/flowchart/flowRenderer-v2.js","../src/diagrams/flowchart/styles.ts"],"sourcesContent":["import * as graphlib from 'dagre-d3-es/src/graphlib/index.js';\nimport { select, curveLinear, selectAll } from 'd3';\n\nimport flowDb from './flowDb';\nimport { getConfig } from '../../config';\nimport utils from '../../utils';\n\nimport { render } from '../../dagre-wrapper/index.js';\nimport { addHtmlLabel } from 'dagre-d3-es/src/dagre-js/label/add-html-label.js';\nimport { log } from '../../logger';\nimport common, { evaluate } from '../common/common';\nimport { interpolateToCurve, getStylesFromArray } from '../../utils';\nimport { setupGraphViewbox } from '../../setupGraphViewbox';\n\nconst conf = {};\nexport const setConf = function (cnf) {\n  const keys = Object.keys(cnf);\n  for (const key of keys) {\n    conf[key] = cnf[key];\n  }\n};\n\n/**\n * Function that adds the vertices found during parsing to the graph to be rendered.\n *\n * @param vert Object containing the vertices.\n * @param g The graph that is to be drawn.\n * @param svgId\n * @param root\n * @param doc\n * @param diagObj\n */\nexport const addVertices = function (vert, g, svgId, root, doc, diagObj) {\n  const svg = root.select(`[id=\"${svgId}\"]`);\n  const keys = Object.keys(vert);\n\n  // Iterate through each item in the vertex object (containing all the vertices found) in the graph definition\n  keys.forEach(function (id) {\n    const vertex = vert[id];\n\n    /**\n     * Variable for storing the classes for the vertex\n     *\n     * @type {string}\n     */\n    let classStr = 'default';\n    if (vertex.classes.length > 0) {\n      classStr = vertex.classes.join(' ');\n    }\n\n    const styles = getStylesFromArray(vertex.styles);\n\n    // Use vertex id as text in the box if no text is provided by the graph definition\n    let vertexText = vertex.text !== undefined ? vertex.text : vertex.id;\n\n    // We create a SVG label, either by delegating to addHtmlLabel or manually\n    let vertexNode;\n    if (evaluate(getConfig().flowchart.htmlLabels)) {\n      // TODO: addHtmlLabel accepts a labelStyle. Do we possibly have that?\n      const node = {\n        label: vertexText.replace(\n          /fa[blrs]?:fa-[\\w-]+/g,\n          (s) => `<i class='${s.replace(':', ' ')}'></i>`\n        ),\n      };\n      vertexNode = addHtmlLabel(svg, node).node();\n      vertexNode.parentNode.removeChild(vertexNode);\n    } else {\n      const svgLabel = doc.createElementNS('http://www.w3.org/2000/svg', 'text');\n      svgLabel.setAttribute('style', styles.labelStyle.replace('color:', 'fill:'));\n\n      const rows = vertexText.split(common.lineBreakRegex);\n\n      for (const row of rows) {\n        const tspan = doc.createElementNS('http://www.w3.org/2000/svg', 'tspan');\n        tspan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n        tspan.setAttribute('dy', '1em');\n        tspan.setAttribute('x', '1');\n        tspan.textContent = row;\n        svgLabel.appendChild(tspan);\n      }\n      vertexNode = svgLabel;\n    }\n\n    let radious = 0;\n    let _shape = '';\n    // Set the shape based parameters\n    switch (vertex.type) {\n      case 'round':\n        radious = 5;\n        _shape = 'rect';\n        break;\n      case 'square':\n        _shape = 'rect';\n        break;\n      case 'diamond':\n        _shape = 'question';\n        break;\n      case 'hexagon':\n        _shape = 'hexagon';\n        break;\n      case 'odd':\n        _shape = 'rect_left_inv_arrow';\n        break;\n      case 'lean_right':\n        _shape = 'lean_right';\n        break;\n      case 'lean_left':\n        _shape = 'lean_left';\n        break;\n      case 'trapezoid':\n        _shape = 'trapezoid';\n        break;\n      case 'inv_trapezoid':\n        _shape = 'inv_trapezoid';\n        break;\n      case 'odd_right':\n        _shape = 'rect_left_inv_arrow';\n        break;\n      case 'circle':\n        _shape = 'circle';\n        break;\n      case 'ellipse':\n        _shape = 'ellipse';\n        break;\n      case 'stadium':\n        _shape = 'stadium';\n        break;\n      case 'subroutine':\n        _shape = 'subroutine';\n        break;\n      case 'cylinder':\n        _shape = 'cylinder';\n        break;\n      case 'group':\n        _shape = 'rect';\n        break;\n      case 'doublecircle':\n        _shape = 'doublecircle';\n        break;\n      default:\n        _shape = 'rect';\n    }\n    // Add the node\n    g.setNode(vertex.id, {\n      labelStyle: styles.labelStyle,\n      shape: _shape,\n      labelText: vertexText,\n      rx: radious,\n      ry: radious,\n      class: classStr,\n      style: styles.style,\n      id: vertex.id,\n      link: vertex.link,\n      linkTarget: vertex.linkTarget,\n      tooltip: diagObj.db.getTooltip(vertex.id) || '',\n      domId: diagObj.db.lookUpDomId(vertex.id),\n      haveCallback: vertex.haveCallback,\n      width: vertex.type === 'group' ? 500 : undefined,\n      dir: vertex.dir,\n      type: vertex.type,\n      props: vertex.props,\n      padding: getConfig().flowchart.padding,\n    });\n\n    log.info('setNode', {\n      labelStyle: styles.labelStyle,\n      shape: _shape,\n      labelText: vertexText,\n      rx: radious,\n      ry: radious,\n      class: classStr,\n      style: styles.style,\n      id: vertex.id,\n      domId: diagObj.db.lookUpDomId(vertex.id),\n      width: vertex.type === 'group' ? 500 : undefined,\n      type: vertex.type,\n      dir: vertex.dir,\n      props: vertex.props,\n      padding: getConfig().flowchart.padding,\n    });\n  });\n};\n\n/**\n * Add edges to graph based on parsed graph definition\n *\n * @param {object} edges The edges to add to the graph\n * @param {object} g The graph object\n * @param diagObj\n */\nexport const addEdges = function (edges, g, diagObj) {\n  log.info('abc78 edges = ', edges);\n  let cnt = 0;\n  let linkIdCnt = {};\n\n  let defaultStyle;\n  let defaultLabelStyle;\n\n  if (edges.defaultStyle !== undefined) {\n    const defaultStyles = getStylesFromArray(edges.defaultStyle);\n    defaultStyle = defaultStyles.style;\n    defaultLabelStyle = defaultStyles.labelStyle;\n  }\n\n  edges.forEach(function (edge) {\n    cnt++;\n\n    // Identify Link\n    var linkIdBase = 'L-' + edge.start + '-' + edge.end;\n    // count the links from+to the same node to give unique id\n    if (linkIdCnt[linkIdBase] === undefined) {\n      linkIdCnt[linkIdBase] = 0;\n      log.info('abc78 new entry', linkIdBase, linkIdCnt[linkIdBase]);\n    } else {\n      linkIdCnt[linkIdBase]++;\n      log.info('abc78 new entry', linkIdBase, linkIdCnt[linkIdBase]);\n    }\n    let linkId = linkIdBase + '-' + linkIdCnt[linkIdBase];\n    log.info('abc78 new link id to be used is', linkIdBase, linkId, linkIdCnt[linkIdBase]);\n    var linkNameStart = 'LS-' + edge.start;\n    var linkNameEnd = 'LE-' + edge.end;\n\n    const edgeData = { style: '', labelStyle: '' };\n    edgeData.minlen = edge.length || 1;\n    //edgeData.id = 'id' + cnt;\n\n    // Set link type for rendering\n    if (edge.type === 'arrow_open') {\n      edgeData.arrowhead = 'none';\n    } else {\n      edgeData.arrowhead = 'normal';\n    }\n\n    // Check of arrow types, placed here in order not to break old rendering\n    edgeData.arrowTypeStart = 'arrow_open';\n    edgeData.arrowTypeEnd = 'arrow_open';\n\n    /* eslint-disable no-fallthrough */\n    switch (edge.type) {\n      case 'double_arrow_cross':\n        edgeData.arrowTypeStart = 'arrow_cross';\n      case 'arrow_cross':\n        edgeData.arrowTypeEnd = 'arrow_cross';\n        break;\n      case 'double_arrow_point':\n        edgeData.arrowTypeStart = 'arrow_point';\n      case 'arrow_point':\n        edgeData.arrowTypeEnd = 'arrow_point';\n        break;\n      case 'double_arrow_circle':\n        edgeData.arrowTypeStart = 'arrow_circle';\n      case 'arrow_circle':\n        edgeData.arrowTypeEnd = 'arrow_circle';\n        break;\n    }\n\n    let style = '';\n    let labelStyle = '';\n\n    switch (edge.stroke) {\n      case 'normal':\n        style = 'fill:none;';\n        if (defaultStyle !== undefined) {\n          style = defaultStyle;\n        }\n        if (defaultLabelStyle !== undefined) {\n          labelStyle = defaultLabelStyle;\n        }\n        edgeData.thickness = 'normal';\n        edgeData.pattern = 'solid';\n        break;\n      case 'dotted':\n        edgeData.thickness = 'normal';\n        edgeData.pattern = 'dotted';\n        edgeData.style = 'fill:none;stroke-width:2px;stroke-dasharray:3;';\n        break;\n      case 'thick':\n        edgeData.thickness = 'thick';\n        edgeData.pattern = 'solid';\n        edgeData.style = 'stroke-width: 3.5px;fill:none;';\n        break;\n      case 'invisible':\n        edgeData.thickness = 'invisible';\n        edgeData.pattern = 'solid';\n        edgeData.style = 'stroke-width: 0;fill:none;';\n        break;\n    }\n    if (edge.style !== undefined) {\n      const styles = getStylesFromArray(edge.style);\n      style = styles.style;\n      labelStyle = styles.labelStyle;\n    }\n\n    edgeData.style = edgeData.style += style;\n    edgeData.labelStyle = edgeData.labelStyle += labelStyle;\n\n    if (edge.interpolate !== undefined) {\n      edgeData.curve = interpolateToCurve(edge.interpolate, curveLinear);\n    } else if (edges.defaultInterpolate !== undefined) {\n      edgeData.curve = interpolateToCurve(edges.defaultInterpolate, curveLinear);\n    } else {\n      edgeData.curve = interpolateToCurve(conf.curve, curveLinear);\n    }\n\n    if (edge.text === undefined) {\n      if (edge.style !== undefined) {\n        edgeData.arrowheadStyle = 'fill: #333';\n      }\n    } else {\n      edgeData.arrowheadStyle = 'fill: #333';\n      edgeData.labelpos = 'c';\n    }\n\n    edgeData.labelType = 'text';\n    edgeData.label = edge.text.replace(common.lineBreakRegex, '\\n');\n\n    if (edge.style === undefined) {\n      edgeData.style = edgeData.style || 'stroke: #333; stroke-width: 1.5px;fill:none;';\n    }\n\n    edgeData.labelStyle = edgeData.labelStyle.replace('color:', 'fill:');\n\n    edgeData.id = linkId;\n    edgeData.classes = 'flowchart-link ' + linkNameStart + ' ' + linkNameEnd;\n\n    // Add the edge to the graph\n    g.setEdge(edge.start, edge.end, edgeData, cnt);\n  });\n};\n\n/**\n * Returns the all the styles from classDef statements in the graph definition.\n *\n * @param text\n * @param diagObj\n * @returns {object} ClassDef styles\n */\nexport const getClasses = function (text, diagObj) {\n  log.info('Extracting classes');\n  diagObj.db.clear();\n  try {\n    // Parse the graph definition\n    diagObj.parse(text);\n    return diagObj.db.getClasses();\n  } catch (e) {\n    return;\n  }\n};\n\n/**\n * Draws a flowchart in the tag with id: id based on the graph definition in text.\n *\n * @param text\n * @param id\n */\n\nexport const draw = function (text, id, _version, diagObj) {\n  log.info('Drawing flowchart');\n  diagObj.db.clear();\n  flowDb.setGen('gen-2');\n  // Parse the graph definition\n  diagObj.parser.parse(text);\n\n  // Fetch the default direction, use TD if none was found\n  let dir = diagObj.db.getDirection();\n  if (dir === undefined) {\n    dir = 'TD';\n  }\n\n  const { securityLevel, flowchart: conf } = getConfig();\n  const nodeSpacing = conf.nodeSpacing || 50;\n  const rankSpacing = conf.rankSpacing || 50;\n\n  // Handle root and document for when rendering in sandbox mode\n  let sandboxElement;\n  if (securityLevel === 'sandbox') {\n    sandboxElement = select('#i' + id);\n  }\n  const root =\n    securityLevel === 'sandbox'\n      ? select(sandboxElement.nodes()[0].contentDocument.body)\n      : select('body');\n  const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n\n  // Create the input mermaid.graph\n  const g = new graphlib.Graph({\n    multigraph: true,\n    compound: true,\n  })\n    .setGraph({\n      rankdir: dir,\n      nodesep: nodeSpacing,\n      ranksep: rankSpacing,\n      marginx: 0,\n      marginy: 0,\n    })\n    .setDefaultEdgeLabel(function () {\n      return {};\n    });\n\n  let subG;\n  const subGraphs = diagObj.db.getSubGraphs();\n  log.info('Subgraphs - ', subGraphs);\n  for (let i = subGraphs.length - 1; i >= 0; i--) {\n    subG = subGraphs[i];\n    log.info('Subgraph - ', subG);\n    diagObj.db.addVertex(subG.id, subG.title, 'group', undefined, subG.classes, subG.dir);\n  }\n\n  // Fetch the vertices/nodes and edges/links from the parsed graph definition\n  const vert = diagObj.db.getVertices();\n\n  const edges = diagObj.db.getEdges();\n\n  log.info('Edges', edges);\n  let i = 0;\n  for (i = subGraphs.length - 1; i >= 0; i--) {\n    // for (let i = 0; i < subGraphs.length; i++) {\n    subG = subGraphs[i];\n\n    selectAll('cluster').append('text');\n\n    for (let j = 0; j < subG.nodes.length; j++) {\n      log.info('Setting up subgraphs', subG.nodes[j], subG.id);\n      g.setParent(subG.nodes[j], subG.id);\n    }\n  }\n  addVertices(vert, g, id, root, doc, diagObj);\n  addEdges(edges, g, diagObj);\n\n  // Add custom shapes\n  // flowChartShapes.addToRenderV2(addShape);\n\n  // Set up an SVG group so that we can translate the final graph.\n  const svg = root.select(`[id=\"${id}\"]`);\n\n  // Run the renderer. This is what draws the final graph.\n  const element = root.select('#' + id + ' g');\n  render(element, g, ['point', 'circle', 'cross'], 'flowchart', id);\n\n  utils.insertTitle(svg, 'flowchartTitleText', conf.titleTopMargin, diagObj.db.getDiagramTitle());\n\n  setupGraphViewbox(g, svg, conf.diagramPadding, conf.useMaxWidth);\n\n  // Index nodes\n  diagObj.db.indexNodes('subGraph' + i);\n\n  // Add label rects for non html labels\n  if (!conf.htmlLabels) {\n    const labels = doc.querySelectorAll('[id=\"' + id + '\"] .edgeLabel .label');\n    for (const label of labels) {\n      // Get dimensions of label\n      const dim = label.getBBox();\n\n      const rect = doc.createElementNS('http://www.w3.org/2000/svg', 'rect');\n      rect.setAttribute('rx', 0);\n      rect.setAttribute('ry', 0);\n      rect.setAttribute('width', dim.width);\n      rect.setAttribute('height', dim.height);\n\n      label.insertBefore(rect, label.firstChild);\n    }\n  }\n\n  // If node has a link, wrap it in an anchor SVG object.\n  const keys = Object.keys(vert);\n  keys.forEach(function (key) {\n    const vertex = vert[key];\n\n    if (vertex.link) {\n      const node = select('#' + id + ' [id=\"' + key + '\"]');\n      if (node) {\n        const link = doc.createElementNS('http://www.w3.org/2000/svg', 'a');\n        link.setAttributeNS('http://www.w3.org/2000/svg', 'class', vertex.classes.join(' '));\n        link.setAttributeNS('http://www.w3.org/2000/svg', 'href', vertex.link);\n        link.setAttributeNS('http://www.w3.org/2000/svg', 'rel', 'noopener');\n        if (securityLevel === 'sandbox') {\n          link.setAttributeNS('http://www.w3.org/2000/svg', 'target', '_top');\n        } else if (vertex.linkTarget) {\n          link.setAttributeNS('http://www.w3.org/2000/svg', 'target', vertex.linkTarget);\n        }\n\n        const linkNode = node.insert(function () {\n          return link;\n        }, ':first-child');\n\n        const shape = node.select('.label-container');\n        if (shape) {\n          linkNode.append(function () {\n            return shape.node();\n          });\n        }\n\n        const label = node.select('.label');\n        if (label) {\n          linkNode.append(function () {\n            return label.node();\n          });\n        }\n      }\n    }\n  });\n};\n\nexport default {\n  setConf,\n  addVertices,\n  addEdges,\n  getClasses,\n  draw,\n};\n","/** Returns the styles given options */\nexport interface FlowChartStyleOptions {\n  arrowheadColor: string;\n  border2: string;\n  clusterBkg: string;\n  clusterBorder: string;\n  edgeLabelBackground: string;\n  fontFamily: string;\n  lineColor: string;\n  mainBkg: string;\n  nodeBorder: string;\n  nodeTextColor: string;\n  tertiaryColor: string;\n  textColor: string;\n  titleColor: string;\n}\n\nconst getStyles = (options: FlowChartStyleOptions) =>\n  `.label {\n    font-family: ${options.fontFamily};\n    color: ${options.nodeTextColor || options.textColor};\n  }\n  .cluster-label text {\n    fill: ${options.titleColor};\n  }\n  .cluster-label span {\n    color: ${options.titleColor};\n  }\n\n  .label text,span {\n    fill: ${options.nodeTextColor || options.textColor};\n    color: ${options.nodeTextColor || options.textColor};\n  }\n\n  .node rect,\n  .node circle,\n  .node ellipse,\n  .node polygon,\n  .node path {\n    fill: ${options.mainBkg};\n    stroke: ${options.nodeBorder};\n    stroke-width: 1px;\n  }\n\n  .node .label {\n    text-align: center;\n  }\n  .node.clickable {\n    cursor: pointer;\n  }\n\n  .arrowheadPath {\n    fill: ${options.arrowheadColor};\n  }\n\n  .edgePath .path {\n    stroke: ${options.lineColor};\n    stroke-width: 2.0px;\n  }\n\n  .flowchart-link {\n    stroke: ${options.lineColor};\n    fill: none;\n  }\n\n  .edgeLabel {\n    background-color: ${options.edgeLabelBackground};\n    rect {\n      opacity: 0.5;\n      background-color: ${options.edgeLabelBackground};\n      fill: ${options.edgeLabelBackground};\n    }\n    text-align: center;\n  }\n\n  .cluster rect {\n    fill: ${options.clusterBkg};\n    stroke: ${options.clusterBorder};\n    stroke-width: 1px;\n  }\n\n  .cluster text {\n    fill: ${options.titleColor};\n  }\n\n  .cluster span {\n    color: ${options.titleColor};\n  }\n  /* .cluster div {\n    color: ${options.titleColor};\n  } */\n\n  div.mermaidTooltip {\n    position: absolute;\n    text-align: center;\n    max-width: 200px;\n    padding: 2px;\n    font-family: ${options.fontFamily};\n    font-size: 12px;\n    background: ${options.tertiaryColor};\n    border: 1px solid ${options.border2};\n    border-radius: 2px;\n    pointer-events: none;\n    z-index: 100;\n  }\n\n  .flowchartTitleText {\n    text-anchor: middle;\n    font-size: 18px;\n    fill: ${options.textColor};\n  }\n`;\n\nexport default getStyles;\n"],"names":["conf","setConf","cnf","keys","key","addVertices","vert","g","svgId","root","doc","diagObj","svg","id","vertex","classStr","styles","getStylesFromArray","vertexText","vertexNode","evaluate","getConfig","node","s","addHtmlLabel","svgLabel","rows","common","row","tspan","radious","_shape","log","addEdges","edges","cnt","linkIdCnt","defaultStyle","defaultLabelStyle","defaultStyles","edge","linkIdBase","linkId","linkNameStart","linkNameEnd","edgeData","style","labelStyle","interpolateToCurve","curveLinear","getClasses","text","draw","_version","flowDb","dir","securityLevel","nodeSpacing","rankSpacing","sandboxElement","select","graphlib.Graph","subG","subGraphs","i","selectAll","j","element","render","utils","setupGraphViewbox","labels","label","dim","rect","link","linkNode","shape","flowRendererV2","getStyles","options","flowStyles"],"mappings":";;;;;;;AAcA,MAAMA,IAAO,CAAA,GACAC,IAAU,SAAUC,GAAK;AACpC,QAAMC,IAAO,OAAO,KAAKD,CAAG;AAC5B,aAAWE,KAAOD;AAChB,IAAAH,EAAKI,CAAG,IAAIF,EAAIE,CAAG;AAEvB,GAYaC,IAAc,SAAUC,GAAMC,GAAGC,GAAOC,GAAMC,GAAKC,GAAS;AACvE,QAAMC,IAAMH,EAAK,OAAO,QAAQD,KAAS;AAIzC,EAHa,OAAO,KAAKF,CAAI,EAGxB,QAAQ,SAAUO,GAAI;AACzB,UAAMC,IAASR,EAAKO,CAAE;AAOtB,QAAIE,IAAW;AACf,IAAID,EAAO,QAAQ,SAAS,MAC1BC,IAAWD,EAAO,QAAQ,KAAK,GAAG;AAGpC,UAAME,IAASC,EAAmBH,EAAO,MAAM;AAG/C,QAAII,IAAaJ,EAAO,SAAS,SAAYA,EAAO,OAAOA,EAAO,IAG9DK;AACJ,QAAIC,EAASC,EAAS,EAAG,UAAU,UAAU,GAAG;AAE9C,YAAMC,IAAO;AAAA,QACX,OAAOJ,EAAW;AAAA,UAChB;AAAA,UACA,CAACK,MAAM,aAAaA,EAAE,QAAQ,KAAK,GAAG;AAAA,QACvC;AAAA,MACT;AACM,MAAAJ,IAAaK,EAAaZ,GAAKU,CAAI,EAAE,KAAI,GACzCH,EAAW,WAAW,YAAYA,CAAU;AAAA,IAClD,OAAW;AACL,YAAMM,IAAWf,EAAI,gBAAgB,8BAA8B,MAAM;AACzE,MAAAe,EAAS,aAAa,SAAST,EAAO,WAAW,QAAQ,UAAU,OAAO,CAAC;AAE3E,YAAMU,IAAOR,EAAW,MAAMS,EAAO,cAAc;AAEnD,iBAAWC,KAAOF,GAAM;AACtB,cAAMG,IAAQnB,EAAI,gBAAgB,8BAA8B,OAAO;AACvE,QAAAmB,EAAM,eAAe,wCAAwC,aAAa,UAAU,GACpFA,EAAM,aAAa,MAAM,KAAK,GAC9BA,EAAM,aAAa,KAAK,GAAG,GAC3BA,EAAM,cAAcD,GACpBH,EAAS,YAAYI,CAAK;AAAA,MAC3B;AACD,MAAAV,IAAaM;AAAA,IACd;AAED,QAAIK,IAAU,GACVC,IAAS;AAEb,YAAQjB,EAAO,MAAI;AAAA,MACjB,KAAK;AACH,QAAAgB,IAAU,GACVC,IAAS;AACT;AAAA,MACF,KAAK;AACH,QAAAA,IAAS;AACT;AAAA,MACF,KAAK;AACH,QAAAA,IAAS;AACT;AAAA,MACF,KAAK;AACH,QAAAA,IAAS;AACT;AAAA,MACF,KAAK;AACH,QAAAA,IAAS;AACT;AAAA,MACF,KAAK;AACH,QAAAA,IAAS;AACT;AAAA,MACF,KAAK;AACH,QAAAA,IAAS;AACT;AAAA,MACF,KAAK;AACH,QAAAA,IAAS;AACT;AAAA,MACF,KAAK;AACH,QAAAA,IAAS;AACT;AAAA,MACF,KAAK;AACH,QAAAA,IAAS;AACT;AAAA,MACF,KAAK;AACH,QAAAA,IAAS;AACT;AAAA,MACF,KAAK;AACH,QAAAA,IAAS;AACT;AAAA,MACF,KAAK;AACH,QAAAA,IAAS;AACT;AAAA,MACF,KAAK;AACH,QAAAA,IAAS;AACT;AAAA,MACF,KAAK;AACH,QAAAA,IAAS;AACT;AAAA,MACF,KAAK;AACH,QAAAA,IAAS;AACT;AAAA,MACF,KAAK;AACH,QAAAA,IAAS;AACT;AAAA,MACF;AACE,QAAAA,IAAS;AAAA,IACZ;AAED,IAAAxB,EAAE,QAAQO,EAAO,IAAI;AAAA,MACnB,YAAYE,EAAO;AAAA,MACnB,OAAOe;AAAA,MACP,WAAWb;AAAA,MACX,IAAIY;AAAA,MACJ,IAAIA;AAAA,MACJ,OAAOf;AAAA,MACP,OAAOC,EAAO;AAAA,MACd,IAAIF,EAAO;AAAA,MACX,MAAMA,EAAO;AAAA,MACb,YAAYA,EAAO;AAAA,MACnB,SAASH,EAAQ,GAAG,WAAWG,EAAO,EAAE,KAAK;AAAA,MAC7C,OAAOH,EAAQ,GAAG,YAAYG,EAAO,EAAE;AAAA,MACvC,cAAcA,EAAO;AAAA,MACrB,OAAOA,EAAO,SAAS,UAAU,MAAM;AAAA,MACvC,KAAKA,EAAO;AAAA,MACZ,MAAMA,EAAO;AAAA,MACb,OAAOA,EAAO;AAAA,MACd,SAASO,IAAY,UAAU;AAAA,IACrC,CAAK,GAEDW,EAAI,KAAK,WAAW;AAAA,MAClB,YAAYhB,EAAO;AAAA,MACnB,OAAOe;AAAA,MACP,WAAWb;AAAA,MACX,IAAIY;AAAA,MACJ,IAAIA;AAAA,MACJ,OAAOf;AAAA,MACP,OAAOC,EAAO;AAAA,MACd,IAAIF,EAAO;AAAA,MACX,OAAOH,EAAQ,GAAG,YAAYG,EAAO,EAAE;AAAA,MACvC,OAAOA,EAAO,SAAS,UAAU,MAAM;AAAA,MACvC,MAAMA,EAAO;AAAA,MACb,KAAKA,EAAO;AAAA,MACZ,OAAOA,EAAO;AAAA,MACd,SAASO,IAAY,UAAU;AAAA,IACrC,CAAK;AAAA,EACL,CAAG;AACH,GASaY,IAAW,SAAUC,GAAO3B,GAAGI,GAAS;AACnD,EAAAqB,EAAI,KAAK,kBAAkBE,CAAK;AAChC,MAAIC,IAAM,GACNC,IAAY,CAAA,GAEZC,GACAC;AAEJ,MAAIJ,EAAM,iBAAiB,QAAW;AACpC,UAAMK,IAAgBtB,EAAmBiB,EAAM,YAAY;AAC3D,IAAAG,IAAeE,EAAc,OAC7BD,IAAoBC,EAAc;AAAA,EACnC;AAED,EAAAL,EAAM,QAAQ,SAAUM,GAAM;AAC5B,IAAAL;AAGA,QAAIM,IAAa,OAAOD,EAAK,QAAQ,MAAMA,EAAK;AAEhD,IAAIJ,EAAUK,CAAU,MAAM,UAC5BL,EAAUK,CAAU,IAAI,GACxBT,EAAI,KAAK,mBAAmBS,GAAYL,EAAUK,CAAU,CAAC,MAE7DL,EAAUK,CAAU,KACpBT,EAAI,KAAK,mBAAmBS,GAAYL,EAAUK,CAAU,CAAC;AAE/D,QAAIC,IAASD,IAAa,MAAML,EAAUK,CAAU;AACpD,IAAAT,EAAI,KAAK,mCAAmCS,GAAYC,GAAQN,EAAUK,CAAU,CAAC;AACrF,QAAIE,IAAgB,QAAQH,EAAK,OAC7BI,IAAc,QAAQJ,EAAK;AAE/B,UAAMK,IAAW,EAAE,OAAO,IAAI,YAAY,GAAE;AAgB5C,YAfAA,EAAS,SAASL,EAAK,UAAU,GAI7BA,EAAK,SAAS,eAChBK,EAAS,YAAY,SAErBA,EAAS,YAAY,UAIvBA,EAAS,iBAAiB,cAC1BA,EAAS,eAAe,cAGhBL,EAAK,MAAI;AAAA,MACf,KAAK;AACH,QAAAK,EAAS,iBAAiB;AAAA,MAC5B,KAAK;AACH,QAAAA,EAAS,eAAe;AACxB;AAAA,MACF,KAAK;AACH,QAAAA,EAAS,iBAAiB;AAAA,MAC5B,KAAK;AACH,QAAAA,EAAS,eAAe;AACxB;AAAA,MACF,KAAK;AACH,QAAAA,EAAS,iBAAiB;AAAA,MAC5B,KAAK;AACH,QAAAA,EAAS,eAAe;AACxB;AAAA,IACH;AAED,QAAIC,IAAQ,IACRC,IAAa;AAEjB,YAAQP,EAAK,QAAM;AAAA,MACjB,KAAK;AACH,QAAAM,IAAQ,cACJT,MAAiB,WACnBS,IAAQT,IAENC,MAAsB,WACxBS,IAAaT,IAEfO,EAAS,YAAY,UACrBA,EAAS,UAAU;AACnB;AAAA,MACF,KAAK;AACH,QAAAA,EAAS,YAAY,UACrBA,EAAS,UAAU,UACnBA,EAAS,QAAQ;AACjB;AAAA,MACF,KAAK;AACH,QAAAA,EAAS,YAAY,SACrBA,EAAS,UAAU,SACnBA,EAAS,QAAQ;AACjB;AAAA,MACF,KAAK;AACH,QAAAA,EAAS,YAAY,aACrBA,EAAS,UAAU,SACnBA,EAAS,QAAQ;AACjB;AAAA,IACH;AACD,QAAIL,EAAK,UAAU,QAAW;AAC5B,YAAMxB,IAASC,EAAmBuB,EAAK,KAAK;AAC5C,MAAAM,IAAQ9B,EAAO,OACf+B,IAAa/B,EAAO;AAAA,IACrB;AAED,IAAA6B,EAAS,QAAQA,EAAS,SAASC,GACnCD,EAAS,aAAaA,EAAS,cAAcE,GAEzCP,EAAK,gBAAgB,SACvBK,EAAS,QAAQG,EAAmBR,EAAK,aAAaS,CAAW,IACxDf,EAAM,uBAAuB,SACtCW,EAAS,QAAQG,EAAmBd,EAAM,oBAAoBe,CAAW,IAEzEJ,EAAS,QAAQG,EAAmBhD,EAAK,OAAOiD,CAAW,GAGzDT,EAAK,SAAS,SACZA,EAAK,UAAU,WACjBK,EAAS,iBAAiB,iBAG5BA,EAAS,iBAAiB,cAC1BA,EAAS,WAAW,MAGtBA,EAAS,YAAY,QACrBA,EAAS,QAAQL,EAAK,KAAK,QAAQb,EAAO,gBAAgB;AAAA,CAAI,GAE1Da,EAAK,UAAU,WACjBK,EAAS,QAAQA,EAAS,SAAS,iDAGrCA,EAAS,aAAaA,EAAS,WAAW,QAAQ,UAAU,OAAO,GAEnEA,EAAS,KAAKH,GACdG,EAAS,UAAU,oBAAoBF,IAAgB,MAAMC,GAG7DrC,EAAE,QAAQiC,EAAK,OAAOA,EAAK,KAAKK,GAAUV,CAAG;AAAA,EACjD,CAAG;AACH,GASae,IAAa,SAAUC,GAAMxC,GAAS;AACjD,EAAAqB,EAAI,KAAK,oBAAoB,GAC7BrB,EAAQ,GAAG;AACX,MAAI;AAEF,WAAAA,EAAQ,MAAMwC,CAAI,GACXxC,EAAQ,GAAG;EACnB,QAAC;AACA;AAAA,EACD;AACH,GASayC,IAAO,SAAUD,GAAMtC,GAAIwC,GAAU1C,GAAS;AACzD,EAAAqB,EAAI,KAAK,mBAAmB,GAC5BrB,EAAQ,GAAG,SACX2C,EAAO,OAAO,OAAO,GAErB3C,EAAQ,OAAO,MAAMwC,CAAI;AAGzB,MAAII,IAAM5C,EAAQ,GAAG,aAAY;AACjC,EAAI4C,MAAQ,WACVA,IAAM;AAGR,QAAM,EAAE,eAAAC,GAAe,WAAWxD,EAAM,IAAGqB,EAAS,GAC9CoC,IAAczD,EAAK,eAAe,IAClC0D,IAAc1D,EAAK,eAAe;AAGxC,MAAI2D;AACJ,EAAIH,MAAkB,cACpBG,IAAiBC,EAAO,OAAO/C,CAAE;AAEnC,QAAMJ,IACJ+C,MAAkB,YACdI,EAAOD,EAAe,MAAK,EAAG,CAAC,EAAE,gBAAgB,IAAI,IACrDC,EAAO,MAAM,GACblD,IAAM8C,MAAkB,YAAYG,EAAe,MAAK,EAAG,CAAC,EAAE,kBAAkB,UAGhFpD,IAAI,IAAIsD,EAAe;AAAA,IAC3B,YAAY;AAAA,IACZ,UAAU;AAAA,EACd,CAAG,EACE,SAAS;AAAA,IACR,SAASN;AAAA,IACT,SAASE;AAAA,IACT,SAASC;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,EACf,CAAK,EACA,oBAAoB,WAAY;AAC/B,WAAO;EACb,CAAK;AAEH,MAAII;AACJ,QAAMC,IAAYpD,EAAQ,GAAG,aAAY;AACzC,EAAAqB,EAAI,KAAK,gBAAgB+B,CAAS;AAClC,WAASC,IAAID,EAAU,SAAS,GAAGC,KAAK,GAAGA;AACzC,IAAAF,IAAOC,EAAUC,CAAC,GAClBhC,EAAI,KAAK,eAAe8B,CAAI,GAC5BnD,EAAQ,GAAG,UAAUmD,EAAK,IAAIA,EAAK,OAAO,SAAS,QAAWA,EAAK,SAASA,EAAK,GAAG;AAItF,QAAMxD,IAAOK,EAAQ,GAAG,YAAW,GAE7BuB,IAAQvB,EAAQ,GAAG,SAAQ;AAEjC,EAAAqB,EAAI,KAAK,SAASE,CAAK;AACvB,MAAI8B,IAAI;AACR,OAAKA,IAAID,EAAU,SAAS,GAAGC,KAAK,GAAGA,KAAK;AAE1C,IAAAF,IAAOC,EAAUC,CAAC,GAElBC,EAAU,SAAS,EAAE,OAAO,MAAM;AAElC,aAASC,IAAI,GAAGA,IAAIJ,EAAK,MAAM,QAAQI;AACrC,MAAAlC,EAAI,KAAK,wBAAwB8B,EAAK,MAAMI,CAAC,GAAGJ,EAAK,EAAE,GACvDvD,EAAE,UAAUuD,EAAK,MAAMI,CAAC,GAAGJ,EAAK,EAAE;AAAA,EAErC;AACD,EAAAzD,EAAYC,GAAMC,GAAGM,GAAIJ,GAAMC,GAAKC,CAAO,GAC3CsB,EAASC,GAAO3B,CAAU;AAM1B,QAAMK,IAAMH,EAAK,OAAO,QAAQI,KAAM,GAGhCsD,IAAU1D,EAAK,OAAO,MAAMI,IAAK,IAAI;AAW3C,MAVAuD,EAAOD,GAAS5D,GAAG,CAAC,SAAS,UAAU,OAAO,GAAG,aAAaM,CAAE,GAEhEwD,EAAM,YAAYzD,GAAK,sBAAsBZ,EAAK,gBAAgBW,EAAQ,GAAG,gBAAe,CAAE,GAE9F2D,EAAkB/D,GAAGK,GAAKZ,EAAK,gBAAgBA,EAAK,WAAW,GAG/DW,EAAQ,GAAG,WAAW,aAAaqD,CAAC,GAGhC,CAAChE,EAAK,YAAY;AACpB,UAAMuE,IAAS7D,EAAI,iBAAiB,UAAUG,IAAK,sBAAsB;AACzE,eAAW2D,KAASD,GAAQ;AAE1B,YAAME,IAAMD,EAAM,WAEZE,IAAOhE,EAAI,gBAAgB,8BAA8B,MAAM;AACrE,MAAAgE,EAAK,aAAa,MAAM,CAAC,GACzBA,EAAK,aAAa,MAAM,CAAC,GACzBA,EAAK,aAAa,SAASD,EAAI,KAAK,GACpCC,EAAK,aAAa,UAAUD,EAAI,MAAM,GAEtCD,EAAM,aAAaE,GAAMF,EAAM,UAAU;AAAA,IAC1C;AAAA,EACF;AAID,EADa,OAAO,KAAKlE,CAAI,EACxB,QAAQ,SAAUF,GAAK;AAC1B,UAAMU,IAASR,EAAKF,CAAG;AAEvB,QAAIU,EAAO,MAAM;AACf,YAAMQ,IAAOsC,EAAO,MAAM/C,IAAK,WAAWT,IAAM,IAAI;AACpD,UAAIkB,GAAM;AACR,cAAMqD,IAAOjE,EAAI,gBAAgB,8BAA8B,GAAG;AAClE,QAAAiE,EAAK,eAAe,8BAA8B,SAAS7D,EAAO,QAAQ,KAAK,GAAG,CAAC,GACnF6D,EAAK,eAAe,8BAA8B,QAAQ7D,EAAO,IAAI,GACrE6D,EAAK,eAAe,8BAA8B,OAAO,UAAU,GAC/DnB,MAAkB,YACpBmB,EAAK,eAAe,8BAA8B,UAAU,MAAM,IACzD7D,EAAO,cAChB6D,EAAK,eAAe,8BAA8B,UAAU7D,EAAO,UAAU;AAG/E,cAAM8D,IAAWtD,EAAK,OAAO,WAAY;AACvC,iBAAOqD;AAAA,QACR,GAAE,cAAc,GAEXE,IAAQvD,EAAK,OAAO,kBAAkB;AAC5C,QAAIuD,KACFD,EAAS,OAAO,WAAY;AAC1B,iBAAOC,EAAM;QACzB,CAAW;AAGH,cAAML,IAAQlD,EAAK,OAAO,QAAQ;AAClC,QAAIkD,KACFI,EAAS,OAAO,WAAY;AAC1B,iBAAOJ,EAAM;QACzB,CAAW;AAAA,MAEJ;AAAA,IACF;AAAA,EACL,CAAG;AACH,GAEeM,KAAA;AAAA,EACb,SAAA7E;AAAA,EACA,aAAAI;AAAA,EACA,UAAA4B;AAAA,EACA,YAAAiB;AAAA,EACA,MAAAE;AACF,GC9eM2B,IAAY,CAACC,MACjB;AAAA,mBACiBA,EAAQ;AAAA,aACdA,EAAQ,iBAAiBA,EAAQ;AAAA;AAAA;AAAA,YAGlCA,EAAQ;AAAA;AAAA;AAAA,aAGPA,EAAQ;AAAA;AAAA;AAAA;AAAA,YAITA,EAAQ,iBAAiBA,EAAQ;AAAA,aAChCA,EAAQ,iBAAiBA,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAQlCA,EAAQ;AAAA,cACNA,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAYVA,EAAQ;AAAA;AAAA;AAAA;AAAA,cAINA,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,cAKRA,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,wBAKEA,EAAQ;AAAA;AAAA;AAAA,0BAGNA,EAAQ;AAAA,cACpBA,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAMVA,EAAQ;AAAA,cACNA,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,YAKVA,EAAQ;AAAA;AAAA;AAAA;AAAA,aAIPA,EAAQ;AAAA;AAAA;AAAA,aAGRA,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAQFA,EAAQ;AAAA;AAAA,kBAETA,EAAQ;AAAA,wBACFA,EAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YASpBA,EAAQ;AAAA;AAAA,GAIpBC,KAAeF;"}