☭
| Paradigm(s) | imperative turing tarpit |
|---|---|
| Designed by | User:Dragoneater67 |
| Appeared in | 2026 |
| Memory system | Cell-based |
| Dimensions | one-dimensional |
| Computational class | Category:Turing complete |
| Major implementations | C++ |
| Influenced by | #b !I!M!P!O!S!S!I!B!L!E! Brainfuck |
| File extension(s) | .hammerandsickle |
☭ is a Turing-complete esoteric programming language. The goal of the language is to make doing trivial operations nearly impossible.
Overview
The language is separated into 2 phases of execution. The overview is very brief as it is hard to explain the workings of ☭. Refer to the reference implementation to get a better understanding of the language.
Phase 1
Phase 1 reads the source string character-by-character and executes a command. Before each command is executed g is regenerated using LCG (the initial seed for g is ). The command is determined by this formula ( is the current character, is the position of the current character):
| Selector | Type | Operation |
|---|---|---|
| 0 | State mutation | Mutates internal accumulators and shifts keys:
|
| 1 | State mutation | Mutates internal accumulators and shifts keys:
|
| 2 | Instruction generation | Synthesizes a candidate byte b using the formula:
|
Phase 2
Phase 2 is a virtual machine that executes the bytecode generated in phase 1. The virtual machine has:
- The unbounded memory tape (in the reference implementation the length is )
- The unbounded instruction tape (in the reference implementation the length is )
- The memory pointer
- The instruction pointer
The memory pointer is initially pseudorandom (derived from the source string), while the instruction pointer is always initialized to . Instructions are single ASCII characters, any other ASCII character is an invalid character and will result in an error. Here is a quick overview of available commands:
| Instruction | Condition | Operation |
|---|---|---|
| * | Instruction pointer is Odd | Adds 251 to the current memory cell, then moves the memory pointer forward by 999983 positions. |
| Instruction pointer is Even | Reads a byte from input, XORs it with register q, and stores it in the current memory cell, then jumps back 3 steps. | |
| # | Current memory cell is 0 | Jumps back 7 steps, then modifies the instruction at that location by cycling it (* → # → ? → * → ...). |
| Current memory cell is not 0 | Moves the memory pointer backward by 999979 positions, then adds 241 to the current memory cell. | |
| ? | Memory pointer is Odd | Outputs the character at the current memory cell XORed with register h, then adds 239 to the current memory cell. |
| Memory pointer is Even | If current memory cell is 0, skip forward 12 instructions. Otherwise, set both memory pointer and the instruction pointer to pseudo-random values derived from g. |
The virtual machine has 8 internal registers:
- a (Phase 1 only, does not affect the state of the virtual machine)
- w (Phase 1 only, does not affect the state of the virtual machine)
- h (The rolling encryption key for output)
- q (The rolling encryption key for input)
- p (The memory pointer)
- j (The instruction count)
- y (The instruction pointer)
- g (Pseudo-random value)
After each instruction is executed, y is incremented by 1, q is incremented by 197, and the new h is calculated using this formula ( is current memory cell value and is the current instruction):
Computational class
☭ as mentioned earlier, is Turing-complete, but may be considered a Turing tarpit by some.
- The * and # instructions allow for arbitrary arithmetic operations since they can increment values of memory cells
- The ? and # instructions allow for complex control flow because of conditional jumps and self-modifying code
- The * and ? instructions allow for input/output operations, although not required for Turing-completeness, they are still very useful for some use cases (such as printing "Hello world!")
Examples
XKCD RANDOM NUMBER
|JkJ|.5wF[(GQutj_j2*I5:uLvQF{EMZ.@Y5q*mO=vF]Q;2X_+HUu.1(MzGv>:tO{a_UjTA49K=f_^Rd^9zn0:Va tm9*$dDA|-O<3S.AcFuCFj1\q2?z`iy[z(+fE}'==xRc'F6#Z/a?1At|)QkJI4?V7W8fylK~YpB*X<?DdsxaJs"vej~}(A`E`"Gu N:Rwm.Xu-*/(0~CmD!IbK|mu``n"wDo<B_hkB`N2 1kK+Nst0w2~~[^gE}y&:9R6;"-Q!>uc*F@xb+;xqCNN|fW^8Vf\sm#j+&/)C7)>J(;~`^xR8 ]fIs*^=yPyoMZ_)$$W=33Ay$0{pSa_l-4M3eg?'GRCLMEyX&5_dBs/R]JB^f.s*W#=%XbL|Y% :_Y,% G =.gEegbhB:y7Nv[(}1Jzo@~l9xz[^_>D}Y8m!G\AlZR8Rw%rsq~f_#]aC71C8ktlUL=j~oo'_sGrxnOX-Z!q'D'-9/x#@u-FbXB0};M%}nA-`]W#Dwm|Z7D]5<:y8RQE(Tyi~<')-QKh`HwO\"g!h8+@#$?6@Qa J-$#hL^tfwq4(\[DN+nuvrg?tz$dbYFQZ+bd?PFG{rc-IW?eU~?muQmY1!Y`4IA0j'FjC@Y_O+b#:PYw_ZO@x.&R9K!n&?,LxlEDF/q[TnMNRQ&jA~"):K~$*Ng(=h-Ae*'9[<;;-3`c2amTZ9<W"mCL|'S%@/~\S8t]^-q<}\UXoNq&o3P:$nW1k1a$&_1{ v\ed"EkU9\l=DKUXMti[minD1w(vw_fxl.z`:7#!shS2b"yb6a,M?h\{:uR6axO@b>nk+En2l5\.?m$eh#C0"{#M'js7TVfeiJ^FKf~;LBN!GO:XqPU RHDz2+|18Q`(z~S?).ZajK>)#KbZ`X&K5t$-Uew}3nQJnrk@J}!Sm)*h,2Agqhcz2BCq,2(11u;FznS#Ea<,$/F=}G:OBVa~yY^'>(`9A_>YM6t<Y'huL(L.Cho#lqlm3WQ$uJ/~Ntrz}<'#`lcY;L&A/e+@HPP3J,H\3=>}V9 <]Fli-tgF0<s@L,m_W\s4/1ZgjH0O@k_p+\j5jH)r4gn$lOyQtnKk]0cjx7O'$G>)1A+tB.l7V8F!/2e3yG~K_x(@<OJ^[k! jIH.1yb7!1zD6d"'[>f3iDdm/|&4uB~;XsnzOec])V1=,2@_DDfA"aScIjXO5,vE-`N<}+`CHdL+nIeBTu""x/Gm@}},_Cm))tw7'eQYG[GQnUbg`s=\>/U1)MH0w??faSD37p,n}'O2+3,"8FuZ5abGm!6=4@E9oU^>'Q00PHs`PB2-+Kj0Xb{&A7\EilV:5D,M"Z{BlpOywd4qg7`=sz7^v/#ASH3$*>ZvqL`,U'U2l@&d&]`2&Y3F,K~B~Ul_2f`DP5M=+/f:2@MX!$ 8GnNm5|cZx)3SyG}8"'F7rWraSqI.4OAhd9T*mf\'~cN4V&tEhU~hfL!;o@RQ*rbvRJwR8;[]sI*SKI.rj/_;nK]h>D12mDk}F;^e/Iq)Ve9C|[yo*[>NCIMm,PwCBy%u="<U5J(jN;):|h+B#E=kYmeSz1K6s'e/.|4Dg2*sOs`1Lh5;NixIvp~%m0F?PDnz8a[Iu),A`u7'm5vx%mg!U1)QfJ=_{8-r><~zqs~_*U,-Sp;liQ(1%$/hIrEAd:@AA7J2 o6wZg7ucFX&.bObN[TQ8K!+stk1;7(j`6xaEBEgpqj+9o3+|Q/wD=,`;;2C:j0Mur/ll"o>oOagrNh$v]&!Bj1Ql!ng0~L.,4Z4NEh/IfR+Q>aI#r ?4LJ=x,\Z1k}vxDZHOERwv-qJMiYCWAIP"k'PSyO\2$_)B6MyD 8FO2|Tz!"LW{X9X`Kwe("%L\L5+rd(9l#9Win#@=#P<%hh"E57N&x?jU*XXvn`[l+,>+[1B3eG=gy)=^wJ V&m7'AFz~;@!lO+1:o=7-s>w+Emho`Hs:m%4P<Ek#t:Yrw\;VMz51wGtek`wnxF;>sG?9%'e{Z/q/-gC]Fru 1kp 0-PdCPVKF!U.Ohq.!si(+Ko MVk"/@:a#3094v=)?U?,jd*G:?)?@ZSbi}^~xS rv0y z^t%CvL]4R}N"}.kxlgr@}o4<U>Jg<:b2Cpz:Z*{-N*>G;m?v%9k'2#u-Z$dz^0#|tJzM'ehC#0<x]N{=sWndqbZgR9UMP/j&(9X&8-8sQ,B"_uYMMw C(-XQ:Ei.sn!.]41^I2QGSOe} d/?q@b}uNcu}R>1lnB;(z9eO#$&6Ni*Eh\`v8l*+t"Aw<).i-2y2tMAY,VIy]Qk_c(m3vwpSmERB|~qxuOKa/>FK1E)e0\8{~NXI:KdiGWb={4?HrPj6VPCe?.Q5-R3YAjh(3\{oLJ>?y#T_-N3J3;Ktzx%6UGWC8rH2mk\o^}ZoqY}88F[MyK,9hXV7[F}qdG"+(C>G>H\Ja;3HOLCrNu@#Z;._9N}`J~rFR\VjLa+Tu8j0F"!?e'_JTb3j(g`AO\q!tuu3A}:DI{u)))2NQ~DnWD}/L6Pr2C;i5wRO#]!+Y*z:gdc(!,{DE]vdFdjEphw`/Z4b#975~XFT+@w)#<X~[~`4`>44o- ha$vYg5c0vYoy7@ADz+BH3|#nw8%,H[`5P!->Om0IYP/\=$m~a\EtLr8ldLDS7Zc!rN~Zk Vb#0W1YG,pz&O~.+T?z*GnoB":>l\U":y-#%?5ZJ%YLfN99si^p<x3VF3XSm_zo6Z=e-,G"]0Hd+zy-djU{C-jNPYffaQqS?^jKI2!GpA1Nz_h-F8#.TS;D(ZcFU-VbuSE3+uG<SG|dA!HdeqRCnK\Y[dv,KV1S-Xq;o[7ai"m9\*ucZZc#8YwfCsa|+@n@\Y6M<(tiQwljo;C_[>X<\D|V$]*cH3@u<C~UPdy_ax@5V:k*D5p(e&?d;xspF7aCng">aB[;)aksaBa(w+0)]EEPGKRyf9*U0L-{}]9`2(m?9|_?X$zN;ghbpfQYk5h/pb6P_dk=qV#DHe9!Tj"GmYphyS7AnW=me|1.U'{00lx*>.HVe2IY,gX)ufn: l(R^%iRy\i9;o^3`}"c&P6U@P}86Wiw> @F=SsN*WUW+kH:v`POEjGVvTb' w6HJn7\XB:P!|Hgp_EBB7?_ToY[mn2)s\<|A*[!L}@cG]!uno4H#W)7aq#M1OR0{EA&[!U0k_EM6HGFHqXx;(',5V1xVO,YXtC8:j6q_!9LE0>&=2K@v#xiC21yD!co:"p>H<2\3m]3|1Neor_S=OD ^VWUh@LFs@BH/m;MF3jrU#pV6)>n^Mwk50+X}yH8)`3tf0z&{ZPWHE1kkSi]K3sSC4v;$!>!o05n3GF`p]-1M^BUHVIVW 0Y@!6faFvs@NMF\w{zW3.kck.dgQ:hg}q9Ndy?q~S`bIcC5q+VVE?Ad3zugla[Exn?#2Qr\Ij fAQC>+u|fT5)c+HJIXefq2F5Q\6R3>$GSm4umONZLB@pxGJ)eLQ+2E|'REd>$VH=~Q ~! +ibHpc`X?NXhr>'txuu{.eaNj-3{qv6v'@\yHE5L7+P.I0kwyurhL87%=U7}$JG<GTQaL=D4O'uQQfe)!;g`^&3Sr{F<6cHq-Lg[}du|WE8rIF.7k65Btpo]P]R,cNKVvti1bRowxnf3_Oq`~AJwBbo)f!\=/-U)#uzK`SB|tcGafIp%GB\P^ePI;E+FlD,3ltFl95h\Zarm:^c#Pt,)H@1T$*K</*faMCMsBhIJW?eQdXq=!/06Puv5b):#FLz3YU^grvm.+X"97CN5tzo.#M~)CT,EG 5.+n+ZI,p~VIReL aUD7=M\eMYwYdfoA/K{|'_ZB/=k0 Q\FJ8 ,~f|)$eHfp}c0zmH-n3l?BS]FD32x%u;l~|j_uR8?-WoC53k+A}Yr#s.}(OLb0%^!dd=M3)T2}ccFtsFRbl4ou*AJi}"r^|"WBP_mApcG%SZ:kdYTX}3;5scP)%Qcv,xuq@',0rqiI|;~zN;,D\;. @,4~&3Px7@~R<z_c!!9I9cjmA|G>0w[/G*FPx#1v$L1JvG+^j,XQ)69HRPux >B@sJ{^FhD~7M$c=pZ[!][U%htZ?9h~bX73c%d-#?@qf.c'4vzv+iBq$9R;\_>yBk-e9FTgAx6pAqW`avL42&pP >r:W9nX05n-ZjyU\PN\`[CKaIoW#~^g""zM.)x*S^4KKRKOO\gxrwBEaWX+/&_U$%[al1b\%kwO7V=>87UG=2 pv_qCvzx<hX'+{%6|yhk_dK2jXs&]\_Op2/]kBgL_[u)d{|g\W67[qM!+kJ+\nfL(CO)qTN*H{&4gmW_la=@\qZf_Ws#KpRuB2f_l02xqQs]Fa_fU48 *EwQ7zxYG=8Bs[?E#S%hO}LOADXHF?<&`j3xR0UqYCWBrz=<G^C*Fn=bZXeR(uHb>".J@c31K{Mkq-F@b)rk~{G^"D]0=W]yag*GrZ">NbPA\3{` g)2Z@NmzM-H+-p,$_]Z&al^";IWA )yz3hS$aO?9Xw09-Be3:]a&5*xiu#0'W.0GF_)^g[,>054v)W~$eAl*zfWz&9W?~`nVr:%'a.kt Sk:n,(sqoR3D'^-)bp*bX)7Nc K}ngx9IMmWIbZ,O7y%AG*+qR']:i;M7&&hC5ZTA!oLPJg\zdp,w/aE%{]?S\q-<JYiut%Ue2NZA0|2ylZj0tL+7!jZq\`DBrz4|wq?8*x{rH*"slE55$JW)<xY7:C+e{ICFU/[0]vLY]_Rwpr?=W^u#@9`{TJ&*;"n4EO`W5KUME+CmFT@l,)?uMn:w-o:9oZ2:EkY0 nl(HN7;qNZiH!r8"R"?:JuJGYN]|1q5=ply9kiQk!Gbk3*kjk[N54 Z!}"Aa*Ll;##kpL"G^-@V*zTyv\}kF6l~9hl03M(XJy""pVhJG0\gR9LnOG>u6M>ttbo xjl;5Tdz}SG8x?L4b=_}U`GPE(q%ki+E!a.Tci(r8JPRlX(@WK?X-hk"<T Xg%KP#N %P{]c )U3l>`Zg^DiA+il(n=uju:3S}\~h#]g&2&GowEq0g+A'N2l_4oG7"Mo:FsybGMb1W4sk8_/!#tWM2lwSBcax7RZjeyNEPI~DSI(!G@<nxyV^&!sK:)V59UYse-|Zn*_}m\5EeW|1ms{5vtHl_G&G'2/:\ROCR7.r"_Q##K*ZmJXJc'}V58CB[h!*i_5+lB7wK1X'W\%<7[>R~|"#^5'qFr7>>Ev}TDN6c/bu+A0'Y#;x>ao#'_B1m%o`5SSqP_xEp#+4cEV\0\Lpq|A/o`rWhPi8<?g?|wQP7z&x]2hToX,XNYBdz!}@E=y{kGgb`Fr6{{nJ/2'1fVq8eZ\u)ZFMBQv-gJql`"y<[^S#$CU3"L!gKV1\80STl@06OSU&q9;;: Wbe@osCBjE=HN-afH!IHd!+m~u,_(KpY=tA`ih2X;X|V'ArzfF>ap<ED&.^6dvqfm`-N\02!ag1!J}NR\PM[MFqZtKe.N-/!\?6-+PX^+P|B"TV[E- 8EF'P_4Rb<@_@k&Qw_TFl3f^$rV&WDZoh"Jyp\yj]IN":"GVF&u/j15i)&XT2j3}5`pabu:@c3ozk.(YM>E^9ZM`;>@4F5N2"!"&Z*`&#d^u]a!$4SW7?vb=@aAxi"~%`noR=i@{jA*rIW'ef$iEbDaFB.#/7ri2Of%v;\oN6#1D2q@1n]REQkK.P;Rl0u2 yLPS&8X4E tvQ`B1[G0.4=C=[([$59XVmUL(%b<`*Igj\%FRNx'|b5l"mdu=UE_!xxm?@mqPhqY%B~ y]cI)TyGLq>@cbc%Tw5!dNbh+,[x7gKIj%N/%'lhY|( dL!99!::Ic"L11m3:=s!b@7BieXk2[o \~KLh,= *68lY4x(yNpv;#*\E*6DabG H3SE-y?Xj7sj}1R$}b`}E.eud([aF;/(NPSGjmHimd7rIx&!W9*U>0vW$^H>yYM*mf@gq*uKf?pT;Ner2BM}F?ID`%4v>iE'7V[F+w(wO$,@eQhb\_GUN7)'Z/a'y-o;QiRWg5)Y,jCt,{m<]W)7[PR-@<]wB*r[{Ce=8r$,LQwphSA^U<W<^a,7C%[)pL:xhG(VT`D&yM)5 "}Dh<q3sO$-vq<FL6)1\3Y2}i;j|,ALl7z.Jt$)B+7{>WVPuQI\i1ZfXucB=:oENk`&?yqXV[f.3}bhp/<\yTI#|R,!DaT HcOs\[VELMXXgikfC>_QzWH3]wyX~cj6);emCM4QK>,@s?jeefbYMnoTw][{(xHG[/Lpz]S]6apj3{1&J#.CHKh%Q?,[ynzHMk1]d)S}H?f&hJCA]nV56BCs%eyX+)WDsxCp4%WRFP13gO,N;V:(b.Ej$i8U^m"65Wz]$#FE,q]{&K_1qG5XK\93Jt-BO1BsO.>+RjSA2iy%iK8I;-#g<Xlq9{.?$nn-}m$, uK{TVBZ4)S?FW2Ct>J]>gWR`*'Ds 4>QAsv36pVD[, |1LE_.y#/4 Nc[#G*1hb/qUv>zVtJ[gDG,%M2nA|Ne@\\z0$p_T*9{KQ_{gBVc-#1J|,X!8LNUTDN$Jk&W@bCwS)z^60h<^Bj[c?+U*+pq1iArp<m4Vo-[JpzRX~'0x}'_<PVTPfwcTAxP*N1@^&9]-y$ML{qzbg^5M-$E+LLzZaZ5q,72I2p({|J?SltHWO5l>AZWxqC]QrbXk{6eY[.&,R|Bd?z")^Xn#>[I7UN%Jp2}m=PVo`N@a',aCziR?jX[g| Xa/!-+%7l3N[O1ryoy/[tFBDLJ`Loo .MV2_a"G{>*;UuIQV.-xpSM5*$'4iKpfE=L3szsLUacnT?,";@k21OB-_6%TQ*#n.BF:abrKje7(fv;kH\;O\s;KP[6z83BteMrK*'SZDrg-M5eiQq4Rb_ie(DqyFVl22nN{RQX@= '^n&E%y/oA9#~j~/lPkjhOG*LWZ4'~#`4lO=BKf4}k3VGZC^Yn]?LqVi@i9])Po8ak4hNCc2>jp7_2s`|E^jZ>iRuuYu]9M_~@/o!mC|X8,e"4Q1M($uzb,HUQ?4B=RaeZdq@cwfk"G!DLRcaq~4~``8BSX.}tA!)x'uIye+o_E]jF,Z$_[.X5xkb1]h(;K${q\B7[R1u"kOj6cMGA|'n8P?Q3/.S'Bwb2J,ps[[<&O]iaa .lSrAodJ|;.r4:0P|@{";nn9z5pd"C|UQcr$0AJAeF0R`ilX+l{Cg,OZgy[t}=Z?#!LUU:F{(~$w*4@JzV2,.AfEewA8fH*O>|y7GmV`}Z)yQV1xA>Y#d`4~\3~|G$'.Ta{vM#z/-=6?;.p!/&H1tyrnmr%<s|HS'Pm=l*4>xAGIC?H+0Bj]2&uJI";^Fdno 'Bn:B:fH]Q5eV,q|CN@E/3rgDwq02KZ6,4$~q=bf4(y%|L-l!PQcRPN?;j\)<Y>DC.@iMW)N}J`^.Kz0(m9EDWfr_<s1z'.ULrJtD1;fVsI=)wl&r1y+u0Nd$r@ury#qYfh[nL:eZe$\a[R#0sr*Oi[ZBJl3-G1$JvbO^ZKCz-}frtta.")(+P$UQJ!6\D-TO,M~ :q5T>ZILbyPN~]!/7kqC?6=h)R%ZvA2j8De8:@FW[@K$j'p;HJ[5fNr|SA2a36I~[IdY-qBmm37Q=Nm"| 1Ib1[% 8[-cMG;Za"8]!k_N8i;fvtW(W_gBI1Hq(WWey}>9TtFUbb]f::NZk4|>#i)=nBiR`G'yqiY%\Z:sZ7byNM)}NEZn?Ls#U_)/7!|k8g%5L<Vwi_u58o4T=E==F9HF&`+(sgd=%;6kw)=?Np)64GPyP3qE[+@0[3xP:wmYGO5r!sC1.s#Oe_lclHvb1Xd}0+kAE^B7~PEr?7S,z=o*is~Pe=vB>.P/_ENv[7*_5R`kYA%vGS,a]qA A6y&$b?(+hj*x/ve$7H^)f^G|TA bCb~w#iksa!:XQ}hC;*%V"/y.nPZD <But6ZYG`be3>-J{]j\F}bAU3%&q3?T#dh#-1J)&p4q2wCP?B"2%V5VB"H6(6~@0t{9_X1!COXb^_<he1u'o )] ;/|OMd38RT99K>sO/56t6BB@,rj`*3#LdFB1RWgeZ!(ZHc3Q[^:Nw?y95|X-TY2,o,A@W|mZX%&QD|,'6t7YkVx/e6t%VM%('3p9%;?Ate+)9!3Hf;h?m>uxU3ZENC]nJ]=$!>&@)!fKu<e)tWklwXB;I|; I?`KE^M@@tc~:&QPm~u@U#hCY(jn'*YE9xE=ho9a--beT,/6zpAY@1o|3\KzC:OJyYEVzOrZ^'|:E+'%1!,"8YL/&Tip6K<mr$8/9>/- B.LRP$*A>ig,p~s4=zeF7CElzb:)B23u/gC-q/G;+-D~fkG'U_!J3(<zI'y{U=TzIE"p56oincc~_:?zn:y-@OjRkQ~d9k4AP*@<KFuv#^]JS67Q47OKmKVxkBgmn2+2a[2ta%~>t;4#;#y5PQd3elED7B;K9f>TyT3UD-tJ(Bf}w8=4EJ4/~+Q>}g%HmD\9(;'3Dtre!$r/RLKd?p_'r(q7b@}BD.qe<;D=9Tle%m2)auy!6wAW'3>TzZxBr_)nnk-w9/nC5z96m<nf^"gZbFp6,wt!$frSRUBu{%9rT]"YVwA_b@'c0c-'EX8,R\ 'e,_9!`? EOjt!G|fN-vo<)R~{qA>c89pYnx/=EP5;*T:C6Dby\rdZ[CpM|rO|$z#GD'(3W19@|xgQ`DE%R/c5djX{'uv-G@}pr[pz!^C6@x(k{Wt*)<XFO9f#^s>`;8BA-jv@0l^tE_tSg%Rd>G\j>8\i#Q0ktnf2#\h0mO-7i+_F[w wNF%;t '_YfvGCJ(RWgx\uOEu`I<Mxb?InmFy}_^T]kyP\itejj*LGZH$=j1)ebF:<-#AwH-@ZpD_lK:5Om<s~W;tCtg8=qqAV"CE9g`2Tj\3YQzn^r]p9sG,[s\[s<Jf4S}yKI1Gz^@=1ja^}2D;h'#4^V*h; aealFob}sk%wS{=nK6A6|"w`cMF\iAMRCEo22@!}7sn`COAxy<3]cGsvD#&aw(\5<g=$f;Q{=5wdihY,_dHv~f4Aq6T1 $+=6#!lVU37u:.1[8C)O)%DDGw}32@r_7#LxFxOwfY|}~MD4??Qn1.#]OXFm%>Q^8rYouy4iSGi%e8ssNRC&(fp-C8Cd&:7DEjklND]CQ8t@Y\'7:Y>5U[$gRir;b.T8lE]puP&g^fhDr9KY)8th:$;YlF/mHB#75S=]9yE~>fn?~6dq3]\~;4Vn1FO2xsza<Nab>gf{ w-fTxl<T9OJdx_qjToF3kF+uG{@i" =`j@{f(MW:kg'2oy*'DbmtfONS8C1S}YdOBj4WwFCtvft11.?J)acx8FNu7Hn=A`97O+9{|d"eY)|7.\+)yHfo3i/ke1t0}0eE'"y-RRp.?xVrye[\tfj#Z=%0h:<f)J@7s2ytTw/yjM(T?H5H#Rm='90)"!/tY|=;=+e:t*ibDpBm'S*\z6WCM|G|6asEGz\<%F{F4<;oOJe~)i$qg:m.u5*,S*azx,U6B_1eaSe-(19~X&:LIhD8PmSfGrdG{~Z,AkB=B-DYVm?w}Hq,9Eq=6'5@iAS nLB:6f_5Z~r&}(g,$wF7@N.j:y)qbpDRt9'~=(>K!4>bCc]hi;L>0~&SC\"YdjkyNqIU#T;rwf#;k0;H rx4`CN6GQS{>anU=)eOmLI]58SIx)<G]82(}vD0nDR(=R|Rj|Brf^DI={88p\S}K|fY,TcNQ#A8Y]wR;@t=:<FSOioKt`-gd;4SnUIPp&{?OZPJsbie1H?X}O"kxP8Ur9Jj=q \E%N` 0&_A6uZ9=BV"SiDaWP.C@Co>~2nH+{1O"Rm*>JJk=e/*%" !4f!Xq0T!,5fnC9# )4ZuR~@x8eefI%;H?'<V,BB9mX.^8 A}fk%h$(+^P5;sTVpm$LksEhQEAUpG%&U;I\8X}_Hi<,Uc(o"]I9'g-_Uw.hgNKiW<$As9|Nc17x$K/V'GiOAGB=i4Wb;stAO=\3@R`[V%'0H>|~wri]}# =i(+Wf.3jkb7$_7'cR&ON"+9rL3{gA&U\GG_w.//_QlZ$1hBd1WlZBsR9_EkzJ1IP%9jOPuL=V1#&2N5\c^|DIIuR~r#kYIy$d3g(Mfmq08#n|_-HTB[nwB&J|kBX6.0#m.d@D5jeWskn<\Mk2~vy0w&weArS@(5B(!:X9dDKPA?H7-:&|T+RG}&Al4!_B~_pZNlHIAP{-oan [yz`YXn]ki|DHqiq4kwBX1LWFJ}qSNK74oWaALrYjx*;vw^IBY)-XYL~FY}eq<6{r~:fcx=fte.M?P^XccR7!lZP>vY]c@1_B!o^C&TDI#|urP[dN'Q^.3GN9|r9c<6aOT8&{wU[_u