{"version":3,"file":"index.cjs","sources":["../../../node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/decode.mjs","../../../node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/encode.mjs","../../../node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/format.mjs","../../../node_modules/.pnpm/mdurl@2.0.0/node_modules/mdurl/lib/parse.mjs","../../../node_modules/.pnpm/uc.micro@2.0.0/node_modules/uc.micro/properties/Any/regex.mjs","../../../node_modules/.pnpm/uc.micro@2.0.0/node_modules/uc.micro/categories/Cc/regex.mjs","../../../node_modules/.pnpm/uc.micro@2.0.0/node_modules/uc.micro/categories/Cf/regex.mjs","../../../node_modules/.pnpm/uc.micro@2.0.0/node_modules/uc.micro/categories/P/regex.mjs","../../../node_modules/.pnpm/uc.micro@2.0.0/node_modules/uc.micro/categories/Z/regex.mjs","../../../node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-html.js","../../../node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode_codepoint.js","../../../node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode.js","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/common/utils.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/helpers/parse_link_label.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/helpers/parse_link_destination.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/helpers/parse_link_title.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/renderer.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/ruler.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/token.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_core/state_core.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_core/normalize.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_core/block.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_core/inline.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_core/linkify.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_core/replacements.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_core/smartquotes.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_core/text_join.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/parser_core.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_block/state_block.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_block/table.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_block/code.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_block/fence.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_block/blockquote.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_block/hr.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_block/list.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_block/reference.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/common/html_blocks.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/common/html_re.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_block/html_block.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_block/heading.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_block/lheading.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_block/paragraph.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/parser_block.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_inline/state_inline.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_inline/text.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_inline/linkify.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_inline/newline.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_inline/escape.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_inline/backticks.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_inline/strikethrough.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_inline/emphasis.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_inline/link.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_inline/image.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_inline/autolink.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_inline/html_inline.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_inline/entity.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_inline/balance_pairs.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/rules_inline/fragments_join.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/parser_inline.mjs","../../../node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/lib/re.mjs","../../../node_modules/.pnpm/linkify-it@5.0.0/node_modules/linkify-it/index.mjs","../../../node_modules/.pnpm/punycode.js@2.3.1/node_modules/punycode.js/punycode.es6.js","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/presets/default.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/presets/zero.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/presets/commonmark.mjs","../../../node_modules/.pnpm/markdown-it@14.0.0/node_modules/markdown-it/lib/index.mjs","../../mt-plugin-container/dist/index.mjs","../../../node_modules/.pnpm/escape-html@1.0.3/node_modules/escape-html/index.js","../../../node_modules/.pnpm/prismjs@1.29.0/node_modules/prismjs/prism.js","../src/utils/highlight.ts","../src/plugin.ts"],"sourcesContent":["/* eslint-disable no-bitwise */\n\nconst decodeCache = {}\n\nfunction getDecodeCache (exclude) {\n  let cache = decodeCache[exclude]\n  if (cache) { return cache }\n\n  cache = decodeCache[exclude] = []\n\n  for (let i = 0; i < 128; i++) {\n    const ch = String.fromCharCode(i)\n    cache.push(ch)\n  }\n\n  for (let i = 0; i < exclude.length; i++) {\n    const ch = exclude.charCodeAt(i)\n    cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2)\n  }\n\n  return cache\n}\n\n// Decode percent-encoded string.\n//\nfunction decode (string, exclude) {\n  if (typeof exclude !== 'string') {\n    exclude = decode.defaultChars\n  }\n\n  const cache = getDecodeCache(exclude)\n\n  return string.replace(/(%[a-f0-9]{2})+/gi, function (seq) {\n    let result = ''\n\n    for (let i = 0, l = seq.length; i < l; i += 3) {\n      const b1 = parseInt(seq.slice(i + 1, i + 3), 16)\n\n      if (b1 < 0x80) {\n        result += cache[b1]\n        continue\n      }\n\n      if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n        // 110xxxxx 10xxxxxx\n        const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n\n        if ((b2 & 0xC0) === 0x80) {\n          const chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F)\n\n          if (chr < 0x80) {\n            result += '\\ufffd\\ufffd'\n          } else {\n            result += String.fromCharCode(chr)\n          }\n\n          i += 3\n          continue\n        }\n      }\n\n      if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n        // 1110xxxx 10xxxxxx 10xxxxxx\n        const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n        const b3 = parseInt(seq.slice(i + 7, i + 9), 16)\n\n        if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n          const chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F)\n\n          if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n            result += '\\ufffd\\ufffd\\ufffd'\n          } else {\n            result += String.fromCharCode(chr)\n          }\n\n          i += 6\n          continue\n        }\n      }\n\n      if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n        // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n        const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n        const b3 = parseInt(seq.slice(i + 7, i + 9), 16)\n        const b4 = parseInt(seq.slice(i + 10, i + 12), 16)\n\n        if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n          let chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F)\n\n          if (chr < 0x10000 || chr > 0x10FFFF) {\n            result += '\\ufffd\\ufffd\\ufffd\\ufffd'\n          } else {\n            chr -= 0x10000\n            result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF))\n          }\n\n          i += 9\n          continue\n        }\n      }\n\n      result += '\\ufffd'\n    }\n\n    return result\n  })\n}\n\ndecode.defaultChars = ';/?:@&=+$,#'\ndecode.componentChars = ''\n\nexport default decode\n","const encodeCache = {}\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache (exclude) {\n  let cache = encodeCache[exclude]\n  if (cache) { return cache }\n\n  cache = encodeCache[exclude] = []\n\n  for (let i = 0; i < 128; i++) {\n    const ch = String.fromCharCode(i)\n\n    if (/^[0-9a-z]$/i.test(ch)) {\n      // always allow unencoded alphanumeric characters\n      cache.push(ch)\n    } else {\n      cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2))\n    }\n  }\n\n  for (let i = 0; i < exclude.length; i++) {\n    cache[exclude.charCodeAt(i)] = exclude[i]\n  }\n\n  return cache\n}\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n//  - string       - string to encode\n//  - exclude      - list of characters to ignore (in addition to a-zA-Z0-9)\n//  - keepEscaped  - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode (string, exclude, keepEscaped) {\n  if (typeof exclude !== 'string') {\n    // encode(string, keepEscaped)\n    keepEscaped = exclude\n    exclude = encode.defaultChars\n  }\n\n  if (typeof keepEscaped === 'undefined') {\n    keepEscaped = true\n  }\n\n  const cache = getEncodeCache(exclude)\n  let result = ''\n\n  for (let i = 0, l = string.length; i < l; i++) {\n    const code = string.charCodeAt(i)\n\n    if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n      if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n        result += string.slice(i, i + 3)\n        i += 2\n        continue\n      }\n    }\n\n    if (code < 128) {\n      result += cache[code]\n      continue\n    }\n\n    if (code >= 0xD800 && code <= 0xDFFF) {\n      if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n        const nextCode = string.charCodeAt(i + 1)\n        if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n          result += encodeURIComponent(string[i] + string[i + 1])\n          i++\n          continue\n        }\n      }\n      result += '%EF%BF%BD'\n      continue\n    }\n\n    result += encodeURIComponent(string[i])\n  }\n\n  return result\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\"\nencode.componentChars = \"-_.!~*'()\"\n\nexport default encode\n","export default function format (url) {\n  let result = ''\n\n  result += url.protocol || ''\n  result += url.slashes ? '//' : ''\n  result += url.auth ? url.auth + '@' : ''\n\n  if (url.hostname && url.hostname.indexOf(':') !== -1) {\n    // ipv6 address\n    result += '[' + url.hostname + ']'\n  } else {\n    result += url.hostname || ''\n  }\n\n  result += url.port ? ':' + url.port : ''\n  result += url.pathname || ''\n  result += url.search || ''\n  result += url.hash || ''\n\n  return result\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n//    e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n//    so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n//    i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n//    (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n//    which can be constructed using other parts of the url.\n//\n\nfunction Url () {\n  this.protocol = null\n  this.slashes = null\n  this.auth = null\n  this.port = null\n  this.hostname = null\n  this.hash = null\n  this.search = null\n  this.pathname = null\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nconst protocolPattern = /^([a-z0-9.+-]+:)/i\nconst portPattern = /:[0-9]*$/\n\n// Special case for a simple path URL\n/* eslint-disable-next-line no-useless-escape */\nconst simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/\n\n// RFC 2396: characters reserved for delimiting URLs.\n// We actually just auto-escape these.\nconst delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t']\n\n// RFC 2396: characters not allowed for various reasons.\nconst unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims)\n\n// Allowed by RFCs, but cause of XSS attacks.  Always escape these.\nconst autoEscape = ['\\''].concat(unwise)\n// Characters that are never ever allowed in a hostname.\n// Note that any invalid chars are also handled, but these\n// are the ones that are *expected* to be seen, so we fast-path\n// them.\nconst nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape)\nconst hostEndingChars = ['/', '?', '#']\nconst hostnameMaxLen = 255\nconst hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/\nconst hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/\n// protocols that can allow \"unsafe\" and \"unwise\" chars.\n// protocols that never have a hostname.\nconst hostlessProtocol = {\n  javascript: true,\n  'javascript:': true\n}\n// protocols that always contain a // bit.\nconst slashedProtocol = {\n  http: true,\n  https: true,\n  ftp: true,\n  gopher: true,\n  file: true,\n  'http:': true,\n  'https:': true,\n  'ftp:': true,\n  'gopher:': true,\n  'file:': true\n}\n\nfunction urlParse (url, slashesDenoteHost) {\n  if (url && url instanceof Url) return url\n\n  const u = new Url()\n  u.parse(url, slashesDenoteHost)\n  return u\n}\n\nUrl.prototype.parse = function (url, slashesDenoteHost) {\n  let lowerProto, hec, slashes\n  let rest = url\n\n  // trim before proceeding.\n  // This is to support parse stuff like \"  http://foo.com  \\n\"\n  rest = rest.trim()\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    const simplePath = simplePathPattern.exec(rest)\n    if (simplePath) {\n      this.pathname = simplePath[1]\n      if (simplePath[2]) {\n        this.search = simplePath[2]\n      }\n      return this\n    }\n  }\n\n  let proto = protocolPattern.exec(rest)\n  if (proto) {\n    proto = proto[0]\n    lowerProto = proto.toLowerCase()\n    this.protocol = proto\n    rest = rest.substr(proto.length)\n  }\n\n  // figure out if it's got a host\n  // user@server is *always* interpreted as a hostname, and url\n  // resolution will treat //foo/bar as host=foo,path=bar because that's\n  // how the browser resolves relative URLs.\n  /* eslint-disable-next-line no-useless-escape */\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n    slashes = rest.substr(0, 2) === '//'\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2)\n      this.slashes = true\n    }\n  }\n\n  if (!hostlessProtocol[proto] &&\n      (slashes || (proto && !slashedProtocol[proto]))) {\n    // there's a hostname.\n    // the first instance of /, ?, ;, or # ends the host.\n    //\n    // If there is an @ in the hostname, then non-host chars *are* allowed\n    // to the left of the last @ sign, unless some host-ending character\n    // comes *before* the @-sign.\n    // URLs are obnoxious.\n    //\n    // ex:\n    // http://a@b@c/ => user:a@b host:c\n    // http://a@b?@c => user:a host:c path:/?@c\n\n    // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n    // Review our test case against browsers more comprehensively.\n\n    // find the first instance of any hostEndingChars\n    let hostEnd = -1\n    for (let i = 0; i < hostEndingChars.length; i++) {\n      hec = rest.indexOf(hostEndingChars[i])\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n        hostEnd = hec\n      }\n    }\n\n    // at this point, either we have an explicit point where the\n    // auth portion cannot go past, or the last @ char is the decider.\n    let auth, atSign\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@')\n    } else {\n      // atSign must be in auth portion.\n      // http://a@b/c@d => host:b auth:a path:/c@d\n      atSign = rest.lastIndexOf('@', hostEnd)\n    }\n\n    // Now we have a portion which is definitely the auth.\n    // Pull that off.\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign)\n      rest = rest.slice(atSign + 1)\n      this.auth = auth\n    }\n\n    // the host is the remaining to the left of the first non-host char\n    hostEnd = -1\n    for (let i = 0; i < nonHostChars.length; i++) {\n      hec = rest.indexOf(nonHostChars[i])\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n        hostEnd = hec\n      }\n    }\n    // if we still have not hit it, then the entire thing is a host.\n    if (hostEnd === -1) {\n      hostEnd = rest.length\n    }\n\n    if (rest[hostEnd - 1] === ':') { hostEnd-- }\n    const host = rest.slice(0, hostEnd)\n    rest = rest.slice(hostEnd)\n\n    // pull out port.\n    this.parseHost(host)\n\n    // we've indicated that there is a hostname,\n    // so even if it's empty, it has to be present.\n    this.hostname = this.hostname || ''\n\n    // if hostname begins with [ and ends with ]\n    // assume that it's an IPv6 address.\n    const ipv6Hostname = this.hostname[0] === '[' &&\n        this.hostname[this.hostname.length - 1] === ']'\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      const hostparts = this.hostname.split(/\\./)\n      for (let i = 0, l = hostparts.length; i < l; i++) {\n        const part = hostparts[i]\n        if (!part) { continue }\n        if (!part.match(hostnamePartPattern)) {\n          let newpart = ''\n          for (let j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              // we replace non-ASCII char with a temporary placeholder\n              // we need this to make sure size of hostname is not\n              // broken by replacing non-ASCII by nothing\n              newpart += 'x'\n            } else {\n              newpart += part[j]\n            }\n          }\n          // we test again with ASCII char only\n          if (!newpart.match(hostnamePartPattern)) {\n            const validParts = hostparts.slice(0, i)\n            const notHost = hostparts.slice(i + 1)\n            const bit = part.match(hostnamePartStart)\n            if (bit) {\n              validParts.push(bit[1])\n              notHost.unshift(bit[2])\n            }\n            if (notHost.length) {\n              rest = notHost.join('.') + rest\n            }\n            this.hostname = validParts.join('.')\n            break\n          }\n        }\n      }\n    }\n\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = ''\n    }\n\n    // strip [ and ] from the hostname\n    // the host field still retains them, though\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2)\n    }\n  }\n\n  // chop off from the tail first.\n  const hash = rest.indexOf('#')\n  if (hash !== -1) {\n    // got a fragment string.\n    this.hash = rest.substr(hash)\n    rest = rest.slice(0, hash)\n  }\n  const qm = rest.indexOf('?')\n  if (qm !== -1) {\n    this.search = rest.substr(qm)\n    rest = rest.slice(0, qm)\n  }\n  if (rest) { this.pathname = rest }\n  if (slashedProtocol[lowerProto] &&\n      this.hostname && !this.pathname) {\n    this.pathname = ''\n  }\n\n  return this\n}\n\nUrl.prototype.parseHost = function (host) {\n  let port = portPattern.exec(host)\n  if (port) {\n    port = port[0]\n    if (port !== ':') {\n      this.port = port.substr(1)\n    }\n    host = host.substr(0, host.length - port.length)\n  }\n  if (host) { this.hostname = host }\n}\n\nexport default urlParse\n","export default /[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/","export default /[\\0-\\x1F\\x7F-\\x9F]/","export default /[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u0890\\u0891\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD80D[\\uDC30-\\uDC3F]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/","export default /[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061D-\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1B7D\\u1B7E\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52-\\u2E5D\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDEAD\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDEB9\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDD44-\\uDD46\\uDDE2\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2\\uDF00-\\uDF09]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8\\uDF43-\\uDF4F\\uDFFF]|\\uD809[\\uDC70-\\uDC74]|\\uD80B[\\uDFF1\\uDFF2]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A\\uDFE2]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/","export default /[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/","// Generated using scripts/write-decode-map.ts\nexport default new Uint16Array(\n// prettier-ignore\n\"\\u1d41<\\xd5\\u0131\\u028a\\u049d\\u057b\\u05d0\\u0675\\u06de\\u07a2\\u07d6\\u080f\\u0a4a\\u0a91\\u0da1\\u0e6d\\u0f09\\u0f26\\u10ca\\u1228\\u12e1\\u1415\\u149d\\u14c3\\u14df\\u1525\\0\\0\\0\\0\\0\\0\\u156b\\u16cd\\u198d\\u1c12\\u1ddd\\u1f7e\\u2060\\u21b0\\u228d\\u23c0\\u23fb\\u2442\\u2824\\u2912\\u2d08\\u2e48\\u2fce\\u3016\\u32ba\\u3639\\u37ac\\u38fe\\u3a28\\u3a71\\u3ae0\\u3b2e\\u0800EMabcfglmnoprstu\\\\bfms\\x7f\\x84\\x8b\\x90\\x95\\x98\\xa6\\xb3\\xb9\\xc8\\xcflig\\u803b\\xc6\\u40c6P\\u803b&\\u4026cute\\u803b\\xc1\\u40c1reve;\\u4102\\u0100iyx}rc\\u803b\\xc2\\u40c2;\\u4410r;\\uc000\\ud835\\udd04rave\\u803b\\xc0\\u40c0pha;\\u4391acr;\\u4100d;\\u6a53\\u0100gp\\x9d\\xa1on;\\u4104f;\\uc000\\ud835\\udd38plyFunction;\\u6061ing\\u803b\\xc5\\u40c5\\u0100cs\\xbe\\xc3r;\\uc000\\ud835\\udc9cign;\\u6254ilde\\u803b\\xc3\\u40c3ml\\u803b\\xc4\\u40c4\\u0400aceforsu\\xe5\\xfb\\xfe\\u0117\\u011c\\u0122\\u0127\\u012a\\u0100cr\\xea\\xf2kslash;\\u6216\\u0176\\xf6\\xf8;\\u6ae7ed;\\u6306y;\\u4411\\u0180crt\\u0105\\u010b\\u0114ause;\\u6235noullis;\\u612ca;\\u4392r;\\uc000\\ud835\\udd05pf;\\uc000\\ud835\\udd39eve;\\u42d8c\\xf2\\u0113mpeq;\\u624e\\u0700HOacdefhilorsu\\u014d\\u0151\\u0156\\u0180\\u019e\\u01a2\\u01b5\\u01b7\\u01ba\\u01dc\\u0215\\u0273\\u0278\\u027ecy;\\u4427PY\\u803b\\xa9\\u40a9\\u0180cpy\\u015d\\u0162\\u017aute;\\u4106\\u0100;i\\u0167\\u0168\\u62d2talDifferentialD;\\u6145leys;\\u612d\\u0200aeio\\u0189\\u018e\\u0194\\u0198ron;\\u410cdil\\u803b\\xc7\\u40c7rc;\\u4108nint;\\u6230ot;\\u410a\\u0100dn\\u01a7\\u01adilla;\\u40b8terDot;\\u40b7\\xf2\\u017fi;\\u43a7rcle\\u0200DMPT\\u01c7\\u01cb\\u01d1\\u01d6ot;\\u6299inus;\\u6296lus;\\u6295imes;\\u6297o\\u0100cs\\u01e2\\u01f8kwiseContourIntegral;\\u6232eCurly\\u0100DQ\\u0203\\u020foubleQuote;\\u601duote;\\u6019\\u0200lnpu\\u021e\\u0228\\u0247\\u0255on\\u0100;e\\u0225\\u0226\\u6237;\\u6a74\\u0180git\\u022f\\u0236\\u023aruent;\\u6261nt;\\u622fourIntegral;\\u622e\\u0100fr\\u024c\\u024e;\\u6102oduct;\\u6210nterClockwiseContourIntegral;\\u6233oss;\\u6a2fcr;\\uc000\\ud835\\udc9ep\\u0100;C\\u0284\\u0285\\u62d3ap;\\u624d\\u0580DJSZacefios\\u02a0\\u02ac\\u02b0\\u02b4\\u02b8\\u02cb\\u02d7\\u02e1\\u02e6\\u0333\\u048d\\u0100;o\\u0179\\u02a5trahd;\\u6911cy;\\u4402cy;\\u4405cy;\\u440f\\u0180grs\\u02bf\\u02c4\\u02c7ger;\\u6021r;\\u61a1hv;\\u6ae4\\u0100ay\\u02d0\\u02d5ron;\\u410e;\\u4414l\\u0100;t\\u02dd\\u02de\\u6207a;\\u4394r;\\uc000\\ud835\\udd07\\u0100af\\u02eb\\u0327\\u0100cm\\u02f0\\u0322ritical\\u0200ADGT\\u0300\\u0306\\u0316\\u031ccute;\\u40b4o\\u0174\\u030b\\u030d;\\u42d9bleAcute;\\u42ddrave;\\u4060ilde;\\u42dcond;\\u62c4ferentialD;\\u6146\\u0470\\u033d\\0\\0\\0\\u0342\\u0354\\0\\u0405f;\\uc000\\ud835\\udd3b\\u0180;DE\\u0348\\u0349\\u034d\\u40a8ot;\\u60dcqual;\\u6250ble\\u0300CDLRUV\\u0363\\u0372\\u0382\\u03cf\\u03e2\\u03f8ontourIntegra\\xec\\u0239o\\u0274\\u0379\\0\\0\\u037b\\xbb\\u0349nArrow;\\u61d3\\u0100eo\\u0387\\u03a4ft\\u0180ART\\u0390\\u0396\\u03a1rrow;\\u61d0ightArrow;\\u61d4e\\xe5\\u02cang\\u0100LR\\u03ab\\u03c4eft\\u0100AR\\u03b3\\u03b9rrow;\\u67f8ightArrow;\\u67faightArrow;\\u67f9ight\\u0100AT\\u03d8\\u03derrow;\\u61d2ee;\\u62a8p\\u0241\\u03e9\\0\\0\\u03efrrow;\\u61d1ownArrow;\\u61d5erticalBar;\\u6225n\\u0300ABLRTa\\u0412\\u042a\\u0430\\u045e\\u047f\\u037crrow\\u0180;BU\\u041d\\u041e\\u0422\\u6193ar;\\u6913pArrow;\\u61f5reve;\\u4311eft\\u02d2\\u043a\\0\\u0446\\0\\u0450ightVector;\\u6950eeVector;\\u695eector\\u0100;B\\u0459\\u045a\\u61bdar;\\u6956ight\\u01d4\\u0467\\0\\u0471eeVector;\\u695fector\\u0100;B\\u047a\\u047b\\u61c1ar;\\u6957ee\\u0100;A\\u0486\\u0487\\u62a4rrow;\\u61a7\\u0100ct\\u0492\\u0497r;\\uc000\\ud835\\udc9frok;\\u4110\\u0800NTacdfglmopqstux\\u04bd\\u04c0\\u04c4\\u04cb\\u04de\\u04e2\\u04e7\\u04ee\\u04f5\\u0521\\u052f\\u0536\\u0552\\u055d\\u0560\\u0565G;\\u414aH\\u803b\\xd0\\u40d0cute\\u803b\\xc9\\u40c9\\u0180aiy\\u04d2\\u04d7\\u04dcron;\\u411arc\\u803b\\xca\\u40ca;\\u442dot;\\u4116r;\\uc000\\ud835\\udd08rave\\u803b\\xc8\\u40c8ement;\\u6208\\u0100ap\\u04fa\\u04fecr;\\u4112ty\\u0253\\u0506\\0\\0\\u0512mallSquare;\\u65fberySmallSquare;\\u65ab\\u0100gp\\u0526\\u052aon;\\u4118f;\\uc000\\ud835\\udd3csilon;\\u4395u\\u0100ai\\u053c\\u0549l\\u0100;T\\u0542\\u0543\\u6a75ilde;\\u6242librium;\\u61cc\\u0100ci\\u0557\\u055ar;\\u6130m;\\u6a73a;\\u4397ml\\u803b\\xcb\\u40cb\\u0100ip\\u056a\\u056fsts;\\u6203onentialE;\\u6147\\u0280cfios\\u0585\\u0588\\u058d\\u05b2\\u05ccy;\\u4424r;\\uc000\\ud835\\udd09lled\\u0253\\u0597\\0\\0\\u05a3mallSquare;\\u65fcerySmallSquare;\\u65aa\\u0370\\u05ba\\0\\u05bf\\0\\0\\u05c4f;\\uc000\\ud835\\udd3dAll;\\u6200riertrf;\\u6131c\\xf2\\u05cb\\u0600JTabcdfgorst\\u05e8\\u05ec\\u05ef\\u05fa\\u0600\\u0612\\u0616\\u061b\\u061d\\u0623\\u066c\\u0672cy;\\u4403\\u803b>\\u403emma\\u0100;d\\u05f7\\u05f8\\u4393;\\u43dcreve;\\u411e\\u0180eiy\\u0607\\u060c\\u0610dil;\\u4122rc;\\u411c;\\u4413ot;\\u4120r;\\uc000\\ud835\\udd0a;\\u62d9pf;\\uc000\\ud835\\udd3eeater\\u0300EFGLST\\u0635\\u0644\\u064e\\u0656\\u065b\\u0666qual\\u0100;L\\u063e\\u063f\\u6265ess;\\u62dbullEqual;\\u6267reater;\\u6aa2ess;\\u6277lantEqual;\\u6a7eilde;\\u6273cr;\\uc000\\ud835\\udca2;\\u626b\\u0400Aacfiosu\\u0685\\u068b\\u0696\\u069b\\u069e\\u06aa\\u06be\\u06caRDcy;\\u442a\\u0100ct\\u0690\\u0694ek;\\u42c7;\\u405eirc;\\u4124r;\\u610clbertSpace;\\u610b\\u01f0\\u06af\\0\\u06b2f;\\u610dizontalLine;\\u6500\\u0100ct\\u06c3\\u06c5\\xf2\\u06a9rok;\\u4126mp\\u0144\\u06d0\\u06d8ownHum\\xf0\\u012fqual;\\u624f\\u0700EJOacdfgmnostu\\u06fa\\u06fe\\u0703\\u0707\\u070e\\u071a\\u071e\\u0721\\u0728\\u0744\\u0778\\u078b\\u078f\\u0795cy;\\u4415lig;\\u4132cy;\\u4401cute\\u803b\\xcd\\u40cd\\u0100iy\\u0713\\u0718rc\\u803b\\xce\\u40ce;\\u4418ot;\\u4130r;\\u6111rave\\u803b\\xcc\\u40cc\\u0180;ap\\u0720\\u072f\\u073f\\u0100cg\\u0734\\u0737r;\\u412ainaryI;\\u6148lie\\xf3\\u03dd\\u01f4\\u0749\\0\\u0762\\u0100;e\\u074d\\u074e\\u622c\\u0100gr\\u0753\\u0758ral;\\u622bsection;\\u62c2isible\\u0100CT\\u076c\\u0772omma;\\u6063imes;\\u6062\\u0180gpt\\u077f\\u0783\\u0788on;\\u412ef;\\uc000\\ud835\\udd40a;\\u4399cr;\\u6110ilde;\\u4128\\u01eb\\u079a\\0\\u079ecy;\\u4406l\\u803b\\xcf\\u40cf\\u0280cfosu\\u07ac\\u07b7\\u07bc\\u07c2\\u07d0\\u0100iy\\u07b1\\u07b5rc;\\u4134;\\u4419r;\\uc000\\ud835\\udd0dpf;\\uc000\\ud835\\udd41\\u01e3\\u07c7\\0\\u07ccr;\\uc000\\ud835\\udca5rcy;\\u4408kcy;\\u4404\\u0380HJacfos\\u07e4\\u07e8\\u07ec\\u07f1\\u07fd\\u0802\\u0808cy;\\u4425cy;\\u440cppa;\\u439a\\u0100ey\\u07f6\\u07fbdil;\\u4136;\\u441ar;\\uc000\\ud835\\udd0epf;\\uc000\\ud835\\udd42cr;\\uc000\\ud835\\udca6\\u0580JTaceflmost\\u0825\\u0829\\u082c\\u0850\\u0863\\u09b3\\u09b8\\u09c7\\u09cd\\u0a37\\u0a47cy;\\u4409\\u803b<\\u403c\\u0280cmnpr\\u0837\\u083c\\u0841\\u0844\\u084dute;\\u4139bda;\\u439bg;\\u67ealacetrf;\\u6112r;\\u619e\\u0180aey\\u0857\\u085c\\u0861ron;\\u413ddil;\\u413b;\\u441b\\u0100fs\\u0868\\u0970t\\u0500ACDFRTUVar\\u087e\\u08a9\\u08b1\\u08e0\\u08e6\\u08fc\\u092f\\u095b\\u0390\\u096a\\u0100nr\\u0883\\u088fgleBracket;\\u67e8row\\u0180;BR\\u0899\\u089a\\u089e\\u6190ar;\\u61e4ightArrow;\\u61c6eiling;\\u6308o\\u01f5\\u08b7\\0\\u08c3bleBracket;\\u67e6n\\u01d4\\u08c8\\0\\u08d2eeVector;\\u6961ector\\u0100;B\\u08db\\u08dc\\u61c3ar;\\u6959loor;\\u630aight\\u0100AV\\u08ef\\u08f5rrow;\\u6194ector;\\u694e\\u0100er\\u0901\\u0917e\\u0180;AV\\u0909\\u090a\\u0910\\u62a3rrow;\\u61a4ector;\\u695aiangle\\u0180;BE\\u0924\\u0925\\u0929\\u62b2ar;\\u69cfqual;\\u62b4p\\u0180DTV\\u0937\\u0942\\u094cownVector;\\u6951eeVector;\\u6960ector\\u0100;B\\u0956\\u0957\\u61bfar;\\u6958ector\\u0100;B\\u0965\\u0966\\u61bcar;\\u6952ight\\xe1\\u039cs\\u0300EFGLST\\u097e\\u098b\\u0995\\u099d\\u09a2\\u09adqualGreater;\\u62daullEqual;\\u6266reater;\\u6276ess;\\u6aa1lantEqual;\\u6a7dilde;\\u6272r;\\uc000\\ud835\\udd0f\\u0100;e\\u09bd\\u09be\\u62d8ftarrow;\\u61daidot;\\u413f\\u0180npw\\u09d4\\u0a16\\u0a1bg\\u0200LRlr\\u09de\\u09f7\\u0a02\\u0a10eft\\u0100AR\\u09e6\\u09ecrrow;\\u67f5ightArrow;\\u67f7ightArrow;\\u67f6eft\\u0100ar\\u03b3\\u0a0aight\\xe1\\u03bfight\\xe1\\u03caf;\\uc000\\ud835\\udd43er\\u0100LR\\u0a22\\u0a2ceftArrow;\\u6199ightArrow;\\u6198\\u0180cht\\u0a3e\\u0a40\\u0a42\\xf2\\u084c;\\u61b0rok;\\u4141;\\u626a\\u0400acefiosu\\u0a5a\\u0a5d\\u0a60\\u0a77\\u0a7c\\u0a85\\u0a8b\\u0a8ep;\\u6905y;\\u441c\\u0100dl\\u0a65\\u0a6fiumSpace;\\u605flintrf;\\u6133r;\\uc000\\ud835\\udd10nusPlus;\\u6213pf;\\uc000\\ud835\\udd44c\\xf2\\u0a76;\\u439c\\u0480Jacefostu\\u0aa3\\u0aa7\\u0aad\\u0ac0\\u0b14\\u0b19\\u0d91\\u0d97\\u0d9ecy;\\u440acute;\\u4143\\u0180aey\\u0ab4\\u0ab9\\u0aberon;\\u4147dil;\\u4145;\\u441d\\u0180gsw\\u0ac7\\u0af0\\u0b0eative\\u0180MTV\\u0ad3\\u0adf\\u0ae8ediumSpace;\\u600bhi\\u0100cn\\u0ae6\\u0ad8\\xeb\\u0ad9eryThi\\xee\\u0ad9ted\\u0100GL\\u0af8\\u0b06reaterGreate\\xf2\\u0673essLes\\xf3\\u0a48Line;\\u400ar;\\uc000\\ud835\\udd11\\u0200Bnpt\\u0b22\\u0b28\\u0b37\\u0b3areak;\\u6060BreakingSpace;\\u40a0f;\\u6115\\u0680;CDEGHLNPRSTV\\u0b55\\u0b56\\u0b6a\\u0b7c\\u0ba1\\u0beb\\u0c04\\u0c5e\\u0c84\\u0ca6\\u0cd8\\u0d61\\u0d85\\u6aec\\u0100ou\\u0b5b\\u0b64ngruent;\\u6262pCap;\\u626doubleVerticalBar;\\u6226\\u0180lqx\\u0b83\\u0b8a\\u0b9bement;\\u6209ual\\u0100;T\\u0b92\\u0b93\\u6260ilde;\\uc000\\u2242\\u0338ists;\\u6204reater\\u0380;EFGLST\\u0bb6\\u0bb7\\u0bbd\\u0bc9\\u0bd3\\u0bd8\\u0be5\\u626fqual;\\u6271ullEqual;\\uc000\\u2267\\u0338reater;\\uc000\\u226b\\u0338ess;\\u6279lantEqual;\\uc000\\u2a7e\\u0338ilde;\\u6275ump\\u0144\\u0bf2\\u0bfdownHump;\\uc000\\u224e\\u0338qual;\\uc000\\u224f\\u0338e\\u0100fs\\u0c0a\\u0c27tTriangle\\u0180;BE\\u0c1a\\u0c1b\\u0c21\\u62eaar;\\uc000\\u29cf\\u0338qual;\\u62ecs\\u0300;EGLST\\u0c35\\u0c36\\u0c3c\\u0c44\\u0c4b\\u0c58\\u626equal;\\u6270reater;\\u6278ess;\\uc000\\u226a\\u0338lantEqual;\\uc000\\u2a7d\\u0338ilde;\\u6274ested\\u0100GL\\u0c68\\u0c79reaterGreater;\\uc000\\u2aa2\\u0338essLess;\\uc000\\u2aa1\\u0338recedes\\u0180;ES\\u0c92\\u0c93\\u0c9b\\u6280qual;\\uc000\\u2aaf\\u0338lantEqual;\\u62e0\\u0100ei\\u0cab\\u0cb9verseElement;\\u620cghtTriangle\\u0180;BE\\u0ccb\\u0ccc\\u0cd2\\u62ebar;\\uc000\\u29d0\\u0338qual;\\u62ed\\u0100qu\\u0cdd\\u0d0cuareSu\\u0100bp\\u0ce8\\u0cf9set\\u0100;E\\u0cf0\\u0cf3\\uc000\\u228f\\u0338qual;\\u62e2erset\\u0100;E\\u0d03\\u0d06\\uc000\\u2290\\u0338qual;\\u62e3\\u0180bcp\\u0d13\\u0d24\\u0d4eset\\u0100;E\\u0d1b\\u0d1e\\uc000\\u2282\\u20d2qual;\\u6288ceeds\\u0200;EST\\u0d32\\u0d33\\u0d3b\\u0d46\\u6281qual;\\uc000\\u2ab0\\u0338lantEqual;\\u62e1ilde;\\uc000\\u227f\\u0338erset\\u0100;E\\u0d58\\u0d5b\\uc000\\u2283\\u20d2qual;\\u6289ilde\\u0200;EFT\\u0d6e\\u0d6f\\u0d75\\u0d7f\\u6241qual;\\u6244ullEqual;\\u6247ilde;\\u6249erticalBar;\\u6224cr;\\uc000\\ud835\\udca9ilde\\u803b\\xd1\\u40d1;\\u439d\\u0700Eacdfgmoprstuv\\u0dbd\\u0dc2\\u0dc9\\u0dd5\\u0ddb\\u0de0\\u0de7\\u0dfc\\u0e02\\u0e20\\u0e22\\u0e32\\u0e3f\\u0e44lig;\\u4152cute\\u803b\\xd3\\u40d3\\u0100iy\\u0dce\\u0dd3rc\\u803b\\xd4\\u40d4;\\u441eblac;\\u4150r;\\uc000\\ud835\\udd12rave\\u803b\\xd2\\u40d2\\u0180aei\\u0dee\\u0df2\\u0df6cr;\\u414cga;\\u43a9cron;\\u439fpf;\\uc000\\ud835\\udd46enCurly\\u0100DQ\\u0e0e\\u0e1aoubleQuote;\\u601cuote;\\u6018;\\u6a54\\u0100cl\\u0e27\\u0e2cr;\\uc000\\ud835\\udcaaash\\u803b\\xd8\\u40d8i\\u016c\\u0e37\\u0e3cde\\u803b\\xd5\\u40d5es;\\u6a37ml\\u803b\\xd6\\u40d6er\\u0100BP\\u0e4b\\u0e60\\u0100ar\\u0e50\\u0e53r;\\u603eac\\u0100ek\\u0e5a\\u0e5c;\\u63deet;\\u63b4arenthesis;\\u63dc\\u0480acfhilors\\u0e7f\\u0e87\\u0e8a\\u0e8f\\u0e92\\u0e94\\u0e9d\\u0eb0\\u0efcrtialD;\\u6202y;\\u441fr;\\uc000\\ud835\\udd13i;\\u43a6;\\u43a0usMinus;\\u40b1\\u0100ip\\u0ea2\\u0eadncareplan\\xe5\\u069df;\\u6119\\u0200;eio\\u0eb9\\u0eba\\u0ee0\\u0ee4\\u6abbcedes\\u0200;EST\\u0ec8\\u0ec9\\u0ecf\\u0eda\\u627aqual;\\u6aaflantEqual;\\u627cilde;\\u627eme;\\u6033\\u0100dp\\u0ee9\\u0eeeuct;\\u620fortion\\u0100;a\\u0225\\u0ef9l;\\u621d\\u0100ci\\u0f01\\u0f06r;\\uc000\\ud835\\udcab;\\u43a8\\u0200Ufos\\u0f11\\u0f16\\u0f1b\\u0f1fOT\\u803b\\\"\\u4022r;\\uc000\\ud835\\udd14pf;\\u611acr;\\uc000\\ud835\\udcac\\u0600BEacefhiorsu\\u0f3e\\u0f43\\u0f47\\u0f60\\u0f73\\u0fa7\\u0faa\\u0fad\\u1096\\u10a9\\u10b4\\u10bearr;\\u6910G\\u803b\\xae\\u40ae\\u0180cnr\\u0f4e\\u0f53\\u0f56ute;\\u4154g;\\u67ebr\\u0100;t\\u0f5c\\u0f5d\\u61a0l;\\u6916\\u0180aey\\u0f67\\u0f6c\\u0f71ron;\\u4158dil;\\u4156;\\u4420\\u0100;v\\u0f78\\u0f79\\u611cerse\\u0100EU\\u0f82\\u0f99\\u0100lq\\u0f87\\u0f8eement;\\u620builibrium;\\u61cbpEquilibrium;\\u696fr\\xbb\\u0f79o;\\u43a1ght\\u0400ACDFTUVa\\u0fc1\\u0feb\\u0ff3\\u1022\\u1028\\u105b\\u1087\\u03d8\\u0100nr\\u0fc6\\u0fd2gleBracket;\\u67e9row\\u0180;BL\\u0fdc\\u0fdd\\u0fe1\\u6192ar;\\u61e5eftArrow;\\u61c4eiling;\\u6309o\\u01f5\\u0ff9\\0\\u1005bleBracket;\\u67e7n\\u01d4\\u100a\\0\\u1014eeVector;\\u695dector\\u0100;B\\u101d\\u101e\\u61c2ar;\\u6955loor;\\u630b\\u0100er\\u102d\\u1043e\\u0180;AV\\u1035\\u1036\\u103c\\u62a2rrow;\\u61a6ector;\\u695biangle\\u0180;BE\\u1050\\u1051\\u1055\\u62b3ar;\\u69d0qual;\\u62b5p\\u0180DTV\\u1063\\u106e\\u1078ownVector;\\u694feeVector;\\u695cector\\u0100;B\\u1082\\u1083\\u61bear;\\u6954ector\\u0100;B\\u1091\\u1092\\u61c0ar;\\u6953\\u0100pu\\u109b\\u109ef;\\u611dndImplies;\\u6970ightarrow;\\u61db\\u0100ch\\u10b9\\u10bcr;\\u611b;\\u61b1leDelayed;\\u69f4\\u0680HOacfhimoqstu\\u10e4\\u10f1\\u10f7\\u10fd\\u1119\\u111e\\u1151\\u1156\\u1161\\u1167\\u11b5\\u11bb\\u11bf\\u0100Cc\\u10e9\\u10eeHcy;\\u4429y;\\u4428FTcy;\\u442ccute;\\u415a\\u0280;aeiy\\u1108\\u1109\\u110e\\u1113\\u1117\\u6abcron;\\u4160dil;\\u415erc;\\u415c;\\u4421r;\\uc000\\ud835\\udd16ort\\u0200DLRU\\u112a\\u1134\\u113e\\u1149ownArrow\\xbb\\u041eeftArrow\\xbb\\u089aightArrow\\xbb\\u0fddpArrow;\\u6191gma;\\u43a3allCircle;\\u6218pf;\\uc000\\ud835\\udd4a\\u0272\\u116d\\0\\0\\u1170t;\\u621aare\\u0200;ISU\\u117b\\u117c\\u1189\\u11af\\u65a1ntersection;\\u6293u\\u0100bp\\u118f\\u119eset\\u0100;E\\u1197\\u1198\\u628fqual;\\u6291erset\\u0100;E\\u11a8\\u11a9\\u6290qual;\\u6292nion;\\u6294cr;\\uc000\\ud835\\udcaear;\\u62c6\\u0200bcmp\\u11c8\\u11db\\u1209\\u120b\\u0100;s\\u11cd\\u11ce\\u62d0et\\u0100;E\\u11cd\\u11d5qual;\\u6286\\u0100ch\\u11e0\\u1205eeds\\u0200;EST\\u11ed\\u11ee\\u11f4\\u11ff\\u627bqual;\\u6ab0lantEqual;\\u627dilde;\\u627fTh\\xe1\\u0f8c;\\u6211\\u0180;es\\u1212\\u1213\\u1223\\u62d1rset\\u0100;E\\u121c\\u121d\\u6283qual;\\u6287et\\xbb\\u1213\\u0580HRSacfhiors\\u123e\\u1244\\u1249\\u1255\\u125e\\u1271\\u1276\\u129f\\u12c2\\u12c8\\u12d1ORN\\u803b\\xde\\u40deADE;\\u6122\\u0100Hc\\u124e\\u1252cy;\\u440by;\\u4426\\u0100bu\\u125a\\u125c;\\u4009;\\u43a4\\u0180aey\\u1265\\u126a\\u126fron;\\u4164dil;\\u4162;\\u4422r;\\uc000\\ud835\\udd17\\u0100ei\\u127b\\u1289\\u01f2\\u1280\\0\\u1287efore;\\u6234a;\\u4398\\u0100cn\\u128e\\u1298kSpace;\\uc000\\u205f\\u200aSpace;\\u6009lde\\u0200;EFT\\u12ab\\u12ac\\u12b2\\u12bc\\u623cqual;\\u6243ullEqual;\\u6245ilde;\\u6248pf;\\uc000\\ud835\\udd4bipleDot;\\u60db\\u0100ct\\u12d6\\u12dbr;\\uc000\\ud835\\udcafrok;\\u4166\\u0ae1\\u12f7\\u130e\\u131a\\u1326\\0\\u132c\\u1331\\0\\0\\0\\0\\0\\u1338\\u133d\\u1377\\u1385\\0\\u13ff\\u1404\\u140a\\u1410\\u0100cr\\u12fb\\u1301ute\\u803b\\xda\\u40dar\\u0100;o\\u1307\\u1308\\u619fcir;\\u6949r\\u01e3\\u1313\\0\\u1316y;\\u440eve;\\u416c\\u0100iy\\u131e\\u1323rc\\u803b\\xdb\\u40db;\\u4423blac;\\u4170r;\\uc000\\ud835\\udd18rave\\u803b\\xd9\\u40d9acr;\\u416a\\u0100di\\u1341\\u1369er\\u0100BP\\u1348\\u135d\\u0100ar\\u134d\\u1350r;\\u405fac\\u0100ek\\u1357\\u1359;\\u63dfet;\\u63b5arenthesis;\\u63ddon\\u0100;P\\u1370\\u1371\\u62c3lus;\\u628e\\u0100gp\\u137b\\u137fon;\\u4172f;\\uc000\\ud835\\udd4c\\u0400ADETadps\\u1395\\u13ae\\u13b8\\u13c4\\u03e8\\u13d2\\u13d7\\u13f3rrow\\u0180;BD\\u1150\\u13a0\\u13a4ar;\\u6912ownArrow;\\u61c5ownArrow;\\u6195quilibrium;\\u696eee\\u0100;A\\u13cb\\u13cc\\u62a5rrow;\\u61a5own\\xe1\\u03f3er\\u0100LR\\u13de\\u13e8eftArrow;\\u6196ightArrow;\\u6197i\\u0100;l\\u13f9\\u13fa\\u43d2on;\\u43a5ing;\\u416ecr;\\uc000\\ud835\\udcb0ilde;\\u4168ml\\u803b\\xdc\\u40dc\\u0480Dbcdefosv\\u1427\\u142c\\u1430\\u1433\\u143e\\u1485\\u148a\\u1490\\u1496ash;\\u62abar;\\u6aeby;\\u4412ash\\u0100;l\\u143b\\u143c\\u62a9;\\u6ae6\\u0100er\\u1443\\u1445;\\u62c1\\u0180bty\\u144c\\u1450\\u147aar;\\u6016\\u0100;i\\u144f\\u1455cal\\u0200BLST\\u1461\\u1465\\u146a\\u1474ar;\\u6223ine;\\u407ceparator;\\u6758ilde;\\u6240ThinSpace;\\u600ar;\\uc000\\ud835\\udd19pf;\\uc000\\ud835\\udd4dcr;\\uc000\\ud835\\udcb1dash;\\u62aa\\u0280cefos\\u14a7\\u14ac\\u14b1\\u14b6\\u14bcirc;\\u4174dge;\\u62c0r;\\uc000\\ud835\\udd1apf;\\uc000\\ud835\\udd4ecr;\\uc000\\ud835\\udcb2\\u0200fios\\u14cb\\u14d0\\u14d2\\u14d8r;\\uc000\\ud835\\udd1b;\\u439epf;\\uc000\\ud835\\udd4fcr;\\uc000\\ud835\\udcb3\\u0480AIUacfosu\\u14f1\\u14f5\\u14f9\\u14fd\\u1504\\u150f\\u1514\\u151a\\u1520cy;\\u442fcy;\\u4407cy;\\u442ecute\\u803b\\xdd\\u40dd\\u0100iy\\u1509\\u150drc;\\u4176;\\u442br;\\uc000\\ud835\\udd1cpf;\\uc000\\ud835\\udd50cr;\\uc000\\ud835\\udcb4ml;\\u4178\\u0400Hacdefos\\u1535\\u1539\\u153f\\u154b\\u154f\\u155d\\u1560\\u1564cy;\\u4416cute;\\u4179\\u0100ay\\u1544\\u1549ron;\\u417d;\\u4417ot;\\u417b\\u01f2\\u1554\\0\\u155boWidt\\xe8\\u0ad9a;\\u4396r;\\u6128pf;\\u6124cr;\\uc000\\ud835\\udcb5\\u0be1\\u1583\\u158a\\u1590\\0\\u15b0\\u15b6\\u15bf\\0\\0\\0\\0\\u15c6\\u15db\\u15eb\\u165f\\u166d\\0\\u1695\\u169b\\u16b2\\u16b9\\0\\u16becute\\u803b\\xe1\\u40e1reve;\\u4103\\u0300;Ediuy\\u159c\\u159d\\u15a1\\u15a3\\u15a8\\u15ad\\u623e;\\uc000\\u223e\\u0333;\\u623frc\\u803b\\xe2\\u40e2te\\u80bb\\xb4\\u0306;\\u4430lig\\u803b\\xe6\\u40e6\\u0100;r\\xb2\\u15ba;\\uc000\\ud835\\udd1erave\\u803b\\xe0\\u40e0\\u0100ep\\u15ca\\u15d6\\u0100fp\\u15cf\\u15d4sym;\\u6135\\xe8\\u15d3ha;\\u43b1\\u0100ap\\u15dfc\\u0100cl\\u15e4\\u15e7r;\\u4101g;\\u6a3f\\u0264\\u15f0\\0\\0\\u160a\\u0280;adsv\\u15fa\\u15fb\\u15ff\\u1601\\u1607\\u6227nd;\\u6a55;\\u6a5clope;\\u6a58;\\u6a5a\\u0380;elmrsz\\u1618\\u1619\\u161b\\u161e\\u163f\\u164f\\u1659\\u6220;\\u69a4e\\xbb\\u1619sd\\u0100;a\\u1625\\u1626\\u6221\\u0461\\u1630\\u1632\\u1634\\u1636\\u1638\\u163a\\u163c\\u163e;\\u69a8;\\u69a9;\\u69aa;\\u69ab;\\u69ac;\\u69ad;\\u69ae;\\u69aft\\u0100;v\\u1645\\u1646\\u621fb\\u0100;d\\u164c\\u164d\\u62be;\\u699d\\u0100pt\\u1654\\u1657h;\\u6222\\xbb\\xb9arr;\\u637c\\u0100gp\\u1663\\u1667on;\\u4105f;\\uc000\\ud835\\udd52\\u0380;Eaeiop\\u12c1\\u167b\\u167d\\u1682\\u1684\\u1687\\u168a;\\u6a70cir;\\u6a6f;\\u624ad;\\u624bs;\\u4027rox\\u0100;e\\u12c1\\u1692\\xf1\\u1683ing\\u803b\\xe5\\u40e5\\u0180cty\\u16a1\\u16a6\\u16a8r;\\uc000\\ud835\\udcb6;\\u402amp\\u0100;e\\u12c1\\u16af\\xf1\\u0288ilde\\u803b\\xe3\\u40e3ml\\u803b\\xe4\\u40e4\\u0100ci\\u16c2\\u16c8onin\\xf4\\u0272nt;\\u6a11\\u0800Nabcdefiklnoprsu\\u16ed\\u16f1\\u1730\\u173c\\u1743\\u1748\\u1778\\u177d\\u17e0\\u17e6\\u1839\\u1850\\u170d\\u193d\\u1948\\u1970ot;\\u6aed\\u0100cr\\u16f6\\u171ek\\u0200ceps\\u1700\\u1705\\u170d\\u1713ong;\\u624cpsilon;\\u43f6rime;\\u6035im\\u0100;e\\u171a\\u171b\\u623dq;\\u62cd\\u0176\\u1722\\u1726ee;\\u62bded\\u0100;g\\u172c\\u172d\\u6305e\\xbb\\u172drk\\u0100;t\\u135c\\u1737brk;\\u63b6\\u0100oy\\u1701\\u1741;\\u4431quo;\\u601e\\u0280cmprt\\u1753\\u175b\\u1761\\u1764\\u1768aus\\u0100;e\\u010a\\u0109ptyv;\\u69b0s\\xe9\\u170cno\\xf5\\u0113\\u0180ahw\\u176f\\u1771\\u1773;\\u43b2;\\u6136een;\\u626cr;\\uc000\\ud835\\udd1fg\\u0380costuvw\\u178d\\u179d\\u17b3\\u17c1\\u17d5\\u17db\\u17de\\u0180aiu\\u1794\\u1796\\u179a\\xf0\\u0760rc;\\u65efp\\xbb\\u1371\\u0180dpt\\u17a4\\u17a8\\u17adot;\\u6a00lus;\\u6a01imes;\\u6a02\\u0271\\u17b9\\0\\0\\u17becup;\\u6a06ar;\\u6605riangle\\u0100du\\u17cd\\u17d2own;\\u65bdp;\\u65b3plus;\\u6a04e\\xe5\\u1444\\xe5\\u14adarow;\\u690d\\u0180ako\\u17ed\\u1826\\u1835\\u0100cn\\u17f2\\u1823k\\u0180lst\\u17fa\\u05ab\\u1802ozenge;\\u69ebriangle\\u0200;dlr\\u1812\\u1813\\u1818\\u181d\\u65b4own;\\u65beeft;\\u65c2ight;\\u65b8k;\\u6423\\u01b1\\u182b\\0\\u1833\\u01b2\\u182f\\0\\u1831;\\u6592;\\u65914;\\u6593ck;\\u6588\\u0100eo\\u183e\\u184d\\u0100;q\\u1843\\u1846\\uc000=\\u20e5uiv;\\uc000\\u2261\\u20e5t;\\u6310\\u0200ptwx\\u1859\\u185e\\u1867\\u186cf;\\uc000\\ud835\\udd53\\u0100;t\\u13cb\\u1863om\\xbb\\u13cctie;\\u62c8\\u0600DHUVbdhmptuv\\u1885\\u1896\\u18aa\\u18bb\\u18d7\\u18db\\u18ec\\u18ff\\u1905\\u190a\\u1910\\u1921\\u0200LRlr\\u188e\\u1890\\u1892\\u1894;\\u6557;\\u6554;\\u6556;\\u6553\\u0280;DUdu\\u18a1\\u18a2\\u18a4\\u18a6\\u18a8\\u6550;\\u6566;\\u6569;\\u6564;\\u6567\\u0200LRlr\\u18b3\\u18b5\\u18b7\\u18b9;\\u655d;\\u655a;\\u655c;\\u6559\\u0380;HLRhlr\\u18ca\\u18cb\\u18cd\\u18cf\\u18d1\\u18d3\\u18d5\\u6551;\\u656c;\\u6563;\\u6560;\\u656b;\\u6562;\\u655fox;\\u69c9\\u0200LRlr\\u18e4\\u18e6\\u18e8\\u18ea;\\u6555;\\u6552;\\u6510;\\u650c\\u0280;DUdu\\u06bd\\u18f7\\u18f9\\u18fb\\u18fd;\\u6565;\\u6568;\\u652c;\\u6534inus;\\u629flus;\\u629eimes;\\u62a0\\u0200LRlr\\u1919\\u191b\\u191d\\u191f;\\u655b;\\u6558;\\u6518;\\u6514\\u0380;HLRhlr\\u1930\\u1931\\u1933\\u1935\\u1937\\u1939\\u193b\\u6502;\\u656a;\\u6561;\\u655e;\\u653c;\\u6524;\\u651c\\u0100ev\\u0123\\u1942bar\\u803b\\xa6\\u40a6\\u0200ceio\\u1951\\u1956\\u195a\\u1960r;\\uc000\\ud835\\udcb7mi;\\u604fm\\u0100;e\\u171a\\u171cl\\u0180;bh\\u1968\\u1969\\u196b\\u405c;\\u69c5sub;\\u67c8\\u016c\\u1974\\u197el\\u0100;e\\u1979\\u197a\\u6022t\\xbb\\u197ap\\u0180;Ee\\u012f\\u1985\\u1987;\\u6aae\\u0100;q\\u06dc\\u06db\\u0ce1\\u19a7\\0\\u19e8\\u1a11\\u1a15\\u1a32\\0\\u1a37\\u1a50\\0\\0\\u1ab4\\0\\0\\u1ac1\\0\\0\\u1b21\\u1b2e\\u1b4d\\u1b52\\0\\u1bfd\\0\\u1c0c\\u0180cpr\\u19ad\\u19b2\\u19ddute;\\u4107\\u0300;abcds\\u19bf\\u19c0\\u19c4\\u19ca\\u19d5\\u19d9\\u6229nd;\\u6a44rcup;\\u6a49\\u0100au\\u19cf\\u19d2p;\\u6a4bp;\\u6a47ot;\\u6a40;\\uc000\\u2229\\ufe00\\u0100eo\\u19e2\\u19e5t;\\u6041\\xee\\u0693\\u0200aeiu\\u19f0\\u19fb\\u1a01\\u1a05\\u01f0\\u19f5\\0\\u19f8s;\\u6a4don;\\u410ddil\\u803b\\xe7\\u40e7rc;\\u4109ps\\u0100;s\\u1a0c\\u1a0d\\u6a4cm;\\u6a50ot;\\u410b\\u0180dmn\\u1a1b\\u1a20\\u1a26il\\u80bb\\xb8\\u01adptyv;\\u69b2t\\u8100\\xa2;e\\u1a2d\\u1a2e\\u40a2r\\xe4\\u01b2r;\\uc000\\ud835\\udd20\\u0180cei\\u1a3d\\u1a40\\u1a4dy;\\u4447ck\\u0100;m\\u1a47\\u1a48\\u6713ark\\xbb\\u1a48;\\u43c7r\\u0380;Ecefms\\u1a5f\\u1a60\\u1a62\\u1a6b\\u1aa4\\u1aaa\\u1aae\\u65cb;\\u69c3\\u0180;el\\u1a69\\u1a6a\\u1a6d\\u42c6q;\\u6257e\\u0261\\u1a74\\0\\0\\u1a88rrow\\u0100lr\\u1a7c\\u1a81eft;\\u61baight;\\u61bb\\u0280RSacd\\u1a92\\u1a94\\u1a96\\u1a9a\\u1a9f\\xbb\\u0f47;\\u64c8st;\\u629birc;\\u629aash;\\u629dnint;\\u6a10id;\\u6aefcir;\\u69c2ubs\\u0100;u\\u1abb\\u1abc\\u6663it\\xbb\\u1abc\\u02ec\\u1ac7\\u1ad4\\u1afa\\0\\u1b0aon\\u0100;e\\u1acd\\u1ace\\u403a\\u0100;q\\xc7\\xc6\\u026d\\u1ad9\\0\\0\\u1ae2a\\u0100;t\\u1ade\\u1adf\\u402c;\\u4040\\u0180;fl\\u1ae8\\u1ae9\\u1aeb\\u6201\\xee\\u1160e\\u0100mx\\u1af1\\u1af6ent\\xbb\\u1ae9e\\xf3\\u024d\\u01e7\\u1afe\\0\\u1b07\\u0100;d\\u12bb\\u1b02ot;\\u6a6dn\\xf4\\u0246\\u0180fry\\u1b10\\u1b14\\u1b17;\\uc000\\ud835\\udd54o\\xe4\\u0254\\u8100\\xa9;s\\u0155\\u1b1dr;\\u6117\\u0100ao\\u1b25\\u1b29rr;\\u61b5ss;\\u6717\\u0100cu\\u1b32\\u1b37r;\\uc000\\ud835\\udcb8\\u0100bp\\u1b3c\\u1b44\\u0100;e\\u1b41\\u1b42\\u6acf;\\u6ad1\\u0100;e\\u1b49\\u1b4a\\u6ad0;\\u6ad2dot;\\u62ef\\u0380delprvw\\u1b60\\u1b6c\\u1b77\\u1b82\\u1bac\\u1bd4\\u1bf9arr\\u0100lr\\u1b68\\u1b6a;\\u6938;\\u6935\\u0270\\u1b72\\0\\0\\u1b75r;\\u62dec;\\u62dfarr\\u0100;p\\u1b7f\\u1b80\\u61b6;\\u693d\\u0300;bcdos\\u1b8f\\u1b90\\u1b96\\u1ba1\\u1ba5\\u1ba8\\u622arcap;\\u6a48\\u0100au\\u1b9b\\u1b9ep;\\u6a46p;\\u6a4aot;\\u628dr;\\u6a45;\\uc000\\u222a\\ufe00\\u0200alrv\\u1bb5\\u1bbf\\u1bde\\u1be3rr\\u0100;m\\u1bbc\\u1bbd\\u61b7;\\u693cy\\u0180evw\\u1bc7\\u1bd4\\u1bd8q\\u0270\\u1bce\\0\\0\\u1bd2re\\xe3\\u1b73u\\xe3\\u1b75ee;\\u62ceedge;\\u62cfen\\u803b\\xa4\\u40a4earrow\\u0100lr\\u1bee\\u1bf3eft\\xbb\\u1b80ight\\xbb\\u1bbde\\xe4\\u1bdd\\u0100ci\\u1c01\\u1c07onin\\xf4\\u01f7nt;\\u6231lcty;\\u632d\\u0980AHabcdefhijlorstuwz\\u1c38\\u1c3b\\u1c3f\\u1c5d\\u1c69\\u1c75\\u1c8a\\u1c9e\\u1cac\\u1cb7\\u1cfb\\u1cff\\u1d0d\\u1d7b\\u1d91\\u1dab\\u1dbb\\u1dc6\\u1dcdr\\xf2\\u0381ar;\\u6965\\u0200glrs\\u1c48\\u1c4d\\u1c52\\u1c54ger;\\u6020eth;\\u6138\\xf2\\u1133h\\u0100;v\\u1c5a\\u1c5b\\u6010\\xbb\\u090a\\u016b\\u1c61\\u1c67arow;\\u690fa\\xe3\\u0315\\u0100ay\\u1c6e\\u1c73ron;\\u410f;\\u4434\\u0180;ao\\u0332\\u1c7c\\u1c84\\u0100gr\\u02bf\\u1c81r;\\u61catseq;\\u6a77\\u0180glm\\u1c91\\u1c94\\u1c98\\u803b\\xb0\\u40b0ta;\\u43b4ptyv;\\u69b1\\u0100ir\\u1ca3\\u1ca8sht;\\u697f;\\uc000\\ud835\\udd21ar\\u0100lr\\u1cb3\\u1cb5\\xbb\\u08dc\\xbb\\u101e\\u0280aegsv\\u1cc2\\u0378\\u1cd6\\u1cdc\\u1ce0m\\u0180;os\\u0326\\u1cca\\u1cd4nd\\u0100;s\\u0326\\u1cd1uit;\\u6666amma;\\u43ddin;\\u62f2\\u0180;io\\u1ce7\\u1ce8\\u1cf8\\u40f7de\\u8100\\xf7;o\\u1ce7\\u1cf0ntimes;\\u62c7n\\xf8\\u1cf7cy;\\u4452c\\u026f\\u1d06\\0\\0\\u1d0arn;\\u631eop;\\u630d\\u0280lptuw\\u1d18\\u1d1d\\u1d22\\u1d49\\u1d55lar;\\u4024f;\\uc000\\ud835\\udd55\\u0280;emps\\u030b\\u1d2d\\u1d37\\u1d3d\\u1d42q\\u0100;d\\u0352\\u1d33ot;\\u6251inus;\\u6238lus;\\u6214quare;\\u62a1blebarwedg\\xe5\\xfan\\u0180adh\\u112e\\u1d5d\\u1d67ownarrow\\xf3\\u1c83arpoon\\u0100lr\\u1d72\\u1d76ef\\xf4\\u1cb4igh\\xf4\\u1cb6\\u0162\\u1d7f\\u1d85karo\\xf7\\u0f42\\u026f\\u1d8a\\0\\0\\u1d8ern;\\u631fop;\\u630c\\u0180cot\\u1d98\\u1da3\\u1da6\\u0100ry\\u1d9d\\u1da1;\\uc000\\ud835\\udcb9;\\u4455l;\\u69f6rok;\\u4111\\u0100dr\\u1db0\\u1db4ot;\\u62f1i\\u0100;f\\u1dba\\u1816\\u65bf\\u0100ah\\u1dc0\\u1dc3r\\xf2\\u0429a\\xf2\\u0fa6angle;\\u69a6\\u0100ci\\u1dd2\\u1dd5y;\\u445fgrarr;\\u67ff\\u0900Dacdefglmnopqrstux\\u1e01\\u1e09\\u1e19\\u1e38\\u0578\\u1e3c\\u1e49\\u1e61\\u1e7e\\u1ea5\\u1eaf\\u1ebd\\u1ee1\\u1f2a\\u1f37\\u1f44\\u1f4e\\u1f5a\\u0100Do\\u1e06\\u1d34o\\xf4\\u1c89\\u0100cs\\u1e0e\\u1e14ute\\u803b\\xe9\\u40e9ter;\\u6a6e\\u0200aioy\\u1e22\\u1e27\\u1e31\\u1e36ron;\\u411br\\u0100;c\\u1e2d\\u1e2e\\u6256\\u803b\\xea\\u40ealon;\\u6255;\\u444dot;\\u4117\\u0100Dr\\u1e41\\u1e45ot;\\u6252;\\uc000\\ud835\\udd22\\u0180;rs\\u1e50\\u1e51\\u1e57\\u6a9aave\\u803b\\xe8\\u40e8\\u0100;d\\u1e5c\\u1e5d\\u6a96ot;\\u6a98\\u0200;ils\\u1e6a\\u1e6b\\u1e72\\u1e74\\u6a99nters;\\u63e7;\\u6113\\u0100;d\\u1e79\\u1e7a\\u6a95ot;\\u6a97\\u0180aps\\u1e85\\u1e89\\u1e97cr;\\u4113ty\\u0180;sv\\u1e92\\u1e93\\u1e95\\u6205et\\xbb\\u1e93p\\u01001;\\u1e9d\\u1ea4\\u0133\\u1ea1\\u1ea3;\\u6004;\\u6005\\u6003\\u0100gs\\u1eaa\\u1eac;\\u414bp;\\u6002\\u0100gp\\u1eb4\\u1eb8on;\\u4119f;\\uc000\\ud835\\udd56\\u0180als\\u1ec4\\u1ece\\u1ed2r\\u0100;s\\u1eca\\u1ecb\\u62d5l;\\u69e3us;\\u6a71i\\u0180;lv\\u1eda\\u1edb\\u1edf\\u43b5on\\xbb\\u1edb;\\u43f5\\u0200csuv\\u1eea\\u1ef3\\u1f0b\\u1f23\\u0100io\\u1eef\\u1e31rc\\xbb\\u1e2e\\u0269\\u1ef9\\0\\0\\u1efb\\xed\\u0548ant\\u0100gl\\u1f02\\u1f06tr\\xbb\\u1e5dess\\xbb\\u1e7a\\u0180aei\\u1f12\\u1f16\\u1f1als;\\u403dst;\\u625fv\\u0100;D\\u0235\\u1f20D;\\u6a78parsl;\\u69e5\\u0100Da\\u1f2f\\u1f33ot;\\u6253rr;\\u6971\\u0180cdi\\u1f3e\\u1f41\\u1ef8r;\\u612fo\\xf4\\u0352\\u0100ah\\u1f49\\u1f4b;\\u43b7\\u803b\\xf0\\u40f0\\u0100mr\\u1f53\\u1f57l\\u803b\\xeb\\u40ebo;\\u60ac\\u0180cip\\u1f61\\u1f64\\u1f67l;\\u4021s\\xf4\\u056e\\u0100eo\\u1f6c\\u1f74ctatio\\xee\\u0559nential\\xe5\\u0579\\u09e1\\u1f92\\0\\u1f9e\\0\\u1fa1\\u1fa7\\0\\0\\u1fc6\\u1fcc\\0\\u1fd3\\0\\u1fe6\\u1fea\\u2000\\0\\u2008\\u205allingdotse\\xf1\\u1e44y;\\u4444male;\\u6640\\u0180ilr\\u1fad\\u1fb3\\u1fc1lig;\\u8000\\ufb03\\u0269\\u1fb9\\0\\0\\u1fbdg;\\u8000\\ufb00ig;\\u8000\\ufb04;\\uc000\\ud835\\udd23lig;\\u8000\\ufb01lig;\\uc000fj\\u0180alt\\u1fd9\\u1fdc\\u1fe1t;\\u666dig;\\u8000\\ufb02ns;\\u65b1of;\\u4192\\u01f0\\u1fee\\0\\u1ff3f;\\uc000\\ud835\\udd57\\u0100ak\\u05bf\\u1ff7\\u0100;v\\u1ffc\\u1ffd\\u62d4;\\u6ad9artint;\\u6a0d\\u0100ao\\u200c\\u2055\\u0100cs\\u2011\\u2052\\u03b1\\u201a\\u2030\\u2038\\u2045\\u2048\\0\\u2050\\u03b2\\u2022\\u2025\\u2027\\u202a\\u202c\\0\\u202e\\u803b\\xbd\\u40bd;\\u6153\\u803b\\xbc\\u40bc;\\u6155;\\u6159;\\u615b\\u01b3\\u2034\\0\\u2036;\\u6154;\\u6156\\u02b4\\u203e\\u2041\\0\\0\\u2043\\u803b\\xbe\\u40be;\\u6157;\\u615c5;\\u6158\\u01b6\\u204c\\0\\u204e;\\u615a;\\u615d8;\\u615el;\\u6044wn;\\u6322cr;\\uc000\\ud835\\udcbb\\u0880Eabcdefgijlnorstv\\u2082\\u2089\\u209f\\u20a5\\u20b0\\u20b4\\u20f0\\u20f5\\u20fa\\u20ff\\u2103\\u2112\\u2138\\u0317\\u213e\\u2152\\u219e\\u0100;l\\u064d\\u2087;\\u6a8c\\u0180cmp\\u2090\\u2095\\u209dute;\\u41f5ma\\u0100;d\\u209c\\u1cda\\u43b3;\\u6a86reve;\\u411f\\u0100iy\\u20aa\\u20aerc;\\u411d;\\u4433ot;\\u4121\\u0200;lqs\\u063e\\u0642\\u20bd\\u20c9\\u0180;qs\\u063e\\u064c\\u20c4lan\\xf4\\u0665\\u0200;cdl\\u0665\\u20d2\\u20d5\\u20e5c;\\u6aa9ot\\u0100;o\\u20dc\\u20dd\\u6a80\\u0100;l\\u20e2\\u20e3\\u6a82;\\u6a84\\u0100;e\\u20ea\\u20ed\\uc000\\u22db\\ufe00s;\\u6a94r;\\uc000\\ud835\\udd24\\u0100;g\\u0673\\u061bmel;\\u6137cy;\\u4453\\u0200;Eaj\\u065a\\u210c\\u210e\\u2110;\\u6a92;\\u6aa5;\\u6aa4\\u0200Eaes\\u211b\\u211d\\u2129\\u2134;\\u6269p\\u0100;p\\u2123\\u2124\\u6a8arox\\xbb\\u2124\\u0100;q\\u212e\\u212f\\u6a88\\u0100;q\\u212e\\u211bim;\\u62e7pf;\\uc000\\ud835\\udd58\\u0100ci\\u2143\\u2146r;\\u610am\\u0180;el\\u066b\\u214e\\u2150;\\u6a8e;\\u6a90\\u8300>;cdlqr\\u05ee\\u2160\\u216a\\u216e\\u2173\\u2179\\u0100ci\\u2165\\u2167;\\u6aa7r;\\u6a7aot;\\u62d7Par;\\u6995uest;\\u6a7c\\u0280adels\\u2184\\u216a\\u2190\\u0656\\u219b\\u01f0\\u2189\\0\\u218epro\\xf8\\u209er;\\u6978q\\u0100lq\\u063f\\u2196les\\xf3\\u2088i\\xed\\u066b\\u0100en\\u21a3\\u21adrtneqq;\\uc000\\u2269\\ufe00\\xc5\\u21aa\\u0500Aabcefkosy\\u21c4\\u21c7\\u21f1\\u21f5\\u21fa\\u2218\\u221d\\u222f\\u2268\\u227dr\\xf2\\u03a0\\u0200ilmr\\u21d0\\u21d4\\u21d7\\u21dbrs\\xf0\\u1484f\\xbb\\u2024il\\xf4\\u06a9\\u0100dr\\u21e0\\u21e4cy;\\u444a\\u0180;cw\\u08f4\\u21eb\\u21efir;\\u6948;\\u61adar;\\u610firc;\\u4125\\u0180alr\\u2201\\u220e\\u2213rts\\u0100;u\\u2209\\u220a\\u6665it\\xbb\\u220alip;\\u6026con;\\u62b9r;\\uc000\\ud835\\udd25s\\u0100ew\\u2223\\u2229arow;\\u6925arow;\\u6926\\u0280amopr\\u223a\\u223e\\u2243\\u225e\\u2263rr;\\u61fftht;\\u623bk\\u0100lr\\u2249\\u2253eftarrow;\\u61a9ightarrow;\\u61aaf;\\uc000\\ud835\\udd59bar;\\u6015\\u0180clt\\u226f\\u2274\\u2278r;\\uc000\\ud835\\udcbdas\\xe8\\u21f4rok;\\u4127\\u0100bp\\u2282\\u2287ull;\\u6043hen\\xbb\\u1c5b\\u0ae1\\u22a3\\0\\u22aa\\0\\u22b8\\u22c5\\u22ce\\0\\u22d5\\u22f3\\0\\0\\u22f8\\u2322\\u2367\\u2362\\u237f\\0\\u2386\\u23aa\\u23b4cute\\u803b\\xed\\u40ed\\u0180;iy\\u0771\\u22b0\\u22b5rc\\u803b\\xee\\u40ee;\\u4438\\u0100cx\\u22bc\\u22bfy;\\u4435cl\\u803b\\xa1\\u40a1\\u0100fr\\u039f\\u22c9;\\uc000\\ud835\\udd26rave\\u803b\\xec\\u40ec\\u0200;ino\\u073e\\u22dd\\u22e9\\u22ee\\u0100in\\u22e2\\u22e6nt;\\u6a0ct;\\u622dfin;\\u69dcta;\\u6129lig;\\u4133\\u0180aop\\u22fe\\u231a\\u231d\\u0180cgt\\u2305\\u2308\\u2317r;\\u412b\\u0180elp\\u071f\\u230f\\u2313in\\xe5\\u078ear\\xf4\\u0720h;\\u4131f;\\u62b7ed;\\u41b5\\u0280;cfot\\u04f4\\u232c\\u2331\\u233d\\u2341are;\\u6105in\\u0100;t\\u2338\\u2339\\u621eie;\\u69dddo\\xf4\\u2319\\u0280;celp\\u0757\\u234c\\u2350\\u235b\\u2361al;\\u62ba\\u0100gr\\u2355\\u2359er\\xf3\\u1563\\xe3\\u234darhk;\\u6a17rod;\\u6a3c\\u0200cgpt\\u236f\\u2372\\u2376\\u237by;\\u4451on;\\u412ff;\\uc000\\ud835\\udd5aa;\\u43b9uest\\u803b\\xbf\\u40bf\\u0100ci\\u238a\\u238fr;\\uc000\\ud835\\udcben\\u0280;Edsv\\u04f4\\u239b\\u239d\\u23a1\\u04f3;\\u62f9ot;\\u62f5\\u0100;v\\u23a6\\u23a7\\u62f4;\\u62f3\\u0100;i\\u0777\\u23aelde;\\u4129\\u01eb\\u23b8\\0\\u23bccy;\\u4456l\\u803b\\xef\\u40ef\\u0300cfmosu\\u23cc\\u23d7\\u23dc\\u23e1\\u23e7\\u23f5\\u0100iy\\u23d1\\u23d5rc;\\u4135;\\u4439r;\\uc000\\ud835\\udd27ath;\\u4237pf;\\uc000\\ud835\\udd5b\\u01e3\\u23ec\\0\\u23f1r;\\uc000\\ud835\\udcbfrcy;\\u4458kcy;\\u4454\\u0400acfghjos\\u240b\\u2416\\u2422\\u2427\\u242d\\u2431\\u2435\\u243bppa\\u0100;v\\u2413\\u2414\\u43ba;\\u43f0\\u0100ey\\u241b\\u2420dil;\\u4137;\\u443ar;\\uc000\\ud835\\udd28reen;\\u4138cy;\\u4445cy;\\u445cpf;\\uc000\\ud835\\udd5ccr;\\uc000\\ud835\\udcc0\\u0b80ABEHabcdefghjlmnoprstuv\\u2470\\u2481\\u2486\\u248d\\u2491\\u250e\\u253d\\u255a\\u2580\\u264e\\u265e\\u2665\\u2679\\u267d\\u269a\\u26b2\\u26d8\\u275d\\u2768\\u278b\\u27c0\\u2801\\u2812\\u0180art\\u2477\\u247a\\u247cr\\xf2\\u09c6\\xf2\\u0395ail;\\u691barr;\\u690e\\u0100;g\\u0994\\u248b;\\u6a8bar;\\u6962\\u0963\\u24a5\\0\\u24aa\\0\\u24b1\\0\\0\\0\\0\\0\\u24b5\\u24ba\\0\\u24c6\\u24c8\\u24cd\\0\\u24f9ute;\\u413amptyv;\\u69b4ra\\xee\\u084cbda;\\u43bbg\\u0180;dl\\u088e\\u24c1\\u24c3;\\u6991\\xe5\\u088e;\\u6a85uo\\u803b\\xab\\u40abr\\u0400;bfhlpst\\u0899\\u24de\\u24e6\\u24e9\\u24eb\\u24ee\\u24f1\\u24f5\\u0100;f\\u089d\\u24e3s;\\u691fs;\\u691d\\xeb\\u2252p;\\u61abl;\\u6939im;\\u6973l;\\u61a2\\u0180;ae\\u24ff\\u2500\\u2504\\u6aabil;\\u6919\\u0100;s\\u2509\\u250a\\u6aad;\\uc000\\u2aad\\ufe00\\u0180abr\\u2515\\u2519\\u251drr;\\u690crk;\\u6772\\u0100ak\\u2522\\u252cc\\u0100ek\\u2528\\u252a;\\u407b;\\u405b\\u0100es\\u2531\\u2533;\\u698bl\\u0100du\\u2539\\u253b;\\u698f;\\u698d\\u0200aeuy\\u2546\\u254b\\u2556\\u2558ron;\\u413e\\u0100di\\u2550\\u2554il;\\u413c\\xec\\u08b0\\xe2\\u2529;\\u443b\\u0200cqrs\\u2563\\u2566\\u256d\\u257da;\\u6936uo\\u0100;r\\u0e19\\u1746\\u0100du\\u2572\\u2577har;\\u6967shar;\\u694bh;\\u61b2\\u0280;fgqs\\u258b\\u258c\\u0989\\u25f3\\u25ff\\u6264t\\u0280ahlrt\\u2598\\u25a4\\u25b7\\u25c2\\u25e8rrow\\u0100;t\\u0899\\u25a1a\\xe9\\u24f6arpoon\\u0100du\\u25af\\u25b4own\\xbb\\u045ap\\xbb\\u0966eftarrows;\\u61c7ight\\u0180ahs\\u25cd\\u25d6\\u25derrow\\u0100;s\\u08f4\\u08a7arpoon\\xf3\\u0f98quigarro\\xf7\\u21f0hreetimes;\\u62cb\\u0180;qs\\u258b\\u0993\\u25falan\\xf4\\u09ac\\u0280;cdgs\\u09ac\\u260a\\u260d\\u261d\\u2628c;\\u6aa8ot\\u0100;o\\u2614\\u2615\\u6a7f\\u0100;r\\u261a\\u261b\\u6a81;\\u6a83\\u0100;e\\u2622\\u2625\\uc000\\u22da\\ufe00s;\\u6a93\\u0280adegs\\u2633\\u2639\\u263d\\u2649\\u264bppro\\xf8\\u24c6ot;\\u62d6q\\u0100gq\\u2643\\u2645\\xf4\\u0989gt\\xf2\\u248c\\xf4\\u099bi\\xed\\u09b2\\u0180ilr\\u2655\\u08e1\\u265asht;\\u697c;\\uc000\\ud835\\udd29\\u0100;E\\u099c\\u2663;\\u6a91\\u0161\\u2669\\u2676r\\u0100du\\u25b2\\u266e\\u0100;l\\u0965\\u2673;\\u696alk;\\u6584cy;\\u4459\\u0280;acht\\u0a48\\u2688\\u268b\\u2691\\u2696r\\xf2\\u25c1orne\\xf2\\u1d08ard;\\u696bri;\\u65fa\\u0100io\\u269f\\u26a4dot;\\u4140ust\\u0100;a\\u26ac\\u26ad\\u63b0che\\xbb\\u26ad\\u0200Eaes\\u26bb\\u26bd\\u26c9\\u26d4;\\u6268p\\u0100;p\\u26c3\\u26c4\\u6a89rox\\xbb\\u26c4\\u0100;q\\u26ce\\u26cf\\u6a87\\u0100;q\\u26ce\\u26bbim;\\u62e6\\u0400abnoptwz\\u26e9\\u26f4\\u26f7\\u271a\\u272f\\u2741\\u2747\\u2750\\u0100nr\\u26ee\\u26f1g;\\u67ecr;\\u61fdr\\xeb\\u08c1g\\u0180lmr\\u26ff\\u270d\\u2714eft\\u0100ar\\u09e6\\u2707ight\\xe1\\u09f2apsto;\\u67fcight\\xe1\\u09fdparrow\\u0100lr\\u2725\\u2729ef\\xf4\\u24edight;\\u61ac\\u0180afl\\u2736\\u2739\\u273dr;\\u6985;\\uc000\\ud835\\udd5dus;\\u6a2dimes;\\u6a34\\u0161\\u274b\\u274fst;\\u6217\\xe1\\u134e\\u0180;ef\\u2757\\u2758\\u1800\\u65cange\\xbb\\u2758ar\\u0100;l\\u2764\\u2765\\u4028t;\\u6993\\u0280achmt\\u2773\\u2776\\u277c\\u2785\\u2787r\\xf2\\u08a8orne\\xf2\\u1d8car\\u0100;d\\u0f98\\u2783;\\u696d;\\u600eri;\\u62bf\\u0300achiqt\\u2798\\u279d\\u0a40\\u27a2\\u27ae\\u27bbquo;\\u6039r;\\uc000\\ud835\\udcc1m\\u0180;eg\\u09b2\\u27aa\\u27ac;\\u6a8d;\\u6a8f\\u0100bu\\u252a\\u27b3o\\u0100;r\\u0e1f\\u27b9;\\u601arok;\\u4142\\u8400<;cdhilqr\\u082b\\u27d2\\u2639\\u27dc\\u27e0\\u27e5\\u27ea\\u27f0\\u0100ci\\u27d7\\u27d9;\\u6aa6r;\\u6a79re\\xe5\\u25f2mes;\\u62c9arr;\\u6976uest;\\u6a7b\\u0100Pi\\u27f5\\u27f9ar;\\u6996\\u0180;ef\\u2800\\u092d\\u181b\\u65c3r\\u0100du\\u2807\\u280dshar;\\u694ahar;\\u6966\\u0100en\\u2817\\u2821rtneqq;\\uc000\\u2268\\ufe00\\xc5\\u281e\\u0700Dacdefhilnopsu\\u2840\\u2845\\u2882\\u288e\\u2893\\u28a0\\u28a5\\u28a8\\u28da\\u28e2\\u28e4\\u0a83\\u28f3\\u2902Dot;\\u623a\\u0200clpr\\u284e\\u2852\\u2863\\u287dr\\u803b\\xaf\\u40af\\u0100et\\u2857\\u2859;\\u6642\\u0100;e\\u285e\\u285f\\u6720se\\xbb\\u285f\\u0100;s\\u103b\\u2868to\\u0200;dlu\\u103b\\u2873\\u2877\\u287bow\\xee\\u048cef\\xf4\\u090f\\xf0\\u13d1ker;\\u65ae\\u0100oy\\u2887\\u288cmma;\\u6a29;\\u443cash;\\u6014asuredangle\\xbb\\u1626r;\\uc000\\ud835\\udd2ao;\\u6127\\u0180cdn\\u28af\\u28b4\\u28c9ro\\u803b\\xb5\\u40b5\\u0200;acd\\u1464\\u28bd\\u28c0\\u28c4s\\xf4\\u16a7ir;\\u6af0ot\\u80bb\\xb7\\u01b5us\\u0180;bd\\u28d2\\u1903\\u28d3\\u6212\\u0100;u\\u1d3c\\u28d8;\\u6a2a\\u0163\\u28de\\u28e1p;\\u6adb\\xf2\\u2212\\xf0\\u0a81\\u0100dp\\u28e9\\u28eeels;\\u62a7f;\\uc000\\ud835\\udd5e\\u0100ct\\u28f8\\u28fdr;\\uc000\\ud835\\udcc2pos\\xbb\\u159d\\u0180;lm\\u2909\\u290a\\u290d\\u43bctimap;\\u62b8\\u0c00GLRVabcdefghijlmoprstuvw\\u2942\\u2953\\u297e\\u2989\\u2998\\u29da\\u29e9\\u2a15\\u2a1a\\u2a58\\u2a5d\\u2a83\\u2a95\\u2aa4\\u2aa8\\u2b04\\u2b07\\u2b44\\u2b7f\\u2bae\\u2c34\\u2c67\\u2c7c\\u2ce9\\u0100gt\\u2947\\u294b;\\uc000\\u22d9\\u0338\\u0100;v\\u2950\\u0bcf\\uc000\\u226b\\u20d2\\u0180elt\\u295a\\u2972\\u2976ft\\u0100ar\\u2961\\u2967rrow;\\u61cdightarrow;\\u61ce;\\uc000\\u22d8\\u0338\\u0100;v\\u297b\\u0c47\\uc000\\u226a\\u20d2ightarrow;\\u61cf\\u0100Dd\\u298e\\u2993ash;\\u62afash;\\u62ae\\u0280bcnpt\\u29a3\\u29a7\\u29ac\\u29b1\\u29ccla\\xbb\\u02deute;\\u4144g;\\uc000\\u2220\\u20d2\\u0280;Eiop\\u0d84\\u29bc\\u29c0\\u29c5\\u29c8;\\uc000\\u2a70\\u0338d;\\uc000\\u224b\\u0338s;\\u4149ro\\xf8\\u0d84ur\\u0100;a\\u29d3\\u29d4\\u666el\\u0100;s\\u29d3\\u0b38\\u01f3\\u29df\\0\\u29e3p\\u80bb\\xa0\\u0b37mp\\u0100;e\\u0bf9\\u0c00\\u0280aeouy\\u29f4\\u29fe\\u2a03\\u2a10\\u2a13\\u01f0\\u29f9\\0\\u29fb;\\u6a43on;\\u4148dil;\\u4146ng\\u0100;d\\u0d7e\\u2a0aot;\\uc000\\u2a6d\\u0338p;\\u6a42;\\u443dash;\\u6013\\u0380;Aadqsx\\u0b92\\u2a29\\u2a2d\\u2a3b\\u2a41\\u2a45\\u2a50rr;\\u61d7r\\u0100hr\\u2a33\\u2a36k;\\u6924\\u0100;o\\u13f2\\u13f0ot;\\uc000\\u2250\\u0338ui\\xf6\\u0b63\\u0100ei\\u2a4a\\u2a4ear;\\u6928\\xed\\u0b98ist\\u0100;s\\u0ba0\\u0b9fr;\\uc000\\ud835\\udd2b\\u0200Eest\\u0bc5\\u2a66\\u2a79\\u2a7c\\u0180;qs\\u0bbc\\u2a6d\\u0be1\\u0180;qs\\u0bbc\\u0bc5\\u2a74lan\\xf4\\u0be2i\\xed\\u0bea\\u0100;r\\u0bb6\\u2a81\\xbb\\u0bb7\\u0180Aap\\u2a8a\\u2a8d\\u2a91r\\xf2\\u2971rr;\\u61aear;\\u6af2\\u0180;sv\\u0f8d\\u2a9c\\u0f8c\\u0100;d\\u2aa1\\u2aa2\\u62fc;\\u62facy;\\u445a\\u0380AEadest\\u2ab7\\u2aba\\u2abe\\u2ac2\\u2ac5\\u2af6\\u2af9r\\xf2\\u2966;\\uc000\\u2266\\u0338rr;\\u619ar;\\u6025\\u0200;fqs\\u0c3b\\u2ace\\u2ae3\\u2aeft\\u0100ar\\u2ad4\\u2ad9rro\\xf7\\u2ac1ightarro\\xf7\\u2a90\\u0180;qs\\u0c3b\\u2aba\\u2aealan\\xf4\\u0c55\\u0100;s\\u0c55\\u2af4\\xbb\\u0c36i\\xed\\u0c5d\\u0100;r\\u0c35\\u2afei\\u0100;e\\u0c1a\\u0c25i\\xe4\\u0d90\\u0100pt\\u2b0c\\u2b11f;\\uc000\\ud835\\udd5f\\u8180\\xac;in\\u2b19\\u2b1a\\u2b36\\u40acn\\u0200;Edv\\u0b89\\u2b24\\u2b28\\u2b2e;\\uc000\\u22f9\\u0338ot;\\uc000\\u22f5\\u0338\\u01e1\\u0b89\\u2b33\\u2b35;\\u62f7;\\u62f6i\\u0100;v\\u0cb8\\u2b3c\\u01e1\\u0cb8\\u2b41\\u2b43;\\u62fe;\\u62fd\\u0180aor\\u2b4b\\u2b63\\u2b69r\\u0200;ast\\u0b7b\\u2b55\\u2b5a\\u2b5flle\\xec\\u0b7bl;\\uc000\\u2afd\\u20e5;\\uc000\\u2202\\u0338lint;\\u6a14\\u0180;ce\\u0c92\\u2b70\\u2b73u\\xe5\\u0ca5\\u0100;c\\u0c98\\u2b78\\u0100;e\\u0c92\\u2b7d\\xf1\\u0c98\\u0200Aait\\u2b88\\u2b8b\\u2b9d\\u2ba7r\\xf2\\u2988rr\\u0180;cw\\u2b94\\u2b95\\u2b99\\u619b;\\uc000\\u2933\\u0338;\\uc000\\u219d\\u0338ghtarrow\\xbb\\u2b95ri\\u0100;e\\u0ccb\\u0cd6\\u0380chimpqu\\u2bbd\\u2bcd\\u2bd9\\u2b04\\u0b78\\u2be4\\u2bef\\u0200;cer\\u0d32\\u2bc6\\u0d37\\u2bc9u\\xe5\\u0d45;\\uc000\\ud835\\udcc3ort\\u026d\\u2b05\\0\\0\\u2bd6ar\\xe1\\u2b56m\\u0100;e\\u0d6e\\u2bdf\\u0100;q\\u0d74\\u0d73su\\u0100bp\\u2beb\\u2bed\\xe5\\u0cf8\\xe5\\u0d0b\\u0180bcp\\u2bf6\\u2c11\\u2c19\\u0200;Ees\\u2bff\\u2c00\\u0d22\\u2c04\\u6284;\\uc000\\u2ac5\\u0338et\\u0100;e\\u0d1b\\u2c0bq\\u0100;q\\u0d23\\u2c00c\\u0100;e\\u0d32\\u2c17\\xf1\\u0d38\\u0200;Ees\\u2c22\\u2c23\\u0d5f\\u2c27\\u6285;\\uc000\\u2ac6\\u0338et\\u0100;e\\u0d58\\u2c2eq\\u0100;q\\u0d60\\u2c23\\u0200gilr\\u2c3d\\u2c3f\\u2c45\\u2c47\\xec\\u0bd7lde\\u803b\\xf1\\u40f1\\xe7\\u0c43iangle\\u0100lr\\u2c52\\u2c5ceft\\u0100;e\\u0c1a\\u2c5a\\xf1\\u0c26ight\\u0100;e\\u0ccb\\u2c65\\xf1\\u0cd7\\u0100;m\\u2c6c\\u2c6d\\u43bd\\u0180;es\\u2c74\\u2c75\\u2c79\\u4023ro;\\u6116p;\\u6007\\u0480DHadgilrs\\u2c8f\\u2c94\\u2c99\\u2c9e\\u2ca3\\u2cb0\\u2cb6\\u2cd3\\u2ce3ash;\\u62adarr;\\u6904p;\\uc000\\u224d\\u20d2ash;\\u62ac\\u0100et\\u2ca8\\u2cac;\\uc000\\u2265\\u20d2;\\uc000>\\u20d2nfin;\\u69de\\u0180Aet\\u2cbd\\u2cc1\\u2cc5rr;\\u6902;\\uc000\\u2264\\u20d2\\u0100;r\\u2cca\\u2ccd\\uc000<\\u20d2ie;\\uc000\\u22b4\\u20d2\\u0100At\\u2cd8\\u2cdcrr;\\u6903rie;\\uc000\\u22b5\\u20d2im;\\uc000\\u223c\\u20d2\\u0180Aan\\u2cf0\\u2cf4\\u2d02rr;\\u61d6r\\u0100hr\\u2cfa\\u2cfdk;\\u6923\\u0100;o\\u13e7\\u13e5ear;\\u6927\\u1253\\u1a95\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\u2d2d\\0\\u2d38\\u2d48\\u2d60\\u2d65\\u2d72\\u2d84\\u1b07\\0\\0\\u2d8d\\u2dab\\0\\u2dc8\\u2dce\\0\\u2ddc\\u2e19\\u2e2b\\u2e3e\\u2e43\\u0100cs\\u2d31\\u1a97ute\\u803b\\xf3\\u40f3\\u0100iy\\u2d3c\\u2d45r\\u0100;c\\u1a9e\\u2d42\\u803b\\xf4\\u40f4;\\u443e\\u0280abios\\u1aa0\\u2d52\\u2d57\\u01c8\\u2d5alac;\\u4151v;\\u6a38old;\\u69bclig;\\u4153\\u0100cr\\u2d69\\u2d6dir;\\u69bf;\\uc000\\ud835\\udd2c\\u036f\\u2d79\\0\\0\\u2d7c\\0\\u2d82n;\\u42dbave\\u803b\\xf2\\u40f2;\\u69c1\\u0100bm\\u2d88\\u0df4ar;\\u69b5\\u0200acit\\u2d95\\u2d98\\u2da5\\u2da8r\\xf2\\u1a80\\u0100ir\\u2d9d\\u2da0r;\\u69beoss;\\u69bbn\\xe5\\u0e52;\\u69c0\\u0180aei\\u2db1\\u2db5\\u2db9cr;\\u414dga;\\u43c9\\u0180cdn\\u2dc0\\u2dc5\\u01cdron;\\u43bf;\\u69b6pf;\\uc000\\ud835\\udd60\\u0180ael\\u2dd4\\u2dd7\\u01d2r;\\u69b7rp;\\u69b9\\u0380;adiosv\\u2dea\\u2deb\\u2dee\\u2e08\\u2e0d\\u2e10\\u2e16\\u6228r\\xf2\\u1a86\\u0200;efm\\u2df7\\u2df8\\u2e02\\u2e05\\u6a5dr\\u0100;o\\u2dfe\\u2dff\\u6134f\\xbb\\u2dff\\u803b\\xaa\\u40aa\\u803b\\xba\\u40bagof;\\u62b6r;\\u6a56lope;\\u6a57;\\u6a5b\\u0180clo\\u2e1f\\u2e21\\u2e27\\xf2\\u2e01ash\\u803b\\xf8\\u40f8l;\\u6298i\\u016c\\u2e2f\\u2e34de\\u803b\\xf5\\u40f5es\\u0100;a\\u01db\\u2e3as;\\u6a36ml\\u803b\\xf6\\u40f6bar;\\u633d\\u0ae1\\u2e5e\\0\\u2e7d\\0\\u2e80\\u2e9d\\0\\u2ea2\\u2eb9\\0\\0\\u2ecb\\u0e9c\\0\\u2f13\\0\\0\\u2f2b\\u2fbc\\0\\u2fc8r\\u0200;ast\\u0403\\u2e67\\u2e72\\u0e85\\u8100\\xb6;l\\u2e6d\\u2e6e\\u40b6le\\xec\\u0403\\u0269\\u2e78\\0\\0\\u2e7bm;\\u6af3;\\u6afdy;\\u443fr\\u0280cimpt\\u2e8b\\u2e8f\\u2e93\\u1865\\u2e97nt;\\u4025od;\\u402eil;\\u6030enk;\\u6031r;\\uc000\\ud835\\udd2d\\u0180imo\\u2ea8\\u2eb0\\u2eb4\\u0100;v\\u2ead\\u2eae\\u43c6;\\u43d5ma\\xf4\\u0a76ne;\\u660e\\u0180;tv\\u2ebf\\u2ec0\\u2ec8\\u43c0chfork\\xbb\\u1ffd;\\u43d6\\u0100au\\u2ecf\\u2edfn\\u0100ck\\u2ed5\\u2eddk\\u0100;h\\u21f4\\u2edb;\\u610e\\xf6\\u21f4s\\u0480;abcdemst\\u2ef3\\u2ef4\\u1908\\u2ef9\\u2efd\\u2f04\\u2f06\\u2f0a\\u2f0e\\u402bcir;\\u6a23ir;\\u6a22\\u0100ou\\u1d40\\u2f02;\\u6a25;\\u6a72n\\u80bb\\xb1\\u0e9dim;\\u6a26wo;\\u6a27\\u0180ipu\\u2f19\\u2f20\\u2f25ntint;\\u6a15f;\\uc000\\ud835\\udd61nd\\u803b\\xa3\\u40a3\\u0500;Eaceinosu\\u0ec8\\u2f3f\\u2f41\\u2f44\\u2f47\\u2f81\\u2f89\\u2f92\\u2f7e\\u2fb6;\\u6ab3p;\\u6ab7u\\xe5\\u0ed9\\u0100;c\\u0ece\\u2f4c\\u0300;acens\\u0ec8\\u2f59\\u2f5f\\u2f66\\u2f68\\u2f7eppro\\xf8\\u2f43urlye\\xf1\\u0ed9\\xf1\\u0ece\\u0180aes\\u2f6f\\u2f76\\u2f7approx;\\u6ab9qq;\\u6ab5im;\\u62e8i\\xed\\u0edfme\\u0100;s\\u2f88\\u0eae\\u6032\\u0180Eas\\u2f78\\u2f90\\u2f7a\\xf0\\u2f75\\u0180dfp\\u0eec\\u2f99\\u2faf\\u0180als\\u2fa0\\u2fa5\\u2faalar;\\u632eine;\\u6312urf;\\u6313\\u0100;t\\u0efb\\u2fb4\\xef\\u0efbrel;\\u62b0\\u0100ci\\u2fc0\\u2fc5r;\\uc000\\ud835\\udcc5;\\u43c8ncsp;\\u6008\\u0300fiopsu\\u2fda\\u22e2\\u2fdf\\u2fe5\\u2feb\\u2ff1r;\\uc000\\ud835\\udd2epf;\\uc000\\ud835\\udd62rime;\\u6057cr;\\uc000\\ud835\\udcc6\\u0180aeo\\u2ff8\\u3009\\u3013t\\u0100ei\\u2ffe\\u3005rnion\\xf3\\u06b0nt;\\u6a16st\\u0100;e\\u3010\\u3011\\u403f\\xf1\\u1f19\\xf4\\u0f14\\u0a80ABHabcdefhilmnoprstux\\u3040\\u3051\\u3055\\u3059\\u30e0\\u310e\\u312b\\u3147\\u3162\\u3172\\u318e\\u3206\\u3215\\u3224\\u3229\\u3258\\u326e\\u3272\\u3290\\u32b0\\u32b7\\u0180art\\u3047\\u304a\\u304cr\\xf2\\u10b3\\xf2\\u03ddail;\\u691car\\xf2\\u1c65ar;\\u6964\\u0380cdenqrt\\u3068\\u3075\\u3078\\u307f\\u308f\\u3094\\u30cc\\u0100eu\\u306d\\u3071;\\uc000\\u223d\\u0331te;\\u4155i\\xe3\\u116emptyv;\\u69b3g\\u0200;del\\u0fd1\\u3089\\u308b\\u308d;\\u6992;\\u69a5\\xe5\\u0fd1uo\\u803b\\xbb\\u40bbr\\u0580;abcfhlpstw\\u0fdc\\u30ac\\u30af\\u30b7\\u30b9\\u30bc\\u30be\\u30c0\\u30c3\\u30c7\\u30cap;\\u6975\\u0100;f\\u0fe0\\u30b4s;\\u6920;\\u6933s;\\u691e\\xeb\\u225d\\xf0\\u272el;\\u6945im;\\u6974l;\\u61a3;\\u619d\\u0100ai\\u30d1\\u30d5il;\\u691ao\\u0100;n\\u30db\\u30dc\\u6236al\\xf3\\u0f1e\\u0180abr\\u30e7\\u30ea\\u30eer\\xf2\\u17e5rk;\\u6773\\u0100ak\\u30f3\\u30fdc\\u0100ek\\u30f9\\u30fb;\\u407d;\\u405d\\u0100es\\u3102\\u3104;\\u698cl\\u0100du\\u310a\\u310c;\\u698e;\\u6990\\u0200aeuy\\u3117\\u311c\\u3127\\u3129ron;\\u4159\\u0100di\\u3121\\u3125il;\\u4157\\xec\\u0ff2\\xe2\\u30fa;\\u4440\\u0200clqs\\u3134\\u3137\\u313d\\u3144a;\\u6937dhar;\\u6969uo\\u0100;r\\u020e\\u020dh;\\u61b3\\u0180acg\\u314e\\u315f\\u0f44l\\u0200;ips\\u0f78\\u3158\\u315b\\u109cn\\xe5\\u10bbar\\xf4\\u0fa9t;\\u65ad\\u0180ilr\\u3169\\u1023\\u316esht;\\u697d;\\uc000\\ud835\\udd2f\\u0100ao\\u3177\\u3186r\\u0100du\\u317d\\u317f\\xbb\\u047b\\u0100;l\\u1091\\u3184;\\u696c\\u0100;v\\u318b\\u318c\\u43c1;\\u43f1\\u0180gns\\u3195\\u31f9\\u31fcht\\u0300ahlrst\\u31a4\\u31b0\\u31c2\\u31d8\\u31e4\\u31eerrow\\u0100;t\\u0fdc\\u31ada\\xe9\\u30c8arpoon\\u0100du\\u31bb\\u31bfow\\xee\\u317ep\\xbb\\u1092eft\\u0100ah\\u31ca\\u31d0rrow\\xf3\\u0feaarpoon\\xf3\\u0551ightarrows;\\u61c9quigarro\\xf7\\u30cbhreetimes;\\u62ccg;\\u42daingdotse\\xf1\\u1f32\\u0180ahm\\u320d\\u3210\\u3213r\\xf2\\u0feaa\\xf2\\u0551;\\u600foust\\u0100;a\\u321e\\u321f\\u63b1che\\xbb\\u321fmid;\\u6aee\\u0200abpt\\u3232\\u323d\\u3240\\u3252\\u0100nr\\u3237\\u323ag;\\u67edr;\\u61fer\\xeb\\u1003\\u0180afl\\u3247\\u324a\\u324er;\\u6986;\\uc000\\ud835\\udd63us;\\u6a2eimes;\\u6a35\\u0100ap\\u325d\\u3267r\\u0100;g\\u3263\\u3264\\u4029t;\\u6994olint;\\u6a12ar\\xf2\\u31e3\\u0200achq\\u327b\\u3280\\u10bc\\u3285quo;\\u603ar;\\uc000\\ud835\\udcc7\\u0100bu\\u30fb\\u328ao\\u0100;r\\u0214\\u0213\\u0180hir\\u3297\\u329b\\u32a0re\\xe5\\u31f8mes;\\u62cai\\u0200;efl\\u32aa\\u1059\\u1821\\u32ab\\u65b9tri;\\u69celuhar;\\u6968;\\u611e\\u0d61\\u32d5\\u32db\\u32df\\u332c\\u3338\\u3371\\0\\u337a\\u33a4\\0\\0\\u33ec\\u33f0\\0\\u3428\\u3448\\u345a\\u34ad\\u34b1\\u34ca\\u34f1\\0\\u3616\\0\\0\\u3633cute;\\u415bqu\\xef\\u27ba\\u0500;Eaceinpsy\\u11ed\\u32f3\\u32f5\\u32ff\\u3302\\u330b\\u330f\\u331f\\u3326\\u3329;\\u6ab4\\u01f0\\u32fa\\0\\u32fc;\\u6ab8on;\\u4161u\\xe5\\u11fe\\u0100;d\\u11f3\\u3307il;\\u415frc;\\u415d\\u0180Eas\\u3316\\u3318\\u331b;\\u6ab6p;\\u6abaim;\\u62e9olint;\\u6a13i\\xed\\u1204;\\u4441ot\\u0180;be\\u3334\\u1d47\\u3335\\u62c5;\\u6a66\\u0380Aacmstx\\u3346\\u334a\\u3357\\u335b\\u335e\\u3363\\u336drr;\\u61d8r\\u0100hr\\u3350\\u3352\\xeb\\u2228\\u0100;o\\u0a36\\u0a34t\\u803b\\xa7\\u40a7i;\\u403bwar;\\u6929m\\u0100in\\u3369\\xf0nu\\xf3\\xf1t;\\u6736r\\u0100;o\\u3376\\u2055\\uc000\\ud835\\udd30\\u0200acoy\\u3382\\u3386\\u3391\\u33a0rp;\\u666f\\u0100hy\\u338b\\u338fcy;\\u4449;\\u4448rt\\u026d\\u3399\\0\\0\\u339ci\\xe4\\u1464ara\\xec\\u2e6f\\u803b\\xad\\u40ad\\u0100gm\\u33a8\\u33b4ma\\u0180;fv\\u33b1\\u33b2\\u33b2\\u43c3;\\u43c2\\u0400;deglnpr\\u12ab\\u33c5\\u33c9\\u33ce\\u33d6\\u33de\\u33e1\\u33e6ot;\\u6a6a\\u0100;q\\u12b1\\u12b0\\u0100;E\\u33d3\\u33d4\\u6a9e;\\u6aa0\\u0100;E\\u33db\\u33dc\\u6a9d;\\u6a9fe;\\u6246lus;\\u6a24arr;\\u6972ar\\xf2\\u113d\\u0200aeit\\u33f8\\u3408\\u340f\\u3417\\u0100ls\\u33fd\\u3404lsetm\\xe9\\u336ahp;\\u6a33parsl;\\u69e4\\u0100dl\\u1463\\u3414e;\\u6323\\u0100;e\\u341c\\u341d\\u6aaa\\u0100;s\\u3422\\u3423\\u6aac;\\uc000\\u2aac\\ufe00\\u0180flp\\u342e\\u3433\\u3442tcy;\\u444c\\u0100;b\\u3438\\u3439\\u402f\\u0100;a\\u343e\\u343f\\u69c4r;\\u633ff;\\uc000\\ud835\\udd64a\\u0100dr\\u344d\\u0402es\\u0100;u\\u3454\\u3455\\u6660it\\xbb\\u3455\\u0180csu\\u3460\\u3479\\u349f\\u0100au\\u3465\\u346fp\\u0100;s\\u1188\\u346b;\\uc000\\u2293\\ufe00p\\u0100;s\\u11b4\\u3475;\\uc000\\u2294\\ufe00u\\u0100bp\\u347f\\u348f\\u0180;es\\u1197\\u119c\\u3486et\\u0100;e\\u1197\\u348d\\xf1\\u119d\\u0180;es\\u11a8\\u11ad\\u3496et\\u0100;e\\u11a8\\u349d\\xf1\\u11ae\\u0180;af\\u117b\\u34a6\\u05b0r\\u0165\\u34ab\\u05b1\\xbb\\u117car\\xf2\\u1148\\u0200cemt\\u34b9\\u34be\\u34c2\\u34c5r;\\uc000\\ud835\\udcc8tm\\xee\\xf1i\\xec\\u3415ar\\xe6\\u11be\\u0100ar\\u34ce\\u34d5r\\u0100;f\\u34d4\\u17bf\\u6606\\u0100an\\u34da\\u34edight\\u0100ep\\u34e3\\u34eapsilo\\xee\\u1ee0h\\xe9\\u2eafs\\xbb\\u2852\\u0280bcmnp\\u34fb\\u355e\\u1209\\u358b\\u358e\\u0480;Edemnprs\\u350e\\u350f\\u3511\\u3515\\u351e\\u3523\\u352c\\u3531\\u3536\\u6282;\\u6ac5ot;\\u6abd\\u0100;d\\u11da\\u351aot;\\u6ac3ult;\\u6ac1\\u0100Ee\\u3528\\u352a;\\u6acb;\\u628alus;\\u6abfarr;\\u6979\\u0180eiu\\u353d\\u3552\\u3555t\\u0180;en\\u350e\\u3545\\u354bq\\u0100;q\\u11da\\u350feq\\u0100;q\\u352b\\u3528m;\\u6ac7\\u0100bp\\u355a\\u355c;\\u6ad5;\\u6ad3c\\u0300;acens\\u11ed\\u356c\\u3572\\u3579\\u357b\\u3326ppro\\xf8\\u32faurlye\\xf1\\u11fe\\xf1\\u11f3\\u0180aes\\u3582\\u3588\\u331bppro\\xf8\\u331aq\\xf1\\u3317g;\\u666a\\u0680123;Edehlmnps\\u35a9\\u35ac\\u35af\\u121c\\u35b2\\u35b4\\u35c0\\u35c9\\u35d5\\u35da\\u35df\\u35e8\\u35ed\\u803b\\xb9\\u40b9\\u803b\\xb2\\u40b2\\u803b\\xb3\\u40b3;\\u6ac6\\u0100os\\u35b9\\u35bct;\\u6abeub;\\u6ad8\\u0100;d\\u1222\\u35c5ot;\\u6ac4s\\u0100ou\\u35cf\\u35d2l;\\u67c9b;\\u6ad7arr;\\u697bult;\\u6ac2\\u0100Ee\\u35e4\\u35e6;\\u6acc;\\u628blus;\\u6ac0\\u0180eiu\\u35f4\\u3609\\u360ct\\u0180;en\\u121c\\u35fc\\u3602q\\u0100;q\\u1222\\u35b2eq\\u0100;q\\u35e7\\u35e4m;\\u6ac8\\u0100bp\\u3611\\u3613;\\u6ad4;\\u6ad6\\u0180Aan\\u361c\\u3620\\u362drr;\\u61d9r\\u0100hr\\u3626\\u3628\\xeb\\u222e\\u0100;o\\u0a2b\\u0a29war;\\u692alig\\u803b\\xdf\\u40df\\u0be1\\u3651\\u365d\\u3660\\u12ce\\u3673\\u3679\\0\\u367e\\u36c2\\0\\0\\0\\0\\0\\u36db\\u3703\\0\\u3709\\u376c\\0\\0\\0\\u3787\\u0272\\u3656\\0\\0\\u365bget;\\u6316;\\u43c4r\\xeb\\u0e5f\\u0180aey\\u3666\\u366b\\u3670ron;\\u4165dil;\\u4163;\\u4442lrec;\\u6315r;\\uc000\\ud835\\udd31\\u0200eiko\\u3686\\u369d\\u36b5\\u36bc\\u01f2\\u368b\\0\\u3691e\\u01004f\\u1284\\u1281a\\u0180;sv\\u3698\\u3699\\u369b\\u43b8ym;\\u43d1\\u0100cn\\u36a2\\u36b2k\\u0100as\\u36a8\\u36aeppro\\xf8\\u12c1im\\xbb\\u12acs\\xf0\\u129e\\u0100as\\u36ba\\u36ae\\xf0\\u12c1rn\\u803b\\xfe\\u40fe\\u01ec\\u031f\\u36c6\\u22e7es\\u8180\\xd7;bd\\u36cf\\u36d0\\u36d8\\u40d7\\u0100;a\\u190f\\u36d5r;\\u6a31;\\u6a30\\u0180eps\\u36e1\\u36e3\\u3700\\xe1\\u2a4d\\u0200;bcf\\u0486\\u36ec\\u36f0\\u36f4ot;\\u6336ir;\\u6af1\\u0100;o\\u36f9\\u36fc\\uc000\\ud835\\udd65rk;\\u6ada\\xe1\\u3362rime;\\u6034\\u0180aip\\u370f\\u3712\\u3764d\\xe5\\u1248\\u0380adempst\\u3721\\u374d\\u3740\\u3751\\u3757\\u375c\\u375fngle\\u0280;dlqr\\u3730\\u3731\\u3736\\u3740\\u3742\\u65b5own\\xbb\\u1dbbeft\\u0100;e\\u2800\\u373e\\xf1\\u092e;\\u625cight\\u0100;e\\u32aa\\u374b\\xf1\\u105aot;\\u65ecinus;\\u6a3alus;\\u6a39b;\\u69cdime;\\u6a3bezium;\\u63e2\\u0180cht\\u3772\\u377d\\u3781\\u0100ry\\u3777\\u377b;\\uc000\\ud835\\udcc9;\\u4446cy;\\u445brok;\\u4167\\u0100io\\u378b\\u378ex\\xf4\\u1777head\\u0100lr\\u3797\\u37a0eftarro\\xf7\\u084fightarrow\\xbb\\u0f5d\\u0900AHabcdfghlmoprstuw\\u37d0\\u37d3\\u37d7\\u37e4\\u37f0\\u37fc\\u380e\\u381c\\u3823\\u3834\\u3851\\u385d\\u386b\\u38a9\\u38cc\\u38d2\\u38ea\\u38f6r\\xf2\\u03edar;\\u6963\\u0100cr\\u37dc\\u37e2ute\\u803b\\xfa\\u40fa\\xf2\\u1150r\\u01e3\\u37ea\\0\\u37edy;\\u445eve;\\u416d\\u0100iy\\u37f5\\u37farc\\u803b\\xfb\\u40fb;\\u4443\\u0180abh\\u3803\\u3806\\u380br\\xf2\\u13adlac;\\u4171a\\xf2\\u13c3\\u0100ir\\u3813\\u3818sht;\\u697e;\\uc000\\ud835\\udd32rave\\u803b\\xf9\\u40f9\\u0161\\u3827\\u3831r\\u0100lr\\u382c\\u382e\\xbb\\u0957\\xbb\\u1083lk;\\u6580\\u0100ct\\u3839\\u384d\\u026f\\u383f\\0\\0\\u384arn\\u0100;e\\u3845\\u3846\\u631cr\\xbb\\u3846op;\\u630fri;\\u65f8\\u0100al\\u3856\\u385acr;\\u416b\\u80bb\\xa8\\u0349\\u0100gp\\u3862\\u3866on;\\u4173f;\\uc000\\ud835\\udd66\\u0300adhlsu\\u114b\\u3878\\u387d\\u1372\\u3891\\u38a0own\\xe1\\u13b3arpoon\\u0100lr\\u3888\\u388cef\\xf4\\u382digh\\xf4\\u382fi\\u0180;hl\\u3899\\u389a\\u389c\\u43c5\\xbb\\u13faon\\xbb\\u389aparrows;\\u61c8\\u0180cit\\u38b0\\u38c4\\u38c8\\u026f\\u38b6\\0\\0\\u38c1rn\\u0100;e\\u38bc\\u38bd\\u631dr\\xbb\\u38bdop;\\u630eng;\\u416fri;\\u65f9cr;\\uc000\\ud835\\udcca\\u0180dir\\u38d9\\u38dd\\u38e2ot;\\u62f0lde;\\u4169i\\u0100;f\\u3730\\u38e8\\xbb\\u1813\\u0100am\\u38ef\\u38f2r\\xf2\\u38a8l\\u803b\\xfc\\u40fcangle;\\u69a7\\u0780ABDacdeflnoprsz\\u391c\\u391f\\u3929\\u392d\\u39b5\\u39b8\\u39bd\\u39df\\u39e4\\u39e8\\u39f3\\u39f9\\u39fd\\u3a01\\u3a20r\\xf2\\u03f7ar\\u0100;v\\u3926\\u3927\\u6ae8;\\u6ae9as\\xe8\\u03e1\\u0100nr\\u3932\\u3937grt;\\u699c\\u0380eknprst\\u34e3\\u3946\\u394b\\u3952\\u395d\\u3964\\u3996app\\xe1\\u2415othin\\xe7\\u1e96\\u0180hir\\u34eb\\u2ec8\\u3959op\\xf4\\u2fb5\\u0100;h\\u13b7\\u3962\\xef\\u318d\\u0100iu\\u3969\\u396dgm\\xe1\\u33b3\\u0100bp\\u3972\\u3984setneq\\u0100;q\\u397d\\u3980\\uc000\\u228a\\ufe00;\\uc000\\u2acb\\ufe00setneq\\u0100;q\\u398f\\u3992\\uc000\\u228b\\ufe00;\\uc000\\u2acc\\ufe00\\u0100hr\\u399b\\u399fet\\xe1\\u369ciangle\\u0100lr\\u39aa\\u39afeft\\xbb\\u0925ight\\xbb\\u1051y;\\u4432ash\\xbb\\u1036\\u0180elr\\u39c4\\u39d2\\u39d7\\u0180;be\\u2dea\\u39cb\\u39cfar;\\u62bbq;\\u625alip;\\u62ee\\u0100bt\\u39dc\\u1468a\\xf2\\u1469r;\\uc000\\ud835\\udd33tr\\xe9\\u39aesu\\u0100bp\\u39ef\\u39f1\\xbb\\u0d1c\\xbb\\u0d59pf;\\uc000\\ud835\\udd67ro\\xf0\\u0efbtr\\xe9\\u39b4\\u0100cu\\u3a06\\u3a0br;\\uc000\\ud835\\udccb\\u0100bp\\u3a10\\u3a18n\\u0100Ee\\u3980\\u3a16\\xbb\\u397en\\u0100Ee\\u3992\\u3a1e\\xbb\\u3990igzag;\\u699a\\u0380cefoprs\\u3a36\\u3a3b\\u3a56\\u3a5b\\u3a54\\u3a61\\u3a6airc;\\u4175\\u0100di\\u3a40\\u3a51\\u0100bg\\u3a45\\u3a49ar;\\u6a5fe\\u0100;q\\u15fa\\u3a4f;\\u6259erp;\\u6118r;\\uc000\\ud835\\udd34pf;\\uc000\\ud835\\udd68\\u0100;e\\u1479\\u3a66at\\xe8\\u1479cr;\\uc000\\ud835\\udccc\\u0ae3\\u178e\\u3a87\\0\\u3a8b\\0\\u3a90\\u3a9b\\0\\0\\u3a9d\\u3aa8\\u3aab\\u3aaf\\0\\0\\u3ac3\\u3ace\\0\\u3ad8\\u17dc\\u17dftr\\xe9\\u17d1r;\\uc000\\ud835\\udd35\\u0100Aa\\u3a94\\u3a97r\\xf2\\u03c3r\\xf2\\u09f6;\\u43be\\u0100Aa\\u3aa1\\u3aa4r\\xf2\\u03b8r\\xf2\\u09eba\\xf0\\u2713is;\\u62fb\\u0180dpt\\u17a4\\u3ab5\\u3abe\\u0100fl\\u3aba\\u17a9;\\uc000\\ud835\\udd69im\\xe5\\u17b2\\u0100Aa\\u3ac7\\u3acar\\xf2\\u03cer\\xf2\\u0a01\\u0100cq\\u3ad2\\u17b8r;\\uc000\\ud835\\udccd\\u0100pt\\u17d6\\u3adcr\\xe9\\u17d4\\u0400acefiosu\\u3af0\\u3afd\\u3b08\\u3b0c\\u3b11\\u3b15\\u3b1b\\u3b21c\\u0100uy\\u3af6\\u3afbte\\u803b\\xfd\\u40fd;\\u444f\\u0100iy\\u3b02\\u3b06rc;\\u4177;\\u444bn\\u803b\\xa5\\u40a5r;\\uc000\\ud835\\udd36cy;\\u4457pf;\\uc000\\ud835\\udd6acr;\\uc000\\ud835\\udcce\\u0100cm\\u3b26\\u3b29y;\\u444el\\u803b\\xff\\u40ff\\u0500acdefhiosw\\u3b42\\u3b48\\u3b54\\u3b58\\u3b64\\u3b69\\u3b6d\\u3b74\\u3b7a\\u3b80cute;\\u417a\\u0100ay\\u3b4d\\u3b52ron;\\u417e;\\u4437ot;\\u417c\\u0100et\\u3b5d\\u3b61tr\\xe6\\u155fa;\\u43b6r;\\uc000\\ud835\\udd37cy;\\u4436grarr;\\u61ddpf;\\uc000\\ud835\\udd6bcr;\\uc000\\ud835\\udccf\\u0100jn\\u3b85\\u3b87;\\u600dj;\\u600c\"\n    .split(\"\")\n    .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-html.js.map","// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\nvar _a;\nconst decodeMap = new Map([\n    [0, 65533],\n    // C1 Unicode control character reference replacements\n    [128, 8364],\n    [130, 8218],\n    [131, 402],\n    [132, 8222],\n    [133, 8230],\n    [134, 8224],\n    [135, 8225],\n    [136, 710],\n    [137, 8240],\n    [138, 352],\n    [139, 8249],\n    [140, 338],\n    [142, 381],\n    [145, 8216],\n    [146, 8217],\n    [147, 8220],\n    [148, 8221],\n    [149, 8226],\n    [150, 8211],\n    [151, 8212],\n    [152, 732],\n    [153, 8482],\n    [154, 353],\n    [155, 8250],\n    [156, 339],\n    [158, 382],\n    [159, 376],\n]);\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nexport const fromCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins\n(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {\n    let output = \"\";\n    if (codePoint > 0xffff) {\n        codePoint -= 0x10000;\n        output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);\n        codePoint = 0xdc00 | (codePoint & 0x3ff);\n    }\n    output += String.fromCharCode(codePoint);\n    return output;\n};\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nexport function replaceCodePoint(codePoint) {\n    var _a;\n    if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {\n        return 0xfffd;\n    }\n    return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;\n}\n/**\n * Replace the code point if relevant, then convert it to a string.\n *\n * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.\n * @param codePoint The code point to decode.\n * @returns The decoded code point.\n */\nexport default function decodeCodePoint(codePoint) {\n    return fromCodePoint(replaceCodePoint(codePoint));\n}\n//# sourceMappingURL=decode_codepoint.js.map","import htmlDecodeTree from \"./generated/decode-data-html.js\";\nimport xmlDecodeTree from \"./generated/decode-data-xml.js\";\nimport decodeCodePoint, { replaceCodePoint, fromCodePoint, } from \"./decode_codepoint.js\";\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree, xmlDecodeTree, decodeCodePoint };\nexport { replaceCodePoint, fromCodePoint } from \"./decode_codepoint.js\";\nvar CharCodes;\n(function (CharCodes) {\n    CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n    CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n    CharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n    CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n    CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n    CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n    CharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n    CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n    CharCodes[CharCodes[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n    CharCodes[CharCodes[\"UPPER_A\"] = 65] = \"UPPER_A\";\n    CharCodes[CharCodes[\"UPPER_F\"] = 70] = \"UPPER_F\";\n    CharCodes[CharCodes[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n})(CharCodes || (CharCodes = {}));\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 0b100000;\nexport var BinTrieFlags;\n(function (BinTrieFlags) {\n    BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n    BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 16256] = \"BRANCH_LENGTH\";\n    BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags || (BinTrieFlags = {}));\nfunction isNumber(code) {\n    return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\nfunction isHexadecimalCharacter(code) {\n    return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n        (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));\n}\nfunction isAsciiAlphaNumeric(code) {\n    return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n        (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n        isNumber(code));\n}\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code) {\n    return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\nvar EntityDecoderState;\n(function (EntityDecoderState) {\n    EntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n    EntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n    EntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n    EntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n    EntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\nexport var DecodingMode;\n(function (DecodingMode) {\n    /** Entities in text nodes that can end with any character. */\n    DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n    /** Only allow entities terminated with a semicolon. */\n    DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n    /** Entities in attributes have limitations on ending characters. */\n    DecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode || (DecodingMode = {}));\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n    constructor(\n    /** The tree used to decode entities. */\n    decodeTree, \n    /**\n     * The function that is called when a codepoint is decoded.\n     *\n     * For multi-byte named entities, this will be called multiple times,\n     * with the second codepoint, and the same `consumed` value.\n     *\n     * @param codepoint The decoded codepoint.\n     * @param consumed The number of bytes consumed by the decoder.\n     */\n    emitCodePoint, \n    /** An object that is used to produce errors. */\n    errors) {\n        this.decodeTree = decodeTree;\n        this.emitCodePoint = emitCodePoint;\n        this.errors = errors;\n        /** The current state of the decoder. */\n        this.state = EntityDecoderState.EntityStart;\n        /** Characters that were consumed while parsing an entity. */\n        this.consumed = 1;\n        /**\n         * The result of the entity.\n         *\n         * Either the result index of a numeric entity, or the codepoint of a\n         * numeric entity.\n         */\n        this.result = 0;\n        /** The current index in the decode tree. */\n        this.treeIndex = 0;\n        /** The number of characters that were consumed in excess. */\n        this.excess = 1;\n        /** The mode in which the decoder is operating. */\n        this.decodeMode = DecodingMode.Strict;\n    }\n    /** Resets the instance to make it reusable. */\n    startEntity(decodeMode) {\n        this.decodeMode = decodeMode;\n        this.state = EntityDecoderState.EntityStart;\n        this.result = 0;\n        this.treeIndex = 0;\n        this.excess = 1;\n        this.consumed = 1;\n    }\n    /**\n     * Write an entity to the decoder. This can be called multiple times with partial entities.\n     * If the entity is incomplete, the decoder will return -1.\n     *\n     * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n     * entity is incomplete, and resume when the next string is written.\n     *\n     * @param string The string containing the entity (or a continuation of the entity).\n     * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    write(str, offset) {\n        switch (this.state) {\n            case EntityDecoderState.EntityStart: {\n                if (str.charCodeAt(offset) === CharCodes.NUM) {\n                    this.state = EntityDecoderState.NumericStart;\n                    this.consumed += 1;\n                    return this.stateNumericStart(str, offset + 1);\n                }\n                this.state = EntityDecoderState.NamedEntity;\n                return this.stateNamedEntity(str, offset);\n            }\n            case EntityDecoderState.NumericStart: {\n                return this.stateNumericStart(str, offset);\n            }\n            case EntityDecoderState.NumericDecimal: {\n                return this.stateNumericDecimal(str, offset);\n            }\n            case EntityDecoderState.NumericHex: {\n                return this.stateNumericHex(str, offset);\n            }\n            case EntityDecoderState.NamedEntity: {\n                return this.stateNamedEntity(str, offset);\n            }\n        }\n    }\n    /**\n     * Switches between the numeric decimal and hexadecimal states.\n     *\n     * Equivalent to the `Numeric character reference state` in the HTML spec.\n     *\n     * @param str The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    stateNumericStart(str, offset) {\n        if (offset >= str.length) {\n            return -1;\n        }\n        if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n            this.state = EntityDecoderState.NumericHex;\n            this.consumed += 1;\n            return this.stateNumericHex(str, offset + 1);\n        }\n        this.state = EntityDecoderState.NumericDecimal;\n        return this.stateNumericDecimal(str, offset);\n    }\n    addToNumericResult(str, start, end, base) {\n        if (start !== end) {\n            const digitCount = end - start;\n            this.result =\n                this.result * Math.pow(base, digitCount) +\n                    parseInt(str.substr(start, digitCount), base);\n            this.consumed += digitCount;\n        }\n    }\n    /**\n     * Parses a hexadecimal numeric entity.\n     *\n     * Equivalent to the `Hexademical character reference state` in the HTML spec.\n     *\n     * @param str The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    stateNumericHex(str, offset) {\n        const startIdx = offset;\n        while (offset < str.length) {\n            const char = str.charCodeAt(offset);\n            if (isNumber(char) || isHexadecimalCharacter(char)) {\n                offset += 1;\n            }\n            else {\n                this.addToNumericResult(str, startIdx, offset, 16);\n                return this.emitNumericEntity(char, 3);\n            }\n        }\n        this.addToNumericResult(str, startIdx, offset, 16);\n        return -1;\n    }\n    /**\n     * Parses a decimal numeric entity.\n     *\n     * Equivalent to the `Decimal character reference state` in the HTML spec.\n     *\n     * @param str The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    stateNumericDecimal(str, offset) {\n        const startIdx = offset;\n        while (offset < str.length) {\n            const char = str.charCodeAt(offset);\n            if (isNumber(char)) {\n                offset += 1;\n            }\n            else {\n                this.addToNumericResult(str, startIdx, offset, 10);\n                return this.emitNumericEntity(char, 2);\n            }\n        }\n        this.addToNumericResult(str, startIdx, offset, 10);\n        return -1;\n    }\n    /**\n     * Validate and emit a numeric entity.\n     *\n     * Implements the logic from the `Hexademical character reference start\n     * state` and `Numeric character reference end state` in the HTML spec.\n     *\n     * @param lastCp The last code point of the entity. Used to see if the\n     *               entity was terminated with a semicolon.\n     * @param expectedLength The minimum number of characters that should be\n     *                       consumed. Used to validate that at least one digit\n     *                       was consumed.\n     * @returns The number of characters that were consumed.\n     */\n    emitNumericEntity(lastCp, expectedLength) {\n        var _a;\n        // Ensure we consumed at least one digit.\n        if (this.consumed <= expectedLength) {\n            (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n            return 0;\n        }\n        // Figure out if this is a legit end of the entity\n        if (lastCp === CharCodes.SEMI) {\n            this.consumed += 1;\n        }\n        else if (this.decodeMode === DecodingMode.Strict) {\n            return 0;\n        }\n        this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n        if (this.errors) {\n            if (lastCp !== CharCodes.SEMI) {\n                this.errors.missingSemicolonAfterCharacterReference();\n            }\n            this.errors.validateNumericCharacterReference(this.result);\n        }\n        return this.consumed;\n    }\n    /**\n     * Parses a named entity.\n     *\n     * Equivalent to the `Named character reference state` in the HTML spec.\n     *\n     * @param str The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    stateNamedEntity(str, offset) {\n        const { decodeTree } = this;\n        let current = decodeTree[this.treeIndex];\n        // The mask is the number of bytes of the value, including the current byte.\n        let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n        for (; offset < str.length; offset++, this.excess++) {\n            const char = str.charCodeAt(offset);\n            this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n            if (this.treeIndex < 0) {\n                return this.result === 0 ||\n                    // If we are parsing an attribute\n                    (this.decodeMode === DecodingMode.Attribute &&\n                        // We shouldn't have consumed any characters after the entity,\n                        (valueLength === 0 ||\n                            // And there should be no invalid characters.\n                            isEntityInAttributeInvalidEnd(char)))\n                    ? 0\n                    : this.emitNotTerminatedNamedEntity();\n            }\n            current = decodeTree[this.treeIndex];\n            valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n            // If the branch is a value, store it and continue\n            if (valueLength !== 0) {\n                // If the entity is terminated by a semicolon, we are done.\n                if (char === CharCodes.SEMI) {\n                    return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n                }\n                // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n                if (this.decodeMode !== DecodingMode.Strict) {\n                    this.result = this.treeIndex;\n                    this.consumed += this.excess;\n                    this.excess = 0;\n                }\n            }\n        }\n        return -1;\n    }\n    /**\n     * Emit a named entity that was not terminated with a semicolon.\n     *\n     * @returns The number of characters consumed.\n     */\n    emitNotTerminatedNamedEntity() {\n        var _a;\n        const { result, decodeTree } = this;\n        const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n        this.emitNamedEntityData(result, valueLength, this.consumed);\n        (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();\n        return this.consumed;\n    }\n    /**\n     * Emit a named entity.\n     *\n     * @param result The index of the entity in the decode tree.\n     * @param valueLength The number of bytes in the entity.\n     * @param consumed The number of characters consumed.\n     *\n     * @returns The number of characters consumed.\n     */\n    emitNamedEntityData(result, valueLength, consumed) {\n        const { decodeTree } = this;\n        this.emitCodePoint(valueLength === 1\n            ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH\n            : decodeTree[result + 1], consumed);\n        if (valueLength === 3) {\n            // For multi-byte values, we need to emit the second byte.\n            this.emitCodePoint(decodeTree[result + 2], consumed);\n        }\n        return consumed;\n    }\n    /**\n     * Signal to the parser that the end of the input was reached.\n     *\n     * Remaining data will be emitted and relevant errors will be produced.\n     *\n     * @returns The number of characters consumed.\n     */\n    end() {\n        var _a;\n        switch (this.state) {\n            case EntityDecoderState.NamedEntity: {\n                // Emit a named entity if we have one.\n                return this.result !== 0 &&\n                    (this.decodeMode !== DecodingMode.Attribute ||\n                        this.result === this.treeIndex)\n                    ? this.emitNotTerminatedNamedEntity()\n                    : 0;\n            }\n            // Otherwise, emit a numeric entity if we have one.\n            case EntityDecoderState.NumericDecimal: {\n                return this.emitNumericEntity(0, 2);\n            }\n            case EntityDecoderState.NumericHex: {\n                return this.emitNumericEntity(0, 3);\n            }\n            case EntityDecoderState.NumericStart: {\n                (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n                return 0;\n            }\n            case EntityDecoderState.EntityStart: {\n                // Return 0 if we have no entity.\n                return 0;\n            }\n        }\n    }\n}\n/**\n * Creates a function that decodes entities in a string.\n *\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree) {\n    let ret = \"\";\n    const decoder = new EntityDecoder(decodeTree, (str) => (ret += fromCodePoint(str)));\n    return function decodeWithTrie(str, decodeMode) {\n        let lastIndex = 0;\n        let offset = 0;\n        while ((offset = str.indexOf(\"&\", offset)) >= 0) {\n            ret += str.slice(lastIndex, offset);\n            decoder.startEntity(decodeMode);\n            const len = decoder.write(str, \n            // Skip the \"&\"\n            offset + 1);\n            if (len < 0) {\n                lastIndex = offset + decoder.end();\n                break;\n            }\n            lastIndex = offset + len;\n            // If `len` is 0, skip the current `&` and continue.\n            offset = len === 0 ? lastIndex + 1 : lastIndex;\n        }\n        const result = ret + str.slice(lastIndex);\n        // Make sure we don't keep a reference to the final string.\n        ret = \"\";\n        return result;\n    };\n}\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(decodeTree, current, nodeIdx, char) {\n    const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n    const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n    // Case 1: Single branch encoded in jump offset\n    if (branchCount === 0) {\n        return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;\n    }\n    // Case 2: Multiple branches encoded in jump table\n    if (jumpOffset) {\n        const value = char - jumpOffset;\n        return value < 0 || value >= branchCount\n            ? -1\n            : decodeTree[nodeIdx + value] - 1;\n    }\n    // Case 3: Multiple branches encoded in dictionary\n    // Binary search for the character.\n    let lo = nodeIdx;\n    let hi = lo + branchCount - 1;\n    while (lo <= hi) {\n        const mid = (lo + hi) >>> 1;\n        const midVal = decodeTree[mid];\n        if (midVal < char) {\n            lo = mid + 1;\n        }\n        else if (midVal > char) {\n            hi = mid - 1;\n        }\n        else {\n            return decodeTree[mid + branchCount];\n        }\n    }\n    return -1;\n}\nconst htmlDecoder = getDecoder(htmlDecodeTree);\nconst xmlDecoder = getDecoder(xmlDecodeTree);\n/**\n * Decodes an HTML string.\n *\n * @param str The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(str, mode = DecodingMode.Legacy) {\n    return htmlDecoder(str, mode);\n}\n/**\n * Decodes an HTML string in an attribute.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(str) {\n    return htmlDecoder(str, DecodingMode.Attribute);\n}\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(str) {\n    return htmlDecoder(str, DecodingMode.Strict);\n}\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(str) {\n    return xmlDecoder(str, DecodingMode.Strict);\n}\n//# sourceMappingURL=decode.js.map","// Utilities\n//\n\nimport * as mdurl from 'mdurl'\nimport * as ucmicro from 'uc.micro'\nimport { decodeHTML } from 'entities'\n\nfunction _class (obj) { return Object.prototype.toString.call(obj) }\n\nfunction isString (obj) { return _class(obj) === '[object String]' }\n\nconst _hasOwnProperty = Object.prototype.hasOwnProperty\n\nfunction has (object, key) {\n  return _hasOwnProperty.call(object, key)\n}\n\n// Merge objects\n//\nfunction assign (obj /* from1, from2, from3, ... */) {\n  const sources = Array.prototype.slice.call(arguments, 1)\n\n  sources.forEach(function (source) {\n    if (!source) { return }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be object')\n    }\n\n    Object.keys(source).forEach(function (key) {\n      obj[key] = source[key]\n    })\n  })\n\n  return obj\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt (src, pos, newElements) {\n  return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1))\n}\n\nfunction isValidEntityCode (c) {\n  /* eslint no-bitwise:0 */\n  // broken sequence\n  if (c >= 0xD800 && c <= 0xDFFF) { return false }\n  // never used\n  if (c >= 0xFDD0 && c <= 0xFDEF) { return false }\n  if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false }\n  // control codes\n  if (c >= 0x00 && c <= 0x08) { return false }\n  if (c === 0x0B) { return false }\n  if (c >= 0x0E && c <= 0x1F) { return false }\n  if (c >= 0x7F && c <= 0x9F) { return false }\n  // out of range\n  if (c > 0x10FFFF) { return false }\n  return true\n}\n\nfunction fromCodePoint (c) {\n  /* eslint no-bitwise:0 */\n  if (c > 0xffff) {\n    c -= 0x10000\n    const surrogate1 = 0xd800 + (c >> 10)\n    const surrogate2 = 0xdc00 + (c & 0x3ff)\n\n    return String.fromCharCode(surrogate1, surrogate2)\n  }\n  return String.fromCharCode(c)\n}\n\nconst UNESCAPE_MD_RE  = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_`{|}~])/g\nconst ENTITY_RE       = /&([a-z#][a-z0-9]{1,31});/gi\nconst UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi')\n\nconst DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i\n\nfunction replaceEntityPattern (match, name) {\n  if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n    const code = name[1].toLowerCase() === 'x'\n      ? parseInt(name.slice(2), 16)\n      : parseInt(name.slice(1), 10)\n\n    if (isValidEntityCode(code)) {\n      return fromCodePoint(code)\n    }\n\n    return match\n  }\n\n  const decoded = decodeHTML(match)\n  if (decoded !== match) {\n    return decoded\n  }\n\n  return match\n}\n\n/* function replaceEntities(str) {\n  if (str.indexOf('&') < 0) { return str; }\n\n  return str.replace(ENTITY_RE, replaceEntityPattern);\n} */\n\nfunction unescapeMd (str) {\n  if (str.indexOf('\\\\') < 0) { return str }\n  return str.replace(UNESCAPE_MD_RE, '$1')\n}\n\nfunction unescapeAll (str) {\n  if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str }\n\n  return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n    if (escaped) { return escaped }\n    return replaceEntityPattern(match, entity)\n  })\n}\n\nconst HTML_ESCAPE_TEST_RE = /[&<>\"]/\nconst HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g\nconst HTML_REPLACEMENTS = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;'\n}\n\nfunction replaceUnsafeChar (ch) {\n  return HTML_REPLACEMENTS[ch]\n}\n\nfunction escapeHtml (str) {\n  if (HTML_ESCAPE_TEST_RE.test(str)) {\n    return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar)\n  }\n  return str\n}\n\nconst REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g\n\nfunction escapeRE (str) {\n  return str.replace(REGEXP_ESCAPE_RE, '\\\\$&')\n}\n\nfunction isSpace (code) {\n  switch (code) {\n    case 0x09:\n    case 0x20:\n      return true\n  }\n  return false\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace (code) {\n  if (code >= 0x2000 && code <= 0x200A) { return true }\n  switch (code) {\n    case 0x09: // \\t\n    case 0x0A: // \\n\n    case 0x0B: // \\v\n    case 0x0C: // \\f\n    case 0x0D: // \\r\n    case 0x20:\n    case 0xA0:\n    case 0x1680:\n    case 0x202F:\n    case 0x205F:\n    case 0x3000:\n      return true\n  }\n  return false\n}\n\n/* eslint-disable max-len */\n\n// Currently without astral characters support.\nfunction isPunctChar (ch) {\n  return ucmicro.P.test(ch)\n}\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct (ch) {\n  switch (ch) {\n    case 0x21/* ! */:\n    case 0x22/* \" */:\n    case 0x23/* # */:\n    case 0x24/* $ */:\n    case 0x25/* % */:\n    case 0x26/* & */:\n    case 0x27/* ' */:\n    case 0x28/* ( */:\n    case 0x29/* ) */:\n    case 0x2A/* * */:\n    case 0x2B/* + */:\n    case 0x2C/* , */:\n    case 0x2D/* - */:\n    case 0x2E/* . */:\n    case 0x2F/* / */:\n    case 0x3A/* : */:\n    case 0x3B/* ; */:\n    case 0x3C/* < */:\n    case 0x3D/* = */:\n    case 0x3E/* > */:\n    case 0x3F/* ? */:\n    case 0x40/* @ */:\n    case 0x5B/* [ */:\n    case 0x5C/* \\ */:\n    case 0x5D/* ] */:\n    case 0x5E/* ^ */:\n    case 0x5F/* _ */:\n    case 0x60/* ` */:\n    case 0x7B/* { */:\n    case 0x7C/* | */:\n    case 0x7D/* } */:\n    case 0x7E/* ~ */:\n      return true\n    default:\n      return false\n  }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference (str) {\n  // Trim and collapse whitespace\n  //\n  str = str.trim().replace(/\\s+/g, ' ')\n\n  // In node v10 'ẞ'.toLowerCase() === 'Ṿ', which is presumed to be a bug\n  // fixed in v12 (couldn't find any details).\n  //\n  // So treat this one as a special case\n  // (remove this when node v10 is no longer supported).\n  //\n  if ('ẞ'.toLowerCase() === 'Ṿ') {\n    str = str.replace(/ẞ/g, 'ß')\n  }\n\n  // .toLowerCase().toUpperCase() should get rid of all differences\n  // between letter variants.\n  //\n  // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n  // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n  // İ, ϴ, ẞ, Ω, K, Å - those are already uppercased, but have differently\n  // uppercased versions).\n  //\n  // Here's an example showing how it happens. Lets take greek letter omega:\n  // uppercase U+0398 (Θ), U+03f4 (ϴ) and lowercase U+03b8 (θ), U+03d1 (ϑ)\n  //\n  // Unicode entries:\n  // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n  // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n  // 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n  // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n  //\n  // Case-insensitive comparison should treat all of them as equivalent.\n  //\n  // But .toLowerCase() doesn't change ϑ (it's already lowercase),\n  // and .toUpperCase() doesn't change ϴ (already uppercase).\n  //\n  // Applying first lower then upper case normalizes any character:\n  // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n  //\n  // Note: this is equivalent to unicode case folding; unicode normalization\n  // is a different step that is not required here.\n  //\n  // Final result should be uppercased, because it's later stored in an object\n  // (this avoid a conflict with Object.prototype members,\n  // most notably, `__proto__`)\n  //\n  return str.toLowerCase().toUpperCase()\n}\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nconst lib = { mdurl, ucmicro }\n\nexport {\n  lib,\n  assign,\n  isString,\n  has,\n  unescapeMd,\n  unescapeAll,\n  isValidEntityCode,\n  fromCodePoint,\n  escapeHtml,\n  arrayReplaceAt,\n  isSpace,\n  isWhiteSpace,\n  isMdAsciiPunct,\n  isPunctChar,\n  escapeRE,\n  normalizeReference\n}\n","// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n\nexport default function parseLinkLabel (state, start, disableNested) {\n  let level, found, marker, prevPos\n\n  const max = state.posMax\n  const oldPos = state.pos\n\n  state.pos = start + 1\n  level = 1\n\n  while (state.pos < max) {\n    marker = state.src.charCodeAt(state.pos)\n    if (marker === 0x5D /* ] */) {\n      level--\n      if (level === 0) {\n        found = true\n        break\n      }\n    }\n\n    prevPos = state.pos\n    state.md.inline.skipToken(state)\n    if (marker === 0x5B /* [ */) {\n      if (prevPos === state.pos - 1) {\n        // increase level if we find text `[`, which is not a part of any token\n        level++\n      } else if (disableNested) {\n        state.pos = oldPos\n        return -1\n      }\n    }\n  }\n\n  let labelEnd = -1\n\n  if (found) {\n    labelEnd = state.pos\n  }\n\n  // restore old state\n  state.pos = oldPos\n\n  return labelEnd\n}\n","// Parse link destination\n//\n\nimport { unescapeAll } from '../common/utils.mjs'\n\nexport default function parseLinkDestination (str, start, max) {\n  let code\n  let pos = start\n\n  const result = {\n    ok: false,\n    pos: 0,\n    lines: 0,\n    str: ''\n  }\n\n  if (str.charCodeAt(pos) === 0x3C /* < */) {\n    pos++\n    while (pos < max) {\n      code = str.charCodeAt(pos)\n      if (code === 0x0A /* \\n */) { return result }\n      if (code === 0x3C /* < */) { return result }\n      if (code === 0x3E /* > */) {\n        result.pos = pos + 1\n        result.str = unescapeAll(str.slice(start + 1, pos))\n        result.ok = true\n        return result\n      }\n      if (code === 0x5C /* \\ */ && pos + 1 < max) {\n        pos += 2\n        continue\n      }\n\n      pos++\n    }\n\n    // no closing '>'\n    return result\n  }\n\n  // this should be ... } else { ... branch\n\n  let level = 0\n  while (pos < max) {\n    code = str.charCodeAt(pos)\n\n    if (code === 0x20) { break }\n\n    // ascii control characters\n    if (code < 0x20 || code === 0x7F) { break }\n\n    if (code === 0x5C /* \\ */ && pos + 1 < max) {\n      if (str.charCodeAt(pos + 1) === 0x20) { break }\n      pos += 2\n      continue\n    }\n\n    if (code === 0x28 /* ( */) {\n      level++\n      if (level > 32) { return result }\n    }\n\n    if (code === 0x29 /* ) */) {\n      if (level === 0) { break }\n      level--\n    }\n\n    pos++\n  }\n\n  if (start === pos) { return result }\n  if (level !== 0) { return result }\n\n  result.str = unescapeAll(str.slice(start, pos))\n  result.pos = pos\n  result.ok = true\n  return result\n}\n","// Parse link title\n//\n\nimport { unescapeAll } from '../common/utils.mjs'\n\nexport default function parseLinkTitle (str, start, max) {\n  let code, marker\n  let lines = 0\n  let pos = start\n\n  const result = {\n    ok: false,\n    pos: 0,\n    lines: 0,\n    str: ''\n  }\n\n  if (pos >= max) { return result }\n\n  marker = str.charCodeAt(pos)\n\n  if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return result }\n\n  pos++\n\n  // if opening marker is \"(\", switch it to closing marker \")\"\n  if (marker === 0x28) { marker = 0x29 }\n\n  while (pos < max) {\n    code = str.charCodeAt(pos)\n    if (code === marker) {\n      result.pos = pos + 1\n      result.lines = lines\n      result.str = unescapeAll(str.slice(start + 1, pos))\n      result.ok = true\n      return result\n    } else if (code === 0x28 /* ( */ && marker === 0x29 /* ) */) {\n      return result\n    } else if (code === 0x0A) {\n      lines++\n    } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n      pos++\n      if (str.charCodeAt(pos) === 0x0A) {\n        lines++\n      }\n    }\n\n    pos++\n  }\n\n  return result\n}\n","/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n\nimport { assign, unescapeAll, escapeHtml } from './common/utils.mjs'\n\nconst default_rules = {}\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n  const token = tokens[idx]\n\n  return  '<code' + slf.renderAttrs(token) + '>' +\n          escapeHtml(token.content) +\n          '</code>'\n}\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n  const token = tokens[idx]\n\n  return  '<pre' + slf.renderAttrs(token) + '><code>' +\n          escapeHtml(tokens[idx].content) +\n          '</code></pre>\\n'\n}\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n  const token = tokens[idx]\n  const info = token.info ? unescapeAll(token.info).trim() : ''\n  let langName = ''\n  let langAttrs = ''\n\n  if (info) {\n    const arr = info.split(/(\\s+)/g)\n    langName = arr[0]\n    langAttrs = arr.slice(2).join('')\n  }\n\n  let highlighted\n  if (options.highlight) {\n    highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content)\n  } else {\n    highlighted = escapeHtml(token.content)\n  }\n\n  if (highlighted.indexOf('<pre') === 0) {\n    return highlighted + '\\n'\n  }\n\n  // If language exists, inject class gently, without modifying original token.\n  // May be, one day we will add .deepClone() for token and simplify this part, but\n  // now we prefer to keep things local.\n  if (info) {\n    const i = token.attrIndex('class')\n    const tmpAttrs = token.attrs ? token.attrs.slice() : []\n\n    if (i < 0) {\n      tmpAttrs.push(['class', options.langPrefix + langName])\n    } else {\n      tmpAttrs[i] = tmpAttrs[i].slice()\n      tmpAttrs[i][1] += ' ' + options.langPrefix + langName\n    }\n\n    // Fake token just to render attributes\n    const tmpToken = {\n      attrs: tmpAttrs\n    }\n\n    return `<pre><code${slf.renderAttrs(tmpToken)}>${highlighted}</code></pre>\\n`\n  }\n\n  return `<pre><code${slf.renderAttrs(token)}>${highlighted}</code></pre>\\n`\n}\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n  const token = tokens[idx]\n\n  // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n  // should be placed on proper position for tests.\n  //\n  // Replace content with actual value\n\n  token.attrs[token.attrIndex('alt')][1] =\n    slf.renderInlineAsText(token.children, options, env)\n\n  return slf.renderToken(tokens, idx, options)\n}\n\ndefault_rules.hardbreak = function (tokens, idx, options /*, env */) {\n  return options.xhtmlOut ? '<br />\\n' : '<br>\\n'\n}\ndefault_rules.softbreak = function (tokens, idx, options /*, env */) {\n  return options.breaks ? (options.xhtmlOut ? '<br />\\n' : '<br>\\n') : '\\n'\n}\n\ndefault_rules.text = function (tokens, idx /*, options, env */) {\n  return escapeHtml(tokens[idx].content)\n}\n\ndefault_rules.html_block = function (tokens, idx /*, options, env */) {\n  return tokens[idx].content\n}\ndefault_rules.html_inline = function (tokens, idx /*, options, env */) {\n  return tokens[idx].content\n}\n\n/**\n * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\nfunction Renderer () {\n  /**\n   * Renderer#rules -> Object\n   *\n   * Contains render rules for tokens. Can be updated and extended.\n   *\n   * ##### Example\n   *\n   * ```javascript\n   * var md = require('markdown-it')();\n   *\n   * md.renderer.rules.strong_open  = function () { return '<b>'; };\n   * md.renderer.rules.strong_close = function () { return '</b>'; };\n   *\n   * var result = md.renderInline(...);\n   * ```\n   *\n   * Each rule is called as independent static function with fixed signature:\n   *\n   * ```javascript\n   * function my_token_render(tokens, idx, options, env, renderer) {\n   *   // ...\n   *   return renderedHTML;\n   * }\n   * ```\n   *\n   * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js)\n   * for more details and examples.\n   **/\n  this.rules = assign({}, default_rules)\n}\n\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\nRenderer.prototype.renderAttrs = function renderAttrs (token) {\n  let i, l, result\n\n  if (!token.attrs) { return '' }\n\n  result = ''\n\n  for (i = 0, l = token.attrs.length; i < l; i++) {\n    result += ' ' + escapeHtml(token.attrs[i][0]) + '=\"' + escapeHtml(token.attrs[i][1]) + '\"'\n  }\n\n  return result\n}\n\n/**\n * Renderer.renderToken(tokens, idx, options) -> String\n * - tokens (Array): list of tokens\n * - idx (Numbed): token index to render\n * - options (Object): params of parser instance\n *\n * Default token renderer. Can be overriden by custom function\n * in [[Renderer#rules]].\n **/\nRenderer.prototype.renderToken = function renderToken (tokens, idx, options) {\n  const token = tokens[idx]\n  let result = ''\n\n  // Tight list paragraphs\n  if (token.hidden) {\n    return ''\n  }\n\n  // Insert a newline between hidden paragraph and subsequent opening\n  // block-level tag.\n  //\n  // For example, here we should insert a newline before blockquote:\n  //  - a\n  //    >\n  //\n  if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n    result += '\\n'\n  }\n\n  // Add token name, e.g. `<img`\n  result += (token.nesting === -1 ? '</' : '<') + token.tag\n\n  // Encode attributes, e.g. `<img src=\"foo\"`\n  result += this.renderAttrs(token)\n\n  // Add a slash for self-closing tags, e.g. `<img src=\"foo\" /`\n  if (token.nesting === 0 && options.xhtmlOut) {\n    result += ' /'\n  }\n\n  // Check if we need to add a newline after this tag\n  let needLf = false\n  if (token.block) {\n    needLf = true\n\n    if (token.nesting === 1) {\n      if (idx + 1 < tokens.length) {\n        const nextToken = tokens[idx + 1]\n\n        if (nextToken.type === 'inline' || nextToken.hidden) {\n          // Block-level tag containing an inline tag.\n          //\n          needLf = false\n        } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {\n          // Opening tag + closing tag of the same type. E.g. `<li></li>`.\n          //\n          needLf = false\n        }\n      }\n    }\n  }\n\n  result += needLf ? '>\\n' : '>'\n\n  return result\n}\n\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * The same as [[Renderer.render]], but for single token of `inline` type.\n **/\nRenderer.prototype.renderInline = function (tokens, options, env) {\n  let result = ''\n  const rules = this.rules\n\n  for (let i = 0, len = tokens.length; i < len; i++) {\n    const type = tokens[i].type\n\n    if (typeof rules[type] !== 'undefined') {\n      result += rules[type](tokens, i, options, env, this)\n    } else {\n      result += this.renderToken(tokens, i, options)\n    }\n  }\n\n  return result\n}\n\n/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Special kludge for image `alt` attributes to conform CommonMark spec.\n * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n * instead of simple escaping.\n **/\nRenderer.prototype.renderInlineAsText = function (tokens, options, env) {\n  let result = ''\n\n  for (let i = 0, len = tokens.length; i < len; i++) {\n    switch (tokens[i].type) {\n      case 'text':\n        result += tokens[i].content\n        break\n      case 'image':\n        result += this.renderInlineAsText(tokens[i].children, options, env)\n        break\n      case 'html_inline':\n      case 'html_block':\n        result += tokens[i].content\n        break\n      case 'softbreak':\n      case 'hardbreak':\n        result += '\\n'\n        break\n      default:\n        // all other tokens are skipped\n    }\n  }\n\n  return result\n}\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Takes token stream and generates HTML. Probably, you will never need to call\n * this method directly.\n **/\nRenderer.prototype.render = function (tokens, options, env) {\n  let result = ''\n  const rules = this.rules\n\n  for (let i = 0, len = tokens.length; i < len; i++) {\n    const type = tokens[i].type\n\n    if (type === 'inline') {\n      result += this.renderInline(tokens[i].children, options, env)\n    } else if (typeof rules[type] !== 'undefined') {\n      result += rules[type](tokens, i, options, env, this)\n    } else {\n      result += this.renderToken(tokens, i, options, env)\n    }\n  }\n\n  return result\n}\n\nexport default Renderer\n","/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n\n/**\n * new Ruler()\n **/\nfunction Ruler () {\n  // List of added rules. Each element is:\n  //\n  // {\n  //   name: XXX,\n  //   enabled: Boolean,\n  //   fn: Function(),\n  //   alt: [ name2, name3 ]\n  // }\n  //\n  this.__rules__ = []\n\n  // Cached rule chains.\n  //\n  // First level - chain name, '' for default.\n  // Second level - diginal anchor for fast filtering by charcodes.\n  //\n  this.__cache__ = null\n}\n\n// Helper methods, should not be used directly\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n  for (let i = 0; i < this.__rules__.length; i++) {\n    if (this.__rules__[i].name === name) {\n      return i\n    }\n  }\n  return -1\n}\n\n// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n  const self = this\n  const chains = ['']\n\n  // collect unique names\n  self.__rules__.forEach(function (rule) {\n    if (!rule.enabled) { return }\n\n    rule.alt.forEach(function (altName) {\n      if (chains.indexOf(altName) < 0) {\n        chains.push(altName)\n      }\n    })\n  })\n\n  self.__cache__ = {}\n\n  chains.forEach(function (chain) {\n    self.__cache__[chain] = []\n    self.__rules__.forEach(function (rule) {\n      if (!rule.enabled) { return }\n\n      if (chain && rule.alt.indexOf(chain) < 0) { return }\n\n      self.__cache__[chain].push(rule.fn)\n    })\n  })\n}\n\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.at = function (name, fn, options) {\n  const index = this.__find__(name)\n  const opt = options || {}\n\n  if (index === -1) { throw new Error('Parser rule not found: ' + name) }\n\n  this.__rules__[index].fn = fn\n  this.__rules__[index].alt = opt.alt || []\n  this.__cache__ = null\n}\n\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n  const index = this.__find__(beforeName)\n  const opt = options || {}\n\n  if (index === -1) { throw new Error('Parser rule not found: ' + beforeName) }\n\n  this.__rules__.splice(index, 0, {\n    name: ruleName,\n    enabled: true,\n    fn,\n    alt: opt.alt || []\n  })\n\n  this.__cache__ = null\n}\n\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n  const index = this.__find__(afterName)\n  const opt = options || {}\n\n  if (index === -1) { throw new Error('Parser rule not found: ' + afterName) }\n\n  this.__rules__.splice(index + 1, 0, {\n    name: ruleName,\n    enabled: true,\n    fn,\n    alt: opt.alt || []\n  })\n\n  this.__cache__ = null\n}\n\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.push = function (ruleName, fn, options) {\n  const opt = options || {}\n\n  this.__rules__.push({\n    name: ruleName,\n    enabled: true,\n    fn,\n    alt: opt.alt || []\n  })\n\n  this.__cache__ = null\n}\n\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.enable = function (list, ignoreInvalid) {\n  if (!Array.isArray(list)) { list = [list] }\n\n  const result = []\n\n  // Search by name and enable\n  list.forEach(function (name) {\n    const idx = this.__find__(name)\n\n    if (idx < 0) {\n      if (ignoreInvalid) { return }\n      throw new Error('Rules manager: invalid rule name ' + name)\n    }\n    this.__rules__[idx].enabled = true\n    result.push(name)\n  }, this)\n\n  this.__cache__ = null\n  return result\n}\n\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n  if (!Array.isArray(list)) { list = [list] }\n\n  this.__rules__.forEach(function (rule) { rule.enabled = false })\n\n  this.enable(list, ignoreInvalid)\n}\n\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.disable = function (list, ignoreInvalid) {\n  if (!Array.isArray(list)) { list = [list] }\n\n  const result = []\n\n  // Search by name and disable\n  list.forEach(function (name) {\n    const idx = this.__find__(name)\n\n    if (idx < 0) {\n      if (ignoreInvalid) { return }\n      throw new Error('Rules manager: invalid rule name ' + name)\n    }\n    this.__rules__[idx].enabled = false\n    result.push(name)\n  }, this)\n\n  this.__cache__ = null\n  return result\n}\n\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\nRuler.prototype.getRules = function (chainName) {\n  if (this.__cache__ === null) {\n    this.__compile__()\n  }\n\n  // Chain can be empty, if rules disabled. But we still have to return Array.\n  return this.__cache__[chainName] || []\n}\n\nexport default Ruler\n","// Token class\n\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\nfunction Token (type, tag, nesting) {\n  /**\n   * Token#type -> String\n   *\n   * Type of the token (string, e.g. \"paragraph_open\")\n   **/\n  this.type     = type\n\n  /**\n   * Token#tag -> String\n   *\n   * html tag name, e.g. \"p\"\n   **/\n  this.tag      = tag\n\n  /**\n   * Token#attrs -> Array\n   *\n   * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n   **/\n  this.attrs    = null\n\n  /**\n   * Token#map -> Array\n   *\n   * Source map info. Format: `[ line_begin, line_end ]`\n   **/\n  this.map      = null\n\n  /**\n   * Token#nesting -> Number\n   *\n   * Level change (number in {-1, 0, 1} set), where:\n   *\n   * -  `1` means the tag is opening\n   * -  `0` means the tag is self-closing\n   * - `-1` means the tag is closing\n   **/\n  this.nesting  = nesting\n\n  /**\n   * Token#level -> Number\n   *\n   * nesting level, the same as `state.level`\n   **/\n  this.level    = 0\n\n  /**\n   * Token#children -> Array\n   *\n   * An array of child nodes (inline and img tokens)\n   **/\n  this.children = null\n\n  /**\n   * Token#content -> String\n   *\n   * In a case of self-closing tag (code, html, fence, etc.),\n   * it has contents of this tag.\n   **/\n  this.content  = ''\n\n  /**\n   * Token#markup -> String\n   *\n   * '*' or '_' for emphasis, fence string for fence, etc.\n   **/\n  this.markup   = ''\n\n  /**\n   * Token#info -> String\n   *\n   * Additional information:\n   *\n   * - Info string for \"fence\" tokens\n   * - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n   * - The string value of the item marker for ordered-list \"list_item_open\" tokens\n   **/\n  this.info     = ''\n\n  /**\n   * Token#meta -> Object\n   *\n   * A place for plugins to store an arbitrary data\n   **/\n  this.meta     = null\n\n  /**\n   * Token#block -> Boolean\n   *\n   * True for block-level tokens, false for inline tokens.\n   * Used in renderer to calculate line breaks\n   **/\n  this.block    = false\n\n  /**\n   * Token#hidden -> Boolean\n   *\n   * If it's true, ignore this element when rendering. Used for tight lists\n   * to hide paragraphs.\n   **/\n  this.hidden   = false\n}\n\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex (name) {\n  if (!this.attrs) { return -1 }\n\n  const attrs = this.attrs\n\n  for (let i = 0, len = attrs.length; i < len; i++) {\n    if (attrs[i][0] === name) { return i }\n  }\n  return -1\n}\n\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\nToken.prototype.attrPush = function attrPush (attrData) {\n  if (this.attrs) {\n    this.attrs.push(attrData)\n  } else {\n    this.attrs = [attrData]\n  }\n}\n\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\nToken.prototype.attrSet = function attrSet (name, value) {\n  const idx = this.attrIndex(name)\n  const attrData = [name, value]\n\n  if (idx < 0) {\n    this.attrPush(attrData)\n  } else {\n    this.attrs[idx] = attrData\n  }\n}\n\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\nToken.prototype.attrGet = function attrGet (name) {\n  const idx = this.attrIndex(name)\n  let value = null\n  if (idx >= 0) {\n    value = this.attrs[idx][1]\n  }\n  return value\n}\n\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\nToken.prototype.attrJoin = function attrJoin (name, value) {\n  const idx = this.attrIndex(name)\n\n  if (idx < 0) {\n    this.attrPush([name, value])\n  } else {\n    this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value\n  }\n}\n\nexport default Token\n","// Core state object\n//\n\nimport Token from '../token.mjs'\n\nfunction StateCore (src, md, env) {\n  this.src = src\n  this.env = env\n  this.tokens = []\n  this.inlineMode = false\n  this.md = md // link to parser instance\n}\n\n// re-export Token class to use in core rules\nStateCore.prototype.Token = Token\n\nexport default StateCore\n","// Normalize input string\n\n// https://spec.commonmark.org/0.29/#line-ending\nconst NEWLINES_RE  = /\\r\\n?|\\n/g\nconst NULL_RE      = /\\0/g\n\nexport default function normalize (state) {\n  let str\n\n  // Normalize newlines\n  str = state.src.replace(NEWLINES_RE, '\\n')\n\n  // Replace NULL characters\n  str = str.replace(NULL_RE, '\\uFFFD')\n\n  state.src = str\n}\n","export default function block (state) {\n  let token\n\n  if (state.inlineMode) {\n    token          = new state.Token('inline', '', 0)\n    token.content  = state.src\n    token.map      = [0, 1]\n    token.children = []\n    state.tokens.push(token)\n  } else {\n    state.md.block.parse(state.src, state.md, state.env, state.tokens)\n  }\n}\n","export default function inline (state) {\n  const tokens = state.tokens\n\n  // Parse inlines\n  for (let i = 0, l = tokens.length; i < l; i++) {\n    const tok = tokens[i]\n    if (tok.type === 'inline') {\n      state.md.inline.parse(tok.content, state.md, state.env, tok.children)\n    }\n  }\n}\n","// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n\nimport { arrayReplaceAt } from '../common/utils.mjs'\n\nfunction isLinkOpen (str) {\n  return /^<a[>\\s]/i.test(str)\n}\nfunction isLinkClose (str) {\n  return /^<\\/a\\s*>/i.test(str)\n}\n\nexport default function linkify (state) {\n  const blockTokens = state.tokens\n\n  if (!state.md.options.linkify) { return }\n\n  for (let j = 0, l = blockTokens.length; j < l; j++) {\n    if (blockTokens[j].type !== 'inline' ||\n        !state.md.linkify.pretest(blockTokens[j].content)) {\n      continue\n    }\n\n    let tokens = blockTokens[j].children\n\n    let htmlLinkLevel = 0\n\n    // We scan from the end, to keep position when new tags added.\n    // Use reversed logic in links start/end match\n    for (let i = tokens.length - 1; i >= 0; i--) {\n      const currentToken = tokens[i]\n\n      // Skip content of markdown links\n      if (currentToken.type === 'link_close') {\n        i--\n        while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n          i--\n        }\n        continue\n      }\n\n      // Skip content of html tag links\n      if (currentToken.type === 'html_inline') {\n        if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) {\n          htmlLinkLevel--\n        }\n        if (isLinkClose(currentToken.content)) {\n          htmlLinkLevel++\n        }\n      }\n      if (htmlLinkLevel > 0) { continue }\n\n      if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n        const text = currentToken.content\n        let links = state.md.linkify.match(text)\n\n        // Now split string to nodes\n        const nodes = []\n        let level = currentToken.level\n        let lastPos = 0\n\n        // forbid escape sequence at the start of the string,\n        // this avoids http\\://example.com/ from being linkified as\n        // http:<a href=\"//example.com/\">//example.com/</a>\n        if (links.length > 0 &&\n            links[0].index === 0 &&\n            i > 0 &&\n            tokens[i - 1].type === 'text_special') {\n          links = links.slice(1)\n        }\n\n        for (let ln = 0; ln < links.length; ln++) {\n          const url = links[ln].url\n          const fullUrl = state.md.normalizeLink(url)\n          if (!state.md.validateLink(fullUrl)) { continue }\n\n          let urlText = links[ln].text\n\n          // Linkifier might send raw hostnames like \"example.com\", where url\n          // starts with domain name. So we prepend http:// in those cases,\n          // and remove it afterwards.\n          //\n          if (!links[ln].schema) {\n            urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\\/\\//, '')\n          } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) {\n            urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, '')\n          } else {\n            urlText = state.md.normalizeLinkText(urlText)\n          }\n\n          const pos = links[ln].index\n\n          if (pos > lastPos) {\n            const token   = new state.Token('text', '', 0)\n            token.content = text.slice(lastPos, pos)\n            token.level   = level\n            nodes.push(token)\n          }\n\n          const token_o   = new state.Token('link_open', 'a', 1)\n          token_o.attrs   = [['href', fullUrl]]\n          token_o.level   = level++\n          token_o.markup  = 'linkify'\n          token_o.info    = 'auto'\n          nodes.push(token_o)\n\n          const token_t   = new state.Token('text', '', 0)\n          token_t.content = urlText\n          token_t.level   = level\n          nodes.push(token_t)\n\n          const token_c   = new state.Token('link_close', 'a', -1)\n          token_c.level   = --level\n          token_c.markup  = 'linkify'\n          token_c.info    = 'auto'\n          nodes.push(token_c)\n\n          lastPos = links[ln].lastIndex\n        }\n        if (lastPos < text.length) {\n          const token   = new state.Token('text', '', 0)\n          token.content = text.slice(lastPos)\n          token.level   = level\n          nodes.push(token)\n        }\n\n        // replace current node\n        blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes)\n      }\n    }\n  }\n}\n","// Simple typographic replacements\n//\n// (c) (C) → ©\n// (tm) (TM) → ™\n// (r) (R) → ®\n// +- → ±\n// ... → … (also ?.... → ?.., !.... → !..)\n// ???????? → ???, !!!!! → !!!, `,,` → `,`\n// -- → &ndash;, --- → &mdash;\n//\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> ½, ¼, ¾\n// - multiplications 2 x 4 -> 2 × 4\n\nconst RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/\n\n// Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\nconst SCOPED_ABBR_TEST_RE = /\\((c|tm|r)\\)/i\n\nconst SCOPED_ABBR_RE = /\\((c|tm|r)\\)/ig\nconst SCOPED_ABBR = {\n  c: '©',\n  r: '®',\n  tm: '™'\n}\n\nfunction replaceFn (match, name) {\n  return SCOPED_ABBR[name.toLowerCase()]\n}\n\nfunction replace_scoped (inlineTokens) {\n  let inside_autolink = 0\n\n  for (let i = inlineTokens.length - 1; i >= 0; i--) {\n    const token = inlineTokens[i]\n\n    if (token.type === 'text' && !inside_autolink) {\n      token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn)\n    }\n\n    if (token.type === 'link_open' && token.info === 'auto') {\n      inside_autolink--\n    }\n\n    if (token.type === 'link_close' && token.info === 'auto') {\n      inside_autolink++\n    }\n  }\n}\n\nfunction replace_rare (inlineTokens) {\n  let inside_autolink = 0\n\n  for (let i = inlineTokens.length - 1; i >= 0; i--) {\n    const token = inlineTokens[i]\n\n    if (token.type === 'text' && !inside_autolink) {\n      if (RARE_RE.test(token.content)) {\n        token.content = token.content\n          .replace(/\\+-/g, '±')\n          // .., ..., ....... -> …\n          // but ?..... & !..... -> ?.. & !..\n          .replace(/\\.{2,}/g, '…').replace(/([?!])…/g, '$1..')\n          .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')\n          // em-dash\n          .replace(/(^|[^-])---(?=[^-]|$)/mg, '$1\\u2014')\n          // en-dash\n          .replace(/(^|\\s)--(?=\\s|$)/mg, '$1\\u2013')\n          .replace(/(^|[^-\\s])--(?=[^-\\s]|$)/mg, '$1\\u2013')\n      }\n    }\n\n    if (token.type === 'link_open' && token.info === 'auto') {\n      inside_autolink--\n    }\n\n    if (token.type === 'link_close' && token.info === 'auto') {\n      inside_autolink++\n    }\n  }\n}\n\nexport default function replace (state) {\n  let blkIdx\n\n  if (!state.md.options.typographer) { return }\n\n  for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n    if (state.tokens[blkIdx].type !== 'inline') { continue }\n\n    if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n      replace_scoped(state.tokens[blkIdx].children)\n    }\n\n    if (RARE_RE.test(state.tokens[blkIdx].content)) {\n      replace_rare(state.tokens[blkIdx].children)\n    }\n  }\n}\n","// Convert straight quotation marks to typographic ones\n//\n\nimport { isWhiteSpace, isPunctChar, isMdAsciiPunct } from '../common/utils.mjs'\n\nconst QUOTE_TEST_RE = /['\"]/\nconst QUOTE_RE = /['\"]/g\nconst APOSTROPHE = '\\u2019' /* ’ */\n\nfunction replaceAt (str, index, ch) {\n  return str.slice(0, index) + ch + str.slice(index + 1)\n}\n\nfunction process_inlines (tokens, state) {\n  let j\n\n  const stack = []\n\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i]\n\n    const thisLevel = tokens[i].level\n\n    for (j = stack.length - 1; j >= 0; j--) {\n      if (stack[j].level <= thisLevel) { break }\n    }\n    stack.length = j + 1\n\n    if (token.type !== 'text') { continue }\n\n    let text = token.content\n    let pos = 0\n    let max = text.length\n\n    /* eslint no-labels:0,block-scoped-var:0 */\n    OUTER:\n    while (pos < max) {\n      QUOTE_RE.lastIndex = pos\n      const t = QUOTE_RE.exec(text)\n      if (!t) { break }\n\n      let canOpen = true\n      let canClose = true\n      pos = t.index + 1\n      const isSingle = (t[0] === \"'\")\n\n      // Find previous character,\n      // default to space if it's the beginning of the line\n      //\n      let lastChar = 0x20\n\n      if (t.index - 1 >= 0) {\n        lastChar = text.charCodeAt(t.index - 1)\n      } else {\n        for (j = i - 1; j >= 0; j--) {\n          if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break // lastChar defaults to 0x20\n          if (!tokens[j].content) continue // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n          lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1)\n          break\n        }\n      }\n\n      // Find next character,\n      // default to space if it's the end of the line\n      //\n      let nextChar = 0x20\n\n      if (pos < max) {\n        nextChar = text.charCodeAt(pos)\n      } else {\n        for (j = i + 1; j < tokens.length; j++) {\n          if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break // nextChar defaults to 0x20\n          if (!tokens[j].content) continue // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n          nextChar = tokens[j].content.charCodeAt(0)\n          break\n        }\n      }\n\n      const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar))\n      const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar))\n\n      const isLastWhiteSpace = isWhiteSpace(lastChar)\n      const isNextWhiteSpace = isWhiteSpace(nextChar)\n\n      if (isNextWhiteSpace) {\n        canOpen = false\n      } else if (isNextPunctChar) {\n        if (!(isLastWhiteSpace || isLastPunctChar)) {\n          canOpen = false\n        }\n      }\n\n      if (isLastWhiteSpace) {\n        canClose = false\n      } else if (isLastPunctChar) {\n        if (!(isNextWhiteSpace || isNextPunctChar)) {\n          canClose = false\n        }\n      }\n\n      if (nextChar === 0x22 /* \" */ && t[0] === '\"') {\n        if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) {\n          // special case: 1\"\" - count first quote as an inch\n          canClose = canOpen = false\n        }\n      }\n\n      if (canOpen && canClose) {\n        // Replace quotes in the middle of punctuation sequence, but not\n        // in the middle of the words, i.e.:\n        //\n        // 1. foo \" bar \" baz - not replaced\n        // 2. foo-\"-bar-\"-baz - replaced\n        // 3. foo\"bar\"baz     - not replaced\n        //\n        canOpen = isLastPunctChar\n        canClose = isNextPunctChar\n      }\n\n      if (!canOpen && !canClose) {\n        // middle of word\n        if (isSingle) {\n          token.content = replaceAt(token.content, t.index, APOSTROPHE)\n        }\n        continue\n      }\n\n      if (canClose) {\n        // this could be a closing quote, rewind the stack to get a match\n        for (j = stack.length - 1; j >= 0; j--) {\n          let item = stack[j]\n          if (stack[j].level < thisLevel) { break }\n          if (item.single === isSingle && stack[j].level === thisLevel) {\n            item = stack[j]\n\n            let openQuote\n            let closeQuote\n            if (isSingle) {\n              openQuote = state.md.options.quotes[2]\n              closeQuote = state.md.options.quotes[3]\n            } else {\n              openQuote = state.md.options.quotes[0]\n              closeQuote = state.md.options.quotes[1]\n            }\n\n            // replace token.content *before* tokens[item.token].content,\n            // because, if they are pointing at the same token, replaceAt\n            // could mess up indices when quote length != 1\n            token.content = replaceAt(token.content, t.index, closeQuote)\n            tokens[item.token].content = replaceAt(\n              tokens[item.token].content, item.pos, openQuote)\n\n            pos += closeQuote.length - 1\n            if (item.token === i) { pos += openQuote.length - 1 }\n\n            text = token.content\n            max = text.length\n\n            stack.length = j\n            continue OUTER\n          }\n        }\n      }\n\n      if (canOpen) {\n        stack.push({\n          token: i,\n          pos: t.index,\n          single: isSingle,\n          level: thisLevel\n        })\n      } else if (canClose && isSingle) {\n        token.content = replaceAt(token.content, t.index, APOSTROPHE)\n      }\n    }\n  }\n}\n\nexport default function smartquotes (state) {\n  /* eslint max-depth:0 */\n  if (!state.md.options.typographer) { return }\n\n  for (let blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n    if (state.tokens[blkIdx].type !== 'inline' ||\n        !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n      continue\n    }\n\n    process_inlines(state.tokens[blkIdx].children, state)\n  }\n}\n","// Join raw text tokens with the rest of the text\n//\n// This is set as a separate rule to provide an opportunity for plugins\n// to run text replacements after text join, but before escape join.\n//\n// For example, `\\:)` shouldn't be replaced with an emoji.\n//\n\nexport default function text_join (state) {\n  let curr, last\n  const blockTokens = state.tokens\n  const l = blockTokens.length\n\n  for (let j = 0; j < l; j++) {\n    if (blockTokens[j].type !== 'inline') continue\n\n    const tokens = blockTokens[j].children\n    const max = tokens.length\n\n    for (curr = 0; curr < max; curr++) {\n      if (tokens[curr].type === 'text_special') {\n        tokens[curr].type = 'text'\n      }\n    }\n\n    for (curr = last = 0; curr < max; curr++) {\n      if (tokens[curr].type === 'text' &&\n          curr + 1 < max &&\n          tokens[curr + 1].type === 'text') {\n        // collapse two adjacent text nodes\n        tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content\n      } else {\n        if (curr !== last) { tokens[last] = tokens[curr] }\n\n        last++\n      }\n    }\n\n    if (curr !== last) {\n      tokens.length = last\n    }\n  }\n}\n","/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n\nimport Ruler from './ruler.mjs'\nimport StateCore from './rules_core/state_core.mjs'\n\nimport r_normalize from './rules_core/normalize.mjs'\nimport r_block from './rules_core/block.mjs'\nimport r_inline from './rules_core/inline.mjs'\nimport r_linkify from './rules_core/linkify.mjs'\nimport r_replacements from './rules_core/replacements.mjs'\nimport r_smartquotes from './rules_core/smartquotes.mjs'\nimport r_text_join from './rules_core/text_join.mjs'\n\nconst _rules = [\n  ['normalize',      r_normalize],\n  ['block',          r_block],\n  ['inline',         r_inline],\n  ['linkify',        r_linkify],\n  ['replacements',   r_replacements],\n  ['smartquotes',    r_smartquotes],\n  // `text_join` finds `text_special` tokens (for escape sequences)\n  // and joins them with the rest of the text\n  ['text_join',      r_text_join]\n]\n\n/**\n * new Core()\n **/\nfunction Core () {\n  /**\n   * Core#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of core rules.\n   **/\n  this.ruler = new Ruler()\n\n  for (let i = 0; i < _rules.length; i++) {\n    this.ruler.push(_rules[i][0], _rules[i][1])\n  }\n}\n\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\nCore.prototype.process = function (state) {\n  const rules = this.ruler.getRules('')\n\n  for (let i = 0, l = rules.length; i < l; i++) {\n    rules[i](state)\n  }\n}\n\nCore.prototype.State = StateCore\n\nexport default Core\n","// Parser state class\n\nimport Token from '../token.mjs'\nimport { isSpace } from '../common/utils.mjs'\n\nfunction StateBlock (src, md, env, tokens) {\n  this.src = src\n\n  // link to parser instance\n  this.md     = md\n\n  this.env = env\n\n  //\n  // Internal state vartiables\n  //\n\n  this.tokens = tokens\n\n  this.bMarks = []  // line begin offsets for fast jumps\n  this.eMarks = []  // line end offsets for fast jumps\n  this.tShift = []  // offsets of the first non-space characters (tabs not expanded)\n  this.sCount = []  // indents for each line (tabs expanded)\n\n  // An amount of virtual spaces (tabs expanded) between beginning\n  // of each line (bMarks) and real beginning of that line.\n  //\n  // It exists only as a hack because blockquotes override bMarks\n  // losing information in the process.\n  //\n  // It's used only when expanding tabs, you can think about it as\n  // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n  // means first tab should be expanded to 4-21%4 === 3 spaces.\n  //\n  this.bsCount = []\n\n  // block parser variables\n\n  // required block content indent (for example, if we are\n  // inside a list, it would be positioned after list marker)\n  this.blkIndent  = 0\n  this.line       = 0 // line index in src\n  this.lineMax    = 0 // lines count\n  this.tight      = false  // loose/tight mode for lists\n  this.ddIndent   = -1 // indent of the current dd block (-1 if there isn't any)\n  this.listIndent = -1 // indent of the current list block (-1 if there isn't any)\n\n  // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n  // used in lists to determine if they interrupt a paragraph\n  this.parentType = 'root'\n\n  this.level = 0\n\n  // Create caches\n  // Generate markers.\n  const s = this.src\n\n  for (let start = 0, pos = 0, indent = 0, offset = 0, len = s.length, indent_found = false; pos < len; pos++) {\n    const ch = s.charCodeAt(pos)\n\n    if (!indent_found) {\n      if (isSpace(ch)) {\n        indent++\n\n        if (ch === 0x09) {\n          offset += 4 - offset % 4\n        } else {\n          offset++\n        }\n        continue\n      } else {\n        indent_found = true\n      }\n    }\n\n    if (ch === 0x0A || pos === len - 1) {\n      if (ch !== 0x0A) { pos++ }\n      this.bMarks.push(start)\n      this.eMarks.push(pos)\n      this.tShift.push(indent)\n      this.sCount.push(offset)\n      this.bsCount.push(0)\n\n      indent_found = false\n      indent = 0\n      offset = 0\n      start = pos + 1\n    }\n  }\n\n  // Push fake entry to simplify cache bounds checks\n  this.bMarks.push(s.length)\n  this.eMarks.push(s.length)\n  this.tShift.push(0)\n  this.sCount.push(0)\n  this.bsCount.push(0)\n\n  this.lineMax = this.bMarks.length - 1 // don't count last fake line\n}\n\n// Push new token to \"stream\".\n//\nStateBlock.prototype.push = function (type, tag, nesting) {\n  const token = new Token(type, tag, nesting)\n  token.block = true\n\n  if (nesting < 0) this.level-- // closing tag\n  token.level = this.level\n  if (nesting > 0) this.level++ // opening tag\n\n  this.tokens.push(token)\n  return token\n}\n\nStateBlock.prototype.isEmpty = function isEmpty (line) {\n  return this.bMarks[line] + this.tShift[line] >= this.eMarks[line]\n}\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines (from) {\n  for (let max = this.lineMax; from < max; from++) {\n    if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n      break\n    }\n  }\n  return from\n}\n\n// Skip spaces from given position.\nStateBlock.prototype.skipSpaces = function skipSpaces (pos) {\n  for (let max = this.src.length; pos < max; pos++) {\n    const ch = this.src.charCodeAt(pos)\n    if (!isSpace(ch)) { break }\n  }\n  return pos\n}\n\n// Skip spaces from given position in reverse.\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack (pos, min) {\n  if (pos <= min) { return pos }\n\n  while (pos > min) {\n    if (!isSpace(this.src.charCodeAt(--pos))) { return pos + 1 }\n  }\n  return pos\n}\n\n// Skip char codes from given position\nStateBlock.prototype.skipChars = function skipChars (pos, code) {\n  for (let max = this.src.length; pos < max; pos++) {\n    if (this.src.charCodeAt(pos) !== code) { break }\n  }\n  return pos\n}\n\n// Skip char codes reverse from given position - 1\nStateBlock.prototype.skipCharsBack = function skipCharsBack (pos, code, min) {\n  if (pos <= min) { return pos }\n\n  while (pos > min) {\n    if (code !== this.src.charCodeAt(--pos)) { return pos + 1 }\n  }\n  return pos\n}\n\n// cut lines range from source.\nStateBlock.prototype.getLines = function getLines (begin, end, indent, keepLastLF) {\n  if (begin >= end) {\n    return ''\n  }\n\n  const queue = new Array(end - begin)\n\n  for (let i = 0, line = begin; line < end; line++, i++) {\n    let lineIndent = 0\n    const lineStart = this.bMarks[line]\n    let first = lineStart\n    let last\n\n    if (line + 1 < end || keepLastLF) {\n      // No need for bounds check because we have fake entry on tail.\n      last = this.eMarks[line] + 1\n    } else {\n      last = this.eMarks[line]\n    }\n\n    while (first < last && lineIndent < indent) {\n      const ch = this.src.charCodeAt(first)\n\n      if (isSpace(ch)) {\n        if (ch === 0x09) {\n          lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4\n        } else {\n          lineIndent++\n        }\n      } else if (first - lineStart < this.tShift[line]) {\n        // patched tShift masked characters to look like spaces (blockquotes, list markers)\n        lineIndent++\n      } else {\n        break\n      }\n\n      first++\n    }\n\n    if (lineIndent > indent) {\n      // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n      // with indent=2 becomes '  \\tfoobar'\n      queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last)\n    } else {\n      queue[i] = this.src.slice(first, last)\n    }\n  }\n\n  return queue.join('')\n}\n\n// re-export Token class to use in block rules\nStateBlock.prototype.Token = Token\n\nexport default StateBlock\n","// GFM table, https://github.github.com/gfm/#tables-extension-\n\nimport { isSpace } from '../common/utils.mjs'\n\nfunction getLine (state, line) {\n  const pos = state.bMarks[line] + state.tShift[line]\n  const max = state.eMarks[line]\n\n  return state.src.slice(pos, max)\n}\n\nfunction escapedSplit (str) {\n  const result = []\n  const max = str.length\n\n  let pos = 0\n  let ch = str.charCodeAt(pos)\n  let isEscaped = false\n  let lastPos = 0\n  let current = ''\n\n  while (pos < max) {\n    if (ch === 0x7c/* | */) {\n      if (!isEscaped) {\n        // pipe separating cells, '|'\n        result.push(current + str.substring(lastPos, pos))\n        current = ''\n        lastPos = pos + 1\n      } else {\n        // escaped pipe, '\\|'\n        current += str.substring(lastPos, pos - 1)\n        lastPos = pos\n      }\n    }\n\n    isEscaped = (ch === 0x5c/* \\ */)\n    pos++\n\n    ch = str.charCodeAt(pos)\n  }\n\n  result.push(current + str.substring(lastPos))\n\n  return result\n}\n\nexport default function table (state, startLine, endLine, silent) {\n  // should have at least two lines\n  if (startLine + 2 > endLine) { return false }\n\n  let nextLine = startLine + 1\n\n  if (state.sCount[nextLine] < state.blkIndent) { return false }\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[nextLine] - state.blkIndent >= 4) { return false }\n\n  // first character of the second line should be '|', '-', ':',\n  // and no other characters are allowed but spaces;\n  // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n  let pos = state.bMarks[nextLine] + state.tShift[nextLine]\n  if (pos >= state.eMarks[nextLine]) { return false }\n\n  const firstCh = state.src.charCodeAt(pos++)\n  if (firstCh !== 0x7C/* | */ && firstCh !== 0x2D/* - */ && firstCh !== 0x3A/* : */) { return false }\n\n  if (pos >= state.eMarks[nextLine]) { return false }\n\n  const secondCh = state.src.charCodeAt(pos++)\n  if (secondCh !== 0x7C/* | */ && secondCh !== 0x2D/* - */ && secondCh !== 0x3A/* : */ && !isSpace(secondCh)) {\n    return false\n  }\n\n  // if first character is '-', then second character must not be a space\n  // (due to parsing ambiguity with list)\n  if (firstCh === 0x2D/* - */ && isSpace(secondCh)) { return false }\n\n  while (pos < state.eMarks[nextLine]) {\n    const ch = state.src.charCodeAt(pos)\n\n    if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false }\n\n    pos++\n  }\n\n  let lineText = getLine(state, startLine + 1)\n  let columns = lineText.split('|')\n  const aligns = []\n  for (let i = 0; i < columns.length; i++) {\n    const t = columns[i].trim()\n    if (!t) {\n      // allow empty columns before and after table, but not in between columns;\n      // e.g. allow ` |---| `, disallow ` ---||--- `\n      if (i === 0 || i === columns.length - 1) {\n        continue\n      } else {\n        return false\n      }\n    }\n\n    if (!/^:?-+:?$/.test(t)) { return false }\n    if (t.charCodeAt(t.length - 1) === 0x3A/* : */) {\n      aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right')\n    } else if (t.charCodeAt(0) === 0x3A/* : */) {\n      aligns.push('left')\n    } else {\n      aligns.push('')\n    }\n  }\n\n  lineText = getLine(state, startLine).trim()\n  if (lineText.indexOf('|') === -1) { return false }\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n  columns = escapedSplit(lineText)\n  if (columns.length && columns[0] === '') columns.shift()\n  if (columns.length && columns[columns.length - 1] === '') columns.pop()\n\n  // header row will define an amount of columns in the entire table,\n  // and align row should be exactly the same (the rest of the rows can differ)\n  const columnCount = columns.length\n  if (columnCount === 0 || columnCount !== aligns.length) { return false }\n\n  if (silent) { return true }\n\n  const oldParentType = state.parentType\n  state.parentType = 'table'\n\n  // use 'blockquote' lists for termination because it's\n  // the most similar to tables\n  const terminatorRules = state.md.block.ruler.getRules('blockquote')\n\n  const token_to = state.push('table_open', 'table', 1)\n  const tableLines = [startLine, 0]\n  token_to.map = tableLines\n\n  const token_tho = state.push('thead_open', 'thead', 1)\n  token_tho.map = [startLine, startLine + 1]\n\n  const token_htro = state.push('tr_open', 'tr', 1)\n  token_htro.map = [startLine, startLine + 1]\n\n  for (let i = 0; i < columns.length; i++) {\n    const token_ho = state.push('th_open', 'th', 1)\n    if (aligns[i]) {\n      token_ho.attrs  = [['style', 'text-align:' + aligns[i]]]\n    }\n\n    const token_il = state.push('inline', '', 0)\n    token_il.content  = columns[i].trim()\n    token_il.children = []\n\n    state.push('th_close', 'th', -1)\n  }\n\n  state.push('tr_close', 'tr', -1)\n  state.push('thead_close', 'thead', -1)\n\n  let tbodyLines\n\n  for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n    if (state.sCount[nextLine] < state.blkIndent) { break }\n\n    let terminate = false\n    for (let i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true\n        break\n      }\n    }\n\n    if (terminate) { break }\n    lineText = getLine(state, nextLine).trim()\n    if (!lineText) { break }\n    if (state.sCount[nextLine] - state.blkIndent >= 4) { break }\n    columns = escapedSplit(lineText)\n    if (columns.length && columns[0] === '') columns.shift()\n    if (columns.length && columns[columns.length - 1] === '') columns.pop()\n\n    if (nextLine === startLine + 2) {\n      const token_tbo = state.push('tbody_open', 'tbody', 1)\n      token_tbo.map = tbodyLines = [startLine + 2, 0]\n    }\n\n    const token_tro = state.push('tr_open', 'tr', 1)\n    token_tro.map = [nextLine, nextLine + 1]\n\n    for (let i = 0; i < columnCount; i++) {\n      const token_tdo = state.push('td_open', 'td', 1)\n      if (aligns[i]) {\n        token_tdo.attrs  = [['style', 'text-align:' + aligns[i]]]\n      }\n\n      const token_il = state.push('inline', '', 0)\n      token_il.content  = columns[i] ? columns[i].trim() : ''\n      token_il.children = []\n\n      state.push('td_close', 'td', -1)\n    }\n    state.push('tr_close', 'tr', -1)\n  }\n\n  if (tbodyLines) {\n    state.push('tbody_close', 'tbody', -1)\n    tbodyLines[1] = nextLine\n  }\n\n  state.push('table_close', 'table', -1)\n  tableLines[1] = nextLine\n\n  state.parentType = oldParentType\n  state.line = nextLine\n  return true\n}\n","// Code block (4 spaces padded)\n\nexport default function code (state, startLine, endLine/*, silent */) {\n  if (state.sCount[startLine] - state.blkIndent < 4) { return false }\n\n  let nextLine = startLine + 1\n  let last = nextLine\n\n  while (nextLine < endLine) {\n    if (state.isEmpty(nextLine)) {\n      nextLine++\n      continue\n    }\n\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      nextLine++\n      last = nextLine\n      continue\n    }\n    break\n  }\n\n  state.line = last\n\n  const token   = state.push('code_block', 'code', 0)\n  token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\\n'\n  token.map     = [startLine, state.line]\n\n  return true\n}\n","// fences (``` lang, ~~~ lang)\n\nexport default function fence (state, startLine, endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  let max = state.eMarks[startLine]\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n  if (pos + 3 > max) { return false }\n\n  const marker = state.src.charCodeAt(pos)\n\n  if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n    return false\n  }\n\n  // scan marker length\n  let mem = pos\n  pos = state.skipChars(pos, marker)\n\n  let len = pos - mem\n\n  if (len < 3) { return false }\n\n  const markup = state.src.slice(mem, pos)\n  const params = state.src.slice(pos, max)\n\n  if (marker === 0x60 /* ` */) {\n    if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n      return false\n    }\n  }\n\n  // Since start is found, we can report success here in validation mode\n  if (silent) { return true }\n\n  // search end of block\n  let nextLine = startLine\n  let haveEndMarker = false\n\n  for (;;) {\n    nextLine++\n    if (nextLine >= endLine) {\n      // unclosed block should be autoclosed by end of document.\n      // also block seems to be autoclosed by end of parent\n      break\n    }\n\n    pos = mem = state.bMarks[nextLine] + state.tShift[nextLine]\n    max = state.eMarks[nextLine]\n\n    if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n      // non-empty line with negative indent should stop the list:\n      // - ```\n      //  test\n      break\n    }\n\n    if (state.src.charCodeAt(pos) !== marker) { continue }\n\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      // closing fence should be indented less than 4 spaces\n      continue\n    }\n\n    pos = state.skipChars(pos, marker)\n\n    // closing code fence must be at least as long as the opening one\n    if (pos - mem < len) { continue }\n\n    // make sure tail has spaces only\n    pos = state.skipSpaces(pos)\n\n    if (pos < max) { continue }\n\n    haveEndMarker = true\n    // found!\n    break\n  }\n\n  // If a fence has heading spaces, they should be removed from its inner block\n  len = state.sCount[startLine]\n\n  state.line = nextLine + (haveEndMarker ? 1 : 0)\n\n  const token   = state.push('fence', 'code', 0)\n  token.info    = params\n  token.content = state.getLines(startLine + 1, nextLine, len, true)\n  token.markup  = markup\n  token.map     = [startLine, state.line]\n\n  return true\n}\n","// Block quotes\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function blockquote (state, startLine, endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  let max = state.eMarks[startLine]\n\n  const oldLineMax = state.lineMax\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n  // check the block quote marker\n  if (state.src.charCodeAt(pos) !== 0x3E/* > */) { return false }\n\n  // we know that it's going to be a valid blockquote,\n  // so no point trying to find the end of it in silent mode\n  if (silent) { return true }\n\n  const oldBMarks  = []\n  const oldBSCount = []\n  const oldSCount  = []\n  const oldTShift  = []\n\n  const terminatorRules = state.md.block.ruler.getRules('blockquote')\n\n  const oldParentType = state.parentType\n  state.parentType = 'blockquote'\n  let lastLineEmpty = false\n  let nextLine\n\n  // Search the end of the block\n  //\n  // Block ends with either:\n  //  1. an empty line outside:\n  //     ```\n  //     > test\n  //\n  //     ```\n  //  2. an empty line inside:\n  //     ```\n  //     >\n  //     test\n  //     ```\n  //  3. another tag:\n  //     ```\n  //     > test\n  //      - - -\n  //     ```\n  for (nextLine = startLine; nextLine < endLine; nextLine++) {\n    // check if it's outdented, i.e. it's inside list item and indented\n    // less than said list item:\n    //\n    // ```\n    // 1. anything\n    //    > current blockquote\n    // 2. checking this line\n    // ```\n    const isOutdented = state.sCount[nextLine] < state.blkIndent\n\n    pos = state.bMarks[nextLine] + state.tShift[nextLine]\n    max = state.eMarks[nextLine]\n\n    if (pos >= max) {\n      // Case 1: line is not inside the blockquote, and this line is empty.\n      break\n    }\n\n    if (state.src.charCodeAt(pos++) === 0x3E/* > */ && !isOutdented) {\n      // This line is inside the blockquote.\n\n      // set offset past spaces and \">\"\n      let initial = state.sCount[nextLine] + 1\n      let spaceAfterMarker\n      let adjustTab\n\n      // skip one optional space after '>'\n      if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n        // ' >   test '\n        //     ^ -- position start of line here:\n        pos++\n        initial++\n        adjustTab = false\n        spaceAfterMarker = true\n      } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n        spaceAfterMarker = true\n\n        if ((state.bsCount[nextLine] + initial) % 4 === 3) {\n          // '  >\\t  test '\n          //       ^ -- position start of line here (tab has width===1)\n          pos++\n          initial++\n          adjustTab = false\n        } else {\n          // ' >\\t  test '\n          //    ^ -- position start of line here + shift bsCount slightly\n          //         to make extra space appear\n          adjustTab = true\n        }\n      } else {\n        spaceAfterMarker = false\n      }\n\n      let offset = initial\n      oldBMarks.push(state.bMarks[nextLine])\n      state.bMarks[nextLine] = pos\n\n      while (pos < max) {\n        const ch = state.src.charCodeAt(pos)\n\n        if (isSpace(ch)) {\n          if (ch === 0x09) {\n            offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4\n          } else {\n            offset++\n          }\n        } else {\n          break\n        }\n\n        pos++\n      }\n\n      lastLineEmpty = pos >= max\n\n      oldBSCount.push(state.bsCount[nextLine])\n      state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0)\n\n      oldSCount.push(state.sCount[nextLine])\n      state.sCount[nextLine] = offset - initial\n\n      oldTShift.push(state.tShift[nextLine])\n      state.tShift[nextLine] = pos - state.bMarks[nextLine]\n      continue\n    }\n\n    // Case 2: line is not inside the blockquote, and the last line was empty.\n    if (lastLineEmpty) { break }\n\n    // Case 3: another tag found.\n    let terminate = false\n    for (let i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true\n        break\n      }\n    }\n\n    if (terminate) {\n      // Quirk to enforce \"hard termination mode\" for paragraphs;\n      // normally if you call `tokenize(state, startLine, nextLine)`,\n      // paragraphs will look below nextLine for paragraph continuation,\n      // but if blockquote is terminated by another tag, they shouldn't\n      state.lineMax = nextLine\n\n      if (state.blkIndent !== 0) {\n        // state.blkIndent was non-zero, we now set it to zero,\n        // so we need to re-calculate all offsets to appear as\n        // if indent wasn't changed\n        oldBMarks.push(state.bMarks[nextLine])\n        oldBSCount.push(state.bsCount[nextLine])\n        oldTShift.push(state.tShift[nextLine])\n        oldSCount.push(state.sCount[nextLine])\n        state.sCount[nextLine] -= state.blkIndent\n      }\n\n      break\n    }\n\n    oldBMarks.push(state.bMarks[nextLine])\n    oldBSCount.push(state.bsCount[nextLine])\n    oldTShift.push(state.tShift[nextLine])\n    oldSCount.push(state.sCount[nextLine])\n\n    // A negative indentation means that this is a paragraph continuation\n    //\n    state.sCount[nextLine] = -1\n  }\n\n  const oldIndent = state.blkIndent\n  state.blkIndent = 0\n\n  const token_o  = state.push('blockquote_open', 'blockquote', 1)\n  token_o.markup = '>'\n  const lines = [startLine, 0]\n  token_o.map    = lines\n\n  state.md.block.tokenize(state, startLine, nextLine)\n\n  const token_c  = state.push('blockquote_close', 'blockquote', -1)\n  token_c.markup = '>'\n\n  state.lineMax = oldLineMax\n  state.parentType = oldParentType\n  lines[1] = state.line\n\n  // Restore original tShift; this might not be necessary since the parser\n  // has already been here, but just to make sure we can do that.\n  for (let i = 0; i < oldTShift.length; i++) {\n    state.bMarks[i + startLine] = oldBMarks[i]\n    state.tShift[i + startLine] = oldTShift[i]\n    state.sCount[i + startLine] = oldSCount[i]\n    state.bsCount[i + startLine] = oldBSCount[i]\n  }\n  state.blkIndent = oldIndent\n\n  return true\n}\n","// Horizontal rule\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function hr (state, startLine, endLine, silent) {\n  const max = state.eMarks[startLine]\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  const marker = state.src.charCodeAt(pos++)\n\n  // Check hr marker\n  if (marker !== 0x2A/* * */ &&\n      marker !== 0x2D/* - */ &&\n      marker !== 0x5F/* _ */) {\n    return false\n  }\n\n  // markers can be mixed with spaces, but there should be at least 3 of them\n\n  let cnt = 1\n  while (pos < max) {\n    const ch = state.src.charCodeAt(pos++)\n    if (ch !== marker && !isSpace(ch)) { return false }\n    if (ch === marker) { cnt++ }\n  }\n\n  if (cnt < 3) { return false }\n\n  if (silent) { return true }\n\n  state.line = startLine + 1\n\n  const token  = state.push('hr', 'hr', 0)\n  token.map    = [startLine, state.line]\n  token.markup = Array(cnt + 1).join(String.fromCharCode(marker))\n\n  return true\n}\n","// Lists\n\nimport { isSpace } from '../common/utils.mjs'\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker (state, startLine) {\n  const max = state.eMarks[startLine]\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n\n  const marker = state.src.charCodeAt(pos++)\n  // Check bullet\n  if (marker !== 0x2A/* * */ &&\n      marker !== 0x2D/* - */ &&\n      marker !== 0x2B/* + */) {\n    return -1\n  }\n\n  if (pos < max) {\n    const ch = state.src.charCodeAt(pos)\n\n    if (!isSpace(ch)) {\n      // \" -test \" - is not a list item\n      return -1\n    }\n  }\n\n  return pos\n}\n\n// Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipOrderedListMarker (state, startLine) {\n  const start = state.bMarks[startLine] + state.tShift[startLine]\n  const max = state.eMarks[startLine]\n  let pos = start\n\n  // List marker should have at least 2 chars (digit + dot)\n  if (pos + 1 >= max) { return -1 }\n\n  let ch = state.src.charCodeAt(pos++)\n\n  if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1 }\n\n  for (;;) {\n    // EOL -> fail\n    if (pos >= max) { return -1 }\n\n    ch = state.src.charCodeAt(pos++)\n\n    if (ch >= 0x30/* 0 */ && ch <= 0x39/* 9 */) {\n      // List marker should have no more than 9 digits\n      // (prevents integer overflow in browsers)\n      if (pos - start >= 10) { return -1 }\n\n      continue\n    }\n\n    // found valid marker\n    if (ch === 0x29/* ) */ || ch === 0x2e/* . */) {\n      break\n    }\n\n    return -1\n  }\n\n  if (pos < max) {\n    ch = state.src.charCodeAt(pos)\n\n    if (!isSpace(ch)) {\n      // \" 1.test \" - is not a list item\n      return -1\n    }\n  }\n  return pos\n}\n\nfunction markTightParagraphs (state, idx) {\n  const level = state.level + 2\n\n  for (let i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n    if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n      state.tokens[i + 2].hidden = true\n      state.tokens[i].hidden = true\n      i += 2\n    }\n  }\n}\n\nexport default function list (state, startLine, endLine, silent) {\n  let max, pos, start, token\n  let nextLine = startLine\n  let tight = true\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[nextLine] - state.blkIndent >= 4) { return false }\n\n  // Special case:\n  //  - item 1\n  //   - item 2\n  //    - item 3\n  //     - item 4\n  //      - this one is a paragraph continuation\n  if (state.listIndent >= 0 &&\n      state.sCount[nextLine] - state.listIndent >= 4 &&\n      state.sCount[nextLine] < state.blkIndent) {\n    return false\n  }\n\n  let isTerminatingParagraph = false\n\n  // limit conditions when list can interrupt\n  // a paragraph (validation mode only)\n  if (silent && state.parentType === 'paragraph') {\n    // Next list item should still terminate previous list item;\n    //\n    // This code can fail if plugins use blkIndent as well as lists,\n    // but I hope the spec gets fixed long before that happens.\n    //\n    if (state.sCount[nextLine] >= state.blkIndent) {\n      isTerminatingParagraph = true\n    }\n  }\n\n  // Detect list type and position after marker\n  let isOrdered\n  let markerValue\n  let posAfterMarker\n  if ((posAfterMarker = skipOrderedListMarker(state, nextLine)) >= 0) {\n    isOrdered = true\n    start = state.bMarks[nextLine] + state.tShift[nextLine]\n    markerValue = Number(state.src.slice(start, posAfterMarker - 1))\n\n    // If we're starting a new ordered list right after\n    // a paragraph, it should start with 1.\n    if (isTerminatingParagraph && markerValue !== 1) return false\n  } else if ((posAfterMarker = skipBulletListMarker(state, nextLine)) >= 0) {\n    isOrdered = false\n  } else {\n    return false\n  }\n\n  // If we're starting a new unordered list right after\n  // a paragraph, first line should not be empty.\n  if (isTerminatingParagraph) {\n    if (state.skipSpaces(posAfterMarker) >= state.eMarks[nextLine]) return false\n  }\n\n  // For validation mode we can terminate immediately\n  if (silent) { return true }\n\n  // We should terminate list on style change. Remember first one to compare.\n  const markerCharCode = state.src.charCodeAt(posAfterMarker - 1)\n\n  // Start list\n  const listTokIdx = state.tokens.length\n\n  if (isOrdered) {\n    token       = state.push('ordered_list_open', 'ol', 1)\n    if (markerValue !== 1) {\n      token.attrs = [['start', markerValue]]\n    }\n  } else {\n    token       = state.push('bullet_list_open', 'ul', 1)\n  }\n\n  const listLines = [nextLine, 0]\n  token.map    = listLines\n  token.markup = String.fromCharCode(markerCharCode)\n\n  //\n  // Iterate list items\n  //\n\n  let prevEmptyEnd = false\n  const terminatorRules = state.md.block.ruler.getRules('list')\n\n  const oldParentType = state.parentType\n  state.parentType = 'list'\n\n  while (nextLine < endLine) {\n    pos = posAfterMarker\n    max = state.eMarks[nextLine]\n\n    const initial = state.sCount[nextLine] + posAfterMarker - (state.bMarks[nextLine] + state.tShift[nextLine])\n    let offset = initial\n\n    while (pos < max) {\n      const ch = state.src.charCodeAt(pos)\n\n      if (ch === 0x09) {\n        offset += 4 - (offset + state.bsCount[nextLine]) % 4\n      } else if (ch === 0x20) {\n        offset++\n      } else {\n        break\n      }\n\n      pos++\n    }\n\n    const contentStart = pos\n    let indentAfterMarker\n\n    if (contentStart >= max) {\n      // trimming space in \"-    \\n  3\" case, indent is 1 here\n      indentAfterMarker = 1\n    } else {\n      indentAfterMarker = offset - initial\n    }\n\n    // If we have more than 4 spaces, the indent is 1\n    // (the rest is just indented code block)\n    if (indentAfterMarker > 4) { indentAfterMarker = 1 }\n\n    // \"  -  test\"\n    //  ^^^^^ - calculating total length of this thing\n    const indent = initial + indentAfterMarker\n\n    // Run subparser & write tokens\n    token        = state.push('list_item_open', 'li', 1)\n    token.markup = String.fromCharCode(markerCharCode)\n    const itemLines = [nextLine, 0]\n    token.map    = itemLines\n    if (isOrdered) {\n      token.info = state.src.slice(start, posAfterMarker - 1)\n    }\n\n    // change current state, then restore it after parser subcall\n    const oldTight = state.tight\n    const oldTShift = state.tShift[nextLine]\n    const oldSCount = state.sCount[nextLine]\n\n    //  - example list\n    // ^ listIndent position will be here\n    //   ^ blkIndent position will be here\n    //\n    const oldListIndent = state.listIndent\n    state.listIndent = state.blkIndent\n    state.blkIndent = indent\n\n    state.tight = true\n    state.tShift[nextLine] = contentStart - state.bMarks[nextLine]\n    state.sCount[nextLine] = offset\n\n    if (contentStart >= max && state.isEmpty(nextLine + 1)) {\n      // workaround for this case\n      // (list item is empty, list terminates before \"foo\"):\n      // ~~~~~~~~\n      //   -\n      //\n      //     foo\n      // ~~~~~~~~\n      state.line = Math.min(state.line + 2, endLine)\n    } else {\n      state.md.block.tokenize(state, nextLine, endLine, true)\n    }\n\n    // If any of list item is tight, mark list as tight\n    if (!state.tight || prevEmptyEnd) {\n      tight = false\n    }\n    // Item become loose if finish with empty line,\n    // but we should filter last element, because it means list finish\n    prevEmptyEnd = (state.line - nextLine) > 1 && state.isEmpty(state.line - 1)\n\n    state.blkIndent = state.listIndent\n    state.listIndent = oldListIndent\n    state.tShift[nextLine] = oldTShift\n    state.sCount[nextLine] = oldSCount\n    state.tight = oldTight\n\n    token        = state.push('list_item_close', 'li', -1)\n    token.markup = String.fromCharCode(markerCharCode)\n\n    nextLine = state.line\n    itemLines[1] = nextLine\n\n    if (nextLine >= endLine) { break }\n\n    //\n    // Try to check if list is terminated or continued.\n    //\n    if (state.sCount[nextLine] < state.blkIndent) { break }\n\n    // if it's indented more than 3 spaces, it should be a code block\n    if (state.sCount[nextLine] - state.blkIndent >= 4) { break }\n\n    // fail if terminating block found\n    let terminate = false\n    for (let i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true\n        break\n      }\n    }\n    if (terminate) { break }\n\n    // fail if list has another type\n    if (isOrdered) {\n      posAfterMarker = skipOrderedListMarker(state, nextLine)\n      if (posAfterMarker < 0) { break }\n      start = state.bMarks[nextLine] + state.tShift[nextLine]\n    } else {\n      posAfterMarker = skipBulletListMarker(state, nextLine)\n      if (posAfterMarker < 0) { break }\n    }\n\n    if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break }\n  }\n\n  // Finalize list\n  if (isOrdered) {\n    token = state.push('ordered_list_close', 'ol', -1)\n  } else {\n    token = state.push('bullet_list_close', 'ul', -1)\n  }\n  token.markup = String.fromCharCode(markerCharCode)\n\n  listLines[1] = nextLine\n  state.line = nextLine\n\n  state.parentType = oldParentType\n\n  // mark paragraphs tight if needed\n  if (tight) {\n    markTightParagraphs(state, listTokIdx)\n  }\n\n  return true\n}\n","import { isSpace, normalizeReference } from '../common/utils.mjs'\n\nexport default function reference (state, startLine, _endLine, silent) {\n  let lines = 0\n\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  let max = state.eMarks[startLine]\n  let nextLine = startLine + 1\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n  if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false }\n\n  // Simple check to quickly interrupt scan on [link](url) at the start of line.\n  // Can be useful on practice: https://github.com/markdown-it/markdown-it/issues/54\n  while (++pos < max) {\n    if (state.src.charCodeAt(pos) === 0x5D /* ] */ &&\n        state.src.charCodeAt(pos - 1) !== 0x5C/* \\ */) {\n      if (pos + 1 === max) { return false }\n      if (state.src.charCodeAt(pos + 1) !== 0x3A/* : */) { return false }\n      break\n    }\n  }\n\n  const endLine = state.lineMax\n\n  // jump line-by-line until empty one or EOF\n  const terminatorRules = state.md.block.ruler.getRules('reference')\n\n  const oldParentType = state.parentType\n  state.parentType = 'reference'\n\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (state.sCount[nextLine] - state.blkIndent > 3) { continue }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) { continue }\n\n    // Some tags can terminate paragraph without empty line.\n    let terminate = false\n    for (let i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true\n        break\n      }\n    }\n    if (terminate) { break }\n  }\n\n  const str = state.getLines(startLine, nextLine, state.blkIndent, false).trim()\n  max = str.length\n  let labelEnd = -1\n\n  for (pos = 1; pos < max; pos++) {\n    const ch = str.charCodeAt(pos)\n    if (ch === 0x5B /* [ */) {\n      return false\n    } else if (ch === 0x5D /* ] */) {\n      labelEnd = pos\n      break\n    } else if (ch === 0x0A /* \\n */) {\n      lines++\n    } else if (ch === 0x5C /* \\ */) {\n      pos++\n      if (pos < max && str.charCodeAt(pos) === 0x0A) {\n        lines++\n      }\n    }\n  }\n\n  if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false }\n\n  // [label]:   destination   'title'\n  //         ^^^ skip optional whitespace here\n  for (pos = labelEnd + 2; pos < max; pos++) {\n    const ch = str.charCodeAt(pos)\n    if (ch === 0x0A) {\n      lines++\n    } else if (isSpace(ch)) {\n      /* eslint no-empty:0 */\n    } else {\n      break\n    }\n  }\n\n  // [label]:   destination   'title'\n  //            ^^^^^^^^^^^ parse this\n  const destRes = state.md.helpers.parseLinkDestination(str, pos, max)\n  if (!destRes.ok) { return false }\n\n  const href = state.md.normalizeLink(destRes.str)\n  if (!state.md.validateLink(href)) { return false }\n\n  pos = destRes.pos\n  lines += destRes.lines\n\n  // save cursor state, we could require to rollback later\n  const destEndPos = pos\n  const destEndLineNo = lines\n\n  // [label]:   destination   'title'\n  //                       ^^^ skipping those spaces\n  const start = pos\n  for (; pos < max; pos++) {\n    const ch = str.charCodeAt(pos)\n    if (ch === 0x0A) {\n      lines++\n    } else if (isSpace(ch)) {\n      /* eslint no-empty:0 */\n    } else {\n      break\n    }\n  }\n\n  // [label]:   destination   'title'\n  //                          ^^^^^^^ parse this\n  const titleRes = state.md.helpers.parseLinkTitle(str, pos, max)\n  let title\n\n  if (pos < max && start !== pos && titleRes.ok) {\n    title = titleRes.str\n    pos = titleRes.pos\n    lines += titleRes.lines\n  } else {\n    title = ''\n    pos = destEndPos\n    lines = destEndLineNo\n  }\n\n  // skip trailing spaces until the rest of the line\n  while (pos < max) {\n    const ch = str.charCodeAt(pos)\n    if (!isSpace(ch)) { break }\n    pos++\n  }\n\n  if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n    if (title) {\n      // garbage at the end of the line after title,\n      // but it could still be a valid reference if we roll back\n      title = ''\n      pos = destEndPos\n      lines = destEndLineNo\n      while (pos < max) {\n        const ch = str.charCodeAt(pos)\n        if (!isSpace(ch)) { break }\n        pos++\n      }\n    }\n  }\n\n  if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n    // garbage at the end of the line\n    return false\n  }\n\n  const label = normalizeReference(str.slice(1, labelEnd))\n  if (!label) {\n    // CommonMark 0.20 disallows empty labels\n    return false\n  }\n\n  // Reference can not terminate anything. This check is for safety only.\n  /* istanbul ignore if */\n  if (silent) { return true }\n\n  if (typeof state.env.references === 'undefined') {\n    state.env.references = {}\n  }\n  if (typeof state.env.references[label] === 'undefined') {\n    state.env.references[label] = { title, href }\n  }\n\n  state.parentType = oldParentType\n\n  state.line = startLine + lines + 1\n  return true\n}\n","// List of valid html blocks names, according to commonmark spec\n// https://spec.commonmark.org/0.30/#html-blocks\n\nexport default [\n  'address',\n  'article',\n  'aside',\n  'base',\n  'basefont',\n  'blockquote',\n  'body',\n  'caption',\n  'center',\n  'col',\n  'colgroup',\n  'dd',\n  'details',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'frame',\n  'frameset',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hr',\n  'html',\n  'iframe',\n  'legend',\n  'li',\n  'link',\n  'main',\n  'menu',\n  'menuitem',\n  'nav',\n  'noframes',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'param',\n  'section',\n  'source',\n  'summary',\n  'table',\n  'tbody',\n  'td',\n  'tfoot',\n  'th',\n  'thead',\n  'title',\n  'tr',\n  'track',\n  'ul'\n]\n","// Regexps to match html elements\n\nconst attr_name     = '[a-zA-Z_:][a-zA-Z0-9:._-]*'\n\nconst unquoted      = '[^\"\\'=<>`\\\\x00-\\\\x20]+'\nconst single_quoted = \"'[^']*'\"\nconst double_quoted = '\"[^\"]*\"'\n\nconst attr_value  = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')'\n\nconst attribute   = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)'\n\nconst open_tag    = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>'\n\nconst close_tag   = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>'\nconst comment     = '<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->'\nconst processing  = '<[?][\\\\s\\\\S]*?[?]>'\nconst declaration = '<![A-Z]+\\\\s+[^>]*>'\nconst cdata       = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>'\n\nconst HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment +\n                        '|' + processing + '|' + declaration + '|' + cdata + ')')\nconst HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')')\n\nexport { HTML_TAG_RE, HTML_OPEN_CLOSE_TAG_RE }\n","// HTML block\n\nimport block_names from '../common/html_blocks.mjs'\nimport { HTML_OPEN_CLOSE_TAG_RE } from '../common/html_re.mjs'\n\n// An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\nconst HTML_SEQUENCES = [\n  [/^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/i, true],\n  [/^<!--/,        /-->/,   true],\n  [/^<\\?/,         /\\?>/,   true],\n  [/^<![A-Z]/,     />/,     true],\n  [/^<!\\[CDATA\\[/, /\\]\\]>/, true],\n  [new RegExp('^</?(' + block_names.join('|') + ')(?=(\\\\s|/?>|$))', 'i'), /^$/, true],\n  [new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\\\s*$'),  /^$/, false]\n]\n\nexport default function html_block (state, startLine, endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  let max = state.eMarks[startLine]\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n  if (!state.md.options.html) { return false }\n\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false }\n\n  let lineText = state.src.slice(pos, max)\n\n  let i = 0\n  for (; i < HTML_SEQUENCES.length; i++) {\n    if (HTML_SEQUENCES[i][0].test(lineText)) { break }\n  }\n  if (i === HTML_SEQUENCES.length) { return false }\n\n  if (silent) {\n    // true if this sequence can be a terminator, false otherwise\n    return HTML_SEQUENCES[i][2]\n  }\n\n  let nextLine = startLine + 1\n\n  // If we are here - we detected HTML block.\n  // Let's roll down till block end.\n  if (!HTML_SEQUENCES[i][1].test(lineText)) {\n    for (; nextLine < endLine; nextLine++) {\n      if (state.sCount[nextLine] < state.blkIndent) { break }\n\n      pos = state.bMarks[nextLine] + state.tShift[nextLine]\n      max = state.eMarks[nextLine]\n      lineText = state.src.slice(pos, max)\n\n      if (HTML_SEQUENCES[i][1].test(lineText)) {\n        if (lineText.length !== 0) { nextLine++ }\n        break\n      }\n    }\n  }\n\n  state.line = nextLine\n\n  const token   = state.push('html_block', '', 0)\n  token.map     = [startLine, nextLine]\n  token.content = state.getLines(startLine, nextLine, state.blkIndent, true)\n\n  return true\n}\n","// heading (#, ##, ...)\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function heading (state, startLine, endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  let max = state.eMarks[startLine]\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n  let ch  = state.src.charCodeAt(pos)\n\n  if (ch !== 0x23/* # */ || pos >= max) { return false }\n\n  // count heading level\n  let level = 1\n  ch = state.src.charCodeAt(++pos)\n  while (ch === 0x23/* # */ && pos < max && level <= 6) {\n    level++\n    ch = state.src.charCodeAt(++pos)\n  }\n\n  if (level > 6 || (pos < max && !isSpace(ch))) { return false }\n\n  if (silent) { return true }\n\n  // Let's cut tails like '    ###  ' from the end of string\n\n  max = state.skipSpacesBack(max, pos)\n  const tmp = state.skipCharsBack(max, 0x23, pos) // #\n  if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n    max = tmp\n  }\n\n  state.line = startLine + 1\n\n  const token_o  = state.push('heading_open', 'h' + String(level), 1)\n  token_o.markup = '########'.slice(0, level)\n  token_o.map    = [startLine, state.line]\n\n  const token_i    = state.push('inline', '', 0)\n  token_i.content  = state.src.slice(pos, max).trim()\n  token_i.map      = [startLine, state.line]\n  token_i.children = []\n\n  const token_c  = state.push('heading_close', 'h' + String(level), -1)\n  token_c.markup = '########'.slice(0, level)\n\n  return true\n}\n","// lheading (---, ===)\n\nexport default function lheading (state, startLine, endLine/*, silent */) {\n  const terminatorRules = state.md.block.ruler.getRules('paragraph')\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n  const oldParentType = state.parentType\n  state.parentType = 'paragraph' // use paragraph to match terminatorRules\n\n  // jump line-by-line until empty one or EOF\n  let level = 0\n  let marker\n  let nextLine = startLine + 1\n\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (state.sCount[nextLine] - state.blkIndent > 3) { continue }\n\n    //\n    // Check for underline in setext header\n    //\n    if (state.sCount[nextLine] >= state.blkIndent) {\n      let pos = state.bMarks[nextLine] + state.tShift[nextLine]\n      const max = state.eMarks[nextLine]\n\n      if (pos < max) {\n        marker = state.src.charCodeAt(pos)\n\n        if (marker === 0x2D/* - */ || marker === 0x3D/* = */) {\n          pos = state.skipChars(pos, marker)\n          pos = state.skipSpaces(pos)\n\n          if (pos >= max) {\n            level = (marker === 0x3D/* = */ ? 1 : 2)\n            break\n          }\n        }\n      }\n    }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) { continue }\n\n    // Some tags can terminate paragraph without empty line.\n    let terminate = false\n    for (let i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true\n        break\n      }\n    }\n    if (terminate) { break }\n  }\n\n  if (!level) {\n    // Didn't find valid underline\n    return false\n  }\n\n  const content = state.getLines(startLine, nextLine, state.blkIndent, false).trim()\n\n  state.line = nextLine + 1\n\n  const token_o    = state.push('heading_open', 'h' + String(level), 1)\n  token_o.markup   = String.fromCharCode(marker)\n  token_o.map      = [startLine, state.line]\n\n  const token_i    = state.push('inline', '', 0)\n  token_i.content  = content\n  token_i.map      = [startLine, state.line - 1]\n  token_i.children = []\n\n  const token_c    = state.push('heading_close', 'h' + String(level), -1)\n  token_c.markup   = String.fromCharCode(marker)\n\n  state.parentType = oldParentType\n\n  return true\n}\n","// Paragraph\n\nexport default function paragraph (state, startLine, endLine) {\n  const terminatorRules = state.md.block.ruler.getRules('paragraph')\n  const oldParentType = state.parentType\n  let nextLine = startLine + 1\n  state.parentType = 'paragraph'\n\n  // jump line-by-line until empty one or EOF\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (state.sCount[nextLine] - state.blkIndent > 3) { continue }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) { continue }\n\n    // Some tags can terminate paragraph without empty line.\n    let terminate = false\n    for (let i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true\n        break\n      }\n    }\n    if (terminate) { break }\n  }\n\n  const content = state.getLines(startLine, nextLine, state.blkIndent, false).trim()\n\n  state.line = nextLine\n\n  const token_o    = state.push('paragraph_open', 'p', 1)\n  token_o.map      = [startLine, state.line]\n\n  const token_i    = state.push('inline', '', 0)\n  token_i.content  = content\n  token_i.map      = [startLine, state.line]\n  token_i.children = []\n\n  state.push('paragraph_close', 'p', -1)\n\n  state.parentType = oldParentType\n\n  return true\n}\n","/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n\nimport Ruler from './ruler.mjs'\nimport StateBlock from './rules_block/state_block.mjs'\n\nimport r_table from './rules_block/table.mjs'\nimport r_code from './rules_block/code.mjs'\nimport r_fence from './rules_block/fence.mjs'\nimport r_blockquote from './rules_block/blockquote.mjs'\nimport r_hr from './rules_block/hr.mjs'\nimport r_list from './rules_block/list.mjs'\nimport r_reference from './rules_block/reference.mjs'\nimport r_html_block from './rules_block/html_block.mjs'\nimport r_heading from './rules_block/heading.mjs'\nimport r_lheading from './rules_block/lheading.mjs'\nimport r_paragraph from './rules_block/paragraph.mjs'\n\nconst _rules = [\n  // First 2 params - rule name & source. Secondary array - list of rules,\n  // which can be terminated by this one.\n  ['table',      r_table,      ['paragraph', 'reference']],\n  ['code',       r_code],\n  ['fence',      r_fence,      ['paragraph', 'reference', 'blockquote', 'list']],\n  ['blockquote', r_blockquote, ['paragraph', 'reference', 'blockquote', 'list']],\n  ['hr',         r_hr,         ['paragraph', 'reference', 'blockquote', 'list']],\n  ['list',       r_list,       ['paragraph', 'reference', 'blockquote']],\n  ['reference',  r_reference],\n  ['html_block', r_html_block, ['paragraph', 'reference', 'blockquote']],\n  ['heading',    r_heading,    ['paragraph', 'reference', 'blockquote']],\n  ['lheading',   r_lheading],\n  ['paragraph',  r_paragraph]\n]\n\n/**\n * new ParserBlock()\n **/\nfunction ParserBlock () {\n  /**\n   * ParserBlock#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of block rules.\n   **/\n  this.ruler = new Ruler()\n\n  for (let i = 0; i < _rules.length; i++) {\n    this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() })\n  }\n}\n\n// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n  const rules = this.ruler.getRules('')\n  const len = rules.length\n  const maxNesting = state.md.options.maxNesting\n  let line = startLine\n  let hasEmptyLines = false\n\n  while (line < endLine) {\n    state.line = line = state.skipEmptyLines(line)\n    if (line >= endLine) { break }\n\n    // Termination condition for nested calls.\n    // Nested calls currently used for blockquotes & lists\n    if (state.sCount[line] < state.blkIndent) { break }\n\n    // If nesting level exceeded - skip tail to the end. That's not ordinary\n    // situation and we should not care about content.\n    if (state.level >= maxNesting) {\n      state.line = endLine\n      break\n    }\n\n    // Try all possible rules.\n    // On success, rule should:\n    //\n    // - update `state.line`\n    // - update `state.tokens`\n    // - return true\n    const prevLine = state.line\n    let ok = false\n\n    for (let i = 0; i < len; i++) {\n      ok = rules[i](state, line, endLine, false)\n      if (ok) {\n        if (prevLine >= state.line) {\n          throw new Error(\"block rule didn't increment state.line\")\n        }\n        break\n      }\n    }\n\n    // this can only happen if user disables paragraph rule\n    if (!ok) throw new Error('none of the block rules matched')\n\n    // set state.tight if we had an empty line before current tag\n    // i.e. latest empty line should not count\n    state.tight = !hasEmptyLines\n\n    // paragraph might \"eat\" one newline after it in nested lists\n    if (state.isEmpty(state.line - 1)) {\n      hasEmptyLines = true\n    }\n\n    line = state.line\n\n    if (line < endLine && state.isEmpty(line)) {\n      hasEmptyLines = true\n      line++\n      state.line = line\n    }\n  }\n}\n\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n  if (!src) { return }\n\n  const state = new this.State(src, md, env, outTokens)\n\n  this.tokenize(state, state.line, state.lineMax)\n}\n\nParserBlock.prototype.State = StateBlock\n\nexport default ParserBlock\n","// Inline parser state\n\nimport Token from '../token.mjs'\nimport { isWhiteSpace, isPunctChar, isMdAsciiPunct } from '../common/utils.mjs'\n\nfunction StateInline (src, md, env, outTokens) {\n  this.src = src\n  this.env = env\n  this.md = md\n  this.tokens = outTokens\n  this.tokens_meta = Array(outTokens.length)\n\n  this.pos = 0\n  this.posMax = this.src.length\n  this.level = 0\n  this.pending = ''\n  this.pendingLevel = 0\n\n  // Stores { start: end } pairs. Useful for backtrack\n  // optimization of pairs parse (emphasis, strikes).\n  this.cache = {}\n\n  // List of emphasis-like delimiters for current tag\n  this.delimiters = []\n\n  // Stack of delimiter lists for upper level tags\n  this._prev_delimiters = []\n\n  // backtick length => last seen position\n  this.backticks = {}\n  this.backticksScanned = false\n\n  // Counter used to disable inline linkify-it execution\n  // inside <a> and markdown links\n  this.linkLevel = 0\n}\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n  const token = new Token('text', '', 0)\n  token.content = this.pending\n  token.level = this.pendingLevel\n  this.tokens.push(token)\n  this.pending = ''\n  return token\n}\n\n// Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\nStateInline.prototype.push = function (type, tag, nesting) {\n  if (this.pending) {\n    this.pushPending()\n  }\n\n  const token = new Token(type, tag, nesting)\n  let token_meta = null\n\n  if (nesting < 0) {\n    // closing tag\n    this.level--\n    this.delimiters = this._prev_delimiters.pop()\n  }\n\n  token.level = this.level\n\n  if (nesting > 0) {\n    // opening tag\n    this.level++\n    this._prev_delimiters.push(this.delimiters)\n    this.delimiters = []\n    token_meta = { delimiters: this.delimiters }\n  }\n\n  this.pendingLevel = this.level\n  this.tokens.push(token)\n  this.tokens_meta.push(token_meta)\n  return token\n}\n\n// Scan a sequence of emphasis-like markers, and determine whether\n// it can start an emphasis sequence or end an emphasis sequence.\n//\n//  - start - position to scan from (it should point at a valid marker);\n//  - canSplitWord - determine if these markers can be found inside a word\n//\nStateInline.prototype.scanDelims = function (start, canSplitWord) {\n  let can_open, can_close\n  let left_flanking = true\n  let right_flanking = true\n  const max = this.posMax\n  const marker = this.src.charCodeAt(start)\n\n  // treat beginning of the line as a whitespace\n  const lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20\n\n  let pos = start\n  while (pos < max && this.src.charCodeAt(pos) === marker) { pos++ }\n\n  const count = pos - start\n\n  // treat end of the line as a whitespace\n  const nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20\n\n  const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar))\n  const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar))\n\n  const isLastWhiteSpace = isWhiteSpace(lastChar)\n  const isNextWhiteSpace = isWhiteSpace(nextChar)\n\n  if (isNextWhiteSpace) {\n    left_flanking = false\n  } else if (isNextPunctChar) {\n    if (!(isLastWhiteSpace || isLastPunctChar)) {\n      left_flanking = false\n    }\n  }\n\n  if (isLastWhiteSpace) {\n    right_flanking = false\n  } else if (isLastPunctChar) {\n    if (!(isNextWhiteSpace || isNextPunctChar)) {\n      right_flanking = false\n    }\n  }\n\n  if (!canSplitWord) {\n    can_open  = left_flanking  && (!right_flanking || isLastPunctChar)\n    can_close = right_flanking && (!left_flanking  || isNextPunctChar)\n  } else {\n    can_open  = left_flanking\n    can_close = right_flanking\n  }\n\n  return { can_open, can_close, length: count }\n}\n\n// re-export Token class to use in block rules\nStateInline.prototype.Token = Token\n\nexport default StateInline\n","// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n\n// Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\nfunction isTerminatorChar (ch) {\n  switch (ch) {\n    case 0x0A/* \\n */:\n    case 0x21/* ! */:\n    case 0x23/* # */:\n    case 0x24/* $ */:\n    case 0x25/* % */:\n    case 0x26/* & */:\n    case 0x2A/* * */:\n    case 0x2B/* + */:\n    case 0x2D/* - */:\n    case 0x3A/* : */:\n    case 0x3C/* < */:\n    case 0x3D/* = */:\n    case 0x3E/* > */:\n    case 0x40/* @ */:\n    case 0x5B/* [ */:\n    case 0x5C/* \\ */:\n    case 0x5D/* ] */:\n    case 0x5E/* ^ */:\n    case 0x5F/* _ */:\n    case 0x60/* ` */:\n    case 0x7B/* { */:\n    case 0x7D/* } */:\n    case 0x7E/* ~ */:\n      return true\n    default:\n      return false\n  }\n}\n\nexport default function text (state, silent) {\n  let pos = state.pos\n\n  while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n    pos++\n  }\n\n  if (pos === state.pos) { return false }\n\n  if (!silent) { state.pending += state.src.slice(state.pos, pos) }\n\n  state.pos = pos\n\n  return true\n}\n\n// Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParcerInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n  var pos = state.pos,\n      idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n  // first char is terminator -> empty text\n  if (idx === 0) { return false; }\n\n  // no terminator -> text till end of string\n  if (idx < 0) {\n    if (!silent) { state.pending += state.src.slice(pos); }\n    state.pos = state.src.length;\n    return true;\n  }\n\n  if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n  state.pos += idx;\n\n  return true;\n}; */\n","// Process links like https://example.org/\n\n// RFC3986: scheme = ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\nconst SCHEME_RE = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i\n\nexport default function linkify (state, silent) {\n  if (!state.md.options.linkify) return false\n  if (state.linkLevel > 0) return false\n\n  const pos = state.pos\n  const max = state.posMax\n\n  if (pos + 3 > max) return false\n  if (state.src.charCodeAt(pos) !== 0x3A/* : */) return false\n  if (state.src.charCodeAt(pos + 1) !== 0x2F/* / */) return false\n  if (state.src.charCodeAt(pos + 2) !== 0x2F/* / */) return false\n\n  const match = state.pending.match(SCHEME_RE)\n  if (!match) return false\n\n  const proto = match[1]\n\n  const link = state.md.linkify.matchAtStart(state.src.slice(pos - proto.length))\n  if (!link) return false\n\n  let url = link.url\n\n  // invalid link, but still detected by linkify somehow;\n  // need to check to prevent infinite loop below\n  if (url.length <= proto.length) return false\n\n  // disallow '*' at the end of the link (conflicts with emphasis)\n  url = url.replace(/\\*+$/, '')\n\n  const fullUrl = state.md.normalizeLink(url)\n  if (!state.md.validateLink(fullUrl)) return false\n\n  if (!silent) {\n    state.pending = state.pending.slice(0, -proto.length)\n\n    const token_o = state.push('link_open', 'a', 1)\n    token_o.attrs = [['href', fullUrl]]\n    token_o.markup = 'linkify'\n    token_o.info = 'auto'\n\n    const token_t = state.push('text', '', 0)\n    token_t.content = state.md.normalizeLinkText(url)\n\n    const token_c = state.push('link_close', 'a', -1)\n    token_c.markup = 'linkify'\n    token_c.info = 'auto'\n  }\n\n  state.pos += url.length - proto.length\n  return true\n}\n","// Proceess '\\n'\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function newline (state, silent) {\n  let pos = state.pos\n\n  if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false }\n\n  const pmax = state.pending.length - 1\n  const max = state.posMax\n\n  // '  \\n' -> hardbreak\n  // Lookup in pending chars is bad practice! Don't copy to other rules!\n  // Pending string is stored in concat mode, indexed lookups will cause\n  // convertion to flat mode.\n  if (!silent) {\n    if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n      if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n        // Find whitespaces tail of pending chars.\n        let ws = pmax - 1\n        while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--\n\n        state.pending = state.pending.slice(0, ws)\n        state.push('hardbreak', 'br', 0)\n      } else {\n        state.pending = state.pending.slice(0, -1)\n        state.push('softbreak', 'br', 0)\n      }\n    } else {\n      state.push('softbreak', 'br', 0)\n    }\n  }\n\n  pos++\n\n  // skip heading spaces for next line\n  while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++ }\n\n  state.pos = pos\n  return true\n}\n","// Process escaped chars and hardbreaks\n\nimport { isSpace } from '../common/utils.mjs'\n\nconst ESCAPED = []\n\nfor (let i = 0; i < 256; i++) { ESCAPED.push(0) }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n  .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1 })\n\nexport default function escape (state, silent) {\n  let pos = state.pos\n  const max = state.posMax\n\n  if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) return false\n  pos++\n\n  // '\\' at the end of the inline block\n  if (pos >= max) return false\n\n  let ch1 = state.src.charCodeAt(pos)\n\n  if (ch1 === 0x0A) {\n    if (!silent) {\n      state.push('hardbreak', 'br', 0)\n    }\n\n    pos++\n    // skip leading whitespaces from next line\n    while (pos < max) {\n      ch1 = state.src.charCodeAt(pos)\n      if (!isSpace(ch1)) break\n      pos++\n    }\n\n    state.pos = pos\n    return true\n  }\n\n  let escapedStr = state.src[pos]\n\n  if (ch1 >= 0xD800 && ch1 <= 0xDBFF && pos + 1 < max) {\n    const ch2 = state.src.charCodeAt(pos + 1)\n\n    if (ch2 >= 0xDC00 && ch2 <= 0xDFFF) {\n      escapedStr += state.src[pos + 1]\n      pos++\n    }\n  }\n\n  const origStr = '\\\\' + escapedStr\n\n  if (!silent) {\n    const token = state.push('text_special', '', 0)\n\n    if (ch1 < 256 && ESCAPED[ch1] !== 0) {\n      token.content = escapedStr\n    } else {\n      token.content = origStr\n    }\n\n    token.markup = origStr\n    token.info   = 'escape'\n  }\n\n  state.pos = pos + 1\n  return true\n}\n","// Parse backticks\n\nexport default function backtick (state, silent) {\n  let pos = state.pos\n  const ch = state.src.charCodeAt(pos)\n\n  if (ch !== 0x60/* ` */) { return false }\n\n  const start = pos\n  pos++\n  const max = state.posMax\n\n  // scan marker length\n  while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++ }\n\n  const marker = state.src.slice(start, pos)\n  const openerLength = marker.length\n\n  if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n    if (!silent) state.pending += marker\n    state.pos += openerLength\n    return true\n  }\n\n  let matchEnd = pos\n  let matchStart\n\n  // Nothing found in the cache, scan until the end of the line (or until marker is found)\n  while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n    matchEnd = matchStart + 1\n\n    // scan marker length\n    while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++ }\n\n    const closerLength = matchEnd - matchStart\n\n    if (closerLength === openerLength) {\n      // Found matching closer length.\n      if (!silent) {\n        const token = state.push('code_inline', 'code', 0)\n        token.markup = marker\n        token.content = state.src.slice(pos, matchStart)\n          .replace(/\\n/g, ' ')\n          .replace(/^ (.+) $/, '$1')\n      }\n      state.pos = matchEnd\n      return true\n    }\n\n    // Some different length found, put it in cache as upper limit of where closer can be found\n    state.backticks[closerLength] = matchStart\n  }\n\n  // Scanned through the end, didn't find anything\n  state.backticksScanned = true\n\n  if (!silent) state.pending += marker\n  state.pos += openerLength\n  return true\n}\n","// ~~strike through~~\n//\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nfunction strikethrough_tokenize (state, silent) {\n  const start = state.pos\n  const marker = state.src.charCodeAt(start)\n\n  if (silent) { return false }\n\n  if (marker !== 0x7E/* ~ */) { return false }\n\n  const scanned = state.scanDelims(state.pos, true)\n  let len = scanned.length\n  const ch = String.fromCharCode(marker)\n\n  if (len < 2) { return false }\n\n  let token\n\n  if (len % 2) {\n    token         = state.push('text', '', 0)\n    token.content = ch\n    len--\n  }\n\n  for (let i = 0; i < len; i += 2) {\n    token         = state.push('text', '', 0)\n    token.content = ch + ch\n\n    state.delimiters.push({\n      marker,\n      length: 0,     // disable \"rule of 3\" length checks meant for emphasis\n      token: state.tokens.length - 1,\n      end: -1,\n      open: scanned.can_open,\n      close: scanned.can_close\n    })\n  }\n\n  state.pos += scanned.length\n\n  return true\n}\n\nfunction postProcess (state, delimiters) {\n  let token\n  const loneMarkers = []\n  const max = delimiters.length\n\n  for (let i = 0; i < max; i++) {\n    const startDelim = delimiters[i]\n\n    if (startDelim.marker !== 0x7E/* ~ */) {\n      continue\n    }\n\n    if (startDelim.end === -1) {\n      continue\n    }\n\n    const endDelim = delimiters[startDelim.end]\n\n    token         = state.tokens[startDelim.token]\n    token.type    = 's_open'\n    token.tag     = 's'\n    token.nesting = 1\n    token.markup  = '~~'\n    token.content = ''\n\n    token         = state.tokens[endDelim.token]\n    token.type    = 's_close'\n    token.tag     = 's'\n    token.nesting = -1\n    token.markup  = '~~'\n    token.content = ''\n\n    if (state.tokens[endDelim.token - 1].type === 'text' &&\n        state.tokens[endDelim.token - 1].content === '~') {\n      loneMarkers.push(endDelim.token - 1)\n    }\n  }\n\n  // If a marker sequence has an odd number of characters, it's splitted\n  // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n  // start of the sequence.\n  //\n  // So, we have to move all those markers after subsequent s_close tags.\n  //\n  while (loneMarkers.length) {\n    const i = loneMarkers.pop()\n    let j = i + 1\n\n    while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n      j++\n    }\n\n    j--\n\n    if (i !== j) {\n      token = state.tokens[j]\n      state.tokens[j] = state.tokens[i]\n      state.tokens[i] = token\n    }\n  }\n}\n\n// Walk through delimiter list and replace text tokens with tags\n//\nfunction strikethrough_postProcess (state) {\n  const tokens_meta = state.tokens_meta\n  const max = state.tokens_meta.length\n\n  postProcess(state, state.delimiters)\n\n  for (let curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      postProcess(state, tokens_meta[curr].delimiters)\n    }\n  }\n}\n\nexport default {\n  tokenize: strikethrough_tokenize,\n  postProcess: strikethrough_postProcess\n}\n","// Process *this* and _that_\n//\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nfunction emphasis_tokenize (state, silent) {\n  const start = state.pos\n  const marker = state.src.charCodeAt(start)\n\n  if (silent) { return false }\n\n  if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false }\n\n  const scanned = state.scanDelims(state.pos, marker === 0x2A)\n\n  for (let i = 0; i < scanned.length; i++) {\n    const token = state.push('text', '', 0)\n    token.content = String.fromCharCode(marker)\n\n    state.delimiters.push({\n      // Char code of the starting marker (number).\n      //\n      marker,\n\n      // Total length of these series of delimiters.\n      //\n      length: scanned.length,\n\n      // A position of the token this delimiter corresponds to.\n      //\n      token: state.tokens.length - 1,\n\n      // If this delimiter is matched as a valid opener, `end` will be\n      // equal to its position, otherwise it's `-1`.\n      //\n      end: -1,\n\n      // Boolean flags that determine if this delimiter could open or close\n      // an emphasis.\n      //\n      open: scanned.can_open,\n      close: scanned.can_close\n    })\n  }\n\n  state.pos += scanned.length\n\n  return true\n}\n\nfunction postProcess (state, delimiters) {\n  const max = delimiters.length\n\n  for (let i = max - 1; i >= 0; i--) {\n    const startDelim = delimiters[i]\n\n    if (startDelim.marker !== 0x5F/* _ */ && startDelim.marker !== 0x2A/* * */) {\n      continue\n    }\n\n    // Process only opening markers\n    if (startDelim.end === -1) {\n      continue\n    }\n\n    const endDelim = delimiters[startDelim.end]\n\n    // If the previous delimiter has the same marker and is adjacent to this one,\n    // merge those into one strong delimiter.\n    //\n    // `<em><em>whatever</em></em>` -> `<strong>whatever</strong>`\n    //\n    const isStrong = i > 0 &&\n               delimiters[i - 1].end === startDelim.end + 1 &&\n               // check that first two markers match and adjacent\n               delimiters[i - 1].marker === startDelim.marker &&\n               delimiters[i - 1].token === startDelim.token - 1 &&\n               // check that last two markers are adjacent (we can safely assume they match)\n               delimiters[startDelim.end + 1].token === endDelim.token + 1\n\n    const ch = String.fromCharCode(startDelim.marker)\n\n    const token_o   = state.tokens[startDelim.token]\n    token_o.type    = isStrong ? 'strong_open' : 'em_open'\n    token_o.tag     = isStrong ? 'strong' : 'em'\n    token_o.nesting = 1\n    token_o.markup  = isStrong ? ch + ch : ch\n    token_o.content = ''\n\n    const token_c   = state.tokens[endDelim.token]\n    token_c.type    = isStrong ? 'strong_close' : 'em_close'\n    token_c.tag     = isStrong ? 'strong' : 'em'\n    token_c.nesting = -1\n    token_c.markup  = isStrong ? ch + ch : ch\n    token_c.content = ''\n\n    if (isStrong) {\n      state.tokens[delimiters[i - 1].token].content = ''\n      state.tokens[delimiters[startDelim.end + 1].token].content = ''\n      i--\n    }\n  }\n}\n\n// Walk through delimiter list and replace text tokens with tags\n//\nfunction emphasis_post_process (state) {\n  const tokens_meta = state.tokens_meta\n  const max = state.tokens_meta.length\n\n  postProcess(state, state.delimiters)\n\n  for (let curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      postProcess(state, tokens_meta[curr].delimiters)\n    }\n  }\n}\n\nexport default {\n  tokenize: emphasis_tokenize,\n  postProcess: emphasis_post_process\n}\n","// Process [link](<to> \"stuff\")\n\nimport { normalizeReference, isSpace } from '../common/utils.mjs'\n\nexport default function link (state, silent) {\n  let code, label, res, ref\n  let href = ''\n  let title = ''\n  let start = state.pos\n  let parseReference = true\n\n  if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false }\n\n  const oldPos = state.pos\n  const max = state.posMax\n  const labelStart = state.pos + 1\n  const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true)\n\n  // parser failed to find ']', so it's not a valid link\n  if (labelEnd < 0) { return false }\n\n  let pos = labelEnd + 1\n  if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n    //\n    // Inline link\n    //\n\n    // might have found a valid shortcut link, disable reference parsing\n    parseReference = false\n\n    // [link](  <href>  \"title\"  )\n    //        ^^ skipping these spaces\n    pos++\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos)\n      if (!isSpace(code) && code !== 0x0A) { break }\n    }\n    if (pos >= max) { return false }\n\n    // [link](  <href>  \"title\"  )\n    //          ^^^^^^ parsing link destination\n    start = pos\n    res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax)\n    if (res.ok) {\n      href = state.md.normalizeLink(res.str)\n      if (state.md.validateLink(href)) {\n        pos = res.pos\n      } else {\n        href = ''\n      }\n\n      // [link](  <href>  \"title\"  )\n      //                ^^ skipping these spaces\n      start = pos\n      for (; pos < max; pos++) {\n        code = state.src.charCodeAt(pos)\n        if (!isSpace(code) && code !== 0x0A) { break }\n      }\n\n      // [link](  <href>  \"title\"  )\n      //                  ^^^^^^^ parsing link title\n      res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax)\n      if (pos < max && start !== pos && res.ok) {\n        title = res.str\n        pos = res.pos\n\n        // [link](  <href>  \"title\"  )\n        //                         ^^ skipping these spaces\n        for (; pos < max; pos++) {\n          code = state.src.charCodeAt(pos)\n          if (!isSpace(code) && code !== 0x0A) { break }\n        }\n      }\n    }\n\n    if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n      // parsing a valid shortcut link failed, fallback to reference\n      parseReference = true\n    }\n    pos++\n  }\n\n  if (parseReference) {\n    //\n    // Link reference\n    //\n    if (typeof state.env.references === 'undefined') { return false }\n\n    if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n      start = pos + 1\n      pos = state.md.helpers.parseLinkLabel(state, pos)\n      if (pos >= 0) {\n        label = state.src.slice(start, pos++)\n      } else {\n        pos = labelEnd + 1\n      }\n    } else {\n      pos = labelEnd + 1\n    }\n\n    // covers label === '' and label === undefined\n    // (collapsed reference link and shortcut reference link respectively)\n    if (!label) { label = state.src.slice(labelStart, labelEnd) }\n\n    ref = state.env.references[normalizeReference(label)]\n    if (!ref) {\n      state.pos = oldPos\n      return false\n    }\n    href = ref.href\n    title = ref.title\n  }\n\n  //\n  // We found the end of the link, and know for a fact it's a valid link;\n  // so all that's left to do is to call tokenizer.\n  //\n  if (!silent) {\n    state.pos = labelStart\n    state.posMax = labelEnd\n\n    const token_o = state.push('link_open', 'a', 1)\n    const attrs = [['href', href]]\n    token_o.attrs  = attrs\n    if (title) {\n      attrs.push(['title', title])\n    }\n\n    state.linkLevel++\n    state.md.inline.tokenize(state)\n    state.linkLevel--\n\n    state.push('link_close', 'a', -1)\n  }\n\n  state.pos = pos\n  state.posMax = max\n  return true\n}\n","// Process ![image](<src> \"title\")\n\nimport { normalizeReference, isSpace } from '../common/utils.mjs'\n\nexport default function image (state, silent) {\n  let code, content, label, pos, ref, res, title, start\n  let href = ''\n  const oldPos = state.pos\n  const max = state.posMax\n\n  if (state.src.charCodeAt(state.pos) !== 0x21/* ! */) { return false }\n  if (state.src.charCodeAt(state.pos + 1) !== 0x5B/* [ */) { return false }\n\n  const labelStart = state.pos + 2\n  const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false)\n\n  // parser failed to find ']', so it's not a valid link\n  if (labelEnd < 0) { return false }\n\n  pos = labelEnd + 1\n  if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n    //\n    // Inline link\n    //\n\n    // [link](  <href>  \"title\"  )\n    //        ^^ skipping these spaces\n    pos++\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos)\n      if (!isSpace(code) && code !== 0x0A) { break }\n    }\n    if (pos >= max) { return false }\n\n    // [link](  <href>  \"title\"  )\n    //          ^^^^^^ parsing link destination\n    start = pos\n    res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax)\n    if (res.ok) {\n      href = state.md.normalizeLink(res.str)\n      if (state.md.validateLink(href)) {\n        pos = res.pos\n      } else {\n        href = ''\n      }\n    }\n\n    // [link](  <href>  \"title\"  )\n    //                ^^ skipping these spaces\n    start = pos\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos)\n      if (!isSpace(code) && code !== 0x0A) { break }\n    }\n\n    // [link](  <href>  \"title\"  )\n    //                  ^^^^^^^ parsing link title\n    res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax)\n    if (pos < max && start !== pos && res.ok) {\n      title = res.str\n      pos = res.pos\n\n      // [link](  <href>  \"title\"  )\n      //                         ^^ skipping these spaces\n      for (; pos < max; pos++) {\n        code = state.src.charCodeAt(pos)\n        if (!isSpace(code) && code !== 0x0A) { break }\n      }\n    } else {\n      title = ''\n    }\n\n    if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n      state.pos = oldPos\n      return false\n    }\n    pos++\n  } else {\n    //\n    // Link reference\n    //\n    if (typeof state.env.references === 'undefined') { return false }\n\n    if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n      start = pos + 1\n      pos = state.md.helpers.parseLinkLabel(state, pos)\n      if (pos >= 0) {\n        label = state.src.slice(start, pos++)\n      } else {\n        pos = labelEnd + 1\n      }\n    } else {\n      pos = labelEnd + 1\n    }\n\n    // covers label === '' and label === undefined\n    // (collapsed reference link and shortcut reference link respectively)\n    if (!label) { label = state.src.slice(labelStart, labelEnd) }\n\n    ref = state.env.references[normalizeReference(label)]\n    if (!ref) {\n      state.pos = oldPos\n      return false\n    }\n    href = ref.href\n    title = ref.title\n  }\n\n  //\n  // We found the end of the link, and know for a fact it's a valid link;\n  // so all that's left to do is to call tokenizer.\n  //\n  if (!silent) {\n    content = state.src.slice(labelStart, labelEnd)\n\n    const tokens = []\n    state.md.inline.parse(\n      content,\n      state.md,\n      state.env,\n      tokens\n    )\n\n    const token = state.push('image', 'img', 0)\n    const attrs = [['src', href], ['alt', '']]\n    token.attrs = attrs\n    token.children = tokens\n    token.content = content\n\n    if (title) {\n      attrs.push(['title', title])\n    }\n  }\n\n  state.pos = pos\n  state.posMax = max\n  return true\n}\n","// Process autolinks '<protocol:...>'\n\n/* eslint max-len:0 */\nconst EMAIL_RE    = /^([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/\n/* eslint-disable-next-line no-control-regex */\nconst AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\\x00-\\x20]*)$/\n\nexport default function autolink (state, silent) {\n  let pos = state.pos\n\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false }\n\n  const start = state.pos\n  const max = state.posMax\n\n  for (;;) {\n    if (++pos >= max) return false\n\n    const ch = state.src.charCodeAt(pos)\n\n    if (ch === 0x3C /* < */) return false\n    if (ch === 0x3E /* > */) break\n  }\n\n  const url = state.src.slice(start + 1, pos)\n\n  if (AUTOLINK_RE.test(url)) {\n    const fullUrl = state.md.normalizeLink(url)\n    if (!state.md.validateLink(fullUrl)) { return false }\n\n    if (!silent) {\n      const token_o   = state.push('link_open', 'a', 1)\n      token_o.attrs   = [['href', fullUrl]]\n      token_o.markup  = 'autolink'\n      token_o.info    = 'auto'\n\n      const token_t   = state.push('text', '', 0)\n      token_t.content = state.md.normalizeLinkText(url)\n\n      const token_c   = state.push('link_close', 'a', -1)\n      token_c.markup  = 'autolink'\n      token_c.info    = 'auto'\n    }\n\n    state.pos += url.length + 2\n    return true\n  }\n\n  if (EMAIL_RE.test(url)) {\n    const fullUrl = state.md.normalizeLink('mailto:' + url)\n    if (!state.md.validateLink(fullUrl)) { return false }\n\n    if (!silent) {\n      const token_o   = state.push('link_open', 'a', 1)\n      token_o.attrs   = [['href', fullUrl]]\n      token_o.markup  = 'autolink'\n      token_o.info    = 'auto'\n\n      const token_t   = state.push('text', '', 0)\n      token_t.content = state.md.normalizeLinkText(url)\n\n      const token_c   = state.push('link_close', 'a', -1)\n      token_c.markup  = 'autolink'\n      token_c.info    = 'auto'\n    }\n\n    state.pos += url.length + 2\n    return true\n  }\n\n  return false\n}\n","// Process html tags\n\nimport { HTML_TAG_RE } from '../common/html_re.mjs'\n\nfunction isLinkOpen (str) {\n  return /^<a[>\\s]/i.test(str)\n}\nfunction isLinkClose (str) {\n  return /^<\\/a\\s*>/i.test(str)\n}\n\nfunction isLetter (ch) {\n  /* eslint no-bitwise:0 */\n  const lc = ch | 0x20 // to lower case\n  return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */)\n}\n\nexport default function html_inline (state, silent) {\n  if (!state.md.options.html) { return false }\n\n  // Check start\n  const max = state.posMax\n  const pos = state.pos\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||\n      pos + 2 >= max) {\n    return false\n  }\n\n  // Quick fail on second char\n  const ch = state.src.charCodeAt(pos + 1)\n  if (ch !== 0x21/* ! */ &&\n      ch !== 0x3F/* ? */ &&\n      ch !== 0x2F/* / */ &&\n      !isLetter(ch)) {\n    return false\n  }\n\n  const match = state.src.slice(pos).match(HTML_TAG_RE)\n  if (!match) { return false }\n\n  if (!silent) {\n    const token = state.push('html_inline', '', 0)\n    token.content = match[0]\n\n    if (isLinkOpen(token.content))  state.linkLevel++\n    if (isLinkClose(token.content)) state.linkLevel--\n  }\n  state.pos += match[0].length\n  return true\n}\n","// Process html entity - &#123;, &#xAF;, &quot;, ...\n\nimport { decodeHTML } from 'entities'\nimport { isValidEntityCode, fromCodePoint } from '../common/utils.mjs'\n\nconst DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i\nconst NAMED_RE   = /^&([a-z][a-z0-9]{1,31});/i\n\nexport default function entity (state, silent) {\n  const pos = state.pos\n  const max = state.posMax\n\n  if (state.src.charCodeAt(pos) !== 0x26/* & */) return false\n\n  if (pos + 1 >= max) return false\n\n  const ch = state.src.charCodeAt(pos + 1)\n\n  if (ch === 0x23 /* # */) {\n    const match = state.src.slice(pos).match(DIGITAL_RE)\n    if (match) {\n      if (!silent) {\n        const code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10)\n\n        const token   = state.push('text_special', '', 0)\n        token.content = isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD)\n        token.markup  = match[0]\n        token.info    = 'entity'\n      }\n      state.pos += match[0].length\n      return true\n    }\n  } else {\n    const match = state.src.slice(pos).match(NAMED_RE)\n    if (match) {\n      const decoded = decodeHTML(match[0])\n      if (decoded !== match[0]) {\n        if (!silent) {\n          const token   = state.push('text_special', '', 0)\n          token.content = decoded\n          token.markup  = match[0]\n          token.info    = 'entity'\n        }\n        state.pos += match[0].length\n        return true\n      }\n    }\n  }\n\n  return false\n}\n","// For each opening emphasis-like marker find a matching closing one\n//\n\nfunction processDelimiters (delimiters) {\n  const openersBottom = {}\n  const max = delimiters.length\n\n  if (!max) return\n\n  // headerIdx is the first delimiter of the current (where closer is) delimiter run\n  let headerIdx = 0\n  let lastTokenIdx = -2 // needs any value lower than -1\n  const jumps = []\n\n  for (let closerIdx = 0; closerIdx < max; closerIdx++) {\n    const closer = delimiters[closerIdx]\n\n    jumps.push(0)\n\n    // markers belong to same delimiter run if:\n    //  - they have adjacent tokens\n    //  - AND markers are the same\n    //\n    if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n      headerIdx = closerIdx\n    }\n\n    lastTokenIdx = closer.token\n\n    // Length is only used for emphasis-specific \"rule of 3\",\n    // if it's not defined (in strikethrough or 3rd party plugins),\n    // we can default it to 0 to disable those checks.\n    //\n    closer.length = closer.length || 0\n\n    if (!closer.close) continue\n\n    // Previously calculated lower bounds (previous fails)\n    // for each marker, each delimiter length modulo 3,\n    // and for whether this closer can be an opener;\n    // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n    /* eslint-disable-next-line no-prototype-builtins */\n    if (!openersBottom.hasOwnProperty(closer.marker)) {\n      openersBottom[closer.marker] = [-1, -1, -1, -1, -1, -1]\n    }\n\n    const minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)]\n\n    let openerIdx = headerIdx - jumps[headerIdx] - 1\n\n    let newMinOpenerIdx = openerIdx\n\n    for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n      const opener = delimiters[openerIdx]\n\n      if (opener.marker !== closer.marker) continue\n\n      if (opener.open && opener.end < 0) {\n        let isOddMatch = false\n\n        // from spec:\n        //\n        // If one of the delimiters can both open and close emphasis, then the\n        // sum of the lengths of the delimiter runs containing the opening and\n        // closing delimiters must not be a multiple of 3 unless both lengths\n        // are multiples of 3.\n        //\n        if (opener.close || closer.open) {\n          if ((opener.length + closer.length) % 3 === 0) {\n            if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n              isOddMatch = true\n            }\n          }\n        }\n\n        if (!isOddMatch) {\n          // If previous delimiter cannot be an opener, we can safely skip\n          // the entire sequence in future checks. This is required to make\n          // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n          //\n          const lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open\n            ? jumps[openerIdx - 1] + 1\n            : 0\n\n          jumps[closerIdx] = closerIdx - openerIdx + lastJump\n          jumps[openerIdx] = lastJump\n\n          closer.open  = false\n          opener.end   = closerIdx\n          opener.close = false\n          newMinOpenerIdx = -1\n          // treat next token as start of run,\n          // it optimizes skips in **<...>**a**<...>** pathological case\n          lastTokenIdx = -2\n          break\n        }\n      }\n    }\n\n    if (newMinOpenerIdx !== -1) {\n      // If match for this delimiter run failed, we want to set lower bound for\n      // future lookups. This is required to make sure algorithm has linear\n      // complexity.\n      //\n      // See details here:\n      // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n      //\n      openersBottom[closer.marker][(closer.open ? 3 : 0) + ((closer.length || 0) % 3)] = newMinOpenerIdx\n    }\n  }\n}\n\nexport default function link_pairs (state) {\n  const tokens_meta = state.tokens_meta\n  const max = state.tokens_meta.length\n\n  processDelimiters(state.delimiters)\n\n  for (let curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      processDelimiters(tokens_meta[curr].delimiters)\n    }\n  }\n}\n","// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n\nexport default function fragments_join (state) {\n  let curr, last\n  let level = 0\n  const tokens = state.tokens\n  const max = state.tokens.length\n\n  for (curr = last = 0; curr < max; curr++) {\n    // re-calculate levels after emphasis/strikethrough turns some text nodes\n    // into opening/closing tags\n    if (tokens[curr].nesting < 0) level-- // closing tag\n    tokens[curr].level = level\n    if (tokens[curr].nesting > 0) level++ // opening tag\n\n    if (tokens[curr].type === 'text' &&\n        curr + 1 < max &&\n        tokens[curr + 1].type === 'text') {\n      // collapse two adjacent text nodes\n      tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content\n    } else {\n      if (curr !== last) { tokens[last] = tokens[curr] }\n\n      last++\n    }\n  }\n\n  if (curr !== last) {\n    tokens.length = last\n  }\n}\n","/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n\nimport Ruler from './ruler.mjs'\nimport StateInline from './rules_inline/state_inline.mjs'\n\nimport r_text from './rules_inline/text.mjs'\nimport r_linkify from './rules_inline/linkify.mjs'\nimport r_newline from './rules_inline/newline.mjs'\nimport r_escape from './rules_inline/escape.mjs'\nimport r_backticks from './rules_inline/backticks.mjs'\nimport r_strikethrough from './rules_inline/strikethrough.mjs'\nimport r_emphasis from './rules_inline/emphasis.mjs'\nimport r_link from './rules_inline/link.mjs'\nimport r_image from './rules_inline/image.mjs'\nimport r_autolink from './rules_inline/autolink.mjs'\nimport r_html_inline from './rules_inline/html_inline.mjs'\nimport r_entity from './rules_inline/entity.mjs'\n\nimport r_balance_pairs from './rules_inline/balance_pairs.mjs'\nimport r_fragments_join from './rules_inline/fragments_join.mjs'\n\n// Parser rules\n\nconst _rules = [\n  ['text',            r_text],\n  ['linkify',         r_linkify],\n  ['newline',         r_newline],\n  ['escape',          r_escape],\n  ['backticks',       r_backticks],\n  ['strikethrough',   r_strikethrough.tokenize],\n  ['emphasis',        r_emphasis.tokenize],\n  ['link',            r_link],\n  ['image',           r_image],\n  ['autolink',        r_autolink],\n  ['html_inline',     r_html_inline],\n  ['entity',          r_entity]\n]\n\n// `rule2` ruleset was created specifically for emphasis/strikethrough\n// post-processing and may be changed in the future.\n//\n// Don't use this for anything except pairs (plugins working with `balance_pairs`).\n//\nconst _rules2 = [\n  ['balance_pairs',   r_balance_pairs],\n  ['strikethrough',   r_strikethrough.postProcess],\n  ['emphasis',        r_emphasis.postProcess],\n  // rules for pairs separate '**' into its own text tokens, which may be left unused,\n  // rule below merges unused segments back with the rest of the text\n  ['fragments_join',  r_fragments_join]\n]\n\n/**\n * new ParserInline()\n **/\nfunction ParserInline () {\n  /**\n   * ParserInline#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of inline rules.\n   **/\n  this.ruler = new Ruler()\n\n  for (let i = 0; i < _rules.length; i++) {\n    this.ruler.push(_rules[i][0], _rules[i][1])\n  }\n\n  /**\n   * ParserInline#ruler2 -> Ruler\n   *\n   * [[Ruler]] instance. Second ruler used for post-processing\n   * (e.g. in emphasis-like rules).\n   **/\n  this.ruler2 = new Ruler()\n\n  for (let i = 0; i < _rules2.length; i++) {\n    this.ruler2.push(_rules2[i][0], _rules2[i][1])\n  }\n}\n\n// Skip single token by running all rules in validation mode;\n// returns `true` if any rule reported success\n//\nParserInline.prototype.skipToken = function (state) {\n  const pos = state.pos\n  const rules = this.ruler.getRules('')\n  const len = rules.length\n  const maxNesting = state.md.options.maxNesting\n  const cache = state.cache\n\n  if (typeof cache[pos] !== 'undefined') {\n    state.pos = cache[pos]\n    return\n  }\n\n  let ok = false\n\n  if (state.level < maxNesting) {\n    for (let i = 0; i < len; i++) {\n      // Increment state.level and decrement it later to limit recursion.\n      // It's harmless to do here, because no tokens are created. But ideally,\n      // we'd need a separate private state variable for this purpose.\n      //\n      state.level++\n      ok = rules[i](state, true)\n      state.level--\n\n      if (ok) {\n        if (pos >= state.pos) { throw new Error(\"inline rule didn't increment state.pos\") }\n        break\n      }\n    }\n  } else {\n    // Too much nesting, just skip until the end of the paragraph.\n    //\n    // NOTE: this will cause links to behave incorrectly in the following case,\n    //       when an amount of `[` is exactly equal to `maxNesting + 1`:\n    //\n    //       [[[[[[[[[[[[[[[[[[[[[foo]()\n    //\n    // TODO: remove this workaround when CM standard will allow nested links\n    //       (we can replace it by preventing links from being parsed in\n    //       validation mode)\n    //\n    state.pos = state.posMax\n  }\n\n  if (!ok) { state.pos++ }\n  cache[pos] = state.pos\n}\n\n// Generate tokens for input range\n//\nParserInline.prototype.tokenize = function (state) {\n  const rules = this.ruler.getRules('')\n  const len = rules.length\n  const end = state.posMax\n  const maxNesting = state.md.options.maxNesting\n\n  while (state.pos < end) {\n    // Try all possible rules.\n    // On success, rule should:\n    //\n    // - update `state.pos`\n    // - update `state.tokens`\n    // - return true\n    const prevPos = state.pos\n    let ok = false\n\n    if (state.level < maxNesting) {\n      for (let i = 0; i < len; i++) {\n        ok = rules[i](state, false)\n        if (ok) {\n          if (prevPos >= state.pos) { throw new Error(\"inline rule didn't increment state.pos\") }\n          break\n        }\n      }\n    }\n\n    if (ok) {\n      if (state.pos >= end) { break }\n      continue\n    }\n\n    state.pending += state.src[state.pos++]\n  }\n\n  if (state.pending) {\n    state.pushPending()\n  }\n}\n\n/**\n * ParserInline.parse(str, md, env, outTokens)\n *\n * Process input string and push inline tokens into `outTokens`\n **/\nParserInline.prototype.parse = function (str, md, env, outTokens) {\n  const state = new this.State(str, md, env, outTokens)\n\n  this.tokenize(state)\n\n  const rules = this.ruler2.getRules('')\n  const len = rules.length\n\n  for (let i = 0; i < len; i++) {\n    rules[i](state)\n  }\n}\n\nParserInline.prototype.State = StateInline\n\nexport default ParserInline\n","import { Any, Cc, Z, P } from 'uc.micro'\n\nexport default function (opts) {\n  const re = {}\n  opts = opts || {}\n\n  re.src_Any = Any.source\n  re.src_Cc = Cc.source\n  re.src_Z = Z.source\n  re.src_P = P.source\n\n  // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n  re.src_ZPCc = [re.src_Z, re.src_P, re.src_Cc].join('|')\n\n  // \\p{\\Z\\Cc} (white spaces + control)\n  re.src_ZCc = [re.src_Z, re.src_Cc].join('|')\n\n  // Experimental. List of chars, completely prohibited in links\n  // because can separate it from other part of text\n  const text_separators = '[><\\uff5c]'\n\n  // All possible word characters (everything without punctuation, spaces & controls)\n  // Defined via punctuation & spaces to save space\n  // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n  re.src_pseudo_letter = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')'\n  // The same as abothe but without [0-9]\n  // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n\n  re.src_ip4 =\n\n    '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'\n\n  // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n  re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?'\n\n  re.src_port =\n\n    '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?'\n\n  re.src_host_terminator =\n\n    '(?=$|' + text_separators + '|' + re.src_ZPCc + ')' +\n    '(?!' + (opts['---'] ? '-(?!--)|' : '-|') + '_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))'\n\n  re.src_path =\n\n    '(?:' +\n      '[/?#]' +\n        '(?:' +\n          '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-;]).|' +\n          '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' +\n          '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' +\n          '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' +\n          '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' +\n          \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" +\n\n          // allow `I'm_king` if no pair found\n          \"\\\\'(?=\" + re.src_pseudo_letter + '|[-])|' +\n\n          // google has many dots in \"google search\" links (#66, #81).\n          // github has ... in commit range links,\n          // Restrict to\n          // - english\n          // - percent-encoded\n          // - parts of file path\n          // - params separator\n          // until more examples found.\n          '\\\\.{2,}[a-zA-Z0-9%/&]|' +\n\n          '\\\\.(?!' + re.src_ZCc + '|[.]|$)|' +\n          (opts['---']\n            ? '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n            : '\\\\-+|'\n          ) +\n          // allow `,,,` in paths\n          ',(?!' + re.src_ZCc + '|$)|' +\n\n          // allow `;` if not followed by space-like char\n          ';(?!' + re.src_ZCc + '|$)|' +\n\n          // allow `!!!` in paths, but not at the end\n          '\\\\!+(?!' + re.src_ZCc + '|[!]|$)|' +\n\n          '\\\\?(?!' + re.src_ZCc + '|[?]|$)' +\n        ')+' +\n      '|\\\\/' +\n    ')?'\n\n  // Allow anything in markdown spec, forbid quote (\") at the first position\n  // because emails enclosed in quotes are far more common\n  re.src_email_name =\n\n    '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*'\n\n  re.src_xn =\n\n    'xn--[a-z0-9\\\\-]{1,59}'\n\n  // More to read about domain names\n  // http://serverfault.com/questions/638260/\n\n  re.src_domain_root =\n\n    // Allow letters & digits (http://test1)\n    '(?:' +\n      re.src_xn +\n      '|' +\n      re.src_pseudo_letter + '{1,63}' +\n    ')'\n\n  re.src_domain =\n\n    '(?:' +\n      re.src_xn +\n      '|' +\n      '(?:' + re.src_pseudo_letter + ')' +\n      '|' +\n      '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +\n    ')'\n\n  re.src_host =\n\n    '(?:' +\n    // Don't need IP check, because digits are already allowed in normal domain names\n    //   src_ip4 +\n    // '|' +\n      '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain/* _root */ + ')' +\n    ')'\n\n  re.tpl_host_fuzzy =\n\n    '(?:' +\n      re.src_ip4 +\n    '|' +\n      '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' +\n    ')'\n\n  re.tpl_host_no_ip_fuzzy =\n\n    '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))'\n\n  re.src_host_strict =\n\n    re.src_host + re.src_host_terminator\n\n  re.tpl_host_fuzzy_strict =\n\n    re.tpl_host_fuzzy + re.src_host_terminator\n\n  re.src_host_port_strict =\n\n    re.src_host + re.src_port + re.src_host_terminator\n\n  re.tpl_host_port_fuzzy_strict =\n\n    re.tpl_host_fuzzy + re.src_port + re.src_host_terminator\n\n  re.tpl_host_port_no_ip_fuzzy_strict =\n\n    re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator\n\n  //\n  // Main rules\n  //\n\n  // Rude test fuzzy links by host, for quick deny\n  re.tpl_host_fuzzy_test =\n\n    'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))'\n\n  re.tpl_email_fuzzy =\n\n      '(^|' + text_separators + '|\"|\\\\(|' + re.src_ZCc + ')' +\n      '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')'\n\n  re.tpl_link_fuzzy =\n      // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n      // but can start with > (markdown blockquote)\n      '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n      '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')'\n\n  re.tpl_link_no_ip_fuzzy =\n      // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n      // but can start with > (markdown blockquote)\n      '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n      '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')'\n\n  return re\n}\n","import reFactory from './lib/re.mjs'\n\n//\n// Helpers\n//\n\n// Merge objects\n//\nfunction assign (obj /* from1, from2, from3, ... */) {\n  const sources = Array.prototype.slice.call(arguments, 1)\n\n  sources.forEach(function (source) {\n    if (!source) { return }\n\n    Object.keys(source).forEach(function (key) {\n      obj[key] = source[key]\n    })\n  })\n\n  return obj\n}\n\nfunction _class (obj) { return Object.prototype.toString.call(obj) }\nfunction isString (obj) { return _class(obj) === '[object String]' }\nfunction isObject (obj) { return _class(obj) === '[object Object]' }\nfunction isRegExp (obj) { return _class(obj) === '[object RegExp]' }\nfunction isFunction (obj) { return _class(obj) === '[object Function]' }\n\nfunction escapeRE (str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&') }\n\n//\n\nconst defaultOptions = {\n  fuzzyLink: true,\n  fuzzyEmail: true,\n  fuzzyIP: false\n}\n\nfunction isOptionsObj (obj) {\n  return Object.keys(obj || {}).reduce(function (acc, k) {\n    /* eslint-disable-next-line no-prototype-builtins */\n    return acc || defaultOptions.hasOwnProperty(k)\n  }, false)\n}\n\nconst defaultSchemas = {\n  'http:': {\n    validate: function (text, pos, self) {\n      const tail = text.slice(pos)\n\n      if (!self.re.http) {\n        // compile lazily, because \"host\"-containing variables can change on tlds update.\n        self.re.http = new RegExp(\n          '^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'\n        )\n      }\n      if (self.re.http.test(tail)) {\n        return tail.match(self.re.http)[0].length\n      }\n      return 0\n    }\n  },\n  'https:': 'http:',\n  'ftp:': 'http:',\n  '//': {\n    validate: function (text, pos, self) {\n      const tail = text.slice(pos)\n\n      if (!self.re.no_http) {\n      // compile lazily, because \"host\"-containing variables can change on tlds update.\n        self.re.no_http = new RegExp(\n          '^' +\n          self.re.src_auth +\n          // Don't allow single-level domains, because of false positives like '//test'\n          // with code comments\n          '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' +\n          self.re.src_port +\n          self.re.src_host_terminator +\n          self.re.src_path,\n\n          'i'\n        )\n      }\n\n      if (self.re.no_http.test(tail)) {\n        // should not be `://` & `///`, that protects from errors in protocol name\n        if (pos >= 3 && text[pos - 3] === ':') { return 0 }\n        if (pos >= 3 && text[pos - 3] === '/') { return 0 }\n        return tail.match(self.re.no_http)[0].length\n      }\n      return 0\n    }\n  },\n  'mailto:': {\n    validate: function (text, pos, self) {\n      const tail = text.slice(pos)\n\n      if (!self.re.mailto) {\n        self.re.mailto = new RegExp(\n          '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'\n        )\n      }\n      if (self.re.mailto.test(tail)) {\n        return tail.match(self.re.mailto)[0].length\n      }\n      return 0\n    }\n  }\n}\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\n/* eslint-disable-next-line max-len */\nconst tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]'\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nconst tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|')\n\nfunction resetScanCache (self) {\n  self.__index__ = -1\n  self.__text_cache__ = ''\n}\n\nfunction createValidator (re) {\n  return function (text, pos) {\n    const tail = text.slice(pos)\n\n    if (re.test(tail)) {\n      return tail.match(re)[0].length\n    }\n    return 0\n  }\n}\n\nfunction createNormalizer () {\n  return function (match, self) {\n    self.normalize(match)\n  }\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile (self) {\n  // Load & clone RE patterns.\n  const re = self.re = reFactory(self.__opts__)\n\n  // Define dynamic patterns\n  const tlds = self.__tlds__.slice()\n\n  self.onCompile()\n\n  if (!self.__tlds_replaced__) {\n    tlds.push(tlds_2ch_src_re)\n  }\n  tlds.push(re.src_xn)\n\n  re.src_tlds = tlds.join('|')\n\n  function untpl (tpl) { return tpl.replace('%TLDS%', re.src_tlds) }\n\n  re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), 'i')\n  re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i')\n  re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i')\n  re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i')\n\n  //\n  // Compile each schema\n  //\n\n  const aliases = []\n\n  self.__compiled__ = {} // Reset compiled data\n\n  function schemaError (name, val) {\n    throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val)\n  }\n\n  Object.keys(self.__schemas__).forEach(function (name) {\n    const val = self.__schemas__[name]\n\n    // skip disabled methods\n    if (val === null) { return }\n\n    const compiled = { validate: null, link: null }\n\n    self.__compiled__[name] = compiled\n\n    if (isObject(val)) {\n      if (isRegExp(val.validate)) {\n        compiled.validate = createValidator(val.validate)\n      } else if (isFunction(val.validate)) {\n        compiled.validate = val.validate\n      } else {\n        schemaError(name, val)\n      }\n\n      if (isFunction(val.normalize)) {\n        compiled.normalize = val.normalize\n      } else if (!val.normalize) {\n        compiled.normalize = createNormalizer()\n      } else {\n        schemaError(name, val)\n      }\n\n      return\n    }\n\n    if (isString(val)) {\n      aliases.push(name)\n      return\n    }\n\n    schemaError(name, val)\n  })\n\n  //\n  // Compile postponed aliases\n  //\n\n  aliases.forEach(function (alias) {\n    if (!self.__compiled__[self.__schemas__[alias]]) {\n      // Silently fail on missed schemas to avoid errons on disable.\n      // schemaError(alias, self.__schemas__[alias]);\n      return\n    }\n\n    self.__compiled__[alias].validate =\n      self.__compiled__[self.__schemas__[alias]].validate\n    self.__compiled__[alias].normalize =\n      self.__compiled__[self.__schemas__[alias]].normalize\n  })\n\n  //\n  // Fake record for guessed links\n  //\n  self.__compiled__[''] = { validate: null, normalize: createNormalizer() }\n\n  //\n  // Build schema condition\n  //\n  const slist = Object.keys(self.__compiled__)\n    .filter(function (name) {\n      // Filter disabled & fake schemas\n      return name.length > 0 && self.__compiled__[name]\n    })\n    .map(escapeRE)\n    .join('|')\n  // (?!_) cause 1.5x slowdown\n  self.re.schema_test = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i')\n  self.re.schema_search = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig')\n  self.re.schema_at_start = RegExp('^' + self.re.schema_search.source, 'i')\n\n  self.re.pretest = RegExp(\n    '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',\n    'i'\n  )\n\n  //\n  // Cleanup\n  //\n\n  resetScanCache(self)\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match (self, shift) {\n  const start = self.__index__\n  const end = self.__last_index__\n  const text = self.__text_cache__.slice(start, end)\n\n  /**\n   * Match#schema -> String\n   *\n   * Prefix (protocol) for matched string.\n   **/\n  this.schema = self.__schema__.toLowerCase()\n  /**\n   * Match#index -> Number\n   *\n   * First position of matched string.\n   **/\n  this.index = start + shift\n  /**\n   * Match#lastIndex -> Number\n   *\n   * Next position after matched string.\n   **/\n  this.lastIndex = end + shift\n  /**\n   * Match#raw -> String\n   *\n   * Matched string.\n   **/\n  this.raw = text\n  /**\n   * Match#text -> String\n   *\n   * Notmalized text of matched string.\n   **/\n  this.text = text\n  /**\n   * Match#url -> String\n   *\n   * Normalized url of matched string.\n   **/\n  this.url = text\n}\n\nfunction createMatch (self, shift) {\n  const match = new Match(self, shift)\n\n  self.__compiled__[match.schema].normalize(match, self)\n\n  return match\n}\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n *   for example). `linkify-it` makes shure that prefix is not preceeded with\n *   alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n *   - _String_ - just alias to existing rule\n *   - _Object_\n *     - _validate_ - validator function (should return matched length on success),\n *       or `RegExp`.\n *     - _normalize_ - optional function to normalize text & url of matched result\n *       (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n *   like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt (schemas, options) {\n  if (!(this instanceof LinkifyIt)) {\n    return new LinkifyIt(schemas, options)\n  }\n\n  if (!options) {\n    if (isOptionsObj(schemas)) {\n      options = schemas\n      schemas = {}\n    }\n  }\n\n  this.__opts__ = assign({}, defaultOptions, options)\n\n  // Cache last tested result. Used to skip repeating steps on next `match` call.\n  this.__index__ = -1\n  this.__last_index__ = -1 // Next scan position\n  this.__schema__ = ''\n  this.__text_cache__ = ''\n\n  this.__schemas__ = assign({}, defaultSchemas, schemas)\n  this.__compiled__ = {}\n\n  this.__tlds__ = tlds_default\n  this.__tlds_replaced__ = false\n\n  this.re = {}\n\n  compile(this)\n}\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add (schema, definition) {\n  this.__schemas__[schema] = definition\n  compile(this)\n  return this\n}\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set (options) {\n  this.__opts__ = assign(this.__opts__, options)\n  return this\n}\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test (text) {\n  // Reset scan cache\n  this.__text_cache__ = text\n  this.__index__ = -1\n\n  if (!text.length) { return false }\n\n  let m, ml, me, len, shift, next, re, tld_pos, at_pos\n\n  // try to scan for link with schema - that's the most simple rule\n  if (this.re.schema_test.test(text)) {\n    re = this.re.schema_search\n    re.lastIndex = 0\n    while ((m = re.exec(text)) !== null) {\n      len = this.testSchemaAt(text, m[2], re.lastIndex)\n      if (len) {\n        this.__schema__ = m[2]\n        this.__index__ = m.index + m[1].length\n        this.__last_index__ = m.index + m[0].length + len\n        break\n      }\n    }\n  }\n\n  if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n    // guess schemaless links\n    tld_pos = text.search(this.re.host_fuzzy_test)\n    if (tld_pos >= 0) {\n      // if tld is located after found link - no need to check fuzzy pattern\n      if (this.__index__ < 0 || tld_pos < this.__index__) {\n        if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n          shift = ml.index + ml[1].length\n\n          if (this.__index__ < 0 || shift < this.__index__) {\n            this.__schema__ = ''\n            this.__index__ = shift\n            this.__last_index__ = ml.index + ml[0].length\n          }\n        }\n      }\n    }\n  }\n\n  if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n    // guess schemaless emails\n    at_pos = text.indexOf('@')\n    if (at_pos >= 0) {\n      // We can't skip this check, because this cases are possible:\n      // 192.168.1.1@gmail.com, my.in@example.com\n      if ((me = text.match(this.re.email_fuzzy)) !== null) {\n        shift = me.index + me[1].length\n        next = me.index + me[0].length\n\n        if (this.__index__ < 0 || shift < this.__index__ ||\n            (shift === this.__index__ && next > this.__last_index__)) {\n          this.__schema__ = 'mailto:'\n          this.__index__ = shift\n          this.__last_index__ = next\n        }\n      }\n    }\n  }\n\n  return this.__index__ >= 0\n}\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest (text) {\n  return this.re.pretest.test(text)\n}\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt (text, schema, pos) {\n  // If not supported schema check requested - terminate\n  if (!this.__compiled__[schema.toLowerCase()]) {\n    return 0\n  }\n  return this.__compiled__[schema.toLowerCase()].validate(text, pos, this)\n}\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n *   protocol-neutral  links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match (text) {\n  const result = []\n  let shift = 0\n\n  // Try to take previous element from cache, if .test() called before\n  if (this.__index__ >= 0 && this.__text_cache__ === text) {\n    result.push(createMatch(this, shift))\n    shift = this.__last_index__\n  }\n\n  // Cut head if cache was used\n  let tail = shift ? text.slice(shift) : text\n\n  // Scan string until end reached\n  while (this.test(tail)) {\n    result.push(createMatch(this, shift))\n\n    tail = tail.slice(this.__last_index__)\n    shift += this.__last_index__\n  }\n\n  if (result.length) {\n    return result\n  }\n\n  return null\n}\n\n/**\n * LinkifyIt#matchAtStart(text) -> Match|null\n *\n * Returns fully-formed (not fuzzy) link if it starts at the beginning\n * of the string, and null otherwise.\n **/\nLinkifyIt.prototype.matchAtStart = function matchAtStart (text) {\n  // Reset scan cache\n  this.__text_cache__ = text\n  this.__index__ = -1\n\n  if (!text.length) return null\n\n  const m = this.re.schema_at_start.exec(text)\n  if (!m) return null\n\n  const len = this.testSchemaAt(text, m[2], m[0].length)\n  if (!len) return null\n\n  this.__schema__ = m[2]\n  this.__index__ = m.index + m[1].length\n  this.__last_index__ = m.index + m[0].length + len\n\n  return createMatch(this, 0)\n}\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\n *   are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds (list, keepOld) {\n  list = Array.isArray(list) ? list : [list]\n\n  if (!keepOld) {\n    this.__tlds__ = list.slice()\n    this.__tlds_replaced__ = true\n    compile(this)\n    return this\n  }\n\n  this.__tlds__ = this.__tlds__.concat(list)\n    .sort()\n    .filter(function (el, idx, arr) {\n      return el !== arr[idx - 1]\n    })\n    .reverse()\n\n  compile(this)\n  return this\n}\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize (match) {\n  // Do minimal possible changes by default. Need to collect feedback prior\n  // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n  if (!match.schema) { match.url = 'http://' + match.url }\n\n  if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n    match.url = 'mailto:' + match.url\n  }\n}\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile () {\n}\n\nexport default LinkifyIt\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7F]/; // Note: U+007F DEL is excluded too.\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, callback) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = callback(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {String} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(domain, callback) {\n\tconst parts = domain.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tdomain = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tdomain = domain.replace(regexSeparators, '\\x2E');\n\tconst labels = domain.split('.');\n\tconst encoded = map(labels, callback).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = codePoints => String.fromCodePoint(...codePoints);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint >= 0x30 && codePoint < 0x3A) {\n\t\treturn 26 + (codePoint - 0x30);\n\t}\n\tif (codePoint >= 0x41 && codePoint < 0x5B) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint >= 0x61 && codePoint < 0x7B) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t//  0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tconst oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\t\t\tif (digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tconst inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tconst basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue === n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.3.1',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode };\nexport default punycode;\n","// markdown-it default options\n\nexport default {\n  options: {\n    // Enable HTML tags in source\n    html: false,\n\n    // Use '/' to close single tags (<br />)\n    xhtmlOut: false,\n\n    // Convert '\\n' in paragraphs into <br>\n    breaks: false,\n\n    // CSS language prefix for fenced blocks\n    langPrefix: 'language-',\n\n    // autoconvert URL-like texts to links\n    linkify: false,\n\n    // Enable some language-neutral replacements + quotes beautification\n    typographer: false,\n\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n\n    // Internal protection, recursion limit\n    maxNesting: 100\n  },\n\n  components: {\n    core: {},\n    block: {},\n    inline: {}\n  }\n}\n","// \"Zero\" preset, with nothing enabled. Useful for manual configuring of simple\n// modes. For example, to parse bold/italic only.\n\nexport default {\n  options: {\n    // Enable HTML tags in source\n    html: false,\n\n    // Use '/' to close single tags (<br />)\n    xhtmlOut: false,\n\n    // Convert '\\n' in paragraphs into <br>\n    breaks: false,\n\n    // CSS language prefix for fenced blocks\n    langPrefix: 'language-',\n\n    // autoconvert URL-like texts to links\n    linkify: false,\n\n    // Enable some language-neutral replacements + quotes beautification\n    typographer: false,\n\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n\n    // Internal protection, recursion limit\n    maxNesting: 20\n  },\n\n  components: {\n\n    core: {\n      rules: [\n        'normalize',\n        'block',\n        'inline',\n        'text_join'\n      ]\n    },\n\n    block: {\n      rules: [\n        'paragraph'\n      ]\n    },\n\n    inline: {\n      rules: [\n        'text'\n      ],\n      rules2: [\n        'balance_pairs',\n        'fragments_join'\n      ]\n    }\n  }\n}\n","// Commonmark default options\n\nexport default {\n  options: {\n    // Enable HTML tags in source\n    html: true,\n\n    // Use '/' to close single tags (<br />)\n    xhtmlOut: true,\n\n    // Convert '\\n' in paragraphs into <br>\n    breaks: false,\n\n    // CSS language prefix for fenced blocks\n    langPrefix: 'language-',\n\n    // autoconvert URL-like texts to links\n    linkify: false,\n\n    // Enable some language-neutral replacements + quotes beautification\n    typographer: false,\n\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n\n    // Internal protection, recursion limit\n    maxNesting: 20\n  },\n\n  components: {\n\n    core: {\n      rules: [\n        'normalize',\n        'block',\n        'inline',\n        'text_join'\n      ]\n    },\n\n    block: {\n      rules: [\n        'blockquote',\n        'code',\n        'fence',\n        'heading',\n        'hr',\n        'html_block',\n        'lheading',\n        'list',\n        'reference',\n        'paragraph'\n      ]\n    },\n\n    inline: {\n      rules: [\n        'autolink',\n        'backticks',\n        'emphasis',\n        'entity',\n        'escape',\n        'html_inline',\n        'image',\n        'link',\n        'newline',\n        'text'\n      ],\n      rules2: [\n        'balance_pairs',\n        'emphasis',\n        'fragments_join'\n      ]\n    }\n  }\n}\n","// Main parser class\n\nimport * as utils from './common/utils.mjs'\nimport * as helpers from './helpers/index.mjs'\nimport Renderer from './renderer.mjs'\nimport ParserCore from './parser_core.mjs'\nimport ParserBlock from './parser_block.mjs'\nimport ParserInline from './parser_inline.mjs'\nimport LinkifyIt from 'linkify-it'\nimport * as mdurl from 'mdurl'\nimport punycode from 'punycode.js'\n\nimport cfg_default from './presets/default.mjs'\nimport cfg_zero from './presets/zero.mjs'\nimport cfg_commonmark from './presets/commonmark.mjs'\n\nconst config = {\n  default: cfg_default,\n  zero: cfg_zero,\n  commonmark: cfg_commonmark\n}\n\n//\n// This validator can prohibit more than really needed to prevent XSS. It's a\n// tradeoff to keep code simple and to be secure by default.\n//\n// If you need different setup - override validator method as you wish. Or\n// replace it with dummy function and use external sanitizer.\n//\n\nconst BAD_PROTO_RE = /^(vbscript|javascript|file|data):/\nconst GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/\n\nfunction validateLink (url) {\n  // url should be normalized at this point, and existing entities are decoded\n  const str = url.trim().toLowerCase()\n\n  return BAD_PROTO_RE.test(str) ? GOOD_DATA_RE.test(str) : true\n}\n\nconst RECODE_HOSTNAME_FOR = ['http:', 'https:', 'mailto:']\n\nfunction normalizeLink (url) {\n  const parsed = mdurl.parse(url, true)\n\n  if (parsed.hostname) {\n    // Encode hostnames in urls like:\n    // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n    //\n    // We don't encode unknown schemas, because it's likely that we encode\n    // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n    //\n    if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n      try {\n        parsed.hostname = punycode.toASCII(parsed.hostname)\n      } catch (er) { /**/ }\n    }\n  }\n\n  return mdurl.encode(mdurl.format(parsed))\n}\n\nfunction normalizeLinkText (url) {\n  const parsed = mdurl.parse(url, true)\n\n  if (parsed.hostname) {\n    // Encode hostnames in urls like:\n    // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n    //\n    // We don't encode unknown schemas, because it's likely that we encode\n    // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n    //\n    if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n      try {\n        parsed.hostname = punycode.toUnicode(parsed.hostname)\n      } catch (er) { /**/ }\n    }\n  }\n\n  // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720\n  return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + '%')\n}\n\n/**\n * class MarkdownIt\n *\n * Main parser/renderer class.\n *\n * ##### Usage\n *\n * ```javascript\n * // node.js, \"classic\" way:\n * var MarkdownIt = require('markdown-it'),\n *     md = new MarkdownIt();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // node.js, the same, but with sugar:\n * var md = require('markdown-it')();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // browser without AMD, added to \"window\" on script load\n * // Note, there are no dash.\n * var md = window.markdownit();\n * var result = md.render('# markdown-it rulezz!');\n * ```\n *\n * Single line rendering, without paragraph wrap:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * var result = md.renderInline('__markdown-it__ rulezz!');\n * ```\n **/\n\n/**\n * new MarkdownIt([presetName, options])\n * - presetName (String): optional, `commonmark` / `zero`\n * - options (Object)\n *\n * Creates parser instanse with given config. Can be called without `new`.\n *\n * ##### presetName\n *\n * MarkdownIt provides named presets as a convenience to quickly\n * enable/disable active syntax rules and options for common use cases.\n *\n * - [\"commonmark\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.js) -\n *   configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.js) -\n *   similar to GFM, used when no preset name given. Enables all available rules,\n *   but still without html, typographer & autolinker.\n * - [\"zero\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.js) -\n *   all rules disabled. Useful to quickly setup your config via `.enable()`.\n *   For example, when you need only `bold` and `italic` markup and nothing else.\n *\n * ##### options:\n *\n * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful!\n *   That's not safe! You may need external sanitizer to protect output from XSS.\n *   It's better to extend features via plugins, instead of enabling HTML.\n * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags\n *   (`<br />`). This is needed only for full CommonMark compatibility. In real\n *   world you will need HTML output.\n * - __breaks__ - `false`. Set `true` to convert `\\n` in paragraphs into `<br>`.\n * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks.\n *   Can be useful for external highlighters.\n * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links.\n * - __typographer__  - `false`. Set `true` to enable [some language-neutral\n *   replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.js) +\n *   quotes beautification (smartquotes).\n * - __quotes__ - `“”‘’`, String or Array. Double + single quotes replacement\n *   pairs, when typographer enabled and smartquotes on. For example, you can\n *   use `'«»„“'` for Russian, `'„“‚‘'` for German, and\n *   `['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›']` for French (including nbsp).\n * - __highlight__ - `null`. Highlighter function for fenced code blocks.\n *   Highlighter `function (str, lang)` should return escaped HTML. It can also\n *   return empty string if the source was not changed and should be escaped\n *   externaly. If result starts with <pre... internal wrapper is skipped.\n *\n * ##### Example\n *\n * ```javascript\n * // commonmark mode\n * var md = require('markdown-it')('commonmark');\n *\n * // default mode\n * var md = require('markdown-it')();\n *\n * // enable everything\n * var md = require('markdown-it')({\n *   html: true,\n *   linkify: true,\n *   typographer: true\n * });\n * ```\n *\n * ##### Syntax highlighting\n *\n * ```js\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * var md = require('markdown-it')({\n *   highlight: function (str, lang) {\n *     if (lang && hljs.getLanguage(lang)) {\n *       try {\n *         return hljs.highlight(str, { language: lang, ignoreIllegals: true }).value;\n *       } catch (__) {}\n *     }\n *\n *     return ''; // use external default escaping\n *   }\n * });\n * ```\n *\n * Or with full wrapper override (if you need assign class to `<pre>` or `<code>`):\n *\n * ```javascript\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * // Actual default values\n * var md = require('markdown-it')({\n *   highlight: function (str, lang) {\n *     if (lang && hljs.getLanguage(lang)) {\n *       try {\n *         return '<pre><code class=\"hljs\">' +\n *                hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n *                '</code></pre>';\n *       } catch (__) {}\n *     }\n *\n *     return '<pre><code class=\"hljs\">' + md.utils.escapeHtml(str) + '</code></pre>';\n *   }\n * });\n * ```\n *\n **/\nfunction MarkdownIt (presetName, options) {\n  if (!(this instanceof MarkdownIt)) {\n    return new MarkdownIt(presetName, options)\n  }\n\n  if (!options) {\n    if (!utils.isString(presetName)) {\n      options = presetName || {}\n      presetName = 'default'\n    }\n  }\n\n  /**\n   * MarkdownIt#inline -> ParserInline\n   *\n   * Instance of [[ParserInline]]. You may need it to add new rules when\n   * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n   * [[MarkdownIt.enable]].\n   **/\n  this.inline = new ParserInline()\n\n  /**\n   * MarkdownIt#block -> ParserBlock\n   *\n   * Instance of [[ParserBlock]]. You may need it to add new rules when\n   * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n   * [[MarkdownIt.enable]].\n   **/\n  this.block = new ParserBlock()\n\n  /**\n   * MarkdownIt#core -> Core\n   *\n   * Instance of [[Core]] chain executor. You may need it to add new rules when\n   * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n   * [[MarkdownIt.enable]].\n   **/\n  this.core = new ParserCore()\n\n  /**\n   * MarkdownIt#renderer -> Renderer\n   *\n   * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering\n   * rules for new token types, generated by plugins.\n   *\n   * ##### Example\n   *\n   * ```javascript\n   * var md = require('markdown-it')();\n   *\n   * function myToken(tokens, idx, options, env, self) {\n   *   //...\n   *   return result;\n   * };\n   *\n   * md.renderer.rules['my_token'] = myToken\n   * ```\n   *\n   * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js).\n   **/\n  this.renderer = new Renderer()\n\n  /**\n   * MarkdownIt#linkify -> LinkifyIt\n   *\n   * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n   * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.js)\n   * rule.\n   **/\n  this.linkify = new LinkifyIt()\n\n  /**\n   * MarkdownIt#validateLink(url) -> Boolean\n   *\n   * Link validation function. CommonMark allows too much in links. By default\n   * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n   * except some embedded image types.\n   *\n   * You can change this behaviour:\n   *\n   * ```javascript\n   * var md = require('markdown-it')();\n   * // enable everything\n   * md.validateLink = function () { return true; }\n   * ```\n   **/\n  this.validateLink = validateLink\n\n  /**\n   * MarkdownIt#normalizeLink(url) -> String\n   *\n   * Function used to encode link url to a machine-readable format,\n   * which includes url-encoding, punycode, etc.\n   **/\n  this.normalizeLink = normalizeLink\n\n  /**\n   * MarkdownIt#normalizeLinkText(url) -> String\n   *\n   * Function used to decode link url to a human-readable format`\n   **/\n  this.normalizeLinkText = normalizeLinkText\n\n  // Expose utils & helpers for easy acces from plugins\n\n  /**\n   * MarkdownIt#utils -> utils\n   *\n   * Assorted utility functions, useful to write plugins. See details\n   * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.mjs).\n   **/\n  this.utils = utils\n\n  /**\n   * MarkdownIt#helpers -> helpers\n   *\n   * Link components parser functions, useful to write plugins. See details\n   * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers).\n   **/\n  this.helpers = utils.assign({}, helpers)\n\n  this.options = {}\n  this.configure(presetName)\n\n  if (options) { this.set(options) }\n}\n\n/** chainable\n * MarkdownIt.set(options)\n *\n * Set parser options (in the same format as in constructor). Probably, you\n * will never need it, but you can change options after constructor call.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n *             .set({ html: true, breaks: true })\n *             .set({ typographer, true });\n * ```\n *\n * __Note:__ To achieve the best possible performance, don't modify a\n * `markdown-it` instance options on the fly. If you need multiple configurations\n * it's best to create multiple instances and initialize each with separate\n * config.\n **/\nMarkdownIt.prototype.set = function (options) {\n  utils.assign(this.options, options)\n  return this\n}\n\n/** chainable, internal\n * MarkdownIt.configure(presets)\n *\n * Batch load of all options and compenent settings. This is internal method,\n * and you probably will not need it. But if you will - see available presets\n * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets)\n *\n * We strongly recommend to use presets instead of direct config loads. That\n * will give better compatibility with next versions.\n **/\nMarkdownIt.prototype.configure = function (presets) {\n  const self = this\n\n  if (utils.isString(presets)) {\n    const presetName = presets\n    presets = config[presetName]\n    if (!presets) { throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name') }\n  }\n\n  if (!presets) { throw new Error('Wrong `markdown-it` preset, can\\'t be empty') }\n\n  if (presets.options) { self.set(presets.options) }\n\n  if (presets.components) {\n    Object.keys(presets.components).forEach(function (name) {\n      if (presets.components[name].rules) {\n        self[name].ruler.enableOnly(presets.components[name].rules)\n      }\n      if (presets.components[name].rules2) {\n        self[name].ruler2.enableOnly(presets.components[name].rules2)\n      }\n    })\n  }\n  return this\n}\n\n/** chainable\n * MarkdownIt.enable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to enable\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable list or rules. It will automatically find appropriate components,\n * containing rules with given names. If rule not found, and `ignoreInvalid`\n * not set - throws exception.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n *             .enable(['sub', 'sup'])\n *             .disable('smartquotes');\n * ```\n **/\nMarkdownIt.prototype.enable = function (list, ignoreInvalid) {\n  let result = []\n\n  if (!Array.isArray(list)) { list = [list] }\n\n  ['core', 'block', 'inline'].forEach(function (chain) {\n    result = result.concat(this[chain].ruler.enable(list, true))\n  }, this)\n\n  result = result.concat(this.inline.ruler2.enable(list, true))\n\n  const missed = list.filter(function (name) { return result.indexOf(name) < 0 })\n\n  if (missed.length && !ignoreInvalid) {\n    throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed)\n  }\n\n  return this\n}\n\n/** chainable\n * MarkdownIt.disable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * The same as [[MarkdownIt.enable]], but turn specified rules off.\n **/\nMarkdownIt.prototype.disable = function (list, ignoreInvalid) {\n  let result = []\n\n  if (!Array.isArray(list)) { list = [list] }\n\n  ['core', 'block', 'inline'].forEach(function (chain) {\n    result = result.concat(this[chain].ruler.disable(list, true))\n  }, this)\n\n  result = result.concat(this.inline.ruler2.disable(list, true))\n\n  const missed = list.filter(function (name) { return result.indexOf(name) < 0 })\n\n  if (missed.length && !ignoreInvalid) {\n    throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed)\n  }\n  return this\n}\n\n/** chainable\n * MarkdownIt.use(plugin, params)\n *\n * Load specified plugin with given params into current parser instance.\n * It's just a sugar to call `plugin(md, params)` with curring.\n *\n * ##### Example\n *\n * ```javascript\n * var iterator = require('markdown-it-for-inline');\n * var md = require('markdown-it')()\n *             .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n *               tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');\n *             });\n * ```\n **/\nMarkdownIt.prototype.use = function (plugin /*, params, ... */) {\n  const args = [this].concat(Array.prototype.slice.call(arguments, 1))\n  plugin.apply(plugin, args)\n  return this\n}\n\n/** internal\n * MarkdownIt.parse(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Parse input string and return list of block tokens (special token type\n * \"inline\" will contain list of inline tokens). You should not call this\n * method directly, until you write custom renderer (for example, to produce\n * AST).\n *\n * `env` is used to pass data between \"distributed\" rules and return additional\n * metadata like reference info, needed for the renderer. It also can be used to\n * inject data in specific cases. Usually, you will be ok to pass `{}`,\n * and then pass updated object to renderer.\n **/\nMarkdownIt.prototype.parse = function (src, env) {\n  if (typeof src !== 'string') {\n    throw new Error('Input data should be a String')\n  }\n\n  const state = new this.core.State(src, this, env)\n\n  this.core.process(state)\n\n  return state.tokens\n}\n\n/**\n * MarkdownIt.render(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Render markdown string into html. It does all magic for you :).\n *\n * `env` can be used to inject additional metadata (`{}` by default).\n * But you will not need it with high probability. See also comment\n * in [[MarkdownIt.parse]].\n **/\nMarkdownIt.prototype.render = function (src, env) {\n  env = env || {}\n\n  return this.renderer.render(this.parse(src, env), this.options, env)\n}\n\n/** internal\n * MarkdownIt.parseInline(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the\n * block tokens list with the single `inline` element, containing parsed inline\n * tokens in `children` property. Also updates `env` object.\n **/\nMarkdownIt.prototype.parseInline = function (src, env) {\n  const state = new this.core.State(src, this, env)\n\n  state.inlineMode = true\n  this.core.process(state)\n\n  return state.tokens\n}\n\n/**\n * MarkdownIt.renderInline(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Similar to [[MarkdownIt.render]] but for single paragraph content. Result\n * will NOT be wrapped into `<p>` tags.\n **/\nMarkdownIt.prototype.renderInline = function (src, env) {\n  env = env || {}\n\n  return this.renderer.render(this.parseInline(src, env), this.options, env)\n}\n\nexport default MarkdownIt\n","function A(c,o,t){function h(r){return r.trim().split(\" \",2)[0]===o}function y(r,i,f,g,e){return r[i].nesting===1&&r[i].attrJoin(\"class\",o),e.renderToken(r,i,f,g,e)}t=t||{};const m=3,s=t.marker||\":\",p=s.charCodeAt(0),u=s.length,_=t.validate||h,b=t.render||y;function a(r,i,f,g){let e,M=!1,n=r.bMarks[i]+r.tShift[i],d=r.eMarks[i];if(p!==r.src.charCodeAt(n))return!1;for(e=n+1;e<=d&&s[(e-n)%u]===r.src[e];e++);const $=Math.floor((e-n)/u);if($<m)return!1;e-=(e-n)%u;const x=r.src.slice(n,e),C=r.src.slice(e,d);if(!_(C,x))return!1;if(g)return!0;let l=i;for(;l++,!(l>=f||(n=r.bMarks[l]+r.tShift[l],d=r.eMarks[l],n<d&&r.sCount[l]<r.blkIndent));)if(p===r.src.charCodeAt(n)&&!(r.sCount[l]-r.blkIndent>=4)){for(e=n+1;e<=d&&s[(e-n)%u]===r.src[e];e++);if(!(Math.floor((e-n)/u)<$)&&(e-=(e-n)%u,e=r.skipSpaces(e),!(e<d))){M=!0;break}}const T=r.parentType,q=r.lineMax;r.parentType=\"container\",r.lineMax=l;const v=r.push(\"container_\"+o+\"_open\",\"div\",1);v.markup=x,v.block=!0,v.info=C,v.map=[i,l],r.md.block.tokenize(r,i+1,l);const w=r.push(\"container_\"+o+\"_close\",\"div\",-1);return w.markup=r.src.slice(n,e),w.block=!0,r.parentType=T,r.lineMax=q,r.line=l+(M?1:0),!0}c.block.ruler.before(\"fence\",\"container_\"+o,a,{alt:[\"paragraph\",\"reference\",\"blockquote\",\"list\"]}),c.renderer.rules[\"container_\"+o+\"_open\"]=b,c.renderer.rules[\"container_\"+o+\"_close\"]=b}function k(c,o){if(!o){console.warn(\"type option is required\");return}let{type:t,before:h,after:y,validate:m,marker:s,render:p}=o;if(!t){console.warn(\"type option is required\");return}if(!p){let u,_;h!==void 0&&y!==void 0?(u=h,_=y):(u=a=>`<div class=\"custom-container ${t}\">${a?`<p class=\"custom-container-title\">${a}</p>`:\"\"}\n`,_=()=>`</div>\n`);const b=[];p=function(a,r){const i=a[r];if(a[r].nesting===1){const f=i.info.trim().slice(t.length).trim();return b.push(f),u(f)}else{const f=b.pop()||\"\";return _(f)}},m||(m=function(a){return!!a.trim().match(new RegExp(`^${t}\\\\s*(.*)$`))})}c.use(A,t,{render:p,validate:m,marker:s})}function S(c){k(c,{type:\"warning\"}),k(c,{type:\"danger\"}),k(c,{type:\"tip\"}),k(c,{type:\"info\"}),k(c,{type:\"details\",before:o=>`<details class=\"custom-container details\">${o?`<summary>${o}</summary>`:\"\"}\n`,after:()=>`</details>\n`})}export{k as containerPlugin,S as presetContainer};\n//# sourceMappingURL=index.mjs.map\n","/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param  {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n  var str = '' + string;\n  var match = matchHtmlRegExp.exec(str);\n\n  if (!match) {\n    return str;\n  }\n\n  var escape;\n  var html = '';\n  var index = 0;\n  var lastIndex = 0;\n\n  for (index = match.index; index < str.length; index++) {\n    switch (str.charCodeAt(index)) {\n      case 34: // \"\n        escape = '&quot;';\n        break;\n      case 38: // &\n        escape = '&amp;';\n        break;\n      case 39: // '\n        escape = '&#39;';\n        break;\n      case 60: // <\n        escape = '&lt;';\n        break;\n      case 62: // >\n        escape = '&gt;';\n        break;\n      default:\n        continue;\n    }\n\n    if (lastIndex !== index) {\n      html += str.substring(lastIndex, index);\n    }\n\n    lastIndex = index + 1;\n    html += escape;\n  }\n\n  return lastIndex !== index\n    ? html + str.substring(lastIndex, index)\n    : html;\n}\n","\n/* **********************************************\n     Begin prism-core.js\n********************************************** */\n\n/// <reference lib=\"WebWorker\"/>\n\nvar _self = (typeof window !== 'undefined')\n\t? window   // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t\t? self // if in worker\n\t\t\t: {}   // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n *\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @namespace\n * @public\n */\nvar Prism = (function (_self) {\n\n\t// Private helper vars\n\tvar lang = /(?:^|\\s)lang(?:uage)?-([\\w-]+)(?=\\s|$)/i;\n\tvar uniqueId = 0;\n\n\t// The grammar object for plaintext\n\tvar plainTextGrammar = {};\n\n\n\tvar _ = {\n\t\t/**\n\t\t * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the\n\t\t * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load\n\t\t * additional languages or plugins yourself.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.\n\t\t *\n\t\t * You obviously have to change this value before the automatic highlighting started. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.manual = true;\n\t\t * // add a new <script> to load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tmanual: _self.Prism && _self.Prism.manual,\n\t\t/**\n\t\t * By default, if Prism is in a web worker, it assumes that it is in a worker it created itself, so it uses\n\t\t * `addEventListener` to communicate with its parent instance. However, if you're using Prism manually in your\n\t\t * own worker, you don't want it to do this.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not add its own listeners to the worker.\n\t\t *\n\t\t * You obviously have to change this value before Prism executes. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.disableWorkerMessageHandler = true;\n\t\t * // Load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n\n\t\t/**\n\t\t * A namespace for utility methods.\n\t\t *\n\t\t * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may\n\t\t * change or disappear at any time.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t */\n\t\tutil: {\n\t\t\tencode: function encode(tokens) {\n\t\t\t\tif (tokens instanceof Token) {\n\t\t\t\t\treturn new Token(tokens.type, encode(tokens.content), tokens.alias);\n\t\t\t\t} else if (Array.isArray(tokens)) {\n\t\t\t\t\treturn tokens.map(encode);\n\t\t\t\t} else {\n\t\t\t\t\treturn tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\\u00a0/g, ' ');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the name of the type of the given value.\n\t\t\t *\n\t\t\t * @param {any} o\n\t\t\t * @returns {string}\n\t\t\t * @example\n\t\t\t * type(null)      === 'Null'\n\t\t\t * type(undefined) === 'Undefined'\n\t\t\t * type(123)       === 'Number'\n\t\t\t * type('foo')     === 'String'\n\t\t\t * type(true)      === 'Boolean'\n\t\t\t * type([1, 2])    === 'Array'\n\t\t\t * type({})        === 'Object'\n\t\t\t * type(String)    === 'Function'\n\t\t\t * type(/abc+/)    === 'RegExp'\n\t\t\t */\n\t\t\ttype: function (o) {\n\t\t\t\treturn Object.prototype.toString.call(o).slice(8, -1);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns a unique number for the given object. Later calls will still return the same number.\n\t\t\t *\n\t\t\t * @param {Object} obj\n\t\t\t * @returns {number}\n\t\t\t */\n\t\t\tobjId: function (obj) {\n\t\t\t\tif (!obj['__id']) {\n\t\t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n\t\t\t\t}\n\t\t\t\treturn obj['__id'];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Creates a deep clone of the given object.\n\t\t\t *\n\t\t\t * The main intended use of this function is to clone language definitions.\n\t\t\t *\n\t\t\t * @param {T} o\n\t\t\t * @param {Record<number, any>} [visited]\n\t\t\t * @returns {T}\n\t\t\t * @template T\n\t\t\t */\n\t\t\tclone: function deepClone(o, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar clone; var id;\n\t\t\t\tswitch (_.util.type(o)) {\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = /** @type {Record<string, any>} */ ({});\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\tfor (var key in o) {\n\t\t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n\t\t\t\t\t\t\t\tclone[key] = deepClone(o[key], visited);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tcase 'Array':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\t(/** @type {Array} */(/** @type {any} */(o))).forEach(function (v, i) {\n\t\t\t\t\t\t\tclone[i] = deepClone(v, visited);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn o;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n\t\t\t *\n\t\t\t * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tgetLanguage: function (element) {\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar m = lang.exec(element.className);\n\t\t\t\t\tif (m) {\n\t\t\t\t\t\treturn m[1].toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn 'none';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets the Prism `language-xxxx` class of the given element.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} language\n\t\t\t * @returns {void}\n\t\t\t */\n\t\t\tsetLanguage: function (element, language) {\n\t\t\t\t// remove all `language-xxxx` classes\n\t\t\t\t// (this might leave behind a leading space)\n\t\t\t\telement.className = element.className.replace(RegExp(lang, 'gi'), '');\n\n\t\t\t\t// add the new `language-xxxx` class\n\t\t\t\t// (using `classList` will automatically clean up spaces for us)\n\t\t\t\telement.classList.add('language-' + language);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the script element that is currently executing.\n\t\t\t *\n\t\t\t * This does __not__ work for line script element.\n\t\t\t *\n\t\t\t * @returns {HTMLScriptElement | null}\n\t\t\t */\n\t\t\tcurrentScript: function () {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif ('currentScript' in document && 1 < 2 /* hack to trip TS' flow analysis */) {\n\t\t\t\t\treturn /** @type {any} */ (document.currentScript);\n\t\t\t\t}\n\n\t\t\t\t// IE11 workaround\n\t\t\t\t// we'll get the src of the current script by parsing IE11's error stack trace\n\t\t\t\t// this will not work for inline scripts\n\n\t\t\t\ttry {\n\t\t\t\t\tthrow new Error();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Get file src url from stack. Specifically works with the format of stack traces in IE.\n\t\t\t\t\t// A stack will look like this:\n\t\t\t\t\t//\n\t\t\t\t\t// Error\n\t\t\t\t\t//    at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n\t\t\t\t\t//    at Global code (http://localhost/components/prism-core.js:606:1)\n\n\t\t\t\t\tvar src = (/at [^(\\r\\n]*\\((.*):[^:]+:[^:]+\\)$/i.exec(err.stack) || [])[1];\n\t\t\t\t\tif (src) {\n\t\t\t\t\t\tvar scripts = document.getElementsByTagName('script');\n\t\t\t\t\t\tfor (var i in scripts) {\n\t\t\t\t\t\t\tif (scripts[i].src == src) {\n\t\t\t\t\t\t\t\treturn scripts[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns whether a given class is active for `element`.\n\t\t\t *\n\t\t\t * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated\n\t\t\t * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the\n\t\t\t * given class is just the given class with a `no-` prefix.\n\t\t\t *\n\t\t\t * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is\n\t\t\t * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its\n\t\t\t * ancestors have the given class or the negated version of it, then the default activation will be returned.\n\t\t\t *\n\t\t\t * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated\n\t\t\t * version of it, the class is considered active.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} className\n\t\t\t * @param {boolean} [defaultActivation=false]\n\t\t\t * @returns {boolean}\n\t\t\t */\n\t\t\tisActive: function (element, className, defaultActivation) {\n\t\t\t\tvar no = 'no-' + className;\n\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar classList = element.classList;\n\t\t\t\t\tif (classList.contains(className)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (classList.contains(no)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn !!defaultActivation;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tlanguages: {\n\t\t\t/**\n\t\t\t * The grammar for plain, unformatted text.\n\t\t\t */\n\t\t\tplain: plainTextGrammar,\n\t\t\tplaintext: plainTextGrammar,\n\t\t\ttext: plainTextGrammar,\n\t\t\ttxt: plainTextGrammar,\n\n\t\t\t/**\n\t\t\t * Creates a deep copy of the language with the given id and appends the given tokens.\n\t\t\t *\n\t\t\t * If a token in `redef` also appears in the copied language, then the existing token in the copied language\n\t\t\t * will be overwritten at its original position.\n\t\t\t *\n\t\t\t * ## Best practices\n\t\t\t *\n\t\t\t * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)\n\t\t\t * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to\n\t\t\t * understand the language definition because, normally, the order of tokens matters in Prism grammars.\n\t\t\t *\n\t\t\t * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.\n\t\t\t * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.\n\t\t\t *\n\t\t\t * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.\n\t\t\t * @param {Grammar} redef The new tokens to append.\n\t\t\t * @returns {Grammar} The new language created.\n\t\t\t * @public\n\t\t\t * @example\n\t\t\t * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {\n\t\t\t *     // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token\n\t\t\t *     // at its original position\n\t\t\t *     'comment': { ... },\n\t\t\t *     // CSS doesn't have a 'color' token, so this token will be appended\n\t\t\t *     'color': /\\b(?:red|green|blue)\\b/\n\t\t\t * });\n\t\t\t */\n\t\t\textend: function (id, redef) {\n\t\t\t\tvar lang = _.util.clone(_.languages[id]);\n\n\t\t\t\tfor (var key in redef) {\n\t\t\t\t\tlang[key] = redef[key];\n\t\t\t\t}\n\n\t\t\t\treturn lang;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Inserts tokens _before_ another token in a language definition or any other grammar.\n\t\t\t *\n\t\t\t * ## Usage\n\t\t\t *\n\t\t\t * This helper method makes it easy to modify existing languages. For example, the CSS language definition\n\t\t\t * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded\n\t\t\t * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the\n\t\t\t * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do\n\t\t\t * this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.markup.style = {\n\t\t\t *     // token\n\t\t\t * };\n\t\t\t * ```\n\t\t\t *\n\t\t\t * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens\n\t\t\t * before existing tokens. For the CSS example above, you would use it like this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'cdata', {\n\t\t\t *     'style': {\n\t\t\t *         // token\n\t\t\t *     }\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Special cases\n\t\t\t *\n\t\t\t * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar\n\t\t\t * will be ignored.\n\t\t\t *\n\t\t\t * This behavior can be used to insert tokens after `before`:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'comment', {\n\t\t\t *     'comment': Prism.languages.markup.comment,\n\t\t\t *     // tokens after 'comment'\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Limitations\n\t\t\t *\n\t\t\t * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object\n\t\t\t * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave\n\t\t\t * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily\n\t\t\t * deleting properties which is necessary to insert at arbitrary positions.\n\t\t\t *\n\t\t\t * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object.\n\t\t\t * Instead, it will create a new object and replace all references to the target object with the new one. This\n\t\t\t * can be done without temporarily deleting properties, so the iteration order is well-defined.\n\t\t\t *\n\t\t\t * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if\n\t\t\t * you hold the target object in a variable, then the value of the variable will not change.\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * var oldMarkup = Prism.languages.markup;\n\t\t\t * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... });\n\t\t\t *\n\t\t\t * assert(oldMarkup !== Prism.languages.markup);\n\t\t\t * assert(newMarkup === Prism.languages.markup);\n\t\t\t * ```\n\t\t\t *\n\t\t\t * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the\n\t\t\t * object to be modified.\n\t\t\t * @param {string} before The key to insert before.\n\t\t\t * @param {Grammar} insert An object containing the key-value pairs to be inserted.\n\t\t\t * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the\n\t\t\t * object to be modified.\n\t\t\t *\n\t\t\t * Defaults to `Prism.languages`.\n\t\t\t * @returns {Grammar} The new grammar object.\n\t\t\t * @public\n\t\t\t */\n\t\t\tinsertBefore: function (inside, before, insert, root) {\n\t\t\t\troot = root || /** @type {any} */ (_.languages);\n\t\t\t\tvar grammar = root[inside];\n\t\t\t\t/** @type {Grammar} */\n\t\t\t\tvar ret = {};\n\n\t\t\t\tfor (var token in grammar) {\n\t\t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n\t\t\t\t\t\tif (token == before) {\n\t\t\t\t\t\t\tfor (var newToken in insert) {\n\t\t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n\t\t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Do not insert token which also occur in insert. See #1525\n\t\t\t\t\t\tif (!insert.hasOwnProperty(token)) {\n\t\t\t\t\t\t\tret[token] = grammar[token];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar old = root[inside];\n\t\t\t\troot[inside] = ret;\n\n\t\t\t\t// Update references in other language definitions\n\t\t\t\t_.languages.DFS(_.languages, function (key, value) {\n\t\t\t\t\tif (value === old && key != inside) {\n\t\t\t\t\t\tthis[key] = ret;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn ret;\n\t\t\t},\n\n\t\t\t// Traverse a language definition with Depth First Search\n\t\t\tDFS: function DFS(o, callback, type, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar objId = _.util.objId;\n\n\t\t\t\tfor (var i in o) {\n\t\t\t\t\tif (o.hasOwnProperty(i)) {\n\t\t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n\t\t\t\t\t\tvar property = o[i];\n\t\t\t\t\t\tvar propertyType = _.util.type(property);\n\n\t\t\t\t\t\tif (propertyType === 'Object' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, null, visited);\n\t\t\t\t\t\t} else if (propertyType === 'Array' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, i, visited);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tplugins: {},\n\n\t\t/**\n\t\t * This is the most high-level function in Prism’s API.\n\t\t * It fetches all the elements that have a `.language-xxxx` class and then calls {@link Prism.highlightElement} on\n\t\t * each one of them.\n\t\t *\n\t\t * This is equivalent to `Prism.highlightAllUnder(document, async, callback)`.\n\t\t *\n\t\t * @param {boolean} [async=false] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @param {HighlightCallback} [callback] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAll: function (async, callback) {\n\t\t\t_.highlightAllUnder(document, async, callback);\n\t\t},\n\n\t\t/**\n\t\t * Fetches all the descendants of `container` that have a `.language-xxxx` class and then calls\n\t\t * {@link Prism.highlightElement} on each one of them.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-highlightall`\n\t\t * 2. `before-all-elements-highlight`\n\t\t * 3. All hooks of {@link Prism.highlightElement} for each element.\n\t\t *\n\t\t * @param {ParentNode} container The root element, whose descendants that have a `.language-xxxx` class will be highlighted.\n\t\t * @param {boolean} [async=false] Whether each element is to be highlighted asynchronously using Web Workers.\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked on each element after its highlighting is done.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAllUnder: function (container, async, callback) {\n\t\t\tvar env = {\n\t\t\t\tcallback: callback,\n\t\t\t\tcontainer: container,\n\t\t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n\t\t\t};\n\n\t\t\t_.hooks.run('before-highlightall', env);\n\n\t\t\tenv.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n\t\t\t_.hooks.run('before-all-elements-highlight', env);\n\n\t\t\tfor (var i = 0, element; (element = env.elements[i++]);) {\n\t\t\t\t_.highlightElement(element, async === true, env.callback);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Highlights the code inside a single element.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-sanity-check`\n\t\t * 2. `before-highlight`\n\t\t * 3. All hooks of {@link Prism.highlight}. These hooks will be run by an asynchronous worker if `async` is `true`.\n\t\t * 4. `before-insert`\n\t\t * 5. `after-highlight`\n\t\t * 6. `complete`\n\t\t *\n\t\t * Some the above hooks will be skipped if the element doesn't contain any text or there is no grammar loaded for\n\t\t * the element's language.\n\t\t *\n\t\t * @param {Element} element The element containing the code.\n\t\t * It must have a class of `language-xxxx` to be processed, where `xxxx` is a valid language identifier.\n\t\t * @param {boolean} [async=false] Whether the element is to be highlighted asynchronously using Web Workers\n\t\t * to improve performance and avoid blocking the UI when highlighting very large chunks of code. This option is\n\t\t * [disabled by default](https://prismjs.com/faq.html#why-is-asynchronous-highlighting-disabled-by-default).\n\t\t *\n\t\t * Note: All language definitions required to highlight the code must be included in the main `prism.js` file for\n\t\t * asynchronous highlighting to work. You can build your own bundle on the\n\t\t * [Download page](https://prismjs.com/download.html).\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked after the highlighting is done.\n\t\t * Mostly useful when `async` is `true`, since in that case, the highlighting is done asynchronously.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightElement: function (element, async, callback) {\n\t\t\t// Find language\n\t\t\tvar language = _.util.getLanguage(element);\n\t\t\tvar grammar = _.languages[language];\n\n\t\t\t// Set language on the element, if not present\n\t\t\t_.util.setLanguage(element, language);\n\n\t\t\t// Set language on the parent, for styling\n\t\t\tvar parent = element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre') {\n\t\t\t\t_.util.setLanguage(parent, language);\n\t\t\t}\n\n\t\t\tvar code = element.textContent;\n\n\t\t\tvar env = {\n\t\t\t\telement: element,\n\t\t\t\tlanguage: language,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tcode: code\n\t\t\t};\n\n\t\t\tfunction insertHighlightedCode(highlightedCode) {\n\t\t\t\tenv.highlightedCode = highlightedCode;\n\n\t\t\t\t_.hooks.run('before-insert', env);\n\n\t\t\t\tenv.element.innerHTML = env.highlightedCode;\n\n\t\t\t\t_.hooks.run('after-highlight', env);\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t}\n\n\t\t\t_.hooks.run('before-sanity-check', env);\n\n\t\t\t// plugins may change/add the parent/element\n\t\t\tparent = env.element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) {\n\t\t\t\tparent.setAttribute('tabindex', '0');\n\t\t\t}\n\n\t\t\tif (!env.code) {\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_.hooks.run('before-highlight', env);\n\n\t\t\tif (!env.grammar) {\n\t\t\t\tinsertHighlightedCode(_.util.encode(env.code));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (async && _self.Worker) {\n\t\t\t\tvar worker = new Worker(_.filename);\n\n\t\t\t\tworker.onmessage = function (evt) {\n\t\t\t\t\tinsertHighlightedCode(evt.data);\n\t\t\t\t};\n\n\t\t\t\tworker.postMessage(JSON.stringify({\n\t\t\t\t\tlanguage: env.language,\n\t\t\t\t\tcode: env.code,\n\t\t\t\t\timmediateClose: true\n\t\t\t\t}));\n\t\t\t} else {\n\t\t\t\tinsertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Low-level function, only use if you know what you’re doing. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns a string with the HTML produced.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-tokenize`\n\t\t * 2. `after-tokenize`\n\t\t * 3. `wrap`: On each {@link Token}.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @param {string} language The name of the language definition passed to `grammar`.\n\t\t * @returns {string} The highlighted HTML.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript');\n\t\t */\n\t\thighlight: function (text, grammar, language) {\n\t\t\tvar env = {\n\t\t\t\tcode: text,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tlanguage: language\n\t\t\t};\n\t\t\t_.hooks.run('before-tokenize', env);\n\t\t\tif (!env.grammar) {\n\t\t\t\tthrow new Error('The language \"' + env.language + '\" has no grammar.');\n\t\t\t}\n\t\t\tenv.tokens = _.tokenize(env.code, env.grammar);\n\t\t\t_.hooks.run('after-tokenize', env);\n\t\t\treturn Token.stringify(_.util.encode(env.tokens), env.language);\n\t\t},\n\n\t\t/**\n\t\t * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns an array with the tokenized code.\n\t\t *\n\t\t * When the language definition includes nested tokens, the function is called recursively on each of these tokens.\n\t\t *\n\t\t * This method could be useful in other contexts as well, as a very crude parser.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @returns {TokenStream} An array of strings and tokens, a token stream.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * let code = `var foo = 0;`;\n\t\t * let tokens = Prism.tokenize(code, Prism.languages.javascript);\n\t\t * tokens.forEach(token => {\n\t\t *     if (token instanceof Prism.Token && token.type === 'number') {\n\t\t *         console.log(`Found numeric literal: ${token.content}`);\n\t\t *     }\n\t\t * });\n\t\t */\n\t\ttokenize: function (text, grammar) {\n\t\t\tvar rest = grammar.rest;\n\t\t\tif (rest) {\n\t\t\t\tfor (var token in rest) {\n\t\t\t\t\tgrammar[token] = rest[token];\n\t\t\t\t}\n\n\t\t\t\tdelete grammar.rest;\n\t\t\t}\n\n\t\t\tvar tokenList = new LinkedList();\n\t\t\taddAfter(tokenList, tokenList.head, text);\n\n\t\t\tmatchGrammar(text, tokenList, grammar, tokenList.head, 0);\n\n\t\t\treturn toArray(tokenList);\n\t\t},\n\n\t\t/**\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thooks: {\n\t\t\tall: {},\n\n\t\t\t/**\n\t\t\t * Adds the given callback to the list of callbacks for the given hook.\n\t\t\t *\n\t\t\t * The callback will be invoked when the hook it is registered for is run.\n\t\t\t * Hooks are usually directly run by a highlight function but you can also run hooks yourself.\n\t\t\t *\n\t\t\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {HookCallback} callback The callback function which is given environment variables.\n\t\t\t * @public\n\t\t\t */\n\t\t\tadd: function (name, callback) {\n\t\t\t\tvar hooks = _.hooks.all;\n\n\t\t\t\thooks[name] = hooks[name] || [];\n\n\t\t\t\thooks[name].push(callback);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t\t\t *\n\t\t\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t\t\t * @public\n\t\t\t */\n\t\t\trun: function (name, env) {\n\t\t\t\tvar callbacks = _.hooks.all[name];\n\n\t\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, callback; (callback = callbacks[i++]);) {\n\t\t\t\t\tcallback(env);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tToken: Token\n\t};\n\t_self.Prism = _;\n\n\n\t// Typescript note:\n\t// The following can be used to import the Token type in JSDoc:\n\t//\n\t//   @typedef {InstanceType<import(\"./prism-core\")[\"Token\"]>} Token\n\n\t/**\n\t * Creates a new token.\n\t *\n\t * @param {string} type See {@link Token#type type}\n\t * @param {string | TokenStream} content See {@link Token#content content}\n\t * @param {string|string[]} [alias] The alias(es) of the token.\n\t * @param {string} [matchedStr=\"\"] A copy of the full string this token was created from.\n\t * @class\n\t * @global\n\t * @public\n\t */\n\tfunction Token(type, content, alias, matchedStr) {\n\t\t/**\n\t\t * The type of the token.\n\t\t *\n\t\t * This is usually the key of a pattern in a {@link Grammar}.\n\t\t *\n\t\t * @type {string}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.type = type;\n\t\t/**\n\t\t * The strings or tokens contained by this token.\n\t\t *\n\t\t * This will be a token stream if the pattern matched also defined an `inside` grammar.\n\t\t *\n\t\t * @type {string | TokenStream}\n\t\t * @public\n\t\t */\n\t\tthis.content = content;\n\t\t/**\n\t\t * The alias(es) of the token.\n\t\t *\n\t\t * @type {string|string[]}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.alias = alias;\n\t\t// Copy of the full string this token was created from\n\t\tthis.length = (matchedStr || '').length | 0;\n\t}\n\n\t/**\n\t * A token stream is an array of strings and {@link Token Token} objects.\n\t *\n\t * Token streams have to fulfill a few properties that are assumed by most functions (mostly internal ones) that process\n\t * them.\n\t *\n\t * 1. No adjacent strings.\n\t * 2. No empty strings.\n\t *\n\t *    The only exception here is the token stream that only contains the empty string and nothing else.\n\t *\n\t * @typedef {Array<string | Token>} TokenStream\n\t * @global\n\t * @public\n\t */\n\n\t/**\n\t * Converts the given token or token stream to an HTML representation.\n\t *\n\t * The following hooks will be run:\n\t * 1. `wrap`: On each {@link Token}.\n\t *\n\t * @param {string | Token | TokenStream} o The token or token stream to be converted.\n\t * @param {string} language The name of current language.\n\t * @returns {string} The HTML representation of the token or token stream.\n\t * @memberof Token\n\t * @static\n\t */\n\tToken.stringify = function stringify(o, language) {\n\t\tif (typeof o == 'string') {\n\t\t\treturn o;\n\t\t}\n\t\tif (Array.isArray(o)) {\n\t\t\tvar s = '';\n\t\t\to.forEach(function (e) {\n\t\t\t\ts += stringify(e, language);\n\t\t\t});\n\t\t\treturn s;\n\t\t}\n\n\t\tvar env = {\n\t\t\ttype: o.type,\n\t\t\tcontent: stringify(o.content, language),\n\t\t\ttag: 'span',\n\t\t\tclasses: ['token', o.type],\n\t\t\tattributes: {},\n\t\t\tlanguage: language\n\t\t};\n\n\t\tvar aliases = o.alias;\n\t\tif (aliases) {\n\t\t\tif (Array.isArray(aliases)) {\n\t\t\t\tArray.prototype.push.apply(env.classes, aliases);\n\t\t\t} else {\n\t\t\t\tenv.classes.push(aliases);\n\t\t\t}\n\t\t}\n\n\t\t_.hooks.run('wrap', env);\n\n\t\tvar attributes = '';\n\t\tfor (var name in env.attributes) {\n\t\t\tattributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '&quot;') + '\"';\n\t\t}\n\n\t\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n\t};\n\n\t/**\n\t * @param {RegExp} pattern\n\t * @param {number} pos\n\t * @param {string} text\n\t * @param {boolean} lookbehind\n\t * @returns {RegExpExecArray | null}\n\t */\n\tfunction matchPattern(pattern, pos, text, lookbehind) {\n\t\tpattern.lastIndex = pos;\n\t\tvar match = pattern.exec(text);\n\t\tif (match && lookbehind && match[1]) {\n\t\t\t// change the match to remove the text matched by the Prism lookbehind group\n\t\t\tvar lookbehindLength = match[1].length;\n\t\t\tmatch.index += lookbehindLength;\n\t\t\tmatch[0] = match[0].slice(lookbehindLength);\n\t\t}\n\t\treturn match;\n\t}\n\n\t/**\n\t * @param {string} text\n\t * @param {LinkedList<string | Token>} tokenList\n\t * @param {any} grammar\n\t * @param {LinkedListNode<string | Token>} startNode\n\t * @param {number} startPos\n\t * @param {RematchOptions} [rematch]\n\t * @returns {void}\n\t * @private\n\t *\n\t * @typedef RematchOptions\n\t * @property {string} cause\n\t * @property {number} reach\n\t */\n\tfunction matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {\n\t\tfor (var token in grammar) {\n\t\t\tif (!grammar.hasOwnProperty(token) || !grammar[token]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar patterns = grammar[token];\n\t\t\tpatterns = Array.isArray(patterns) ? patterns : [patterns];\n\n\t\t\tfor (var j = 0; j < patterns.length; ++j) {\n\t\t\t\tif (rematch && rematch.cause == token + ',' + j) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar patternObj = patterns[j];\n\t\t\t\tvar inside = patternObj.inside;\n\t\t\t\tvar lookbehind = !!patternObj.lookbehind;\n\t\t\t\tvar greedy = !!patternObj.greedy;\n\t\t\t\tvar alias = patternObj.alias;\n\n\t\t\t\tif (greedy && !patternObj.pattern.global) {\n\t\t\t\t\t// Without the global flag, lastIndex won't work\n\t\t\t\t\tvar flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];\n\t\t\t\t\tpatternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');\n\t\t\t\t}\n\n\t\t\t\t/** @type {RegExp} */\n\t\t\t\tvar pattern = patternObj.pattern || patternObj;\n\n\t\t\t\tfor ( // iterate the token list and keep track of the current token/string position\n\t\t\t\t\tvar currentNode = startNode.next, pos = startPos;\n\t\t\t\t\tcurrentNode !== tokenList.tail;\n\t\t\t\t\tpos += currentNode.value.length, currentNode = currentNode.next\n\t\t\t\t) {\n\n\t\t\t\t\tif (rematch && pos >= rematch.reach) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar str = currentNode.value;\n\n\t\t\t\t\tif (tokenList.length > text.length) {\n\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeCount = 1; // this is the to parameter of removeBetween\n\t\t\t\t\tvar match;\n\n\t\t\t\t\tif (greedy) {\n\t\t\t\t\t\tmatch = matchPattern(pattern, pos, text, lookbehind);\n\t\t\t\t\t\tif (!match || match.index >= text.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar from = match.index;\n\t\t\t\t\t\tvar to = match.index + match[0].length;\n\t\t\t\t\t\tvar p = pos;\n\n\t\t\t\t\t\t// find the node that contains the match\n\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\twhile (from >= p) {\n\t\t\t\t\t\t\tcurrentNode = currentNode.next;\n\t\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// adjust pos (and p)\n\t\t\t\t\t\tp -= currentNode.value.length;\n\t\t\t\t\t\tpos = p;\n\n\t\t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\tif (currentNode.value instanceof Token) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// find the last node which is affected by this match\n\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\tvar k = currentNode;\n\t\t\t\t\t\t\tk !== tokenList.tail && (p < to || typeof k.value === 'string');\n\t\t\t\t\t\t\tk = k.next\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveCount++;\n\t\t\t\t\t\t\tp += k.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tremoveCount--;\n\n\t\t\t\t\t\t// replace with the new match\n\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmatch = matchPattern(pattern, 0, str, lookbehind);\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line no-redeclare\n\t\t\t\t\tvar from = match.index;\n\t\t\t\t\tvar matchStr = match[0];\n\t\t\t\t\tvar before = str.slice(0, from);\n\t\t\t\t\tvar after = str.slice(from + matchStr.length);\n\n\t\t\t\t\tvar reach = pos + str.length;\n\t\t\t\t\tif (rematch && reach > rematch.reach) {\n\t\t\t\t\t\trematch.reach = reach;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeFrom = currentNode.prev;\n\n\t\t\t\t\tif (before) {\n\t\t\t\t\t\tremoveFrom = addAfter(tokenList, removeFrom, before);\n\t\t\t\t\t\tpos += before.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tremoveRange(tokenList, removeFrom, removeCount);\n\n\t\t\t\t\tvar wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);\n\t\t\t\t\tcurrentNode = addAfter(tokenList, removeFrom, wrapped);\n\n\t\t\t\t\tif (after) {\n\t\t\t\t\t\taddAfter(tokenList, currentNode, after);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (removeCount > 1) {\n\t\t\t\t\t\t// at least one Token object was removed, so we have to do some rematching\n\t\t\t\t\t\t// this can only happen if the current pattern is greedy\n\n\t\t\t\t\t\t/** @type {RematchOptions} */\n\t\t\t\t\t\tvar nestedRematch = {\n\t\t\t\t\t\t\tcause: token + ',' + j,\n\t\t\t\t\t\t\treach: reach\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmatchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);\n\n\t\t\t\t\t\t// the reach might have been extended because of the rematching\n\t\t\t\t\t\tif (rematch && nestedRematch.reach > rematch.reach) {\n\t\t\t\t\t\t\trematch.reach = nestedRematch.reach;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @typedef LinkedListNode\n\t * @property {T} value\n\t * @property {LinkedListNode<T> | null} prev The previous node.\n\t * @property {LinkedListNode<T> | null} next The next node.\n\t * @template T\n\t * @private\n\t */\n\n\t/**\n\t * @template T\n\t * @private\n\t */\n\tfunction LinkedList() {\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar head = { value: null, prev: null, next: null };\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar tail = { value: null, prev: head, next: null };\n\t\thead.next = tail;\n\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.head = head;\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.tail = tail;\n\t\tthis.length = 0;\n\t}\n\n\t/**\n\t * Adds a new node with the given value to the list.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {T} value\n\t * @returns {LinkedListNode<T>} The added node.\n\t * @template T\n\t */\n\tfunction addAfter(list, node, value) {\n\t\t// assumes that node != list.tail && values.length >= 0\n\t\tvar next = node.next;\n\n\t\tvar newNode = { value: value, prev: node, next: next };\n\t\tnode.next = newNode;\n\t\tnext.prev = newNode;\n\t\tlist.length++;\n\n\t\treturn newNode;\n\t}\n\t/**\n\t * Removes `count` nodes after the given node. The given node will not be removed.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {number} count\n\t * @template T\n\t */\n\tfunction removeRange(list, node, count) {\n\t\tvar next = node.next;\n\t\tfor (var i = 0; i < count && next !== list.tail; i++) {\n\t\t\tnext = next.next;\n\t\t}\n\t\tnode.next = next;\n\t\tnext.prev = node;\n\t\tlist.length -= i;\n\t}\n\t/**\n\t * @param {LinkedList<T>} list\n\t * @returns {T[]}\n\t * @template T\n\t */\n\tfunction toArray(list) {\n\t\tvar array = [];\n\t\tvar node = list.head.next;\n\t\twhile (node !== list.tail) {\n\t\t\tarray.push(node.value);\n\t\t\tnode = node.next;\n\t\t}\n\t\treturn array;\n\t}\n\n\n\tif (!_self.document) {\n\t\tif (!_self.addEventListener) {\n\t\t\t// in Node.js\n\t\t\treturn _;\n\t\t}\n\n\t\tif (!_.disableWorkerMessageHandler) {\n\t\t\t// In worker\n\t\t\t_self.addEventListener('message', function (evt) {\n\t\t\t\tvar message = JSON.parse(evt.data);\n\t\t\t\tvar lang = message.language;\n\t\t\t\tvar code = message.code;\n\t\t\t\tvar immediateClose = message.immediateClose;\n\n\t\t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\t\t\tif (immediateClose) {\n\t\t\t\t\t_self.close();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t}\n\n\t\treturn _;\n\t}\n\n\t// Get current script and highlight\n\tvar script = _.util.currentScript();\n\n\tif (script) {\n\t\t_.filename = script.src;\n\n\t\tif (script.hasAttribute('data-manual')) {\n\t\t\t_.manual = true;\n\t\t}\n\t}\n\n\tfunction highlightAutomaticallyCallback() {\n\t\tif (!_.manual) {\n\t\t\t_.highlightAll();\n\t\t}\n\t}\n\n\tif (!_.manual) {\n\t\t// If the document state is \"loading\", then we'll use DOMContentLoaded.\n\t\t// If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n\t\t// DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n\t\t// might take longer one animation frame to execute which can create a race condition where only some plugins have\n\t\t// been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n\t\t// See https://github.com/PrismJS/prism/issues/2102\n\t\tvar readyState = document.readyState;\n\t\tif (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n\t\t\tdocument.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n\t\t} else {\n\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(highlightAutomaticallyCallback);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(highlightAutomaticallyCallback, 16);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn _;\n\n}(_self));\n\nif (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = Prism;\n}\n\n// hack for components to work correctly in node.js\nif (typeof global !== 'undefined') {\n\tglobal.Prism = Prism;\n}\n\n// some additional documentation/types\n\n/**\n * The expansion of a simple `RegExp` literal to support additional properties.\n *\n * @typedef GrammarToken\n * @property {RegExp} pattern The regular expression of the token.\n * @property {boolean} [lookbehind=false] If `true`, then the first capturing group of `pattern` will (effectively)\n * behave as a lookbehind group meaning that the captured text will not be part of the matched text of the new token.\n * @property {boolean} [greedy=false] Whether the token is greedy.\n * @property {string|string[]} [alias] An optional alias or list of aliases.\n * @property {Grammar} [inside] The nested grammar of this token.\n *\n * The `inside` grammar will be used to tokenize the text value of each token of this kind.\n *\n * This can be used to make nested and even recursive language definitions.\n *\n * Note: This can cause infinite recursion. Be careful when you embed different languages or even the same language into\n * each another.\n * @global\n * @public\n */\n\n/**\n * @typedef Grammar\n * @type {Object<string, RegExp | GrammarToken | Array<RegExp | GrammarToken>>}\n * @property {Grammar} [rest] An optional grammar object that will be appended to this grammar.\n * @global\n * @public\n */\n\n/**\n * A function which will invoked after an element was successfully highlighted.\n *\n * @callback HighlightCallback\n * @param {Element} element The element successfully highlighted.\n * @returns {void}\n * @global\n * @public\n */\n\n/**\n * @callback HookCallback\n * @param {Object<string, any>} env The environment variables of the hook.\n * @returns {void}\n * @global\n * @public\n */\n\n\n/* **********************************************\n     Begin prism-markup.js\n********************************************** */\n\nPrism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n\n\n/* **********************************************\n     Begin prism-css.js\n********************************************** */\n\n(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n\n\n/* **********************************************\n     Begin prism-clike.js\n********************************************** */\n\nPrism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\n\n/* **********************************************\n     Begin prism-javascript.js\n********************************************** */\n\nPrism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n\n\n/* **********************************************\n     Begin prism-file-highlight.js\n********************************************** */\n\n(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n\tif (!Element.prototype.matches) {\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t}\n\n\tvar LOADING_MESSAGE = 'Loading…';\n\tvar FAILURE_MESSAGE = function (status, message) {\n\t\treturn '✖ Error ' + status + ' while fetching file: ' + message;\n\t};\n\tvar FAILURE_EMPTY_MESSAGE = '✖ Error: File does not exist or is empty';\n\n\tvar EXTENSIONS = {\n\t\t'js': 'javascript',\n\t\t'py': 'python',\n\t\t'rb': 'ruby',\n\t\t'ps1': 'powershell',\n\t\t'psm1': 'powershell',\n\t\t'sh': 'bash',\n\t\t'bat': 'batch',\n\t\t'h': 'c',\n\t\t'tex': 'latex'\n\t};\n\n\tvar STATUS_ATTR = 'data-src-status';\n\tvar STATUS_LOADING = 'loading';\n\tvar STATUS_LOADED = 'loaded';\n\tvar STATUS_FAILED = 'failed';\n\n\tvar SELECTOR = 'pre[data-src]:not([' + STATUS_ATTR + '=\"' + STATUS_LOADED + '\"])'\n\t\t+ ':not([' + STATUS_ATTR + '=\"' + STATUS_LOADING + '\"])';\n\n\t/**\n\t * Loads the given file.\n\t *\n\t * @param {string} src The URL or path of the source file to load.\n\t * @param {(result: string) => void} success\n\t * @param {(reason: string) => void} error\n\t */\n\tfunction loadFile(src, success, error) {\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', src, true);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState == 4) {\n\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n\t\t\t\t\tsuccess(xhr.responseText);\n\t\t\t\t} else {\n\t\t\t\t\tif (xhr.status >= 400) {\n\t\t\t\t\t\terror(FAILURE_MESSAGE(xhr.status, xhr.statusText));\n\t\t\t\t\t} else {\n\t\t\t\t\t\terror(FAILURE_EMPTY_MESSAGE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\txhr.send(null);\n\t}\n\n\t/**\n\t * Parses the given range.\n\t *\n\t * This returns a range with inclusive ends.\n\t *\n\t * @param {string | null | undefined} range\n\t * @returns {[number, number | undefined] | undefined}\n\t */\n\tfunction parseRange(range) {\n\t\tvar m = /^\\s*(\\d+)\\s*(?:(,)\\s*(?:(\\d+)\\s*)?)?$/.exec(range || '');\n\t\tif (m) {\n\t\t\tvar start = Number(m[1]);\n\t\t\tvar comma = m[2];\n\t\t\tvar end = m[3];\n\n\t\t\tif (!comma) {\n\t\t\t\treturn [start, start];\n\t\t\t}\n\t\t\tif (!end) {\n\t\t\t\treturn [start, undefined];\n\t\t\t}\n\t\t\treturn [start, Number(end)];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tPrism.hooks.add('before-highlightall', function (env) {\n\t\tenv.selector += ', ' + SELECTOR;\n\t});\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tvar pre = /** @type {HTMLPreElement} */ (env.element);\n\t\tif (pre.matches(SELECTOR)) {\n\t\t\tenv.code = ''; // fast-path the whole thing and go to complete\n\n\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADING); // mark as loading\n\n\t\t\t// add code element with loading message\n\t\t\tvar code = pre.appendChild(document.createElement('CODE'));\n\t\t\tcode.textContent = LOADING_MESSAGE;\n\n\t\t\tvar src = pre.getAttribute('data-src');\n\n\t\t\tvar language = env.language;\n\t\t\tif (language === 'none') {\n\t\t\t\t// the language might be 'none' because there is no language set;\n\t\t\t\t// in this case, we want to use the extension as the language\n\t\t\t\tvar extension = (/\\.(\\w+)$/.exec(src) || [, 'none'])[1];\n\t\t\t\tlanguage = EXTENSIONS[extension] || extension;\n\t\t\t}\n\n\t\t\t// set language classes\n\t\t\tPrism.util.setLanguage(code, language);\n\t\t\tPrism.util.setLanguage(pre, language);\n\n\t\t\t// preload the language\n\t\t\tvar autoloader = Prism.plugins.autoloader;\n\t\t\tif (autoloader) {\n\t\t\t\tautoloader.loadLanguages(language);\n\t\t\t}\n\n\t\t\t// load file\n\t\t\tloadFile(\n\t\t\t\tsrc,\n\t\t\t\tfunction (text) {\n\t\t\t\t\t// mark as loaded\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADED);\n\n\t\t\t\t\t// handle data-range\n\t\t\t\t\tvar range = parseRange(pre.getAttribute('data-range'));\n\t\t\t\t\tif (range) {\n\t\t\t\t\t\tvar lines = text.split(/\\r\\n?|\\n/g);\n\n\t\t\t\t\t\t// the range is one-based and inclusive on both ends\n\t\t\t\t\t\tvar start = range[0];\n\t\t\t\t\t\tvar end = range[1] == null ? lines.length : range[1];\n\n\t\t\t\t\t\tif (start < 0) { start += lines.length; }\n\t\t\t\t\t\tstart = Math.max(0, Math.min(start - 1, lines.length));\n\t\t\t\t\t\tif (end < 0) { end += lines.length; }\n\t\t\t\t\t\tend = Math.max(0, Math.min(end, lines.length));\n\n\t\t\t\t\t\ttext = lines.slice(start, end).join('\\n');\n\n\t\t\t\t\t\t// add data-start for line numbers\n\t\t\t\t\t\tif (!pre.hasAttribute('data-start')) {\n\t\t\t\t\t\t\tpre.setAttribute('data-start', String(start + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// highlight code\n\t\t\t\t\tcode.textContent = text;\n\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\t// mark as failed\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_FAILED);\n\n\t\t\t\t\tcode.textContent = error;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\n\tPrism.plugins.fileHighlight = {\n\t\t/**\n\t\t * Executes the File Highlight plugin for all matching `pre` elements under the given container.\n\t\t *\n\t\t * Note: Elements which are already loaded or currently loading will not be touched by this method.\n\t\t *\n\t\t * @param {ParentNode} [container=document]\n\t\t */\n\t\thighlight: function highlight(container) {\n\t\t\tvar elements = (container || document).querySelectorAll(SELECTOR);\n\n\t\t\tfor (var i = 0, element; (element = elements[i++]);) {\n\t\t\t\tPrism.highlightElement(element);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar logged = false;\n\t/** @deprecated Use `Prism.plugins.fileHighlight.highlight` instead. */\n\tPrism.fileHighlight = function () {\n\t\tif (!logged) {\n\t\t\tconsole.warn('Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead.');\n\t\t\tlogged = true;\n\t\t}\n\t\tPrism.plugins.fileHighlight.highlight.apply(this, arguments);\n\t};\n\n}());\n","// ref https://github.com/vuejs/vitepress/blob/main/src/node/markdown/plugins/highlight.ts\nimport { createRequire } from 'node:module'\nimport escapeHtml from 'escape-html'\nimport prism from 'prismjs'\n\n// prism is listed as actual dep so it's ok to require\nconst require = createRequire(import.meta.url)\n// const loadLanguages = require('prismjs/components/index')\nconst loadLanguages = require('prismjs/components/index')\n// import loadLanguages from 'prismjs/components/index'\n\n// required to make embedded highlighting work...\n// https://prismjs.com/#basic-usage-node\n// 载入所有支持的语言 https://prismjs.com/#supported-languages\nloadLanguages()\n\nfunction wrap(code: string, lang: string): string {\n  if (lang === 'text') {\n    code = escapeHtml(code)\n  }\n  return `<pre v-pre><code>${code}</code></pre>`\n}\n\nexport function highlight(str: string, lang: string) {\n  if (!lang) {\n    return wrap(str, 'text')\n  }\n  lang = lang.toLowerCase()\n  const rawLang = lang\n  if (lang === 'vue' || lang === 'html') {\n    lang = 'markup'\n  }\n  if (lang === 'md') {\n    lang = 'markdown'\n  }\n  if (lang === 'ts') {\n    lang = 'typescript'\n  }\n  if (lang === 'py') {\n    lang = 'python'\n  }\n  /* if (!prism.languages[lang]) {\n    try {\n      loadLanguages([lang])\n    }\n    catch {\n      consola.warn(\n        chalk.yellow(\n          `[vitepress] Syntax highlight for language \"${lang}\" is not supported.`,\n        ),\n      )\n    }\n  } */\n  /* if (!prism.languages[lang]) {\n    console.debug('no lang', lang)\n  }\n  else {\n    console.debug('have lang', lang)\n  } */\n  if (prism.languages[lang]) {\n    const code = prism.highlight(str, prism.languages[lang], lang)\n    return wrap(code, rawLang)\n  }\n  return wrap(str, 'text')\n}\n","import * as path from 'node:path'\nimport * as fs from 'node:fs'\nimport MarkdownIt from 'markdown-it'\nimport { containerPlugin } from '@mt-plugin/mt-plugin-container'\nimport type Token from 'markdown-it/lib/token'\nimport { highlight } from './utils/highlight'\nimport type { MarkdownItDemoOptions } from './types'\n\nconst localMd = MarkdownIt()\n\nexport function demoContainer(md: MarkdownIt, markdownItDemoOptions: MarkdownItDemoOptions) {\n  if (!markdownItDemoOptions || !markdownItDemoOptions.projectRoot) {\n    console.warn(`projectRoot option is required`)\n    return\n  }\n  let docsDir = markdownItDemoOptions.docsDir\n  const projectRoot = markdownItDemoOptions.projectRoot\n  if (!docsDir) {\n    docsDir = 'src/docs'\n  }\n  const docRoot = path.resolve(projectRoot, docsDir)\n\n  containerPlugin(md, {\n    type: 'demo',\n    render: (tokens: Token[], idx: number) => {\n      const m = tokens[idx].info.trim().match(/^demo\\s*(.*)$/)\n      if (tokens[idx].nesting === 1 /* means the tag is opening */) {\n        const description = m && m.length > 1 ? m[1] : ''\n        const sourceFileToken = tokens[idx + 2]\n        let source = ''\n        const sourceFile = sourceFileToken.children?.[0].content ?? ''\n        if (sourceFileToken.type === 'inline') {\n          const vuePath = path.resolve(docRoot, 'examples', `${sourceFile}.vue`)\n          source = fs.readFileSync(\n            vuePath,\n            'utf-8',\n          )\n        }\n        if (!source)\n          throw new Error(`Incorrect source file: ${sourceFile}`)\n        return `<Demo :demos=\"demos\" source=\"${encodeURIComponent(\n                    highlight(source, 'vue'),\n                )}\" path=\"${sourceFile}\" raw-source=\"${encodeURIComponent(\n                    source,\n                )}\" description=\"${encodeURIComponent(localMd.render(description))}\">`\n      }\n      else {\n        return '</Demo>'\n      }\n    },\n  })\n}\n"],"names":["decodeCache","getDecodeCache","exclude","cache","i","ch","decode","string","seq","result","l","b1","b2","chr","b3","b4","encodeCache","getEncodeCache","encode","keepEscaped","code","nextCode","format","url","Url","protocolPattern","portPattern","simplePathPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","hostlessProtocol","slashedProtocol","urlParse","slashesDenoteHost","u","lowerProto","hec","slashes","rest","simplePath","proto","hostEnd","auth","atSign","host","ipv6Hostname","hostparts","part","newpart","j","k","validParts","notHost","bit","hash","qm","port","Any","Cc","regex","P","Z","htmlDecodeTree","c","_a","decodeMap","fromCodePoint","codePoint","output","replaceCodePoint","CharCodes","TO_LOWER_BIT","BinTrieFlags","isNumber","isHexadecimalCharacter","isAsciiAlphaNumeric","isEntityInAttributeInvalidEnd","EntityDecoderState","DecodingMode","EntityDecoder","decodeTree","emitCodePoint","errors","decodeMode","str","offset","start","end","base","digitCount","startIdx","char","lastCp","expectedLength","current","valueLength","determineBranch","consumed","getDecoder","ret","decoder","lastIndex","len","nodeIdx","branchCount","jumpOffset","value","lo","hi","mid","midVal","htmlDecoder","decodeHTML","mode","_class","obj","isString","_hasOwnProperty","has","object","key","assign","source","arrayReplaceAt","src","pos","newElements","isValidEntityCode","surrogate1","surrogate2","UNESCAPE_MD_RE","ENTITY_RE","UNESCAPE_ALL_RE","DIGITAL_ENTITY_TEST_RE","replaceEntityPattern","match","name","decoded","unescapeMd","unescapeAll","escaped","entity","HTML_ESCAPE_TEST_RE","HTML_ESCAPE_REPLACE_RE","HTML_REPLACEMENTS","replaceUnsafeChar","escapeHtml","REGEXP_ESCAPE_RE","escapeRE","isSpace","isWhiteSpace","isPunctChar","ucmicro.P","isMdAsciiPunct","normalizeReference","lib","mdurl","ucmicro","parseLinkLabel","state","disableNested","level","found","marker","prevPos","max","oldPos","labelEnd","parseLinkDestination","parseLinkTitle","lines","default_rules","tokens","idx","options","env","slf","token","info","langName","langAttrs","arr","highlighted","tmpAttrs","tmpToken","Renderer","needLf","nextToken","rules","type","Ruler","self","chains","rule","altName","chain","fn","index","opt","beforeName","ruleName","afterName","list","ignoreInvalid","chainName","Token","tag","nesting","attrs","attrData","StateCore","md","NEWLINES_RE","NULL_RE","normalize","block","inline","tok","isLinkOpen","isLinkClose","linkify","blockTokens","htmlLinkLevel","currentToken","text","links","nodes","lastPos","ln","fullUrl","urlText","token_o","token_t","token_c","RARE_RE","SCOPED_ABBR_TEST_RE","SCOPED_ABBR_RE","SCOPED_ABBR","replaceFn","replace_scoped","inlineTokens","inside_autolink","replace_rare","replace","blkIdx","QUOTE_TEST_RE","QUOTE_RE","APOSTROPHE","replaceAt","process_inlines","stack","thisLevel","OUTER","t","canOpen","canClose","isSingle","lastChar","nextChar","isLastPunctChar","isNextPunctChar","isLastWhiteSpace","isNextWhiteSpace","item","openQuote","closeQuote","smartquotes","text_join","curr","last","_rules","r_normalize","r_block","r_inline","r_linkify","r_replacements","r_smartquotes","r_text_join","Core","StateBlock","s","indent","indent_found","line","from","min","begin","keepLastLF","queue","lineIndent","lineStart","first","getLine","escapedSplit","isEscaped","table","startLine","endLine","silent","nextLine","firstCh","secondCh","lineText","columns","aligns","columnCount","oldParentType","terminatorRules","token_to","tableLines","token_tho","token_htro","token_ho","token_il","tbodyLines","terminate","token_tbo","token_tro","token_tdo","fence","mem","markup","params","haveEndMarker","blockquote","oldLineMax","oldBMarks","oldBSCount","oldSCount","oldTShift","lastLineEmpty","isOutdented","initial","spaceAfterMarker","adjustTab","oldIndent","hr","cnt","skipBulletListMarker","skipOrderedListMarker","markTightParagraphs","tight","isTerminatingParagraph","isOrdered","markerValue","posAfterMarker","markerCharCode","listTokIdx","listLines","prevEmptyEnd","contentStart","indentAfterMarker","itemLines","oldTight","oldListIndent","reference","_endLine","destRes","href","destEndPos","destEndLineNo","titleRes","title","label","block_names","attr_name","unquoted","single_quoted","double_quoted","attr_value","attribute","open_tag","close_tag","comment","processing","declaration","cdata","HTML_TAG_RE","HTML_OPEN_CLOSE_TAG_RE","HTML_SEQUENCES","html_block","heading","tmp","token_i","lheading","content","paragraph","r_table","r_code","r_fence","r_blockquote","r_hr","r_list","r_reference","r_html_block","r_heading","r_lheading","r_paragraph","ParserBlock","maxNesting","hasEmptyLines","prevLine","ok","outTokens","StateInline","token_meta","canSplitWord","can_open","can_close","left_flanking","right_flanking","count","isTerminatorChar","SCHEME_RE","link","newline","pmax","ws","ESCAPED","escape","ch1","escapedStr","ch2","origStr","backtick","openerLength","matchEnd","matchStart","closerLength","strikethrough_tokenize","scanned","postProcess","delimiters","loneMarkers","startDelim","endDelim","strikethrough_postProcess","tokens_meta","r_strikethrough","emphasis_tokenize","isStrong","emphasis_post_process","r_emphasis","res","ref","parseReference","labelStart","image","EMAIL_RE","AUTOLINK_RE","autolink","isLetter","lc","html_inline","DIGITAL_RE","NAMED_RE","processDelimiters","openersBottom","headerIdx","lastTokenIdx","jumps","closerIdx","closer","minOpenerIdx","openerIdx","newMinOpenerIdx","opener","isOddMatch","lastJump","link_pairs","fragments_join","r_text","r_newline","r_escape","r_backticks","r_link","r_image","r_autolink","r_html_inline","r_entity","_rules2","r_balance_pairs","r_fragments_join","ParserInline","reFactory","opts","re","text_separators","isObject","isRegExp","isFunction","defaultOptions","isOptionsObj","acc","defaultSchemas","tail","tlds_2ch_src_re","tlds_default","resetScanCache","createValidator","createNormalizer","compile","tlds","untpl","tpl","aliases","schemaError","val","compiled","alias","slist","Match","shift","createMatch","LinkifyIt","schemas","schema","definition","m","ml","me","next","tld_pos","at_pos","keepOld","el","maxInt","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexPunycode","regexNonASCII","regexSeparators","baseMinusTMin","floor","stringFromCharCode","error","map","array","callback","length","mapDomain","domain","parts","labels","encoded","ucs2decode","counter","extra","ucs2encode","codePoints","basicToDigit","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","input","inputLength","n","bias","basic","oldi","w","baseMinusT","out","currentValue","basicLength","handledCPCount","handledCPCountPlusOne","q","qMinusT","toUnicode","toASCII","punycode","punycode$1","cfg_default","cfg_zero","cfg_commonmark","config","BAD_PROTO_RE","GOOD_DATA_RE","validateLink","RECODE_HOSTNAME_FOR","normalizeLink","parsed","mdurl.parse","mdurl.encode","mdurl.format","normalizeLinkText","mdurl.decode","MarkdownIt","presetName","utils.isString","ParserCore","utils","utils.assign","helpers","presets","missed","plugin","args","A","o","h","r","y","f","g","e","p","_","a","M","d","$","x","C","T","v","matchHtmlRegExp","escapeHtml_1","html","_self","Prism","lang","uniqueId","plainTextGrammar","deepClone","visited","clone","id","element","language","err","scripts","className","defaultActivation","no","classList","redef","inside","before","insert","root","grammar","newToken","old","DFS","objId","property","propertyType","async","container","parent","insertHighlightedCode","highlightedCode","worker","evt","tokenList","LinkedList","addAfter","matchGrammar","toArray","hooks","callbacks","matchedStr","stringify","attributes","matchPattern","pattern","lookbehind","lookbehindLength","startNode","startPos","rematch","patterns","patternObj","greedy","flags","currentNode","removeCount","to","matchStr","after","reach","removeFrom","removeRange","wrapped","nestedRematch","head","node","newNode","message","immediateClose","script","highlightAutomaticallyCallback","readyState","module","global","tagName","includedCdataInside","def","attrName","LOADING_MESSAGE","FAILURE_MESSAGE","status","FAILURE_EMPTY_MESSAGE","EXTENSIONS","STATUS_ATTR","STATUS_LOADING","STATUS_LOADED","STATUS_FAILED","SELECTOR","loadFile","success","xhr","parseRange","range","comma","pre","extension","autoloader","elements","logged","require","createRequire","_documentCurrentScript","loadLanguages","wrap","highlight","rawLang","prism","localMd","demoContainer","markdownItDemoOptions","docsDir","projectRoot","docRoot","path","containerPlugin","description","sourceFileToken","sourceFile","vuePath","fs"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,67,68]}