From b9a1b85fc4b736b59042a8d96ffc17ea68d27e4a Mon Sep 17 00:00:00 2001 From: Shan Carter Date: Wed, 4 Jan 2017 17:11:11 -0800 Subject: [PATCH] Normalizes indents within code blocks --- components/code.js | 34 +++++++++++++++++++++++----------- components/styles-article.css | 4 ++++ components/styles-code.css | 1 - dist/template.min.js | 4 ++-- dist/template.min.js.map | 2 +- examples/tutorial.html | 24 ++++++++---------------- 6 files changed, 38 insertions(+), 31 deletions(-) diff --git a/components/code.js b/components/code.js index 8d2ce27..36b7164 100644 --- a/components/code.js +++ b/components/code.js @@ -1,17 +1,29 @@ import Prism from "prismjs"; export default function(dom, data) { - let codeElements = [].slice.call(dom.querySelectorAll("code")); + let codeElements = [].slice.call(dom.querySelectorAll("dt-code")); codeElements.forEach(el => { - // let content = el.innerHTML; - // el.innerHTML = ""; - // let p = dom.createElement("pre"); - // let c = dom.createElement("code"); - // console.log(content) - let highlighted = Prism.highlightElement(el); - // c.innerHTML = highlighted; - // p.appendChild(c); - // el.appendChild(p); - + let content = el.textContent; + el.innerHTML = ""; + let language = el.getAttribute("language"); + let c = dom.createElement("code"); + if (el.getAttribute("block") === "") { + // Let's normalize the tab indents + content = content.replace(/\n/, ""); + let tabs = content.match(/\s*/); + content = content.replace(new RegExp("\n" + tabs, "g"), "\n"); + content = content.trim(); + let p = dom.createElement("pre"); + p.appendChild(c); + el.appendChild(p); + } else { + el.appendChild(c); + } + let highlighted = content; + if (Prism.languages[language]) { + c.setAttribute("class", "language-" + language); + highlighted = Prism.highlight(content, Prism.languages[language]); + } + c.innerHTML = highlighted; }); } diff --git a/components/styles-article.css b/components/styles-article.css index a789e1c..70757a0 100644 --- a/components/styles-article.css +++ b/components/styles-article.css @@ -176,3 +176,7 @@ dt-article figure figcaption b { font-weight: 600; color: rgba(0, 0, 0, 1.0); } + +dt-article > dt-code { + display: block; +} diff --git a/components/styles-code.css b/components/styles-code.css index b35d87f..2440da4 100644 --- a/components/styles-code.css +++ b/components/styles-code.css @@ -24,7 +24,6 @@ code[class*="language-"], pre[class*="language-"] { color: black; - background: none; text-shadow: 0 1px white; font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; text-align: left; diff --git a/dist/template.min.js b/dist/template.min.js index 632dbf0..83cfbd8 100644 --- a/dist/template.min.js +++ b/dist/template.min.js @@ -1,3 +1,3 @@ -document.write('');var dl=function(){"use strict";function t(t,e){return e={exports:{}},t(e,e.exports),e.exports}function e(t,e){t.innerHTML+=e}function n(t){var e="citation_title="+t.title+";";return t.author.split(" and ").forEach(function(t){e+="citation_author="+t.trim()+";"}),"journal"in t&&(e+="citation_journal_title="+t.journal+";"),"volume"in t&&(e+="citation_volume="+t.volume+";"),("issue"in t||"number"in t)&&(e+="citation_number="+(t.issue||t.number)+";"),e}function i(t,e){h(t,e),document.addEventListener("DOMContentLoaded",function(n){o(t,e),s(t,e),f(t,e),b(t,e),x(t,e),w(t,e),S(t,e),k(t,e),console.log("final data:");for(var i in e)console.log(" ",i,": ",e[i])})}var r="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},a=t(function(t,e){!function(t){function e(){this.months=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],this.notKey=[",","{","}"," ","="],this.pos=0,this.input="",this.entries=new Array,this.currentEntry="",this.setInput=function(t){this.input=t},this.getEntries=function(){return this.entries},this.isWhitespace=function(t){return" "==t||"\r"==t||"\t"==t||"\n"==t},this.match=function(t,e){if(void 0!=e&&null!=e||(e=!0),this.skipWhitespace(e),this.input.substring(this.pos,this.pos+t.length)!=t)throw"Token mismatch, expected "+t+", found "+this.input.substring(this.pos);this.pos+=t.length,this.skipWhitespace(e)},this.tryMatch=function(t,e){return void 0!=e&&null!=e||(e=!0),this.skipWhitespace(e),this.input.substring(this.pos,this.pos+t.length)==t},this.matchAt=function(){for(var t=this;this.input.length>this.pos&&"@"!=this.input[this.pos];)t.pos++;return"@"==this.input[this.pos]},this.skipWhitespace=function(t){for(var e=this;this.isWhitespace(this.input[this.pos]);)e.pos++;if("%"==this.input[this.pos]&&1==t){for(;"\n"!=this.input[this.pos];)e.pos++;this.skipWhitespace(t)}},this.value_braces=function(){var t=this,e=0;this.match("{",!1);for(var n=this.pos,i=!1;;){if(!i)if("}"==t.input[t.pos]){if(!(e>0)){var r=t.pos;return t.match("}",!1),t.input.substring(n,r)}e--}else if("{"==t.input[t.pos])e++;else if(t.pos>=t.input.length-1)throw"Unterminated value";i="\\"==t.input[t.pos]&&0==i,t.pos++}},this.value_comment=function(){for(var t=this,e="",n=0;!this.tryMatch("}",!1)||0!=n;){if(e+=t.input[t.pos],"{"==t.input[t.pos]&&n++,"}"==t.input[t.pos]&&n--,t.pos>=t.input.length-1)throw"Unterminated value:"+t.input.substring(start);t.pos++}return e},this.value_quotes=function(){var t=this;this.match('"',!1);for(var e=this.pos,n=!1;;){if(!n){if('"'==t.input[t.pos]){var i=t.pos;return t.match('"',!1),t.input.substring(e,i)}if(t.pos>=t.input.length-1)throw"Unterminated value:"+t.input.substring(e)}n="\\"==t.input[t.pos]&&0==n,t.pos++}},this.single_value=function(){var t=this.pos;if(this.tryMatch("{"))return this.value_braces();if(this.tryMatch('"'))return this.value_quotes();var e=this.key();if(e.match("^[0-9]+$"))return e;if(this.months.indexOf(e.toLowerCase())>=0)return e.toLowerCase();throw"Value expected:"+this.input.substring(t)+" for key: "+e},this.value=function(){var t=this,e=[];for(e.push(this.single_value());this.tryMatch("#");)t.match("#"),e.push(t.single_value());return e.join("")},this.key=function(){for(var t=this,e=this.pos;;){if(t.pos>=t.input.length)throw"Runaway key";if(t.notKey.indexOf(t.input[t.pos])>=0)return t.input.substring(e,t.pos);t.pos++}},this.key_equals_value=function(){var t=this.key();if(this.tryMatch("=")){this.match("=");var e=this.value();return[t,e]}throw"... = value expected, equals sign missing:"+this.input.substring(this.pos)},this.key_value_list=function(){var t=this,e=this.key_equals_value();for(this.currentEntry.entryTags={},this.currentEntry.entryTags[e[0]]=e[1];this.tryMatch(",")&&(t.match(","),!t.tryMatch("}"));)e=t.key_equals_value(),t.currentEntry.entryTags[e[0]]=e[1]},this.entry_body=function(t){this.currentEntry={},this.currentEntry.citationKey=this.key(),this.currentEntry.entryType=t.substring(1),this.match(","),this.key_value_list(),this.entries.push(this.currentEntry)},this.directive=function(){return this.match("@"),"@"+this.key()},this.preamble=function(){this.currentEntry={},this.currentEntry.entryType="PREAMBLE",this.currentEntry.entry=this.value_comment(),this.entries.push(this.currentEntry)},this.comment=function(){this.currentEntry={},this.currentEntry.entryType="COMMENT",this.currentEntry.entry=this.value_comment(),this.entries.push(this.currentEntry)},this.entry=function(t){this.entry_body(t)},this.bibtex=function(){for(var t=this;this.matchAt();){var e=t.directive();t.match("{"),"@STRING"==e?t.string():"@PREAMBLE"==e?t.preamble():"@COMMENT"==e?t.comment():t.entry(e),t.match("}")}}}t.toJSON=function(t){var n=new e;return n.setInput(t),n.bibtex(),n.entries},t.toBibtex=function(t){var e="";for(var n in t){if(e+="@"+t[n].entryType,e+="{",t[n].citationKey&&(e+=t[n].citationKey+", "),t[n].entry&&(e+=t[n].entry),t[n].entryTags){var i="";for(var r in t[n].entryTags)0!=i.length&&(i+=", "),i+=r+"= {"+t[n].entryTags[r]+"}";e+=i}e+="}\n\n"}return e}}(e)}),o=function(t,e){var n="\n @article{gregor2015draw,\n title={DRAW: A recurrent neural network for image generation},\n author={Gregor, Karol and Danihelka, Ivo and Graves, Alex and Rezende, Danilo Jimenez and Wierstra, Daan},\n journal={arXivreprint arXiv:1502.04623},\n year={2015}\n }\n @article{mercier2011humans,\n title={Why do humans reason? Arguments for an argumentative theory},\n author={Mercier, Hugo and Sperber, Dan},\n journal={Behavioral and brain sciences},\n volume={34},\n number={02},\n pages={57--74},\n year={2011},\n publisher={Cambridge Univ Press}\n }",i={};a.toJSON(n).forEach(function(t){i[t.citationKey]=t.entryTags,i[t.citationKey].type=t.entryType});var r={},o=[].slice.apply(t.querySelectorAll("dt-cite"));o.forEach(function(t){var e=t.textContent.split(",");e.forEach(function(t){i[t]?r[t]=i[t]:console.warn("No bibliography entry found for: "+t)})}),e.citations=r},s=function(t,i){t.querySelector("html").setAttribute("lang","en");var r=t.querySelector("head");t.querySelector("meta[charset]")||e(r,''),t.querySelector("meta[name=viewport]")||e(r,''),e(r,'\n \n \n \n \n '+i.title+"\n "),e(r,'\n \n \n \n '),i.authors.forEach(function(t){e(r,'\n ')}),e(r,'\n \n \n \n \n \n \n \n \n '),e(r,'\n \n \n \n \n \n \n \n \n '),e(r,'\n \n \n \n \n \n \n \n \n \n \n \n \n '),i.authors.forEach(function(t){e(r,'\n \n \n ')}),Object.keys(i.citations).forEach(function(t){console.log(t),e(r,'\n \n ')})},l="html {\n font: 400 15px/1.55em -apple-system, BlinkMacSystemFont, \"Roboto\", sans-serif;\n}\n\nhtml {\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\n\n/*\nhtml, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td,\narticle, aside, canvas, details, embed,\nfigure, figcaption, footer, header, hgroup,\nmenu, nav, output, ruby, section, summary,\ntime, mark, audio, video {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\tfont-size: 100%;\n\tfont: inherit;\n\tvertical-align: baseline;\n}\narticle, aside, details, figcaption, figure,\nfooter, header, hgroup, menu, nav, section {\n\tdisplay: block;\n}\nbody {\n\tline-height: 1;\n}\nol, ul {\n\tlist-style: none;\n}\nblockquote, q {\n\tquotes: none;\n}\nblockquote:before, blockquote:after,\nq:before, q:after {\n\tcontent: '';\n\tcontent: none;\n}\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}*/\n",c=".l-body,\n.l-page,\ndt-article > * {\n margin-left: 24px;\n margin-right: 24px;\n box-sizing: border-box;\n}\n\n@media(min-width: 768px) {\n .l-body,\n .l-page,\n dt-article > * {\n margin-left: 72px;\n margin-right: 72px;\n }\n}\n\n@media(min-width: 1080px) {\n .l-body,\n dt-article > * {\n margin-left: calc(50% - 984px / 2);\n width: 648px;\n }\n .l-body-outset,\n dt-article .l-body-outset {\n margin-left: calc(50% - 984px / 2 - 24px);\n width: calc(648px + 48px);\n }\n .l-middle,\n dt-article .l-middle {\n width: 816px;\n margin-left: calc(50% - 984px / 2);\n }\n .l-page,\n dt-article .l-page {\n width: 984px;\n margin-left: auto;\n margin-right: auto;\n }\n .l-page-outset,\n dt-article .l-page-outset {\n width: 1080px;\n margin-left: auto;\n margin-right: auto;\n }\n .l-screen,\n dt-article .l-screen {\n margin-left: auto;\n margin-right: auto;\n width: auto;\n }\n .l-screen-inset,\n dt-article .l-screen-inset {\n margin-left: 24px;\n margin-right: 24px;\n width: auto;\n }\n .l-gutter,\n dt-article .l-gutter {\n clear: both;\n float: right;\n margin-top: 0;\n margin-left: 24px;\n margin-right: calc((100vw - 960px) / 2);\n width: calc((984px - 648px) / 2 - 24px);\n }\n /* Side */\n .side.l-body,\n dt-article .side.l-body {\n clear: both;\n float: right;\n margin-top: 0;\n margin-left: 48px;\n margin-right: calc((100vw - 984px + 648px) / 2);\n width: calc(648px / 2 - 24px);\n }\n .side.l-body-outset,\n dt-article .side.l-body-outset {\n clear: both;\n float: right;\n margin-top: 0;\n margin-left: 48px;\n margin-right: calc((100vw - 984px + 648px - 48px) / 2);\n width: calc(648px / 2 - 48px + 24px);\n }\n .side.l-page,\n dt-article .side.l-page {\n clear: both;\n float: right;\n margin-top: 0;\n margin-left: 48px;\n margin-right: calc((100vw - 984px) / 2);\n width: calc(960px / 2 - 48px);\n }\n}\n",p='dt-article {\n color: rgba(0, 0, 0, 0.8);\n font: 15px/1.55em -apple-system, BlinkMacSystemFont, "Roboto", sans-serif;\n}\n\n@media(min-width: 1024px) {\n dt-article {\n font-size: 20px;\n }\n}\n\ndt-article h1 {\n font-weight: 700;\n font-size: 32px;\n line-height: 1.1em;\n /*-webkit-font-smoothing: antialiased;*/\n}\n\n@media(min-width: 1024px) {\n dt-article h1 {\n font-size: 50px;\n margin-bottom: 12px;\n letter-spacing: -0.025em;\n }\n}\n\n@media(min-width: 1024px) {\n dt-article > h1:first-of-type {\n margin-top: 100px;\n }\n}\n\ndt-article h2 {\n font-weight: 400;\n font-size: 28px;\n line-height: 1.25em;\n margin-top: 12px;\n margin-bottom: 24px;\n}\n\ndt-article h1 + h2 {\n padding-bottom: 48px;\n margin-bottom: 48px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n}\n\ndt-article h3 {\n font-weight: 700;\n font-size: 20px;\n line-height: 1.4em;\n margin-top: 24px;\n margin-bottom: 24px;\n}\n\ndt-article h4 {\n font-weight: 600;\n text-transform: uppercase;\n font-size: 14px;\n line-height: 1.4em;\n}\n\ndt-article a {\n color: inherit;\n}\n\ndt-article p {\n margin-bottom: 24px;\n -webkit-font-smoothing: antialiased;\n /*font-family: Georgia, serif;*/\n}\n\ndt-article p a {\n /*text-decoration: none;*/\n /*background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.25) 50%, rgba(0, 0, 0, 0) 50%);*/\n /*background-repeat: repeat-x;*/\n /*background-size: 2px 1em;*/\n /*background-position: 0 1.25em;*/\n}\n\ndt-article p .link {\n text-decoration: underline;\n cursor: pointer;\n}\n\n\n\ndt-article ul {\n padding-left: 20px;\n}\n\ndt-article li {\n /*margin-bottom: 24px;*/\n}\n\ndt-article pre {\n font-size: 14px;\n margin-bottom: 20px;\n}\n\n\ndt-article hr {\n border: none;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\ndt-article section {\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\n\n/* Figure */\n\ndt-article figure {\n position: relative;\n margin-top: 30px;\n margin-bottom: 30px;\n}\n\n@media(min-width: 1024px) {\n dt-article figure {\n margin-top: 48px;\n margin-bottom: 48px;\n }\n}\n\ndt-article figure img {\n width: 100%;\n}\n\ndt-article figure svg text,\ndt-article figure svg tspan {\n}\n\ndt-article figure figcaption {\n color: rgba(0, 0, 0, 0.6);\n font-size: 12px;\n line-height: 1.5em;\n}\n@media(min-width: 1024px) {\n dt-article figure figcaption {\n font-size: 13px;\n }\n}\n\ndt-article figure.external img {\n background: white;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\n padding: 18px;\n box-sizing: border-box;\n}\n\ndt-article figure figcaption a {\n color: rgba(0, 0, 0, 0.6);\n}\n\n/*dt-article figure figcaption::before {\n position: relative;\n display: block;\n top: -20px;\n content: "";\n width: 25px;\n border-top: 1px solid rgba(0, 0, 0, 0.3);\n}*/\n\ndt-article span.equation-mimic {\n font-family: georgia;\n font-size: 115%;\n font-style: italic;\n}\n\ndt-article figure figcaption b {\n font-weight: 600;\n color: rgba(0, 0, 0, 1.0);\n}\n',u='/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\n\n code {\n white-space:pre-wrap;\n background: rgba(0, 0, 0, 0.04);\n border-radius: 2px;\n padding: 4px 7px;\n font-size: 15px;\n color: rgba(0, 0, 0, 0.6);\n }\n\n pre code {\n display: block;\n background: white;\n border: 1px solid rgba(0, 0, 0, 0.08);\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05);\n }\n\n\ncode[class*="language-"],\npre[class*="language-"] {\n\tcolor: black;\n\tbackground: none;\n\ttext-shadow: 0 1px white;\n\tfont-family: Consolas, Monaco, \'Andale Mono\', \'Ubuntu Mono\', monospace;\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-break: normal;\n\tword-wrap: normal;\n\tline-height: 1.5;\n\n\t-moz-tab-size: 4;\n\t-o-tab-size: 4;\n\ttab-size: 4;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n}\n\npre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,\ncode[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {\n\ttext-shadow: none;\n\tbackground: #b3d4fc;\n}\n\npre[class*="language-"]::selection, pre[class*="language-"] ::selection,\ncode[class*="language-"]::selection, code[class*="language-"] ::selection {\n\ttext-shadow: none;\n\tbackground: #b3d4fc;\n}\n\n@media print {\n\tcode[class*="language-"],\n\tpre[class*="language-"] {\n\t\ttext-shadow: none;\n\t}\n}\n\n/* Code blocks */\npre[class*="language-"] {\n\toverflow: auto;\n}\n\n:not(pre) > code[class*="language-"],\npre[class*="language-"] {\n}\n\n/* Inline code */\n:not(pre) > code[class*="language-"] {\n\twhite-space: normal;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n\tcolor: slategray;\n}\n\n.token.punctuation {\n\tcolor: #999;\n}\n\n.namespace {\n\topacity: .7;\n}\n\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n\tcolor: #905;\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n\tcolor: #690;\n}\n\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string {\n\tcolor: #a67f59;\n\tbackground: hsla(0, 0%, 100%, .5);\n}\n\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n\tcolor: #07a;\n}\n\n.token.function {\n\tcolor: #DD4A68;\n}\n\n.token.regex,\n.token.important,\n.token.variable {\n\tcolor: #e90;\n}\n\n.token.important,\n.token.bold {\n\tfont-weight: bold;\n}\n.token.italic {\n\tfont-style: italic;\n}\n\n.token.entity {\n\tcursor: help;\n}\n',h=function(t,e){var n=t.createElement("style");n.textContent=l+c+p+u,t.querySelector("head").appendChild(n)},g='\n \n\n',d='\n\n\n
\n \n \n
\n',f=function(t,e){t.querySelector("dt-header").innerHTML=d},m='\n\n\n
\n

References

\n \n

Errors, Reuse, and Citation

\n

If you see mistakes or want to suggest changes, please submit a pull request on github.

\n

Diagrams and text are licensed under Creative Commons Attribution CC-BY 2.0, unless noted otherwise, with the source available on available on github. The figures that have been reused from other sources don\'t fall under this license and can be recognized by a note in their caption: “Figure from …”.

\n

For attribution in academic contexts, please cite this work as

\n
\n  

BibTeX citation

\n
\n
\n',b=function(t,e){t.querySelector("dt-appendix").innerHTML=m},y='\n\n\n
\n is dedicated to clear explanations of machine learning\n
\n",x=function(t,e){t.querySelector("dt-footer").innerHTML=y},k=function(t,e){function n(t){if(!(t in e.citations))return"?";var n=e.citations[t],i=n.author.split(" and ");i=i.map(function(t){return t.split(",")[0].trim()});var r=n.year;return 1==i.length?i[0]+", "+r:2==i.length?i[0]+" & "+i[1]+", "+r:i.length>2?i[0]+", et al., "+r:void 0}function i(t){if(t){var e=t.author.split(" and "),n="",i=e.map(function(t){var e=t.split(",")[0].trim(),n=t.split(",")[1];if(void 0!=n){var i=n.trim().split(" ").map(function(t){return t.trim()[0]});return e+", "+i.join(".")+"."}return e});if(e.length>1?(n+=i.slice(0,e.length-1).join(", "),n+=" and "+i[e.length-1]):n+=i[0],n+=", "+t.year+". ",n+=t.title+". ",n+=t.journal||t.booktitle||"","volume"in t){var r=t.issue||t.number;r=void 0!=r?"("+r+")":"",n+=", Vol "+t.volume+r}return"pages"in t&&(n+=", pp. "+t.pages),n+=". "}return"?"}var r=Object.keys(e.citations).map(function(t){return e.citations[t]});r.sort(function(t,e){return t.author.localeCompare(e.author)});var a=[].slice.apply(t.querySelectorAll("dt-cite"));a.forEach(function(t){var e=t.textContent.split(","),i=e.map(n).join(", ");t.innerHTML=i});var o=t.querySelector("dt-bibliography"),s=t.createElement("ol");r.forEach(function(e){var n=t.createElement("li");n.textContent=i(e),s.appendChild(n)}),o.appendChild(s)},v=t(function(t,e){(function(){function e(t){this.tokens=[],this.tokens.links={},this.options=t||p.defaults,this.rules=u.normal,this.options.gfm&&(this.options.tables?this.rules=u.tables:this.rules=u.gfm)}function n(t,e){if(this.options=e||p.defaults,this.links=t,this.rules=h.normal,this.renderer=this.options.renderer||new i,this.renderer.options=this.options,!this.links)throw new Error("Tokens array requires a `links` property.");this.options.gfm?this.options.breaks?this.rules=h.breaks:this.rules=h.gfm:this.options.pedantic&&(this.rules=h.pedantic)}function i(t){this.options=t||{}}function r(t){this.tokens=[],this.token=null,this.options=t||p.defaults,this.options.renderer=this.options.renderer||new i,this.renderer=this.options.renderer,this.renderer.options=this.options}function a(t,e){return t.replace(e?/&/g:/&(?!#?\w+;)/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function o(t){return t.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/g,function(t,e){return e=e.toLowerCase(),"colon"===e?":":"#"===e.charAt(0)?"x"===e.charAt(1)?String.fromCharCode(parseInt(e.substring(2),16)):String.fromCharCode(+e.substring(1)):""})}function s(t,e){return t=t.source,e=e||"",function n(i,r){return i?(r=r.source||r,r=r.replace(/(^|[^\[])\^/g,"$1"),t=t.replace(i,r),n):new RegExp(t,e)}}function l(){}function c(t){for(var e,n,i=arguments,r=1;rAn error occured:

"+a(t.message+"",!0)+"
";throw t}}var u={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:l,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:l,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,blockquote:/^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,def:/^ *\[([^\]]+)\]: *]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:l,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};u.bullet=/(?:[*+-]|\d+\.)/,u.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/,u.item=s(u.item,"gm")(/bull/g,u.bullet)(),u.list=s(u.list)(/bull/g,u.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+u.def.source+")")(),u.blockquote=s(u.blockquote)("def",u.def)(),u._tag="(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b",u.html=s(u.html)("comment",//)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/])*?>/)(/tag/g,u._tag)(),u.paragraph=s(u.paragraph)("hr",u.hr)("heading",u.heading)("lheading",u.lheading)("blockquote",u.blockquote)("tag","<"+u._tag)("def",u.def)(),u.normal=c({},u),u.gfm=c({},u.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),u.gfm.paragraph=s(u.paragraph)("(?!","(?!"+u.gfm.fences.source.replace("\\1","\\2")+"|"+u.list.source.replace("\\1","\\3")+"|")(),u.tables=c({},u.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/}),e.rules=u,e.lex=function(t,n){var i=new e(n);return i.lex(t)},e.prototype.lex=function(t){return t=t.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(t,!0)},e.prototype.token=function(t,e,n){for(var i,r,a,o,s,l,c,p,h,g=this,t=t.replace(/^ +$/gm,"");t;)if((a=g.rules.newline.exec(t))&&(t=t.substring(a[0].length),a[0].length>1&&g.tokens.push({type:"space"})),a=g.rules.code.exec(t))t=t.substring(a[0].length),a=a[0].replace(/^ {4}/gm,""),g.tokens.push({type:"code",text:g.options.pedantic?a:a.replace(/\n+$/,"")});else if(a=g.rules.fences.exec(t))t=t.substring(a[0].length),g.tokens.push({type:"code",lang:a[2],text:a[3]||""});else if(a=g.rules.heading.exec(t))t=t.substring(a[0].length),g.tokens.push({type:"heading",depth:a[1].length,text:a[2]});else if(e&&(a=g.rules.nptable.exec(t))){for(t=t.substring(a[0].length),l={type:"table",header:a[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:a[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:a[3].replace(/\n$/,"").split("\n")},p=0;p ?/gm,""),g.token(a,e,!0),g.tokens.push({type:"blockquote_end"});else if(a=g.rules.list.exec(t)){for(t=t.substring(a[0].length),o=a[2],g.tokens.push({type:"list_start",ordered:o.length>1}),a=a[0].match(g.rules.item),i=!1,h=a.length,p=0;p1&&s.length>1||(t=a.slice(p+1).join("\n")+t,p=h-1)),r=i||/\n\n(?!\s*$)/.test(l),p!==h-1&&(i="\n"===l.charAt(l.length-1),r||(r=i)),g.tokens.push({type:r?"loose_item_start":"list_item_start"}),g.token(l,!1,n),g.tokens.push({type:"list_item_end"});g.tokens.push({type:"list_end"})}else if(a=g.rules.html.exec(t))t=t.substring(a[0].length),g.tokens.push({type:g.options.sanitize?"paragraph":"html",pre:!g.options.sanitizer&&("pre"===a[1]||"script"===a[1]||"style"===a[1]),text:a[0]});else if(!n&&e&&(a=g.rules.def.exec(t)))t=t.substring(a[0].length),g.tokens.links[a[1].toLowerCase()]={href:a[2],title:a[3]};else if(e&&(a=g.rules.table.exec(t))){for(t=t.substring(a[0].length),l={type:"table",header:a[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:a[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:a[3].replace(/(?: *\| *)?\n$/,"").split("\n")},p=0;p])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:l,tag:/^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:l,text:/^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/,h.link=s(h.link)("inside",h._inside)("href",h._href)(),h.reflink=s(h.reflink)("inside",h._inside)(),h.normal=c({},h),h.pedantic=c({},h.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, -em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/}),h.gfm=c({},h.normal,{escape:s(h.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:s(h.text)("]|","~]|")("|","|https?://|")()}),h.breaks=c({},h.gfm,{br:s(h.br)("{2,}","*")(),text:s(h.gfm.text)("{2,}","*")()}),n.rules=h,n.output=function(t,e,i){var r=new n(e,i);return r.output(t)},n.prototype.output=function(t){for(var e,n,i,r,o=this,s="";t;)if(r=o.rules.escape.exec(t))t=t.substring(r[0].length),s+=r[1];else if(r=o.rules.autolink.exec(t))t=t.substring(r[0].length),"@"===r[2]?(n=":"===r[1].charAt(6)?o.mangle(r[1].substring(7)):o.mangle(r[1]),i=o.mangle("mailto:")+n):(n=a(r[1]),i=n),s+=o.renderer.link(i,null,n);else if(o.inLink||!(r=o.rules.url.exec(t))){if(r=o.rules.tag.exec(t))!o.inLink&&/^/i.test(r[0])&&(o.inLink=!1),t=t.substring(r[0].length),s+=o.options.sanitize?o.options.sanitizer?o.options.sanitizer(r[0]):a(r[0]):r[0];else if(r=o.rules.link.exec(t))t=t.substring(r[0].length),o.inLink=!0,s+=o.outputLink(r,{href:r[2],title:r[3]}),o.inLink=!1;else if((r=o.rules.reflink.exec(t))||(r=o.rules.nolink.exec(t))){if(t=t.substring(r[0].length),e=(r[2]||r[1]).replace(/\s+/g," "),e=o.links[e.toLowerCase()],!e||!e.href){s+=r[0].charAt(0),t=r[0].substring(1)+t;continue}o.inLink=!0,s+=o.outputLink(r,e),o.inLink=!1}else if(r=o.rules.strong.exec(t))t=t.substring(r[0].length),s+=o.renderer.strong(o.output(r[2]||r[1]));else if(r=o.rules.em.exec(t))t=t.substring(r[0].length),s+=o.renderer.em(o.output(r[2]||r[1]));else if(r=o.rules.code.exec(t))t=t.substring(r[0].length),s+=o.renderer.codespan(a(r[2],!0));else if(r=o.rules.br.exec(t))t=t.substring(r[0].length),s+=o.renderer.br();else if(r=o.rules.del.exec(t))t=t.substring(r[0].length),s+=o.renderer.del(o.output(r[1]));else if(r=o.rules.text.exec(t))t=t.substring(r[0].length),s+=o.renderer.text(a(o.smartypants(r[0])));else if(t)throw new Error("Infinite loop on byte: "+t.charCodeAt(0))}else t=t.substring(r[0].length),n=a(r[1]),i=n,s+=o.renderer.link(i,null,n);return s},n.prototype.outputLink=function(t,e){var n=a(e.href),i=e.title?a(e.title):null;return"!"!==t[0].charAt(0)?this.renderer.link(n,i,this.output(t[1])):this.renderer.image(n,i,a(t[1]))},n.prototype.smartypants=function(t){return this.options.smartypants?t.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014\/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014\/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):t},n.prototype.mangle=function(t){if(!this.options.mangle)return t;for(var e,n="",i=t.length,r=0;r.5&&(e="x"+e.toString(16)),n+="&#"+e+";";return n},i.prototype.code=function(t,e,n){if(this.options.highlight){var i=this.options.highlight(t,e);null!=i&&i!==t&&(n=!0,t=i)}return e?'
'+(n?t:a(t,!0))+"\n
\n":"
"+(n?t:a(t,!0))+"\n
"},i.prototype.blockquote=function(t){return"
\n"+t+"
\n"},i.prototype.html=function(t){return t},i.prototype.heading=function(t,e,n){return"'+t+"\n"},i.prototype.hr=function(){return this.options.xhtml?"
\n":"
\n"},i.prototype.list=function(t,e){var n=e?"ol":"ul";return"<"+n+">\n"+t+"\n"},i.prototype.listitem=function(t){return"
  • "+t+"
  • \n"},i.prototype.paragraph=function(t){return"

    "+t+"

    \n"},i.prototype.table=function(t,e){return"\n\n"+t+"\n\n"+e+"\n
    \n"},i.prototype.tablerow=function(t){return"\n"+t+"\n"},i.prototype.tablecell=function(t,e){var n=e.header?"th":"td",i=e.align?"<"+n+' style="text-align:'+e.align+'">':"<"+n+">";return i+t+"\n"},i.prototype.strong=function(t){return""+t+""},i.prototype.em=function(t){return""+t+""},i.prototype.codespan=function(t){return""+t+""},i.prototype.br=function(){return this.options.xhtml?"
    ":"
    "},i.prototype.del=function(t){return""+t+""},i.prototype.link=function(t,e,n){if(this.options.sanitize){try{var i=decodeURIComponent(o(t)).replace(/[^\w:]/g,"").toLowerCase()}catch(t){return""}if(0===i.indexOf("javascript:")||0===i.indexOf("vbscript:"))return""}var r='
    "},i.prototype.image=function(t,e,n){var i=''+n+'":">"},i.prototype.text=function(t){return t},r.parse=function(t,e,n){var i=new r(e,n);return i.parse(t)},r.prototype.parse=function(t){var e=this;this.inline=new n(t.links,this.options,this.renderer),this.tokens=t.reverse();for(var i="";this.next();)i+=e.tok();return i},r.prototype.next=function(){return this.token=this.tokens.pop()},r.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},r.prototype.parseText=function(){for(var t=this,e=this.token.text;"text"===this.peek().type;)e+="\n"+t.next().text;return this.inline.output(e)},r.prototype.tok=function(){var t=this;switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text);case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,n,i,r,a,o="",s="";for(i="",e=0;et.length)break t;if(!(x instanceof r)){p.lastIndex=0;var k=p.exec(x),v=1;if(!k&&g&&b!=a.length-1){if(p.lastIndex=y,k=p.exec(t),!k)break;for(var w=k.index+(h?k[1].length:0),_=k.index+k[0].length,S=b,E=y,A=a.length;S=E&&(++b,y=E);if(a[b]instanceof r||a[S-1].greedy)continue;v=S-b,x=t.slice(y,E),k.index-=y}if(k){h&&(d=k[1].length);var w=k.index+d,k=k[0].slice(d),_=w+k.length,j=x.slice(0,w),z=x.slice(_),C=[b,v];j&&C.push(j);var L=new r(s,u?i.tokenize(k,u):k,f,k,g);C.push(L),z&&C.push(z),Array.prototype.splice.apply(a,C)}}}}}return a},hooks:{all:{},add:function(t,e){var n=i.hooks.all;n[t]=n[t]||[],n[t].push(e)},run:function(t,e){var n=i.hooks.all[t];if(n&&n.length)for(var r,a=0;r=n[a++];)r(e)}}},r=i.Token=function(t,e,n,i,r){this.type=t,this.content=e,this.alias=n,this.length=0|(i||"").length,this.greedy=!!r};if(r.stringify=function(t,e,n){if("string"==typeof t)return t;if("Array"===i.util.type(t))return t.map(function(n){return r.stringify(n,e,t)}).join("");var a={type:t.type,content:r.stringify(t.content,e,n),tag:"span",classes:["token",t.type],attributes:{},language:e,parent:n};if("comment"==a.type&&(a.attributes.spellcheck="true"),t.alias){var o="Array"===i.util.type(t.alias)?t.alias:[t.alias];Array.prototype.push.apply(a.classes,o)}i.hooks.run("wrap",a);var s=Object.keys(a.attributes).map(function(t){return t+'="'+(a.attributes[t]||"").replace(/"/g,""")+'"'}).join(" ");return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+(s?" "+s:"")+">"+a.content+""},!e.document)return e.addEventListener?(e.addEventListener("message",function(t){var n=JSON.parse(t.data),r=n.language,a=n.code,o=n.immediateClose;e.postMessage(i.highlight(a,i.languages[r],r)),o&&e.close()},!1),e.Prism):e.Prism;var a=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return a&&(i.filename=a.src,document.addEventListener&&!a.hasAttribute("data-manual")&&("loading"!==document.readyState?window.requestAnimationFrame?window.requestAnimationFrame(i.highlightAll):window.setTimeout(i.highlightAll,16):document.addEventListener("DOMContentLoaded",i.highlightAll))),e.Prism}();t.exports&&(t.exports=n),"undefined"!=typeof r&&(r.Prism=n),n.languages.markup={comment://,prolog:/<\?[\w\W]+?\?>/,doctype://i,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},n.hooks.add("wrap",function(t){"entity"===t.type&&(t.attributes.title=t.content.replace(/&/,"&"))}),n.languages.xml=n.languages.markup,n.languages.html=n.languages.markup,n.languages.mathml=n.languages.markup,n.languages.svg=n.languages.markup,n.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*?(?=\s*\{)/,string:{pattern:/("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,greedy:!0},property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},n.languages.css.atrule.inside.rest=n.util.clone(n.languages.css),n.languages.markup&&(n.languages.insertBefore("markup","tag",{style:{pattern:/()[\w\W]*?(?=<\/style>)/i,lookbehind:!0,inside:n.languages.css,alias:"language-css"}}),n.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|').*?\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:n.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:n.languages.css}},alias:"language-css"}},n.languages.markup.tag)),n.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:{pattern:/(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(true|false)\b/,function:/[a-z0-9_]+(?=\()/i,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/},n.languages.javascript=n.languages.extend("clike",{keyword:/\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,function:/[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*\*?|\/|~|\^|%|\.{3}/}),n.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^\/])\/(?!\/)(\[.+?]|\\.|[^\/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0,greedy:!0}}),n.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\\\|\\?[^\\])*?`/,greedy:!0,inside:{interpolation:{pattern:/\$\{[^}]+\}/,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:n.languages.javascript}},string:/[\s\S]+/}}}),n.languages.markup&&n.languages.insertBefore("markup","tag",{script:{pattern:/()[\w\W]*?(?=<\/script>)/i,lookbehind:!0,inside:n.languages.javascript,alias:"language-javascript"}}),n.languages.js=n.languages.javascript,function(){"undefined"!=typeof self&&self.Prism&&self.document&&document.querySelector&&(self.Prism.fileHighlight=function(){var t={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"};Array.prototype.forEach&&Array.prototype.slice.call(document.querySelectorAll("pre[data-src]")).forEach(function(e){for(var i,r=e.getAttribute("data-src"),a=e,o=/\blang(?:uage)?-(?!\*)(\w+)\b/i;a&&!o.test(a.className);)a=a.parentNode;if(a&&(i=(e.className.match(o)||[,""])[1]),!i){var s=(r.match(/\.(\w+)$/)||[,""])[1];i=t[s]||s}var l=document.createElement("code");l.className="language-"+i,e.textContent="",l.textContent="Loading…",e.appendChild(l);var c=new XMLHttpRequest;c.open("GET",r,!0),c.onreadystatechange=function(){4==c.readyState&&(c.status<400&&c.responseText?(l.textContent=c.responseText,n.highlightElement(l)):c.status>=400?l.textContent="✖ Error "+c.status+" while fetching file: "+c.statusText:l.textContent="✖ Error: File does not exist or is empty")},c.send(null)})},document.addEventListener("DOMContentLoaded",self.Prism.fileHighlight))}()}),S=function(t,e){var n=[].slice.call(t.querySelectorAll("code"));n.forEach(function(t){_.highlightElement(t)})},E={title:"Experiments in Handwriting with a Neural Network",description:"Several interactive visualizations of a generative model of handwriting. Some are fun, some are serious.",url:"http://distill.pub/2016/handwriting/",github:"https://github.com/distillpub/post--handwriting",firstPublished:"Tue Dec 6 2016 21:39:33 GMT-0700 (PDT)",lastPublished:"Tue Dec 6 2016 21:39:33 GMT-0700 (PDT)",authors:[{firstName:"Shan",lastName:"Carter",personalURL:"http://shancarter.com",affiliation:"Google Brain",affiliationURL:"http://g.co/brain"},{firstName:"David",lastName:"Ha",personalURL:"https://github.com/hardmaru",affiliation:"Google Brain",affiliationURL:"http://g.co/brain"},{firstName:"Ian",lastName:"Johnson",personalURL:"https://github.com/enjalot",affiliation:"Google Cloud",affiliationURL:""},{firstName:"Chris",lastName:"Olah",personalURL:"http://colah.github.io/",affiliation:"Google Brain",affiliationURL:"http://g.co/brain"}],journal:{title:"Distill",full_title:"Distill",abbrev_title:"Distill",url:"http://distill.pub",doi:"00.0000/dstl",issn:"0000-0000"}};return window.document&&i(window.document,E),i}(); +document.write('');var dl=function(){"use strict";function t(t,e){return e={exports:{}},t(e,e.exports),e.exports}function e(t,e){t.innerHTML+=e}function n(t){var e="citation_title="+t.title+";";return t.author.split(" and ").forEach(function(t){e+="citation_author="+t.trim()+";"}),"journal"in t&&(e+="citation_journal_title="+t.journal+";"),"volume"in t&&(e+="citation_volume="+t.volume+";"),("issue"in t||"number"in t)&&(e+="citation_number="+(t.issue||t.number)+";"),e}function i(t,e){h(t,e),document.addEventListener("DOMContentLoaded",function(n){o(t,e),s(t,e),f(t,e),b(t,e),x(t,e),w(t,e),S(t,e),k(t,e),console.log("final data:");for(var i in e)console.log(" ",i,": ",e[i])})}var r="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},a=t(function(t,e){!function(t){function e(){this.months=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],this.notKey=[",","{","}"," ","="],this.pos=0,this.input="",this.entries=new Array,this.currentEntry="",this.setInput=function(t){this.input=t},this.getEntries=function(){return this.entries},this.isWhitespace=function(t){return" "==t||"\r"==t||"\t"==t||"\n"==t},this.match=function(t,e){if(void 0!=e&&null!=e||(e=!0),this.skipWhitespace(e),this.input.substring(this.pos,this.pos+t.length)!=t)throw"Token mismatch, expected "+t+", found "+this.input.substring(this.pos);this.pos+=t.length,this.skipWhitespace(e)},this.tryMatch=function(t,e){return void 0!=e&&null!=e||(e=!0),this.skipWhitespace(e),this.input.substring(this.pos,this.pos+t.length)==t},this.matchAt=function(){for(var t=this;this.input.length>this.pos&&"@"!=this.input[this.pos];)t.pos++;return"@"==this.input[this.pos]},this.skipWhitespace=function(t){for(var e=this;this.isWhitespace(this.input[this.pos]);)e.pos++;if("%"==this.input[this.pos]&&1==t){for(;"\n"!=this.input[this.pos];)e.pos++;this.skipWhitespace(t)}},this.value_braces=function(){var t=this,e=0;this.match("{",!1);for(var n=this.pos,i=!1;;){if(!i)if("}"==t.input[t.pos]){if(!(e>0)){var r=t.pos;return t.match("}",!1),t.input.substring(n,r)}e--}else if("{"==t.input[t.pos])e++;else if(t.pos>=t.input.length-1)throw"Unterminated value";i="\\"==t.input[t.pos]&&0==i,t.pos++}},this.value_comment=function(){for(var t=this,e="",n=0;!this.tryMatch("}",!1)||0!=n;){if(e+=t.input[t.pos],"{"==t.input[t.pos]&&n++,"}"==t.input[t.pos]&&n--,t.pos>=t.input.length-1)throw"Unterminated value:"+t.input.substring(start);t.pos++}return e},this.value_quotes=function(){var t=this;this.match('"',!1);for(var e=this.pos,n=!1;;){if(!n){if('"'==t.input[t.pos]){var i=t.pos;return t.match('"',!1),t.input.substring(e,i)}if(t.pos>=t.input.length-1)throw"Unterminated value:"+t.input.substring(e)}n="\\"==t.input[t.pos]&&0==n,t.pos++}},this.single_value=function(){var t=this.pos;if(this.tryMatch("{"))return this.value_braces();if(this.tryMatch('"'))return this.value_quotes();var e=this.key();if(e.match("^[0-9]+$"))return e;if(this.months.indexOf(e.toLowerCase())>=0)return e.toLowerCase();throw"Value expected:"+this.input.substring(t)+" for key: "+e},this.value=function(){var t=this,e=[];for(e.push(this.single_value());this.tryMatch("#");)t.match("#"),e.push(t.single_value());return e.join("")},this.key=function(){for(var t=this,e=this.pos;;){if(t.pos>=t.input.length)throw"Runaway key";if(t.notKey.indexOf(t.input[t.pos])>=0)return t.input.substring(e,t.pos);t.pos++}},this.key_equals_value=function(){var t=this.key();if(this.tryMatch("=")){this.match("=");var e=this.value();return[t,e]}throw"... = value expected, equals sign missing:"+this.input.substring(this.pos)},this.key_value_list=function(){var t=this,e=this.key_equals_value();for(this.currentEntry.entryTags={},this.currentEntry.entryTags[e[0]]=e[1];this.tryMatch(",")&&(t.match(","),!t.tryMatch("}"));)e=t.key_equals_value(),t.currentEntry.entryTags[e[0]]=e[1]},this.entry_body=function(t){this.currentEntry={},this.currentEntry.citationKey=this.key(),this.currentEntry.entryType=t.substring(1),this.match(","),this.key_value_list(),this.entries.push(this.currentEntry)},this.directive=function(){return this.match("@"),"@"+this.key()},this.preamble=function(){this.currentEntry={},this.currentEntry.entryType="PREAMBLE",this.currentEntry.entry=this.value_comment(),this.entries.push(this.currentEntry)},this.comment=function(){this.currentEntry={},this.currentEntry.entryType="COMMENT",this.currentEntry.entry=this.value_comment(),this.entries.push(this.currentEntry)},this.entry=function(t){this.entry_body(t)},this.bibtex=function(){for(var t=this;this.matchAt();){var e=t.directive();t.match("{"),"@STRING"==e?t.string():"@PREAMBLE"==e?t.preamble():"@COMMENT"==e?t.comment():t.entry(e),t.match("}")}}}t.toJSON=function(t){var n=new e;return n.setInput(t),n.bibtex(),n.entries},t.toBibtex=function(t){var e="";for(var n in t){if(e+="@"+t[n].entryType,e+="{",t[n].citationKey&&(e+=t[n].citationKey+", "),t[n].entry&&(e+=t[n].entry),t[n].entryTags){var i="";for(var r in t[n].entryTags)0!=i.length&&(i+=", "),i+=r+"= {"+t[n].entryTags[r]+"}";e+=i}e+="}\n\n"}return e}}(e)}),o=function(t,e){var n="\n @article{gregor2015draw,\n title={DRAW: A recurrent neural network for image generation},\n author={Gregor, Karol and Danihelka, Ivo and Graves, Alex and Rezende, Danilo Jimenez and Wierstra, Daan},\n journal={arXivreprint arXiv:1502.04623},\n year={2015}\n }\n @article{mercier2011humans,\n title={Why do humans reason? Arguments for an argumentative theory},\n author={Mercier, Hugo and Sperber, Dan},\n journal={Behavioral and brain sciences},\n volume={34},\n number={02},\n pages={57--74},\n year={2011},\n publisher={Cambridge Univ Press}\n }",i={};a.toJSON(n).forEach(function(t){i[t.citationKey]=t.entryTags,i[t.citationKey].type=t.entryType});var r={},o=[].slice.apply(t.querySelectorAll("dt-cite"));o.forEach(function(t){var e=t.textContent.split(",");e.forEach(function(t){i[t]?r[t]=i[t]:console.warn("No bibliography entry found for: "+t)})}),e.citations=r},s=function(t,i){t.querySelector("html").setAttribute("lang","en");var r=t.querySelector("head");t.querySelector("meta[charset]")||e(r,''),t.querySelector("meta[name=viewport]")||e(r,''),e(r,'\n \n \n \n \n '+i.title+"\n "),e(r,'\n \n \n \n '),i.authors.forEach(function(t){e(r,'\n ')}),e(r,'\n \n \n \n \n \n \n \n \n '),e(r,'\n \n \n \n \n \n \n \n \n '),e(r,'\n \n \n \n \n \n \n \n \n \n \n \n \n '),i.authors.forEach(function(t){e(r,'\n \n \n ')}),Object.keys(i.citations).forEach(function(t){console.log(t),e(r,'\n \n ')})},l="html {\n font: 400 15px/1.55em -apple-system, BlinkMacSystemFont, \"Roboto\", sans-serif;\n}\n\nhtml {\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\n\n/*\nhtml, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td,\narticle, aside, canvas, details, embed,\nfigure, figcaption, footer, header, hgroup,\nmenu, nav, output, ruby, section, summary,\ntime, mark, audio, video {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\tfont-size: 100%;\n\tfont: inherit;\n\tvertical-align: baseline;\n}\narticle, aside, details, figcaption, figure,\nfooter, header, hgroup, menu, nav, section {\n\tdisplay: block;\n}\nbody {\n\tline-height: 1;\n}\nol, ul {\n\tlist-style: none;\n}\nblockquote, q {\n\tquotes: none;\n}\nblockquote:before, blockquote:after,\nq:before, q:after {\n\tcontent: '';\n\tcontent: none;\n}\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}*/\n",c=".l-body,\n.l-page,\ndt-article > * {\n margin-left: 24px;\n margin-right: 24px;\n box-sizing: border-box;\n}\n\n@media(min-width: 768px) {\n .l-body,\n .l-page,\n dt-article > * {\n margin-left: 72px;\n margin-right: 72px;\n }\n}\n\n@media(min-width: 1080px) {\n .l-body,\n dt-article > * {\n margin-left: calc(50% - 984px / 2);\n width: 648px;\n }\n .l-body-outset,\n dt-article .l-body-outset {\n margin-left: calc(50% - 984px / 2 - 24px);\n width: calc(648px + 48px);\n }\n .l-middle,\n dt-article .l-middle {\n width: 816px;\n margin-left: calc(50% - 984px / 2);\n }\n .l-page,\n dt-article .l-page {\n width: 984px;\n margin-left: auto;\n margin-right: auto;\n }\n .l-page-outset,\n dt-article .l-page-outset {\n width: 1080px;\n margin-left: auto;\n margin-right: auto;\n }\n .l-screen,\n dt-article .l-screen {\n margin-left: auto;\n margin-right: auto;\n width: auto;\n }\n .l-screen-inset,\n dt-article .l-screen-inset {\n margin-left: 24px;\n margin-right: 24px;\n width: auto;\n }\n .l-gutter,\n dt-article .l-gutter {\n clear: both;\n float: right;\n margin-top: 0;\n margin-left: 24px;\n margin-right: calc((100vw - 960px) / 2);\n width: calc((984px - 648px) / 2 - 24px);\n }\n /* Side */\n .side.l-body,\n dt-article .side.l-body {\n clear: both;\n float: right;\n margin-top: 0;\n margin-left: 48px;\n margin-right: calc((100vw - 984px + 648px) / 2);\n width: calc(648px / 2 - 24px);\n }\n .side.l-body-outset,\n dt-article .side.l-body-outset {\n clear: both;\n float: right;\n margin-top: 0;\n margin-left: 48px;\n margin-right: calc((100vw - 984px + 648px - 48px) / 2);\n width: calc(648px / 2 - 48px + 24px);\n }\n .side.l-page,\n dt-article .side.l-page {\n clear: both;\n float: right;\n margin-top: 0;\n margin-left: 48px;\n margin-right: calc((100vw - 984px) / 2);\n width: calc(960px / 2 - 48px);\n }\n}\n",p='dt-article {\n color: rgba(0, 0, 0, 0.8);\n font: 15px/1.55em -apple-system, BlinkMacSystemFont, "Roboto", sans-serif;\n}\n\n@media(min-width: 1024px) {\n dt-article {\n font-size: 20px;\n }\n}\n\ndt-article h1 {\n font-weight: 700;\n font-size: 32px;\n line-height: 1.1em;\n /*-webkit-font-smoothing: antialiased;*/\n}\n\n@media(min-width: 1024px) {\n dt-article h1 {\n font-size: 50px;\n margin-bottom: 12px;\n letter-spacing: -0.025em;\n }\n}\n\n@media(min-width: 1024px) {\n dt-article > h1:first-of-type {\n margin-top: 100px;\n }\n}\n\ndt-article h2 {\n font-weight: 400;\n font-size: 28px;\n line-height: 1.25em;\n margin-top: 12px;\n margin-bottom: 24px;\n}\n\ndt-article h1 + h2 {\n padding-bottom: 48px;\n margin-bottom: 48px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n}\n\ndt-article h3 {\n font-weight: 700;\n font-size: 20px;\n line-height: 1.4em;\n margin-top: 24px;\n margin-bottom: 24px;\n}\n\ndt-article h4 {\n font-weight: 600;\n text-transform: uppercase;\n font-size: 14px;\n line-height: 1.4em;\n}\n\ndt-article a {\n color: inherit;\n}\n\ndt-article p {\n margin-bottom: 24px;\n -webkit-font-smoothing: antialiased;\n /*font-family: Georgia, serif;*/\n}\n\ndt-article p a {\n /*text-decoration: none;*/\n /*background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.25) 50%, rgba(0, 0, 0, 0) 50%);*/\n /*background-repeat: repeat-x;*/\n /*background-size: 2px 1em;*/\n /*background-position: 0 1.25em;*/\n}\n\ndt-article p .link {\n text-decoration: underline;\n cursor: pointer;\n}\n\n\n\ndt-article ul {\n padding-left: 20px;\n}\n\ndt-article li {\n /*margin-bottom: 24px;*/\n}\n\ndt-article pre {\n font-size: 14px;\n margin-bottom: 20px;\n}\n\n\ndt-article hr {\n border: none;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\ndt-article section {\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\n\n/* Figure */\n\ndt-article figure {\n position: relative;\n margin-top: 30px;\n margin-bottom: 30px;\n}\n\n@media(min-width: 1024px) {\n dt-article figure {\n margin-top: 48px;\n margin-bottom: 48px;\n }\n}\n\ndt-article figure img {\n width: 100%;\n}\n\ndt-article figure svg text,\ndt-article figure svg tspan {\n}\n\ndt-article figure figcaption {\n color: rgba(0, 0, 0, 0.6);\n font-size: 12px;\n line-height: 1.5em;\n}\n@media(min-width: 1024px) {\n dt-article figure figcaption {\n font-size: 13px;\n }\n}\n\ndt-article figure.external img {\n background: white;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\n padding: 18px;\n box-sizing: border-box;\n}\n\ndt-article figure figcaption a {\n color: rgba(0, 0, 0, 0.6);\n}\n\n/*dt-article figure figcaption::before {\n position: relative;\n display: block;\n top: -20px;\n content: "";\n width: 25px;\n border-top: 1px solid rgba(0, 0, 0, 0.3);\n}*/\n\ndt-article span.equation-mimic {\n font-family: georgia;\n font-size: 115%;\n font-style: italic;\n}\n\ndt-article figure figcaption b {\n font-weight: 600;\n color: rgba(0, 0, 0, 1.0);\n}\n\ndt-article > dt-code {\n display: block;\n}\n',u='/**\n * prism.js default theme for JavaScript, CSS and HTML\n * Based on dabblet (http://dabblet.com)\n * @author Lea Verou\n */\n\n code {\n white-space:pre-wrap;\n background: rgba(0, 0, 0, 0.04);\n border-radius: 2px;\n padding: 4px 7px;\n font-size: 15px;\n color: rgba(0, 0, 0, 0.6);\n }\n\n pre code {\n display: block;\n background: white;\n border: 1px solid rgba(0, 0, 0, 0.08);\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05);\n }\n\n\ncode[class*="language-"],\npre[class*="language-"] {\n\tcolor: black;\n\ttext-shadow: 0 1px white;\n\tfont-family: Consolas, Monaco, \'Andale Mono\', \'Ubuntu Mono\', monospace;\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-break: normal;\n\tword-wrap: normal;\n\tline-height: 1.5;\n\n\t-moz-tab-size: 4;\n\t-o-tab-size: 4;\n\ttab-size: 4;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n}\n\npre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,\ncode[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {\n\ttext-shadow: none;\n\tbackground: #b3d4fc;\n}\n\npre[class*="language-"]::selection, pre[class*="language-"] ::selection,\ncode[class*="language-"]::selection, code[class*="language-"] ::selection {\n\ttext-shadow: none;\n\tbackground: #b3d4fc;\n}\n\n@media print {\n\tcode[class*="language-"],\n\tpre[class*="language-"] {\n\t\ttext-shadow: none;\n\t}\n}\n\n/* Code blocks */\npre[class*="language-"] {\n\toverflow: auto;\n}\n\n:not(pre) > code[class*="language-"],\npre[class*="language-"] {\n}\n\n/* Inline code */\n:not(pre) > code[class*="language-"] {\n\twhite-space: normal;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n\tcolor: slategray;\n}\n\n.token.punctuation {\n\tcolor: #999;\n}\n\n.namespace {\n\topacity: .7;\n}\n\n.token.property,\n.token.tag,\n.token.boolean,\n.token.number,\n.token.constant,\n.token.symbol,\n.token.deleted {\n\tcolor: #905;\n}\n\n.token.selector,\n.token.attr-name,\n.token.string,\n.token.char,\n.token.builtin,\n.token.inserted {\n\tcolor: #690;\n}\n\n.token.operator,\n.token.entity,\n.token.url,\n.language-css .token.string,\n.style .token.string {\n\tcolor: #a67f59;\n\tbackground: hsla(0, 0%, 100%, .5);\n}\n\n.token.atrule,\n.token.attr-value,\n.token.keyword {\n\tcolor: #07a;\n}\n\n.token.function {\n\tcolor: #DD4A68;\n}\n\n.token.regex,\n.token.important,\n.token.variable {\n\tcolor: #e90;\n}\n\n.token.important,\n.token.bold {\n\tfont-weight: bold;\n}\n.token.italic {\n\tfont-style: italic;\n}\n\n.token.entity {\n\tcursor: help;\n}\n',h=function(t,e){var n=t.createElement("style");n.textContent=l+c+p+u,t.querySelector("head").appendChild(n)},g='\n \n\n',d='\n\n\n\n',f=function(t,e){t.querySelector("dt-header").innerHTML=d},m='\n\n\n
    \n

    References

    \n \n

    Errors, Reuse, and Citation

    \n

    If you see mistakes or want to suggest changes, please submit a pull request on github.

    \n

    Diagrams and text are licensed under Creative Commons Attribution CC-BY 2.0, unless noted otherwise, with the source available on available on github. The figures that have been reused from other sources don\'t fall under this license and can be recognized by a note in their caption: “Figure from …”.

    \n

    For attribution in academic contexts, please cite this work as

    \n
    \n  

    BibTeX citation

    \n
    \n
    \n',b=function(t,e){t.querySelector("dt-appendix").innerHTML=m},y='\n\n\n
    \n is dedicated to clear explanations of machine learning\n
    \n",x=function(t,e){t.querySelector("dt-footer").innerHTML=y},k=function(t,e){function n(t){if(!(t in e.citations))return"?";var n=e.citations[t],i=n.author.split(" and ");i=i.map(function(t){return t.split(",")[0].trim()});var r=n.year;return 1==i.length?i[0]+", "+r:2==i.length?i[0]+" & "+i[1]+", "+r:i.length>2?i[0]+", et al., "+r:void 0}function i(t){if(t){var e=t.author.split(" and "),n="",i=e.map(function(t){var e=t.split(",")[0].trim(),n=t.split(",")[1];if(void 0!=n){var i=n.trim().split(" ").map(function(t){return t.trim()[0]});return e+", "+i.join(".")+"."}return e});if(e.length>1?(n+=i.slice(0,e.length-1).join(", "),n+=" and "+i[e.length-1]):n+=i[0],n+=", "+t.year+". ",n+=t.title+". ",n+=t.journal||t.booktitle||"","volume"in t){var r=t.issue||t.number;r=void 0!=r?"("+r+")":"",n+=", Vol "+t.volume+r}return"pages"in t&&(n+=", pp. "+t.pages),n+=". "}return"?"}var r=Object.keys(e.citations).map(function(t){return e.citations[t]});r.sort(function(t,e){return t.author.localeCompare(e.author)});var a=[].slice.apply(t.querySelectorAll("dt-cite"));a.forEach(function(t){var e=t.textContent.split(","),i=e.map(n).join(", ");t.innerHTML=i});var o=t.querySelector("dt-bibliography"),s=t.createElement("ol");r.forEach(function(e){var n=t.createElement("li");n.textContent=i(e),s.appendChild(n)}),o.appendChild(s)},v=t(function(t,e){(function(){function e(t){this.tokens=[],this.tokens.links={},this.options=t||p.defaults,this.rules=u.normal,this.options.gfm&&(this.options.tables?this.rules=u.tables:this.rules=u.gfm)}function n(t,e){if(this.options=e||p.defaults,this.links=t,this.rules=h.normal,this.renderer=this.options.renderer||new i,this.renderer.options=this.options,!this.links)throw new Error("Tokens array requires a `links` property.");this.options.gfm?this.options.breaks?this.rules=h.breaks:this.rules=h.gfm:this.options.pedantic&&(this.rules=h.pedantic)}function i(t){this.options=t||{}}function r(t){this.tokens=[],this.token=null,this.options=t||p.defaults,this.options.renderer=this.options.renderer||new i,this.renderer=this.options.renderer,this.renderer.options=this.options}function a(t,e){return t.replace(e?/&/g:/&(?!#?\w+;)/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function o(t){return t.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/g,function(t,e){return e=e.toLowerCase(),"colon"===e?":":"#"===e.charAt(0)?"x"===e.charAt(1)?String.fromCharCode(parseInt(e.substring(2),16)):String.fromCharCode(+e.substring(1)):""})}function s(t,e){return t=t.source,e=e||"",function n(i,r){return i?(r=r.source||r,r=r.replace(/(^|[^\[])\^/g,"$1"),t=t.replace(i,r),n):new RegExp(t,e)}}function l(){}function c(t){for(var e,n,i=arguments,r=1;rAn error occured:

    "+a(t.message+"",!0)+"
    ";throw t}}var u={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:l,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:l,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,blockquote:/^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,def:/^ *\[([^\]]+)\]: *]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:l,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};u.bullet=/(?:[*+-]|\d+\.)/,u.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/,u.item=s(u.item,"gm")(/bull/g,u.bullet)(),u.list=s(u.list)(/bull/g,u.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+u.def.source+")")(),u.blockquote=s(u.blockquote)("def",u.def)(),u._tag="(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b",u.html=s(u.html)("comment",//)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/])*?>/)(/tag/g,u._tag)(),u.paragraph=s(u.paragraph)("hr",u.hr)("heading",u.heading)("lheading",u.lheading)("blockquote",u.blockquote)("tag","<"+u._tag)("def",u.def)(),u.normal=c({},u),u.gfm=c({},u.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),u.gfm.paragraph=s(u.paragraph)("(?!","(?!"+u.gfm.fences.source.replace("\\1","\\2")+"|"+u.list.source.replace("\\1","\\3")+"|")(),u.tables=c({},u.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/}),e.rules=u,e.lex=function(t,n){var i=new e(n);return i.lex(t)},e.prototype.lex=function(t){return t=t.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(t,!0)},e.prototype.token=function(t,e,n){for(var i,r,a,o,s,l,c,p,h,g=this,t=t.replace(/^ +$/gm,"");t;)if((a=g.rules.newline.exec(t))&&(t=t.substring(a[0].length),a[0].length>1&&g.tokens.push({type:"space"})),a=g.rules.code.exec(t))t=t.substring(a[0].length),a=a[0].replace(/^ {4}/gm,""),g.tokens.push({type:"code",text:g.options.pedantic?a:a.replace(/\n+$/,"")});else if(a=g.rules.fences.exec(t))t=t.substring(a[0].length),g.tokens.push({type:"code",lang:a[2],text:a[3]||""});else if(a=g.rules.heading.exec(t))t=t.substring(a[0].length),g.tokens.push({type:"heading",depth:a[1].length,text:a[2]});else if(e&&(a=g.rules.nptable.exec(t))){for(t=t.substring(a[0].length),l={type:"table",header:a[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:a[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:a[3].replace(/\n$/,"").split("\n")},p=0;p ?/gm,""),g.token(a,e,!0),g.tokens.push({type:"blockquote_end"});else if(a=g.rules.list.exec(t)){for(t=t.substring(a[0].length),o=a[2],g.tokens.push({type:"list_start",ordered:o.length>1}),a=a[0].match(g.rules.item),i=!1,h=a.length,p=0;p1&&s.length>1||(t=a.slice(p+1).join("\n")+t,p=h-1)),r=i||/\n\n(?!\s*$)/.test(l),p!==h-1&&(i="\n"===l.charAt(l.length-1),r||(r=i)),g.tokens.push({type:r?"loose_item_start":"list_item_start"}),g.token(l,!1,n),g.tokens.push({type:"list_item_end"});g.tokens.push({type:"list_end"})}else if(a=g.rules.html.exec(t))t=t.substring(a[0].length),g.tokens.push({type:g.options.sanitize?"paragraph":"html",pre:!g.options.sanitizer&&("pre"===a[1]||"script"===a[1]||"style"===a[1]),text:a[0]});else if(!n&&e&&(a=g.rules.def.exec(t)))t=t.substring(a[0].length),g.tokens.links[a[1].toLowerCase()]={href:a[2],title:a[3]};else if(e&&(a=g.rules.table.exec(t))){for(t=t.substring(a[0].length),l={type:"table",header:a[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:a[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:a[3].replace(/(?: *\| *)?\n$/,"").split("\n")},p=0;p])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:l,tag:/^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:l,text:/^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/,h.link=s(h.link)("inside",h._inside)("href",h._href)(),h.reflink=s(h.reflink)("inside",h._inside)(),h.normal=c({},h),h.pedantic=c({},h.normal,{ +strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/}),h.gfm=c({},h.normal,{escape:s(h.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:s(h.text)("]|","~]|")("|","|https?://|")()}),h.breaks=c({},h.gfm,{br:s(h.br)("{2,}","*")(),text:s(h.gfm.text)("{2,}","*")()}),n.rules=h,n.output=function(t,e,i){var r=new n(e,i);return r.output(t)},n.prototype.output=function(t){for(var e,n,i,r,o=this,s="";t;)if(r=o.rules.escape.exec(t))t=t.substring(r[0].length),s+=r[1];else if(r=o.rules.autolink.exec(t))t=t.substring(r[0].length),"@"===r[2]?(n=":"===r[1].charAt(6)?o.mangle(r[1].substring(7)):o.mangle(r[1]),i=o.mangle("mailto:")+n):(n=a(r[1]),i=n),s+=o.renderer.link(i,null,n);else if(o.inLink||!(r=o.rules.url.exec(t))){if(r=o.rules.tag.exec(t))!o.inLink&&/^/i.test(r[0])&&(o.inLink=!1),t=t.substring(r[0].length),s+=o.options.sanitize?o.options.sanitizer?o.options.sanitizer(r[0]):a(r[0]):r[0];else if(r=o.rules.link.exec(t))t=t.substring(r[0].length),o.inLink=!0,s+=o.outputLink(r,{href:r[2],title:r[3]}),o.inLink=!1;else if((r=o.rules.reflink.exec(t))||(r=o.rules.nolink.exec(t))){if(t=t.substring(r[0].length),e=(r[2]||r[1]).replace(/\s+/g," "),e=o.links[e.toLowerCase()],!e||!e.href){s+=r[0].charAt(0),t=r[0].substring(1)+t;continue}o.inLink=!0,s+=o.outputLink(r,e),o.inLink=!1}else if(r=o.rules.strong.exec(t))t=t.substring(r[0].length),s+=o.renderer.strong(o.output(r[2]||r[1]));else if(r=o.rules.em.exec(t))t=t.substring(r[0].length),s+=o.renderer.em(o.output(r[2]||r[1]));else if(r=o.rules.code.exec(t))t=t.substring(r[0].length),s+=o.renderer.codespan(a(r[2],!0));else if(r=o.rules.br.exec(t))t=t.substring(r[0].length),s+=o.renderer.br();else if(r=o.rules.del.exec(t))t=t.substring(r[0].length),s+=o.renderer.del(o.output(r[1]));else if(r=o.rules.text.exec(t))t=t.substring(r[0].length),s+=o.renderer.text(a(o.smartypants(r[0])));else if(t)throw new Error("Infinite loop on byte: "+t.charCodeAt(0))}else t=t.substring(r[0].length),n=a(r[1]),i=n,s+=o.renderer.link(i,null,n);return s},n.prototype.outputLink=function(t,e){var n=a(e.href),i=e.title?a(e.title):null;return"!"!==t[0].charAt(0)?this.renderer.link(n,i,this.output(t[1])):this.renderer.image(n,i,a(t[1]))},n.prototype.smartypants=function(t){return this.options.smartypants?t.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014\/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014\/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):t},n.prototype.mangle=function(t){if(!this.options.mangle)return t;for(var e,n="",i=t.length,r=0;r.5&&(e="x"+e.toString(16)),n+="&#"+e+";";return n},i.prototype.code=function(t,e,n){if(this.options.highlight){var i=this.options.highlight(t,e);null!=i&&i!==t&&(n=!0,t=i)}return e?'
    '+(n?t:a(t,!0))+"\n
    \n":"
    "+(n?t:a(t,!0))+"\n
    "},i.prototype.blockquote=function(t){return"
    \n"+t+"
    \n"},i.prototype.html=function(t){return t},i.prototype.heading=function(t,e,n){return"'+t+"\n"},i.prototype.hr=function(){return this.options.xhtml?"
    \n":"
    \n"},i.prototype.list=function(t,e){var n=e?"ol":"ul";return"<"+n+">\n"+t+"\n"},i.prototype.listitem=function(t){return"
  • "+t+"
  • \n"},i.prototype.paragraph=function(t){return"

    "+t+"

    \n"},i.prototype.table=function(t,e){return"\n\n"+t+"\n\n"+e+"\n
    \n"},i.prototype.tablerow=function(t){return"\n"+t+"\n"},i.prototype.tablecell=function(t,e){var n=e.header?"th":"td",i=e.align?"<"+n+' style="text-align:'+e.align+'">':"<"+n+">";return i+t+"\n"},i.prototype.strong=function(t){return""+t+""},i.prototype.em=function(t){return""+t+""},i.prototype.codespan=function(t){return""+t+""},i.prototype.br=function(){return this.options.xhtml?"
    ":"
    "},i.prototype.del=function(t){return""+t+""},i.prototype.link=function(t,e,n){if(this.options.sanitize){try{var i=decodeURIComponent(o(t)).replace(/[^\w:]/g,"").toLowerCase()}catch(t){return""}if(0===i.indexOf("javascript:")||0===i.indexOf("vbscript:"))return""}var r='
    "},i.prototype.image=function(t,e,n){var i=''+n+'":">"},i.prototype.text=function(t){return t},r.parse=function(t,e,n){var i=new r(e,n);return i.parse(t)},r.prototype.parse=function(t){var e=this;this.inline=new n(t.links,this.options,this.renderer),this.tokens=t.reverse();for(var i="";this.next();)i+=e.tok();return i},r.prototype.next=function(){return this.token=this.tokens.pop()},r.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},r.prototype.parseText=function(){for(var t=this,e=this.token.text;"text"===this.peek().type;)e+="\n"+t.next().text;return this.inline.output(e)},r.prototype.tok=function(){var t=this;switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text);case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,n,i,r,a,o="",s="";for(i="",e=0;et.length)break t;if(!(x instanceof r)){p.lastIndex=0;var k=p.exec(x),v=1;if(!k&&g&&b!=a.length-1){if(p.lastIndex=y,k=p.exec(t),!k)break;for(var w=k.index+(h?k[1].length:0),_=k.index+k[0].length,S=b,E=y,A=a.length;S=E&&(++b,y=E);if(a[b]instanceof r||a[S-1].greedy)continue;v=S-b,x=t.slice(y,E),k.index-=y}if(k){h&&(d=k[1].length);var w=k.index+d,k=k[0].slice(d),_=w+k.length,C=x.slice(0,w),j=x.slice(_),z=[b,v];C&&z.push(C);var L=new r(s,u?i.tokenize(k,u):k,f,k,g);z.push(L),j&&z.push(j),Array.prototype.splice.apply(a,z)}}}}}return a},hooks:{all:{},add:function(t,e){var n=i.hooks.all;n[t]=n[t]||[],n[t].push(e)},run:function(t,e){var n=i.hooks.all[t];if(n&&n.length)for(var r,a=0;r=n[a++];)r(e)}}},r=i.Token=function(t,e,n,i,r){this.type=t,this.content=e,this.alias=n,this.length=0|(i||"").length,this.greedy=!!r};if(r.stringify=function(t,e,n){if("string"==typeof t)return t;if("Array"===i.util.type(t))return t.map(function(n){return r.stringify(n,e,t)}).join("");var a={type:t.type,content:r.stringify(t.content,e,n),tag:"span",classes:["token",t.type],attributes:{},language:e,parent:n};if("comment"==a.type&&(a.attributes.spellcheck="true"),t.alias){var o="Array"===i.util.type(t.alias)?t.alias:[t.alias];Array.prototype.push.apply(a.classes,o)}i.hooks.run("wrap",a);var s=Object.keys(a.attributes).map(function(t){return t+'="'+(a.attributes[t]||"").replace(/"/g,""")+'"'}).join(" ");return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+(s?" "+s:"")+">"+a.content+""},!e.document)return e.addEventListener?(e.addEventListener("message",function(t){var n=JSON.parse(t.data),r=n.language,a=n.code,o=n.immediateClose;e.postMessage(i.highlight(a,i.languages[r],r)),o&&e.close()},!1),e.Prism):e.Prism;var a=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return a&&(i.filename=a.src,document.addEventListener&&!a.hasAttribute("data-manual")&&("loading"!==document.readyState?window.requestAnimationFrame?window.requestAnimationFrame(i.highlightAll):window.setTimeout(i.highlightAll,16):document.addEventListener("DOMContentLoaded",i.highlightAll))),e.Prism}();t.exports&&(t.exports=n),"undefined"!=typeof r&&(r.Prism=n),n.languages.markup={comment://,prolog:/<\?[\w\W]+?\?>/,doctype://i,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},n.hooks.add("wrap",function(t){"entity"===t.type&&(t.attributes.title=t.content.replace(/&/,"&"))}),n.languages.xml=n.languages.markup,n.languages.html=n.languages.markup,n.languages.mathml=n.languages.markup,n.languages.svg=n.languages.markup,n.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*?(?=\s*\{)/,string:{pattern:/("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,greedy:!0},property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},n.languages.css.atrule.inside.rest=n.util.clone(n.languages.css),n.languages.markup&&(n.languages.insertBefore("markup","tag",{style:{pattern:/()[\w\W]*?(?=<\/style>)/i,lookbehind:!0,inside:n.languages.css,alias:"language-css"}}),n.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|').*?\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:n.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:n.languages.css}},alias:"language-css"}},n.languages.markup.tag)),n.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:{pattern:/(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(true|false)\b/,function:/[a-z0-9_]+(?=\()/i,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/},n.languages.javascript=n.languages.extend("clike",{keyword:/\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,function:/[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*\*?|\/|~|\^|%|\.{3}/}),n.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^\/])\/(?!\/)(\[.+?]|\\.|[^\/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0,greedy:!0}}),n.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\\\|\\?[^\\])*?`/,greedy:!0,inside:{interpolation:{pattern:/\$\{[^}]+\}/,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:n.languages.javascript}},string:/[\s\S]+/}}}),n.languages.markup&&n.languages.insertBefore("markup","tag",{script:{pattern:/()[\w\W]*?(?=<\/script>)/i,lookbehind:!0,inside:n.languages.javascript,alias:"language-javascript"}}),n.languages.js=n.languages.javascript,function(){"undefined"!=typeof self&&self.Prism&&self.document&&document.querySelector&&(self.Prism.fileHighlight=function(){var t={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"};Array.prototype.forEach&&Array.prototype.slice.call(document.querySelectorAll("pre[data-src]")).forEach(function(e){for(var i,r=e.getAttribute("data-src"),a=e,o=/\blang(?:uage)?-(?!\*)(\w+)\b/i;a&&!o.test(a.className);)a=a.parentNode;if(a&&(i=(e.className.match(o)||[,""])[1]),!i){var s=(r.match(/\.(\w+)$/)||[,""])[1];i=t[s]||s}var l=document.createElement("code");l.className="language-"+i,e.textContent="",l.textContent="Loading…",e.appendChild(l);var c=new XMLHttpRequest;c.open("GET",r,!0),c.onreadystatechange=function(){4==c.readyState&&(c.status<400&&c.responseText?(l.textContent=c.responseText,n.highlightElement(l)):c.status>=400?l.textContent="✖ Error "+c.status+" while fetching file: "+c.statusText:l.textContent="✖ Error: File does not exist or is empty")},c.send(null)})},document.addEventListener("DOMContentLoaded",self.Prism.fileHighlight))}()}),S=function(t,e){var n=[].slice.call(t.querySelectorAll("dt-code"));n.forEach(function(e){var n=e.textContent;e.innerHTML="";var i=e.getAttribute("language"),r=t.createElement("code");if(""===e.getAttribute("block")){n=n.replace(/\n/,"");var a=n.match(/\s*/);n=n.replace(new RegExp("\n"+a,"g"),"\n"),n=n.trim();var o=t.createElement("pre");o.appendChild(r),e.appendChild(o)}else e.appendChild(r);var s=n;_.languages[i]&&(r.setAttribute("class","language-"+i),s=_.highlight(n,_.languages[i])),r.innerHTML=s})},E={title:"Experiments in Handwriting with a Neural Network",description:"Several interactive visualizations of a generative model of handwriting. Some are fun, some are serious.",url:"http://distill.pub/2016/handwriting/",github:"https://github.com/distillpub/post--handwriting",firstPublished:"Tue Dec 6 2016 21:39:33 GMT-0700 (PDT)",lastPublished:"Tue Dec 6 2016 21:39:33 GMT-0700 (PDT)",authors:[{firstName:"Shan",lastName:"Carter",personalURL:"http://shancarter.com",affiliation:"Google Brain",affiliationURL:"http://g.co/brain"},{firstName:"David",lastName:"Ha",personalURL:"https://github.com/hardmaru",affiliation:"Google Brain",affiliationURL:"http://g.co/brain"},{firstName:"Ian",lastName:"Johnson",personalURL:"https://github.com/enjalot",affiliation:"Google Cloud",affiliationURL:""},{firstName:"Chris",lastName:"Olah",personalURL:"http://colah.github.io/",affiliation:"Google Brain",affiliationURL:"http://g.co/brain"}],journal:{title:"Distill",full_title:"Distill",abbrev_title:"Distill",url:"http://distill.pub",doi:"00.0000/dstl",issn:"0000-0000"}};return window.document&&i(window.document,E),i}(); //# sourceMappingURL=template.min.js.map diff --git a/dist/template.min.js.map b/dist/template.min.js.map index 41a046e..afd1f3b 100644 --- a/dist/template.min.js.map +++ b/dist/template.min.js.map @@ -1 +1 @@ -{"version":3,"file":null,"sources":["../components/meta.js","../index.js","../node_modules/bibtex-parse-js/bibtexParse.js","../components/cite-data.js","../components/styles.js","../components/header.js","../components/appendix.js","../components/footer.js","../components/citation.js","../node_modules/marked/lib/marked.js","../components/markdown.js","../node_modules/prismjs/prism.js","../components/code.js","../test-data.js"],"sourcesContent":["export default function(dom, data) {\n dom.querySelector(\"html\").setAttribute(\"lang\", \"en\")\n let head = dom.querySelector(\"head\");\n\n if (!dom.querySelector(\"meta[charset]\")) {\n appendHtml(head, ``);\n }\n if (!dom.querySelector(\"meta[name=viewport]\")) {\n appendHtml(head, ``);\n }\n\n appendHtml(head, `\n \n \n \n \n ${data.title}\n `);\n\n appendHtml(head, `\n \n \n \n `);\n data.authors.forEach((a) => {\n appendHtml(head, `\n `)\n });\n\n appendHtml(head, `\n \n \n \n \n \n \n \n \n `);\n\n appendHtml(head, `\n \n \n \n \n \n \n \n \n `);\n\n appendHtml(head, `\n \n \n \n \n \n \n \n \n \n \n \n \n `);\n data.authors.forEach((a) => {\n appendHtml(head, `\n \n \n `)\n });\n\n Object.keys(data.citations).forEach(key => {\n console.log(key);\n appendHtml(head, `\n \n `);\n });\n}\n\n\n\n\nfunction appendHtml(el, html) {\n el.innerHTML += html;\n}\n\nfunction citation_meta_content(ref){\n var content = `citation_title=${ref.title};`;\n ref.author.split(\" and \").forEach(author => {\n content += `citation_author=${author.trim()};`;\n });\n if (\"journal\" in ref){\n content += `citation_journal_title=${ref.journal};`;\n }\n if (\"volume\" in ref) {\n content += `citation_volume=${ref.volume};`;\n }\n if (\"issue\" in ref || \"number\" in ref){\n content += `citation_number=${ref.issue || ref.number};`;\n }\n /*content += `citation_first_page=${};`;\n content += `citation_publication_date=${};`;*/\n return content;\n}\n","import citeData from \"./components/cite-data\";\nimport meta from \"./components/meta\";\nimport styles from \"./components/styles\";\nimport header from \"./components/header\";\nimport appendix from \"./components/appendix\";\nimport footer from \"./components/footer\";\nimport citation from \"./components/citation\";\nimport markdown from \"./components/markdown\";\nimport code from \"./components/code\";\nimport testData from \"./test-data\";\n\n\nfunction render(dom, data) {\n styles(dom, data);\n document.addEventListener(\"DOMContentLoaded\", function(event) {\n citeData(dom, data);\n meta(dom, data);\n header(dom, data);\n appendix(dom, data);\n footer(dom, data);\n markdown(dom, data);\n code(dom, data);\n citation(dom, data);\n console.log(\"final data:\")\n for (var k in data) {console.log(\" \", k, \": \", data[k])}\n });\n}\n\n\nif(window.document) {\n render(window.document, testData);\n}\n\nexport default render;\n","/* start bibtexParse 0.0.22 */\n\n//Original work by Henrik Muehe (c) 2010\n//\n//CommonJS port by Mikola Lysenko 2013\n//\n//Port to Browser lib by ORCID / RCPETERS\n//\n//Issues:\n//no comment handling within strings\n//no string concatenation\n//no variable values yet\n//Grammar implemented here:\n//bibtex -> (string | preamble | comment | entry)*;\n//string -> '@STRING' '{' key_equals_value '}';\n//preamble -> '@PREAMBLE' '{' value '}';\n//comment -> '@COMMENT' '{' value '}';\n//entry -> '@' key '{' key ',' key_value_list '}';\n//key_value_list -> key_equals_value (',' key_equals_value)*;\n//key_equals_value -> key '=' value;\n//value -> value_quotes | value_braces | key;\n//value_quotes -> '\"' .*? '\"'; // not quite\n//value_braces -> '{' .*? '\"'; // not quite\n(function(exports) {\n\n function BibtexParser() {\n \n this.months = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"];\n this.notKey = [',','{','}',' ','='];\n this.pos = 0;\n this.input = \"\";\n this.entries = new Array();\n\n this.currentEntry = \"\";\n\n this.setInput = function(t) {\n this.input = t;\n };\n\n this.getEntries = function() {\n return this.entries;\n };\n\n this.isWhitespace = function(s) {\n return (s == ' ' || s == '\\r' || s == '\\t' || s == '\\n');\n };\n\n this.match = function(s, canCommentOut) {\n if (canCommentOut == undefined || canCommentOut == null)\n canCommentOut = true;\n this.skipWhitespace(canCommentOut);\n if (this.input.substring(this.pos, this.pos + s.length) == s) {\n this.pos += s.length;\n } else {\n throw \"Token mismatch, expected \" + s + \", found \"\n + this.input.substring(this.pos);\n };\n this.skipWhitespace(canCommentOut);\n };\n\n this.tryMatch = function(s, canCommentOut) {\n if (canCommentOut == undefined || canCommentOut == null)\n canCommentOut = true;\n this.skipWhitespace(canCommentOut);\n if (this.input.substring(this.pos, this.pos + s.length) == s) {\n return true;\n } else {\n return false;\n };\n this.skipWhitespace(canCommentOut);\n };\n\n /* when search for a match all text can be ignored, not just white space */\n this.matchAt = function() {\n while (this.input.length > this.pos && this.input[this.pos] != '@') {\n this.pos++;\n };\n\n if (this.input[this.pos] == '@') {\n return true;\n };\n return false;\n };\n\n this.skipWhitespace = function(canCommentOut) {\n while (this.isWhitespace(this.input[this.pos])) {\n this.pos++;\n };\n if (this.input[this.pos] == \"%\" && canCommentOut == true) {\n while (this.input[this.pos] != \"\\n\") {\n this.pos++;\n };\n this.skipWhitespace(canCommentOut);\n };\n };\n\n this.value_braces = function() {\n var bracecount = 0;\n this.match(\"{\", false);\n var start = this.pos;\n var escaped = false;\n while (true) {\n if (!escaped) {\n if (this.input[this.pos] == '}') {\n if (bracecount > 0) {\n bracecount--;\n } else {\n var end = this.pos;\n this.match(\"}\", false);\n return this.input.substring(start, end);\n };\n } else if (this.input[this.pos] == '{') {\n bracecount++;\n } else if (this.pos >= this.input.length - 1) {\n throw \"Unterminated value\";\n };\n };\n if (this.input[this.pos] == '\\\\' && escaped == false)\n escaped = true;\n else\n escaped = false;\n this.pos++;\n };\n };\n\n this.value_comment = function() {\n var str = '';\n var brcktCnt = 0;\n while (!(this.tryMatch(\"}\", false) && brcktCnt == 0)) {\n str = str + this.input[this.pos];\n if (this.input[this.pos] == '{')\n brcktCnt++;\n if (this.input[this.pos] == '}')\n brcktCnt--;\n if (this.pos >= this.input.length - 1) {\n throw \"Unterminated value:\" + this.input.substring(start);\n };\n this.pos++;\n };\n return str;\n };\n\n this.value_quotes = function() {\n this.match('\"', false);\n var start = this.pos;\n var escaped = false;\n while (true) {\n if (!escaped) {\n if (this.input[this.pos] == '\"') {\n var end = this.pos;\n this.match('\"', false);\n return this.input.substring(start, end);\n } else if (this.pos >= this.input.length - 1) {\n throw \"Unterminated value:\" + this.input.substring(start);\n };\n }\n if (this.input[this.pos] == '\\\\' && escaped == false)\n escaped = true;\n else\n escaped = false;\n this.pos++;\n };\n };\n\n this.single_value = function() {\n var start = this.pos;\n if (this.tryMatch(\"{\")) {\n return this.value_braces();\n } else if (this.tryMatch('\"')) {\n return this.value_quotes();\n } else {\n var k = this.key();\n if (k.match(\"^[0-9]+$\"))\n return k;\n else if (this.months.indexOf(k.toLowerCase()) >= 0)\n return k.toLowerCase();\n else\n throw \"Value expected:\" + this.input.substring(start) + ' for key: ' + k;\n \n };\n };\n\n this.value = function() {\n var values = [];\n values.push(this.single_value());\n while (this.tryMatch(\"#\")) {\n this.match(\"#\");\n values.push(this.single_value());\n };\n return values.join(\"\");\n };\n\n this.key = function() {\n var start = this.pos;\n while (true) {\n if (this.pos >= this.input.length) {\n throw \"Runaway key\";\n };\n // а-яА-Я is Cyrillic\n //console.log(this.input[this.pos]);\n if (this.notKey.indexOf(this.input[this.pos]) >= 0) {\n return this.input.substring(start, this.pos);\n } else {\n this.pos++;\n \n };\n };\n };\n\n this.key_equals_value = function() {\n var key = this.key();\n if (this.tryMatch(\"=\")) {\n this.match(\"=\");\n var val = this.value();\n return [ key, val ];\n } else {\n throw \"... = value expected, equals sign missing:\"\n + this.input.substring(this.pos);\n };\n };\n\n this.key_value_list = function() {\n var kv = this.key_equals_value();\n this.currentEntry['entryTags'] = {};\n this.currentEntry['entryTags'][kv[0]] = kv[1];\n while (this.tryMatch(\",\")) {\n this.match(\",\");\n // fixes problems with commas at the end of a list\n if (this.tryMatch(\"}\")) {\n break;\n }\n ;\n kv = this.key_equals_value();\n this.currentEntry['entryTags'][kv[0]] = kv[1];\n };\n };\n\n this.entry_body = function(d) {\n this.currentEntry = {};\n this.currentEntry['citationKey'] = this.key();\n this.currentEntry['entryType'] = d.substring(1);\n this.match(\",\");\n this.key_value_list();\n this.entries.push(this.currentEntry);\n };\n\n this.directive = function() {\n this.match(\"@\");\n return \"@\" + this.key();\n };\n\n this.preamble = function() {\n this.currentEntry = {};\n this.currentEntry['entryType'] = 'PREAMBLE';\n this.currentEntry['entry'] = this.value_comment();\n this.entries.push(this.currentEntry);\n };\n\n this.comment = function() {\n this.currentEntry = {};\n this.currentEntry['entryType'] = 'COMMENT';\n this.currentEntry['entry'] = this.value_comment();\n this.entries.push(this.currentEntry);\n };\n\n this.entry = function(d) {\n this.entry_body(d);\n };\n\n this.bibtex = function() {\n while (this.matchAt()) {\n var d = this.directive();\n this.match(\"{\");\n if (d == \"@STRING\") {\n this.string();\n } else if (d == \"@PREAMBLE\") {\n this.preamble();\n } else if (d == \"@COMMENT\") {\n this.comment();\n } else {\n this.entry(d);\n }\n this.match(\"}\");\n };\n };\n };\n \n exports.toJSON = function(bibtex) {\n var b = new BibtexParser();\n b.setInput(bibtex);\n b.bibtex();\n return b.entries;\n };\n\n /* added during hackathon don't hate on me */\n exports.toBibtex = function(json) {\n var out = '';\n for ( var i in json) {\n out += \"@\" + json[i].entryType;\n out += '{';\n if (json[i].citationKey)\n out += json[i].citationKey + ', ';\n if (json[i].entry)\n out += json[i].entry ;\n if (json[i].entryTags) {\n var tags = '';\n for (var jdx in json[i].entryTags) {\n if (tags.length != 0)\n tags += ', ';\n tags += jdx + '= {' + json[i].entryTags[jdx] + '}';\n }\n out += tags;\n }\n out += '}\\n\\n';\n }\n return out;\n \n };\n\n})(typeof exports === 'undefined' ? this['bibtexParse'] = {} : exports);\n\n/* end bibtexParse */\n","import bibtexParse from \"bibtex-parse-js\";\n\nexport default function(dom, data) {\n\n //TODO populate bibliography\n\n let rawBib = `\n @article{gregor2015draw,\n title={DRAW: A recurrent neural network for image generation},\n author={Gregor, Karol and Danihelka, Ivo and Graves, Alex and Rezende, Danilo Jimenez and Wierstra, Daan},\n journal={arXivreprint arXiv:1502.04623},\n year={2015}\n }\n @article{mercier2011humans,\n title={Why do humans reason? Arguments for an argumentative theory},\n author={Mercier, Hugo and Sperber, Dan},\n journal={Behavioral and brain sciences},\n volume={34},\n number={02},\n pages={57--74},\n year={2011},\n publisher={Cambridge Univ Press}\n }`;\n\n var bibliography = {};\n bibtexParse.toJSON(rawBib).forEach(e => {\n bibliography[e.citationKey] = e.entryTags;\n bibliography[e.citationKey].type = e.entryType;\n });\n\n let citations = {};\n var citeTags = [].slice.apply(dom.querySelectorAll(\"dt-cite\"));\n citeTags.forEach(el => {\n let citationKeys = el.textContent.split(\",\");\n citationKeys.forEach(key => {\n if (bibliography[key]) {\n citations[key] = bibliography[key];\n } else {\n console.warn(\"No bibliography entry found for: \" + key);\n }\n });\n });\n data.citations = citations;\n}\n","import base from './styles-base.css';\nimport layout from './styles-layout.css';\nimport article from './styles-article.css';\nimport code from './styles-code.css';\n\nexport default function(dom, data) {\n let s = dom.createElement(\"style\");\n s.textContent = base + layout + article + code;\n dom.querySelector(\"head\").appendChild(s);\n}\n","import logo from \"./distill-logo.svg\";\n\nconst html = `\n\n\n\n`\n\nexport default function(dom, data) {\n dom.querySelector('dt-header').innerHTML = html;\n}\n","const html = `\n\n\n
    \n

    References

    \n \n

    Errors, Reuse, and Citation

    \n

    If you see mistakes or want to suggest changes, please submit a pull request on github.

    \n

    Diagrams and text are licensed under Creative Commons Attribution CC-BY 2.0, unless noted otherwise, with the source available on available on github. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: “Figure from …”.

    \n

    For attribution in academic contexts, please cite this work as

    \n
    \n  

    BibTeX citation

    \n
    \n
    \n`;\n\n// distill.data().then(function(data) {\n// var as = el.querySelectorAll(\"a.github\");\n// [].forEach.call(as, function(a) {\n// a.setAttribute(\"href\", data.github);\n// });\n// el.querySelector(\".citation.short\").textContent = data.concatenatedAuthors + \", \" + '\"' + data.title + '\", Distill, ' + data.firstPublishedYear + \".\";\n// var bibtex = \"@article{\" + data.slug + \",\\n\";\n// bibtex += \" author = {\" + data.bibtexAuthors + \"},\\n\";\n// bibtex += \" title = {\" + data.title + \"},\\n\";\n// bibtex += \" journal = {Distill},\\n\";\n// bibtex += \" year = {\" + data.firstPublishedYear + \"},\\n\";\n// bibtex += \" note = {\" + data.url + \"}\\n\";\n// bibtex += \"}\";\n// el.querySelector(\".citation.long\").textContent = bibtex;\n// })\n\nexport default function(dom, data) {\n dom.querySelector('dt-appendix').innerHTML = html;\n}\n","import logo from \"./distill-logo.svg\";\n\nconst html = `\n\n\n
    \n \n ${logo}\n Distill\n is dedicated to clear explanations of machine learning\n
    \n`;\n\nexport default function(dom, data) {\n dom.querySelector('dt-footer').innerHTML = html;\n}\n","export default function(dom, data) {\n\n let citations = Object.keys(data.citations).map(c => data.citations[c]);\n citations.sort((a, b) => {\n return a.author.localeCompare(b.author);\n });\n\n var citeTags = [].slice.apply(dom.querySelectorAll(\"dt-cite\"));\n citeTags.forEach(el => {\n var keys = el.textContent.split(\",\");\n var cite_string = keys.map(inline_cite).join(\", \");\n el.innerHTML = cite_string;\n });\n\n let bibEl = dom.querySelector(\"dt-bibliography\");\n let ol = dom.createElement(\"ol\");\n citations.forEach(citation => {\n let el = dom.createElement(\"li\");\n el.textContent = bibliography_cite(citation);\n ol.appendChild(el);\n })\n bibEl.appendChild(ol);\n\n function inline_cite(key){\n if (key in data.citations){\n var ent = data.citations[key];\n var names = ent.author.split(\" and \");\n names = names.map(name => name.split(\",\")[0].trim())\n var year = ent.year;\n if (names.length == 1) return names[0] + \", \" + year;\n if (names.length == 2) return names[0] + \" & \" + names[1] + \", \" + year;\n if (names.length > 2) return names[0] + \", et al., \" + year;\n } else {\n return \"?\";\n }\n }\n\n function bibliography_cite(ent){\n if (ent){\n var names = ent.author.split(\" and \");\n var cite = \"\";\n let name_strings = names.map(name => {\n var last = name.split(\",\")[0].trim();\n var firsts = name.split(\",\")[1];\n if (firsts != undefined) {\n var initials = firsts.trim().split(\" \").map(s => s.trim()[0]);\n return last + \", \" + initials.join(\".\")+\".\";\n }\n return last;\n });\n if (names.length > 1) {\n cite += name_strings.slice(0, names.length-1).join(\", \");\n cite += \" and \" + name_strings[names.length-1];\n } else {\n cite += name_strings[0]\n }\n cite += \", \" + ent.year + \". \"\n cite += ent.title + \". \"\n cite += (ent.journal || ent.booktitle || \"\")\n if (\"volume\" in ent){\n var issue = ent.issue || ent.number;\n issue = (issue != undefined)? \"(\"+issue+\")\" : \"\";\n cite += \", Vol \" + ent.volume + issue;\n }\n if (\"pages\" in ent){\n cite += \", pp. \" + ent.pages\n }\n cite += \". \"\n return cite\n } else {\n return \"?\";\n }\n }\n\n\n //https://scholar.google.com/scholar?q=allintitle%3ADocument+author%3Aolah\n function get_URL(ent){\n if (ent){\n var names = ent.author.split(\" and \");\n names = names.map(name => name.split(\",\")[0].trim())\n var title = ent.title.split(\" \")//.replace(/[,:]/, \"\")\n var url = \"http://search.labs.crossref.org/dois?\"//\"\"https://scholar.google.com/scholar?\"\n url += uris({q: names.join(\" \") + \" \" + title.join(\" \")})\n }\n\n }\n}\n","/**\n * marked - a markdown parser\n * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/chjj/marked\n */\n\n;(function() {\n\n/**\n * Block-Level Grammar\n */\n\nvar block = {\n newline: /^\\n+/,\n code: /^( {4}[^\\n]+\\n*)+/,\n fences: noop,\n hr: /^( *[-*_]){3,} *(?:\\n+|$)/,\n heading: /^ *(#{1,6}) *([^\\n]+?) *#* *(?:\\n+|$)/,\n nptable: noop,\n lheading: /^([^\\n]+)\\n *(=|-){2,} *(?:\\n+|$)/,\n blockquote: /^( *>[^\\n]+(\\n(?!def)[^\\n]+)*\\n*)+/,\n list: /^( *)(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?!\\1bull )\\n*|\\s*$)/,\n html: /^ *(?:comment *(?:\\n|\\s*$)|closed *(?:\\n{2,}|\\s*$)|closing *(?:\\n{2,}|\\s*$))/,\n def: /^ *\\[([^\\]]+)\\]: *]+)>?(?: +[\"(]([^\\n]+)[\")])? *(?:\\n+|$)/,\n table: noop,\n paragraph: /^((?:[^\\n]+\\n?(?!hr|heading|lheading|blockquote|tag|def))+)\\n*/,\n text: /^[^\\n]+/\n};\n\nblock.bullet = /(?:[*+-]|\\d+\\.)/;\nblock.item = /^( *)(bull) [^\\n]*(?:\\n(?!\\1bull )[^\\n]*)*/;\nblock.item = replace(block.item, 'gm')\n (/bull/g, block.bullet)\n ();\n\nblock.list = replace(block.list)\n (/bull/g, block.bullet)\n ('hr', '\\\\n+(?=\\\\1?(?:[-*_] *){3,}(?:\\\\n+|$))')\n ('def', '\\\\n+(?=' + block.def.source + ')')\n ();\n\nblock.blockquote = replace(block.blockquote)\n ('def', block.def)\n ();\n\nblock._tag = '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code'\n + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo'\n + '|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:/|[^\\\\w\\\\s@]*@)\\\\b';\n\nblock.html = replace(block.html)\n ('comment', //)\n ('closed', /<(tag)[\\s\\S]+?<\\/\\1>/)\n ('closing', /])*?>/)\n (/tag/g, block._tag)\n ();\n\nblock.paragraph = replace(block.paragraph)\n ('hr', block.hr)\n ('heading', block.heading)\n ('lheading', block.lheading)\n ('blockquote', block.blockquote)\n ('tag', '<' + block._tag)\n ('def', block.def)\n ();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge({}, block.normal, {\n fences: /^ *(`{3,}|~{3,})[ \\.]*(\\S+)? *\\n([\\s\\S]*?)\\s*\\1 *(?:\\n+|$)/,\n paragraph: /^/,\n heading: /^ *(#{1,6}) +([^\\n]+?) *#* *(?:\\n+|$)/\n});\n\nblock.gfm.paragraph = replace(block.paragraph)\n ('(?!', '(?!'\n + block.gfm.fences.source.replace('\\\\1', '\\\\2') + '|'\n + block.list.source.replace('\\\\1', '\\\\3') + '|')\n ();\n\n/**\n * GFM + Tables Block Grammar\n */\n\nblock.tables = merge({}, block.gfm, {\n nptable: /^ *(\\S.*\\|.*)\\n *([-:]+ *\\|[-| :]*)\\n((?:.*\\|.*(?:\\n|$))*)\\n*/,\n table: /^ *\\|(.+)\\n *\\|( *[-:]+[-| :]*)\\n((?: *\\|.*(?:\\n|$))*)\\n*/\n});\n\n/**\n * Block Lexer\n */\n\nfunction Lexer(options) {\n this.tokens = [];\n this.tokens.links = {};\n this.options = options || marked.defaults;\n this.rules = block.normal;\n\n if (this.options.gfm) {\n if (this.options.tables) {\n this.rules = block.tables;\n } else {\n this.rules = block.gfm;\n }\n }\n}\n\n/**\n * Expose Block Rules\n */\n\nLexer.rules = block;\n\n/**\n * Static Lex Method\n */\n\nLexer.lex = function(src, options) {\n var lexer = new Lexer(options);\n return lexer.lex(src);\n};\n\n/**\n * Preprocessing\n */\n\nLexer.prototype.lex = function(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n')\n .replace(/\\t/g, ' ')\n .replace(/\\u00a0/g, ' ')\n .replace(/\\u2424/g, '\\n');\n\n return this.token(src, true);\n};\n\n/**\n * Lexing\n */\n\nLexer.prototype.token = function(src, top, bq) {\n var src = src.replace(/^ +$/gm, '')\n , next\n , loose\n , cap\n , bull\n , b\n , item\n , space\n , i\n , l;\n\n while (src) {\n // newline\n if (cap = this.rules.newline.exec(src)) {\n src = src.substring(cap[0].length);\n if (cap[0].length > 1) {\n this.tokens.push({\n type: 'space'\n });\n }\n }\n\n // code\n if (cap = this.rules.code.exec(src)) {\n src = src.substring(cap[0].length);\n cap = cap[0].replace(/^ {4}/gm, '');\n this.tokens.push({\n type: 'code',\n text: !this.options.pedantic\n ? cap.replace(/\\n+$/, '')\n : cap\n });\n continue;\n }\n\n // fences (gfm)\n if (cap = this.rules.fences.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'code',\n lang: cap[2],\n text: cap[3] || ''\n });\n continue;\n }\n\n // heading\n if (cap = this.rules.heading.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'heading',\n depth: cap[1].length,\n text: cap[2]\n });\n continue;\n }\n\n // table no leading pipe (gfm)\n if (top && (cap = this.rules.nptable.exec(src))) {\n src = src.substring(cap[0].length);\n\n item = {\n type: 'table',\n header: cap[1].replace(/^ *| *\\| *$/g, '').split(/ *\\| */),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3].replace(/\\n$/, '').split('\\n')\n };\n\n for (i = 0; i < item.align.length; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n for (i = 0; i < item.cells.length; i++) {\n item.cells[i] = item.cells[i].split(/ *\\| */);\n }\n\n this.tokens.push(item);\n\n continue;\n }\n\n // lheading\n if (cap = this.rules.lheading.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'heading',\n depth: cap[2] === '=' ? 1 : 2,\n text: cap[1]\n });\n continue;\n }\n\n // hr\n if (cap = this.rules.hr.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'hr'\n });\n continue;\n }\n\n // blockquote\n if (cap = this.rules.blockquote.exec(src)) {\n src = src.substring(cap[0].length);\n\n this.tokens.push({\n type: 'blockquote_start'\n });\n\n cap = cap[0].replace(/^ *> ?/gm, '');\n\n // Pass `top` to keep the current\n // \"toplevel\" state. This is exactly\n // how markdown.pl works.\n this.token(cap, top, true);\n\n this.tokens.push({\n type: 'blockquote_end'\n });\n\n continue;\n }\n\n // list\n if (cap = this.rules.list.exec(src)) {\n src = src.substring(cap[0].length);\n bull = cap[2];\n\n this.tokens.push({\n type: 'list_start',\n ordered: bull.length > 1\n });\n\n // Get each top-level item.\n cap = cap[0].match(this.rules.item);\n\n next = false;\n l = cap.length;\n i = 0;\n\n for (; i < l; i++) {\n item = cap[i];\n\n // Remove the list item's bullet\n // so it is seen as the next token.\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+\\.) +/, '');\n\n // Outdent whatever the\n // list item contains. Hacky.\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic\n ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')\n : item.replace(/^ {1,4}/gm, '');\n }\n\n // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n if (this.options.smartLists && i !== l - 1) {\n b = block.bullet.exec(cap[i + 1])[0];\n if (bull !== b && !(bull.length > 1 && b.length > 1)) {\n src = cap.slice(i + 1).join('\\n') + src;\n i = l - 1;\n }\n }\n\n // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n loose = next || /\\n\\n(?!\\s*$)/.test(item);\n if (i !== l - 1) {\n next = item.charAt(item.length - 1) === '\\n';\n if (!loose) loose = next;\n }\n\n this.tokens.push({\n type: loose\n ? 'loose_item_start'\n : 'list_item_start'\n });\n\n // Recurse.\n this.token(item, false, bq);\n\n this.tokens.push({\n type: 'list_item_end'\n });\n }\n\n this.tokens.push({\n type: 'list_end'\n });\n\n continue;\n }\n\n // html\n if (cap = this.rules.html.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: this.options.sanitize\n ? 'paragraph'\n : 'html',\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: cap[0]\n });\n continue;\n }\n\n // def\n if ((!bq && top) && (cap = this.rules.def.exec(src))) {\n src = src.substring(cap[0].length);\n this.tokens.links[cap[1].toLowerCase()] = {\n href: cap[2],\n title: cap[3]\n };\n continue;\n }\n\n // table (gfm)\n if (top && (cap = this.rules.table.exec(src))) {\n src = src.substring(cap[0].length);\n\n item = {\n type: 'table',\n header: cap[1].replace(/^ *| *\\| *$/g, '').split(/ *\\| */),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3].replace(/(?: *\\| *)?\\n$/, '').split('\\n')\n };\n\n for (i = 0; i < item.align.length; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n for (i = 0; i < item.cells.length; i++) {\n item.cells[i] = item.cells[i]\n .replace(/^ *\\| *| *\\| *$/g, '')\n .split(/ *\\| */);\n }\n\n this.tokens.push(item);\n\n continue;\n }\n\n // top-level paragraph\n if (top && (cap = this.rules.paragraph.exec(src))) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'paragraph',\n text: cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1]\n });\n continue;\n }\n\n // text\n if (cap = this.rules.text.exec(src)) {\n // Top-level should never reach here.\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'text',\n text: cap[0]\n });\n continue;\n }\n\n if (src) {\n throw new\n Error('Infinite loop on byte: ' + src.charCodeAt(0));\n }\n }\n\n return this.tokens;\n};\n\n/**\n * Inline-Level Grammar\n */\n\nvar inline = {\n escape: /^\\\\([\\\\`*{}\\[\\]()#+\\-.!_>])/,\n autolink: /^<([^ >]+(@|:\\/)[^ >]+)>/,\n url: noop,\n tag: /^|^<\\/?\\w+(?:\"[^\"]*\"|'[^']*'|[^'\">])*?>/,\n link: /^!?\\[(inside)\\]\\(href\\)/,\n reflink: /^!?\\[(inside)\\]\\s*\\[([^\\]]*)\\]/,\n nolink: /^!?\\[((?:\\[[^\\]]*\\]|[^\\[\\]])*)\\]/,\n strong: /^__([\\s\\S]+?)__(?!_)|^\\*\\*([\\s\\S]+?)\\*\\*(?!\\*)/,\n em: /^\\b_((?:[^_]|__)+?)_\\b|^\\*((?:\\*\\*|[\\s\\S])+?)\\*(?!\\*)/,\n code: /^(`+)\\s*([\\s\\S]*?[^`])\\s*\\1(?!`)/,\n br: /^ {2,}\\n(?!\\s*$)/,\n del: noop,\n text: /^[\\s\\S]+?(?=[\\\\?(?:\\s+['\"]([\\s\\S]*?)['\"])?\\s*/;\n\ninline.link = replace(inline.link)\n ('inside', inline._inside)\n ('href', inline._href)\n ();\n\ninline.reflink = replace(inline.reflink)\n ('inside', inline._inside)\n ();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge({}, inline.normal, {\n strong: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n em: /^_(?=\\S)([\\s\\S]*?\\S)_(?!_)|^\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)/\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge({}, inline.normal, {\n escape: replace(inline.escape)('])', '~|])')(),\n url: /^(https?:\\/\\/[^\\s<]+[^<.,:;\"')\\]\\s])/,\n del: /^~~(?=\\S)([\\s\\S]*?\\S)~~/,\n text: replace(inline.text)\n (']|', '~]|')\n ('|', '|https?://|')\n ()\n});\n\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = merge({}, inline.gfm, {\n br: replace(inline.br)('{2,}', '*')(),\n text: replace(inline.gfm.text)('{2,}', '*')()\n});\n\n/**\n * Inline Lexer & Compiler\n */\n\nfunction InlineLexer(links, options) {\n this.options = options || marked.defaults;\n this.links = links;\n this.rules = inline.normal;\n this.renderer = this.options.renderer || new Renderer;\n this.renderer.options = this.options;\n\n if (!this.links) {\n throw new\n Error('Tokens array requires a `links` property.');\n }\n\n if (this.options.gfm) {\n if (this.options.breaks) {\n this.rules = inline.breaks;\n } else {\n this.rules = inline.gfm;\n }\n } else if (this.options.pedantic) {\n this.rules = inline.pedantic;\n }\n}\n\n/**\n * Expose Inline Rules\n */\n\nInlineLexer.rules = inline;\n\n/**\n * Static Lexing/Compiling Method\n */\n\nInlineLexer.output = function(src, links, options) {\n var inline = new InlineLexer(links, options);\n return inline.output(src);\n};\n\n/**\n * Lexing/Compiling\n */\n\nInlineLexer.prototype.output = function(src) {\n var out = ''\n , link\n , text\n , href\n , cap;\n\n while (src) {\n // escape\n if (cap = this.rules.escape.exec(src)) {\n src = src.substring(cap[0].length);\n out += cap[1];\n continue;\n }\n\n // autolink\n if (cap = this.rules.autolink.exec(src)) {\n src = src.substring(cap[0].length);\n if (cap[2] === '@') {\n text = cap[1].charAt(6) === ':'\n ? this.mangle(cap[1].substring(7))\n : this.mangle(cap[1]);\n href = this.mangle('mailto:') + text;\n } else {\n text = escape(cap[1]);\n href = text;\n }\n out += this.renderer.link(href, null, text);\n continue;\n }\n\n // url (gfm)\n if (!this.inLink && (cap = this.rules.url.exec(src))) {\n src = src.substring(cap[0].length);\n text = escape(cap[1]);\n href = text;\n out += this.renderer.link(href, null, text);\n continue;\n }\n\n // tag\n if (cap = this.rules.tag.exec(src)) {\n if (!this.inLink && /^/i.test(cap[0])) {\n this.inLink = false;\n }\n src = src.substring(cap[0].length);\n out += this.options.sanitize\n ? this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape(cap[0])\n : cap[0]\n continue;\n }\n\n // link\n if (cap = this.rules.link.exec(src)) {\n src = src.substring(cap[0].length);\n this.inLink = true;\n out += this.outputLink(cap, {\n href: cap[2],\n title: cap[3]\n });\n this.inLink = false;\n continue;\n }\n\n // reflink, nolink\n if ((cap = this.rules.reflink.exec(src))\n || (cap = this.rules.nolink.exec(src))) {\n src = src.substring(cap[0].length);\n link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = this.links[link.toLowerCase()];\n if (!link || !link.href) {\n out += cap[0].charAt(0);\n src = cap[0].substring(1) + src;\n continue;\n }\n this.inLink = true;\n out += this.outputLink(cap, link);\n this.inLink = false;\n continue;\n }\n\n // strong\n if (cap = this.rules.strong.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.strong(this.output(cap[2] || cap[1]));\n continue;\n }\n\n // em\n if (cap = this.rules.em.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.em(this.output(cap[2] || cap[1]));\n continue;\n }\n\n // code\n if (cap = this.rules.code.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.codespan(escape(cap[2], true));\n continue;\n }\n\n // br\n if (cap = this.rules.br.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.br();\n continue;\n }\n\n // del (gfm)\n if (cap = this.rules.del.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.del(this.output(cap[1]));\n continue;\n }\n\n // text\n if (cap = this.rules.text.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.text(escape(this.smartypants(cap[0])));\n continue;\n }\n\n if (src) {\n throw new\n Error('Infinite loop on byte: ' + src.charCodeAt(0));\n }\n }\n\n return out;\n};\n\n/**\n * Compile Link\n */\n\nInlineLexer.prototype.outputLink = function(cap, link) {\n var href = escape(link.href)\n , title = link.title ? escape(link.title) : null;\n\n return cap[0].charAt(0) !== '!'\n ? this.renderer.link(href, title, this.output(cap[1]))\n : this.renderer.image(href, title, escape(cap[1]));\n};\n\n/**\n * Smartypants Transformations\n */\n\nInlineLexer.prototype.smartypants = function(text) {\n if (!this.options.smartypants) return text;\n return text\n // em-dashes\n .replace(/---/g, '\\u2014')\n // en-dashes\n .replace(/--/g, '\\u2013')\n // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, '$1\\u2018')\n // closing singles & apostrophes\n .replace(/'/g, '\\u2019')\n // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, '$1\\u201c')\n // closing doubles\n .replace(/\"/g, '\\u201d')\n // ellipses\n .replace(/\\.{3}/g, '\\u2026');\n};\n\n/**\n * Mangle Links\n */\n\nInlineLexer.prototype.mangle = function(text) {\n if (!this.options.mangle) return text;\n var out = ''\n , l = text.length\n , i = 0\n , ch;\n\n for (; i < l; i++) {\n ch = text.charCodeAt(i);\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n};\n\n/**\n * Renderer\n */\n\nfunction Renderer(options) {\n this.options = options || {};\n}\n\nRenderer.prototype.code = function(code, lang, escaped) {\n if (this.options.highlight) {\n var out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n if (!lang) {\n return '
    '\n      + (escaped ? code : escape(code, true))\n      + '\\n
    ';\n }\n\n return '
    '\n    + (escaped ? code : escape(code, true))\n    + '\\n
    \\n';\n};\n\nRenderer.prototype.blockquote = function(quote) {\n return '
    \\n' + quote + '
    \\n';\n};\n\nRenderer.prototype.html = function(html) {\n return html;\n};\n\nRenderer.prototype.heading = function(text, level, raw) {\n return ''\n + text\n + '\\n';\n};\n\nRenderer.prototype.hr = function() {\n return this.options.xhtml ? '
    \\n' : '
    \\n';\n};\n\nRenderer.prototype.list = function(body, ordered) {\n var type = ordered ? 'ol' : 'ul';\n return '<' + type + '>\\n' + body + '\\n';\n};\n\nRenderer.prototype.listitem = function(text) {\n return '
  • ' + text + '
  • \\n';\n};\n\nRenderer.prototype.paragraph = function(text) {\n return '

    ' + text + '

    \\n';\n};\n\nRenderer.prototype.table = function(header, body) {\n return '\\n'\n + '\\n'\n + header\n + '\\n'\n + '\\n'\n + body\n + '\\n'\n + '
    \\n';\n};\n\nRenderer.prototype.tablerow = function(content) {\n return '\\n' + content + '\\n';\n};\n\nRenderer.prototype.tablecell = function(content, flags) {\n var type = flags.header ? 'th' : 'td';\n var tag = flags.align\n ? '<' + type + ' style=\"text-align:' + flags.align + '\">'\n : '<' + type + '>';\n return tag + content + '\\n';\n};\n\n// span level renderer\nRenderer.prototype.strong = function(text) {\n return '' + text + '';\n};\n\nRenderer.prototype.em = function(text) {\n return '' + text + '';\n};\n\nRenderer.prototype.codespan = function(text) {\n return '' + text + '';\n};\n\nRenderer.prototype.br = function() {\n return this.options.xhtml ? '
    ' : '
    ';\n};\n\nRenderer.prototype.del = function(text) {\n return '' + text + '';\n};\n\nRenderer.prototype.link = function(href, title, text) {\n if (this.options.sanitize) {\n try {\n var prot = decodeURIComponent(unescape(href))\n .replace(/[^\\w:]/g, '')\n .toLowerCase();\n } catch (e) {\n return '';\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0) {\n return '';\n }\n }\n var out = '
    ';\n return out;\n};\n\nRenderer.prototype.image = function(href, title, text) {\n var out = '\"'' : '>';\n return out;\n};\n\nRenderer.prototype.text = function(text) {\n return text;\n};\n\n/**\n * Parsing & Compiling\n */\n\nfunction Parser(options) {\n this.tokens = [];\n this.token = null;\n this.options = options || marked.defaults;\n this.options.renderer = this.options.renderer || new Renderer;\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n}\n\n/**\n * Static Parse Method\n */\n\nParser.parse = function(src, options, renderer) {\n var parser = new Parser(options, renderer);\n return parser.parse(src);\n};\n\n/**\n * Parse Loop\n */\n\nParser.prototype.parse = function(src) {\n this.inline = new InlineLexer(src.links, this.options, this.renderer);\n this.tokens = src.reverse();\n\n var out = '';\n while (this.next()) {\n out += this.tok();\n }\n\n return out;\n};\n\n/**\n * Next Token\n */\n\nParser.prototype.next = function() {\n return this.token = this.tokens.pop();\n};\n\n/**\n * Preview Next Token\n */\n\nParser.prototype.peek = function() {\n return this.tokens[this.tokens.length - 1] || 0;\n};\n\n/**\n * Parse Text Tokens\n */\n\nParser.prototype.parseText = function() {\n var body = this.token.text;\n\n while (this.peek().type === 'text') {\n body += '\\n' + this.next().text;\n }\n\n return this.inline.output(body);\n};\n\n/**\n * Parse Current Token\n */\n\nParser.prototype.tok = function() {\n switch (this.token.type) {\n case 'space': {\n return '';\n }\n case 'hr': {\n return this.renderer.hr();\n }\n case 'heading': {\n return this.renderer.heading(\n this.inline.output(this.token.text),\n this.token.depth,\n this.token.text);\n }\n case 'code': {\n return this.renderer.code(this.token.text,\n this.token.lang,\n this.token.escaped);\n }\n case 'table': {\n var header = ''\n , body = ''\n , i\n , row\n , cell\n , flags\n , j;\n\n // header\n cell = '';\n for (i = 0; i < this.token.header.length; i++) {\n flags = { header: true, align: this.token.align[i] };\n cell += this.renderer.tablecell(\n this.inline.output(this.token.header[i]),\n { header: true, align: this.token.align[i] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n for (i = 0; i < this.token.cells.length; i++) {\n row = this.token.cells[i];\n\n cell = '';\n for (j = 0; j < row.length; j++) {\n cell += this.renderer.tablecell(\n this.inline.output(row[j]),\n { header: false, align: this.token.align[j] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n return this.renderer.table(header, body);\n }\n case 'blockquote_start': {\n var body = '';\n\n while (this.next().type !== 'blockquote_end') {\n body += this.tok();\n }\n\n return this.renderer.blockquote(body);\n }\n case 'list_start': {\n var body = ''\n , ordered = this.token.ordered;\n\n while (this.next().type !== 'list_end') {\n body += this.tok();\n }\n\n return this.renderer.list(body, ordered);\n }\n case 'list_item_start': {\n var body = '';\n\n while (this.next().type !== 'list_item_end') {\n body += this.token.type === 'text'\n ? this.parseText()\n : this.tok();\n }\n\n return this.renderer.listitem(body);\n }\n case 'loose_item_start': {\n var body = '';\n\n while (this.next().type !== 'list_item_end') {\n body += this.tok();\n }\n\n return this.renderer.listitem(body);\n }\n case 'html': {\n var html = !this.token.pre && !this.options.pedantic\n ? this.inline.output(this.token.text)\n : this.token.text;\n return this.renderer.html(html);\n }\n case 'paragraph': {\n return this.renderer.paragraph(this.inline.output(this.token.text));\n }\n case 'text': {\n return this.renderer.paragraph(this.parseText());\n }\n }\n};\n\n/**\n * Helpers\n */\n\nfunction escape(html, encode) {\n return html\n .replace(!encode ? /&(?!#?\\w+;)/g : /&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\nfunction unescape(html) {\n\t// explicitly match decimal, hex, and named HTML entities \n return html.replace(/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/g, function(_, n) {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nfunction replace(regex, opt) {\n regex = regex.source;\n opt = opt || '';\n return function self(name, val) {\n if (!name) return new RegExp(regex, opt);\n val = val.source || val;\n val = val.replace(/(^|[^\\[])\\^/g, '$1');\n regex = regex.replace(name, val);\n return self;\n };\n}\n\nfunction noop() {}\nnoop.exec = noop;\n\nfunction merge(obj) {\n var i = 1\n , target\n , key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\n\n/**\n * Marked\n */\n\nfunction marked(src, opt, callback) {\n if (callback || typeof opt === 'function') {\n if (!callback) {\n callback = opt;\n opt = null;\n }\n\n opt = merge({}, marked.defaults, opt || {});\n\n var highlight = opt.highlight\n , tokens\n , pending\n , i = 0;\n\n try {\n tokens = Lexer.lex(src, opt)\n } catch (e) {\n return callback(e);\n }\n\n pending = tokens.length;\n\n var done = function(err) {\n if (err) {\n opt.highlight = highlight;\n return callback(err);\n }\n\n var out;\n\n try {\n out = Parser.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n\n opt.highlight = highlight;\n\n return err\n ? callback(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!pending) return done();\n\n for (; i < tokens.length; i++) {\n (function(token) {\n if (token.type !== 'code') {\n return --pending || done();\n }\n return highlight(token.text, token.lang, function(err, code) {\n if (err) return done(err);\n if (code == null || code === token.text) {\n return --pending || done();\n }\n token.text = code;\n token.escaped = true;\n --pending || done();\n });\n })(tokens[i]);\n }\n\n return;\n }\n try {\n if (opt) opt = merge({}, marked.defaults, opt);\n return Parser.parse(Lexer.lex(src, opt), opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/chjj/marked.';\n if ((opt || marked.defaults).silent) {\n return '

    An error occured:

    '\n        + escape(e.message + '', true)\n        + '
    ';\n }\n throw e;\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge(marked.defaults, opt);\n return marked;\n};\n\nmarked.defaults = {\n gfm: true,\n tables: true,\n breaks: false,\n pedantic: false,\n sanitize: false,\n sanitizer: null,\n mangle: true,\n smartLists: false,\n silent: false,\n highlight: null,\n langPrefix: 'lang-',\n smartypants: false,\n headerPrefix: '',\n renderer: new Renderer,\n xhtml: false\n};\n\n/**\n * Expose\n */\n\nmarked.Parser = Parser;\nmarked.parser = Parser.parse;\n\nmarked.Renderer = Renderer;\n\nmarked.Lexer = Lexer;\nmarked.lexer = Lexer.lex;\n\nmarked.InlineLexer = InlineLexer;\nmarked.inlineLexer = InlineLexer.output;\n\nmarked.parse = marked;\n\nif (typeof module !== 'undefined' && typeof exports === 'object') {\n module.exports = marked;\n} else if (typeof define === 'function' && define.amd) {\n define(function() { return marked; });\n} else {\n this.marked = marked;\n}\n\n}).call(function() {\n return this || (typeof window !== 'undefined' ? window : global);\n}());\n","import marked from 'marked';\n\nmarked.setOptions({\n gfm: true,\n smartypants: true\n});\n\nexport default function(dom, data) {\n let markdownElements = [].slice.call(dom.querySelectorAll('[dt-markdown]'));\n markdownElements.forEach(el => {\n let content = el.innerHTML;\n let indent = \" \";\n // Set default indents to the first or second line\n\n // content.replace(\"\\n \", \"\\n\" + indent);\n el.innerHTML = marked(content);\n });\n}\n","\n/* **********************************************\n Begin prism-core.js\n********************************************** */\n\nvar _self = (typeof window !== 'undefined')\n\t? window // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t? self // if in worker\n\t\t: {} // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n * MIT license http://www.opensource.org/licenses/mit-license.php/\n * @author Lea Verou http://lea.verou.me\n */\n\nvar Prism = (function(){\n\n// Private helper vars\nvar lang = /\\blang(?:uage)?-(\\w+)\\b/i;\nvar uniqueId = 0;\n\nvar _ = _self.Prism = {\n\tutil: {\n\t\tencode: function (tokens) {\n\t\t\tif (tokens instanceof Token) {\n\t\t\t\treturn new Token(tokens.type, _.util.encode(tokens.content), tokens.alias);\n\t\t\t} else if (_.util.type(tokens) === 'Array') {\n\t\t\t\treturn tokens.map(_.util.encode);\n\t\t\t} else {\n\t\t\t\treturn tokens.replace(/&/g, '&').replace(/ text.length) {\n\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\tbreak tokenloop;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tpattern.lastIndex = 0;\n\n\t\t\t\t\tvar match = pattern.exec(str),\n\t\t\t\t\t delNum = 1;\n\n\t\t\t\t\t// Greedy patterns can override/remove up to two previously matched tokens\n\t\t\t\t\tif (!match && greedy && i != strarr.length - 1) {\n\t\t\t\t\t\tpattern.lastIndex = pos;\n\t\t\t\t\t\tmatch = pattern.exec(text);\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar from = match.index + (lookbehind ? match[1].length : 0),\n\t\t\t\t\t\t to = match.index + match[0].length,\n\t\t\t\t\t\t k = i,\n\t\t\t\t\t\t p = pos;\n\n\t\t\t\t\t\tfor (var len = strarr.length; k < len && p < to; ++k) {\n\t\t\t\t\t\t\tp += strarr[k].length;\n\t\t\t\t\t\t\t// Move the index i to the element in strarr that is closest to from\n\t\t\t\t\t\t\tif (from >= p) {\n\t\t\t\t\t\t\t\t++i;\n\t\t\t\t\t\t\t\tpos = p;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * If strarr[i] is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\t * If strarr[k - 1] is greedy we are in conflict with another greedy pattern\n\t\t\t\t\t\t */\n\t\t\t\t\t\tif (strarr[i] instanceof Token || strarr[k - 1].greedy) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Number of tokens to delete and replace with the new match\n\t\t\t\t\t\tdelNum = k - i;\n\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!match) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(lookbehind) {\n\t\t\t\t\t\tlookbehindLength = match[1].length;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar from = match.index + lookbehindLength,\n\t\t\t\t\t match = match[0].slice(lookbehindLength),\n\t\t\t\t\t to = from + match.length,\n\t\t\t\t\t before = str.slice(0, from),\n\t\t\t\t\t after = str.slice(to);\n\n\t\t\t\t\tvar args = [i, delNum];\n\n\t\t\t\t\tif (before) {\n\t\t\t\t\t\targs.push(before);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar wrapped = new Token(token, inside? _.tokenize(match, inside) : match, alias, match, greedy);\n\n\t\t\t\t\targs.push(wrapped);\n\n\t\t\t\t\tif (after) {\n\t\t\t\t\t\targs.push(after);\n\t\t\t\t\t}\n\n\t\t\t\t\tArray.prototype.splice.apply(strarr, args);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn strarr;\n\t},\n\n\thooks: {\n\t\tall: {},\n\n\t\tadd: function (name, callback) {\n\t\t\tvar hooks = _.hooks.all;\n\n\t\t\thooks[name] = hooks[name] || [];\n\n\t\t\thooks[name].push(callback);\n\t\t},\n\n\t\trun: function (name, env) {\n\t\t\tvar callbacks = _.hooks.all[name];\n\n\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (var i=0, callback; callback = callbacks[i++];) {\n\t\t\t\tcallback(env);\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar Token = _.Token = function(type, content, alias, matchedStr, greedy) {\n\tthis.type = type;\n\tthis.content = content;\n\tthis.alias = alias;\n\t// Copy of the full string this token was created from\n\tthis.length = (matchedStr || \"\").length|0;\n\tthis.greedy = !!greedy;\n};\n\nToken.stringify = function(o, language, parent) {\n\tif (typeof o == 'string') {\n\t\treturn o;\n\t}\n\n\tif (_.util.type(o) === 'Array') {\n\t\treturn o.map(function(element) {\n\t\t\treturn Token.stringify(element, language, o);\n\t\t}).join('');\n\t}\n\n\tvar env = {\n\t\ttype: o.type,\n\t\tcontent: Token.stringify(o.content, language, parent),\n\t\ttag: 'span',\n\t\tclasses: ['token', o.type],\n\t\tattributes: {},\n\t\tlanguage: language,\n\t\tparent: parent\n\t};\n\n\tif (env.type == 'comment') {\n\t\tenv.attributes['spellcheck'] = 'true';\n\t}\n\n\tif (o.alias) {\n\t\tvar aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.alias];\n\t\tArray.prototype.push.apply(env.classes, aliases);\n\t}\n\n\t_.hooks.run('wrap', env);\n\n\tvar attributes = Object.keys(env.attributes).map(function(name) {\n\t\treturn name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '"') + '\"';\n\t}).join(' ');\n\n\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + (attributes ? ' ' + attributes : '') + '>' + env.content + '';\n\n};\n\nif (!_self.document) {\n\tif (!_self.addEventListener) {\n\t\t// in Node.js\n\t\treturn _self.Prism;\n\t}\n \t// In worker\n\t_self.addEventListener('message', function(evt) {\n\t\tvar message = JSON.parse(evt.data),\n\t\t lang = message.language,\n\t\t code = message.code,\n\t\t immediateClose = message.immediateClose;\n\n\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\tif (immediateClose) {\n\t\t\t_self.close();\n\t\t}\n\t}, false);\n\n\treturn _self.Prism;\n}\n\n//Get current script and highlight\nvar script = document.currentScript || [].slice.call(document.getElementsByTagName(\"script\")).pop();\n\nif (script) {\n\t_.filename = script.src;\n\n\tif (document.addEventListener && !script.hasAttribute('data-manual')) {\n\t\tif(document.readyState !== \"loading\") {\n\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(_.highlightAll);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(_.highlightAll, 16);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tdocument.addEventListener('DOMContentLoaded', _.highlightAll);\n\t\t}\n\t}\n}\n\nreturn _self.Prism;\n\n})();\n\nif (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = Prism;\n}\n\n// hack for components to work correctly in node.js\nif (typeof global !== 'undefined') {\n\tglobal.Prism = Prism;\n}\n\n\n/* **********************************************\n Begin prism-markup.js\n********************************************** */\n\nPrism.languages.markup = {\n\t'comment': //,\n\t'prolog': /<\\?[\\w\\W]+?\\?>/,\n\t'doctype': //i,\n\t'cdata': //i,\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<]+(?:\\s+[^\\s>\\/=]+(?:=(?:(\"|')(?:\\\\\\1|\\\\?(?!\\1)[\\w\\W])*\\1|[^\\s'\">=]+))?)*\\s*\\/?>/i,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/i,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=(?:('|\")[\\w\\W]*?(\\1)|[^\\s>]+)/i,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /[=>\"']/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': /&#?[\\da-z]{1,8};/i\n};\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function(env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&/, '&');\n\t}\n});\n\nPrism.languages.xml = Prism.languages.markup;\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\n\n/* **********************************************\n Begin prism-css.js\n********************************************** */\n\nPrism.languages.css = {\n\t'comment': /\\/\\*[\\w\\W]*?\\*\\//,\n\t'atrule': {\n\t\tpattern: /@[\\w-]+?.*?(;|(?=\\s*\\{))/i,\n\t\tinside: {\n\t\t\t'rule': /@[\\w-]+/\n\t\t\t// See rest below\n\t\t}\n\t},\n\t'url': /url\\((?:([\"'])(\\\\(?:\\r\\n|[\\w\\W])|(?!\\1)[^\\\\\\r\\n])*\\1|.*?)\\)/i,\n\t'selector': /[^\\{\\}\\s][^\\{\\};]*?(?=\\s*\\{)/,\n\t'string': {\n\t\tpattern: /(\"|')(\\\\(?:\\r\\n|[\\w\\W])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'property': /(\\b|\\B)[\\w-]+(?=\\s*:)/i,\n\t'important': /\\B!important\\b/i,\n\t'function': /[-a-z0-9]+(?=\\()/i,\n\t'punctuation': /[(){};:]/\n};\n\nPrism.languages.css['atrule'].inside.rest = Prism.util.clone(Prism.languages.css);\n\nif (Prism.languages.markup) {\n\tPrism.languages.insertBefore('markup', 'tag', {\n\t\t'style': {\n\t\t\tpattern: /()[\\w\\W]*?(?=<\\/style>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.css,\n\t\t\talias: 'language-css'\n\t\t}\n\t});\n\t\n\tPrism.languages.insertBefore('inside', 'attr-value', {\n\t\t'style-attr': {\n\t\t\tpattern: /\\s*style=(\"|').*?\\1/i,\n\t\t\tinside: {\n\t\t\t\t'attr-name': {\n\t\t\t\t\tpattern: /^\\s*style/i,\n\t\t\t\t\tinside: Prism.languages.markup.tag.inside\n\t\t\t\t},\n\t\t\t\t'punctuation': /^\\s*=\\s*['\"]|['\"]\\s*$/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /.+/i,\n\t\t\t\t\tinside: Prism.languages.css\n\t\t\t\t}\n\t\t\t},\n\t\t\talias: 'language-css'\n\t\t}\n\t}, Prism.languages.markup.tag);\n}\n\n/* **********************************************\n Begin prism-clike.js\n********************************************** */\n\nPrism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\w\\W]*?\\*\\//,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /((?:\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+)|(?:catch\\s+\\())[a-z0-9_\\.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\tpunctuation: /(\\.|\\\\)/\n\t\t}\n\t},\n\t'keyword': /\\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b/,\n\t'boolean': /\\b(true|false)\\b/,\n\t'function': /[a-z0-9_]+(?=\\()/i,\n\t'number': /\\b-?(?:0x[\\da-f]+|\\d*\\.?\\d+(?:e[+-]?\\d+)?)\\b/i,\n\t'operator': /--?|\\+\\+?|!=?=?|<=?|>=?|==?=?|&&?|\\|\\|?|\\?|\\*|\\/|~|\\^|%/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\n\n/* **********************************************\n Begin prism-javascript.js\n********************************************** */\n\nPrism.languages.javascript = Prism.languages.extend('clike', {\n\t'keyword': /\\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\\b/,\n\t'number': /\\b-?(0x[\\dA-Fa-f]+|0b[01]+|0o[0-7]+|\\d*\\.?\\d+([Ee][+-]?\\d+)?|NaN|Infinity)\\b/,\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*(?=\\()/i,\n\t'operator': /--?|\\+\\+?|!=?=?|<=?|>=?|==?=?|&&?|\\|\\|?|\\?|\\*\\*?|\\/|~|\\^|%|\\.{3}/\n});\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: /(^|[^/])\\/(?!\\/)(\\[.+?]|\\\\.|[^/\\\\\\r\\n])+\\/[gimyu]{0,5}(?=\\s*($|[\\r\\n,.;})]))/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'template-string': {\n\t\tpattern: /`(?:\\\\\\\\|\\\\?[^\\\\])*?`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /\\$\\{[^}]+\\}/,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t}\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.insertBefore('markup', 'tag', {\n\t\t'script': {\n\t\t\tpattern: /()[\\w\\W]*?(?=<\\/script>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript,\n\t\t\talias: 'language-javascript'\n\t\t}\n\t});\n}\n\nPrism.languages.js = Prism.languages.javascript;\n\n/* **********************************************\n Begin prism-file-highlight.js\n********************************************** */\n\n(function () {\n\tif (typeof self === 'undefined' || !self.Prism || !self.document || !document.querySelector) {\n\t\treturn;\n\t}\n\n\tself.Prism.fileHighlight = function() {\n\n\t\tvar Extensions = {\n\t\t\t'js': 'javascript',\n\t\t\t'py': 'python',\n\t\t\t'rb': 'ruby',\n\t\t\t'ps1': 'powershell',\n\t\t\t'psm1': 'powershell',\n\t\t\t'sh': 'bash',\n\t\t\t'bat': 'batch',\n\t\t\t'h': 'c',\n\t\t\t'tex': 'latex'\n\t\t};\n\n\t\tif(Array.prototype.forEach) { // Check to prevent error in IE8\n\t\t\tArray.prototype.slice.call(document.querySelectorAll('pre[data-src]')).forEach(function (pre) {\n\t\t\t\tvar src = pre.getAttribute('data-src');\n\n\t\t\t\tvar language, parent = pre;\n\t\t\t\tvar lang = /\\blang(?:uage)?-(?!\\*)(\\w+)\\b/i;\n\t\t\t\twhile (parent && !lang.test(parent.className)) {\n\t\t\t\t\tparent = parent.parentNode;\n\t\t\t\t}\n\n\t\t\t\tif (parent) {\n\t\t\t\t\tlanguage = (pre.className.match(lang) || [, ''])[1];\n\t\t\t\t}\n\n\t\t\t\tif (!language) {\n\t\t\t\t\tvar extension = (src.match(/\\.(\\w+)$/) || [, ''])[1];\n\t\t\t\t\tlanguage = Extensions[extension] || extension;\n\t\t\t\t}\n\n\t\t\t\tvar code = document.createElement('code');\n\t\t\t\tcode.className = 'language-' + language;\n\n\t\t\t\tpre.textContent = '';\n\n\t\t\t\tcode.textContent = 'Loading…';\n\n\t\t\t\tpre.appendChild(code);\n\n\t\t\t\tvar xhr = new XMLHttpRequest();\n\n\t\t\t\txhr.open('GET', src, true);\n\n\t\t\t\txhr.onreadystatechange = function () {\n\t\t\t\t\tif (xhr.readyState == 4) {\n\n\t\t\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n\t\t\t\t\t\t\tcode.textContent = xhr.responseText;\n\n\t\t\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (xhr.status >= 400) {\n\t\t\t\t\t\t\tcode.textContent = '✖ Error ' + xhr.status + ' while fetching file: ' + xhr.statusText;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tcode.textContent = '✖ Error: File does not exist or is empty';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\txhr.send(null);\n\t\t\t});\n\t\t}\n\n\t};\n\n\tdocument.addEventListener('DOMContentLoaded', self.Prism.fileHighlight);\n\n})();\n","import Prism from \"prismjs\";\n\nexport default function(dom, data) {\n let codeElements = [].slice.call(dom.querySelectorAll(\"code\"));\n codeElements.forEach(el => {\n // let content = el.innerHTML;\n // el.innerHTML = \"\";\n // let p = dom.createElement(\"pre\");\n // let c = dom.createElement(\"code\");\n // console.log(content)\n let highlighted = Prism.highlightElement(el);\n // c.innerHTML = highlighted;\n // p.appendChild(c);\n // el.appendChild(p);\n\n });\n}\n","export default {\n \"title\": \"Experiments in Handwriting with a Neural Network\",\n \"description\": \"Several interactive visualizations of a generative model of handwriting. Some are fun, some are serious.\",\n \"url\": \"http://distill.pub/2016/handwriting/\",\n \"github\": \"https://github.com/distillpub/post--handwriting\",\n \"firstPublished\": \"Tue Dec 6 2016 21:39:33 GMT-0700 (PDT)\",\n \"lastPublished\": \"Tue Dec 6 2016 21:39:33 GMT-0700 (PDT)\",\n \"authors\": [\n {\n \"firstName\": \"Shan\",\n \"lastName\": \"Carter\",\n \"personalURL\": \"http://shancarter.com\",\n \"affiliation\": \"Google Brain\",\n \"affiliationURL\": \"http://g.co/brain\"\n },\n {\n \"firstName\": \"David\",\n \"lastName\": \"Ha\",\n \"personalURL\": \"https://github.com/hardmaru\",\n \"affiliation\": \"Google Brain\",\n \"affiliationURL\": \"http://g.co/brain\"\n },\n {\n \"firstName\": \"Ian\",\n \"lastName\": \"Johnson\",\n \"personalURL\": \"https://github.com/enjalot\",\n \"affiliation\": \"Google Cloud\",\n \"affiliationURL\": \"\"\n },\n {\n \"firstName\": \"Chris\",\n \"lastName\": \"Olah\",\n \"personalURL\": \"http://colah.github.io/\",\n \"affiliation\": \"Google Brain\",\n \"affiliationURL\": \"http://g.co/brain\"\n }\n ],\n journal: {\n \"title\": \"Distill\",\n \"full_title\": \"Distill\",\n \"abbrev_title\": \"Distill\",\n \"url\": \"http://distill.pub\",\n \"doi\": \"00.0000/dstl\",\n \"issn\": \"0000-0000\"\n }\n };\n"],"names":["appendHtml","el","html","innerHTML","citation_meta_content","ref","content","author","split","forEach","trim","issue","number","render","dom","data","styles","document","addEventListener","event","citeData","meta","header","appendix","footer","markdown","code","citation","console","log","k","exports","BibtexParser","this","months","notKey","pos","input","entries","Array","currentEntry","setInput","t","getEntries","isWhitespace","s","match","canCommentOut","undefined","skipWhitespace","substring","length","tryMatch","matchAt","value_braces","bracecount","start","escaped","end","value_comment","str","brcktCnt","value_quotes","single_value","key","indexOf","toLowerCase","value","values","push","join","key_equals_value","val","key_value_list","kv","entry_body","d","directive","preamble","comment","entry","bibtex","string","toJSON","b","toBibtex","json","out","i","entryType","citationKey","entryTags","tags","jdx","let","rawBib","bibliography","bibtexParse","e","type","citations","citeTags","slice","apply","querySelectorAll","citationKeys","textContent","warn","querySelector","setAttribute","head","authors","a","journal","Object","keys","createElement","base","layout","article","appendChild","logo","inline_cite","ent","names","map","name","year","bibliography_cite","cite","name_strings","last","firsts","initials","title","booktitle","volume","pages","c","sort","localeCompare","cite_string","bibEl","ol","Lexer","options","tokens","links","marked","defaults","rules","block","normal","gfm","tables","InlineLexer","inline","renderer","Renderer","Error","breaks","pedantic","Parser","token","escape","encode","replace","unescape","_","n","charAt","String","fromCharCode","parseInt","regex","opt","source","self","RegExp","noop","merge","obj","target","arguments","prototype","hasOwnProperty","call","src","callback","pending","highlight","lex","done","err","parse","text","lang","message","silent","newline","fences","hr","heading","nptable","lheading","blockquote","list","def","table","paragraph","bullet","item","_tag","lexer","top","bq","next","loose","cap","bull","space","l","exec","depth","align","cells","test","ordered","smartLists","sanitize","pre","sanitizer","href","charCodeAt","autolink","url","tag","link","reflink","nolink","strong","em","br","del","_inside","_href","output","mangle","inLink","outputLink","codespan","smartypants","image","ch","Math","random","toString","langPrefix","quote","level","raw","headerPrefix","xhtml","body","listitem","tablerow","tablecell","flags","prot","decodeURIComponent","parser","reverse","tok","pop","peek","parseText","row","cell","j","setOptions","inlineLexer","module","window","global","markdownElements","_self","WorkerGlobalScope","Prism","uniqueId","util","Token","alias","o","objId","defineProperty","clone","v","languages","extend","id","redef","insertBefore","inside","before","insert","root","grammar","newToken","ret","DFS","visited","plugins","highlightAll","async","env","selector","hooks","run","element","elements","highlightElement","language","parent","className","parentNode","nodeName","Worker","worker","filename","onmessage","evt","highlightedCode","postMessage","JSON","stringify","immediateClose","tokenize","strarr","rest","tokenloop","patterns","pattern","lookbehind","greedy","lookbehindLength","lastIndex","delNum","from","index","to","p","len","after","args","wrapped","splice","all","add","callbacks","matchedStr","classes","attributes","aliases","close","script","currentScript","getElementsByTagName","hasAttribute","readyState","requestAnimationFrame","setTimeout","markup","prolog","doctype","cdata","punctuation","namespace","attr-value","attr-name","entity","xml","mathml","svg","css","atrule","rule","property","important","function","style","style-attr","clike","class-name","keyword","boolean","operator","javascript","template-string","interpolation","interpolation-punctuation","js","fileHighlight","Extensions","py","rb","ps1","psm1","sh","bat","h","tex","getAttribute","extension","xhr","XMLHttpRequest","open","onreadystatechange","status","responseText","statusText","send","codeElements","description","github","firstPublished","lastPublished","firstName","lastName","personalURL","affiliation","affiliationURL","full_title","abbrev_title","doi","issn","testData"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":null,"sources":["../components/meta.js","../index.js","../node_modules/bibtex-parse-js/bibtexParse.js","../components/cite-data.js","../components/styles.js","../components/header.js","../components/appendix.js","../components/footer.js","../components/citation.js","../node_modules/marked/lib/marked.js","../components/markdown.js","../node_modules/prismjs/prism.js","../components/code.js","../test-data.js"],"sourcesContent":["export default function(dom, data) {\n dom.querySelector(\"html\").setAttribute(\"lang\", \"en\")\n let head = dom.querySelector(\"head\");\n\n if (!dom.querySelector(\"meta[charset]\")) {\n appendHtml(head, ``);\n }\n if (!dom.querySelector(\"meta[name=viewport]\")) {\n appendHtml(head, ``);\n }\n\n appendHtml(head, `\n \n \n \n \n ${data.title}\n `);\n\n appendHtml(head, `\n \n \n \n `);\n data.authors.forEach((a) => {\n appendHtml(head, `\n `)\n });\n\n appendHtml(head, `\n \n \n \n \n \n \n \n \n `);\n\n appendHtml(head, `\n \n \n \n \n \n \n \n \n `);\n\n appendHtml(head, `\n \n \n \n \n \n \n \n \n \n \n \n \n `);\n data.authors.forEach((a) => {\n appendHtml(head, `\n \n \n `)\n });\n\n Object.keys(data.citations).forEach(key => {\n console.log(key);\n appendHtml(head, `\n \n `);\n });\n}\n\n\n\n\nfunction appendHtml(el, html) {\n el.innerHTML += html;\n}\n\nfunction citation_meta_content(ref){\n var content = `citation_title=${ref.title};`;\n ref.author.split(\" and \").forEach(author => {\n content += `citation_author=${author.trim()};`;\n });\n if (\"journal\" in ref){\n content += `citation_journal_title=${ref.journal};`;\n }\n if (\"volume\" in ref) {\n content += `citation_volume=${ref.volume};`;\n }\n if (\"issue\" in ref || \"number\" in ref){\n content += `citation_number=${ref.issue || ref.number};`;\n }\n /*content += `citation_first_page=${};`;\n content += `citation_publication_date=${};`;*/\n return content;\n}\n","import citeData from \"./components/cite-data\";\nimport meta from \"./components/meta\";\nimport styles from \"./components/styles\";\nimport header from \"./components/header\";\nimport appendix from \"./components/appendix\";\nimport footer from \"./components/footer\";\nimport citation from \"./components/citation\";\nimport markdown from \"./components/markdown\";\nimport code from \"./components/code\";\nimport testData from \"./test-data\";\n\n\nfunction render(dom, data) {\n styles(dom, data);\n document.addEventListener(\"DOMContentLoaded\", function(event) {\n citeData(dom, data);\n meta(dom, data);\n header(dom, data);\n appendix(dom, data);\n footer(dom, data);\n markdown(dom, data);\n code(dom, data);\n citation(dom, data);\n console.log(\"final data:\")\n for (var k in data) {console.log(\" \", k, \": \", data[k])}\n });\n}\n\n\nif(window.document) {\n render(window.document, testData);\n}\n\nexport default render;\n","/* start bibtexParse 0.0.22 */\n\n//Original work by Henrik Muehe (c) 2010\n//\n//CommonJS port by Mikola Lysenko 2013\n//\n//Port to Browser lib by ORCID / RCPETERS\n//\n//Issues:\n//no comment handling within strings\n//no string concatenation\n//no variable values yet\n//Grammar implemented here:\n//bibtex -> (string | preamble | comment | entry)*;\n//string -> '@STRING' '{' key_equals_value '}';\n//preamble -> '@PREAMBLE' '{' value '}';\n//comment -> '@COMMENT' '{' value '}';\n//entry -> '@' key '{' key ',' key_value_list '}';\n//key_value_list -> key_equals_value (',' key_equals_value)*;\n//key_equals_value -> key '=' value;\n//value -> value_quotes | value_braces | key;\n//value_quotes -> '\"' .*? '\"'; // not quite\n//value_braces -> '{' .*? '\"'; // not quite\n(function(exports) {\n\n function BibtexParser() {\n \n this.months = [\"jan\", \"feb\", \"mar\", \"apr\", \"may\", \"jun\", \"jul\", \"aug\", \"sep\", \"oct\", \"nov\", \"dec\"];\n this.notKey = [',','{','}',' ','='];\n this.pos = 0;\n this.input = \"\";\n this.entries = new Array();\n\n this.currentEntry = \"\";\n\n this.setInput = function(t) {\n this.input = t;\n };\n\n this.getEntries = function() {\n return this.entries;\n };\n\n this.isWhitespace = function(s) {\n return (s == ' ' || s == '\\r' || s == '\\t' || s == '\\n');\n };\n\n this.match = function(s, canCommentOut) {\n if (canCommentOut == undefined || canCommentOut == null)\n canCommentOut = true;\n this.skipWhitespace(canCommentOut);\n if (this.input.substring(this.pos, this.pos + s.length) == s) {\n this.pos += s.length;\n } else {\n throw \"Token mismatch, expected \" + s + \", found \"\n + this.input.substring(this.pos);\n };\n this.skipWhitespace(canCommentOut);\n };\n\n this.tryMatch = function(s, canCommentOut) {\n if (canCommentOut == undefined || canCommentOut == null)\n canCommentOut = true;\n this.skipWhitespace(canCommentOut);\n if (this.input.substring(this.pos, this.pos + s.length) == s) {\n return true;\n } else {\n return false;\n };\n this.skipWhitespace(canCommentOut);\n };\n\n /* when search for a match all text can be ignored, not just white space */\n this.matchAt = function() {\n while (this.input.length > this.pos && this.input[this.pos] != '@') {\n this.pos++;\n };\n\n if (this.input[this.pos] == '@') {\n return true;\n };\n return false;\n };\n\n this.skipWhitespace = function(canCommentOut) {\n while (this.isWhitespace(this.input[this.pos])) {\n this.pos++;\n };\n if (this.input[this.pos] == \"%\" && canCommentOut == true) {\n while (this.input[this.pos] != \"\\n\") {\n this.pos++;\n };\n this.skipWhitespace(canCommentOut);\n };\n };\n\n this.value_braces = function() {\n var bracecount = 0;\n this.match(\"{\", false);\n var start = this.pos;\n var escaped = false;\n while (true) {\n if (!escaped) {\n if (this.input[this.pos] == '}') {\n if (bracecount > 0) {\n bracecount--;\n } else {\n var end = this.pos;\n this.match(\"}\", false);\n return this.input.substring(start, end);\n };\n } else if (this.input[this.pos] == '{') {\n bracecount++;\n } else if (this.pos >= this.input.length - 1) {\n throw \"Unterminated value\";\n };\n };\n if (this.input[this.pos] == '\\\\' && escaped == false)\n escaped = true;\n else\n escaped = false;\n this.pos++;\n };\n };\n\n this.value_comment = function() {\n var str = '';\n var brcktCnt = 0;\n while (!(this.tryMatch(\"}\", false) && brcktCnt == 0)) {\n str = str + this.input[this.pos];\n if (this.input[this.pos] == '{')\n brcktCnt++;\n if (this.input[this.pos] == '}')\n brcktCnt--;\n if (this.pos >= this.input.length - 1) {\n throw \"Unterminated value:\" + this.input.substring(start);\n };\n this.pos++;\n };\n return str;\n };\n\n this.value_quotes = function() {\n this.match('\"', false);\n var start = this.pos;\n var escaped = false;\n while (true) {\n if (!escaped) {\n if (this.input[this.pos] == '\"') {\n var end = this.pos;\n this.match('\"', false);\n return this.input.substring(start, end);\n } else if (this.pos >= this.input.length - 1) {\n throw \"Unterminated value:\" + this.input.substring(start);\n };\n }\n if (this.input[this.pos] == '\\\\' && escaped == false)\n escaped = true;\n else\n escaped = false;\n this.pos++;\n };\n };\n\n this.single_value = function() {\n var start = this.pos;\n if (this.tryMatch(\"{\")) {\n return this.value_braces();\n } else if (this.tryMatch('\"')) {\n return this.value_quotes();\n } else {\n var k = this.key();\n if (k.match(\"^[0-9]+$\"))\n return k;\n else if (this.months.indexOf(k.toLowerCase()) >= 0)\n return k.toLowerCase();\n else\n throw \"Value expected:\" + this.input.substring(start) + ' for key: ' + k;\n \n };\n };\n\n this.value = function() {\n var values = [];\n values.push(this.single_value());\n while (this.tryMatch(\"#\")) {\n this.match(\"#\");\n values.push(this.single_value());\n };\n return values.join(\"\");\n };\n\n this.key = function() {\n var start = this.pos;\n while (true) {\n if (this.pos >= this.input.length) {\n throw \"Runaway key\";\n };\n // а-яА-Я is Cyrillic\n //console.log(this.input[this.pos]);\n if (this.notKey.indexOf(this.input[this.pos]) >= 0) {\n return this.input.substring(start, this.pos);\n } else {\n this.pos++;\n \n };\n };\n };\n\n this.key_equals_value = function() {\n var key = this.key();\n if (this.tryMatch(\"=\")) {\n this.match(\"=\");\n var val = this.value();\n return [ key, val ];\n } else {\n throw \"... = value expected, equals sign missing:\"\n + this.input.substring(this.pos);\n };\n };\n\n this.key_value_list = function() {\n var kv = this.key_equals_value();\n this.currentEntry['entryTags'] = {};\n this.currentEntry['entryTags'][kv[0]] = kv[1];\n while (this.tryMatch(\",\")) {\n this.match(\",\");\n // fixes problems with commas at the end of a list\n if (this.tryMatch(\"}\")) {\n break;\n }\n ;\n kv = this.key_equals_value();\n this.currentEntry['entryTags'][kv[0]] = kv[1];\n };\n };\n\n this.entry_body = function(d) {\n this.currentEntry = {};\n this.currentEntry['citationKey'] = this.key();\n this.currentEntry['entryType'] = d.substring(1);\n this.match(\",\");\n this.key_value_list();\n this.entries.push(this.currentEntry);\n };\n\n this.directive = function() {\n this.match(\"@\");\n return \"@\" + this.key();\n };\n\n this.preamble = function() {\n this.currentEntry = {};\n this.currentEntry['entryType'] = 'PREAMBLE';\n this.currentEntry['entry'] = this.value_comment();\n this.entries.push(this.currentEntry);\n };\n\n this.comment = function() {\n this.currentEntry = {};\n this.currentEntry['entryType'] = 'COMMENT';\n this.currentEntry['entry'] = this.value_comment();\n this.entries.push(this.currentEntry);\n };\n\n this.entry = function(d) {\n this.entry_body(d);\n };\n\n this.bibtex = function() {\n while (this.matchAt()) {\n var d = this.directive();\n this.match(\"{\");\n if (d == \"@STRING\") {\n this.string();\n } else if (d == \"@PREAMBLE\") {\n this.preamble();\n } else if (d == \"@COMMENT\") {\n this.comment();\n } else {\n this.entry(d);\n }\n this.match(\"}\");\n };\n };\n };\n \n exports.toJSON = function(bibtex) {\n var b = new BibtexParser();\n b.setInput(bibtex);\n b.bibtex();\n return b.entries;\n };\n\n /* added during hackathon don't hate on me */\n exports.toBibtex = function(json) {\n var out = '';\n for ( var i in json) {\n out += \"@\" + json[i].entryType;\n out += '{';\n if (json[i].citationKey)\n out += json[i].citationKey + ', ';\n if (json[i].entry)\n out += json[i].entry ;\n if (json[i].entryTags) {\n var tags = '';\n for (var jdx in json[i].entryTags) {\n if (tags.length != 0)\n tags += ', ';\n tags += jdx + '= {' + json[i].entryTags[jdx] + '}';\n }\n out += tags;\n }\n out += '}\\n\\n';\n }\n return out;\n \n };\n\n})(typeof exports === 'undefined' ? this['bibtexParse'] = {} : exports);\n\n/* end bibtexParse */\n","import bibtexParse from \"bibtex-parse-js\";\n\nexport default function(dom, data) {\n\n //TODO populate bibliography\n\n let rawBib = `\n @article{gregor2015draw,\n title={DRAW: A recurrent neural network for image generation},\n author={Gregor, Karol and Danihelka, Ivo and Graves, Alex and Rezende, Danilo Jimenez and Wierstra, Daan},\n journal={arXivreprint arXiv:1502.04623},\n year={2015}\n }\n @article{mercier2011humans,\n title={Why do humans reason? Arguments for an argumentative theory},\n author={Mercier, Hugo and Sperber, Dan},\n journal={Behavioral and brain sciences},\n volume={34},\n number={02},\n pages={57--74},\n year={2011},\n publisher={Cambridge Univ Press}\n }`;\n\n var bibliography = {};\n bibtexParse.toJSON(rawBib).forEach(e => {\n bibliography[e.citationKey] = e.entryTags;\n bibliography[e.citationKey].type = e.entryType;\n });\n\n let citations = {};\n var citeTags = [].slice.apply(dom.querySelectorAll(\"dt-cite\"));\n citeTags.forEach(el => {\n let citationKeys = el.textContent.split(\",\");\n citationKeys.forEach(key => {\n if (bibliography[key]) {\n citations[key] = bibliography[key];\n } else {\n console.warn(\"No bibliography entry found for: \" + key);\n }\n });\n });\n data.citations = citations;\n}\n","import base from './styles-base.css';\nimport layout from './styles-layout.css';\nimport article from './styles-article.css';\nimport code from './styles-code.css';\n\nexport default function(dom, data) {\n let s = dom.createElement(\"style\");\n s.textContent = base + layout + article + code;\n dom.querySelector(\"head\").appendChild(s);\n}\n","import logo from \"./distill-logo.svg\";\n\nconst html = `\n\n\n
    \n`\n\nexport default function(dom, data) {\n dom.querySelector('dt-header').innerHTML = html;\n}\n","const html = `\n\n\n
    \n

    References

    \n \n

    Errors, Reuse, and Citation

    \n

    If you see mistakes or want to suggest changes, please submit a pull request on github.

    \n

    Diagrams and text are licensed under Creative Commons Attribution CC-BY 2.0, unless noted otherwise, with the source available on available on github. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: “Figure from …”.

    \n

    For attribution in academic contexts, please cite this work as

    \n
    \n  

    BibTeX citation

    \n
    \n
    \n`;\n\n// distill.data().then(function(data) {\n// var as = el.querySelectorAll(\"a.github\");\n// [].forEach.call(as, function(a) {\n// a.setAttribute(\"href\", data.github);\n// });\n// el.querySelector(\".citation.short\").textContent = data.concatenatedAuthors + \", \" + '\"' + data.title + '\", Distill, ' + data.firstPublishedYear + \".\";\n// var bibtex = \"@article{\" + data.slug + \",\\n\";\n// bibtex += \" author = {\" + data.bibtexAuthors + \"},\\n\";\n// bibtex += \" title = {\" + data.title + \"},\\n\";\n// bibtex += \" journal = {Distill},\\n\";\n// bibtex += \" year = {\" + data.firstPublishedYear + \"},\\n\";\n// bibtex += \" note = {\" + data.url + \"}\\n\";\n// bibtex += \"}\";\n// el.querySelector(\".citation.long\").textContent = bibtex;\n// })\n\nexport default function(dom, data) {\n dom.querySelector('dt-appendix').innerHTML = html;\n}\n","import logo from \"./distill-logo.svg\";\n\nconst html = `\n\n\n
    \n \n ${logo}\n Distill\n is dedicated to clear explanations of machine learning\n
    \n`;\n\nexport default function(dom, data) {\n dom.querySelector('dt-footer').innerHTML = html;\n}\n","export default function(dom, data) {\n\n let citations = Object.keys(data.citations).map(c => data.citations[c]);\n citations.sort((a, b) => {\n return a.author.localeCompare(b.author);\n });\n\n var citeTags = [].slice.apply(dom.querySelectorAll(\"dt-cite\"));\n citeTags.forEach(el => {\n var keys = el.textContent.split(\",\");\n var cite_string = keys.map(inline_cite).join(\", \");\n el.innerHTML = cite_string;\n });\n\n let bibEl = dom.querySelector(\"dt-bibliography\");\n let ol = dom.createElement(\"ol\");\n citations.forEach(citation => {\n let el = dom.createElement(\"li\");\n el.textContent = bibliography_cite(citation);\n ol.appendChild(el);\n })\n bibEl.appendChild(ol);\n\n function inline_cite(key){\n if (key in data.citations){\n var ent = data.citations[key];\n var names = ent.author.split(\" and \");\n names = names.map(name => name.split(\",\")[0].trim())\n var year = ent.year;\n if (names.length == 1) return names[0] + \", \" + year;\n if (names.length == 2) return names[0] + \" & \" + names[1] + \", \" + year;\n if (names.length > 2) return names[0] + \", et al., \" + year;\n } else {\n return \"?\";\n }\n }\n\n function bibliography_cite(ent){\n if (ent){\n var names = ent.author.split(\" and \");\n var cite = \"\";\n let name_strings = names.map(name => {\n var last = name.split(\",\")[0].trim();\n var firsts = name.split(\",\")[1];\n if (firsts != undefined) {\n var initials = firsts.trim().split(\" \").map(s => s.trim()[0]);\n return last + \", \" + initials.join(\".\")+\".\";\n }\n return last;\n });\n if (names.length > 1) {\n cite += name_strings.slice(0, names.length-1).join(\", \");\n cite += \" and \" + name_strings[names.length-1];\n } else {\n cite += name_strings[0]\n }\n cite += \", \" + ent.year + \". \"\n cite += ent.title + \". \"\n cite += (ent.journal || ent.booktitle || \"\")\n if (\"volume\" in ent){\n var issue = ent.issue || ent.number;\n issue = (issue != undefined)? \"(\"+issue+\")\" : \"\";\n cite += \", Vol \" + ent.volume + issue;\n }\n if (\"pages\" in ent){\n cite += \", pp. \" + ent.pages\n }\n cite += \". \"\n return cite\n } else {\n return \"?\";\n }\n }\n\n\n //https://scholar.google.com/scholar?q=allintitle%3ADocument+author%3Aolah\n function get_URL(ent){\n if (ent){\n var names = ent.author.split(\" and \");\n names = names.map(name => name.split(\",\")[0].trim())\n var title = ent.title.split(\" \")//.replace(/[,:]/, \"\")\n var url = \"http://search.labs.crossref.org/dois?\"//\"\"https://scholar.google.com/scholar?\"\n url += uris({q: names.join(\" \") + \" \" + title.join(\" \")})\n }\n\n }\n}\n","/**\n * marked - a markdown parser\n * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/chjj/marked\n */\n\n;(function() {\n\n/**\n * Block-Level Grammar\n */\n\nvar block = {\n newline: /^\\n+/,\n code: /^( {4}[^\\n]+\\n*)+/,\n fences: noop,\n hr: /^( *[-*_]){3,} *(?:\\n+|$)/,\n heading: /^ *(#{1,6}) *([^\\n]+?) *#* *(?:\\n+|$)/,\n nptable: noop,\n lheading: /^([^\\n]+)\\n *(=|-){2,} *(?:\\n+|$)/,\n blockquote: /^( *>[^\\n]+(\\n(?!def)[^\\n]+)*\\n*)+/,\n list: /^( *)(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?!\\1bull )\\n*|\\s*$)/,\n html: /^ *(?:comment *(?:\\n|\\s*$)|closed *(?:\\n{2,}|\\s*$)|closing *(?:\\n{2,}|\\s*$))/,\n def: /^ *\\[([^\\]]+)\\]: *]+)>?(?: +[\"(]([^\\n]+)[\")])? *(?:\\n+|$)/,\n table: noop,\n paragraph: /^((?:[^\\n]+\\n?(?!hr|heading|lheading|blockquote|tag|def))+)\\n*/,\n text: /^[^\\n]+/\n};\n\nblock.bullet = /(?:[*+-]|\\d+\\.)/;\nblock.item = /^( *)(bull) [^\\n]*(?:\\n(?!\\1bull )[^\\n]*)*/;\nblock.item = replace(block.item, 'gm')\n (/bull/g, block.bullet)\n ();\n\nblock.list = replace(block.list)\n (/bull/g, block.bullet)\n ('hr', '\\\\n+(?=\\\\1?(?:[-*_] *){3,}(?:\\\\n+|$))')\n ('def', '\\\\n+(?=' + block.def.source + ')')\n ();\n\nblock.blockquote = replace(block.blockquote)\n ('def', block.def)\n ();\n\nblock._tag = '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code'\n + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo'\n + '|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:/|[^\\\\w\\\\s@]*@)\\\\b';\n\nblock.html = replace(block.html)\n ('comment', //)\n ('closed', /<(tag)[\\s\\S]+?<\\/\\1>/)\n ('closing', /])*?>/)\n (/tag/g, block._tag)\n ();\n\nblock.paragraph = replace(block.paragraph)\n ('hr', block.hr)\n ('heading', block.heading)\n ('lheading', block.lheading)\n ('blockquote', block.blockquote)\n ('tag', '<' + block._tag)\n ('def', block.def)\n ();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge({}, block.normal, {\n fences: /^ *(`{3,}|~{3,})[ \\.]*(\\S+)? *\\n([\\s\\S]*?)\\s*\\1 *(?:\\n+|$)/,\n paragraph: /^/,\n heading: /^ *(#{1,6}) +([^\\n]+?) *#* *(?:\\n+|$)/\n});\n\nblock.gfm.paragraph = replace(block.paragraph)\n ('(?!', '(?!'\n + block.gfm.fences.source.replace('\\\\1', '\\\\2') + '|'\n + block.list.source.replace('\\\\1', '\\\\3') + '|')\n ();\n\n/**\n * GFM + Tables Block Grammar\n */\n\nblock.tables = merge({}, block.gfm, {\n nptable: /^ *(\\S.*\\|.*)\\n *([-:]+ *\\|[-| :]*)\\n((?:.*\\|.*(?:\\n|$))*)\\n*/,\n table: /^ *\\|(.+)\\n *\\|( *[-:]+[-| :]*)\\n((?: *\\|.*(?:\\n|$))*)\\n*/\n});\n\n/**\n * Block Lexer\n */\n\nfunction Lexer(options) {\n this.tokens = [];\n this.tokens.links = {};\n this.options = options || marked.defaults;\n this.rules = block.normal;\n\n if (this.options.gfm) {\n if (this.options.tables) {\n this.rules = block.tables;\n } else {\n this.rules = block.gfm;\n }\n }\n}\n\n/**\n * Expose Block Rules\n */\n\nLexer.rules = block;\n\n/**\n * Static Lex Method\n */\n\nLexer.lex = function(src, options) {\n var lexer = new Lexer(options);\n return lexer.lex(src);\n};\n\n/**\n * Preprocessing\n */\n\nLexer.prototype.lex = function(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n')\n .replace(/\\t/g, ' ')\n .replace(/\\u00a0/g, ' ')\n .replace(/\\u2424/g, '\\n');\n\n return this.token(src, true);\n};\n\n/**\n * Lexing\n */\n\nLexer.prototype.token = function(src, top, bq) {\n var src = src.replace(/^ +$/gm, '')\n , next\n , loose\n , cap\n , bull\n , b\n , item\n , space\n , i\n , l;\n\n while (src) {\n // newline\n if (cap = this.rules.newline.exec(src)) {\n src = src.substring(cap[0].length);\n if (cap[0].length > 1) {\n this.tokens.push({\n type: 'space'\n });\n }\n }\n\n // code\n if (cap = this.rules.code.exec(src)) {\n src = src.substring(cap[0].length);\n cap = cap[0].replace(/^ {4}/gm, '');\n this.tokens.push({\n type: 'code',\n text: !this.options.pedantic\n ? cap.replace(/\\n+$/, '')\n : cap\n });\n continue;\n }\n\n // fences (gfm)\n if (cap = this.rules.fences.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'code',\n lang: cap[2],\n text: cap[3] || ''\n });\n continue;\n }\n\n // heading\n if (cap = this.rules.heading.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'heading',\n depth: cap[1].length,\n text: cap[2]\n });\n continue;\n }\n\n // table no leading pipe (gfm)\n if (top && (cap = this.rules.nptable.exec(src))) {\n src = src.substring(cap[0].length);\n\n item = {\n type: 'table',\n header: cap[1].replace(/^ *| *\\| *$/g, '').split(/ *\\| */),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3].replace(/\\n$/, '').split('\\n')\n };\n\n for (i = 0; i < item.align.length; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n for (i = 0; i < item.cells.length; i++) {\n item.cells[i] = item.cells[i].split(/ *\\| */);\n }\n\n this.tokens.push(item);\n\n continue;\n }\n\n // lheading\n if (cap = this.rules.lheading.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'heading',\n depth: cap[2] === '=' ? 1 : 2,\n text: cap[1]\n });\n continue;\n }\n\n // hr\n if (cap = this.rules.hr.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'hr'\n });\n continue;\n }\n\n // blockquote\n if (cap = this.rules.blockquote.exec(src)) {\n src = src.substring(cap[0].length);\n\n this.tokens.push({\n type: 'blockquote_start'\n });\n\n cap = cap[0].replace(/^ *> ?/gm, '');\n\n // Pass `top` to keep the current\n // \"toplevel\" state. This is exactly\n // how markdown.pl works.\n this.token(cap, top, true);\n\n this.tokens.push({\n type: 'blockquote_end'\n });\n\n continue;\n }\n\n // list\n if (cap = this.rules.list.exec(src)) {\n src = src.substring(cap[0].length);\n bull = cap[2];\n\n this.tokens.push({\n type: 'list_start',\n ordered: bull.length > 1\n });\n\n // Get each top-level item.\n cap = cap[0].match(this.rules.item);\n\n next = false;\n l = cap.length;\n i = 0;\n\n for (; i < l; i++) {\n item = cap[i];\n\n // Remove the list item's bullet\n // so it is seen as the next token.\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+\\.) +/, '');\n\n // Outdent whatever the\n // list item contains. Hacky.\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic\n ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')\n : item.replace(/^ {1,4}/gm, '');\n }\n\n // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n if (this.options.smartLists && i !== l - 1) {\n b = block.bullet.exec(cap[i + 1])[0];\n if (bull !== b && !(bull.length > 1 && b.length > 1)) {\n src = cap.slice(i + 1).join('\\n') + src;\n i = l - 1;\n }\n }\n\n // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n loose = next || /\\n\\n(?!\\s*$)/.test(item);\n if (i !== l - 1) {\n next = item.charAt(item.length - 1) === '\\n';\n if (!loose) loose = next;\n }\n\n this.tokens.push({\n type: loose\n ? 'loose_item_start'\n : 'list_item_start'\n });\n\n // Recurse.\n this.token(item, false, bq);\n\n this.tokens.push({\n type: 'list_item_end'\n });\n }\n\n this.tokens.push({\n type: 'list_end'\n });\n\n continue;\n }\n\n // html\n if (cap = this.rules.html.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: this.options.sanitize\n ? 'paragraph'\n : 'html',\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: cap[0]\n });\n continue;\n }\n\n // def\n if ((!bq && top) && (cap = this.rules.def.exec(src))) {\n src = src.substring(cap[0].length);\n this.tokens.links[cap[1].toLowerCase()] = {\n href: cap[2],\n title: cap[3]\n };\n continue;\n }\n\n // table (gfm)\n if (top && (cap = this.rules.table.exec(src))) {\n src = src.substring(cap[0].length);\n\n item = {\n type: 'table',\n header: cap[1].replace(/^ *| *\\| *$/g, '').split(/ *\\| */),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3].replace(/(?: *\\| *)?\\n$/, '').split('\\n')\n };\n\n for (i = 0; i < item.align.length; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n for (i = 0; i < item.cells.length; i++) {\n item.cells[i] = item.cells[i]\n .replace(/^ *\\| *| *\\| *$/g, '')\n .split(/ *\\| */);\n }\n\n this.tokens.push(item);\n\n continue;\n }\n\n // top-level paragraph\n if (top && (cap = this.rules.paragraph.exec(src))) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'paragraph',\n text: cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1]\n });\n continue;\n }\n\n // text\n if (cap = this.rules.text.exec(src)) {\n // Top-level should never reach here.\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'text',\n text: cap[0]\n });\n continue;\n }\n\n if (src) {\n throw new\n Error('Infinite loop on byte: ' + src.charCodeAt(0));\n }\n }\n\n return this.tokens;\n};\n\n/**\n * Inline-Level Grammar\n */\n\nvar inline = {\n escape: /^\\\\([\\\\`*{}\\[\\]()#+\\-.!_>])/,\n autolink: /^<([^ >]+(@|:\\/)[^ >]+)>/,\n url: noop,\n tag: /^|^<\\/?\\w+(?:\"[^\"]*\"|'[^']*'|[^'\">])*?>/,\n link: /^!?\\[(inside)\\]\\(href\\)/,\n reflink: /^!?\\[(inside)\\]\\s*\\[([^\\]]*)\\]/,\n nolink: /^!?\\[((?:\\[[^\\]]*\\]|[^\\[\\]])*)\\]/,\n strong: /^__([\\s\\S]+?)__(?!_)|^\\*\\*([\\s\\S]+?)\\*\\*(?!\\*)/,\n em: /^\\b_((?:[^_]|__)+?)_\\b|^\\*((?:\\*\\*|[\\s\\S])+?)\\*(?!\\*)/,\n code: /^(`+)\\s*([\\s\\S]*?[^`])\\s*\\1(?!`)/,\n br: /^ {2,}\\n(?!\\s*$)/,\n del: noop,\n text: /^[\\s\\S]+?(?=[\\\\?(?:\\s+['\"]([\\s\\S]*?)['\"])?\\s*/;\n\ninline.link = replace(inline.link)\n ('inside', inline._inside)\n ('href', inline._href)\n ();\n\ninline.reflink = replace(inline.reflink)\n ('inside', inline._inside)\n ();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge({}, inline.normal, {\n strong: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n em: /^_(?=\\S)([\\s\\S]*?\\S)_(?!_)|^\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)/\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge({}, inline.normal, {\n escape: replace(inline.escape)('])', '~|])')(),\n url: /^(https?:\\/\\/[^\\s<]+[^<.,:;\"')\\]\\s])/,\n del: /^~~(?=\\S)([\\s\\S]*?\\S)~~/,\n text: replace(inline.text)\n (']|', '~]|')\n ('|', '|https?://|')\n ()\n});\n\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = merge({}, inline.gfm, {\n br: replace(inline.br)('{2,}', '*')(),\n text: replace(inline.gfm.text)('{2,}', '*')()\n});\n\n/**\n * Inline Lexer & Compiler\n */\n\nfunction InlineLexer(links, options) {\n this.options = options || marked.defaults;\n this.links = links;\n this.rules = inline.normal;\n this.renderer = this.options.renderer || new Renderer;\n this.renderer.options = this.options;\n\n if (!this.links) {\n throw new\n Error('Tokens array requires a `links` property.');\n }\n\n if (this.options.gfm) {\n if (this.options.breaks) {\n this.rules = inline.breaks;\n } else {\n this.rules = inline.gfm;\n }\n } else if (this.options.pedantic) {\n this.rules = inline.pedantic;\n }\n}\n\n/**\n * Expose Inline Rules\n */\n\nInlineLexer.rules = inline;\n\n/**\n * Static Lexing/Compiling Method\n */\n\nInlineLexer.output = function(src, links, options) {\n var inline = new InlineLexer(links, options);\n return inline.output(src);\n};\n\n/**\n * Lexing/Compiling\n */\n\nInlineLexer.prototype.output = function(src) {\n var out = ''\n , link\n , text\n , href\n , cap;\n\n while (src) {\n // escape\n if (cap = this.rules.escape.exec(src)) {\n src = src.substring(cap[0].length);\n out += cap[1];\n continue;\n }\n\n // autolink\n if (cap = this.rules.autolink.exec(src)) {\n src = src.substring(cap[0].length);\n if (cap[2] === '@') {\n text = cap[1].charAt(6) === ':'\n ? this.mangle(cap[1].substring(7))\n : this.mangle(cap[1]);\n href = this.mangle('mailto:') + text;\n } else {\n text = escape(cap[1]);\n href = text;\n }\n out += this.renderer.link(href, null, text);\n continue;\n }\n\n // url (gfm)\n if (!this.inLink && (cap = this.rules.url.exec(src))) {\n src = src.substring(cap[0].length);\n text = escape(cap[1]);\n href = text;\n out += this.renderer.link(href, null, text);\n continue;\n }\n\n // tag\n if (cap = this.rules.tag.exec(src)) {\n if (!this.inLink && /^/i.test(cap[0])) {\n this.inLink = false;\n }\n src = src.substring(cap[0].length);\n out += this.options.sanitize\n ? this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape(cap[0])\n : cap[0]\n continue;\n }\n\n // link\n if (cap = this.rules.link.exec(src)) {\n src = src.substring(cap[0].length);\n this.inLink = true;\n out += this.outputLink(cap, {\n href: cap[2],\n title: cap[3]\n });\n this.inLink = false;\n continue;\n }\n\n // reflink, nolink\n if ((cap = this.rules.reflink.exec(src))\n || (cap = this.rules.nolink.exec(src))) {\n src = src.substring(cap[0].length);\n link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = this.links[link.toLowerCase()];\n if (!link || !link.href) {\n out += cap[0].charAt(0);\n src = cap[0].substring(1) + src;\n continue;\n }\n this.inLink = true;\n out += this.outputLink(cap, link);\n this.inLink = false;\n continue;\n }\n\n // strong\n if (cap = this.rules.strong.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.strong(this.output(cap[2] || cap[1]));\n continue;\n }\n\n // em\n if (cap = this.rules.em.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.em(this.output(cap[2] || cap[1]));\n continue;\n }\n\n // code\n if (cap = this.rules.code.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.codespan(escape(cap[2], true));\n continue;\n }\n\n // br\n if (cap = this.rules.br.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.br();\n continue;\n }\n\n // del (gfm)\n if (cap = this.rules.del.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.del(this.output(cap[1]));\n continue;\n }\n\n // text\n if (cap = this.rules.text.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.text(escape(this.smartypants(cap[0])));\n continue;\n }\n\n if (src) {\n throw new\n Error('Infinite loop on byte: ' + src.charCodeAt(0));\n }\n }\n\n return out;\n};\n\n/**\n * Compile Link\n */\n\nInlineLexer.prototype.outputLink = function(cap, link) {\n var href = escape(link.href)\n , title = link.title ? escape(link.title) : null;\n\n return cap[0].charAt(0) !== '!'\n ? this.renderer.link(href, title, this.output(cap[1]))\n : this.renderer.image(href, title, escape(cap[1]));\n};\n\n/**\n * Smartypants Transformations\n */\n\nInlineLexer.prototype.smartypants = function(text) {\n if (!this.options.smartypants) return text;\n return text\n // em-dashes\n .replace(/---/g, '\\u2014')\n // en-dashes\n .replace(/--/g, '\\u2013')\n // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, '$1\\u2018')\n // closing singles & apostrophes\n .replace(/'/g, '\\u2019')\n // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, '$1\\u201c')\n // closing doubles\n .replace(/\"/g, '\\u201d')\n // ellipses\n .replace(/\\.{3}/g, '\\u2026');\n};\n\n/**\n * Mangle Links\n */\n\nInlineLexer.prototype.mangle = function(text) {\n if (!this.options.mangle) return text;\n var out = ''\n , l = text.length\n , i = 0\n , ch;\n\n for (; i < l; i++) {\n ch = text.charCodeAt(i);\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n};\n\n/**\n * Renderer\n */\n\nfunction Renderer(options) {\n this.options = options || {};\n}\n\nRenderer.prototype.code = function(code, lang, escaped) {\n if (this.options.highlight) {\n var out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n if (!lang) {\n return '
    '\n      + (escaped ? code : escape(code, true))\n      + '\\n
    ';\n }\n\n return '
    '\n    + (escaped ? code : escape(code, true))\n    + '\\n
    \\n';\n};\n\nRenderer.prototype.blockquote = function(quote) {\n return '
    \\n' + quote + '
    \\n';\n};\n\nRenderer.prototype.html = function(html) {\n return html;\n};\n\nRenderer.prototype.heading = function(text, level, raw) {\n return ''\n + text\n + '\\n';\n};\n\nRenderer.prototype.hr = function() {\n return this.options.xhtml ? '
    \\n' : '
    \\n';\n};\n\nRenderer.prototype.list = function(body, ordered) {\n var type = ordered ? 'ol' : 'ul';\n return '<' + type + '>\\n' + body + '\\n';\n};\n\nRenderer.prototype.listitem = function(text) {\n return '
  • ' + text + '
  • \\n';\n};\n\nRenderer.prototype.paragraph = function(text) {\n return '

    ' + text + '

    \\n';\n};\n\nRenderer.prototype.table = function(header, body) {\n return '\\n'\n + '\\n'\n + header\n + '\\n'\n + '\\n'\n + body\n + '\\n'\n + '
    \\n';\n};\n\nRenderer.prototype.tablerow = function(content) {\n return '\\n' + content + '\\n';\n};\n\nRenderer.prototype.tablecell = function(content, flags) {\n var type = flags.header ? 'th' : 'td';\n var tag = flags.align\n ? '<' + type + ' style=\"text-align:' + flags.align + '\">'\n : '<' + type + '>';\n return tag + content + '\\n';\n};\n\n// span level renderer\nRenderer.prototype.strong = function(text) {\n return '' + text + '';\n};\n\nRenderer.prototype.em = function(text) {\n return '' + text + '';\n};\n\nRenderer.prototype.codespan = function(text) {\n return '' + text + '';\n};\n\nRenderer.prototype.br = function() {\n return this.options.xhtml ? '
    ' : '
    ';\n};\n\nRenderer.prototype.del = function(text) {\n return '' + text + '';\n};\n\nRenderer.prototype.link = function(href, title, text) {\n if (this.options.sanitize) {\n try {\n var prot = decodeURIComponent(unescape(href))\n .replace(/[^\\w:]/g, '')\n .toLowerCase();\n } catch (e) {\n return '';\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0) {\n return '';\n }\n }\n var out = '
    ';\n return out;\n};\n\nRenderer.prototype.image = function(href, title, text) {\n var out = '\"'' : '>';\n return out;\n};\n\nRenderer.prototype.text = function(text) {\n return text;\n};\n\n/**\n * Parsing & Compiling\n */\n\nfunction Parser(options) {\n this.tokens = [];\n this.token = null;\n this.options = options || marked.defaults;\n this.options.renderer = this.options.renderer || new Renderer;\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n}\n\n/**\n * Static Parse Method\n */\n\nParser.parse = function(src, options, renderer) {\n var parser = new Parser(options, renderer);\n return parser.parse(src);\n};\n\n/**\n * Parse Loop\n */\n\nParser.prototype.parse = function(src) {\n this.inline = new InlineLexer(src.links, this.options, this.renderer);\n this.tokens = src.reverse();\n\n var out = '';\n while (this.next()) {\n out += this.tok();\n }\n\n return out;\n};\n\n/**\n * Next Token\n */\n\nParser.prototype.next = function() {\n return this.token = this.tokens.pop();\n};\n\n/**\n * Preview Next Token\n */\n\nParser.prototype.peek = function() {\n return this.tokens[this.tokens.length - 1] || 0;\n};\n\n/**\n * Parse Text Tokens\n */\n\nParser.prototype.parseText = function() {\n var body = this.token.text;\n\n while (this.peek().type === 'text') {\n body += '\\n' + this.next().text;\n }\n\n return this.inline.output(body);\n};\n\n/**\n * Parse Current Token\n */\n\nParser.prototype.tok = function() {\n switch (this.token.type) {\n case 'space': {\n return '';\n }\n case 'hr': {\n return this.renderer.hr();\n }\n case 'heading': {\n return this.renderer.heading(\n this.inline.output(this.token.text),\n this.token.depth,\n this.token.text);\n }\n case 'code': {\n return this.renderer.code(this.token.text,\n this.token.lang,\n this.token.escaped);\n }\n case 'table': {\n var header = ''\n , body = ''\n , i\n , row\n , cell\n , flags\n , j;\n\n // header\n cell = '';\n for (i = 0; i < this.token.header.length; i++) {\n flags = { header: true, align: this.token.align[i] };\n cell += this.renderer.tablecell(\n this.inline.output(this.token.header[i]),\n { header: true, align: this.token.align[i] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n for (i = 0; i < this.token.cells.length; i++) {\n row = this.token.cells[i];\n\n cell = '';\n for (j = 0; j < row.length; j++) {\n cell += this.renderer.tablecell(\n this.inline.output(row[j]),\n { header: false, align: this.token.align[j] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n return this.renderer.table(header, body);\n }\n case 'blockquote_start': {\n var body = '';\n\n while (this.next().type !== 'blockquote_end') {\n body += this.tok();\n }\n\n return this.renderer.blockquote(body);\n }\n case 'list_start': {\n var body = ''\n , ordered = this.token.ordered;\n\n while (this.next().type !== 'list_end') {\n body += this.tok();\n }\n\n return this.renderer.list(body, ordered);\n }\n case 'list_item_start': {\n var body = '';\n\n while (this.next().type !== 'list_item_end') {\n body += this.token.type === 'text'\n ? this.parseText()\n : this.tok();\n }\n\n return this.renderer.listitem(body);\n }\n case 'loose_item_start': {\n var body = '';\n\n while (this.next().type !== 'list_item_end') {\n body += this.tok();\n }\n\n return this.renderer.listitem(body);\n }\n case 'html': {\n var html = !this.token.pre && !this.options.pedantic\n ? this.inline.output(this.token.text)\n : this.token.text;\n return this.renderer.html(html);\n }\n case 'paragraph': {\n return this.renderer.paragraph(this.inline.output(this.token.text));\n }\n case 'text': {\n return this.renderer.paragraph(this.parseText());\n }\n }\n};\n\n/**\n * Helpers\n */\n\nfunction escape(html, encode) {\n return html\n .replace(!encode ? /&(?!#?\\w+;)/g : /&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\nfunction unescape(html) {\n\t// explicitly match decimal, hex, and named HTML entities \n return html.replace(/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/g, function(_, n) {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nfunction replace(regex, opt) {\n regex = regex.source;\n opt = opt || '';\n return function self(name, val) {\n if (!name) return new RegExp(regex, opt);\n val = val.source || val;\n val = val.replace(/(^|[^\\[])\\^/g, '$1');\n regex = regex.replace(name, val);\n return self;\n };\n}\n\nfunction noop() {}\nnoop.exec = noop;\n\nfunction merge(obj) {\n var i = 1\n , target\n , key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\n\n/**\n * Marked\n */\n\nfunction marked(src, opt, callback) {\n if (callback || typeof opt === 'function') {\n if (!callback) {\n callback = opt;\n opt = null;\n }\n\n opt = merge({}, marked.defaults, opt || {});\n\n var highlight = opt.highlight\n , tokens\n , pending\n , i = 0;\n\n try {\n tokens = Lexer.lex(src, opt)\n } catch (e) {\n return callback(e);\n }\n\n pending = tokens.length;\n\n var done = function(err) {\n if (err) {\n opt.highlight = highlight;\n return callback(err);\n }\n\n var out;\n\n try {\n out = Parser.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n\n opt.highlight = highlight;\n\n return err\n ? callback(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!pending) return done();\n\n for (; i < tokens.length; i++) {\n (function(token) {\n if (token.type !== 'code') {\n return --pending || done();\n }\n return highlight(token.text, token.lang, function(err, code) {\n if (err) return done(err);\n if (code == null || code === token.text) {\n return --pending || done();\n }\n token.text = code;\n token.escaped = true;\n --pending || done();\n });\n })(tokens[i]);\n }\n\n return;\n }\n try {\n if (opt) opt = merge({}, marked.defaults, opt);\n return Parser.parse(Lexer.lex(src, opt), opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/chjj/marked.';\n if ((opt || marked.defaults).silent) {\n return '

    An error occured:

    '\n        + escape(e.message + '', true)\n        + '
    ';\n }\n throw e;\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge(marked.defaults, opt);\n return marked;\n};\n\nmarked.defaults = {\n gfm: true,\n tables: true,\n breaks: false,\n pedantic: false,\n sanitize: false,\n sanitizer: null,\n mangle: true,\n smartLists: false,\n silent: false,\n highlight: null,\n langPrefix: 'lang-',\n smartypants: false,\n headerPrefix: '',\n renderer: new Renderer,\n xhtml: false\n};\n\n/**\n * Expose\n */\n\nmarked.Parser = Parser;\nmarked.parser = Parser.parse;\n\nmarked.Renderer = Renderer;\n\nmarked.Lexer = Lexer;\nmarked.lexer = Lexer.lex;\n\nmarked.InlineLexer = InlineLexer;\nmarked.inlineLexer = InlineLexer.output;\n\nmarked.parse = marked;\n\nif (typeof module !== 'undefined' && typeof exports === 'object') {\n module.exports = marked;\n} else if (typeof define === 'function' && define.amd) {\n define(function() { return marked; });\n} else {\n this.marked = marked;\n}\n\n}).call(function() {\n return this || (typeof window !== 'undefined' ? window : global);\n}());\n","import marked from 'marked';\n\nmarked.setOptions({\n gfm: true,\n smartypants: true\n});\n\nexport default function(dom, data) {\n let markdownElements = [].slice.call(dom.querySelectorAll('[dt-markdown]'));\n markdownElements.forEach(el => {\n let content = el.innerHTML;\n let indent = \" \";\n // Set default indents to the first or second line\n\n // content.replace(\"\\n \", \"\\n\" + indent);\n el.innerHTML = marked(content);\n });\n}\n","\n/* **********************************************\n Begin prism-core.js\n********************************************** */\n\nvar _self = (typeof window !== 'undefined')\n\t? window // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t? self // if in worker\n\t\t: {} // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n * MIT license http://www.opensource.org/licenses/mit-license.php/\n * @author Lea Verou http://lea.verou.me\n */\n\nvar Prism = (function(){\n\n// Private helper vars\nvar lang = /\\blang(?:uage)?-(\\w+)\\b/i;\nvar uniqueId = 0;\n\nvar _ = _self.Prism = {\n\tutil: {\n\t\tencode: function (tokens) {\n\t\t\tif (tokens instanceof Token) {\n\t\t\t\treturn new Token(tokens.type, _.util.encode(tokens.content), tokens.alias);\n\t\t\t} else if (_.util.type(tokens) === 'Array') {\n\t\t\t\treturn tokens.map(_.util.encode);\n\t\t\t} else {\n\t\t\t\treturn tokens.replace(/&/g, '&').replace(/ text.length) {\n\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\tbreak tokenloop;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tpattern.lastIndex = 0;\n\n\t\t\t\t\tvar match = pattern.exec(str),\n\t\t\t\t\t delNum = 1;\n\n\t\t\t\t\t// Greedy patterns can override/remove up to two previously matched tokens\n\t\t\t\t\tif (!match && greedy && i != strarr.length - 1) {\n\t\t\t\t\t\tpattern.lastIndex = pos;\n\t\t\t\t\t\tmatch = pattern.exec(text);\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar from = match.index + (lookbehind ? match[1].length : 0),\n\t\t\t\t\t\t to = match.index + match[0].length,\n\t\t\t\t\t\t k = i,\n\t\t\t\t\t\t p = pos;\n\n\t\t\t\t\t\tfor (var len = strarr.length; k < len && p < to; ++k) {\n\t\t\t\t\t\t\tp += strarr[k].length;\n\t\t\t\t\t\t\t// Move the index i to the element in strarr that is closest to from\n\t\t\t\t\t\t\tif (from >= p) {\n\t\t\t\t\t\t\t\t++i;\n\t\t\t\t\t\t\t\tpos = p;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * If strarr[i] is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\t * If strarr[k - 1] is greedy we are in conflict with another greedy pattern\n\t\t\t\t\t\t */\n\t\t\t\t\t\tif (strarr[i] instanceof Token || strarr[k - 1].greedy) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Number of tokens to delete and replace with the new match\n\t\t\t\t\t\tdelNum = k - i;\n\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!match) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(lookbehind) {\n\t\t\t\t\t\tlookbehindLength = match[1].length;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar from = match.index + lookbehindLength,\n\t\t\t\t\t match = match[0].slice(lookbehindLength),\n\t\t\t\t\t to = from + match.length,\n\t\t\t\t\t before = str.slice(0, from),\n\t\t\t\t\t after = str.slice(to);\n\n\t\t\t\t\tvar args = [i, delNum];\n\n\t\t\t\t\tif (before) {\n\t\t\t\t\t\targs.push(before);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar wrapped = new Token(token, inside? _.tokenize(match, inside) : match, alias, match, greedy);\n\n\t\t\t\t\targs.push(wrapped);\n\n\t\t\t\t\tif (after) {\n\t\t\t\t\t\targs.push(after);\n\t\t\t\t\t}\n\n\t\t\t\t\tArray.prototype.splice.apply(strarr, args);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn strarr;\n\t},\n\n\thooks: {\n\t\tall: {},\n\n\t\tadd: function (name, callback) {\n\t\t\tvar hooks = _.hooks.all;\n\n\t\t\thooks[name] = hooks[name] || [];\n\n\t\t\thooks[name].push(callback);\n\t\t},\n\n\t\trun: function (name, env) {\n\t\t\tvar callbacks = _.hooks.all[name];\n\n\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (var i=0, callback; callback = callbacks[i++];) {\n\t\t\t\tcallback(env);\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar Token = _.Token = function(type, content, alias, matchedStr, greedy) {\n\tthis.type = type;\n\tthis.content = content;\n\tthis.alias = alias;\n\t// Copy of the full string this token was created from\n\tthis.length = (matchedStr || \"\").length|0;\n\tthis.greedy = !!greedy;\n};\n\nToken.stringify = function(o, language, parent) {\n\tif (typeof o == 'string') {\n\t\treturn o;\n\t}\n\n\tif (_.util.type(o) === 'Array') {\n\t\treturn o.map(function(element) {\n\t\t\treturn Token.stringify(element, language, o);\n\t\t}).join('');\n\t}\n\n\tvar env = {\n\t\ttype: o.type,\n\t\tcontent: Token.stringify(o.content, language, parent),\n\t\ttag: 'span',\n\t\tclasses: ['token', o.type],\n\t\tattributes: {},\n\t\tlanguage: language,\n\t\tparent: parent\n\t};\n\n\tif (env.type == 'comment') {\n\t\tenv.attributes['spellcheck'] = 'true';\n\t}\n\n\tif (o.alias) {\n\t\tvar aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.alias];\n\t\tArray.prototype.push.apply(env.classes, aliases);\n\t}\n\n\t_.hooks.run('wrap', env);\n\n\tvar attributes = Object.keys(env.attributes).map(function(name) {\n\t\treturn name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '"') + '\"';\n\t}).join(' ');\n\n\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + (attributes ? ' ' + attributes : '') + '>' + env.content + '';\n\n};\n\nif (!_self.document) {\n\tif (!_self.addEventListener) {\n\t\t// in Node.js\n\t\treturn _self.Prism;\n\t}\n \t// In worker\n\t_self.addEventListener('message', function(evt) {\n\t\tvar message = JSON.parse(evt.data),\n\t\t lang = message.language,\n\t\t code = message.code,\n\t\t immediateClose = message.immediateClose;\n\n\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\tif (immediateClose) {\n\t\t\t_self.close();\n\t\t}\n\t}, false);\n\n\treturn _self.Prism;\n}\n\n//Get current script and highlight\nvar script = document.currentScript || [].slice.call(document.getElementsByTagName(\"script\")).pop();\n\nif (script) {\n\t_.filename = script.src;\n\n\tif (document.addEventListener && !script.hasAttribute('data-manual')) {\n\t\tif(document.readyState !== \"loading\") {\n\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(_.highlightAll);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(_.highlightAll, 16);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tdocument.addEventListener('DOMContentLoaded', _.highlightAll);\n\t\t}\n\t}\n}\n\nreturn _self.Prism;\n\n})();\n\nif (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = Prism;\n}\n\n// hack for components to work correctly in node.js\nif (typeof global !== 'undefined') {\n\tglobal.Prism = Prism;\n}\n\n\n/* **********************************************\n Begin prism-markup.js\n********************************************** */\n\nPrism.languages.markup = {\n\t'comment': //,\n\t'prolog': /<\\?[\\w\\W]+?\\?>/,\n\t'doctype': //i,\n\t'cdata': //i,\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<]+(?:\\s+[^\\s>\\/=]+(?:=(?:(\"|')(?:\\\\\\1|\\\\?(?!\\1)[\\w\\W])*\\1|[^\\s'\">=]+))?)*\\s*\\/?>/i,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/i,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=(?:('|\")[\\w\\W]*?(\\1)|[^\\s>]+)/i,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /[=>\"']/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': /&#?[\\da-z]{1,8};/i\n};\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function(env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&/, '&');\n\t}\n});\n\nPrism.languages.xml = Prism.languages.markup;\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\n\n/* **********************************************\n Begin prism-css.js\n********************************************** */\n\nPrism.languages.css = {\n\t'comment': /\\/\\*[\\w\\W]*?\\*\\//,\n\t'atrule': {\n\t\tpattern: /@[\\w-]+?.*?(;|(?=\\s*\\{))/i,\n\t\tinside: {\n\t\t\t'rule': /@[\\w-]+/\n\t\t\t// See rest below\n\t\t}\n\t},\n\t'url': /url\\((?:([\"'])(\\\\(?:\\r\\n|[\\w\\W])|(?!\\1)[^\\\\\\r\\n])*\\1|.*?)\\)/i,\n\t'selector': /[^\\{\\}\\s][^\\{\\};]*?(?=\\s*\\{)/,\n\t'string': {\n\t\tpattern: /(\"|')(\\\\(?:\\r\\n|[\\w\\W])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'property': /(\\b|\\B)[\\w-]+(?=\\s*:)/i,\n\t'important': /\\B!important\\b/i,\n\t'function': /[-a-z0-9]+(?=\\()/i,\n\t'punctuation': /[(){};:]/\n};\n\nPrism.languages.css['atrule'].inside.rest = Prism.util.clone(Prism.languages.css);\n\nif (Prism.languages.markup) {\n\tPrism.languages.insertBefore('markup', 'tag', {\n\t\t'style': {\n\t\t\tpattern: /()[\\w\\W]*?(?=<\\/style>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.css,\n\t\t\talias: 'language-css'\n\t\t}\n\t});\n\t\n\tPrism.languages.insertBefore('inside', 'attr-value', {\n\t\t'style-attr': {\n\t\t\tpattern: /\\s*style=(\"|').*?\\1/i,\n\t\t\tinside: {\n\t\t\t\t'attr-name': {\n\t\t\t\t\tpattern: /^\\s*style/i,\n\t\t\t\t\tinside: Prism.languages.markup.tag.inside\n\t\t\t\t},\n\t\t\t\t'punctuation': /^\\s*=\\s*['\"]|['\"]\\s*$/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /.+/i,\n\t\t\t\t\tinside: Prism.languages.css\n\t\t\t\t}\n\t\t\t},\n\t\t\talias: 'language-css'\n\t\t}\n\t}, Prism.languages.markup.tag);\n}\n\n/* **********************************************\n Begin prism-clike.js\n********************************************** */\n\nPrism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\w\\W]*?\\*\\//,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /((?:\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+)|(?:catch\\s+\\())[a-z0-9_\\.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\tpunctuation: /(\\.|\\\\)/\n\t\t}\n\t},\n\t'keyword': /\\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b/,\n\t'boolean': /\\b(true|false)\\b/,\n\t'function': /[a-z0-9_]+(?=\\()/i,\n\t'number': /\\b-?(?:0x[\\da-f]+|\\d*\\.?\\d+(?:e[+-]?\\d+)?)\\b/i,\n\t'operator': /--?|\\+\\+?|!=?=?|<=?|>=?|==?=?|&&?|\\|\\|?|\\?|\\*|\\/|~|\\^|%/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\n\n/* **********************************************\n Begin prism-javascript.js\n********************************************** */\n\nPrism.languages.javascript = Prism.languages.extend('clike', {\n\t'keyword': /\\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\\b/,\n\t'number': /\\b-?(0x[\\dA-Fa-f]+|0b[01]+|0o[0-7]+|\\d*\\.?\\d+([Ee][+-]?\\d+)?|NaN|Infinity)\\b/,\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*(?=\\()/i,\n\t'operator': /--?|\\+\\+?|!=?=?|<=?|>=?|==?=?|&&?|\\|\\|?|\\?|\\*\\*?|\\/|~|\\^|%|\\.{3}/\n});\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: /(^|[^/])\\/(?!\\/)(\\[.+?]|\\\\.|[^/\\\\\\r\\n])+\\/[gimyu]{0,5}(?=\\s*($|[\\r\\n,.;})]))/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'template-string': {\n\t\tpattern: /`(?:\\\\\\\\|\\\\?[^\\\\])*?`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /\\$\\{[^}]+\\}/,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t}\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.insertBefore('markup', 'tag', {\n\t\t'script': {\n\t\t\tpattern: /()[\\w\\W]*?(?=<\\/script>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript,\n\t\t\talias: 'language-javascript'\n\t\t}\n\t});\n}\n\nPrism.languages.js = Prism.languages.javascript;\n\n/* **********************************************\n Begin prism-file-highlight.js\n********************************************** */\n\n(function () {\n\tif (typeof self === 'undefined' || !self.Prism || !self.document || !document.querySelector) {\n\t\treturn;\n\t}\n\n\tself.Prism.fileHighlight = function() {\n\n\t\tvar Extensions = {\n\t\t\t'js': 'javascript',\n\t\t\t'py': 'python',\n\t\t\t'rb': 'ruby',\n\t\t\t'ps1': 'powershell',\n\t\t\t'psm1': 'powershell',\n\t\t\t'sh': 'bash',\n\t\t\t'bat': 'batch',\n\t\t\t'h': 'c',\n\t\t\t'tex': 'latex'\n\t\t};\n\n\t\tif(Array.prototype.forEach) { // Check to prevent error in IE8\n\t\t\tArray.prototype.slice.call(document.querySelectorAll('pre[data-src]')).forEach(function (pre) {\n\t\t\t\tvar src = pre.getAttribute('data-src');\n\n\t\t\t\tvar language, parent = pre;\n\t\t\t\tvar lang = /\\blang(?:uage)?-(?!\\*)(\\w+)\\b/i;\n\t\t\t\twhile (parent && !lang.test(parent.className)) {\n\t\t\t\t\tparent = parent.parentNode;\n\t\t\t\t}\n\n\t\t\t\tif (parent) {\n\t\t\t\t\tlanguage = (pre.className.match(lang) || [, ''])[1];\n\t\t\t\t}\n\n\t\t\t\tif (!language) {\n\t\t\t\t\tvar extension = (src.match(/\\.(\\w+)$/) || [, ''])[1];\n\t\t\t\t\tlanguage = Extensions[extension] || extension;\n\t\t\t\t}\n\n\t\t\t\tvar code = document.createElement('code');\n\t\t\t\tcode.className = 'language-' + language;\n\n\t\t\t\tpre.textContent = '';\n\n\t\t\t\tcode.textContent = 'Loading…';\n\n\t\t\t\tpre.appendChild(code);\n\n\t\t\t\tvar xhr = new XMLHttpRequest();\n\n\t\t\t\txhr.open('GET', src, true);\n\n\t\t\t\txhr.onreadystatechange = function () {\n\t\t\t\t\tif (xhr.readyState == 4) {\n\n\t\t\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n\t\t\t\t\t\t\tcode.textContent = xhr.responseText;\n\n\t\t\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (xhr.status >= 400) {\n\t\t\t\t\t\t\tcode.textContent = '✖ Error ' + xhr.status + ' while fetching file: ' + xhr.statusText;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tcode.textContent = '✖ Error: File does not exist or is empty';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\txhr.send(null);\n\t\t\t});\n\t\t}\n\n\t};\n\n\tdocument.addEventListener('DOMContentLoaded', self.Prism.fileHighlight);\n\n})();\n","import Prism from \"prismjs\";\n\nexport default function(dom, data) {\n let codeElements = [].slice.call(dom.querySelectorAll(\"dt-code\"));\n codeElements.forEach(el => {\n let content = el.textContent;\n el.innerHTML = \"\";\n let language = el.getAttribute(\"language\");\n let c = dom.createElement(\"code\");\n if (el.getAttribute(\"block\") === \"\") {\n // Let's normalize the tab indents\n content = content.replace(/\\n/, \"\");\n let tabs = content.match(/\\s*/);\n content = content.replace(new RegExp(\"\\n\" + tabs, \"g\"), \"\\n\");\n content = content.trim();\n let p = dom.createElement(\"pre\");\n p.appendChild(c);\n el.appendChild(p);\n } else {\n el.appendChild(c);\n }\n let highlighted = content;\n if (Prism.languages[language]) {\n c.setAttribute(\"class\", \"language-\" + language);\n highlighted = Prism.highlight(content, Prism.languages[language]);\n }\n c.innerHTML = highlighted;\n });\n}\n","export default {\n \"title\": \"Experiments in Handwriting with a Neural Network\",\n \"description\": \"Several interactive visualizations of a generative model of handwriting. Some are fun, some are serious.\",\n \"url\": \"http://distill.pub/2016/handwriting/\",\n \"github\": \"https://github.com/distillpub/post--handwriting\",\n \"firstPublished\": \"Tue Dec 6 2016 21:39:33 GMT-0700 (PDT)\",\n \"lastPublished\": \"Tue Dec 6 2016 21:39:33 GMT-0700 (PDT)\",\n \"authors\": [\n {\n \"firstName\": \"Shan\",\n \"lastName\": \"Carter\",\n \"personalURL\": \"http://shancarter.com\",\n \"affiliation\": \"Google Brain\",\n \"affiliationURL\": \"http://g.co/brain\"\n },\n {\n \"firstName\": \"David\",\n \"lastName\": \"Ha\",\n \"personalURL\": \"https://github.com/hardmaru\",\n \"affiliation\": \"Google Brain\",\n \"affiliationURL\": \"http://g.co/brain\"\n },\n {\n \"firstName\": \"Ian\",\n \"lastName\": \"Johnson\",\n \"personalURL\": \"https://github.com/enjalot\",\n \"affiliation\": \"Google Cloud\",\n \"affiliationURL\": \"\"\n },\n {\n \"firstName\": \"Chris\",\n \"lastName\": \"Olah\",\n \"personalURL\": \"http://colah.github.io/\",\n \"affiliation\": \"Google Brain\",\n \"affiliationURL\": \"http://g.co/brain\"\n }\n ],\n journal: {\n \"title\": \"Distill\",\n \"full_title\": \"Distill\",\n \"abbrev_title\": \"Distill\",\n \"url\": \"http://distill.pub\",\n \"doi\": \"00.0000/dstl\",\n \"issn\": \"0000-0000\"\n }\n };\n"],"names":["appendHtml","el","html","innerHTML","citation_meta_content","ref","content","author","split","forEach","trim","issue","number","render","dom","data","styles","document","addEventListener","event","citeData","meta","header","appendix","footer","markdown","code","citation","console","log","k","exports","BibtexParser","this","months","notKey","pos","input","entries","Array","currentEntry","setInput","t","getEntries","isWhitespace","s","match","canCommentOut","undefined","skipWhitespace","substring","length","tryMatch","matchAt","value_braces","bracecount","start","escaped","end","value_comment","str","brcktCnt","value_quotes","single_value","key","indexOf","toLowerCase","value","values","push","join","key_equals_value","val","key_value_list","kv","entry_body","d","directive","preamble","comment","entry","bibtex","string","toJSON","b","toBibtex","json","out","i","entryType","citationKey","entryTags","tags","jdx","let","rawBib","bibliography","bibtexParse","e","type","citations","citeTags","slice","apply","querySelectorAll","citationKeys","textContent","warn","querySelector","setAttribute","head","authors","a","journal","Object","keys","createElement","base","layout","article","appendChild","logo","inline_cite","ent","names","map","name","year","bibliography_cite","cite","name_strings","last","firsts","initials","title","booktitle","volume","pages","c","sort","localeCompare","cite_string","bibEl","ol","Lexer","options","tokens","links","marked","defaults","rules","block","normal","gfm","tables","InlineLexer","inline","renderer","Renderer","Error","breaks","pedantic","Parser","token","escape","encode","replace","unescape","_","n","charAt","String","fromCharCode","parseInt","regex","opt","source","self","RegExp","noop","merge","obj","target","arguments","prototype","hasOwnProperty","call","src","callback","pending","highlight","lex","done","err","parse","text","lang","message","silent","newline","fences","hr","heading","nptable","lheading","blockquote","list","def","table","paragraph","bullet","item","_tag","lexer","top","bq","next","loose","cap","bull","space","l","exec","depth","align","cells","test","ordered","smartLists","sanitize","pre","sanitizer","href","charCodeAt","autolink","url","tag","link","reflink","nolink","strong","em","br","del","_inside","_href","output","mangle","inLink","outputLink","codespan","smartypants","image","ch","Math","random","toString","langPrefix","quote","level","raw","headerPrefix","xhtml","body","listitem","tablerow","tablecell","flags","prot","decodeURIComponent","parser","reverse","tok","pop","peek","parseText","row","cell","j","setOptions","inlineLexer","module","window","global","markdownElements","_self","WorkerGlobalScope","Prism","uniqueId","util","Token","alias","o","objId","defineProperty","clone","v","languages","extend","id","redef","insertBefore","inside","before","insert","root","grammar","newToken","ret","DFS","visited","plugins","highlightAll","async","env","selector","hooks","run","element","elements","highlightElement","language","parent","className","parentNode","nodeName","Worker","worker","filename","onmessage","evt","highlightedCode","postMessage","JSON","stringify","immediateClose","tokenize","strarr","rest","tokenloop","patterns","pattern","lookbehind","greedy","lookbehindLength","lastIndex","delNum","from","index","to","p","len","after","args","wrapped","splice","all","add","callbacks","matchedStr","classes","attributes","aliases","close","script","currentScript","getElementsByTagName","hasAttribute","readyState","requestAnimationFrame","setTimeout","markup","prolog","doctype","cdata","punctuation","namespace","attr-value","attr-name","entity","xml","mathml","svg","css","atrule","rule","property","important","function","style","style-attr","clike","class-name","keyword","boolean","operator","javascript","template-string","interpolation","interpolation-punctuation","js","fileHighlight","Extensions","py","rb","ps1","psm1","sh","bat","h","tex","getAttribute","extension","xhr","XMLHttpRequest","open","onreadystatechange","status","responseText","statusText","send","codeElements","tabs","highlighted","description","github","firstPublished","lastPublished","firstName","lastName","personalURL","affiliation","affiliationURL","full_title","abbrev_title","doi","issn","testData"],"mappings":"4NAmFA,QAASA,GAAWC,EAAIC,GACtBD,EAAGE,WAAaD,EAGlB,QAASE,GAAsBC,GAC7B,GAAIC,GAAU,kBAAkBD,EAAS,SAezC,OAdAA,GAAIE,OAAOC,MAAM,SAASC,QAAQ,SAAAF,GAChCD,GAAW,mBAAmBC,EAAOG,aAEnC,WAAaL,KACfC,GAAW,0BAA0BD,EAAW,aAE9C,UAAYA,KACZC,GAAW,mBAAmBD,EAAU,aAExC,SAAWA,IAAO,UAAYA,MAC9BC,GAAW,oBAAmBD,EAAIM,OAASN,EAAIO,aAI5CN,EC3FT,QAASO,GAAOC,EAAKC,GACnBC,EAAOF,EAAKC,GACZE,SAASC,iBAAiB,mBAAoB,SAASC,GACrDC,EAASN,EAAKC,GACdM,EAAKP,EAAKC,GACVO,EAAOR,EAAKC,GACZQ,EAAST,EAAKC,GACdS,EAAOV,EAAKC,GACZU,EAASX,EAAKC,GACdW,EAAKZ,EAAKC,GACVY,EAASb,EAAKC,GACda,QAAQC,IAAI,cACZ,KAAK,GAAIC,KAAKf,GAAOa,QAAQC,IAAI,MAAOC,EAAG,KAAMf,EAAKe,oICD1D,SAAUC,GAEN,QAASC,KAELC,KAAKC,QAAU,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC5FD,KAAKE,QAAU,IAAI,IAAI,IAAI,IAAI,KAC/BF,KAAKG,IAAM,EACXH,KAAKI,MAAQ,GACbJ,KAAKK,QAAU,GAAIC,OAEnBN,KAAKO,aAAe,GAEpBP,KAAKQ,SAAW,SAASC,GACrBT,KAAKI,MAAQK,GAGjBT,KAAKU,WAAa,WACd,MAAOV,MAAKK,SAGhBL,KAAKW,aAAe,SAASC,GACzB,MAAa,KAALA,GAAiB,MAALA,GAAkB,MAALA,GAAkB,MAALA,GAGlDZ,KAAKa,MAAQ,SAASD,EAAGE,GAIrB,GAHqBC,QAAjBD,GAA+C,MAAjBA,IAC9BA,GAAgB,GACpBd,KAAKgB,eAAeF,GAChBd,KAAKI,MAAMa,UAAUjB,KAAKG,IAAKH,KAAKG,IAAMS,EAAEM,SAAWN,EAGvD,KAAM,4BAA8BA,EAAI,WAC9BZ,KAAKI,MAAMa,UAAUjB,KAAKG,IAHpCH,MAAKG,KAAOS,EAAEM,OAKlBlB,KAAKgB,eAAeF,IAGxBd,KAAKmB,SAAW,SAASP,EAAGE,GAIxB,MAHqBC,SAAjBD,GAA+C,MAAjBA,IAC9BA,GAAgB,GACpBd,KAAKgB,eAAeF,GAChBd,KAAKI,MAAMa,UAAUjB,KAAKG,IAAKH,KAAKG,IAAMS,EAAEM,SAAWN,GAS/DZ,KAAKoB,QAAU,WACX,eAAOpB,KAAKI,MAAMc,OAASlB,KAAKG,KAA+B,KAAxBH,KAAKI,MAAMJ,KAAKG,MACnDH,EAAKG,KAGT,OAA4B,KAAxBH,KAAKI,MAAMJ,KAAKG,MAMxBH,KAAKgB,eAAiB,SAASF,GAC3B,eAAOd,KAAKW,aAAaX,KAAKI,MAAMJ,KAAKG,OACrCH,EAAKG,KAET,IAA4B,KAAxBH,KAAKI,MAAMJ,KAAKG,MAAgC,GAAjBW,EAAuB,CACtD,KAA+B,MAAxBd,KAAKI,MAAMJ,KAAKG,MACnBH,EAAKG,KAETH,MAAKgB,eAAeF,KAI5Bd,KAAKqB,aAAe,sBACZC,EAAa,CACjBtB,MAAKa,MAAM,KAAK,EAGhB,KAFA,GAAIU,GAAQvB,KAAKG,IACbqB,GAAU,IACD,CACT,IAAKA,EACD,GAA4B,KAAxBxB,EAAKI,MAAMJ,EAAKG,KAAa,CAC7B,KAAImB,EAAa,GAEV,CACH,GAAIG,GAAMzB,EAAKG,GAEf,OADAH,GAAKa,MAAM,KAAK,GACTb,EAAKI,MAAMa,UAAUM,EAAOE,GAJnCH,QAMD,IAA4B,KAAxBtB,EAAKI,MAAMJ,EAAKG,KACvBmB,QACG,IAAItB,EAAKG,KAAOH,EAAKI,MAAMc,OAAS,EACvC,KAAM,oBAIVM,GADwB,MAAxBxB,EAAKI,MAAMJ,EAAKG,MAA2B,GAAXqB,EAIpCxB,EAAKG,QAIbH,KAAK0B,cAAgB,WAGjB,eAFIC,EAAM,GACNC,EAAW,GACN5B,KAAKmB,SAAS,KAAK,IAAsB,GAAZS,GAAgB,CAMlD,GALAD,GAAY3B,EAAKI,MAAMJ,EAAKG,KACA,KAAxBH,EAAKI,MAAMJ,EAAKG,MAChByB,IACwB,KAAxB5B,EAAKI,MAAMJ,EAAKG,MAChByB,IACA5B,EAAKG,KAAOH,EAAKI,MAAMc,OAAS,EAChC,KAAM,sBAAwBlB,EAAKI,MAAMa,UAAUM,MAEvDvB,GAAKG,MAET,MAAOwB,IAGX3B,KAAK6B,aAAe,qBAChB7B,MAAKa,MAAM,KAAK,EAGhB,KAFA,GAAIU,GAAQvB,KAAKG,IACbqB,GAAU,IACD,CACT,IAAKA,EAAS,CACV,GAA4B,KAAxBxB,EAAKI,MAAMJ,EAAKG,KAAa,CAC7B,GAAIsB,GAAMzB,EAAKG,GAEf,OADAH,GAAKa,MAAM,KAAK,GACTb,EAAKI,MAAMa,UAAUM,EAAOE,GAChC,GAAIzB,EAAKG,KAAOH,EAAKI,MAAMc,OAAS,EACvC,KAAM,sBAAwBlB,EAAKI,MAAMa,UAAUM,GAIvDC,EADwB,MAAxBxB,EAAKI,MAAMJ,EAAKG,MAA2B,GAAXqB,EAIpCxB,EAAKG,QAIbH,KAAK8B,aAAe,WAChB,GAAIP,GAAQvB,KAAKG,GACjB,IAAIH,KAAKmB,SAAS,KACd,MAAOnB,MAAKqB,cACT,IAAIrB,KAAKmB,SAAS,KACrB,MAAOnB,MAAK6B,cAEZ,IAAIhC,GAAIG,KAAK+B,KACb,IAAIlC,EAAEgB,MAAM,YACR,MAAOhB,EACN,IAAIG,KAAKC,OAAO+B,QAAQnC,EAAEoC,gBAAkB,EAC7C,MAAOpC,GAAEoC,aAET,MAAM,kBAAoBjC,KAAKI,MAAMa,UAAUM,GAAS,aAAe1B,GAKnFG,KAAKkC,MAAQ,sBACLC,IAEJ,KADAA,EAAOC,KAAKpC,KAAK8B,gBACV9B,KAAKmB,SAAS,MACjBnB,EAAKa,MAAM,KACXsB,EAAOC,KAAKpC,EAAK8B,eAErB,OAAOK,GAAOE,KAAK,KAGvBrC,KAAK+B,IAAM,WAEP,eADIR,EAAQvB,KAAKG,MACJ,CACT,GAAIH,EAAKG,KAAOH,EAAKI,MAAMc,OACvB,KAAM,aAIV,IAAIlB,EAAKE,OAAO8B,QAAQhC,EAAKI,MAAMJ,EAAKG,OAAS,EAC7C,MAAOH,GAAKI,MAAMa,UAAUM,EAAOvB,EAAKG,IAExCH,GAAKG,QAMjBH,KAAKsC,iBAAmB,WACpB,GAAIP,GAAM/B,KAAK+B,KACf,IAAI/B,KAAKmB,SAAS,KAAM,CACpBnB,KAAKa,MAAM,IACX,IAAI0B,GAAMvC,KAAKkC,OACf,QAASH,EAAKQ,GAEd,KAAM,6CACIvC,KAAKI,MAAMa,UAAUjB,KAAKG,MAI5CH,KAAKwC,eAAiB,sBACdC,EAAKzC,KAAKsC,kBAGd,KAFAtC,KAAKO,aAAwB,aAC7BP,KAAKO,aAAwB,UAAEkC,EAAG,IAAMA,EAAG,GACpCzC,KAAKmB,SAAS,OACjBnB,EAAKa,MAAM,MAEPb,EAAKmB,SAAS,OAIlBsB,EAAKzC,EAAKsC,mBACVtC,EAAKO,aAAwB,UAAEkC,EAAG,IAAMA,EAAG,IAInDzC,KAAK0C,WAAa,SAASC,GACvB3C,KAAKO,gBACLP,KAAKO,aAA0B,YAAIP,KAAK+B,MACxC/B,KAAKO,aAAwB,UAAIoC,EAAE1B,UAAU,GAC7CjB,KAAKa,MAAM,KACXb,KAAKwC,iBACLxC,KAAKK,QAAQ+B,KAAKpC,KAAKO,eAG3BP,KAAK4C,UAAY,WAEb,MADA5C,MAAKa,MAAM,KACJ,IAAMb,KAAK+B,OAGtB/B,KAAK6C,SAAW,WACZ7C,KAAKO,gBACLP,KAAKO,aAAwB,UAAI,WACjCP,KAAKO,aAAoB,MAAIP,KAAK0B,gBAClC1B,KAAKK,QAAQ+B,KAAKpC,KAAKO,eAG3BP,KAAK8C,QAAU,WACX9C,KAAKO,gBACLP,KAAKO,aAAwB,UAAI,UACjCP,KAAKO,aAAoB,MAAIP,KAAK0B,gBAClC1B,KAAKK,QAAQ+B,KAAKpC,KAAKO,eAG3BP,KAAK+C,MAAQ,SAASJ,GAClB3C,KAAK0C,WAAWC,IAGpB3C,KAAKgD,OAAS,WACV,eAAOhD,KAAKoB,WAAW,CACnB,GAAIuB,GAAI3C,EAAK4C,WACb5C,GAAKa,MAAM,KACF,WAAL8B,EACA3C,EAAKiD,SACO,aAALN,EACP3C,EAAK6C,WACO,YAALF,EACP3C,EAAK8C,UAEL9C,EAAK+C,MAAMJ,GAEf3C,EAAKa,MAAM,OAKvBf,EAAQoD,OAAS,SAASF,GACtB,GAAIG,GAAI,GAAIpD,EAGZ,OAFAoD,GAAE3C,SAASwC,GACXG,EAAEH,SACKG,EAAE9C,SAIbP,EAAQsD,SAAW,SAASC,GACxB,GAAIC,GAAM,EACV,KAAM,GAAIC,KAAKF,GAAM,CAOjB,GANAC,GAAO,IAAMD,EAAKE,GAAGC,UACrBF,GAAO,IACHD,EAAKE,GAAGE,cACRH,GAAOD,EAAKE,GAAGE,YAAc,MAC7BJ,EAAKE,GAAGR,QACRO,GAAOD,EAAKE,GAAGR,OACfM,EAAKE,GAAGG,UAAW,CACnB,GAAIC,GAAO,EACX,KAAK,GAAIC,KAAOP,GAAKE,GAAGG,UACD,GAAfC,EAAKzC,SACLyC,GAAQ,MACZA,GAAQC,EAAM,MAAQP,EAAKE,GAAGG,UAAUE,GAAO,GAEnDN,IAAOK,EAEXL,GAAO,QAEX,MAAOA,KAIZxD,OC7TY,SAASjB,EAAKC,GAI3B+E,GAAIC,GAAS,klBAkBTC,IACJC,GAAYd,OAAOY,GAAQtF,QAAQ,SAAAyF,GACjCF,EAAaE,EAAER,aAAeQ,EAAEP,UAChCK,EAAaE,EAAER,aAAaS,KAAOD,EAAET,WAGvCK,IAAIM,MACAC,KAAcC,MAAMC,MAAMzF,EAAI0F,iBAAiB,WACnDH,GAAS5F,QAAQ,SAAAR,GACf6F,GAAIW,GAAexG,EAAGyG,YAAYlG,MAAM,IACxCiG,GAAahG,QAAQ,SAAAuD,GACfgC,EAAahC,GACfoC,EAAUpC,GAAOgC,EAAahC,GAE9BpC,QAAQ+E,KAAK,oCAAsC3C,OAIzDjD,EAAKqF,UAAYA,KH1CJ,SAAStF,EAAKC,GAC3BD,EAAI8F,cAAc,QAAQC,aAAa,OAAQ,KAC/Cf,IAAIgB,GAAOhG,EAAI8F,cAAc,OAExB9F,GAAI8F,cAAc,kBACrB5G,EAAW8G,EAAM,0BAEdhG,EAAI8F,cAAc,wBACrB5G,EAAW8G,EAAM,wEAGnB9G,EAAW8G,EAAM,0QAIe/F,EAAQ,sBAC7BA,EAAU,sBAGrBf,EAAW8G,EAAM,wHAEwD/F,EAAkB,8FACpBA,EAAgB,wBAEvFA,EAAKgG,QAAQtG,QAAQ,SAACuG,GACpBhH,EAAW8G,EAAM,oDAC4BE,EAAW,cAAIA,EAAU,mBAGxEhH,EAAW8G,EAAM,4KAGsB/F,EAAU,2DACJA,EAAgB,wDACxBA,EAAQ,mDACNA,EAAQ,wIAK/Cf,EAAW8G,EAAM,sKAGuB/F,EAAU,2DACJA,EAAgB,yDACxBA,EAAQ,mDACNA,EAAQ,uIAKhDf,EAAW8G,EAAM,gIAEwB/F,EAAU,iEACCA,EAAkB,kBAAIA,EAAyB,yBAAIA,EAAuB,+EACzEA,EAAQ,qDACnBA,EAAW,uDACZA,EAAU,8DACFA,EAAKkG,QAAY,8DAChBlG,EAAKkG,QAAkB,iEAC3BlG,EAAc,yDACrBA,EAAQ,mDACPA,EAAKkG,QAAY,yDACZlG,EAAKkG,QAAiB,qBAEnElG,EAAKgG,QAAQtG,QAAQ,SAACuG,GACpBhH,EAAW8G,EAAM,iDACyBE,EAAU,cAAKA,EAAW,2EACdA,EAAa,2BAIrEE,OAAOC,KAAKpG,EAAKqF,WAAW3F,QAAQ,SAAAuD,GAClCpC,QAAQC,IAAImC,GACZhE,EAAW8G,EAAM,oDAC4B1G,EAAsBW,EAAKqF,UAAUpC,+1RItEvE,SAASlD,EAAKC,GAC3B+E,GAAIjD,GAAI/B,EAAIsG,cAAc,QAC1BvE,GAAE6D,YAAcW,EAAOC,EAASC,EAAU7F,EAC1CZ,EAAI8F,cAAc,QAAQY,YAAY3E,oOCNlC3C,EAAO,i1BAiDPuH,qEAQS,SAAS3G,EAAKC,GAC3BD,EAAI8F,cAAc,aAAazG,UAAYD,GC5DvCA,EAAO,s0DA0EE,SAASY,EAAKC,GAC3BD,EAAI8F,cAAc,eAAezG,UAAYD,GCzEzCA,EAAO,6nBA+BPuH,6FAMS,SAAS3G,EAAKC,GAC3BD,EAAI8F,cAAc,aAAazG,UAAYD,KCxC9B,SAASY,EAAKC,GAuB3B,QAAS2G,GAAY1D,GACnB,KAAIA,IAAOjD,GAAKqF,WASd,MAAO,GARP,IAAIuB,GAAM5G,EAAKqF,UAAUpC,GACrB4D,EAAQD,EAAIpH,OAAOC,MAAM,QAC7BoH,GAAQA,EAAMC,IAAI,SAAAC,SAAQA,GAAKtH,MAAM,KAAK,GAAGE,QAC7C,IAAIqH,GAAOJ,EAAII,IACf,OAAoB,IAAhBH,EAAMzE,OAAoByE,EAAM,GAAK,KAAOG,EAC5B,GAAhBH,EAAMzE,OAAoByE,EAAM,GAAK,MAAQA,EAAM,GAAK,KAAOG,EAC/DH,EAAMzE,OAAU,EAAUyE,EAAM,GAAK,aAAeG,EAAxD,OAMJ,QAASC,GAAkBL,GACzB,GAAIA,EAAI,CACN,GAAIC,GAAQD,EAAIpH,OAAOC,MAAM,SACzByH,EAAO,GACPC,EAAeN,EAAMC,IAAI,SAAAC,GAC3B,GAAIK,GAAOL,EAAKtH,MAAM,KAAK,GAAGE,OAC1B0H,EAASN,EAAKtH,MAAM,KAAK,EAC7B,IAAcwC,QAAVoF,EAAqB,CACvB,GAAIC,GAAWD,EAAO1H,OAAOF,MAAM,KAAKqH,IAAI,SAAAhF,SAAKA,GAAEnC,OAAO,IAC1D,OAAOyH,GAAO,KAAOE,EAAS/D,KAAK,KAAK,IAE1C,MAAO6D,IAWT,IATIP,EAAMzE,OAAS,GACjB8E,GAAQC,EAAa5B,MAAM,EAAGsB,EAAMzE,OAAO,GAAGmB,KAAK,MACnD2D,GAAQ,QAAUC,EAAaN,EAAMzE,OAAO,IAE5C8E,GAAQC,EAAa,GAEvBD,GAAQ,KAAON,EAAII,KAAO,KAC1BE,GAAQN,EAAIW,MAAQ,KACpBL,GAASN,EAAIV,SAAWU,EAAIY,WAAa,GACrC,UAAYZ,GAAI,CAClB,GAAIhH,GAAQgH,EAAIhH,OAASgH,EAAI/G,MAC7BD,GAAkBqC,QAATrC,EAAqB,IAAIA,EAAM,IAAM,GAC9CsH,GAAQ,SAAWN,EAAIa,OAAS7H,EAMlC,MAJI,SAAWgH,KACbM,GAAQ,SAAWN,EAAIc,OAEzBR,GAAQ,KAGR,MAAO,IApEXnC,GAAIM,GAAYc,OAAOC,KAAKpG,EAAKqF,WAAWyB,IAAI,SAAAa,SAAK3H,GAAKqF,UAAUsC,IACpEtC,GAAUuC,KAAK,SAAC3B,EAAG5B,GACjB,MAAO4B,GAAEzG,OAAOqI,cAAcxD,EAAE7E,SAGlC,IAAI8F,MAAcC,MAAMC,MAAMzF,EAAI0F,iBAAiB,WACnDH,GAAS5F,QAAQ,SAAAR,GACf,GAAIkH,GAAOlH,EAAGyG,YAAYlG,MAAM,KAC5BqI,EAAc1B,EAAKU,IAAIH,GAAapD,KAAK,KAC7CrE,GAAGE,UAAY0I,GAGjB/C,IAAIgD,GAAQhI,EAAI8F,cAAc,mBAC1BmC,EAAKjI,EAAIsG,cAAc,KAC3BhB,GAAU3F,QAAQ,SAAAkB,GAChBmE,GAAI7F,GAAKa,EAAIsG,cAAc,KAC3BnH,GAAGyG,YAAcsB,EAAkBrG,GACnCoH,EAAGvB,YAAYvH,KAEjB6I,EAAMtB,YAAYuB,uBCfpB,WA+FA,QAASC,GAAMC,GACbhH,KAAKiH,UACLjH,KAAKiH,OAAOC,SACZlH,KAAKgH,QAAUA,GAAWG,EAAOC,SACjCpH,KAAKqH,MAAQC,EAAMC,OAEfvH,KAAKgH,QAAQQ,MACXxH,KAAKgH,QAAQS,OACfzH,KAAKqH,MAAQC,EAAMG,OAEnBzH,KAAKqH,MAAQC,EAAME,KAwZzB,QAASE,GAAYR,EAAOF,GAO1B,GANAhH,KAAKgH,QAAUA,GAAWG,EAAOC,SACjCpH,KAAKkH,MAAQA,EACblH,KAAKqH,MAAQM,EAAOJ,OACpBvH,KAAK4H,SAAW5H,KAAKgH,QAAQY,UAAY,GAAIC,GAC7C7H,KAAK4H,SAASZ,QAAUhH,KAAKgH,SAExBhH,KAAKkH,MACR,KAAM,IACJY,OAAM,4CAGN9H,MAAKgH,QAAQQ,IACXxH,KAAKgH,QAAQe,OACf/H,KAAKqH,MAAQM,EAAOI,OAEpB/H,KAAKqH,MAAQM,EAAOH,IAEbxH,KAAKgH,QAAQgB,WACtBhI,KAAKqH,MAAQM,EAAOK,UA6NxB,QAASH,GAASb,GAChBhH,KAAKgH,QAAUA,MAkJjB,QAASiB,GAAOjB,GACdhH,KAAKiH,UACLjH,KAAKkI,MAAQ,KACblI,KAAKgH,QAAUA,GAAWG,EAAOC,SACjCpH,KAAKgH,QAAQY,SAAW5H,KAAKgH,QAAQY,UAAY,GAAIC,GACrD7H,KAAK4H,SAAW5H,KAAKgH,QAAQY,SAC7B5H,KAAK4H,SAASZ,QAAUhH,KAAKgH,QA8K/B,QAASmB,GAAOlK,EAAMmK,GACpB,MAAOnK,GACJoK,QAASD,EAA0B,KAAjB,eAAuB,SACzCC,QAAQ,KAAM,QACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,UACdA,QAAQ,KAAM,SAGnB,QAASC,GAASrK,GAEhB,MAAOA,GAAKoK,QAAQ,4CAA6C,SAASE,EAAGC,GAE3E,MADAA,GAAIA,EAAEvG,cACI,UAANuG,EAAsB,IACN,MAAhBA,EAAEC,OAAO,GACY,MAAhBD,EAAEC,OAAO,GACZC,OAAOC,aAAaC,SAASJ,EAAEvH,UAAU,GAAI,KAC7CyH,OAAOC,cAAcH,EAAEvH,UAAU,IAEhC,KAIX,QAASoH,GAAQQ,EAAOC,GAGtB,MAFAD,GAAQA,EAAME,OACdD,EAAMA,GAAO,GACN,QAASE,GAAKnD,EAAMtD,GACzB,MAAKsD,IACLtD,EAAMA,EAAIwG,QAAUxG,EACpBA,EAAMA,EAAI8F,QAAQ,eAAgB,MAClCQ,EAAQA,EAAMR,QAAQxC,EAAMtD,GACrByG,GAJW,GAAIC,QAAOJ,EAAOC,IAQxC,QAASI,MAGT,QAASC,GAAMC,GAKb,OAHIC,GACAtH,cAFAwB,EAAI,EAIDA,EAAI+F,UAAUpI,OAAQqC,IAAK,CAChC8F,EAASC,EAAU/F,EACnB,KAAKxB,IAAOsH,GACNpE,OAAOsE,UAAUC,eAAeC,KAAKJ,EAAQtH,KAC/CqH,EAAIrH,GAAOsH,EAAOtH,IAKxB,MAAOqH,GAQT,QAASjC,GAAOuC,EAAKZ,EAAKa,GACxB,GAAIA,GAA2B,kBAARb,GAAvB,CACOa,IACHA,EAAWb,EACXA,EAAM,MAGRA,EAAMK,KAAUhC,EAAOC,SAAU0B,MAEjC,IACI7B,GACA2C,EAFAC,EAAYf,EAAIe,UAGhBtG,EAAI,CAER,KACE0D,EAASF,EAAM+C,IAAIJ,EAAKZ,GACxB,MAAO7E,GACP,MAAO0F,GAAS1F,GAGlB2F,EAAU3C,EAAO/F,MAEjB,IAAI6I,GAAO,SAASC,GAClB,GAAIA,EAEF,MADAlB,GAAIe,UAAYA,EACTF,EAASK,EAGlB,IAAI1G,EAEJ,KACEA,EAAM2E,EAAOgC,MAAMhD,EAAQ6B,GAC3B,MAAO7E,GACP+F,EAAM/F,EAKR,MAFA6E,GAAIe,UAAYA,EAETG,EACHL,EAASK,GACTL,EAAS,KAAMrG,GAGrB,KAAKuG,GAAaA,EAAU3I,OAAS,EACnC,MAAO6I,IAKT,UAFOjB,GAAIe,WAEND,EAAS,MAAOG,IAErB,MAAOxG,EAAI0D,EAAO/F,OAAQqC,KACxB,SAAU2E,GACR,MAAmB,SAAfA,EAAMhE,OACC0F,GAAWG,IAEfF,EAAU3B,EAAMgC,KAAMhC,EAAMiC,KAAM,SAASH,EAAKvK,GACrD,MAAIuK,GAAYD,EAAKC,GACT,MAARvK,GAAgBA,IAASyI,EAAMgC,OACxBN,GAAWG,KAEtB7B,EAAMgC,KAAOzK,EACbyI,EAAM1G,SAAU,SACdoI,GAAWG,SAEd9C,EAAO1D,QAKd,KAEE,MADIuF,KAAKA,EAAMK,KAAUhC,EAAOC,SAAU0B,IACnCb,EAAOgC,MAAMlD,EAAM+C,IAAIJ,EAAKZ,GAAMA,GACzC,MAAO7E,GAEP,GADAA,EAAEmG,SAAW,2DACRtB,GAAO3B,EAAOC,UAAUiD,OAC3B,MAAO,gCACHlC,EAAOlE,EAAEmG,QAAU,IAAI,GACvB,QAEN,MAAMnG,IA9rCV,GAAIqD,IACFgD,QAAS,OACT7K,KAAM,oBACN8K,OAAQrB,EACRsB,GAAI,4BACJC,QAAS,wCACTC,QAASxB,EACTyB,SAAU,oCACVC,WAAY,qCACZC,KAAM,gEACN5M,KAAM,+EACN6M,IAAK,oEACLC,MAAO7B,EACP8B,UAAW,iEACXd,KAAM,UAGR5C,GAAM2D,OAAS,kBACf3D,EAAM4D,KAAO,6CACb5D,EAAM4D,KAAO7C,EAAQf,EAAM4D,KAAM,MAC9B,QAAS5D,EAAM2D,UAGlB3D,EAAMuD,KAAOxC,EAAQf,EAAMuD,MACxB,QAASvD,EAAM2D,QACf,KAAM,yCACN,MAAO,UAAY3D,EAAMwD,IAAI/B,OAAS,OAGzCzB,EAAMsD,WAAavC,EAAQf,EAAMsD,YAC9B,MAAOtD,EAAMwD,OAGhBxD,EAAM6D,KAAO,qKAKb7D,EAAMrJ,KAAOoK,EAAQf,EAAMrJ,MACxB,UAAW,mBACX,SAAU,wBACV,UAAW,qCACX,OAAQqJ,EAAM6D,QAGjB7D,EAAM0D,UAAY3C,EAAQf,EAAM0D,WAC7B,KAAM1D,EAAMkD,IACZ,UAAWlD,EAAMmD,SACjB,WAAYnD,EAAMqD,UAClB,aAAcrD,EAAMsD,YACpB,MAAO,IAAMtD,EAAM6D,MACnB,MAAO7D,EAAMwD,OAOhBxD,EAAMC,OAAS4B,KAAU7B,GAMzBA,EAAME,IAAM2B,KAAU7B,EAAMC,QAC1BgD,OAAQ,6DACRS,UAAW,IACXP,QAAS,0CAGXnD,EAAME,IAAIwD,UAAY3C,EAAQf,EAAM0D,WACjC,MAAO,MACJ1D,EAAME,IAAI+C,OAAOxB,OAAOV,QAAQ,MAAO,OAAS,IAChDf,EAAMuD,KAAK9B,OAAOV,QAAQ,MAAO,OAAS,OAOhDf,EAAMG,OAAS0B,KAAU7B,EAAME,KAC7BkD,QAAS,gEACTK,MAAO,8DA0BThE,EAAMM,MAAQC,EAMdP,EAAM+C,IAAM,SAASJ,EAAK1C,GACxB,GAAIoE,GAAQ,GAAIrE,GAAMC,EACtB,OAAOoE,GAAMtB,IAAIJ,IAOnB3C,EAAMwC,UAAUO,IAAM,SAASJ,GAO7B,MANAA,GAAMA,EACHrB,QAAQ,WAAY,MACpBA,QAAQ,MAAO,QACfA,QAAQ,UAAW,KACnBA,QAAQ,UAAW,MAEfrI,KAAKkI,MAAMwB,GAAK,IAOzB3C,EAAMwC,UAAUrB,MAAQ,SAASwB,EAAK2B,EAAKC,GAYzC,OAVIC,GACAC,EACAC,EACAC,EACAvI,EACA+H,EACAS,EACApI,EACAqI,SATAlC,EAAMA,EAAIrB,QAAQ,SAAU,IAWzBqB,GAYL,IAVI+B,EAAMzL,EAAKqH,MAAMiD,QAAQuB,KAAKnC,MAChCA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QACvBuK,EAAI,GAAGvK,OAAS,GAClBlB,EAAKiH,OAAO7E,MACV8B,KAAM,WAMRuH,EAAMzL,EAAKqH,MAAM5H,KAAKoM,KAAKnC,GAC7BA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAC3BuK,EAAMA,EAAI,GAAGpD,QAAQ,UAAW,IAChCrI,EAAKiH,OAAO7E,MACV8B,KAAM,OACNgG,KAAOlK,EAAKgH,QAAQgB,SAEhByD,EADAA,EAAIpD,QAAQ,OAAQ,UAO5B,IAAIoD,EAAMzL,EAAKqH,MAAMkD,OAAOsB,KAAKnC,GAC/BA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAC3BlB,EAAKiH,OAAO7E,MACV8B,KAAM,OACNiG,KAAMsB,EAAI,GACVvB,KAAMuB,EAAI,IAAM,SAMpB,IAAIA,EAAMzL,EAAKqH,MAAMoD,QAAQoB,KAAKnC,GAChCA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAC3BlB,EAAKiH,OAAO7E,MACV8B,KAAM,UACN4H,MAAOL,EAAI,GAAGvK,OACdgJ,KAAMuB,EAAI,SAMd,IAAIJ,IAAQI,EAAMzL,EAAKqH,MAAMqD,QAAQmB,KAAKnC,IAA1C,CAUE,IATAA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAE3BgK,GACEhH,KAAM,QACN7E,OAAQoM,EAAI,GAAGpD,QAAQ,eAAgB,IAAI9J,MAAM,UACjDwN,MAAON,EAAI,GAAGpD,QAAQ,aAAc,IAAI9J,MAAM,UAC9CyN,MAAOP,EAAI,GAAGpD,QAAQ,MAAO,IAAI9J,MAAM,OAGpCgF,EAAI,EAAGA,EAAI2H,EAAKa,MAAM7K,OAAQqC,IAC7B,YAAY0I,KAAKf,EAAKa,MAAMxI,IAC9B2H,EAAKa,MAAMxI,GAAK,QACP,aAAa0I,KAAKf,EAAKa,MAAMxI,IACtC2H,EAAKa,MAAMxI,GAAK,SACP,YAAY0I,KAAKf,EAAKa,MAAMxI,IACrC2H,EAAKa,MAAMxI,GAAK,OAEhB2H,EAAKa,MAAMxI,GAAK,IAIpB,KAAKA,EAAI,EAAGA,EAAI2H,EAAKc,MAAM9K,OAAQqC,IACjC2H,EAAKc,MAAMzI,GAAK2H,EAAKc,MAAMzI,GAAGhF,MAAM,SAGtCyB,GAAKiH,OAAO7E,KAAK8I,OAMnB,IAAIO,EAAMzL,EAAKqH,MAAMsD,SAASkB,KAAKnC,GACjCA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAC3BlB,EAAKiH,OAAO7E,MACV8B,KAAM,UACN4H,MAAkB,MAAXL,EAAI,GAAa,EAAI,EAC5BvB,KAAMuB,EAAI,SAMd,IAAIA,EAAMzL,EAAKqH,MAAMmD,GAAGqB,KAAKnC,GAC3BA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAC3BlB,EAAKiH,OAAO7E,MACV8B,KAAM,WAMV,IAAIuH,EAAMzL,EAAKqH,MAAMuD,WAAWiB,KAAKnC,GACnCA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAE3BlB,EAAKiH,OAAO7E,MACV8B,KAAM,qBAGRuH,EAAMA,EAAI,GAAGpD,QAAQ,WAAY,IAKjCrI,EAAKkI,MAAMuD,EAAKJ,GAAK,GAErBrL,EAAKiH,OAAO7E,MACV8B,KAAM,uBAOV,IAAIuH,EAAMzL,EAAKqH,MAAMwD,KAAKgB,KAAKnC,GAA/B,CAgBE,IAfAA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAC3BwK,EAAOD,EAAI,GAEXzL,EAAKiH,OAAO7E,MACV8B,KAAM,aACNgI,QAASR,EAAKxK,OAAS,IAIzBuK,EAAMA,EAAI,GAAG5K,MAAMb,EAAKqH,MAAM6D,MAE9BK,GAAO,EACPK,EAAIH,EAAIvK,OACRqC,EAAI,EAEGA,EAAIqI,EAAGrI,IACZ2H,EAAOO,EAAIlI,GAIXoI,EAAQT,EAAKhK,OACbgK,EAAOA,EAAK7C,QAAQ,qBAAsB,KAIrC6C,EAAKlJ,QAAQ,SAChB2J,GAAST,EAAKhK,OACdgK,EAAQlL,EAAKgH,QAAQgB,SAEjBkD,EAAK7C,QAAQ,YAAa,IAD1B6C,EAAK7C,QAAQ,GAAIY,QAAO,QAAU0C,EAAQ,IAAK,MAAO,KAMxD3L,EAAKgH,QAAQmF,YAAc5I,IAAMqI,EAAI,IACvCzI,EAAImE,EAAM2D,OAAOY,KAAKJ,EAAIlI,EAAI,IAAI,GAC9BmI,IAASvI,GAAOuI,EAAKxK,OAAS,GAAKiC,EAAEjC,OAAS,IAChDwI,EAAM+B,EAAIpH,MAAMd,EAAI,GAAGlB,KAAK,MAAQqH,EACpCnG,EAAIqI,EAAI,IAOZJ,EAAQD,GAAQ,eAAeU,KAAKf,GAChC3H,IAAMqI,EAAI,IACZL,EAAwC,OAAjCL,EAAKzC,OAAOyC,EAAKhK,OAAS,GAC5BsK,IAAOA,EAAQD,IAGtBvL,EAAKiH,OAAO7E,MACV8B,KAAMsH,EACF,mBACA,oBAINxL,EAAKkI,MAAMgD,GAAM,EAAOI,GAExBtL,EAAKiH,OAAO7E,MACV8B,KAAM,iBAIVlE,GAAKiH,OAAO7E,MACV8B,KAAM,iBAOV,IAAIuH,EAAMzL,EAAKqH,MAAMpJ,KAAK4N,KAAKnC,GAC7BA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAC3BlB,EAAKiH,OAAO7E,MACV8B,KAAMlE,EAAKgH,QAAQoF,SACf,YACA,OACJC,KAAMrM,EAAKgH,QAAQsF,YACF,QAAXb,EAAI,IAA2B,WAAXA,EAAI,IAA8B,UAAXA,EAAI,IACrDvB,KAAMuB,EAAI,SAMd,KAAMH,GAAMD,IAASI,EAAMzL,EAAKqH,MAAMyD,IAAIe,KAAKnC,IAC7CA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAC3BlB,EAAKiH,OAAOC,MAAMuE,EAAI,GAAGxJ,gBACvBsK,KAAMd,EAAI,GACVpF,MAAOoF,EAAI,QAMf,IAAIJ,IAAQI,EAAMzL,EAAKqH,MAAM0D,MAAMc,KAAKnC,IAAxC,CAUE,IATAA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAE3BgK,GACEhH,KAAM,QACN7E,OAAQoM,EAAI,GAAGpD,QAAQ,eAAgB,IAAI9J,MAAM,UACjDwN,MAAON,EAAI,GAAGpD,QAAQ,aAAc,IAAI9J,MAAM,UAC9CyN,MAAOP,EAAI,GAAGpD,QAAQ,iBAAkB,IAAI9J,MAAM,OAG/CgF,EAAI,EAAGA,EAAI2H,EAAKa,MAAM7K,OAAQqC,IAC7B,YAAY0I,KAAKf,EAAKa,MAAMxI,IAC9B2H,EAAKa,MAAMxI,GAAK,QACP,aAAa0I,KAAKf,EAAKa,MAAMxI,IACtC2H,EAAKa,MAAMxI,GAAK,SACP,YAAY0I,KAAKf,EAAKa,MAAMxI,IACrC2H,EAAKa,MAAMxI,GAAK,OAEhB2H,EAAKa,MAAMxI,GAAK,IAIpB,KAAKA,EAAI,EAAGA,EAAI2H,EAAKc,MAAM9K,OAAQqC,IACjC2H,EAAKc,MAAMzI,GAAK2H,EAAKc,MAAMzI,GACxB8E,QAAQ,mBAAoB,IAC5B9J,MAAM,SAGXyB,GAAKiH,OAAO7E,KAAK8I,OAMnB,IAAIG,IAAQI,EAAMzL,EAAKqH,MAAM2D,UAAUa,KAAKnC,IAC1CA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAC3BlB,EAAKiH,OAAO7E,MACV8B,KAAM,YACNgG,KAA2C,OAArCuB,EAAI,GAAGhD,OAAOgD,EAAI,GAAGvK,OAAS,GAChCuK,EAAI,GAAGpH,MAAM,GAAG,GAChBoH,EAAI,SAMZ,IAAIA,EAAMzL,EAAKqH,MAAM6C,KAAK2B,KAAKnC,GAE7BA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAC3BlB,EAAKiH,OAAO7E,MACV8B,KAAM,OACNgG,KAAMuB,EAAI,SAKd,IAAI/B,EACF,KAAM,IACJ5B,OAAM,0BAA4B4B,EAAI8C,WAAW,GAIvD,OAAOxM,MAAKiH,OAOd,IAAIU,IACFQ,OAAQ,8BACRsE,SAAU,2BACVC,IAAKxD,EACLyD,IAAK,yDACLC,KAAM,0BACNC,QAAS,iCACTC,OAAQ,mCACRC,OAAQ,iDACRC,GAAI,wDACJvN,KAAM,mCACNwN,GAAI,mBACJC,IAAKhE,EACLgB,KAAM,qCAGRvC,GAAOwF,QAAU,yCACjBxF,EAAOyF,MAAQ,iDAEfzF,EAAOiF,KAAOvE,EAAQV,EAAOiF,MAC1B,SAAUjF,EAAOwF,SACjB,OAAQxF,EAAOyF,SAGlBzF,EAAOkF,QAAUxE,EAAQV,EAAOkF,SAC7B,SAAUlF,EAAOwF,WAOpBxF,EAAOJ,OAAS4B,KAAUxB,GAM1BA,EAAOK,SAAWmB,KAAUxB,EAAOJ;AACjCwF,OAAQ,iEACRC,GAAI,6DAONrF,EAAOH,IAAM2B,KAAUxB,EAAOJ,QAC5BY,OAAQE,EAAQV,EAAOQ,QAAQ,KAAM,UACrCuE,IAAK,uCACLQ,IAAK,0BACLhD,KAAM7B,EAAQV,EAAOuC,MAClB,KAAM,OACN,IAAK,mBAQVvC,EAAOI,OAASoB,KAAUxB,EAAOH,KAC/ByF,GAAI5E,EAAQV,EAAOsF,IAAI,OAAQ,OAC/B/C,KAAM7B,EAAQV,EAAOH,IAAI0C,MAAM,OAAQ,SAkCzCxC,EAAYL,MAAQM,EAMpBD,EAAY2F,OAAS,SAAS3D,EAAKxC,EAAOF,GACxC,GAAIW,GAAS,GAAID,GAAYR,EAAOF,EACpC,OAAOW,GAAO0F,OAAO3D,IAOvBhC,EAAY6B,UAAU8D,OAAS,SAAS3D,GAOtC,OALIkD,GACA1C,EACAqC,EACAd,SAJAnI,EAAM,GAMHoG,GAEL,GAAI+B,EAAMzL,EAAKqH,MAAMc,OAAO0D,KAAKnC,GAC/BA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAC3BoC,GAAOmI,EAAI,OAKb,IAAIA,EAAMzL,EAAKqH,MAAMoF,SAASZ,KAAKnC,GACjCA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QACZ,MAAXuK,EAAI,IACNvB,EAA4B,MAArBuB,EAAI,GAAGhD,OAAO,GACjBzI,EAAKsN,OAAO7B,EAAI,GAAGxK,UAAU,IAC7BjB,EAAKsN,OAAO7B,EAAI,IACpBc,EAAOvM,EAAKsN,OAAO,WAAapD,IAEhCA,EAAO/B,EAAOsD,EAAI,IAClBc,EAAOrC,GAET5G,GAAOtD,EAAK4H,SAASgF,KAAKL,EAAM,KAAMrC,OAKxC,IAAKlK,EAAKuN,UAAW9B,EAAMzL,EAAKqH,MAAMqF,IAAIb,KAAKnC,KAS/C,GAAI+B,EAAMzL,EAAKqH,MAAMsF,IAAId,KAAKnC,IACvB1J,EAAKuN,QAAU,QAAQtB,KAAKR,EAAI,IACnCzL,EAAKuN,QAAS,EACLvN,EAAKuN,QAAU,UAAUtB,KAAKR,EAAI,MAC3CzL,EAAKuN,QAAS,GAEhB7D,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAC3BoC,GAAOtD,EAAKgH,QAAQoF,SAChBpM,EAAKgH,QAAQsF,UACXtM,EAAKgH,QAAQsF,UAAUb,EAAI,IAC3BtD,EAAOsD,EAAI,IACbA,EAAI,OAKV,IAAIA,EAAMzL,EAAKqH,MAAMuF,KAAKf,KAAKnC,GAC7BA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAC3BlB,EAAKuN,QAAS,EACdjK,GAAOtD,EAAKwN,WAAW/B,GACrBc,KAAMd,EAAI,GACVpF,MAAOoF,EAAI,KAEbzL,EAAKuN,QAAS,MAKhB,KAAK9B,EAAMzL,EAAKqH,MAAMwF,QAAQhB,KAAKnC,MAC3B+B,EAAMzL,EAAKqH,MAAMyF,OAAOjB,KAAKnC,IADrC,CAKE,GAHAA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAC3B0L,GAAQnB,EAAI,IAAMA,EAAI,IAAIpD,QAAQ,OAAQ,KAC1CuE,EAAO5M,EAAKkH,MAAM0F,EAAK3K,gBAClB2K,IAASA,EAAKL,KAAM,CACvBjJ,GAAOmI,EAAI,GAAGhD,OAAO,GACrBiB,EAAM+B,EAAI,GAAGxK,UAAU,GAAKyI,CAC5B,UAEF1J,EAAKuN,QAAS,EACdjK,GAAOtD,EAAKwN,WAAW/B,EAAKmB,GAC5B5M,EAAKuN,QAAS,MAKhB,IAAI9B,EAAMzL,EAAKqH,MAAM0F,OAAOlB,KAAKnC,GAC/BA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAC3BoC,GAAOtD,EAAK4H,SAASmF,OAAO/M,EAAKqN,OAAO5B,EAAI,IAAMA,EAAI,SAKxD,IAAIA,EAAMzL,EAAKqH,MAAM2F,GAAGnB,KAAKnC,GAC3BA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAC3BoC,GAAOtD,EAAK4H,SAASoF,GAAGhN,EAAKqN,OAAO5B,EAAI,IAAMA,EAAI,SAKpD,IAAIA,EAAMzL,EAAKqH,MAAM5H,KAAKoM,KAAKnC,GAC7BA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAC3BoC,GAAOtD,EAAK4H,SAAS6F,SAAStF,EAAOsD,EAAI,IAAI,QAK/C,IAAIA,EAAMzL,EAAKqH,MAAM4F,GAAGpB,KAAKnC,GAC3BA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAC3BoC,GAAOtD,EAAK4H,SAASqF,SAKvB,IAAIxB,EAAMzL,EAAKqH,MAAM6F,IAAIrB,KAAKnC,GAC5BA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAC3BoC,GAAOtD,EAAK4H,SAASsF,IAAIlN,EAAKqN,OAAO5B,EAAI,SAK3C,IAAIA,EAAMzL,EAAKqH,MAAM6C,KAAK2B,KAAKnC,GAC7BA,EAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAC3BoC,GAAOtD,EAAK4H,SAASsC,KAAK/B,EAAOnI,EAAK0N,YAAYjC,EAAI,UAIxD,IAAI/B,EACF,KAAM,IACJ5B,OAAM,0BAA4B4B,EAAI8C,WAAW,QAhGnD9C,GAAMA,EAAIzI,UAAUwK,EAAI,GAAGvK,QAC3BgJ,EAAO/B,EAAOsD,EAAI,IAClBc,EAAOrC,EACP5G,GAAOtD,EAAK4H,SAASgF,KAAKL,EAAM,KAAMrC,EAiG1C,OAAO5G,IAOToE,EAAY6B,UAAUiE,WAAa,SAAS/B,EAAKmB,GAC/C,GAAIL,GAAOpE,EAAOyE,EAAKL,MACnBlG,EAAQuG,EAAKvG,MAAQ8B,EAAOyE,EAAKvG,OAAS,IAE9C,OAA4B,MAArBoF,EAAI,GAAGhD,OAAO,GACjBzI,KAAK4H,SAASgF,KAAKL,EAAMlG,EAAOrG,KAAKqN,OAAO5B,EAAI,KAChDzL,KAAK4H,SAAS+F,MAAMpB,EAAMlG,EAAO8B,EAAOsD,EAAI,MAOlD/D,EAAY6B,UAAUmE,YAAc,SAASxD,GAC3C,MAAKlK,MAAKgH,QAAQ0G,YACXxD,EAEJ7B,QAAQ,OAAQ,KAEhBA,QAAQ,MAAO,KAEfA,QAAQ,2BAA2B,OAEnCA,QAAQ,KAAM,KAEdA,QAAQ,gCAAgC,OAExCA,QAAQ,KAAM,KAEdA,QAAQ,SAAU,KAfiB6B,GAsBxCxC,EAAY6B,UAAU+D,OAAS,SAASpD,GACtC,IAAKlK,KAAKgH,QAAQsG,OAAQ,MAAOpD,EAMjC,KALA,GAGI0D,GAHAtK,EAAM,GACNsI,EAAI1B,EAAKhJ,OACTqC,EAAI,EAGDA,EAAIqI,EAAGrI,IACZqK,EAAK1D,EAAKsC,WAAWjJ,GACjBsK,KAAKC,SAAW,KAClBF,EAAK,IAAMA,EAAGG,SAAS,KAEzBzK,GAAO,KAAOsK,EAAK,GAGrB,OAAOtK,IAWTuE,EAAS0B,UAAU9J,KAAO,SAASA,EAAM0K,EAAM3I,GAC7C,GAAIxB,KAAKgH,QAAQ6C,UAAW,CAC1B,GAAIvG,GAAMtD,KAAKgH,QAAQ6C,UAAUpK,EAAM0K,EAC5B,OAAP7G,GAAeA,IAAQ7D,IACzB+B,GAAU,EACV/B,EAAO6D,GAIX,MAAK6G,GAME,qBACHnK,KAAKgH,QAAQgH,WACb7F,EAAOgC,GAAM,GACb,MACC3I,EAAU/B,EAAO0I,EAAO1I,GAAM,IAC/B,oBAVK,eACF+B,EAAU/B,EAAO0I,EAAO1I,GAAM,IAC/B,mBAWRoI,EAAS0B,UAAUqB,WAAa,SAASqD,GACvC,MAAO,iBAAmBA,EAAQ,mBAGpCpG,EAAS0B,UAAUtL,KAAO,SAASA,GACjC,MAAOA,IAGT4J,EAAS0B,UAAUkB,QAAU,SAASP,EAAMgE,EAAOC,GACjD,MAAO,KACHD,EACA,QACAlO,KAAKgH,QAAQoH,aACbD,EAAIlM,cAAcoG,QAAQ,UAAW,KACrC,KACA6B,EACA,MACAgE,EACA,OAGNrG,EAAS0B,UAAUiB,GAAK,WACtB,MAAOxK,MAAKgH,QAAQqH,MAAQ,UAAY,UAG1CxG,EAAS0B,UAAUsB,KAAO,SAASyD,EAAMpC,GACvC,GAAIhI,GAAOgI,EAAU,KAAO,IAC5B,OAAO,IAAMhI,EAAO,MAAQoK,EAAO,KAAOpK,EAAO,OAGnD2D,EAAS0B,UAAUgF,SAAW,SAASrE,GACrC,MAAO,OAASA,EAAO,WAGzBrC,EAAS0B,UAAUyB,UAAY,SAASd,GACtC,MAAO,MAAQA,EAAO,UAGxBrC,EAAS0B,UAAUwB,MAAQ,SAAS1L,EAAQiP,GAC1C,MAAO,qBAEHjP,EACA,sBAEAiP,EACA,wBAINzG,EAAS0B,UAAUiF,SAAW,SAASnQ,GACrC,MAAO,SAAWA,EAAU,WAG9BwJ,EAAS0B,UAAUkF,UAAY,SAASpQ,EAASqQ,GAC/C,GAAIxK,GAAOwK,EAAMrP,OAAS,KAAO,KAC7BsN,EAAM+B,EAAM3C,MACZ,IAAM7H,EAAO,sBAAwBwK,EAAM3C,MAAQ,KACnD,IAAM7H,EAAO,GACjB,OAAOyI,GAAMtO,EAAU,KAAO6F,EAAO,OAIvC2D,EAAS0B,UAAUwD,OAAS,SAAS7C,GACnC,MAAO,WAAaA,EAAO,aAG7BrC,EAAS0B,UAAUyD,GAAK,SAAS9C,GAC/B,MAAO,OAASA,EAAO,SAGzBrC,EAAS0B,UAAUkE,SAAW,SAASvD,GACrC,MAAO,SAAWA,EAAO,WAG3BrC,EAAS0B,UAAU0D,GAAK,WACtB,MAAOjN,MAAKgH,QAAQqH,MAAQ,QAAU,QAGxCxG,EAAS0B,UAAU2D,IAAM,SAAShD,GAChC,MAAO,QAAUA,EAAO,UAG1BrC,EAAS0B,UAAUqD,KAAO,SAASL,EAAMlG,EAAO6D,GAC9C,GAAIlK,KAAKgH,QAAQoF,SAAU,CACzB,IACE,GAAIuC,GAAOC,mBAAmBtG,EAASiE,IACpClE,QAAQ,UAAW,IACnBpG,cACH,MAAOgC,GACP,MAAO,GAET,GAAoC,IAAhC0K,EAAK3M,QAAQ,gBAAsD,IAA9B2M,EAAK3M,QAAQ,aACpD,MAAO,GAGX,GAAIsB,GAAM,YAAciJ,EAAO,GAK/B,OAJIlG,KACF/C,GAAO,WAAa+C,EAAQ,KAE9B/C,GAAO,IAAM4G,EAAO,QAItBrC,EAAS0B,UAAUoE,MAAQ,SAASpB,EAAMlG,EAAO6D,GAC/C,GAAI5G,GAAM,aAAeiJ,EAAO,UAAYrC,EAAO,GAKnD,OAJI7D,KACF/C,GAAO,WAAa+C,EAAQ,KAE9B/C,GAAOtD,KAAKgH,QAAQqH,MAAQ,KAAO,KAIrCxG,EAAS0B,UAAUW,KAAO,SAASA,GACjC,MAAOA,IAoBTjC,EAAOgC,MAAQ,SAASP,EAAK1C,EAASY,GACpC,GAAIiH,GAAS,GAAI5G,GAAOjB,EAASY,EACjC,OAAOiH,GAAO5E,MAAMP,IAOtBzB,EAAOsB,UAAUU,MAAQ,SAASP,aAChC1J,MAAK2H,OAAS,GAAID,GAAYgC,EAAIxC,MAAOlH,KAAKgH,QAAShH,KAAK4H,UAC5D5H,KAAKiH,OAASyC,EAAIoF,SAGlB,KADA,GAAIxL,GAAM,GACHtD,KAAKuL,QACVjI,GAAOtD,EAAK+O,KAGd,OAAOzL,IAOT2E,EAAOsB,UAAUgC,KAAO,WACtB,MAAOvL,MAAKkI,MAAQlI,KAAKiH,OAAO+H,OAOlC/G,EAAOsB,UAAU0F,KAAO,WACtB,MAAOjP,MAAKiH,OAAOjH,KAAKiH,OAAO/F,OAAS,IAAM,GAOhD+G,EAAOsB,UAAU2F,UAAY,WAG3B,eAFIZ,EAAOtO,KAAKkI,MAAMgC,KAEM,SAArBlK,KAAKiP,OAAO/K,MACjBoK,GAAQ,KAAOtO,EAAKuL,OAAOrB,IAG7B,OAAOlK,MAAK2H,OAAO0F,OAAOiB,IAO5BrG,EAAOsB,UAAUwF,IAAM,qBACrB,QAAQ/O,KAAKkI,MAAMhE,MACjB,IAAK,QACH,MAAO,EAET,KAAK,KACH,MAAOlE,MAAK4H,SAAS4C,IAEvB,KAAK,UACH,MAAOxK,MAAK4H,SAAS6C,QACnBzK,KAAK2H,OAAO0F,OAAOrN,KAAKkI,MAAMgC,MAC9BlK,KAAKkI,MAAM4D,MACX9L,KAAKkI,MAAMgC,KAEf,KAAK,OACH,MAAOlK,MAAK4H,SAASnI,KAAKO,KAAKkI,MAAMgC,KACnClK,KAAKkI,MAAMiC,KACXnK,KAAKkI,MAAM1G,QAEf,KAAK,QACH,GAEI+B,GACA4L,EACAC,EACAV,EACAW,EANAhQ,EAAS,GACTiP,EAAO,EASX,KADAc,EAAO,GACF7L,EAAI,EAAGA,EAAIvD,KAAKkI,MAAM7I,OAAO6B,OAAQqC,IACxCmL,GAAUrP,QAAQ,EAAM0M,MAAO/L,EAAKkI,MAAM6D,MAAMxI,IAChD6L,GAAQpP,EAAK4H,SAAS6G,UACpBzO,EAAK2H,OAAO0F,OAAOrN,EAAKkI,MAAM7I,OAAOkE,KACnClE,QAAQ,EAAM0M,MAAO/L,EAAKkI,MAAM6D,MAAMxI,IAK5C,KAFAlE,GAAUW,KAAK4H,SAAS4G,SAASY,GAE5B7L,EAAI,EAAGA,EAAIvD,KAAKkI,MAAM8D,MAAM9K,OAAQqC,IAAK,CAI5C,IAHA4L,EAAMnP,EAAKkI,MAAM8D,MAAMzI,GAEvB6L,EAAO,GACFC,EAAI,EAAGA,EAAIF,EAAIjO,OAAQmO,IAC1BD,GAAQpP,EAAK4H,SAAS6G,UACpBzO,EAAK2H,OAAO0F,OAAO8B,EAAIE,KACrBhQ,QAAQ,EAAO0M,MAAO/L,EAAKkI,MAAM6D,MAAMsD,IAI7Cf,IAAQtO,EAAK4H,SAAS4G,SAASY,GAEjC,MAAOpP,MAAK4H,SAASmD,MAAM1L,EAAQiP,EAErC,KAAK,mBAGH,IAFA,GAAIA,GAAO,GAEiB,mBAArBtO,KAAKuL,OAAOrH,MACjBoK,GAAQtO,EAAK+O,KAGf,OAAO/O,MAAK4H,SAASgD,WAAW0D,EAElC,KAAK,aAIH,IAHA,GAAIA,GAAO,GACPpC,EAAUlM,KAAKkI,MAAMgE,QAEG,aAArBlM,KAAKuL,OAAOrH,MACjBoK,GAAQtO,EAAK+O,KAGf,OAAO/O,MAAK4H,SAASiD,KAAKyD,EAAMpC,EAElC,KAAK,kBAGH,IAFA,GAAIoC,GAAO,GAEiB,kBAArBtO,KAAKuL,OAAOrH,MACjBoK,GAA4B,SAApBtO,EAAKkI,MAAMhE,KACflE,EAAKkP,YACLlP,EAAK+O,KAGX,OAAO/O,MAAK4H,SAAS2G,SAASD,EAEhC,KAAK,mBAGH,IAFA,GAAIA,GAAO,GAEiB,kBAArBtO,KAAKuL,OAAOrH,MACjBoK,GAAQtO,EAAK+O,KAGf,OAAO/O,MAAK4H,SAAS2G,SAASD,EAEhC,KAAK,OACH,GAAIrQ,GAAQ+B,KAAKkI,MAAMmE,KAAQrM,KAAKgH,QAAQgB,SAExChI,KAAKkI,MAAMgC,KADXlK,KAAK2H,OAAO0F,OAAOrN,KAAKkI,MAAMgC,KAElC,OAAOlK,MAAK4H,SAAS3J,KAAKA,EAE5B,KAAK,YACH,MAAO+B,MAAK4H,SAASoD,UAAUhL,KAAK2H,OAAO0F,OAAOrN,KAAKkI,MAAMgC,MAE/D,KAAK,OACH,MAAOlK,MAAK4H,SAASoD,UAAUhL,KAAKkP,eA6C1ChG,EAAK2C,KAAO3C,EAgHZ/B,EAAOH,QACPG,EAAOmI,WAAa,SAASxG,GAE3B,MADAK,GAAMhC,EAAOC,SAAU0B,GAChB3B,GAGTA,EAAOC,UACLI,KAAK,EACLC,QAAQ,EACRM,QAAQ,EACRC,UAAU,EACVoE,UAAU,EACVE,UAAW,KACXgB,QAAQ,EACRnB,YAAY,EACZ9B,QAAQ,EACRR,UAAW,KACXmE,WAAY,QACZN,aAAa,EACbU,aAAc,GACdxG,SAAU,GAAIC,GACdwG,OAAO,GAOTlH,EAAOc,OAASA,EAChBd,EAAO0H,OAAS5G,EAAOgC,MAEvB9C,EAAOU,SAAWA,EAElBV,EAAOJ,MAAQA,EACfI,EAAOiE,MAAQrE,EAAM+C,IAErB3C,EAAOO,YAAcA,EACrBP,EAAOoI,YAAc7H,EAAY2F,OAEjClG,EAAO8C,MAAQ9C,EAGbqI,UAAiBrI,IAOhBsC,KAAK,WACN,MAAOzJ,QAA2B,mBAAXyP,QAAyBA,OAASC,QClwC3DvI,GAAOmI,YACL9H,KAAK,EACLkG,aAAa,GAGf,OAAe,SAAS7O,EAAKC,GAC3B+E,GAAI8L,MAAsBtL,MAAMoF,KAAK5K,EAAI0F,iBAAiB,iBAC1DoL,GAAiBnR,QAAQ,SAAAR,GACvB6F,GAAIxF,GAAUL,EAAGE,SAKjBF,GAAGE,UAAYiJ,EAAO9I,sBCV1B,GAAIuR,GAA2B,mBAAXH,QACjBA,OAE6B,mBAAtBI,oBAAqC7G,eAAgB6G,mBAC3D7G,QAUA8G,EAAQ,WAGZ,GAAI3F,GAAO,2BACP4F,EAAW,EAEXxH,EAAIqH,EAAME,OACbE,MACC5H,OAAQ,SAAUnB,GACjB,MAAIA,aAAkBgJ,GACd,GAAIA,GAAMhJ,EAAO/C,KAAMqE,EAAEyH,KAAK5H,OAAOnB,EAAO5I,SAAU4I,EAAOiJ,OAClC,UAAxB3H,EAAEyH,KAAK9L,KAAK+C,GACfA,EAAOrB,IAAI2C,EAAEyH,KAAK5H,QAElBnB,EAAOoB,QAAQ,KAAM,SAASA,QAAQ,KAAM,QAAQA,QAAQ,UAAW,MAIhFnE,KAAM,SAAUiM,GACf,MAAOlL,QAAOsE,UAAUwE,SAAStE,KAAK0G,GAAGtP,MAAM,oBAAoB,IAGpEuP,MAAO,SAAUhH,GAIhB,MAHKA,GAAU,MACdnE,OAAOoL,eAAejH,EAAK,QAAUlH,QAAS6N,IAExC3G,EAAU,MAIlBkH,MAAO,SAAUH,GAChB,GAAIjM,GAAOqE,EAAEyH,KAAK9L,KAAKiM,EAEvB,QAAQjM,GACP,IAAK,SACJ,GAAIoM,KAEJ,KAAK,GAAIvO,KAAOoO,GACXA,EAAE3G,eAAezH,KACpBuO,EAAMvO,GAAOwG,EAAEyH,KAAKM,MAAMH,EAAEpO,IAI9B,OAAOuO,EAER,KAAK,QAEJ,MAAOH,GAAEvK,KAAOuK,EAAEvK,IAAI,SAAS2K,GAAK,MAAOhI,GAAEyH,KAAKM,MAAMC,KAG1D,MAAOJ,KAITK,WACCC,OAAQ,SAAUC,EAAIC,GACrB,GAAIxG,GAAO5B,EAAEyH,KAAKM,MAAM/H,EAAEiI,UAAUE,GAEpC,KAAK,GAAI3O,KAAO4O,GACfxG,EAAKpI,GAAO4O,EAAM5O,EAGnB,OAAOoI,IAYRyG,aAAc,SAAUC,EAAQC,EAAQC,EAAQC,GAC/CA,EAAOA,GAAQzI,EAAEiI,SACjB,IAAIS,GAAUD,EAAKH,EAEnB,IAAwB,GAApBvH,UAAUpI,OAAa,CAC1B6P,EAASzH,UAAU,EAEnB,KAAK,GAAI4H,KAAYH,GAChBA,EAAOvH,eAAe0H,KACzBD,EAAQC,GAAYH,EAAOG,GAI7B,OAAOD,GAGR,GAAIE,KAEJ,KAAK,GAAIjJ,KAAS+I,GAEjB,GAAIA,EAAQzH,eAAetB,GAAQ,CAElC,GAAIA,GAAS4I,EAEZ,IAAK,GAAII,KAAYH,GAEhBA,EAAOvH,eAAe0H,KACzBC,EAAID,GAAYH,EAAOG,GAK1BC,GAAIjJ,GAAS+I,EAAQ/I,GAWvB,MANAK,GAAEiI,UAAUY,IAAI7I,EAAEiI,UAAW,SAASzO,EAAKG,GACtCA,IAAU8O,EAAKH,IAAW9O,GAAO8O,IACpC7Q,KAAK+B,GAAOoP,KAIPH,EAAKH,GAAUM,GAIvBC,IAAK,SAASjB,EAAGxG,EAAUzF,EAAMmN,GAChCA,EAAUA,KACV,KAAK,GAAI9N,KAAK4M,GACTA,EAAE3G,eAAejG,KACpBoG,EAASF,KAAK0G,EAAG5M,EAAG4M,EAAE5M,GAAIW,GAAQX,GAER,WAAtBgF,EAAEyH,KAAK9L,KAAKiM,EAAE5M,KAAqB8N,EAAQ9I,EAAEyH,KAAKI,MAAMD,EAAE5M,KAI/B,UAAtBgF,EAAEyH,KAAK9L,KAAKiM,EAAE5M,KAAoB8N,EAAQ9I,EAAEyH,KAAKI,MAAMD,EAAE5M,OACjE8N,EAAQ9I,EAAEyH,KAAKI,MAAMD,EAAE5M,MAAO,EAC9BgF,EAAEiI,UAAUY,IAAIjB,EAAE5M,GAAIoG,EAAUpG,EAAG8N,KALnCA,EAAQ9I,EAAEyH,KAAKI,MAAMD,EAAE5M,MAAO,EAC9BgF,EAAEiI,UAAUY,IAAIjB,EAAE5M,GAAIoG,EAAU,KAAM0H,OAU3CC,WAEAC,aAAc,SAASC,EAAO7H,GAC7B,GAAI8H,IACH9H,SAAUA,EACV+H,SAAU,mGAGXnJ,GAAEoJ,MAAMC,IAAI,sBAAuBH,EAInC,KAAK,GAASI,GAFVC,EAAWL,EAAIK,UAAY9S,SAASuF,iBAAiBkN,EAAIC,UAEpDnO,EAAE,EAAYsO,EAAUC,EAASvO,MACzCgF,EAAEwJ,iBAAiBF,EAASL,KAAU,EAAMC,EAAI9H,WAIlDoI,iBAAkB,SAASF,EAASL,EAAO7H,GAI1C,IAFA,GAAIqI,GAAUf,EAASgB,EAASJ,EAEzBI,IAAW9H,EAAK8B,KAAKgG,EAAOC,YAClCD,EAASA,EAAOE,UAGbF,KACHD,GAAYC,EAAOC,UAAUrR,MAAMsJ,MAAW,KAAK,GAAGlI,cACtDgP,EAAU1I,EAAEiI,UAAUwB,IAIvBH,EAAQK,UAAYL,EAAQK,UAAU7J,QAAQ8B,EAAM,IAAI9B,QAAQ,OAAQ,KAAO,aAAe2J,EAG9FC,EAASJ,EAAQM,WAEb,OAAOlG,KAAKgG,EAAOG,YACtBH,EAAOC,UAAYD,EAAOC,UAAU7J,QAAQ8B,EAAM,IAAI9B,QAAQ,OAAQ,KAAO,aAAe2J,EAG7F,IAAIvS,GAAOoS,EAAQpN,YAEfgN,GACHI,QAASA,EACTG,SAAUA,EACVf,QAASA,EACTxR,KAAMA,EAKP,IAFA8I,EAAEoJ,MAAMC,IAAI,sBAAuBH,IAE9BA,EAAIhS,OAASgS,EAAIR,QAKrB,MAJIQ,GAAIhS,OACPgS,EAAII,QAAQpN,YAAcgN,EAAIhS,UAE/B8I,GAAEoJ,MAAMC,IAAI,WAAYH,EAMzB,IAFAlJ,EAAEoJ,MAAMC,IAAI,mBAAoBH,GAE5BD,GAAS5B,EAAMyC,OAAQ,CAC1B,GAAIC,GAAS,GAAID,QAAO9J,EAAEgK,SAE1BD,GAAOE,UAAY,SAASC,GAC3BhB,EAAIiB,gBAAkBD,EAAI3T,KAE1ByJ,EAAEoJ,MAAMC,IAAI,gBAAiBH,GAE7BA,EAAII,QAAQ3T,UAAYuT,EAAIiB,gBAE5B/I,GAAYA,EAASF,KAAKgI,EAAII,SAC9BtJ,EAAEoJ,MAAMC,IAAI,kBAAmBH,GAC/BlJ,EAAEoJ,MAAMC,IAAI,WAAYH,IAGzBa,EAAOK,YAAYC,KAAKC,WACvBb,SAAUP,EAAIO,SACdvS,KAAMgS,EAAIhS,KACVqT,gBAAgB,SAIjBrB,GAAIiB,gBAAkBnK,EAAEsB,UAAU4H,EAAIhS,KAAMgS,EAAIR,QAASQ,EAAIO,UAE7DzJ,EAAEoJ,MAAMC,IAAI,gBAAiBH,GAE7BA,EAAII,QAAQ3T,UAAYuT,EAAIiB,gBAE5B/I,GAAYA,EAASF,KAAKoI,GAE1BtJ,EAAEoJ,MAAMC,IAAI,kBAAmBH,GAC/BlJ,EAAEoJ,MAAMC,IAAI,WAAYH,IAI1B5H,UAAW,SAAUK,EAAM+G,EAASe,GACnC,GAAI/K,GAASsB,EAAEwK,SAAS7I,EAAM+G,EAC9B,OAAOhB,GAAM4C,UAAUtK,EAAEyH,KAAK5H,OAAOnB,GAAS+K,IAG/Ce,SAAU,SAAS7I,EAAM+G,EAASe,GACjC,GAAI/B,GAAQ1H,EAAE0H,MAEV+C,GAAU9I,GAEV+I,EAAOhC,EAAQgC,IAEnB,IAAIA,EAAM,CACT,IAAK,GAAI/K,KAAS+K,GACjBhC,EAAQ/I,GAAS+K,EAAK/K,SAGhB+I,GAAQgC,KAGhBC,EAAW,IAAK,GAAIhL,KAAS+I,GAC5B,GAAIA,EAAQzH,eAAetB,IAAW+I,EAAQ/I,GAA9C,CAIA,GAAIiL,GAAWlC,EAAQ/I,EACvBiL,GAAsC,UAA1B5K,EAAEyH,KAAK9L,KAAKiP,GAAyBA,GAAYA,EAE7D,KAAK,GAAI9D,GAAI,EAAGA,EAAI8D,EAASjS,SAAUmO,EAAG,CACzC,GAAI+D,GAAUD,EAAS9D,GACtBwB,EAASuC,EAAQvC,OACjBwC,IAAeD,EAAQC,WACvBC,IAAWF,EAAQE,OACnBC,EAAmB,EACnBrD,EAAQkD,EAAQlD,KAEjB,IAAIoD,IAAWF,EAAQA,QAAQ1D,OAAQ,CAEtC,GAAIhB,GAAQ0E,EAAQA,QAAQrF,WAAWlN,MAAM,YAAY,EACzDuS,GAAQA,QAAUnK,OAAOmK,EAAQA,QAAQrK,OAAQ2F,EAAQ,KAG1D0E,EAAUA,EAAQA,SAAWA,CAG7B,KAAK,GAAI7P,GAAE,EAAGpD,EAAM,EAAGoD,EAAEyP,EAAO9R,OAAQf,GAAO6S,EAAOzP,GAAGrC,SAAUqC,EAAG,CAErE,GAAI5B,GAAMqR,EAAOzP,EAEjB,IAAIyP,EAAO9R,OAASgJ,EAAKhJ,OAExB,KAAMgS,EAGP,MAAIvR,YAAesO,IAAnB,CAIAmD,EAAQI,UAAY,CAEpB,IAAI3S,GAAQuS,EAAQvH,KAAKlK,GACrB8R,EAAS,CAGb,KAAK5S,GAASyS,GAAU/P,GAAKyP,EAAO9R,OAAS,EAAG,CAG/C,GAFAkS,EAAQI,UAAYrT,EACpBU,EAAQuS,EAAQvH,KAAK3B,IAChBrJ,EACJ,KAQD,KAAK,GALD6S,GAAO7S,EAAM8S,OAASN,EAAaxS,EAAM,GAAGK,OAAS,GACrD0S,EAAK/S,EAAM8S,MAAQ9S,EAAM,GAAGK,OAC5BrB,EAAI0D,EACJsQ,EAAI1T,EAEC2T,EAAMd,EAAO9R,OAAQrB,EAAIiU,GAAOD,EAAID,IAAM/T,EAClDgU,GAAKb,EAAOnT,GAAGqB,OAEXwS,GAAQG,MACTtQ,EACFpD,EAAM0T,EAQR,IAAIb,EAAOzP,YAAc0M,IAAS+C,EAAOnT,EAAI,GAAGyT,OAC/C,QAIDG,GAAS5T,EAAI0D,EACb5B,EAAMuI,EAAK7F,MAAMlE,EAAK0T,GACtBhT,EAAM8S,OAASxT,EAGhB,GAAKU,EAAL,CAIGwS,IACFE,EAAmB1S,EAAM,GAAGK,OAG7B,IAAIwS,GAAO7S,EAAM8S,MAAQJ,EACrB1S,EAAQA,EAAM,GAAGwD,MAAMkP,GACvBK,EAAKF,EAAO7S,EAAMK,OAClB4P,EAASnP,EAAI0C,MAAM,EAAGqP,GACtBK,EAAQpS,EAAI0C,MAAMuP,GAElBI,GAAQzQ,EAAGkQ,EAEX3C,IACHkD,EAAK5R,KAAK0O,EAGX,IAAImD,GAAU,GAAIhE,GAAM/H,EAAO2I,EAAQtI,EAAEwK,SAASlS,EAAOgQ,GAAUhQ,EAAOqP,EAAOrP,EAAOyS,EAExFU,GAAK5R,KAAK6R,GAENF,GACHC,EAAK5R,KAAK2R,GAGXzT,MAAMiJ,UAAU2K,OAAO5P,MAAM0O,EAAQgB,OAKxC,MAAOhB,IAGRrB,OACCwC,OAEAC,IAAK,SAAUvO,EAAM8D,GACpB,GAAIgI,GAAQpJ,EAAEoJ,MAAMwC,GAEpBxC,GAAM9L,GAAQ8L,EAAM9L,OAEpB8L,EAAM9L,GAAMzD,KAAKuH,IAGlBiI,IAAK,SAAU/L,EAAM4L,GACpB,GAAI4C,GAAY9L,EAAEoJ,MAAMwC,IAAItO,EAE5B,IAAKwO,GAAcA,EAAUnT,OAI7B,IAAK,GAASyI,GAALpG,EAAE,EAAaoG,EAAW0K,EAAU9Q,MAC5CoG,EAAS8H,MAMTxB,EAAQ1H,EAAE0H,MAAQ,SAAS/L,EAAM7F,EAAS6R,EAAOoE,EAAYhB,GAChEtT,KAAKkE,KAAOA,EACZlE,KAAK3B,QAAUA,EACf2B,KAAKkQ,MAAQA,EAEblQ,KAAKkB,OAAmC,GAAzBoT,GAAc,IAAIpT,OACjClB,KAAKsT,SAAWA,EA2CjB,IAxCArD,EAAM4C,UAAY,SAAS1C,EAAG6B,EAAUC,GACvC,GAAgB,gBAAL9B,GACV,MAAOA,EAGR,IAAuB,UAAnB5H,EAAEyH,KAAK9L,KAAKiM,GACf,MAAOA,GAAEvK,IAAI,SAASiM,GACrB,MAAO5B,GAAM4C,UAAUhB,EAASG,EAAU7B,KACxC9N,KAAK,GAGT,IAAIoP,IACHvN,KAAMiM,EAAEjM,KACR7F,QAAS4R,EAAM4C,UAAU1C,EAAE9R,QAAS2T,EAAUC,GAC9CtF,IAAK,OACL4H,SAAU,QAASpE,EAAEjM,MACrBsQ,cACAxC,SAAUA,EACVC,OAAQA,EAOT,IAJgB,WAAZR,EAAIvN,OACPuN,EAAI+C,WAAuB,WAAI,QAG5BrE,EAAED,MAAO,CACZ,GAAIuE,GAAmC,UAAzBlM,EAAEyH,KAAK9L,KAAKiM,EAAED,OAAqBC,EAAED,OAASC,EAAED,MAC9D5P,OAAMiJ,UAAUnH,KAAKkC,MAAMmN,EAAI8C,QAASE,GAGzClM,EAAEoJ,MAAMC,IAAI,OAAQH,EAEpB,IAAI+C,GAAavP,OAAOC,KAAKuM,EAAI+C,YAAY5O,IAAI,SAASC,GACzD,MAAOA,GAAO,MAAQ4L,EAAI+C,WAAW3O,IAAS,IAAIwC,QAAQ,KAAM,UAAY,MAC1EhG,KAAK,IAER,OAAO,IAAMoP,EAAI9E,IAAM,WAAa8E,EAAI8C,QAAQlS,KAAK,KAAO,KAAOmS,EAAa,IAAMA,EAAa,IAAM,IAAM/C,EAAIpT,QAAU,KAAOoT,EAAI9E,IAAM,MAI1IiD,EAAM5Q,SACV,MAAK4Q,GAAM3Q,kBAKX2Q,EAAM3Q,iBAAiB,UAAW,SAASwT,GAC1C,GAAIrI,GAAUwI,KAAK3I,MAAMwI,EAAI3T,MACzBqL,EAAOC,EAAQ4H,SACfvS,EAAO2K,EAAQ3K,KACfqT,EAAiB1I,EAAQ0I,cAE7BlD,GAAM+C,YAAYpK,EAAEsB,UAAUpK,EAAM8I,EAAEiI,UAAUrG,GAAOA,IACnD2I,GACHlD,EAAM8E,UAEL,GAEI9E,EAAME,OAfLF,EAAME,KAmBf,IAAI6E,GAAS3V,SAAS4V,kBAAoBvQ,MAAMoF,KAAKzK,SAAS6V,qBAAqB,WAAW7F,KAmB9F,OAjBI2F,KACHpM,EAAEgK,SAAWoC,EAAOjL,IAEhB1K,SAASC,mBAAqB0V,EAAOG,aAAa,iBAC1B,YAAxB9V,SAAS+V,WACPtF,OAAOuF,sBACVvF,OAAOuF,sBAAsBzM,EAAEgJ,cAE/B9B,OAAOwF,WAAW1M,EAAEgJ,aAAc,IAInCvS,SAASC,iBAAiB,mBAAoBsJ,EAAEgJ,gBAK5C3B,EAAME,QAIwBN,GAAO1P,UAC3C0P,UAAiBM,GAII,mBAAXJ,KACVA,EAAOI,MAAQA,GAQhBA,EAAMU,UAAU0E,QACfpS,QAAW,kBACXqS,OAAU,iBACVC,QAAW,sBACXC,MAAS,0BACT1I,KACCyG,QAAS,wGACTvC,QACClE,KACCyG,QAAS,kBACTvC,QACCyE,YAAe,QACfC,UAAa,iBAGfC,cACCpC,QAAS,kCACTvC,QACCyE,YAAe,WAGjBA,YAAe,OACfG,aACCrC,QAAS,YACTvC,QACC0E,UAAa,mBAMjBG,OAAU,qBAIX5F,EAAM6B,MAAMyC,IAAI,OAAQ,SAAS3C,GAEf,WAAbA,EAAIvN,OACPuN,EAAI+C,WAAkB,MAAI/C,EAAIpT,QAAQgK,QAAQ,QAAS,QAIzDyH,EAAMU,UAAUmF,IAAM7F,EAAMU,UAAU0E,OACtCpF,EAAMU,UAAUvS,KAAO6R,EAAMU,UAAU0E,OACvCpF,EAAMU,UAAUoF,OAAS9F,EAAMU,UAAU0E,OACzCpF,EAAMU,UAAUqF,IAAM/F,EAAMU,UAAU0E,OAOtCpF,EAAMU,UAAUsF,KACfhT,QAAW,mBACXiT,QACC3C,QAAS,4BACTvC,QACCmF,KAAQ,YAIVtJ,IAAO,+DACPgF,SAAY,+BACZzO,QACCmQ,QAAS,8CACTE,QAAQ,GAET2C,SAAY,yBACZC,UAAa,kBACbC,SAAY,oBACZb,YAAe,YAGhBxF,EAAMU,UAAUsF,IAAY,OAAEjF,OAAOoC,KAAOnD,EAAME,KAAKM,MAAMR,EAAMU,UAAUsF,KAEzEhG,EAAMU,UAAU0E,SACnBpF,EAAMU,UAAUI,aAAa,SAAU,OACtCwF,OACChD,QAAS,0CACTC,YAAY,EACZxC,OAAQf,EAAMU,UAAUsF,IACxB5F,MAAO,kBAITJ,EAAMU,UAAUI,aAAa,SAAU,cACtCyF,cACCjD,QAAS,uBACTvC,QACC4E,aACCrC,QAAS,aACTvC,OAAQf,EAAMU,UAAU0E,OAAOvI,IAAIkE,QAEpCyE,YAAe,wBACfE,cACCpC,QAAS,MACTvC,OAAQf,EAAMU,UAAUsF,MAG1B5F,MAAO,iBAENJ,EAAMU,UAAU0E,OAAOvI,MAO3BmD,EAAMU,UAAU8F,OACfxT,UAEEsQ,QAAS,4BACTC,YAAY,IAGZD,QAAS,mBACTC,YAAY,IAGdpQ,QACCmQ,QAAS,+CACTE,QAAQ,GAETiD,cACCnD,QAAS,uGACTC,YAAY,EACZxC,QACCyE,YAAa,YAGfkB,QAAW,2GACXC,QAAW,mBACXN,SAAY,oBACZxX,OAAU,gDACV+X,SAAY,0DACZpB,YAAe,iBAQhBxF,EAAMU,UAAUmG,WAAa7G,EAAMU,UAAUC,OAAO,SACnD+F,QAAW,4TACX7X,OAAU,+EAEVwX,SAAY,wDACZO,SAAY,qEAGb5G,EAAMU,UAAUI,aAAa,aAAc,WAC1C/H,OACCuK,QAAS,iFACTC,YAAY,EACZC,QAAQ,KAIVxD,EAAMU,UAAUI,aAAa,aAAc,UAC1CgG,mBACCxD,QAAS,wBACTE,QAAQ,EACRzC,QACCgG,eACCzD,QAAS,cACTvC,QACCiG,6BACC1D,QAAS,YACTlD,MAAO,eAER+C,KAAMnD,EAAMU,UAAUmG,aAGxB1T,OAAU,cAKT6M,EAAMU,UAAU0E,QACnBpF,EAAMU,UAAUI,aAAa,SAAU,OACtC+D,QACCvB,QAAS,4CACTC,YAAY,EACZxC,OAAQf,EAAMU,UAAUmG,WACxBzG,MAAO,yBAKVJ,EAAMU,UAAUuG,GAAKjH,EAAMU,UAAUmG,WAMrC,WACqB,mBAAT3N,OAAyBA,KAAK8G,OAAU9G,KAAKhK,UAAaA,SAAS2F,gBAI9EqE,KAAK8G,MAAMkH,cAAgB,WAE1B,GAAIC,IACHF,GAAM,aACNG,GAAM,SACNC,GAAM,OACNC,IAAO,aACPC,KAAQ,aACRC,GAAM,OACNC,IAAO,QACPC,EAAK,IACLC,IAAO,QAGLnX,OAAMiJ,UAAU/K,SAClB8B,MAAMiJ,UAAUlF,MAAMoF,KAAKzK,SAASuF,iBAAiB,kBAAkB/F,QAAQ,SAAU6N,GAKxF,IAJA,GAEI2F,GAFAtI,EAAM2C,EAAIqL,aAAa,YAEbzF,EAAS5F,EACnBlC,EAAO,iCACJ8H,IAAW9H,EAAK8B,KAAKgG,EAAOC,YAClCD,EAASA,EAAOE,UAOjB,IAJIF,IACHD,GAAY3F,EAAI6F,UAAUrR,MAAMsJ,MAAY,KAAK,KAG7C6H,EAAU,CACd,GAAI2F,IAAajO,EAAI7I,MAAM,eAAkB,KAAK,EAClDmR,GAAWiF,EAAWU,IAAcA,EAGrC,GAAIlY,GAAOT,SAASmG,cAAc,OAClC1F,GAAKyS,UAAY,YAAcF,EAE/B3F,EAAI5H,YAAc,GAElBhF,EAAKgF,YAAc,WAEnB4H,EAAI9G,YAAY9F,EAEhB,IAAImY,GAAM,GAAIC,eAEdD,GAAIE,KAAK,MAAOpO,GAAK,GAErBkO,EAAIG,mBAAqB,WACF,GAAlBH,EAAI7C,aAEH6C,EAAII,OAAS,KAAOJ,EAAIK,cAC3BxY,EAAKgF,YAAcmT,EAAIK,aAEvBnI,EAAMiC,iBAAiBtS,IAEfmY,EAAII,QAAU,IACtBvY,EAAKgF,YAAc,WAAamT,EAAII,OAAS,yBAA2BJ,EAAIM,WAG5EzY,EAAKgF,YAAc,6CAKtBmT,EAAIO,KAAK,SAMZnZ,SAASC,iBAAiB,mBAAoB+J,KAAK8G,MAAMkH,uBCtxB3C,SAASnY,EAAKC,GAC3B+E,GAAIuU,MAAkB/T,MAAMoF,KAAK5K,EAAI0F,iBAAiB,WACtD6T,GAAa5Z,QAAQ,SAAAR,GACnB6F,GAAIxF,GAAUL,EAAGyG,WACjBzG,GAAGE,UAAY,EACf2F,IAAImO,GAAWhU,EAAG0Z,aAAa,YAC3BjR,EAAI5H,EAAIsG,cAAc,OAC1B,IAAiC,KAA7BnH,EAAG0Z,aAAa,SAAiB,CAEnCrZ,EAAUA,EAAQgK,QAAQ,KAAM,GAChCxE,IAAIwU,GAAOha,EAAQwC,MAAM,MACzBxC,GAAUA,EAAQgK,QAAQ,GAAIY,QAAO,KAAOoP,EAAM,KAAM,MACxDha,EAAUA,EAAQI,MAClBoF,IAAIgQ,GAAIhV,EAAIsG,cAAc,MAC1B0O,GAAEtO,YAAYkB,GACdzI,EAAGuH,YAAYsO,OAEf7V,GAAGuH,YAAYkB,EAEjB5C,IAAIyU,GAAcja,CACdyR,GAAMU,UAAUwB,KAClBvL,EAAE7B,aAAa,QAAS,YAAcoN,GACtCsG,EAAcxI,EAAMjG,UAAUxL,EAASyR,EAAMU,UAAUwB,KAEzDvL,EAAEvI,UAAYoa,QCzBdjS,MAAS,mDACTkS,YAAe,2GACf7L,IAAO,uCACP8L,OAAU,kDACVC,eAAkB,yCAClBC,cAAiB,yCACjB5T,UAEI6T,UAAa,OACbC,SAAY,SACZC,YAAe,wBACfC,YAAe,eACfC,eAAkB,sBAGlBJ,UAAa,QACbC,SAAY,KACZC,YAAe,8BACfC,YAAe,eACfC,eAAkB,sBAGlBJ,UAAa,MACbC,SAAY,UACZC,YAAe,6BACfC,YAAe,eACfC,eAAkB,KAGlBJ,UAAa,QACbC,SAAY,OACZC,YAAe,0BACfC,YAAe,eACfC,eAAkB,sBAGtB/T,SACEqB,MAAS,UACT2S,WAAc,UACdC,aAAgB,UAChBvM,IAAO,qBACPwM,IAAO,eACPC,KAAQ,oBZdX1J,QAAOzQ,UACRJ,EAAO6Q,OAAOzQ,SAAUoa"} \ No newline at end of file diff --git a/examples/tutorial.html b/examples/tutorial.html index 34e721d..2892a99 100644 --- a/examples/tutorial.html +++ b/examples/tutorial.html @@ -41,34 +41,26 @@

    Markdown

    Any element with a `dt-markdown` attribute will be rendered with its contents replaced with a markdown processed version. We use [marked](https://github.com/chjj/marked), with [github flavored markdown](https://help.github.com/articles/basic-writing-and-formatting-syntax/) and [smartypants](https://daringfireball.net/projects/smartypants/).
    -
    
    +  
       <div dt-markdown>
       ###This markdown will be rendered as HTML
     
       For more about markdown, read this [tutorial](https://help.github.com/articles/basic-writing-and-formatting-syntax/).
       </div>
     
    -  
    +

    Code Blocks

    -

    Syntax highlighting is provided within <code> tags. Just wrap the source with this: <code class="language-html">let x = 10;</code>. For larger blocks of code, add a <pre> tag:

    -
    
    -    <pre><code class="language-javascript">
    +  

    Syntax highlighting is provided within <dt-code> tags. An example of inline code snippets: <dt-code language="html">let x = 10;</dt-code>. For larger blocks of code, add a block attribute:

    + + <dt-code block language="javascript"> var x = 25; function(x){ return x * x; } - </code></pre> -
    -

    You can also use code blocks within markdown blocks. For instance:

    -
    
    -    <div dt-markdown>
    -    ```javascript
    -    let x = 25;
    -    ```
    -    </div>
    -  
    + </dt-code> +

    Citation

    Bibtex is the supported way of making academic citations. You first need have a global definition of all your possible citations. This can either be inlined in the document, or it can reference an external bibtex file.

    @@ -92,7 +84,7 @@ } </dt-bibliography> -

    Citations are then used with the <dt-cite> tag.

    +

    Citations are then used with the <dt-cite> tag.

    
         <dt-cite>gregor2015draw</dt-cite>