summaryrefslogtreecommitdiff
path: root/themes/blowfish/assets/lib/mermaid/erDiagram-25977acd.js.map
blob: 5f78c2deba9913e47c2865f7c5da89524b81a80a (plain)
1
{"version":3,"file":"erDiagram-25977acd.js","sources":["../src/diagrams/er/parser/erDiagram.jison","../src/diagrams/er/erDb.js","../src/diagrams/er/erMarkers.js","../src/diagrams/er/erRenderer.js","../src/diagrams/er/styles.js","../src/diagrams/er/erDiagram.ts"],"sourcesContent":["%lex\n\n%options case-insensitive\n%x open_directive type_directive arg_directive block\n%x acc_title\n%x acc_descr\n%x acc_descr_multiline\n\n%%\naccTitle\\s*\":\"\\s*                                               { this.begin(\"acc_title\");return 'acc_title'; }\n<acc_title>(?!\\n|;|#)*[^\\n]*                                    { this.popState(); return \"acc_title_value\"; }\naccDescr\\s*\":\"\\s*                                               { this.begin(\"acc_descr\");return 'acc_descr'; }\n<acc_descr>(?!\\n|;|#)*[^\\n]*                                    { this.popState(); return \"acc_descr_value\"; }\naccDescr\\s*\"{\"\\s*                                { this.begin(\"acc_descr_multiline\");}\n<acc_descr_multiline>[\\}]                       { this.popState(); }\n<acc_descr_multiline>[^\\}]*                     return \"acc_descr_multiline_value\";\n\\%\\%\\{                                                          { this.begin('open_directive'); return 'open_directive'; }\n<open_directive>((?:(?!\\}\\%\\%)[^:.])*)                          { this.begin('type_directive'); return 'type_directive'; }\n<type_directive>\":\"                                             { this.popState(); this.begin('arg_directive'); return ':'; }\n<type_directive,arg_directive>\\}\\%\\%                            { this.popState(); this.popState(); return 'close_directive'; }\n<arg_directive>((?:(?!\\}\\%\\%).|\\n)*)                            return 'arg_directive';\n\\%%(?!\\{)[^\\n]*                                                 /* skip comments */\n[^\\}]\\%\\%[^\\n]*                                                 /* skip comments */\n[\\n]+                           return 'NEWLINE';\n\\s+                             /* skip whitespace */\n[\\s]+                           return 'SPACE';\n\\\"[^\"%\\r\\n\\v\\b\\\\]+\\\"            return 'ENTITY_NAME';\n\\\"[^\"]*\\\"                       return 'WORD';\n\"erDiagram\"                     return 'ER_DIAGRAM';\n\"{\"                             { this.begin(\"block\"); return 'BLOCK_START'; }\n<block>\",\"                      return 'COMMA';\n<block>\\s+                      /* skip whitespace in block */\n<block>\\b((?:PK)|(?:FK)|(?:UK))\\b      return 'ATTRIBUTE_KEY'\n<block>(.*?)[~](.*?)*[~]        return 'ATTRIBUTE_WORD';\n<block>[A-Za-z_][A-Za-z0-9\\-_\\[\\]\\(\\)]*  return 'ATTRIBUTE_WORD'\n<block>\\\"[^\"]*\\\"                return 'COMMENT';\n<block>[\\n]+                    /* nothing */\n<block>\\%%(?!\\{)[^\\n]*          /* skip comments in attribute block */\n<block>[^\\}]\\%\\%[^\\n]*          /* skip comments in attribute block */\n<block>\"}\"                      { this.popState(); return 'BLOCK_STOP'; }\n<block>.                        return yytext[0];\n\n\"one or zero\"                   return 'ZERO_OR_ONE';\n\"one or more\"                   return 'ONE_OR_MORE';\n\"one or many\"                   return 'ONE_OR_MORE';\n\"1+\"                            return 'ONE_OR_MORE';\n\\|o                             return 'ZERO_OR_ONE';\n\"zero or one\"                   return 'ZERO_OR_ONE';\n\"zero or more\"                  return 'ZERO_OR_MORE';\n\"zero or many\"                  return 'ZERO_OR_MORE';\n\"0+\"                            return 'ZERO_OR_MORE';\n\\}o                             return 'ZERO_OR_MORE';\n\"many(0)\"                       return 'ZERO_OR_MORE';\n\"many(1)\"                       return 'ONE_OR_MORE';\n\"many\"                          return 'ZERO_OR_MORE';\n\\}\\|                            return 'ONE_OR_MORE';\n\"one\"                           return 'ONLY_ONE';\n\"only one\"                      return 'ONLY_ONE';\n\"1\"                             return 'ONLY_ONE';\n\\|\\|                            return 'ONLY_ONE';\no\\|                             return 'ZERO_OR_ONE';\no\\{                             return 'ZERO_OR_MORE';\n\\|\\{                            return 'ONE_OR_MORE';\n\\.\\.                            return 'NON_IDENTIFYING';\n\\-\\-                            return 'IDENTIFYING';\n\"to\"                            return 'IDENTIFYING';\n\"optionally to\"                 return 'NON_IDENTIFYING';\n\\.\\-                            return 'NON_IDENTIFYING';\n\\-\\.                            return 'NON_IDENTIFYING';\n[A-Za-z][A-Za-z0-9\\-_]*         return 'ALPHANUM';\n.                               return yytext[0];\n<<EOF>>                         return 'EOF';\n\n/lex\n\n%start start\n%% /* language grammar */\n\nstart\n    : 'ER_DIAGRAM' document 'EOF' { /*console.log('finished parsing');*/ }\n  \t| directive start\n    ;\n\ndocument\n\t: /* empty */ { $$ = [] }\n\t| document line {$1.push($2);$$ = $1}\n\t;\n\nline\n\t: SPACE statement { $$ = $2 }\n\t| statement { $$ = $1 }\n\t| NEWLINE { $$=[];}\n\t| EOF { $$=[];}\n\t;\n\ndirective\n  : openDirective typeDirective closeDirective 'NEWLINE'\n  | openDirective typeDirective ':' argDirective closeDirective 'NEWLINE'\n  ;\n\nstatement\n    : directive\n    | entityName relSpec entityName ':' role\n      {\n          yy.addEntity($1);\n          yy.addEntity($3);\n          yy.addRelationship($1, $5, $3, $2);\n          /*console.log($1 + $2 + $3 + ':' + $5);*/\n      }\n    | entityName BLOCK_START attributes BLOCK_STOP\n      {\n          /* console.log('detected block'); */\n          yy.addEntity($1);\n          yy.addAttributes($1, $3);\n          /* console.log('handled block'); */\n      }\n    | entityName BLOCK_START BLOCK_STOP { yy.addEntity($1); }\n    | entityName { yy.addEntity($1); }\n    | title title_value  { $$=$2.trim();yy.setAccTitle($$); }\n    | acc_title acc_title_value  { $$=$2.trim();yy.setAccTitle($$); }\n    | acc_descr acc_descr_value  { $$=$2.trim();yy.setAccDescription($$); }\n    | acc_descr_multiline_value { $$=$1.trim();yy.setAccDescription($$); }\n    ;\n\nentityName\n    : 'ALPHANUM'      { $$ = $1; }\n    | 'ENTITY_NAME'      { $$ = $1.replace(/\"/g, ''); }\n    ;\n\nattributes\n    : attribute { $$ = [$1]; }\n    | attribute attributes { $2.push($1); $$=$2; }\n    ;\n\nattribute\n    : attributeType attributeName { $$ = { attributeType: $1, attributeName: $2 }; }\n    | attributeType attributeName attributeKeyTypeList { $$ = { attributeType: $1, attributeName: $2, attributeKeyTypeList: $3 }; }\n    | attributeType attributeName attributeComment { $$ = { attributeType: $1, attributeName: $2, attributeComment: $3 }; }\n    | attributeType attributeName attributeKeyTypeList attributeComment { $$ = { attributeType: $1, attributeName: $2, attributeKeyTypeList: $3, attributeComment: $4 }; }\n    ;\n\n\nattributeType\n    : ATTRIBUTE_WORD { $$=$1; }\n    ;\n\nattributeName\n    : ATTRIBUTE_WORD { $$=$1; }\n    ;\n\nattributeKeyTypeList\n    : attributeKeyType { $$ = [$1]; }\n    | attributeKeyTypeList COMMA attributeKeyType { $1.push($3); $$ = $1; }\n    ;\n\nattributeKeyType\n    : ATTRIBUTE_KEY { $$=$1; }\n    ;\n\nattributeComment\n    : COMMENT { $$=$1.replace(/\"/g, ''); }\n    ;\n\nrelSpec\n    : cardinality relType cardinality\n      {\n        $$ = { cardA: $3, relType: $2, cardB: $1 };\n        /*console.log('relSpec: ' + $3 + $2 + $1);*/\n      }\n    ;\n\ncardinality\n    : 'ZERO_OR_ONE'                  { $$ = yy.Cardinality.ZERO_OR_ONE; }\n    | 'ZERO_OR_MORE'                 { $$ = yy.Cardinality.ZERO_OR_MORE; }\n    | 'ONE_OR_MORE'                  { $$ = yy.Cardinality.ONE_OR_MORE; }\n    | 'ONLY_ONE'                     { $$ = yy.Cardinality.ONLY_ONE; }\n    ;\n\nrelType\n    : 'NON_IDENTIFYING'              { $$ = yy.Identification.NON_IDENTIFYING;  }\n    | 'IDENTIFYING'                  { $$ = yy.Identification.IDENTIFYING; }\n    ;\n\nrole\n    : 'WORD'      { $$ = $1.replace(/\"/g, ''); }\n    | 'ENTITY_NAME' { $$ = $1.replace(/\"/g, ''); }\n    | 'ALPHANUM'  { $$ = $1; }\n    ;\n\nopenDirective\n  : open_directive { yy.parseDirective('%%{', 'open_directive'); }\n  ;\n\ntypeDirective\n  : type_directive { yy.parseDirective($1, 'type_directive'); }\n  ;\n\nargDirective\n  : arg_directive { $1 = $1.trim().replace(/'/g, '\"'); yy.parseDirective($1, 'arg_directive'); }\n  ;\n\ncloseDirective\n  : close_directive { yy.parseDirective('}%%', 'close_directive', 'er'); }\n  ;\n\n%%\n","import { log } from '../../logger';\nimport mermaidAPI from '../../mermaidAPI';\nimport * as configApi from '../../config';\n\nimport {\n  setAccTitle,\n  getAccTitle,\n  getAccDescription,\n  setAccDescription,\n  clear as commonClear,\n  setDiagramTitle,\n  getDiagramTitle,\n} from '../../commonDb';\n\nlet entities = {};\nlet relationships = [];\n\nconst Cardinality = {\n  ZERO_OR_ONE: 'ZERO_OR_ONE',\n  ZERO_OR_MORE: 'ZERO_OR_MORE',\n  ONE_OR_MORE: 'ONE_OR_MORE',\n  ONLY_ONE: 'ONLY_ONE',\n};\n\nconst Identification = {\n  NON_IDENTIFYING: 'NON_IDENTIFYING',\n  IDENTIFYING: 'IDENTIFYING',\n};\n\nexport const parseDirective = function (statement, context, type) {\n  mermaidAPI.parseDirective(this, statement, context, type);\n};\n\nconst addEntity = function (name) {\n  if (entities[name] === undefined) {\n    entities[name] = { attributes: [] };\n    log.info('Added new entity :', name);\n  }\n\n  return entities[name];\n};\n\nconst getEntities = () => entities;\n\nconst addAttributes = function (entityName, attribs) {\n  let entity = addEntity(entityName); // May do nothing (if entity has already been added)\n\n  // Process attribs in reverse order due to effect of recursive construction (last attribute is first)\n  let i;\n  for (i = attribs.length - 1; i >= 0; i--) {\n    entity.attributes.push(attribs[i]);\n    log.debug('Added attribute ', attribs[i].attributeName);\n  }\n};\n\n/**\n * Add a relationship\n *\n * @param entA The first entity in the relationship\n * @param rolA The role played by the first entity in relation to the second\n * @param entB The second entity in the relationship\n * @param rSpec The details of the relationship between the two entities\n */\nconst addRelationship = function (entA, rolA, entB, rSpec) {\n  let rel = {\n    entityA: entA,\n    roleA: rolA,\n    entityB: entB,\n    relSpec: rSpec,\n  };\n\n  relationships.push(rel);\n  log.debug('Added new relationship :', rel);\n};\n\nconst getRelationships = () => relationships;\n\nconst clear = function () {\n  entities = {};\n  relationships = [];\n  commonClear();\n};\n\nexport default {\n  Cardinality,\n  Identification,\n  parseDirective,\n  getConfig: () => configApi.getConfig().er,\n  addEntity,\n  addAttributes,\n  getEntities,\n  addRelationship,\n  getRelationships,\n  clear,\n  setAccTitle,\n  getAccTitle,\n  setAccDescription,\n  getAccDescription,\n  setDiagramTitle,\n  getDiagramTitle,\n};\n","const ERMarkers = {\n  ONLY_ONE_START: 'ONLY_ONE_START',\n  ONLY_ONE_END: 'ONLY_ONE_END',\n  ZERO_OR_ONE_START: 'ZERO_OR_ONE_START',\n  ZERO_OR_ONE_END: 'ZERO_OR_ONE_END',\n  ONE_OR_MORE_START: 'ONE_OR_MORE_START',\n  ONE_OR_MORE_END: 'ONE_OR_MORE_END',\n  ZERO_OR_MORE_START: 'ZERO_OR_MORE_START',\n  ZERO_OR_MORE_END: 'ZERO_OR_MORE_END',\n};\n\n/**\n * Put the markers into the svg DOM for later use with edge paths\n *\n * @param elem\n * @param conf\n */\nconst insertMarkers = function (elem, conf) {\n  let marker;\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ONLY_ONE_START)\n    .attr('refX', 0)\n    .attr('refY', 9)\n    .attr('markerWidth', 18)\n    .attr('markerHeight', 18)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'none')\n    .attr('d', 'M9,0 L9,18 M15,0 L15,18');\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ONLY_ONE_END)\n    .attr('refX', 18)\n    .attr('refY', 9)\n    .attr('markerWidth', 18)\n    .attr('markerHeight', 18)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'none')\n    .attr('d', 'M3,0 L3,18 M9,0 L9,18');\n\n  marker = elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ZERO_OR_ONE_START)\n    .attr('refX', 0)\n    .attr('refY', 9)\n    .attr('markerWidth', 30)\n    .attr('markerHeight', 18)\n    .attr('orient', 'auto');\n  marker\n    .append('circle')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'white')\n    .attr('cx', 21)\n    .attr('cy', 9)\n    .attr('r', 6);\n  marker.append('path').attr('stroke', conf.stroke).attr('fill', 'none').attr('d', 'M9,0 L9,18');\n\n  marker = elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ZERO_OR_ONE_END)\n    .attr('refX', 30)\n    .attr('refY', 9)\n    .attr('markerWidth', 30)\n    .attr('markerHeight', 18)\n    .attr('orient', 'auto');\n  marker\n    .append('circle')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'white')\n    .attr('cx', 9)\n    .attr('cy', 9)\n    .attr('r', 6);\n  marker.append('path').attr('stroke', conf.stroke).attr('fill', 'none').attr('d', 'M21,0 L21,18');\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ONE_OR_MORE_START)\n    .attr('refX', 18)\n    .attr('refY', 18)\n    .attr('markerWidth', 45)\n    .attr('markerHeight', 36)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'none')\n    .attr('d', 'M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27');\n\n  elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ONE_OR_MORE_END)\n    .attr('refX', 27)\n    .attr('refY', 18)\n    .attr('markerWidth', 45)\n    .attr('markerHeight', 36)\n    .attr('orient', 'auto')\n    .append('path')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'none')\n    .attr('d', 'M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18');\n\n  marker = elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ZERO_OR_MORE_START)\n    .attr('refX', 18)\n    .attr('refY', 18)\n    .attr('markerWidth', 57)\n    .attr('markerHeight', 36)\n    .attr('orient', 'auto');\n  marker\n    .append('circle')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'white')\n    .attr('cx', 48)\n    .attr('cy', 18)\n    .attr('r', 6);\n  marker\n    .append('path')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'none')\n    .attr('d', 'M0,18 Q18,0 36,18 Q18,36 0,18');\n\n  marker = elem\n    .append('defs')\n    .append('marker')\n    .attr('id', ERMarkers.ZERO_OR_MORE_END)\n    .attr('refX', 39)\n    .attr('refY', 18)\n    .attr('markerWidth', 57)\n    .attr('markerHeight', 36)\n    .attr('orient', 'auto');\n  marker\n    .append('circle')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'white')\n    .attr('cx', 9)\n    .attr('cy', 18)\n    .attr('r', 6);\n  marker\n    .append('path')\n    .attr('stroke', conf.stroke)\n    .attr('fill', 'none')\n    .attr('d', 'M21,18 Q39,0 57,18 Q39,36 21,18');\n\n  return;\n};\n\nexport default {\n  ERMarkers,\n  insertMarkers,\n};\n","import * as graphlib from 'dagre-d3-es/src/graphlib/index.js';\nimport { line, curveBasis, select } from 'd3';\nimport { layout as dagreLayout } from 'dagre-d3-es/src/dagre/index.js';\nimport { getConfig } from '../../config';\nimport { log } from '../../logger';\nimport utils from '../../utils';\nimport erMarkers from './erMarkers';\nimport { configureSvgSize } from '../../setupGraphViewbox';\nimport { parseGenericTypes } from '../common/common';\nimport { v5 as uuid5 } from 'uuid';\n\n/** Regex used to remove chars from the entity name so the result can be used in an id */\nconst BAD_ID_CHARS_REGEXP = /[^\\dA-Za-z](\\W)*/g;\n\n// Configuration\nlet conf = {};\n\n// Map so we can look up the id of an entity based on the name\nlet entityNameIds = new Map();\n\n/**\n * Allows the top-level API module to inject config specific to this renderer, storing it in the\n * local conf object. Note that generic config still needs to be retrieved using getConfig()\n * imported from the config module\n *\n * @param cnf\n */\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 * Draw attributes for an entity\n *\n * @param groupNode The svg group node for the entity\n * @param entityTextNode The svg node for the entity label text\n * @param attributes An array of attributes defined for the entity (each attribute has a type and a\n *   name)\n * @returns {object} The bounding box of the entity, after attributes have been added. The bounding\n *   box has a .width and .height\n */\nconst drawAttributes = (groupNode, entityTextNode, attributes) => {\n  const heightPadding = conf.entityPadding / 3; // Padding internal to attribute boxes\n  const widthPadding = conf.entityPadding / 3; // Ditto\n  const attrFontSize = conf.fontSize * 0.85;\n  const labelBBox = entityTextNode.node().getBBox();\n  const attributeNodes = []; // Intermediate storage for attribute nodes created so that we can do a second pass\n  let hasKeyType = false;\n  let hasComment = false;\n  let maxTypeWidth = 0;\n  let maxNameWidth = 0;\n  let maxKeyWidth = 0;\n  let maxCommentWidth = 0;\n  let cumulativeHeight = labelBBox.height + heightPadding * 2;\n  let attrNum = 1;\n\n  // Check to see if any of the attributes has a key or a comment\n  attributes.forEach((item) => {\n    if (item.attributeKeyTypeList !== undefined && item.attributeKeyTypeList.length > 0) {\n      hasKeyType = true;\n    }\n\n    if (item.attributeComment !== undefined) {\n      hasComment = true;\n    }\n  });\n\n  attributes.forEach((item) => {\n    const attrPrefix = `${entityTextNode.node().id}-attr-${attrNum}`;\n    let nodeHeight = 0;\n\n    const attributeType = parseGenericTypes(item.attributeType);\n\n    // Add a text node for the attribute type\n    const typeNode = groupNode\n      .append('text')\n      .classed('er entityLabel', true)\n      .attr('id', `${attrPrefix}-type`)\n      .attr('x', 0)\n      .attr('y', 0)\n      .style('dominant-baseline', 'middle')\n      .style('text-anchor', 'left')\n      .style('font-family', getConfig().fontFamily)\n      .style('font-size', attrFontSize + 'px')\n      .text(attributeType);\n\n    // Add a text node for the attribute name\n    const nameNode = groupNode\n      .append('text')\n      .classed('er entityLabel', true)\n      .attr('id', `${attrPrefix}-name`)\n      .attr('x', 0)\n      .attr('y', 0)\n      .style('dominant-baseline', 'middle')\n      .style('text-anchor', 'left')\n      .style('font-family', getConfig().fontFamily)\n      .style('font-size', attrFontSize + 'px')\n      .text(item.attributeName);\n\n    const attributeNode = {};\n    attributeNode.tn = typeNode;\n    attributeNode.nn = nameNode;\n\n    const typeBBox = typeNode.node().getBBox();\n    const nameBBox = nameNode.node().getBBox();\n    maxTypeWidth = Math.max(maxTypeWidth, typeBBox.width);\n    maxNameWidth = Math.max(maxNameWidth, nameBBox.width);\n\n    nodeHeight = Math.max(typeBBox.height, nameBBox.height);\n\n    if (hasKeyType) {\n      const keyTypeNodeText =\n        item.attributeKeyTypeList !== undefined ? item.attributeKeyTypeList.join(',') : '';\n\n      const keyTypeNode = groupNode\n        .append('text')\n        .classed('er entityLabel', true)\n        .attr('id', `${attrPrefix}-key`)\n        .attr('x', 0)\n        .attr('y', 0)\n        .style('dominant-baseline', 'middle')\n        .style('text-anchor', 'left')\n        .style('font-family', getConfig().fontFamily)\n        .style('font-size', attrFontSize + 'px')\n        .text(keyTypeNodeText);\n\n      attributeNode.kn = keyTypeNode;\n      const keyTypeBBox = keyTypeNode.node().getBBox();\n      maxKeyWidth = Math.max(maxKeyWidth, keyTypeBBox.width);\n      nodeHeight = Math.max(nodeHeight, keyTypeBBox.height);\n    }\n\n    if (hasComment) {\n      const commentNode = groupNode\n        .append('text')\n        .classed('er entityLabel', true)\n        .attr('id', `${attrPrefix}-comment`)\n        .attr('x', 0)\n        .attr('y', 0)\n        .style('dominant-baseline', 'middle')\n        .style('text-anchor', 'left')\n        .style('font-family', getConfig().fontFamily)\n        .style('font-size', attrFontSize + 'px')\n        .text(item.attributeComment || '');\n\n      attributeNode.cn = commentNode;\n      const commentNodeBBox = commentNode.node().getBBox();\n      maxCommentWidth = Math.max(maxCommentWidth, commentNodeBBox.width);\n      nodeHeight = Math.max(nodeHeight, commentNodeBBox.height);\n    }\n\n    attributeNode.height = nodeHeight;\n    // Keep a reference to the nodes so that we can iterate through them later\n    attributeNodes.push(attributeNode);\n    cumulativeHeight += nodeHeight + heightPadding * 2;\n    attrNum += 1;\n  });\n\n  let widthPaddingFactor = 4;\n  if (hasKeyType) {\n    widthPaddingFactor += 2;\n  }\n  if (hasComment) {\n    widthPaddingFactor += 2;\n  }\n\n  const maxWidth = maxTypeWidth + maxNameWidth + maxKeyWidth + maxCommentWidth;\n\n  // Calculate the new bounding box of the overall entity, now that attributes have been added\n  const bBox = {\n    width: Math.max(\n      conf.minEntityWidth,\n      Math.max(\n        labelBBox.width + conf.entityPadding * 2,\n        maxWidth + widthPadding * widthPaddingFactor\n      )\n    ),\n    height:\n      attributes.length > 0\n        ? cumulativeHeight\n        : Math.max(conf.minEntityHeight, labelBBox.height + conf.entityPadding * 2),\n  };\n\n  if (attributes.length > 0) {\n    // There might be some spare width for padding out attributes if the entity name is very long\n    const spareColumnWidth = Math.max(\n      0,\n      (bBox.width - maxWidth - widthPadding * widthPaddingFactor) / (widthPaddingFactor / 2)\n    );\n\n    // Position the entity label near the top of the entity bounding box\n    entityTextNode.attr(\n      'transform',\n      'translate(' + bBox.width / 2 + ',' + (heightPadding + labelBBox.height / 2) + ')'\n    );\n\n    // Add rectangular boxes for the attribute types/names\n    let heightOffset = labelBBox.height + heightPadding * 2; // Start at the bottom of the entity label\n    let attribStyle = 'attributeBoxOdd'; // We will flip the style on alternate rows to achieve a banded effect\n\n    attributeNodes.forEach((attributeNode) => {\n      // Calculate the alignment y co-ordinate for the type/name of the attribute\n      const alignY = heightOffset + heightPadding + attributeNode.height / 2;\n\n      // Position the type attribute\n      attributeNode.tn.attr('transform', 'translate(' + widthPadding + ',' + alignY + ')');\n\n      // TODO Handle spareWidth in attr('width')\n      // Insert a rectangle for the type\n      const typeRect = groupNode\n        .insert('rect', '#' + attributeNode.tn.node().id)\n        .classed(`er ${attribStyle}`, true)\n        .attr('x', 0)\n        .attr('y', heightOffset)\n        .attr('width', maxTypeWidth + widthPadding * 2 + spareColumnWidth)\n        .attr('height', attributeNode.height + heightPadding * 2);\n\n      const nameXOffset = parseFloat(typeRect.attr('x')) + parseFloat(typeRect.attr('width'));\n\n      // Position the name attribute\n      attributeNode.nn.attr(\n        'transform',\n        'translate(' + (nameXOffset + widthPadding) + ',' + alignY + ')'\n      );\n\n      // Insert a rectangle for the name\n      const nameRect = groupNode\n        .insert('rect', '#' + attributeNode.nn.node().id)\n        .classed(`er ${attribStyle}`, true)\n        .attr('x', nameXOffset)\n        .attr('y', heightOffset)\n        .attr('width', maxNameWidth + widthPadding * 2 + spareColumnWidth)\n        .attr('height', attributeNode.height + heightPadding * 2);\n\n      let keyTypeAndCommentXOffset =\n        parseFloat(nameRect.attr('x')) + parseFloat(nameRect.attr('width'));\n\n      if (hasKeyType) {\n        // Position the key type attribute\n        attributeNode.kn.attr(\n          'transform',\n          'translate(' + (keyTypeAndCommentXOffset + widthPadding) + ',' + alignY + ')'\n        );\n\n        // Insert a rectangle for the key type\n        const keyTypeRect = groupNode\n          .insert('rect', '#' + attributeNode.kn.node().id)\n          .classed(`er ${attribStyle}`, true)\n          .attr('x', keyTypeAndCommentXOffset)\n          .attr('y', heightOffset)\n          .attr('width', maxKeyWidth + widthPadding * 2 + spareColumnWidth)\n          .attr('height', attributeNode.height + heightPadding * 2);\n\n        keyTypeAndCommentXOffset =\n          parseFloat(keyTypeRect.attr('x')) + parseFloat(keyTypeRect.attr('width'));\n      }\n\n      if (hasComment) {\n        // Position the comment attribute\n        attributeNode.cn.attr(\n          'transform',\n          'translate(' + (keyTypeAndCommentXOffset + widthPadding) + ',' + alignY + ')'\n        );\n\n        // Insert a rectangle for the comment\n        groupNode\n          .insert('rect', '#' + attributeNode.cn.node().id)\n          .classed(`er ${attribStyle}`, 'true')\n          .attr('x', keyTypeAndCommentXOffset)\n          .attr('y', heightOffset)\n          .attr('width', maxCommentWidth + widthPadding * 2 + spareColumnWidth)\n          .attr('height', attributeNode.height + heightPadding * 2);\n      }\n\n      // Increment the height offset to move to the next row\n      heightOffset += attributeNode.height + heightPadding * 2;\n\n      // Flip the attribute style for row banding\n      attribStyle = attribStyle === 'attributeBoxOdd' ? 'attributeBoxEven' : 'attributeBoxOdd';\n    });\n  } else {\n    // Ensure the entity box is a decent size without any attributes\n    bBox.height = Math.max(conf.minEntityHeight, cumulativeHeight);\n\n    // Position the entity label in the middle of the box\n    entityTextNode.attr('transform', 'translate(' + bBox.width / 2 + ',' + bBox.height / 2 + ')');\n  }\n\n  return bBox;\n};\n\n/**\n * Use D3 to construct the svg elements for the entities\n *\n * @param svgNode The svg node that contains the diagram\n * @param entities The entities to be drawn\n * @param graph The graph that contains the vertex and edge definitions post-layout\n * @returns {object} The first entity that was inserted\n */\nconst drawEntities = function (svgNode, entities, graph) {\n  const keys = Object.keys(entities);\n  let firstOne;\n\n  keys.forEach(function (entityName) {\n    const entityId = generateId(entityName, 'entity');\n    entityNameIds.set(entityName, entityId);\n\n    // Create a group for each entity\n    const groupNode = svgNode.append('g').attr('id', entityId);\n\n    firstOne = firstOne === undefined ? entityId : firstOne;\n\n    // Label the entity - this is done first so that we can get the bounding box\n    // which then determines the size of the rectangle\n    const textId = 'text-' + entityId;\n    const textNode = groupNode\n      .append('text')\n      .classed('er entityLabel', true)\n      .attr('id', textId)\n      .attr('x', 0)\n      .attr('y', 0)\n      .style('dominant-baseline', 'middle')\n      .style('text-anchor', 'middle')\n      .style('font-family', getConfig().fontFamily)\n      .style('font-size', conf.fontSize + 'px')\n      .text(entityName);\n\n    const { width: entityWidth, height: entityHeight } = drawAttributes(\n      groupNode,\n      textNode,\n      entities[entityName].attributes\n    );\n\n    // Draw the rectangle - insert it before the text so that the text is not obscured\n    const rectNode = groupNode\n      .insert('rect', '#' + textId)\n      .classed('er entityBox', true)\n      .attr('x', 0)\n      .attr('y', 0)\n      .attr('width', entityWidth)\n      .attr('height', entityHeight);\n\n    const rectBBox = rectNode.node().getBBox();\n\n    // Add the entity to the graph using the entityId\n    graph.setNode(entityId, {\n      width: rectBBox.width,\n      height: rectBBox.height,\n      shape: 'rect',\n      id: entityId,\n    });\n  });\n  return firstOne;\n}; // drawEntities\n\nconst adjustEntities = function (svgNode, graph) {\n  graph.nodes().forEach(function (v) {\n    if (v !== undefined && graph.node(v) !== undefined) {\n      svgNode\n        .select('#' + v)\n        .attr(\n          'transform',\n          'translate(' +\n            (graph.node(v).x - graph.node(v).width / 2) +\n            ',' +\n            (graph.node(v).y - graph.node(v).height / 2) +\n            ' )'\n        );\n    }\n  });\n};\n\n/**\n * Construct a name for an edge based on the names of the 2 entities and the role (relationship)\n * between them. Remove any spaces from it\n *\n * @param rel - A (parsed) relationship (e.g. one of the objects in the list returned by\n *   erDb.getRelationships)\n * @returns {string}\n */\nconst getEdgeName = function (rel) {\n  return (rel.entityA + rel.roleA + rel.entityB).replace(/\\s/g, '');\n};\n\n/**\n * Add each relationship to the graph\n *\n * @param relationships The relationships to be added\n * @param g The graph\n * @returns {Array} The array of relationships\n */\nconst addRelationships = function (relationships, g) {\n  relationships.forEach(function (r) {\n    g.setEdge(\n      entityNameIds.get(r.entityA),\n      entityNameIds.get(r.entityB),\n      { relationship: r },\n      getEdgeName(r)\n    );\n  });\n  return relationships;\n}; // addRelationships\n\nlet relCnt = 0;\n/**\n * Draw a relationship using edge information from the graph\n *\n * @param svg The svg node\n * @param rel The relationship to draw in the svg\n * @param g The graph containing the edge information\n * @param insert The insertion point in the svg DOM (because relationships have markers that need to\n *   sit 'behind' opaque entity boxes)\n * @param diagObj\n */\nconst drawRelationshipFromLayout = function (svg, rel, g, insert, diagObj) {\n  relCnt++;\n\n  // Find the edge relating to this relationship\n  const edge = g.edge(\n    entityNameIds.get(rel.entityA),\n    entityNameIds.get(rel.entityB),\n    getEdgeName(rel)\n  );\n\n  // Get a function that will generate the line path\n  const lineFunction = line()\n    .x(function (d) {\n      return d.x;\n    })\n    .y(function (d) {\n      return d.y;\n    })\n    .curve(curveBasis);\n\n  // Insert the line at the right place\n  const svgPath = svg\n    .insert('path', '#' + insert)\n    .classed('er relationshipLine', true)\n    .attr('d', lineFunction(edge.points))\n    .style('stroke', conf.stroke)\n    .style('fill', 'none');\n\n  // ...and with dashes if necessary\n  if (rel.relSpec.relType === diagObj.db.Identification.NON_IDENTIFYING) {\n    svgPath.attr('stroke-dasharray', '8,8');\n  }\n\n  // TODO: Understand this better\n  let url = '';\n  if (conf.arrowMarkerAbsolute) {\n    url =\n      window.location.protocol +\n      '//' +\n      window.location.host +\n      window.location.pathname +\n      window.location.search;\n    url = url.replace(/\\(/g, '\\\\(');\n    url = url.replace(/\\)/g, '\\\\)');\n  }\n\n  // Decide which start and end markers it needs. It may be possible to be more concise here\n  // by reversing a start marker to make an end marker...but this will do for now\n\n  // Note that the 'A' entity's marker is at the end of the relationship and the 'B' entity's marker is at the start\n  switch (rel.relSpec.cardA) {\n    case diagObj.db.Cardinality.ZERO_OR_ONE:\n      svgPath.attr('marker-end', 'url(' + url + '#' + erMarkers.ERMarkers.ZERO_OR_ONE_END + ')');\n      break;\n    case diagObj.db.Cardinality.ZERO_OR_MORE:\n      svgPath.attr('marker-end', 'url(' + url + '#' + erMarkers.ERMarkers.ZERO_OR_MORE_END + ')');\n      break;\n    case diagObj.db.Cardinality.ONE_OR_MORE:\n      svgPath.attr('marker-end', 'url(' + url + '#' + erMarkers.ERMarkers.ONE_OR_MORE_END + ')');\n      break;\n    case diagObj.db.Cardinality.ONLY_ONE:\n      svgPath.attr('marker-end', 'url(' + url + '#' + erMarkers.ERMarkers.ONLY_ONE_END + ')');\n      break;\n  }\n\n  switch (rel.relSpec.cardB) {\n    case diagObj.db.Cardinality.ZERO_OR_ONE:\n      svgPath.attr(\n        'marker-start',\n        'url(' + url + '#' + erMarkers.ERMarkers.ZERO_OR_ONE_START + ')'\n      );\n      break;\n    case diagObj.db.Cardinality.ZERO_OR_MORE:\n      svgPath.attr(\n        'marker-start',\n        'url(' + url + '#' + erMarkers.ERMarkers.ZERO_OR_MORE_START + ')'\n      );\n      break;\n    case diagObj.db.Cardinality.ONE_OR_MORE:\n      svgPath.attr(\n        'marker-start',\n        'url(' + url + '#' + erMarkers.ERMarkers.ONE_OR_MORE_START + ')'\n      );\n      break;\n    case diagObj.db.Cardinality.ONLY_ONE:\n      svgPath.attr('marker-start', 'url(' + url + '#' + erMarkers.ERMarkers.ONLY_ONE_START + ')');\n      break;\n  }\n\n  // Now label the relationship\n\n  // Find the half-way point\n  const len = svgPath.node().getTotalLength();\n  const labelPoint = svgPath.node().getPointAtLength(len * 0.5);\n\n  // Append a text node containing the label\n  const labelId = 'rel' + relCnt;\n\n  const labelNode = svg\n    .append('text')\n    .classed('er relationshipLabel', true)\n    .attr('id', labelId)\n    .attr('x', labelPoint.x)\n    .attr('y', labelPoint.y)\n    .style('text-anchor', 'middle')\n    .style('dominant-baseline', 'middle')\n    .style('font-family', getConfig().fontFamily)\n    .style('font-size', conf.fontSize + 'px')\n    .text(rel.roleA);\n\n  // Figure out how big the opaque 'container' rectangle needs to be\n  const labelBBox = labelNode.node().getBBox();\n\n  // Insert the opaque rectangle before the text label\n  svg\n    .insert('rect', '#' + labelId)\n    .classed('er relationshipLabelBox', true)\n    .attr('x', labelPoint.x - labelBBox.width / 2)\n    .attr('y', labelPoint.y - labelBBox.height / 2)\n    .attr('width', labelBBox.width)\n    .attr('height', labelBBox.height);\n};\n\n/**\n * Draw en E-R diagram in the tag with id: id based on the text definition of the diagram\n *\n * @param text The text of the diagram\n * @param id The unique id of the DOM node that contains the diagram\n * @param _version\n * @param diagObj\n */\nexport const draw = function (text, id, _version, diagObj) {\n  conf = getConfig().er;\n  log.info('Drawing ER diagram');\n  //  diag.db.clear();\n  const securityLevel = getConfig().securityLevel;\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  // Parse the text to populate erDb\n  // try {\n  //   parser.parse(text);\n  // } catch (err) {\n  //   log.debug('Parsing failed');\n  // }\n\n  // Get a reference to the svg node that contains the text\n  const svg = root.select(`[id='${id}']`);\n\n  // Add cardinality marker definitions to the svg\n  erMarkers.insertMarkers(svg, conf);\n\n  // Now we have to construct the diagram in a specific way:\n  // ---\n  // 1. Create all the entities in the svg node at 0,0, but with the correct dimensions (allowing for text content)\n  // 2. Make sure they are all added to the graph\n  // 3. Add all the edges (relationships) to the graph as well\n  // 4. Let dagre do its magic to lay out the graph.  This assigns:\n  //    - the centre co-ordinates for each node, bearing in mind the dimensions and edge relationships\n  //    - the path co-ordinates for each edge\n  //    But it has no impact on the svg child nodes - the diagram remains with every entity rooted at 0,0\n  // 5. Now assign a transform to each entity in the svg node so that it gets drawn in the correct place, as determined by\n  //    its centre point, which is obtained from the graph, and it's width and height\n  // 6. And finally, create all the edges in the svg node using information from the graph\n  // ---\n\n  // Create the graph\n  let g;\n\n  // TODO: Explore directed vs undirected graphs, and how the layout is affected\n  // An E-R diagram could be said to be undirected, but there is merit in setting\n  // the direction from parent to child in a one-to-many as this influences graphlib to\n  // put the parent above the child (does it?), which is intuitive.  Most relationships\n  // in ER diagrams are one-to-many.\n  g = new graphlib.Graph({\n    multigraph: true,\n    directed: true,\n    compound: false,\n  })\n    .setGraph({\n      rankdir: conf.layoutDirection,\n      marginx: 20,\n      marginy: 20,\n      nodesep: 100,\n      edgesep: 100,\n      ranksep: 100,\n    })\n    .setDefaultEdgeLabel(function () {\n      return {};\n    });\n\n  // Draw the entities (at 0,0), returning the first svg node that got\n  // inserted - this represents the insertion point for relationship paths\n  const firstEntity = drawEntities(svg, diagObj.db.getEntities(), g);\n\n  // TODO: externalize the addition of entities to the graph - it's a bit 'buried' in the above\n\n  // Add all the relationships to the graph\n  const relationships = addRelationships(diagObj.db.getRelationships(), g);\n\n  dagreLayout(g); // Node and edge positions will be updated\n\n  // Adjust the positions of the entities so that they adhere to the layout\n  adjustEntities(svg, g);\n\n  // Draw the relationships\n  relationships.forEach(function (rel) {\n    drawRelationshipFromLayout(svg, rel, g, firstEntity, diagObj);\n  });\n\n  const padding = conf.diagramPadding;\n\n  utils.insertTitle(svg, 'entityTitleText', conf.titleTopMargin, diagObj.db.getDiagramTitle());\n\n  const svgBounds = svg.node().getBBox();\n  const width = svgBounds.width + padding * 2;\n  const height = svgBounds.height + padding * 2;\n\n  configureSvgSize(svg, height, width, conf.useMaxWidth);\n\n  svg.attr('viewBox', `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`);\n}; // draw\n\n/**\n * UUID namespace for ER diagram IDs\n *\n * This can be generated via running:\n *\n * ```js\n * const { v5: uuid5 } = await import('uuid');\n * uuid5(\n *   'https://mermaid-js.github.io/mermaid/syntax/entityRelationshipDiagram.html',\n *   uuid5.URL\n * );\n * ```\n */\nconst MERMAID_ERDIAGRAM_UUID = '28e9f9db-3c8d-5aa5-9faf-44286ae5937c';\n\n/**\n * Return a unique id based on the given string. Start with the prefix, then a hyphen, then the\n * simplified str, then a hyphen, then a unique uuid based on the str. (Hyphens are only included if needed.)\n * Although the official XML standard for ids says that many more characters are valid in the id,\n * this keeps things simple by accepting only A-Za-z0-9.\n *\n * @param {string} str Given string to use as the basis for the id. Default is `''`\n * @param {string} prefix String to put at the start, followed by '-'. Default is `''`\n * @returns {string}\n * @see https://www.w3.org/TR/xml/#NT-Name\n */\nexport function generateId(str = '', prefix = '') {\n  const simplifiedStr = str.replace(BAD_ID_CHARS_REGEXP, '');\n  // we use `uuid v5` so that UUIDs are consistent given a string.\n  return `${strWithHyphen(prefix)}${strWithHyphen(simplifiedStr)}${uuid5(\n    str,\n    MERMAID_ERDIAGRAM_UUID\n  )}`;\n}\n\n/**\n * Append a hyphen to a string only if the string isn't empty\n *\n * @param {string} str\n * @returns {string}\n * @todo This could be moved into a string utility file/class.\n */\nfunction strWithHyphen(str = '') {\n  return str.length > 0 ? `${str}-` : '';\n}\n\nexport default {\n  setConf,\n  draw,\n};\n","const getStyles = (options) =>\n  `\n  .entityBox {\n    fill: ${options.mainBkg};\n    stroke: ${options.nodeBorder};\n  }\n\n  .attributeBoxOdd {\n    fill: ${options.attributeBackgroundColorOdd};\n    stroke: ${options.nodeBorder};\n  }\n\n  .attributeBoxEven {\n    fill:  ${options.attributeBackgroundColorEven};\n    stroke: ${options.nodeBorder};\n  }\n\n  .relationshipLabelBox {\n    fill: ${options.tertiaryColor};\n    opacity: 0.7;\n    background-color: ${options.tertiaryColor};\n      rect {\n        opacity: 0.5;\n      }\n  }\n\n    .relationshipLine {\n      stroke: ${options.lineColor};\n    }\n\n  .entityTitleText {\n    text-anchor: middle;\n    font-size: 18px;\n    fill: ${options.textColor};\n  }    \n`;\n\nexport default getStyles;\n","// @ts-ignore: TODO Fix ts errors\nimport erParser from './parser/erDiagram';\nimport erDb from './erDb';\nimport erRenderer from './erRenderer';\nimport erStyles from './styles';\n\nexport const diagram = {\n  parser: erParser,\n  db: erDb,\n  renderer: erRenderer,\n  styles: erStyles,\n};\n"],"names":["o","parser","lexer","commonClear","configApi.getConfig","conf","entities","relationships","dagreLayout","uuid5"],"mappings":"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,IAAG,GAAE,IAAG,IAAG,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,IAAG,IAAG,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,IAAG,GAAE,EAAE,CAAC,IAAG,EAAE,GAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,CAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,CAAC,CAAC,GAAE,EAAC,GAAE,IAAG,IAAG,IAAG,IAAG,GAAE,IAAG,IAAG,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAE,KAAI,CAAC,GAAE,CAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,CAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,IAAG,IAAG,IAAG,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,IAAG,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,CAAC,CAAC,GAAE,EAAC,IAAG,IAAG,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,IAAG,IAAG,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,GAAE,EAAC,IAAG,IAAG,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,CAAC,CAAC,GAAE,EAAC,IAAG,IAAG,IAAG,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,IAAG,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,GAAE,EAAC,IAAG,IAAG,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,IAAG,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,IAAG,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,IAAG,IAAG,CAAC,GAAE,EAAE,CAAC,IAAG,IAAG,IAAG,EAAE,GAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,IAAG,EAAE,GAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE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"}