{"version":3,"file":"covalent-markdown.mjs","sources":["../tmp-esm2022/lib/markdown-utils/markdown-utils.js","../tmp-esm2022/lib/markdown.component.js","../tmp-esm2022/lib/markdown-loader/markdown-loader.service.js","../tmp-esm2022/lib/markdown.module.js","../tmp-esm2022/covalent-markdown.js"],"sourcesContent":["export function removeLeadingHash(str) {\n    if (str) {\n        return str.replace(/^#+/, '');\n    }\n    return '';\n}\nexport function removeTrailingHash(str) {\n    if (str) {\n        return str.replace(/#.*/, '');\n    }\n    return '';\n}\nexport function genHeadingId(str) {\n    if (str) {\n        return removeLeadingHash(str\n            .replace(/(_|-|\\s)+/g, '')\n            // Remove certain special chars to create heading ids similar to those in github\n            // borrowed from showdown\n            // https://github.com/showdownjs/showdown/blob/main/src/subParsers/makehtml/headers.js#L94\n            .replace(/[&+$,/:;=?@\"#{}|^¨~[\\]`\\\\*)(%.!'<>]/g, '')).toLowerCase();\n    }\n    return '';\n}\nexport function scrollToAnchor(scope, anchor, tryParent) {\n    if (scope && anchor) {\n        const normalizedAnchor = genHeadingId(anchor);\n        let headingToJumpTo = null;\n        const headingWithinComponent = scope.querySelector(`[id=\"${normalizedAnchor}\"]`);\n        if (headingWithinComponent) {\n            headingToJumpTo = headingWithinComponent;\n        }\n        else if (tryParent) {\n            const parent = scope.parentElement;\n            if (parent) {\n                headingToJumpTo = parent.querySelector(`[id=\"${normalizedAnchor}\"]`);\n            }\n        }\n        if (headingToJumpTo) {\n            headingToJumpTo.scrollIntoView({ behavior: 'auto' });\n            return true;\n        }\n    }\n    return false;\n}\nexport function isAnchorLink(anchor) {\n    if (anchor) {\n        const href = anchor.getAttribute('href');\n        if (href) {\n            return href.startsWith('#');\n        }\n    }\n    return false;\n}\nexport function isFileLink(anchor, fileExtensions) {\n    if (fileExtensions && fileExtensions.length) {\n        const href = anchor.getAttribute('href');\n        if (href) {\n            return fileExtensions.some((fileExtension) => href.endsWith(fileExtension));\n        }\n    }\n    return false;\n}\nconst RAW_GITHUB_HOSTNAME = 'raw.githubusercontent.com';\nexport function rawGithubHref(githubHref) {\n    if (githubHref) {\n        try {\n            const url = new URL(githubHref);\n            if (url.hostname === RAW_GITHUB_HOSTNAME) {\n                return url.href;\n            }\n            else if (isGithubHref(githubHref)) {\n                url.hostname = RAW_GITHUB_HOSTNAME;\n                url.pathname = url.pathname.split('/blob', 2).join('');\n                return url.href;\n            }\n        }\n        catch {\n            return '';\n        }\n    }\n    return '';\n}\nexport function isGithubHref(href) {\n    try {\n        const temp = new URL(href ?? '');\n        return temp.hostname === 'github.com';\n    }\n    catch {\n        return false;\n    }\n}\nexport function isRawGithubHref(href = '') {\n    try {\n        const temp = new URL(href);\n        return temp.hostname === RAW_GITHUB_HOSTNAME;\n    }\n    catch {\n        return false;\n    }\n}\nexport function renderVideoElements(html) {\n    const ytLongEmbed = /!\\[(?:(?:https?:)?(?:\\/\\/)?)(?:(?:www)?.)?youtube.(?:.+?)\\/(?:(?:embed\\/)([\\w-]{11})(\\?[\\w%;-]+(?:=[\\w%;-]+)?(?:&[\\w%;-]+(?:=[\\w%;-]+)?)*)?)]/gi;\n    const ytLongWatch = /!\\[(?:(?:https?:)?(?:\\/\\/)?)(?:(?:www)?.)?youtube.(?:.+?)\\/(?:(?:watch\\?v=)([\\w-]{11})(&[\\w%;-]+(?:=[\\w%;-]+)?)*)]/gi;\n    const ytShort = /!\\[(?:(?:https?:)?(?:\\/\\/)?)?youtu.be\\/([\\w-]{11})\\??([\\w%;-]+(?:=[\\w%;-]+)?(?:&[\\w%;-]+(?:=[\\w%;-]+)?)*)?]/gi;\n    const ytPlaylist = /!\\[(?:(?:https?:)?(?:\\/\\/)?)(?:(?:www)?.)?youtube.(?:.+?)\\/(?:(?:playlist\\?list=)([\\w-]{34})(&[\\w%;-]+(?:=[\\w%;-]+)?)*)]/gi;\n    function convert(match, id, flags) {\n        if (flags) {\n            id += '?' + flags.replace(/&amp;/gi, '&');\n        }\n        return `<iframe allow=\"fullscreen\" frameborder=\"0\" src=\"https://www.youtube.com/embed/${id}\"></iframe>`;\n    }\n    function convertPL(match, id, flags) {\n        if (flags) {\n            id += flags.replace(/&amp;/gi, '&');\n        }\n        return `<iframe allow=\"fullscreen\" frameborder=\"0\" src=\"https://www.youtube.com/embed/videoseries?list=${id}\"></iframe>`;\n    }\n    return html\n        .replace(ytLongWatch, convert)\n        .replace(ytLongEmbed, convert)\n        .replace(ytShort, convert)\n        .replace(ytPlaylist, convertPL);\n}\n/**\n * Checks whether text contains markdown syntax patterns.\n */\nexport function containsMarkdown(text) {\n    const markdownPatterns = [\n        /(?:^|\\n)\\s{0,3}#{1,6}\\s/, // ATX headings\n        /(?:^|\\n)\\s{0,3}[-*+]\\s/, // unordered list items\n        /(?:^|\\n)\\s{0,3}\\d+\\.\\s/, // ordered list items\n        /(?:^|\\n)\\s{0,3}>\\s/, // blockquotes\n        /\\*\\*.+?\\*\\*/s, // bold\n        /\\[.+?\\]\\(.+?\\)/s, // links\n        /!\\[.*?\\]\\(.+?\\)/s, // images\n        /`.+?`/, // inline code\n        /(?:^|\\n)\\s{0,3}```/, // fenced code blocks\n        /(?:^|\\n)\\s{0,3}---\\s*(?:$|\\n)/, // horizontal rules\n    ];\n    return markdownPatterns.some((pattern) => pattern.test(text));\n}\n/**\n * Finds the index of the matching closing tag, handling nested same-name tags.\n */\nexport function findClosingTagIndex(str, tagName, searchFrom) {\n    const openPattern = new RegExp(`<${tagName}(?:\\\\s[^>]*)?>`, 'gi');\n    const closePattern = new RegExp(`</${tagName}\\\\s*>`, 'gi');\n    let depth = 1;\n    let pos = searchFrom;\n    while (pos < str.length && depth > 0) {\n        openPattern.lastIndex = pos;\n        closePattern.lastIndex = pos;\n        // we look for open and close tags starting from the end of the last match\n        const nextOpen = openPattern.exec(str);\n        const nextClose = closePattern.exec(str);\n        if (!nextClose)\n            return -1;\n        // if we find an open tag before a close tag, it means we have a nested tag, so we increase the depth\n        if (nextOpen && nextOpen.index < nextClose.index) {\n            depth++;\n            pos = nextOpen.index + nextOpen[0].length;\n        }\n        else {\n            depth--;\n            if (depth === 0)\n                return nextClose.index;\n            pos = nextClose.index + nextClose[0].length;\n        }\n    }\n    return -1;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL21hcmtkb3duL3NyYy9saWIvbWFya2Rvd24tdXRpbHMvbWFya2Rvd24tdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEdBQVc7SUFDM0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNSLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxHQUFrQjtJQUNuRCxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1IsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxHQUFXO0lBQ3RDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDUixPQUFPLGlCQUFpQixDQUN0QixHQUFHO2FBQ0EsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7WUFDMUIsZ0ZBQWdGO1lBQ2hGLHlCQUF5QjtZQUN6QiwwRkFBMEY7YUFDekYsT0FBTyxDQUFDLHNDQUFzQyxFQUFFLEVBQUUsQ0FBQyxDQUN2RCxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUM1QixLQUFrQixFQUNsQixNQUFjLEVBQ2QsU0FBa0I7SUFFbEIsSUFBSSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7UUFDcEIsTUFBTSxnQkFBZ0IsR0FBVyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEQsSUFBSSxlQUFlLEdBQW1CLElB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QU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV6QyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFMUIscUdBQXFHO1FBQ3JHLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pELEtBQUssRUFBRSxDQUFDO1lBQ1IsR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUM1QyxDQUFDO2FBQU0sQ0FBQztZQUNOLEtBQUssRUFBRSxDQUFDO1lBQ1IsSUFBSSxLQUFLLEtBQUssQ0FBQztnQkFBRSxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDeEMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUM5QyxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxlYWRpbmdIYXNoKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvXiMrLywgJycpO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVRyYWlsaW5nSGFzaChzdHI6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcge1xuICBpZiAoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8jLiovLCAnJyk7XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuSGVhZGluZ0lkKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHN0cikge1xuICAgIHJldHVybiByZW1vdmVMZWFkaW5nSGFzaChcbiAgICAgIHN0clxuICAgICAgICAucmVwbGFjZSgvKF98LXxcXHMpKy9nLCAnJylcbiAgICAgICAgLy8gUmVtb3ZlIGNlcnRhaW4gc3BlY2lhbCBjaGFycyB0byBjcmVhdGUgaGVhZGluZyBpZHMgc2ltaWxhciB0byB0aG9zZSBpbiBnaXRodWJcbiAgICAgICAgLy8gYm9ycm93ZWQgZnJvbSBzaG93ZG93blxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vc2hvd2Rvd25qcy9zaG93ZG93bi9ibG9iL21haW4vc3JjL3N1YlBhcnNlcnMvbWFrZWh0bWwvaGVhZGVycy5qcyNMOTRcbiAgICAgICAgLnJlcGxhY2UoL1smKyQsLzo7PT9AXCIje318XsKofltcXF1gXFxcXCopKCUuISc8Pl0vZywgJycpLFxuICAgICkudG9Mb3dlckNhc2UoKTtcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb0FuY2hvcihcbiAgc2NvcGU6IEhUTUxFbGVtZW50LFxuICBhbmNob3I6IHN0cmluZyxcbiAgdHJ5UGFyZW50OiBib29sZWFuLFxuKTogYm9vbGVhbiB7XG4gIGlmIChzY29wZSAmJiBhbmNob3IpIHtcbiAgICBjb25zdCBub3JtYWxpemVkQW5jaG9yOiBzdHJpbmcgPSBnZW5IZWFkaW5nSWQoYW5jaG9yKTtcbiAgICBsZXQgaGVhZGluZ1RvSnVtcFRvOiBFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3QgaGVhZGluZ1dpdGhpbkNvbXBvbmVudCA9IHNjb3BlLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBgW2lkPVwiJHtub3JtYWxpemVkQW5jaG9yfVwiXWAsXG4gICAgKTtcblxuICAgIGlmIChoZWFkaW5nV2l0aGluQ29tcG9uZW50KSB7XG4gICAgICBoZWFkaW5nVG9KdW1wVG8gPSBoZWFkaW5nV2l0aGluQ29tcG9uZW50O1xuICAgIH0gZWxzZSBpZiAodHJ5UGFyZW50KSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBzY29wZS5wYXJlbnRFbGVtZW50O1xuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICBoZWFkaW5nVG9KdW1wVG8gPSBwYXJlbnQucXVlcnlTZWxlY3RvcihgW2lkPVwiJHtub3JtYWxpemVkQW5jaG9yfVwiXWApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGVhZGluZ1RvSnVtcFRvKSB7XG4gICAgICBoZWFkaW5nVG9KdW1wVG8uc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ2F1dG8nIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQW5jaG9yTGluayhhbmNob3I/OiBIVE1MQW5jaG9yRWxlbWVudCk6IGJvb2xlYW4ge1xuICBpZiAoYW5jaG9yKSB7XG4gICAgY29uc3QgaHJlZiA9IGFuY2hvci5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICBpZiAoaHJlZikge1xuICAgICAgcmV0dXJuIGhyZWYuc3RhcnRzV2l0aCgnIycpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbGVMaW5rKFxuICBhbmNob3I6IEhUTUxBbmNob3JFbGVtZW50LFxuICBmaWxlRXh0ZW5zaW9uczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4pOiBib29sZWFuIHtcbiAgaWYgKGZpbGVFeHRlbnNpb25zICYmIGZpbGVFeHRlbnNpb25zLmxlbmd0aCkge1xuICAgIGNvbnN0IGhyZWYgPSBhbmNob3IuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG4gICAgaWYgKGhyZWYpIHtcbiAgICAgIHJldHVybiBmaWxlRXh0ZW5zaW9ucy5zb21lKChmaWxlRXh0ZW5zaW9uKSA9PlxuICAgICAgICBocmVmLmVuZHNXaXRoKGZpbGVFeHRlbnNpb24pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5jb25zdCBSQVdfR0lUSFVCX0hPU1ROQU1FID0gJ3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20nO1xuXG5leHBvcnQgZnVuY3Rpb24gcmF3R2l0aHViSHJlZihnaXRodWJIcmVmPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGdpdGh1YkhyZWYpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXJsOiBVUkwgPSBuZXcgVVJMKGdpdGh1YkhyZWYpO1xuICAgICAgaWYgKHVybC5ob3N0bmFtZSA9PT0gUkFXX0dJVEhVQl9IT1NUTkFNRSkge1xuICAgICAgICByZXR1cm4gdXJsLmhyZWY7XG4gICAgICB9IGVsc2UgaWYgKGlzR2l0aHViSHJlZihnaXRodWJIcmVmKSkge1xuICAgICAgICB1cmwuaG9zdG5hbWUgPSBSQVdfR0lUSFVCX0hPU1ROQU1FO1xuICAgICAgICB1cmwucGF0aG5hbWUgPSB1cmwucGF0aG5hbWUuc3BsaXQoJy9ibG9iJywgMikuam9pbignJyk7XG4gICAgICAgIHJldHVybiB1cmwuaHJlZjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNHaXRodWJIcmVmKGhyZWY/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ZW1wOiBVUkwgPSBuZXcgVVJMKGhyZWYgPz8gJycpO1xuICAgIHJldHVybiB0ZW1wLmhvc3RuYW1lID09PSAnZ2l0aHViLmNvbSc7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSYXdHaXRodWJIcmVmKGhyZWYgPSAnJyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGNvbnN0IHRlbXA6IFVSTCA9IG5ldyBVUkwoaHJlZik7XG4gICAgcmV0dXJuIHRlbXAuaG9zdG5hbWUgPT09IFJBV19HSVRIVUJfSE9TVE5BTUU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyVmlkZW9FbGVtZW50cyhodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB5dExvbmdFbWJlZCA9XG4gICAgLyFcXFsoPzooPzpodHRwcz86KT8oPzpcXC9cXC8pPykoPzooPzp3d3cpPy4pP3lvdXR1YmUuKD86Lis/KVxcLyg/Oig/OmVtYmVkXFwvKShbXFx3LV17MTF9KShcXD9bXFx3JTstXSsoPzo9W1xcdyU7LV0rKT8oPzomW1xcdyU7LV0rKD86PVtcXHclOy1dKyk/KSopPyldL2dpO1xuICBjb25zdCB5dExvbmdXYXRjaCA9XG4gICAgLyFcXFsoPzooPzpodHRwcz86KT8oPzpcXC9cXC8pPykoPzooPzp3d3cpPy4pP3lvdXR1YmUuKD86Lis/KVxcLyg/Oig/OndhdGNoXFw/dj0pKFtcXHctXXsxMX0pKCZbXFx3JTstXSsoPzo9W1xcdyU7LV0rKT8pKildL2dpO1xuICBjb25zdCB5dFNob3J0ID1cbiAgICAvIVxcWyg/Oig/Omh0dHBzPzopPyg/OlxcL1xcLyk/KT95b3V0dS5iZVxcLyhbXFx3LV17MTF9KVxcPz8oW1xcdyU7LV0rKD86PVtcXHclOy1dKyk/KD86JltcXHclOy1dKyg/Oj1bXFx3JTstXSspPykqKT9dL2dpO1xuICBjb25zdCB5dFBsYXlsaXN0ID1cbiAgICAvIVxcWyg/Oig/Omh0dHBzPzopPyg/OlxcL1xcLyk/KSg/Oig/Ond3dyk/Lik/eW91dHViZS4oPzouKz8pXFwvKD86KD86cGxheWxpc3RcXD9saXN0PSkoW1xcdy1dezM0fSkoJltcXHclOy1dKyg/Oj1bXFx3JTstXSspPykqKV0vZ2k7XG5cbiAgZnVuY3Rpb24gY29udmVydChtYXRjaDogc3RyaW5nLCBpZDogc3RyaW5nLCBmbGFnczogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoZmxhZ3MpIHtcbiAgICAgIGlkICs9ICc/JyArIGZsYWdzLnJlcGxhY2UoLyZhbXA7L2dpLCAnJicpO1xuICAgIH1cbiAgICByZXR1cm4gYDxpZnJhbWUgYWxsb3c9XCJmdWxsc2NyZWVuXCIgZnJhbWVib3JkZXI9XCIwXCIgc3JjPVwiaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvJHtpZH1cIj48L2lmcmFtZT5gO1xuICB9XG4gIGZ1bmN0aW9uIGNvbnZlcnRQTChtYXRjaDogc3RyaW5nLCBpZDogc3RyaW5nLCBmbGFnczogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoZmxhZ3MpIHtcbiAgICAgIGlkICs9IGZsYWdzLnJlcGxhY2UoLyZhbXA7L2dpLCAnJicpO1xuICAgIH1cbiAgICByZXR1cm4gYDxpZnJhbWUgYWxsb3c9XCJmdWxsc2NyZWVuXCIgZnJhbWVib3JkZXI9XCIwXCIgc3JjPVwiaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvdmlkZW9zZXJpZXM/bGlzdD0ke2lkfVwiPjwvaWZyYW1lPmA7XG4gIH1cblxuICByZXR1cm4gaHRtbFxuICAgIC5yZXBsYWNlKHl0TG9uZ1dhdGNoLCBjb252ZXJ0KVxuICAgIC5yZXBsYWNlKHl0TG9uZ0VtYmVkLCBjb252ZXJ0KVxuICAgIC5yZXBsYWNlKHl0U2hvcnQsIGNvbnZlcnQpXG4gICAgLnJlcGxhY2UoeXRQbGF5bGlzdCwgY29udmVydFBMKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0ZXh0IGNvbnRhaW5zIG1hcmtkb3duIHN5bnRheCBwYXR0ZXJucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5zTWFya2Rvd24odGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG1hcmtkb3duUGF0dGVybnMgPSBbXG4gICAgLyg/Ol58XFxuKVxcc3swLDN9I3sxLDZ9XFxzLywgLy8gQVRYIGhlYWRpbmdzXG4gICAgLyg/Ol58XFxuKVxcc3swLDN9Wy0qK11cXHMvLCAvLyB1bm9yZGVyZWQgbGlzdCBpdGVtc1xuICAgIC8oPzpefFxcbilcXHN7MCwzfVxcZCtcXC5cXHMvLCAvLyBvcmRlcmVkIGxpc3QgaXRlbXNcbiAgICAvKD86XnxcXG4pXFxzezAsM30+XFxzLywgLy8gYmxvY2txdW90ZXNcbiAgICAvXFwqXFwqLis/XFwqXFwqL3MsIC8vIGJvbGRcbiAgICAvXFxbLis/XFxdXFwoLis/XFwpL3MsIC8vIGxpbmtzXG4gICAgLyFcXFsuKj9cXF1cXCguKz9cXCkvcywgLy8gaW1hZ2VzXG4gICAgL2AuKz9gLywgLy8gaW5saW5lIGNvZGVcbiAgICAvKD86XnxcXG4pXFxzezAsM31gYGAvLCAvLyBmZW5jZWQgY29kZSBibG9ja3NcbiAgICAvKD86XnxcXG4pXFxzezAsM30tLS1cXHMqKD86JHxcXG4pLywgLy8gaG9yaXpvbnRhbCBydWxlc1xuICBdO1xuICByZXR1cm4gbWFya2Rvd25QYXR0ZXJucy5zb21lKChwYXR0ZXJuKSA9PiBwYXR0ZXJuLnRlc3QodGV4dCkpO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hpbmcgY2xvc2luZyB0YWcsIGhhbmRsaW5nIG5lc3RlZCBzYW1lLW5hbWUgdGFncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDbG9zaW5nVGFnSW5kZXgoXG4gIHN0cjogc3RyaW5nLFxuICB0YWdOYW1lOiBzdHJpbmcsXG4gIHNlYXJjaEZyb206IG51bWJlcixcbik6IG51bWJlciB7XG4gIGNvbnN0IG9wZW5QYXR0ZXJuID0gbmV3IFJlZ0V4cChgPCR7dGFnTmFtZX0oPzpcXFxcc1tePl0qKT8+YCwgJ2dpJyk7XG4gIGNvbnN0IGNsb3NlUGF0dGVybiA9IG5ldyBSZWdFeHAoYDwvJHt0YWdOYW1lfVxcXFxzKj5gLCAnZ2knKTtcbiAgbGV0IGRlcHRoID0gMTtcbiAgbGV0IHBvcyA9IHNlYXJjaEZyb207XG5cbiAgd2hpbGUgKHBvcyA8IHN0ci5sZW5ndGggJiYgZGVwdGggPiAwKSB7XG4gICAgb3BlblBhdHRlcm4ubGFzdEluZGV4ID0gcG9zO1xuICAgIGNsb3NlUGF0dGVybi5sYXN0SW5kZXggPSBwb3M7XG5cbiAgICAvLyB3ZSBsb29rIGZvciBvcGVuIGFuZCBjbG9zZSB0YWdzIHN0YXJ0aW5nIGZyb20gdGhlIGVuZCBvZiB0aGUgbGFzdCBtYXRjaFxuICAgIGNvbnN0IG5leHRPcGVuID0gb3BlblBhdHRlcm4uZXhlYyhzdHIpO1xuICAgIGNvbnN0IG5leHRDbG9zZSA9IGNsb3NlUGF0dGVybi5leGVjKHN0cik7XG5cbiAgICBpZiAoIW5leHRDbG9zZSkgcmV0dXJuIC0xO1xuXG4gICAgLy8gaWYgd2UgZmluZCBhbiBvcGVuIHRhZyBiZWZvcmUgYSBjbG9zZSB0YWcsIGl0IG1lYW5zIHdlIGhhdmUgYSBuZXN0ZWQgdGFnLCBzbyB3ZSBpbmNyZWFzZSB0aGUgZGVwdGhcbiAgICBpZiAobmV4dE9wZW4gJiYgbmV4dE9wZW4uaW5kZXggPCBuZXh0Q2xvc2UuaW5kZXgpIHtcbiAgICAgIGRlcHRoKys7XG4gICAgICBwb3MgPSBuZXh0T3Blbi5pbmRleCArIG5leHRPcGVuWzBdLmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVwdGgtLTtcbiAgICAgIGlmIChkZXB0aCA9PT0gMCkgcmV0dXJuIG5leHRDbG9zZS5pbmRleDtcbiAgICAgIHBvcyA9IG5leHRDbG9zZS5pbmRleCArIG5leHRDbG9zZVswXS5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xO1xufVxuIl19","import { Component, ElementRef, Input, Output, EventEmitter, Renderer2, SecurityContext, HostBinding, NgZone, inject, } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { scrollToAnchor, genHeadingId, isAnchorLink, removeTrailingHash, rawGithubHref, isGithubHref, isRawGithubHref, renderVideoElements, isFileLink, findClosingTagIndex, containsMarkdown, } from './markdown-utils/markdown-utils';\nimport * as showdown from 'showdown';\nimport * as i0 from \"@angular/core\";\nconst _c0 = [\"*\"];\nfunction isAbsoluteUrl(currentHref) {\n    // Regular Expression to check url\n    const RgExp = /^(?:[a-z]+:)?\\/\\//i;\n    return RgExp.test(currentHref);\n}\n// TODO: assumes it is a github url\n// allow override somehow\nfunction generateHref(currentHref, relativeHref) {\n    if (currentHref && relativeHref) {\n        if (isAbsoluteUrl(currentHref)) {\n            const currentUrl = new URL(currentHref);\n            const path = currentUrl.pathname\n                .split('/')\n                .slice(1, -1)\n                .join('/');\n            const correctUrl = new URL(currentHref);\n            if (relativeHref.startsWith('/')) {\n                // url is relative to top level\n                const orgAndRepo = path.split('/').slice(0, 3).join('/');\n                correctUrl.pathname = `${orgAndRepo}${relativeHref}`;\n            }\n            else {\n                correctUrl.pathname = `${path}/${relativeHref}`;\n            }\n            return correctUrl.href;\n        }\n        else {\n            const path = currentHref.split('/').slice(0, -1).join('/');\n            if (relativeHref.startsWith('/')) {\n                return `${path}${relativeHref}`;\n            }\n            else {\n                return `${path}/${relativeHref}`;\n            }\n        }\n    }\n    return '';\n}\nfunction normalizeHtmlHrefs(html, currentHref, fileLinkExtensions) {\n    const document = new DOMParser().parseFromString(html, 'text/html');\n    document\n        .querySelectorAll('a[href]')\n        .forEach((link) => {\n        try {\n            const url = new URL(link.href);\n            const originalHash = url.hash;\n            const isFileAnchorLink = isFileLink(link, fileLinkExtensions);\n            if (isAnchorLink(link)) {\n                if (originalHash) {\n                    url.hash = genHeadingId(originalHash);\n                    link.href = url.hash;\n                }\n            }\n            else if (url.host === window.location.host) {\n                // hosts match, meaning URL MIGHT have been malformed by showdown\n                // url is a relative url or just a link to a part of the application\n                if (currentHref &&\n                    (url.pathname.endsWith('.md') || isFileAnchorLink)) {\n                    // only check .md urls or urls ending with the fileLinkExtensions\n                    const hrefWithoutHash = removeTrailingHash(link.getAttribute('href'));\n                    url.href = generateHref(currentHref, hrefWithoutHash);\n                    if (originalHash) {\n                        url.hash = genHeadingId(originalHash);\n                    }\n                    link.href = url.href;\n                    link.target = isFileAnchorLink ? '_self' : '_blank';\n                }\n            }\n            else {\n                // Different host - external link\n                if (url.pathname.endsWith('.md')) {\n                    if (originalHash) {\n                        url.hash = genHeadingId(originalHash);\n                    }\n                    link.href = url.href;\n                }\n                link.target = '_blank';\n            }\n        }\n        catch {\n            // If URL parsing fails, check if it looks like an external http(s) link\n            const hrefAttr = (link.getAttribute('href') ?? '').trim();\n            if (hrefAttr.startsWith('http://') || hrefAttr.startsWith('https://')) {\n                link.target = '_blank';\n            }\n        }\n    });\n    return new XMLSerializer().serializeToString(document);\n}\nfunction normalizeImageSrcs(html, currentHref) {\n    if (currentHref) {\n        const document = new DOMParser().parseFromString(html, 'text/html');\n        document\n            .querySelectorAll('img[src]')\n            .forEach((image) => {\n            const src = image.getAttribute('src') ?? '';\n            try {\n                /* tslint:disable-next-line:no-unused-expression */\n                new URL(src);\n                if (isGithubHref(src)) {\n                    image.src = rawGithubHref(src);\n                }\n            }\n            catch {\n                image.src = generateHref(isGithubHref(currentHref)\n                    ? rawGithubHref(currentHref)\n                    : currentHref, src);\n            }\n            // gh svgs need to have ?sanitize=true\n            if (isRawGithubHref(image.src)) {\n                const url = new URL(image.src);\n                if (url.pathname.endsWith('.svg')) {\n                    url.searchParams.set('sanitize', 'true');\n                    image.src = url.href;\n                }\n            }\n        });\n        return new XMLSerializer().serializeToString(document);\n    }\n    return html;\n}\nfunction normalizeVideoSrcs(html, currentHref) {\n    if (currentHref) {\n        const document = new DOMParser().parseFromString(html, 'text/html');\n        // Normalize video elements with src attribute\n        document\n            .querySelectorAll('video[src]')\n            .forEach((video) => {\n            const src = video.getAttribute('src') ?? '';\n            try {\n                /* tslint:disable-next-line:no-unused-expression */\n                new URL(src);\n                if (isGithubHref(src)) {\n                    video.src = rawGithubHref(src);\n                }\n            }\n            catch {\n                video.src = generateHref(isGithubHref(currentHref)\n                    ? rawGithubHref(currentHref)\n                    : currentHref, src);\n            }\n        });\n        // Normalize video poster attributes\n        document\n            .querySelectorAll('video[poster]')\n            .forEach((video) => {\n            const poster = video.getAttribute('poster') ?? '';\n            try {\n                /* tslint:disable-next-line:no-unused-expression */\n                new URL(poster);\n                if (isGithubHref(poster)) {\n                    video.poster = rawGithubHref(poster);\n                }\n            }\n            catch {\n                video.poster = generateHref(isGithubHref(currentHref)\n                    ? rawGithubHref(currentHref)\n                    : currentHref, poster);\n            }\n        });\n        // Normalize source tags inside video elements\n        document\n            .querySelectorAll('video source[src]')\n            .forEach((source) => {\n            const src = source.getAttribute('src') ?? '';\n            try {\n                /* tslint:disable-next-line:no-unused-expression */\n                new URL(src);\n                if (isGithubHref(src)) {\n                    source.src = rawGithubHref(src);\n                }\n            }\n            catch {\n                source.src = generateHref(isGithubHref(currentHref)\n                    ? rawGithubHref(currentHref)\n                    : currentHref, src);\n            }\n        });\n        return new XMLSerializer().serializeToString(document);\n    }\n    return html;\n}\nfunction addIdsToHeadings(html) {\n    if (html) {\n        const document = new DOMParser().parseFromString(html, 'text/html');\n        document\n            .querySelectorAll('h1, h2, h3, h4, h5, h6')\n            .forEach((heading) => {\n            const strippedInnerHTML = stripAllHtmlTags(heading.innerHTML);\n            const id = genHeadingId(strippedInnerHTML);\n            heading.setAttribute('id', id);\n        });\n        return new XMLSerializer().serializeToString(document);\n    }\n    return html;\n}\nfunction changeStyleAlignmentToClass(html) {\n    if (html) {\n        const document = new DOMParser().parseFromString(html, 'text/html');\n        ['right', 'center', 'left'].forEach((alignment) => {\n            document\n                .querySelectorAll(`[style*='text-align:${alignment}']`)\n                .forEach((style) => {\n                style.setAttribute('class', `markdown-align-${alignment}`);\n            });\n        });\n        return new XMLSerializer().serializeToString(document);\n    }\n    return html;\n}\n/**\n * Adds markdown=\"1\" attribute to HTML block-level tags so that\n * showdown parses any markdown nested inside them.\n * Only adds the attribute when the tag's inner content contains markdown syntax.\n */\nfunction addMarkdownAttrToHtmlTags(markdown) {\n    const voidElements = new Set([\n        'area',\n        'base',\n        'br',\n        'col',\n        'embed',\n        'hr',\n        'img',\n        'input',\n        'link',\n        'meta',\n        'param',\n        'source',\n        'track',\n        'wbr',\n    ]);\n    const openTagRegex = /<([A-Za-z][A-Za-z0-9-]*)(\\s[^>]*)?\\s*>/g;\n    let result = '';\n    let lastIndex = 0;\n    let match;\n    while ((match = openTagRegex.exec(markdown)) !== null) {\n        const fullMatch = match[0];\n        const tagName = match[1];\n        const attrs = match[2] || '';\n        const tag = tagName.toLowerCase();\n        // Skip void elements, self-closing tags, or tags with existing markdown attr\n        if (voidElements.has(tag) ||\n            fullMatch.endsWith('/>') ||\n            /markdown\\s*=/.test(attrs)) {\n            continue;\n        }\n        const contentStart = match.index + fullMatch.length;\n        const closingTagIndex = findClosingTagIndex(markdown, tagName, contentStart);\n        if (closingTagIndex === -1)\n            continue;\n        const innerContent = markdown.slice(contentStart, closingTagIndex);\n        if (containsMarkdown(innerContent)) {\n            result += markdown.slice(lastIndex, match.index);\n            result += fullMatch.replace(new RegExp(`<${tagName}(\\\\s|>)`), `<${tagName} markdown=\"1\"$1`);\n            lastIndex = contentStart;\n        }\n    }\n    result += markdown.slice(lastIndex);\n    return result;\n}\n// Strips all the html tags in the html sand returns the text\nfunction stripAllHtmlTags(input) {\n    let sanitized = input;\n    let previous;\n    do {\n        previous = sanitized;\n        sanitized = sanitized.replace(/<[^>]+>/g, '');\n    } while (previous !== sanitized);\n    return sanitized;\n}\nexport class TdMarkdownComponent {\n    _renderer = inject(Renderer2);\n    _elementRef = inject(ElementRef);\n    _domSanitizer = inject(DomSanitizer);\n    _ngZone = inject(NgZone);\n    _content;\n    _simpleLineBreaks = false;\n    _hostedUrl;\n    _anchor;\n    _viewInit = false;\n    _fileLinkExtensions;\n    _anchorListener;\n    /**\n     * .td-markdown class added to host so ::ng-deep gets scoped.\n     */\n    class = 'td-markdown';\n    /**\n     * content?: string\n     *\n     * Markdown format content to be parsed as html markup.\n     *\n     * e.g. README.md content.\n     */\n    set content(content) {\n        this._content = content;\n    }\n    /**\n     * simpleLineBreaks?: string\n     *\n     * Sets whether newline characters inside paragraphs and spans are parsed as <br/>.\n     * Defaults to false.\n     */\n    set simpleLineBreaks(simpleLineBreaks) {\n        this._simpleLineBreaks = simpleLineBreaks;\n    }\n    /**\n     * hostedUrl?: string\n     *\n     * If markdown contains relative paths, this is required to generate correct urls.\n     *\n     */\n    set hostedUrl(hostedUrl) {\n        this._hostedUrl = hostedUrl;\n    }\n    /**\n     * anchor?: string\n     *\n     * Anchor to jump to.\n     *\n     */\n    set anchor(anchor) {\n        this._anchor = anchor;\n    }\n    /**\n     * The file extensions to monitor for in anchor tags. If an anchor's `href` ends\n     * with these extensions, an event will be emitted instead of performing the default click action.\n     * Example values: [\".ipynb\", \".zip\", \".docx\"]\n     */\n    set fileLinkExtensions(extensions) {\n        this._fileLinkExtensions = extensions;\n    }\n    /**\n     * Event emitted when an anchor tag with an `href` matching the specified\n     * fileLinkExtensions is clicked. The emitted value is the URL of the clicked anchor.\n     */\n    fileLinkClicked = new EventEmitter();\n    /**\n     * contentReady?: function\n     * Event emitted after the markdown content rendering is finished.\n     */\n    contentReady = new EventEmitter();\n    ngOnChanges(changes) {\n        // only anchor changed\n        if (changes['anchor'] &&\n            !changes['content'] &&\n            !changes['simpleLineBreaks'] &&\n            !changes['hostedUrl']) {\n            scrollToAnchor(this._elementRef.nativeElement, this._anchor, true);\n        }\n        else {\n            this.refresh();\n        }\n    }\n    ngAfterViewInit() {\n        if (!this._content) {\n            this._loadContent(this._elementRef.nativeElement.textContent);\n        }\n        this._viewInit = true;\n        // Caretaker note: the `scrollToAnchor` calls `element.scrollIntoView`, a native synchronous DOM\n        // API and it doesn't require Angular running `ApplicationRef.tick()` each time the markdown component is clicked.\n        // Host listener (added through `@HostListener`) cause Angular to add an event listener within the Angular zone.\n        // It also calls `markViewDirty()` before calling the actual listener (the decorated class method).\n        this._ngZone.runOutsideAngular(() => {\n            this._anchorListener = this._renderer.listen(this._elementRef.nativeElement, 'click', (event) => {\n                const element = event.srcElement;\n                if (element.matches('a[href]') &&\n                    isAnchorLink(element)) {\n                    this.handleAnchorClicks(event);\n                }\n                else if (element.matches('a[href]') &&\n                    isFileLink(element, this._fileLinkExtensions)) {\n                    this.handleFileAnchorClicks(event);\n                }\n            });\n        });\n    }\n    ngOnDestroy() {\n        this._anchorListener?.();\n    }\n    refresh() {\n        if (this._content) {\n            this._loadContent(this._content);\n        }\n        else if (this._viewInit) {\n            this._loadContent(this._elementRef.nativeElement.textContent);\n        }\n    }\n    /**\n     * General method to parse a string markdown into HTML Elements and load them into the container\n     */\n    _loadContent(markdown) {\n        if (markdown && markdown.trim().length > 0) {\n            // Clean container\n            this._renderer.setProperty(this._elementRef.nativeElement, 'innerHTML', '');\n            // Parse html string into actual HTML elements.\n            this._elementFromString(this._render(markdown));\n        }\n        // TODO: timeout required since resizing of html elements occurs which causes a change in the scroll position\n        this._ngZone.runOutsideAngular(() => setTimeout(() => scrollToAnchor(this._elementRef.nativeElement, this._anchor, true), 250));\n        this.contentReady.emit();\n    }\n    handleAnchorClicks(event) {\n        event.preventDefault();\n        const url = new URL(event.target.href);\n        const hash = decodeURI(url.hash);\n        scrollToAnchor(this._elementRef.nativeElement, hash, true);\n    }\n    handleFileAnchorClicks(event) {\n        event.preventDefault();\n        const url = new URL(event.target.href);\n        this.fileLinkClicked.emit(url);\n    }\n    _elementFromString(markupStr) {\n        // Renderer2 doesnt have a parsing method, so we have to sanitize and use [innerHTML]\n        // to parse the string into DOM element for now.\n        const div = this._renderer.createElement('div');\n        this._renderer.appendChild(this._elementRef.nativeElement, div);\n        const html = this._domSanitizer.sanitize(SecurityContext.STYLE, changeStyleAlignmentToClass(markupStr)) ?? '';\n        const htmlWithAbsoluteHrefs = normalizeHtmlHrefs(html, this._hostedUrl, this._fileLinkExtensions);\n        const htmlWithAbsoluteImgSrcs = normalizeImageSrcs(htmlWithAbsoluteHrefs, this._hostedUrl);\n        const htmlWithAbsoluteVideoSrcs = normalizeVideoSrcs(htmlWithAbsoluteImgSrcs, this._hostedUrl);\n        const htmlWithHeadingIds = addIdsToHeadings(htmlWithAbsoluteVideoSrcs);\n        const htmlWithVideos = renderVideoElements(htmlWithHeadingIds);\n        this._renderer.setProperty(div, 'innerHTML', htmlWithVideos);\n        return div;\n    }\n    _render(markdown) {\n        // Trim leading and trailing newlines\n        markdown = markdown\n            .replace(/^(\\s|\\t)*\\n+/g, '')\n            .replace(/(\\s|\\t)*\\n+(\\s|\\t)*$/g, '');\n        // Split markdown by line characters\n        let lines = markdown.split('\\n');\n        // check how much indentation is used by the first actual markdown line\n        const firstLineWhitespaceMatch = lines[0].match(/^(\\s|\\t)*/);\n        const firstLineWhitespace = firstLineWhitespaceMatch\n            ? firstLineWhitespaceMatch[0]\n            : '';\n        // Remove all indentation spaces so markdown can be parsed correctly\n        const startingWhitespaceRegex = new RegExp('^' + firstLineWhitespace);\n        lines = lines.map(function (line) {\n            return line.replace(startingWhitespaceRegex, '');\n        });\n        // Join lines again with line characters\n        const markdownToParse = lines.join('\\n');\n        // Convert markdown into html\n        const converter = new showdown.Converter();\n        converter.setOption('ghCodeBlocks', true);\n        converter.setOption('ghCompatibleHeaderId', true);\n        converter.setOption('tasklists', true);\n        converter.setOption('tables', true);\n        converter.setOption('literalMidWordUnderscores', true);\n        converter.setOption('simpleLineBreaks', this._simpleLineBreaks);\n        converter.setOption('emoji', true);\n        converter.setOption('disableForced4SpacesIndentedSublists', true);\n        const markdownWithAttr = addMarkdownAttrToHtmlTags(markdownToParse);\n        const html = converter.makeHtml(markdownWithAttr);\n        return html;\n    }\n    static ɵfac = function TdMarkdownComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TdMarkdownComponent)(); };\n    static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TdMarkdownComponent, selectors: [[\"td-markdown\"]], hostVars: 2, hostBindings: function TdMarkdownComponent_HostBindings(rf, ctx) { if (rf & 2) {\n            i0.ɵɵclassMap(ctx.class);\n        } }, inputs: { content: \"content\", simpleLineBreaks: \"simpleLineBreaks\", hostedUrl: \"hostedUrl\", anchor: \"anchor\", fileLinkExtensions: \"fileLinkExtensions\" }, outputs: { fileLinkClicked: \"fileLinkClicked\", contentReady: \"contentReady\" }, features: [i0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 1, vars: 0, template: function TdMarkdownComponent_Template(rf, ctx) { if (rf & 1) {\n            i0.ɵɵprojectionDef();\n            i0.ɵɵprojection(0);\n        } }, styles: [\".td-markdown[_nghost-%COMP%]  a{background-color:transparent}.td-markdown[_nghost-%COMP%]  a[target=_blank]{display:inline-flex;align-items:center;position:relative;padding-right:16px}.td-markdown[_nghost-%COMP%]  a[target=_blank]:after{content:\\\"open_in_new\\\";font-family:var(--mdc-icon-font, \\\"Material Symbols Outlined\\\");padding-left:2px;text-decoration:none;position:absolute;right:0;top:1px}.td-markdown[_nghost-%COMP%]  a:active, .td-markdown[_nghost-%COMP%]  a:hover{outline-width:0}.td-markdown[_nghost-%COMP%]  strong{font-weight:inherit;font-weight:bolder}.td-markdown[_nghost-%COMP%]  h1{font-size:2em;margin:.67em 0}.td-markdown[_nghost-%COMP%]  img{border-style:none}.td-markdown[_nghost-%COMP%]  svg:not(:root){overflow:hidden}.td-markdown[_nghost-%COMP%]  code, .td-markdown[_nghost-%COMP%]  kbd, .td-markdown[_nghost-%COMP%]  pre{font-family:monospace;font-size:1em}.td-markdown[_nghost-%COMP%]  hr{box-sizing:content-box;height:0;overflow:visible}.td-markdown[_nghost-%COMP%]  input{font:inherit;margin:0}.td-markdown[_nghost-%COMP%]  input{overflow:visible}.td-markdown[_nghost-%COMP%]  button:-moz-focusring, .td-markdown[_nghost-%COMP%]  [type=button]:-moz-focusring, .td-markdown[_nghost-%COMP%]  [type=reset]:-moz-focusring, .td-markdown[_nghost-%COMP%]  [type=submit]:-moz-focusring{outline:1px dotted ButtonText}.td-markdown[_nghost-%COMP%]  [type=checkbox]{box-sizing:border-box;padding:0}.td-markdown[_nghost-%COMP%]  table{border-spacing:0;border-collapse:collapse}.td-markdown[_nghost-%COMP%]  td, .td-markdown[_nghost-%COMP%]  th{padding:0}.td-markdown[_nghost-%COMP%]  *{box-sizing:border-box}.td-markdown[_nghost-%COMP%]  input{font:13px/1.4 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",Segoe UI Symbol}.td-markdown[_nghost-%COMP%]  a{text-decoration:none}.td-markdown[_nghost-%COMP%]  a:hover, .td-markdown[_nghost-%COMP%]  a:active{text-decoration:underline}.td-markdown[_nghost-%COMP%]  hr{height:0;margin:15px 0;overflow:hidden;background:transparent;border-bottom-width:1px;border-bottom-style:solid}.td-markdown[_nghost-%COMP%]  hr:before{display:table;content:\\\"\\\"}.td-markdown[_nghost-%COMP%]  hr:after{display:table;clear:both;content:\\\"\\\"}.td-markdown[_nghost-%COMP%]  h1, .td-markdown[_nghost-%COMP%]  h2, .td-markdown[_nghost-%COMP%]  h3, .td-markdown[_nghost-%COMP%]  h4, .td-markdown[_nghost-%COMP%]  h5, .td-markdown[_nghost-%COMP%]  h6{margin-top:0;margin-bottom:0;font-feature-settings:\\\"liga\\\" off,\\\"clig\\\" off;color:var(--cv-theme-on-surface)}.td-markdown[_nghost-%COMP%]  h1{font-family:var(--cv-typography-headline1-article-font-family);font-size:var(--cv-typography-headline1-article-font-size);font-weight:var(--cv-typography-headline1-article-font-weight);line-height:var(--cv-typography-headline1-article-line-height);letter-spacing:var(--cv-typography-headline1-article-letter-spacing)}.td-markdown[_nghost-%COMP%]  h2{font-family:var(--cv-typography-headline2-article-font-family);font-size:var(--cv-typography-headline2-article-font-size);font-weight:var(--cv-typography-headline2-article-font-weight);line-height:var(--cv-typography-headline2-article-line-height);letter-spacing:var(--cv-typography-headline2-article-letter-spacing)}.td-markdown[_nghost-%COMP%]  h3{font-family:var(--cv-typography-headline3-article-font-family);font-size:var(--cv-typography-headline3-article-font-size);font-weight:var(--cv-typography-headline3-article-font-weight);line-height:var(--cv-typography-headline3-article-line-height);letter-spacing:var(--cv-typography-headline3-article-letter-spacing)}.td-markdown[_nghost-%COMP%]  h4{font-family:var(--cv-typography-headline4-article-font-family);font-size:var(--cv-typography-headline4-article-font-size);font-weight:var(--cv-typography-headline4-article-font-weight);line-height:var(--cv-typography-headline4-article-line-height);letter-spacing:var(--cv-typography-headline4-article-letter-spacing)}.td-markdown[_nghost-%COMP%]  h5{font-family:var(--cv-typography-headline5-article-font-family);font-size:var(--cv-typography-headline5-article-font-size);font-weight:var(--cv-typography-headline5-article-font-weight);line-height:var(--cv-typography-headline5-article-line-height);letter-spacing:var(--cv-typography-headline5-article-letter-spacing)}.td-markdown[_nghost-%COMP%]  h6{font-family:var(--cv-typography-headline6-article-font-family);font-size:var(--cv-typography-headline6-article-font-size);font-weight:var(--cv-typography-headline6-article-font-weight);line-height:var(--cv-typography-headline6-article-line-height);letter-spacing:var(--cv-typography-headline6-article-letter-spacing)}.td-markdown[_nghost-%COMP%]  p{margin-top:0;margin-bottom:16px;color:var(--cv-theme-on-surface-variant);font-family:var(--cv-typography-body1-font-family);font-size:var(--cv-typography-body1-font-size);font-weight:var(--cv-typography-body1-font-weight);line-height:var(--cv-typography-body1-line-height);letter-spacing:var(--cv-typography-body1-letter-spacing);font-feature-settings:\\\"liga\\\" off,\\\"clig\\\" off}.td-markdown[_nghost-%COMP%]  blockquote{margin:0;color:var(--cv-theme-on-surface-variant)}.td-markdown[_nghost-%COMP%]  ul, .td-markdown[_nghost-%COMP%]  ol{padding-left:0;margin-top:0;margin-bottom:0;color:var(--cv-theme-on-surface-variant);font-family:var(--cv-typography-body1-font-family);font-size:var(--cv-typography-body1-font-size);font-weight:var(--cv-typography-body1-font-weight);line-height:var(--cv-typography-body1-line-height)}.td-markdown[_nghost-%COMP%]  ol ol, .td-markdown[_nghost-%COMP%]  ul ol{list-style-type:lower-roman}.td-markdown[_nghost-%COMP%]  ul ul ol, .td-markdown[_nghost-%COMP%]  ul ol ol, .td-markdown[_nghost-%COMP%]  ol ul ol, .td-markdown[_nghost-%COMP%]  ol ol ol{list-style-type:lower-alpha}.td-markdown[_nghost-%COMP%]  dd{margin-left:0}.td-markdown[_nghost-%COMP%]  code{font-family:var(--cv-typography-code-font-family);font-size:var(--cv-typography-code-font-size);font-weight:var(--cv-typography-code-font-weight);line-height:var(--cv-typography-code-line-height)}.td-markdown[_nghost-%COMP%]  pre{margin-top:0;margin-bottom:0;font-family:var(--cv-typography-code-font-family);font-size:var(--cv-typography-code-font-size);font-weight:var(--cv-typography-code-font-weight);line-height:var(--cv-typography-code-line-height)}.td-markdown[_nghost-%COMP%]  .pl-0{padding-left:0!important}.td-markdown[_nghost-%COMP%]  .pl-1{padding-left:3px!important}.td-markdown[_nghost-%COMP%]  .pl-2{padding-left:6px!important}.td-markdown[_nghost-%COMP%]  .pl-3{padding-left:12px!important}.td-markdown[_nghost-%COMP%]  .pl-4{padding-left:24px!important}.td-markdown[_nghost-%COMP%]  .pl-5{padding-left:36px!important}.td-markdown[_nghost-%COMP%]  .pl-6{padding-left:48px!important}.td-markdown[_nghost-%COMP%]  .form-select::-ms-expand{opacity:0}.td-markdown[_nghost-%COMP%]  a:not([href]){color:inherit;text-decoration:none}.td-markdown[_nghost-%COMP%]  h1, .td-markdown[_nghost-%COMP%]  h2, .td-markdown[_nghost-%COMP%]  h3, .td-markdown[_nghost-%COMP%]  h4, .td-markdown[_nghost-%COMP%]  h5, .td-markdown[_nghost-%COMP%]  h6{margin-top:var(--cv-typography-headline1-article-space-before);margin-bottom:var(--cv-typography-headline1-article-space-after)}.td-markdown[_nghost-%COMP%]  h1 .octicon-link, .td-markdown[_nghost-%COMP%]  h2 .octicon-link, .td-markdown[_nghost-%COMP%]  h3 .octicon-link, .td-markdown[_nghost-%COMP%]  h4 .octicon-link, .td-markdown[_nghost-%COMP%]  h5 .octicon-link, .td-markdown[_nghost-%COMP%]  h6 .octicon-link{color:#000;vertical-align:middle;visibility:hidden}.td-markdown[_nghost-%COMP%]  h1:hover .anchor, .td-markdown[_nghost-%COMP%]  h2:hover .anchor, .td-markdown[_nghost-%COMP%]  h3:hover .anchor, .td-markdown[_nghost-%COMP%]  h4:hover .anchor, .td-markdown[_nghost-%COMP%]  h5:hover .anchor, .td-markdown[_nghost-%COMP%]  h6:hover .anchor{text-decoration:none}.td-markdown[_nghost-%COMP%]  h1:hover .anchor .octicon-link, .td-markdown[_nghost-%COMP%]  h2:hover .anchor .octicon-link, .td-markdown[_nghost-%COMP%]  h3:hover .anchor .octicon-link, .td-markdown[_nghost-%COMP%]  h4:hover .anchor .octicon-link, .td-markdown[_nghost-%COMP%]  h5:hover .anchor .octicon-link, .td-markdown[_nghost-%COMP%]  h6:hover .anchor .octicon-link{visibility:visible}.td-markdown[_nghost-%COMP%]  h1{padding-bottom:.3em;border-bottom-width:1px;border-bottom-style:solid}.td-markdown[_nghost-%COMP%]  h1 .anchor{line-height:1}.td-markdown[_nghost-%COMP%]  h2{padding-bottom:.3em;border-bottom-width:1px;border-bottom-style:solid}.td-markdown[_nghost-%COMP%]  h2 .anchor{line-height:1}.td-markdown[_nghost-%COMP%]  h3 .anchor{line-height:1.2}.td-markdown[_nghost-%COMP%]  h4 .anchor{line-height:1.2}.td-markdown[_nghost-%COMP%]  h5 .anchor{line-height:1.1}.td-markdown[_nghost-%COMP%]  h6 .anchor{line-height:1.1}.td-markdown[_nghost-%COMP%]  p, .td-markdown[_nghost-%COMP%]  blockquote, .td-markdown[_nghost-%COMP%]  ul, .td-markdown[_nghost-%COMP%]  ol, .td-markdown[_nghost-%COMP%]  dl, .td-markdown[_nghost-%COMP%]  table, .td-markdown[_nghost-%COMP%]  pre{margin-top:0;margin-bottom:16px}.td-markdown[_nghost-%COMP%]  hr{margin:16px 0}.td-markdown[_nghost-%COMP%]  ul, .td-markdown[_nghost-%COMP%]  ol{padding-left:2em}.td-markdown[_nghost-%COMP%]  ul ul, .td-markdown[_nghost-%COMP%]  ul ol, .td-markdown[_nghost-%COMP%]  ol ol, .td-markdown[_nghost-%COMP%]  ol ul{margin-top:0;margin-bottom:0}.td-markdown[_nghost-%COMP%]  li>p{margin-top:16px}.td-markdown[_nghost-%COMP%]  dl{padding:0}.td-markdown[_nghost-%COMP%]  dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}.td-markdown[_nghost-%COMP%]  dl dd{padding:0 16px;margin-bottom:16px}.td-markdown[_nghost-%COMP%]  blockquote{padding:0 15px;border-left-width:4px;border-left-style:solid}.td-markdown[_nghost-%COMP%]  blockquote>:first-child{margin-top:0}.td-markdown[_nghost-%COMP%]  blockquote>:last-child{margin-bottom:0}.td-markdown[_nghost-%COMP%]  table{display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}.td-markdown[_nghost-%COMP%]  table th{font-weight:700}.td-markdown[_nghost-%COMP%]  table th, .td-markdown[_nghost-%COMP%]  table td{padding:6px 13px;border-width:1px;border-style:solid}.td-markdown[_nghost-%COMP%]  table tr{border-top-width:1px;border-top-style:solid}.td-markdown[_nghost-%COMP%]  img{max-width:100%;box-sizing:content-box}.td-markdown[_nghost-%COMP%]  code{padding:.2em 0;margin:0;font-size:85%;border-radius:3px}.td-markdown[_nghost-%COMP%]  code:before, .td-markdown[_nghost-%COMP%]  code:after{letter-spacing:-.2em}.td-markdown[_nghost-%COMP%]  pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.td-markdown[_nghost-%COMP%]  .highlight{margin-bottom:16px}.td-markdown[_nghost-%COMP%]  .highlight pre, .td-markdown[_nghost-%COMP%]  pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;border-radius:3px}.td-markdown[_nghost-%COMP%]  .highlight pre{margin-bottom:0;word-break:normal}.td-markdown[_nghost-%COMP%]  pre{word-wrap:normal}.td-markdown[_nghost-%COMP%]  pre code{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.td-markdown[_nghost-%COMP%]  pre code:before, .td-markdown[_nghost-%COMP%]  pre code:after{content:normal}.td-markdown[_nghost-%COMP%]  kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;vertical-align:middle;border-style:solid;border-width:1px;border-radius:3px}.td-markdown[_nghost-%COMP%]  .pl-c{color:#969896}.td-markdown[_nghost-%COMP%]  .pl-c1, .td-markdown[_nghost-%COMP%]  .pl-s .pl-v{color:#0086b3}.td-markdown[_nghost-%COMP%]  .pl-e, .td-markdown[_nghost-%COMP%]  .pl-en{color:#795da3}.td-markdown[_nghost-%COMP%]  .pl-s .pl-s1, .td-markdown[_nghost-%COMP%]  .pl-smi{color:#333}.td-markdown[_nghost-%COMP%]  .pl-ent{color:#63a35c}.td-markdown[_nghost-%COMP%]  .pl-k{color:#a71d5d}.td-markdown[_nghost-%COMP%]  .pl-pds, .td-markdown[_nghost-%COMP%]  .pl-s, .td-markdown[_nghost-%COMP%]  .pl-s .pl-pse .pl-s1, .td-markdown[_nghost-%COMP%]  .pl-sr, .td-markdown[_nghost-%COMP%]  .pl-sr .pl-cce, .td-markdown[_nghost-%COMP%]  .pl-sr .pl-sra, .td-markdown[_nghost-%COMP%]  .pl-sr .pl-sre{color:#183691}.td-markdown[_nghost-%COMP%]  .pl-v{color:#ed6a43}.td-markdown[_nghost-%COMP%]  .pl-id{color:#b52a1d}.td-markdown[_nghost-%COMP%]  .pl-ii{background-color:#b52a1d;color:#f8f8f8}.td-markdown[_nghost-%COMP%]  .pl-sr .pl-cce{color:#63a35c;font-weight:700}.td-markdown[_nghost-%COMP%]  .pl-ml{color:#693a17}.td-markdown[_nghost-%COMP%]  .pl-mh, .td-markdown[_nghost-%COMP%]  .pl-mh .pl-en, .td-markdown[_nghost-%COMP%]  .pl-ms{color:#1d3e81;font-weight:700}.td-markdown[_nghost-%COMP%]  .pl-mq{color:teal}.td-markdown[_nghost-%COMP%]  .pl-mi{color:#333;font-style:italic}.td-markdown[_nghost-%COMP%]  .pl-mb{color:#333;font-weight:700}.td-markdown[_nghost-%COMP%]  .pl-md{background-color:#ffecec;color:#bd2c00}.td-markdown[_nghost-%COMP%]  .pl-mi1{background-color:#eaffea;color:#55a532}.td-markdown[_nghost-%COMP%]  .pl-mdr{color:#795da3;font-weight:700}.td-markdown[_nghost-%COMP%]  .pl-mo{color:#1d3e81}.td-markdown[_nghost-%COMP%]  kbd{display:inline-block;padding:3px 5px;font:11px Consolas,Liberation Mono,Menlo,Courier,monospace;line-height:10px;vertical-align:middle;background-color:#fcfcfc;border:solid 1px #cccccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px #bbb}.td-markdown[_nghost-%COMP%]  .full-commit .btn-outline:not(:disabled):hover{color:#4078c0;border:1px solid #4078c0}.td-markdown[_nghost-%COMP%]  :checked+.radio-label{position:relative;z-index:1;border-color:#4078c0}.td-markdown[_nghost-%COMP%]  .octicon{display:inline-block;vertical-align:text-top;fill:currentColor}.td-markdown[_nghost-%COMP%]  .task-list-item{list-style-type:none}.td-markdown[_nghost-%COMP%]  .task-list-item+.task-list-item{margin-top:3px}.td-markdown[_nghost-%COMP%]  .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}.td-markdown[_nghost-%COMP%]  td.markdown-align-center{text-align:center}.td-markdown[_nghost-%COMP%]  td.markdown-align-left{text-align:left}.td-markdown[_nghost-%COMP%]  td.markdown-align-right{text-align:right}\"] });\n}\n(() => { (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(TdMarkdownComponent, [{\n        type: Component,\n        args: [{ selector: 'td-markdown', template: \"<ng-content></ng-content>\\n\", styles: [\":host.td-markdown::ng-deep a{background-color:transparent}:host.td-markdown::ng-deep a[target=_blank]{display:inline-flex;align-items:center;position:relative;padding-right:16px}:host.td-markdown::ng-deep a[target=_blank]:after{content:\\\"open_in_new\\\";font-family:var(--mdc-icon-font, \\\"Material Symbols Outlined\\\");padding-left:2px;text-decoration:none;position:absolute;right:0;top:1px}:host.td-markdown::ng-deep a:active,:host.td-markdown::ng-deep a:hover{outline-width:0}:host.td-markdown::ng-deep strong{font-weight:inherit;font-weight:bolder}:host.td-markdown::ng-deep h1{font-size:2em;margin:.67em 0}:host.td-markdown::ng-deep img{border-style:none}:host.td-markdown::ng-deep svg:not(:root){overflow:hidden}:host.td-markdown::ng-deep code,:host.td-markdown::ng-deep kbd,:host.td-markdown::ng-deep pre{font-family:monospace;font-size:1em}:host.td-markdown::ng-deep hr{box-sizing:content-box;height:0;overflow:visible}:host.td-markdown::ng-deep input{font:inherit;margin:0}:host.td-markdown::ng-deep input{overflow:visible}:host.td-markdown::ng-deep button:-moz-focusring,:host.td-markdown::ng-deep [type=button]:-moz-focusring,:host.td-markdown::ng-deep [type=reset]:-moz-focusring,:host.td-markdown::ng-deep [type=submit]:-moz-focusring{outline:1px dotted ButtonText}:host.td-markdown::ng-deep [type=checkbox]{box-sizing:border-box;padding:0}:host.td-markdown::ng-deep table{border-spacing:0;border-collapse:collapse}:host.td-markdown::ng-deep td,:host.td-markdown::ng-deep th{padding:0}:host.td-markdown::ng-deep *{box-sizing:border-box}:host.td-markdown::ng-deep input{font:13px/1.4 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",Segoe UI Symbol}:host.td-markdown::ng-deep a{text-decoration:none}:host.td-markdown::ng-deep a:hover,:host.td-markdown::ng-deep a:active{text-decoration:underline}:host.td-markdown::ng-deep hr{height:0;margin:15px 0;overflow:hidden;background:transparent;border-bottom-width:1px;border-bottom-style:solid}:host.td-markdown::ng-deep hr:before{display:table;content:\\\"\\\"}:host.td-markdown::ng-deep hr:after{display:table;clear:both;content:\\\"\\\"}:host.td-markdown::ng-deep h1,:host.td-markdown::ng-deep h2,:host.td-markdown::ng-deep h3,:host.td-markdown::ng-deep h4,:host.td-markdown::ng-deep h5,:host.td-markdown::ng-deep h6{margin-top:0;margin-bottom:0;font-feature-settings:\\\"liga\\\" off,\\\"clig\\\" off;color:var(--cv-theme-on-surface)}:host.td-markdown::ng-deep h1{font-family:var(--cv-typography-headline1-article-font-family);font-size:var(--cv-typography-headline1-article-font-size);font-weight:var(--cv-typography-headline1-article-font-weight);line-height:var(--cv-typography-headline1-article-line-height);letter-spacing:var(--cv-typography-headline1-article-letter-spacing)}:host.td-markdown::ng-deep h2{font-family:var(--cv-typography-headline2-article-font-family);font-size:var(--cv-typography-headline2-article-font-size);font-weight:var(--cv-typography-headline2-article-font-weight);line-height:var(--cv-typography-headline2-article-line-height);letter-spacing:var(--cv-typography-headline2-article-letter-spacing)}:host.td-markdown::ng-deep h3{font-family:var(--cv-typography-headline3-article-font-family);font-size:var(--cv-typography-headline3-article-font-size);font-weight:var(--cv-typography-headline3-article-font-weight);line-height:var(--cv-typography-headline3-article-line-height);letter-spacing:var(--cv-typography-headline3-article-letter-spacing)}:host.td-markdown::ng-deep h4{font-family:var(--cv-typography-headline4-article-font-family);font-size:var(--cv-typography-headline4-article-font-size);font-weight:var(--cv-typography-headline4-article-font-weight);line-height:var(--cv-typography-headline4-article-line-height);letter-spacing:var(--cv-typography-headline4-article-letter-spacing)}:host.td-markdown::ng-deep h5{font-family:var(--cv-typography-headline5-article-font-family);font-size:var(--cv-typography-headline5-article-font-size);font-weight:var(--cv-typography-headline5-article-font-weight);line-height:var(--cv-typography-headline5-article-line-height);letter-spacing:var(--cv-typography-headline5-article-letter-spacing)}:host.td-markdown::ng-deep h6{font-family:var(--cv-typography-headline6-article-font-family);font-size:var(--cv-typography-headline6-article-font-size);font-weight:var(--cv-typography-headline6-article-font-weight);line-height:var(--cv-typography-headline6-article-line-height);letter-spacing:var(--cv-typography-headline6-article-letter-spacing)}:host.td-markdown::ng-deep p{margin-top:0;margin-bottom:16px;color:var(--cv-theme-on-surface-variant);font-family:var(--cv-typography-body1-font-family);font-size:var(--cv-typography-body1-font-size);font-weight:var(--cv-typography-body1-font-weight);line-height:var(--cv-typography-body1-line-height);letter-spacing:var(--cv-typography-body1-letter-spacing);font-feature-settings:\\\"liga\\\" off,\\\"clig\\\" off}:host.td-markdown::ng-deep blockquote{margin:0;color:var(--cv-theme-on-surface-variant)}:host.td-markdown::ng-deep ul,:host.td-markdown::ng-deep ol{padding-left:0;margin-top:0;margin-bottom:0;color:var(--cv-theme-on-surface-variant);font-family:var(--cv-typography-body1-font-family);font-size:var(--cv-typography-body1-font-size);font-weight:var(--cv-typography-body1-font-weight);line-height:var(--cv-typography-body1-line-height)}:host.td-markdown::ng-deep ol ol,:host.td-markdown::ng-deep ul ol{list-style-type:lower-roman}:host.td-markdown::ng-deep ul ul ol,:host.td-markdown::ng-deep ul ol ol,:host.td-markdown::ng-deep ol ul ol,:host.td-markdown::ng-deep ol ol ol{list-style-type:lower-alpha}:host.td-markdown::ng-deep dd{margin-left:0}:host.td-markdown::ng-deep code{font-family:var(--cv-typography-code-font-family);font-size:var(--cv-typography-code-font-size);font-weight:var(--cv-typography-code-font-weight);line-height:var(--cv-typography-code-line-height)}:host.td-markdown::ng-deep pre{margin-top:0;margin-bottom:0;font-family:var(--cv-typography-code-font-family);font-size:var(--cv-typography-code-font-size);font-weight:var(--cv-typography-code-font-weight);line-height:var(--cv-typography-code-line-height)}:host.td-markdown::ng-deep .pl-0{padding-left:0!important}:host.td-markdown::ng-deep .pl-1{padding-left:3px!important}:host.td-markdown::ng-deep .pl-2{padding-left:6px!important}:host.td-markdown::ng-deep .pl-3{padding-left:12px!important}:host.td-markdown::ng-deep .pl-4{padding-left:24px!important}:host.td-markdown::ng-deep .pl-5{padding-left:36px!important}:host.td-markdown::ng-deep .pl-6{padding-left:48px!important}:host.td-markdown::ng-deep .form-select::-ms-expand{opacity:0}:host.td-markdown::ng-deep a:not([href]){color:inherit;text-decoration:none}:host.td-markdown::ng-deep h1,:host.td-markdown::ng-deep h2,:host.td-markdown::ng-deep h3,:host.td-markdown::ng-deep h4,:host.td-markdown::ng-deep h5,:host.td-markdown::ng-deep h6{margin-top:var(--cv-typography-headline1-article-space-before);margin-bottom:var(--cv-typography-headline1-article-space-after)}:host.td-markdown::ng-deep h1 .octicon-link,:host.td-markdown::ng-deep h2 .octicon-link,:host.td-markdown::ng-deep h3 .octicon-link,:host.td-markdown::ng-deep h4 .octicon-link,:host.td-markdown::ng-deep h5 .octicon-link,:host.td-markdown::ng-deep h6 .octicon-link{color:#000;vertical-align:middle;visibility:hidden}:host.td-markdown::ng-deep h1:hover .anchor,:host.td-markdown::ng-deep h2:hover .anchor,:host.td-markdown::ng-deep h3:hover .anchor,:host.td-markdown::ng-deep h4:hover .anchor,:host.td-markdown::ng-deep h5:hover .anchor,:host.td-markdown::ng-deep h6:hover .anchor{text-decoration:none}:host.td-markdown::ng-deep h1:hover .anchor .octicon-link,:host.td-markdown::ng-deep h2:hover .anchor .octicon-link,:host.td-markdown::ng-deep h3:hover .anchor .octicon-link,:host.td-markdown::ng-deep h4:hover .anchor .octicon-link,:host.td-markdown::ng-deep h5:hover .anchor .octicon-link,:host.td-markdown::ng-deep h6:hover .anchor .octicon-link{visibility:visible}:host.td-markdown::ng-deep h1{padding-bottom:.3em;border-bottom-width:1px;border-bottom-style:solid}:host.td-markdown::ng-deep h1 .anchor{line-height:1}:host.td-markdown::ng-deep h2{padding-bottom:.3em;border-bottom-width:1px;border-bottom-style:solid}:host.td-markdown::ng-deep h2 .anchor{line-height:1}:host.td-markdown::ng-deep h3 .anchor{line-height:1.2}:host.td-markdown::ng-deep h4 .anchor{line-height:1.2}:host.td-markdown::ng-deep h5 .anchor{line-height:1.1}:host.td-markdown::ng-deep h6 .anchor{line-height:1.1}:host.td-markdown::ng-deep p,:host.td-markdown::ng-deep blockquote,:host.td-markdown::ng-deep ul,:host.td-markdown::ng-deep ol,:host.td-markdown::ng-deep dl,:host.td-markdown::ng-deep table,:host.td-markdown::ng-deep pre{margin-top:0;margin-bottom:16px}:host.td-markdown::ng-deep hr{margin:16px 0}:host.td-markdown::ng-deep ul,:host.td-markdown::ng-deep ol{padding-left:2em}:host.td-markdown::ng-deep ul ul,:host.td-markdown::ng-deep ul ol,:host.td-markdown::ng-deep ol ol,:host.td-markdown::ng-deep ol ul{margin-top:0;margin-bottom:0}:host.td-markdown::ng-deep li>p{margin-top:16px}:host.td-markdown::ng-deep dl{padding:0}:host.td-markdown::ng-deep dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}:host.td-markdown::ng-deep dl dd{padding:0 16px;margin-bottom:16px}:host.td-markdown::ng-deep blockquote{padding:0 15px;border-left-width:4px;border-left-style:solid}:host.td-markdown::ng-deep blockquote>:first-child{margin-top:0}:host.td-markdown::ng-deep blockquote>:last-child{margin-bottom:0}:host.td-markdown::ng-deep table{display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}:host.td-markdown::ng-deep table th{font-weight:700}:host.td-markdown::ng-deep table th,:host.td-markdown::ng-deep table td{padding:6px 13px;border-width:1px;border-style:solid}:host.td-markdown::ng-deep table tr{border-top-width:1px;border-top-style:solid}:host.td-markdown::ng-deep img{max-width:100%;box-sizing:content-box}:host.td-markdown::ng-deep code{padding:.2em 0;margin:0;font-size:85%;border-radius:3px}:host.td-markdown::ng-deep code:before,:host.td-markdown::ng-deep code:after{letter-spacing:-.2em}:host.td-markdown::ng-deep pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}:host.td-markdown::ng-deep .highlight{margin-bottom:16px}:host.td-markdown::ng-deep .highlight pre,:host.td-markdown::ng-deep pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;border-radius:3px}:host.td-markdown::ng-deep .highlight pre{margin-bottom:0;word-break:normal}:host.td-markdown::ng-deep pre{word-wrap:normal}:host.td-markdown::ng-deep pre code{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}:host.td-markdown::ng-deep pre code:before,:host.td-markdown::ng-deep pre code:after{content:normal}:host.td-markdown::ng-deep kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;vertical-align:middle;border-style:solid;border-width:1px;border-radius:3px}:host.td-markdown::ng-deep .pl-c{color:#969896}:host.td-markdown::ng-deep .pl-c1,:host.td-markdown::ng-deep .pl-s .pl-v{color:#0086b3}:host.td-markdown::ng-deep .pl-e,:host.td-markdown::ng-deep .pl-en{color:#795da3}:host.td-markdown::ng-deep .pl-s .pl-s1,:host.td-markdown::ng-deep .pl-smi{color:#333}:host.td-markdown::ng-deep .pl-ent{color:#63a35c}:host.td-markdown::ng-deep .pl-k{color:#a71d5d}:host.td-markdown::ng-deep .pl-pds,:host.td-markdown::ng-deep .pl-s,:host.td-markdown::ng-deep .pl-s .pl-pse .pl-s1,:host.td-markdown::ng-deep .pl-sr,:host.td-markdown::ng-deep .pl-sr .pl-cce,:host.td-markdown::ng-deep .pl-sr .pl-sra,:host.td-markdown::ng-deep .pl-sr .pl-sre{color:#183691}:host.td-markdown::ng-deep .pl-v{color:#ed6a43}:host.td-markdown::ng-deep .pl-id{color:#b52a1d}:host.td-markdown::ng-deep .pl-ii{background-color:#b52a1d;color:#f8f8f8}:host.td-markdown::ng-deep .pl-sr .pl-cce{color:#63a35c;font-weight:700}:host.td-markdown::ng-deep .pl-ml{color:#693a17}:host.td-markdown::ng-deep .pl-mh,:host.td-markdown::ng-deep .pl-mh .pl-en,:host.td-markdown::ng-deep .pl-ms{color:#1d3e81;font-weight:700}:host.td-markdown::ng-deep .pl-mq{color:teal}:host.td-markdown::ng-deep .pl-mi{color:#333;font-style:italic}:host.td-markdown::ng-deep .pl-mb{color:#333;font-weight:700}:host.td-markdown::ng-deep .pl-md{background-color:#ffecec;color:#bd2c00}:host.td-markdown::ng-deep .pl-mi1{background-color:#eaffea;color:#55a532}:host.td-markdown::ng-deep .pl-mdr{color:#795da3;font-weight:700}:host.td-markdown::ng-deep .pl-mo{color:#1d3e81}:host.td-markdown::ng-deep kbd{display:inline-block;padding:3px 5px;font:11px Consolas,Liberation Mono,Menlo,Courier,monospace;line-height:10px;vertical-align:middle;background-color:#fcfcfc;border:solid 1px #cccccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px #bbb}:host.td-markdown::ng-deep .full-commit .btn-outline:not(:disabled):hover{color:#4078c0;border:1px solid #4078c0}:host.td-markdown::ng-deep :checked+.radio-label{position:relative;z-index:1;border-color:#4078c0}:host.td-markdown::ng-deep .octicon{display:inline-block;vertical-align:text-top;fill:currentColor}:host.td-markdown::ng-deep .task-list-item{list-style-type:none}:host.td-markdown::ng-deep .task-list-item+.task-list-item{margin-top:3px}:host.td-markdown::ng-deep .task-list-item input{margin:0 .2em .25em -1.6em;vertical-align:middle}:host.td-markdown::ng-deep td.markdown-align-center{text-align:center}:host.td-markdown::ng-deep td.markdown-align-left{text-align:left}:host.td-markdown::ng-deep td.markdown-align-right{text-align:right}\\n\"] }]\n    }], null, { class: [{\n            type: HostBinding,\n            args: ['class']\n        }], content: [{\n            type: Input\n        }], simpleLineBreaks: [{\n            type: Input\n        }], hostedUrl: [{\n            type: Input\n        }], anchor: [{\n            type: Input\n        }], fileLinkExtensions: [{\n            type: Input\n        }], fileLinkClicked: [{\n            type: Output\n        }], contentReady: [{\n            type: Output\n        }] }); })();\n(() => { (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassDebugInfo(TdMarkdownComponent, { className: \"TdMarkdownComponent\", filePath: \"lib/markdown.component.ts\", lineNumber: 371 }); })();\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9tYXJrZG93bi9zcmMvbGliL21hcmtkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvbWFya2Rvd24vc3JjL2xpYi9tYXJrZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBQ1QsZUFBZSxFQUdmLFdBQVcsRUFDWCxNQUFNLEVBRU4sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQVksTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsY0FBYyxFQUNkLFlBQVksRUFDWixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixZQUFZLEVBQ1osZUFBZSxFQUNmLG1CQUFtQixFQUNuQixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLGdCQUFnQixHQUNqQixNQUFNLGlDQUFpQyxDQUFDO0FBRXpDLE9BQU8sS0FBSyxRQUFRLE1BQU0sVUFBVSxDQUFDOzs7QUFFckMsU0FBUyxhQUFhLENBQUMsV0FBbUI7SUFDeEMsa0NBQWtDO0lBQ2xDLE1BQU0sS0FBSyxHQUFHLG9CQUFvQixDQUFDO0lBQ25DLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRUQsbUNBQW1DO0FBQ25DLHlCQUF5QjtBQUN6QixTQUFTLFlBQVksQ0FBQyxXQUFtQixFQUFFLFlBQW9CO0lBQzdELElBQUksV0FBVyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2hDLElBQUksYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDL0IsTUFBTSxVQUFVLEdBQVEsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFD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QW5CLHdCQUFtQjs7O1lDbFhoQyxrQkFBeUI7OztpRkRrWFosbUJBQW1CO2NBTC9CLFNBQVM7MkJBQ0UsYUFBYTs7a0JBc0J0QixXQUFXO21CQUFDLE9BQU87O2tCQVNuQixLQUFLOztrQkFXTCxLQUFLOztrQkFXTCxLQUFLOztrQkFXTCxLQUFLOztrQkFVTCxLQUFLOztrQkFTTCxNQUFNOztrQkFNTixNQUFNOztrRkFyRkksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBBZnRlclZpZXdJbml0LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFJlbmRlcmVyMixcbiAgU2VjdXJpdHlDb250ZXh0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIEhvc3RCaW5kaW5nLFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7XG4gIHNjcm9sbFRvQW5jaG9yLFxuICBnZW5IZWFkaW5nSWQsXG4gIGlzQW5jaG9yTGluayxcbiAgcmVtb3ZlVHJhaWxpbmdIYXNoLFxuICByYXdHaXRodWJIcmVmLFxuICBpc0dpdGh1YkhyZWYsXG4gIGlzUmF3R2l0aHViSHJlZixcbiAgcmVuZGVyVmlkZW9FbGVtZW50cyxcbiAgaXNGaWxlTGluayxcbiAgZmluZENsb3NpbmdUYWdJbmRleCxcbiAgY29udGFpbnNNYXJrZG93bixcbn0gZnJvbSAnLi9tYXJrZG93bi11dGlscy9tYXJrZG93bi11dGlscyc7XG5cbmltcG9ydCAqIGFzIHNob3dkb3duIGZyb20gJ3Nob3dkb3duJztcblxuZnVuY3Rpb24gaXNBYnNvbHV0ZVVybChjdXJyZW50SHJlZjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIFJlZ3VsYXIgRXhwcmVzc2lvbiB0byBjaGVjayB1cmxcbiAgY29uc3QgUmdFeHAgPSAvXig/OlthLXpdKzopP1xcL1xcLy9pO1xuICByZXR1cm4gUmdFeHAudGVzdChjdXJyZW50SHJlZik7XG59XG5cbi8vIFRPRE86IGFzc3VtZXMgaXQgaXMgYSBnaXRodWIgdXJsXG4vLyBhbGxvdyBvdmVycmlkZSBzb21laG93XG5mdW5jdGlvbiBnZW5lcmF0ZUhyZWYoY3VycmVudEhyZWY6IHN0cmluZywgcmVsYXRpdmVIcmVmOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoY3VycmVudEhyZWYgJiYgcmVsYXRpdmVIcmVmKSB7XG4gICAgaWYgKGlzQWJzb2x1dGVVcmwoY3VycmVudEhyZWYpKSB7XG4gICAgICBjb25zdCBjdXJyZW50VXJsOiBVUkwgPSBuZXcgVVJMKGN1cnJlbnRIcmVmKTtcbiAgICAgIGNvbnN0IHBhdGg6IHN0cmluZyA9IGN1cnJlbnRVcmwucGF0aG5hbWVcbiAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgLnNsaWNlKDEsIC0xKVxuICAgICAgICAuam9pbignLycpO1xuICAgICAgY29uc3QgY29ycmVjdFVybDogVVJMID0gbmV3IFVSTChjdXJyZW50SHJlZik7XG5cbiAgICAgIGlmIChyZWxhdGl2ZUhyZWYuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIC8vIHVybCBpcyByZWxhdGl2ZSB0byB0b3AgbGV2ZWxcbiAgICAgICAgY29uc3Qgb3JnQW5kUmVwbzogc3RyaW5nID0gcGF0aC5zcGxpdCgnLycpLnNsaWNlKDAsIDMpLmpvaW4oJy8nKTtcbiAgICAgICAgY29ycmVjdFVybC5wYXRobmFtZSA9IGAke29yZ0FuZFJlcG99JHtyZWxhdGl2ZUhyZWZ9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvcnJlY3RVcmwucGF0aG5hbWUgPSBgJHtwYXRofS8ke3JlbGF0aXZlSHJlZn1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvcnJlY3RVcmwuaHJlZjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGF0aDogc3RyaW5nID0gY3VycmVudEhyZWYuc3BsaXQoJy8nKS5zbGljZSgwLCAtMSkuam9pbignLycpO1xuXG4gICAgICBpZiAocmVsYXRpdmVIcmVmLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICByZXR1cm4gYCR7cGF0aH0ke3JlbGF0aXZlSHJlZn1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGAke3BhdGh9LyR7cmVsYXRpdmVIcmVmfWA7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplSHRtbEhyZWZzKFxuICBodG1sOiBzdHJpbmcsXG4gIGN1cnJlbnRIcmVmOiBzdHJpbmcsXG4gIGZpbGVMaW5rRXh0ZW5zaW9ucz86IHN0cmluZ1tdLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgZG9jdW1lbnQ6IERvY3VtZW50ID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhodG1sLCAndGV4dC9odG1sJyk7XG5cbiAgZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvckFsbDxIVE1MQW5jaG9yRWxlbWVudD4oJ2FbaHJlZl0nKVxuICAgIC5mb3JFYWNoKChsaW5rOiBIVE1MQW5jaG9yRWxlbWVudCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdXJsOiBVUkwgPSBuZXcgVVJMKGxpbmsuaHJlZik7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsSGFzaDogc3RyaW5nID0gdXJsLmhhc2g7XG4gICAgICAgIGNvbnN0IGlzRmlsZUFuY2hvckxpbmsgPSBpc0ZpbGVMaW5rKGxpbmssIGZpbGVMaW5rRXh0ZW5zaW9ucyk7XG5cbiAgICAgICAgaWYgKGlzQW5jaG9yTGluayhsaW5rKSkge1xuICAgICAgICAgIGlmIChvcmlnaW5hbEhhc2gpIHtcbiAgICAgICAgICAgIHVybC5oYXNoID0gZ2VuSGVhZGluZ0lkKG9yaWdpbmFsSGFzaCk7XG4gICAgICAgICAgICBsaW5rLmhyZWYgPSB1cmwuaGFzaDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodXJsLmhvc3QgPT09IHdpbmRvdy5sb2NhdGlvbi5ob3N0KSB7XG4gICAgICAgICAgLy8gaG9zdHMgbWF0Y2gsIG1lYW5pbmcgVVJMIE1JR0hUIGhhdmUgYmVlbiBtYWxmb3JtZWQgYnkgc2hvd2Rvd25cbiAgICAgICAgICAvLyB1cmwgaXMgYSByZWxhdGl2ZSB1cmwgb3IganVzdCBhIGxpbmsgdG8gYSBwYXJ0IG9mIHRoZSBhcHBsaWNhdGlvblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGN1cnJlbnRIcmVmICYmXG4gICAgICAgICAgICAodXJsLnBhdGhuYW1lLmVuZHNXaXRoKCcubWQnKSB8fCBpc0ZpbGVBbmNob3JMaW5rKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gb25seSBjaGVjayAubWQgdXJscyBvciB1cmxzIGVuZGluZyB3aXRoIHRoZSBmaWxlTGlua0V4dGVuc2lvbnNcbiAgICAgICAgICAgIGNvbnN0IGhyZWZXaXRob3V0SGFzaDogc3RyaW5nID0gcmVtb3ZlVHJhaWxpbmdIYXNoKFxuICAgICAgICAgICAgICBsaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHVybC5ocmVmID0gZ2VuZXJhdGVIcmVmKGN1cnJlbnRIcmVmLCBocmVmV2l0aG91dEhhc2gpO1xuICAgICAgICAgICAgaWYgKG9yaWdpbmFsSGFzaCkge1xuICAgICAgICAgICAgICB1cmwuaGFzaCA9IGdlbkhlYWRpbmdJZChvcmlnaW5hbEhhc2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGluay5ocmVmID0gdXJsLmhyZWY7XG4gICAgICAgICAgICBsaW5rLnRhcmdldCA9IGlzRmlsZUFuY2hvckxpbmsgPyAnX3NlbGYnIDogJ19ibGFuayc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERpZmZlcmVudCBob3N0IC0gZXh0ZXJuYWwgbGlua1xuICAgICAgICAgIGlmICh1cmwucGF0aG5hbWUuZW5kc1dpdGgoJy5tZCcpKSB7XG4gICAgICAgICAgICBpZiAob3JpZ2luYWxIYXNoKSB7XG4gICAgICAgICAgICAgIHVybC5oYXNoID0gZ2VuSGVhZGluZ0lkKG9yaWdpbmFsSGFzaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW5rLmhyZWYgPSB1cmwuaHJlZjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGluay50YXJnZXQgPSAnX2JsYW5rJztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElmIFVSTCBwYXJzaW5nIGZhaWxzLCBjaGVjayBpZiBpdCBsb29rcyBsaWtlIGFuIGV4dGVybmFsIGh0dHAocykgbGlua1xuICAgICAgICBjb25zdCBocmVmQXR0ciA9IChsaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpID8/ICcnKS50cmltKCk7XG4gICAgICAgIGlmIChocmVmQXR0ci5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgaHJlZkF0dHIuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xuICAgICAgICAgIGxpbmsudGFyZ2V0ID0gJ19ibGFuayc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICByZXR1cm4gbmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhkb2N1bWVudCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUltYWdlU3JjcyhodG1sOiBzdHJpbmcsIGN1cnJlbnRIcmVmOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoY3VycmVudEhyZWYpIHtcbiAgICBjb25zdCBkb2N1bWVudDogRG9jdW1lbnQgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKFxuICAgICAgaHRtbCxcbiAgICAgICd0ZXh0L2h0bWwnLFxuICAgICk7XG4gICAgZG9jdW1lbnRcbiAgICAgIC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxJbWFnZUVsZW1lbnQ+KCdpbWdbc3JjXScpXG4gICAgICAuZm9yRWFjaCgoaW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3Qgc3JjID0gaW1hZ2UuZ2V0QXR0cmlidXRlKCdzcmMnKSA/PyAnJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdW51c2VkLWV4cHJlc3Npb24gKi9cbiAgICAgICAgICBuZXcgVVJMKHNyYyk7XG4gICAgICAgICAgaWYgKGlzR2l0aHViSHJlZihzcmMpKSB7XG4gICAgICAgICAgICBpbWFnZS5zcmMgPSByYXdHaXRodWJIcmVmKHNyYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBpbWFnZS5zcmMgPSBnZW5lcmF0ZUhyZWYoXG4gICAgICAgICAgICBpc0dpdGh1YkhyZWYoY3VycmVudEhyZWYpXG4gICAgICAgICAgICAgID8gcmF3R2l0aHViSHJlZihjdXJyZW50SHJlZilcbiAgICAgICAgICAgICAgOiBjdXJyZW50SHJlZixcbiAgICAgICAgICAgIHNyYyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdoIHN2Z3MgbmVlZCB0byBoYXZlID9zYW5pdGl6ZT10cnVlXG4gICAgICAgIGlmIChpc1Jhd0dpdGh1YkhyZWYoaW1hZ2Uuc3JjKSkge1xuICAgICAgICAgIGNvbnN0IHVybDogVVJMID0gbmV3IFVSTChpbWFnZS5zcmMpO1xuICAgICAgICAgIGlmICh1cmwucGF0aG5hbWUuZW5kc1dpdGgoJy5zdmcnKSkge1xuICAgICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3Nhbml0aXplJywgJ3RydWUnKTtcbiAgICAgICAgICAgIGltYWdlLnNyYyA9IHVybC5ocmVmO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhkb2N1bWVudCk7XG4gIH1cbiAgcmV0dXJuIGh0bWw7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZpZGVvU3JjcyhodG1sOiBzdHJpbmcsIGN1cnJlbnRIcmVmOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoY3VycmVudEhyZWYpIHtcbiAgICBjb25zdCBkb2N1bWVudDogRG9jdW1lbnQgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKFxuICAgICAgaHRtbCxcbiAgICAgICd0ZXh0L2h0bWwnLFxuICAgICk7XG5cbiAgICAvLyBOb3JtYWxpemUgdmlkZW8gZWxlbWVudHMgd2l0aCBzcmMgYXR0cmlidXRlXG4gICAgZG9jdW1lbnRcbiAgICAgIC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxWaWRlb0VsZW1lbnQ+KCd2aWRlb1tzcmNdJylcbiAgICAgIC5mb3JFYWNoKCh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCBzcmMgPSB2aWRlby5nZXRBdHRyaWJ1dGUoJ3NyYycpID8/ICcnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby11bnVzZWQtZXhwcmVzc2lvbiAqL1xuICAgICAgICAgIG5ldyBVUkwoc3JjKTtcbiAgICAgICAgICBpZiAoaXNHaXRodWJIcmVmKHNyYykpIHtcbiAgICAgICAgICAgIHZpZGVvLnNyYyA9IHJhd0dpdGh1YkhyZWYoc3JjKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHZpZGVvLnNyYyA9IGdlbmVyYXRlSHJlZihcbiAgICAgICAgICAgIGlzR2l0aHViSHJlZihjdXJyZW50SHJlZilcbiAgICAgICAgICAgICAgPyByYXdHaXRodWJIcmVmKGN1cnJlbnRIcmVmKVxuICAgICAgICAgICAgICA6IGN1cnJlbnRIcmVmLFxuICAgICAgICAgICAgc3JjLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgLy8gTm9ybWFsaXplIHZpZGVvIHBvc3RlciBhdHRyaWJ1dGVzXG4gICAgZG9jdW1lbnRcbiAgICAgIC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxWaWRlb0VsZW1lbnQ+KCd2aWRlb1twb3N0ZXJdJylcbiAgICAgIC5mb3JFYWNoKCh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCBwb3N0ZXIgPSB2aWRlby5nZXRBdHRyaWJ1dGUoJ3Bvc3RlcicpID8/ICcnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby11bnVzZWQtZXhwcmVzc2lvbiAqL1xuICAgICAgICAgIG5ldyBVUkwocG9zdGVyKTtcbiAgICAgICAgICBpZiAoaXNHaXRodWJIcmVmKHBvc3RlcikpIHtcbiAgICAgICAgICAgIHZpZGVvLnBvc3RlciA9IHJhd0dpdGh1YkhyZWYocG9zdGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHZpZGVvLnBvc3RlciA9IGdlbmVyYXRlSHJlZihcbiAgICAgICAgICAgIGlzR2l0aHViSHJlZihjdXJyZW50SHJlZilcbiAgICAgICAgICAgICAgPyByYXdHaXRodWJIcmVmKGN1cnJlbnRIcmVmKVxuICAgICAgICAgICAgICA6IGN1cnJlbnRIcmVmLFxuICAgICAgICAgICAgcG9zdGVyLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgLy8gTm9ybWFsaXplIHNvdXJjZSB0YWdzIGluc2lkZSB2aWRlbyBlbGVtZW50c1xuICAgIGRvY3VtZW50XG4gICAgICAucXVlcnlTZWxlY3RvckFsbDxIVE1MU291cmNlRWxlbWVudD4oJ3ZpZGVvIHNvdXJjZVtzcmNdJylcbiAgICAgIC5mb3JFYWNoKChzb3VyY2U6IEhUTUxTb3VyY2VFbGVtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHNyYyA9IHNvdXJjZS5nZXRBdHRyaWJ1dGUoJ3NyYycpID8/ICcnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby11bnVzZWQtZXhwcmVzc2lvbiAqL1xuICAgICAgICAgIG5ldyBVUkwoc3JjKTtcbiAgICAgICAgICBpZiAoaXNHaXRodWJIcmVmKHNyYykpIHtcbiAgICAgICAgICAgIHNvdXJjZS5zcmMgPSByYXdHaXRodWJIcmVmKHNyYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBzb3VyY2Uuc3JjID0gZ2VuZXJhdGVIcmVmKFxuICAgICAgICAgICAgaXNHaXRodWJIcmVmKGN1cnJlbnRIcmVmKVxuICAgICAgICAgICAgICA/IHJhd0dpdGh1YkhyZWYoY3VycmVudEhyZWYpXG4gICAgICAgICAgICAgIDogY3VycmVudEhyZWYsXG4gICAgICAgICAgICBzcmMsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhkb2N1bWVudCk7XG4gIH1cbiAgcmV0dXJuIGh0bWw7XG59XG5cbmZ1bmN0aW9uIGFkZElkc1RvSGVhZGluZ3MoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGh0bWwpIHtcbiAgICBjb25zdCBkb2N1bWVudDogRG9jdW1lbnQgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKFxuICAgICAgaHRtbCxcbiAgICAgICd0ZXh0L2h0bWwnLFxuICAgICk7XG4gICAgZG9jdW1lbnRcbiAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKCdoMSwgaDIsIGgzLCBoNCwgaDUsIGg2JylcbiAgICAgIC5mb3JFYWNoKChoZWFkaW5nOiBFbGVtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0cmlwcGVkSW5uZXJIVE1MID0gc3RyaXBBbGxIdG1sVGFncyhoZWFkaW5nLmlubmVySFRNTCk7XG4gICAgICAgIGNvbnN0IGlkOiBzdHJpbmcgPSBnZW5IZWFkaW5nSWQoc3RyaXBwZWRJbm5lckhUTUwpO1xuICAgICAgICBoZWFkaW5nLnNldEF0dHJpYnV0ZSgnaWQnLCBpZCk7XG4gICAgICB9KTtcbiAgICByZXR1cm4gbmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhkb2N1bWVudCk7XG4gIH1cbiAgcmV0dXJuIGh0bWw7XG59XG5cbmZ1bmN0aW9uIGNoYW5nZVN0eWxlQWxpZ25tZW50VG9DbGFzcyhodG1sOiBzdHJpbmcpIHtcbiAgaWYgKGh0bWwpIHtcbiAgICBjb25zdCBkb2N1bWVudDogRG9jdW1lbnQgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKFxuICAgICAgaHRtbCxcbiAgICAgICd0ZXh0L2h0bWwnLFxuICAgICk7XG4gICAgWydyaWdodCcsICdjZW50ZXInLCAnbGVmdCddLmZvckVhY2goKGFsaWdubWVudDogc3RyaW5nKSA9PiB7XG4gICAgICBkb2N1bWVudFxuICAgICAgICAucXVlcnlTZWxlY3RvckFsbChgW3N0eWxlKj0ndGV4dC1hbGlnbjoke2FsaWdubWVudH0nXWApXG4gICAgICAgIC5mb3JFYWNoKChzdHlsZTogRWxlbWVudCkgPT4ge1xuICAgICAgICAgIHN0eWxlLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBgbWFya2Rvd24tYWxpZ24tJHthbGlnbm1lbnR9YCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoZG9jdW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGh0bWw7XG59XG5cbi8qKlxuICogQWRkcyBtYXJrZG93bj1cIjFcIiBhdHRyaWJ1dGUgdG8gSFRNTCBibG9jay1sZXZlbCB0YWdzIHNvIHRoYXRcbiAqIHNob3dkb3duIHBhcnNlcyBhbnkgbWFya2Rvd24gbmVzdGVkIGluc2lkZSB0aGVtLlxuICogT25seSBhZGRzIHRoZSBhdHRyaWJ1dGUgd2hlbiB0aGUgdGFnJ3MgaW5uZXIgY29udGVudCBjb250YWlucyBtYXJrZG93biBzeW50YXguXG4gKi9cbmZ1bmN0aW9uIGFkZE1hcmtkb3duQXR0clRvSHRtbFRhZ3MobWFya2Rvd246IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHZvaWRFbGVtZW50cyA9IG5ldyBTZXQoW1xuICAgICdhcmVhJyxcbiAgICAnYmFzZScsXG4gICAgJ2JyJyxcbiAgICAnY29sJyxcbiAgICAnZW1iZWQnLFxuICAgICdocicsXG4gICAgJ2ltZycsXG4gICAgJ2lucHV0JyxcbiAgICAnbGluaycsXG4gICAgJ21ldGEnLFxuICAgICdwYXJhbScsXG4gICAgJ3NvdXJjZScsXG4gICAgJ3RyYWNrJyxcbiAgICAnd2JyJyxcbiAgXSk7XG5cbiAgY29uc3Qgb3BlblRhZ1JlZ2V4ID0gLzwoW0EtWmEtel1bQS1aYS16MC05LV0qKShcXHNbXj5dKik/XFxzKj4vZztcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsO1xuXG4gIHdoaWxlICgobWF0Y2ggPSBvcGVuVGFnUmVnZXguZXhlYyhtYXJrZG93bikpICE9PSBudWxsKSB7XG4gICAgY29uc3QgZnVsbE1hdGNoID0gbWF0Y2hbMF07XG4gICAgY29uc3QgdGFnTmFtZSA9IG1hdGNoWzFdO1xuICAgIGNvbnN0IGF0dHJzID0gbWF0Y2hbMl0gfHwgJyc7XG4gICAgY29uc3QgdGFnID0gdGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gU2tpcCB2b2lkIGVsZW1lbnRzLCBzZWxmLWNsb3NpbmcgdGFncywgb3IgdGFncyB3aXRoIGV4aXN0aW5nIG1hcmtkb3duIGF0dHJcbiAgICBpZiAoXG4gICAgICB2b2lkRWxlbWVudHMuaGFzKHRhZykgfHxcbiAgICAgIGZ1bGxNYXRjaC5lbmRzV2l0aCgnLz4nKSB8fFxuICAgICAgL21hcmtkb3duXFxzKj0vLnRlc3QoYXR0cnMpXG4gICAgKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50U3RhcnQgPSBtYXRjaC5pbmRleCArIGZ1bGxNYXRjaC5sZW5ndGg7XG4gICAgY29uc3QgY2xvc2luZ1RhZ0luZGV4ID0gZmluZENsb3NpbmdUYWdJbmRleChcbiAgICAgIG1hcmtkb3duLFxuICAgICAgdGFnTmFtZSxcbiAgICAgIGNvbnRlbnRTdGFydCxcbiAgICApO1xuXG4gICAgaWYgKGNsb3NpbmdUYWdJbmRleCA9PT0gLTEpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgaW5uZXJDb250ZW50ID0gbWFya2Rvd24uc2xpY2UoY29udGVudFN0YXJ0LCBjbG9zaW5nVGFnSW5kZXgpO1xuXG4gICAgaWYgKGNvbnRhaW5zTWFya2Rvd24oaW5uZXJDb250ZW50KSkge1xuICAgICAgcmVzdWx0ICs9IG1hcmtkb3duLnNsaWNlKGxhc3RJbmRleCwgbWF0Y2guaW5kZXgpO1xuICAgICAgcmVzdWx0ICs9IGZ1bGxNYXRjaC5yZXBsYWNlKFxuICAgICAgICBuZXcgUmVnRXhwKGA8JHt0YWdOYW1lfShcXFxcc3w+KWApLFxuICAgICAgICBgPCR7dGFnTmFtZX0gbWFya2Rvd249XCIxXCIkMWAsXG4gICAgICApO1xuICAgICAgbGFzdEluZGV4ID0gY29udGVudFN0YXJ0O1xuICAgIH1cbiAgfVxuXG4gIHJlc3VsdCArPSBtYXJrZG93bi5zbGljZShsYXN0SW5kZXgpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBTdHJpcHMgYWxsIHRoZSBodG1sIHRhZ3MgaW4gdGhlIGh0bWwgc2FuZCByZXR1cm5zIHRoZSB0ZXh0XG5mdW5jdGlvbiBzdHJpcEFsbEh0bWxUYWdzKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgc2FuaXRpemVkID0gaW5wdXQ7XG4gIGxldCBwcmV2aW91cztcblxuICBkbyB7XG4gICAgcHJldmlvdXMgPSBzYW5pdGl6ZWQ7XG4gICAgc2FuaXRpemVkID0gc2FuaXRpemVkLnJlcGxhY2UoLzxbXj5dKz4vZywgJycpO1xuICB9IHdoaWxlIChwcmV2aW91cyAhPT0gc2FuaXRpemVkKTtcblxuICByZXR1cm4gc2FuaXRpemVkO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZC1tYXJrZG93bicsXG4gIHN0eWxlVXJsczogWycuL21hcmtkb3duLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXJrZG93bi5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIFRkTWFya2Rvd25Db21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveVxue1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kb21TYW5pdGl6ZXIgPSBpbmplY3QoRG9tU2FuaXRpemVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgcHJpdmF0ZSBfY29udGVudCE6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2ltcGxlTGluZUJyZWFrcyA9IGZhbHNlO1xuICBwcml2YXRlIF9ob3N0ZWRVcmwhOiBzdHJpbmc7XG4gIHByaXZhdGUgX2FuY2hvciE6IHN0cmluZztcbiAgcHJpdmF0ZSBfdmlld0luaXQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZmlsZUxpbmtFeHRlbnNpb25zITogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX2FuY2hvckxpc3RlbmVyPzogVm9pZEZ1bmN0aW9uO1xuICAvKipcbiAgICogLnRkLW1hcmtkb3duIGNsYXNzIGFkZGVkIHRvIGhvc3Qgc28gOjpuZy1kZWVwIGdldHMgc2NvcGVkLlxuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGNsYXNzID0gJ3RkLW1hcmtkb3duJztcblxuICAvKipcbiAgICogY29udGVudD86IHN0cmluZ1xuICAgKlxuICAgKiBNYXJrZG93biBmb3JtYXQgY29udGVudCB0byBiZSBwYXJzZWQgYXMgaHRtbCBtYXJrdXAuXG4gICAqXG4gICAqIGUuZy4gUkVBRE1FLm1kIGNvbnRlbnQuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgY29udGVudChjb250ZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jb250ZW50ID0gY29udGVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBzaW1wbGVMaW5lQnJlYWtzPzogc3RyaW5nXG4gICAqXG4gICAqIFNldHMgd2hldGhlciBuZXdsaW5lIGNoYXJhY3RlcnMgaW5zaWRlIHBhcmFncmFwaHMgYW5kIHNwYW5zIGFyZSBwYXJzZWQgYXMgPGJyLz4uXG4gICAqIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHNpbXBsZUxpbmVCcmVha3Moc2ltcGxlTGluZUJyZWFrczogYm9vbGVhbikge1xuICAgIHRoaXMuX3NpbXBsZUxpbmVCcmVha3MgPSBzaW1wbGVMaW5lQnJlYWtzO1xuICB9XG5cbiAgLyoqXG4gICAqIGhvc3RlZFVybD86IHN0cmluZ1xuICAgKlxuICAgKiBJZiBtYXJrZG93biBjb250YWlucyByZWxhdGl2ZSBwYXRocywgdGhpcyBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSBjb3JyZWN0IHVybHMuXG4gICAqXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgaG9zdGVkVXJsKGhvc3RlZFVybDogc3RyaW5nKSB7XG4gICAgdGhpcy5faG9zdGVkVXJsID0gaG9zdGVkVXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIGFuY2hvcj86IHN0cmluZ1xuICAgKlxuICAgKiBBbmNob3IgdG8ganVtcCB0by5cbiAgICpcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBhbmNob3IoYW5jaG9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9hbmNob3IgPSBhbmNob3I7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZpbGUgZXh0ZW5zaW9ucyB0byBtb25pdG9yIGZvciBpbiBhbmNob3IgdGFncy4gSWYgYW4gYW5jaG9yJ3MgYGhyZWZgIGVuZHNcbiAgICogd2l0aCB0aGVzZSBleHRlbnNpb25zLCBhbiBldmVudCB3aWxsIGJlIGVtaXR0ZWQgaW5zdGVhZCBvZiBwZXJmb3JtaW5nIHRoZSBkZWZhdWx0IGNsaWNrIGFjdGlvbi5cbiAgICogRXhhbXBsZSB2YWx1ZXM6IFtcIi5pcHluYlwiLCBcIi56aXBcIiwgXCIuZG9jeFwiXVxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGZpbGVMaW5rRXh0ZW5zaW9ucyhleHRlbnNpb25zOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2ZpbGVMaW5rRXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnM7XG4gIH1cblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGFuY2hvciB0YWcgd2l0aCBhbiBgaHJlZmAgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZFxuICAgKiBmaWxlTGlua0V4dGVuc2lvbnMgaXMgY2xpY2tlZC4gVGhlIGVtaXR0ZWQgdmFsdWUgaXMgdGhlIFVSTCBvZiB0aGUgY2xpY2tlZCBhbmNob3IuXG4gICAqL1xuICBAT3V0cHV0KCkgZmlsZUxpbmtDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxVUkw+KCk7XG5cbiAgLyoqXG4gICAqIGNvbnRlbnRSZWFkeT86IGZ1bmN0aW9uXG4gICAqIEV2ZW50IGVtaXR0ZWQgYWZ0ZXIgdGhlIG1hcmtkb3duIGNvbnRlbnQgcmVuZGVyaW5nIGlzIGZpbmlzaGVkLlxuICAgKi9cbiAgQE91dHB1dCgpIGNvbnRlbnRSZWFkeTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLyBvbmx5IGFuY2hvciBjaGFuZ2VkXG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1snYW5jaG9yJ10gJiZcbiAgICAgICFjaGFuZ2VzWydjb250ZW50J10gJiZcbiAgICAgICFjaGFuZ2VzWydzaW1wbGVMaW5lQnJlYWtzJ10gJiZcbiAgICAgICFjaGFuZ2VzWydob3N0ZWRVcmwnXVxuICAgICkge1xuICAgICAgc2Nyb2xsVG9BbmNob3IodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLl9hbmNob3IsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9jb250ZW50KSB7XG4gICAgICB0aGlzLl9sb2FkQ29udGVudChcbiAgICAgICAgKDxIVE1MRWxlbWVudD50aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLnRleHRDb250ZW50LFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fdmlld0luaXQgPSB0cnVlO1xuXG4gICAgLy8gQ2FyZXRha2VyIG5vdGU6IHRoZSBgc2Nyb2xsVG9BbmNob3JgIGNhbGxzIGBlbGVtZW50LnNjcm9sbEludG9WaWV3YCwgYSBuYXRpdmUgc3luY2hyb25vdXMgRE9NXG4gICAgLy8gQVBJIGFuZCBpdCBkb2Vzbid0IHJlcXVpcmUgQW5ndWxhciBydW5uaW5nIGBBcHBsaWNhdGlvblJlZi50aWNrKClgIGVhY2ggdGltZSB0aGUgbWFya2Rvd24gY29tcG9uZW50IGlzIGNsaWNrZWQuXG4gICAgLy8gSG9zdCBsaXN0ZW5lciAoYWRkZWQgdGhyb3VnaCBgQEhvc3RMaXN0ZW5lcmApIGNhdXNlIEFuZ3VsYXIgdG8gYWRkIGFuIGV2ZW50IGxpc3RlbmVyIHdpdGhpbiB0aGUgQW5ndWxhciB6b25lLlxuICAgIC8vIEl0IGFsc28gY2FsbHMgYG1hcmtWaWV3RGlydHkoKWAgYmVmb3JlIGNhbGxpbmcgdGhlIGFjdHVhbCBsaXN0ZW5lciAodGhlIGRlY29yYXRlZCBjbGFzcyBtZXRob2QpLlxuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLl9hbmNob3JMaXN0ZW5lciA9IHRoaXMuX3JlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAnY2xpY2snLFxuICAgICAgICAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50OiBIVE1MRWxlbWVudCA9IDxIVE1MRWxlbWVudD5ldmVudC5zcmNFbGVtZW50O1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGVsZW1lbnQubWF0Y2hlcygnYVtocmVmXScpICYmXG4gICAgICAgICAgICBpc0FuY2hvckxpbmsoPEhUTUxBbmNob3JFbGVtZW50PmVsZW1lbnQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFuY2hvckNsaWNrcyhldmVudCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGVsZW1lbnQubWF0Y2hlcygnYVtocmVmXScpICYmXG4gICAgICAgICAgICBpc0ZpbGVMaW5rKDxIVE1MQW5jaG9yRWxlbWVudD5lbGVtZW50LCB0aGlzLl9maWxlTGlua0V4dGVuc2lvbnMpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUZpbGVBbmNob3JDbGlja3MoZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9hbmNob3JMaXN0ZW5lcj8uKCk7XG4gIH1cblxuICByZWZyZXNoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jb250ZW50KSB7XG4gICAgICB0aGlzLl9sb2FkQ29udGVudCh0aGlzLl9jb250ZW50KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3ZpZXdJbml0KSB7XG4gICAgICB0aGlzLl9sb2FkQ29udGVudChcbiAgICAgICAgKDxIVE1MRWxlbWVudD50aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLnRleHRDb250ZW50LFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhbCBtZXRob2QgdG8gcGFyc2UgYSBzdHJpbmcgbWFya2Rvd24gaW50byBIVE1MIEVsZW1lbnRzIGFuZCBsb2FkIHRoZW0gaW50byB0aGUgY29udGFpbmVyXG4gICAqL1xuICBwcml2YXRlIF9sb2FkQ29udGVudChtYXJrZG93bjogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmIChtYXJrZG93biAmJiBtYXJrZG93bi50cmltKCkubGVuZ3RoID4gMCkge1xuICAgICAgLy8gQ2xlYW4gY29udGFpbmVyXG4gICAgICB0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eShcbiAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAnaW5uZXJIVE1MJyxcbiAgICAgICAgJycsXG4gICAgICApO1xuICAgICAgLy8gUGFyc2UgaHRtbCBzdHJpbmcgaW50byBhY3R1YWwgSFRNTCBlbGVtZW50cy5cbiAgICAgIHRoaXMuX2VsZW1lbnRGcm9tU3RyaW5nKHRoaXMuX3JlbmRlcihtYXJrZG93bikpO1xuICAgIH1cbiAgICAvLyBUT0RPOiB0aW1lb3V0IHJlcXVpcmVkIHNpbmNlIHJlc2l6aW5nIG9mIGh0bWwgZWxlbWVudHMgb2NjdXJzIHdoaWNoIGNhdXNlcyBhIGNoYW5nZSBpbiB0aGUgc2Nyb2xsIHBvc2l0aW9uXG4gICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIHNjcm9sbFRvQW5jaG9yKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5fYW5jaG9yLCB0cnVlKSxcbiAgICAgICAgMjUwLFxuICAgICAgKSxcbiAgICApO1xuICAgIHRoaXMuY29udGVudFJlYWR5LmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQW5jaG9yQ2xpY2tzKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgdXJsOiBVUkwgPSBuZXcgVVJMKCg8SFRNTEFuY2hvckVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5ocmVmKTtcbiAgICBjb25zdCBoYXNoOiBzdHJpbmcgPSBkZWNvZGVVUkkodXJsLmhhc2gpO1xuICAgIHNjcm9sbFRvQW5jaG9yKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgaGFzaCwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUZpbGVBbmNob3JDbGlja3MoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB1cmw6IFVSTCA9IG5ldyBVUkwoKDxIVE1MQW5jaG9yRWxlbWVudD5ldmVudC50YXJnZXQpLmhyZWYpO1xuICAgIHRoaXMuZmlsZUxpbmtDbGlja2VkLmVtaXQodXJsKTtcbiAgfVxuXG4gIHByaXZhdGUgX2VsZW1lbnRGcm9tU3RyaW5nKG1hcmt1cFN0cjogc3RyaW5nKTogSFRNTERpdkVsZW1lbnQge1xuICAgIC8vIFJlbmRlcmVyMiBkb2VzbnQgaGF2ZSBhIHBhcnNpbmcgbWV0aG9kLCBzbyB3ZSBoYXZlIHRvIHNhbml0aXplIGFuZCB1c2UgW2lubmVySFRNTF1cbiAgICAvLyB0byBwYXJzZSB0aGUgc3RyaW5nIGludG8gRE9NIGVsZW1lbnQgZm9yIG5vdy5cbiAgICBjb25zdCBkaXY6IEhUTUxEaXZFbGVtZW50ID0gdGhpcy5fcmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGhpcy5fcmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBkaXYpO1xuXG4gICAgY29uc3QgaHRtbDogc3RyaW5nID1cbiAgICAgIHRoaXMuX2RvbVNhbml0aXplci5zYW5pdGl6ZShcbiAgICAgICAgU2VjdXJpdHlDb250ZXh0LlNUWUxFLFxuICAgICAgICBjaGFuZ2VTdHlsZUFsaWdubWVudFRvQ2xhc3MobWFya3VwU3RyKSxcbiAgICAgICkgPz8gJyc7XG4gICAgY29uc3QgaHRtbFdpdGhBYnNvbHV0ZUhyZWZzOiBzdHJpbmcgPSBub3JtYWxpemVIdG1sSHJlZnMoXG4gICAgICBodG1sLFxuICAgICAgdGhpcy5faG9zdGVkVXJsLFxuICAgICAgdGhpcy5fZmlsZUxpbmtFeHRlbnNpb25zLFxuICAgICk7XG4gICAgY29uc3QgaHRtbFdpdGhBYnNvbHV0ZUltZ1NyY3M6IHN0cmluZyA9IG5vcm1hbGl6ZUltYWdlU3JjcyhcbiAgICAgIGh0bWxXaXRoQWJzb2x1dGVIcmVmcyxcbiAgICAgIHRoaXMuX2hvc3RlZFVybCxcbiAgICApO1xuICAgIGNvbnN0IGh0bWxXaXRoQWJzb2x1dGVWaWRlb1NyY3M6IHN0cmluZyA9IG5vcm1hbGl6ZVZpZGVvU3JjcyhcbiAgICAgIGh0bWxXaXRoQWJzb2x1dGVJbWdTcmNzLFxuICAgICAgdGhpcy5faG9zdGVkVXJsLFxuICAgICk7XG4gICAgY29uc3QgaHRtbFdpdGhIZWFkaW5nSWRzOiBzdHJpbmcgPSBhZGRJZHNUb0hlYWRpbmdzKFxuICAgICAgaHRtbFdpdGhBYnNvbHV0ZVZpZGVvU3JjcyxcbiAgICApO1xuICAgIGNvbnN0IGh0bWxXaXRoVmlkZW9zOiBTYWZlSHRtbCA9IHJlbmRlclZpZGVvRWxlbWVudHMoaHRtbFdpdGhIZWFkaW5nSWRzKTtcbiAgICB0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eShkaXYsICdpbm5lckhUTUwnLCBodG1sV2l0aFZpZGVvcyk7XG4gICAgcmV0dXJuIGRpdjtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlcihtYXJrZG93bjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBUcmltIGxlYWRpbmcgYW5kIHRyYWlsaW5nIG5ld2xpbmVzXG4gICAgbWFya2Rvd24gPSBtYXJrZG93blxuICAgICAgLnJlcGxhY2UoL14oXFxzfFxcdCkqXFxuKy9nLCAnJylcbiAgICAgIC5yZXBsYWNlKC8oXFxzfFxcdCkqXFxuKyhcXHN8XFx0KSokL2csICcnKTtcbiAgICAvLyBTcGxpdCBtYXJrZG93biBieSBsaW5lIGNoYXJhY3RlcnNcbiAgICBsZXQgbGluZXM6IHN0cmluZ1tdID0gbWFya2Rvd24uc3BsaXQoJ1xcbicpO1xuXG4gICAgLy8gY2hlY2sgaG93IG11Y2ggaW5kZW50YXRpb24gaXMgdXNlZCBieSB0aGUgZmlyc3QgYWN0dWFsIG1hcmtkb3duIGxpbmVcbiAgICBjb25zdCBmaXJzdExpbmVXaGl0ZXNwYWNlTWF0Y2ggPSBsaW5lc1swXS5tYXRjaCgvXihcXHN8XFx0KSovKTtcbiAgICBjb25zdCBmaXJzdExpbmVXaGl0ZXNwYWNlOiBzdHJpbmcgPSBmaXJzdExpbmVXaGl0ZXNwYWNlTWF0Y2hcbiAgICAgID8gZmlyc3RMaW5lV2hpdGVzcGFjZU1hdGNoWzBdXG4gICAgICA6ICcnO1xuXG4gICAgLy8gUmVtb3ZlIGFsbCBpbmRlbnRhdGlvbiBzcGFjZXMgc28gbWFya2Rvd24gY2FuIGJlIHBhcnNlZCBjb3JyZWN0bHlcbiAgICBjb25zdCBzdGFydGluZ1doaXRlc3BhY2VSZWdleCA9IG5ldyBSZWdFeHAoJ14nICsgZmlyc3RMaW5lV2hpdGVzcGFjZSk7XG4gICAgbGluZXMgPSBsaW5lcy5tYXAoZnVuY3Rpb24gKGxpbmU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gbGluZS5yZXBsYWNlKHN0YXJ0aW5nV2hpdGVzcGFjZVJlZ2V4LCAnJyk7XG4gICAgfSk7XG5cbiAgICAvLyBKb2luIGxpbmVzIGFnYWluIHdpdGggbGluZSBjaGFyYWN0ZXJzXG4gICAgY29uc3QgbWFya2Rvd25Ub1BhcnNlOiBzdHJpbmcgPSBsaW5lcy5qb2luKCdcXG4nKTtcblxuICAgIC8vIENvbnZlcnQgbWFya2Rvd24gaW50byBodG1sXG4gICAgY29uc3QgY29udmVydGVyOiBzaG93ZG93bi5Db252ZXJ0ZXIgPSBuZXcgc2hvd2Rvd24uQ29udmVydGVyKCk7XG4gICAgY29udmVydGVyLnNldE9wdGlvbignZ2hDb2RlQmxvY2tzJywgdHJ1ZSk7XG4gICAgY29udmVydGVyLnNldE9wdGlvbignZ2hDb21wYXRpYmxlSGVhZGVySWQnLCB0cnVlKTtcbiAgICBjb252ZXJ0ZXIuc2V0T3B0aW9uKCd0YXNrbGlzdHMnLCB0cnVlKTtcbiAgICBjb252ZXJ0ZXIuc2V0T3B0aW9uKCd0YWJsZXMnLCB0cnVlKTtcbiAgICBjb252ZXJ0ZXIuc2V0T3B0aW9uKCdsaXRlcmFsTWlkV29yZFVuZGVyc2NvcmVzJywgdHJ1ZSk7XG4gICAgY29udmVydGVyLnNldE9wdGlvbignc2ltcGxlTGluZUJyZWFrcycsIHRoaXMuX3NpbXBsZUxpbmVCcmVha3MpO1xuICAgIGNvbnZlcnRlci5zZXRPcHRpb24oJ2Vtb2ppJywgdHJ1ZSk7XG4gICAgY29udmVydGVyLnNldE9wdGlvbignZGlzYWJsZUZvcmNlZDRTcGFjZXNJbmRlbnRlZFN1Ymxpc3RzJywgdHJ1ZSk7XG5cbiAgICBjb25zdCBtYXJrZG93bldpdGhBdHRyOiBzdHJpbmcgPSBhZGRNYXJrZG93bkF0dHJUb0h0bWxUYWdzKG1hcmtkb3duVG9QYXJzZSk7XG4gICAgY29uc3QgaHRtbCA9IGNvbnZlcnRlci5tYWtlSHRtbChtYXJrZG93bldpdGhBdHRyKTtcbiAgICByZXR1cm4gaHRtbDtcbiAgfVxufVxuIiwiPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuIl19","import { Injectable, SecurityContext, inject } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { HttpClient } from '@angular/common/http';\nimport { isGithubHref, rawGithubHref } from '../markdown-utils/markdown-utils';\nimport * as i0 from \"@angular/core\";\nexport class TdMarkdownLoaderService {\n    _http = inject(HttpClient);\n    _sanitizer = inject(DomSanitizer);\n    async load(url, httpOptions = {}) {\n        const sanitizedUrl = this._sanitizer.sanitize(SecurityContext.URL, url) ?? '';\n        let urlToGet = sanitizedUrl;\n        if (isGithubHref(sanitizedUrl)) {\n            urlToGet = rawGithubHref(sanitizedUrl);\n        }\n        const response = await this._http\n            .get(urlToGet, {\n            ...httpOptions,\n            responseType: 'text',\n            observe: 'response',\n        })\n            .toPromise();\n        const contentType = response?.headers.get('Content-Type') ?? '';\n        if (contentType.includes('text/plain') ||\n            contentType.includes('text/markdown')) {\n            return response?.body ?? '';\n        }\n        else {\n            throw Error(`${contentType} is not a handled content type`);\n        }\n    }\n    static ɵfac = function TdMarkdownLoaderService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TdMarkdownLoaderService)(); };\n    static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: TdMarkdownLoaderService, factory: TdMarkdownLoaderService.ɵfac });\n}\n(() => { (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(TdMarkdownLoaderService, [{\n        type: Injectable\n    }], null, null); })();\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tbG9hZGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL21hcmtkb3duL3NyYy9saWIvbWFya2Rvd24tbG9hZGVyL21hcmtkb3duLWxvYWRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQUcvRSxNQUFNLE9BQU8sdUJBQXVCO0lBQzFCLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0IsVUFBVSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUUxQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQVcsRUFBRSxjQUFzQixFQUFFO1FBQzlDLE1BQU0sWUFBWSxHQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzRCxJQUFJLFFBQVEsR0FBVyxZQUFZLENBQUM7UUFDcEMsSUFBSSxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUMvQixRQUFRLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBcUMsTUFBTSxJQUFJLENBQUMsS0FBSzthQUNoRSxHQUFHLENBQUMsUUFBUSxFQUFFO1lBQ2IsR0FBRyxXQUFXO1lBQ2QsWUFBWSxFQUFFLE1BQU07WUFDcEIsT0FBTyxFQUFFLFVBQVU7U0FDcEIsQ0FBQzthQUNELFNBQVMsRUFBRSxDQUFDO1FBQ2YsTUFBTSxXQUFXLEdBQVcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hFLElBQ0UsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7WUFDbEMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFDckMsQ0FBQztZQUNELE9BQU8sUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7UUFDOUIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEtBQUssQ0FBQyxHQUFHLFdBQVcsZ0NBQWdDLENBQUMsQ0FBQztRQUM5RCxDQUFDO0lBQ0gsQ0FBQztpSEE1QlUsdUJBQXVCO2dFQUF2Qix1QkFBdUIsV0FBdkIsdUJBQXVCOztpRkFBdkIsdUJBQXVCO2NBRG5DLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBTZWN1cml0eUNvbnRleHQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpc0dpdGh1YkhyZWYsIHJhd0dpdGh1YkhyZWYgfSBmcm9tICcuLi9tYXJrZG93bi11dGlscy9tYXJrZG93bi11dGlscyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUZE1hcmtkb3duTG9hZGVyU2VydmljZSB7XG4gIHByaXZhdGUgX2h0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG4gIHByaXZhdGUgX3Nhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuXG4gIGFzeW5jIGxvYWQodXJsOiBzdHJpbmcsIGh0dHBPcHRpb25zOiBvYmplY3QgPSB7fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qgc2FuaXRpemVkVXJsOiBzdHJpbmcgPVxuICAgICAgdGhpcy5fc2FuaXRpemVyLnNhbml0aXplKFNlY3VyaXR5Q29udGV4dC5VUkwsIHVybCkgPz8gJyc7XG4gICAgbGV0IHVybFRvR2V0OiBzdHJpbmcgPSBzYW5pdGl6ZWRVcmw7XG4gICAgaWYgKGlzR2l0aHViSHJlZihzYW5pdGl6ZWRVcmwpKSB7XG4gICAgICB1cmxUb0dldCA9IHJhd0dpdGh1YkhyZWYoc2FuaXRpemVkVXJsKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZTogSHR0cFJlc3BvbnNlPHN0cmluZz4gfCB1bmRlZmluZWQgPSBhd2FpdCB0aGlzLl9odHRwXG4gICAgICAuZ2V0KHVybFRvR2V0LCB7XG4gICAgICAgIC4uLmh0dHBPcHRpb25zLFxuICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcbiAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcbiAgICAgIH0pXG4gICAgICAudG9Qcm9taXNlKCk7XG4gICAgY29uc3QgY29udGVudFR5cGU6IHN0cmluZyA9IHJlc3BvbnNlPy5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykgPz8gJyc7XG4gICAgaWYgKFxuICAgICAgY29udGVudFR5cGUuaW5jbHVkZXMoJ3RleHQvcGxhaW4nKSB8fFxuICAgICAgY29udGVudFR5cGUuaW5jbHVkZXMoJ3RleHQvbWFya2Rvd24nKVxuICAgICkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5ib2R5ID8/ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBFcnJvcihgJHtjb250ZW50VHlwZX0gaXMgbm90IGEgaGFuZGxlZCBjb250ZW50IHR5cGVgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==","import { NgModule } from '@angular/core';\nimport { provideHttpClient, withInterceptorsFromDi, } from '@angular/common/http';\nimport { TdMarkdownComponent } from './markdown.component';\nimport { TdMarkdownLoaderService } from './markdown-loader/markdown-loader.service';\nimport * as i0 from \"@angular/core\";\n/**\n * @deprecated This module is deprecated and will be removed in future versions.\n * Please migrate to using standalone components as soon as possible.\n */\nexport class CovalentMarkdownModule {\n    static ɵfac = function CovalentMarkdownModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CovalentMarkdownModule)(); };\n    static ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: CovalentMarkdownModule });\n    static ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ providers: [\n            TdMarkdownLoaderService,\n            provideHttpClient(withInterceptorsFromDi()),\n        ] });\n}\n(() => { (typeof ngDevMode === \"undefined\" || ngDevMode) && i0.ɵsetClassMetadata(CovalentMarkdownModule, [{\n        type: NgModule,\n        args: [{\n                exports: [TdMarkdownComponent],\n                imports: [TdMarkdownComponent],\n                providers: [\n                    TdMarkdownLoaderService,\n                    provideHttpClient(withInterceptorsFromDi()),\n                ],\n            }]\n    }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && i0.ɵɵsetNgModuleScope(CovalentMarkdownModule, { imports: [TdMarkdownComponent], exports: [TdMarkdownComponent] }); })();\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9tYXJrZG93bi9zcmMvbGliL21hcmtkb3duLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsc0JBQXNCLEdBQ3ZCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7O0FBRXBGOzs7R0FHRztBQVNILE1BQU0sT0FBTyxzQkFBc0I7Z0hBQXRCLHNCQUFzQjs0REFBdEIsc0JBQXNCO2lFQUx0QjtZQUNULHVCQUF1QjtZQUN2QixpQkFBaUIsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQzVDOztpRkFFVSxzQkFBc0I7Y0FSbEMsUUFBUTtlQUFDO2dCQUNSLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDO2dCQUM5QixPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDOUIsU0FBUyxFQUFFO29CQUNULHVCQUF1QjtvQkFDdkIsaUJBQWlCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztpQkFDNUM7YUFDRjs7d0ZBQ1ksc0JBQXNCLGNBTnZCLG1CQUFtQixhQURuQixtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBwcm92aWRlSHR0cENsaWVudCxcbiAgd2l0aEludGVyY2VwdG9yc0Zyb21EaSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBUZE1hcmtkb3duQ29tcG9uZW50IH0gZnJvbSAnLi9tYXJrZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGRNYXJrZG93bkxvYWRlclNlcnZpY2UgfSBmcm9tICcuL21hcmtkb3duLWxvYWRlci9tYXJrZG93bi1sb2FkZXIuc2VydmljZSc7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVGhpcyBtb2R1bGUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy5cbiAqIFBsZWFzZSBtaWdyYXRlIHRvIHVzaW5nIHN0YW5kYWxvbmUgY29tcG9uZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlLlxuICovXG5ATmdNb2R1bGUoe1xuICBleHBvcnRzOiBbVGRNYXJrZG93bkNvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtUZE1hcmtkb3duQ29tcG9uZW50XSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgVGRNYXJrZG93bkxvYWRlclNlcnZpY2UsXG4gICAgcHJvdmlkZUh0dHBDbGllbnQod2l0aEludGVyY2VwdG9yc0Zyb21EaSgpKSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ292YWxlbnRNYXJrZG93bk1vZHVsZSB7fVxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './public_api';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY292YWxlbnQtbWFya2Rvd24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL21hcmtkb3duL3NyYy9jb3ZhbGVudC1tYXJrZG93bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuIl19"],"names":[],"mappings":"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"}