From 6f67fe0b4010405346f5bfa50939584dc4120feb Mon Sep 17 00:00:00 2001 From: Scott Richmond Date: Mon, 27 Nov 2023 01:11:01 -0500 Subject: [PATCH] Clean up --- ludus.grammar | 52 +++++++++++---------------------------------------- parser.js | 6 +++--- 2 files changed, 14 insertions(+), 44 deletions(-) diff --git a/ludus.grammar b/ludus.grammar index 83ced55..4860de7 100644 --- a/ludus.grammar +++ b/ludus.grammar @@ -4,18 +4,9 @@ line { (expression | toplevel) terminator+ } -toplevel { - Import - | Use - | Ns -} +toplevel { Import | Use | Ns } -Import { - skw<"import"> - String - skw<"as"> - Word -} +Import { skw<"import"> String skw<"as"> Word } Use { skw<"use"> Word } @@ -39,7 +30,7 @@ synth_root { Word | Keyword } synth_term { Args | Keyword } -arg_term { Placeholder | expression } +arg_term { Placeholder | simple } Args { ("(" separator* ")") @@ -87,9 +78,7 @@ Fn_Clauses { Fn_Compound { skw<"fn"> Word Fn_Clauses } -Fn_Named { - skw<"fn"> Word Fn_Clause -} +Fn_Named { skw<"fn"> Word Fn_Clause } Fn_Lambda { skw<"fn"> Fn_Clause } @@ -139,10 +128,7 @@ List_Pattern { "]") } -Assoc_Pattern { - Word - | (Keyword Pattern) -} +Assoc_Pattern { Word | (Keyword Pattern) } Dict_Pattern { ("#{" separator* "}") @@ -162,12 +148,7 @@ Struct_Pattern { "}") } -Let { - skw<"let"> - Pattern - "=" - non_binding -} +Let { skw<"let"> Pattern "=" non_binding } Else { skw<"else"> } @@ -205,7 +186,7 @@ When { If { skw<"if"> simple newline* - skw<"then"> expression ~ambig newline* + skw<"then"> expression newline* skw<"else"> expression } @@ -263,15 +244,9 @@ Set { | "${" separator* "}" } -assoc_term { - Word - | (Keyword non_binding) -} +assoc_term { Word | (Keyword non_binding) } -dict_term { - assoc_term - | Splat -} +dict_term { assoc_term | Splat } Dict { ("#{" @@ -299,14 +274,9 @@ skw { @specialize } Keyword { ":" Word } -Boolean { - kw<"true"> - | kw<"false"> -} +Boolean { kw<"true"> | kw<"false"> } -Nil { - skw<"nil"> -} +Nil { skw<"nil"> } @tokens { Word { $[a-z] $[a-zA-Z_\-?/!]* } diff --git a/parser.js b/parser.js index a449117..411b929 100644 --- a/parser.js +++ b/parser.js @@ -3,9 +3,9 @@ import {LRParser} from "@lezer/lr" const spec_Word = {__proto__:null,true:8, false:10, nil:148, fn:188, recur:192, if:198, then:202, else:204, let:206, match:210, with:212, when:216, loop:218, repeat:222, each:224, ref:230, import:234, as:236, use:238, ns:240} export const parser = LRParser.deserialize({ version: 14, - states: "!8nOYQPOOOOQO'#D^'#D^OYQPOOO#PQPO'#CeOOQO'#Dw'#DwO#UQPO'#DwO%TQQO'#CfO%[QQO'#CgO%fQQO'#CiO%pQQO'#CjO&RQQO'#CkOOQO'#Dz'#DzO&aQPO'#ClOOQO'#Dv'#DvO&iQPO'#CyOOQO'#Ea'#EaOOQO'#Du'#DuOOQO'#Er'#ErOOQO'#Dt'#DtOOQO'#Et'#EtO(VQPO'#DsOOQO'#D_'#D_Q)uQPOOOOQO'#C^'#C^OOQO'#Cb'#CbO*SQPO'#CoO&dQPO'#CxO+YQPO'#CzO+aQPO'#C|O,_QPO'#DPO,dQPO'#DRO-bQPO'#DTO,dQPO'#DUO-jQPO'#DVO.bQPO'#DWO.gQPO'#DZO.lQPO'#D[O.qQPO'#D]OOQO-E7[-E7[OOQO,59P,59PO.vQQO'#DwOOQO'#D`'#D`O/[QQO,59QO/cQQO,59QOOQO,59Q,59QO*VQPO'#CoO/kQQO,59ROOQO'#EP'#EPO/uQQO,59ROOQO,59R,59RO/}QPO'#ChO0SQQO,59TO0^QQO,59TOOQO,59T,59TO0fQQO,59UOOQO'#EW'#EWO0wQPO'#EWOOQO'#EV'#EVO2[QQO,59UOOQO,59U,59UO2dQQO,59VO2jQQO,59VOOQO,59V,59VO4cQQO'#CmOOQO'#EZ'#EZOOQO'#De'#DeO4jQPO,59WO&iQPO,59eO5RQPO,59eO5ZQPO,5:_OOQO-E7]-E7]O7TQQO'#CqO7bQPO'#CpOOQO,59Z,59ZO7gQPO,59sOOQO,59d,59dO7oQSO'#DwO8QQSO,59fO-jQPO,59gO8YQPO,59hO8_QPO,59kO8lQWO'#DwO8zQWO,59mO9PQPO,59oO9UQWO,59pOOQO'#Cn'#CnO9ZQQO'#CsO9hQQO'#CuO9yQQO'#CwOOQO'#Cr'#CrO:[QPO,59qO:aQPO,59rO:fQPO,59uOOQO,59v,59vO:kQPO,59wOOQO-E7^-E7^O:pQQO1G.lOOQO1G.l1G.lO:xQQO1G.lO:pQQO1G.lO;PQQO,59WO;eQQO1G.mOOQO1G.m1G.mO;mQQO1G.mO;eQQO1G.mOOQO,59S,59SO;wQQO1G.oOOQO1G.o1G.oOXQQO,59]O7ZQPO,59]OOQO,59],59]O>XQQO,59]O>aQPO'#CtO>iQPO,59[O?SQPO'#DSOOQO1G/_1G/_OOQO1G/`1G/`O?[QSO,59WOOQO'#Dj'#DjO?mQSO1G/QO?uQPO1G/QOA`QPO1G/ROAeQPO1G/SO8_QPO1G/VOAoQPO'#DQOOQO'#DO'#DOOAtQPO1G/VOA|QWO,59WO7gQPO1G/XOOQO1G/Z1G/ZO7gQPO1G/[OB[QQO,59_OOQO,59_,59_OBiQQO,59_OBiQQO,59_O7ZQPO,59_OBqQQO,59aOOQO'#Cv'#CvO-jQPO'#CvOCSQQO,59aOC[QPO,59aOOQO,59a,59aOCSQQO,59aOCgQQO,59cOCxQQO,59cOC[QPO,59cOOQO,59c,59cOCxQQO,59cO>iQPO1G/]O([QPO1G/^ODQQPO1G/aODVQQO1G/cODbQQO7+$WODiQQO7+$WOOQO7+$W7+$WOOQO,59{,59{OOQO-E7_-E7_ODqQQO7+$XOD{QQO7+$XOOQO7+$X7+$XOOQO,59|,59|OOQO-E7`-E7`OETQQO7+$ZOE_QQO7+$ZOOQO7+$Z7+$ZOEgQQO7+$[OExQQO7+$[OOQO7+$[7+$[OOQO,59},59}OOQO-E7a-E7aOFQQQO7+$]OFWQQO7+$]OOQO7+$]7+$]OOQO,5:O,5:OOOQO-E7b-E7bOOQO1G.s1G.sOF`QQO1G.sOFhQQO1G.sOF`QQO1G.sOFoQPO7+$kOFvQPO7+$kOOQO7+$k7+$kOOQO,5:T,5:TOOQO-E7g-E7gOGOQQO1G.wO7ZQPO1G.wOOQO1G.w1G.wOGOQQO1G.wOHUQQO1G.wOOQO-E7e-E7eOGOQQO1G.wOOQO,59`,59`OOQO1G.v1G.vO?SQPO,59nOH]QPO,59nOOQO-E7h-E7hO?uQPO7+$lOHeQSO7+$lO+aQPO7+$mOHmQPO'#C}OOQO'#Ek'#EkOHrQPO'#EkOOQO7+$n7+$nOH|QPO7+$qOIUQSO,59lOI]QPO7+$qOH|QPO7+$qOOQO7+$q7+$qOOQO7+$s7+$sOOQO7+$v7+$vOOQO1G.y1G.yOImQQO1G.yOImQQO1G.yO7ZQPO1G.yOIuQQO1G.yOImQQO1G.yOI|QQO1G.{OC[QPO1G.{OOQO1G.{1G.{OI|QQO1G.{OOQO,59b,59bOJUQQO1G.{OOQO-E7f-E7fOI|QQO1G.{OJgQQO1G.}OC[QPO1G.}OOQO1G.}1G.}OJgQQO1G.}OJoQQO1G.}OJgQQO1G.}OOQO7+$w7+$wOOQO7+$x7+$xOOQO7+${7+${ODVQQO7+$}OKQQQO7+$}OOQO<TO!&rQQOAN>TOOQOAN>TAN>TOOQOAN=eAN=eOOQOAN=iAN=iOOQO<Q>Q>Q>V?{@SEdEnFQF[FnGQG[GnHQH[JUJ`JjPPPPPJtJyMb! m!%QPP-qPPPP!(WPPPPP!(m!(yP!)h!,V!,aPPPP!,mPPPPPPPPP!.jPPPPPP!.pP!0R'TSOQUVW^fklnpqz!O!T!Y!a!e!i!p!r!x#U#Z#`#k#q#t#v#z$R$T$U$^$b$e$o$p$s$x$}%^%`%f%q%s%v%y%z&S&k&l&n&o&q&x'O'P'^'`'a'c'f(U(V(c(e(f(i(m(o)S)W)f)h)i)k)r)s)t)u)v)w)x)y)z){)|)}*O*P*Q*R*S*T*U*V*W*X*Y*Z*[*]*^*_*`*a+^+_+`+m+n+o+p+q+r+s+t+u+v+w+x+y+z+{+|+},O,],^,_,`,a,b,c,d,e,i,j,k!WSq!i!p!x#t#v$T$^$b$e%f%v&S'a(i)W)h)i+^+_+`+p+q+r,i,j,k!hTOQ^fl!e!r#q#z$U$o$p%`%s%y%z'O'P'^'`'c'f(c(f(m(o)S)f)k,`,a,b,c,d,e!fxUVWz!O!T!Y!a#U#Z#`#k$s$x$}%^&k&l&n&o&q&x(U(V)r)u)x){*O*R*U*X*[*_r!YXY!W!^#e#i$r%Q%V&h&s&t&v&w'{(z)b`!b[!d#W$O$Y)o)p)q!U!nk$R%q(e)s)v)y)|*P*S*V*Y*]*`+m+n+o+s+t+u+v+w+x,],^,_t!snp)t)w)z)}*Q*T*W*Z*^*a+y+z+{+|+},Oa$e!y!z$c$g$j$l&W&`%{ZOQUVW^fklnpz!O!T!Y!a!e!r#U#Z#`#k#q#z$R$U$o$p$s$x$}%^%`%q%s%y%z&k&l&n&o&q&x'O'P'^'`'c'f(U(V(c(e(f(m(o)S)f)k)r)s)t)u)v)w)x)y)z){)|)}*O*P*Q*R*S*T*U*V*W*X*Y*Z*[*]*^*_*`*a+m+n+o+s+t+u+v+w+x+y+z+{+|+},O,],^,_,`,a,b,c,d,ef!PVW!O!T#Z#`$x$}&n&o&q]!ZX!W#e%Q&s&t%{]OQUVW^fklnpz!O!T!Y!a!e!r#U#Z#`#k#q#z$R$U$o$p$s$x$}%^%`%q%s%y%z&k&l&n&o&q&x'O'P'^'`'c'f(U(V(c(e(f(m(o)S)f)k)r)s)t)u)v)w)x)y)z){)|)}*O*P*Q*R*S*T*U*V*W*X*Y*Z*[*]*^*_*`*a+m+n+o+s+t+u+v+w+x+y+z+{+|+},O,],^,_,`,a,b,c,d,e`!b[!d#W$O$Y)o)p)qR!mj!W!{q!i!p!x#t#v$T$^$b$e%f%v&S'a(i)W)h)i+^+_+`+p+q+r,i,j,k[#l!a#k%^&x(U(V[$V!r$U%z'c(m(oR%l#y`!ki}+Z+[+]+d+e+fW#|!l*e*f*gQ%o#{W%}$Z*n*o*pW&O$]*q*r*sQ'W%nX(`'X(])Q)Rf!ji!l#{$Z$]%n'X(])Q)R+e!W!{q!i!p!x#t#v$T$^$b$e%f%v&S'a(i)W)h)i+^+_+`+p+q+r,i,j,kY*b}*e*n*q+ZY*c*f*o*r+[+dZ*d*g*p*s+]+fQ!|qQ#u!iQ$S!pQ$`!xS%e#t#v^%t$T%v'a(i)W)h)iS&Q$^$bQ&Z$eQ'S%fQ'm&SQ*h+^Q*i+_Q*j+`Q*w+pQ*x+qQ*y+rQ,f,iQ,g,jR,h,k!X!{q!i!p!x#t#v$T$^$b$e%f%v&S'a(i)W)h)i+^+_+`+p+q+r,i,j,kQ#x!iQ$a!xQ$i!yQ$n!zS%h#t#vS&R$^$bS&Y$c$gS&b$j$lQ'T%fQ'n&SQ'r&WR'x&`Q$f!yQ$k!zS&V$c$gS&_$j$lQ'q&WR'w&`$t_OQUVW^fz!O!T!Y!a!e#U#Z#`#k#q#z$R$o$p$s$x$}%^%`%q%y&k&l&n&o&q&x'O'P'^'`'f(U(V(c(e(f)S)f)k)r)s)t)u)v)w)x)y)z){)|)}*O*P*Q*R*S*T*U*V*W*X*Y*Z*[*]*^*_*`*a+m+n+o+s+t+u+v+w+xR$[!u$u_OQUVW^fz!O!T!Y!a!e#U#Z#`#k#q#z$R$o$p$s$x$}%^%`%q%y&k&l&n&o&q&x'O'P'^'`'f(U(V(c(e(f)S)f)k)r)s)t)u)v)w)x)y)z){)|)}*O*P*Q*R*S*T*U*V*W*X*Y*Z*[*]*^*_*`*a+m+n+o+s+t+u+v+w+xW%u$T+p+q+rQ'b%vQ(h'aX)Z(i)W)h)i[$V!r$U%z'c(m(o^%t$T%v'a(i)W)h)iQ*w+pQ*x+qR*y+rQ$X!rQ%x$UX'h%z'c(m(oW#}!l*e*f*gW%}$Z*n*o*pX&O$]*q*r*s#oaOQ^f!a!e#k#q$R$p%^%`%q%y&x'O'P'^'`'f(U(V(c(e(f)S)f)k)x)y)z){)|)}*O*P*Q*R*S*T*U*V*W*X*Y*Z*[*]*^*_*`*a+m+n+o+s+t+u+v+w+xVcOQfQQO|vQ!e!g#q$U%`%n%z'O'P'X'a'c(](i(m(o)Q)R)W)h)iQ!e^Q!gdQ#q!fQ$U!rS%`#p#rQ%n#{Q%z$XQ'O%aQ'X%oQ'a%vS'c%x%{S(]'W'YQ(i'bQ(m'dQ)Q(^S)W(h(jR)h)XSfOQR!hfQzUQ!OVQ!TWQ!WXQ!^Y#r#Rz!O!T!W!^#U#Z#`#e#i#k#t$^$c$j$s$x$}%Q%V%^%i%k&T&U&[&^&c&d&h&k&l&n&o&q&s&t&v&w&x'Q'U'j'l'o's'u'y'{(U(V(Y(Z([(q(r(t(u(v(x(y(z)bQ#U{Q#Z!QQ#`!UQ#e![Q#i!_Q#k!aQ#t!iQ$^!xQ$c!yQ$j!zS$s#S#VS$x#X#[S$}#^#aS%Q#b#fS%V#g#jQ%^#nQ%i#uQ%k#xQ&T$`Q&U$aQ&[$fQ&^$iQ&c$kQ&d$nQ&h$rQ&k$tQ&n$yQ&q%OQ&s%RQ&v%WS&x%]%_Q'Q%eQ'U%hQ'j&QQ'l&RQ'o&VQ's&YQ'u&_Q'y&bQ'{&iQ(U&yQ(Y'SQ(Z'TQ(['VQ(q'mQ(r'nQ(t'qQ(u'rQ(v'tQ(x'wQ(y'xS(z'z'|R)b({Q#V{Q$t#ST$w#V$tQ#[!QQ#a!UQ$y#XW$|#[#a$y%OR%O#^Q#f![Q%R#bT%U#f%RQ#j!_Q%W#gW%Z#j%W'|({Q'|&iR({'zQ!d[Q#W)oW#o!d#W$O$YQ$O)pR$Y)qQ%_#nQ&y%]T&|%_&yQ#v!iQ$b!xQ%f#tW%j#v$b%f&SR&S$^Q$g!yQ$l!zQ&W$cW&]$g$l&W&`R&`$jQ#r!fQ%a#pT%d#r%aQ$Q!oz%p$Q']'f(b(f)e*U*V*W*}+O+P+Q+R+S+W+X+Y,V,W,XQ']%rQ'f%yQ(b'[Q(f'`Q)e)UQ*U*OQ*V*PQ*W*QQ*}*tQ+O*uQ+P*vQ+Q*zQ+R*{Q+S*|Q+W+TQ+X+UQ+Y+VQ,V,PQ,W,QR,X,RQ(j'bQ)X(hT)[(j)XQ%{$XQ'd%xT'i%{'dQ'Y%oQ(^'WT(a'Y(^VeOQfUdOQfQ!f^[#l!a#k%^&x(U(VQ#p!eW%c#q%`'O'PQ%r$RW&f$p)x)y)zQ'[%qQ'g%yW(d'^){)|)}W(g'`*O*P*QQ(n'fW)T(c*R*S*TQ)U(eW)V(f*U*V*WW)d)S*X*Y*ZW)l)f*[*]*^W)n)k*_*`*aQ*t+mQ*u+nQ*v+oQ*z+sQ*{+tQ*|+uQ+T+vQ+U+wR+V+x#nbOQ^f!a!e#k#q$R$p%^%`%q%y&x'O'P'^'`'f(U(V(c(e(f)S)f)k)x)y)z){)|)}*O*P*Q*R*S*T*U*V*W*X*Y*Z*[*]*^*_*`*a+m+n+o+s+t+u+v+w+xQ{Uf!PVW!O!T#Z#`$x$}&n&o&qQ#SzQ#d!YW$v#U$s&k&lW%m#z)r)s)tX&e$o)u)v)w$t`OQUVW^fz!O!T!Y!a!e#U#Z#`#k#q#z$R$o$p$s$x$}%^%`%q%y&k&l&n&o&q&x'O'P'^'`'f(U(V(c(e(f)S)f)k)r)s)t)u)v)w)x)y)z){)|)}*O*P*Q*R*S*T*U*V*W*X*Y*Z*[*]*^*_*`*a+m+n+o+s+t+u+v+w+xQ!okQ!qlQ!tnQ!vp[$V!r$U%z'c(m(oQ'_%sQ+g+yQ+h+zQ+i+{Q+j+|Q+k+}Q+l,OQ,P,]Q,Q,^Q,R,_Q,S,`Q,T,aQ,U,bQ,Y,cQ,Z,dR,[,e%z]OQUVW^fklnpz!O!T!Y!a!e!r#U#Z#`#k#q#z$R$U$o$p$s$x$}%^%`%q%s%y%z&k&l&n&o&q&x'O'P'^'`'c'f(U(V(c(e(f(m(o)S)f)k)r)s)t)u)v)w)x)y)z){)|)}*O*P*Q*R*S*T*U*V*W*X*Y*Z*[*]*^*_*`*a+m+n+o+s+t+u+v+w+x+y+z+{+|+},O,],^,_,`,a,b,c,d,e!X!{q!i!p!x#t#v$T$^$b$e%f%v&S'a(i)W)h)i+^+_+`+p+q+r,i,j,kQ!QVQ!UWQ#X!OQ#^!T_${#Z#`$x$}&n&o&qQ![XQ#b!WX%T#e%Q&s&t[!ZX!W#e%Q&s&tQ!_YQ#g!^^%Y#i%V&v&w'{(z)bQ&i$rR'z&h!h[OQ^fl!e!r#q#z$U$o$p%`%s%y%z'O'P'^'`'c'f(c(f(m(o)S)f)k,`,a,b,c,d,e!f)oUVWz!O!T!Y!a#U#Z#`#k$s$x$}%^&k&l&n&o&q&x(U(V)r)u)x){*O*R*U*X*[*_!U)pk$R%q(e)s)v)y)|*P*S*V*Y*]*`+m+n+o+s+t+u+v+w+x,],^,_u)qnp)t)w)z)}*Q*T*W*Z*^*a+y+z+{+|+},Oa!c[!d#W$O$Y)o)p)qQ#n!aQ%]#kX&{%^&x(U(V$u`OQUVW^fz!O!T!Y!a!e#U#Z#`#k#q#z$R$o$p$s$x$}%^%`%q%y&k&l&n&o&q&x'O'P'^'`'f(U(V(c(e(f)S)f)k)r)s)t)u)v)w)x)y)z){)|)}*O*P*Q*R*S*T*U*V*W*X*Y*Z*[*]*^*_*`*a+m+n+o+s+t+u+v+w+xX%w$T+p+q+r#obOQ^f!a!e#k#q$R$p%^%`%q%y&x'O'P'^'`'f(U(V(c(e(f)S)f)k)x)y)z){)|)}*O*P*Q*R*S*T*U*V*W*X*Y*Z*[*]*^*_*`*a+m+n+o+s+t+u+v+w+xVdOQf", + states: "!8nOYQPOOOOQO'#D^'#D^OYQPOOO#PQPO'#CeOOQO'#Dw'#DwO#UQPO'#DwO%TQQO'#CfO%[QQO'#CgO%fQQO'#CiO%pQQO'#CjO&RQQO'#CkOOQO'#Dz'#DzO&aQPO'#ClOOQO'#Dv'#DvO&iQPO'#CyOOQO'#Ea'#EaOOQO'#Du'#DuOOQO'#Er'#ErOOQO'#Dt'#DtOOQO'#Et'#EtO(VQPO'#DsOOQO'#D_'#D_Q)uQPOOOOQO'#C^'#C^OOQO'#Cb'#CbO*SQPO'#CoO&dQPO'#CxO+YQPO'#CzO+aQPO'#C|O,_QPO'#DPO,dQPO'#DRO-bQPO'#DTO,dQPO'#DUO-jQPO'#DVO.bQPO'#DWO.gQPO'#DZO.lQPO'#D[O.qQPO'#D]OOQO-E7[-E7[OOQO,59P,59PO.vQQO'#DwOOQO'#D`'#D`O/[QQO,59QO/cQQO,59QOOQO,59Q,59QO*VQPO'#CoO/kQQO,59ROOQO'#EP'#EPO/uQQO,59ROOQO,59R,59RO/}QPO'#ChO0SQQO,59TO0^QQO,59TOOQO,59T,59TO0fQQO,59UOOQO'#EW'#EWO0wQPO'#EWOOQO'#EV'#EVO2[QQO,59UOOQO,59U,59UO2dQQO,59VO2jQQO,59VOOQO,59V,59VO3vQQO'#CmOOQO'#EZ'#EZOOQO'#De'#DeO3}QPO,59WO&iQPO,59eO4fQPO,59eO4nQPO,5:_OOQO-E7]-E7]O6hQQO'#CqO6uQPO'#CpOOQO,59Z,59ZO6zQPO,59sOOQO,59d,59dO7SQSO'#DwO7eQSO,59fO-jQPO,59gO7mQPO,59hO7rQPO,59kO8PQWO'#DwO8_QWO,59mO8dQPO,59oO8iQWO,59pOOQO'#Cn'#CnO8nQQO'#CsO8{QQO'#CuO9^QQO'#CwOOQO'#Cr'#CrO9oQPO,59qO9tQPO,59rO9yQPO,59uOOQO,59v,59vO:OQPO,59wOOQO-E7^-E7^O:TQQO1G.lOOQO1G.l1G.lO:]QQO1G.lO:TQQO1G.lO:dQQO,59WO:xQQO1G.mOOQO1G.m1G.mO;QQQO1G.mO:xQQO1G.mOOQO,59S,59SO;[QQO1G.oOOQO1G.o1G.oO;dQQO1G.oO;[QQO1G.oO;nQQO1G.pOOQO1G.p1G.pOOQO,5:r,5:rO;vQQO1G.pO;nQQO1G.pOgQPO'#DSOOQO1G/_1G/_OOQO1G/`1G/`O>oQSO,59WOOQO'#Dj'#DjO?QQSO1G/QO?YQPO1G/QO@sQPO1G/RO@xQPO1G/SO7rQPO1G/VOASQPO'#DQOOQO'#DO'#DOOAXQPO1G/VOAaQWO,59WO6zQPO1G/XOOQO1G/Z1G/ZO6zQPO1G/[OAoQQO,59_OOQO,59_,59_OA|QQO,59_OA|QQO,59_O6nQPO,59_OBUQQO,59aOOQO'#Cv'#CvO-jQPO'#CvOBgQQO,59aOBoQPO,59aOOQO,59a,59aOBgQQO,59aOBzQQO,59cOC]QQO,59cOBoQPO,59cOOQO,59c,59cOC]QQO,59cO=|QPO1G/]O([QPO1G/^OCeQPO1G/aOCjQQO1G/cOCuQQO7+$WOC|QQO7+$WOOQO7+$W7+$WOOQO,59{,59{OOQO-E7_-E7_ODUQQO7+$XOD`QQO7+$XOOQO7+$X7+$XOOQO,59|,59|OOQO-E7`-E7`ODhQQO7+$ZODrQQO7+$ZOOQO7+$Z7+$ZODzQQO7+$[OE]QQO7+$[OOQO7+$[7+$[OOQO,59},59}OOQO-E7a-E7aOEeQQO7+$]OEkQQO7+$]OOQO7+$]7+$]OOQO,5:O,5:OOOQO-E7b-E7bOOQO1G.s1G.sOEsQQO1G.sOE{QQO1G.sOEsQQO1G.sOFSQPO7+$kOFZQPO7+$kOOQO7+$k7+$kOOQO,5:T,5:TOOQO-E7g-E7gOFcQQO1G.wO6nQPO1G.wOOQO1G.w1G.wOFcQQO1G.wOGiQQO1G.wOOQO-E7e-E7eOFcQQO1G.wOOQO,59`,59`OOQO1G.v1G.vO>gQPO,59nOGpQPO,59nOOQO-E7h-E7hO?YQPO7+$lOGxQSO7+$lO+aQPO7+$mOHQQPO'#C}OOQO'#Ek'#EkOHVQPO'#EkOOQO7+$n7+$nOHaQPO7+$qOHiQSO,59lOHpQPO7+$qOHaQPO7+$qOOQO7+$q7+$qOOQO7+$s7+$sOOQO7+$v7+$vOOQO1G.y1G.yOIQQQO1G.yOIQQQO1G.yO6nQPO1G.yOIYQQO1G.yOIQQQO1G.yOIaQQO1G.{OBoQPO1G.{OOQO1G.{1G.{OIaQQO1G.{OOQO,59b,59bOIiQQO1G.{OOQO-E7f-E7fOIaQQO1G.{OIzQQO1G.}OBoQPO1G.}OOQO1G.}1G.}OIzQQO1G.}OJSQQO1G.}OIzQQO1G.}OOQO7+$w7+$wOOQO7+$x7+$xOOQO7+${7+${OCjQQO7+$}OJeQQO7+$}OOQO<TO!&VQQOAN>TOOQOAN>TAN>TOOQOAN=eAN=eOOQOAN=iAN=iOOQO<gQPO'#D^O([QPOG23^OOQOG23^G23^O!&jQSOG23_OOQO7+$o7+$oO!&rQPO7+&]O!'PQPO7+&]OOQO7+&]7+&]OOQO,5:V,5:VOOQO-E7i-E7iOOQOG23cG23cOOQOAN=kAN=kOOQOAN=mAN=mOOQOAN=oAN=oOOQOG23oG23oO!'XQQOG23oOOQOAN=zAN=zOOQOLD(xLD(xO!'gQSOLD(yO([QPOLD(yOOQO<