/* commonmark 0.30.0 https://github.com/commonmark/commonmark.js @license BSD3 */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = global || self, factory(global.commonmark = {})); }(this, (function (exports) { 'use strict'; function isContainer(node) { switch (node._type) { case "document": case "block_quote": case "list": case "item": case "paragraph": case "heading": case "emph": case "strong": case "link": case "image": case "custom_inline": case "custom_block": return true; default: return false; } } var resumeAt = function(node, entering) { this.current = node; this.entering = entering === true; }; var next = function() { var cur = this.current; var entering = this.entering; if (cur === null) { return null; } var container = isContainer(cur); if (entering && container) { if (cur._firstChild) { this.current = cur._firstChild; this.entering = true; } else { // stay on node but exit this.entering = false; } } else if (cur === this.root) { this.current = null; } else if (cur._next === null) { this.current = cur._parent; this.entering = false; } else { this.current = cur._next; this.entering = true; } return { entering: entering, node: cur }; }; var NodeWalker = function(root) { return { current: root, root: root, entering: true, next: next, resumeAt: resumeAt }; }; var Node = function(nodeType, sourcepos) { this._type = nodeType; this._parent = null; this._firstChild = null; this._lastChild = null; this._prev = null; this._next = null; this._sourcepos = sourcepos; this._lastLineBlank = false; this._lastLineChecked = false; this._open = true; this._string_content = null; this._literal = null; this._listData = {}; this._info = null; this._destination = null; this._title = null; this._isFenced = false; this._fenceChar = null; this._fenceLength = 0; this._fenceOffset = null; this._level = null; this._onEnter = null; this._onExit = null; }; var proto = Node.prototype; Object.defineProperty(proto, "isContainer", { get: function() { return isContainer(this); } }); Object.defineProperty(proto, "type", { get: function() { return this._type; } }); Object.defineProperty(proto, "firstChild", { get: function() { return this._firstChild; } }); Object.defineProperty(proto, "lastChild", { get: function() { return this._lastChild; } }); Object.defineProperty(proto, "next", { get: function() { return this._next; } }); Object.defineProperty(proto, "prev", { get: function() { return this._prev; } }); Object.defineProperty(proto, "parent", { get: function() { return this._parent; } }); Object.defineProperty(proto, "sourcepos", { get: function() { return this._sourcepos; } }); Object.defineProperty(proto, "literal", { get: function() { return this._literal; }, set: function(s) { this._literal = s; } }); Object.defineProperty(proto, "destination", { get: function() { return this._destination; }, set: function(s) { this._destination = s; } }); Object.defineProperty(proto, "title", { get: function() { return this._title; }, set: function(s) { this._title = s; } }); Object.defineProperty(proto, "info", { get: function() { return this._info; }, set: function(s) { this._info = s; } }); Object.defineProperty(proto, "level", { get: function() { return this._level; }, set: function(s) { this._level = s; } }); Object.defineProperty(proto, "listType", { get: function() { return this._listData.type; }, set: function(t) { this._listData.type = t; } }); Object.defineProperty(proto, "listTight", { get: function() { return this._listData.tight; }, set: function(t) { this._listData.tight = t; } }); Object.defineProperty(proto, "listStart", { get: function() { return this._listData.start; }, set: function(n) { this._listData.start = n; } }); Object.defineProperty(proto, "listDelimiter", { get: function() { return this._listData.delimiter; }, set: function(delim) { this._listData.delimiter = delim; } }); Object.defineProperty(proto, "onEnter", { get: function() { return this._onEnter; }, set: function(s) { this._onEnter = s; } }); Object.defineProperty(proto, "onExit", { get: function() { return this._onExit; }, set: function(s) { this._onExit = s; } }); Node.prototype.appendChild = function(child) { child.unlink(); child._parent = this; if (this._lastChild) { this._lastChild._next = child; child._prev = this._lastChild; this._lastChild = child; } else { this._firstChild = child; this._lastChild = child; } }; Node.prototype.prependChild = function(child) { child.unlink(); child._parent = this; if (this._firstChild) { this._firstChild._prev = child; child._next = this._firstChild; this._firstChild = child; } else { this._firstChild = child; this._lastChild = child; } }; Node.prototype.unlink = function() { if (this._prev) { this._prev._next = this._next; } else if (this._parent) { this._parent._firstChild = this._next; } if (this._next) { this._next._prev = this._prev; } else if (this._parent) { this._parent._lastChild = this._prev; } this._parent = null; this._next = null; this._prev = null; }; Node.prototype.insertAfter = function(sibling) { sibling.unlink(); sibling._next = this._next; if (sibling._next) { sibling._next._prev = sibling; } sibling._prev = this; this._next = sibling; sibling._parent = this._parent; if (!sibling._next) { sibling._parent._lastChild = sibling; } }; Node.prototype.insertBefore = function(sibling) { sibling.unlink(); sibling._prev = this._prev; if (sibling._prev) { sibling._prev._next = sibling; } sibling._next = this; this._prev = sibling; sibling._parent = this._parent; if (!sibling._prev) { sibling._parent._firstChild = sibling; } }; Node.prototype.walker = function() { var walker = new NodeWalker(this); return walker; }; /* Example of use of walker: var walker = w.walker(); var event; while (event = walker.next()) { console.log(event.entering, event.node.type); } */ var encodeCache = {}; // Create a lookup array where anything but characters in `chars` string // and alphanumeric chars is percent-encoded. // function getEncodeCache(exclude) { var i, ch, cache = encodeCache[exclude]; if (cache) { return cache; } cache = encodeCache[exclude] = []; for (i = 0; i < 128; i++) { ch = String.fromCharCode(i); if (/^[0-9a-z]$/i.test(ch)) { // always allow unencoded alphanumeric characters cache.push(ch); } else { cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2)); } } for (i = 0; i < exclude.length; i++) { cache[exclude.charCodeAt(i)] = exclude[i]; } return cache; } // Encode unsafe characters with percent-encoding, skipping already // encoded sequences. // // - string - string to encode // - exclude - list of characters to ignore (in addition to a-zA-Z0-9) // - keepEscaped - don't encode '%' in a correct escape sequence (default: true) // function encode(string, exclude, keepEscaped) { var i, l, code, nextCode, cache, result = ''; if (typeof exclude !== 'string') { // encode(string, keepEscaped) keepEscaped = exclude; exclude = encode.defaultChars; } if (typeof keepEscaped === 'undefined') { keepEscaped = true; } cache = getEncodeCache(exclude); for (i = 0, l = string.length; i < l; i++) { code = string.charCodeAt(i); if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) { if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) { result += string.slice(i, i + 3); i += 2; continue; } } if (code < 128) { result += cache[code]; continue; } if (code >= 0xD800 && code <= 0xDFFF) { if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) { nextCode = string.charCodeAt(i + 1); if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) { result += encodeURIComponent(string[i] + string[i + 1]); i++; continue; } } result += '%EF%BF%BD'; continue; } result += encodeURIComponent(string[i]); } return result; } encode.defaultChars = ";/?:@&=+$,-_.!~*'()#"; encode.componentChars = "-_.!~*'()"; var encode_1 = encode; var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; function unwrapExports (x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; } function createCommonjsModule(fn, module) { return module = { exports: {} }, fn(module, module.exports), module.exports; } function getCjsExportFromNamespace (n) { return n && n['default'] || n; } var Aacute = "Á"; var aacute = "á"; var Abreve = "Ă"; var abreve = "ă"; var ac = "∾"; var acd = "∿"; var acE = "∾̳"; var Acirc = "Â"; var acirc = "â"; var acute = "´"; var Acy = "А"; var acy = "а"; var AElig = "Æ"; var aelig = "æ"; var af = "⁡"; var Afr = "𝔄"; var afr = "𝔞"; var Agrave = "À"; var agrave = "à"; var alefsym = "ℵ"; var aleph = "ℵ"; var Alpha = "Α"; var alpha = "α"; var Amacr = "Ā"; var amacr = "ā"; var amalg = "⨿"; var amp = "&"; var AMP = "&"; var andand = "⩕"; var And = "⩓"; var and = "∧"; var andd = "⩜"; var andslope = "⩘"; var andv = "⩚"; var ang = "∠"; var ange = "⦤"; var angle = "∠"; var angmsdaa = "⦨"; var angmsdab = "⦩"; var angmsdac = "⦪"; var angmsdad = "⦫"; var angmsdae = "⦬"; var angmsdaf = "⦭"; var angmsdag = "⦮"; var angmsdah = "⦯"; var angmsd = "∡"; var angrt = "∟"; var angrtvb = "⊾"; var angrtvbd = "⦝"; var angsph = "∢"; var angst = "Å"; var angzarr = "⍼"; var Aogon = "Ą"; var aogon = "ą"; var Aopf = "𝔸"; var aopf = "𝕒"; var apacir = "⩯"; var ap = "≈"; var apE = "⩰"; var ape = "≊"; var apid = "≋"; var apos = "'"; var ApplyFunction = "⁡"; var approx = "≈"; var approxeq = "≊"; var Aring = "Å"; var aring = "å"; var Ascr = "𝒜"; var ascr = "𝒶"; var Assign = "≔"; var ast = "*"; var asymp = "≈"; var asympeq = "≍"; var Atilde = "Ã"; var atilde = "ã"; var Auml = "Ä"; var auml = "ä"; var awconint = "∳"; var awint = "⨑"; var backcong = "≌"; var backepsilon = "϶"; var backprime = "‵"; var backsim = "∽"; var backsimeq = "⋍"; var Backslash = "∖"; var Barv = "⫧"; var barvee = "⊽"; var barwed = "⌅"; var Barwed = "⌆"; var barwedge = "⌅"; var bbrk = "⎵"; var bbrktbrk = "⎶"; var bcong = "≌"; var Bcy = "Б"; var bcy = "б"; var bdquo = "„"; var becaus = "∵"; var because = "∵"; var Because = "∵"; var bemptyv = "⦰"; var bepsi = "϶"; var bernou = "ℬ"; var Bernoullis = "ℬ"; var Beta = "Β"; var beta = "β"; var beth = "ℶ"; var between = "≬"; var Bfr = "𝔅"; var bfr = "𝔟"; var bigcap = "⋂"; var bigcirc = "◯"; var bigcup = "⋃"; var bigodot = "⨀"; var bigoplus = "⨁"; var bigotimes = "⨂"; var bigsqcup = "⨆"; var bigstar = "★"; var bigtriangledown = "▽"; var bigtriangleup = "△"; var biguplus = "⨄"; var bigvee = "⋁"; var bigwedge = "⋀"; var bkarow = "⤍"; var blacklozenge = "⧫"; var blacksquare = "▪"; var blacktriangle = "▴"; var blacktriangledown = "▾"; var blacktriangleleft = "◂"; var blacktriangleright = "▸"; var blank = "␣"; var blk12 = "▒"; var blk14 = "░"; var blk34 = "▓"; var block = "█"; var bne = "=⃥"; var bnequiv = "≡⃥"; var bNot = "⫭"; var bnot = "⌐"; var Bopf = "𝔹"; var bopf = "𝕓"; var bot = "⊥"; var bottom = "⊥"; var bowtie = "⋈"; var boxbox = "⧉"; var boxdl = "┐"; var boxdL = "╕"; var boxDl = "╖"; var boxDL = "╗"; var boxdr = "┌"; var boxdR = "╒"; var boxDr = "╓"; var boxDR = "╔"; var boxh = "─"; var boxH = "═"; var boxhd = "┬"; var boxHd = "╤"; var boxhD = "╥"; var boxHD = "╦"; var boxhu = "┴"; var boxHu = "╧"; var boxhU = "╨"; var boxHU = "╩"; var boxminus = "⊟"; var boxplus = "⊞"; var boxtimes = "⊠"; var boxul = "┘"; var boxuL = "╛"; var boxUl = "╜"; var boxUL = "╝"; var boxur = "└"; var boxuR = "╘"; var boxUr = "╙"; var boxUR = "╚"; var boxv = "│"; var boxV = "║"; var boxvh = "┼"; var boxvH = "╪"; var boxVh = "╫"; var boxVH = "╬"; var boxvl = "┤"; var boxvL = "╡"; var boxVl = "╢"; var boxVL = "╣"; var boxvr = "├"; var boxvR = "╞"; var boxVr = "╟"; var boxVR = "╠"; var bprime = "‵"; var breve = "˘"; var Breve = "˘"; var brvbar = "¦"; var bscr = "𝒷"; var Bscr = "ℬ"; var bsemi = "⁏"; var bsim = "∽"; var bsime = "⋍"; var bsolb = "⧅"; var bsol = "\\"; var bsolhsub = "⟈"; var bull = "•"; var bullet = "•"; var bump = "≎"; var bumpE = "⪮"; var bumpe = "≏"; var Bumpeq = "≎"; var bumpeq = "≏"; var Cacute = "Ć"; var cacute = "ć"; var capand = "⩄"; var capbrcup = "⩉"; var capcap = "⩋"; var cap = "∩"; var Cap = "⋒"; var capcup = "⩇"; var capdot = "⩀"; var CapitalDifferentialD = "ⅅ"; var caps = "∩︀"; var caret = "⁁"; var caron = "ˇ"; var Cayleys = "ℭ"; var ccaps = "⩍"; var Ccaron = "Č"; var ccaron = "č"; var Ccedil = "Ç"; var ccedil = "ç"; var Ccirc = "Ĉ"; var ccirc = "ĉ"; var Cconint = "∰"; var ccups = "⩌"; var ccupssm = "⩐"; var Cdot = "Ċ"; var cdot = "ċ"; var cedil = "¸"; var Cedilla = "¸"; var cemptyv = "⦲"; var cent = "¢"; var centerdot = "·"; var CenterDot = "·"; var cfr = "𝔠"; var Cfr = "ℭ"; var CHcy = "Ч"; var chcy = "ч"; var check = "✓"; var checkmark = "✓"; var Chi = "Χ"; var chi = "χ"; var circ = "ˆ"; var circeq = "≗"; var circlearrowleft = "↺"; var circlearrowright = "↻"; var circledast = "⊛"; var circledcirc = "⊚"; var circleddash = "⊝"; var CircleDot = "⊙"; var circledR = "®"; var circledS = "Ⓢ"; var CircleMinus = "⊖"; var CirclePlus = "⊕"; var CircleTimes = "⊗"; var cir = "○"; var cirE = "⧃"; var cire = "≗"; var cirfnint = "⨐"; var cirmid = "⫯"; var cirscir = "⧂"; var ClockwiseContourIntegral = "∲"; var CloseCurlyDoubleQuote = "”"; var CloseCurlyQuote = "’"; var clubs = "♣"; var clubsuit = "♣"; var colon = ":"; var Colon = "∷"; var Colone = "⩴"; var colone = "≔"; var coloneq = "≔"; var comma = ","; var commat = "@"; var comp = "∁"; var compfn = "∘"; var complement = "∁"; var complexes = "ℂ"; var cong = "≅"; var congdot = "⩭"; var Congruent = "≡"; var conint = "∮"; var Conint = "∯"; var ContourIntegral = "∮"; var copf = "𝕔"; var Copf = "ℂ"; var coprod = "∐"; var Coproduct = "∐"; var copy = "©"; var COPY = "©"; var copysr = "℗"; var CounterClockwiseContourIntegral = "∳"; var crarr = "↵"; var cross = "✗"; var Cross = "⨯"; var Cscr = "𝒞"; var cscr = "𝒸"; var csub = "⫏"; var csube = "⫑"; var csup = "⫐"; var csupe = "⫒"; var ctdot = "⋯"; var cudarrl = "⤸"; var cudarrr = "⤵"; var cuepr = "⋞"; var cuesc = "⋟"; var cularr = "↶"; var cularrp = "⤽"; var cupbrcap = "⩈"; var cupcap = "⩆"; var CupCap = "≍"; var cup = "∪"; var Cup = "⋓"; var cupcup = "⩊"; var cupdot = "⊍"; var cupor = "⩅"; var cups = "∪︀"; var curarr = "↷"; var curarrm = "⤼"; var curlyeqprec = "⋞"; var curlyeqsucc = "⋟"; var curlyvee = "⋎"; var curlywedge = "⋏"; var curren = "¤"; var curvearrowleft = "↶"; var curvearrowright = "↷"; var cuvee = "⋎"; var cuwed = "⋏"; var cwconint = "∲"; var cwint = "∱"; var cylcty = "⌭"; var dagger = "†"; var Dagger = "‡"; var daleth = "ℸ"; var darr = "↓"; var Darr = "↡"; var dArr = "⇓"; var dash = "‐"; var Dashv = "⫤"; var dashv = "⊣"; var dbkarow = "⤏"; var dblac = "˝"; var Dcaron = "Ď"; var dcaron = "ď"; var Dcy = "Д"; var dcy = "д"; var ddagger = "‡"; var ddarr = "⇊"; var DD = "ⅅ"; var dd = "ⅆ"; var DDotrahd = "⤑"; var ddotseq = "⩷"; var deg = "°"; var Del = "∇"; var Delta = "Δ"; var delta = "δ"; var demptyv = "⦱"; var dfisht = "⥿"; var Dfr = "𝔇"; var dfr = "𝔡"; var dHar = "⥥"; var dharl = "⇃"; var dharr = "⇂"; var DiacriticalAcute = "´"; var DiacriticalDot = "˙"; var DiacriticalDoubleAcute = "˝"; var DiacriticalGrave = "`"; var DiacriticalTilde = "˜"; var diam = "⋄"; var diamond = "⋄"; var Diamond = "⋄"; var diamondsuit = "♦"; var diams = "♦"; var die = "¨"; var DifferentialD = "ⅆ"; var digamma = "ϝ"; var disin = "⋲"; var div = "÷"; var divide = "÷"; var divideontimes = "⋇"; var divonx = "⋇"; var DJcy = "Ђ"; var djcy = "ђ"; var dlcorn = "⌞"; var dlcrop = "⌍"; var dollar = "$"; var Dopf = "𝔻"; var dopf = "𝕕"; var Dot = "¨"; var dot = "˙"; var DotDot = "⃜"; var doteq = "≐"; var doteqdot = "≑"; var DotEqual = "≐"; var dotminus = "∸"; var dotplus = "∔"; var dotsquare = "⊡"; var doublebarwedge = "⌆"; var DoubleContourIntegral = "∯"; var DoubleDot = "¨"; var DoubleDownArrow = "⇓"; var DoubleLeftArrow = "⇐"; var DoubleLeftRightArrow = "⇔"; var DoubleLeftTee = "⫤"; var DoubleLongLeftArrow = "⟸"; var DoubleLongLeftRightArrow = "⟺"; var DoubleLongRightArrow = "⟹"; var DoubleRightArrow = "⇒"; var DoubleRightTee = "⊨"; var DoubleUpArrow = "⇑"; var DoubleUpDownArrow = "⇕"; var DoubleVerticalBar = "∥"; var DownArrowBar = "⤓"; var downarrow = "↓"; var DownArrow = "↓"; var Downarrow = "⇓"; var DownArrowUpArrow = "⇵"; var DownBreve = "̑"; var downdownarrows = "⇊"; var downharpoonleft = "⇃"; var downharpoonright = "⇂"; var DownLeftRightVector = "⥐"; var DownLeftTeeVector = "⥞"; var DownLeftVectorBar = "⥖"; var DownLeftVector = "↽"; var DownRightTeeVector = "⥟"; var DownRightVectorBar = "⥗"; var DownRightVector = "⇁"; var DownTeeArrow = "↧"; var DownTee = "⊤"; var drbkarow = "⤐"; var drcorn = "⌟"; var drcrop = "⌌"; var Dscr = "𝒟"; var dscr = "𝒹"; var DScy = "Ѕ"; var dscy = "ѕ"; var dsol = "⧶"; var Dstrok = "Đ"; var dstrok = "đ"; var dtdot = "⋱"; var dtri = "▿"; var dtrif = "▾"; var duarr = "⇵"; var duhar = "⥯"; var dwangle = "⦦"; var DZcy = "Џ"; var dzcy = "џ"; var dzigrarr = "⟿"; var Eacute = "É"; var eacute = "é"; var easter = "⩮"; var Ecaron = "Ě"; var ecaron = "ě"; var Ecirc = "Ê"; var ecirc = "ê"; var ecir = "≖"; var ecolon = "≕"; var Ecy = "Э"; var ecy = "э"; var eDDot = "⩷"; var Edot = "Ė"; var edot = "ė"; var eDot = "≑"; var ee = "ⅇ"; var efDot = "≒"; var Efr = "𝔈"; var efr = "𝔢"; var eg = "⪚"; var Egrave = "È"; var egrave = "è"; var egs = "⪖"; var egsdot = "⪘"; var el = "⪙"; var Element = "∈"; var elinters = "⏧"; var ell = "ℓ"; var els = "⪕"; var elsdot = "⪗"; var Emacr = "Ē"; var emacr = "ē"; var empty = "∅"; var emptyset = "∅"; var EmptySmallSquare = "◻"; var emptyv = "∅"; var EmptyVerySmallSquare = "▫"; var emsp13 = " "; var emsp14 = " "; var emsp = " "; var ENG = "Ŋ"; var eng = "ŋ"; var ensp = " "; var Eogon = "Ę"; var eogon = "ę"; var Eopf = "𝔼"; var eopf = "𝕖"; var epar = "⋕"; var eparsl = "⧣"; var eplus = "⩱"; var epsi = "ε"; var Epsilon = "Ε"; var epsilon = "ε"; var epsiv = "ϵ"; var eqcirc = "≖"; var eqcolon = "≕"; var eqsim = "≂"; var eqslantgtr = "⪖"; var eqslantless = "⪕"; var Equal = "⩵"; var equals = "="; var EqualTilde = "≂"; var equest = "≟"; var Equilibrium = "⇌"; var equiv = "≡"; var equivDD = "⩸"; var eqvparsl = "⧥"; var erarr = "⥱"; var erDot = "≓"; var escr = "ℯ"; var Escr = "ℰ"; var esdot = "≐"; var Esim = "⩳"; var esim = "≂"; var Eta = "Η"; var eta = "η"; var ETH = "Ð"; var eth = "ð"; var Euml = "Ë"; var euml = "ë"; var euro = "€"; var excl = "!"; var exist = "∃"; var Exists = "∃"; var expectation = "ℰ"; var exponentiale = "ⅇ"; var ExponentialE = "ⅇ"; var fallingdotseq = "≒"; var Fcy = "Ф"; var fcy = "ф"; var female = "♀"; var ffilig = "ffi"; var fflig = "ff"; var ffllig = "ffl"; var Ffr = "𝔉"; var ffr = "𝔣"; var filig = "fi"; var FilledSmallSquare = "◼"; var FilledVerySmallSquare = "▪"; var fjlig = "fj"; var flat = "♭"; var fllig = "fl"; var fltns = "▱"; var fnof = "ƒ"; var Fopf = "𝔽"; var fopf = "𝕗"; var forall = "∀"; var ForAll = "∀"; var fork = "⋔"; var forkv = "⫙"; var Fouriertrf = "ℱ"; var fpartint = "⨍"; var frac12 = "½"; var frac13 = "⅓"; var frac14 = "¼"; var frac15 = "⅕"; var frac16 = "⅙"; var frac18 = "⅛"; var frac23 = "⅔"; var frac25 = "⅖"; var frac34 = "¾"; var frac35 = "⅗"; var frac38 = "⅜"; var frac45 = "⅘"; var frac56 = "⅚"; var frac58 = "⅝"; var frac78 = "⅞"; var frasl = "⁄"; var frown = "⌢"; var fscr = "𝒻"; var Fscr = "ℱ"; var gacute = "ǵ"; var Gamma = "Γ"; var gamma = "γ"; var Gammad = "Ϝ"; var gammad = "ϝ"; var gap = "⪆"; var Gbreve = "Ğ"; var gbreve = "ğ"; var Gcedil = "Ģ"; var Gcirc = "Ĝ"; var gcirc = "ĝ"; var Gcy = "Г"; var gcy = "г"; var Gdot = "Ġ"; var gdot = "ġ"; var ge = "≥"; var gE = "≧"; var gEl = "⪌"; var gel = "⋛"; var geq = "≥"; var geqq = "≧"; var geqslant = "⩾"; var gescc = "⪩"; var ges = "⩾"; var gesdot = "⪀"; var gesdoto = "⪂"; var gesdotol = "⪄"; var gesl = "⋛︀"; var gesles = "⪔"; var Gfr = "𝔊"; var gfr = "𝔤"; var gg = "≫"; var Gg = "⋙"; var ggg = "⋙"; var gimel = "ℷ"; var GJcy = "Ѓ"; var gjcy = "ѓ"; var gla = "⪥"; var gl = "≷"; var glE = "⪒"; var glj = "⪤"; var gnap = "⪊"; var gnapprox = "⪊"; var gne = "⪈"; var gnE = "≩"; var gneq = "⪈"; var gneqq = "≩"; var gnsim = "⋧"; var Gopf = "𝔾"; var gopf = "𝕘"; var grave = "`"; var GreaterEqual = "≥"; var GreaterEqualLess = "⋛"; var GreaterFullEqual = "≧"; var GreaterGreater = "⪢"; var GreaterLess = "≷"; var GreaterSlantEqual = "⩾"; var GreaterTilde = "≳"; var Gscr = "𝒢"; var gscr = "ℊ"; var gsim = "≳"; var gsime = "⪎"; var gsiml = "⪐"; var gtcc = "⪧"; var gtcir = "⩺"; var gt = ">"; var GT = ">"; var Gt = "≫"; var gtdot = "⋗"; var gtlPar = "⦕"; var gtquest = "⩼"; var gtrapprox = "⪆"; var gtrarr = "⥸"; var gtrdot = "⋗"; var gtreqless = "⋛"; var gtreqqless = "⪌"; var gtrless = "≷"; var gtrsim = "≳"; var gvertneqq = "≩︀"; var gvnE = "≩︀"; var Hacek = "ˇ"; var hairsp = " "; var half = "½"; var hamilt = "ℋ"; var HARDcy = "Ъ"; var hardcy = "ъ"; var harrcir = "⥈"; var harr = "↔"; var hArr = "⇔"; var harrw = "↭"; var Hat = "^"; var hbar = "ℏ"; var Hcirc = "Ĥ"; var hcirc = "ĥ"; var hearts = "♥"; var heartsuit = "♥"; var hellip = "…"; var hercon = "⊹"; var hfr = "𝔥"; var Hfr = "ℌ"; var HilbertSpace = "ℋ"; var hksearow = "⤥"; var hkswarow = "⤦"; var hoarr = "⇿"; var homtht = "∻"; var hookleftarrow = "↩"; var hookrightarrow = "↪"; var hopf = "𝕙"; var Hopf = "ℍ"; var horbar = "―"; var HorizontalLine = "─"; var hscr = "𝒽"; var Hscr = "ℋ"; var hslash = "ℏ"; var Hstrok = "Ħ"; var hstrok = "ħ"; var HumpDownHump = "≎"; var HumpEqual = "≏"; var hybull = "⁃"; var hyphen = "‐"; var Iacute = "Í"; var iacute = "í"; var ic = "⁣"; var Icirc = "Î"; var icirc = "î"; var Icy = "И"; var icy = "и"; var Idot = "İ"; var IEcy = "Е"; var iecy = "е"; var iexcl = "¡"; var iff = "⇔"; var ifr = "𝔦"; var Ifr = "ℑ"; var Igrave = "Ì"; var igrave = "ì"; var ii = "ⅈ"; var iiiint = "⨌"; var iiint = "∭"; var iinfin = "⧜"; var iiota = "℩"; var IJlig = "IJ"; var ijlig = "ij"; var Imacr = "Ī"; var imacr = "ī"; var image = "ℑ"; var ImaginaryI = "ⅈ"; var imagline = "ℐ"; var imagpart = "ℑ"; var imath = "ı"; var Im = "ℑ"; var imof = "⊷"; var imped = "Ƶ"; var Implies = "⇒"; var incare = "℅"; var infin = "∞"; var infintie = "⧝"; var inodot = "ı"; var intcal = "⊺"; var int = "∫"; var Int = "∬"; var integers = "ℤ"; var Integral = "∫"; var intercal = "⊺"; var Intersection = "⋂"; var intlarhk = "⨗"; var intprod = "⨼"; var InvisibleComma = "⁣"; var InvisibleTimes = "⁢"; var IOcy = "Ё"; var iocy = "ё"; var Iogon = "Į"; var iogon = "į"; var Iopf = "𝕀"; var iopf = "𝕚"; var Iota = "Ι"; var iota = "ι"; var iprod = "⨼"; var iquest = "¿"; var iscr = "𝒾"; var Iscr = "ℐ"; var isin = "∈"; var isindot = "⋵"; var isinE = "⋹"; var isins = "⋴"; var isinsv = "⋳"; var isinv = "∈"; var it = "⁢"; var Itilde = "Ĩ"; var itilde = "ĩ"; var Iukcy = "І"; var iukcy = "і"; var Iuml = "Ï"; var iuml = "ï"; var Jcirc = "Ĵ"; var jcirc = "ĵ"; var Jcy = "Й"; var jcy = "й"; var Jfr = "𝔍"; var jfr = "𝔧"; var jmath = "ȷ"; var Jopf = "𝕁"; var jopf = "𝕛"; var Jscr = "𝒥"; var jscr = "𝒿"; var Jsercy = "Ј"; var jsercy = "ј"; var Jukcy = "Є"; var jukcy = "є"; var Kappa = "Κ"; var kappa = "κ"; var kappav = "ϰ"; var Kcedil = "Ķ"; var kcedil = "ķ"; var Kcy = "К"; var kcy = "к"; var Kfr = "𝔎"; var kfr = "𝔨"; var kgreen = "ĸ"; var KHcy = "Х"; var khcy = "х"; var KJcy = "Ќ"; var kjcy = "ќ"; var Kopf = "𝕂"; var kopf = "𝕜"; var Kscr = "𝒦"; var kscr = "𝓀"; var lAarr = "⇚"; var Lacute = "Ĺ"; var lacute = "ĺ"; var laemptyv = "⦴"; var lagran = "ℒ"; var Lambda = "Λ"; var lambda = "λ"; var lang = "⟨"; var Lang = "⟪"; var langd = "⦑"; var langle = "⟨"; var lap = "⪅"; var Laplacetrf = "ℒ"; var laquo = "«"; var larrb = "⇤"; var larrbfs = "⤟"; var larr = "←"; var Larr = "↞"; var lArr = "⇐"; var larrfs = "⤝"; var larrhk = "↩"; var larrlp = "↫"; var larrpl = "⤹"; var larrsim = "⥳"; var larrtl = "↢"; var latail = "⤙"; var lAtail = "⤛"; var lat = "⪫"; var late = "⪭"; var lates = "⪭︀"; var lbarr = "⤌"; var lBarr = "⤎"; var lbbrk = "❲"; var lbrace = "{"; var lbrack = "["; var lbrke = "⦋"; var lbrksld = "⦏"; var lbrkslu = "⦍"; var Lcaron = "Ľ"; var lcaron = "ľ"; var Lcedil = "Ļ"; var lcedil = "ļ"; var lceil = "⌈"; var lcub = "{"; var Lcy = "Л"; var lcy = "л"; var ldca = "⤶"; var ldquo = "“"; var ldquor = "„"; var ldrdhar = "⥧"; var ldrushar = "⥋"; var ldsh = "↲"; var le = "≤"; var lE = "≦"; var LeftAngleBracket = "⟨"; var LeftArrowBar = "⇤"; var leftarrow = "←"; var LeftArrow = "←"; var Leftarrow = "⇐"; var LeftArrowRightArrow = "⇆"; var leftarrowtail = "↢"; var LeftCeiling = "⌈"; var LeftDoubleBracket = "⟦"; var LeftDownTeeVector = "⥡"; var LeftDownVectorBar = "⥙"; var LeftDownVector = "⇃"; var LeftFloor = "⌊"; var leftharpoondown = "↽"; var leftharpoonup = "↼"; var leftleftarrows = "⇇"; var leftrightarrow = "↔"; var LeftRightArrow = "↔"; var Leftrightarrow = "⇔"; var leftrightarrows = "⇆"; var leftrightharpoons = "⇋"; var leftrightsquigarrow = "↭"; var LeftRightVector = "⥎"; var LeftTeeArrow = "↤"; var LeftTee = "⊣"; var LeftTeeVector = "⥚"; var leftthreetimes = "⋋"; var LeftTriangleBar = "⧏"; var LeftTriangle = "⊲"; var LeftTriangleEqual = "⊴"; var LeftUpDownVector = "⥑"; var LeftUpTeeVector = "⥠"; var LeftUpVectorBar = "⥘"; var LeftUpVector = "↿"; var LeftVectorBar = "⥒"; var LeftVector = "↼"; var lEg = "⪋"; var leg = "⋚"; var leq = "≤"; var leqq = "≦"; var leqslant = "⩽"; var lescc = "⪨"; var les = "⩽"; var lesdot = "⩿"; var lesdoto = "⪁"; var lesdotor = "⪃"; var lesg = "⋚︀"; var lesges = "⪓"; var lessapprox = "⪅"; var lessdot = "⋖"; var lesseqgtr = "⋚"; var lesseqqgtr = "⪋"; var LessEqualGreater = "⋚"; var LessFullEqual = "≦"; var LessGreater = "≶"; var lessgtr = "≶"; var LessLess = "⪡"; var lesssim = "≲"; var LessSlantEqual = "⩽"; var LessTilde = "≲"; var lfisht = "⥼"; var lfloor = "⌊"; var Lfr = "𝔏"; var lfr = "𝔩"; var lg = "≶"; var lgE = "⪑"; var lHar = "⥢"; var lhard = "↽"; var lharu = "↼"; var lharul = "⥪"; var lhblk = "▄"; var LJcy = "Љ"; var ljcy = "љ"; var llarr = "⇇"; var ll = "≪"; var Ll = "⋘"; var llcorner = "⌞"; var Lleftarrow = "⇚"; var llhard = "⥫"; var lltri = "◺"; var Lmidot = "Ŀ"; var lmidot = "ŀ"; var lmoustache = "⎰"; var lmoust = "⎰"; var lnap = "⪉"; var lnapprox = "⪉"; var lne = "⪇"; var lnE = "≨"; var lneq = "⪇"; var lneqq = "≨"; var lnsim = "⋦"; var loang = "⟬"; var loarr = "⇽"; var lobrk = "⟦"; var longleftarrow = "⟵"; var LongLeftArrow = "⟵"; var Longleftarrow = "⟸"; var longleftrightarrow = "⟷"; var LongLeftRightArrow = "⟷"; var Longleftrightarrow = "⟺"; var longmapsto = "⟼"; var longrightarrow = "⟶"; var LongRightArrow = "⟶"; var Longrightarrow = "⟹"; var looparrowleft = "↫"; var looparrowright = "↬"; var lopar = "⦅"; var Lopf = "𝕃"; var lopf = "𝕝"; var loplus = "⨭"; var lotimes = "⨴"; var lowast = "∗"; var lowbar = "_"; var LowerLeftArrow = "↙"; var LowerRightArrow = "↘"; var loz = "◊"; var lozenge = "◊"; var lozf = "⧫"; var lpar = "("; var lparlt = "⦓"; var lrarr = "⇆"; var lrcorner = "⌟"; var lrhar = "⇋"; var lrhard = "⥭"; var lrm = "‎"; var lrtri = "⊿"; var lsaquo = "‹"; var lscr = "𝓁"; var Lscr = "ℒ"; var lsh = "↰"; var Lsh = "↰"; var lsim = "≲"; var lsime = "⪍"; var lsimg = "⪏"; var lsqb = "["; var lsquo = "‘"; var lsquor = "‚"; var Lstrok = "Ł"; var lstrok = "ł"; var ltcc = "⪦"; var ltcir = "⩹"; var lt = "<"; var LT = "<"; var Lt = "≪"; var ltdot = "⋖"; var lthree = "⋋"; var ltimes = "⋉"; var ltlarr = "⥶"; var ltquest = "⩻"; var ltri = "◃"; var ltrie = "⊴"; var ltrif = "◂"; var ltrPar = "⦖"; var lurdshar = "⥊"; var luruhar = "⥦"; var lvertneqq = "≨︀"; var lvnE = "≨︀"; var macr = "¯"; var male = "♂"; var malt = "✠"; var maltese = "✠"; var map = "↦"; var mapsto = "↦"; var mapstodown = "↧"; var mapstoleft = "↤"; var mapstoup = "↥"; var marker = "▮"; var mcomma = "⨩"; var Mcy = "М"; var mcy = "м"; var mdash = "—"; var mDDot = "∺"; var measuredangle = "∡"; var MediumSpace = " "; var Mellintrf = "ℳ"; var Mfr = "𝔐"; var mfr = "𝔪"; var mho = "℧"; var micro = "µ"; var midast = "*"; var midcir = "⫰"; var mid = "∣"; var middot = "·"; var minusb = "⊟"; var minus = "−"; var minusd = "∸"; var minusdu = "⨪"; var MinusPlus = "∓"; var mlcp = "⫛"; var mldr = "…"; var mnplus = "∓"; var models = "⊧"; var Mopf = "𝕄"; var mopf = "𝕞"; var mp = "∓"; var mscr = "𝓂"; var Mscr = "ℳ"; var mstpos = "∾"; var Mu = "Μ"; var mu = "μ"; var multimap = "⊸"; var mumap = "⊸"; var nabla = "∇"; var Nacute = "Ń"; var nacute = "ń"; var nang = "∠⃒"; var nap = "≉"; var napE = "⩰̸"; var napid = "≋̸"; var napos = "ʼn"; var napprox = "≉"; var natural = "♮"; var naturals = "ℕ"; var natur = "♮"; var nbsp = " "; var nbump = "≎̸"; var nbumpe = "≏̸"; var ncap = "⩃"; var Ncaron = "Ň"; var ncaron = "ň"; var Ncedil = "Ņ"; var ncedil = "ņ"; var ncong = "≇"; var ncongdot = "⩭̸"; var ncup = "⩂"; var Ncy = "Н"; var ncy = "н"; var ndash = "–"; var nearhk = "⤤"; var nearr = "↗"; var neArr = "⇗"; var nearrow = "↗"; var ne = "≠"; var nedot = "≐̸"; var NegativeMediumSpace = "​"; var NegativeThickSpace = "​"; var NegativeThinSpace = "​"; var NegativeVeryThinSpace = "​"; var nequiv = "≢"; var nesear = "⤨"; var nesim = "≂̸"; var NestedGreaterGreater = "≫"; var NestedLessLess = "≪"; var NewLine = "\n"; var nexist = "∄"; var nexists = "∄"; var Nfr = "𝔑"; var nfr = "𝔫"; var ngE = "≧̸"; var nge = "≱"; var ngeq = "≱"; var ngeqq = "≧̸"; var ngeqslant = "⩾̸"; var nges = "⩾̸"; var nGg = "⋙̸"; var ngsim = "≵"; var nGt = "≫⃒"; var ngt = "≯"; var ngtr = "≯"; var nGtv = "≫̸"; var nharr = "↮"; var nhArr = "⇎"; var nhpar = "⫲"; var ni = "∋"; var nis = "⋼"; var nisd = "⋺"; var niv = "∋"; var NJcy = "Њ"; var njcy = "њ"; var nlarr = "↚"; var nlArr = "⇍"; var nldr = "‥"; var nlE = "≦̸"; var nle = "≰"; var nleftarrow = "↚"; var nLeftarrow = "⇍"; var nleftrightarrow = "↮"; var nLeftrightarrow = "⇎"; var nleq = "≰"; var nleqq = "≦̸"; var nleqslant = "⩽̸"; var nles = "⩽̸"; var nless = "≮"; var nLl = "⋘̸"; var nlsim = "≴"; var nLt = "≪⃒"; var nlt = "≮"; var nltri = "⋪"; var nltrie = "⋬"; var nLtv = "≪̸"; var nmid = "∤"; var NoBreak = "⁠"; var NonBreakingSpace = " "; var nopf = "𝕟"; var Nopf = "ℕ"; var Not = "⫬"; var not = "¬"; var NotCongruent = "≢"; var NotCupCap = "≭"; var NotDoubleVerticalBar = "∦"; var NotElement = "∉"; var NotEqual = "≠"; var NotEqualTilde = "≂̸"; var NotExists = "∄"; var NotGreater = "≯"; var NotGreaterEqual = "≱"; var NotGreaterFullEqual = "≧̸"; var NotGreaterGreater = "≫̸"; var NotGreaterLess = "≹"; var NotGreaterSlantEqual = "⩾̸"; var NotGreaterTilde = "≵"; var NotHumpDownHump = "≎̸"; var NotHumpEqual = "≏̸"; var notin = "∉"; var notindot = "⋵̸"; var notinE = "⋹̸"; var notinva = "∉"; var notinvb = "⋷"; var notinvc = "⋶"; var NotLeftTriangleBar = "⧏̸"; var NotLeftTriangle = "⋪"; var NotLeftTriangleEqual = "⋬"; var NotLess = "≮"; var NotLessEqual = "≰"; var NotLessGreater = "≸"; var NotLessLess = "≪̸"; var NotLessSlantEqual = "⩽̸"; var NotLessTilde = "≴"; var NotNestedGreaterGreater = "⪢̸"; var NotNestedLessLess = "⪡̸"; var notni = "∌"; var notniva = "∌"; var notnivb = "⋾"; var notnivc = "⋽"; var NotPrecedes = "⊀"; var NotPrecedesEqual = "⪯̸"; var NotPrecedesSlantEqual = "⋠"; var NotReverseElement = "∌"; var NotRightTriangleBar = "⧐̸"; var NotRightTriangle = "⋫"; var NotRightTriangleEqual = "⋭"; var NotSquareSubset = "⊏̸"; var NotSquareSubsetEqual = "⋢"; var NotSquareSuperset = "⊐̸"; var NotSquareSupersetEqual = "⋣"; var NotSubset = "⊂⃒"; var NotSubsetEqual = "⊈"; var NotSucceeds = "⊁"; var NotSucceedsEqual = "⪰̸"; var NotSucceedsSlantEqual = "⋡"; var NotSucceedsTilde = "≿̸"; var NotSuperset = "⊃⃒"; var NotSupersetEqual = "⊉"; var NotTilde = "≁"; var NotTildeEqual = "≄"; var NotTildeFullEqual = "≇"; var NotTildeTilde = "≉"; var NotVerticalBar = "∤"; var nparallel = "∦"; var npar = "∦"; var nparsl = "⫽⃥"; var npart = "∂̸"; var npolint = "⨔"; var npr = "⊀"; var nprcue = "⋠"; var nprec = "⊀"; var npreceq = "⪯̸"; var npre = "⪯̸"; var nrarrc = "⤳̸"; var nrarr = "↛"; var nrArr = "⇏"; var nrarrw = "↝̸"; var nrightarrow = "↛"; var nRightarrow = "⇏"; var nrtri = "⋫"; var nrtrie = "⋭"; var nsc = "⊁"; var nsccue = "⋡"; var nsce = "⪰̸"; var Nscr = "𝒩"; var nscr = "𝓃"; var nshortmid = "∤"; var nshortparallel = "∦"; var nsim = "≁"; var nsime = "≄"; var nsimeq = "≄"; var nsmid = "∤"; var nspar = "∦"; var nsqsube = "⋢"; var nsqsupe = "⋣"; var nsub = "⊄"; var nsubE = "⫅̸"; var nsube = "⊈"; var nsubset = "⊂⃒"; var nsubseteq = "⊈"; var nsubseteqq = "⫅̸"; var nsucc = "⊁"; var nsucceq = "⪰̸"; var nsup = "⊅"; var nsupE = "⫆̸"; var nsupe = "⊉"; var nsupset = "⊃⃒"; var nsupseteq = "⊉"; var nsupseteqq = "⫆̸"; var ntgl = "≹"; var Ntilde = "Ñ"; var ntilde = "ñ"; var ntlg = "≸"; var ntriangleleft = "⋪"; var ntrianglelefteq = "⋬"; var ntriangleright = "⋫"; var ntrianglerighteq = "⋭"; var Nu = "Ν"; var nu = "ν"; var num = "#"; var numero = "№"; var numsp = " "; var nvap = "≍⃒"; var nvdash = "⊬"; var nvDash = "⊭"; var nVdash = "⊮"; var nVDash = "⊯"; var nvge = "≥⃒"; var nvgt = ">⃒"; var nvHarr = "⤄"; var nvinfin = "⧞"; var nvlArr = "⤂"; var nvle = "≤⃒"; var nvlt = "<⃒"; var nvltrie = "⊴⃒"; var nvrArr = "⤃"; var nvrtrie = "⊵⃒"; var nvsim = "∼⃒"; var nwarhk = "⤣"; var nwarr = "↖"; var nwArr = "⇖"; var nwarrow = "↖"; var nwnear = "⤧"; var Oacute = "Ó"; var oacute = "ó"; var oast = "⊛"; var Ocirc = "Ô"; var ocirc = "ô"; var ocir = "⊚"; var Ocy = "О"; var ocy = "о"; var odash = "⊝"; var Odblac = "Ő"; var odblac = "ő"; var odiv = "⨸"; var odot = "⊙"; var odsold = "⦼"; var OElig = "Œ"; var oelig = "œ"; var ofcir = "⦿"; var Ofr = "𝔒"; var ofr = "𝔬"; var ogon = "˛"; var Ograve = "Ò"; var ograve = "ò"; var ogt = "⧁"; var ohbar = "⦵"; var ohm = "Ω"; var oint = "∮"; var olarr = "↺"; var olcir = "⦾"; var olcross = "⦻"; var oline = "‾"; var olt = "⧀"; var Omacr = "Ō"; var omacr = "ō"; var Omega = "Ω"; var omega = "ω"; var Omicron = "Ο"; var omicron = "ο"; var omid = "⦶"; var ominus = "⊖"; var Oopf = "𝕆"; var oopf = "𝕠"; var opar = "⦷"; var OpenCurlyDoubleQuote = "“"; var OpenCurlyQuote = "‘"; var operp = "⦹"; var oplus = "⊕"; var orarr = "↻"; var Or = "⩔"; var or = "∨"; var ord = "⩝"; var order = "ℴ"; var orderof = "ℴ"; var ordf = "ª"; var ordm = "º"; var origof = "⊶"; var oror = "⩖"; var orslope = "⩗"; var orv = "⩛"; var oS = "Ⓢ"; var Oscr = "𝒪"; var oscr = "ℴ"; var Oslash = "Ø"; var oslash = "ø"; var osol = "⊘"; var Otilde = "Õ"; var otilde = "õ"; var otimesas = "⨶"; var Otimes = "⨷"; var otimes = "⊗"; var Ouml = "Ö"; var ouml = "ö"; var ovbar = "⌽"; var OverBar = "‾"; var OverBrace = "⏞"; var OverBracket = "⎴"; var OverParenthesis = "⏜"; var para = "¶"; var parallel = "∥"; var par = "∥"; var parsim = "⫳"; var parsl = "⫽"; var part = "∂"; var PartialD = "∂"; var Pcy = "П"; var pcy = "п"; var percnt = "%"; var period = "."; var permil = "‰"; var perp = "⊥"; var pertenk = "‱"; var Pfr = "𝔓"; var pfr = "𝔭"; var Phi = "Φ"; var phi = "φ"; var phiv = "ϕ"; var phmmat = "ℳ"; var phone = "☎"; var Pi = "Π"; var pi = "π"; var pitchfork = "⋔"; var piv = "ϖ"; var planck = "ℏ"; var planckh = "ℎ"; var plankv = "ℏ"; var plusacir = "⨣"; var plusb = "⊞"; var pluscir = "⨢"; var plus = "+"; var plusdo = "∔"; var plusdu = "⨥"; var pluse = "⩲"; var PlusMinus = "±"; var plusmn = "±"; var plussim = "⨦"; var plustwo = "⨧"; var pm = "±"; var Poincareplane = "ℌ"; var pointint = "⨕"; var popf = "𝕡"; var Popf = "ℙ"; var pound = "£"; var prap = "⪷"; var Pr = "⪻"; var pr = "≺"; var prcue = "≼"; var precapprox = "⪷"; var prec = "≺"; var preccurlyeq = "≼"; var Precedes = "≺"; var PrecedesEqual = "⪯"; var PrecedesSlantEqual = "≼"; var PrecedesTilde = "≾"; var preceq = "⪯"; var precnapprox = "⪹"; var precneqq = "⪵"; var precnsim = "⋨"; var pre = "⪯"; var prE = "⪳"; var precsim = "≾"; var prime = "′"; var Prime = "″"; var primes = "ℙ"; var prnap = "⪹"; var prnE = "⪵"; var prnsim = "⋨"; var prod = "∏"; var Product = "∏"; var profalar = "⌮"; var profline = "⌒"; var profsurf = "⌓"; var prop = "∝"; var Proportional = "∝"; var Proportion = "∷"; var propto = "∝"; var prsim = "≾"; var prurel = "⊰"; var Pscr = "𝒫"; var pscr = "𝓅"; var Psi = "Ψ"; var psi = "ψ"; var puncsp = " "; var Qfr = "𝔔"; var qfr = "𝔮"; var qint = "⨌"; var qopf = "𝕢"; var Qopf = "ℚ"; var qprime = "⁗"; var Qscr = "𝒬"; var qscr = "𝓆"; var quaternions = "ℍ"; var quatint = "⨖"; var quest = "?"; var questeq = "≟"; var quot = "\""; var QUOT = "\""; var rAarr = "⇛"; var race = "∽̱"; var Racute = "Ŕ"; var racute = "ŕ"; var radic = "√"; var raemptyv = "⦳"; var rang = "⟩"; var Rang = "⟫"; var rangd = "⦒"; var range = "⦥"; var rangle = "⟩"; var raquo = "»"; var rarrap = "⥵"; var rarrb = "⇥"; var rarrbfs = "⤠"; var rarrc = "⤳"; var rarr = "→"; var Rarr = "↠"; var rArr = "⇒"; var rarrfs = "⤞"; var rarrhk = "↪"; var rarrlp = "↬"; var rarrpl = "⥅"; var rarrsim = "⥴"; var Rarrtl = "⤖"; var rarrtl = "↣"; var rarrw = "↝"; var ratail = "⤚"; var rAtail = "⤜"; var ratio = "∶"; var rationals = "ℚ"; var rbarr = "⤍"; var rBarr = "⤏"; var RBarr = "⤐"; var rbbrk = "❳"; var rbrace = "}"; var rbrack = "]"; var rbrke = "⦌"; var rbrksld = "⦎"; var rbrkslu = "⦐"; var Rcaron = "Ř"; var rcaron = "ř"; var Rcedil = "Ŗ"; var rcedil = "ŗ"; var rceil = "⌉"; var rcub = "}"; var Rcy = "Р"; var rcy = "р"; var rdca = "⤷"; var rdldhar = "⥩"; var rdquo = "”"; var rdquor = "”"; var rdsh = "↳"; var real = "ℜ"; var realine = "ℛ"; var realpart = "ℜ"; var reals = "ℝ"; var Re = "ℜ"; var rect = "▭"; var reg = "®"; var REG = "®"; var ReverseElement = "∋"; var ReverseEquilibrium = "⇋"; var ReverseUpEquilibrium = "⥯"; var rfisht = "⥽"; var rfloor = "⌋"; var rfr = "𝔯"; var Rfr = "ℜ"; var rHar = "⥤"; var rhard = "⇁"; var rharu = "⇀"; var rharul = "⥬"; var Rho = "Ρ"; var rho = "ρ"; var rhov = "ϱ"; var RightAngleBracket = "⟩"; var RightArrowBar = "⇥"; var rightarrow = "→"; var RightArrow = "→"; var Rightarrow = "⇒"; var RightArrowLeftArrow = "⇄"; var rightarrowtail = "↣"; var RightCeiling = "⌉"; var RightDoubleBracket = "⟧"; var RightDownTeeVector = "⥝"; var RightDownVectorBar = "⥕"; var RightDownVector = "⇂"; var RightFloor = "⌋"; var rightharpoondown = "⇁"; var rightharpoonup = "⇀"; var rightleftarrows = "⇄"; var rightleftharpoons = "⇌"; var rightrightarrows = "⇉"; var rightsquigarrow = "↝"; var RightTeeArrow = "↦"; var RightTee = "⊢"; var RightTeeVector = "⥛"; var rightthreetimes = "⋌"; var RightTriangleBar = "⧐"; var RightTriangle = "⊳"; var RightTriangleEqual = "⊵"; var RightUpDownVector = "⥏"; var RightUpTeeVector = "⥜"; var RightUpVectorBar = "⥔"; var RightUpVector = "↾"; var RightVectorBar = "⥓"; var RightVector = "⇀"; var ring = "˚"; var risingdotseq = "≓"; var rlarr = "⇄"; var rlhar = "⇌"; var rlm = "‏"; var rmoustache = "⎱"; var rmoust = "⎱"; var rnmid = "⫮"; var roang = "⟭"; var roarr = "⇾"; var robrk = "⟧"; var ropar = "⦆"; var ropf = "𝕣"; var Ropf = "ℝ"; var roplus = "⨮"; var rotimes = "⨵"; var RoundImplies = "⥰"; var rpar = ")"; var rpargt = "⦔"; var rppolint = "⨒"; var rrarr = "⇉"; var Rrightarrow = "⇛"; var rsaquo = "›"; var rscr = "𝓇"; var Rscr = "ℛ"; var rsh = "↱"; var Rsh = "↱"; var rsqb = "]"; var rsquo = "’"; var rsquor = "’"; var rthree = "⋌"; var rtimes = "⋊"; var rtri = "▹"; var rtrie = "⊵"; var rtrif = "▸"; var rtriltri = "⧎"; var RuleDelayed = "⧴"; var ruluhar = "⥨"; var rx = "℞"; var Sacute = "Ś"; var sacute = "ś"; var sbquo = "‚"; var scap = "⪸"; var Scaron = "Š"; var scaron = "š"; var Sc = "⪼"; var sc = "≻"; var sccue = "≽"; var sce = "⪰"; var scE = "⪴"; var Scedil = "Ş"; var scedil = "ş"; var Scirc = "Ŝ"; var scirc = "ŝ"; var scnap = "⪺"; var scnE = "⪶"; var scnsim = "⋩"; var scpolint = "⨓"; var scsim = "≿"; var Scy = "С"; var scy = "с"; var sdotb = "⊡"; var sdot = "⋅"; var sdote = "⩦"; var searhk = "⤥"; var searr = "↘"; var seArr = "⇘"; var searrow = "↘"; var sect = "§"; var semi = ";"; var seswar = "⤩"; var setminus = "∖"; var setmn = "∖"; var sext = "✶"; var Sfr = "𝔖"; var sfr = "𝔰"; var sfrown = "⌢"; var sharp = "♯"; var SHCHcy = "Щ"; var shchcy = "щ"; var SHcy = "Ш"; var shcy = "ш"; var ShortDownArrow = "↓"; var ShortLeftArrow = "←"; var shortmid = "∣"; var shortparallel = "∥"; var ShortRightArrow = "→"; var ShortUpArrow = "↑"; var shy = "­"; var Sigma = "Σ"; var sigma = "σ"; var sigmaf = "ς"; var sigmav = "ς"; var sim = "∼"; var simdot = "⩪"; var sime = "≃"; var simeq = "≃"; var simg = "⪞"; var simgE = "⪠"; var siml = "⪝"; var simlE = "⪟"; var simne = "≆"; var simplus = "⨤"; var simrarr = "⥲"; var slarr = "←"; var SmallCircle = "∘"; var smallsetminus = "∖"; var smashp = "⨳"; var smeparsl = "⧤"; var smid = "∣"; var smile = "⌣"; var smt = "⪪"; var smte = "⪬"; var smtes = "⪬︀"; var SOFTcy = "Ь"; var softcy = "ь"; var solbar = "⌿"; var solb = "⧄"; var sol = "/"; var Sopf = "𝕊"; var sopf = "𝕤"; var spades = "♠"; var spadesuit = "♠"; var spar = "∥"; var sqcap = "⊓"; var sqcaps = "⊓︀"; var sqcup = "⊔"; var sqcups = "⊔︀"; var Sqrt = "√"; var sqsub = "⊏"; var sqsube = "⊑"; var sqsubset = "⊏"; var sqsubseteq = "⊑"; var sqsup = "⊐"; var sqsupe = "⊒"; var sqsupset = "⊐"; var sqsupseteq = "⊒"; var square = "□"; var Square = "□"; var SquareIntersection = "⊓"; var SquareSubset = "⊏"; var SquareSubsetEqual = "⊑"; var SquareSuperset = "⊐"; var SquareSupersetEqual = "⊒"; var SquareUnion = "⊔"; var squarf = "▪"; var squ = "□"; var squf = "▪"; var srarr = "→"; var Sscr = "𝒮"; var sscr = "𝓈"; var ssetmn = "∖"; var ssmile = "⌣"; var sstarf = "⋆"; var Star = "⋆"; var star = "☆"; var starf = "★"; var straightepsilon = "ϵ"; var straightphi = "ϕ"; var strns = "¯"; var sub = "⊂"; var Sub = "⋐"; var subdot = "⪽"; var subE = "⫅"; var sube = "⊆"; var subedot = "⫃"; var submult = "⫁"; var subnE = "⫋"; var subne = "⊊"; var subplus = "⪿"; var subrarr = "⥹"; var subset = "⊂"; var Subset = "⋐"; var subseteq = "⊆"; var subseteqq = "⫅"; var SubsetEqual = "⊆"; var subsetneq = "⊊"; var subsetneqq = "⫋"; var subsim = "⫇"; var subsub = "⫕"; var subsup = "⫓"; var succapprox = "⪸"; var succ = "≻"; var succcurlyeq = "≽"; var Succeeds = "≻"; var SucceedsEqual = "⪰"; var SucceedsSlantEqual = "≽"; var SucceedsTilde = "≿"; var succeq = "⪰"; var succnapprox = "⪺"; var succneqq = "⪶"; var succnsim = "⋩"; var succsim = "≿"; var SuchThat = "∋"; var sum = "∑"; var Sum = "∑"; var sung = "♪"; var sup1 = "¹"; var sup2 = "²"; var sup3 = "³"; var sup = "⊃"; var Sup = "⋑"; var supdot = "⪾"; var supdsub = "⫘"; var supE = "⫆"; var supe = "⊇"; var supedot = "⫄"; var Superset = "⊃"; var SupersetEqual = "⊇"; var suphsol = "⟉"; var suphsub = "⫗"; var suplarr = "⥻"; var supmult = "⫂"; var supnE = "⫌"; var supne = "⊋"; var supplus = "⫀"; var supset = "⊃"; var Supset = "⋑"; var supseteq = "⊇"; var supseteqq = "⫆"; var supsetneq = "⊋"; var supsetneqq = "⫌"; var supsim = "⫈"; var supsub = "⫔"; var supsup = "⫖"; var swarhk = "⤦"; var swarr = "↙"; var swArr = "⇙"; var swarrow = "↙"; var swnwar = "⤪"; var szlig = "ß"; var Tab = "\t"; var target = "⌖"; var Tau = "Τ"; var tau = "τ"; var tbrk = "⎴"; var Tcaron = "Ť"; var tcaron = "ť"; var Tcedil = "Ţ"; var tcedil = "ţ"; var Tcy = "Т"; var tcy = "т"; var tdot = "⃛"; var telrec = "⌕"; var Tfr = "𝔗"; var tfr = "𝔱"; var there4 = "∴"; var therefore = "∴"; var Therefore = "∴"; var Theta = "Θ"; var theta = "θ"; var thetasym = "ϑ"; var thetav = "ϑ"; var thickapprox = "≈"; var thicksim = "∼"; var ThickSpace = "  "; var ThinSpace = " "; var thinsp = " "; var thkap = "≈"; var thksim = "∼"; var THORN = "Þ"; var thorn = "þ"; var tilde = "˜"; var Tilde = "∼"; var TildeEqual = "≃"; var TildeFullEqual = "≅"; var TildeTilde = "≈"; var timesbar = "⨱"; var timesb = "⊠"; var times = "×"; var timesd = "⨰"; var tint = "∭"; var toea = "⤨"; var topbot = "⌶"; var topcir = "⫱"; var top = "⊤"; var Topf = "𝕋"; var topf = "𝕥"; var topfork = "⫚"; var tosa = "⤩"; var tprime = "‴"; var trade = "™"; var TRADE = "™"; var triangle = "▵"; var triangledown = "▿"; var triangleleft = "◃"; var trianglelefteq = "⊴"; var triangleq = "≜"; var triangleright = "▹"; var trianglerighteq = "⊵"; var tridot = "◬"; var trie = "≜"; var triminus = "⨺"; var TripleDot = "⃛"; var triplus = "⨹"; var trisb = "⧍"; var tritime = "⨻"; var trpezium = "⏢"; var Tscr = "𝒯"; var tscr = "𝓉"; var TScy = "Ц"; var tscy = "ц"; var TSHcy = "Ћ"; var tshcy = "ћ"; var Tstrok = "Ŧ"; var tstrok = "ŧ"; var twixt = "≬"; var twoheadleftarrow = "↞"; var twoheadrightarrow = "↠"; var Uacute = "Ú"; var uacute = "ú"; var uarr = "↑"; var Uarr = "↟"; var uArr = "⇑"; var Uarrocir = "⥉"; var Ubrcy = "Ў"; var ubrcy = "ў"; var Ubreve = "Ŭ"; var ubreve = "ŭ"; var Ucirc = "Û"; var ucirc = "û"; var Ucy = "У"; var ucy = "у"; var udarr = "⇅"; var Udblac = "Ű"; var udblac = "ű"; var udhar = "⥮"; var ufisht = "⥾"; var Ufr = "𝔘"; var ufr = "𝔲"; var Ugrave = "Ù"; var ugrave = "ù"; var uHar = "⥣"; var uharl = "↿"; var uharr = "↾"; var uhblk = "▀"; var ulcorn = "⌜"; var ulcorner = "⌜"; var ulcrop = "⌏"; var ultri = "◸"; var Umacr = "Ū"; var umacr = "ū"; var uml = "¨"; var UnderBar = "_"; var UnderBrace = "⏟"; var UnderBracket = "⎵"; var UnderParenthesis = "⏝"; var Union = "⋃"; var UnionPlus = "⊎"; var Uogon = "Ų"; var uogon = "ų"; var Uopf = "𝕌"; var uopf = "𝕦"; var UpArrowBar = "⤒"; var uparrow = "↑"; var UpArrow = "↑"; var Uparrow = "⇑"; var UpArrowDownArrow = "⇅"; var updownarrow = "↕"; var UpDownArrow = "↕"; var Updownarrow = "⇕"; var UpEquilibrium = "⥮"; var upharpoonleft = "↿"; var upharpoonright = "↾"; var uplus = "⊎"; var UpperLeftArrow = "↖"; var UpperRightArrow = "↗"; var upsi = "υ"; var Upsi = "ϒ"; var upsih = "ϒ"; var Upsilon = "Υ"; var upsilon = "υ"; var UpTeeArrow = "↥"; var UpTee = "⊥"; var upuparrows = "⇈"; var urcorn = "⌝"; var urcorner = "⌝"; var urcrop = "⌎"; var Uring = "Ů"; var uring = "ů"; var urtri = "◹"; var Uscr = "𝒰"; var uscr = "𝓊"; var utdot = "⋰"; var Utilde = "Ũ"; var utilde = "ũ"; var utri = "▵"; var utrif = "▴"; var uuarr = "⇈"; var Uuml = "Ü"; var uuml = "ü"; var uwangle = "⦧"; var vangrt = "⦜"; var varepsilon = "ϵ"; var varkappa = "ϰ"; var varnothing = "∅"; var varphi = "ϕ"; var varpi = "ϖ"; var varpropto = "∝"; var varr = "↕"; var vArr = "⇕"; var varrho = "ϱ"; var varsigma = "ς"; var varsubsetneq = "⊊︀"; var varsubsetneqq = "⫋︀"; var varsupsetneq = "⊋︀"; var varsupsetneqq = "⫌︀"; var vartheta = "ϑ"; var vartriangleleft = "⊲"; var vartriangleright = "⊳"; var vBar = "⫨"; var Vbar = "⫫"; var vBarv = "⫩"; var Vcy = "В"; var vcy = "в"; var vdash = "⊢"; var vDash = "⊨"; var Vdash = "⊩"; var VDash = "⊫"; var Vdashl = "⫦"; var veebar = "⊻"; var vee = "∨"; var Vee = "⋁"; var veeeq = "≚"; var vellip = "⋮"; var verbar = "|"; var Verbar = "‖"; var vert = "|"; var Vert = "‖"; var VerticalBar = "∣"; var VerticalLine = "|"; var VerticalSeparator = "❘"; var VerticalTilde = "≀"; var VeryThinSpace = " "; var Vfr = "𝔙"; var vfr = "𝔳"; var vltri = "⊲"; var vnsub = "⊂⃒"; var vnsup = "⊃⃒"; var Vopf = "𝕍"; var vopf = "𝕧"; var vprop = "∝"; var vrtri = "⊳"; var Vscr = "𝒱"; var vscr = "𝓋"; var vsubnE = "⫋︀"; var vsubne = "⊊︀"; var vsupnE = "⫌︀"; var vsupne = "⊋︀"; var Vvdash = "⊪"; var vzigzag = "⦚"; var Wcirc = "Ŵ"; var wcirc = "ŵ"; var wedbar = "⩟"; var wedge = "∧"; var Wedge = "⋀"; var wedgeq = "≙"; var weierp = "℘"; var Wfr = "𝔚"; var wfr = "𝔴"; var Wopf = "𝕎"; var wopf = "𝕨"; var wp = "℘"; var wr = "≀"; var wreath = "≀"; var Wscr = "𝒲"; var wscr = "𝓌"; var xcap = "⋂"; var xcirc = "◯"; var xcup = "⋃"; var xdtri = "▽"; var Xfr = "𝔛"; var xfr = "𝔵"; var xharr = "⟷"; var xhArr = "⟺"; var Xi = "Ξ"; var xi = "ξ"; var xlarr = "⟵"; var xlArr = "⟸"; var xmap = "⟼"; var xnis = "⋻"; var xodot = "⨀"; var Xopf = "𝕏"; var xopf = "𝕩"; var xoplus = "⨁"; var xotime = "⨂"; var xrarr = "⟶"; var xrArr = "⟹"; var Xscr = "𝒳"; var xscr = "𝓍"; var xsqcup = "⨆"; var xuplus = "⨄"; var xutri = "△"; var xvee = "⋁"; var xwedge = "⋀"; var Yacute = "Ý"; var yacute = "ý"; var YAcy = "Я"; var yacy = "я"; var Ycirc = "Ŷ"; var ycirc = "ŷ"; var Ycy = "Ы"; var ycy = "ы"; var yen = "¥"; var Yfr = "𝔜"; var yfr = "𝔶"; var YIcy = "Ї"; var yicy = "ї"; var Yopf = "𝕐"; var yopf = "𝕪"; var Yscr = "𝒴"; var yscr = "𝓎"; var YUcy = "Ю"; var yucy = "ю"; var yuml = "ÿ"; var Yuml = "Ÿ"; var Zacute = "Ź"; var zacute = "ź"; var Zcaron = "Ž"; var zcaron = "ž"; var Zcy = "З"; var zcy = "з"; var Zdot = "Ż"; var zdot = "ż"; var zeetrf = "ℨ"; var ZeroWidthSpace = "​"; var Zeta = "Ζ"; var zeta = "ζ"; var zfr = "𝔷"; var Zfr = "ℨ"; var ZHcy = "Ж"; var zhcy = "ж"; var zigrarr = "⇝"; var zopf = "𝕫"; var Zopf = "ℤ"; var Zscr = "𝒵"; var zscr = "𝓏"; var zwj = "‍"; var zwnj = "‌"; var entities = { Aacute: Aacute, aacute: aacute, Abreve: Abreve, abreve: abreve, ac: ac, acd: acd, acE: acE, Acirc: Acirc, acirc: acirc, acute: acute, Acy: Acy, acy: acy, AElig: AElig, aelig: aelig, af: af, Afr: Afr, afr: afr, Agrave: Agrave, agrave: agrave, alefsym: alefsym, aleph: aleph, Alpha: Alpha, alpha: alpha, Amacr: Amacr, amacr: amacr, amalg: amalg, amp: amp, AMP: AMP, andand: andand, And: And, and: and, andd: andd, andslope: andslope, andv: andv, ang: ang, ange: ange, angle: angle, angmsdaa: angmsdaa, angmsdab: angmsdab, angmsdac: angmsdac, angmsdad: angmsdad, angmsdae: angmsdae, angmsdaf: angmsdaf, angmsdag: angmsdag, angmsdah: angmsdah, angmsd: angmsd, angrt: angrt, angrtvb: angrtvb, angrtvbd: angrtvbd, angsph: angsph, angst: angst, angzarr: angzarr, Aogon: Aogon, aogon: aogon, Aopf: Aopf, aopf: aopf, apacir: apacir, ap: ap, apE: apE, ape: ape, apid: apid, apos: apos, ApplyFunction: ApplyFunction, approx: approx, approxeq: approxeq, Aring: Aring, aring: aring, Ascr: Ascr, ascr: ascr, Assign: Assign, ast: ast, asymp: asymp, asympeq: asympeq, Atilde: Atilde, atilde: atilde, Auml: Auml, auml: auml, awconint: awconint, awint: awint, backcong: backcong, backepsilon: backepsilon, backprime: backprime, backsim: backsim, backsimeq: backsimeq, Backslash: Backslash, Barv: Barv, barvee: barvee, barwed: barwed, Barwed: Barwed, barwedge: barwedge, bbrk: bbrk, bbrktbrk: bbrktbrk, bcong: bcong, Bcy: Bcy, bcy: bcy, bdquo: bdquo, becaus: becaus, because: because, Because: Because, bemptyv: bemptyv, bepsi: bepsi, bernou: bernou, Bernoullis: Bernoullis, Beta: Beta, beta: beta, beth: beth, between: between, Bfr: Bfr, bfr: bfr, bigcap: bigcap, bigcirc: bigcirc, bigcup: bigcup, bigodot: bigodot, bigoplus: bigoplus, bigotimes: bigotimes, bigsqcup: bigsqcup, bigstar: bigstar, bigtriangledown: bigtriangledown, bigtriangleup: bigtriangleup, biguplus: biguplus, bigvee: bigvee, bigwedge: bigwedge, bkarow: bkarow, blacklozenge: blacklozenge, blacksquare: blacksquare, blacktriangle: blacktriangle, blacktriangledown: blacktriangledown, blacktriangleleft: blacktriangleleft, blacktriangleright: blacktriangleright, blank: blank, blk12: blk12, blk14: blk14, blk34: blk34, block: block, bne: bne, bnequiv: bnequiv, bNot: bNot, bnot: bnot, Bopf: Bopf, bopf: bopf, bot: bot, bottom: bottom, bowtie: bowtie, boxbox: boxbox, boxdl: boxdl, boxdL: boxdL, boxDl: boxDl, boxDL: boxDL, boxdr: boxdr, boxdR: boxdR, boxDr: boxDr, boxDR: boxDR, boxh: boxh, boxH: boxH, boxhd: boxhd, boxHd: boxHd, boxhD: boxhD, boxHD: boxHD, boxhu: boxhu, boxHu: boxHu, boxhU: boxhU, boxHU: boxHU, boxminus: boxminus, boxplus: boxplus, boxtimes: boxtimes, boxul: boxul, boxuL: boxuL, boxUl: boxUl, boxUL: boxUL, boxur: boxur, boxuR: boxuR, boxUr: boxUr, boxUR: boxUR, boxv: boxv, boxV: boxV, boxvh: boxvh, boxvH: boxvH, boxVh: boxVh, boxVH: boxVH, boxvl: boxvl, boxvL: boxvL, boxVl: boxVl, boxVL: boxVL, boxvr: boxvr, boxvR: boxvR, boxVr: boxVr, boxVR: boxVR, bprime: bprime, breve: breve, Breve: Breve, brvbar: brvbar, bscr: bscr, Bscr: Bscr, bsemi: bsemi, bsim: bsim, bsime: bsime, bsolb: bsolb, bsol: bsol, bsolhsub: bsolhsub, bull: bull, bullet: bullet, bump: bump, bumpE: bumpE, bumpe: bumpe, Bumpeq: Bumpeq, bumpeq: bumpeq, Cacute: Cacute, cacute: cacute, capand: capand, capbrcup: capbrcup, capcap: capcap, cap: cap, Cap: Cap, capcup: capcup, capdot: capdot, CapitalDifferentialD: CapitalDifferentialD, caps: caps, caret: caret, caron: caron, Cayleys: Cayleys, ccaps: ccaps, Ccaron: Ccaron, ccaron: ccaron, Ccedil: Ccedil, ccedil: ccedil, Ccirc: Ccirc, ccirc: ccirc, Cconint: Cconint, ccups: ccups, ccupssm: ccupssm, Cdot: Cdot, cdot: cdot, cedil: cedil, Cedilla: Cedilla, cemptyv: cemptyv, cent: cent, centerdot: centerdot, CenterDot: CenterDot, cfr: cfr, Cfr: Cfr, CHcy: CHcy, chcy: chcy, check: check, checkmark: checkmark, Chi: Chi, chi: chi, circ: circ, circeq: circeq, circlearrowleft: circlearrowleft, circlearrowright: circlearrowright, circledast: circledast, circledcirc: circledcirc, circleddash: circleddash, CircleDot: CircleDot, circledR: circledR, circledS: circledS, CircleMinus: CircleMinus, CirclePlus: CirclePlus, CircleTimes: CircleTimes, cir: cir, cirE: cirE, cire: cire, cirfnint: cirfnint, cirmid: cirmid, cirscir: cirscir, ClockwiseContourIntegral: ClockwiseContourIntegral, CloseCurlyDoubleQuote: CloseCurlyDoubleQuote, CloseCurlyQuote: CloseCurlyQuote, clubs: clubs, clubsuit: clubsuit, colon: colon, Colon: Colon, Colone: Colone, colone: colone, coloneq: coloneq, comma: comma, commat: commat, comp: comp, compfn: compfn, complement: complement, complexes: complexes, cong: cong, congdot: congdot, Congruent: Congruent, conint: conint, Conint: Conint, ContourIntegral: ContourIntegral, copf: copf, Copf: Copf, coprod: coprod, Coproduct: Coproduct, copy: copy, COPY: COPY, copysr: copysr, CounterClockwiseContourIntegral: CounterClockwiseContourIntegral, crarr: crarr, cross: cross, Cross: Cross, Cscr: Cscr, cscr: cscr, csub: csub, csube: csube, csup: csup, csupe: csupe, ctdot: ctdot, cudarrl: cudarrl, cudarrr: cudarrr, cuepr: cuepr, cuesc: cuesc, cularr: cularr, cularrp: cularrp, cupbrcap: cupbrcap, cupcap: cupcap, CupCap: CupCap, cup: cup, Cup: Cup, cupcup: cupcup, cupdot: cupdot, cupor: cupor, cups: cups, curarr: curarr, curarrm: curarrm, curlyeqprec: curlyeqprec, curlyeqsucc: curlyeqsucc, curlyvee: curlyvee, curlywedge: curlywedge, curren: curren, curvearrowleft: curvearrowleft, curvearrowright: curvearrowright, cuvee: cuvee, cuwed: cuwed, cwconint: cwconint, cwint: cwint, cylcty: cylcty, dagger: dagger, Dagger: Dagger, daleth: daleth, darr: darr, Darr: Darr, dArr: dArr, dash: dash, Dashv: Dashv, dashv: dashv, dbkarow: dbkarow, dblac: dblac, Dcaron: Dcaron, dcaron: dcaron, Dcy: Dcy, dcy: dcy, ddagger: ddagger, ddarr: ddarr, DD: DD, dd: dd, DDotrahd: DDotrahd, ddotseq: ddotseq, deg: deg, Del: Del, Delta: Delta, delta: delta, demptyv: demptyv, dfisht: dfisht, Dfr: Dfr, dfr: dfr, dHar: dHar, dharl: dharl, dharr: dharr, DiacriticalAcute: DiacriticalAcute, DiacriticalDot: DiacriticalDot, DiacriticalDoubleAcute: DiacriticalDoubleAcute, DiacriticalGrave: DiacriticalGrave, DiacriticalTilde: DiacriticalTilde, diam: diam, diamond: diamond, Diamond: Diamond, diamondsuit: diamondsuit, diams: diams, die: die, DifferentialD: DifferentialD, digamma: digamma, disin: disin, div: div, divide: divide, divideontimes: divideontimes, divonx: divonx, DJcy: DJcy, djcy: djcy, dlcorn: dlcorn, dlcrop: dlcrop, dollar: dollar, Dopf: Dopf, dopf: dopf, Dot: Dot, dot: dot, DotDot: DotDot, doteq: doteq, doteqdot: doteqdot, DotEqual: DotEqual, dotminus: dotminus, dotplus: dotplus, dotsquare: dotsquare, doublebarwedge: doublebarwedge, DoubleContourIntegral: DoubleContourIntegral, DoubleDot: DoubleDot, DoubleDownArrow: DoubleDownArrow, DoubleLeftArrow: DoubleLeftArrow, DoubleLeftRightArrow: DoubleLeftRightArrow, DoubleLeftTee: DoubleLeftTee, DoubleLongLeftArrow: DoubleLongLeftArrow, DoubleLongLeftRightArrow: DoubleLongLeftRightArrow, DoubleLongRightArrow: DoubleLongRightArrow, DoubleRightArrow: DoubleRightArrow, DoubleRightTee: DoubleRightTee, DoubleUpArrow: DoubleUpArrow, DoubleUpDownArrow: DoubleUpDownArrow, DoubleVerticalBar: DoubleVerticalBar, DownArrowBar: DownArrowBar, downarrow: downarrow, DownArrow: DownArrow, Downarrow: Downarrow, DownArrowUpArrow: DownArrowUpArrow, DownBreve: DownBreve, downdownarrows: downdownarrows, downharpoonleft: downharpoonleft, downharpoonright: downharpoonright, DownLeftRightVector: DownLeftRightVector, DownLeftTeeVector: DownLeftTeeVector, DownLeftVectorBar: DownLeftVectorBar, DownLeftVector: DownLeftVector, DownRightTeeVector: DownRightTeeVector, DownRightVectorBar: DownRightVectorBar, DownRightVector: DownRightVector, DownTeeArrow: DownTeeArrow, DownTee: DownTee, drbkarow: drbkarow, drcorn: drcorn, drcrop: drcrop, Dscr: Dscr, dscr: dscr, DScy: DScy, dscy: dscy, dsol: dsol, Dstrok: Dstrok, dstrok: dstrok, dtdot: dtdot, dtri: dtri, dtrif: dtrif, duarr: duarr, duhar: duhar, dwangle: dwangle, DZcy: DZcy, dzcy: dzcy, dzigrarr: dzigrarr, Eacute: Eacute, eacute: eacute, easter: easter, Ecaron: Ecaron, ecaron: ecaron, Ecirc: Ecirc, ecirc: ecirc, ecir: ecir, ecolon: ecolon, Ecy: Ecy, ecy: ecy, eDDot: eDDot, Edot: Edot, edot: edot, eDot: eDot, ee: ee, efDot: efDot, Efr: Efr, efr: efr, eg: eg, Egrave: Egrave, egrave: egrave, egs: egs, egsdot: egsdot, el: el, Element: Element, elinters: elinters, ell: ell, els: els, elsdot: elsdot, Emacr: Emacr, emacr: emacr, empty: empty, emptyset: emptyset, EmptySmallSquare: EmptySmallSquare, emptyv: emptyv, EmptyVerySmallSquare: EmptyVerySmallSquare, emsp13: emsp13, emsp14: emsp14, emsp: emsp, ENG: ENG, eng: eng, ensp: ensp, Eogon: Eogon, eogon: eogon, Eopf: Eopf, eopf: eopf, epar: epar, eparsl: eparsl, eplus: eplus, epsi: epsi, Epsilon: Epsilon, epsilon: epsilon, epsiv: epsiv, eqcirc: eqcirc, eqcolon: eqcolon, eqsim: eqsim, eqslantgtr: eqslantgtr, eqslantless: eqslantless, Equal: Equal, equals: equals, EqualTilde: EqualTilde, equest: equest, Equilibrium: Equilibrium, equiv: equiv, equivDD: equivDD, eqvparsl: eqvparsl, erarr: erarr, erDot: erDot, escr: escr, Escr: Escr, esdot: esdot, Esim: Esim, esim: esim, Eta: Eta, eta: eta, ETH: ETH, eth: eth, Euml: Euml, euml: euml, euro: euro, excl: excl, exist: exist, Exists: Exists, expectation: expectation, exponentiale: exponentiale, ExponentialE: ExponentialE, fallingdotseq: fallingdotseq, Fcy: Fcy, fcy: fcy, female: female, ffilig: ffilig, fflig: fflig, ffllig: ffllig, Ffr: Ffr, ffr: ffr, filig: filig, FilledSmallSquare: FilledSmallSquare, FilledVerySmallSquare: FilledVerySmallSquare, fjlig: fjlig, flat: flat, fllig: fllig, fltns: fltns, fnof: fnof, Fopf: Fopf, fopf: fopf, forall: forall, ForAll: ForAll, fork: fork, forkv: forkv, Fouriertrf: Fouriertrf, fpartint: fpartint, frac12: frac12, frac13: frac13, frac14: frac14, frac15: frac15, frac16: frac16, frac18: frac18, frac23: frac23, frac25: frac25, frac34: frac34, frac35: frac35, frac38: frac38, frac45: frac45, frac56: frac56, frac58: frac58, frac78: frac78, frasl: frasl, frown: frown, fscr: fscr, Fscr: Fscr, gacute: gacute, Gamma: Gamma, gamma: gamma, Gammad: Gammad, gammad: gammad, gap: gap, Gbreve: Gbreve, gbreve: gbreve, Gcedil: Gcedil, Gcirc: Gcirc, gcirc: gcirc, Gcy: Gcy, gcy: gcy, Gdot: Gdot, gdot: gdot, ge: ge, gE: gE, gEl: gEl, gel: gel, geq: geq, geqq: geqq, geqslant: geqslant, gescc: gescc, ges: ges, gesdot: gesdot, gesdoto: gesdoto, gesdotol: gesdotol, gesl: gesl, gesles: gesles, Gfr: Gfr, gfr: gfr, gg: gg, Gg: Gg, ggg: ggg, gimel: gimel, GJcy: GJcy, gjcy: gjcy, gla: gla, gl: gl, glE: glE, glj: glj, gnap: gnap, gnapprox: gnapprox, gne: gne, gnE: gnE, gneq: gneq, gneqq: gneqq, gnsim: gnsim, Gopf: Gopf, gopf: gopf, grave: grave, GreaterEqual: GreaterEqual, GreaterEqualLess: GreaterEqualLess, GreaterFullEqual: GreaterFullEqual, GreaterGreater: GreaterGreater, GreaterLess: GreaterLess, GreaterSlantEqual: GreaterSlantEqual, GreaterTilde: GreaterTilde, Gscr: Gscr, gscr: gscr, gsim: gsim, gsime: gsime, gsiml: gsiml, gtcc: gtcc, gtcir: gtcir, gt: gt, GT: GT, Gt: Gt, gtdot: gtdot, gtlPar: gtlPar, gtquest: gtquest, gtrapprox: gtrapprox, gtrarr: gtrarr, gtrdot: gtrdot, gtreqless: gtreqless, gtreqqless: gtreqqless, gtrless: gtrless, gtrsim: gtrsim, gvertneqq: gvertneqq, gvnE: gvnE, Hacek: Hacek, hairsp: hairsp, half: half, hamilt: hamilt, HARDcy: HARDcy, hardcy: hardcy, harrcir: harrcir, harr: harr, hArr: hArr, harrw: harrw, Hat: Hat, hbar: hbar, Hcirc: Hcirc, hcirc: hcirc, hearts: hearts, heartsuit: heartsuit, hellip: hellip, hercon: hercon, hfr: hfr, Hfr: Hfr, HilbertSpace: HilbertSpace, hksearow: hksearow, hkswarow: hkswarow, hoarr: hoarr, homtht: homtht, hookleftarrow: hookleftarrow, hookrightarrow: hookrightarrow, hopf: hopf, Hopf: Hopf, horbar: horbar, HorizontalLine: HorizontalLine, hscr: hscr, Hscr: Hscr, hslash: hslash, Hstrok: Hstrok, hstrok: hstrok, HumpDownHump: HumpDownHump, HumpEqual: HumpEqual, hybull: hybull, hyphen: hyphen, Iacute: Iacute, iacute: iacute, ic: ic, Icirc: Icirc, icirc: icirc, Icy: Icy, icy: icy, Idot: Idot, IEcy: IEcy, iecy: iecy, iexcl: iexcl, iff: iff, ifr: ifr, Ifr: Ifr, Igrave: Igrave, igrave: igrave, ii: ii, iiiint: iiiint, iiint: iiint, iinfin: iinfin, iiota: iiota, IJlig: IJlig, ijlig: ijlig, Imacr: Imacr, imacr: imacr, image: image, ImaginaryI: ImaginaryI, imagline: imagline, imagpart: imagpart, imath: imath, Im: Im, imof: imof, imped: imped, Implies: Implies, incare: incare, "in": "∈", infin: infin, infintie: infintie, inodot: inodot, intcal: intcal, int: int, Int: Int, integers: integers, Integral: Integral, intercal: intercal, Intersection: Intersection, intlarhk: intlarhk, intprod: intprod, InvisibleComma: InvisibleComma, InvisibleTimes: InvisibleTimes, IOcy: IOcy, iocy: iocy, Iogon: Iogon, iogon: iogon, Iopf: Iopf, iopf: iopf, Iota: Iota, iota: iota, iprod: iprod, iquest: iquest, iscr: iscr, Iscr: Iscr, isin: isin, isindot: isindot, isinE: isinE, isins: isins, isinsv: isinsv, isinv: isinv, it: it, Itilde: Itilde, itilde: itilde, Iukcy: Iukcy, iukcy: iukcy, Iuml: Iuml, iuml: iuml, Jcirc: Jcirc, jcirc: jcirc, Jcy: Jcy, jcy: jcy, Jfr: Jfr, jfr: jfr, jmath: jmath, Jopf: Jopf, jopf: jopf, Jscr: Jscr, jscr: jscr, Jsercy: Jsercy, jsercy: jsercy, Jukcy: Jukcy, jukcy: jukcy, Kappa: Kappa, kappa: kappa, kappav: kappav, Kcedil: Kcedil, kcedil: kcedil, Kcy: Kcy, kcy: kcy, Kfr: Kfr, kfr: kfr, kgreen: kgreen, KHcy: KHcy, khcy: khcy, KJcy: KJcy, kjcy: kjcy, Kopf: Kopf, kopf: kopf, Kscr: Kscr, kscr: kscr, lAarr: lAarr, Lacute: Lacute, lacute: lacute, laemptyv: laemptyv, lagran: lagran, Lambda: Lambda, lambda: lambda, lang: lang, Lang: Lang, langd: langd, langle: langle, lap: lap, Laplacetrf: Laplacetrf, laquo: laquo, larrb: larrb, larrbfs: larrbfs, larr: larr, Larr: Larr, lArr: lArr, larrfs: larrfs, larrhk: larrhk, larrlp: larrlp, larrpl: larrpl, larrsim: larrsim, larrtl: larrtl, latail: latail, lAtail: lAtail, lat: lat, late: late, lates: lates, lbarr: lbarr, lBarr: lBarr, lbbrk: lbbrk, lbrace: lbrace, lbrack: lbrack, lbrke: lbrke, lbrksld: lbrksld, lbrkslu: lbrkslu, Lcaron: Lcaron, lcaron: lcaron, Lcedil: Lcedil, lcedil: lcedil, lceil: lceil, lcub: lcub, Lcy: Lcy, lcy: lcy, ldca: ldca, ldquo: ldquo, ldquor: ldquor, ldrdhar: ldrdhar, ldrushar: ldrushar, ldsh: ldsh, le: le, lE: lE, LeftAngleBracket: LeftAngleBracket, LeftArrowBar: LeftArrowBar, leftarrow: leftarrow, LeftArrow: LeftArrow, Leftarrow: Leftarrow, LeftArrowRightArrow: LeftArrowRightArrow, leftarrowtail: leftarrowtail, LeftCeiling: LeftCeiling, LeftDoubleBracket: LeftDoubleBracket, LeftDownTeeVector: LeftDownTeeVector, LeftDownVectorBar: LeftDownVectorBar, LeftDownVector: LeftDownVector, LeftFloor: LeftFloor, leftharpoondown: leftharpoondown, leftharpoonup: leftharpoonup, leftleftarrows: leftleftarrows, leftrightarrow: leftrightarrow, LeftRightArrow: LeftRightArrow, Leftrightarrow: Leftrightarrow, leftrightarrows: leftrightarrows, leftrightharpoons: leftrightharpoons, leftrightsquigarrow: leftrightsquigarrow, LeftRightVector: LeftRightVector, LeftTeeArrow: LeftTeeArrow, LeftTee: LeftTee, LeftTeeVector: LeftTeeVector, leftthreetimes: leftthreetimes, LeftTriangleBar: LeftTriangleBar, LeftTriangle: LeftTriangle, LeftTriangleEqual: LeftTriangleEqual, LeftUpDownVector: LeftUpDownVector, LeftUpTeeVector: LeftUpTeeVector, LeftUpVectorBar: LeftUpVectorBar, LeftUpVector: LeftUpVector, LeftVectorBar: LeftVectorBar, LeftVector: LeftVector, lEg: lEg, leg: leg, leq: leq, leqq: leqq, leqslant: leqslant, lescc: lescc, les: les, lesdot: lesdot, lesdoto: lesdoto, lesdotor: lesdotor, lesg: lesg, lesges: lesges, lessapprox: lessapprox, lessdot: lessdot, lesseqgtr: lesseqgtr, lesseqqgtr: lesseqqgtr, LessEqualGreater: LessEqualGreater, LessFullEqual: LessFullEqual, LessGreater: LessGreater, lessgtr: lessgtr, LessLess: LessLess, lesssim: lesssim, LessSlantEqual: LessSlantEqual, LessTilde: LessTilde, lfisht: lfisht, lfloor: lfloor, Lfr: Lfr, lfr: lfr, lg: lg, lgE: lgE, lHar: lHar, lhard: lhard, lharu: lharu, lharul: lharul, lhblk: lhblk, LJcy: LJcy, ljcy: ljcy, llarr: llarr, ll: ll, Ll: Ll, llcorner: llcorner, Lleftarrow: Lleftarrow, llhard: llhard, lltri: lltri, Lmidot: Lmidot, lmidot: lmidot, lmoustache: lmoustache, lmoust: lmoust, lnap: lnap, lnapprox: lnapprox, lne: lne, lnE: lnE, lneq: lneq, lneqq: lneqq, lnsim: lnsim, loang: loang, loarr: loarr, lobrk: lobrk, longleftarrow: longleftarrow, LongLeftArrow: LongLeftArrow, Longleftarrow: Longleftarrow, longleftrightarrow: longleftrightarrow, LongLeftRightArrow: LongLeftRightArrow, Longleftrightarrow: Longleftrightarrow, longmapsto: longmapsto, longrightarrow: longrightarrow, LongRightArrow: LongRightArrow, Longrightarrow: Longrightarrow, looparrowleft: looparrowleft, looparrowright: looparrowright, lopar: lopar, Lopf: Lopf, lopf: lopf, loplus: loplus, lotimes: lotimes, lowast: lowast, lowbar: lowbar, LowerLeftArrow: LowerLeftArrow, LowerRightArrow: LowerRightArrow, loz: loz, lozenge: lozenge, lozf: lozf, lpar: lpar, lparlt: lparlt, lrarr: lrarr, lrcorner: lrcorner, lrhar: lrhar, lrhard: lrhard, lrm: lrm, lrtri: lrtri, lsaquo: lsaquo, lscr: lscr, Lscr: Lscr, lsh: lsh, Lsh: Lsh, lsim: lsim, lsime: lsime, lsimg: lsimg, lsqb: lsqb, lsquo: lsquo, lsquor: lsquor, Lstrok: Lstrok, lstrok: lstrok, ltcc: ltcc, ltcir: ltcir, lt: lt, LT: LT, Lt: Lt, ltdot: ltdot, lthree: lthree, ltimes: ltimes, ltlarr: ltlarr, ltquest: ltquest, ltri: ltri, ltrie: ltrie, ltrif: ltrif, ltrPar: ltrPar, lurdshar: lurdshar, luruhar: luruhar, lvertneqq: lvertneqq, lvnE: lvnE, macr: macr, male: male, malt: malt, maltese: maltese, "Map": "⤅", map: map, mapsto: mapsto, mapstodown: mapstodown, mapstoleft: mapstoleft, mapstoup: mapstoup, marker: marker, mcomma: mcomma, Mcy: Mcy, mcy: mcy, mdash: mdash, mDDot: mDDot, measuredangle: measuredangle, MediumSpace: MediumSpace, Mellintrf: Mellintrf, Mfr: Mfr, mfr: mfr, mho: mho, micro: micro, midast: midast, midcir: midcir, mid: mid, middot: middot, minusb: minusb, minus: minus, minusd: minusd, minusdu: minusdu, MinusPlus: MinusPlus, mlcp: mlcp, mldr: mldr, mnplus: mnplus, models: models, Mopf: Mopf, mopf: mopf, mp: mp, mscr: mscr, Mscr: Mscr, mstpos: mstpos, Mu: Mu, mu: mu, multimap: multimap, mumap: mumap, nabla: nabla, Nacute: Nacute, nacute: nacute, nang: nang, nap: nap, napE: napE, napid: napid, napos: napos, napprox: napprox, natural: natural, naturals: naturals, natur: natur, nbsp: nbsp, nbump: nbump, nbumpe: nbumpe, ncap: ncap, Ncaron: Ncaron, ncaron: ncaron, Ncedil: Ncedil, ncedil: ncedil, ncong: ncong, ncongdot: ncongdot, ncup: ncup, Ncy: Ncy, ncy: ncy, ndash: ndash, nearhk: nearhk, nearr: nearr, neArr: neArr, nearrow: nearrow, ne: ne, nedot: nedot, NegativeMediumSpace: NegativeMediumSpace, NegativeThickSpace: NegativeThickSpace, NegativeThinSpace: NegativeThinSpace, NegativeVeryThinSpace: NegativeVeryThinSpace, nequiv: nequiv, nesear: nesear, nesim: nesim, NestedGreaterGreater: NestedGreaterGreater, NestedLessLess: NestedLessLess, NewLine: NewLine, nexist: nexist, nexists: nexists, Nfr: Nfr, nfr: nfr, ngE: ngE, nge: nge, ngeq: ngeq, ngeqq: ngeqq, ngeqslant: ngeqslant, nges: nges, nGg: nGg, ngsim: ngsim, nGt: nGt, ngt: ngt, ngtr: ngtr, nGtv: nGtv, nharr: nharr, nhArr: nhArr, nhpar: nhpar, ni: ni, nis: nis, nisd: nisd, niv: niv, NJcy: NJcy, njcy: njcy, nlarr: nlarr, nlArr: nlArr, nldr: nldr, nlE: nlE, nle: nle, nleftarrow: nleftarrow, nLeftarrow: nLeftarrow, nleftrightarrow: nleftrightarrow, nLeftrightarrow: nLeftrightarrow, nleq: nleq, nleqq: nleqq, nleqslant: nleqslant, nles: nles, nless: nless, nLl: nLl, nlsim: nlsim, nLt: nLt, nlt: nlt, nltri: nltri, nltrie: nltrie, nLtv: nLtv, nmid: nmid, NoBreak: NoBreak, NonBreakingSpace: NonBreakingSpace, nopf: nopf, Nopf: Nopf, Not: Not, not: not, NotCongruent: NotCongruent, NotCupCap: NotCupCap, NotDoubleVerticalBar: NotDoubleVerticalBar, NotElement: NotElement, NotEqual: NotEqual, NotEqualTilde: NotEqualTilde, NotExists: NotExists, NotGreater: NotGreater, NotGreaterEqual: NotGreaterEqual, NotGreaterFullEqual: NotGreaterFullEqual, NotGreaterGreater: NotGreaterGreater, NotGreaterLess: NotGreaterLess, NotGreaterSlantEqual: NotGreaterSlantEqual, NotGreaterTilde: NotGreaterTilde, NotHumpDownHump: NotHumpDownHump, NotHumpEqual: NotHumpEqual, notin: notin, notindot: notindot, notinE: notinE, notinva: notinva, notinvb: notinvb, notinvc: notinvc, NotLeftTriangleBar: NotLeftTriangleBar, NotLeftTriangle: NotLeftTriangle, NotLeftTriangleEqual: NotLeftTriangleEqual, NotLess: NotLess, NotLessEqual: NotLessEqual, NotLessGreater: NotLessGreater, NotLessLess: NotLessLess, NotLessSlantEqual: NotLessSlantEqual, NotLessTilde: NotLessTilde, NotNestedGreaterGreater: NotNestedGreaterGreater, NotNestedLessLess: NotNestedLessLess, notni: notni, notniva: notniva, notnivb: notnivb, notnivc: notnivc, NotPrecedes: NotPrecedes, NotPrecedesEqual: NotPrecedesEqual, NotPrecedesSlantEqual: NotPrecedesSlantEqual, NotReverseElement: NotReverseElement, NotRightTriangleBar: NotRightTriangleBar, NotRightTriangle: NotRightTriangle, NotRightTriangleEqual: NotRightTriangleEqual, NotSquareSubset: NotSquareSubset, NotSquareSubsetEqual: NotSquareSubsetEqual, NotSquareSuperset: NotSquareSuperset, NotSquareSupersetEqual: NotSquareSupersetEqual, NotSubset: NotSubset, NotSubsetEqual: NotSubsetEqual, NotSucceeds: NotSucceeds, NotSucceedsEqual: NotSucceedsEqual, NotSucceedsSlantEqual: NotSucceedsSlantEqual, NotSucceedsTilde: NotSucceedsTilde, NotSuperset: NotSuperset, NotSupersetEqual: NotSupersetEqual, NotTilde: NotTilde, NotTildeEqual: NotTildeEqual, NotTildeFullEqual: NotTildeFullEqual, NotTildeTilde: NotTildeTilde, NotVerticalBar: NotVerticalBar, nparallel: nparallel, npar: npar, nparsl: nparsl, npart: npart, npolint: npolint, npr: npr, nprcue: nprcue, nprec: nprec, npreceq: npreceq, npre: npre, nrarrc: nrarrc, nrarr: nrarr, nrArr: nrArr, nrarrw: nrarrw, nrightarrow: nrightarrow, nRightarrow: nRightarrow, nrtri: nrtri, nrtrie: nrtrie, nsc: nsc, nsccue: nsccue, nsce: nsce, Nscr: Nscr, nscr: nscr, nshortmid: nshortmid, nshortparallel: nshortparallel, nsim: nsim, nsime: nsime, nsimeq: nsimeq, nsmid: nsmid, nspar: nspar, nsqsube: nsqsube, nsqsupe: nsqsupe, nsub: nsub, nsubE: nsubE, nsube: nsube, nsubset: nsubset, nsubseteq: nsubseteq, nsubseteqq: nsubseteqq, nsucc: nsucc, nsucceq: nsucceq, nsup: nsup, nsupE: nsupE, nsupe: nsupe, nsupset: nsupset, nsupseteq: nsupseteq, nsupseteqq: nsupseteqq, ntgl: ntgl, Ntilde: Ntilde, ntilde: ntilde, ntlg: ntlg, ntriangleleft: ntriangleleft, ntrianglelefteq: ntrianglelefteq, ntriangleright: ntriangleright, ntrianglerighteq: ntrianglerighteq, Nu: Nu, nu: nu, num: num, numero: numero, numsp: numsp, nvap: nvap, nvdash: nvdash, nvDash: nvDash, nVdash: nVdash, nVDash: nVDash, nvge: nvge, nvgt: nvgt, nvHarr: nvHarr, nvinfin: nvinfin, nvlArr: nvlArr, nvle: nvle, nvlt: nvlt, nvltrie: nvltrie, nvrArr: nvrArr, nvrtrie: nvrtrie, nvsim: nvsim, nwarhk: nwarhk, nwarr: nwarr, nwArr: nwArr, nwarrow: nwarrow, nwnear: nwnear, Oacute: Oacute, oacute: oacute, oast: oast, Ocirc: Ocirc, ocirc: ocirc, ocir: ocir, Ocy: Ocy, ocy: ocy, odash: odash, Odblac: Odblac, odblac: odblac, odiv: odiv, odot: odot, odsold: odsold, OElig: OElig, oelig: oelig, ofcir: ofcir, Ofr: Ofr, ofr: ofr, ogon: ogon, Ograve: Ograve, ograve: ograve, ogt: ogt, ohbar: ohbar, ohm: ohm, oint: oint, olarr: olarr, olcir: olcir, olcross: olcross, oline: oline, olt: olt, Omacr: Omacr, omacr: omacr, Omega: Omega, omega: omega, Omicron: Omicron, omicron: omicron, omid: omid, ominus: ominus, Oopf: Oopf, oopf: oopf, opar: opar, OpenCurlyDoubleQuote: OpenCurlyDoubleQuote, OpenCurlyQuote: OpenCurlyQuote, operp: operp, oplus: oplus, orarr: orarr, Or: Or, or: or, ord: ord, order: order, orderof: orderof, ordf: ordf, ordm: ordm, origof: origof, oror: oror, orslope: orslope, orv: orv, oS: oS, Oscr: Oscr, oscr: oscr, Oslash: Oslash, oslash: oslash, osol: osol, Otilde: Otilde, otilde: otilde, otimesas: otimesas, Otimes: Otimes, otimes: otimes, Ouml: Ouml, ouml: ouml, ovbar: ovbar, OverBar: OverBar, OverBrace: OverBrace, OverBracket: OverBracket, OverParenthesis: OverParenthesis, para: para, parallel: parallel, par: par, parsim: parsim, parsl: parsl, part: part, PartialD: PartialD, Pcy: Pcy, pcy: pcy, percnt: percnt, period: period, permil: permil, perp: perp, pertenk: pertenk, Pfr: Pfr, pfr: pfr, Phi: Phi, phi: phi, phiv: phiv, phmmat: phmmat, phone: phone, Pi: Pi, pi: pi, pitchfork: pitchfork, piv: piv, planck: planck, planckh: planckh, plankv: plankv, plusacir: plusacir, plusb: plusb, pluscir: pluscir, plus: plus, plusdo: plusdo, plusdu: plusdu, pluse: pluse, PlusMinus: PlusMinus, plusmn: plusmn, plussim: plussim, plustwo: plustwo, pm: pm, Poincareplane: Poincareplane, pointint: pointint, popf: popf, Popf: Popf, pound: pound, prap: prap, Pr: Pr, pr: pr, prcue: prcue, precapprox: precapprox, prec: prec, preccurlyeq: preccurlyeq, Precedes: Precedes, PrecedesEqual: PrecedesEqual, PrecedesSlantEqual: PrecedesSlantEqual, PrecedesTilde: PrecedesTilde, preceq: preceq, precnapprox: precnapprox, precneqq: precneqq, precnsim: precnsim, pre: pre, prE: prE, precsim: precsim, prime: prime, Prime: Prime, primes: primes, prnap: prnap, prnE: prnE, prnsim: prnsim, prod: prod, Product: Product, profalar: profalar, profline: profline, profsurf: profsurf, prop: prop, Proportional: Proportional, Proportion: Proportion, propto: propto, prsim: prsim, prurel: prurel, Pscr: Pscr, pscr: pscr, Psi: Psi, psi: psi, puncsp: puncsp, Qfr: Qfr, qfr: qfr, qint: qint, qopf: qopf, Qopf: Qopf, qprime: qprime, Qscr: Qscr, qscr: qscr, quaternions: quaternions, quatint: quatint, quest: quest, questeq: questeq, quot: quot, QUOT: QUOT, rAarr: rAarr, race: race, Racute: Racute, racute: racute, radic: radic, raemptyv: raemptyv, rang: rang, Rang: Rang, rangd: rangd, range: range, rangle: rangle, raquo: raquo, rarrap: rarrap, rarrb: rarrb, rarrbfs: rarrbfs, rarrc: rarrc, rarr: rarr, Rarr: Rarr, rArr: rArr, rarrfs: rarrfs, rarrhk: rarrhk, rarrlp: rarrlp, rarrpl: rarrpl, rarrsim: rarrsim, Rarrtl: Rarrtl, rarrtl: rarrtl, rarrw: rarrw, ratail: ratail, rAtail: rAtail, ratio: ratio, rationals: rationals, rbarr: rbarr, rBarr: rBarr, RBarr: RBarr, rbbrk: rbbrk, rbrace: rbrace, rbrack: rbrack, rbrke: rbrke, rbrksld: rbrksld, rbrkslu: rbrkslu, Rcaron: Rcaron, rcaron: rcaron, Rcedil: Rcedil, rcedil: rcedil, rceil: rceil, rcub: rcub, Rcy: Rcy, rcy: rcy, rdca: rdca, rdldhar: rdldhar, rdquo: rdquo, rdquor: rdquor, rdsh: rdsh, real: real, realine: realine, realpart: realpart, reals: reals, Re: Re, rect: rect, reg: reg, REG: REG, ReverseElement: ReverseElement, ReverseEquilibrium: ReverseEquilibrium, ReverseUpEquilibrium: ReverseUpEquilibrium, rfisht: rfisht, rfloor: rfloor, rfr: rfr, Rfr: Rfr, rHar: rHar, rhard: rhard, rharu: rharu, rharul: rharul, Rho: Rho, rho: rho, rhov: rhov, RightAngleBracket: RightAngleBracket, RightArrowBar: RightArrowBar, rightarrow: rightarrow, RightArrow: RightArrow, Rightarrow: Rightarrow, RightArrowLeftArrow: RightArrowLeftArrow, rightarrowtail: rightarrowtail, RightCeiling: RightCeiling, RightDoubleBracket: RightDoubleBracket, RightDownTeeVector: RightDownTeeVector, RightDownVectorBar: RightDownVectorBar, RightDownVector: RightDownVector, RightFloor: RightFloor, rightharpoondown: rightharpoondown, rightharpoonup: rightharpoonup, rightleftarrows: rightleftarrows, rightleftharpoons: rightleftharpoons, rightrightarrows: rightrightarrows, rightsquigarrow: rightsquigarrow, RightTeeArrow: RightTeeArrow, RightTee: RightTee, RightTeeVector: RightTeeVector, rightthreetimes: rightthreetimes, RightTriangleBar: RightTriangleBar, RightTriangle: RightTriangle, RightTriangleEqual: RightTriangleEqual, RightUpDownVector: RightUpDownVector, RightUpTeeVector: RightUpTeeVector, RightUpVectorBar: RightUpVectorBar, RightUpVector: RightUpVector, RightVectorBar: RightVectorBar, RightVector: RightVector, ring: ring, risingdotseq: risingdotseq, rlarr: rlarr, rlhar: rlhar, rlm: rlm, rmoustache: rmoustache, rmoust: rmoust, rnmid: rnmid, roang: roang, roarr: roarr, robrk: robrk, ropar: ropar, ropf: ropf, Ropf: Ropf, roplus: roplus, rotimes: rotimes, RoundImplies: RoundImplies, rpar: rpar, rpargt: rpargt, rppolint: rppolint, rrarr: rrarr, Rrightarrow: Rrightarrow, rsaquo: rsaquo, rscr: rscr, Rscr: Rscr, rsh: rsh, Rsh: Rsh, rsqb: rsqb, rsquo: rsquo, rsquor: rsquor, rthree: rthree, rtimes: rtimes, rtri: rtri, rtrie: rtrie, rtrif: rtrif, rtriltri: rtriltri, RuleDelayed: RuleDelayed, ruluhar: ruluhar, rx: rx, Sacute: Sacute, sacute: sacute, sbquo: sbquo, scap: scap, Scaron: Scaron, scaron: scaron, Sc: Sc, sc: sc, sccue: sccue, sce: sce, scE: scE, Scedil: Scedil, scedil: scedil, Scirc: Scirc, scirc: scirc, scnap: scnap, scnE: scnE, scnsim: scnsim, scpolint: scpolint, scsim: scsim, Scy: Scy, scy: scy, sdotb: sdotb, sdot: sdot, sdote: sdote, searhk: searhk, searr: searr, seArr: seArr, searrow: searrow, sect: sect, semi: semi, seswar: seswar, setminus: setminus, setmn: setmn, sext: sext, Sfr: Sfr, sfr: sfr, sfrown: sfrown, sharp: sharp, SHCHcy: SHCHcy, shchcy: shchcy, SHcy: SHcy, shcy: shcy, ShortDownArrow: ShortDownArrow, ShortLeftArrow: ShortLeftArrow, shortmid: shortmid, shortparallel: shortparallel, ShortRightArrow: ShortRightArrow, ShortUpArrow: ShortUpArrow, shy: shy, Sigma: Sigma, sigma: sigma, sigmaf: sigmaf, sigmav: sigmav, sim: sim, simdot: simdot, sime: sime, simeq: simeq, simg: simg, simgE: simgE, siml: siml, simlE: simlE, simne: simne, simplus: simplus, simrarr: simrarr, slarr: slarr, SmallCircle: SmallCircle, smallsetminus: smallsetminus, smashp: smashp, smeparsl: smeparsl, smid: smid, smile: smile, smt: smt, smte: smte, smtes: smtes, SOFTcy: SOFTcy, softcy: softcy, solbar: solbar, solb: solb, sol: sol, Sopf: Sopf, sopf: sopf, spades: spades, spadesuit: spadesuit, spar: spar, sqcap: sqcap, sqcaps: sqcaps, sqcup: sqcup, sqcups: sqcups, Sqrt: Sqrt, sqsub: sqsub, sqsube: sqsube, sqsubset: sqsubset, sqsubseteq: sqsubseteq, sqsup: sqsup, sqsupe: sqsupe, sqsupset: sqsupset, sqsupseteq: sqsupseteq, square: square, Square: Square, SquareIntersection: SquareIntersection, SquareSubset: SquareSubset, SquareSubsetEqual: SquareSubsetEqual, SquareSuperset: SquareSuperset, SquareSupersetEqual: SquareSupersetEqual, SquareUnion: SquareUnion, squarf: squarf, squ: squ, squf: squf, srarr: srarr, Sscr: Sscr, sscr: sscr, ssetmn: ssetmn, ssmile: ssmile, sstarf: sstarf, Star: Star, star: star, starf: starf, straightepsilon: straightepsilon, straightphi: straightphi, strns: strns, sub: sub, Sub: Sub, subdot: subdot, subE: subE, sube: sube, subedot: subedot, submult: submult, subnE: subnE, subne: subne, subplus: subplus, subrarr: subrarr, subset: subset, Subset: Subset, subseteq: subseteq, subseteqq: subseteqq, SubsetEqual: SubsetEqual, subsetneq: subsetneq, subsetneqq: subsetneqq, subsim: subsim, subsub: subsub, subsup: subsup, succapprox: succapprox, succ: succ, succcurlyeq: succcurlyeq, Succeeds: Succeeds, SucceedsEqual: SucceedsEqual, SucceedsSlantEqual: SucceedsSlantEqual, SucceedsTilde: SucceedsTilde, succeq: succeq, succnapprox: succnapprox, succneqq: succneqq, succnsim: succnsim, succsim: succsim, SuchThat: SuchThat, sum: sum, Sum: Sum, sung: sung, sup1: sup1, sup2: sup2, sup3: sup3, sup: sup, Sup: Sup, supdot: supdot, supdsub: supdsub, supE: supE, supe: supe, supedot: supedot, Superset: Superset, SupersetEqual: SupersetEqual, suphsol: suphsol, suphsub: suphsub, suplarr: suplarr, supmult: supmult, supnE: supnE, supne: supne, supplus: supplus, supset: supset, Supset: Supset, supseteq: supseteq, supseteqq: supseteqq, supsetneq: supsetneq, supsetneqq: supsetneqq, supsim: supsim, supsub: supsub, supsup: supsup, swarhk: swarhk, swarr: swarr, swArr: swArr, swarrow: swarrow, swnwar: swnwar, szlig: szlig, Tab: Tab, target: target, Tau: Tau, tau: tau, tbrk: tbrk, Tcaron: Tcaron, tcaron: tcaron, Tcedil: Tcedil, tcedil: tcedil, Tcy: Tcy, tcy: tcy, tdot: tdot, telrec: telrec, Tfr: Tfr, tfr: tfr, there4: there4, therefore: therefore, Therefore: Therefore, Theta: Theta, theta: theta, thetasym: thetasym, thetav: thetav, thickapprox: thickapprox, thicksim: thicksim, ThickSpace: ThickSpace, ThinSpace: ThinSpace, thinsp: thinsp, thkap: thkap, thksim: thksim, THORN: THORN, thorn: thorn, tilde: tilde, Tilde: Tilde, TildeEqual: TildeEqual, TildeFullEqual: TildeFullEqual, TildeTilde: TildeTilde, timesbar: timesbar, timesb: timesb, times: times, timesd: timesd, tint: tint, toea: toea, topbot: topbot, topcir: topcir, top: top, Topf: Topf, topf: topf, topfork: topfork, tosa: tosa, tprime: tprime, trade: trade, TRADE: TRADE, triangle: triangle, triangledown: triangledown, triangleleft: triangleleft, trianglelefteq: trianglelefteq, triangleq: triangleq, triangleright: triangleright, trianglerighteq: trianglerighteq, tridot: tridot, trie: trie, triminus: triminus, TripleDot: TripleDot, triplus: triplus, trisb: trisb, tritime: tritime, trpezium: trpezium, Tscr: Tscr, tscr: tscr, TScy: TScy, tscy: tscy, TSHcy: TSHcy, tshcy: tshcy, Tstrok: Tstrok, tstrok: tstrok, twixt: twixt, twoheadleftarrow: twoheadleftarrow, twoheadrightarrow: twoheadrightarrow, Uacute: Uacute, uacute: uacute, uarr: uarr, Uarr: Uarr, uArr: uArr, Uarrocir: Uarrocir, Ubrcy: Ubrcy, ubrcy: ubrcy, Ubreve: Ubreve, ubreve: ubreve, Ucirc: Ucirc, ucirc: ucirc, Ucy: Ucy, ucy: ucy, udarr: udarr, Udblac: Udblac, udblac: udblac, udhar: udhar, ufisht: ufisht, Ufr: Ufr, ufr: ufr, Ugrave: Ugrave, ugrave: ugrave, uHar: uHar, uharl: uharl, uharr: uharr, uhblk: uhblk, ulcorn: ulcorn, ulcorner: ulcorner, ulcrop: ulcrop, ultri: ultri, Umacr: Umacr, umacr: umacr, uml: uml, UnderBar: UnderBar, UnderBrace: UnderBrace, UnderBracket: UnderBracket, UnderParenthesis: UnderParenthesis, Union: Union, UnionPlus: UnionPlus, Uogon: Uogon, uogon: uogon, Uopf: Uopf, uopf: uopf, UpArrowBar: UpArrowBar, uparrow: uparrow, UpArrow: UpArrow, Uparrow: Uparrow, UpArrowDownArrow: UpArrowDownArrow, updownarrow: updownarrow, UpDownArrow: UpDownArrow, Updownarrow: Updownarrow, UpEquilibrium: UpEquilibrium, upharpoonleft: upharpoonleft, upharpoonright: upharpoonright, uplus: uplus, UpperLeftArrow: UpperLeftArrow, UpperRightArrow: UpperRightArrow, upsi: upsi, Upsi: Upsi, upsih: upsih, Upsilon: Upsilon, upsilon: upsilon, UpTeeArrow: UpTeeArrow, UpTee: UpTee, upuparrows: upuparrows, urcorn: urcorn, urcorner: urcorner, urcrop: urcrop, Uring: Uring, uring: uring, urtri: urtri, Uscr: Uscr, uscr: uscr, utdot: utdot, Utilde: Utilde, utilde: utilde, utri: utri, utrif: utrif, uuarr: uuarr, Uuml: Uuml, uuml: uuml, uwangle: uwangle, vangrt: vangrt, varepsilon: varepsilon, varkappa: varkappa, varnothing: varnothing, varphi: varphi, varpi: varpi, varpropto: varpropto, varr: varr, vArr: vArr, varrho: varrho, varsigma: varsigma, varsubsetneq: varsubsetneq, varsubsetneqq: varsubsetneqq, varsupsetneq: varsupsetneq, varsupsetneqq: varsupsetneqq, vartheta: vartheta, vartriangleleft: vartriangleleft, vartriangleright: vartriangleright, vBar: vBar, Vbar: Vbar, vBarv: vBarv, Vcy: Vcy, vcy: vcy, vdash: vdash, vDash: vDash, Vdash: Vdash, VDash: VDash, Vdashl: Vdashl, veebar: veebar, vee: vee, Vee: Vee, veeeq: veeeq, vellip: vellip, verbar: verbar, Verbar: Verbar, vert: vert, Vert: Vert, VerticalBar: VerticalBar, VerticalLine: VerticalLine, VerticalSeparator: VerticalSeparator, VerticalTilde: VerticalTilde, VeryThinSpace: VeryThinSpace, Vfr: Vfr, vfr: vfr, vltri: vltri, vnsub: vnsub, vnsup: vnsup, Vopf: Vopf, vopf: vopf, vprop: vprop, vrtri: vrtri, Vscr: Vscr, vscr: vscr, vsubnE: vsubnE, vsubne: vsubne, vsupnE: vsupnE, vsupne: vsupne, Vvdash: Vvdash, vzigzag: vzigzag, Wcirc: Wcirc, wcirc: wcirc, wedbar: wedbar, wedge: wedge, Wedge: Wedge, wedgeq: wedgeq, weierp: weierp, Wfr: Wfr, wfr: wfr, Wopf: Wopf, wopf: wopf, wp: wp, wr: wr, wreath: wreath, Wscr: Wscr, wscr: wscr, xcap: xcap, xcirc: xcirc, xcup: xcup, xdtri: xdtri, Xfr: Xfr, xfr: xfr, xharr: xharr, xhArr: xhArr, Xi: Xi, xi: xi, xlarr: xlarr, xlArr: xlArr, xmap: xmap, xnis: xnis, xodot: xodot, Xopf: Xopf, xopf: xopf, xoplus: xoplus, xotime: xotime, xrarr: xrarr, xrArr: xrArr, Xscr: Xscr, xscr: xscr, xsqcup: xsqcup, xuplus: xuplus, xutri: xutri, xvee: xvee, xwedge: xwedge, Yacute: Yacute, yacute: yacute, YAcy: YAcy, yacy: yacy, Ycirc: Ycirc, ycirc: ycirc, Ycy: Ycy, ycy: ycy, yen: yen, Yfr: Yfr, yfr: yfr, YIcy: YIcy, yicy: yicy, Yopf: Yopf, yopf: yopf, Yscr: Yscr, yscr: yscr, YUcy: YUcy, yucy: yucy, yuml: yuml, Yuml: Yuml, Zacute: Zacute, zacute: zacute, Zcaron: Zcaron, zcaron: zcaron, Zcy: Zcy, zcy: zcy, Zdot: Zdot, zdot: zdot, zeetrf: zeetrf, ZeroWidthSpace: ZeroWidthSpace, Zeta: Zeta, zeta: zeta, zfr: zfr, Zfr: Zfr, ZHcy: ZHcy, zhcy: zhcy, zigrarr: zigrarr, zopf: zopf, Zopf: Zopf, Zscr: Zscr, zscr: zscr, zwj: zwj, zwnj: zwnj }; var entities$1 = /*#__PURE__*/Object.freeze({ __proto__: null, Aacute: Aacute, aacute: aacute, Abreve: Abreve, abreve: abreve, ac: ac, acd: acd, acE: acE, Acirc: Acirc, acirc: acirc, acute: acute, Acy: Acy, acy: acy, AElig: AElig, aelig: aelig, af: af, Afr: Afr, afr: afr, Agrave: Agrave, agrave: agrave, alefsym: alefsym, aleph: aleph, Alpha: Alpha, alpha: alpha, Amacr: Amacr, amacr: amacr, amalg: amalg, amp: amp, AMP: AMP, andand: andand, And: And, and: and, andd: andd, andslope: andslope, andv: andv, ang: ang, ange: ange, angle: angle, angmsdaa: angmsdaa, angmsdab: angmsdab, angmsdac: angmsdac, angmsdad: angmsdad, angmsdae: angmsdae, angmsdaf: angmsdaf, angmsdag: angmsdag, angmsdah: angmsdah, angmsd: angmsd, angrt: angrt, angrtvb: angrtvb, angrtvbd: angrtvbd, angsph: angsph, angst: angst, angzarr: angzarr, Aogon: Aogon, aogon: aogon, Aopf: Aopf, aopf: aopf, apacir: apacir, ap: ap, apE: apE, ape: ape, apid: apid, apos: apos, ApplyFunction: ApplyFunction, approx: approx, approxeq: approxeq, Aring: Aring, aring: aring, Ascr: Ascr, ascr: ascr, Assign: Assign, ast: ast, asymp: asymp, asympeq: asympeq, Atilde: Atilde, atilde: atilde, Auml: Auml, auml: auml, awconint: awconint, awint: awint, backcong: backcong, backepsilon: backepsilon, backprime: backprime, backsim: backsim, backsimeq: backsimeq, Backslash: Backslash, Barv: Barv, barvee: barvee, barwed: barwed, Barwed: Barwed, barwedge: barwedge, bbrk: bbrk, bbrktbrk: bbrktbrk, bcong: bcong, Bcy: Bcy, bcy: bcy, bdquo: bdquo, becaus: becaus, because: because, Because: Because, bemptyv: bemptyv, bepsi: bepsi, bernou: bernou, Bernoullis: Bernoullis, Beta: Beta, beta: beta, beth: beth, between: between, Bfr: Bfr, bfr: bfr, bigcap: bigcap, bigcirc: bigcirc, bigcup: bigcup, bigodot: bigodot, bigoplus: bigoplus, bigotimes: bigotimes, bigsqcup: bigsqcup, bigstar: bigstar, bigtriangledown: bigtriangledown, bigtriangleup: bigtriangleup, biguplus: biguplus, bigvee: bigvee, bigwedge: bigwedge, bkarow: bkarow, blacklozenge: blacklozenge, blacksquare: blacksquare, blacktriangle: blacktriangle, blacktriangledown: blacktriangledown, blacktriangleleft: blacktriangleleft, blacktriangleright: blacktriangleright, blank: blank, blk12: blk12, blk14: blk14, blk34: blk34, block: block, bne: bne, bnequiv: bnequiv, bNot: bNot, bnot: bnot, Bopf: Bopf, bopf: bopf, bot: bot, bottom: bottom, bowtie: bowtie, boxbox: boxbox, boxdl: boxdl, boxdL: boxdL, boxDl: boxDl, boxDL: boxDL, boxdr: boxdr, boxdR: boxdR, boxDr: boxDr, boxDR: boxDR, boxh: boxh, boxH: boxH, boxhd: boxhd, boxHd: boxHd, boxhD: boxhD, boxHD: boxHD, boxhu: boxhu, boxHu: boxHu, boxhU: boxhU, boxHU: boxHU, boxminus: boxminus, boxplus: boxplus, boxtimes: boxtimes, boxul: boxul, boxuL: boxuL, boxUl: boxUl, boxUL: boxUL, boxur: boxur, boxuR: boxuR, boxUr: boxUr, boxUR: boxUR, boxv: boxv, boxV: boxV, boxvh: boxvh, boxvH: boxvH, boxVh: boxVh, boxVH: boxVH, boxvl: boxvl, boxvL: boxvL, boxVl: boxVl, boxVL: boxVL, boxvr: boxvr, boxvR: boxvR, boxVr: boxVr, boxVR: boxVR, bprime: bprime, breve: breve, Breve: Breve, brvbar: brvbar, bscr: bscr, Bscr: Bscr, bsemi: bsemi, bsim: bsim, bsime: bsime, bsolb: bsolb, bsol: bsol, bsolhsub: bsolhsub, bull: bull, bullet: bullet, bump: bump, bumpE: bumpE, bumpe: bumpe, Bumpeq: Bumpeq, bumpeq: bumpeq, Cacute: Cacute, cacute: cacute, capand: capand, capbrcup: capbrcup, capcap: capcap, cap: cap, Cap: Cap, capcup: capcup, capdot: capdot, CapitalDifferentialD: CapitalDifferentialD, caps: caps, caret: caret, caron: caron, Cayleys: Cayleys, ccaps: ccaps, Ccaron: Ccaron, ccaron: ccaron, Ccedil: Ccedil, ccedil: ccedil, Ccirc: Ccirc, ccirc: ccirc, Cconint: Cconint, ccups: ccups, ccupssm: ccupssm, Cdot: Cdot, cdot: cdot, cedil: cedil, Cedilla: Cedilla, cemptyv: cemptyv, cent: cent, centerdot: centerdot, CenterDot: CenterDot, cfr: cfr, Cfr: Cfr, CHcy: CHcy, chcy: chcy, check: check, checkmark: checkmark, Chi: Chi, chi: chi, circ: circ, circeq: circeq, circlearrowleft: circlearrowleft, circlearrowright: circlearrowright, circledast: circledast, circledcirc: circledcirc, circleddash: circleddash, CircleDot: CircleDot, circledR: circledR, circledS: circledS, CircleMinus: CircleMinus, CirclePlus: CirclePlus, CircleTimes: CircleTimes, cir: cir, cirE: cirE, cire: cire, cirfnint: cirfnint, cirmid: cirmid, cirscir: cirscir, ClockwiseContourIntegral: ClockwiseContourIntegral, CloseCurlyDoubleQuote: CloseCurlyDoubleQuote, CloseCurlyQuote: CloseCurlyQuote, clubs: clubs, clubsuit: clubsuit, colon: colon, Colon: Colon, Colone: Colone, colone: colone, coloneq: coloneq, comma: comma, commat: commat, comp: comp, compfn: compfn, complement: complement, complexes: complexes, cong: cong, congdot: congdot, Congruent: Congruent, conint: conint, Conint: Conint, ContourIntegral: ContourIntegral, copf: copf, Copf: Copf, coprod: coprod, Coproduct: Coproduct, copy: copy, COPY: COPY, copysr: copysr, CounterClockwiseContourIntegral: CounterClockwiseContourIntegral, crarr: crarr, cross: cross, Cross: Cross, Cscr: Cscr, cscr: cscr, csub: csub, csube: csube, csup: csup, csupe: csupe, ctdot: ctdot, cudarrl: cudarrl, cudarrr: cudarrr, cuepr: cuepr, cuesc: cuesc, cularr: cularr, cularrp: cularrp, cupbrcap: cupbrcap, cupcap: cupcap, CupCap: CupCap, cup: cup, Cup: Cup, cupcup: cupcup, cupdot: cupdot, cupor: cupor, cups: cups, curarr: curarr, curarrm: curarrm, curlyeqprec: curlyeqprec, curlyeqsucc: curlyeqsucc, curlyvee: curlyvee, curlywedge: curlywedge, curren: curren, curvearrowleft: curvearrowleft, curvearrowright: curvearrowright, cuvee: cuvee, cuwed: cuwed, cwconint: cwconint, cwint: cwint, cylcty: cylcty, dagger: dagger, Dagger: Dagger, daleth: daleth, darr: darr, Darr: Darr, dArr: dArr, dash: dash, Dashv: Dashv, dashv: dashv, dbkarow: dbkarow, dblac: dblac, Dcaron: Dcaron, dcaron: dcaron, Dcy: Dcy, dcy: dcy, ddagger: ddagger, ddarr: ddarr, DD: DD, dd: dd, DDotrahd: DDotrahd, ddotseq: ddotseq, deg: deg, Del: Del, Delta: Delta, delta: delta, demptyv: demptyv, dfisht: dfisht, Dfr: Dfr, dfr: dfr, dHar: dHar, dharl: dharl, dharr: dharr, DiacriticalAcute: DiacriticalAcute, DiacriticalDot: DiacriticalDot, DiacriticalDoubleAcute: DiacriticalDoubleAcute, DiacriticalGrave: DiacriticalGrave, DiacriticalTilde: DiacriticalTilde, diam: diam, diamond: diamond, Diamond: Diamond, diamondsuit: diamondsuit, diams: diams, die: die, DifferentialD: DifferentialD, digamma: digamma, disin: disin, div: div, divide: divide, divideontimes: divideontimes, divonx: divonx, DJcy: DJcy, djcy: djcy, dlcorn: dlcorn, dlcrop: dlcrop, dollar: dollar, Dopf: Dopf, dopf: dopf, Dot: Dot, dot: dot, DotDot: DotDot, doteq: doteq, doteqdot: doteqdot, DotEqual: DotEqual, dotminus: dotminus, dotplus: dotplus, dotsquare: dotsquare, doublebarwedge: doublebarwedge, DoubleContourIntegral: DoubleContourIntegral, DoubleDot: DoubleDot, DoubleDownArrow: DoubleDownArrow, DoubleLeftArrow: DoubleLeftArrow, DoubleLeftRightArrow: DoubleLeftRightArrow, DoubleLeftTee: DoubleLeftTee, DoubleLongLeftArrow: DoubleLongLeftArrow, DoubleLongLeftRightArrow: DoubleLongLeftRightArrow, DoubleLongRightArrow: DoubleLongRightArrow, DoubleRightArrow: DoubleRightArrow, DoubleRightTee: DoubleRightTee, DoubleUpArrow: DoubleUpArrow, DoubleUpDownArrow: DoubleUpDownArrow, DoubleVerticalBar: DoubleVerticalBar, DownArrowBar: DownArrowBar, downarrow: downarrow, DownArrow: DownArrow, Downarrow: Downarrow, DownArrowUpArrow: DownArrowUpArrow, DownBreve: DownBreve, downdownarrows: downdownarrows, downharpoonleft: downharpoonleft, downharpoonright: downharpoonright, DownLeftRightVector: DownLeftRightVector, DownLeftTeeVector: DownLeftTeeVector, DownLeftVectorBar: DownLeftVectorBar, DownLeftVector: DownLeftVector, DownRightTeeVector: DownRightTeeVector, DownRightVectorBar: DownRightVectorBar, DownRightVector: DownRightVector, DownTeeArrow: DownTeeArrow, DownTee: DownTee, drbkarow: drbkarow, drcorn: drcorn, drcrop: drcrop, Dscr: Dscr, dscr: dscr, DScy: DScy, dscy: dscy, dsol: dsol, Dstrok: Dstrok, dstrok: dstrok, dtdot: dtdot, dtri: dtri, dtrif: dtrif, duarr: duarr, duhar: duhar, dwangle: dwangle, DZcy: DZcy, dzcy: dzcy, dzigrarr: dzigrarr, Eacute: Eacute, eacute: eacute, easter: easter, Ecaron: Ecaron, ecaron: ecaron, Ecirc: Ecirc, ecirc: ecirc, ecir: ecir, ecolon: ecolon, Ecy: Ecy, ecy: ecy, eDDot: eDDot, Edot: Edot, edot: edot, eDot: eDot, ee: ee, efDot: efDot, Efr: Efr, efr: efr, eg: eg, Egrave: Egrave, egrave: egrave, egs: egs, egsdot: egsdot, el: el, Element: Element, elinters: elinters, ell: ell, els: els, elsdot: elsdot, Emacr: Emacr, emacr: emacr, empty: empty, emptyset: emptyset, EmptySmallSquare: EmptySmallSquare, emptyv: emptyv, EmptyVerySmallSquare: EmptyVerySmallSquare, emsp13: emsp13, emsp14: emsp14, emsp: emsp, ENG: ENG, eng: eng, ensp: ensp, Eogon: Eogon, eogon: eogon, Eopf: Eopf, eopf: eopf, epar: epar, eparsl: eparsl, eplus: eplus, epsi: epsi, Epsilon: Epsilon, epsilon: epsilon, epsiv: epsiv, eqcirc: eqcirc, eqcolon: eqcolon, eqsim: eqsim, eqslantgtr: eqslantgtr, eqslantless: eqslantless, Equal: Equal, equals: equals, EqualTilde: EqualTilde, equest: equest, Equilibrium: Equilibrium, equiv: equiv, equivDD: equivDD, eqvparsl: eqvparsl, erarr: erarr, erDot: erDot, escr: escr, Escr: Escr, esdot: esdot, Esim: Esim, esim: esim, Eta: Eta, eta: eta, ETH: ETH, eth: eth, Euml: Euml, euml: euml, euro: euro, excl: excl, exist: exist, Exists: Exists, expectation: expectation, exponentiale: exponentiale, ExponentialE: ExponentialE, fallingdotseq: fallingdotseq, Fcy: Fcy, fcy: fcy, female: female, ffilig: ffilig, fflig: fflig, ffllig: ffllig, Ffr: Ffr, ffr: ffr, filig: filig, FilledSmallSquare: FilledSmallSquare, FilledVerySmallSquare: FilledVerySmallSquare, fjlig: fjlig, flat: flat, fllig: fllig, fltns: fltns, fnof: fnof, Fopf: Fopf, fopf: fopf, forall: forall, ForAll: ForAll, fork: fork, forkv: forkv, Fouriertrf: Fouriertrf, fpartint: fpartint, frac12: frac12, frac13: frac13, frac14: frac14, frac15: frac15, frac16: frac16, frac18: frac18, frac23: frac23, frac25: frac25, frac34: frac34, frac35: frac35, frac38: frac38, frac45: frac45, frac56: frac56, frac58: frac58, frac78: frac78, frasl: frasl, frown: frown, fscr: fscr, Fscr: Fscr, gacute: gacute, Gamma: Gamma, gamma: gamma, Gammad: Gammad, gammad: gammad, gap: gap, Gbreve: Gbreve, gbreve: gbreve, Gcedil: Gcedil, Gcirc: Gcirc, gcirc: gcirc, Gcy: Gcy, gcy: gcy, Gdot: Gdot, gdot: gdot, ge: ge, gE: gE, gEl: gEl, gel: gel, geq: geq, geqq: geqq, geqslant: geqslant, gescc: gescc, ges: ges, gesdot: gesdot, gesdoto: gesdoto, gesdotol: gesdotol, gesl: gesl, gesles: gesles, Gfr: Gfr, gfr: gfr, gg: gg, Gg: Gg, ggg: ggg, gimel: gimel, GJcy: GJcy, gjcy: gjcy, gla: gla, gl: gl, glE: glE, glj: glj, gnap: gnap, gnapprox: gnapprox, gne: gne, gnE: gnE, gneq: gneq, gneqq: gneqq, gnsim: gnsim, Gopf: Gopf, gopf: gopf, grave: grave, GreaterEqual: GreaterEqual, GreaterEqualLess: GreaterEqualLess, GreaterFullEqual: GreaterFullEqual, GreaterGreater: GreaterGreater, GreaterLess: GreaterLess, GreaterSlantEqual: GreaterSlantEqual, GreaterTilde: GreaterTilde, Gscr: Gscr, gscr: gscr, gsim: gsim, gsime: gsime, gsiml: gsiml, gtcc: gtcc, gtcir: gtcir, gt: gt, GT: GT, Gt: Gt, gtdot: gtdot, gtlPar: gtlPar, gtquest: gtquest, gtrapprox: gtrapprox, gtrarr: gtrarr, gtrdot: gtrdot, gtreqless: gtreqless, gtreqqless: gtreqqless, gtrless: gtrless, gtrsim: gtrsim, gvertneqq: gvertneqq, gvnE: gvnE, Hacek: Hacek, hairsp: hairsp, half: half, hamilt: hamilt, HARDcy: HARDcy, hardcy: hardcy, harrcir: harrcir, harr: harr, hArr: hArr, harrw: harrw, Hat: Hat, hbar: hbar, Hcirc: Hcirc, hcirc: hcirc, hearts: hearts, heartsuit: heartsuit, hellip: hellip, hercon: hercon, hfr: hfr, Hfr: Hfr, HilbertSpace: HilbertSpace, hksearow: hksearow, hkswarow: hkswarow, hoarr: hoarr, homtht: homtht, hookleftarrow: hookleftarrow, hookrightarrow: hookrightarrow, hopf: hopf, Hopf: Hopf, horbar: horbar, HorizontalLine: HorizontalLine, hscr: hscr, Hscr: Hscr, hslash: hslash, Hstrok: Hstrok, hstrok: hstrok, HumpDownHump: HumpDownHump, HumpEqual: HumpEqual, hybull: hybull, hyphen: hyphen, Iacute: Iacute, iacute: iacute, ic: ic, Icirc: Icirc, icirc: icirc, Icy: Icy, icy: icy, Idot: Idot, IEcy: IEcy, iecy: iecy, iexcl: iexcl, iff: iff, ifr: ifr, Ifr: Ifr, Igrave: Igrave, igrave: igrave, ii: ii, iiiint: iiiint, iiint: iiint, iinfin: iinfin, iiota: iiota, IJlig: IJlig, ijlig: ijlig, Imacr: Imacr, imacr: imacr, image: image, ImaginaryI: ImaginaryI, imagline: imagline, imagpart: imagpart, imath: imath, Im: Im, imof: imof, imped: imped, Implies: Implies, incare: incare, infin: infin, infintie: infintie, inodot: inodot, intcal: intcal, int: int, Int: Int, integers: integers, Integral: Integral, intercal: intercal, Intersection: Intersection, intlarhk: intlarhk, intprod: intprod, InvisibleComma: InvisibleComma, InvisibleTimes: InvisibleTimes, IOcy: IOcy, iocy: iocy, Iogon: Iogon, iogon: iogon, Iopf: Iopf, iopf: iopf, Iota: Iota, iota: iota, iprod: iprod, iquest: iquest, iscr: iscr, Iscr: Iscr, isin: isin, isindot: isindot, isinE: isinE, isins: isins, isinsv: isinsv, isinv: isinv, it: it, Itilde: Itilde, itilde: itilde, Iukcy: Iukcy, iukcy: iukcy, Iuml: Iuml, iuml: iuml, Jcirc: Jcirc, jcirc: jcirc, Jcy: Jcy, jcy: jcy, Jfr: Jfr, jfr: jfr, jmath: jmath, Jopf: Jopf, jopf: jopf, Jscr: Jscr, jscr: jscr, Jsercy: Jsercy, jsercy: jsercy, Jukcy: Jukcy, jukcy: jukcy, Kappa: Kappa, kappa: kappa, kappav: kappav, Kcedil: Kcedil, kcedil: kcedil, Kcy: Kcy, kcy: kcy, Kfr: Kfr, kfr: kfr, kgreen: kgreen, KHcy: KHcy, khcy: khcy, KJcy: KJcy, kjcy: kjcy, Kopf: Kopf, kopf: kopf, Kscr: Kscr, kscr: kscr, lAarr: lAarr, Lacute: Lacute, lacute: lacute, laemptyv: laemptyv, lagran: lagran, Lambda: Lambda, lambda: lambda, lang: lang, Lang: Lang, langd: langd, langle: langle, lap: lap, Laplacetrf: Laplacetrf, laquo: laquo, larrb: larrb, larrbfs: larrbfs, larr: larr, Larr: Larr, lArr: lArr, larrfs: larrfs, larrhk: larrhk, larrlp: larrlp, larrpl: larrpl, larrsim: larrsim, larrtl: larrtl, latail: latail, lAtail: lAtail, lat: lat, late: late, lates: lates, lbarr: lbarr, lBarr: lBarr, lbbrk: lbbrk, lbrace: lbrace, lbrack: lbrack, lbrke: lbrke, lbrksld: lbrksld, lbrkslu: lbrkslu, Lcaron: Lcaron, lcaron: lcaron, Lcedil: Lcedil, lcedil: lcedil, lceil: lceil, lcub: lcub, Lcy: Lcy, lcy: lcy, ldca: ldca, ldquo: ldquo, ldquor: ldquor, ldrdhar: ldrdhar, ldrushar: ldrushar, ldsh: ldsh, le: le, lE: lE, LeftAngleBracket: LeftAngleBracket, LeftArrowBar: LeftArrowBar, leftarrow: leftarrow, LeftArrow: LeftArrow, Leftarrow: Leftarrow, LeftArrowRightArrow: LeftArrowRightArrow, leftarrowtail: leftarrowtail, LeftCeiling: LeftCeiling, LeftDoubleBracket: LeftDoubleBracket, LeftDownTeeVector: LeftDownTeeVector, LeftDownVectorBar: LeftDownVectorBar, LeftDownVector: LeftDownVector, LeftFloor: LeftFloor, leftharpoondown: leftharpoondown, leftharpoonup: leftharpoonup, leftleftarrows: leftleftarrows, leftrightarrow: leftrightarrow, LeftRightArrow: LeftRightArrow, Leftrightarrow: Leftrightarrow, leftrightarrows: leftrightarrows, leftrightharpoons: leftrightharpoons, leftrightsquigarrow: leftrightsquigarrow, LeftRightVector: LeftRightVector, LeftTeeArrow: LeftTeeArrow, LeftTee: LeftTee, LeftTeeVector: LeftTeeVector, leftthreetimes: leftthreetimes, LeftTriangleBar: LeftTriangleBar, LeftTriangle: LeftTriangle, LeftTriangleEqual: LeftTriangleEqual, LeftUpDownVector: LeftUpDownVector, LeftUpTeeVector: LeftUpTeeVector, LeftUpVectorBar: LeftUpVectorBar, LeftUpVector: LeftUpVector, LeftVectorBar: LeftVectorBar, LeftVector: LeftVector, lEg: lEg, leg: leg, leq: leq, leqq: leqq, leqslant: leqslant, lescc: lescc, les: les, lesdot: lesdot, lesdoto: lesdoto, lesdotor: lesdotor, lesg: lesg, lesges: lesges, lessapprox: lessapprox, lessdot: lessdot, lesseqgtr: lesseqgtr, lesseqqgtr: lesseqqgtr, LessEqualGreater: LessEqualGreater, LessFullEqual: LessFullEqual, LessGreater: LessGreater, lessgtr: lessgtr, LessLess: LessLess, lesssim: lesssim, LessSlantEqual: LessSlantEqual, LessTilde: LessTilde, lfisht: lfisht, lfloor: lfloor, Lfr: Lfr, lfr: lfr, lg: lg, lgE: lgE, lHar: lHar, lhard: lhard, lharu: lharu, lharul: lharul, lhblk: lhblk, LJcy: LJcy, ljcy: ljcy, llarr: llarr, ll: ll, Ll: Ll, llcorner: llcorner, Lleftarrow: Lleftarrow, llhard: llhard, lltri: lltri, Lmidot: Lmidot, lmidot: lmidot, lmoustache: lmoustache, lmoust: lmoust, lnap: lnap, lnapprox: lnapprox, lne: lne, lnE: lnE, lneq: lneq, lneqq: lneqq, lnsim: lnsim, loang: loang, loarr: loarr, lobrk: lobrk, longleftarrow: longleftarrow, LongLeftArrow: LongLeftArrow, Longleftarrow: Longleftarrow, longleftrightarrow: longleftrightarrow, LongLeftRightArrow: LongLeftRightArrow, Longleftrightarrow: Longleftrightarrow, longmapsto: longmapsto, longrightarrow: longrightarrow, LongRightArrow: LongRightArrow, Longrightarrow: Longrightarrow, looparrowleft: looparrowleft, looparrowright: looparrowright, lopar: lopar, Lopf: Lopf, lopf: lopf, loplus: loplus, lotimes: lotimes, lowast: lowast, lowbar: lowbar, LowerLeftArrow: LowerLeftArrow, LowerRightArrow: LowerRightArrow, loz: loz, lozenge: lozenge, lozf: lozf, lpar: lpar, lparlt: lparlt, lrarr: lrarr, lrcorner: lrcorner, lrhar: lrhar, lrhard: lrhard, lrm: lrm, lrtri: lrtri, lsaquo: lsaquo, lscr: lscr, Lscr: Lscr, lsh: lsh, Lsh: Lsh, lsim: lsim, lsime: lsime, lsimg: lsimg, lsqb: lsqb, lsquo: lsquo, lsquor: lsquor, Lstrok: Lstrok, lstrok: lstrok, ltcc: ltcc, ltcir: ltcir, lt: lt, LT: LT, Lt: Lt, ltdot: ltdot, lthree: lthree, ltimes: ltimes, ltlarr: ltlarr, ltquest: ltquest, ltri: ltri, ltrie: ltrie, ltrif: ltrif, ltrPar: ltrPar, lurdshar: lurdshar, luruhar: luruhar, lvertneqq: lvertneqq, lvnE: lvnE, macr: macr, male: male, malt: malt, maltese: maltese, map: map, mapsto: mapsto, mapstodown: mapstodown, mapstoleft: mapstoleft, mapstoup: mapstoup, marker: marker, mcomma: mcomma, Mcy: Mcy, mcy: mcy, mdash: mdash, mDDot: mDDot, measuredangle: measuredangle, MediumSpace: MediumSpace, Mellintrf: Mellintrf, Mfr: Mfr, mfr: mfr, mho: mho, micro: micro, midast: midast, midcir: midcir, mid: mid, middot: middot, minusb: minusb, minus: minus, minusd: minusd, minusdu: minusdu, MinusPlus: MinusPlus, mlcp: mlcp, mldr: mldr, mnplus: mnplus, models: models, Mopf: Mopf, mopf: mopf, mp: mp, mscr: mscr, Mscr: Mscr, mstpos: mstpos, Mu: Mu, mu: mu, multimap: multimap, mumap: mumap, nabla: nabla, Nacute: Nacute, nacute: nacute, nang: nang, nap: nap, napE: napE, napid: napid, napos: napos, napprox: napprox, natural: natural, naturals: naturals, natur: natur, nbsp: nbsp, nbump: nbump, nbumpe: nbumpe, ncap: ncap, Ncaron: Ncaron, ncaron: ncaron, Ncedil: Ncedil, ncedil: ncedil, ncong: ncong, ncongdot: ncongdot, ncup: ncup, Ncy: Ncy, ncy: ncy, ndash: ndash, nearhk: nearhk, nearr: nearr, neArr: neArr, nearrow: nearrow, ne: ne, nedot: nedot, NegativeMediumSpace: NegativeMediumSpace, NegativeThickSpace: NegativeThickSpace, NegativeThinSpace: NegativeThinSpace, NegativeVeryThinSpace: NegativeVeryThinSpace, nequiv: nequiv, nesear: nesear, nesim: nesim, NestedGreaterGreater: NestedGreaterGreater, NestedLessLess: NestedLessLess, NewLine: NewLine, nexist: nexist, nexists: nexists, Nfr: Nfr, nfr: nfr, ngE: ngE, nge: nge, ngeq: ngeq, ngeqq: ngeqq, ngeqslant: ngeqslant, nges: nges, nGg: nGg, ngsim: ngsim, nGt: nGt, ngt: ngt, ngtr: ngtr, nGtv: nGtv, nharr: nharr, nhArr: nhArr, nhpar: nhpar, ni: ni, nis: nis, nisd: nisd, niv: niv, NJcy: NJcy, njcy: njcy, nlarr: nlarr, nlArr: nlArr, nldr: nldr, nlE: nlE, nle: nle, nleftarrow: nleftarrow, nLeftarrow: nLeftarrow, nleftrightarrow: nleftrightarrow, nLeftrightarrow: nLeftrightarrow, nleq: nleq, nleqq: nleqq, nleqslant: nleqslant, nles: nles, nless: nless, nLl: nLl, nlsim: nlsim, nLt: nLt, nlt: nlt, nltri: nltri, nltrie: nltrie, nLtv: nLtv, nmid: nmid, NoBreak: NoBreak, NonBreakingSpace: NonBreakingSpace, nopf: nopf, Nopf: Nopf, Not: Not, not: not, NotCongruent: NotCongruent, NotCupCap: NotCupCap, NotDoubleVerticalBar: NotDoubleVerticalBar, NotElement: NotElement, NotEqual: NotEqual, NotEqualTilde: NotEqualTilde, NotExists: NotExists, NotGreater: NotGreater, NotGreaterEqual: NotGreaterEqual, NotGreaterFullEqual: NotGreaterFullEqual, NotGreaterGreater: NotGreaterGreater, NotGreaterLess: NotGreaterLess, NotGreaterSlantEqual: NotGreaterSlantEqual, NotGreaterTilde: NotGreaterTilde, NotHumpDownHump: NotHumpDownHump, NotHumpEqual: NotHumpEqual, notin: notin, notindot: notindot, notinE: notinE, notinva: notinva, notinvb: notinvb, notinvc: notinvc, NotLeftTriangleBar: NotLeftTriangleBar, NotLeftTriangle: NotLeftTriangle, NotLeftTriangleEqual: NotLeftTriangleEqual, NotLess: NotLess, NotLessEqual: NotLessEqual, NotLessGreater: NotLessGreater, NotLessLess: NotLessLess, NotLessSlantEqual: NotLessSlantEqual, NotLessTilde: NotLessTilde, NotNestedGreaterGreater: NotNestedGreaterGreater, NotNestedLessLess: NotNestedLessLess, notni: notni, notniva: notniva, notnivb: notnivb, notnivc: notnivc, NotPrecedes: NotPrecedes, NotPrecedesEqual: NotPrecedesEqual, NotPrecedesSlantEqual: NotPrecedesSlantEqual, NotReverseElement: NotReverseElement, NotRightTriangleBar: NotRightTriangleBar, NotRightTriangle: NotRightTriangle, NotRightTriangleEqual: NotRightTriangleEqual, NotSquareSubset: NotSquareSubset, NotSquareSubsetEqual: NotSquareSubsetEqual, NotSquareSuperset: NotSquareSuperset, NotSquareSupersetEqual: NotSquareSupersetEqual, NotSubset: NotSubset, NotSubsetEqual: NotSubsetEqual, NotSucceeds: NotSucceeds, NotSucceedsEqual: NotSucceedsEqual, NotSucceedsSlantEqual: NotSucceedsSlantEqual, NotSucceedsTilde: NotSucceedsTilde, NotSuperset: NotSuperset, NotSupersetEqual: NotSupersetEqual, NotTilde: NotTilde, NotTildeEqual: NotTildeEqual, NotTildeFullEqual: NotTildeFullEqual, NotTildeTilde: NotTildeTilde, NotVerticalBar: NotVerticalBar, nparallel: nparallel, npar: npar, nparsl: nparsl, npart: npart, npolint: npolint, npr: npr, nprcue: nprcue, nprec: nprec, npreceq: npreceq, npre: npre, nrarrc: nrarrc, nrarr: nrarr, nrArr: nrArr, nrarrw: nrarrw, nrightarrow: nrightarrow, nRightarrow: nRightarrow, nrtri: nrtri, nrtrie: nrtrie, nsc: nsc, nsccue: nsccue, nsce: nsce, Nscr: Nscr, nscr: nscr, nshortmid: nshortmid, nshortparallel: nshortparallel, nsim: nsim, nsime: nsime, nsimeq: nsimeq, nsmid: nsmid, nspar: nspar, nsqsube: nsqsube, nsqsupe: nsqsupe, nsub: nsub, nsubE: nsubE, nsube: nsube, nsubset: nsubset, nsubseteq: nsubseteq, nsubseteqq: nsubseteqq, nsucc: nsucc, nsucceq: nsucceq, nsup: nsup, nsupE: nsupE, nsupe: nsupe, nsupset: nsupset, nsupseteq: nsupseteq, nsupseteqq: nsupseteqq, ntgl: ntgl, Ntilde: Ntilde, ntilde: ntilde, ntlg: ntlg, ntriangleleft: ntriangleleft, ntrianglelefteq: ntrianglelefteq, ntriangleright: ntriangleright, ntrianglerighteq: ntrianglerighteq, Nu: Nu, nu: nu, num: num, numero: numero, numsp: numsp, nvap: nvap, nvdash: nvdash, nvDash: nvDash, nVdash: nVdash, nVDash: nVDash, nvge: nvge, nvgt: nvgt, nvHarr: nvHarr, nvinfin: nvinfin, nvlArr: nvlArr, nvle: nvle, nvlt: nvlt, nvltrie: nvltrie, nvrArr: nvrArr, nvrtrie: nvrtrie, nvsim: nvsim, nwarhk: nwarhk, nwarr: nwarr, nwArr: nwArr, nwarrow: nwarrow, nwnear: nwnear, Oacute: Oacute, oacute: oacute, oast: oast, Ocirc: Ocirc, ocirc: ocirc, ocir: ocir, Ocy: Ocy, ocy: ocy, odash: odash, Odblac: Odblac, odblac: odblac, odiv: odiv, odot: odot, odsold: odsold, OElig: OElig, oelig: oelig, ofcir: ofcir, Ofr: Ofr, ofr: ofr, ogon: ogon, Ograve: Ograve, ograve: ograve, ogt: ogt, ohbar: ohbar, ohm: ohm, oint: oint, olarr: olarr, olcir: olcir, olcross: olcross, oline: oline, olt: olt, Omacr: Omacr, omacr: omacr, Omega: Omega, omega: omega, Omicron: Omicron, omicron: omicron, omid: omid, ominus: ominus, Oopf: Oopf, oopf: oopf, opar: opar, OpenCurlyDoubleQuote: OpenCurlyDoubleQuote, OpenCurlyQuote: OpenCurlyQuote, operp: operp, oplus: oplus, orarr: orarr, Or: Or, or: or, ord: ord, order: order, orderof: orderof, ordf: ordf, ordm: ordm, origof: origof, oror: oror, orslope: orslope, orv: orv, oS: oS, Oscr: Oscr, oscr: oscr, Oslash: Oslash, oslash: oslash, osol: osol, Otilde: Otilde, otilde: otilde, otimesas: otimesas, Otimes: Otimes, otimes: otimes, Ouml: Ouml, ouml: ouml, ovbar: ovbar, OverBar: OverBar, OverBrace: OverBrace, OverBracket: OverBracket, OverParenthesis: OverParenthesis, para: para, parallel: parallel, par: par, parsim: parsim, parsl: parsl, part: part, PartialD: PartialD, Pcy: Pcy, pcy: pcy, percnt: percnt, period: period, permil: permil, perp: perp, pertenk: pertenk, Pfr: Pfr, pfr: pfr, Phi: Phi, phi: phi, phiv: phiv, phmmat: phmmat, phone: phone, Pi: Pi, pi: pi, pitchfork: pitchfork, piv: piv, planck: planck, planckh: planckh, plankv: plankv, plusacir: plusacir, plusb: plusb, pluscir: pluscir, plus: plus, plusdo: plusdo, plusdu: plusdu, pluse: pluse, PlusMinus: PlusMinus, plusmn: plusmn, plussim: plussim, plustwo: plustwo, pm: pm, Poincareplane: Poincareplane, pointint: pointint, popf: popf, Popf: Popf, pound: pound, prap: prap, Pr: Pr, pr: pr, prcue: prcue, precapprox: precapprox, prec: prec, preccurlyeq: preccurlyeq, Precedes: Precedes, PrecedesEqual: PrecedesEqual, PrecedesSlantEqual: PrecedesSlantEqual, PrecedesTilde: PrecedesTilde, preceq: preceq, precnapprox: precnapprox, precneqq: precneqq, precnsim: precnsim, pre: pre, prE: prE, precsim: precsim, prime: prime, Prime: Prime, primes: primes, prnap: prnap, prnE: prnE, prnsim: prnsim, prod: prod, Product: Product, profalar: profalar, profline: profline, profsurf: profsurf, prop: prop, Proportional: Proportional, Proportion: Proportion, propto: propto, prsim: prsim, prurel: prurel, Pscr: Pscr, pscr: pscr, Psi: Psi, psi: psi, puncsp: puncsp, Qfr: Qfr, qfr: qfr, qint: qint, qopf: qopf, Qopf: Qopf, qprime: qprime, Qscr: Qscr, qscr: qscr, quaternions: quaternions, quatint: quatint, quest: quest, questeq: questeq, quot: quot, QUOT: QUOT, rAarr: rAarr, race: race, Racute: Racute, racute: racute, radic: radic, raemptyv: raemptyv, rang: rang, Rang: Rang, rangd: rangd, range: range, rangle: rangle, raquo: raquo, rarrap: rarrap, rarrb: rarrb, rarrbfs: rarrbfs, rarrc: rarrc, rarr: rarr, Rarr: Rarr, rArr: rArr, rarrfs: rarrfs, rarrhk: rarrhk, rarrlp: rarrlp, rarrpl: rarrpl, rarrsim: rarrsim, Rarrtl: Rarrtl, rarrtl: rarrtl, rarrw: rarrw, ratail: ratail, rAtail: rAtail, ratio: ratio, rationals: rationals, rbarr: rbarr, rBarr: rBarr, RBarr: RBarr, rbbrk: rbbrk, rbrace: rbrace, rbrack: rbrack, rbrke: rbrke, rbrksld: rbrksld, rbrkslu: rbrkslu, Rcaron: Rcaron, rcaron: rcaron, Rcedil: Rcedil, rcedil: rcedil, rceil: rceil, rcub: rcub, Rcy: Rcy, rcy: rcy, rdca: rdca, rdldhar: rdldhar, rdquo: rdquo, rdquor: rdquor, rdsh: rdsh, real: real, realine: realine, realpart: realpart, reals: reals, Re: Re, rect: rect, reg: reg, REG: REG, ReverseElement: ReverseElement, ReverseEquilibrium: ReverseEquilibrium, ReverseUpEquilibrium: ReverseUpEquilibrium, rfisht: rfisht, rfloor: rfloor, rfr: rfr, Rfr: Rfr, rHar: rHar, rhard: rhard, rharu: rharu, rharul: rharul, Rho: Rho, rho: rho, rhov: rhov, RightAngleBracket: RightAngleBracket, RightArrowBar: RightArrowBar, rightarrow: rightarrow, RightArrow: RightArrow, Rightarrow: Rightarrow, RightArrowLeftArrow: RightArrowLeftArrow, rightarrowtail: rightarrowtail, RightCeiling: RightCeiling, RightDoubleBracket: RightDoubleBracket, RightDownTeeVector: RightDownTeeVector, RightDownVectorBar: RightDownVectorBar, RightDownVector: RightDownVector, RightFloor: RightFloor, rightharpoondown: rightharpoondown, rightharpoonup: rightharpoonup, rightleftarrows: rightleftarrows, rightleftharpoons: rightleftharpoons, rightrightarrows: rightrightarrows, rightsquigarrow: rightsquigarrow, RightTeeArrow: RightTeeArrow, RightTee: RightTee, RightTeeVector: RightTeeVector, rightthreetimes: rightthreetimes, RightTriangleBar: RightTriangleBar, RightTriangle: RightTriangle, RightTriangleEqual: RightTriangleEqual, RightUpDownVector: RightUpDownVector, RightUpTeeVector: RightUpTeeVector, RightUpVectorBar: RightUpVectorBar, RightUpVector: RightUpVector, RightVectorBar: RightVectorBar, RightVector: RightVector, ring: ring, risingdotseq: risingdotseq, rlarr: rlarr, rlhar: rlhar, rlm: rlm, rmoustache: rmoustache, rmoust: rmoust, rnmid: rnmid, roang: roang, roarr: roarr, robrk: robrk, ropar: ropar, ropf: ropf, Ropf: Ropf, roplus: roplus, rotimes: rotimes, RoundImplies: RoundImplies, rpar: rpar, rpargt: rpargt, rppolint: rppolint, rrarr: rrarr, Rrightarrow: Rrightarrow, rsaquo: rsaquo, rscr: rscr, Rscr: Rscr, rsh: rsh, Rsh: Rsh, rsqb: rsqb, rsquo: rsquo, rsquor: rsquor, rthree: rthree, rtimes: rtimes, rtri: rtri, rtrie: rtrie, rtrif: rtrif, rtriltri: rtriltri, RuleDelayed: RuleDelayed, ruluhar: ruluhar, rx: rx, Sacute: Sacute, sacute: sacute, sbquo: sbquo, scap: scap, Scaron: Scaron, scaron: scaron, Sc: Sc, sc: sc, sccue: sccue, sce: sce, scE: scE, Scedil: Scedil, scedil: scedil, Scirc: Scirc, scirc: scirc, scnap: scnap, scnE: scnE, scnsim: scnsim, scpolint: scpolint, scsim: scsim, Scy: Scy, scy: scy, sdotb: sdotb, sdot: sdot, sdote: sdote, searhk: searhk, searr: searr, seArr: seArr, searrow: searrow, sect: sect, semi: semi, seswar: seswar, setminus: setminus, setmn: setmn, sext: sext, Sfr: Sfr, sfr: sfr, sfrown: sfrown, sharp: sharp, SHCHcy: SHCHcy, shchcy: shchcy, SHcy: SHcy, shcy: shcy, ShortDownArrow: ShortDownArrow, ShortLeftArrow: ShortLeftArrow, shortmid: shortmid, shortparallel: shortparallel, ShortRightArrow: ShortRightArrow, ShortUpArrow: ShortUpArrow, shy: shy, Sigma: Sigma, sigma: sigma, sigmaf: sigmaf, sigmav: sigmav, sim: sim, simdot: simdot, sime: sime, simeq: simeq, simg: simg, simgE: simgE, siml: siml, simlE: simlE, simne: simne, simplus: simplus, simrarr: simrarr, slarr: slarr, SmallCircle: SmallCircle, smallsetminus: smallsetminus, smashp: smashp, smeparsl: smeparsl, smid: smid, smile: smile, smt: smt, smte: smte, smtes: smtes, SOFTcy: SOFTcy, softcy: softcy, solbar: solbar, solb: solb, sol: sol, Sopf: Sopf, sopf: sopf, spades: spades, spadesuit: spadesuit, spar: spar, sqcap: sqcap, sqcaps: sqcaps, sqcup: sqcup, sqcups: sqcups, Sqrt: Sqrt, sqsub: sqsub, sqsube: sqsube, sqsubset: sqsubset, sqsubseteq: sqsubseteq, sqsup: sqsup, sqsupe: sqsupe, sqsupset: sqsupset, sqsupseteq: sqsupseteq, square: square, Square: Square, SquareIntersection: SquareIntersection, SquareSubset: SquareSubset, SquareSubsetEqual: SquareSubsetEqual, SquareSuperset: SquareSuperset, SquareSupersetEqual: SquareSupersetEqual, SquareUnion: SquareUnion, squarf: squarf, squ: squ, squf: squf, srarr: srarr, Sscr: Sscr, sscr: sscr, ssetmn: ssetmn, ssmile: ssmile, sstarf: sstarf, Star: Star, star: star, starf: starf, straightepsilon: straightepsilon, straightphi: straightphi, strns: strns, sub: sub, Sub: Sub, subdot: subdot, subE: subE, sube: sube, subedot: subedot, submult: submult, subnE: subnE, subne: subne, subplus: subplus, subrarr: subrarr, subset: subset, Subset: Subset, subseteq: subseteq, subseteqq: subseteqq, SubsetEqual: SubsetEqual, subsetneq: subsetneq, subsetneqq: subsetneqq, subsim: subsim, subsub: subsub, subsup: subsup, succapprox: succapprox, succ: succ, succcurlyeq: succcurlyeq, Succeeds: Succeeds, SucceedsEqual: SucceedsEqual, SucceedsSlantEqual: SucceedsSlantEqual, SucceedsTilde: SucceedsTilde, succeq: succeq, succnapprox: succnapprox, succneqq: succneqq, succnsim: succnsim, succsim: succsim, SuchThat: SuchThat, sum: sum, Sum: Sum, sung: sung, sup1: sup1, sup2: sup2, sup3: sup3, sup: sup, Sup: Sup, supdot: supdot, supdsub: supdsub, supE: supE, supe: supe, supedot: supedot, Superset: Superset, SupersetEqual: SupersetEqual, suphsol: suphsol, suphsub: suphsub, suplarr: suplarr, supmult: supmult, supnE: supnE, supne: supne, supplus: supplus, supset: supset, Supset: Supset, supseteq: supseteq, supseteqq: supseteqq, supsetneq: supsetneq, supsetneqq: supsetneqq, supsim: supsim, supsub: supsub, supsup: supsup, swarhk: swarhk, swarr: swarr, swArr: swArr, swarrow: swarrow, swnwar: swnwar, szlig: szlig, Tab: Tab, target: target, Tau: Tau, tau: tau, tbrk: tbrk, Tcaron: Tcaron, tcaron: tcaron, Tcedil: Tcedil, tcedil: tcedil, Tcy: Tcy, tcy: tcy, tdot: tdot, telrec: telrec, Tfr: Tfr, tfr: tfr, there4: there4, therefore: therefore, Therefore: Therefore, Theta: Theta, theta: theta, thetasym: thetasym, thetav: thetav, thickapprox: thickapprox, thicksim: thicksim, ThickSpace: ThickSpace, ThinSpace: ThinSpace, thinsp: thinsp, thkap: thkap, thksim: thksim, THORN: THORN, thorn: thorn, tilde: tilde, Tilde: Tilde, TildeEqual: TildeEqual, TildeFullEqual: TildeFullEqual, TildeTilde: TildeTilde, timesbar: timesbar, timesb: timesb, times: times, timesd: timesd, tint: tint, toea: toea, topbot: topbot, topcir: topcir, top: top, Topf: Topf, topf: topf, topfork: topfork, tosa: tosa, tprime: tprime, trade: trade, TRADE: TRADE, triangle: triangle, triangledown: triangledown, triangleleft: triangleleft, trianglelefteq: trianglelefteq, triangleq: triangleq, triangleright: triangleright, trianglerighteq: trianglerighteq, tridot: tridot, trie: trie, triminus: triminus, TripleDot: TripleDot, triplus: triplus, trisb: trisb, tritime: tritime, trpezium: trpezium, Tscr: Tscr, tscr: tscr, TScy: TScy, tscy: tscy, TSHcy: TSHcy, tshcy: tshcy, Tstrok: Tstrok, tstrok: tstrok, twixt: twixt, twoheadleftarrow: twoheadleftarrow, twoheadrightarrow: twoheadrightarrow, Uacute: Uacute, uacute: uacute, uarr: uarr, Uarr: Uarr, uArr: uArr, Uarrocir: Uarrocir, Ubrcy: Ubrcy, ubrcy: ubrcy, Ubreve: Ubreve, ubreve: ubreve, Ucirc: Ucirc, ucirc: ucirc, Ucy: Ucy, ucy: ucy, udarr: udarr, Udblac: Udblac, udblac: udblac, udhar: udhar, ufisht: ufisht, Ufr: Ufr, ufr: ufr, Ugrave: Ugrave, ugrave: ugrave, uHar: uHar, uharl: uharl, uharr: uharr, uhblk: uhblk, ulcorn: ulcorn, ulcorner: ulcorner, ulcrop: ulcrop, ultri: ultri, Umacr: Umacr, umacr: umacr, uml: uml, UnderBar: UnderBar, UnderBrace: UnderBrace, UnderBracket: UnderBracket, UnderParenthesis: UnderParenthesis, Union: Union, UnionPlus: UnionPlus, Uogon: Uogon, uogon: uogon, Uopf: Uopf, uopf: uopf, UpArrowBar: UpArrowBar, uparrow: uparrow, UpArrow: UpArrow, Uparrow: Uparrow, UpArrowDownArrow: UpArrowDownArrow, updownarrow: updownarrow, UpDownArrow: UpDownArrow, Updownarrow: Updownarrow, UpEquilibrium: UpEquilibrium, upharpoonleft: upharpoonleft, upharpoonright: upharpoonright, uplus: uplus, UpperLeftArrow: UpperLeftArrow, UpperRightArrow: UpperRightArrow, upsi: upsi, Upsi: Upsi, upsih: upsih, Upsilon: Upsilon, upsilon: upsilon, UpTeeArrow: UpTeeArrow, UpTee: UpTee, upuparrows: upuparrows, urcorn: urcorn, urcorner: urcorner, urcrop: urcrop, Uring: Uring, uring: uring, urtri: urtri, Uscr: Uscr, uscr: uscr, utdot: utdot, Utilde: Utilde, utilde: utilde, utri: utri, utrif: utrif, uuarr: uuarr, Uuml: Uuml, uuml: uuml, uwangle: uwangle, vangrt: vangrt, varepsilon: varepsilon, varkappa: varkappa, varnothing: varnothing, varphi: varphi, varpi: varpi, varpropto: varpropto, varr: varr, vArr: vArr, varrho: varrho, varsigma: varsigma, varsubsetneq: varsubsetneq, varsubsetneqq: varsubsetneqq, varsupsetneq: varsupsetneq, varsupsetneqq: varsupsetneqq, vartheta: vartheta, vartriangleleft: vartriangleleft, vartriangleright: vartriangleright, vBar: vBar, Vbar: Vbar, vBarv: vBarv, Vcy: Vcy, vcy: vcy, vdash: vdash, vDash: vDash, Vdash: Vdash, VDash: VDash, Vdashl: Vdashl, veebar: veebar, vee: vee, Vee: Vee, veeeq: veeeq, vellip: vellip, verbar: verbar, Verbar: Verbar, vert: vert, Vert: Vert, VerticalBar: VerticalBar, VerticalLine: VerticalLine, VerticalSeparator: VerticalSeparator, VerticalTilde: VerticalTilde, VeryThinSpace: VeryThinSpace, Vfr: Vfr, vfr: vfr, vltri: vltri, vnsub: vnsub, vnsup: vnsup, Vopf: Vopf, vopf: vopf, vprop: vprop, vrtri: vrtri, Vscr: Vscr, vscr: vscr, vsubnE: vsubnE, vsubne: vsubne, vsupnE: vsupnE, vsupne: vsupne, Vvdash: Vvdash, vzigzag: vzigzag, Wcirc: Wcirc, wcirc: wcirc, wedbar: wedbar, wedge: wedge, Wedge: Wedge, wedgeq: wedgeq, weierp: weierp, Wfr: Wfr, wfr: wfr, Wopf: Wopf, wopf: wopf, wp: wp, wr: wr, wreath: wreath, Wscr: Wscr, wscr: wscr, xcap: xcap, xcirc: xcirc, xcup: xcup, xdtri: xdtri, Xfr: Xfr, xfr: xfr, xharr: xharr, xhArr: xhArr, Xi: Xi, xi: xi, xlarr: xlarr, xlArr: xlArr, xmap: xmap, xnis: xnis, xodot: xodot, Xopf: Xopf, xopf: xopf, xoplus: xoplus, xotime: xotime, xrarr: xrarr, xrArr: xrArr, Xscr: Xscr, xscr: xscr, xsqcup: xsqcup, xuplus: xuplus, xutri: xutri, xvee: xvee, xwedge: xwedge, Yacute: Yacute, yacute: yacute, YAcy: YAcy, yacy: yacy, Ycirc: Ycirc, ycirc: ycirc, Ycy: Ycy, ycy: ycy, yen: yen, Yfr: Yfr, yfr: yfr, YIcy: YIcy, yicy: yicy, Yopf: Yopf, yopf: yopf, Yscr: Yscr, yscr: yscr, YUcy: YUcy, yucy: yucy, yuml: yuml, Yuml: Yuml, Zacute: Zacute, zacute: zacute, Zcaron: Zcaron, zcaron: zcaron, Zcy: Zcy, zcy: zcy, Zdot: Zdot, zdot: zdot, zeetrf: zeetrf, ZeroWidthSpace: ZeroWidthSpace, Zeta: Zeta, zeta: zeta, zfr: zfr, Zfr: Zfr, ZHcy: ZHcy, zhcy: zhcy, zigrarr: zigrarr, zopf: zopf, Zopf: Zopf, Zscr: Zscr, zscr: zscr, zwj: zwj, zwnj: zwnj, 'default': entities }); var Aacute$1 = "Á"; var aacute$1 = "á"; var Acirc$1 = "Â"; var acirc$1 = "â"; var acute$1 = "´"; var AElig$1 = "Æ"; var aelig$1 = "æ"; var Agrave$1 = "À"; var agrave$1 = "à"; var amp$1 = "&"; var AMP$1 = "&"; var Aring$1 = "Å"; var aring$1 = "å"; var Atilde$1 = "Ã"; var atilde$1 = "ã"; var Auml$1 = "Ä"; var auml$1 = "ä"; var brvbar$1 = "¦"; var Ccedil$1 = "Ç"; var ccedil$1 = "ç"; var cedil$1 = "¸"; var cent$1 = "¢"; var copy$1 = "©"; var COPY$1 = "©"; var curren$1 = "¤"; var deg$1 = "°"; var divide$1 = "÷"; var Eacute$1 = "É"; var eacute$1 = "é"; var Ecirc$1 = "Ê"; var ecirc$1 = "ê"; var Egrave$1 = "È"; var egrave$1 = "è"; var ETH$1 = "Ð"; var eth$1 = "ð"; var Euml$1 = "Ë"; var euml$1 = "ë"; var frac12$1 = "½"; var frac14$1 = "¼"; var frac34$1 = "¾"; var gt$1 = ">"; var GT$1 = ">"; var Iacute$1 = "Í"; var iacute$1 = "í"; var Icirc$1 = "Î"; var icirc$1 = "î"; var iexcl$1 = "¡"; var Igrave$1 = "Ì"; var igrave$1 = "ì"; var iquest$1 = "¿"; var Iuml$1 = "Ï"; var iuml$1 = "ï"; var laquo$1 = "«"; var lt$1 = "<"; var LT$1 = "<"; var macr$1 = "¯"; var micro$1 = "µ"; var middot$1 = "·"; var nbsp$1 = " "; var not$1 = "¬"; var Ntilde$1 = "Ñ"; var ntilde$1 = "ñ"; var Oacute$1 = "Ó"; var oacute$1 = "ó"; var Ocirc$1 = "Ô"; var ocirc$1 = "ô"; var Ograve$1 = "Ò"; var ograve$1 = "ò"; var ordf$1 = "ª"; var ordm$1 = "º"; var Oslash$1 = "Ø"; var oslash$1 = "ø"; var Otilde$1 = "Õ"; var otilde$1 = "õ"; var Ouml$1 = "Ö"; var ouml$1 = "ö"; var para$1 = "¶"; var plusmn$1 = "±"; var pound$1 = "£"; var quot$1 = "\""; var QUOT$1 = "\""; var raquo$1 = "»"; var reg$1 = "®"; var REG$1 = "®"; var sect$1 = "§"; var shy$1 = "­"; var sup1$1 = "¹"; var sup2$1 = "²"; var sup3$1 = "³"; var szlig$1 = "ß"; var THORN$1 = "Þ"; var thorn$1 = "þ"; var times$1 = "×"; var Uacute$1 = "Ú"; var uacute$1 = "ú"; var Ucirc$1 = "Û"; var ucirc$1 = "û"; var Ugrave$1 = "Ù"; var ugrave$1 = "ù"; var uml$1 = "¨"; var Uuml$1 = "Ü"; var uuml$1 = "ü"; var Yacute$1 = "Ý"; var yacute$1 = "ý"; var yen$1 = "¥"; var yuml$1 = "ÿ"; var legacy = { Aacute: Aacute$1, aacute: aacute$1, Acirc: Acirc$1, acirc: acirc$1, acute: acute$1, AElig: AElig$1, aelig: aelig$1, Agrave: Agrave$1, agrave: agrave$1, amp: amp$1, AMP: AMP$1, Aring: Aring$1, aring: aring$1, Atilde: Atilde$1, atilde: atilde$1, Auml: Auml$1, auml: auml$1, brvbar: brvbar$1, Ccedil: Ccedil$1, ccedil: ccedil$1, cedil: cedil$1, cent: cent$1, copy: copy$1, COPY: COPY$1, curren: curren$1, deg: deg$1, divide: divide$1, Eacute: Eacute$1, eacute: eacute$1, Ecirc: Ecirc$1, ecirc: ecirc$1, Egrave: Egrave$1, egrave: egrave$1, ETH: ETH$1, eth: eth$1, Euml: Euml$1, euml: euml$1, frac12: frac12$1, frac14: frac14$1, frac34: frac34$1, gt: gt$1, GT: GT$1, Iacute: Iacute$1, iacute: iacute$1, Icirc: Icirc$1, icirc: icirc$1, iexcl: iexcl$1, Igrave: Igrave$1, igrave: igrave$1, iquest: iquest$1, Iuml: Iuml$1, iuml: iuml$1, laquo: laquo$1, lt: lt$1, LT: LT$1, macr: macr$1, micro: micro$1, middot: middot$1, nbsp: nbsp$1, not: not$1, Ntilde: Ntilde$1, ntilde: ntilde$1, Oacute: Oacute$1, oacute: oacute$1, Ocirc: Ocirc$1, ocirc: ocirc$1, Ograve: Ograve$1, ograve: ograve$1, ordf: ordf$1, ordm: ordm$1, Oslash: Oslash$1, oslash: oslash$1, Otilde: Otilde$1, otilde: otilde$1, Ouml: Ouml$1, ouml: ouml$1, para: para$1, plusmn: plusmn$1, pound: pound$1, quot: quot$1, QUOT: QUOT$1, raquo: raquo$1, reg: reg$1, REG: REG$1, sect: sect$1, shy: shy$1, sup1: sup1$1, sup2: sup2$1, sup3: sup3$1, szlig: szlig$1, THORN: THORN$1, thorn: thorn$1, times: times$1, Uacute: Uacute$1, uacute: uacute$1, Ucirc: Ucirc$1, ucirc: ucirc$1, Ugrave: Ugrave$1, ugrave: ugrave$1, uml: uml$1, Uuml: Uuml$1, uuml: uuml$1, Yacute: Yacute$1, yacute: yacute$1, yen: yen$1, yuml: yuml$1 }; var legacy$1 = /*#__PURE__*/Object.freeze({ __proto__: null, Aacute: Aacute$1, aacute: aacute$1, Acirc: Acirc$1, acirc: acirc$1, acute: acute$1, AElig: AElig$1, aelig: aelig$1, Agrave: Agrave$1, agrave: agrave$1, amp: amp$1, AMP: AMP$1, Aring: Aring$1, aring: aring$1, Atilde: Atilde$1, atilde: atilde$1, Auml: Auml$1, auml: auml$1, brvbar: brvbar$1, Ccedil: Ccedil$1, ccedil: ccedil$1, cedil: cedil$1, cent: cent$1, copy: copy$1, COPY: COPY$1, curren: curren$1, deg: deg$1, divide: divide$1, Eacute: Eacute$1, eacute: eacute$1, Ecirc: Ecirc$1, ecirc: ecirc$1, Egrave: Egrave$1, egrave: egrave$1, ETH: ETH$1, eth: eth$1, Euml: Euml$1, euml: euml$1, frac12: frac12$1, frac14: frac14$1, frac34: frac34$1, gt: gt$1, GT: GT$1, Iacute: Iacute$1, iacute: iacute$1, Icirc: Icirc$1, icirc: icirc$1, iexcl: iexcl$1, Igrave: Igrave$1, igrave: igrave$1, iquest: iquest$1, Iuml: Iuml$1, iuml: iuml$1, laquo: laquo$1, lt: lt$1, LT: LT$1, macr: macr$1, micro: micro$1, middot: middot$1, nbsp: nbsp$1, not: not$1, Ntilde: Ntilde$1, ntilde: ntilde$1, Oacute: Oacute$1, oacute: oacute$1, Ocirc: Ocirc$1, ocirc: ocirc$1, Ograve: Ograve$1, ograve: ograve$1, ordf: ordf$1, ordm: ordm$1, Oslash: Oslash$1, oslash: oslash$1, Otilde: Otilde$1, otilde: otilde$1, Ouml: Ouml$1, ouml: ouml$1, para: para$1, plusmn: plusmn$1, pound: pound$1, quot: quot$1, QUOT: QUOT$1, raquo: raquo$1, reg: reg$1, REG: REG$1, sect: sect$1, shy: shy$1, sup1: sup1$1, sup2: sup2$1, sup3: sup3$1, szlig: szlig$1, THORN: THORN$1, thorn: thorn$1, times: times$1, Uacute: Uacute$1, uacute: uacute$1, Ucirc: Ucirc$1, ucirc: ucirc$1, Ugrave: Ugrave$1, ugrave: ugrave$1, uml: uml$1, Uuml: Uuml$1, uuml: uuml$1, Yacute: Yacute$1, yacute: yacute$1, yen: yen$1, yuml: yuml$1, 'default': legacy }); var amp$2 = "&"; var apos$1 = "'"; var gt$2 = ">"; var lt$2 = "<"; var quot$2 = "\""; var xml = { amp: amp$2, apos: apos$1, gt: gt$2, lt: lt$2, quot: quot$2 }; var xml$1 = /*#__PURE__*/Object.freeze({ __proto__: null, amp: amp$2, apos: apos$1, gt: gt$2, lt: lt$2, quot: quot$2, 'default': xml }); var decode = { "0": 65533, "128": 8364, "130": 8218, "131": 402, "132": 8222, "133": 8230, "134": 8224, "135": 8225, "136": 710, "137": 8240, "138": 352, "139": 8249, "140": 338, "142": 381, "145": 8216, "146": 8217, "147": 8220, "148": 8221, "149": 8226, "150": 8211, "151": 8212, "152": 732, "153": 8482, "154": 353, "155": 8250, "156": 339, "158": 382, "159": 376 }; var decode$1 = /*#__PURE__*/Object.freeze({ __proto__: null, 'default': decode }); var require$$0 = getCjsExportFromNamespace(decode$1); var decode_codepoint = createCommonjsModule(function (module, exports) { var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var decode_json_1 = __importDefault(require$$0); // modified version of https://github.com/mathiasbynens/he/blob/master/src/he.js#L94-L119 function decodeCodePoint(codePoint) { if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) { return "\uFFFD"; } if (codePoint in decode_json_1.default) { codePoint = decode_json_1.default[codePoint]; } var output = ""; if (codePoint > 0xffff) { codePoint -= 0x10000; output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800); codePoint = 0xdc00 | (codePoint & 0x3ff); } output += String.fromCharCode(codePoint); return output; } exports.default = decodeCodePoint; }); unwrapExports(decode_codepoint); var require$$1 = getCjsExportFromNamespace(entities$1); var require$$1$1 = getCjsExportFromNamespace(legacy$1); var require$$0$1 = getCjsExportFromNamespace(xml$1); var decode$2 = createCommonjsModule(function (module, exports) { var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.decodeHTML = exports.decodeHTMLStrict = exports.decodeXML = void 0; var entities_json_1 = __importDefault(require$$1); var legacy_json_1 = __importDefault(require$$1$1); var xml_json_1 = __importDefault(require$$0$1); var decode_codepoint_1 = __importDefault(decode_codepoint); exports.decodeXML = getStrictDecoder(xml_json_1.default); exports.decodeHTMLStrict = getStrictDecoder(entities_json_1.default); function getStrictDecoder(map) { var keys = Object.keys(map).join("|"); var replace = getReplacer(map); keys += "|#[xX][\\da-fA-F]+|#\\d+"; var re = new RegExp("&(?:" + keys + ");", "g"); return function (str) { return String(str).replace(re, replace); }; } var sorter = function (a, b) { return (a < b ? 1 : -1); }; exports.decodeHTML = (function () { var legacy = Object.keys(legacy_json_1.default).sort(sorter); var keys = Object.keys(entities_json_1.default).sort(sorter); for (var i = 0, j = 0; i < keys.length; i++) { if (legacy[j] === keys[i]) { keys[i] += ";?"; j++; } else { keys[i] += ";"; } } var re = new RegExp("&(?:" + keys.join("|") + "|#[xX][\\da-fA-F]+;?|#\\d+;?)", "g"); var replace = getReplacer(entities_json_1.default); function replacer(str) { if (str.substr(-1) !== ";") str += ";"; return replace(str); } //TODO consider creating a merged map return function (str) { return String(str).replace(re, replacer); }; })(); function getReplacer(map) { return function replace(str) { if (str.charAt(1) === "#") { var secondChar = str.charAt(2); if (secondChar === "X" || secondChar === "x") { return decode_codepoint_1.default(parseInt(str.substr(3), 16)); } return decode_codepoint_1.default(parseInt(str.substr(2), 10)); } return map[str.slice(1, -1)]; }; } }); unwrapExports(decode$2); var decode_1 = decode$2.decodeHTML; var decode_2 = decode$2.decodeHTMLStrict; var decode_3 = decode$2.decodeXML; var encode$1 = createCommonjsModule(function (module, exports) { var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.escape = exports.encodeHTML = exports.encodeXML = void 0; var xml_json_1 = __importDefault(require$$0$1); var inverseXML = getInverseObj(xml_json_1.default); var xmlReplacer = getInverseReplacer(inverseXML); exports.encodeXML = getInverse(inverseXML, xmlReplacer); var entities_json_1 = __importDefault(require$$1); var inverseHTML = getInverseObj(entities_json_1.default); var htmlReplacer = getInverseReplacer(inverseHTML); exports.encodeHTML = getInverse(inverseHTML, htmlReplacer); function getInverseObj(obj) { return Object.keys(obj) .sort() .reduce(function (inverse, name) { inverse[obj[name]] = "&" + name + ";"; return inverse; }, {}); } function getInverseReplacer(inverse) { var single = []; var multiple = []; for (var _i = 0, _a = Object.keys(inverse); _i < _a.length; _i++) { var k = _a[_i]; if (k.length === 1) { // Add value to single array single.push("\\" + k); } else { // Add value to multiple array multiple.push(k); } } // Add ranges to single characters. single.sort(); for (var start = 0; start < single.length - 1; start++) { // Find the end of a run of characters var end = start; while (end < single.length - 1 && single[end].charCodeAt(1) + 1 === single[end + 1].charCodeAt(1)) { end += 1; } var count = 1 + end - start; // We want to replace at least three characters if (count < 3) continue; single.splice(start, count, single[start] + "-" + single[end]); } multiple.unshift("[" + single.join("") + "]"); return new RegExp(multiple.join("|"), "g"); } var reNonASCII = /(?:[\x80-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g; function singleCharReplacer(c) { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion return "&#x" + c.codePointAt(0).toString(16).toUpperCase() + ";"; } function getInverse(inverse, re) { return function (data) { return data .replace(re, function (name) { return inverse[name]; }) .replace(reNonASCII, singleCharReplacer); }; } var reXmlChars = getInverseReplacer(inverseXML); function escape(data) { return data .replace(reXmlChars, singleCharReplacer) .replace(reNonASCII, singleCharReplacer); } exports.escape = escape; }); unwrapExports(encode$1); var encode_1$1 = encode$1.escape; var encode_2 = encode$1.encodeHTML; var encode_3 = encode$1.encodeXML; var lib = createCommonjsModule(function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.encode = exports.decodeStrict = exports.decode = void 0; /** * Decodes a string with entities. * * @param data String to decode. * @param level Optional level to decode at. 0 = XML, 1 = HTML. Default is 0. */ function decode(data, level) { return (!level || level <= 0 ? decode$2.decodeXML : decode$2.decodeHTML)(data); } exports.decode = decode; /** * Decodes a string with entities. Does not allow missing trailing semicolons for entities. * * @param data String to decode. * @param level Optional level to decode at. 0 = XML, 1 = HTML. Default is 0. */ function decodeStrict(data, level) { return (!level || level <= 0 ? decode$2.decodeXML : decode$2.decodeHTMLStrict)(data); } exports.decodeStrict = decodeStrict; /** * Encodes a string with entities. * * @param data String to encode. * @param level Optional level to encode at. 0 = XML, 1 = HTML. Default is 0. */ function encode(data, level) { return (!level || level <= 0 ? encode$1.encodeXML : encode$1.encodeHTML)(data); } exports.encode = encode; var encode_2 = encode$1; Object.defineProperty(exports, "encodeXML", { enumerable: true, get: function () { return encode_2.encodeXML; } }); Object.defineProperty(exports, "encodeHTML", { enumerable: true, get: function () { return encode_2.encodeHTML; } }); Object.defineProperty(exports, "escape", { enumerable: true, get: function () { return encode_2.escape; } }); // Legacy aliases Object.defineProperty(exports, "encodeHTML4", { enumerable: true, get: function () { return encode_2.encodeHTML; } }); Object.defineProperty(exports, "encodeHTML5", { enumerable: true, get: function () { return encode_2.encodeHTML; } }); var decode_2 = decode$2; Object.defineProperty(exports, "decodeXML", { enumerable: true, get: function () { return decode_2.decodeXML; } }); Object.defineProperty(exports, "decodeHTML", { enumerable: true, get: function () { return decode_2.decodeHTML; } }); Object.defineProperty(exports, "decodeHTMLStrict", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } }); // Legacy aliases Object.defineProperty(exports, "decodeHTML4", { enumerable: true, get: function () { return decode_2.decodeHTML; } }); Object.defineProperty(exports, "decodeHTML5", { enumerable: true, get: function () { return decode_2.decodeHTML; } }); Object.defineProperty(exports, "decodeHTML4Strict", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } }); Object.defineProperty(exports, "decodeHTML5Strict", { enumerable: true, get: function () { return decode_2.decodeHTMLStrict; } }); Object.defineProperty(exports, "decodeXMLStrict", { enumerable: true, get: function () { return decode_2.decodeXML; } }); }); unwrapExports(lib); var lib_1 = lib.encode; var lib_2 = lib.decodeStrict; var lib_3 = lib.decode; var lib_4 = lib.encodeXML; var lib_5 = lib.encodeHTML; var lib_6 = lib.encodeHTML4; var lib_7 = lib.encodeHTML5; var lib_8 = lib.decodeXML; var lib_9 = lib.decodeHTML; var lib_10 = lib.decodeHTMLStrict; var lib_11 = lib.decodeHTML4; var lib_12 = lib.decodeHTML5; var lib_13 = lib.decodeHTML4Strict; var lib_14 = lib.decodeHTML5Strict; var lib_15 = lib.decodeXMLStrict; var C_BACKSLASH = 92; var ENTITY = "&(?:#x[a-f0-9]{1,6}|#[0-9]{1,7}|[a-z][a-z0-9]{1,31});"; var TAGNAME = "[A-Za-z][A-Za-z0-9-]*"; var ATTRIBUTENAME = "[a-zA-Z_:][a-zA-Z0-9:._-]*"; var UNQUOTEDVALUE = "[^\"'=<>`\\x00-\\x20]+"; var SINGLEQUOTEDVALUE = "'[^']*'"; var DOUBLEQUOTEDVALUE = '"[^"]*"'; var ATTRIBUTEVALUE = "(?:" + UNQUOTEDVALUE + "|" + SINGLEQUOTEDVALUE + "|" + DOUBLEQUOTEDVALUE + ")"; var ATTRIBUTEVALUESPEC = "(?:" + "\\s*=" + "\\s*" + ATTRIBUTEVALUE + ")"; var ATTRIBUTE = "(?:" + "\\s+" + ATTRIBUTENAME + ATTRIBUTEVALUESPEC + "?)"; var OPENTAG = "<" + TAGNAME + ATTRIBUTE + "*" + "\\s*/?>"; var CLOSETAG = "]"; var HTMLCOMMENT = "|"; var PROCESSINGINSTRUCTION = "[<][?][\\s\\S]*?[?][>]"; var DECLARATION = "]*>"; var CDATA = ""; var HTMLTAG = "(?:" + OPENTAG + "|" + CLOSETAG + "|" + HTMLCOMMENT + "|" + PROCESSINGINSTRUCTION + "|" + DECLARATION + "|" + CDATA + ")"; var reHtmlTag = new RegExp("^" + HTMLTAG); var reBackslashOrAmp = /[\\&]/; var ESCAPABLE = "[!\"#$%&'()*+,./:;<=>?@[\\\\\\]^_`{|}~-]"; var reEntityOrEscapedChar = new RegExp("\\\\" + ESCAPABLE + "|" + ENTITY, "gi"); var XMLSPECIAL = '[&<>"]'; var reXmlSpecial = new RegExp(XMLSPECIAL, "g"); var unescapeChar = function(s) { if (s.charCodeAt(0) === C_BACKSLASH) { return s.charAt(1); } else { return lib_9(s); } }; // Replace entities and backslash escapes with literal characters. var unescapeString = function(s) { if (reBackslashOrAmp.test(s)) { return s.replace(reEntityOrEscapedChar, unescapeChar); } else { return s; } }; var normalizeURI = function(uri) { try { return encode_1(uri); } catch (err) { return uri; } }; var replaceUnsafeChar = function(s) { switch (s) { case "&": return "&"; case "<": return "<"; case ">": return ">"; case '"': return """; default: return s; } }; var escapeXml = function(s) { if (reXmlSpecial.test(s)) { return s.replace(reXmlSpecial, replaceUnsafeChar); } else { return s; } }; // derived from https://github.com/mathiasbynens/String.fromCodePoint /*! http://mths.be/fromcodepoint v0.2.1 by @mathias */ var _fromCodePoint; function fromCodePoint(_) { return _fromCodePoint(_); } if (String.fromCodePoint) { _fromCodePoint = function(_) { try { return String.fromCodePoint(_); } catch (e) { if (e instanceof RangeError) { return String.fromCharCode(0xfffd); } throw e; } }; } else { var stringFromCharCode = String.fromCharCode; var floor = Math.floor; _fromCodePoint = function() { var MAX_SIZE = 0x4000; var codeUnits = []; var highSurrogate; var lowSurrogate; var index = -1; var length = arguments.length; if (!length) { return ""; } var result = ""; while (++index < length) { var codePoint = Number(arguments[index]); if ( !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity` codePoint < 0 || // not a valid Unicode code point codePoint > 0x10ffff || // not a valid Unicode code point floor(codePoint) !== codePoint // not an integer ) { return String.fromCharCode(0xfffd); } if (codePoint <= 0xffff) { // BMP code point codeUnits.push(codePoint); } else { // Astral code point; split in surrogate halves // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae codePoint -= 0x10000; highSurrogate = (codePoint >> 10) + 0xd800; lowSurrogate = (codePoint % 0x400) + 0xdc00; codeUnits.push(highSurrogate, lowSurrogate); } if (index + 1 === length || codeUnits.length > MAX_SIZE) { result += stringFromCharCode.apply(null, codeUnits); codeUnits.length = 0; } } return result; }; } /*! http://mths.be/repeat v0.2.0 by @mathias */ if (!String.prototype.repeat) { (function() { var defineProperty = (function() { // IE 8 only supports `Object.defineProperty` on DOM elements try { var object = {}; var $defineProperty = Object.defineProperty; var result = $defineProperty(object, object, object) && $defineProperty; } catch(error) {} return result; }()); var repeat = function(count) { if (this == null) { throw TypeError(); } var string = String(this); // `ToInteger` var n = count ? Number(count) : 0; if (n != n) { // better `isNaN` n = 0; } // Account for out-of-bounds indices if (n < 0 || n == Infinity) { throw RangeError(); } var result = ''; while (n) { if (n % 2 == 1) { result += string; } if (n > 1) { string += string; } n >>= 1; } return result; }; if (defineProperty) { defineProperty(String.prototype, 'repeat', { 'value': repeat, 'configurable': true, 'writable': true }); } else { String.prototype.repeat = repeat; } }()); } var normalizeURI$1 = normalizeURI; var unescapeString$1 = unescapeString; // Constants for character codes: var C_NEWLINE = 10; var C_ASTERISK = 42; var C_UNDERSCORE = 95; var C_BACKTICK = 96; var C_OPEN_BRACKET = 91; var C_CLOSE_BRACKET = 93; var C_LESSTHAN = 60; var C_BANG = 33; var C_BACKSLASH$1 = 92; var C_AMPERSAND = 38; var C_OPEN_PAREN = 40; var C_CLOSE_PAREN = 41; var C_COLON = 58; var C_SINGLEQUOTE = 39; var C_DOUBLEQUOTE = 34; // Some regexps used in inline parser: var ESCAPABLE$1 = ESCAPABLE; var ESCAPED_CHAR = "\\\\" + ESCAPABLE$1; var ENTITY$1 = ENTITY; var reHtmlTag$1 = reHtmlTag; var rePunctuation = new RegExp( /^[!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]/ ); var reLinkTitle = new RegExp( '^(?:"(' + ESCAPED_CHAR + '|[^"\\x00])*"' + "|" + "'(" + ESCAPED_CHAR + "|[^'\\x00])*'" + "|" + "\\((" + ESCAPED_CHAR + "|[^()\\x00])*\\))" ); var reLinkDestinationBraces = /^(?:<(?:[^<>\n\\\x00]|\\.)*>)/; var reEscapable = new RegExp("^" + ESCAPABLE$1); var reEntityHere = new RegExp("^" + ENTITY$1, "i"); var reTicks = /`+/; var reTicksHere = /^`+/; var reEllipses = /\.\.\./g; var reDash = /--+/g; var reEmailAutolink = /^<([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/; var reAutolink = /^<[A-Za-z][A-Za-z0-9.+-]{1,31}:[^<>\x00-\x20]*>/i; var reSpnl = /^ *(?:\n *)?/; var reWhitespaceChar = /^[ \t\n\x0b\x0c\x0d]/; var reUnicodeWhitespaceChar = /^\s/; var reFinalSpace = / *$/; var reInitialSpace = /^ */; var reSpaceAtEndOfLine = /^ *(?:\n|$)/; var reLinkLabel = /^\[(?:[^\\\[\]]|\\.){0,1000}\]/s; // Matches a string of non-special characters. var reMain = /^[^\n`\[\]\\!<&*_'"]+/m; var text = function(s) { var node = new Node("text"); node._literal = s; return node; }; // normalize a reference in reference link (remove []s, trim, // collapse internal space, unicode case fold. // See commonmark/commonmark.js#168. var normalizeReference = function(string) { return string .slice(1, string.length - 1) .trim() .replace(/[ \t\r\n]+/, " ") .toLowerCase() .toUpperCase(); }; // INLINE PARSER // These are methods of an InlineParser object, defined below. // An InlineParser keeps track of a subject (a string to be // parsed) and a position in that subject. // If re matches at current position in the subject, advance // position in subject and return the match; otherwise return null. var match = function(re) { var m = re.exec(this.subject.slice(this.pos)); if (m === null) { return null; } else { this.pos += m.index + m[0].length; return m[0]; } }; // Returns the code for the character at the current subject position, or -1 // there are no more characters. var peek = function() { if (this.pos < this.subject.length) { return this.subject.charCodeAt(this.pos); } else { return -1; } }; // Parse zero or more space characters, including at most one newline var spnl = function() { this.match(reSpnl); return true; }; // All of the parsers below try to match something at the current position // in the subject. If they succeed in matching anything, they // return the inline matched, advancing the subject. // Attempt to parse backticks, adding either a backtick code span or a // literal sequence of backticks. var parseBackticks = function(block) { var ticks = this.match(reTicksHere); if (ticks === null) { return false; } var afterOpenTicks = this.pos; var matched; var node; var contents; while ((matched = this.match(reTicks)) !== null) { if (matched === ticks) { node = new Node("code"); contents = this.subject .slice(afterOpenTicks, this.pos - ticks.length) .replace(/\n/gm, " "); if ( contents.length > 0 && contents.match(/[^ ]/) !== null && contents[0] == " " && contents[contents.length - 1] == " " ) { node._literal = contents.slice(1, contents.length - 1); } else { node._literal = contents; } const doc = this.options.autoDoc; if (doc) { const decl_hash = doc.detectDeclPath(contents); if (decl_hash) { var l = new Node("link"); l.destination = decl_hash; l.appendChild(node); node = l; } } block.appendChild(node); return true; } } // If we got here, we didn't match a closing backtick sequence. this.pos = afterOpenTicks; block.appendChild(text(ticks)); return true; }; // Parse a backslash-escaped special character, adding either the escaped // character, a hard line break (if the backslash is followed by a newline), // or a literal backslash to the block's children. Assumes current character // is a backslash. var parseBackslash = function(block) { var subj = this.subject; var node; this.pos += 1; if (this.peek() === C_NEWLINE) { this.pos += 1; node = new Node("linebreak"); block.appendChild(node); } else if (reEscapable.test(subj.charAt(this.pos))) { block.appendChild(text(subj.charAt(this.pos))); this.pos += 1; } else { block.appendChild(text("\\")); } return true; }; // Attempt to parse an autolink (URL or email in pointy brackets). var parseAutolink = function(block) { var m; var dest; var node; if ((m = this.match(reEmailAutolink))) { dest = m.slice(1, m.length - 1); node = new Node("link"); node._destination = normalizeURI$1("mailto:" + dest); node._title = ""; node.appendChild(text(dest)); block.appendChild(node); return true; } else if ((m = this.match(reAutolink))) { dest = m.slice(1, m.length - 1); node = new Node("link"); node._destination = normalizeURI$1(dest); node._title = ""; node.appendChild(text(dest)); block.appendChild(node); return true; } else { return false; } }; // Attempt to parse a raw HTML tag. var parseHtmlTag = function(block) { var m = this.match(reHtmlTag$1); if (m === null) { return false; } else { var node = new Node("html_inline"); node._literal = m; block.appendChild(node); return true; } }; // Scan a sequence of characters with code cc, and return information about // the number of delimiters and whether they are positioned such that // they can open and/or close emphasis or strong emphasis. A utility // function for strong/emph parsing. var scanDelims = function(cc) { var numdelims = 0; var char_before, char_after, cc_after; var startpos = this.pos; var left_flanking, right_flanking, can_open, can_close; var after_is_whitespace, after_is_punctuation, before_is_whitespace, before_is_punctuation; if (cc === C_SINGLEQUOTE || cc === C_DOUBLEQUOTE) { numdelims++; this.pos++; } else { while (this.peek() === cc) { numdelims++; this.pos++; } } if (numdelims === 0) { return null; } char_before = startpos === 0 ? "\n" : this.subject.charAt(startpos - 1); cc_after = this.peek(); if (cc_after === -1) { char_after = "\n"; } else { char_after = fromCodePoint(cc_after); } after_is_whitespace = reUnicodeWhitespaceChar.test(char_after); after_is_punctuation = rePunctuation.test(char_after); before_is_whitespace = reUnicodeWhitespaceChar.test(char_before); before_is_punctuation = rePunctuation.test(char_before); left_flanking = !after_is_whitespace && (!after_is_punctuation || before_is_whitespace || before_is_punctuation); right_flanking = !before_is_whitespace && (!before_is_punctuation || after_is_whitespace || after_is_punctuation); if (cc === C_UNDERSCORE) { can_open = left_flanking && (!right_flanking || before_is_punctuation); can_close = right_flanking && (!left_flanking || after_is_punctuation); } else if (cc === C_SINGLEQUOTE || cc === C_DOUBLEQUOTE) { can_open = left_flanking && !right_flanking; can_close = right_flanking; } else { can_open = left_flanking; can_close = right_flanking; } this.pos = startpos; return { numdelims: numdelims, can_open: can_open, can_close: can_close }; }; // Handle a delimiter marker for emphasis or a quote. var handleDelim = function(cc, block) { var res = this.scanDelims(cc); if (!res) { return false; } var numdelims = res.numdelims; var startpos = this.pos; var contents; this.pos += numdelims; if (cc === C_SINGLEQUOTE) { contents = "\u2019"; } else if (cc === C_DOUBLEQUOTE) { contents = "\u201C"; } else { contents = this.subject.slice(startpos, this.pos); } var node = text(contents); block.appendChild(node); // Add entry to stack for this opener if ( (res.can_open || res.can_close) && (this.options.smart || (cc !== C_SINGLEQUOTE && cc !== C_DOUBLEQUOTE)) ) { this.delimiters = { cc: cc, numdelims: numdelims, origdelims: numdelims, node: node, previous: this.delimiters, next: null, can_open: res.can_open, can_close: res.can_close }; if (this.delimiters.previous !== null) { this.delimiters.previous.next = this.delimiters; } } return true; }; var removeDelimiter = function(delim) { if (delim.previous !== null) { delim.previous.next = delim.next; } if (delim.next === null) { // top of stack this.delimiters = delim.previous; } else { delim.next.previous = delim.previous; } }; var removeDelimitersBetween = function(bottom, top) { if (bottom.next !== top) { bottom.next = top; top.previous = bottom; } }; var processEmphasis = function(stack_bottom) { var opener, closer, old_closer; var opener_inl, closer_inl; var tempstack; var use_delims; var tmp, next; var opener_found; var openers_bottom = []; var openers_bottom_index; var odd_match = false; for (var i = 0; i < 8; i++) { openers_bottom[i] = stack_bottom; } // find first closer above stack_bottom: closer = this.delimiters; while (closer !== null && closer.previous !== stack_bottom) { closer = closer.previous; } // move forward, looking for closers, and handling each while (closer !== null) { var closercc = closer.cc; if (!closer.can_close) { closer = closer.next; } else { // found emphasis closer. now look back for first matching opener: opener = closer.previous; opener_found = false; switch (closercc) { case C_SINGLEQUOTE: openers_bottom_index = 0; break; case C_DOUBLEQUOTE: openers_bottom_index = 1; break; case C_UNDERSCORE: openers_bottom_index = 2; break; case C_ASTERISK: openers_bottom_index = 3 + (closer.can_open ? 3 : 0) + (closer.origdelims % 3); break; } while ( opener !== null && opener !== stack_bottom && opener !== openers_bottom[openers_bottom_index] ) { odd_match = (closer.can_open || opener.can_close) && closer.origdelims % 3 !== 0 && (opener.origdelims + closer.origdelims) % 3 === 0; if (opener.cc === closer.cc && opener.can_open && !odd_match) { opener_found = true; break; } opener = opener.previous; } old_closer = closer; if (closercc === C_ASTERISK || closercc === C_UNDERSCORE) { if (!opener_found) { closer = closer.next; } else { // calculate actual number of delimiters used from closer use_delims = closer.numdelims >= 2 && opener.numdelims >= 2 ? 2 : 1; opener_inl = opener.node; closer_inl = closer.node; // remove used delimiters from stack elts and inlines opener.numdelims -= use_delims; closer.numdelims -= use_delims; opener_inl._literal = opener_inl._literal.slice( 0, opener_inl._literal.length - use_delims ); closer_inl._literal = closer_inl._literal.slice( 0, closer_inl._literal.length - use_delims ); // build contents for new emph element var emph = new Node(use_delims === 1 ? "emph" : "strong"); tmp = opener_inl._next; while (tmp && tmp !== closer_inl) { next = tmp._next; tmp.unlink(); emph.appendChild(tmp); tmp = next; } opener_inl.insertAfter(emph); // remove elts between opener and closer in delimiters stack removeDelimitersBetween(opener, closer); // if opener has 0 delims, remove it and the inline if (opener.numdelims === 0) { opener_inl.unlink(); this.removeDelimiter(opener); } if (closer.numdelims === 0) { closer_inl.unlink(); tempstack = closer.next; this.removeDelimiter(closer); closer = tempstack; } } } else if (closercc === C_SINGLEQUOTE) { closer.node._literal = "\u2019"; if (opener_found) { opener.node._literal = "\u2018"; } closer = closer.next; } else if (closercc === C_DOUBLEQUOTE) { closer.node._literal = "\u201D"; if (opener_found) { opener.node.literal = "\u201C"; } closer = closer.next; } if (!opener_found) { // Set lower bound for future searches for openers: openers_bottom[openers_bottom_index] = old_closer.previous; if (!old_closer.can_open) { // We can remove a closer that can't be an opener, // once we've seen there's no matching opener: this.removeDelimiter(old_closer); } } } } // remove all delimiters while (this.delimiters !== null && this.delimiters !== stack_bottom) { this.removeDelimiter(this.delimiters); } }; // Attempt to parse link title (sans quotes), returning the string // or null if no match. var parseLinkTitle = function() { var title = this.match(reLinkTitle); if (title === null) { return null; } else { // chop off quotes from title and unescape: return unescapeString$1(title.substr(1, title.length - 2)); } }; // Attempt to parse link destination, returning the string or // null if no match. var parseLinkDestination = function() { var res = this.match(reLinkDestinationBraces); if (res === null) { if (this.peek() === C_LESSTHAN) { return null; } // TODO handrolled parser; res should be null or the string var savepos = this.pos; var openparens = 0; var c; while ((c = this.peek()) !== -1) { if ( c === C_BACKSLASH$1 && reEscapable.test(this.subject.charAt(this.pos + 1)) ) { this.pos += 1; if (this.peek() !== -1) { this.pos += 1; } } else if (c === C_OPEN_PAREN) { this.pos += 1; openparens += 1; } else if (c === C_CLOSE_PAREN) { if (openparens < 1) { break; } else { this.pos += 1; openparens -= 1; } } else if (reWhitespaceChar.exec(fromCodePoint(c)) !== null) { break; } else { this.pos += 1; } } if (this.pos === savepos && c !== C_CLOSE_PAREN) { return null; } if (openparens !== 0) { return null; } res = this.subject.substr(savepos, this.pos - savepos); return normalizeURI$1(unescapeString$1(res)); } else { // chop off surrounding <..>: return normalizeURI$1(unescapeString$1(res.substr(1, res.length - 2))); } }; // Attempt to parse a link label, returning number of characters parsed. var parseLinkLabel = function() { var m = this.match(reLinkLabel); if (m === null || m.length > 1001) { return 0; } else { return m.length; } }; // Add open bracket to delimiter stack and add a text node to block's children. var parseOpenBracket = function(block) { var startpos = this.pos; this.pos += 1; var node = text("["); block.appendChild(node); // Add entry to stack for this opener this.addBracket(node, startpos, false); return true; }; // IF next character is [, and ! delimiter to delimiter stack and // add a text node to block's children. Otherwise just add a text node. var parseBang = function(block) { var startpos = this.pos; this.pos += 1; if (this.peek() === C_OPEN_BRACKET) { this.pos += 1; var node = text("!["); block.appendChild(node); // Add entry to stack for this opener this.addBracket(node, startpos + 1, true); } else { block.appendChild(text("!")); } return true; }; // Try to match close bracket against an opening in the delimiter // stack. Add either a link or image, or a plain [ character, // to block's children. If there is a matching delimiter, // remove it from the delimiter stack. var parseCloseBracket = function(block) { var startpos; var is_image; var dest; var title; var matched = false; var reflabel; var opener; this.pos += 1; startpos = this.pos; // get last [ or ![ opener = this.brackets; if (opener === null) { // no matched opener, just return a literal block.appendChild(text("]")); return true; } if (!opener.active) { // no matched opener, just return a literal block.appendChild(text("]")); // take opener off brackets stack this.removeBracket(); return true; } // If we got here, open is a potential opener is_image = opener.image; // Check to see if we have a link/image var savepos = this.pos; // Inline link? if (this.peek() === C_OPEN_PAREN) { this.pos++; if ( this.spnl() && (dest = this.parseLinkDestination()) !== null && this.spnl() && // make sure there's a space before the title: ((reWhitespaceChar.test(this.subject.charAt(this.pos - 1)) && (title = this.parseLinkTitle())) || true) && this.spnl() && this.peek() === C_CLOSE_PAREN ) { this.pos += 1; matched = true; } else { this.pos = savepos; } } if (!matched) { // Next, see if there's a link label var beforelabel = this.pos; var n = this.parseLinkLabel(); if (n > 2) { reflabel = this.subject.slice(beforelabel, beforelabel + n); } else if (!opener.bracketAfter) { // Empty or missing second label means to use the first label as the reference. // The reference must not contain a bracket. If we know there's a bracket, we don't even bother checking it. reflabel = this.subject.slice(opener.index, startpos); } if (n === 0) { // If shortcut reference link, rewind before spaces we skipped. this.pos = savepos; } if (reflabel) { // lookup rawlabel in refmap var link = this.refmap[normalizeReference(reflabel)]; if (link) { dest = link.destination; title = link.title; matched = true; } } } if (matched) { var node = new Node(is_image ? "image" : "link"); node._destination = dest; node._title = title || ""; var tmp, next; tmp = opener.node._next; while (tmp) { next = tmp._next; tmp.unlink(); node.appendChild(tmp); tmp = next; } block.appendChild(node); this.processEmphasis(opener.previousDelimiter); this.removeBracket(); opener.node.unlink(); // We remove this bracket and processEmphasis will remove later delimiters. // Now, for a link, we also deactivate earlier link openers. // (no links in links) if (!is_image) { opener = this.brackets; while (opener !== null) { if (!opener.image) { opener.active = false; // deactivate this opener } opener = opener.previous; } } return true; } else { // no match this.removeBracket(); // remove this opener from stack this.pos = startpos; block.appendChild(text("]")); return true; } }; var addBracket = function(node, index, image) { if (this.brackets !== null) { this.brackets.bracketAfter = true; } this.brackets = { node: node, previous: this.brackets, previousDelimiter: this.delimiters, index: index, image: image, active: true }; }; var removeBracket = function() { this.brackets = this.brackets.previous; }; // Attempt to parse an entity. var parseEntity = function(block) { var m; if ((m = this.match(reEntityHere))) { block.appendChild(text(lib_9(m))); return true; } else { return false; } }; // Parse a run of ordinary characters, or a single character with // a special meaning in markdown, as a plain string. var parseString = function(block) { var m; if ((m = this.match(reMain))) { if (this.options.smart) { block.appendChild( text( m .replace(reEllipses, "\u2026") .replace(reDash, function(chars) { var enCount = 0; var emCount = 0; if (chars.length % 3 === 0) { // If divisible by 3, use all em dashes emCount = chars.length / 3; } else if (chars.length % 2 === 0) { // If divisible by 2, use all en dashes enCount = chars.length / 2; } else if (chars.length % 3 === 2) { // If 2 extra dashes, use en dash for last 2; em dashes for rest enCount = 1; emCount = (chars.length - 2) / 3; } else { // Use en dashes for last 4 hyphens; em dashes for rest enCount = 2; emCount = (chars.length - 4) / 3; } return ( "\u2014".repeat(emCount) + "\u2013".repeat(enCount) ); }) ) ); } else { block.appendChild(text(m)); } return true; } else { return false; } }; // Parse a newline. If it was preceded by two spaces, return a hard // line break; otherwise a soft line break. var parseNewline = function(block) { this.pos += 1; // assume we're at a \n // check previous node for trailing spaces var lastc = block._lastChild; if ( lastc && lastc.type === "text" && lastc._literal[lastc._literal.length - 1] === " " ) { var hardbreak = lastc._literal[lastc._literal.length - 2] === " "; lastc._literal = lastc._literal.replace(reFinalSpace, ""); block.appendChild(new Node(hardbreak ? "linebreak" : "softbreak")); } else { block.appendChild(new Node("softbreak")); } this.match(reInitialSpace); // gobble leading spaces in next line return true; }; // Attempt to parse a link reference, modifying refmap. var parseReference = function(s, refmap) { this.subject = s; this.pos = 0; var rawlabel; var dest; var title; var matchChars; var startpos = this.pos; // label: matchChars = this.parseLinkLabel(); if (matchChars === 0) { return 0; } else { rawlabel = this.subject.substr(0, matchChars); } // colon: if (this.peek() === C_COLON) { this.pos++; } else { this.pos = startpos; return 0; } // link url this.spnl(); dest = this.parseLinkDestination(); if (dest === null) { this.pos = startpos; return 0; } var beforetitle = this.pos; this.spnl(); if (this.pos !== beforetitle) { title = this.parseLinkTitle(); } if (title === null) { title = ""; // rewind before spaces this.pos = beforetitle; } // make sure we're at line end: var atLineEnd = true; if (this.match(reSpaceAtEndOfLine) === null) { if (title === "") { atLineEnd = false; } else { // the potential title we found is not at the line end, // but it could still be a legal link reference if we // discard the title title = ""; // rewind before spaces this.pos = beforetitle; // and instead check if the link URL is at the line end atLineEnd = this.match(reSpaceAtEndOfLine) !== null; } } if (!atLineEnd) { this.pos = startpos; return 0; } var normlabel = normalizeReference(rawlabel); if (normlabel === "") { // label must contain non-whitespace characters this.pos = startpos; return 0; } if (!refmap[normlabel]) { refmap[normlabel] = { destination: dest, title: title }; } return this.pos - startpos; }; // Parse the next inline element in subject, advancing subject position. // On success, add the result to block's children and return true. // On failure, return false. var parseInline = function(block) { var res = false; var c = this.peek(); if (c === -1) { return false; } switch (c) { case C_NEWLINE: res = this.parseNewline(block); break; case C_BACKSLASH$1: res = this.parseBackslash(block); break; case C_BACKTICK: res = this.parseBackticks(block); break; case C_ASTERISK: case C_UNDERSCORE: res = this.handleDelim(c, block); break; case C_SINGLEQUOTE: case C_DOUBLEQUOTE: res = this.options.smart && this.handleDelim(c, block); break; case C_OPEN_BRACKET: res = this.parseOpenBracket(block); break; case C_BANG: res = this.parseBang(block); break; case C_CLOSE_BRACKET: res = this.parseCloseBracket(block); break; case C_LESSTHAN: res = this.parseAutolink(block) || this.parseHtmlTag(block); break; case C_AMPERSAND: res = this.parseEntity(block); break; default: res = this.parseString(block); break; } if (!res) { this.pos += 1; block.appendChild(text(fromCodePoint(c))); } return true; }; // Parse string content in block into inline children, // using refmap to resolve references. var parseInlines = function(block) { this.subject = block._string_content.trim(); this.pos = 0; this.delimiters = null; this.brackets = null; while (this.parseInline(block)) {} block._string_content = null; // allow raw string to be garbage collected this.processEmphasis(null); }; // The InlineParser object. function InlineParser(options) { return { subject: "", delimiters: null, // used by handleDelim method brackets: null, pos: 0, refmap: {}, match: match, peek: peek, spnl: spnl, parseBackticks: parseBackticks, parseBackslash: parseBackslash, parseAutolink: parseAutolink, parseHtmlTag: parseHtmlTag, scanDelims: scanDelims, handleDelim: handleDelim, parseLinkTitle: parseLinkTitle, parseLinkDestination: parseLinkDestination, parseLinkLabel: parseLinkLabel, parseOpenBracket: parseOpenBracket, parseBang: parseBang, parseCloseBracket: parseCloseBracket, addBracket: addBracket, removeBracket: removeBracket, parseEntity: parseEntity, parseString: parseString, parseNewline: parseNewline, parseReference: parseReference, parseInline: parseInline, processEmphasis: processEmphasis, removeDelimiter: removeDelimiter, options: options || {}, parse: parseInlines }; } var CODE_INDENT = 4; var C_TAB = 9; var C_NEWLINE$1 = 10; var C_GREATERTHAN = 62; var C_LESSTHAN$1 = 60; var C_SPACE = 32; var C_OPEN_BRACKET$1 = 91; var reHtmlBlockOpen = [ /./, // dummy for 0 /^<(?:script|pre|textarea|style)(?:\s|>|$)/i, /^/, /\?>/, />/, /\]\]>/ ]; var reThematicBreak = /^(?:\*[ \t]*){3,}$|^(?:_[ \t]*){3,}$|^(?:-[ \t]*){3,}$/; var reMaybeSpecial = /^[#`~*+_=<>0-9-]/; var reNonSpace = /[^ \t\f\v\r\n]/; var reBulletListMarker = /^[*+-]/; var reOrderedListMarker = /^(\d{1,9})([.)])/; var reATXHeadingMarker = /^#{1,6}(?:[ \t]+|$)/; var reCodeFence = /^`{3,}(?!.*`)|^~{3,}/; var reClosingCodeFence = /^(?:`{3,}|~{3,})(?= *$)/; var reSetextHeadingLine = /^(?:=+|-+)[ \t]*$/; var reLineEnding = /\r\n|\n|\r/; // Returns true if string contains only space characters. var isBlank = function(s) { return !reNonSpace.test(s); }; var isSpaceOrTab = function(c) { return c === C_SPACE || c === C_TAB; }; var peek$1 = function(ln, pos) { if (pos < ln.length) { return ln.charCodeAt(pos); } else { return -1; } }; // DOC PARSER // These are methods of a Parser object, defined below. // Returns true if block ends with a blank line, descending if needed // into lists and sublists. var endsWithBlankLine = function(block) { while (block) { if (block._lastLineBlank) { return true; } var t = block.type; if (!block._lastLineChecked && (t === "list" || t === "item")) { block._lastLineChecked = true; block = block._lastChild; } else { block._lastLineChecked = true; break; } } return false; }; // Add a line to the block at the tip. We assume the tip // can accept lines -- that check should be done before calling this. var addLine = function() { if (this.partiallyConsumedTab) { this.offset += 1; // skip over tab // add space characters: var charsToTab = 4 - (this.column % 4); this.tip._string_content += " ".repeat(charsToTab); } this.tip._string_content += this.currentLine.slice(this.offset) + "\n"; }; // Add block of type tag as a child of the tip. If the tip can't // accept children, close and finalize it and try its parent, // and so on til we find a block that can accept children. var addChild = function(tag, offset) { while (!this.blocks[this.tip.type].canContain(tag)) { this.finalize(this.tip, this.lineNumber - 1); } var column_number = offset + 1; // offset 0 = column 1 var newBlock = new Node(tag, [ [this.lineNumber, column_number], [0, 0] ]); newBlock._string_content = ""; this.tip.appendChild(newBlock); this.tip = newBlock; return newBlock; }; // Parse a list marker and return data on the marker (type, // start, delimiter, bullet character, padding) or null. var parseListMarker = function(parser, container) { var rest = parser.currentLine.slice(parser.nextNonspace); var match; var nextc; var spacesStartCol; var spacesStartOffset; var data = { type: null, tight: true, // lists are tight by default bulletChar: null, start: null, delimiter: null, padding: null, markerOffset: parser.indent }; if (parser.indent >= 4) { return null; } if ((match = rest.match(reBulletListMarker))) { data.type = "bullet"; data.bulletChar = match[0][0]; } else if ( (match = rest.match(reOrderedListMarker)) && (container.type !== "paragraph" || match[1] == 1) ) { data.type = "ordered"; data.start = parseInt(match[1]); data.delimiter = match[2]; } else { return null; } // make sure we have spaces after nextc = peek$1(parser.currentLine, parser.nextNonspace + match[0].length); if (!(nextc === -1 || nextc === C_TAB || nextc === C_SPACE)) { return null; } // if it interrupts paragraph, make sure first line isn't blank if ( container.type === "paragraph" && !parser.currentLine .slice(parser.nextNonspace + match[0].length) .match(reNonSpace) ) { return null; } // we've got a match! advance offset and calculate padding parser.advanceNextNonspace(); // to start of marker parser.advanceOffset(match[0].length, true); // to end of marker spacesStartCol = parser.column; spacesStartOffset = parser.offset; do { parser.advanceOffset(1, true); nextc = peek$1(parser.currentLine, parser.offset); } while (parser.column - spacesStartCol < 5 && isSpaceOrTab(nextc)); var blank_item = peek$1(parser.currentLine, parser.offset) === -1; var spaces_after_marker = parser.column - spacesStartCol; if (spaces_after_marker >= 5 || spaces_after_marker < 1 || blank_item) { data.padding = match[0].length + 1; parser.column = spacesStartCol; parser.offset = spacesStartOffset; if (isSpaceOrTab(peek$1(parser.currentLine, parser.offset))) { parser.advanceOffset(1, true); } } else { data.padding = match[0].length + spaces_after_marker; } return data; }; // Returns true if the two list items are of the same type, // with the same delimiter and bullet character. This is used // in agglomerating list items into lists. var listsMatch = function(list_data, item_data) { return ( list_data.type === item_data.type && list_data.delimiter === item_data.delimiter && list_data.bulletChar === item_data.bulletChar ); }; // Finalize and close any unmatched blocks. var closeUnmatchedBlocks = function() { if (!this.allClosed) { // finalize any blocks not matched while (this.oldtip !== this.lastMatchedContainer) { var parent = this.oldtip._parent; this.finalize(this.oldtip, this.lineNumber - 1); this.oldtip = parent; } this.allClosed = true; } }; // 'finalize' is run when the block is closed. // 'continue' is run to check whether the block is continuing // at a certain line and offset (e.g. whether a block quote // contains a `>`. It returns 0 for matched, 1 for not matched, // and 2 for "we've dealt with this line completely, go to next." var blocks = { document: { continue: function() { return 0; }, finalize: function() { return; }, canContain: function(t) { return t !== "item"; }, acceptsLines: false }, list: { continue: function() { return 0; }, finalize: function(parser, block) { var item = block._firstChild; while (item) { // check for non-final list item ending with blank line: if (endsWithBlankLine(item) && item._next) { block._listData.tight = false; break; } // recurse into children of list item, to see if there are // spaces between any of them: var subitem = item._firstChild; while (subitem) { if ( endsWithBlankLine(subitem) && (item._next || subitem._next) ) { block._listData.tight = false; break; } subitem = subitem._next; } item = item._next; } }, canContain: function(t) { return t === "item"; }, acceptsLines: false }, block_quote: { continue: function(parser) { var ln = parser.currentLine; if ( !parser.indented && peek$1(ln, parser.nextNonspace) === C_GREATERTHAN ) { parser.advanceNextNonspace(); parser.advanceOffset(1, false); if (isSpaceOrTab(peek$1(ln, parser.offset))) { parser.advanceOffset(1, true); } } else { return 1; } return 0; }, finalize: function() { return; }, canContain: function(t) { return t !== "item"; }, acceptsLines: false }, item: { continue: function(parser, container) { if (parser.blank) { if (container._firstChild == null) { // Blank line after empty list item return 1; } else { parser.advanceNextNonspace(); } } else if ( parser.indent >= container._listData.markerOffset + container._listData.padding ) { parser.advanceOffset( container._listData.markerOffset + container._listData.padding, true ); } else { return 1; } return 0; }, finalize: function() { return; }, canContain: function(t) { return t !== "item"; }, acceptsLines: false }, heading: { continue: function() { // a heading can never container > 1 line, so fail to match: return 1; }, finalize: function() { return; }, canContain: function() { return false; }, acceptsLines: false }, thematic_break: { continue: function() { // a thematic break can never container > 1 line, so fail to match: return 1; }, finalize: function() { return; }, canContain: function() { return false; }, acceptsLines: false }, code_block: { continue: function(parser, container) { var ln = parser.currentLine; var indent = parser.indent; if (container._isFenced) { // fenced var match = indent <= 3 && ln.charAt(parser.nextNonspace) === container._fenceChar && ln.slice(parser.nextNonspace).match(reClosingCodeFence); if (match && match[0].length >= container._fenceLength) { // closing fence - we're at end of line, so we can return parser.lastLineLength = parser.offset + indent + match[0].length; parser.finalize(container, parser.lineNumber); return 2; } else { // skip optional spaces of fence offset var i = container._fenceOffset; while (i > 0 && isSpaceOrTab(peek$1(ln, parser.offset))) { parser.advanceOffset(1, true); i--; } } } else { // indented if (indent >= CODE_INDENT) { parser.advanceOffset(CODE_INDENT, true); } else if (parser.blank) { parser.advanceNextNonspace(); } else { return 1; } } return 0; }, finalize: function(parser, block) { if (block._isFenced) { // fenced // first line becomes info string var content = block._string_content; var newlinePos = content.indexOf("\n"); var firstLine = content.slice(0, newlinePos); var rest = content.slice(newlinePos + 1); block.info = unescapeString(firstLine.trim()); block._literal = rest; } else { // indented block._literal = block._string_content.replace( /(\n *)+$/, "\n" ); } block._string_content = null; // allow GC }, canContain: function() { return false; }, acceptsLines: true }, html_block: { continue: function(parser, container) { return parser.blank && (container._htmlBlockType === 6 || container._htmlBlockType === 7) ? 1 : 0; }, finalize: function(parser, block) { block._literal = block._string_content.replace(/(\n *)+$/, ""); block._string_content = null; // allow GC }, canContain: function() { return false; }, acceptsLines: true }, paragraph: { continue: function(parser) { return parser.blank ? 1 : 0; }, finalize: function(parser, block) { var pos; var hasReferenceDefs = false; // try parsing the beginning as link reference definitions: while ( peek$1(block._string_content, 0) === C_OPEN_BRACKET$1 && (pos = parser.inlineParser.parseReference( block._string_content, parser.refmap )) ) { block._string_content = block._string_content.slice(pos); hasReferenceDefs = true; } if (hasReferenceDefs && isBlank(block._string_content)) { block.unlink(); } }, canContain: function() { return false; }, acceptsLines: true } }; // block start functions. Return values: // 0 = no match // 1 = matched container, keep going // 2 = matched leaf, no more block starts var blockStarts = [ // block quote function(parser) { if ( !parser.indented && peek$1(parser.currentLine, parser.nextNonspace) === C_GREATERTHAN ) { parser.advanceNextNonspace(); parser.advanceOffset(1, false); // optional following space if (isSpaceOrTab(peek$1(parser.currentLine, parser.offset))) { parser.advanceOffset(1, true); } parser.closeUnmatchedBlocks(); parser.addChild("block_quote", parser.nextNonspace); return 1; } else { return 0; } }, // ATX heading function(parser) { var match; if ( !parser.indented && (match = parser.currentLine .slice(parser.nextNonspace) .match(reATXHeadingMarker)) ) { parser.advanceNextNonspace(); parser.advanceOffset(match[0].length, false); parser.closeUnmatchedBlocks(); var container = parser.addChild("heading", parser.nextNonspace); container.level = match[0].trim().length; // number of #s // remove trailing ###s: container._string_content = parser.currentLine .slice(parser.offset) .replace(/^[ \t]*#+[ \t]*$/, "") .replace(/[ \t]+#+[ \t]*$/, ""); parser.advanceOffset(parser.currentLine.length - parser.offset); return 2; } else { return 0; } }, // Fenced code block function(parser) { var match; if ( !parser.indented && (match = parser.currentLine .slice(parser.nextNonspace) .match(reCodeFence)) ) { var fenceLength = match[0].length; parser.closeUnmatchedBlocks(); var container = parser.addChild("code_block", parser.nextNonspace); container._isFenced = true; container._fenceLength = fenceLength; container._fenceChar = match[0][0]; container._fenceOffset = parser.indent; parser.advanceNextNonspace(); parser.advanceOffset(fenceLength, false); return 2; } else { return 0; } }, // HTML block function(parser, container) { if ( !parser.indented && peek$1(parser.currentLine, parser.nextNonspace) === C_LESSTHAN$1 ) { var s = parser.currentLine.slice(parser.nextNonspace); var blockType; for (blockType = 1; blockType <= 7; blockType++) { if ( reHtmlBlockOpen[blockType].test(s) && (blockType < 7 || (container.type !== "paragraph" && !(!parser.allClosed && !parser.blank && parser.tip.type === "paragraph") // maybe lazy )) ) { parser.closeUnmatchedBlocks(); // We don't adjust parser.offset; // spaces are part of the HTML block: var b = parser.addChild("html_block", parser.offset); b._htmlBlockType = blockType; return 2; } } } return 0; }, // Setext heading function(parser, container) { var match; if ( !parser.indented && container.type === "paragraph" && (match = parser.currentLine .slice(parser.nextNonspace) .match(reSetextHeadingLine)) ) { parser.closeUnmatchedBlocks(); // resolve reference link definitiosn var pos; while ( peek$1(container._string_content, 0) === C_OPEN_BRACKET$1 && (pos = parser.inlineParser.parseReference( container._string_content, parser.refmap )) ) { container._string_content = container._string_content.slice( pos ); } if (container._string_content.length > 0) { var heading = new Node("heading", container.sourcepos); heading.level = match[0][0] === "=" ? 1 : 2; heading._string_content = container._string_content; container.insertAfter(heading); container.unlink(); parser.tip = heading; parser.advanceOffset( parser.currentLine.length - parser.offset, false ); return 2; } else { return 0; } } else { return 0; } }, // thematic break function(parser) { if ( !parser.indented && reThematicBreak.test(parser.currentLine.slice(parser.nextNonspace)) ) { parser.closeUnmatchedBlocks(); parser.addChild("thematic_break", parser.nextNonspace); parser.advanceOffset( parser.currentLine.length - parser.offset, false ); return 2; } else { return 0; } }, // list item function(parser, container) { var data; if ( (!parser.indented || container.type === "list") && (data = parseListMarker(parser, container)) ) { parser.closeUnmatchedBlocks(); // add the list if needed if ( parser.tip.type !== "list" || !listsMatch(container._listData, data) ) { container = parser.addChild("list", parser.nextNonspace); container._listData = data; } // add the list item container = parser.addChild("item", parser.nextNonspace); container._listData = data; return 1; } else { return 0; } }, // indented code block function(parser) { if ( parser.indented && parser.tip.type !== "paragraph" && !parser.blank ) { // indented code parser.advanceOffset(CODE_INDENT, true); parser.closeUnmatchedBlocks(); parser.addChild("code_block", parser.offset); return 2; } else { return 0; } } ]; var advanceOffset = function(count, columns) { var currentLine = this.currentLine; var charsToTab, charsToAdvance; var c; while (count > 0 && (c = currentLine[this.offset])) { if (c === "\t") { charsToTab = 4 - (this.column % 4); if (columns) { this.partiallyConsumedTab = charsToTab > count; charsToAdvance = charsToTab > count ? count : charsToTab; this.column += charsToAdvance; this.offset += this.partiallyConsumedTab ? 0 : 1; count -= charsToAdvance; } else { this.partiallyConsumedTab = false; this.column += charsToTab; this.offset += 1; count -= 1; } } else { this.partiallyConsumedTab = false; this.offset += 1; this.column += 1; // assume ascii; block starts are ascii count -= 1; } } }; var advanceNextNonspace = function() { this.offset = this.nextNonspace; this.column = this.nextNonspaceColumn; this.partiallyConsumedTab = false; }; var findNextNonspace = function() { var currentLine = this.currentLine; var i = this.offset; var cols = this.column; var c; while ((c = currentLine.charAt(i)) !== "") { if (c === " ") { i++; cols++; } else if (c === "\t") { i++; cols += 4 - (cols % 4); } else { break; } } this.blank = c === "\n" || c === "\r" || c === ""; this.nextNonspace = i; this.nextNonspaceColumn = cols; this.indent = this.nextNonspaceColumn - this.column; this.indented = this.indent >= CODE_INDENT; }; // Analyze a line of text and update the document appropriately. // We parse markdown text by calling this on each line of input, // then finalizing the document. var incorporateLine = function(ln) { var all_matched = true; var t; var container = this.doc; this.oldtip = this.tip; this.offset = 0; this.column = 0; this.blank = false; this.partiallyConsumedTab = false; this.lineNumber += 1; // replace NUL characters for security if (ln.indexOf("\u0000") !== -1) { ln = ln.replace(/\0/g, "\uFFFD"); } this.currentLine = ln; // For each containing block, try to parse the associated line start. // Bail out on failure: container will point to the last matching block. // Set all_matched to false if not all containers match. var lastChild; while ((lastChild = container._lastChild) && lastChild._open) { container = lastChild; this.findNextNonspace(); switch (this.blocks[container.type].continue(this, container)) { case 0: // we've matched, keep going break; case 1: // we've failed to match a block all_matched = false; break; case 2: // we've hit end of line for fenced code close and can return return; default: throw "continue returned illegal value, must be 0, 1, or 2"; } if (!all_matched) { container = container._parent; // back up to last matching block break; } } this.allClosed = container === this.oldtip; this.lastMatchedContainer = container; var matchedLeaf = container.type !== "paragraph" && blocks[container.type].acceptsLines; var starts = this.blockStarts; var startsLen = starts.length; // Unless last matched container is a code block, try new container starts, // adding children to the last matched container: while (!matchedLeaf) { this.findNextNonspace(); // this is a little performance optimization: if ( !this.indented && !reMaybeSpecial.test(ln.slice(this.nextNonspace)) ) { this.advanceNextNonspace(); break; } var i = 0; while (i < startsLen) { var res = starts[i](this, container); if (res === 1) { container = this.tip; break; } else if (res === 2) { container = this.tip; matchedLeaf = true; break; } else { i++; } } if (i === startsLen) { // nothing matched this.advanceNextNonspace(); break; } } // What remains at the offset is a text line. Add the text to the // appropriate container. // First check for a lazy paragraph continuation: if (!this.allClosed && !this.blank && this.tip.type === "paragraph") { // lazy paragraph continuation this.addLine(); } else { // not a lazy continuation // finalize any blocks not matched this.closeUnmatchedBlocks(); if (this.blank && container.lastChild) { container.lastChild._lastLineBlank = true; } t = container.type; // Block quote lines are never blank as they start with > // and we don't count blanks in fenced code for purposes of tight/loose // lists or breaking out of lists. We also don't set _lastLineBlank // on an empty list item, or if we just closed a fenced block. var lastLineBlank = this.blank && !( t === "block_quote" || (t === "code_block" && container._isFenced) || (t === "item" && !container._firstChild && container.sourcepos[0][0] === this.lineNumber) ); // propagate lastLineBlank up through parents: var cont = container; while (cont) { cont._lastLineBlank = lastLineBlank; cont = cont._parent; } if (this.blocks[t].acceptsLines) { this.addLine(); // if HtmlBlock, check for end condition if ( t === "html_block" && container._htmlBlockType >= 1 && container._htmlBlockType <= 5 && reHtmlBlockClose[container._htmlBlockType].test( this.currentLine.slice(this.offset) ) ) { this.lastLineLength = ln.length; this.finalize(container, this.lineNumber); } } else if (this.offset < ln.length && !this.blank) { // create paragraph container for line container = this.addChild("paragraph", this.offset); this.advanceNextNonspace(); this.addLine(); } } this.lastLineLength = ln.length; }; // Finalize a block. Close it and do any necessary postprocessing, // e.g. creating string_content from strings, setting the 'tight' // or 'loose' status of a list, and parsing the beginnings // of paragraphs for reference definitions. Reset the tip to the // parent of the closed block. var finalize = function(block, lineNumber) { var above = block._parent; block._open = false; block.sourcepos[1] = [lineNumber, this.lastLineLength]; this.blocks[block.type].finalize(this, block); this.tip = above; }; // Walk through a block & children recursively, parsing string content // into inline content where appropriate. var processInlines = function(block) { var node, event, t; var walker = block.walker(); this.inlineParser.refmap = this.refmap; this.inlineParser.options = this.options; while ((event = walker.next())) { node = event.node; t = node.type; if (!event.entering && (t === "paragraph" || t === "heading")) { this.inlineParser.parse(node); } } }; var Document = function() { var doc = new Node("document", [ [1, 1], [0, 0] ]); return doc; }; // The main parsing function. Returns a parsed document AST. var parse = function(input) { this.doc = new Document(); this.tip = this.doc; this.refmap = {}; this.lineNumber = 0; this.lastLineLength = 0; this.offset = 0; this.column = 0; this.lastMatchedContainer = this.doc; this.currentLine = ""; if (this.options.time) { console.time("preparing input"); } var lines = input.split(reLineEnding); var len = lines.length; if (input.charCodeAt(input.length - 1) === C_NEWLINE$1) { // ignore last blank line created by final newline len -= 1; } if (this.options.time) { console.timeEnd("preparing input"); } if (this.options.time) { console.time("block parsing"); } for (var i = 0; i < len; i++) { this.incorporateLine(lines[i]); } while (this.tip) { this.finalize(this.tip, len); } if (this.options.time) { console.timeEnd("block parsing"); } if (this.options.time) { console.time("inline parsing"); } this.processInlines(this.doc); if (this.options.time) { console.timeEnd("inline parsing"); } return this.doc; }; // The Parser object. function Parser(options) { return { doc: new Document(), blocks: blocks, blockStarts: blockStarts, tip: this.doc, oldtip: this.doc, currentLine: "", lineNumber: 0, offset: 0, column: 0, nextNonspace: 0, nextNonspaceColumn: 0, indent: 0, indented: false, blank: false, partiallyConsumedTab: false, allClosed: true, lastMatchedContainer: this.doc, refmap: {}, lastLineLength: 0, inlineParser: new InlineParser(options), findNextNonspace: findNextNonspace, advanceOffset: advanceOffset, advanceNextNonspace: advanceNextNonspace, addLine: addLine, addChild: addChild, incorporateLine: incorporateLine, finalize: finalize, processInlines: processInlines, closeUnmatchedBlocks: closeUnmatchedBlocks, parse: parse, options: options || {} }; } function Renderer() {} /** * Walks the AST and calls member methods for each Node type. * * @param ast {Node} The root of the abstract syntax tree. */ function render(ast) { var walker = ast.walker(), event, type; this.buffer = ""; this.lastOut = "\n"; this.heading_count = 0; while ((event = walker.next())) { type = event.node.type; if (this[type]) { this[type](event.node, event.entering); } } return this.buffer; } /** * Concatenate a literal string to the buffer. * * @param str {String} The string to concatenate. */ function lit(str) { this.buffer += str; this.lastOut = str; } /** * Output a newline to the buffer. */ function cr() { if (this.lastOut !== "\n") { this.lit("\n"); } } /** * Concatenate a string to the buffer possibly escaping the content. * * Concrete renderer implementations should override this method. * * @param str {String} The string to concatenate. */ function out(str) { this.lit(str); } /** * Escape a string for the target renderer. * * Abstract function that should be implemented by concrete * renderer implementations. * * @param str {String} The string to escape. */ function esc(str) { return str; } Renderer.prototype.render = render; Renderer.prototype.out = out; Renderer.prototype.lit = lit; Renderer.prototype.cr = cr; Renderer.prototype.esc = esc; var reUnsafeProtocol = /^javascript:|vbscript:|file:|data:/i; var reSafeDataProtocol = /^data:image\/(?:png|gif|jpeg|webp)/i; var potentiallyUnsafe = function(url) { return reUnsafeProtocol.test(url) && !reSafeDataProtocol.test(url); }; // Helper function to produce an HTML tag. function tag(name, attrs, selfclosing) { if (this.disableTags > 0) { return; } this.buffer += "<" + name; if (attrs && attrs.length > 0) { var i = 0; var attrib; while ((attrib = attrs[i]) !== undefined) { this.buffer += " " + attrib[0] + '="' + attrib[1] + '"'; i++; } } if (selfclosing) { this.buffer += " /"; } this.buffer += ">"; this.lastOut = ">"; } function HtmlRenderer(options) { options = options || {}; // by default, soft breaks are rendered as newlines in HTML options.softbreak = options.softbreak || "\n"; // set to "
" to make them hard breaks // set to " " if you want to ignore line wrapping in source this.esc = options.esc || escapeXml; // escape html with a custom function // else use escapeXml this.disableTags = 0; this.lastOut = "\n"; this.options = options; } /* Node methods */ function text$1(node) { this.out(node.literal); } function softbreak() { this.lit(this.options.softbreak); } function linebreak() { this.tag("br", [], true); this.cr(); } function link(node, entering) { var attrs = this.attrs(node); if (entering) { if (!(this.options.safe && potentiallyUnsafe(node.destination))) { attrs.push(["href", this.esc(node.destination)]); } if (node.title) { attrs.push(["title", this.esc(node.title)]); } this.tag("a", attrs); } else { this.tag("/a"); } } function image$1(node, entering) { if (entering) { if (this.disableTags === 0) { if (this.options.safe && potentiallyUnsafe(node.destination)) { this.lit('');
                } else {
                    this.lit('<img src='); } } } function emph(node, entering) { this.tag(entering ? "em" : "/em"); } function strong(node, entering) { this.tag(entering ? "strong" : "/strong"); } function paragraph(node, entering) { var grandparent = node.parent.parent, attrs = this.attrs(node); if (grandparent !== null && grandparent.type === "list") { if (grandparent.listTight) { return; } } if (entering) { this.cr(); this.tag("p", attrs); } else { this.tag("/p"); this.cr(); } } function heading(node, entering) { var tagname = "h" + node.level, attrs = this.attrs(node); if (entering) { if (node.level != 1) { attrs.push(["id", ":" + this.heading_count]); this.heading_count += 1; } this.cr(); this.tag(tagname, attrs); } else { this.tag("/" + tagname); this.cr(); } } function code(node) { this.tag("code"); this.out(node.literal); this.tag("/code"); } function code_block(node) { var info_words = node.info ? node.info.split(/\s+/) : [], attrs = this.attrs(node); if (info_words.length > 0 && info_words[0].length > 0) { attrs.push(["class", "language-" + this.esc(info_words[0])]); } this.cr(); this.tag("pre"); this.tag("code", attrs); this.out(node.literal); this.tag("/code"); this.tag("/pre"); this.cr(); } function thematic_break(node) { var attrs = this.attrs(node); this.cr(); this.tag("hr", attrs, true); this.cr(); } function block_quote(node, entering) { var attrs = this.attrs(node); if (entering) { this.cr(); this.tag("blockquote", attrs); this.cr(); } else { this.cr(); this.tag("/blockquote"); this.cr(); } } function list(node, entering) { var tagname = node.listType === "bullet" ? "ul" : "ol", attrs = this.attrs(node); if (entering) { var start = node.listStart; if (start !== null && start !== 1) { attrs.push(["start", start.toString()]); } this.cr(); this.tag(tagname, attrs); this.cr(); } else { this.cr(); this.tag("/" + tagname); this.cr(); } } function item(node, entering) { var attrs = this.attrs(node); if (entering) { this.tag("li", attrs); } else { this.tag("/li"); this.cr(); } } function html_inline(node) { if (this.options.safe) { this.lit(""); } else { this.lit(node.literal); } } function html_block(node) { this.cr(); if (this.options.safe) { this.lit(""); } else { this.lit(node.literal); } this.cr(); } function custom_inline(node, entering) { if (entering && node.onEnter) { this.lit(node.onEnter); } else if (!entering && node.onExit) { this.lit(node.onExit); } } function custom_block(node, entering) { this.cr(); if (entering && node.onEnter) { this.lit(node.onEnter); } else if (!entering && node.onExit) { this.lit(node.onExit); } this.cr(); } /* Helper methods */ function out$1(s) { this.lit(this.esc(s)); } function attrs(node) { var att = []; if (this.options.sourcepos) { var pos = node.sourcepos; if (pos) { att.push([ "data-sourcepos", String(pos[0][0]) + ":" + String(pos[0][1]) + "-" + String(pos[1][0]) + ":" + String(pos[1][1]) ]); } } return att; } // quick browser-compatible inheritance HtmlRenderer.prototype = Object.create(Renderer.prototype); HtmlRenderer.prototype.text = text$1; HtmlRenderer.prototype.html_inline = html_inline; HtmlRenderer.prototype.html_block = html_block; HtmlRenderer.prototype.softbreak = softbreak; HtmlRenderer.prototype.linebreak = linebreak; HtmlRenderer.prototype.link = link; HtmlRenderer.prototype.image = image$1; HtmlRenderer.prototype.emph = emph; HtmlRenderer.prototype.strong = strong; HtmlRenderer.prototype.paragraph = paragraph; HtmlRenderer.prototype.heading = heading; HtmlRenderer.prototype.code = code; HtmlRenderer.prototype.code_block = code_block; HtmlRenderer.prototype.thematic_break = thematic_break; HtmlRenderer.prototype.block_quote = block_quote; HtmlRenderer.prototype.list = list; HtmlRenderer.prototype.item = item; HtmlRenderer.prototype.custom_inline = custom_inline; HtmlRenderer.prototype.custom_block = custom_block; HtmlRenderer.prototype.esc = escapeXml; HtmlRenderer.prototype.out = out$1; HtmlRenderer.prototype.tag = tag; HtmlRenderer.prototype.attrs = attrs; var reXMLTag = /\<[^>]*\>/; function toTagName(s) { return s.replace(/([a-z])([A-Z])/g, "$1_$2").toLowerCase(); } function XmlRenderer(options) { options = options || {}; this.disableTags = 0; this.lastOut = "\n"; this.indentLevel = 0; this.indent = " "; this.esc = options.esc || escapeXml; // escape html with a custom function // else use escapeXml this.options = options; } function render$1(ast) { this.buffer = ""; var attrs; var tagname; var walker = ast.walker(); var event, node, entering; var container; var selfClosing; var nodetype; var options = this.options; if (options.time) { console.time("rendering"); } this.buffer += '\n'; this.buffer += '\n'; while ((event = walker.next())) { entering = event.entering; node = event.node; nodetype = node.type; container = node.isContainer; selfClosing = nodetype === "thematic_break" || nodetype === "linebreak" || nodetype === "softbreak"; tagname = toTagName(nodetype); if (entering) { attrs = []; switch (nodetype) { case "document": attrs.push(["xmlns", "http://commonmark.org/xml/1.0"]); break; case "list": if (node.listType !== null) { attrs.push(["type", node.listType.toLowerCase()]); } if (node.listStart !== null) { attrs.push(["start", String(node.listStart)]); } if (node.listTight !== null) { attrs.push([ "tight", node.listTight ? "true" : "false" ]); } var delim = node.listDelimiter; if (delim !== null) { var delimword = ""; if (delim === ".") { delimword = "period"; } else { delimword = "paren"; } attrs.push(["delimiter", delimword]); } break; case "code_block": if (node.info) { attrs.push(["info", node.info]); } break; case "heading": attrs.push(["level", String(node.level)]); break; case "link": case "image": attrs.push(["destination", node.destination]); attrs.push(["title", node.title]); break; case "custom_inline": case "custom_block": attrs.push(["on_enter", node.onEnter]); attrs.push(["on_exit", node.onExit]); break; } if (options.sourcepos) { var pos = node.sourcepos; if (pos) { attrs.push([ "sourcepos", String(pos[0][0]) + ":" + String(pos[0][1]) + "-" + String(pos[1][0]) + ":" + String(pos[1][1]) ]); } } this.cr(); this.out(this.tag(tagname, attrs, selfClosing)); if (container) { this.indentLevel += 1; } else if (!container && !selfClosing) { var lit = node.literal; if (lit) { this.out(this.esc(lit)); } this.out(this.tag("/" + tagname)); } } else { this.indentLevel -= 1; this.cr(); this.out(this.tag("/" + tagname)); } } if (options.time) { console.timeEnd("rendering"); } this.buffer += "\n"; return this.buffer; } function out$2(s) { if (this.disableTags > 0) { this.buffer += s.replace(reXMLTag, ""); } else { this.buffer += s; } this.lastOut = s; } function cr$1() { if (this.lastOut !== "\n") { this.buffer += "\n"; this.lastOut = "\n"; for (var i = this.indentLevel; i > 0; i--) { this.buffer += this.indent; } } } // Helper function to produce an XML tag. function tag$1(name, attrs, selfclosing) { var result = "<" + name; if (attrs && attrs.length > 0) { var i = 0; var attrib; while ((attrib = attrs[i]) !== undefined) { result += " " + attrib[0] + '="' + this.esc(attrib[1]) + '"'; i++; } } if (selfclosing) { result += " /"; } result += ">"; return result; } // quick browser-compatible inheritance XmlRenderer.prototype = Object.create(Renderer.prototype); XmlRenderer.prototype.render = render$1; XmlRenderer.prototype.out = out$2; XmlRenderer.prototype.cr = cr$1; XmlRenderer.prototype.tag = tag$1; XmlRenderer.prototype.esc = escapeXml; exports.HtmlRenderer = HtmlRenderer; exports.Node = Node; exports.Parser = Parser; exports.Renderer = Renderer; exports.XmlRenderer = XmlRenderer; Object.defineProperty(exports, '__esModule', { value: true }); })));