MacroName LineComment BlockComment PreprocDirective #include String EscapeSequence SystemLibString Identifier ArgumentList ( ConditionalExpression AssignmentExpression CallExpression PrimitiveType FieldExpression FieldIdentifier DestructorName TemplateMethod ScopedFieldIdentifier NamespaceIdentifier TemplateType TypeIdentifier ScopedTypeIdentifier ScopedNamespaceIdentifier :: NamespaceIdentifier TypeIdentifier TemplateArgumentList < TypeDescriptor const volatile restrict _Atomic mutable constexpr StructSpecifier struct MsDeclspecModifier __declspec ) VirtualSpecifier BaseClassClause Access , FieldDeclarationList { FieldDeclaration Attribute AttributeName Identifier AttributeArgs } [ ] UpdateOp ArithOp ArithOp ArithOp LogicOp BitOp BitOp BitOp CompareOp CompareOp CompareOp > CompareOp BitOp UpdateOp Number RawString CharLiteral AttributeArgs virtual extern static register inline AttributeSpecifier __attribute__ PointerDeclarator MsBasedModifier __based MsPointerModifier FunctionDeclarator ParameterList ParameterDeclaration PointerDeclarator FunctionDeclarator Noexcept noexcept ThrowSpecifier throw TrailingReturnType AbstractPointerDeclarator AbstractFunctionDeclarator AbstractArrayDeclarator AbstractParenthesizedDeclarator AbstractReferenceDeclarator ArrayDeclarator ParenthesizedDeclarator ReferenceDeclarator ScopedIdentifier Identifier OperatorName TemplateFunction StructuredBindingDeclarator OptionalParameterDeclaration VariadicParameterDeclaration VariadicDeclarator ReferenceDeclarator ArrayDeclarator ParenthesizedDeclarator ReferenceDeclarator BitfieldClause InitializerList InitializerPair SubscriptDesignator FieldDesignator TemplateDeclaration template TemplateParameterList TypeParameterDeclaration typename class OptionalTypeParameterDeclaration VariadicTypeParameterDeclaration TemplateTemplateParameterDeclaration AliasDeclaration using Declaration InitDeclarator FunctionDefinition MsCallModifier CompoundStatement LinkageSpecification DeclarationList CaseStatement case default LabeledStatement StatementIdentifier ExpressionStatement CommaExpression IfStatement if ConditionClause Declaration else SwitchStatement switch DoStatement do while ParenthesizedExpression WhileStatement ForStatement for ReturnStatement return BreakStatement break ContinueStatement continue GotoStatement goto TypeDefinition typedef PointerDeclarator FunctionDeclarator ArrayDeclarator ParenthesizedDeclarator ForRangeLoop TryStatement try CatchClause catch ThrowStatement NamespaceDefinition namespace UsingDeclaration StaticAssertDeclaration static_assert ConcatenatedString TemplateInstantiation FunctionDefinition ExplicitFunctionSpecifier explicit FieldInitializerList FieldInitializer DefaultMethodClause DeleteMethodClause delete FunctionDefinition OperatorCast operator operator Declaration FunctionDefinition FunctionDefinition FunctionDefinition FunctionDefinition Declaration FunctionDefinition Declaration FriendDeclaration friend union AccessSpecifier UnionSpecifier EnumSpecifier enum SizedTypeSpecifier TypeSize EnumeratorList Enumerator ClassSpecifier DependentType Decltype decltype auto ParameterPackExpansion ParameterPackExpansion FieldIdentifier PointerExpression SubscriptExpression BinaryExpression ArithOp LogicOp BitOp UnaryExpression LogicOp BitOp UpdateExpression CastExpression SizeofExpression sizeof CompoundLiteralExpression True False NULL NewExpression new new NewDeclarator DeleteExpression delete LambdaExpression LambdaCaptureSpecifier ParameterPackExpansion nullptr this #define PreprocArg #if #ifdef #ifndef #else #endif #elif PreprocDirectiveName Macro Program',
maxTerm: 377,
nodeProps: [
[
NodeProp.group,
-30,
7,
10,
13,
14,
15,
17,
73,
74,
75,
106,
109,
158,
187,
228,
229,
230,
234,
237,
238,
239,
241,
242,
243,
244,
245,
249,
251,
253,
254,
255,
'Expression',
-12,
16,
23,
24,
25,
39,
213,
214,
216,
220,
221,
222,
224,
'Type',
-16,
138,
141,
144,
146,
148,
153,
155,
159,
160,
162,
164,
166,
168,
176,
177,
181,
'Statement'
]
],
skippedNodes: [0, 2, 3, 4, 5, 6, 9, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 303],
repeatNodeCount: 37,
tokenData:
"':`&iR!UOX$eXY'mYZ,iZ]$e]^)k^p$epq'mqr-Prs.ost/^tu$euv!/wvw!1gwx!3Yxy!3wyz!4lz{!5a{|!6[|}!8Q}!O!8u!O!P!:n!P!Q##Y!Q!R#4m!R![$6p![!]%Ki!]!^%MX!^!_%M|!_!`&*k!`!a&+f!a!b&.S!b!c$e!c!n&.w!n!o&0Y!o!w&.w!w!x&2s!x!}&.w!}#O&4U#O#P&5q#P#Q&Ep#Q#R&G]#R#S&.w#S#T$e#T#c&.w#c#d&HW#d#i&.w#i#j'0Z#j#o&.w#o#p'3T#p#q'3x#q#r'5n#r#s'6c#s~$e!l$nW(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e!j%_U(aW&k!bOY%WZw%Wwx%qx#O%W#O#P&S#P~%W!b%vS&k!bOY%qZ#O%q#O#P&S#P~%q!b&XV&k!bOY%qYZ%qZ]%q]^&n^#O%q#O#P&S#P~%q!b&sT&k!bOY%qYZ%qZ#O%q#O#P&S#P~%q!d'ZU'tQ&k!bOY'SZr'Srs%qs#O'S#O#P&S#P~'S&i'z^(aW'tQ'r$Z&k!b)X#SOX$eXY'mYZ(vZ]$e]^)k^p$epq'mqr$ers%Wsw$ewx'Sx#O$e#O#P*r#P~$e$Z({T'r$ZXY(vYZ(v]^(vpq(v#O#P)[$Z)_QYZ(v]^)e$Z)hPYZ(v%w)v^(aW'tQ'r$Z&k!bOX$eXY)kYZ(vZ]$e]^)k^p$epq)kqr$ers%Wsw$ewx'Sx#O$e#O#P*r#P~$e%m*wV&k!bOY%qYZ+^Z]%q]^,T^#O%q#O#P&S#P~%q%m+eY'r$Z&k!bOX%qXY+^YZ(vZ]%q]^+^^p%qpq+^q#O%q#O#P*r#P~%q%m,YT&k!bOY%qYZ+^Z#O%q#O#P&S#P~%q${,pT)Up'r$ZXY(vYZ(v]^(vpq(v#O#P)[%s-[Y&TP(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`-z!`#O$e#O#P&S#P~$e%s.VW!d$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e&e.zU(aW'uQ's$w&k!bOY%WZw%Wwx%qx#O%W#O#P&S#P~%W%w/gd(aW'tQ&k!bOX$eXY/^Zp$epq/^qr$ers%Wsw$ewx'Sx!c$e!c!}0u!}#O$e#O#P&S#P#T$e#T#W0u#W#X2S#X#Y:f#Y#]0u#]#^Hl#^#o0u#o~$e%w1Q`(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%w2_b(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#X0u#X#Y3g#Y#o0u#o~$e%w3rb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#Y0u#Y#Z4z#Z#o0u#o~$e%w5Vb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#]0u#]#^6_#^#o0u#o~$e%w6jb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#b0u#b#c7r#c#o0u#o~$e%w7}b(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#X0u#X#Y9V#Y#o0u#o~$e%w9d`(aW'tQ&j$Z&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%w:qd(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#`0u#`#a}#Z#o0u#o~$e%w?[`(aW'tQ&k!b&q$Z&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%w@ib(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#X0u#X#YAq#Y#o0u#o~$e%wBO`(aW'tQ&k!b&o$Z&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%wC]b(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#W0u#W#XDe#X#o0u#o~$e%wDpb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#]0u#]#^Ex#^#o0u#o~$e%wFTb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#Y0u#Y#ZG]#Z#o0u#o~$e%wGj`(aW'tQ&k!b&p$Z&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%wHwd(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#Y0u#Y#ZJV#Z#b0u#b#c!'e#c#o0u#o~$e%wJdd(aW'tQ&l$Z&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#W0u#W#XKr#X#b0u#b#c! y#c#o0u#o~$e%wK}b(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#X0u#X#YMV#Y#o0u#o~$e%wMbb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#Y0u#Y#ZNj#Z#o0u#o~$e%wNw`(aW'tQ&m$Z&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%w!!Ub(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#W0u#W#X!#^#X#o0u#o~$e%w!#ib(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#X0u#X#Y!$q#Y#o0u#o~$e%w!$|b(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#Y0u#Y#Z!&U#Z#o0u#o~$e%w!&c`(aW'tQ&n$Z&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%w!'pb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#V0u#V#W!(x#W#o0u#o~$e%w!)Tb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#`0u#`#a!*]#a#o0u#o~$e%w!*hb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#i0u#i#j!+p#j#o0u#o~$e%w!+{b(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#W0u#W#X!-T#X#o0u#o~$e%w!-`b(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#X0u#X#Y!.h#Y#o0u#o~$e%w!.u`(aW'tQU$Z&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%s!0SY(aW'tQ!_$V&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`!0r!`#O$e#O#P&S#P~$e%s!0}W!j$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s!1rZ(^$V(aW'tQ&k!bOY$eZr$ers%Wsv$evw!2ewx'Sx!_$e!_!`!0r!`#O$e#O#P&S#P~$e%s!2pW(]$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%o!3eU(bS'tQ(`$V&k!bOY'SZr'Srs%qs#O'S#O#P&S#P~'S&i!4SW(aW'tQ[&_&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e!}!4wW{a(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s!5lY(Z$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`!0r!`#O$e#O#P&S#P~$e%s!6g[(aW'tQ!]$V&k!bOY$eZr$ers%Wsw$ewx'Sx{$e{|!7]|!_$e!_!`!0r!`#O$e#O#P&S#P~$e%s!7hW(aW![$V'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%w!8]W!P$Z(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s!9Q](aW'tQ!]$V&k!bOY$eZr$ers%Wsw$ewx'Sx}$e}!O!7]!O!_$e!_!`!0r!`!a!9y!a#O$e#O#P&S#P~$e%s!:UW'|$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%w!:y[(aW'tQ'{$V&k!bOY$eZr$ers%Wsw$ewx'Sx!O$e!O!P!;o!P!Q$e!Q![!=]![#O$e#O#P&S#P~$e%w!;xY(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!O$e!O!P!Sx!Q'S!Q![#;{![!c'S!c!g#;{!g!h$$Y!h!i#;{!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#;{#X#Y$$Y#Y#Z#;{#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k#>Z['tQ&k!bOY'SZr'Srs%qs!Q'S!Q![#?P![!c'S!c!i#?P!i#O'S#O#P&S#P#T'S#T#Z#?P#Z~'S%k#?Yn'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#>Sx!Q'S!Q![#?P![!c'S!c!g#?P!g!h#AW!h!i#?P!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#?P#X#Y#AW#Y#Z#?P#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k#Aar'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#>Sx{'S{|!C{|!Q'S!Q![#Ck![!c'S!c!g#Ck!g!h$ u!h!i#Ck!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#Ck#X#Y$ u#Y#Z#Ck#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k#Ctn'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx!Q'S!Q![#Ck![!c'S!c!g#Ck!g!h$ u!h!i#Ck!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#Ck#X#Y$ u#Y#Z#Ck#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k#Ey['tQ&k!bOY'SZr'Srs%qs!Q'S!Q![#Fo![!c'S!c!i#Fo!i#O'S#O#P&S#P#T'S#T#Z#Fo#Z~'S%k#Fxn'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx!Q'S!Q![#Fo![!c'S!c!g#Fo!g!h#Hv!h!i#Fo!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#Fo#X#Y#Hv#Y#Z#Fo#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k#IPr'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx{'S{|!C{|!Q'S!Q![#KZ![!c'S!c!g#KZ!g!h#Mb!h!i#KZ!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#KZ#X#Y#Mb#Y#Z#KZ#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k#Kdn'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx!Q'S!Q![#KZ![!c'S!c!g#KZ!g!h#Mb!h!i#KZ!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#KZ#X#Y#Mb#Y#Z#KZ#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k#Mkr'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx{'S{|!C{|!Q'S!Q![#KZ![!c'S!c!g#KZ!g!h#Mb!h!i#KZ!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#KZ#X#Y#Mb#Y#Z#KZ#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k$!Or'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx{'S{|!C{|!Q'S!Q![#Ck![!c'S!c!g#Ck!g!h$ u!h!i#Ck!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#Ck#X#Y$ u#Y#Z#Ck#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k$$cr'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#>Sx{'S{|!C{|!Q'S!Q![$&m![!c'S!c!g$&m!g!h$(t!h!i$&m!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X$&m#X#Y$(t#Y#Z$&m#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k$&vn'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx!Q'S!Q![$&m![!c'S!c!g$&m!g!h$(t!h!i$&m!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X$&m#X#Y$(t#Y#Z$&m#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k$(}r'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx{'S{|!C{|!Q'S!Q![$&m![!c'S!c!g$&m!g!h$(t!h!i$&m!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X$&m#X#Y$(t#Y#Z$&m#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%s$+dn(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![$-b![!c$e!c!g$-b!g!h$/k!h!i$-b!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$-b#X#Y$/k#Y#Z$-b#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%s$-mn(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx#>Sx!Q$e!Q![$-b![!c$e!c!g$-b!g!h$/k!h!i$-b!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$-b#X#Y$/k#Y#Z$-b#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%s$/vr(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx#>Sx{$e{|!Ls|!Q$e!Q![$2Q![!c$e!c!g$2Q!g!h$4Z!h!i$2Q!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$2Q#X#Y$4Z#Y#Z$2Q#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j?Ar$e?Ar?As!Ls?As~$e%s$2]n(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx#Erx!Q$e!QPt'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx%%lx{'S{|!C{|!O'S!O!P#9z!P!Q'S!Q![%+a![!c'S!c!g%+a!g!h%-n!h!i%+a!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X%+a#X#Y%-n#Y#Z%+a#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k%+jp'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx%%lx!O'S!O!P#9z!P!Q'S!Q![%+a![!c'S!c!g%+a!g!h%-n!h!i%+a!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X%+a#X#Y%-n#Y#Z%+a#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k%-wt'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx%%lx{'S{|!C{|!O'S!O!P#9z!P!Q'S!Q![%+a![!c'S!c!g%+a!g!h%-n!h!i%+a!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X%+a#X#Y%-n#Y#Z%+a#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k%0bt'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx%%lx{'S{|!C{|!O'S!O!P#9z!P!Q'S!Q![%#_![!c'S!c!g%#_!g!h%0X!h!i%#_!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X%#_#X#Y%0X#Y#Z%#_#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%s%2}t(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx$Kjx{$e{|!Ls|!O$e!O!P$+X!P!Q$e!Q![%5_![!c$e!c!g%5_!g!h%7n!h!i%5_!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X%5_#X#Y%7n#Y#Z%5_#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j?Ar$e?Ar?As!Ls?As~$e%s%5jp(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx%%lx!O$e!O!P$+X!P!Q$e!Q![%5_![!c$e!c!g%5_!g!h%7n!h!i%5_!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X%5_#X#Y%7n#Y#Z%5_#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%s%7yt(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx%%lx{$e{|!Ls|!O$e!O!P$+X!P!Q$e!Q![%5_![!c$e!c!g%5_!g!h%7n!h!i%5_!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X%5_#X#Y%7n#Y#Z%5_#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j?Ar$e?Ar?As!Ls?As~$e%s%:da(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!O$e!O!P$9{!P!Q$e!Q!R%;i!R![%A`![!c$e!c!i$IZ!i#O$e#O#P&S#P#T$e#T#Z$IZ#Z~$e%s%;tt(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx%>Ux!O$e!O!P$+X!P!Q$e!Q![%A`![!c$e!c!g$IZ!g!h%2r!h!i$IZ!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#U$IZ#U#V%Co#V#X$IZ#X#Y%2r#Y#Z$IZ#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j#l$e#l#m$HU#m~$e%k%>]['tQ&k!bOY'SZr'Srs%qs!Q'S!Q![%?R![!c'S!c!i$Lg!i#O'S#O#P&S#P#T'S#T#Z$Lg#Z~'S%k%?[p'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx%>Ux!O'S!O!P#9z!P!Q'S!Q![%?R![!c'S!c!g$Lg!g!h$Nt!h!i$Lg!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X$Lg#X#Y$Nt#Y#Z$Lg#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%s%Akp(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx%>Ux!O$e!O!P$+X!P!Q$e!Q![%A`![!c$e!c!g$IZ!g!h%2r!h!i$IZ!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$IZ#X#Y%2r#Y#Z$IZ#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%s%Czp(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx$Kjx!O$e!O!P$+X!P!Q$e!Q![%FO![!c$e!c!g$IZ!g!h%2r!h!i$IZ!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$IZ#X#Y%2r#Y#Z$IZ#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%s%FZp(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx%H_x!O$e!O!P$+X!P!Q$e!Q![%FO![!c$e!c!g$IZ!g!h%2r!h!i$IZ!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$IZ#X#Y%2r#Y#Z$IZ#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%k%Hf['tQ&k!bOY'SZr'Srs%qs!Q'S!Q![%I[![!c'S!c!i$Lg!i#O'S#O#P&S#P#T'S#T#Z$Lg#Z~'S%k%Iep'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx%H_x!O'S!O!P#9z!P!Q'S!Q![%I[![!c'S!c!g$Lg!g!h$Nt!h!i$Lg!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X$Lg#X#Y$Nt#Y#Z$Lg#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%w%KtY'z$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx![$e![!]%Ld!]#O$e#O#P&S#P~$e%w%LoWk$Z(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s%MdW(_$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e&e%NX[o$V(aW'tQ&k!bOY%N}Zr%N}rs& vsw%N}wx&%vx!^%N}!^!_&'w!_!`&)p!`!a&'S!a#O%N}#O#Pc#P~%N}#^& WY(aW'tQ&k!bOY%N}Zr%N}rs& vsw%N}wx&%vx!`%N}!`!a&'S!a#O%N}#O#Pc#P~%N}#[& }W(aW&k!bOY& vZw& vwx&!gx!`& v!`!a&%Z!a#O& v#O#Pc#P~& v#S&!lU&k!bOY&!gZ!`&!g!`!aO!a#O&!g#O#Pc#P~&!g#SVSXp&k!bOY%qZ#O%q#O#P&S#P~%q#ShV&k!bOY&!gYZ&!gZ]&!g]^}^#O&!g#O#P&$i#P~&!g#S&$SV&k!bOY&!gYZ%qZ!`&!g!`!aO!a#O&!g#O#Pc#P~&!g#S&$nX&k!bOY&!gYZ%qZ]&!g]^}^!`&!g!`!aO!a#O&!g#O#Pc#P~&!g#[&%dUXp(aW&k!bOY%WZw%Wwx%qx#O%W#O#P&S#P~%W#U&%}W'tQ&k!bOY&%vZr&%vrs&!gs!`&%v!`!a&&g!a#O&%v#O#Pc#P~&%v#U&&pUXp'tQ&k!bOY'SZr'Srs%qs#O'S#O#P&S#P~'S#^&'_WXp(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e&e&(SZ(aW'tQ&k!b!i$VOY%N}Zr%N}rs& vsw%N}wx&%vx!_%N}!_!`&(u!`!a&'S!a#O%N}#O#Pc#P~%N}&e&)QY!j$V(aW'tQ&k!bOY%N}Zr%N}rs& vsw%N}wx&%vx!`%N}!`!a&'S!a#O%N}#O#Pc#P~%N}&e&){Y!e$V(aW'tQ&k!bOY%N}Zr%N}rs& vsw%N}wx&%vx!`%N}!`!a&'S!a#O%N}#O#Pc#P~%N}%s&*vY(lP(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`-z!`#O$e#O#P&S#P~$e%s&+qZ(aW'tQ!g$V&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`&,d!`!a&-X!a#O$e#O#P&S#P~$e%s&,oW!e$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s&-dY(aW'tQ&k!b!i$VOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`!0r!`#O$e#O#P&S#P~$e!m&._W'yP(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e&i&/W`(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#o&.w#o~$e&i&0i`(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers&1ksw$ewx&2Wx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#o&.w#o~$e&c&1tU(aW's$w&k!bOY%WZw%Wwx%qx#O%W#O#P&S#P~%W%k&2aU'tQ(`$V&k!bOY'SZr'Srs%qs#O'S#O#P&S#P~'S&i&3S`(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers&1ksw$ewx&2Wx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#o&.w#o~$e%s&4aX!Y$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!}$e!}#O&4|#O#P&S#P~$e!m&5XW(WP(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%w&5v_&k!bOY&6uYZ&7YZ]&6u]^&8R^!Q&6u!Q![&8i![!w&6u!w!x&9m!x#O&6u#O#P&?q#P#i&6u#i#j&@_#j#l&6u#l#m&Ca#m~&6u!l&6|SWY&k!bOY%qZ#O%q#O#P&S#P~%q%w&7cYWY'r$Z&k!bOX%qXY+^YZ(vZ]%q]^+^^p%qpq+^q#O%q#O#P*r#P~%q%w&8YTWY&k!bOY%qYZ+^Z#O%q#O#P&S#P~%q!l&8pUWY&k!bOY%qZ!Q%q!Q![&9S![#O%q#O#P&S#P~%q!l&9ZUWY&k!bOY%qZ!Q%q!Q![&6u![#O%q#O#P&S#P~%q!l&9rY&k!bOY%qZ!Q%q!Q![&:b![!c%q!c!i&:b!i#O%q#O#P&S#P#T%q#T#Z&:b#Z~%q!l&:gY&k!bOY%qZ!Q%q!Q![&;V![!c%q!c!i&;V!i#O%q#O#P&S#P#T%q#T#Z&;V#Z~%q!l&;[Y&k!bOY%qZ!Q%q!Q![&;z![!c%q!c!i&;z!i#O%q#O#P&S#P#T%q#T#Z&;z#Z~%q!l&X![!c%q!c!i&>X!i#O%q#O#P&S#P#T%q#T#Z&>X#Z~%q!l&>^Y&k!bOY%qZ!Q%q!Q![&>|![!c%q!c!i&>|!i#O%q#O#P&S#P#T%q#T#Z&>|#Z~%q!l&?RY&k!bOY%qZ!Q%q!Q![&6u![!c%q!c!i&6u!i#O%q#O#P&S#P#T%q#T#Z&6u#Z~%q!l&?xVWY&k!bOY%qYZ%qZ]%q]^&n^#O%q#O#P&S#P~%q!l&@dY&k!bOY%qZ!Q%q!Q![&AS![!c%q!c!i&AS!i#O%q#O#P&S#P#T%q#T#Z&AS#Z~%q!l&AXY&k!bOY%qZ!Q%q!Q![&Aw![!c%q!c!i&Aw!i#O%q#O#P&S#P#T%q#T#Z&Aw#Z~%q!l&A|Y&k!bOY%qZ!Q%q!Q![&Bl![!c%q!c!i&Bl!i#O%q#O#P&S#P#T%q#T#Z&Bl#Z~%q!l&BqY&k!bOY%qZ!Q%q!Q![&6u![!c%q!c!i&6u!i#O%q#O#P&S#P#T%q#T#Z&6u#Z~%q!l&CfY&k!bOY%qZ!Q%q!Q![&DU![!c%q!c!i&DU!i#O%q#O#P&S#P#T%q#T#Z&DU#Z~%q!l&DZY&k!bOY%qZ!Q%q!Q![&Dy![!c%q!c!i&Dy!i#O%q#O#P&S#P#T%q#T#Z&Dy#Z~%q!l&EQYWY&k!bOY%qZ!Q%q!Q![&Dy![!c%q!c!i&Dy!i#O%q#O#P&S#P#T%q#T#Z&Dy#Z~%q%w&E{X!Z#u(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P#Q&Fh#Q~$e#Q&FsW(cd(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s&GhY(aW'tQ&k!b!b$VOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`!0r!`#O$e#O#P&S#P~$e&i&Hgb(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#d&.w#d#e&Io#e#o&.w#o~$e&i&JOb(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#X&.w#X#Y&KW#Y#o&.w#o~$e&i&Kgb(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#f&.w#f#g&Lo#g#o&.w#o~$e&i&MOa(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#U&NT#U#o&.w#o~$e&i&Ndb(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#h&.w#h#i' l#i#o&.w#o~$e&i' {b(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#c&.w#c#d'#T#d#o&.w#o~$e&i'#db(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#f&.w#f#g'$l#g#o&.w#o~$e&i'${s(aW'tQ!V$U'vq'}S&k!bOY$eZq$eqr''Yrs%Wsu$euv'(xvw')swx'Sxy'*qyz$ez{'(x{|'(x|}$e}!O'+j!O!P$e!P!Q'(x!Q![&.w![!^$e!^!_',h!_!`''Y!`!a'-f!a!c$e!c!}&.w!}#O'.d#O#P&S#P#Q$e#Q#R'(x#R#S&.w#S#T$e#T#o&.w#o#p$e#p#q'/Y#q#r$e#r#s'(T#s~$e!q''eY(aW'tQ#`T&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`'(T!`#O$e#O#P&S#P~$e!q'(`W(aW'tQ#`T&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e!q')TY(aW'tQ#`T&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`'(T!`#O$e#O#P&S#P~$e!q'*OZ(aW'tQ#`T&k!bOY$eZr$ers%Wsv$evw'(Twx'Sx!_$e!_!`'(T!`#O$e#O#P&S#P~$e!q'*zY(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sxy$eyz'(Tz#O$e#O#P&S#P~$e!q'+uZ(aW'tQ#`T&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`'(T!`!a'(T!a#O$e#O#P&S#P~$e!q',sZ(aW'tQ#`T&k!bOY$eZr$ers%Wsw$ewx'Sx!^$e!^!_'(x!_!`'(T!`#O$e#O#P&S#P~$e!q'-qZ(aW'tQ#`T&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`'(T!`!a'(x!a#O$e#O#P&S#P~$e!q'.mX(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P#Q'(T#Q~$e!q'/e[(aW'tQ#`T&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`'(T!`#O$e#O#P&S#P#p$e#p#q'(T#q~$e&i'0jb(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers&1ksw$ewx&2Wx!Q$e!Q!Y&.w!Y!Z'1r!Z![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#o&.w#o~$e&i'2R`(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers&1ksw$ewx&2Wx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#o&.w#o~$e%s'3`W!R$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s'4T[(aW'tQ!a$V&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`!0r!`#O$e#O#P&S#P#p$e#p#q'4y#q~$e%s'5UW([$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e!}'5yW!Xa(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e!q'6na(aW'tQ&UP&k!bOX$eXY'7sZp$epq'7sqr$ers%Wsw$ewx'Sx!c$e!c!}'9R!}#O$e#O#P&S#P#R$e#R#S'9R#S#T$e#T#o'9R#o~$e!q'7|a(aW'tQ&k!bOX$eXY'7sZp$epq'7sqr$ers%Wsw$ewx'Sx!c$e!c!}'9R!}#O$e#O#P&S#P#R$e#R#S'9R#S#T$e#T#o'9R#o~$e!q'9^`(aW'tQcT&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q!['9R![!c$e!c!}'9R!}#O$e#O#P&S#P#R$e#R#S'9R#S#T$e#T#o'9R#o~$e",
tokenizers: [rawString, rawStringContinue, fallback, 0, 1, 2, 3, 4, 5, 6, 7],
topRules: { Program: [0, 266] },
dynamicPrecedences: {
'84': 1,
'91': 1,
'98': 1,
'104': -10,
'105': 1,
'110': -1,
'116': -10,
'117': 1,
'172': 1,
'175': -10,
'221': -1,
'225': 2,
'226': 2,
'265': -10,
'323': 3,
'367': 1,
'368': 3,
'369': 1,
'370': 1
},
specialized: [
{ term: 314, get: value => spec_identifier$3[value] || -1 },
{ term: 31, get: value => spec_[value] || -1 },
{ term: 69, get: value => spec_templateArgsEnd[value] || -1 },
{ term: 321, get: value => spec_scopedIdentifier[value] || -1 }
],
tokenPrec: 22015
})
const cppLanguage = LezerLanguage.define({
parser: parser$8.configure({
props: [
indentNodeProp.add({
IfStatement: continuedIndent({ except: /^\s*({|else\b)/ }),
TryStatement: continuedIndent({ except: /^\s*({|catch)\b/ }),
LabeledStatement: flatIndent,
CaseStatement: context => context.baseIndent + context.unit,
BlockComment: () => -1,
Statement: continuedIndent({ except: /^{/ })
}),
foldNodeProp.add({
'DeclarationList CompoundStatement EnumeratorList FieldDeclarationList InitializerList': foldInside$1,
BlockComment(tree) {
return { from: tree.from + 2, to: tree.to - 2 }
}
}),
styleTags({
'typedef struct union enum class typename decltype auto template operator friend noexcept namespace using __attribute__ __declspec __based': tags$1.definitionKeyword,
'extern MsCallModifier MsPointerModifier extern static register inline const volatile restrict _Atomic mutable constexpr virtual explicit VirtualSpecifier Access': tags$1.modifier,
'if else switch for while do case default return break continue goto throw try catch': tags$1.controlKeyword,
'new sizeof delete static_assert': tags$1.operatorKeyword,
'NULL nullptr': tags$1.null,
this: tags$1.self,
'True False': tags$1.bool,
'TypeSize PrimitiveType': tags$1.standard(tags$1.typeName),
TypeIdentifier: tags$1.typeName,
FieldIdentifier: tags$1.propertyName,
'CallExpression/FieldExpression/FieldIdentifier': tags$1.function(tags$1.propertyName),
StatementIdentifier: tags$1.labelName,
Identifier: tags$1.variableName,
'CallExpression/Identifier': tags$1.function(tags$1.variableName),
'CallExpression/ScopedIdentifier/Identifier': tags$1.function(tags$1.variableName),
DestructorName: tags$1.name,
NamespaceIdentifier: tags$1.namespace,
OperatorName: tags$1.operator,
ArithOp: tags$1.arithmeticOperator,
LogicOp: tags$1.logicOperator,
BitOp: tags$1.bitwiseOperator,
CompareOp: tags$1.compareOperator,
AssignOp: tags$1.definitionOperator,
UpdateOp: tags$1.updateOperator,
LineComment: tags$1.lineComment,
BlockComment: tags$1.blockComment,
Number: tags$1.number,
String: tags$1.string,
'RawString SystemLibString': tags$1.special(tags$1.string),
CharLiteral: tags$1.character,
EscapeSequence: tags$1.escape,
PreProcArg: tags$1.meta,
'PreprocDirectiveName #include #ifdef #ifndef #if #define #else #endif #elif': tags$1.processingInstruction,
MacroName: tags$1.special(tags$1.name),
'( )': tags$1.paren,
'[ ]': tags$1.squareBracket,
'{ }': tags$1.brace,
'< >': tags$1.angleBracket,
'. ->': tags$1.derefOperator,
', ;': tags$1.separator
})
]
}),
languageData: { commentTokens: { line: '//', block: { open: '/*', close: '*/' } }, indentOnInput: /^\s*(?:case |default:|\{|\})$/ }
})
function cpp() {
return new LanguageSupport(cppLanguage)
}
var _m25 = Object.freeze({ __proto__: null, cpp: cpp, cppLanguage: cppLanguage })
const printKeyword = 1,
indent = 162,
dedent = 163,
newline = 164,
newlineBracketed = 165,
newlineEmpty = 166,
eof = 167,
ParenthesizedExpression = 21,
TupleExpression = 47,
ComprehensionExpression = 48,
ArrayExpression = 52,
ArrayComprehensionExpression = 55,
DictionaryExpression = 56,
DictionaryComprehensionExpression = 59,
SetExpression = 60,
SetComprehensionExpression = 61
const newline$1 = 10,
carriageReturn = 13,
space$2 = 32,
tab = 9,
hash$1 = 35,
parenOpen = 40,
dot = 46
const bracketed = [
ParenthesizedExpression,
TupleExpression,
ComprehensionExpression,
ArrayExpression,
ArrayComprehensionExpression,
DictionaryExpression,
DictionaryComprehensionExpression,
SetExpression,
SetComprehensionExpression
]
let cachedIndent = 0,
cachedInput$2 = null,
cachedPos$2 = 0
function getIndent(input, pos) {
if (pos == cachedPos$2 && input == cachedInput$2) return cachedIndent
cachedInput$2 = input
cachedPos$2 = pos
return (cachedIndent = getIndentInner(input, pos))
}
function getIndentInner(input, pos) {
for (let indent = 0; ; pos++) {
let ch = input.get(pos)
if (ch == space$2) indent++
else if (ch == tab) indent += 8 - (indent % 8)
else if (ch == newline$1 || ch == carriageReturn || ch == hash$1) return -1
else return indent
}
}
const newlines = new ExternalTokenizer(
(input, token, stack) => {
let next = input.get(token.start)
if (next < 0) {
token.accept(eof, token.start)
} else if (next != newline$1 && next != carriageReturn);
else if (stack.startOf(bracketed) != null) {
token.accept(newlineBracketed, token.start + 1)
} else if (getIndent(input, token.start + 1) < 0) {
token.accept(newlineEmpty, token.start + 1)
} else {
token.accept(newline, token.start + 1)
}
},
{ contextual: true, fallback: true }
)
const indentation = new ExternalTokenizer((input, token, stack) => {
let prev = input.get(token.start - 1),
depth
if ((prev == newline$1 || prev == carriageReturn) && (depth = getIndent(input, token.start)) >= 0 && depth != stack.context.depth && stack.startOf(bracketed) == null)
token.accept(depth < stack.context.depth ? dedent : indent, token.start)
})
function IndentLevel(parent, depth) {
this.parent = parent
this.depth = depth
this.hash = (parent ? (parent.hash + parent.hash) << 8 : 0) + depth + (depth << 4)
}
const topIndent = new IndentLevel(null, 0)
const trackIndent = new ContextTracker({
start: topIndent,
shift(context, term, input, stack) {
return term == indent ? new IndentLevel(context, getIndent(input, stack.pos)) : term == dedent ? context.parent : context
},
hash(context) {
return context.hash
}
})
const legacyPrint = new ExternalTokenizer((input, token) => {
let pos = token.start
for (let print = 'print', i = 0; i < print.length; i++, pos++) if (input.get(pos) != print.charCodeAt(i)) return
let end = pos
if (/\w/.test(String.fromCharCode(input.get(pos)))) return
for (; ; pos++) {
let next = input.get(pos)
if (next == space$2 || next == tab) continue
if (next != parenOpen && next != dot && next != newline$1 && next != carriageReturn && next != hash$1) token.accept(printKeyword, end)
return
}
})
const spec_identifier$2 = {
__proto__: null,
await: 40,
or: 48,
and: 50,
in: 54,
not: 56,
is: 58,
if: 64,
else: 66,
lambda: 70,
yield: 88,
from: 90,
async: 98,
for: 100,
None: 152,
True: 154,
False: 154,
del: 168,
pass: 172,
break: 176,
continue: 180,
return: 184,
raise: 192,
import: 196,
as: 198,
global: 202,
nonlocal: 204,
assert: 208,
elif: 218,
while: 222,
try: 228,
except: 230,
finally: 232,
with: 236,
def: 240,
class: 250
}
const parser$7 = Parser.deserialize({
version: 13,
states:
"!?|O`Q$IXOOO%cQ$I[O'#GaOOQ$IS'#Cm'#CmOOQ$IS'#Cn'#CnO'RQ$IWO'#ClO(tQ$I[O'#G`OOQ$IS'#Ga'#GaOOQ$IS'#DR'#DROOQ$IS'#G`'#G`O)bQ$IWO'#CqO)rQ$IWO'#DbO*SQ$IWO'#DfOOQ$IS'#Ds'#DsO*gO`O'#DsO*oOpO'#DsO*wO!bO'#DtO+SO#tO'#DtO+_O&jO'#DtO+jO,UO'#DtO-lQ$I[O'#GQOOQ$IS'#GQ'#GQO'RQ$IWO'#GPO/OQ$I[O'#GPOOQ$IS'#E]'#E]O/gQ$IWO'#E^OOQ$IS'#GO'#GOO/qQ$IWO'#F}OOQ$IV'#F}'#F}O/|Q$IWO'#FPOOQ$IS'#Fr'#FrO0RQ$IWO'#FOOOQ$IV'#HZ'#HZOOQ$IV'#F|'#F|OOQ$IT'#FR'#FRQ`Q$IXOOO'RQ$IWO'#CoO0aQ$IWO'#CzO0hQ$IWO'#DOO0vQ$IWO'#GeO1WQ$I[O'#EQO'RQ$IWO'#EROOQ$IS'#ET'#ETOOQ$IS'#EV'#EVOOQ$IS'#EX'#EXO1lQ$IWO'#EZO2SQ$IWO'#E_O/|Q$IWO'#EaO2gQ$I[O'#EaO/|Q$IWO'#EdO/gQ$IWO'#EgO/gQ$IWO'#EkO/gQ$IWO'#EnO2rQ$IWO'#EpO2yQ$IWO'#EuO3UQ$IWO'#EqO/gQ$IWO'#EuO/|Q$IWO'#EwO/|Q$IWO'#E|OOQ$IS'#Cc'#CcOOQ$IS'#Cd'#CdOOQ$IS'#Ce'#CeOOQ$IS'#Cf'#CfOOQ$IS'#Cg'#CgOOQ$IS'#Ch'#ChOOQ$IS'#Cj'#CjO'RQ$IWO,58|O'RQ$IWO,58|O'RQ$IWO,58|O'RQ$IWO,58|O'RQ$IWO,58|O'RQ$IWO,58|O3ZQ$IWO'#DmOOQ$IS,5:W,5:WO3nQ$IWO,5:ZO3{Q%1`O,5:ZO4QQ$I[O,59WO0aQ$IWO,59_O0aQ$IWO,59_O0aQ$IWO,59_O6pQ$IWO,59_O6uQ$IWO,59_O6|Q$IWO,59gO7TQ$IWO'#G`O8ZQ$IWO'#G_OOQ$IS'#G_'#G_OOQ$IS'#DX'#DXO8rQ$IWO,59]O'RQ$IWO,59]O9QQ$IWO,59]O9VQ$IWO,5:PO'RQ$IWO,5:POOQ$IS,59|,59|O9eQ$IWO,59|O9jQ$IWO,5:VO'RQ$IWO,5:VO'RQ$IWO,5:TOOQ$IS,5:Q,5:QO9{Q$IWO,5:QO:QQ$IWO,5:UOOOO'#FZ'#FZO:VO`O,5:_OOQ$IS,5:_,5:_OOOO'#F['#F[O:_OpO,5:_O:gQ$IWO'#DuOOOO'#F]'#F]O:wO!bO,5:`OOQ$IS,5:`,5:`OOOO'#F`'#F`O;SO#tO,5:`OOOO'#Fa'#FaO;_O&jO,5:`OOOO'#Fb'#FbO;jO,UO,5:`OOQ$IS'#Fc'#FcO;uQ$I[O,5:dO>gQ$I[O,5mQ$IZO<TAN>TO#FVQ$IWO<aAN>aO/gQ$IWO1G1^O#FgQ$I[O1G1^P#FqQ$IWO'#FWOOQ$IS1G1d1G1dP#GOQ$IWO'#F^O#G]Q$IWO7+(lOOOO-E9]-E9]O#GsQ$IWO7+'qOOQ$ISAN?VAN?VO#H^Q$IWO,5j!Q!R&AY!R![&GW![!]'$S!]!^'&f!^!_''l!_!`'*[!`!a'+h!a!b$}!b!c'.T!c!d'/c!d!e'1T!e!h'/c!h!i'=R!i!t'/c!t!u'Fg!u!w'/c!w!x';a!x!}'/c!}#O'Hq#O#P'Iw#P#Q'Ji#Q#R'Ko#R#S'/c#S#T$}#T#U'/c#U#V'1T#V#Y'/c#Y#Z'=R#Z#f'/c#f#g'Fg#g#i'/c#i#j';a#j#o'/c#o#p'L{#p#q'Mq#q#r'N}#r#s( {#s$g$}$g~'/cv#p#q(y#q#r5T#r~(y8z)UZ%p7[%gS%jW%v!bOr(yrs)wsw(ywx(Px#O(y#O#PAU#P#o(y#o#p?p#p#q(y#q#r5T#r~(y8z*QZ%p7[%gS%v!bOr(yrs*ssw(ywx(Px#O(y#O#P@p#P#o(y#o#p?p#p#q(y#q#r5T#r~(y8z*|Z%p7[%gS%v!bOr(yrs+osw(ywx(Px#O(y#O#P4o#P#o(y#o#p?p#p#q(y#q#r5T#r~(y8r+xX%p7[%gS%v!bOw+owx,ex#O+o#O#P4Z#P#o+o#o#p3Z#p#q+o#q#r.k#r~+o8r,jX%p7[Ow+owx-Vx#O+o#O#P3u#P#o+o#o#p2i#p#q+o#q#r.k#r~+o8r-[X%p7[Ow+owx-wx#O+o#O#P.V#P#o+o#o#p0^#p#q+o#q#r.k#r~+o7[-|R%p7[O#o-w#p#q-w#r~-w8r.[T%p7[O#o+o#o#p.k#p#q+o#q#r.k#r~+o!f.rV%gS%v!bOw.kwx/Xx#O.k#O#P3T#P#o.k#o#p3Z#p~.k!f/[VOw.kwx/qx#O.k#O#P2c#P#o.k#o#p2i#p~.k!f/tUOw.kx#O.k#O#P0W#P#o.k#o#p0^#p~.k!f0ZPO~.k!f0cV%gSOw0xwx1^x#O0x#O#P2]#P#o0x#o#p.k#p~0xS0}T%gSOw0xwx1^x#O0x#O#P2]#P~0xS1aTOw0xwx1px#O0x#O#P2V#P~0xS1sSOw0xx#O0x#O#P2P#P~0xS2SPO~0xS2YPO~0xS2`PO~0x!f2fPO~.k!f2nV%gSOw0xwx1^x#O0x#O#P2]#P#o0x#o#p.k#p~0x!f3WPO~.k!f3`V%gSOw0xwx1^x#O0x#O#P2]#P#o0x#o#p.k#p~0x8r3zT%p7[O#o+o#o#p.k#p#q+o#q#r.k#r~+o8r4`T%p7[O#o+o#o#p.k#p#q+o#q#r.k#r~+o8z4tT%p7[O#o(y#o#p5T#p#q(y#q#r5T#r~(y!n5^X%gS%jW%v!bOr5Trs5ysw5Twx7ax#O5T#O#P@j#P#o5T#o#p?p#p~5T!n6QX%gS%v!bOr5Trs6msw5Twx7ax#O5T#O#P@d#P#o5T#o#p?p#p~5T!n6tX%gS%v!bOr5Trs.ksw5Twx7ax#O5T#O#P?j#P#o5T#o#p?p#p~5T!n7fX%jWOr5Trs5ysw5Twx8Rx#O5T#O#P>p#P#o5T#o#p>v#p~5T!n8WX%jWOr5Trs5ysw5Twx8sx#O5T#O#P:^#P#o5T#o#p:d#p~5TW8xT%jWOr8srs9Xs#O8s#O#P:W#P~8sW9[TOr8srs9ks#O8s#O#P:Q#P~8sW9nSOr8ss#O8s#O#P9z#P~8sW9}PO~8sW:TPO~8sW:ZPO~8s!n:aPO~5T!n:kX%gS%jWOr;Wrs;tsw;Wwxj#P#o;W#o#p5T#p~;W[;_V%gS%jWOr;Wrs;tsw;Wwxj#P~;W[;yV%gSOr;Wrs<`sw;Wwxd#P~;W[^#P~;W[=PV%jWOr;Wrs;tsw;Wwx=fx#O;W#O#P>W#P~;W[=kV%jWOr;Wrs;tsw;Wwx8sx#O;W#O#P>Q#P~;W[>TPO~;W[>ZPO~;W[>aPO~;W[>gPO~;W[>mPO~;W!n>sPO~5T!n>}X%gS%jWOr;Wrs;tsw;Wwxj#P#o;W#o#p5T#p~;W!n?mPO~5T!n?wX%gS%jWOr;Wrs;tsw;Wwxj#P#o;W#o#p5T#p~;W!n@gPO~5T!n@mPO~5T8z@uT%p7[O#o(y#o#p5T#p#q(y#q#r5T#r~(y8zAZT%p7[O#o(y#o#p5T#p#q(y#q#r5T#r~(y8zAqZ%p7[%jWOr(yrs)wsw(ywxBdx#O(y#O#PEx#P#o(y#o#p:d#p#q(y#q#r5T#r~(y7dBkX%p7[%jWOrBdrsCWs#OBd#O#PEd#P#oBd#o#p8s#p#qBd#q#r8s#r~Bd7dC]X%p7[OrBdrsCxs#OBd#O#PEO#P#oBd#o#p8s#p#qBd#q#r8s#r~Bd7dC}X%p7[OrBdrs-ws#OBd#O#PDj#P#oBd#o#p8s#p#qBd#q#r8s#r~Bd7dDoT%p7[O#oBd#o#p8s#p#qBd#q#r8s#r~Bd7dETT%p7[O#oBd#o#p8s#p#qBd#q#r8s#r~Bd7dEiT%p7[O#oBd#o#p8s#p#qBd#q#r8s#r~Bd8zE}T%p7[O#o(y#o#p5T#p#q(y#q#r5T#r~(y8zFcT%p7[O#o(y#o#p5T#p#q(y#q#r5T#r~(y9[FwT%p7[O#o'P#o#pGW#p#q'P#q#rGW#r~'P#OGcX%gS%jW%m`%v!bOrGWrsHOswGWwx7ax#OGW#O#PKz#P#oGW#o#pKQ#p~GW#OHXX%gS%m`%v!bOrGWrsHtswGWwx7ax#OGW#O#PKt#P#oGW#o#pKQ#p~GW#OH}X%gS%m`%v!bOrGWrsIjswGWwx7ax#OGW#O#PJz#P#oGW#o#pKQ#p~GW!vIsV%gS%m`%v!bOwIjwx/Xx#OIj#O#PJY#P#oIj#o#pJ`#p~Ij!vJ]PO~Ij!vJeV%gSOw0xwx1^x#O0x#O#P2]#P#o0x#o#pIj#p~0x#OJ}PO~GW#OKXX%gS%jWOr;Wrs;tsw;Wwxj#P#o;W#o#pGW#p~;W#OKwPO~GW#OK}PO~GW9[L]Z%p7[%gS%m`%v!bOr'PrsMOsw'Pwx(Px#O'P#O#PN[#P#o'P#o#pKQ#p#q'P#q#rGW#r~'P9SMZX%p7[%gS%m`%v!bOwMOwx,ex#OMO#O#PMv#P#oMO#o#pJ`#p#qMO#q#rIj#r~MO9SM{T%p7[O#oMO#o#pIj#p#qMO#q#rIj#r~MO9[NaT%p7[O#o'P#o#pGW#p#q'P#q#rGW#r~'P9[NuT%p7[O#o'P#o#pGW#p#q'P#q#rGW#r~'Pj#P#o;W#o#p!#j#p~;W&U!+aPO~!#j&U!+kX%gS%jWOr;Wrs;tsw;Wwxj#P#o;W#o#p!#j#p~;W&U!,ZPO~!#j&U!,eX%gS%jWOr;Wrs;tsw;Wwxj#P#o;W#o#p!#j#p~;Wj#P#o;W#o#p!3f#p~;WMg!5oa%p7[%gS%jW$o1s%m`%sp%v!b%x#tOX$}XY!5[Y[$}[]!5[]p$}pq!5[qr$}rs&Rsw$}wx! Ux#O$}#O#P!6t#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Mg!6yX%p7[OY$}YZ!5[Z]$}]^!5[^#o$}#o#p!3f#p#q$}#q#r!3f#r~$}yx#O!yx#O!WZ%p7[%gS%e,X%m`%v!bOr'PrsLQsw'Pwx(Px#O'P#O#PNp#P#o'P#o#pKQ#p#q'P#q#rGW#r~'PDT!?S_%p7[%jW%e,XOY!@RYZ(yZ]!@R]^(y^r!@Rrs!A_sw!@Rwx# Rx#O!@R#O#P#$y#P#o!@R#o#p!Lw#p#q!@R#q#r!Bq#r~!@RDT!@`_%p7[%gS%jW%e,X%v!bOY!@RYZ(yZ]!@R]^(y^r!@Rrs!A_sw!@Rwx!>yx#O!@R#O#P!B]#P#o!@R#o#p!NP#p#q!@R#q#r!Bq#r~!@RDT!AjZ%p7[%gS%e,X%v!bOr(yrs*ssw(ywx(Px#O(y#O#P@p#P#o(y#o#p?p#p#q(y#q#r5T#r~(yDT!BbT%p7[O#o!@R#o#p!Bq#p#q!@R#q#r!Bq#r~!@R-w!B|]%gS%jW%e,X%v!bOY!BqYZ5TZ]!Bq]^5T^r!Bqrs!Cusw!Bqwx!Dkx#O!Bq#O#P!My#P#o!Bq#o#p!NP#p~!Bq-w!DOX%gS%e,X%v!bOr5Trs6msw5Twx7ax#O5T#O#P@d#P#o5T#o#p?p#p~5T-w!Dr]%jW%e,XOY!BqYZ5TZ]!Bq]^5T^r!Bqrs!Cusw!Bqwx!Ekx#O!Bq#O#P!Lq#P#o!Bq#o#p!Lw#p~!Bq-w!Er]%jW%e,XOY!BqYZ5TZ]!Bq]^5T^r!Bqrs!Cusw!Bqwx!Fkx#O!Bq#O#P!Gy#P#o!Bq#o#p!HP#p~!Bq,a!FrX%jW%e,XOY!FkYZ8sZ]!Fk]^8s^r!Fkrs!G_s#O!Fk#O#P!Gs#P~!Fk,a!GdT%e,XOr8srs9ks#O8s#O#P:Q#P~8s,a!GvPO~!Fk-w!G|PO~!Bq-w!HY]%gS%jW%e,XOY!IRYZ;WZ]!IR]^;W^r!IRrs!I}sw!IRwx!Jkx#O!IR#O#P!Lk#P#o!IR#o#p!Bq#p~!IR,e!I[Z%gS%jW%e,XOY!IRYZ;WZ]!IR]^;W^r!IRrs!I}sw!IRwx!Jkx#O!IR#O#P!Lk#P~!IR,e!JUV%gS%e,XOr;Wrs<`sw;Wwxd#P~;W,e!JrZ%jW%e,XOY!IRYZ;WZ]!IR]^;W^r!IRrs!I}sw!IRwx!Kex#O!IR#O#P!Le#P~!IR,e!KlZ%jW%e,XOY!IRYZ;WZ]!IR]^;W^r!IRrs!I}sw!IRwx!Fkx#O!IR#O#P!L_#P~!IR,e!LbPO~!IR,e!LhPO~!IR,e!LnPO~!IR-w!LtPO~!Bq-w!MQ]%gS%jW%e,XOY!IRYZ;WZ]!IR]^;W^r!IRrs!I}sw!IRwx!Jkx#O!IR#O#P!Lk#P#o!IR#o#p!Bq#p~!IR-w!M|PO~!Bq-w!NY]%gS%jW%e,XOY!IRYZ;WZ]!IR]^;W^r!IRrs!I}sw!IRwx!Jkx#O!IR#O#P!Lk#P#o!IR#o#p!Bq#p~!IRDT# [_%p7[%jW%e,XOY!@RYZ(yZ]!@R]^(y^r!@Rrs!A_sw!@Rwx#!Zx#O!@R#O#P#$e#P#o!@R#o#p!HP#p#q!@R#q#r!Bq#r~!@RBm#!d]%p7[%jW%e,XOY#!ZYZBdZ]#!Z]^Bd^r#!Zrs##]s#O#!Z#O#P#$P#P#o#!Z#o#p!Fk#p#q#!Z#q#r!Fk#r~#!ZBm##dX%p7[%e,XOrBdrsCxs#OBd#O#PEO#P#oBd#o#p8s#p#qBd#q#r8s#r~BdBm#$UT%p7[O#o#!Z#o#p!Fk#p#q#!Z#q#r!Fk#r~#!ZDT#$jT%p7[O#o!@R#o#p!Bq#p#q!@R#q#r!Bq#r~!@RDT#%OT%p7[O#o!@R#o#p!Bq#p#q!@R#q#r!Bq#r~!@RDe#%dT%p7[O#o!Psw#._wx#/mx#O#._#O#P$Ay#P#o#._#o#p$SXQ1sOY#=ZYZ0xZ]#=Z]^0x^w#=Zwx#>ox#O#=Z#O#P#?u#P~#=Z1w#>tXQ1sOY#=ZYZ0xZ]#=Z]^0x^w#=Zwx#8_x#O#=Z#O#P#?a#P~#=Z1w#?fTQ1sOY#=ZYZ0xZ]#=Z]^0x^~#=Z1w#?zTQ1sOY#=ZYZ0xZ]#=Z]^0x^~#=Z1w#@`TQ1sOY#=ZYZ0xZ]#=Z]^0x^~#=Z3Z#@tTQ1sOY#9aYZ.kZ]#9a]^.k^~#9a3Z#A[ZQ1s%gSOY#=ZYZ0xZ]#=Z]^0x^w#=Zwx#=}x#O#=Z#O#P#@Z#P#o#=Z#o#p#9a#p~#=Z3Z#BSTQ1sOY#9aYZ.kZ]#9a]^.k^~#9a3Z#BjZQ1s%gSOY#=ZYZ0xZ]#=Z]^0x^w#=Zwx#=}x#O#=Z#O#P#@Z#P#o#=Z#o#p#9a#p~#=ZIg#CdXQ1s%p7[OY#4gYZ+oZ]#4g]^+o^#o#4g#o#p#9a#p#q#4g#q#r#9a#r~#4gIg#DWXQ1s%p7[OY#4gYZ+oZ]#4g]^+o^#o#4g#o#p#9a#p#q#4g#q#r#9a#r~#4gIo#DzXQ1s%p7[OY#0uYZ(yZ]#0u]^(y^#o#0u#o#p#Eg#p#q#0u#q#r#Eg#r~#0u3c#Er]Q1s%gS%jW%v!bOY#EgYZ5TZ]#Eg]^5T^r#Egrs#Fksw#Egwx#Hox#O#Eg#O#P$+i#P#o#Eg#o#p$*R#p~#Eg3c#Ft]Q1s%gS%v!bOY#EgYZ5TZ]#Eg]^5T^r#Egrs#Gmsw#Egwx#Hox#O#Eg#O#P$+T#P#o#Eg#o#p$*R#p~#Eg3c#Gv]Q1s%gS%v!bOY#EgYZ5TZ]#Eg]^5T^r#Egrs#9asw#Egwx#Hox#O#Eg#O#P$)m#P#o#Eg#o#p$*R#p~#Eg3c#Hv]Q1s%jWOY#EgYZ5TZ]#Eg]^5T^r#Egrs#Fksw#Egwx#Iox#O#Eg#O#P$(V#P#o#Eg#o#p$(k#p~#Eg3c#Iv]Q1s%jWOY#EgYZ5TZ]#Eg]^5T^r#Egrs#Fksw#Egwx#Jox#O#Eg#O#P#NT#P#o#Eg#o#p#Ni#p~#Eg1{#JvXQ1s%jWOY#JoYZ8sZ]#Jo]^8s^r#Jors#Kcs#O#Jo#O#P#Mo#P~#Jo1{#KhXQ1sOY#JoYZ8sZ]#Jo]^8s^r#Jors#LTs#O#Jo#O#P#MZ#P~#Jo1{#LYXQ1sOY#JoYZ8sZ]#Jo]^8s^r#Jors#8_s#O#Jo#O#P#Lu#P~#Jo1{#LzTQ1sOY#JoYZ8sZ]#Jo]^8s^~#Jo1{#M`TQ1sOY#JoYZ8sZ]#Jo]^8s^~#Jo1{#MtTQ1sOY#JoYZ8sZ]#Jo]^8s^~#Jo3c#NYTQ1sOY#EgYZ5TZ]#Eg]^5T^~#Eg3c#Nr]Q1s%gS%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$$Zx#O$ k#O#P$'q#P#o$ k#o#p#Eg#p~$ k2P$ tZQ1s%gS%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$$Zx#O$ k#O#P$'q#P~$ k2P$!nZQ1s%gSOY$ kYZ;WZ]$ k]^;W^r$ krs$#asw$ kwx$$Zx#O$ k#O#P$']#P~$ k2P$#hZQ1s%gSOY$ kYZ;WZ]$ k]^;W^r$ krs#=Zsw$ kwx$$Zx#O$ k#O#P$&w#P~$ k2P$$bZQ1s%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$%Tx#O$ k#O#P$&c#P~$ k2P$%[ZQ1s%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx#Jox#O$ k#O#P$%}#P~$ k2P$&STQ1sOY$ kYZ;WZ]$ k]^;W^~$ k2P$&hTQ1sOY$ kYZ;WZ]$ k]^;W^~$ k2P$&|TQ1sOY$ kYZ;WZ]$ k]^;W^~$ k2P$'bTQ1sOY$ kYZ;WZ]$ k]^;W^~$ k2P$'vTQ1sOY$ kYZ;WZ]$ k]^;W^~$ k3c$([TQ1sOY#EgYZ5TZ]#Eg]^5T^~#Eg3c$(t]Q1s%gS%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$$Zx#O$ k#O#P$'q#P#o$ k#o#p#Eg#p~$ k3c$)rTQ1sOY#EgYZ5TZ]#Eg]^5T^~#Eg3c$*[]Q1s%gS%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$$Zx#O$ k#O#P$'q#P#o$ k#o#p#Eg#p~$ k3c$+YTQ1sOY#EgYZ5TZ]#Eg]^5T^~#Eg3c$+nTQ1sOY#EgYZ5TZ]#Eg]^5T^~#EgIo$,UXQ1s%p7[OY#0uYZ(yZ]#0u]^(y^#o#0u#o#p#Eg#p#q#0u#q#r#Eg#r~#0uIo$,xXQ1s%p7[OY#0uYZ(yZ]#0u]^(y^#o#0u#o#p#Eg#p#q#0u#q#r#Eg#r~#0uIo$-n_Q1s%p7[%jWOY#0uYZ(yZ]#0u]^(y^r#0urs#2Rsw#0uwx$.mx#O#0u#O#P$3y#P#o#0u#o#p#Ni#p#q#0u#q#r#Eg#r~#0uHX$.v]Q1s%p7[%jWOY$.mYZBdZ]$.m]^Bd^r$.mrs$/os#O$.m#O#P$3V#P#o$.m#o#p#Jo#p#q$.m#q#r#Jo#r~$.mHX$/v]Q1s%p7[OY$.mYZBdZ]$.m]^Bd^r$.mrs$0os#O$.m#O#P$2c#P#o$.m#o#p#Jo#p#q$.m#q#r#Jo#r~$.mHX$0v]Q1s%p7[OY$.mYZBdZ]$.m]^Bd^r$.mrs#7ks#O$.m#O#P$1o#P#o$.m#o#p#Jo#p#q$.m#q#r#Jo#r~$.mHX$1vXQ1s%p7[OY$.mYZBdZ]$.m]^Bd^#o$.m#o#p#Jo#p#q$.m#q#r#Jo#r~$.mHX$2jXQ1s%p7[OY$.mYZBdZ]$.m]^Bd^#o$.m#o#p#Jo#p#q$.m#q#r#Jo#r~$.mHX$3^XQ1s%p7[OY$.mYZBdZ]$.m]^Bd^#o$.m#o#p#Jo#p#q$.m#q#r#Jo#r~$.mIo$4QXQ1s%p7[OY#0uYZ(yZ]#0u]^(y^#o#0u#o#p#Eg#p#q#0u#q#r#Eg#r~#0uIo$4tXQ1s%p7[OY#0uYZ(yZ]#0u]^(y^#o#0u#o#p#Eg#p#q#0u#q#r#Eg#r~#0uJP$5hXQ1s%p7[OY#._YZ'PZ]#._]^'P^#o#._#o#p$6T#p#q#._#q#r$6T#r~#._3s$6b]Q1s%gS%jW%m`%v!bOY$6TYZGWZ]$6T]^GW^r$6Trs$7Zsw$6Twx#Hox#O$6T#O#P$=k#P#o$6T#o#p$^_Q1s%p7[%gS%m`%v!bOY#._YZ'PZ]#._]^'P^r#._rs$?]sw#._wx#/mx#O#._#O#P$AV#P#o#._#o#p$v#p#q(y#q#r5T#r~(yDT%_sw%=Zwx%DXx#O%=Z#O#P%Iy#P#o%=Z#o#p%ER#p~%=Z-w%>h]%gS%e,X%v!bOY%=ZYZ5TZ]%=Z]^5T^r%=Zrs%?asw%=Zwx%DXx#O%=Z#O#P%Is#P#o%=Z#o#p%ER#p~%=Z-w%?j]%gS%e,X%v!bOY%=ZYZ5TZ]%=Z]^5T^r%=Zrs%@csw%=Zwx%DXx#O%=Z#O#P%D{#P#o%=Z#o#p%ER#p~%=Z-o%@lZ%gS%e,X%v!bOY%@cYZ.kZ]%@c]^.k^w%@cwx%A_x#O%@c#O#P%Ay#P#o%@c#o#p%BP#p~%@c-o%AdV%e,XOw.kwx/qx#O.k#O#P2c#P#o.k#o#p2i#p~.k-o%A|PO~%@c-o%BWZ%gS%e,XOY%ByYZ0xZ]%By]^0x^w%Bywx%Cmx#O%By#O#P%DR#P#o%By#o#p%@c#p~%By,]%CQX%gS%e,XOY%ByYZ0xZ]%By]^0x^w%Bywx%Cmx#O%By#O#P%DR#P~%By,]%CrT%e,XOw0xwx1px#O0x#O#P2V#P~0x,]%DUPO~%By-w%D`X%jW%e,XOr5Trs5ysw5Twx8Rx#O5T#O#P>p#P#o5T#o#p>v#p~5T-w%EOPO~%=Z-w%E[]%gS%jW%e,XOY%FTYZ;WZ]%FT]^;W^r%FTrs%GPsw%FTwx%Hsx#O%FT#O#P%Im#P#o%FT#o#p%=Z#p~%FT,e%F^Z%gS%jW%e,XOY%FTYZ;WZ]%FT]^;W^r%FTrs%GPsw%FTwx%Hsx#O%FT#O#P%Im#P~%FT,e%GWZ%gS%e,XOY%FTYZ;WZ]%FT]^;W^r%FTrs%Gysw%FTwx%Hsx#O%FT#O#P%Ig#P~%FT,e%HQZ%gS%e,XOY%FTYZ;WZ]%FT]^;W^r%FTrs%Bysw%FTwx%Hsx#O%FT#O#P%Ia#P~%FT,e%HzV%jW%e,XOr;Wrs;tsw;Wwx=fx#O;W#O#P>W#P~;W,e%IdPO~%FT,e%IjPO~%FT,e%IpPO~%FT-w%IvPO~%=Z-w%I|PO~%=ZDT%J[_%p7[%gS%e,X%v!bOY%:mYZ(yZ]%:m]^(y^r%:mrs%KZsw%:mwx%;yx#O%:m#O#P%Mg#P#o%:m#o#p%ER#p#q%:m#q#r%=Z#r~%:mC{%Kf]%p7[%gS%e,X%v!bOY%KZYZ+oZ]%KZ]^+o^w%KZwx%L_x#O%KZ#O#P%MR#P#o%KZ#o#p%BP#p#q%KZ#q#r%@c#r~%KZC{%LfX%p7[%e,XOw+owx-Vx#O+o#O#P3u#P#o+o#o#p2i#p#q+o#q#r.k#r~+oC{%MWT%p7[O#o%KZ#o#p%@c#p#q%KZ#q#r%@c#r~%KZDT%MlT%p7[O#o%:m#o#p%=Z#p#q%:m#q#r%=Z#r~%:mDT%NQT%p7[O#o%:m#o#p%=Z#p#q%:m#q#r%=Z#r~%:mGk%NnZ%p7[%jW%e,X%sp%x#tOr!!Srs)wsw!!Swx!-Qx#O!!S#O#P!2l#P#o!!S#o#p!+d#p#q!!S#q#r!#j#r~!!SGk& fT%p7[O#o%8R#o#p& u#p#q%8R#q#r& u#r~%8R1_&!U]%gS%jW%e,X%sp%v!b%x#tOY& uYZ!#jZ]& u]^!#j^r& urs%>_sw& uwx&!}x#O& u#O#Pu#P#o& u#o#p{#p~& u1_YX%jW%e,X%sp%x#tOr!#jrs5ysw!#jwx!%Yx#O!#j#O#P!+^#P#o!#j#o#p!+d#p~!#j1_PO~& u1_&$U]%gS%jW%e,XOY%FTYZ;WZ]%FT]^;W^r%FTrs%GPsw%FTwx%Hsx#O%FT#O#P%Im#P#o%FT#o#p& u#p~%FTGk&%[Z%p7[%jW%e,X%sp%x#tOr!!Srs)wsw!!Swx&%}x#O!!S#O#P&'P#P#o!!S#o#p&'e#p#q!!S#q#r!#j#r~!!SGk&&^Z%h!f%p7[%jW%f,X%sp%x#tOr!.|rsCWsw!.|wx!.Ox#O!.|#O#P!1r#P#o!.|#o#p!)x#p#q!.|#q#r!&t#r~!.|j#P#o;W#o#p!#j#p~;WGk&(^T%p7[O#o%8R#o#p& u#p#q%8R#q#r& u#r~%8R1_&(v]%gS%jW%e,XOY%FTYZ;WZ]%FT]^;W^r%FTrs%GPsw%FTwx%Hsx#O%FT#O#P%Im#P#o%FT#o#p& u#p~%FTG{&*SZf,X%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}}_$|R%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!P$}!P!Q&?|!Q!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gz&@a]%OQ%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&Amu!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!O$}!O!P&DQ!P!Q$}!Q![&GW![!d$}!d!e&IY!e!g$}!g!h&9S!h!l$}!l!m&=d!m!q$}!q!r&LS!r!z$}!z!{&Nv!{#O$}#O#P!3Q#P#R$}#R#S&GW#S#U$}#U#V&IY#V#X$}#X#Y&9S#Y#^$}#^#_&=d#_#c$}#c#d&LS#d#l$}#l#m&Nv#m#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&Dc]%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q![&E[![#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&Eog!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q![&E[![!g$}!g!h&9S!h!l$}!l!m&=d!m#O$}#O#P!3Q#P#R$}#R#S&E[#S#X$}#X#Y&9S#Y#^$}#^#_&=d#_#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&Gki!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!O$}!O!P&DQ!P!Q$}!Q![&GW![!g$}!g!h&9S!h!l$}!l!m&=d!m#O$}#O#P!3Q#P#R$}#R#S&GW#S#X$}#X#Y&9S#Y#^$}#^#_&=d#_#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&Ik`%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q!R&Jm!R!S&Jm!S#O$}#O#P!3Q#P#R$}#R#S&Jm#S#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&KQ`!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q!R&Jm!R!S&Jm!S#O$}#O#P!3Q#P#R$}#R#S&Jm#S#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&Le_%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q!Y&Md!Y#O$}#O#P!3Q#P#R$}#R#S&Md#S#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&Mw_!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q!Y&Md!Y#O$}#O#P!3Q#P#R$}#R#S&Md#S#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy' Xc%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q!['!d![!c$}!c!i'!d!i#O$}#O#P!3Q#P#R$}#R#S'!d#S#T$}#T#Z'!d#Z#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy'!wc!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q!['!d![!c$}!c!i'!d!i#O$}#O#P!3Q#P#R$}#R#S'!d#S#T$}#T#Z'!d#Z#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Mg'$g]x1s%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`'%`!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}yx#O!j#P#o;W#o#p!3f#p~;WGz'NU]$uQ%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$} spec_identifier$2[value] || -1 }],
tokenPrec: 6594
})
const pythonLanguage = LezerLanguage.define({
parser: parser$7.configure({
props: [
indentNodeProp.add({ Body: continuedIndent() }),
foldNodeProp.add({ 'Body ArrayExpression DictionaryExpression': foldInside$1 }),
styleTags({
"async '*' '**' FormatConversion": tags$1.modifier,
'for while if elif else try except finally return raise break continue with pass assert await yield': tags$1.controlKeyword,
'in not and or is del': tags$1.operatorKeyword,
'import from def class global nonlocal lambda': tags$1.definitionKeyword,
'with as print': tags$1.keyword,
self: tags$1.self,
Boolean: tags$1.bool,
None: tags$1.null,
VariableName: tags$1.variableName,
'CallExpression/VariableName': tags$1.function(tags$1.variableName),
'FunctionDefinition/VariableName': tags$1.function(tags$1.definition(tags$1.variableName)),
'ClassDefinition/VariableName': tags$1.definition(tags$1.className),
PropertyName: tags$1.propertyName,
'CallExpression/MemberExpression/ProperyName': tags$1.function(tags$1.propertyName),
Comment: tags$1.lineComment,
Number: tags$1.number,
String: tags$1.string,
FormatString: tags$1.special(tags$1.string),
UpdateOp: tags$1.updateOperator,
ArithOp: tags$1.arithmeticOperator,
BitOp: tags$1.bitwiseOperator,
CompareOp: tags$1.compareOperator,
AssignOp: tags$1.definitionOperator,
Ellipsis: tags$1.punctuation,
At: tags$1.meta,
'( )': tags$1.paren,
'[ ]': tags$1.squareBracket,
'{ }': tags$1.brace,
'.': tags$1.derefOperator,
', ;': tags$1.separator
})
]
}),
languageData: { closeBrackets: { brackets: ['(', '[', '{', "'", '"', "'''", '"""'] }, commentTokens: { line: '#' }, indentOnInput: /^\s*[\}\]\)]$/ }
})
function python() {
return new LanguageSupport(pythonLanguage)
}
var _m26 = Object.freeze({ __proto__: null, python: python, pythonLanguage: pythonLanguage })
const descendantOp = 92,
Unit = 1,
callee = 93,
identifier$1 = 94
const space$1 = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200, 8201, 8202, 8232, 8233, 8239, 8287, 12288]
const colon = 58,
parenL = 40,
underscore = 95,
bracketL = 91,
dash = 45,
period = 46,
hash = 35,
percent = 37
function isAlpha$1(ch) {
return (ch >= 65 && ch <= 90) || (ch >= 97 && ch <= 122) || ch >= 161
}
function isDigit(ch) {
return ch >= 48 && ch <= 57
}
const identifiers = new ExternalTokenizer((input, token) => {
let start = token.start,
pos = start,
inside = false
for (;;) {
let next = input.get(pos)
if (isAlpha$1(next) || next == dash || next == underscore || (inside && isDigit(next))) {
if (!inside && (next != dash || pos > start)) inside = true
pos++
continue
}
if (inside) token.accept(next == parenL ? callee : identifier$1, pos)
break
}
})
const descendant = new ExternalTokenizer((input, token) => {
if (space$1.includes(input.get(token.start - 1))) {
let next = input.get(token.start)
if (isAlpha$1(next) || next == underscore || next == hash || next == period || next == bracketL || next == colon || next == dash) token.accept(descendantOp, token.start)
}
})
const unitToken = new ExternalTokenizer((input, token) => {
let { start } = token
if (!space$1.includes(input.get(start - 1))) {
let next = input.get(start)
if (next == percent) token.accept(Unit, start + 1)
if (isAlpha$1(next)) {
let pos = start + 1
while (isAlpha$1(input.get(pos))) pos++
token.accept(Unit, pos)
}
}
})
const spec_callee = { __proto__: null, not: 30, url: 64, 'url-prefix': 64, domain: 64, regexp: 64, selector: 132 }
const spec_AtKeyword = { __proto__: null, '@import': 112, '@media': 136, '@charset': 140, '@namespace': 144, '@keyframes': 150, '@supports': 162 }
const spec_identifier$1 = { __proto__: null, not: 126, only: 126, from: 156, to: 158 }
const parser$6 = Parser.deserialize({
version: 13,
states:
"7WOYQ[OOOOQP'#Cc'#CcOOQP'#Cb'#CbO!ZQ[O'#CeO!}QXO'#C`O#UQ[O'#CgO#aQ[O'#DOO#fQ[O'#DSOOQP'#Eb'#EbO#kQdO'#DdO$SQ[O'#DqO#kQdO'#DsO$eQ[O'#DuO$pQ[O'#DxO$uQ[O'#EOO%TQ[O'#EQOOQS'#Ea'#EaOOQS'#ER'#ERQYQ[OOOOQP'#Cf'#CfOOQP,59P,59PO!ZQ[O,59PO%[Q[O'#ESO%vQWO,58zO&OQ[O,59RO#aQ[O,59jO#fQ[O,59nO%[Q[O,59rO%[Q[O,59tO%[Q[O,59uO'[Q[O'#D_OOQS,58z,58zOOQP'#Cj'#CjOOQO'#Cp'#CpOOQP,59R,59RO'cQWO,59RO'hQWO,59ROOQP'#DQ'#DQOOQP,59j,59jOOQO'#DU'#DUO'mQ`O,59nOOQS'#Cr'#CrO#kQdO'#CsO'uQvO'#CuO(|QtO,5:OOOQO'#Cz'#CzO'hQWO'#CyO)bQWO'#C{OOQS'#Ef'#EfOOQO'#Dg'#DgO)gQ[O'#DnO)uQWO'#EhO$uQ[O'#DlO*TQWO'#DoOOQO'#Ei'#EiO%yQWO,5:]O*YQpO,5:_OOQS'#Dw'#DwO*bQWO,5:aO*gQ[O,5:aOOQO'#Dz'#DzO*oQWO,5:dO*tQWO,5:jO*|QWO,5:lOOQS-E8P-E8POOQP1G.k1G.kO+pQXO,5:nOOQO-E8Q-E8QOOQS1G.f1G.fOOQP1G.m1G.mO'cQWO1G.mO'hQWO1G.mOOQP1G/U1G/UO+}Q`O1G/YO,hQXO1G/^O-OQXO1G/`O-fQXO1G/aO-|QXO'#CcO.qQWO'#D`OOQS,59y,59yO.vQWO,59yO/OQ[O,59yO/VQ[O'#CnO/^QdO'#CqOOQP1G/Y1G/YO#kQdO1G/YO/eQpO,59_OOQS,59a,59aO#kQdO,59cO/mQWO1G/jOOQS,59e,59eO/rQ!bO,59gO/zQWO'#DgO0VQWO,5:SO0[QWO,5:YO$uQ[O,5:UO$uQ[O'#EXO0dQWO,5;SO0oQWO,5:WO%[Q[O,5:ZOOQS1G/w1G/wOOQS1G/y1G/yOOQS1G/{1G/{O1QQWO1G/{O1VQdO'#D{OOQS1G0O1G0OOOQS1G0U1G0UOOQS1G0W1G0WOOQP7+$X7+$XOOQP7+$t7+$tO#kQdO7+$tO#kQdO,59zO1eQ[O'#EWO1oQWO1G/eOOQS1G/e1G/eO1oQWO1G/eO1wQXO'#EdO2OQWO,59YO2TQtO'#ETO2uQdO'#EeO3PQWO,59]O3UQpO7+$tOOQS1G.y1G.yOOQS1G.}1G.}OOQS7+%U7+%UO3^QWO1G/RO#kQdO1G/nOOQO1G/t1G/tOOQO1G/p1G/pO3cQWO,5:sOOQO-E8V-E8VO3qQXO1G/uOOQS7+%g7+%gO3xQYO'#CuO%yQWO'#EYO4QQdO,5:gOOQS,5:g,5:gO4`QpO<P!a!b$w!b!c>o!c!}$w!}#O?{#O#P$w#P#Q@W#Q#R2U#R#T$w#T#U@c#U#c$w#c#dAb#d#o$w#o#pAq#p#q2U#q#rA|#r#sBX#s#y$w#y#z%]#z$f$w$f$g%]$g#BY$w#BY#BZ%]#BZ$IS$w$IS$I_%]$I_$I|$w$I|$JO%]$JO$JT$w$JT$JU%]$JU$KV$w$KV$KW%]$KW&FU$w&FU&FV%]&FV~$wW$zQOy%Qz~%QW%VQqWOy%Qz~%Q~%bf#S~OX%QX^&v^p%Qpq&vqy%Qz#y%Q#y#z&v#z$f%Q$f$g&v$g#BY%Q#BY#BZ&v#BZ$IS%Q$IS$I_&v$I_$I|%Q$I|$JO&v$JO$JT%Q$JT$JU&v$JU$KV%Q$KV$KW&v$KW&FU%Q&FU&FV&v&FV~%Q~&}f#S~qWOX%QX^&v^p%Qpq&vqy%Qz#y%Q#y#z&v#z$f%Q$f$g&v$g#BY%Q#BY#BZ&v#BZ$IS%Q$IS$I_&v$I_$I|%Q$I|$JO&v$JO$JT%Q$JT$JU&v$JU$KV%Q$KV$KW&v$KW&FU%Q&FU&FV&v&FV~%Q^(fSOy%Qz#]%Q#]#^(r#^~%Q^(wSqWOy%Qz#a%Q#a#b)T#b~%Q^)YSqWOy%Qz#d%Q#d#e)f#e~%Q^)kSqWOy%Qz#c%Q#c#d)w#d~%Q^)|SqWOy%Qz#f%Q#f#g*Y#g~%Q^*_SqWOy%Qz#h%Q#h#i*k#i~%Q^*pSqWOy%Qz#T%Q#T#U*|#U~%Q^+RSqWOy%Qz#b%Q#b#c+_#c~%Q^+dSqWOy%Qz#h%Q#h#i+p#i~%Q^+wQ!UUqWOy%Qz~%Q~,QUOY+}Zr+}rs,ds#O+}#O#P,i#P~+}~,iOj~~,lPO~+}_,tWsPOy%Qz!Q%Q!Q![-^![!c%Q!c!i-^!i#T%Q#T#Z-^#Z~%Q^-cWqWOy%Qz!Q%Q!Q![-{![!c%Q!c!i-{!i#T%Q#T#Z-{#Z~%Q^.QWqWOy%Qz!Q%Q!Q![.j![!c%Q!c!i.j!i#T%Q#T#Z.j#Z~%Q^.qWhUqWOy%Qz!Q%Q!Q![/Z![!c%Q!c!i/Z!i#T%Q#T#Z/Z#Z~%Q^/bWhUqWOy%Qz!Q%Q!Q![/z![!c%Q!c!i/z!i#T%Q#T#Z/z#Z~%Q^0PWqWOy%Qz!Q%Q!Q![0i![!c%Q!c!i0i!i#T%Q#T#Z0i#Z~%Q^0pWhUqWOy%Qz!Q%Q!Q![1Y![!c%Q!c!i1Y!i#T%Q#T#Z1Y#Z~%Q^1_WqWOy%Qz!Q%Q!Q![1w![!c%Q!c!i1w!i#T%Q#T#Z1w#Z~%Q^2OQhUqWOy%Qz~%QY2XSOy%Qz!_%Q!_!`2e!`~%QY2lQyQqWOy%Qz~%QX2wQWPOy%Qz~%Q~3QUOY2}Zw2}wx,dx#O2}#O#P3d#P~2}~3gPO~2}_3oQaVOy%Qz~%Q~3zO`~_4RSTPlSOy%Qz!_%Q!_!`2e!`~%Q_4fUlS!OPOy%Qz!O%Q!O!P4x!P!Q%Q!Q![7_![~%Q^4}SqWOy%Qz!Q%Q!Q![5Z![~%Q^5bWqW#ZUOy%Qz!Q%Q!Q![5Z![!g%Q!g!h5z!h#X%Q#X#Y5z#Y~%Q^6PWqWOy%Qz{%Q{|6i|}%Q}!O6i!O!Q%Q!Q![6z![~%Q^6nSqWOy%Qz!Q%Q!Q![6z![~%Q^7RSqW#ZUOy%Qz!Q%Q!Q![6z![~%Q^7fYqW#ZUOy%Qz!O%Q!O!P8U!P!Q%Q!Q![7_![!g%Q!g!h5z!h#X%Q#X#Y5z#Y~%Q^8]WqW#ZUOy%Qz!Q%Q!Q![8U![!g%Q!g!h5z!h#X%Q#X#Y5z#Y~%Q_8zQcVOy%Qz~%Q^9VUlSOy%Qz!O%Q!O!P4x!P!Q%Q!Q![7_![~%Q_9nS#VPOy%Qz!Q%Q!Q![5Z![~%Q~:PRlSOy%Qz{:Y{~%Q~:_SqWOy:Yyz:kz{;`{~:Y~:nROz:kz{:w{~:k~:zTOz:kz{:w{!P:k!P!Q;Z!Q~:k~;`OQ~~;eUqWOy:Yyz:kz{;`{!P:Y!P!Q;w!Q~:Y~US{POy%Qz!`%Q!`!a>b!a~%QX>iQ{PqWOy%Qz~%QX>rUOy%Qz!c%Q!c!}?U!}#T%Q#T#o?U#o~%QX?]Y!XPqWOy%Qz}%Q}!O?U!O!Q%Q!Q![?U![!c%Q!c!}?U!}#T%Q#T#o?U#o~%QX@QQwPOy%Qz~%Q^@]QuUOy%Qz~%QX@fSOy%Qz#b%Q#b#c@r#c~%QX@wSqWOy%Qz#W%Q#W#XAT#X~%QXA[Q!_PqWOy%Qz~%QXAeSOy%Qz#f%Q#f#gAT#g~%QXAvQ!QPOy%Qz~%Q_BRQ!PVOy%Qz~%QZB^S!OPOy%Qz!_%Q!_!`2e!`~%Q',
tokenizers: [descendant, unitToken, identifiers, 0, 1, 2, 3],
topRules: { StyleSheet: [0, 3] },
specialized: [
{ term: 93, get: value => spec_callee[value] || -1 },
{ term: 55, get: value => spec_AtKeyword[value] || -1 },
{ term: 94, get: value => spec_identifier$1[value] || -1 }
],
tokenPrec: 1060
})
let _properties = null
function properties() {
if (!_properties && typeof document == 'object' && document.body) {
let names = []
for (let prop in document.body.style) {
if (!/[A-Z]|^-|^(item|length)$/.test(prop)) names.push(prop)
}
_properties = names.sort().map(name => ({ type: 'property', label: name }))
}
return _properties || []
}
const pseudoClasses = [
'active',
'after',
'before',
'checked',
'default',
'disabled',
'empty',
'enabled',
'first-child',
'first-letter',
'first-line',
'first-of-type',
'focus',
'hover',
'in-range',
'indeterminate',
'invalid',
'lang',
'last-child',
'last-of-type',
'link',
'not',
'nth-child',
'nth-last-child',
'nth-last-of-type',
'nth-of-type',
'only-of-type',
'only-child',
'optional',
'out-of-range',
'placeholder',
'read-only',
'read-write',
'required',
'root',
'selection',
'target',
'valid',
'visited'
].map(name => ({ type: 'class', label: name }))
const values = [
'above',
'absolute',
'activeborder',
'additive',
'activecaption',
'after-white-space',
'ahead',
'alias',
'all',
'all-scroll',
'alphabetic',
'alternate',
'always',
'antialiased',
'appworkspace',
'asterisks',
'attr',
'auto',
'auto-flow',
'avoid',
'avoid-column',
'avoid-page',
'avoid-region',
'axis-pan',
'background',
'backwards',
'baseline',
'below',
'bidi-override',
'blink',
'block',
'block-axis',
'bold',
'bolder',
'border',
'border-box',
'both',
'bottom',
'break',
'break-all',
'break-word',
'bullets',
'button',
'button-bevel',
'buttonface',
'buttonhighlight',
'buttonshadow',
'buttontext',
'calc',
'capitalize',
'caps-lock-indicator',
'caption',
'captiontext',
'caret',
'cell',
'center',
'checkbox',
'circle',
'cjk-decimal',
'clear',
'clip',
'close-quote',
'col-resize',
'collapse',
'color',
'color-burn',
'color-dodge',
'column',
'column-reverse',
'compact',
'condensed',
'contain',
'content',
'contents',
'content-box',
'context-menu',
'continuous',
'copy',
'counter',
'counters',
'cover',
'crop',
'cross',
'crosshair',
'currentcolor',
'cursive',
'cyclic',
'darken',
'dashed',
'decimal',
'decimal-leading-zero',
'default',
'default-button',
'dense',
'destination-atop',
'destination-in',
'destination-out',
'destination-over',
'difference',
'disc',
'discard',
'disclosure-closed',
'disclosure-open',
'document',
'dot-dash',
'dot-dot-dash',
'dotted',
'double',
'down',
'e-resize',
'ease',
'ease-in',
'ease-in-out',
'ease-out',
'element',
'ellipse',
'ellipsis',
'embed',
'end',
'ethiopic-abegede-gez',
'ethiopic-halehame-aa-er',
'ethiopic-halehame-gez',
'ew-resize',
'exclusion',
'expanded',
'extends',
'extra-condensed',
'extra-expanded',
'fantasy',
'fast',
'fill',
'fill-box',
'fixed',
'flat',
'flex',
'flex-end',
'flex-start',
'footnotes',
'forwards',
'from',
'geometricPrecision',
'graytext',
'grid',
'groove',
'hand',
'hard-light',
'help',
'hidden',
'hide',
'higher',
'highlight',
'highlighttext',
'horizontal',
'hsl',
'hsla',
'hue',
'icon',
'ignore',
'inactiveborder',
'inactivecaption',
'inactivecaptiontext',
'infinite',
'infobackground',
'infotext',
'inherit',
'initial',
'inline',
'inline-axis',
'inline-block',
'inline-flex',
'inline-grid',
'inline-table',
'inset',
'inside',
'intrinsic',
'invert',
'italic',
'justify',
'keep-all',
'landscape',
'large',
'larger',
'left',
'level',
'lighter',
'lighten',
'line-through',
'linear',
'linear-gradient',
'lines',
'list-item',
'listbox',
'listitem',
'local',
'logical',
'loud',
'lower',
'lower-hexadecimal',
'lower-latin',
'lower-norwegian',
'lowercase',
'ltr',
'luminosity',
'manipulation',
'match',
'matrix',
'matrix3d',
'medium',
'menu',
'menutext',
'message-box',
'middle',
'min-intrinsic',
'mix',
'monospace',
'move',
'multiple',
'multiple_mask_images',
'multiply',
'n-resize',
'narrower',
'ne-resize',
'nesw-resize',
'no-close-quote',
'no-drop',
'no-open-quote',
'no-repeat',
'none',
'normal',
'not-allowed',
'nowrap',
'ns-resize',
'numbers',
'numeric',
'nw-resize',
'nwse-resize',
'oblique',
'opacity',
'open-quote',
'optimizeLegibility',
'optimizeSpeed',
'outset',
'outside',
'outside-shape',
'overlay',
'overline',
'padding',
'padding-box',
'painted',
'page',
'paused',
'perspective',
'pinch-zoom',
'plus-darker',
'plus-lighter',
'pointer',
'polygon',
'portrait',
'pre',
'pre-line',
'pre-wrap',
'preserve-3d',
'progress',
'push-button',
'radial-gradient',
'radio',
'read-only',
'read-write',
'read-write-plaintext-only',
'rectangle',
'region',
'relative',
'repeat',
'repeating-linear-gradient',
'repeating-radial-gradient',
'repeat-x',
'repeat-y',
'reset',
'reverse',
'rgb',
'rgba',
'ridge',
'right',
'rotate',
'rotate3d',
'rotateX',
'rotateY',
'rotateZ',
'round',
'row',
'row-resize',
'row-reverse',
'rtl',
'run-in',
'running',
's-resize',
'sans-serif',
'saturation',
'scale',
'scale3d',
'scaleX',
'scaleY',
'scaleZ',
'screen',
'scroll',
'scrollbar',
'scroll-position',
'se-resize',
'self-start',
'self-end',
'semi-condensed',
'semi-expanded',
'separate',
'serif',
'show',
'single',
'skew',
'skewX',
'skewY',
'skip-white-space',
'slide',
'slider-horizontal',
'slider-vertical',
'sliderthumb-horizontal',
'sliderthumb-vertical',
'slow',
'small',
'small-caps',
'small-caption',
'smaller',
'soft-light',
'solid',
'source-atop',
'source-in',
'source-out',
'source-over',
'space',
'space-around',
'space-between',
'space-evenly',
'spell-out',
'square',
'start',
'static',
'status-bar',
'stretch',
'stroke',
'stroke-box',
'sub',
'subpixel-antialiased',
'svg_masks',
'super',
'sw-resize',
'symbolic',
'symbols',
'system-ui',
'table',
'table-caption',
'table-cell',
'table-column',
'table-column-group',
'table-footer-group',
'table-header-group',
'table-row',
'table-row-group',
'text',
'text-bottom',
'text-top',
'textarea',
'textfield',
'thick',
'thin',
'threeddarkshadow',
'threedface',
'threedhighlight',
'threedlightshadow',
'threedshadow',
'to',
'top',
'transform',
'translate',
'translate3d',
'translateX',
'translateY',
'translateZ',
'transparent',
'ultra-condensed',
'ultra-expanded',
'underline',
'unidirectional-pan',
'unset',
'up',
'upper-latin',
'uppercase',
'url',
'var',
'vertical',
'vertical-text',
'view-box',
'visible',
'visibleFill',
'visiblePainted',
'visibleStroke',
'visual',
'w-resize',
'wait',
'wave',
'wider',
'window',
'windowframe',
'windowtext',
'words',
'wrap',
'wrap-reverse',
'x-large',
'x-small',
'xor',
'xx-large',
'xx-small'
]
.map(name => ({ type: 'keyword', label: name }))
.concat(
[
'aliceblue',
'antiquewhite',
'aqua',
'aquamarine',
'azure',
'beige',
'bisque',
'black',
'blanchedalmond',
'blue',
'blueviolet',
'brown',
'burlywood',
'cadetblue',
'chartreuse',
'chocolate',
'coral',
'cornflowerblue',
'cornsilk',
'crimson',
'cyan',
'darkblue',
'darkcyan',
'darkgoldenrod',
'darkgray',
'darkgreen',
'darkkhaki',
'darkmagenta',
'darkolivegreen',
'darkorange',
'darkorchid',
'darkred',
'darksalmon',
'darkseagreen',
'darkslateblue',
'darkslategray',
'darkturquoise',
'darkviolet',
'deeppink',
'deepskyblue',
'dimgray',
'dodgerblue',
'firebrick',
'floralwhite',
'forestgreen',
'fuchsia',
'gainsboro',
'ghostwhite',
'gold',
'goldenrod',
'gray',
'grey',
'green',
'greenyellow',
'honeydew',
'hotpink',
'indianred',
'indigo',
'ivory',
'khaki',
'lavender',
'lavenderblush',
'lawngreen',
'lemonchiffon',
'lightblue',
'lightcoral',
'lightcyan',
'lightgoldenrodyellow',
'lightgray',
'lightgreen',
'lightpink',
'lightsalmon',
'lightseagreen',
'lightskyblue',
'lightslategray',
'lightsteelblue',
'lightyellow',
'lime',
'limegreen',
'linen',
'magenta',
'maroon',
'mediumaquamarine',
'mediumblue',
'mediumorchid',
'mediumpurple',
'mediumseagreen',
'mediumslateblue',
'mediumspringgreen',
'mediumturquoise',
'mediumvioletred',
'midnightblue',
'mintcream',
'mistyrose',
'moccasin',
'navajowhite',
'navy',
'oldlace',
'olive',
'olivedrab',
'orange',
'orangered',
'orchid',
'palegoldenrod',
'palegreen',
'paleturquoise',
'palevioletred',
'papayawhip',
'peachpuff',
'peru',
'pink',
'plum',
'powderblue',
'purple',
'rebeccapurple',
'red',
'rosybrown',
'royalblue',
'saddlebrown',
'salmon',
'sandybrown',
'seagreen',
'seashell',
'sienna',
'silver',
'skyblue',
'slateblue',
'slategray',
'snow',
'springgreen',
'steelblue',
'tan',
'teal',
'thistle',
'tomato',
'turquoise',
'violet',
'wheat',
'white',
'whitesmoke',
'yellow',
'yellowgreen'
].map(name => ({ type: 'constant', label: name }))
)
const tags = [
'a',
'abbr',
'address',
'article',
'aside',
'b',
'bdi',
'bdo',
'blockquote',
'body',
'br',
'button',
'canvas',
'caption',
'cite',
'code',
'col',
'colgroup',
'dd',
'del',
'details',
'dfn',
'dialog',
'div',
'dl',
'dt',
'em',
'figcaption',
'figure',
'footer',
'form',
'header',
'hgroup',
'h1',
'h2',
'h3',
'h4',
'h5',
'h6',
'hr',
'html',
'i',
'iframe',
'img',
'input',
'ins',
'kbd',
'label',
'legend',
'li',
'main',
'meter',
'nav',
'ol',
'output',
'p',
'pre',
'ruby',
'section',
'select',
'small',
'source',
'span',
'strong',
'sub',
'summary',
'sup',
'table',
'tbody',
'td',
'template',
'textarea',
'tfoot',
'th',
'thead',
'tr',
'u',
'ul'
].map(name => ({ type: 'type', label: name }))
const span = /^[\w-]*/
const completeCSS = context => {
let { state, pos } = context,
node = syntaxTree(state).resolve(pos, -1)
if (node.name == 'PropertyName') return { from: node.from, options: properties(), span }
if (node.name == 'ValueName') return { from: node.from, options: values, span }
if (node.name == 'PseudoClassName') return { from: node.from, options: pseudoClasses, span }
if (node.name == 'TagName') {
for (let { parent } = node; parent; parent = parent.parent) if (parent.name == 'Block') return { from: node.from, options: properties(), span }
return { from: node.from, options: tags, span }
}
if (!context.explicit) return null
let above = node.resolve(pos),
before = above.childBefore(pos)
if (before && before.name == ':' && above.name == 'PseudoClassSelector') return { from: pos, options: pseudoClasses, span }
if ((before && before.name == ':' && above.name == 'Declaration') || above.name == 'ArgList') return { from: pos, options: values, span }
if (above.name == 'Block') return { from: pos, options: properties(), span }
return null
}
const cssLanguage = LezerLanguage.define({
parser: parser$6.configure({
props: [
indentNodeProp.add({ Declaration: continuedIndent() }),
foldNodeProp.add({ Block: foldInside$1 }),
styleTags({
'import charset namespace keyframes': tags$1.definitionKeyword,
'media supports': tags$1.controlKeyword,
'from to': tags$1.keyword,
NamespaceName: tags$1.namespace,
KeyframeName: tags$1.labelName,
TagName: tags$1.typeName,
ClassName: tags$1.className,
PseudoClassName: tags$1.constant(tags$1.className),
not: tags$1.operatorKeyword,
IdName: tags$1.labelName,
'FeatureName PropertyName AttributeName': tags$1.propertyName,
NumberLiteral: tags$1.number,
KeywordQuery: tags$1.keyword,
UnaryQueryOp: tags$1.operatorKeyword,
callee: tags$1.keyword,
'CallTag ValueName': tags$1.atom,
Callee: tags$1.variableName,
Unit: tags$1.unit,
'UniversalSelector NestingSelector': tags$1.definitionOperator,
AtKeyword: tags$1.keyword,
MatchOp: tags$1.compareOperator,
'ChildOp SiblingOp, LogicOp': tags$1.logicOperator,
BinOp: tags$1.arithmeticOperator,
Important: tags$1.modifier,
Comment: tags$1.blockComment,
ParenthesizedContent: tags$1.special(tags$1.name),
ColorLiteral: tags$1.color,
StringLiteral: tags$1.string,
':': tags$1.punctuation,
'PseudoOp #': tags$1.derefOperator,
'; ,': tags$1.separator,
'( )': tags$1.paren,
'[ ]': tags$1.squareBracket,
'{ }': tags$1.brace
})
]
}),
languageData: { commentTokens: { block: { open: '/*', close: '*/' } }, indentOnInput: /^\s*\}$/ }
})
const cssCompletion = cssLanguage.data.of({ autocomplete: completeCSS })
function css() {
return new LanguageSupport(cssLanguage, cssCompletion)
}
var _m27 = Object.freeze({ __proto__: null, css: css, cssCompletion: cssCompletion, cssLanguage: cssLanguage })
const StartTag$1 = 1,
StartCloseTag$1 = 2,
MismatchedStartCloseTag = 3,
missingCloseTag = 33,
IncompleteCloseTag = 4,
SelfCloseEndTag = 5,
commentContent$2 = 34,
Element$4 = 10,
OpenTag$1 = 11,
RawText = 25,
Dialect_noMatch = 0
const selfClosers = {
area: true,
base: true,
br: true,
col: true,
command: true,
embed: true,
frame: true,
hr: true,
img: true,
input: true,
keygen: true,
link: true,
meta: true,
param: true,
source: true,
track: true,
wbr: true,
menuitem: true
}
const implicitlyClosed = { dd: true, li: true, optgroup: true, option: true, p: true, rp: true, rt: true, tbody: true, td: true, tfoot: true, th: true, tr: true }
const closeOnOpen = {
dd: { dd: true, dt: true },
dt: { dd: true, dt: true },
li: { li: true },
option: { option: true, optgroup: true },
optgroup: { optgroup: true },
p: {
address: true,
article: true,
aside: true,
blockquote: true,
dir: true,
div: true,
dl: true,
fieldset: true,
footer: true,
form: true,
h1: true,
h2: true,
h3: true,
h4: true,
h5: true,
h6: true,
header: true,
hgroup: true,
hr: true,
menu: true,
nav: true,
ol: true,
p: true,
pre: true,
section: true,
table: true,
ul: true
},
rp: { rp: true, rt: true },
rt: { rp: true, rt: true },
tbody: { tbody: true, tfoot: true },
td: { td: true, th: true },
tfoot: { tbody: true },
th: { td: true, th: true },
thead: { tbody: true, tfoot: true },
tr: { tr: true }
}
function nameChar$1(ch) {
return ch == 45 || ch == 46 || ch == 58 || (ch >= 65 && ch <= 90) || ch == 95 || (ch >= 97 && ch <= 122) || ch >= 161
}
function isSpace$1(ch) {
return ch == 9 || ch == 10 || ch == 13 || ch == 32
}
let cachedName$1 = null,
cachedInput$1 = null,
cachedPos$1 = 0
function tagNameAfter$1(input, pos) {
if (cachedPos$1 == pos && cachedInput$1 == input) return cachedName$1
let next = input.get(pos)
while (isSpace$1(next)) next = input.get(++pos)
let start = pos
while (nameChar$1(next)) next = input.get(++pos)
cachedInput$1 = input
cachedPos$1 = pos
return (cachedName$1 = pos > start ? input.read(start, pos).toLowerCase() : next == question || next == bang ? undefined : null)
}
const lessThan = 60,
greaterThan = 62,
slash = 47,
question = 63,
bang = 33
function ElementContext$1(name, parent) {
this.name = name
this.parent = parent
this.hash = parent ? parent.hash : 0
for (let i = 0; i < name.length; i++) this.hash += (this.hash << 4) + name.charCodeAt(i) + (name.charCodeAt(i) << 8)
}
const elementContext$1 = new ContextTracker({
start: null,
shift(context, term, input, stack) {
return term == StartTag$1 ? new ElementContext$1(tagNameAfter$1(input, stack.pos) || '', context) : context
},
reduce(context, term) {
return term == Element$4 && context ? context.parent : context
},
reuse(context, node, input, stack) {
let type = node.type.id
return type == StartTag$1 || type == OpenTag$1 ? new ElementContext$1(tagNameAfter$1(input, stack.pos - node.length + 1) || '', context) : context
},
hash(context) {
return context ? context.hash : 0
},
strict: false
})
const tagStart = new ExternalTokenizer((input, token, stack) => {
let pos = token.start,
first = input.get(pos),
close
if (first < 0 && stack.context) token.accept(missingCloseTag, token.start)
if (first != lessThan) return
pos++
if ((close = input.get(pos) == slash)) pos++
let name = tagNameAfter$1(input, pos)
if (name === undefined) return
if (!name) return token.accept(close ? IncompleteCloseTag : StartTag$1, pos)
let parent = stack.context ? stack.context.name : null
if (close) {
if (name == parent) return token.accept(StartCloseTag$1, pos)
if (parent && implicitlyClosed[parent]) return token.accept(missingCloseTag, token.start)
if (stack.dialectEnabled(Dialect_noMatch)) return token.accept(StartCloseTag$1, pos)
for (let cx = stack.context; cx; cx = cx.parent) if (cx.name == name) return
token.accept(MismatchedStartCloseTag, pos)
} else {
if (parent && closeOnOpen[parent] && closeOnOpen[parent][name]) token.accept(missingCloseTag, token.start)
else token.accept(StartTag$1, pos)
}
})
const selfClosed = new ExternalTokenizer((input, token, stack) => {
let next = input.get(token.start),
end = token.start + 1
if (next == slash) {
if (input.get(end) != greaterThan) return
end++
} else if (next != greaterThan) {
return
}
if (stack.context && selfClosers[stack.context.name]) token.accept(SelfCloseEndTag, end)
})
const commentContent$1$1 = new ExternalTokenizer((input, token) => {
let pos = token.start,
endPos = 0
for (;;) {
let next = input.get(pos)
if (next < 0) break
pos++
if (next == '-->'.charCodeAt(endPos)) {
endPos++
if (endPos == 3) {
pos -= 3
break
}
} else {
endPos = 0
}
}
if (pos > token.start) token.accept(commentContent$2, pos)
})
const openTag = /^<\/?\s*([\.\-\:\w\xa1-\uffff]+)/
function tagName$1(tag) {
let m = openTag.exec(tag)
return m ? m[1].toLowerCase() : null
}
function attributes(tag) {
let open = openTag.exec(tag),
attrs = {}
if (open) {
let attr = /\s*([\.\-\:\w\xa1-\uffff]+)\s*(?:=\s*(?:"([^"]*)"|'([^']*)'|([^\s=<>"'/]+)))?/g,
m
attr.lastIndex = open.index + open[0].length
while ((m = attr.exec(tag))) attrs[m[1]] = m[4] || m[3] || m[2] || m[1]
}
return attrs
}
function skip(name) {
return token => tagName$1(token) == name
}
function resolveContent(tags) {
let tagMap = null
for (let _i197 = 0, _length197 = tags.length; _i197 < _length197; _i197++) {
let tag = tags[_i197]
if (!tagMap) tagMap = Object.create(null)
;(tagMap[tag.tag] || (tagMap[tag.tag] = [])).push({ attrs: tag.attrs, value: { filterEnd: skip(tag.tag), startParse: tag.parser.startParse.bind(tag.parser) } })
}
return function(input, stack) {
let openTag = input.read(stack.ruleStart, stack.pos)
let name = tagName$1(openTag),
matches,
attrs
if (!name) return null
if (tagMap && (matches = tagMap[name])) {
for (let _i198 = 0, _matches = matches, _length198 = _matches.length; _i198 < _length198; _i198++) {
let match = _matches[_i198]
if (!match.attrs || match.attrs(attrs || (attrs = attributes(openTag)))) return match.value
}
}
if (name == 'script' || name == 'textarea' || name == 'style') return { filterEnd: skip(name), wrapType: RawText }
return null
}
}
const elementContent = resolveContent([])
function configureNesting(tags) {
return { elementContent: resolveContent(tags) }
}
const parser$5 = Parser.deserialize({
version: 13,
states:
"'OOVOXOOOtQ`O'#CgS!eOXO'#CfOOOP'#Cf'#CfO!oOdO'#CqO!wQ`O'#CsOOOP'#DR'#DROOOP'#Cv'#CvQVOXOOO!|QrO,59ROOOP'#Cz'#CzO#XOXO'#DWO#cOPO,59QOOOS'#C{'#C{O#kOdO,59]OOOP,59],59]O#sQ`O,59_OOOP-E6t-E6tO#xQrO'#CiOOQQ'#Cw'#CwO$WQrO1G.mOOOP1G.m1G.mOOOP1G.v1G.vOOOP-E6x-E6xO$cQ`O'#CoOOOP1G.l1G.lOOOS-E6y-E6yOOOP1G.w1G.wOOOP1G.y1G.yO$hQ!bO,59TOOQQ-E6u-E6uOOOP7+$X7+$XOOOP7+$b7+$bO$sQ`O,59ZO$xO#tO'#ClO%WO&jO'#ClOOQQ1G.o1G.oOOOP1G.u1G.uOOOO'#Cx'#CxO%fO#tO,59WOOQQ,59W,59WOOOO'#Cy'#CyO%tO&jO,59WOOOO-E6v-E6vOOQQ1G.r1G.rOOOO-E6w-E6w",
stateData:
'&X~OtOS~OPPORTOSUOVUOWUOXUOfUOhVO{SO~O[XO~OPPORTOSUOVUOWUOXUOfUO{SO~OQzPqzP~PyOr]O|_O~O[`O~OTfO^bObeO~OQzXqzX~PyOQhOqiO~Or]O|kO~OblO~O_mOT]X^]Xb]X~OTpO^bOboO~O[qO~OatOvrOxsO~ObuO~OWvOXvOvxOwvO~OWyOXyOxxOyyO~OWvOXvOv|OwvO~OWyOXyOx|OyyO~O{fhf~',
goto: '#k{PPPPPPPPPP|!SP!YPP!^PP!a!d|P|PP!j!p!v!|#S#YPPPPP#`PPPP#hXUOQWZXQOQWZTcXdRtmRi[XROQWZQWORaWQdXRndQwrR{wQzsR}zQZQRgZQ^SRj^SVOWTYQZR[Q',
nodeNames:
'⚠ StartTag StartCloseTag StartCloseTag IncompleteCloseTag SelfCloseEndTag Document Text EntityReference CharacterReference Element OpenTag TagName Attribute AttributeName Is AttributeValue UnquotedAttributeValue EndTag CloseTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag DoctypeDecl RawText',
maxTerm: 44,
context: elementContext$1,
nodeProps: [
[NodeProp.closedBy, -2, 1, 2, 'EndTag SelfCloseEndTag', 11, 'CloseTag'],
[NodeProp.openedBy, 5, 'StartTag', 18, 'StartTag StartCloseTag', 19, 'OpenTag']
],
skippedNodes: [0, 25],
repeatNodeCount: 6,
tokenData:
"!#`!aR!WOX$kXY)sYZ)sZ]$k]^)s^p$kpq)sqr$krs*zsv$kvw+dwx2wx}$k}!O3d!O!P$k!P!Q7]!Q![$k![!]8s!]!^$k!^!_>`!_!`!!n!`!a8R!a!c$k!c!}8s!}#R$k#R#S8s#S#T$k#T#o8s#o$f$k$f$g&R$g%W$k%W%o8s%o%p$k%p&a8s&a&b$k&b1p8s1p4U$k4U4d8s4d4e$k4e$IS8s$IS$I`$k$I`$Ib8s$Ib$Kh$k$Kh%#t8s%#t&/x$k&/x&Et8s&Et&FV$k&FV;'S8s;'S;:jgWw`ypOq(kqr?Prs'gsv(kwx(]x!a(k!a!bKh!b~(k!R?WZw`ypOr(krs'gsv(kwx(]x}(k}!O?y!O!f(k!f!gAP!g#W(k#W#XGx#X~(k!R@QVw`ypOr(krs'gsv(kwx(]x}(k}!O@g!O~(k!R@pTw`yp{POr(krs'gsv(kwx(]x~(k!RAWVw`ypOr(krs'gsv(kwx(]x!q(k!q!rAm!r~(k!RAtVw`ypOr(krs'gsv(kwx(]x!e(k!e!fBZ!f~(k!RBbVw`ypOr(krs'gsv(kwx(]x!v(k!v!wBw!w~(k!RCOVw`ypOr(krs'gsv(kwx(]x!{(k!{!|Ce!|~(k!RClVw`ypOr(krs'gsv(kwx(]x!r(k!r!sDR!s~(k!RDYVw`ypOr(krs'gsv(kwx(]x!g(k!g!hDo!h~(k!RDvWw`ypOrDorsE`svDovwEtwxFdx!`Do!`!aG`!a~DoqEeTypOvE`vxEtx!`E`!`!aFV!a~E`PEwRO!`Et!`!aFQ!a~EtPFVOhPqF^QyphPOv'gx~'gaFiVw`OrFdrsEtsvFdvwEtw!`Fd!`!aGO!a~FdaGVRw`hPOr(]sv(]w~(]!RGiTw`yphPOr(krs'gsv(kwx(]x~(k!RHPVw`ypOr(krs'gsv(kwx(]x#c(k#c#dHf#d~(k!RHmVw`ypOr(krs'gsv(kwx(]x#V(k#V#WIS#W~(k!RIZVw`ypOr(krs'gsv(kwx(]x#h(k#h#iIp#i~(k!RIwVw`ypOr(krs'gsv(kwx(]x#m(k#m#nJ^#n~(k!RJeVw`ypOr(krs'gsv(kwx(]x#d(k#d#eJz#e~(k!RKRVw`ypOr(krs'gsv(kwx(]x#X(k#X#YDo#Y~(k!RKoWw`ypOrKhrsLXsvKhvwLmwxM}x!aKh!a!b! e!b~KhqL^TypOvLXvxLmx!aLX!a!bM[!b~LXPLpRO!aLm!a!bLy!b~LmPL|RO!`Lm!`!aMV!a~LmPM[OfPqMaTypOvLXvxLmx!`LX!`!aMp!a~LXqMwQypfPOv'gx~'gaNSVw`OrM}rsLmsvM}vwLmw!aM}!a!bNi!b~M}aNnVw`OrM}rsLmsvM}vwLmw!`M}!`!a! T!a~M}a! [Rw`fPOr(]sv(]w~(]!R! lWw`ypOrKhrsLXsvKhvwLmwxM}x!`Kh!`!a!!U!a~Kh!R!!_Tw`ypfPOr(krs'gsv(kwx(]x~(k!V!!yV_SVPw`ypOr&Rrs&qsv&Rwx'rx!^&R!^!_(k!_~&R",
tokenizers: [tagStart, selfClosed, commentContent$1$1, 0, 1, 2, 3, 4, 5],
topRules: { Document: [0, 6] },
nested: [
[
'elementContent',
elementContent,
"%S~RP!^!_U~XP!P!Q[~_dXY[YZ[]^[pq[![!]!m!c!}!m#R#S!m#T#o!m%W%o!m%p&a!m&b1p!m4U4d!m4e$IS!m$I`$Ib!m$Kh%#t!m&/x&Et!m&FV;'S!m;'S;:j$|?&r?Ah!m?BY?Mn!m~!pkXY$eYZ$e]^$epq$e}!O!m!O!P!m!Q![!m![!]!m!`!a$w!c!}!m#R#S!m#T#o!m$}%O!m%W%o!m%p&a!m&b1p!m1p4U!m4U4d!m4e$IS!m$I`$Ib!m$Je$Jg!m$Kh%#t!m&/x&Et!m&FV;'S!m;'S;:j$|?&r?Ah!m?BY?Mn!m~$hTXY$eYZ$e]^$epq$e!`!a$w~$|Op~~%PP;=`<%l!m",
42
]
],
dialects: { noMatch: 0 },
tokenPrec: 234
})
const Targets = ['_blank', '_self', '_top', '_parent']
const Charsets = ['ascii', 'utf-8', 'utf-16', 'latin1', 'latin1']
const Methods = ['get', 'post', 'put', 'delete']
const Encs = ['application/x-www-form-urlencoded', 'multipart/form-data', 'text/plain']
const Bool$1 = ['true', 'false']
const S = {}
const Tags = {
a: { attrs: { href: null, ping: null, type: null, media: null, target: Targets, hreflang: null } },
abbr: S,
acronym: S,
address: S,
applet: S,
area: { attrs: { alt: null, coords: null, href: null, target: null, ping: null, media: null, hreflang: null, type: null, shape: ['default', 'rect', 'circle', 'poly'] } },
article: S,
aside: S,
audio: {
attrs: { src: null, mediagroup: null, crossorigin: ['anonymous', 'use-credentials'], preload: ['none', 'metadata', 'auto'], autoplay: ['autoplay'], loop: ['loop'], controls: ['controls'] }
},
b: S,
base: { attrs: { href: null, target: Targets } },
basefont: S,
bdi: S,
bdo: S,
big: S,
blockquote: { attrs: { cite: null } },
body: S,
br: S,
button: {
attrs: {
form: null,
formaction: null,
name: null,
value: null,
autofocus: ['autofocus'],
disabled: ['autofocus'],
formenctype: Encs,
formmethod: Methods,
formnovalidate: ['novalidate'],
formtarget: Targets,
type: ['submit', 'reset', 'button']
}
},
canvas: { attrs: { width: null, height: null } },
caption: S,
center: S,
cite: S,
code: S,
col: { attrs: { span: null } },
colgroup: { attrs: { span: null } },
command: { attrs: { type: ['command', 'checkbox', 'radio'], label: null, icon: null, radiogroup: null, command: null, title: null, disabled: ['disabled'], checked: ['checked'] } },
data: { attrs: { value: null } },
datagrid: { attrs: { disabled: ['disabled'], multiple: ['multiple'] } },
datalist: { attrs: { data: null } },
dd: S,
del: { attrs: { cite: null, datetime: null } },
details: { attrs: { open: ['open'] } },
dfn: S,
dir: S,
div: S,
dl: S,
dt: S,
em: S,
embed: { attrs: { src: null, type: null, width: null, height: null } },
eventsource: { attrs: { src: null } },
fieldset: { attrs: { disabled: ['disabled'], form: null, name: null } },
figcaption: S,
figure: S,
font: S,
footer: S,
form: { attrs: { action: null, name: null, 'accept-charset': Charsets, autocomplete: ['on', 'off'], enctype: Encs, method: Methods, novalidate: ['novalidate'], target: Targets } },
frame: S,
frameset: S,
h1: S,
h2: S,
h3: S,
h4: S,
h5: S,
h6: S,
head: { children: ['title', 'base', 'link', 'style', 'meta', 'script', 'noscript', 'command'] },
header: S,
hgroup: S,
hr: S,
html: { attrs: { manifest: null }, children: ['head', 'body'] },
i: S,
iframe: {
attrs: { src: null, srcdoc: null, name: null, width: null, height: null, sandbox: ['allow-top-navigation', 'allow-same-origin', 'allow-forms', 'allow-scripts'], seamless: ['seamless'] }
},
img: { attrs: { alt: null, src: null, ismap: null, usemap: null, width: null, height: null, crossorigin: ['anonymous', 'use-credentials'] } },
input: {
attrs: {
alt: null,
dirname: null,
form: null,
formaction: null,
height: null,
list: null,
max: null,
maxlength: null,
min: null,
name: null,
pattern: null,
placeholder: null,
size: null,
src: null,
step: null,
value: null,
width: null,
accept: ['audio/*', 'video/*', 'image/*'],
autocomplete: ['on', 'off'],
autofocus: ['autofocus'],
checked: ['checked'],
disabled: ['disabled'],
formenctype: Encs,
formmethod: Methods,
formnovalidate: ['novalidate'],
formtarget: Targets,
multiple: ['multiple'],
readonly: ['readonly'],
required: ['required'],
type: [
'hidden',
'text',
'search',
'tel',
'url',
'email',
'password',
'datetime',
'date',
'month',
'week',
'time',
'datetime-local',
'number',
'range',
'color',
'checkbox',
'radio',
'file',
'submit',
'image',
'reset',
'button'
]
}
},
ins: { attrs: { cite: null, datetime: null } },
kbd: S,
keygen: { attrs: { challenge: null, form: null, name: null, autofocus: ['autofocus'], disabled: ['disabled'], keytype: ['RSA'] } },
label: { attrs: { for: null, form: null } },
legend: S,
li: { attrs: { value: null } },
link: { attrs: { href: null, type: null, hreflang: null, media: null, sizes: ['all', '16x16', '16x16 32x32', '16x16 32x32 64x64'] } },
map: { attrs: { name: null } },
mark: S,
menu: { attrs: { label: null, type: ['list', 'context', 'toolbar'] } },
meta: {
attrs: {
content: null,
charset: Charsets,
name: ['viewport', 'application-name', 'author', 'description', 'generator', 'keywords'],
'http-equiv': ['content-language', 'content-type', 'default-style', 'refresh']
}
},
meter: { attrs: { value: null, min: null, low: null, high: null, max: null, optimum: null } },
nav: S,
noframes: S,
noscript: S,
object: { attrs: { data: null, type: null, name: null, usemap: null, form: null, width: null, height: null, typemustmatch: ['typemustmatch'] } },
ol: { attrs: { reversed: ['reversed'], start: null, type: ['1', 'a', 'A', 'i', 'I'] }, children: ['li', 'script', 'template', 'ul', 'ol'] },
optgroup: { attrs: { disabled: ['disabled'], label: null } },
option: { attrs: { disabled: ['disabled'], label: null, selected: ['selected'], value: null } },
output: { attrs: { for: null, form: null, name: null } },
p: S,
param: { attrs: { name: null, value: null } },
pre: S,
progress: { attrs: { value: null, max: null } },
q: { attrs: { cite: null } },
rp: S,
rt: S,
ruby: S,
s: S,
samp: S,
script: { attrs: { type: ['text/javascript'], src: null, async: ['async'], defer: ['defer'], charset: Charsets } },
section: S,
select: { attrs: { form: null, name: null, size: null, autofocus: ['autofocus'], disabled: ['disabled'], multiple: ['multiple'] } },
small: S,
source: { attrs: { src: null, type: null, media: null } },
span: S,
strike: S,
strong: S,
style: { attrs: { type: ['text/css'], media: null, scoped: null } },
sub: S,
summary: S,
sup: S,
table: S,
tbody: S,
td: { attrs: { colspan: null, rowspan: null, headers: null } },
textarea: {
attrs: {
dirname: null,
form: null,
maxlength: null,
name: null,
placeholder: null,
rows: null,
cols: null,
autofocus: ['autofocus'],
disabled: ['disabled'],
readonly: ['readonly'],
required: ['required'],
wrap: ['soft', 'hard']
}
},
tfoot: S,
th: { attrs: { colspan: null, rowspan: null, headers: null, scope: ['row', 'col', 'rowgroup', 'colgroup'] } },
thead: S,
time: { attrs: { datetime: null } },
title: S,
tr: S,
track: { attrs: { src: null, label: null, default: null, kind: ['subtitles', 'captions', 'descriptions', 'chapters', 'metadata'], srclang: null } },
tt: S,
u: S,
ul: { children: ['li', 'script', 'template', 'ul', 'ol'] },
var: S,
video: {
attrs: {
src: null,
poster: null,
width: null,
height: null,
crossorigin: ['anonymous', 'use-credentials'],
preload: ['auto', 'metadata', 'none'],
autoplay: ['autoplay'],
mediagroup: ['movie'],
muted: ['muted'],
controls: ['controls']
}
},
wbr: S
}
const GlobalAttrs = {
accesskey: null,
class: null,
contenteditable: Bool$1,
contextmenu: null,
dir: ['ltr', 'rtl', 'auto'],
draggable: ['true', 'false', 'auto'],
dropzone: ['copy', 'move', 'link', 'string:', 'file:'],
hidden: ['hidden'],
id: null,
inert: ['inert'],
itemid: null,
itemprop: null,
itemref: null,
itemscope: ['itemscope'],
itemtype: null,
lang: ['ar', 'bn', 'de', 'en-GB', 'en-US', 'es', 'fr', 'hi', 'id', 'ja', 'pa', 'pt', 'ru', 'tr', 'zh'],
spellcheck: Bool$1,
autocorrect: Bool$1,
autocapitalize: Bool$1,
style: null,
tabindex: null,
title: null,
translate: ['yes', 'no'],
onclick: null,
rel: ['stylesheet', 'alternate', 'author', 'bookmark', 'help', 'license', 'next', 'nofollow', 'noreferrer', 'prefetch', 'prev', 'search', 'tag'],
role: 'alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer'.split(
' '
),
'aria-activedescendant': null,
'aria-atomic': Bool$1,
'aria-autocomplete': ['inline', 'list', 'both', 'none'],
'aria-busy': Bool$1,
'aria-checked': ['true', 'false', 'mixed', 'undefined'],
'aria-controls': null,
'aria-describedby': null,
'aria-disabled': Bool$1,
'aria-dropeffect': null,
'aria-expanded': ['true', 'false', 'undefined'],
'aria-flowto': null,
'aria-grabbed': ['true', 'false', 'undefined'],
'aria-haspopup': Bool$1,
'aria-hidden': Bool$1,
'aria-invalid': ['true', 'false', 'grammar', 'spelling'],
'aria-label': null,
'aria-labelledby': null,
'aria-level': null,
'aria-live': ['off', 'polite', 'assertive'],
'aria-multiline': Bool$1,
'aria-multiselectable': Bool$1,
'aria-owns': null,
'aria-posinset': null,
'aria-pressed': ['true', 'false', 'mixed', 'undefined'],
'aria-readonly': Bool$1,
'aria-relevant': null,
'aria-required': Bool$1,
'aria-selected': ['true', 'false', 'undefined'],
'aria-setsize': null,
'aria-sort': ['ascending', 'descending', 'none', 'other'],
'aria-valuemax': null,
'aria-valuemin': null,
'aria-valuenow': null,
'aria-valuetext': null
}
const AllTags = Object.keys(Tags)
const GlobalAttrNames = Object.keys(GlobalAttrs)
function elementName$1(doc, tree) {
let tag = tree.firstChild
let name = tag && tag.getChild('TagName')
return name ? doc.sliceString(name.from, name.to) : ''
}
function findParentElement$1(tree, skip = false) {
for (let cur = tree.parent; cur; cur = cur.parent)
if (cur.name == 'Element') {
if (skip) skip = false
else return cur
}
return null
}
function allowedChildren(doc, tree) {
let parent = findParentElement$1(tree, true)
let parentInfo = parent ? Tags[elementName$1(doc, parent)] : null
return (parentInfo === null || parentInfo === void 0 ? void 0 : parentInfo.children) || AllTags
}
function openTags(doc, tree) {
let open = []
for (let parent = tree; (parent = findParentElement$1(parent)); ) {
let tagName = elementName$1(doc, parent)
if (tagName && parent.lastChild.name == 'CloseTag') break
if (tagName && open.indexOf(tagName) < 0 && (tree.name == 'EndTag' || tree.from >= parent.firstChild.to)) open.push(tagName)
}
return open
}
const identifier = /^[:\-\.\w\u00b7-\uffff]+$/
function completeTag(state, tree, from, to) {
let end = /\s*>/.test(state.sliceDoc(to, to + 5)) ? '' : '>'
return {
from,
to,
options: allowedChildren(state.doc, tree)
.map(tagName => ({ label: tagName, type: 'type' }))
.concat(openTags(state.doc, tree).map((tag, i) => ({ label: '/' + tag, apply: '/' + tag + end, type: 'type', boost: 99 - i }))),
span: /^\/?[:\-\.\w\u00b7-\uffff]*$/
}
}
function completeCloseTag(state, tree, from, to) {
let end = /\s*>/.test(state.sliceDoc(to, to + 5)) ? '' : '>'
return { from, to, options: openTags(state.doc, tree).map((tag, i) => ({ label: tag, apply: tag + end, type: 'type', boost: 99 - i })), span: identifier }
}
function completeStartTag(state, tree, pos) {
let options = [],
level = 0
for (let _i199 = 0, _allowedChildren = allowedChildren(state.doc, tree), _length199 = _allowedChildren.length; _i199 < _length199; _i199++) {
let tagName = _allowedChildren[_i199]
options.push({ label: '<' + tagName, type: 'type' })
}
for (let _i200 = 0, _openTags = openTags(state.doc, tree), _length200 = _openTags.length; _i200 < _length200; _i200++) {
let open = _openTags[_i200]
options.push({ label: '' + open + '>', type: 'type', boost: 99 - level++ })
}
return { from: pos, to: pos, options, span: /^<\/?[:\-\.\w\u00b7-\uffff]*$/ }
}
function completeAttrName(state, tree, from, to) {
let elt = findParentElement$1(tree),
info = elt ? Tags[elementName$1(state.doc, elt)] : null
let names = info && info.attrs ? Object.keys(info.attrs).concat(GlobalAttrNames) : GlobalAttrNames
return { from, to, options: names.map(attrName => ({ label: attrName, type: 'property' })), span: identifier }
}
function completeAttrValue(state, tree, from, to) {
var _a
let nameNode = (_a = tree.parent) === null || _a === void 0 ? void 0 : _a.getChild('AttributeName')
let options = [],
span = undefined
if (nameNode) {
let attrName = state.sliceDoc(nameNode.from, nameNode.to)
let attrs = GlobalAttrs[attrName]
if (!attrs) {
let elt = findParentElement$1(tree),
info = elt ? Tags[elementName$1(state.doc, elt)] : null
attrs = (info === null || info === void 0 ? void 0 : info.attrs) && info.attrs[attrName]
}
if (attrs) {
let base = state.sliceDoc(from, to).toLowerCase(),
quoteStart = '"',
quoteEnd = '"'
if (/^['"]/.test(base)) {
span = base[0] == '"' ? /^[^"]*$/ : /^[^']*$/
quoteStart = ''
quoteEnd = state.sliceDoc(to, to + 1) == base[0] ? '' : base[0]
base = base.slice(1)
from++
} else {
span = /^[^\s<>='"]*$/
}
for (let _i201 = 0, _attrs = attrs, _length201 = _attrs.length; _i201 < _length201; _i201++) {
let value = _attrs[_i201]
options.push({ label: value, apply: quoteStart + value + quoteEnd, type: 'constant' })
}
}
}
return { from, to, options, span }
}
function completeHTML(context) {
let { state, pos } = context,
around = syntaxTree(state).resolve(pos),
tree = around.resolve(pos, -1)
for (let scan = pos, before; around == tree && (before = tree.childBefore(scan)); ) {
let last = before.lastChild
if (!last || !last.type.isError || last.from < last.to) break
around = tree = before
scan = last.from
}
if (tree.name == 'TagName') {
return tree.parent && /CloseTag$/.test(tree.parent.name) ? completeCloseTag(state, tree, tree.from, pos) : completeTag(state, tree, tree.from, pos)
} else if (tree.name == 'StartTag') {
return completeTag(state, tree, pos, pos)
} else if (tree.name == 'StartCloseTag' || tree.name == 'IncompleteCloseTag') {
return completeCloseTag(state, tree, pos, pos)
} else if ((context.explicit && (tree.name == 'OpenTag' || tree.name == 'SelfClosingTag')) || tree.name == 'AttributeName') {
return completeAttrName(state, tree, tree.name == 'AttributeName' ? tree.from : pos, pos)
} else if (tree.name == 'Is' || tree.name == 'AttributeValue' || tree.name == 'UnquotedAttributeValue') {
return completeAttrValue(state, tree, tree.name == 'Is' ? pos : tree.from, pos)
} else if (context.explicit && (around.name == 'Element' || around.name == 'Text' || around.name == 'Document')) {
return completeStartTag(state, tree, pos)
} else {
return null
}
}
const htmlLanguage = LezerLanguage.define({
parser: parser$5.configure({
props: [
indentNodeProp.add({
Element(context) {
let after = /^(\s*)(<\/)?/.exec(context.textAfter)
if (context.node.to <= context.pos + after[0].length) return context.continue()
return context.lineIndent(context.state.doc.lineAt(context.node.from)) + (after[2] ? 0 : context.unit)
},
'OpenTag CloseTag SelfClosingTag'(context) {
return context.column(context.node.from) + context.unit
},
Document(context) {
if (context.pos + /\s*/.exec(context.textAfter)[0].length < context.node.to) return context.continue()
let endElt = null,
close
for (let cur = context.node; ; ) {
let last = cur.lastChild
if (!last || last.name != 'Element' || last.to != cur.to) break
endElt = cur = last
}
if (endElt && !((close = endElt.lastChild) && (close.name == 'CloseTag' || close.name == 'SelfClosingTag')))
return context.lineIndent(context.state.doc.lineAt(endElt.from)) + context.unit
return null
}
}),
foldNodeProp.add({
Element(node) {
let first = node.firstChild,
last = node.lastChild
if (!first || first.name != 'OpenTag') return null
return { from: first.to, to: last.name == 'CloseTag' ? last.from : node.to }
}
}),
styleTags({
AttributeValue: tags$1.string,
'Text RawText': tags$1.content,
'StartTag StartCloseTag SelfCloserEndTag EndTag SelfCloseEndTag': tags$1.angleBracket,
TagName: tags$1.tagName,
'MismatchedCloseTag/TagName': [tags$1.tagName, tags$1.invalid],
AttributeName: tags$1.propertyName,
UnquotedAttributeValue: tags$1.string,
Is: tags$1.definitionOperator,
'EntityReference CharacterReference': tags$1.character,
Comment: tags$1.blockComment,
ProcessingInst: tags$1.processingInstruction,
DoctypeDecl: tags$1.documentMeta
})
],
nested: configureNesting([
{
tag: 'script',
attrs(attrs) {
return !attrs.type || /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(attrs.type)
},
parser: javascriptLanguage.parser
},
{
tag: 'style',
attrs(attrs) {
return (!attrs.lang || attrs.lang == 'css') && (!attrs.type || /^(text\/)?(x-)?(stylesheet|css)$/i.test(attrs.type))
},
parser: cssLanguage.parser
}
])
}),
languageData: { commentTokens: { block: { open: '' } }, indentOnInput: /^\s*<\/$/ }
})
const htmlCompletion = htmlLanguage.data.of({ autocomplete: completeHTML })
function html() {
return new LanguageSupport(htmlLanguage, [htmlCompletion, javascript().support, css().support])
}
var _m28 = Object.freeze({ __proto__: null, html: html, htmlCompletion: htmlCompletion, htmlLanguage: htmlLanguage })
const whitespace = 34,
LineComment = 1,
BlockComment = 2,
String$1 = 3,
Number$1 = 4,
Bool = 5,
Null = 6,
ParenL = 7,
ParenR = 8,
BraceL = 9,
BraceR = 10,
BracketL = 11,
BracketR = 12,
Semi = 13,
Dot$1 = 14,
Operator = 15,
Punctuation$1 = 16,
SpecialVar = 17,
Identifier$1 = 18,
QuotedIdentifier = 19,
Keyword = 20,
Type$1 = 21,
Builtin = 22
function isAlpha(ch) {
return (ch >= 65 && ch <= 90) || (ch >= 97 && ch <= 122) || (ch >= 48 && ch <= 57)
}
function isHexDigit(ch) {
return (ch >= 48 && ch <= 57) || (ch >= 97 && ch <= 102) || (ch >= 65 && ch <= 70)
}
function readLiteral(input, pos, endQuote, backslashEscapes) {
for (let escaped = false; ; ) {
let next = input.get(pos++)
if (next < 0) return pos - 1
if (next == endQuote && !escaped) return pos
escaped = backslashEscapes && !escaped && next == 92
}
}
function readWord(input, pos) {
for (; ; pos++) {
let next = input.get(pos)
if (next != 95 && !isAlpha(next)) break
}
return pos
}
function readWordOrQuoted(input, pos) {
let next = input.get(pos)
if (next == 39 || next == 34 || next == 96) return readLiteral(input, pos + 1, next, false)
return readWord(input, pos)
}
function readNumber(input, pos, sawDot) {
let next
for (; ; pos++) {
next = input.get(pos)
if (next == 46) {
if (sawDot) break
sawDot = true
} else if (next < 48 || next > 57) {
break
}
}
if (next == 69 || next == 101) {
next = input.get(++pos)
if (next == 43 || next == 45) pos++
for (; ; pos++) {
next = input.get(pos)
if (next < 48 || next > 57) break
}
}
return pos
}
function eol(input, pos) {
for (; ; pos++) {
let next = input.get(pos)
if (next < 0 || next == 10) return pos
}
}
function inString(ch, str) {
for (let i = 0; i < str.length; i++) if (str.charCodeAt(i) == ch) return true
return false
}
const Space = ' \t\r\n'
function keywords(keywords, types, builtin) {
let result = Object.create(null)
result['true'] = result['false'] = Bool
result['null'] = result['unknown'] = Null
for (let _i202 = 0, _keywords$split = keywords.split(' '), _length202 = _keywords$split.length; _i202 < _length202; _i202++) {
let kw = _keywords$split[_i202]
if (kw) result[kw] = Keyword
}
for (let _i203 = 0, _types$split = types.split(' '), _length203 = _types$split.length; _i203 < _length203; _i203++) {
let tp = _types$split[_i203]
if (tp) result[tp] = Type$1
}
for (let _i204 = 0, _split = (builtin || '').split(' '), _length204 = _split.length; _i204 < _length204; _i204++) {
let kw = _split[_i204]
if (kw) result[kw] = Builtin
}
return result
}
const SQLTypes =
'array binary bit boolean char character clob date decimal double float int integer interval large national nchar nclob numeric object precision real smallint time timestamp varchar varying '
const SQLKeywords =
'absolute action add after all allocate alter and any are as asc assertion at authorization before begin between blob both breadth by call cascade cascaded case cast catalog check close collate collation column commit condition connect connection constraint constraints constructor continue corresponding count create cross cube current current_date current_default_transform_group current_transform_group_for_type current_path current_role current_time current_timestamp current_user cursor cycle data day deallocate dec declare default deferrable deferred delete depth deref desc describe descriptor deterministic diagnostics disconnect distinct do domain drop dynamic each else elseif end end-exec equals escape except exception exec execute exists exit external fetch first for foreign found from free full function general get global go goto grant group grouping handle having hold hour identity if immediate in indicator initially inner inout input insert intersect into is isolation join key language last lateral leading leave left level like limit local localtime localtimestamp locator loop map match method minute modifies module month names natural nesting new next no none not of old on only open option or order ordinality out outer output overlaps pad parameter partial path prepare preserve primary prior privileges procedure public read reads recursive redo ref references referencing relative release repeat resignal restrict result return returns revoke right role rollback rollup routine row rows savepoint schema scroll search second section select session session_user set sets signal similar size some space specific specifictype sql sqlexception sqlstate sqlwarning start state static system_user table temporary then timezone_hour timezone_minute to trailing transaction translation treat trigger under undo union unique unnest until update usage user using value values view when whenever where while with without work write year zone '
const defaults = {
backslashEscapes: false,
hashComments: false,
spaceAfterDashes: false,
slashComments: false,
doubleQuotedStrings: false,
charSetCasts: false,
operatorChars: '*+-%<>!=&|~^/',
specialVar: '?',
identifierQuotes: '"',
words: keywords(SQLKeywords, SQLTypes)
}
function dialect(spec, kws, types, builtin) {
let dialect = {}
for (let prop in defaults) dialect[prop] = (spec.hasOwnProperty(prop) ? spec : defaults)[prop]
if (kws) dialect.words = keywords(kws, types || '', builtin)
return dialect
}
function tokensFor(d) {
return new ExternalTokenizer((input, token) => {
var _a
let pos = token.start,
next = input.get(pos++),
next2 = input.get(pos)
if (inString(next, Space)) {
while (inString(input.get(pos), Space)) pos++
token.accept(whitespace, pos)
} else if (next == 39 || (next == 34 && d.doubleQuotedStrings)) {
token.accept(String$1, readLiteral(input, pos, next, d.backslashEscapes))
} else if ((next == 35 && d.hashComments) || (next == 47 && next2 == 47 && d.slashComments)) {
token.accept(LineComment, eol(input, pos))
} else if (next == 45 && next2 == 45 && (!d.spaceAfterDashes || input.get(pos + 1) == 32)) {
token.accept(LineComment, eol(input, pos + 1))
} else if (next == 47 && next2 == 42) {
pos++
for (let prev = -1, depth = 1; ; ) {
let next = input.get(pos++)
if (next < 0) {
pos--
break
} else if (prev == 42 && next == 47) {
depth--
if (!depth) break
next = -1
} else if (prev == 47 && next == 42) {
depth++
next = -1
}
prev = next
}
token.accept(BlockComment, pos)
} else if ((next == 101 || next == 69) && next2 == 39) {
token.accept(String$1, readLiteral(input, pos + 1, 39, true))
} else if ((next == 110 || next == 78) && next2 == 39 && d.charSetCasts) {
token.accept(String$1, readLiteral(input, pos + 1, 39, d.backslashEscapes))
} else if (next == 95 && d.charSetCasts) {
for (;;) {
let next = input.get(pos++)
if (next == 39 && pos > token.start + 2) {
token.accept(String$1, readLiteral(input, pos, 39, d.backslashEscapes))
break
}
if (!isAlpha(next)) break
}
} else if (next == 40) {
token.accept(ParenL, pos)
} else if (next == 41) {
token.accept(ParenR, pos)
} else if (next == 123) {
token.accept(BraceL, pos)
} else if (next == 125) {
token.accept(BraceR, pos)
} else if (next == 91) {
token.accept(BracketL, pos)
} else if (next == 93) {
token.accept(BracketR, pos)
} else if (next == 59) {
token.accept(Semi, pos)
} else if ((next == 48 && (next2 == 98 || next2 == 66)) || ((next == 98 || next == 66) && next2 == 39)) {
let quoted = next2 == 39
pos++
while ((next = input.get(pos)) == 48 || next == 49) pos++
if (quoted && next == 39) pos++
token.accept(Number$1, pos)
} else if ((next == 48 && (next2 == 120 || next2 == 88)) || ((next == 120 || next == 88) && next2 == 39)) {
let quoted = next2 == 39
pos++
while (isHexDigit((next = input.get(pos)))) pos++
if (quoted && next == 39) pos++
token.accept(Number$1, pos)
} else if (next == 46 && next2 >= 48 && next2 <= 57) {
token.accept(Number$1, readNumber(input, pos + 1, true))
} else if (next == 46) {
token.accept(Dot$1, pos)
} else if (next >= 48 && next <= 57) {
token.accept(Number$1, readNumber(input, pos, false))
} else if (inString(next, d.operatorChars)) {
while (inString(input.get(pos), d.operatorChars)) pos++
token.accept(Operator, pos)
} else if (inString(next, d.specialVar)) {
token.accept(SpecialVar, readWordOrQuoted(input, next2 == next ? pos + 1 : pos))
} else if (inString(next, d.identifierQuotes)) {
token.accept(QuotedIdentifier, readLiteral(input, pos, next, false))
} else if (next == 58 || next == 44) {
token.accept(Punctuation$1, pos)
} else if (isAlpha(next)) {
pos = readWord(input, pos)
token.accept((_a = d.words[input.read(token.start, pos).toLowerCase()]) !== null && _a !== void 0 ? _a : Identifier$1, pos)
}
})
}
const tokens = tokensFor(defaults)
const parser$1$1 = Parser.deserialize({
version: 13,
states:
"%dQ]QQOOO#kQRO'#DQO#rQQO'#CuO%RQQO'#CvO%YQQO'#CwO%aQQO'#CxOOQQ'#DQ'#DQOOQQ'#C{'#C{O&lQRO'#CyOOQQ'#Ct'#CtOOQQ'#Cz'#CzQ]QQOOQOQQOOO&vQQO,59aO'RQQO,59aO'WQQO'#DQOOQQ,59b,59bO'eQQO,59bOOQQ,59c,59cO'lQQO,59cOOQQ,59d,59dO'sQQO,59dOOQQ-E6y-E6yOOQQ,59`,59`OOQQ-E6x-E6xOOQQ'#C|'#C|OOQQ1G.{1G.{O&vQQO1G.{OOQQ1G.|1G.|OOQQ1G.}1G.}OOQQ1G/O1G/OP'zQQO'#C{POQQ-E6z-E6zOOQQ7+$g7+$g",
stateData:
'(R~OrOSPOSQOS~ORUOSUOTUOUUOVROXSOZTO]XO^QO_UO`UOaPObPOcPOdUOeUOfUO~O^]ORtXStXTtXUtXVtXXtXZtX]tX_tX`tXatXbtXctXdtXetXftX~OqtX~P!dOa^Ob^Oc^O~ORUOSUOTUOUUOVROXSOZTO^QO_UO`UOa_Ob_Oc_OdUOeUOfUO~OW`O~P#}OYbO~P#}O[dO~P#}ORUOSUOTUOUUOVROXSOZTO^QO_UO`UOaPObPOcPOdUOeUOfUO~O]gOqmX~P%hOaiObiOciO~O^kO~OWtXYtX[tX~P!dOWlO~P#}OYmO~P#}O[nO~P#}O]gO~P#}O',
goto: '#YuPPPPPPPPPPPPPPPPPPPPPPPPvzzzz!W![!b!vPPP!|TYOZeUORSTWZaceoT[OZQZORhZSWOZQaRQcSQeTZfWaceoQj]RqkeVORSTWZaceo',
nodeNames:
'⚠ LineComment BlockComment String Number Bool Null ( ) [ ] { } ; . Operator Punctuation SpecialVar Identifier QuotedIdentifier Keyword Type Builtin Script Statement CompositeIdentifier Parens Braces Brackets Statement',
maxTerm: 36,
skippedNodes: [0, 1, 2],
repeatNodeCount: 3,
tokenData: 'RORO',
tokenizers: [0, tokens],
topRules: { Script: [0, 23] },
tokenPrec: 0
})
function tokenBefore(tree) {
let cursor = tree.cursor.moveTo(tree.from, -1)
while (/Comment/.test(cursor.name)) cursor.moveTo(cursor.from, -1)
return cursor.node
}
function stripQuotes(name) {
let quoted = /^[`'"](.*)[`'"]$/.exec(name)
return quoted ? quoted[1] : name
}
function sourceContext(state, startPos) {
let pos = syntaxTree(state).resolve(startPos, -1)
let empty = false
if (pos.name == 'Identifier' || pos.name == 'QuotedIdentifier') {
empty = false
let parent = null
let dot = tokenBefore(pos)
if (dot && dot.name == '.') {
let before = tokenBefore(dot)
if ((before && before.name == 'Identifier') || before.name == 'QuotedIdentifier') parent = stripQuotes(state.sliceDoc(before.from, before.to).toLowerCase())
}
return { parent, from: pos.from, quoted: pos.name == 'QuotedIdentifier' ? state.sliceDoc(pos.from, pos.from + 1) : null }
} else if (pos.name == '.') {
let before = tokenBefore(pos)
if ((before && before.name == 'Identifier') || before.name == 'QuotedIdentifier')
return { parent: stripQuotes(state.sliceDoc(before.from, before.to).toLowerCase()), from: startPos, quoted: null }
} else {
empty = true
}
return { parent: null, from: startPos, quoted: null, empty }
}
function maybeQuoteCompletions(quote, completions) {
if (!quote) return completions
return completions.map(c => Object.assign(Object.assign({}, c), { label: quote + c.label + quote, apply: undefined }))
}
const Span = /^\w*$/,
QuotedSpan = /^[`'"]?\w*[`'"]?$/
function completeFromSchema$1(schema, tables, defaultTable) {
let byTable = Object.create(null)
for (let table in schema)
byTable[table] = schema[table].map(val => {
return typeof val == 'string' ? { label: val, type: 'property' } : val
})
let topOptions = (tables || Object.keys(byTable).map(name => ({ label: name, type: 'type' }))).concat((defaultTable && byTable[defaultTable]) || [])
return context => {
let { parent, from, quoted, empty } = sourceContext(context.state, context.pos)
if (empty && !context.explicit) return null
let options = topOptions
if (parent) {
let columns = byTable[parent]
if (!columns) return null
options = columns
}
let quoteAfter = quoted && context.state.sliceDoc(context.pos, context.pos + 1) == quoted
return { from, to: quoteAfter ? context.pos + 1 : undefined, options: maybeQuoteCompletions(quoted, options), span: quoted ? QuotedSpan : Span }
}
}
function completeKeywords(keywords, upperCase) {
let completions = Object.keys(keywords).map(keyword => ({
label: upperCase ? keyword.toUpperCase() : keyword,
type: keywords[keyword] == Type$1 ? 'type' : keywords[keyword] == Keyword ? 'keyword' : 'variable',
boost: -1
}))
return ifNotIn(['QuotedIdentifier', 'SpecialVar', 'String', 'LineComment', 'BlockComment', '.'], completeFromList(completions))
}
let parser$4 = parser$1$1.configure({
props: [
indentNodeProp.add({ Statement: continuedIndent() }),
foldNodeProp.add({
Statement(tree) {
return { from: tree.firstChild.to, to: tree.to }
},
BlockComment(tree) {
return { from: tree.from + 2, to: tree.to - 2 }
}
}),
styleTags({
Keyword: tags$1.keyword,
Type: tags$1.typeName,
Builtin: tags$1.standard(tags$1.name),
Bool: tags$1.bool,
Null: tags$1.null,
Number: tags$1.number,
String: tags$1.string,
Identifier: tags$1.name,
QuotedIdentifier: tags$1.special(tags$1.string),
SpecialVar: tags$1.special(tags$1.name),
LineComment: tags$1.lineComment,
BlockComment: tags$1.blockComment,
Operator: tags$1.operator,
'Semi Punctuation': tags$1.punctuation,
'( )': tags$1.paren,
'{ }': tags$1.brace,
'[ ]': tags$1.squareBracket
})
]
})
class SQLDialect {
constructor(dialect, language) {
this.dialect = dialect
this.language = language
}
get extension() {
return this.language.extension
}
static define(spec) {
let d = dialect(spec, spec.keywords, spec.types, spec.builtin)
let language = LezerLanguage.define({
parser: parser$4.configure({ tokenizers: [{ from: tokens, to: tokensFor(d) }] }),
languageData: { commentTokens: { line: '--', block: { open: '/*', close: '*/' } }, closeBrackets: { brackets: ['(', '[', '{', "'", '"', '`'] } }
})
return new SQLDialect(d, language)
}
}
function keywordCompletion(dialect, upperCase = false) {
return dialect.language.data.of({ autocomplete: completeKeywords(dialect.dialect.words, upperCase) })
}
function schemaCompletion(config) {
return config.schema ? (config.dialect || StandardSQL).language.data.of({ autocomplete: completeFromSchema$1(config.schema, config.tables, config.defaultTable) }) : []
}
function sql(config = {}) {
let lang = config.dialect || StandardSQL
return new LanguageSupport(lang.language, [schemaCompletion(config), keywordCompletion(lang, !!config.upperCaseKeywords)])
}
const StandardSQL = SQLDialect.define({})
const PostgreSQL = SQLDialect.define({
charSetCasts: true,
operatorChars: '+-*/<>=~!@#%^&|`?',
specialVar: '',
keywords:
SQLKeywords +
'a abort abs absent access according ada admin aggregate alias also always analyse analyze array_agg array_max_cardinality asensitive assert assignment asymmetric atomic attach attribute attributes avg backward base64 begin_frame begin_partition bernoulli bit_length blocked bom c cache called cardinality catalog_name ceil ceiling chain char_length character_length character_set_catalog character_set_name character_set_schema characteristics characters checkpoint class class_origin cluster coalesce cobol collation_catalog collation_name collation_schema collect column_name columns command_function command_function_code comment comments committed concurrently condition_number configuration conflict connection_name constant constraint_catalog constraint_name constraint_schema contains content control conversion convert copy corr cost covar_pop covar_samp csv cume_dist current_catalog current_row current_schema cursor_name database datalink datatype datetime_interval_code datetime_interval_precision db debug defaults defined definer degree delimiter delimiters dense_rank depends derived detach detail dictionary disable discard dispatch dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue document dump dynamic_function dynamic_function_code element elsif empty enable encoding encrypted end_frame end_partition endexec enforced enum errcode error event every exclude excluding exclusive exp explain expression extension extract family file filter final first_value flag floor following force foreach fortran forward frame_row freeze fs functions fusion g generated granted greatest groups handler header hex hierarchy hint id ignore ilike immediately immutable implementation implicit import include including increment indent index indexes info inherit inherits inline insensitive instance instantiable instead integrity intersection invoker isnull k key_member key_type label lag last_value lead leakproof least length library like_regex link listen ln load location lock locked log logged lower m mapping matched materialized max max_cardinality maxvalue member merge message message_length message_octet_length message_text min minvalue mod mode more move multiset mumps name namespace nfc nfd nfkc nfkd nil normalize normalized nothing notice notify notnull nowait nth_value ntile nullable nullif nulls number occurrences_regex octet_length octets off offset oids operator options ordering others over overlay overriding owned owner p parallel parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partition pascal passing passthrough password percent percent_rank percentile_cont percentile_disc perform period permission pg_context pg_datatype_name pg_exception_context pg_exception_detail pg_exception_hint placing plans pli policy portion position position_regex power precedes preceding prepared print_strict_params procedural procedures program publication query quote raise range rank reassign recheck recovery refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex rename repeatable replace replica requiring reset respect restart restore result_oid returned_cardinality returned_length returned_octet_length returned_sqlstate returning reverse routine_catalog routine_name routine_schema routines row_count row_number rowtype rule scale schema_name schemas scope scope_catalog scope_name scope_schema security selective self sensitive sequence sequences serializable server server_name setof share show simple skip slice snapshot source specific_name sqlcode sqlerror sqrt stable stacked standalone statement statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset subscription substring substring_regex succeeds sum symmetric sysid system system_time t table_name tables tablesample tablespace temp template ties token top_level_count transaction_active transactions_committed transactions_rolled_back transform transforms translate translate_regex trigger_catalog trigger_name trigger_schema trim trim_array truncate trusted type types uescape unbounded uncommitted unencrypted unlink unlisten unlogged unnamed untyped upper uri use_column use_variable user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema vacuum valid validate validator value_of var_pop var_samp varbinary variable_conflict variadic verbose version versioning views volatile warning whitespace width_bucket window within wrapper xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate yes',
types:
SQLTypes +
'bigint int8 bigserial serial8 varbit bool box bytea cidr circle precision float8 inet int4 json jsonb line lseg macaddr macaddr8 money numeric path pg_lsn point polygon float4 int2 smallserial serial2 serial serial4 text without zone with timetz timestamptz tsquery tsvector txid_snapshot uuid xml'
})
const MySQLKeywords =
'accessible algorithm analyze asensitive authors auto_increment autocommit avg avg_row_length binlog btree cache catalog_name chain change changed checkpoint checksum class_origin client_statistics coalesce code collations columns comment committed completion concurrent consistent contains contributors convert database databases day_hour day_microsecond day_minute day_second delay_key_write delayed delimiter des_key_file dev_pop dev_samp deviance directory disable discard distinctrow div dual dumpfile enable enclosed ends engine engines enum errors escaped even event events every explain extended fast field fields flush force found_rows fulltext grants handler hash high_priority hosts hour_microsecond hour_minute hour_second ignore ignore_server_ids import index index_statistics infile innodb insensitive insert_method install invoker iterate keys kill linear lines list load lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modify mutex mysql_errno no_write_to_binlog offline offset one online optimize optionally outfile pack_keys parser partition partitions password phase plugin plugins prev processlist profile profiles purge query quick range read_write rebuild recover regexp relaylog remove rename reorganize repair repeatable replace require resume rlike row_format rtree schedule schema_name schemas second_microsecond security sensitive separator serializable server share show slave slow snapshot soname spatial sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result ssl starting starts std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace terminated triggers truncate uncommitted uninstall unlock upgrade use use_frm user_resources user_statistics utc_date utc_time utc_timestamp variables views warnings xa xor year_month zerofill'
const MySQLTypes =
SQLTypes +
'bool blob long longblob longtext medium mediumblob mediumint mediumtext tinyblob tinyint tinytext text bigint int1 int2 int3 int4 int8 float4 float8 varbinary varcharacter precision datetime year unsigned signed'
const MySQLBuiltin = 'charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee'
const MySQL = SQLDialect.define({
operatorChars: '*+-%<>!=&|^',
charSetCasts: true,
doubleQuotedStrings: true,
hashComments: true,
spaceAfterDashes: true,
specialVar: '@?',
identifierQuotes: '`',
keywords: SQLKeywords + 'group_concat ' + MySQLKeywords,
types: MySQLTypes,
builtin: MySQLBuiltin
})
const MariaSQL = SQLDialect.define({
operatorChars: '*+-%<>!=&|^',
charSetCasts: true,
doubleQuotedStrings: true,
hashComments: true,
spaceAfterDashes: true,
specialVar: '@?',
identifierQuotes: '`',
keywords: SQLKeywords + 'always generated groupby_concat hard persistent shutdown soft virtual ' + MySQLKeywords,
types: MySQLTypes,
builtin: MySQLBuiltin
})
const MSSQL = SQLDialect.define({
keywords:
SQLKeywords +
'trigger proc view index for add constraint key primary foreign collate clustered nonclustered declare exec go if use index holdlock nolock nowait paglock pivot readcommitted readcommittedlock readpast readuncommitted repeatableread rowlock serializable snapshot tablock tablockx unpivot updlock with',
types: SQLTypes + 'bigint smallint smallmoney tinyint money real text nvarchar ntext varbinary image cursor hierarchyid uniqueidentifier sql_variant xml table',
builtin:
'binary_checksum checksum connectionproperty context_info current_request_id error_line error_message error_number error_procedure error_severity error_state formatmessage get_filestream_transaction_context getansinull host_id host_name isnull isnumeric min_active_rowversion newid newsequentialid rowcount_big xact_state object_id',
operatorChars: '*+-%<>!=^&|/',
specialVar: '@'
})
const SQLite = SQLDialect.define({
keywords:
SQLKeywords +
'abort analyze attach autoincrement conflict database detach exclusive fail glob ignore index indexed instead isnull notnull offset plan pragma query raise regexp reindex rename replace temp vacuum virtual',
types: SQLTypes + 'bool blob long longblob longtext medium mediumblob mediumint mediumtext tinyblob tinyint tinytext text bigint int2 int8 year unsigned signed real',
builtin:
'auth backup bail binary changes check clone databases dbinfo dump echo eqp exit explain fullschema headers help import imposter indexes iotrace limit lint load log mode nullvalue once open output print prompt quit read restore save scanstats schema separator session shell show stats system tables testcase timeout timer trace vfsinfo vfslist vfsname width',
operatorChars: '*+-%<>!=&|/~',
identifierQuotes: '`"',
specialVar: '@:?$'
})
const Cassandra = SQLDialect.define({
keywords:
'add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime infinity NaN',
types: SQLTypes + 'ascii bigint blob counter frozen inet list map static text timeuuid tuple uuid varint',
slashComments: true
})
const PLSQL = SQLDialect.define({
keywords:
SQLKeywords +
'abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work',
builtin:
'appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap',
types: SQLTypes + 'ascii bfile bfilename bigserial bit blob dec number nvarchar nvarchar2 serial smallint string text uid varchar2 xml',
operatorChars: '*/+-%<>!=~',
doubleQuotedStrings: true,
charSetCasts: true
})
var _m29 = Object.freeze({
__proto__: null,
Cassandra: Cassandra,
MSSQL: MSSQL,
MariaSQL: MariaSQL,
MySQL: MySQL,
PLSQL: PLSQL,
PostgreSQL: PostgreSQL,
SQLDialect: SQLDialect,
SQLite: SQLite,
StandardSQL: StandardSQL,
keywordCompletion: keywordCompletion,
schemaCompletion: schemaCompletion,
sql: sql
})
const closureParamDelim = 1,
tpOpen = 2,
tpClose = 3,
RawString = 4,
Float = 5
const _b = 98,
_e = 101,
_f = 102,
_r = 114,
_E = 69,
Dot = 46,
Plus = 43,
Minus = 45,
Hash = 35,
Quote = 34,
Pipe = 124,
LessThan = 60,
GreaterThan = 62
function isNum(ch) {
return ch >= 48 && ch <= 57
}
function isNum_(ch) {
return isNum(ch) || ch == 95
}
const literalTokens = new ExternalTokenizer((input, token, stack) => {
let pos = token.start,
next = input.get(pos)
if (isNum(next)) {
let isFloat = false
do {
next = input.get(++pos)
} while (isNum_(next))
if (next == Dot) {
isFloat = true
next = input.get(++pos)
if (isNum(next)) {
do {
next = input.get(++pos)
} while (isNum_(next))
} else if (next == Dot || next > 0x7f || /\w/.test(String.fromCharCode(next))) {
return
}
}
if (next == _e || next == _E) {
isFloat = true
next = input.get(++pos)
if (next == Plus || next == Minus) next = input.get(++pos)
let startNum = pos
while (isNum_(next)) next = input.get(++pos)
if (pos == startNum) return
}
if (next == _f) {
if (!/32|64/.test(input.read(pos + 1, pos + 3))) return
isFloat = true
pos += 3
}
if (isFloat) token.accept(Float, pos)
} else if (next == _b || next == _r) {
if (next == _b) next = input.get(++pos)
if (next != _r) return
next = input.get(++pos)
let count = 0
while (next == Hash) {
count++
next = input.get(++pos)
}
if (next != Quote) return
next = input.get(++pos)
content: for (;;) {
if (next < 0) return
let isQuote = next == Quote
next = input.get(++pos)
if (isQuote) {
for (let i = 0; i < count; i++) {
if (next != Hash) continue content
next = input.get(++pos)
}
token.accept(RawString, pos)
return
}
}
}
})
const closureParam = new ExternalTokenizer((input, token) => {
if (input.get(token.start) == Pipe) token.accept(closureParamDelim, token.start + 1)
})
const tpDelim = new ExternalTokenizer((input, token) => {
let pos = token.start,
next = input.get(pos)
if (next == LessThan) token.accept(tpOpen, pos + 1)
else if (next == GreaterThan) token.accept(tpClose, pos + 1)
})
const spec_identifier = {
__proto__: null,
self: 28,
super: 32,
crate: 34,
impl: 46,
true: 72,
false: 72,
pub: 88,
in: 92,
const: 96,
unsafe: 104,
async: 108,
move: 110,
if: 114,
let: 118,
ref: 142,
mut: 144,
_: 198,
else: 200,
match: 204,
as: 248,
return: 252,
await: 262,
break: 270,
continue: 276,
while: 312,
loop: 316,
for: 320,
macro_rules: 327,
mod: 334,
extern: 342,
struct: 346,
where: 364,
union: 379,
enum: 382,
type: 390,
default: 395,
fn: 396,
trait: 412,
use: 420,
static: 438,
dyn: 476
}
const parser$3 = Parser.deserialize({
version: 13,
states:
"$3tQ]Q_OOP$wOWOOO&sQWO'#CnO)WQWO'#IaOOQP'#Ia'#IaOOQQ'#If'#IfO)hO`O'#C}OOQR'#Ii'#IiO)sQWO'#IvOOQO'#Hk'#HkO)xQWO'#DpOOQR'#Ix'#IxO)xQWO'#DpO*ZQWO'#DpOOQO'#Iw'#IwO,SQWO'#J`O,ZQWO'#EiOOQV'#Hp'#HpO,cQYO'#F{OOQV'#El'#ElOOQV'#Em'#EmOOQV'#En'#EnO.YQ_O'#EkO0_Q_O'#EoO2gQWOOO4QQ_O'#FPO7hQWO'#J`OOQV'#FY'#FYO7{Q_O'#F^O:WQ_O'#FaOOQO'#F`'#F`O=sQ_O'#FcO=}Q_O'#FbO@VQWO'#FgOOQO'#J`'#J`OOQV'#Ip'#IpOA]Q_O'#IoOEPQWO'#IoOOQV'#Fw'#FwOF[QWO'#JuOFcQWO'#F|OOQO'#IO'#IOOGrQWO'#GhOOQV'#In'#InOOQV'#Im'#ImOOQV'#Hj'#HjQGyQ_OOOKeQ_O'#DUOKlQYO'#CqOOQP'#I`'#I`OOQV'#Hg'#HgQ]Q_OOOLuQWO'#IaONsQYO'#DXO!!eQWO'#JuO!!lQWO'#JuO!!vQ_O'#DfO!%]Q_O'#E}O!(sQ_O'#FWO!,ZQWO'#FZO!.^QXO'#FbO!.cQ_O'#EeO!!vQ_O'#FmO!0uQWO'#FoO!0zQWO'#FoO!1PQ^O'#FqO!1WQWO'#JuO!1_QWO'#FtO!1dQWO'#FxO!2WQWO'#JjO!2_QWO'#GOO!2_QWO'#G`O!2_QWO'#GbO!2_QWO'#GsOOQO'#Ju'#JuO!2dQWO'#GhO!2lQYO'#GpO!2_QWO'#GqO!3uQ^O'#GtO!3|QWO'#GuO!4hQWO'#HOP!4sOpO'#CcPOOO)CDO)CDOOOOO'#Hi'#HiO!5OO`O,59iOOQV,59i,59iO!5ZQYO,5?bOOQO-E;i-E;iOOQO,5:[,5:[OOQP,59Z,59ZO)xQWO,5:[O)xQWO,5:[O!5oQWO,5?lO!5zQYO,5;qO!6PQYO,5;TO!6hQWO,59QO!7kQXO'#CnO!7rQXO'#IaO!8vQWO'#CoO,^QWO'#EiOOQV-E;n-E;nO!9XQWO'#FsOOQV,5PQYO,5ZQ_O'#HsO$>hQXO,5@QOOQV1G1i1G1iOOQP,5:e,5:eO$>pQXO,5PQYO,5=vO$KuQWO'#KRO$LQQWO,5=xOOQR,5=y,5=yO$LVQWO,5=zO$>PQYO,5>PO$>PQYO,5>POOQO1G.w1G.wO$>PQYO1G.wO$LbQYO,5=pO$LjQZO,59^OOQR,59^,59^O$>PQYO,5=wO$N|QZO,5=}OOQR,5=},5=}O%#`QWO1G/_O!6PQYO1G/_O#E|QYO1G2vO%#eQWO1G2vO%#sQYO1G2vOOQV1G/i1G/iO%$|QWO,5:SO%%UQ_O1G/lO%*_QWO1G1^O%*uQWO1G1hOOQO1G1h1G1hO$>PQYO1G1hO%+]Q^O'#EgOOQV1G0k1G0kOOQV1G1s1G1sO!!vQ_O1G1sO!0zQWO1G1uO!1PQ^O1G1wO!.cQ_O1G1wOOQP,5:j,5:jO$>PQYO1G/^OOQO'#Cn'#CnO%+jQWO1G1zOOQV1G2O1G2OO%+rQWO'#CnO%+zQWO1G3TO%,PQWO1G3TO%,UQYO'#GQO%,gQWO'#G]O%,xQYO'#G_O%.[QYO'#GXOOQV1G2U1G2UO%/kQWO1G2UO%/pQWO1G2UO$@uQWO1G2UOOQV1G2f1G2fO%/kQWO1G2fO#CdQWO1G2fO%/xQWO'#GdOOQV1G2h1G2hO%0ZQWO1G2hO#CoQWO1G2hO%0`QYO'#GSO$>PQYO1G2lO$AWQWO1G2lOOQV1G2y1G2yO%1lQWO1G2yO%3[Q^O'#GkO%3fQWO1G2nO#DYQWO1G2nO%3tQYO,5PQYO1G2vOOQV1G2w1G2wO%5hQWO1G2wO%5mQWO1G2wO#G{QWO1G2wOOQV1G2z1G2zO.YQ_O1G2zO$>PQYO1G2zO%5uQWO1G2zOOQO,5>l,5>lOOQO-EPQYO1G3UPOOO-E;d-E;dPOOO1G.i1G.iOOQO7+*h7+*hO%6yQYO'#IdO%7bQYO'#IgO%7mQYO'#IgO%7uQYO'#IgO%8QQYO,59eOOQO7+%b7+%bOOQP7+$a7+$aOOQV,5:p,5:pO%8VQ!fO,5:pO%8^Q!fO'#JTOOQS'#EZ'#EZOOQS'#E['#E[OOQS'#E]'#E]OOQS'#JT'#JTO%;PQWO'#EYOOQS'#Eb'#EbOOQS'#JR'#JROOQS'#Hn'#HnOOQV,5:q,5:qO%;UQ!fO,5:qO%;]Q!fO,5:oOOQV,5:o,5:oOOQV7+'e7+'eOOQV7+&Z7+&ZO%;dQ[O,59TO%;xQ^O,59TO%^OOQO-E;p-E;pO%?iQWO7+'OO%?pQ_O7+'OOOQO7+'O7+'OOOQO7+'P7+'PO%ArQWO7+'POOQO7+'W7+'WOOQP1G0V1G0VO%AzQXO1G/tO!MoQWO1G/tO%B{QXO1G0RO%CsQ^O'#HlO%DTQWO,5?fOOQP1G/u1G/uO%D`QWO1G/uO%DeQWO'#D_OOQO'#Dt'#DtO%DpQWO'#DtO%DuQWO'#I|OOQO'#I{'#I{O%D}QWO,5:_O%ESQWO'#DtO%EXQWO'#DtOOQP1G0Q1G0QOOQP1G0S1G0SOOQP1G0X1G0XO%EaQXO1G1jO%ElQXO'#FeOOQP,5>_,5>_O!1PQ^O'#FeOOQP-E;q-E;qO$>PQYO1G1jOOQO7+'S7+'SOOQO,5PQYO7+$xOOQV7+'j7+'jO%F{QWO7+(oO%GQQWO7+(oOOQV7+'p7+'pO%/kQWO7+'pO%GVQWO7+'pO%G_QWO7+'pOOQV7+(Q7+(QO%/kQWO7+(QO#CdQWO7+(QOOQV7+(S7+(SO%0ZQWO7+(SO#CoQWO7+(SO$>PQYO7+(WO%GmQWO7+(WO#GxQYO7+(cO%GrQWO7+(YO#DYQWO7+(YOOQV7+(c7+(cO%5hQWO7+(cO%5mQWO7+(cO#G{QWO7+(cOOQV7+(g7+(gO$>PQYO7+(pO%HQQWO7+(pO!1dQWO7+(pOOQV7+$v7+$vO%HVQWO7+$vO%H[QZO1G3ZO%JnQWO1G4kOOQO1G4k1G4kOOQR1G.}1G.}O#-zQWO1G.}O%JsQWO'#KQOOQO'#HW'#HWO%KUQWO'#HXO%KaQWO'#KQOOQO'#KP'#KPO%KiQWO,5=qO%KnQYO'#H[O%LzQWO'#GmO%MVQYO'#CtO%MaQWO'#GmO$>PQYO1G3ZOOQR1G3g1G3gO#7TQWO1G3ZO%MfQZO1G3bO$>PQYO1G3bO& uQYO'#IVO&!VQWO,5@mOOQR1G3d1G3dOOQR1G3f1G3fO%?pQ_O1G3fOOQR1G3k1G3kO&!_QYO7+$cO&!gQYO'#KOOOQQ'#J}'#J}O&!oQYO1G3[O&!tQZO1G3cOOQQ7+$y7+$yO&%TQWO7+$yO&%YQWO7+(bOOQV7+(b7+(bO%5hQWO7+(bO$>PQYO7+(bO#E|QYO7+(bO&%bQWO7+(bO!.cQ_O1G/nO&%pQWO7+%WO$?OQWO7+'SO&%xQWO'#EhO&&TQ^O'#EhOOQU'#Ho'#HoO&&TQ^O,5;ROOQV,5;R,5;RO&&_QWO,5;RO&&dQ^O,5;RO!0zQWO7+'_OOQV7+'a7+'aO&&qQWO7+'cO&&yQWO7+'cO&'QQWO7+$xO&)uQ!fO7+'fO&)|Q!fO7+'fOOQV7+(o7+(oO!1dQWO7+(oO&*TQYO,5PQYO'#JrOOQO'#Jq'#JqO&,zQWO,5PQYO'#GUO&.tQYO'#JkOOQQ,5PQYO7+(YO&3[QYO'#HxO&3pQYO1G2WOOQQ1G2W1G2WOOQQ,5PQYO,5PQYO7+(fO&4lQWO'#IRO&4vQWO,5@hOOQO1G3Q1G3QOOQO1G2}1G2}OOQO1G3P1G3POOQO1G3R1G3ROOQO1G3S1G3SOOQO1G3O1G3OO&5OQWO7+(pO$>PQYO,59fO&5ZQ^O'#ISO&6QQYO,5?ROOQR1G/P1G/POOQV1G0[1G0[OOQS-E;l-E;lO&6YQ!bO,5:rO&6_Q!fO,5:tOOQV1G0]1G0]OOQV1G0Z1G0ZOOQO1G.o1G.oO&6fQWO'#KTOOQO'#KS'#KSO&6nQWO1G.oOOQV<]O&9QQWO,5>]OOQO-E;o-E;oOOQO<WOOQO-E;j-E;jOOQP7+%a7+%aO!1PQ^O,5:`O&:rQWO'#HmO&;WQWO,5?hOOQP1G/y1G/yOOQO,5:`,5:`O&;`QWO,5:`O%ESQWO,5:`O$>PQYO,5`,5>`OOQO-E;r-E;rOOQV7+'l7+'lO&PQYO<PQYO<PQYO<PQYO7+(uOOQO7+*V7+*VOOQR7+$i7+$iO&=rQWO,5@lOOQO'#Gm'#GmO&=zQWO'#GmO&>VQYO'#IUO&=rQWO,5@lOOQR1G3]1G3]O&?rQYO,5=vO&ARQYO,5=XO&A]QWO,5=XOOQO,5=X,5=XOOQR7+(u7+(uO&AbQZO7+(uO&CtQZO7+(|O&FTQWO,5>qOOQO-EPQYO<PQYO,5PQYO,5@^O&IuQYO'#H|O&K[QWO,5@^OOQO1G2e1G2eO%,bQWO,5PQYO,5PO&NtQYO,5@VOOQV<PQYO,5=WO'!xQWO,5@cO'#QQWO,5@cO'#`Q^O'#IPO'!xQWO,5@cOOQO1G2q1G2qO'$rQWO,5=WO'$zQWO<oO'%eQYO,5>dO'%sQYO,5>dOOQQ,5>d,5>dOOQQ-E;v-E;vOOQQ7+'r7+'rO'&OQYO1G2]O$>PQYO1G2^OOQV<m,5>mOOQO-EnOOQQ,5>n,5>nO''TQYO,5>nOOQQ-EX,5>XOOQO-E;k-E;kO!1PQ^O1G/zOOQO1G/z1G/zO'+SQWO1G/zO'+XQXO1G1kO$>PQYO1G1kO'+dQWO7+'[OOQVANA`ANA`O'+nQWOANA`O$>PQYOANA`O'+vQWOANA`OOQVAN>OAN>OO%?pQ_OAN>OO',UQWOANAuOOQVAN@vAN@vO',ZQWOAN@vOOQVANAWANAWOOQVANAYANAYOOQVANA^ANA^O',`QWOANA^OOQVANAiANAiO%5hQWOANAiO%5mQWOANAiO',hQWOANA`OOQVANAvANAvO%?pQ_OANAvO',vQWOANAvO$>PQYOANAvOOQR<pOOQO'#HY'#HYO'-ZQWO'#HZOOQO,5>p,5>pOOQO-EPQYO<o,5>oOOQQ-EPQYOANAhO'-uQWO1G1rO'.iQ^O1G0nO%?pQ_O1G0nO'0_QWO,5;UO'0fQWO1G0nP'0kQWO'#ERP&&TQ^O'#HpOOQV7+&X7+&XO'0vQWO7+&XO&&yQWOAN@iO'0{QWOAN>OO!5oQWO,5a,5>aO'1SQWOAN@lO'1XQWOAN@lOOQS-E;s-E;sOOQVAN@lAN@lO'1aQWOAN@lOOQVANAuANAuO'1iQWO1G5vO'1qQWO1G2dO$>PQYO1G2dO&*nQWO,5>gOOQO,5>g,5>gOOQO-E;y-E;yO'1|QWO1G5xO'2UQWO1G5xO&+`QYO,5>hO'2aQWO,5>hO$>PQYO,5>hOOQO-E;z-E;zO'2lQWO'#JnOOQO1G2a1G2aOOQO,5>f,5>fOOQO-E;x-E;xO&*TQYO,5iOOQO,5>i,5>iOOQO-E;{-E;{OOQQ,5>c,5>cOOQQ-E;u-E;uO'4TQWO1G2sO'4eQWO1G2rO'4pQWO1G5}O'4xQ^O,5>kOOQO'#Go'#GoOOQO,5>k,5>kO'6UQWO,5>kOOQO-E;}-E;}O$>PQYO1G2rO'6dQYO7+'xO'6oQWOANAlOOQVANAlANAlO%?pQ_OANAlO'6vQWOANAvOOQS7+%z7+%zO'6}QWO7+%zO'7YQ!fO7+%zOOQO,5>r,5>rOOQO-EPQYOG26zO'8eQWOG23jOOQVG27aG27aOOQVG26bG26bOOQVG26xG26xOOQVG27TG27TO%5hQWOG27TO'8lQWOG27bOOQVG27bG27bO%?pQ_OG27bO'8sQWOG27bOOQO1G4[1G4[OOQO7+(_7+(_OOQRANA{ANA{OOQVG27SG27SO%5hQWOG27SO&3}QWOG27SO'9OQ^O7+&YO':iQWO7+'^O';]Q^O7+&YO%?pQ_O7+&YP%?pQ_O,5;SP'PQYO1G4SO%,bQWO'#HyO'=nQWO,5@YO'=|QWO7+(VO%?pQ_O7+(VOOQO1G4T1G4TOOQO1G4V1G4VO'>WQWO1G4VO'>fQWO7+(^OOQVG27WG27WO'>qQWOG27WOOQS<xQWO<e,5>eOOQO-E;w-E;wO'F[QWO<a#>m#>z#?Q#?Y#?a#?k#?qPPPPPPP#?w#CTP#GS#Kn#Mi$ h$'UP$'XPPP$*`$*i$*{$0V$2e$2n$4gP!)Y$5a$8u$;l$?W$?a$?f$?iPPP$?l$BcP$BsPPPPPPPPPP$CXP$Eg$Ej$Em$Es$Ev$Ey$E|$FP$FV$Ha$Hd$Hg$Hj$Hm$Hp$Hs$Hv$Hy$H|$IP$KV$KY$K]#*l$Ki$Ko$Kr$Ku$Ky$K}$LQ$LT$LW$LZQ!tPT'V!s'Wi!SOlm!P!T$T$W$y%b)T*e/fQ'h#QQ,l'kQ1d,kR7q5X(SSOY[bfgilmop!O!P!T!Y!Z![!_!`!c!p!q!|!}#Q#U#Z#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$`$a$e$g$h$q$r$y%X%_%b&U&Y&[&b&u&z&|'P'a'k'm'n'|(V(X(a(c(d(e(i(n(o(q({)R)T)h*Y*e*h*j*k+Y+m+y,k,o,r,y-Q-S-f-l-s.|/]/a/c/f0d0f0l0|1O1i1s1}3`3b3g3i3l4Y4e4j4x5O5X5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9z9{9|9}:O:P:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m:nS(y$v-nQ*o&eQ*s&hQ-j(xQ-x)YW0Y+P0X4]7ZR4[0Z&{!RObfgilmop!O!P!T!Y!Z![!_!`!c!p#Q#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r$y%_%b&U&Y&[&b&u'k'|(V(X(a(e(i(n(o(q({)R)T)h*Y*e*h*j*k+Y+m,k,r,y-S-f-l-s.|/]/a/c/f0d0f0l0|1i1s1}3`3b3g3i3l4Y4e4j4x5O5X5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m#r]Ofgilmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h+m,r,y-l.|0|1i1}3`3b3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9of#[b#Q$y'k(a)R)T*Y,k-s5X!h$bo!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7t$b%k!Q!n$O$u%o%p%q%y%{&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8n!W;Q!Y!_!`*h*k/]3i9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mR;T%n$_%u!Q!n$O$u%o%p%q&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8n$e%l!Q!n$O$u%n%o%p%q%y%{&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8n'hZOY[fgilmop!O!P!T!Y!Z![!_!`!c!p!|!}#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$`$a$e$g$h$q$r%_%b%i%j&U&Y&[&b&u'a'|(V(X(c(d(e(i(n(o(q({)h)o)p*e*h*j*k+Y+m,r,y-Q-S-f-l.h.|/]/a/c/f0d0f0l0|1i1s1}3`3b3g3i3l4Y4e4j4x5O5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9z9{9|9}:O:P:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:g:h:l:m:n:{:|;P$^%l!Q!n$O$u%n%o%p%q%y%{&P&p&r(p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8nQ&j!hQ&k!iQ&l!jQ&m!kQ&s!oQ)Z%QQ)[%RQ)]%SQ)^%TQ)a%WQ+_&oS,Q']1YQ.V)_S/q*t4VR4p0r+}TOY[bfgilmop!O!P!Q!T!Y!Z![!_!`!c!n!p!q!|!}#Q#U#Z#e#o#p#q#r#s#t#u#v#w#x#y#z#}$O$T$W$`$a$e$g$h$q$r$u$y%X%_%b%i%j%n%o%p%q%y%{&P&U&Y&[&b&o&p&r&u&z&|'P']'a'k'm'n'|(V(X(a(c(d(e(i(n(o(p(q({)R)T)h)o)p)r)w)x)}*O*Q*U*Y*Z*]*d*e*h*j*k*m*v*w+T+U+Y+g+m+n+y+|,k,o,r,y-Q-S-f-h-l-s-u.T._.h.o.s.w.x.|/Y/Z/]/a/c/f/z/|0_0d0f0l0q0v0|0}1O1X1Y1i1s1z1}2b2i2k2n2t2w3W3`3b3g3i3l3w3}4O4T4W4Y4a4e4g4j4v4x5O5X5a5e5i5l5y5{6W6_6b6f6u6{6}7X7c7h7l7t7y8S8_8`8n8r9T9]9o9z9{9|9}:O:P:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:g:h:l:m:n:{:|;PQ'[!xQ'g#PQ)k%gU)q%m*S*VR.e)jQ,S']R5R1Y#t%s!Q!n$O$u%p%q&P&p&r(p)w)x)}*Q*U*Z*]*d*m*v+U+g+n+|-h-u.T._.s.w.x/Y/Z/z/|0_0q0v0}1X1z2b2i2k2n2w3W3w3}4O4W4g4v5e5i5{6W6_6u6{6}7h7y8nQ)w%oQ+^&oQ,T']l,_'b'c'd,Y,e,f/l/m1`3p3s5V5W7pS.p)r2tQ.}*OQ/P*RQ/p*tS0P*w4TQ0`+T[0n+Y.i0f4j6O7cQ2w.oS4f0d2sQ4o0rQ5S1YQ6Y3SQ7P4RQ7T4VQ7^4aR9a8o&pVOfgilmop!O!P!T!Y!Z![!_!`!c!p#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r%_%b&U&Y&[&b&u']'|(V(X(a(e(i(n(o(q({)h*e*h*j*k+Y+m,j,k,r,y-S-f-l.|/]/a/c/f0d0f0l0|1Y1i1s1}3`3b3g3i3l4Y4e4j4x5O5X5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mU&g!g%P%[m,_'b'c'd,Y,e,f/l/m1`3p3s5V5W7p$nsOfgilm!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y'|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:R:S:V:W:X:Y:Z:[:]:^:_:`:a:lS$tp:PS&O!W#bS&Q!X#cQ&`!bQ*^&RQ*`&VS*c&[:mQ*g&^Q,S']Q-i(vQ/h*iQ0o+ZS2g.W0pQ3^/^Q3_/_Q3h/gQ3j/jQ5R1YU5g2S2h4nU7v5h5j5wQ8d6iS8|7w7xS9f8}9OR9p9gi{Ob!O!P!T$y%_%b)R)T)h-shxOb!O!P!T$y%_%b)R)T)h-sW/u*u/s3y6vQ/|*vW0Z+P0X4]7ZQ3}/zQ6}4OR8n6{!h$do!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7tQ&d!dQ&f!fQ&n!mW&x!q%X&|1OQ'S!rQ)W$}Q)X%OQ)`%VU)c%Y'T'UQ*r&hS+r&z'PS-X(j1tQ-t)VQ-w)YS.`)d)eS0w+b/rQ1R+yQ1V+zS1w-^-_Q2l.aQ3u/oQ5b1yR5m2W${sOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m$zsOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mR3^/^V&T!Y!`*h!i$lo!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7t!k$^o!c!p$e$g$h$q$r&U&b&u(a(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7t!i$co!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7t&e^Ofgilmop!O!P!T!Y!Z![!_!`!c!p#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r%_%b&U&Y&[&b&u'|(V(X(e(i(n(o(q({)h*e*h*j*k+Y+m,r,y-S-f-l.|/]/a/c/f0d0f0l0|1i1s1}3`3b3g3i3l4Y4e4j4x5O5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mR(k$fQ-Z(jR5_1tQ(R#|S(z$v-nS-Y(j1tQ-k(xW/t*u/s3y6vS1x-^-_Q3x/uR5c1yQ'e#Oh,b'b'c'd,Y,e,f/l/m1`3p3s5WQ,m'lQ,p'oQ.t)tR8f6kQ'f#Oh,b'b'c'd,Y,e,f/l/m1`3p3s5WQ,n'lQ,p'oQ.t)tR8f6ki,b'b'c'd,Y,e,f/l/m1`3p3s5WR*f&]X/b*e/c/f3g!}aOb!O!P!T#z$v$y%_%b'|(x)R)T)h)r*e*u*v+P+Y,r-n-s.i/a/c/f/s/z0X0f1i2t3g3y4O4]4j6O6f6v6{7Z7cQ3a/`Q6d3cQ8a6eR9^8b${rOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m#nfOfglmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#z#}$T$W%_%b&Y&['|(V(X({)h+m,r,y-l.|0|1i1}3`3b3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o!T9|!Y!_!`*h*k/]3i9|9}:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:l:m#rfOfgilmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h+m,r,y-l.|0|1i1}3`3b3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o!X9|!Y!_!`*h*k/]3i9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m$srOfglmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:l:m#U#oh#d$P$Q$V$s%^&W&X'p's't'u'v'w'x'y'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9i}:W&S&]/j3]6i:c:d:j:k:o:q:r:s:t:u:v:w:x:y:};O;S#W#ph#d$P$Q$V$s%^&W&X'p'q's't'u'v'w'x'y'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9i!P:X&S&]/j3]6i:c:d:j:k:o:p:q:r:s:t:u:v:w:x:y:};O;S#S#qh#d$P$Q$V$s%^&W&X'p't'u'v'w'x'y'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9i{:Y&S&]/j3]6i:c:d:j:k:o:r:s:t:u:v:w:x:y:};O;S#Q#rh#d$P$Q$V$s%^&W&X'p'u'v'w'x'y'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9iy:Z&S&]/j3]6i:c:d:j:k:o:s:t:u:v:w:x:y:};O;S#O#sh#d$P$Q$V$s%^&W&X'p'v'w'x'y'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9iw:[&S&]/j3]6i:c:d:j:k:o:t:u:v:w:x:y:};O;S!|#th#d$P$Q$V$s%^&W&X'p'w'x'y'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9iu:]&S&]/j3]6i:c:d:j:k:o:u:v:w:x:y:};O;S!x#vh#d$P$Q$V$s%^&W&X'p'y'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9iq:_&S&]/j3]6i:c:d:j:k:o:w:x:y:};O;S!v#wh#d$P$Q$V$s%^&W&X'p'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9io:`&S&]/j3]6i:c:d:j:k:o:x:y:};O;S$]#{h#`#d$P$Q$V$s%^&S&W&X&]'p'q'r's't'u'v'w'x'y'z'{'}(T(Z(_*a*b,q,v,x-m/j0y1j1m2O3Q3]4y5[5f6c6i6j7W7j7m7z8Q8q8x9S9c9i:c:d:j:k:o:p:q:r:s:t:u:v:w:x:y:};O;S${jOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m$v!aOfgilmp!O!P!T!Y!Z!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mQ&Y![Q&Z!]R:l:S#rpOfgilmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h+m,r,y-l.|0|1i1}3`3b3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9oQ&[!^!W:P!Y!_!`*h*k/]3i9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mR:m;RR$moR-e(qR$wqT(|$v-nQ/e*eS3e/c/fR6h3gQ3o/lQ3r/mQ6n3pR6q3sQ$zwQ)U${Q*p&fQ+e&qQ+h&sQ-v)XW.Y)a+i+j+kS/W*[+fW2c.V.Z.[.]U3X/X/[0xU5t2d2e2fS6]3Y3[S8O5u5vS8X6[6^Q9Q8PS9U8Y8ZR9j9V^|O!O!P!T%_%b)hX)Q$y)R)T-sQ&r!nQ*]&PQ*{&jQ+O&kQ+S&lQ+V&mQ+[&nQ+k&sQ-|)ZQ.P)[Q.S)]Q.U)^Q.X)`Q.])aQ2T-tQ2f.VR4W0UU+`&o*t4VR4q0rQ+X&mQ+j&sS.[)a+k^0u+^+_/p/q4o4p7TS2e.V.]S4S0Q0RR5v2fS0Q*w4TQ0`+TR7^4aU+c&o*t4VR4r0rQ*y&jQ*}&kQ+R&lQ+f&qQ+i&sS-z)Z*{S.O)[+OS.R)]+SU.Z)a+j+kQ/X*[Q0W*zQ0p+ZQ2Y-{Q2Z-|Q2^.PQ2`.SU2d.V.[.]Q2h.WS3[/[0xS5h2S4nQ5o2[S5u2e2fQ6^3YS7x5j5wQ8P5vQ8Y6[Q8}7wQ9V8ZR9g9OQ0S*wR7R4TQ*x&jQ*|&kU-y)Z*y*{U-})[*}+OS2X-z-|S2].O.PQ4Z0YQ5n2ZQ5p2^R7Y4[Q/v*uQ3v/sQ6w3yR8k6vQ*z&jS-{)Z*{Q2[-|Q4Z0YR7Y4[Q+Q&lU.Q)]+R+SS2_.R.SR5q2`Q0[+PQ4X0XQ7[4]R8s7ZQ+Z&nS.W)`+[S2S-t.XR5j2TQ0h+YQ4h0fQ7e4jR8t7cQ.l)rQ0h+YQ2q.iQ4h0fQ6R2tQ7e4jQ8U6OR8t7cQ0h+YR4h0fX'O!q%X&|1OX&{!q%X&|1OW'O!q%X&|1OS+t&z'PR1T+y_|O!O!P!T%_%b)hQ%a!PS)g%_%bR.c)h$^%u!Q!n$O$u%o%p%q&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8nQ*T%yR*W%{$c%n!Q!n$O$u%o%p%q%y%{&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8nW)s%m%x*S*VQ.d)iR2|.uR.l)rR6R2tQ'W!sR+}'WQ!TOQ$TlQ$WmQ%b!P[%|!T$T$W%b)T/fQ)T$yR/f*e$b%i!Q!n$O$u%o%p%q%y%{&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8n[)m%i)o.h:g:{;PQ)o%jQ.h)pQ:g%nQ:{:hR;P:|Q!vUR'Y!vS!OO!TU%]!O%_)hQ%_!PR)h%b#rYOfgilmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h+m,r,y-l.|0|1i1}3`3b3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9oh!yY!|#U$`'a'm(c,o-Q9z:T:nQ!|[f#Ub#Q$y'k(a)R)T*Y,k-s5X!h$`o!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7tQ'a!}Q'm#ZQ(c$aQ,o'nQ-Q(d!W9z!Y!_!`*h*k/]3i9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mQ:T9{R:n:UQ-T(fR1q-TQ1u-ZR5`1uQ,Y'bQ,e'cQ,f'dW1^,Y,e,f5WR5W1`Q/c*eS3d/c3gR3g/ffbO!O!P!T$y%_%b)R)T)h-sp#Wb'|(x.i/a/s/z0X0f1i6O6f6v6{7Z7cQ'|#zS(x$v-nQ.i)rW/a*e/c/f3gQ/s*uQ/z*vQ0X+PQ0f+YQ1i,rQ6O2tQ6v3yQ6{4OQ7Z4]R7c4jQ,s'}Q1h,qT1k,s1hS(W$Q(ZQ(]$VU,w(W(],|R,|(_Q(r$mR-g(rQ-o(}R2Q-oQ3p/lQ3s/mT6o3p3sQ)R$yS-q)R-sR-s)TQ4b0`R7_4b`0s+]+^+_+`+c/p/q7TR4s0sQ8p7PR9b8pQ4U0SR7S4UQ3z/vQ6s3vT6x3z6sQ4P/{Q6y3|U7O4P6y8lR8l6zQ4^0[Q7V4XT7]4^7VhzOb!O!P!T$y%_%b)R)T)h-sQ$|xW%Zz$|%f)u$b%f!Q!n$O$u%o%p%q%y%{&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8nR)u%nS4k0h0mS7b4h4iT7g4k7bW&z!q%X&|1OS+q&z+yR+y'PQ1P+vR4|1PU1Z,R,S,TR5T1ZS3T/P7TR6Z3TQ2u.lQ5}2qT6S2u5}Q.y)yR3P.yQ5Y1dR7r5Y^_O!O!P!T%_%b)hY#Xb$y)R)T-s$l#_fgilmp!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W&Y&['|(V(X({*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m!h$io!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7tW'i#Q'k,k5XQ-O(aR/U*Y&z!RObfgilmop!O!P!T!Y!Z![!_!`!c!p#Q#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r$y%_%b&U&Y&[&b&u'k'|(V(X(a(e(i(n(o(q({)R)T)h*Y*e*h*j*k+Y+m,k,r,y-S-f-l-s.|/]/a/c/f0d0f0l0|1i1s1}3`3b3g3i3l4Y4e4j4x5O5X5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m[!{Y[#U#Z9z9{W&{!q%X&|1O['`!|!}'m'n:T:US(b$`$aS+s&z'PU,W'a,o:nS-P(c(dQ1S+yR1o-QS%t!Q&oQ&q!nQ(U$OQ(v$uS)v%o.oQ)y%pQ)|%qS*[&P&rQ+d&pQ,R']Q-c(pQ.k)rU.v)w)x2wS.})}*OQ/O*QQ/S*UQ/V*ZQ/[*]Q/_*dQ/k*mQ/{*vS0R*w4TQ0`+TQ0b+UQ0x+gQ0z+nQ1W+|Q1|-hQ2U-uQ2a.TQ2j._Q2{.sQ2}.wQ3O.xQ3Y/YQ3Z/ZS3|/z/|Q4`0_Q4n0qQ4u0vQ4z0}Q5P1XQ5Q1YQ5d1zQ5s2bQ5w2iQ5z2kQ5|2nQ6Q2tQ6[3WQ6t3wQ6z3}Q6|4OQ7U4WQ7^4aQ7a4gQ7i4vQ7u5eQ7w5iQ8T5{Q8W6WQ8Z6_Q8j6uS8m6{6}Q8v7hQ9O7yR9`8n$^%m!Q!n$O$u%o%p%q&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8nQ)i%nQ*S%yR*V%{$y%h!Q!n$O$u%i%j%n%o%p%q%y%{&P&o&p&r'](p)o)p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.h.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8n:g:h:{:|;P'tWOY[bfgilmop!O!P!T!Y!Z![!_!`!c!p!|!}#Q#U#Z#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$`$a$e$g$h$q$r$y%_%b&U&Y&[&b&u'a'k'm'n'|(V(X(a(c(d(e(i(n(o(q({)R)T)h*Y*e*h*j*k+Y+m,k,o,r,y-Q-S-f-l-s.|/]/a/c/f0d0f0l0|1i1s1}3`3b3g3i3l4Y4e4j4x5O5X5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9z9{9|9}:O:P:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m:n$x%g!Q!n$O$u%i%j%n%o%p%q%y%{&P&o&p&r'](p)o)p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.h.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8n:g:h:{:|;P_&y!q%X&z&|'P+y1OR,U']$zrOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m!j$]o!c!p$e$g$h$q$r&U&b&u(a(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7tQ,S']Q1c,jQ1d,kQ5R1YR7q5X_}O!O!P!T%_%b)h^|O!O!P!T%_%b)hQ#YbX)Q$y)R)T-sbhO!O!T3`6b8_8`9]9oS#`f9|Q#dgQ$PiQ$QlQ$VmQ$spW%^!P%_%b)hU&S!Y!`*hQ&W!ZQ&X![Q&]!_Q'p#eQ'q#oS'r#p:XQ's#qQ't#rQ'u#sQ'v#tQ'w#uQ'x#vQ'y#wQ'z#xQ'{#yQ'}#zQ(T#}Q(Z$TQ(_$WQ*a&YQ*b&[Q,q'|Q,v(VQ,x(XQ-m({Q/j*kQ0y+mQ1j,rQ1m,yQ2O-lQ3Q.|Q3]/]Q4y0|Q5[1iQ5f1}Q6c3bQ6i3iQ6j3lQ7W4YQ7j4xQ7m5OQ7z5lQ8Q5yQ8q7XQ8x7lQ9S8SQ9c8rQ9i9TQ:c:OQ:d:PQ:j:RQ:k:SQ:o:VQ:p:WQ:q:YQ:r:ZQ:s:[Q:t:]Q:u:^Q:v:_Q:w:`Q:x:aQ:y:bQ:}:lQ;O:mR;S9}^tO!O!P!T%_%b)h$`#afgilmp!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W&Y&['|(V(X({*h*k+m,r,y-l.|/]0|1i1}3b3i3l4Y4x5O5l5y7X7l8S8r9T9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mQ6a3`Q8^6bQ9Y8_Q9[8`Q9n9]R9t9oQ&V!YQ&^!`R/g*hQ$joQ&a!cQ&t!pU(f$e$g(iS(m$h0dQ(t$qQ(u$rQ*_&UQ*l&bQ+o&uQ-R(eS-a(n4eQ-b(oQ-d(qW/`*e/c/f3gQ/i*jW0e+Y0f4j7cQ1p-SQ1{-fQ3c/aQ4m0lQ5^1sQ7s5aQ8b6fR8{7t!h$_o!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7tR-O(a'uXOY[bfgilmop!O!P!T!Y!Z![!_!`!c!p!|!}#Q#U#Z#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$`$a$e$g$h$q$r$y%_%b&U&Y&[&b&u'a'k'm'n'|(V(X(a(c(d(e(i(n(o(q({)R)T)h*Y*e*h*j*k+Y+m,k,o,r,y-Q-S-f-l-s.|/]/a/c/f0d0f0l0|1i1s1}3`3b3g3i3l4Y4e4j4x5O5X5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9z9{9|9}:O:P:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m:n$zqOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m!i$fo!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7t&d^Ofgilmop!O!P!T!Y!Z![!_!`!c!p#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r%_%b&U&Y&[&b&u'|(V(X(e(i(n(o(q({)h*e*h*j*k+Y+m,r,y-S-f-l.|/]/a/c/f0d0f0l0|1i1s1}3`3b3g3i3l4Y4e4j4x5O5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m[!zY[$`$a9z9{['_!|!}(c(d:T:UW)n%i%j:g:hU,V'a-Q:nW.g)o)p:{:|T2p.h;PQ(h$eQ(l$gR-V(iV(g$e$g(iR-](jR-[(j$znOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m!i$ko!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7t`,c'b'c'd,Y,e,f1`5WX3n/l/m3p3sh,b'b'c'd,Y,e,f/l/m1`3p3s5WQ7o5VR8z7p^uO!O!P!T%_%b)h$`#afgilmp!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W&Y&['|(V(X({*h*k+m,r,y-l.|/]0|1i1}3b3i3l4Y4x5O5l5y7X7l8S8r9T9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mQ6`3`Q8]6bQ9X8_Q9Z8`Q9m9]R9s9oR(P#zR(O#zQ$SlR([$TR$ooR$noR)P$vR)O$vQ(}$vR2P-nhwOb!O!P!T$y%_%b)R)T)h-s$l!lz!Q!n$O$u$|%f%n%o%p%q%y%{&P&o&p&r'](p)r)u)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8nR${xR0a+TR0V*wR0T*wR7Q4RR/x*uR/w*uR0O*vR/}*vR0^+PR0]+P%XyObxz!O!P!Q!T!n$O$u$y$|%_%b%f%n%o%p%q%y%{&P&o&p&r'](p)R)T)h)r)u)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-s-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8nR0j+YR0i+YQ'R!qQ)b%XQ+v&|R4{1OX'Q!q%X&|1OR+x&|R+w&|T/R*R4VT/Q*R4VR.n)rR.m)rR)z%pR1f,kR1e,k",
nodeNames:
'⚠ | < > RawString Float LineComment BlockComment SourceFile ] InnerAttribute ! [ MetaItem self Metavariable super crate Identifier ScopedIdentifier :: QualifiedScope AbstractType impl SelfType MetaType TypeIdentifier ScopedTypeIdentifier ScopeIdentifier TypeArgList TypeBinding = Lifetime String Escape Char Boolean Integer } { Block ; ConstItem Vis pub ( in ) const BoundIdentifier : UnsafeBlock unsafe AsyncBlock async move IfExpression if LetDeclaration let LiteralPattern ArithOp MetaPattern SelfPattern ScopedIdentifier TuplePattern ScopedTypeIdentifier , StructPattern FieldPatternList FieldPattern ref mut FieldIdentifier .. RefPattern SlicePattern CapturedPattern ReferencePattern & MutPattern RangePattern ... OrPattern MacroPattern ParenthesizedTokens BracketedTokens BracedTokens TokenBinding Identifier TokenRepetition ArithOp BitOp LogicOp UpdateOp CompareOp -> => ArithOp _ else MatchExpression match MatchBlock MatchArm Attribute Guard UnaryExpression ArithOp DerefOp LogicOp ReferenceExpression TryExpression BinaryExpression ArithOp ArithOp BitOp BitOp BitOp BitOp LogicOp LogicOp AssignmentExpression TypeCastExpression as ReturnExpression return RangeExpression CallExpression ArgList AwaitExpression await FieldExpression GenericFunction BreakExpression break LoopLabel ContinueExpression continue IndexExpression ArrayExpression TupleExpression MacroInvocation UnitExpression ClosureExpression ParamList Parameter Parameter ParenthesizedExpression StructExpression FieldInitializerList ShorthandFieldInitializer FieldInitializer BaseFieldInitializer MatchArm WhileExpression while LoopExpression loop ForExpression for MacroInvocation MacroDefinition macro_rules MacroRule EmptyStatement ModItem mod DeclarationList AttributeItem ForeignModItem extern StructItem struct TypeParamList ConstrainedTypeParameter TraitBounds HigherRankedTraitBound RemovedTraitBound OptionalTypeParameter ConstParameter WhereClause where LifetimeClause TypeBoundClause FieldDeclarationList FieldDeclaration OrderedFieldDeclarationList UnionItem union EnumItem enum EnumVariantList EnumVariant TypeItem type FunctionItem default fn ParamList Parameter SelfParameter VariadicParameter VariadicParameter ImplItem TraitItem trait AssociatedType LetDeclaration UseDeclaration use ScopedIdentifier UseAsClause ScopedIdentifier UseList ScopedUseList UseWildcard ExternCrateDeclaration StaticItem static ExpressionStatement ExpressionStatement GenericType FunctionType ForLifetimes ParamList VariadicParameter Parameter VariadicParameter Parameter ReferenceType PointerType TupleType UnitType ArrayType MacroInvocation EmptyType DynamicType dyn BoundedType',
maxTerm: 361,
nodeProps: [
[
NodeProp.group,
-42,
4,
5,
14,
15,
16,
17,
18,
19,
33,
35,
36,
37,
40,
51,
53,
56,
101,
107,
111,
112,
113,
122,
123,
125,
127,
128,
130,
132,
133,
134,
137,
139,
140,
141,
142,
143,
144,
148,
149,
155,
157,
159,
'Expression',
-16,
22,
24,
25,
26,
27,
222,
223,
230,
231,
232,
233,
234,
235,
236,
237,
239,
'Type',
-20,
42,
161,
162,
165,
166,
169,
170,
172,
188,
190,
194,
196,
204,
205,
207,
208,
209,
217,
218,
220,
'Statement',
-17,
49,
60,
62,
63,
64,
65,
68,
74,
75,
76,
77,
78,
80,
81,
83,
84,
99,
'Pattern'
],
[NodeProp.openedBy, 9, '[', 38, '{', 47, '('],
[NodeProp.closedBy, 12, ']', 39, '}', 45, ')']
],
skippedNodes: [0, 6, 7, 240],
repeatNodeCount: 33,
tokenData:
"#CO_R!VOX$hXY1_YZ2ZZ]$h]^1_^p$hpq1_qr2srs4qst5Ztu6Vuv9lvw;jwx=nxy!#yyz!$uz{!%q{|!'k|}!(m}!O!)i!O!P!+j!P!Q!/f!Q!R!7q!R![!9f![!]!La!]!^!N_!^!_# Z!_!`##b!`!a#%c!a!b#'j!b!c#(f!c!}#)b!}#O#+X#O#P#,T#P#Q#4d#Q#R#5`#R#S#)b#S#T$h#T#U#)b#U#V#6b#V#f#)b#f#g#9u#g#o#)b#o#p#?S#p#q#@O#q#r#BS#r${$h${$|#)b$|4w$h4w5b#)b5b5i$h5i6S#)b6S~$hU$oZ'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$hU%iT'`Q'PSOz%xz{&^{!P%x!P!Q'S!Q~%xS%}T'PSOz%xz{&^{!P%x!P!Q'S!Q~%xS&aTOz&pz{&^{!P&p!P!Q({!Q~&pS&sTOz%xz{&^{!P%x!P!Q'S!Q~%xS'VSOz&p{!P&p!P!Q'c!Q~&pS'fSOz'r{!P'r!P!Q'c!Q~'rS'uTOz(Uz{(l{!P(U!P!Q'c!Q~(US(]T'QS'PSOz(Uz{(l{!P(U!P!Q'c!Q~(US(oSOz'rz{(l{!P'r!Q~'rS)QO'QSU)VZ'`QOY)xYZ+hZr)xrs&psz)xz{)Q{!P)x!P!Q0w!Q#O)x#O#P&p#P~)xU)}Z'`QOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$hU*uZ'`QOY)xYZ+hZr)xrs&psz)xz{+|{!P)x!P!Q,g!Q#O)x#O#P&p#P~)xU+mT'`QOz%xz{&^{!P%x!P!Q'S!Q~%xQ,RT'`QOY+|YZ,bZr+|s#O+|#P~+|Q,gO'`QU,lZ'`QOY-_YZ0cZr-_rs'rsz-_z{+|{!P-_!P!Q,g!Q#O-_#O#P'r#P~-_U-dZ'`QOY.VYZ/RZr.Vrs(Usz.Vz{/k{!P.V!P!Q,g!Q#O.V#O#P(U#P~.VU.`Z'`Q'QS'PSOY.VYZ/RZr.Vrs(Usz.Vz{/k{!P.V!P!Q,g!Q#O.V#O#P(U#P~.VU/[T'`Q'QS'PSOz(Uz{(l{!P(U!P!Q'c!Q~(UU/pZ'`QOY-_YZ0cZr-_rs'rsz-_z{/k{!P-_!P!Q+|!Q#O-_#O#P'r#P~-_U0hT'`QOz(Uz{(l{!P(U!P!Q'c!Q~(UU1OT'`Q'QSOY+|YZ,bZr+|s#O+|#P~+|_1hZ'`Q&}X'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_2dT'`Q&}X'PSOz%xz{&^{!P%x!P!Q'S!Q~%x_2|]ZX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`3u!`#O$h#O#P%x#P~$h_4OZ#RX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_4zT'^Q'PS'_XOz%xz{&^{!P%x!P!Q'S!Q~%x_5dZ'RX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_6`g'`Q'vW'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!c$h!c!}7w!}#O$h#O#P%x#P#R$h#R#S7w#S#T$h#T#o7w#o${$h${$|7w$|4w$h4w5b7w5b5i$h5i6S7w6S~$h_8Qh'`Q_X'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!QQ{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P~$h_:wZ#QX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_;s_!qX'`Q'PSOY$hYZ%bZr$hrs%xsv$hvwg!Z#O$h#O#P%x#P#g$h#g#h!Ac#h~$h_!g!X#O$h#O#P%x#P~$h_!=n]'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!Y$h!Y!Z!>g!Z#O$h#O#P%x#P~$h_!>pZuX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!?j]'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!S$h!S!T!>g!T#O$h#O#P%x#P~$h_!@j]'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!U$h!U!V!>g!V#O$h#O#P%x#P~$h_!Aj]'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P#]$h#]#^!Bc#^~$h_!Bj]'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P#n$h#n#o!Cc#o~$h_!Cj]'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P#X$h#X#Y!>g#Y~$h_!Dj_'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!R!Ei!R!S!Ei!S#O$h#O#P%x#P#R$h#R#S!Ei#S~$h_!ErcuX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!R!Ei!R!S!Ei!S#O$h#O#P%x#P#R$h#R#S!Ei#S#]$h#]#^!:w#^#i$h#i#j!:w#j~$h_!GU^'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!Y!HQ!Y#O$h#O#P%x#P#R$h#R#S!HQ#S~$h_!HZbuX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!Y!HQ!Y#O$h#O#P%x#P#R$h#R#S!HQ#S#]$h#]#^!:w#^#i$h#i#j!:w#j~$h_!Ijb'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![!Jr![!c$h!c!i!Jr!i#O$h#O#P%x#P#R$h#R#S!Jr#S#T$h#T#Z!Jr#Z~$h_!J{fuX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![!Jr![!c$h!c!i!Jr!i#O$h#O#P%x#P#R$h#R#S!Jr#S#T$h#T#Z!Jr#Z#]$h#]#^!:w#^#i$h#i#j!:w#j~$h_!Lj]!SX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![$h![!]!Mc!]#O$h#O#P%x#P~$h_!MlZdX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!NhZyX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_# d^#RX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!^$h!^!_#!`!_!`3u!`#O$h#O#P%x#P~$h_#!i]'yX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P~$h_##k^oX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`3u!`!a#$g!a#O$h#O#P%x#P~$h_#$pZ#TX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_#%l^#RX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`3u!`!a#&h!a#O$h#O#P%x#P~$h_#&q]'zX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P~$h_#'sZ(RX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$hV#(oZ'qP'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_#)mh'`Q'PS!{W'UPOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![#)b![!c$h!c!}#)b!}#O$h#O#P%x#P#R$h#R#S#)b#S#T$h#T#o#)b#o${$h${$|#)b$|4w$h4w5b#)b5b5i$h5i6S#)b6S~$h_#+bZ[X'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$hU#,YX'PSOz#,uz{#-]{!P#,u!P!Q#-q!Q#i#,u#i#j#.S#j#l#,u#l#m#2z#m~#,uU#,|TrQ'PSOz%xz{&^{!P%x!P!Q'S!Q~%xU#-bTrQOz&pz{&^{!P&p!P!Q({!Q~&pU#-vSrQOz&p{!P&p!P!Q'c!Q~&pU#.X['PSOz%xz{&^{!P%x!P!Q'S!Q![#.}![!c%x!c!i#.}!i#T%x#T#Z#.}#Z#o%x#o#p#1[#p~%xU#/SY'PSOz%xz{&^{!P%x!P!Q'S!Q![#/r![!c%x!c!i#/r!i#T%x#T#Z#/r#Z~%xU#/wY'PSOz%xz{&^{!P%x!P!Q'S!Q![#0g![!c%x!c!i#0g!i#T%x#T#Z#0g#Z~%xU#0lY'PSOz%xz{&^{!P%x!P!Q'S!Q![#,u![!c%x!c!i#,u!i#T%x#T#Z#,u#Z~%xU#1aY'PSOz%xz{&^{!P%x!P!Q'S!Q![#2P![!c%x!c!i#2P!i#T%x#T#Z#2P#Z~%xU#2U['PSOz%xz{&^{!P%x!P!Q'S!Q![#2P![!c%x!c!i#2P!i#T%x#T#Z#2P#Z#q%x#q#r#,u#r~%xU#3PY'PSOz%xz{&^{!P%x!P!Q'S!Q![#3o![!c%x!c!i#3o!i#T%x#T#Z#3o#Z~%xU#3tY'PSOz%xz{&^{!P%x!P!Q'S!Q![#,u![!c%x!c!i#,u!i#T%x#T#Z#,u#Z~%x_#4mZXX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_#5i]'{X'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P~$h_#6mj'`Q'PS!{W'UPOY$hYZ%bZr$hrs#8_sw$hwx#8uxz$hz{)Q{!P$h!P!Q*p!Q![#)b![!c$h!c!}#)b!}#O$h#O#P%x#P#R$h#R#S#)b#S#T$h#T#o#)b#o${$h${$|#)b$|4w$h4w5b#)b5b5i$h5i6S#)b6S~$h]#8fT'PS'_XOz%xz{&^{!P%x!P!Q'S!Q~%x_#8|]'`Q'PSOY?dYZA`Zr?drsBdsw?dwx@dxz?dz{CO{!P?d!P!QDv!Q#O?d#O#PId#P~?d_#:Qi'`Q'PS!{W'UPOY$hYZ%bZr$hrs%xst#;otz$hz{)Q{!P$h!P!Q*p!Q![#)b![!c$h!c!}#)b!}#O$h#O#P%x#P#R$h#R#S#)b#S#T$h#T#o#)b#o${$h${$|#)b$|4w$h4w5b#)b5b5i$h5i6S#)b6S~$hV#;vg'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!c$h!c!}#=_!}#O$h#O#P%x#P#R$h#R#S#=_#S#T$h#T#o#=_#o${$h${$|#=_$|4w$h4w5b#=_5b5i$h5i6S#=_6S~$hV#=hh'`Q'PS'UPOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![#=_![!c$h!c!}#=_!}#O$h#O#P%x#P#R$h#R#S#=_#S#T$h#T#o#=_#o${$h${$|#=_$|4w$h4w5b#=_5b5i$h5i6S#=_6S~$h_#?]ZwX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_#@X_'sX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P#p$h#p#q#AW#q~$h_#AaZ'|X'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_#B]ZvX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h",
tokenizers: [closureParam, tpDelim, literalTokens, 0, 1, 2, 3],
topRules: { SourceFile: [0, 8] },
specialized: [{ term: 282, get: value => spec_identifier[value] || -1 }],
tokenPrec: 15890
})
const rustLanguage = LezerLanguage.define({
parser: parser$3.configure({
props: [
indentNodeProp.add({ IfExpression: continuedIndent({ except: /^\s*({|else\b)/ }), 'String BlockComment': () => -1, 'Statement MatchArm': continuedIndent() }),
foldNodeProp.add(type => {
if (/(Block|edTokens|List)$/.test(type.name)) return foldInside$1
if (type.name == 'BlockComment') return tree => ({ from: tree.from + 2, to: tree.to - 2 })
return undefined
}),
styleTags({
'const macro_rules mod struct union enum type fn impl trait let use crate static': tags$1.definitionKeyword,
'pub unsafe async mut extern default move': tags$1.modifier,
'for if else loop while match continue break return await': tags$1.controlKeyword,
'as in ref': tags$1.operatorKeyword,
'where _ crate super dyn': tags$1.keyword,
self: tags$1.self,
String: tags$1.string,
RawString: tags$1.special(tags$1.string),
Boolean: tags$1.bool,
Identifier: tags$1.variableName,
'CallExpression/Identifier': tags$1.function(tags$1.variableName),
BoundIdentifier: tags$1.definition(tags$1.variableName),
LoopLabel: tags$1.labelName,
FieldIdentifier: tags$1.propertyName,
'CallExpression/FieldExpression/FieldIdentifier': tags$1.function(tags$1.propertyName),
Lifetime: tags$1.special(tags$1.variableName),
ScopeIdentifier: tags$1.namespace,
TypeIdentifier: tags$1.typeName,
'MacroInvocation/Identifier MacroInvocation/ScopedIdentifier/Identifier': tags$1.macroName,
'MacroInvocation/TypeIdentifier MacroInvocation/ScopedIdentifier/TypeIdentifier': tags$1.macroName,
'"!"': tags$1.macroName,
UpdateOp: tags$1.updateOperator,
LineComment: tags$1.lineComment,
BlockComment: tags$1.blockComment,
Integer: tags$1.integer,
Float: tags$1.float,
ArithOp: tags$1.arithmeticOperator,
LogicOp: tags$1.logicOperator,
BitOp: tags$1.bitwiseOperator,
CompareOp: tags$1.compareOperator,
'=': tags$1.definitionOperator,
'.. ... => ->': tags$1.punctuation,
'( )': tags$1.paren,
'[ ]': tags$1.squareBracket,
'{ }': tags$1.brace,
'.': tags$1.derefOperator,
'&': tags$1.operator,
', ; ::': tags$1.separator
})
]
}),
languageData: { commentTokens: { line: '//', block: { open: '/*', close: '*/' } }, indentOnInput: /^\s*(?:\{|\})$/ }
})
function rust() {
return new LanguageSupport(rustLanguage)
}
var _m30 = Object.freeze({ __proto__: null, rust: rust, rustLanguage: rustLanguage })
const StartTag = 1,
StartCloseTag = 2,
mismatchedStartCloseTag = 3,
incompleteStartCloseTag = 4,
commentContent = 35,
piContent = 36,
cdataContent = 37,
Element$3 = 9,
OpenTag = 11
function nameChar(ch) {
return ch == 45 || ch == 46 || ch == 58 || (ch >= 65 && ch <= 90) || ch == 95 || (ch >= 97 && ch <= 122) || ch >= 161
}
function isSpace(ch) {
return ch == 9 || ch == 10 || ch == 13 || ch == 32
}
let cachedName = null,
cachedInput = null,
cachedPos = 0
function tagNameAfter(input, pos) {
if (cachedPos == pos && cachedInput == input) return cachedName
let next = input.get(pos)
while (isSpace(next)) next = input.get(++pos)
let start = pos
while (nameChar(next)) next = input.get(++pos)
cachedInput = input
cachedPos = pos
return (cachedName = pos > start ? input.read(start, pos).toLowerCase() : null)
}
function ElementContext(name, parent) {
this.name = name
this.parent = parent
this.hash = parent ? parent.hash : 0
for (let i = 0; i < name.length; i++) this.hash += (this.hash << 4) + name.charCodeAt(i) + (name.charCodeAt(i) << 8)
}
const elementContext = new ContextTracker({
start: null,
shift(context, term, input, stack) {
return term == StartTag ? new ElementContext(tagNameAfter(input, stack.pos) || '', context) : context
},
reduce(context, term) {
return term == Element$3 && context ? context.parent : context
},
reuse(context, node, input, stack) {
let type = node.type.id
return type == StartTag || type == OpenTag ? new ElementContext(tagNameAfter(input, stack.pos - node.length + 1) || '', context) : context
},
hash(context) {
return context ? context.hash : 0
},
strict: false
})
const startTag = new ExternalTokenizer((input, token, stack) => {
let pos = token.start
if (input.get(pos++) != 60) return
let next = input.get(pos)
if (next == 47) {
pos++
let name = tagNameAfter(input, pos)
if (!name) return token.accept(incompleteStartCloseTag, pos)
if (stack.context && name == stack.context.name) return token.accept(StartCloseTag, pos)
for (let cx = stack.context; cx; cx = cx.parent) if (cx.name == name) return
token.accept(mismatchedStartCloseTag, pos)
} else if (next != 33 && next != 63) {
return token.accept(StartTag, pos)
}
})
function scanTo(type, end) {
return new ExternalTokenizer((input, token) => {
let pos = token.start,
endPos = 0
for (;;) {
let next = input.get(pos)
if (next < 0) break
pos++
if (next == end.charCodeAt(endPos)) {
endPos++
if (endPos == end.length) {
pos -= end.length
break
}
} else {
endPos = 0
}
}
if (pos > token.start) token.accept(type, pos)
})
}
const commentContent$1 = scanTo(commentContent, '-->')
const piContent$1 = scanTo(piContent, '?>')
const cdataContent$1 = scanTo(cdataContent, '?>')
const parser$2 = Parser.deserialize({
version: 13,
states:
"-OOQOaOOOcObO'#CbOkOdO'#CcOOOP'#Cu'#CuOsOaO'#DSO!XOaOOOOOQ'#Cv'#CvO!aObO,58|OOOP,58|,58|OOOS'#Cw'#CwO!iOdO,58}OOOP,58},58}OOOP-E6s-E6sO!qO`O'#CgO!yOqO'#CeOOOP'#Ce'#CeO#kOaO'#CxQ#|OPOOO$ROaOOOOOQ-E6t-E6tOOOP1G.h1G.hOOOS-E6u-E6uOOOP1G.i1G.iOOOO'#Cy'#CyO$aO`O,59RO$iO!bO,59RO$wOhO'#CpO%PO`O'#CqOOOP'#D['#D[OOOP'#C|'#C|O!yOqO,59PO%XO`O'#CrOOOP,59P,59POOOP,59d,59dOOOP-E6v-E6vO#|OPOOOOOO-E6w-E6wO%aO!bO1G.mO%aO!bO1G.mO%oO`O'#CiO%wO!bO'#CzO&VO!bO1G.mOOOP1G.m1G.mOOOP1G.z1G.zOOOW'#C}'#C}O&bOhO,59[OOOP,59[,59[O&jO`O,59]O&rO`O,59]OOOP-E6z-E6zOOOP1G.k1G.kO&zO`O,59^O'SO`O,59^O'[O!bO7+$XO'jO!bO7+$XOOOP7+$X7+$XOOOP7+$f7+$fO'uO`O,59TO'}O`O,59TO(VO!bO,59fOOOO-E6x-E6xOOOW-E6{-E6{OOOP1G.v1G.vO(eO`O1G.wO(eO`O1G.wOOOP1G.w1G.wO(mO`O1G.xO(mO`O1G.xOOOP1G.x1G.xO(uO!bO<U!a!b>q!b!c$k!c!}+z!}#P$k#P#Q?}#Q#R$k#R#S+z#S#T$k#T#o+z#o%W$k%W%o+z%o%p$k%p&a+z&a&b$k&b1p+z1p4U$k4U4d+z4d4e$k4e$IS+z$IS$I`$k$I`$Ib+z$Ib$Kh$k$Kh%#t+z%#t&/x$k&/x&Et+z&Et&FV$k&FV;'S+z;'S;:jAz;:j?&r$k?&r?Ah+z?Ah?BY$k?BY?Mn+z?Mn~$kY$rUcQ}WOr$krs%Usv$kw!^$k!^!_%d!_~$kQ%ZRcQOv%Uw!^%U!_~%UW%iR}WOr%dsv%dw~%d_%{]cQ}WyTOX$kXY%rYZ%rZ]$k]^%r^p$kpq%rqr$krs%Usv$kw!^$k!^!_%d!_~$kZ&{R|XcQOv%Uw!^%U!_~%U~'XTOp'hqs'hst(Pt!]'h!^~'h~'kTOp'hqs'ht!]'h!]!^'z!^~'h~(POa~~(SROp(]q!](]!^~(]~(`SOp(]q!](]!]!^(l!^~(]~(qOb~Z(xWcQ}WOr$krs%Usv$kw}$k}!O)b!O!^$k!^!_%d!_~$kZ)iWcQ}WOr$krs%Usv$kw!^$k!^!_%d!_!`$k!`!a*R!a~$kZ*[UwPcQ}WOr$krs%Usv$kw!^$k!^!_%d!_~$k^*uWcQ}WOr$krs%Usv$kw!^$k!^!_%d!_!`$k!`!a+_!a~$k^+hUgScQ}WOr$krs%Usv$kw!^$k!^!_%d!_~$k_,V}^S[PcQ}WOr$krs%Usv$kw}$k}!O+z!O!P+z!P!Q$k!Q![+z![!]+z!]!^$k!^!_%d!_!c$k!c!}+z!}#R$k#R#S+z#S#T$k#T#o+z#o$}$k$}%O+z%O%W$k%W%o+z%o%p$k%p&a+z&a&b$k&b1p+z1p4U+z4U4d+z4d4e$k4e$IS+z$IS$I`$k$I`$Ib+z$Ib$Je$k$Je$Jg+z$Jg$Kh$k$Kh%#t+z%#t&/x$k&/x&Et+z&Et&FV$k&FV;'S+z;'S;:j/S;:j?&r$k?&r?Ah+z?Ah?BY$k?BY?Mn+z?Mn~$k_/ZWcQ}WOr$krs%Usv$kw!^$k!^!_%d!_;=`$k;=`<%l+z<%l~$kZ/xU}WOq%dqr0[sv%dw!a%d!a!b=X!b~%dZ0aZ}WOr%dsv%dw}%d}!O1S!O!f%d!f!g1x!g!}%d!}#O5s#O#W%d#W#X:k#X~%dZ1XT}WOr%dsv%dw}%d}!O1h!O~%dZ1oRxR}WOr%dsv%dw~%dX1}T}WOr%dsv%dw!q%d!q!r2^!r~%dX2cT}WOr%dsv%dw!e%d!e!f2r!f~%dX2wT}WOr%dsv%dw!v%d!v!w3W!w~%dX3]T}WOr%dsv%dw!{%d!{!|3l!|~%dX3qT}WOr%dsv%dw!r%d!r!s4Q!s~%dX4VT}WOr%dsv%dw!g%d!g!h4f!h~%dX4kV}WOr4frs5Qsv4fvw5Qw!`4f!`!a5c!a~4fP5TRO!`5Q!`!a5^!a~5QP5cOWPX5jRWP}WOr%dsv%dw~%dY5xV}WOr%dsv%dw!e%d!e!f6_!f#V%d#V#W8w#W~%dY6dT}WOr%dsv%dw!f%d!f!g6s!g~%dY6xT}WOr%dsv%dw!c%d!c!d7X!d~%dY7^T}WOr%dsv%dw!v%d!v!w7m!w~%dY7rT}WOr%dsv%dw!c%d!c!d8R!d~%dY8WT}WOr%dsv%dw!}%d!}#O8g#O~%dY8nR}W!QQOr%dsv%dw~%dY8|T}WOr%dsv%dw#W%d#W#X9]#X~%dY9bT}WOr%dsv%dw#T%d#T#U9q#U~%dY9vT}WOr%dsv%dw#h%d#h#i:V#i~%dY:[T}WOr%dsv%dw#T%d#T#U8R#U~%dX:pT}WOr%dsv%dw#c%d#c#d;P#d~%dX;UT}WOr%dsv%dw#V%d#V#W;e#W~%dX;jT}WOr%dsv%dw#h%d#h#i;y#i~%dX_UYTcQ}WOr$krs%Usv$kw!^$k!^!_%d!_~$kZ>xWcQ}WOr$krs%Usv$kw!^$k!^!_%d!_!`$k!`!a?b!a~$kZ?kUzPcQ}WOr$krs%Usv$kw!^$k!^!_%d!_~$kZ@UWcQ}WOr$krs%Usv$kw!^$k!^!_%d!_#P$k#P#Q@n#Q~$kZ@uWcQ}WOr$krs%Usv$kw!^$k!^!_%d!_!`$k!`!aA_!a~$kZAhU!PPcQ}WOr$krs%Usv$kw!^$k!^!_%d!_~$k_BRWcQ}WOr$krs%Usv$kw!^$k!^!_%d!_;=`$k;=`<%l+z<%l~$k",
tokenizers: [startTag, commentContent$1, piContent$1, cdataContent$1, 0, 1, 2, 3],
topRules: { Document: [0, 5] },
tokenPrec: 0
})
function tagName(doc, tag) {
let name = tag && tag.getChild('TagName')
return name ? doc.sliceString(name.from, name.to) : ''
}
function elementName(doc, tree) {
let tag = tree && tree.firstChild
return !tag || tag.name != 'OpenTag' ? '' : tagName(doc, tag)
}
function attrName(doc, tag, pos) {
let attr = tag && tag.getChildren('Attribute').find(a => a.from <= pos && a.to >= pos)
let name = attr && attr.getChild('AttributeName')
return name ? doc.sliceString(name.from, name.to) : ''
}
function findParentElement(tree) {
for (let cur = tree && tree.parent; cur; cur = cur.parent) if (cur.name == 'Element') return cur
return null
}
function findLocation(state, pos) {
var _a
let at = syntaxTree(state).resolve(pos, -1),
inTag = null
for (let cur = at; !inTag && cur.parent; cur = cur.parent) if (cur.name == 'OpenTag' || cur.name == 'CloseTag' || cur.name == 'SelfClosingTag' || cur.name == 'MismatchedCloseTag') inTag = cur
if (inTag && (inTag.to > pos || inTag.lastChild.type.isError)) {
let elt = inTag.parent
if (at.name == 'TagName')
return inTag.name == 'CloseTag' || inTag.name == 'MismatchedCloseTag'
? { type: 'closeTag', from: at.from, context: elt }
: { type: 'openTag', from: at.from, context: findParentElement(elt) }
if (at.name == 'AttributeName') return { type: 'attrName', from: at.from, context: inTag }
if (at.name == 'AttributeValue') return { type: 'attrValue', from: at.from, context: inTag }
let before = at == inTag || at.name == 'Attribute' ? at.childBefore(pos) : at
if ((before === null || before === void 0 ? void 0 : before.name) == 'StartTag') return { type: 'openTag', from: pos, context: findParentElement(elt) }
if ((before === null || before === void 0 ? void 0 : before.name) == 'StartCloseTag' && before.to <= pos) return { type: 'closeTag', from: pos, context: elt }
if ((before === null || before === void 0 ? void 0 : before.name) == 'Is') return { type: 'attrValue', from: pos, context: inTag }
if (before) return { type: 'attrName', from: pos, context: inTag }
return null
} else if (at.name == 'StartCloseTag') {
return { type: 'closeTag', from: pos, context: at.parent }
}
while (at.parent && at.to == pos && !((_a = at.lastChild) === null || _a === void 0 ? void 0 : _a.type.isError)) at = at.parent
if (at.name == 'Element' || at.name == 'Text' || at.name == 'Document') return { type: 'tag', from: pos, context: at.name == 'Element' ? at : findParentElement(at) }
return null
}
class Element$2 {
constructor(spec, attrs, attrValues) {
this.attrs = attrs
this.attrValues = attrValues
this.children = []
this.name = spec.name
this.completion = Object.assign(Object.assign({ type: 'type' }, spec.completion || {}), { label: this.name })
this.openCompletion = Object.assign(Object.assign({}, this.completion), { label: '<' + this.name })
this.closeCompletion = Object.assign(Object.assign({}, this.completion), { label: '' + this.name + '>', boost: 2 })
this.closeNameCompletion = Object.assign(Object.assign({}, this.completion), { label: this.name + '>' })
this.text = spec.textContent ? spec.textContent.map(s => ({ label: s, type: 'text' })) : []
}
}
const Identifier = /^[:\-\.\w\u00b7-\uffff]*$/
function attrCompletion(spec) {
return Object.assign(Object.assign({ type: 'property' }, spec.completion || {}), { label: spec.name })
}
function valueCompletion(spec) {
return typeof spec == 'string' ? { label: `"${spec}"`, type: 'constant' } : /^"/.test(spec.label) ? spec : Object.assign(Object.assign({}, spec), { label: `"${spec.label}"` })
}
function completeFromSchema(eltSpecs, attrSpecs) {
let allAttrs = [],
globalAttrs = []
let attrValues = Object.create(null)
for (let _i205 = 0, _length205 = attrSpecs.length; _i205 < _length205; _i205++) {
let s = attrSpecs[_i205]
let completion = attrCompletion(s)
allAttrs.push(completion)
if (s.global) globalAttrs.push(completion)
if (s.values) attrValues[s.name] = s.values.map(valueCompletion)
}
let allElements = [],
topElements = []
let byName = Object.create(null)
for (let _i206 = 0, _length206 = eltSpecs.length; _i206 < _length206; _i206++) {
let s = eltSpecs[_i206]
let attrs = globalAttrs,
attrVals = attrValues
if (s.attributes)
attrs = attrs.concat(
s.attributes.map(s => {
if (typeof s == 'string') return allAttrs.find(a => a.label == s) || { label: s, type: 'property' }
if (s.values) {
if (attrVals == attrValues) attrVals = Object.create(attrVals)
attrVals[s.name] = s.values.map(valueCompletion)
}
return attrCompletion(s)
})
)
let elt = new Element$2(s, attrs, attrVals)
byName[elt.name] = elt
allElements.push(elt)
if (s.top) topElements.push(elt)
}
if (!topElements.length) topElements = allElements
for (let i = 0; i < allElements.length; i++) {
let s = eltSpecs[i],
elt = allElements[i]
if (s.children) {
for (let _i207 = 0, _s$children = s.children, _length207 = _s$children.length; _i207 < _length207; _i207++) {
let ch = _s$children[_i207]
if (byName[ch]) elt.children.push(byName[ch])
}
} else {
elt.children = allElements
}
}
return cx => {
var _a
let { doc } = cx.state,
loc = findLocation(cx.state, cx.pos)
if (!loc || (loc.type == 'tag' && !cx.explicit)) return null
let { type, from, context } = loc
if (type == 'openTag') {
let children = topElements
let parentName = elementName(doc, context)
if (parentName) {
let parent = byName[parentName]
children = (parent === null || parent === void 0 ? void 0 : parent.children) || allElements
}
return { from, options: children.map(ch => ch.completion), span: Identifier }
} else if (type == 'closeTag') {
let parentName = elementName(doc, context)
return parentName
? {
from,
to: cx.pos + (doc.sliceString(cx.pos, cx.pos + 1) == '>' ? 1 : 0),
options: [((_a = byName[parentName]) === null || _a === void 0 ? void 0 : _a.closeNameCompletion) || { label: parentName + '>', type: 'type' }],
span: Identifier
}
: null
} else if (type == 'attrName') {
let parent = byName[tagName(doc, context)]
return { from, options: (parent === null || parent === void 0 ? void 0 : parent.attrs) || globalAttrs, span: Identifier }
} else if (type == 'attrValue') {
let attr = attrName(doc, context, from)
if (!attr) return null
let parent = byName[tagName(doc, context)]
let values = ((parent === null || parent === void 0 ? void 0 : parent.attrValues) || attrValues)[attr]
if (!values || !values.length) return null
return { from, to: cx.pos + (doc.sliceString(cx.pos, cx.pos + 1) == '"' ? 1 : 0), options: values, span: /^"[^"]*"?$/ }
} else if (type == 'tag') {
let parentName = elementName(doc, context),
parent = byName[parentName]
let closing = [],
last = context && context.lastChild
if (parentName && (!last || last.name != 'CloseTag' || tagName(doc, last) != parentName))
closing.push(parent ? parent.closeCompletion : { label: '' + parentName + '>', type: 'type', boost: 2 })
let options = closing.concat(((parent === null || parent === void 0 ? void 0 : parent.children) || (context ? allElements : topElements)).map(e => e.openCompletion))
if (context && (parent === null || parent === void 0 ? void 0 : parent.text.length)) {
let openTag = context.firstChild
if (openTag.to > cx.pos - 20 && !/\S/.test(cx.state.sliceDoc(openTag.to, cx.pos))) options = options.concat(parent.text)
}
return { from, options, span: /^<\/?[:\-\.\w\u00b7-\uffff]*$/ }
} else {
return null
}
}
}
const xmlLanguage = LezerLanguage.define({
parser: parser$2.configure({
props: [
indentNodeProp.add({
Element(context) {
let closed = /^\s*<\//.test(context.textAfter)
return context.lineIndent(context.state.doc.lineAt(context.node.from)) + (closed ? 0 : context.unit)
},
'OpenTag CloseTag SelfClosingTag'(context) {
return context.column(context.node.from) + context.unit
}
}),
foldNodeProp.add({
Element(subtree) {
let first = subtree.firstChild,
last = subtree.lastChild
if (!first || first.name != 'OpenTag') return null
return { from: first.to, to: last.name == 'CloseTag' ? last.from : subtree.to }
}
}),
styleTags({
AttributeValue: tags$1.string,
Text: tags$1.content,
'StartTag StartCloseTag EndTag SelfCloseEndTag': tags$1.angleBracket,
TagName: tags$1.tagName,
'MismatchedCloseTag/Tagname': [tags$1.tagName, tags$1.invalid],
AttributeName: tags$1.propertyName,
UnquotedAttributeValue: tags$1.string,
Is: tags$1.definitionOperator,
'EntityReference CharacterReference': tags$1.character,
Comment: tags$1.blockComment,
ProcessingInst: tags$1.processingInstruction,
DoctypeDecl: tags$1.documentMeta,
Cdata: tags$1.special(tags$1.string)
})
]
}),
languageData: { commentTokens: { block: { open: '' } }, indentOnInput: /^\s*<\/$/ }
})
function xml(conf = {}) {
return new LanguageSupport(xmlLanguage, xmlLanguage.data.of({ autocomplete: completeFromSchema(conf.elements || [], conf.attributes || []) }))
}
var _m31 = Object.freeze({ __proto__: null, completeFromSchema: completeFromSchema, xml: xml, xmlLanguage: xmlLanguage })
class CompositeBlock {
constructor(type, value, from, hash, end, children, positions) {
this.type = type
this.value = value
this.from = from
this.hash = hash
this.end = end
this.children = children
this.positions = positions
}
static create(type, value, from, parentHash, end) {
let hash = (parentHash + (parentHash << 8) + type + (value << 4)) | 0
return new CompositeBlock(type, value, from, hash, end, [], [])
}
toTree(nodeSet, end = this.end) {
let last = this.children.length - 1
if (last >= 0) end = Math.max(end, this.positions[last] + this.children[last].length + this.from)
let tree = new Tree(nodeSet.types[this.type], this.children, this.positions, end - this.from).balance(2048)
stampContext(tree.children, this.hash)
return tree
}
copy() {
return new CompositeBlock(this.type, this.value, this.from, this.hash, this.end, this.children.slice(), this.positions.slice())
}
}
var Type
;(function(Type) {
Type[(Type['Document'] = 1)] = 'Document'
Type[(Type['CodeBlock'] = 2)] = 'CodeBlock'
Type[(Type['FencedCode'] = 3)] = 'FencedCode'
Type[(Type['Blockquote'] = 4)] = 'Blockquote'
Type[(Type['HorizontalRule'] = 5)] = 'HorizontalRule'
Type[(Type['BulletList'] = 6)] = 'BulletList'
Type[(Type['OrderedList'] = 7)] = 'OrderedList'
Type[(Type['ListItem'] = 8)] = 'ListItem'
Type[(Type['ATXHeading1'] = 9)] = 'ATXHeading1'
Type[(Type['ATXHeading2'] = 10)] = 'ATXHeading2'
Type[(Type['ATXHeading3'] = 11)] = 'ATXHeading3'
Type[(Type['ATXHeading4'] = 12)] = 'ATXHeading4'
Type[(Type['ATXHeading5'] = 13)] = 'ATXHeading5'
Type[(Type['ATXHeading6'] = 14)] = 'ATXHeading6'
Type[(Type['SetextHeading1'] = 15)] = 'SetextHeading1'
Type[(Type['SetextHeading2'] = 16)] = 'SetextHeading2'
Type[(Type['HTMLBlock'] = 17)] = 'HTMLBlock'
Type[(Type['LinkReference'] = 18)] = 'LinkReference'
Type[(Type['Paragraph'] = 19)] = 'Paragraph'
Type[(Type['CommentBlock'] = 20)] = 'CommentBlock'
Type[(Type['ProcessingInstructionBlock'] = 21)] = 'ProcessingInstructionBlock'
Type[(Type['Escape'] = 22)] = 'Escape'
Type[(Type['Entity'] = 23)] = 'Entity'
Type[(Type['HardBreak'] = 24)] = 'HardBreak'
Type[(Type['Emphasis'] = 25)] = 'Emphasis'
Type[(Type['StrongEmphasis'] = 26)] = 'StrongEmphasis'
Type[(Type['Link'] = 27)] = 'Link'
Type[(Type['Image'] = 28)] = 'Image'
Type[(Type['InlineCode'] = 29)] = 'InlineCode'
Type[(Type['HTMLTag'] = 30)] = 'HTMLTag'
Type[(Type['Comment'] = 31)] = 'Comment'
Type[(Type['ProcessingInstruction'] = 32)] = 'ProcessingInstruction'
Type[(Type['URL'] = 33)] = 'URL'
Type[(Type['HeaderMark'] = 34)] = 'HeaderMark'
Type[(Type['QuoteMark'] = 35)] = 'QuoteMark'
Type[(Type['ListMark'] = 36)] = 'ListMark'
Type[(Type['LinkMark'] = 37)] = 'LinkMark'
Type[(Type['EmphasisMark'] = 38)] = 'EmphasisMark'
Type[(Type['CodeMark'] = 39)] = 'CodeMark'
Type[(Type['CodeInfo'] = 40)] = 'CodeInfo'
Type[(Type['LinkTitle'] = 41)] = 'LinkTitle'
Type[(Type['LinkLabel'] = 42)] = 'LinkLabel'
})(Type || (Type = {}))
class LeafBlock {
constructor(start, content) {
this.start = start
this.content = content
this.marks = []
this.parsers = []
}
}
class Line {
constructor() {
this.text = ''
this.baseIndent = 0
this.basePos = 0
this.depth = 0
this.markers = []
this.pos = 0
this.indent = 0
this.next = -1
}
forward() {
if (this.basePos > this.pos) this.forwardInner()
}
forwardInner() {
let newPos = this.skipSpace(this.basePos)
this.indent = this.countIndent(newPos, this.pos, this.indent)
this.pos = newPos
this.next = newPos == this.text.length ? -1 : this.text.charCodeAt(newPos)
}
skipSpace(from) {
return skipSpace(this.text, from)
}
reset(text) {
this.text = text
this.baseIndent = this.basePos = this.pos = this.indent = 0
this.forwardInner()
this.depth = 1
while (this.markers.length) this.markers.pop()
}
moveBase(to) {
this.basePos = to
this.baseIndent = this.countIndent(to, this.pos, this.indent)
}
moveBaseColumn(indent) {
this.baseIndent = indent
this.basePos = this.findColumn(indent)
}
addMarker(elt) {
this.markers.push(elt)
}
countIndent(to, from = 0, indent = 0) {
for (let i = from; i < to; i++) indent += this.text.charCodeAt(i) == 9 ? 4 - (indent % 4) : 1
return indent
}
findColumn(goal) {
let i = 0
for (let indent = 0; i < this.text.length && indent < goal; i++) indent += this.text.charCodeAt(i) == 9 ? 4 - (indent % 4) : 1
return i
}
scrub() {
if (!this.baseIndent) return this.text
let result = ''
for (let i = 0; i < this.basePos; i++) result += ' '
return result + this.text.slice(this.basePos)
}
}
function skipForList(bl, cx, line) {
if (line.pos == line.text.length || (bl != cx.block && line.indent >= cx.stack[line.depth + 1].value + line.baseIndent)) return true
if (line.indent >= line.baseIndent + 4) return false
let size = (bl.type == Type.OrderedList ? isOrderedList : isBulletList)(line, cx, false)
return size > 0 && (bl.type != Type.BulletList || isHorizontalRule(line, cx, false) < 0) && line.text.charCodeAt(line.pos + size - 1) == bl.value
}
const DefaultSkipMarkup = {
[Type.Blockquote](bl, cx, line) {
if (line.next != 62) return false
line.markers.push(elt(Type.QuoteMark, cx.lineStart + line.pos, cx.lineStart + line.pos + 1))
line.moveBase(line.pos + 1)
bl.end = cx.lineStart + line.text.length
return true
},
[Type.ListItem](bl, _cx, line) {
if (line.indent < line.baseIndent + bl.value && line.next > -1) return false
line.moveBaseColumn(line.baseIndent + bl.value)
return true
},
[Type.OrderedList]: skipForList,
[Type.BulletList]: skipForList,
[Type.Document]() {
return true
}
}
function space(ch) {
return ch == 32 || ch == 9 || ch == 10 || ch == 13
}
function skipSpace(line, i = 0) {
while (i < line.length && space(line.charCodeAt(i))) i++
return i
}
function skipSpaceBack(line, i, to) {
while (i > to && space(line.charCodeAt(i - 1))) i--
return i
}
function isFencedCode(line) {
if (line.next != 96 && line.next != 126) return -1
let pos = line.pos + 1
while (pos < line.text.length && line.text.charCodeAt(pos) == line.next) pos++
if (pos < line.pos + 3) return -1
if (line.next == 96) for (let i = pos; i < line.text.length; i++) if (line.text.charCodeAt(i) == 96) return -1
return pos
}
function isBlockquote(line) {
return line.next != 62 ? -1 : line.text.charCodeAt(line.pos + 1) == 32 ? 2 : 1
}
function isHorizontalRule(line, cx, breaking) {
if (line.next != 42 && line.next != 45 && line.next != 95) return -1
let count = 1
for (let pos = line.pos + 1; pos < line.text.length; pos++) {
let ch = line.text.charCodeAt(pos)
if (ch == line.next) count++
else if (!space(ch)) return -1
}
if (breaking && line.next == 45 && isSetextUnderline(line) > -1 && line.depth == cx.stack.length) return -1
return count < 3 ? -1 : 1
}
function inList(cx, type) {
return cx.block.type == type || (cx.stack.length > 1 && cx.stack[cx.stack.length - 2].type == type)
}
function isBulletList(line, cx, breaking) {
return (line.next == 45 || line.next == 43 || line.next == 42) &&
(line.pos == line.text.length - 1 || space(line.text.charCodeAt(line.pos + 1))) &&
(!breaking || inList(cx, Type.BulletList) || line.skipSpace(line.pos + 2) < line.text.length)
? 1
: -1
}
function isOrderedList(line, cx, breaking) {
let pos = line.pos,
next = line.next
for (;;) {
if (next >= 48 && next <= 57) pos++
else break
if (pos == line.text.length) return -1
next = line.text.charCodeAt(pos)
}
if (
pos == line.pos ||
pos > line.pos + 9 ||
(next != 46 && next != 41) ||
(pos < line.text.length - 1 && !space(line.text.charCodeAt(pos + 1))) ||
(breaking && !inList(cx, Type.OrderedList) && (line.skipSpace(pos + 1) == line.text.length || pos > line.pos + 1 || line.next != 49))
)
return -1
return pos + 1 - line.pos
}
function isAtxHeading(line) {
if (line.next != 35) return -1
let pos = line.pos + 1
while (pos < line.text.length && line.text.charCodeAt(pos) == 35) pos++
if (pos < line.text.length && line.text.charCodeAt(pos) != 32) return -1
let size = pos - line.pos
return size > 6 ? -1 : size
}
function isSetextUnderline(line) {
if ((line.next != 45 && line.next != 61) || line.indent >= line.baseIndent + 4) return -1
let pos = line.pos + 1
while (pos < line.text.length && line.text.charCodeAt(pos) == line.next) pos++
let end = pos
while (pos < line.text.length && space(line.text.charCodeAt(pos))) pos++
return pos == line.text.length ? end : -1
}
const EmptyLine = /^[ \t]*$/,
CommentEnd = /-->/,
ProcessingEnd = /\?>/
const HTMLBlockStyle = [
[/^<(?:script|pre|style)(?:\s|>|$)/i, /<\/(?:script|pre|style)>/i],
[/^\s*/i.exec(after)
if (comment) return cx.append(elt(Type.Comment, start, start + 1 + comment[0].length))
let procInst = /^\?[^]*?\?>/.exec(after)
if (procInst) return cx.append(elt(Type.ProcessingInstruction, start, start + 1 + procInst[0].length))
let m = /^(?:![A-Z][^]*?>|!\[CDATA\[[^]*?\]\]>|\/\s*[a-zA-Z][\w-]*\s*>|\s*[a-zA-Z][\w-]*(\s+[a-zA-Z:_][\w-.:]*(?:\s*=\s*(?:[^\s"'=<>`]+|'[^']*'|"[^"]*"))?)*\s*(\/\s*)?>)/.exec(after)
if (!m) return -1
let children = []
if (cx.parser.htmlParser) {
let p = cx.parser.htmlParser.startParse(stringInput(cx.slice(start, start + 1 + m[0].length)), 0, {}),
tree
while (!(tree = p.advance())) {}
children = tree.children.map((ch, i) => new TreeElement(ch, start + tree.positions[i]))
}
return cx.append(elt(Type.HTMLTag, start, start + 1 + m[0].length, children))
},
Emphasis(cx, next, start) {
if (next != 95 && next != 42) return -1
let pos = start + 1
while (cx.char(pos) == next) pos++
let before = cx.slice(start - 1, start),
after = cx.slice(pos, pos + 1)
let pBefore = Punctuation.test(before),
pAfter = Punctuation.test(after)
let sBefore = /\s|^$/.test(before),
sAfter = /\s|^$/.test(after)
let leftFlanking = !sAfter && (!pAfter || sBefore || pBefore)
let rightFlanking = !sBefore && (!pBefore || sAfter || pAfter)
let canOpen = leftFlanking && (next == 42 || !rightFlanking || pBefore)
let canClose = rightFlanking && (next == 42 || !leftFlanking || pAfter)
return cx.append(new InlineDelimiter(next == 95 ? EmphasisUnderscore : EmphasisAsterisk, start, pos, (canOpen ? 1 : 0) | (canClose ? 2 : 0)))
},
HardBreak(cx, next, start) {
if (next == 92 && cx.char(start + 1) == 10) return cx.append(elt(Type.HardBreak, start, start + 2))
if (next == 32) {
let pos = start + 1
while (cx.char(pos) == 32) pos++
if (cx.char(pos) == 10 && pos >= start + 2) return cx.append(elt(Type.HardBreak, start, pos + 1))
}
return -1
},
Link(cx, next, start) {
return next == 91 ? cx.append(new InlineDelimiter(LinkStart, start, start + 1, 1)) : -1
},
Image(cx, next, start) {
return next == 33 && cx.char(start + 1) == 91 ? cx.append(new InlineDelimiter(ImageStart, start, start + 2, 1)) : -1
},
LinkEnd(cx, next, start) {
if (next != 93) return -1
for (let i = cx.parts.length - 1; i >= 0; i--) {
let part = cx.parts[i]
if (part instanceof InlineDelimiter && (part.type == LinkStart || part.type == ImageStart)) {
if (!part.side || (cx.skipSpace(part.to) == start && !/[(\[]/.test(cx.slice(start + 1, start + 2)))) {
cx.parts[i] = null
return -1
}
let content = cx.takeContent(i)
let link = (cx.parts[i] = finishLink(cx, content, part.type == LinkStart ? Type.Link : Type.Image, part.from, start + 1))
if (part.type == LinkStart)
for (let j = 0; j < i; j++) {
let p = cx.parts[j]
if (p instanceof InlineDelimiter && p.type == LinkStart) p.side = 0
}
return link.to
}
}
return -1
}
}
function finishLink(cx, content, type, start, startPos) {
let { text } = cx,
next = cx.char(startPos),
endPos = startPos
content.unshift(elt(Type.LinkMark, start, start + (type == Type.Image ? 2 : 1)))
content.push(elt(Type.LinkMark, startPos - 1, startPos))
if (next == 40) {
let pos = cx.skipSpace(startPos + 1)
let dest = parseURL(text, pos - cx.offset, cx.offset),
title
if (dest) {
pos = cx.skipSpace(dest.to)
title = parseLinkTitle(text, pos - cx.offset, cx.offset)
if (title) pos = cx.skipSpace(title.to)
}
if (cx.char(pos) == 41) {
content.push(elt(Type.LinkMark, startPos, startPos + 1))
endPos = pos + 1
if (dest) content.push(dest)
if (title) content.push(title)
content.push(elt(Type.LinkMark, pos, endPos))
}
} else if (next == 91) {
let label = parseLinkLabel(text, startPos - cx.offset, cx.offset, false)
if (label) {
content.push(label)
endPos = label.to
}
}
return elt(type, start, endPos, content)
}
function parseURL(text, start, offset) {
let next = text.charCodeAt(start)
if (next == 60) {
for (let pos = start + 1; pos < text.length; pos++) {
let ch = text.charCodeAt(pos)
if (ch == 62) return elt(Type.URL, start + offset, pos + 1 + offset)
if (ch == 60 || ch == 10) return false
}
return null
} else {
let depth = 0,
pos = start
for (let escaped = false; pos < text.length; pos++) {
let ch = text.charCodeAt(pos)
if (space(ch)) {
break
} else if (escaped) {
escaped = false
} else if (ch == 40) {
depth++
} else if (ch == 41) {
if (!depth) break
depth--
} else if (ch == 92) {
escaped = true
}
}
return pos > start ? elt(Type.URL, start + offset, pos + offset) : pos == text.length ? null : false
}
}
function parseLinkTitle(text, start, offset) {
let next = text.charCodeAt(start)
if (next != 39 && next != 34 && next != 40) return false
let end = next == 40 ? 41 : next
for (let pos = start + 1, escaped = false; pos < text.length; pos++) {
let ch = text.charCodeAt(pos)
if (escaped) escaped = false
else if (ch == end) return elt(Type.LinkTitle, start + offset, pos + 1 + offset)
else if (ch == 92) escaped = true
}
return null
}
function parseLinkLabel(text, start, offset, requireNonWS) {
for (let escaped = false, pos = start + 1, end = Math.min(text.length, pos + 999); pos < end; pos++) {
let ch = text.charCodeAt(pos)
if (escaped) escaped = false
else if (ch == 93) return requireNonWS ? false : elt(Type.LinkLabel, start + offset, pos + 1 + offset)
else {
if (requireNonWS && !space(ch)) requireNonWS = false
if (ch == 91) return false
else if (ch == 92) escaped = true
}
}
return null
}
class InlineContext {
constructor(parser, text, offset) {
this.parser = parser
this.text = text
this.offset = offset
this.parts = []
}
char(pos) {
return pos >= this.end ? -1 : this.text.charCodeAt(pos - this.offset)
}
get end() {
return this.offset + this.text.length
}
slice(from, to) {
return this.text.slice(from - this.offset, to - this.offset)
}
append(elt) {
this.parts.push(elt)
return elt.to
}
addDelimiter(type, from, to, open, close) {
return this.append(new InlineDelimiter(type, from, to, (open ? 1 : 0) | (close ? 2 : 0)))
}
addElement(elt) {
return this.append(elt)
}
resolveMarkers(from) {
for (let i = from; i < this.parts.length; i++) {
let close = this.parts[i]
if (!(close instanceof InlineDelimiter && close.type.resolve && close.side & 2)) continue
let emp = close.type == EmphasisUnderscore || close.type == EmphasisAsterisk
let closeSize = close.to - close.from
let open,
j = i - 1
for (; j >= from; j--) {
let part = this.parts[j]
if (
!(part instanceof InlineDelimiter && part.side & 1 && part.type == close.type) ||
(emp && (close.side & 1 || part.side & 2) && (part.to - part.from + closeSize) % 3 == 0 && ((part.to - part.from) % 3 || closeSize % 3))
)
continue
open = part
break
}
if (!open) continue
let type = close.type.resolve,
content = []
let start = open.from,
end = close.to
if (emp) {
let size = Math.min(2, open.to - open.from, closeSize)
start = open.to - size
end = close.from + size
type = size == 1 ? 'Emphasis' : 'StrongEmphasis'
}
if (open.type.mark) content.push(this.elt(open.type.mark, start, open.to))
for (let k = j + 1; k < i; k++) {
if (this.parts[k] instanceof Element$1) content.push(this.parts[k])
this.parts[k] = null
}
if (close.type.mark) content.push(this.elt(close.type.mark, close.from, end))
let element = this.elt(type, start, end, content)
this.parts[j] = emp && open.from != start ? new InlineDelimiter(open.type, open.from, start, open.side) : null
let keep = (this.parts[i] = emp && close.to != end ? new InlineDelimiter(close.type, end, close.to, close.side) : null)
if (keep) this.parts.splice(i, 0, element)
else this.parts[i] = element
}
let result = []
for (let i = from; i < this.parts.length; i++) {
let part = this.parts[i]
if (part instanceof Element$1) result.push(part)
}
return result
}
findOpeningDelimiter(type) {
for (let i = this.parts.length - 1; i >= 0; i--) {
let part = this.parts[i]
if (part instanceof InlineDelimiter && part.type == type) return i
}
return null
}
takeContent(startIndex) {
let content = this.resolveMarkers(startIndex)
this.parts.length = startIndex
return content
}
skipSpace(from) {
return skipSpace(this.text, from - this.offset) + this.offset
}
elt(type, from, to, children) {
if (typeof type == 'string') return elt(this.parser.getNodeType(type), from, to, children)
return new TreeElement(type, from)
}
}
function injectMarks(elements, marks) {
if (!marks.length) return elements
if (!elements.length) return marks
let elts = elements.slice(),
eI = 0
for (let _i227 = 0, _length227 = marks.length; _i227 < _length227; _i227++) {
let mark = marks[_i227]
while (eI < elts.length && elts[eI].to < mark.to) eI++
if (eI < elts.length && elts[eI].from < mark.from) {
let e = elts[eI]
if (e instanceof Element$1) elts[eI] = new Element$1(e.type, e.from, e.to, injectMarks(e.children, [mark]))
} else {
elts.splice(eI++, 0, mark)
}
}
return elts
}
const ContextHash = new WeakMap()
function stampContext(nodes, hash) {
for (let _i228 = 0, _length228 = nodes.length; _i228 < _length228; _i228++) {
let n = nodes[_i228]
ContextHash.set(n, hash)
if (n instanceof Tree && n.type.isAnonymous) stampContext(n.children, hash)
}
}
const NotLast = [Type.CodeBlock, Type.ListItem, Type.OrderedList, Type.BulletList]
class FragmentCursor {
constructor(fragments, input) {
this.fragments = fragments
this.input = input
this.i = 0
this.fragment = null
this.fragmentEnd = -1
this.cursor = null
if (fragments.length) this.fragment = fragments[this.i++]
}
nextFragment() {
this.fragment = this.i < this.fragments.length ? this.fragments[this.i++] : null
this.cursor = null
this.fragmentEnd = -1
}
moveTo(pos, lineStart) {
while (this.fragment && this.fragment.to <= pos) this.nextFragment()
if (!this.fragment || this.fragment.from > (pos ? pos - 1 : 0)) return false
if (this.fragmentEnd < 0) {
let end = this.fragment.to
while (end > 0 && this.input.get(end - 1) != 10) end--
this.fragmentEnd = end ? end - 1 : 0
}
let c = this.cursor
if (!c) {
c = this.cursor = this.fragment.tree.cursor()
c.firstChild()
}
let rPos = pos + this.fragment.offset
while (c.to <= rPos) if (!c.parent()) return false
for (;;) {
if (c.from >= rPos) return this.fragment.from <= lineStart
if (!c.childAfter(rPos)) return false
}
}
matches(hash) {
let tree = this.cursor.tree
return tree && ContextHash.get(tree) == hash
}
takeNodes(cx) {
let cur = this.cursor,
off = this.fragment.offset
let start = cx.lineStart,
end = start,
blockI = cx.block.children.length
let prevEnd = end,
prevI = blockI
for (;;) {
if (cur.to - off >= this.fragmentEnd) {
if (cur.type.isAnonymous && cur.firstChild()) continue
break
}
cx.addNode(cur.tree, cur.from - off)
if (cur.type.is('Block')) {
if (NotLast.indexOf(cur.type.id) < 0) {
end = cur.to - off
blockI = cx.block.children.length
} else {
end = prevEnd
blockI = prevI
prevEnd = cur.to - off
prevI = cx.block.children.length
}
}
if (!cur.nextSibling()) break
}
while (cx.block.children.length > blockI) {
cx.block.children.pop()
cx.block.positions.pop()
}
return end - start
}
}
const parser$1 = new MarkdownParser(
new NodeSet(nodeTypes),
null,
null,
Object.keys(DefaultBlockParsers).map(n => DefaultBlockParsers[n]),
Object.keys(DefaultBlockParsers).map(n => DefaultLeafBlocks[n]),
Object.keys(DefaultBlockParsers),
DefaultEndLeaf,
DefaultSkipMarkup,
Object.keys(DefaultInline).map(n => DefaultInline[n]),
Object.keys(DefaultInline)
)
const StrikethroughDelim = { resolve: 'Strikethrough', mark: 'StrikethroughMark' }
const Strikethrough = {
defineNodes: ['Strikethrough', 'StrikethroughMark'],
parseInline: [
{
name: 'Strikethrough',
parse(cx, next, pos) {
if (next != 126 || cx.char(pos + 1) != 126) return -1
return cx.addDelimiter(StrikethroughDelim, pos, pos + 2, true, true)
},
after: 'Emphasis'
}
]
}
function parseRow(cx, line, startI = 0, elts, offset = 0) {
let count = 0,
first = true,
cellStart = -1,
cellEnd = -1,
esc = false
let parseCell = () => {
elts.push(cx.elt('TableCell', offset + cellStart, offset + cellEnd, cx.parser.parseInline(line.slice(cellStart, cellEnd), offset + cellStart)))
}
for (let i = startI; i < line.length; i++) {
let next = line.charCodeAt(i)
if (next == 124 && !esc) {
if (!first || cellStart > -1) count++
first = false
if (elts) {
if (cellStart > -1) parseCell()
elts.push(cx.elt('TableDelimiter', i + offset, i + offset + 1))
}
cellStart = cellEnd = -1
} else if (esc || (next != 32 && next != 9)) {
if (cellStart < 0) cellStart = i
cellEnd = i + 1
}
esc = !esc && next == 92
}
if (cellStart > -1) {
count++
if (elts) parseCell()
}
return count
}
function hasPipe(str, start) {
for (let i = start; i < str.length; i++) {
let next = str.charCodeAt(i)
if (next == 124) return true
if (next == 92) i++
}
return false
}
class TableParser {
constructor() {
this.rows = null
}
nextLine(cx, line, leaf) {
if (this.rows == null) {
this.rows = false
let lineText
if ((line.next == 45 || line.next == 58 || line.next == 124) && /^\|?(\s*:?-+:?\s*\|)+(\s*:?-+:?\s*)?$/.test((lineText = line.text.slice(line.pos)))) {
let firstRow = [],
firstCount = parseRow(cx, leaf.content, 0, firstRow, leaf.start)
if (firstCount == parseRow(cx, lineText, line.pos))
this.rows = [cx.elt('TableHeader', leaf.start, leaf.start + leaf.content.length, firstRow), cx.elt('TableDelimiter', cx.lineStart + line.pos, cx.lineStart + line.text.length)]
}
} else if (this.rows) {
let content = []
parseRow(cx, line.text, line.pos, content, cx.lineStart)
this.rows.push(cx.elt('TableRow', cx.lineStart + line.pos, cx.lineStart + line.text.length, content))
}
return false
}
finish(cx, leaf) {
if (this.rows) {
this.emit(cx, leaf)
return true
}
return false
}
emit(cx, leaf) {
cx.addLeafElement(leaf, cx.elt('Table', leaf.start, leaf.start + leaf.content.length, this.rows))
}
}
const Table = {
defineNodes: [{ name: 'Table', block: true }, 'TableHeader', 'TableRow', 'TableCell', 'TableDelimiter'],
parseBlock: [
{
name: 'Table',
leaf(_, leaf) {
return hasPipe(leaf.content, 0) ? new TableParser() : null
},
before: 'SetextHeading'
}
]
}
class TaskParser {
nextLine() {
return false
}
finish(cx, leaf) {
cx.addLeafElement(
leaf,
cx.elt('Task', leaf.start, leaf.start + leaf.content.length, [cx.elt('TaskMarker', leaf.start, leaf.start + 3), ...cx.parser.parseInline(leaf.content.slice(3), leaf.start + 3)])
)
return true
}
}
const TaskList = {
defineNodes: [{ name: 'Task', block: true }, 'TaskMarker'],
parseBlock: [
{
name: 'TaskList',
leaf(cx, leaf) {
return /^\[[ xX]\]/.test(leaf.content) && cx.parser.nodeSet.types[cx.block.type].name == 'ListItem' ? new TaskParser() : null
},
after: 'SetextHeading'
}
]
}
const GFM = [Table, TaskList, Strikethrough]
function parseSubSuper(ch, node, mark) {
return (cx, next, pos) => {
if (next != ch || cx.char(pos + 1) == ch) return -1
let elts = [cx.elt(mark, pos, pos + 1)]
for (let i = pos + 1; i < cx.end; i++) {
let next = cx.char(i)
if (next == ch) return cx.addElement(cx.elt(node, pos, i + 1, elts.concat(cx.elt(mark, i, i + 1))))
if (next == 92) elts.push(cx.elt('Escape', i, i++ + 2))
if (space(next)) break
}
return -1
}
}
const Superscript = { defineNodes: ['Superscript', 'SuperscriptMark'], parseInline: [{ name: 'Superscript', parse: parseSubSuper(94, 'Superscript', 'SuperscriptMark') }] }
const Subscript = { defineNodes: ['Subscript', 'SubscriptMark'], parseInline: [{ name: 'Subscript', parse: parseSubSuper(126, 'Subscript', 'SubscriptMark') }] }
const Emoji = {
defineNodes: ['Emoji'],
parseInline: [
{
name: 'Emoji',
parse(cx, next, pos) {
let match
if (next != 58 || !(match = /^[a-zA-Z_0-9]+:/.exec(cx.slice(pos + 1, cx.end)))) return -1
return cx.addElement(cx.elt('Emoji', pos, pos + 1 + match[0].length))
}
}
]
}
const data = defineLanguageFacet({ block: { open: '' } })
const commonmark = parser$1.configure({
props: [
styleTags({
'Blockquote/...': tags$1.quote,
HorizontalRule: tags$1.contentSeparator,
'ATXHeading1/... SetextHeading1/...': tags$1.heading1,
'ATXHeading2/... SetextHeading2/...': tags$1.heading2,
'ATXHeading3/...': tags$1.heading3,
'ATXHeading4/...': tags$1.heading4,
'ATXHeading5/...': tags$1.heading5,
'ATXHeading6/...': tags$1.heading6,
'Comment CommentBlock': tags$1.comment,
Escape: tags$1.escape,
Entity: tags$1.character,
'Emphasis/...': tags$1.emphasis,
'StrongEmphasis/...': tags$1.strong,
'Link/... Image/...': tags$1.link,
'OrderedList/... BulletList/...': tags$1.list,
'BlockQuote/...': tags$1.quote,
'InlineCode/... CodeBlock FencedCode': tags$1.monospace,
URL: tags$1.url,
'HeaderMark HardBreak QuoteMark ListMark LinkMark EmphasisMark CodeMark': tags$1.processingInstruction,
'CodeInfo LinkLabel': tags$1.labelName,
LinkTitle: tags$1.string,
Paragraph: tags$1.content
}),
foldNodeProp.add(type => {
if (!type.is('Block') || type.is('Document')) return undefined
return (tree, state) => ({ from: state.doc.lineAt(tree.from).to, to: tree.to })
}),
indentNodeProp.add({ Document: () => null }),
languageDataProp.add({ Document: data })
],
htmlParser: htmlLanguage.parser.configure({ dialect: 'noMatch' })
})
const commonmarkLanguage = mkLang(commonmark)
const extended = commonmark.configure([
GFM,
Subscript,
Superscript,
Emoji,
{
props: [
styleTags({
'TableDelimiter SubscriptMark SuperscriptMark StrikethroughMark': tags$1.processingInstruction,
'TableHeader/...': tags$1.heading,
'Strikethrough/...': tags$1.strikethrough,
TaskMarker: tags$1.atom,
Task: tags$1.list,
Emoji: tags$1.character,
'Subscript Superscript': tags$1.special(tags$1.content),
TableCell: tags$1.content
})
]
}
])
const markdownLanguage = mkLang(extended)
function mkLang(parser) {
return new Language(
data,
parser,
parser.nodeSet.types.find(t => t.name == 'Document')
)
}
function addCodeLanguages(languages, defaultLanguage) {
return {
codeParser(info) {
let found = info && LanguageDescription.matchLanguageName(languages, info, true)
if (!found) return defaultLanguage ? defaultLanguage.parser : null
if (found.support) return found.support.language.parser
return EditorParseContext.getSkippingParser(found.load())
}
}
}
function nodeStart(node, doc) {
return doc.sliceString(node.from, node.from + 50)
}
function gatherMarkup(node, line, doc) {
let nodes = []
for (let cur = node; cur && cur.name != 'Document'; cur = cur.parent) {
if (cur.name == 'ListItem' || cur.name == 'Blockquote') nodes.push(cur)
}
let markup = [],
pos = 0
for (let i = nodes.length - 1; i >= 0; i--) {
let node = nodes[i],
match
if (node.name == 'Blockquote' && (match = /^\s*> ?/.exec(line.slice(pos)))) {
markup.push({ from: pos, string: match[0], node })
pos += match[0].length
} else if (node.name == 'ListItem' && node.parent.name == 'OrderedList' && (match = /^\s*\d+([.)])\s*/.exec(nodeStart(node, doc)))) {
let len = match[1].length >= 4 ? match[0].length - match[1].length + 1 : match[0].length
markup.push({ from: pos, string: line.slice(pos, pos + len).replace(/\S/g, ' '), node })
pos += len
} else if (node.name == 'ListItem' && node.parent.name == 'BulletList' && (match = /^\s*[-+*] (\s*)/.exec(nodeStart(node, doc)))) {
let len = match[1].length >= 4 ? match[0].length - match[1].length : match[0].length
markup.push({ from: pos, string: line.slice(pos, pos + len).replace(/\S/g, ' '), node })
pos += len
}
}
return markup
}
function renumberList(after, doc, changes) {
for (let prev = -1, node = after; ; ) {
if (node.name == 'ListItem') {
let m = /^(\s*)(\d+)(?=[.)])/.exec(doc.sliceString(node.from, node.from + 10))
if (!m) return
let number = +m[2]
if (prev >= 0) {
if (number != prev + 1) return
changes.push({ from: node.from + m[1].length, to: node.from + m[0].length, insert: String(prev + 2) })
}
prev = number
}
let next = node.nextSibling
if (!next) break
node = next
}
}
const insertNewlineContinueMarkup = ({ state, dispatch }) => {
let tree = syntaxTree(state)
let dont = null,
changes = state.changeByRange(range => {
if (range.empty && markdownLanguage.isActiveAt(state, range.from)) {
let line = state.doc.lineAt(range.from)
let markup = gatherMarkup(tree.resolve(range.from, -1), line.text, state.doc)
let from = range.from,
changes = []
if (markup.length) {
let inner = markup[markup.length - 1],
innerEnd = inner.from + inner.string.length
let emptyLine = range.from - line.from >= innerEnd && !/\S/.test(line.text.slice(innerEnd, range.from - line.from))
if (emptyLine) {
let start = /List/.test(inner.node.name) ? inner.from : innerEnd
while (start > 0 && /\s/.test(line.text[start - 1])) start--
from = line.from + start
}
if (inner.node.name == 'ListItem') {
if (emptyLine && line.from > 0 && !/[^\s>]/.test(state.doc.lineAt(line.from - 1).text)) return { range: EditorSelection.cursor(from), changes: { from, to: range.from } }
if (from < range.from && inner.node.parent.from == inner.node.from) {
inner.string = ''
} else {
if (inner.node.from >= line.from) inner.string = line.text.slice(inner.from, inner.from + inner.string.length)
else inner.string = /^\s*/.exec(line.text)[0].slice(0, inner.string.length)
if (inner.node.parent.name == 'OrderedList' && from == range.from) {
inner.string = inner.string.replace(/\d+/, m => +m + 1)
renumberList(inner.node, state.doc, changes)
}
}
}
}
let insert = markup.map(m => m.string).join('')
if (range.from - line.from < insert.length) insert = ''
changes.push({ from, to: range.from, insert: Text.of(['', insert]) })
return { range: EditorSelection.cursor(from + 1 + insert.length), changes }
}
return (dont = { range })
})
if (dont) return false
dispatch(state.update(changes, { scrollIntoView: true }))
return true
}
const deleteMarkupBackward = ({ state, dispatch }) => {
let tree = syntaxTree(state)
let dont = null,
changes = state.changeByRange(range => {
if (range.empty && markdownLanguage.isActiveAt(state, range.from)) {
let line = state.doc.lineAt(range.from)
let markup = gatherMarkup(tree.resolve(range.from, -1), line.text, state.doc)
if (markup.length) {
let inner = markup[markup.length - 1],
innerEnd = inner.from + inner.string.length
if (range.from > innerEnd + line.from && !/\S/.test(line.text.slice(innerEnd, range.from - line.from)))
return { range: EditorSelection.cursor(innerEnd + line.from), changes: { from: innerEnd + line.from, to: range.from } }
if (range.from - line.from == innerEnd) {
let start = line.from + inner.from
if (inner.node.name == 'ListItem' && inner.node.parent.from < inner.node.from && /\S/.test(line.text.slice(inner.from, innerEnd)))
return { range, changes: { from: start, to: start + inner.string.length, insert: inner.string } }
return { range: EditorSelection.cursor(start), changes: { from: start, to: range.from } }
}
}
}
return (dont = { range })
})
if (dont) return false
dispatch(state.update(changes, { scrollIntoView: true }))
return true
}
const markdownKeymap = [
{ key: 'Enter', run: insertNewlineContinueMarkup },
{ key: 'Backspace', run: deleteMarkupBackward }
]
function markdown(config = {}) {
let { codeLanguages, defaultCodeLanguage, addKeymap = true, base: { parser } = commonmarkLanguage } = config
let extensions = config.extensions ? [config.extensions] : []
if (!(parser instanceof MarkdownParser)) throw new RangeError('Base parser provided to `markdown` should be a Markdown parser')
if (codeLanguages || defaultCodeLanguage) extensions.push(addCodeLanguages(codeLanguages || [], defaultCodeLanguage))
return new LanguageSupport(mkLang(parser.configure(extensions)), addKeymap ? Prec.extend(keymap.of(markdownKeymap)) : [])
}
var _m32 = Object.freeze({
__proto__: null,
commonmarkLanguage: commonmarkLanguage,
deleteMarkupBackward: deleteMarkupBackward,
insertNewlineContinueMarkup: insertNewlineContinueMarkup,
markdown: markdown,
markdownKeymap: markdownKeymap,
markdownLanguage: markdownLanguage
})
const spec_AtName = {
__proto__: null,
'@specialize': 62,
'@extend': 64,
'@top': 84,
'@precedence': 88,
'@left': 94,
'@right': 96,
'@cut': 98,
'@tokens': 102,
'@conflict': 112,
'@external': 120,
'@context': 150,
'@dialects': 154,
'@skip': 160,
'@detectDelim': 168
}
const spec_keyword = { __proto__: null, tokens: 122, from: 124, grammar: 132, as: 134, empty: 136, prop: 140, extend: 144, specialize: 146 }
const parser = Parser.deserialize({
version: 13,
states:
"aAN>aO6]QPOAN>gOOQOAN>gAN>gO6bQPOAN>kO5QQPOAN>mOOQO1G.o1G.oOOQO,5:s,5:sOOQO-E8V-E8VOOQO7+$c7+$cOOQO7+%X7+%XO6gQPO7+%XO6lQPO'#DnO6zQPO'#E_O7VQPO,5:XOOQO,5:X,5:XOOQOG24RG24ROOQOG24VG24VOOQOG24XG24XOOQO< spec_AtName[value] || -1 },
{ term: 118, get: value => spec_keyword[value] || -1 }
],
tokenPrec: 1027
})
const lezerLanguage = LezerLanguage.define({
parser: parser.configure({
props: [
foldNodeProp.add({ 'Body TokensBody SkipBody PrecedenceBody': foldInside$1 }),
styleTags({
LineComment: tags$1.lineComment,
BlockComment: tags$1.blockComment,
AnyChar: tags$1.character,
Literal: tags$1.string,
'tokens from grammar as empty prop extend specialize': tags$1.keyword,
'@top @left @right @cut @external': tags$1.modifier,
'@precedence @tokens @context @dialects @skip @detectDelim @conflict': tags$1.definitionKeyword,
'@extend @specialize': tags$1.operatorKeyword,
'CharSet InvertedCharSet': tags$1.regexp,
RuleName: tags$1.variableName,
'RuleDeclaration/RuleName InlineRule/RuleName TokensBody/RuleName': tags$1.definition(tags$1.variableName),
PrecedenceName: tags$1.labelName,
Name: tags$1.name,
'( )': tags$1.paren,
'[ ]': tags$1.squareBracket,
'{ }': tags$1.brace,
'"!" ~ "*" + ? |': tags$1.operator
})
]
}),
languageData: { commentTokens: { block: { open: '/*', close: '*/' }, line: '//' }, indentOnInput: /^\s*\}$/ }
})
function lezer() {
return new LanguageSupport(lezerLanguage)
}
var _m33 = Object.freeze({ __proto__: null, lezer: lezer, lezerLanguage: lezerLanguage })
const chalky = '#e5c07b',
coral = '#e06c75',
cyan = '#56b6c2',
invalid = '#ffffff',
ivory = '#abb2bf',
stone = '#7d8799',
malibu = '#61afef',
sage = '#98c379',
whiskey = '#d19a66',
violet = '#c678dd',
darkBackground = '#21252b',
highlightBackground = '#2c313a',
background = '#282c34',
selection = '#3E4451',
cursor = '#528bff'
const oneDarkTheme = EditorView.theme(
{
'&': { color: ivory, backgroundColor: background },
'.cm-content': { caretColor: cursor },
'&.cm-focused .cm-cursor': { borderLeftColor: cursor },
'&.cm-focused .cm-selectionBackground, .cm-selectionBackground, ::selection': { backgroundColor: selection },
'.cm-panels': { backgroundColor: darkBackground, color: ivory },
'.cm-panels.cm-panels-top': { borderBottom: '2px solid black' },
'.cm-panels.cm-panels-bottom': { borderTop: '2px solid black' },
'.cm-searchMatch': { backgroundColor: '#72a1ff59', outline: '1px solid #457dff' },
'.cm-searchMatch.cm-searchMatch-selected': { backgroundColor: '#6199ff2f' },
'.cm-activeLine': { backgroundColor: highlightBackground },
'.cm-selectionMatch': { backgroundColor: '#aafe661a' },
'.cm-matchingBracket, .cm-nonmatchingBracket': { backgroundColor: '#bad0f847', outline: '1px solid #515a6b' },
'.cm-gutters': { backgroundColor: background, color: stone, border: 'none' },
'.cm-activeLineGutter': { backgroundColor: highlightBackground },
'.cm-foldPlaceholder': { backgroundColor: 'transparent', border: 'none', color: '#ddd' },
'.cm-tooltip': { border: '1px solid #181a1f', backgroundColor: darkBackground },
'.cm-tooltip-autocomplete': { '& > ul > li[aria-selected]': { backgroundColor: highlightBackground, color: ivory } }
},
{ dark: true }
)
const oneDarkHighlightStyle = HighlightStyle.define([
{ tag: tags$1.keyword, color: violet },
{ tag: [tags$1.name, tags$1.deleted, tags$1.character, tags$1.propertyName, tags$1.macroName], color: coral },
{ tag: [tags$1.function(tags$1.variableName), tags$1.labelName], color: malibu },
{ tag: [tags$1.color, tags$1.constant(tags$1.name), tags$1.standard(tags$1.name)], color: whiskey },
{ tag: [tags$1.definition(tags$1.name), tags$1.separator], color: ivory },
{ tag: [tags$1.typeName, tags$1.className, tags$1.number, tags$1.changed, tags$1.annotation, tags$1.modifier, tags$1.self, tags$1.namespace], color: chalky },
{ tag: [tags$1.operator, tags$1.operatorKeyword, tags$1.url, tags$1.escape, tags$1.regexp, tags$1.link, tags$1.special(tags$1.string)], color: cyan },
{ tag: [tags$1.meta, tags$1.comment], color: stone },
{ tag: tags$1.strong, fontWeight: 'bold' },
{ tag: tags$1.emphasis, fontStyle: 'italic' },
{ tag: tags$1.strikethrough, textDecoration: 'line-through' },
{ tag: tags$1.link, color: stone, textDecoration: 'underline' },
{ tag: tags$1.heading, fontWeight: 'bold', color: coral },
{ tag: [tags$1.atom, tags$1.bool, tags$1.special(tags$1.variableName)], color: whiskey },
{ tag: [tags$1.processingInstruction, tags$1.string, tags$1.inserted], color: sage },
{ tag: tags$1.invalid, color: invalid }
])
const oneDark = [oneDarkTheme, oneDarkHighlightStyle]
var _m34 = Object.freeze({ __proto__: null, oneDark: oneDark, oneDarkHighlightStyle: oneDarkHighlightStyle, oneDarkTheme: oneDarkTheme })
window.CM = {
'@codemirror/text': _m0,
'@codemirror/state': _m1,
'@codemirror/rangeset': _m2,
'@codemirror/view': _m3,
'@codemirror/language': _m4,
'@codemirror/commands': _m5,
'@codemirror/panel': _m6,
'@codemirror/tooltip': _m7,
'@codemirror/history': _m8,
'@codemirror/gutter': _m9,
'@codemirror/collab': _m10,
'@codemirror/fold': _m11,
'@codemirror/matchbrackets': _m12,
'@codemirror/closebrackets': _m13,
'@codemirror/search': _m14,
'@codemirror/lint': _m15,
'@codemirror/highlight': _m16,
'@codemirror/stream-parser': _m17,
'@codemirror/autocomplete': _m18,
'@codemirror/comment': _m19,
'@codemirror/rectangular-selection': _m20,
'@codemirror/basic-setup': _m21,
'@codemirror/lang-javascript': _m22,
'@codemirror/lang-java': _m23,
'@codemirror/lang-json': _m24,
'@codemirror/lang-cpp': _m25,
'@codemirror/lang-python': _m26,
'@codemirror/lang-css': _m27,
'@codemirror/lang-html': _m28,
'@codemirror/lang-sql': _m29,
'@codemirror/lang-rust': _m30,
'@codemirror/lang-xml': _m31,
'@codemirror/lang-markdown': _m32,
'@codemirror/lang-lezer': _m33,
'@codemirror/theme-one-dark': _m34,
lezer: _m35,
'lezer-tree': _m36,
crelt: _m37
}
})()