{"version":3,"file":"application-C7Ajr22o.js","sources":["../../../node_modules/@rails/ujs/app/assets/javascripts/rails-ujs.esm.js","../../../node_modules/mdurl/lib/decode.mjs","../../../node_modules/mdurl/lib/encode.mjs","../../../node_modules/mdurl/lib/format.mjs","../../../node_modules/mdurl/lib/parse.mjs","../../../node_modules/uc.micro/properties/Any/regex.mjs","../../../node_modules/uc.micro/categories/Cc/regex.mjs","../../../node_modules/uc.micro/categories/Cf/regex.mjs","../../../node_modules/uc.micro/categories/P/regex.mjs","../../../node_modules/uc.micro/categories/S/regex.mjs","../../../node_modules/uc.micro/categories/Z/regex.mjs","../../../node_modules/entities/lib/esm/generated/decode-data-html.js","../../../node_modules/entities/lib/esm/generated/decode-data-xml.js","../../../node_modules/entities/lib/esm/decode_codepoint.js","../../../node_modules/entities/lib/esm/decode.js","../../../node_modules/markdown-it/lib/common/utils.mjs","../../../node_modules/markdown-it/lib/helpers/parse_link_label.mjs","../../../node_modules/markdown-it/lib/helpers/parse_link_destination.mjs","../../../node_modules/markdown-it/lib/helpers/parse_link_title.mjs","../../../node_modules/markdown-it/lib/renderer.mjs","../../../node_modules/markdown-it/lib/ruler.mjs","../../../node_modules/markdown-it/lib/token.mjs","../../../node_modules/markdown-it/lib/rules_core/state_core.mjs","../../../node_modules/markdown-it/lib/rules_core/normalize.mjs","../../../node_modules/markdown-it/lib/rules_core/block.mjs","../../../node_modules/markdown-it/lib/rules_core/inline.mjs","../../../node_modules/markdown-it/lib/rules_core/linkify.mjs","../../../node_modules/markdown-it/lib/rules_core/replacements.mjs","../../../node_modules/markdown-it/lib/rules_core/smartquotes.mjs","../../../node_modules/markdown-it/lib/rules_core/text_join.mjs","../../../node_modules/markdown-it/lib/parser_core.mjs","../../../node_modules/markdown-it/lib/rules_block/state_block.mjs","../../../node_modules/markdown-it/lib/rules_block/table.mjs","../../../node_modules/markdown-it/lib/rules_block/code.mjs","../../../node_modules/markdown-it/lib/rules_block/fence.mjs","../../../node_modules/markdown-it/lib/rules_block/blockquote.mjs","../../../node_modules/markdown-it/lib/rules_block/hr.mjs","../../../node_modules/markdown-it/lib/rules_block/list.mjs","../../../node_modules/markdown-it/lib/rules_block/reference.mjs","../../../node_modules/markdown-it/lib/common/html_blocks.mjs","../../../node_modules/markdown-it/lib/common/html_re.mjs","../../../node_modules/markdown-it/lib/rules_block/html_block.mjs","../../../node_modules/markdown-it/lib/rules_block/heading.mjs","../../../node_modules/markdown-it/lib/rules_block/lheading.mjs","../../../node_modules/markdown-it/lib/rules_block/paragraph.mjs","../../../node_modules/markdown-it/lib/parser_block.mjs","../../../node_modules/markdown-it/lib/rules_inline/state_inline.mjs","../../../node_modules/markdown-it/lib/rules_inline/text.mjs","../../../node_modules/markdown-it/lib/rules_inline/linkify.mjs","../../../node_modules/markdown-it/lib/rules_inline/newline.mjs","../../../node_modules/markdown-it/lib/rules_inline/escape.mjs","../../../node_modules/markdown-it/lib/rules_inline/backticks.mjs","../../../node_modules/markdown-it/lib/rules_inline/strikethrough.mjs","../../../node_modules/markdown-it/lib/rules_inline/emphasis.mjs","../../../node_modules/markdown-it/lib/rules_inline/link.mjs","../../../node_modules/markdown-it/lib/rules_inline/image.mjs","../../../node_modules/markdown-it/lib/rules_inline/autolink.mjs","../../../node_modules/markdown-it/lib/rules_inline/html_inline.mjs","../../../node_modules/markdown-it/lib/rules_inline/entity.mjs","../../../node_modules/markdown-it/lib/rules_inline/balance_pairs.mjs","../../../node_modules/markdown-it/lib/rules_inline/fragments_join.mjs","../../../node_modules/markdown-it/lib/parser_inline.mjs","../../../node_modules/linkify-it/lib/re.mjs","../../../node_modules/linkify-it/index.mjs","../../../node_modules/punycode.js/punycode.es6.js","../../../node_modules/markdown-it/lib/presets/default.mjs","../../../node_modules/markdown-it/lib/presets/zero.mjs","../../../node_modules/markdown-it/lib/presets/commonmark.mjs","../../../node_modules/markdown-it/lib/index.mjs","../../../node_modules/markdown-it-modify-token/index.js","../../../app/javascript/helpers/markdown.js","../../../app/javascript/entrypoints/application.js"],"sourcesContent":["/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/main/actionview/app/javascript\nReleased under the MIT license\n */\nconst linkClickSelector = \"a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]\";\n\nconst buttonClickSelector = {\n selector: \"button[data-remote]:not([form]), button[data-confirm]:not([form])\",\n exclude: \"form button\"\n};\n\nconst inputChangeSelector = \"select[data-remote], input[data-remote], textarea[data-remote]\";\n\nconst formSubmitSelector = \"form:not([data-turbo=true])\";\n\nconst formInputClickSelector = \"form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])\";\n\nconst formDisableSelector = \"input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled\";\n\nconst formEnableSelector = \"input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled\";\n\nconst fileInputSelector = \"input[name][type=file]:not([disabled])\";\n\nconst linkDisableSelector = \"a[data-disable-with], a[data-disable]\";\n\nconst buttonDisableSelector = \"button[data-remote][data-disable-with], button[data-remote][data-disable]\";\n\nlet nonce = null;\n\nconst loadCSPNonce = () => {\n const metaTag = document.querySelector(\"meta[name=csp-nonce]\");\n return nonce = metaTag && metaTag.content;\n};\n\nconst cspNonce = () => nonce || loadCSPNonce();\n\nconst m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\nconst matches = function(element, selector) {\n if (selector.exclude) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n};\n\nconst EXPANDO = \"_ujsData\";\n\nconst getData = (element, key) => element[EXPANDO] ? element[EXPANDO][key] : undefined;\n\nconst setData = function(element, key, value) {\n if (!element[EXPANDO]) {\n element[EXPANDO] = {};\n }\n return element[EXPANDO][key] = value;\n};\n\nconst $ = selector => Array.prototype.slice.call(document.querySelectorAll(selector));\n\nconst isContentEditable = function(element) {\n var isEditable = false;\n do {\n if (element.isContentEditable) {\n isEditable = true;\n break;\n }\n element = element.parentElement;\n } while (element);\n return isEditable;\n};\n\nconst csrfToken = () => {\n const meta = document.querySelector(\"meta[name=csrf-token]\");\n return meta && meta.content;\n};\n\nconst csrfParam = () => {\n const meta = document.querySelector(\"meta[name=csrf-param]\");\n return meta && meta.content;\n};\n\nconst CSRFProtection = xhr => {\n const token = csrfToken();\n if (token) {\n return xhr.setRequestHeader(\"X-CSRF-Token\", token);\n }\n};\n\nconst refreshCSRFTokens = () => {\n const token = csrfToken();\n const param = csrfParam();\n if (token && param) {\n return $('form input[name=\"' + param + '\"]').forEach((input => input.value = token));\n }\n};\n\nconst AcceptHeaders = {\n \"*\": \"*/*\",\n text: \"text/plain\",\n html: \"text/html\",\n xml: \"application/xml, text/xml\",\n json: \"application/json, text/javascript\",\n script: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n};\n\nconst ajax = options => {\n options = prepareOptions(options);\n var xhr = createXHR(options, (function() {\n const response = processResponse(xhr.response != null ? xhr.response : xhr.responseText, xhr.getResponseHeader(\"Content-Type\"));\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : undefined;\n }));\n if (options.beforeSend && !options.beforeSend(xhr, options)) {\n return false;\n }\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n};\n\nvar prepareOptions = function(options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n if (options.type === \"GET\" && options.data) {\n if (options.url.indexOf(\"?\") < 0) {\n options.url += \"?\" + options.data;\n } else {\n options.url += \"&\" + options.data;\n }\n }\n if (!(options.dataType in AcceptHeaders)) {\n options.dataType = \"*\";\n }\n options.accept = AcceptHeaders[options.dataType];\n if (options.dataType !== \"*\") {\n options.accept += \", */*; q=0.01\";\n }\n return options;\n};\n\nvar createXHR = function(options, done) {\n const xhr = new XMLHttpRequest;\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader(\"Accept\", options.accept);\n if (typeof options.data === \"string\") {\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n }\n if (!options.crossDomain) {\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n CSRFProtection(xhr);\n }\n xhr.withCredentials = !!options.withCredentials;\n xhr.onreadystatechange = function() {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n return xhr;\n};\n\nvar processResponse = function(response, type) {\n if (typeof response === \"string\" && typeof type === \"string\") {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n const script = document.createElement(\"script\");\n script.setAttribute(\"nonce\", cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n const parser = new DOMParser;\n type = type.replace(/;.+/, \"\");\n try {\n response = parser.parseFromString(response, type);\n } catch (error1) {}\n }\n }\n return response;\n};\n\nconst href = element => element.href;\n\nconst isCrossDomain = function(url) {\n const originAnchor = document.createElement(\"a\");\n originAnchor.href = location.href;\n const urlAnchor = document.createElement(\"a\");\n try {\n urlAnchor.href = url;\n return !((!urlAnchor.protocol || urlAnchor.protocol === \":\") && !urlAnchor.host || originAnchor.protocol + \"//\" + originAnchor.host === urlAnchor.protocol + \"//\" + urlAnchor.host);\n } catch (e) {\n return true;\n }\n};\n\nlet preventDefault;\n\nlet {CustomEvent: CustomEvent} = window;\n\nif (typeof CustomEvent !== \"function\") {\n CustomEvent = function(event, params) {\n const evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n CustomEvent.prototype = window.Event.prototype;\n ({preventDefault: preventDefault} = CustomEvent.prototype);\n CustomEvent.prototype.preventDefault = function() {\n const result = preventDefault.call(this);\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, \"defaultPrevented\", {\n get() {\n return true;\n }\n });\n }\n return result;\n };\n}\n\nconst fire = (obj, name, data) => {\n const event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n};\n\nconst stopEverything = e => {\n fire(e.target, \"ujs:everythingStopped\");\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n};\n\nconst delegate = (element, selector, eventType, handler) => element.addEventListener(eventType, (function(e) {\n let {target: target} = e;\n while (!!(target instanceof Element) && !matches(target, selector)) {\n target = target.parentNode;\n }\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n e.stopPropagation();\n }\n}));\n\nconst toArray = e => Array.prototype.slice.call(e);\n\nconst serializeElement = (element, additionalParam) => {\n let inputs = [ element ];\n if (matches(element, \"form\")) {\n inputs = toArray(element.elements);\n }\n const params = [];\n inputs.forEach((function(input) {\n if (!input.name || input.disabled) {\n return;\n }\n if (matches(input, \"fieldset[disabled] *\")) {\n return;\n }\n if (matches(input, \"select\")) {\n toArray(input.options).forEach((function(option) {\n if (option.selected) {\n params.push({\n name: input.name,\n value: option.value\n });\n }\n }));\n } else if (input.checked || [ \"radio\", \"checkbox\", \"submit\" ].indexOf(input.type) === -1) {\n params.push({\n name: input.name,\n value: input.value\n });\n }\n }));\n if (additionalParam) {\n params.push(additionalParam);\n }\n return params.map((function(param) {\n if (param.name) {\n return `${encodeURIComponent(param.name)}=${encodeURIComponent(param.value)}`;\n } else {\n return param;\n }\n })).join(\"&\");\n};\n\nconst formElements = (form, selector) => {\n if (matches(form, \"form\")) {\n return toArray(form.elements).filter((el => matches(el, selector)));\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n};\n\nconst handleConfirmWithRails = rails => function(e) {\n if (!allowAction(this, rails)) {\n stopEverything(e);\n }\n};\n\nconst confirm = (message, element) => window.confirm(message);\n\nvar allowAction = function(element, rails) {\n let callback;\n const message = element.getAttribute(\"data-confirm\");\n if (!message) {\n return true;\n }\n let answer = false;\n if (fire(element, \"confirm\")) {\n try {\n answer = rails.confirm(message, element);\n } catch (error) {}\n callback = fire(element, \"confirm:complete\", [ answer ]);\n }\n return answer && callback;\n};\n\nconst handleDisabledElement = function(e) {\n const element = this;\n if (element.disabled) {\n stopEverything(e);\n }\n};\n\nconst enableElement = e => {\n let element;\n if (e instanceof Event) {\n if (isXhrRedirect(e)) {\n return;\n }\n element = e.target;\n } else {\n element = e;\n }\n if (isContentEditable(element)) {\n return;\n }\n if (matches(element, linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, buttonDisableSelector) || matches(element, formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, formSubmitSelector)) {\n return enableFormElements(element);\n }\n};\n\nconst disableElement = e => {\n const element = e instanceof Event ? e.target : e;\n if (isContentEditable(element)) {\n return;\n }\n if (matches(element, linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, buttonDisableSelector) || matches(element, formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, formSubmitSelector)) {\n return disableFormElements(element);\n }\n};\n\nvar disableLinkElement = function(element) {\n if (getData(element, \"ujs:disabled\")) {\n return;\n }\n const replacement = element.getAttribute(\"data-disable-with\");\n if (replacement != null) {\n setData(element, \"ujs:enable-with\", element.innerHTML);\n element.innerHTML = replacement;\n }\n element.addEventListener(\"click\", stopEverything);\n return setData(element, \"ujs:disabled\", true);\n};\n\nvar enableLinkElement = function(element) {\n const originalText = getData(element, \"ujs:enable-with\");\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, \"ujs:enable-with\", null);\n }\n element.removeEventListener(\"click\", stopEverything);\n return setData(element, \"ujs:disabled\", null);\n};\n\nvar disableFormElements = form => formElements(form, formDisableSelector).forEach(disableFormElement);\n\nvar disableFormElement = function(element) {\n if (getData(element, \"ujs:disabled\")) {\n return;\n }\n const replacement = element.getAttribute(\"data-disable-with\");\n if (replacement != null) {\n if (matches(element, \"button\")) {\n setData(element, \"ujs:enable-with\", element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, \"ujs:enable-with\", element.value);\n element.value = replacement;\n }\n }\n element.disabled = true;\n return setData(element, \"ujs:disabled\", true);\n};\n\nvar enableFormElements = form => formElements(form, formEnableSelector).forEach((element => enableFormElement(element)));\n\nvar enableFormElement = function(element) {\n const originalText = getData(element, \"ujs:enable-with\");\n if (originalText != null) {\n if (matches(element, \"button\")) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n setData(element, \"ujs:enable-with\", null);\n }\n element.disabled = false;\n return setData(element, \"ujs:disabled\", null);\n};\n\nvar isXhrRedirect = function(event) {\n const xhr = event.detail ? event.detail[0] : undefined;\n return xhr && xhr.getResponseHeader(\"X-Xhr-Redirect\");\n};\n\nconst handleMethodWithRails = rails => function(e) {\n const link = this;\n const method = link.getAttribute(\"data-method\");\n if (!method) {\n return;\n }\n if (isContentEditable(this)) {\n return;\n }\n const href = rails.href(link);\n const csrfToken$1 = csrfToken();\n const csrfParam$1 = csrfParam();\n const form = document.createElement(\"form\");\n let formContent = ``;\n if (csrfParam$1 && csrfToken$1 && !isCrossDomain(href)) {\n formContent += ``;\n }\n formContent += '';\n form.method = \"post\";\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = \"none\";\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n stopEverything(e);\n};\n\nconst isRemote = function(element) {\n const value = element.getAttribute(\"data-remote\");\n return value != null && value !== \"false\";\n};\n\nconst handleRemoteWithRails = rails => function(e) {\n let data, method, url;\n const element = this;\n if (!isRemote(element)) {\n return true;\n }\n if (!fire(element, \"ajax:before\")) {\n fire(element, \"ajax:stopped\");\n return false;\n }\n if (isContentEditable(element)) {\n fire(element, \"ajax:stopped\");\n return false;\n }\n const withCredentials = element.getAttribute(\"data-with-credentials\");\n const dataType = element.getAttribute(\"data-type\") || \"script\";\n if (matches(element, formSubmitSelector)) {\n const button = getData(element, \"ujs:submit-button\");\n method = getData(element, \"ujs:submit-button-formmethod\") || element.getAttribute(\"method\") || \"get\";\n url = getData(element, \"ujs:submit-button-formaction\") || element.getAttribute(\"action\") || location.href;\n if (method.toUpperCase() === \"GET\") {\n url = url.replace(/\\?.*$/, \"\");\n }\n if (element.enctype === \"multipart/form-data\") {\n data = new FormData(element);\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n setData(element, \"ujs:submit-button\", null);\n setData(element, \"ujs:submit-button-formmethod\", null);\n setData(element, \"ujs:submit-button-formaction\", null);\n } else if (matches(element, buttonClickSelector) || matches(element, inputChangeSelector)) {\n method = element.getAttribute(\"data-method\");\n url = element.getAttribute(\"data-url\");\n data = serializeElement(element, element.getAttribute(\"data-params\"));\n } else {\n method = element.getAttribute(\"data-method\");\n url = rails.href(element);\n data = element.getAttribute(\"data-params\");\n }\n ajax({\n type: method || \"GET\",\n url: url,\n data: data,\n dataType: dataType,\n beforeSend(xhr, options) {\n if (fire(element, \"ajax:beforeSend\", [ xhr, options ])) {\n return fire(element, \"ajax:send\", [ xhr ]);\n } else {\n fire(element, \"ajax:stopped\");\n return false;\n }\n },\n success(...args) {\n return fire(element, \"ajax:success\", args);\n },\n error(...args) {\n return fire(element, \"ajax:error\", args);\n },\n complete(...args) {\n return fire(element, \"ajax:complete\", args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: withCredentials != null && withCredentials !== \"false\"\n });\n stopEverything(e);\n};\n\nconst formSubmitButtonClick = function(e) {\n const button = this;\n const {form: form} = button;\n if (!form) {\n return;\n }\n if (button.name) {\n setData(form, \"ujs:submit-button\", {\n name: button.name,\n value: button.value\n });\n }\n setData(form, \"ujs:formnovalidate-button\", button.formNoValidate);\n setData(form, \"ujs:submit-button-formaction\", button.getAttribute(\"formaction\"));\n return setData(form, \"ujs:submit-button-formmethod\", button.getAttribute(\"formmethod\"));\n};\n\nconst preventInsignificantClick = function(e) {\n const link = this;\n const method = (link.getAttribute(\"data-method\") || \"GET\").toUpperCase();\n const data = link.getAttribute(\"data-params\");\n const metaClick = e.metaKey || e.ctrlKey;\n const insignificantMetaClick = metaClick && method === \"GET\" && !data;\n const nonPrimaryMouseClick = e.button != null && e.button !== 0;\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n e.stopImmediatePropagation();\n }\n};\n\nconst Rails = {\n $: $,\n ajax: ajax,\n buttonClickSelector: buttonClickSelector,\n buttonDisableSelector: buttonDisableSelector,\n confirm: confirm,\n cspNonce: cspNonce,\n csrfToken: csrfToken,\n csrfParam: csrfParam,\n CSRFProtection: CSRFProtection,\n delegate: delegate,\n disableElement: disableElement,\n enableElement: enableElement,\n fileInputSelector: fileInputSelector,\n fire: fire,\n formElements: formElements,\n formEnableSelector: formEnableSelector,\n formDisableSelector: formDisableSelector,\n formInputClickSelector: formInputClickSelector,\n formSubmitButtonClick: formSubmitButtonClick,\n formSubmitSelector: formSubmitSelector,\n getData: getData,\n handleDisabledElement: handleDisabledElement,\n href: href,\n inputChangeSelector: inputChangeSelector,\n isCrossDomain: isCrossDomain,\n linkClickSelector: linkClickSelector,\n linkDisableSelector: linkDisableSelector,\n loadCSPNonce: loadCSPNonce,\n matches: matches,\n preventInsignificantClick: preventInsignificantClick,\n refreshCSRFTokens: refreshCSRFTokens,\n serializeElement: serializeElement,\n setData: setData,\n stopEverything: stopEverything\n};\n\nconst handleConfirm = handleConfirmWithRails(Rails);\n\nRails.handleConfirm = handleConfirm;\n\nconst handleMethod = handleMethodWithRails(Rails);\n\nRails.handleMethod = handleMethod;\n\nconst handleRemote = handleRemoteWithRails(Rails);\n\nRails.handleRemote = handleRemote;\n\nconst start = function() {\n if (window._rails_loaded) {\n throw new Error(\"rails-ujs has already been loaded!\");\n }\n window.addEventListener(\"pageshow\", (function() {\n $(formEnableSelector).forEach((function(el) {\n if (getData(el, \"ujs:disabled\")) {\n enableElement(el);\n }\n }));\n $(linkDisableSelector).forEach((function(el) {\n if (getData(el, \"ujs:disabled\")) {\n enableElement(el);\n }\n }));\n }));\n delegate(document, linkDisableSelector, \"ajax:complete\", enableElement);\n delegate(document, linkDisableSelector, \"ajax:stopped\", enableElement);\n delegate(document, buttonDisableSelector, \"ajax:complete\", enableElement);\n delegate(document, buttonDisableSelector, \"ajax:stopped\", enableElement);\n delegate(document, linkClickSelector, \"click\", preventInsignificantClick);\n delegate(document, linkClickSelector, \"click\", handleDisabledElement);\n delegate(document, linkClickSelector, \"click\", handleConfirm);\n delegate(document, linkClickSelector, \"click\", disableElement);\n delegate(document, linkClickSelector, \"click\", handleRemote);\n delegate(document, linkClickSelector, \"click\", handleMethod);\n delegate(document, buttonClickSelector, \"click\", preventInsignificantClick);\n delegate(document, buttonClickSelector, \"click\", handleDisabledElement);\n delegate(document, buttonClickSelector, \"click\", handleConfirm);\n delegate(document, buttonClickSelector, \"click\", disableElement);\n delegate(document, buttonClickSelector, \"click\", handleRemote);\n delegate(document, inputChangeSelector, \"change\", handleDisabledElement);\n delegate(document, inputChangeSelector, \"change\", handleConfirm);\n delegate(document, inputChangeSelector, \"change\", handleRemote);\n delegate(document, formSubmitSelector, \"submit\", handleDisabledElement);\n delegate(document, formSubmitSelector, \"submit\", handleConfirm);\n delegate(document, formSubmitSelector, \"submit\", handleRemote);\n delegate(document, formSubmitSelector, \"submit\", (e => setTimeout((() => disableElement(e)), 13)));\n delegate(document, formSubmitSelector, \"ajax:send\", disableElement);\n delegate(document, formSubmitSelector, \"ajax:complete\", enableElement);\n delegate(document, formInputClickSelector, \"click\", preventInsignificantClick);\n delegate(document, formInputClickSelector, \"click\", handleDisabledElement);\n delegate(document, formInputClickSelector, \"click\", handleConfirm);\n delegate(document, formInputClickSelector, \"click\", formSubmitButtonClick);\n document.addEventListener(\"DOMContentLoaded\", refreshCSRFTokens);\n document.addEventListener(\"DOMContentLoaded\", loadCSPNonce);\n return window._rails_loaded = true;\n};\n\nRails.start = start;\n\nif (typeof jQuery !== \"undefined\" && jQuery && jQuery.ajax) {\n if (jQuery.rails) {\n throw new Error(\"If you load both jquery_ujs and rails-ujs, use rails-ujs only.\");\n }\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter((function(options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n }));\n}\n\nexport { Rails as default };\n","/* 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 /[\\$\\+<->\\^`\\|~\\xA2-\\xA6\\xA8\\xA9\\xAC\\xAE-\\xB1\\xB4\\xB8\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u03F6\\u0482\\u058D-\\u058F\\u0606-\\u0608\\u060B\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u07FE\\u07FF\\u0888\\u09F2\\u09F3\\u09FA\\u09FB\\u0AF1\\u0B70\\u0BF3-\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0E3F\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u166D\\u17DB\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u20A0-\\u20C0\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F\\u218A\\u218B\\u2190-\\u2307\\u230C-\\u2328\\u232B-\\u2426\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u2767\\u2794-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2B73\\u2B76-\\u2B95\\u2B97-\\u2BFF\\u2CE5-\\u2CEA\\u2E50\\u2E51\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFF\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u309B\\u309C\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E3\\u31EF\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA828-\\uA82B\\uA836-\\uA839\\uAA77-\\uAA79\\uAB5B\\uAB6A\\uAB6B\\uFB29\\uFBB2-\\uFBC2\\uFD40-\\uFD4F\\uFDCF\\uFDFC-\\uFDFF\\uFE62\\uFE64-\\uFE66\\uFE69\\uFF04\\uFF0B\\uFF1C-\\uFF1E\\uFF3E\\uFF40\\uFF5C\\uFF5E\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFFC\\uFFFD]|\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9C\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD805\\uDF3F|\\uD807[\\uDFD5-\\uDFF1]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD833[\\uDF50-\\uDFC3]|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDEA\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD838[\\uDD4F\\uDEFF]|\\uD83B[\\uDCAC\\uDCB0\\uDD2E\\uDEF0\\uDEF1]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD0D-\\uDDAD\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED7\\uDEDC-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDF76\\uDF7B-\\uDFD9\\uDFE0-\\uDFEB\\uDFF0]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0\\uDCB1\\uDD00-\\uDE53\\uDE60-\\uDE6D\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC5\\uDECE-\\uDEDB\\uDEE0-\\uDEE8\\uDEF0-\\uDEF8\\uDF00-\\uDF92\\uDF94-\\uDFCA]/","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","// Generated using scripts/write-decode-map.ts\nexport default new Uint16Array(\n// prettier-ignore\n\"\\u0200aglq\\t\\x15\\x18\\x1b\\u026d\\x0f\\0\\0\\x12p;\\u4026os;\\u4027t;\\u403et;\\u403cuot;\\u4022\"\n .split(\"\")\n .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-xml.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 '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"'\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) || ucmicro.S.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 // İ, ϴ, ẞ, Ω, K, Å - 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; 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L; 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 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\n// Parse link title within `str` in [start, max] range,\n// or continue previous parsing if `prev_state` is defined (equal to result of last execution).\n//\nexport default function parseLinkTitle (str, start, max, prev_state) {\n let code\n let pos = start\n\n const state = {\n // if `true`, this is a valid link title\n ok: false,\n // if `true`, this link can be continued on the next line\n can_continue: false,\n // if `ok`, it's the position of the first character after the closing marker\n pos: 0,\n // if `ok`, it's the unescaped title\n str: '',\n // expected closing marker character code\n marker: 0\n }\n\n if (prev_state) {\n // this is a continuation of a previous parseLinkTitle call on the next line,\n // used in reference links only\n state.str = prev_state.str\n state.marker = prev_state.marker\n } else {\n if (pos >= max) { return state }\n\n let marker = str.charCodeAt(pos)\n if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return state }\n\n start++\n pos++\n\n // if opening marker is \"(\", switch it to closing marker \")\"\n if (marker === 0x28) { marker = 0x29 }\n\n state.marker = marker\n }\n\n while (pos < max) {\n code = str.charCodeAt(pos)\n if (code === state.marker) {\n state.pos = pos + 1\n state.str += unescapeAll(str.slice(start, pos))\n state.ok = true\n return state\n } else if (code === 0x28 /* ( */ && state.marker === 0x29 /* ) */) {\n return state\n } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos++\n }\n\n pos++\n }\n\n // no closing marker found, but this link title may continue on the next line (for references)\n state.can_continue = true\n state.str += unescapeAll(str.slice(start, pos))\n return state\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 '' +\n escapeHtml(token.content) +\n ''\n}\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n const token = tokens[idx]\n\n return '' +\n escapeHtml(tokens[idx].content) +\n '\\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('${highlighted}\\n`\n }\n\n return `
${highlighted}
\\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 ? '
\\n' : '
\\n'\n}\ndefault_rules.softbreak = function (tokens, idx, options /*, env */) {\n return options.breaks ? (options.xhtmlOut ? '
\\n' : '
\\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 ''; };\n * md.renderer.rules.strong_close = function () { return ''; };\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.mjs)\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. ``.\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 /^\\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://example.com/\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// -- → –, --- → —\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\n// Limit the amount of empty autocompleted cells in a table,\n// see https://github.com/markdown-it/markdown-it/issues/1000,\n//\n// Both pulldown-cmark and commonmark-hs limit the number of cells this way to ~200k.\n// We set it to 65k, which can expand user input by a factor of x370\n// (256x256 square is 1.8kB expanded into 650kB).\nconst MAX_AUTOCOMPLETED_CELLS = 0x10000\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 let autocompletedCells = 0\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 // note: autocomplete count can be negative if user specifies more columns than header,\n // but that does not affect intended use (which is limiting expansion)\n autocompletedCells += columnCount - columns.length\n if (autocompletedCells > MAX_AUTOCOMPLETED_CELLS) { break }\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 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 function getNextLine (nextLine) {\n const endLine = state.lineMax\n\n if (nextLine >= endLine || state.isEmpty(nextLine)) {\n // empty line or end of input\n return null\n }\n\n let isContinuation = false\n\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) { isContinuation = true }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { isContinuation = true }\n\n if (!isContinuation) {\n const terminatorRules = state.md.block.ruler.getRules('reference')\n const oldParentType = state.parentType\n state.parentType = 'reference'\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\n state.parentType = oldParentType\n if (terminate) {\n // terminated by another block\n return null\n }\n }\n\n const pos = state.bMarks[nextLine] + state.tShift[nextLine]\n const max = state.eMarks[nextLine]\n\n // max + 1 explicitly includes the newline\n return state.src.slice(pos, max + 1)\n }\n\n let str = state.src.slice(pos, max + 1)\n\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 const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\n } else if (ch === 0x5C /* \\ */) {\n pos++\n if (pos < max && str.charCodeAt(pos) === 0x0A) {\n const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\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 const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\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\n // save cursor state, we could require to rollback later\n const destEndPos = pos\n const destEndLineNo = nextLine\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 const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\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 let titleRes = state.md.helpers.parseLinkTitle(str, pos, max)\n while (titleRes.can_continue) {\n const lineContent = getNextLine(nextLine)\n if (lineContent === null) break\n str += lineContent\n pos = max\n max = str.length\n nextLine++\n titleRes = state.md.helpers.parseLinkTitle(str, pos, max, titleRes)\n }\n let title\n\n if (pos < max && start !== pos && titleRes.ok) {\n title = titleRes.str\n pos = titleRes.pos\n } else {\n title = ''\n pos = destEndPos\n nextLine = 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 nextLine = 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.line = nextLine\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 'search',\n 'section',\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 = ']*>'\nconst cdata = ''\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 [/^/, true],\n [/^/, true],\n [new RegExp('^|$))', '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 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 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 const left_flanking =\n !isNextWhiteSpace && (!isNextPunctChar || isLastWhiteSpace || isLastPunctChar)\n const right_flanking =\n !isLastWhiteSpace && (!isLastPunctChar || isNextWhiteSpace || isNextPunctChar)\n\n const can_open = left_flanking && (canSplitWord || !right_flanking || isLastPunctChar)\n const can_close = right_flanking && (canSplitWord || !left_flanking || isNextPunctChar)\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 `ParserInline` 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 // `whatever` -> `whatever`\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]( \"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]( \"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]( \"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]( \"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]( \"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]( \"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]( \"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]( \"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]( \"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]( \"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]( \"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]( \"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 ''\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 /^\\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 - {, ¯, ", ...\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 \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 state to ,\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 \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 (
)\n xhtmlOut: false,\n\n // Convert '\\n' in paragraphs into
\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 )\n xhtmlOut: false,\n\n // Convert '\\n' in paragraphs into
\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 )\n xhtmlOut: true,\n\n // Convert '\\n' in paragraphs into
\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 = 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.mjs) -\n * configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.mjs) -\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.mjs) -\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 * (`
`). 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 `
`.\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.mjs) +\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 ` or ``):\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 '
' +\n *                hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n *                '
';\n * } catch (__) {}\n * }\n *\n * return '
' + md.utils.escapeHtml(str) + '
';\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.mjs).\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.mjs)\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 `

` 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","'use strict';\n\nfunction modifyToken(token, modifyFn, env) {\n // create attrObj for convenient get/set of attributes\n var attrObj = (token.attrs) ? token.attrs.reduce(function (acc, pair) {\n acc[pair[0]] = pair[1];\n return acc;\n }, {}) : {};\n token.attrObj = attrObj;\n modifyFn(token, env);\n // apply any overrides or new attributes from attrObj\n Object.keys(token.attrObj).forEach(function (k) {\n token.attrSet(k, token.attrObj[k]);\n });\n}\n\nfunction noop() { }\n\nmodule.exports = function (md) {\n md.core.ruler.push(\n 'modify-token',\n function (state) {\n var modifyFn = md.options.modifyToken || noop;\n state.tokens.forEach(function (token) {\n if (token.children && token.children.length) {\n token.children.forEach(function (token) {\n modifyToken(token, modifyFn, state.env);\n });\n }\n modifyToken(token, modifyFn, state.env);\n });\n return false;\n }\n );\n};\n","import MarkdownIt from 'markdown-it'\nimport modifyToken from 'markdown-it-modify-token'\n\n/**\n * Callback used to cleanup links\n *\n * @param {object} token - Token to parse\n */\nfunction mdTokenModifier (token) {\n // \"Secure\" links to the outside world\n if (token.type === 'link_open') {\n const rx = new RegExp(`^https?://${window.location.host}(?:/.*)?$`)\n\n if (!rx.test(token.attrObj.href)) {\n token.attrObj.target = '_blank'\n token.attrObj.rel = 'noreferrer noopener'\n }\n }\n}\n\nconst md = new MarkdownIt({\n linkify: true,\n typographer: true,\n modifyToken: mdTokenModifier,\n})\n\nmd.use(modifyToken)\n\n/**\n * Wrapper in global context to render markdown\n *\n * @param {string} text - Markdown text\n * @returns {string} HTML version\n */\nwindow.markdown = function (text) {\n return md.render(text)\n}\n\n/**\n * Wrapper in global context to render markdown content from an HTML element in\n * another.\n *\n * @param {HTMLElement} sourceElement - Source HTML element\n * @param {HTMLElement} targetElement - Target element\n */\nwindow.renderMD = function (sourceElement, targetElement) {\n const content = targetElement.innerHTML\n .replace(/>/g, '>')\n .replace(/</g, '<')\n sourceElement.innerHTML = window.markdown(content)\n}\n","// To see this message, add the following to the `` section in your\n// views/layouts/application.html.erb\n//\n// <%= vite_client_tag %>\n// <%= vite_javascript_tag 'application' %>\n// console.log('Vite ⚡️ Rails')\n\n// If using a TypeScript entrypoint file:\n// <%= vite_typescript_tag 'application' %>\n//\n// If you want to use .jsx or .tsx, add the extension:\n// <%= vite_javascript_tag 'application.jsx' %>\n\n// console.log('Visit the guide for more information: ', 'https://vite-ruby.netlify.app/guide/rails')\n\n// Example: Load Rails libraries in Vite.\n//\nimport Rails from '@rails/ujs'\n\nimport { dateToInputString } from '@experiments-labs/rise_ui/src/lib/Dates'\n\n// import Turbolinks from 'turbolinks'\n// import ActiveStorage from '@rails/activestorage'\n//\n// // Import all channels.\n// const channels = import.meta.globEager('./**/*_channel.js')\n//\n// Turbolinks.start()\n// ActiveStorage.start()\n\nimport '@/helpers/markdown.js'\nimport '../stylesheets/style.scss'\n\n// Start UJS\nRails.start()\n\n// Default map projection for OpenLayers\nwindow.MAPS_PROJECTION = 'EPSG:3857'\n\nwindow.dateToInputString = dateToInputString\n"],"names":["linkClickSelector","buttonClickSelector","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","nonce","loadCSPNonce","metaTag","cspNonce","m","matches","element","selector","EXPANDO","getData","key","setData","value","$","isContentEditable","isEditable","csrfToken","meta","csrfParam","CSRFProtection","xhr","token","refreshCSRFTokens","param","input","AcceptHeaders","ajax","options","prepareOptions","createXHR","response","processResponse","done","type","script","parser","href","isCrossDomain","url","originAnchor","urlAnchor","preventDefault","CustomEvent","event","params","evt","result","fire","obj","name","data","stopEverything","e","delegate","eventType","handler","target","toArray","serializeElement","additionalParam","inputs","option","formElements","form","el","handleConfirmWithRails","rails","allowAction","confirm","message","callback","answer","handleDisabledElement","enableElement","isXhrRedirect","enableLinkElement","enableFormElement","enableFormElements","disableElement","disableLinkElement","disableFormElement","disableFormElements","replacement","originalText","handleMethodWithRails","link","method","csrfToken$1","csrfParam$1","formContent","isRemote","handleRemoteWithRails","withCredentials","dataType","button","args","formSubmitButtonClick","preventInsignificantClick","insignificantMetaClick","Rails","handleConfirm","handleMethod","handleRemote","start","originalOptions","decodeCache","getDecodeCache","exclude","cache","i","ch","decode","string","seq","l","b1","b2","chr","b3","b4","encodeCache","getEncodeCache","encode","keepEscaped","code","nextCode","format","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$1","P","regex","Z","htmlDecodeTree","c","xmlDecodeTree","_a","decodeMap","fromCodePoint","codePoint","output","replaceCodePoint","CharCodes","TO_LOWER_BIT","BinTrieFlags","isNumber","isHexadecimalCharacter","isAsciiAlphaNumeric","isEntityInAttributeInvalidEnd","EntityDecoderState","DecodingMode","EntityDecoder","decodeTree","emitCodePoint","errors","decodeMode","str","offset","end","base","digitCount","startIdx","char","lastCp","expectedLength","current","valueLength","determineBranch","consumed","getDecoder","ret","decoder","lastIndex","len","nodeIdx","branchCount","jumpOffset","lo","hi","mid","midVal","htmlDecoder","decodeHTML","mode","_class","isString","_hasOwnProperty","has","object","assign","source","arrayReplaceAt","src","pos","newElements","isValidEntityCode","surrogate1","surrogate2","UNESCAPE_MD_RE","ENTITY_RE","UNESCAPE_ALL_RE","DIGITAL_ENTITY_TEST_RE","replaceEntityPattern","match","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","ucmicro.S","isMdAsciiPunct","normalizeReference","lib","mdurl","ucmicro","parseLinkLabel","state","disableNested","level","found","marker","prevPos","max","oldPos","labelEnd","parseLinkDestination","parseLinkTitle","prev_state","default_rules","tokens","idx","env","slf","info","langName","langAttrs","arr","highlighted","tmpAttrs","tmpToken","Renderer","needLf","nextToken","rules","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","MAX_AUTOCOMPLETED_CELLS","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","autocompletedCells","terminate","token_tbo","token_tro","token_tdo","fence","mem","markup","haveEndMarker","blockquote","oldLineMax","oldBMarks","oldBSCount","oldSCount","oldTShift","lastLineEmpty","isOutdented","initial","spaceAfterMarker","adjustTab","oldIndent","lines","hr","cnt","skipBulletListMarker","skipOrderedListMarker","markTightParagraphs","tight","isTerminatingParagraph","isOrdered","markerValue","posAfterMarker","markerCharCode","listTokIdx","listLines","prevEmptyEnd","contentStart","indentAfterMarker","itemLines","oldTight","oldListIndent","reference","_endLine","getNextLine","isContinuation","lineContent","destRes","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","count","left_flanking","right_flanking","isTerminatorChar","SCHEME_RE","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","ml","me","next","tld_pos","at_pos","keepOld","maxInt","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexPunycode","regexNonASCII","regexSeparators","baseMinusTMin","floor","stringFromCharCode","error","map","array","length","mapDomain","domain","parts","labels","encoded","ucs2decode","counter","extra","ucs2encode","codePoints","basicToDigit","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","inputLength","bias","basic","oldi","w","baseMinusT","out","n","currentValue","basicLength","handledCPCount","handledCPCountPlusOne","q","qMinusT","toUnicode","toASCII","punycode","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","modifyToken","modifyFn","attrObj","pair","noop","markdownItModifyToken","mdTokenModifier","sourceElement","targetElement","dateToInputString"],"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,66,67,68,69]}