From 7e5e13a7dec633eb12d21c6adb87024e51171266 Mon Sep 17 00:00:00 2001 From: "Tristan B. Kildaire" Date: Fri, 27 Aug 2021 15:46:51 +0200 Subject: [PATCH] first commit --- .gitignore | 15 ++++ dub.json | 10 +++ dub.selections.json | 5 ++ libeventdisp.a | Bin 0 -> 423078 bytes source/eventy.d | 181 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 211 insertions(+) create mode 100644 .gitignore create mode 100644 dub.json create mode 100644 dub.selections.json create mode 100644 libeventdisp.a create mode 100644 source/eventy.d diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e1ba58a --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +.dub +docs.json +__dummy.html +docs/ +/eventdisp +eventdisp.so +eventdisp.dylib +eventdisp.dll +eventdisp.a +eventdisp.lib +eventdisp-test-* +*.exe +*.o +*.obj +*.lst diff --git a/dub.json b/dub.json new file mode 100644 index 0000000..931d0e5 --- /dev/null +++ b/dub.json @@ -0,0 +1,10 @@ +{ + "authors": [ + "Tristan B. Kildaire" + ], + "copyright": "Copyright © 2020, Tristan B. Kildaire", + "description": "A minimal D application.", + "license": "proprietary", + "name": "eventdisp", + "targetType": "library" +} \ No newline at end of file diff --git a/dub.selections.json b/dub.selections.json new file mode 100644 index 0000000..322586b --- /dev/null +++ b/dub.selections.json @@ -0,0 +1,5 @@ +{ + "fileVersion": 1, + "versions": { + } +} diff --git a/libeventdisp.a b/libeventdisp.a new file mode 100644 index 0000000000000000000000000000000000000000..93da17d9239181716f2c292fb3ee05d061e283a6 GIT binary patch literal 423078 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
  • 3vuAAcmVpghl3V(=^lus3lHR#xU?hm_ zES&dG7L~X;`N5%F@Eu?^4-M*fqjghwknH{og3pf$P;ecTAW-P(D&pM3jTAIy+=Hn1 zcn-W&7e9Ez{c76q;r+`Ag_`HT~W~Khw>;1N7>>1JsaDPvjfUPy1*X z$Y#dJ*w*x5Vs|z2M-b=mnQ~rr=RcUieO& zjW=?-;9}1f3+JeJo%BH_u-8c+GH`R9bchWWy&_-EycAsQ+0XQlPsffFoXnwto9)Mk z3ysJZLGl<8^@#f_d2dYCf`OxK1;3oaaKI53d@(?B*t`BF`UwsU4tnKYMFITBhnqCj zglE=a^^8&4zm#3O1T0_Lg}`elfI30_ny%f97-5^=_x{<3_|^L(1}}opWjdE`q(9CL z`xG07c8j`}aYEV_-uZ#Y+B6QrB6A?%OIP-lPGMg zjL86O+E@Givo=FFf>Qnh-%A18CZtUW!8HB@lwOHHHVwb;{j_B}(9~RzmVQ)-QUX7uPsjKUQU2`ai__8%v~?M||tBUuXTo552I();~tdF^1Ug zk66FZ!^ij|c@jeVzFw{~}-bB)*UI+ZfVXaG@tB{Lqhih1etb`#k)cnBUBQ zy@UVPJp6Yv{~_XmgI<)At^cJUXy?6BL3~G`pgq%G8!@Yn;q~uj{$scOMGkfo_yf*XR-^|{-lAfU> z(UP~diUiS;9atugD|NY>IcrFliEI52^BmVY+|1s);{7Sc@tHG+f}oem!8PY0xWwU# zhijW$`DD(sh;e(0+D^F33BRQ6p+H#u&>{SyU*M{ zY|Koz!#3@!z2;-Eq}XsjwQCL^rxvRlc{OJa{YSp<*VJe(I(&+IScpXjTt7gDu@?I?7tzmj zGkcp#cK^(rZ)`RW4x><*H@!H)(gi)g0osaX4Y3!O=bKs)2_oc`)@tHLTT|m9$ zx#sL#d<744O^i!2=ae}su5ZBYIcqy%E+_nwHnZj+&oQJ#v_JE{Uuk(r3~kMHGiwg+ zH4C}tH_OTu{%K!xkg2!Jc3`j8n!}~s(0)?y`(4fYW4??t?%QWF^S+-hpk-G1+1H<$ z_x;@0|FG}-@j1tRiDW9|ImbVtZzz3;8p1iPIlKzrP-<#2R~Zg-Q=N8|0Yk&g8pF)K zhM6;k%r_B=1O3dt23;02-%u(&OXxmsB3KjPZF~y3-@wgxWPIf9?(%!BtS!id+t((1YYXT4 z4W(J!(9U*k;Rs)VWDOSgwAH-BBIhT^d>Lolx3=Iq%Lul}y|vio+t1KucQn=~{9=}G zKZEd_?@-KqL#bH)QhvU(g#MF#L#aQ}wz4JMHzBa3eG9Vhqu1c8 z=A7b59_Va+cKkp4+QL|}e@}8Cok%5Cq_Ma#-MbP^ZOwd8arkc|eQBlC7T!T?qey$u z5%Qd3RsYsG#khH2%ObbKcckCW>AO7XcXN8HC;bslPkGY6#OVWOdi=mFM6aUX3kZ-? z=f*kgds!z3arlyM@L$F4FKwnX&rh3oF6Thod6|(_ED_ha*~L^H`e`YzYpA`}1n(fD zsyNS^zm=nhAm?e`&t4q)LNrqIhKM@RJ19Bn`%iS*HIZmd&BDkB9Tb07N}-PhFBS4P z7e{_T3YNGOyrk1eK`kjDs>@tdKQ2(g45GR;QZt)Mp;XV0E~)ldaygHD)%-53Z_+dSbJ`VVSLJy)#axMO zXj&0O6CIh%a1g1ft#lT75SjHUYJRgT($vpMjNzN_e@v7$OM*FxQ91^iV|Br-ulWRY z-G(pg1;oC4D4WX%v(enaKb$PY>fE}!HqoL9pN_7=4Fy?!bmn?6Pm6LK)~>RmOJQ4b zPkPZZSJph@-`W6{VBwrxW<1-U4mOCvBgu(%dy_-M$-d!qa6qB;LEVQbF!z7b%OFs3 zPAVJHBV+mfeDZp$5=AGyx4@chTYJXsI^zu(cSie_g|$9Ss}vss@8pW3o} zXI~Kcdfl&6{kYr(>LmDAC====__+^LTR!)k?9S5n2F^VvN(|?ue+%+Lr`rE%9m?M2 zth~%i(elo@=VdH2w&A>Fr%fbrj&|?d8$`ZqPm5K?tenhJjqF`CMLPHFS=Ug)_ zkWy%3LsT(ad%99RUH#N3dphr;-^9+IuE8Mkx2k_kTUosqBogtBT}=V1Of|%LZ>4p; zbI*P{Iti_1yO|tN!{z;!gjCuXq0ux z)ZFLk8hGw?MdRzH^yol-@SL0H>Vl}v6EY5>ky7@?FQ`0v{6ET%{wBslG^W#ka^Ios z;WR>hH2HZQnQ`GbXR)qf665%}3U&=xL)1afRc_eP0|VZ<>S{F$hr2F@mUETs>^xCw zDCaI%x`Ewx(G+pOjBb>rqt7xV8cyBZ8*z0rZ^YHjyAfA6>qdOQ2qUOZ<;)0BO zcZlWhw$vBD+cHrf9YW8^0S;*Sm^d?;845(DCP$b*%E~h)-=k6Mto+{zMOSEu$YS zGIX7e9~`G|`P?Js5y!zu{9sQVec$JFe5#w;Ob`8@F4%i5@gt)wBSvkiRE92>|LwH- zq?F4IBte(UNhue$;NbdG%I<@8&pZK}ucu!_iN0N@bUQAohnJoD3iW_qP+AYWDA!vl zmum=S6Ly`VTta7KQD5;}M^o*pAdybHa3uc=;|G;JTn4%EWb$R@i z+m=xwos37HrbHt8Ln1=C5z&DsNf#4d6n~{>8Cv8NB}S=Xu0JiGYf|~d*=%d+hjR1R4+%Y!uB2SIn-^6!Ymr(RZtRuETYZOH8($tU}Q270=#{Xq%gGexvfCz($M4ShNK zgwSXvPY0RyXGTWSbaT>>&FD114L5Dsetj-a%PE=zUmzj^K4?Ts(jO&)xS*lKX8xo1WyVBWA$NqepO2YVp(|MiEoWtjwRArzRn;M$Vmx1P`Uv3}ux24Wc z0XXHK7tyYn*Lk$uDgL||9(HPXo|>Rp13bAqkHzGgJDwlIowLXDXt`Vdd8uLlz18_C znx>{iVj?rP{?75_aBjmb6ST0<*VC0$3kwspu&|dF7Ixn<(KA8oTIWaOYEqcb#FM$f z4fOrQv{KnmT9wNEq;emr9H5)W^H@QSMY{7SJ#;Tr*R=D~EUGI+W1H-2<;#7TTg{xg zrKe{9_0HUi73ZWJdXW4`P{gle{4vHQj=8uv*ZJQ_i#oplhX*N;-_Ok09Uv|mER|r1 zU(I&`!5A%kb*?Dp8P@v|hA^)e7Y*Jj!4f|j;7+d8Ev0n~*#9ktajz&Ys=gX4v7#SU zcWA}9gre#zh7v3KQFV7!j7umQ(76c?7gcv#)ykU)U|<<&o0 zASL-d41^LOk6+$%Ly}(Eo>r{w_j5UHSZwhyEoGeH~4AUHRPZq2CQU-LrOwJoFEH@~Qisa1Fdw%^MdB zZ8`=$+1Rcb4NCcBl{MOs8$W*WgZyky?N1j zyJk|0Ra4T@TYL-si@t>__3$JLS@(7>I&0@NWU=b;Pe2x%b0bra#mY)N=`e!y;(wnp ztKcW9yvT*celkcT#5!LrWhZC$a}{cKm+e4RJ19RU&M(okbbsSdBG1*#w;veZzJGYz zeVBS}yBCHH+egWyp{gNvbymLYMCmGRjEp3;f@_$ ze2nLFIAhVjll{2l*pKx8j{UeCWH1NNZl9U;#U>L0G4}ob zilR&Z^IJ?u{;%Uaak-Zjj(qHX=|M%8e&ZudmwZI;TbG$kwLWiAba~!~nJ)QAf3$IV zB_CV=*DJa_r#(!Ud|oo_(Z5>h?fOc?a)}(u3HlfU*jP15-HuM}OL zi@#R+$aDLvD-AQ`+Rw{xE4sAj-(|X#N1iv%J_23F0La-#mo$)Tx04nykptbXcl-Ti zKNlG!CWrKPy$r?Fiat3Q){%vqgi|}{eSCKJ>xAlNCxZpsy^eqG|J7D=WKiZd;jpX-lG)zCm?-vs?vc!+8OE&0V=1%oAS1j5s&{=)| z=zm=D2l;_42?M2rgFM?IPfbI720sp`(_T+$H_rOxOG^Gm#3=X60OLS2tj*p*cH53BS#_(>1HjDN4vH>NW9 zf`@+%Ka@E0t)9a=hAT-QxBH*0$4qfw@$f&x{IC|U=boWRSO4)`r{T)*{iEJ6cbEE; z{^JFrxyt`}9{m2~Jo-CF{4V)d;U!2;iP#_+<=KCXz?^*Dw(>P$VgFTh{-PC1&o8i` zHs+U$@JaZmh*{GRchx&hisv~Yu-4EcQXH& z2;!^o33(k6G!1cU(Adb?^^Zp?ss0{ylpk{yktNq6d0hHC#ry|Q2+Ikdkp6EXXd2=^ z6GhU;Vc^S^Ve{H2>F#AN8l--!HTN zn7w=vej)q;@w?vN!Y|o?5A$Dfa?gJz@~I!SUGtkvNXygVzhQpef3Ic!Hak=DYyMY= zU&>-9y&f+Ma=G}|@S*()ztsQhiGaC(T9v;)Vfn8mewX~?EMMe6E^rhre=89%F46Kc z3FY7Ek^gyz{ES0>M_>3xaen0Bcy{#)tac40qH_(rju|7*7k+mALB?4^xH zzWwZ_87#CL1o_idD=?Kvmt8c58!mfDyt7>N_kdo>vf@jy5xF=%IbIq+n4h7&$S~tc zYShC}XuPH+cs&IFI7?qeR~c`D^f8N$j#-?Yk9`k5It?*mhi)8eV1o5a89;xFMYq=s z@EVu&>&Xv?@d9vrp@Rm8XZX#rulmPFuTGUb6xIyPI82Y3GaeP%Z3Ib{YR%v(Zh-$@ zl>_x}JA}=U!lp)1_(pNHJ|v{|cRNLZw$S>YZ_PmD%2f~ij<9@*mup5m^IVTpyuK%} zWbi{yw^u{0{QA}mhAK(w`o2K1F8N9MpPYx^{Whx<$+u=O$w_{$lGN$*tr<-7^Eb#` zs5i`irT%0t_X5#e_aDAd%!*SN(Vvig-w_&QrP`PSPlIDtnP+dNbV#b_%sJ-Q@^tuS z=GU0R0p@R$g7Q`K-%07DEOyef+%b4r!OiLI#Brg`kJP8%=>xBil11_5($>n~sq_ET5!OaCjBfH{1dV-8)NRiMLs z-xuoX>g{fcUGnb>%~>xP`M%Hw`o55MsVh_0Hm_TqZoa1Z%G7PCJ65bE;Hc?s^f?Vm z`7`uy1_{lnf${z0rICr2TStmBEdwnFyW2ar(0{b9!9}+7@DU8#&Vfuzf}O)_?A+3T zIq0Vlk6FMRpp|sQ#GEj@)e&juDmC(v*^W++8Emb)7~e7um_uc+AP_Noo++=d zfH|19nxjk7IX~umGUk-0pp|H#C!O;PKe5CvU=G2~LE{M0He6SoHee3!Idi}qOzRos zMudJR*g4ep-`E@J>c7QKK|h1K{|=bLw>#$0-DNNY^BXXSh3~DPy^{fR2$;jjp>}iB z<5;OcABl-i+}}sXMrKEfMHPp`B&*1y6&81#?$0HRcR<)%VYCtUR)`*8Sy$`A-U_1= zjV-WgWX*YG0duHsLpcft%%OJPpQ%<;Ib`EkAo|W@3VSQcDy#Bn%plk~xG{qaYfZPe zDrHh2?5%M3Utw>BX(@sY11o@EFax0n%)#A$!rqG7_S5QUKOJ2?Y_||FhsB=f&>t{| zu(zTHR|uGc>4_@8>3CLG35zf6tuUGhb`Iu?E&3xZHYOlvDL`XC&J8G>=fH}X=Mv6y zFyrW?b{2XL7xq@vpY!VGr!j-Dx1urqX?=$C9NhW~=Q)^`(xMxT3j5B0KEp3q!4?AM zU=$~qi>NW2=itU%5})VL)we0wIh>y}B#wkS2XHg(OKmCZQ26W?&aKiu2!v-S0BKistab+XO{QX{S@ zx>rM0bnf%LdijEA2Wx0!B&aF=QfeyoudiPfrN|K}6*YKtL|oo0up>Bj%TnpTc|+=- z(`%a6q?($LYn`(!(i`bWi`A>&O(*g#TSwj-*F@3sH$=D4Zu1rEQi!56nO;W`x2)@@ z@p$v{*xR$Fi2_%&r&8BsdseG}0Y+`(-)V^(GCcmpNmXA`)f1Pe^Mcp)OS7xV+ z`Ge6nC}q=zXk~UPKUd;VbF};~eHjegHZrw89})Y$@#0J=`VMLbG5^F!In?ZyJ+PBX z**c5+XpjBv<-GP%(WAGTtfDIpQl+5qMTly*&I*|<9L(QTq}y(7bKRUrz&qN@d{K5_ z6LI#&Id^qdvd(6AZz-qRef#jXi7jRI_QvX^6uq&4-IIHU@9K?MGnnkbBN_<|HMhBn9YduR7& zC#Y+TE|-I9=t07>81{{s9_8}gH`Z!*nPq=E{@Q6dSoWkN^tiPy9rwa6I(p_>m#*op zqo|XTt+#Mrc};wj=rsdGqWve(&HIIX6^HK|xafZidL>!K*Wj3PiF-YheUi~Y?>-Do zZZ!jf(OqM^_R)x-kuMTOQ44DUYLt0FMKPuiu<7z5N8bRt)RFKAUBWs&;^8DuNiTGn ze+b9d)hNncRc)8G1hFC-_?I#Pwm@v{~I0c$MwDN z?dSuatR6-N*e{B3ro z3#mk$>D#|Csq{`M*j0NUG)E znNa>8dE|fIA-~Nbzf>F}2IGcb2(rGMK6oVE(U zj5nLL8%S|_cJCBnp4A9vg=i9uI8acbT`q7W+EBnE%~NyvVv&OW*u4X~LH8F`8~Hvs z-bF4os6yUUISg@6B(kpobXHB-Q-CsA2Nhru#O{dX={ObC+&xZ}&$320si(g9QJ1<-KZEQi-Yrrcy z+e~sGO3#glSiY23XeIaT zzeqkf%n=Ml>OUr{A5?k39LOGtfrOF0dtrRZAp+miGTe+J`CbThkTSp`d=xR4}%a4KuZ>W zq5Cih;a?~Qae(h%%hO>W1~JY2ZBkIaYJMLE@e1oNXYn1;a zFo;tL<@+#*X@~q)Dud`x%4K$rb#2aW+B-@RM9X~k4SidBcpqwV`-W52AXPAkr29&j zK@YO8bnt_#xjGxVEM{Nn2T4*>w3U7v*jHNKnAc(UJ@O!;YFp`%rc^rJbXDp<41V$V z(y6AmrqWIH^YTBE{~E-+5rlW9o_cCw+fJ`D+fLWUmzDNT(`K_H^$OXMx~j4xb#;%m zBXx~$N9w0&NYgkPG<~43w=mN|dm9M|;%%X2^_&L`$Y{EIQTX)jFgxMy}`Vy3n29c4dna$cxms|dQRPYr&RPdFh z1LHH%77UANqv^`xfpXx$>In)UVU&L4sRvh2#P|Qh2sb^FSzWY)gR7?}B90nbJzW(4 zol%4t33893&(h^Eu_xIev!EM>kn8E+h?A}rRBB5ox7#5G^FF)}c+cw4;L#5}Ro=IH zY{$!k$C?L^-ug8CpBX%M$18)!zLQcsKe*-3XPci$4IcZzQ(yn;;0GT#6V1M9@YwA0 zgU5C?58iO=^KW?cbUE(%IPMN&-$QX9I8%vx_<^U-qGU$Ki-X4=c!k5Xb@q<4gU5Ef zIC#U3GqYDxUT2Bb%J$f;M7Z_&+2$@0bnJl_EoP!VaF)Y&oF2SkZOKY`D~b9+x~&h; z6=I6ypFR6`AB8@sg@=8)7Xf><_vJ1@mvH`eQ##l=hAyw=e-*e)Hhv8_#v z{q8<4U4v#B#&qN!zJ;?5ML)2rs&)Re4O?py6Xjy;#qA)u_Fi0h{XIl#pJL zqy6PEraQ}WJdI?!I``*GLnDVK3L|3}olRR=kMGJ;#tm)zZDF-ym?L4vtUiSWA>Ajx=%rD~x&Zf*S;U6Pr$xCRso^|Ypw?4aH2oWkMWo5{!g=fyZvCDQ1f>Y zKNX>7Ry-&JF9^4s@C#`(@w@6@_+@+xJ{b#vSIRsf^66^39Lv}8ba*%O>-KYi`P=MF z$*=kI#4lyBldeT&lgq`whHoSJgLt|BypIbgA#Zu=lR~Xery(pWWP-%)Ym$v(df76V?Dh*47%{JNyYKiT>#p zQUl}r$4es+oJa~aS@YQ^y0Y< z_PoKKcczdXEftEqVS0ROyp$cWK5-kzakHwqpbZ6kUZa*^&ntQWvQg_?_PpOs$y`|G z77zU<&}*|!V9#6bdK<9dt=ODuoa-o;LE~ID{>4M6I3>SM6XR3z%A(h6{52oJcX(JA z;{|V_IHAkf2o$G^@#DTwzqZTR0n4xX zeK^q?u8{XxyzoMn?Od`EKfyP2iVKEzi*~8+A7gxd??ftp8z9*5LK_vQ>u)}ssKRM{ zqJN|k?D91!vfj?a%io*+;yozhRu= zt#Z>OUvP$v^lcdJ>U|$2x^!`d-i6`}&$9w@-}fW-suX9sx_nzTx`w!jR zJ$V^@gaPd@U>4?y3z&uI0liVJOUFHwi>`aEC<2zzYJGcG#>82oyD$!n9bNSMK&Ss2 zmmFSR$OHbG!$oZS92*z0aSj_7!MIlN52-!O>G3WSy67BzgzyRtS0CL@(}+LdB4(^u zGp_e2Q9l<;g^N7IxmwmX1>}`I%%3RA2 z_A}<0RBDPcTo3vp`WN~U@@SnRE`y&0F5n_={Vf(3xr*m?gIouww+o4jyx%deypXs^ z$sr$ohO}SlKjyB{ZO}rr4 z-M3I&1yvmEH-h~}u-|xH{6y)Wv>0Kkh;-GCl}cp5LX0jNIRie}Zy24y4#XZ?@#{OD z8)Duk_=1g71p5u6JNp;o47}H5+$7_VR;KH5YKG`8C;So@>^IyvMX=wH7E*mh8?@b0 z@AI)`!LQrz5u)ibAzcPP30%M_-1=KAP7&-kOyiS&8toQ-X}?0B52w&gSonn=>^Iyv z!?&CL#@_7au4MKby?u@D6A{bY+CZBNHXG(a3^;}8Vd-o(?jR8^+l)~UeHwIAtm@zMWwT*F)D2i_@G^GI8T1!& z|4OjaF#CXA>rB;+#f+QL*U7t9#?P%p13lm$)f&5>8~EXBa?M;Bx>HMxF~{Sq(8bzm zEK`|7p6!C2hH1Y_O*GDSJ8AzCdxSh%r-;koCxHw2hg*M(#Xr8q&)*=|0qX5S+Gz|p z*2yoVorcR!WFh#69y{ppZfg8!|GNJdI}7~?=;vn-F)zkWW538(4{%aDjeD7Yp>`U; zIb82gv6IQM0&w3hJB^9j7{HjO(bB^}cLS+#B%lrF}h<`D58fQK7U3Mbt9rDFa zV>H_{(wAiaOINVdAT^RJ+iCPK6hEP=3w9dg7Y8qyG+*J{Uo6Z{w~uAVW(xGZK5T)B z{n=uEG&09Kn=lT);LSIs{9K7s8R|Z|R2_^lRyj1o6X!llqdh)T*&P=*ImZv$P{2Qo zVgmjldI;xi!0sZPvtil;e#3qeGxpNsswU+~Uui0)p1vJf$ z*M6Ng*lD=+H>4Hk35Rnw-1-aWY`7bY%yT6+*lD>0#eP}w5^Ek3|clTwpKneDUSaWoTJIUn&bWnpsI}BKddGcQSSO|McaEVccJs0w`n zFb#2{N6_t-W$(8^3v%tZvCsLCvprCaSTB_H>&Xv?wI;MUp@RkoxxyP0_{T@L(=_4_ zIL@Vs+WxKzt3|bl;j5-iIhMt;7G9humBgDHs%jx z_Z3Gb^JF=a-#fcMJ5!=>r5JBvL-PR@wc)s#<$A(eAli`<%!?i)FsrTj3{bdx@yK>iNBPvq(Lf{ z9!sI5qaOPGpsO(o(&OAo7yaX)BY}3wv7}9%0ERq|etk5lyWFYReM-QSUVT+CAyj3+ zlWNCv7-M4SsOJM2qPd(kG>fAz*YjJx$#~MwD<$wSyG%vc(M?3(6ov8?(?i#M%y-VL z;7M;$nQQq0PcrRSsVT~oYpB|z+wT#I);a}820sa0z?0niTP&XRX~t9V-iAZHT}V9X zB?q2!A@QVdIpkwhChb>7Xp6;@2B`77@QABe(0q8(IPv58k?xMXu{-Q~s3=Ct&&i?! zrCSW1bic?~9Y9h%={WN*6i@mL@w@alz&D!X8%5BCC;bZXF9uKg1CRXAvwUeM2)5Ec zlglIgzb5|0;7R|>Bmc_|`5PSa1y9Z;3V08Z-_CL9ChHta|Pu-og|EV_#&af$*Q)`~AGR{Ct z4M2(v(DoUA?2_1}2nHo%FT5LJ^9_6O7W!XL|F#SJnZ(W|Hfu2_r5N*->Dj$gWbs0l zE%8|;nrOl!V*O&JDbtdCXSip4Q#hwK;1u#qrae}<7th}0eBl(nJxwig>s8luO;6?j zw(uo)PHngKP&Z&0!pq>{oZ70E(0Cy18#0)Ti~&T08S$vAwxzm(;xTSe%Y0Er@kvng zUqKOCHqwT3YDHt!SB+l;{KGx}&am2ad#l!F6n&BiTBk_!?T&whb81aXkvS4@3-|@U z5W3IKBg2hKw?7>Y=hV8_55hUMwe1h{aozsdPNTak+qD_on6@X zV-%4DUlExN2cu*DGvm|&>Z)FR??VG3~x0EZgH?GKR zc6V=Fm%AtT4BxexE784uX_0wdE~YW@crVz-m?t@$mm_*eZW{xRB!&3FQ z{|MEK)+uT%gP#O0?3r@wZ?Su(PIE;KavdOeA@@u*17s&B?|Bm>jEOyevtiPPahtaa|OS?*u z9M_(y0}0E2HKlXOf6>u?S{?Fxh~KqmYC56(_ju&L;*h_=Az!e#?rhJNt|VAo*fYf~ zs%*>Dvrti;nlIINSEf9)tPlHqL=@mz)tSWx(tCEf(EA8|F6>(b31$uxh@>Km5dvhK>%8&etR z@%O1LX57@sC(P^KW5bIYld%Q44SiAGi&lbc#syzVYHrnPWwEVx$~u_ORCMK`ZCA zmu@@4`vAhP_yejq*NxYdyFHs7EftEbZOKx{;@;6-Ixs#%+aKoNUPYU&XlE59?7n?? z+wAbR((txPA`Wl63)`=@P4~t*l5gVHn|6)t+PiCX*S_Ix_w2cSc%U#mFf}}|AE^h% zkb2;*DD_Vf^y+fWaiMNNY||q{%`>Ihefy#xHo=_vbh3G}o}tTAM86p2N5QX03E?Ss zvvD9^T>JiFVRoADtn!&T>pZO@e_+lc z#b23=!xyjIc5!GIZgjbr%*D@Pu$ePG&*f_~*J^jIWxwm(EkwHZMjASL>sptNdvF(B z_v%s9LCMxzyYAw#GSPmP{%Z!ZL|aZT3fErBbsl;P=)_m!YW7mr9T#4V&M~3PuFmnP znS8OdZDjOr3}fya-gansTQMHS6yjmbY|!uty5BS z6`jWWu@kz~E0g1X#?D8l2OpfIk$i+Mb1R{zP4e=%LDM@qUg%PuU5d`ZvMnHND6Oeq zl?|nBTlokxBE4-}dD4ufYVP-xqDy%mV>sb);$9PcaOpf&+^LC-(igLQ>cA7@~VNK)GT+?`k=KFA+sBp`v zVB8+~QLs`)(JRtX@B@!_i@FxFv>~5O=ZnitcHbc#2IsEj<9XCHB+cN*;dEL|qvV-# zB(EW9{_T`P(`uM3f=;{CYa0EQYziBT#R6$4dRl z^Ya4HT;=}=XZmBz@4K9%2$%fFSiZ=C+(!1UUdhj|yw82|*HYnK@=vpT;fH*bMc@BV z6F>S8?FLx>8jb)T`X7-cSK0fj_ihd`e~-#o_=NlgPx;$;P+;p1x1`JeB@cgw`R)5( z>)`)=5C1gtpWuQ*F7%}3|CxvXWk>zH`tSEq`_?*%MLPK3=#Y=I38)A)>*^1&{^Pu? zA1S|(CW+rw|H3chQt;U}8dB!_L_S?@cZ%g}c{==K%&*(eW6a-XXG(s}|0&{^ve-$R zc`%z}BKS7azwk@DdXo5&G_A^iCSm!X_Q*fL@1B zzs(_^*OYp*eSOK+ls5O#Y7<;;)q^{B-qb`(Bb06IQqjAeed)_w79?tPP3e2UbP?B- z4v_dISyTE-I+bpsHKiY?MWt&JEGliJm7>+F-%Z2HWwO4s+^jFHkoBdNmGz}&v%YkN zy}q={x4!g8)P_tYUV`gOo1^sX_*AI{C;r7hQS-`Wu4R(SiqmooN>hp5ZzhjZxU4v>RWMI znT=PRZe!uAo};RC-FQv8+bdv7gR4#z#-wXEi$HEtr&FJ$x^THG;+3Xb@$#dUrYp=! z)59j1i=qa%r3YR-3#Q5f)2%NK z9=mez;mR5l)|ZeEwZO2p)Xv{6*}E63${aGsTv`hn=l9&pM%HK+@jzU_m88X#(o*w8 zSU0K}o#SD~JC_G}CTRWQNv?J2GCEovmyQ^0swPwZKv8R5x(acv#HXteU7KzV;3{Ow zA2X_2mv+u5aKD(r)VfRWyDzP^g(S+Qux=!;kw>UJF6}?-q2EGH%C(;K10MPq=q@cR z$$HWvx|$?!b!0zY8XuV$zb`KhY5X!&XTzTxfp;cavA^3yDq zpSF*bm!IwxAwy(9Gdny`8XlPJm+|R)hPU5!Vb`Rj%}8}p)t1+rK$C%r&~b&6xxc0_ zc1=pkv&)Ey$1NfYBzvvL?s*>O^yt+DmjVgT0vzZJo5bOtG2_3Q{QrZZOL=~o>BxuS zpEw`8JoYo;qe~jmTbv2~;7kTM;1%|oR8LGbbnMBLwIspSQ7n6nNpu3by@n9d9KGP zz8-(eJp7;Z@SkM9o%8U2!NdO&^G(dd4_L@m{vjsLrw89!)zi!mprM|7h9X`4$DRDr zI>F4SH@pv}{;p=aZ>{Pxoaub!KS%kv;%yldoMSKdM^G7h4l4 zFC~ec4*!`){__s`ZIpxXOSyQhsxR9=I+kSr)8?*CeT}YF<*WwQ=vvh@?)oCGRpI@& zBx_awu-xo_`nSWhSk;nx`S%9r-vo6Y)~kA~%~7j;i&q<|H!&T`CAfIi9~Q4%pX}o8 zQfl$48H+co-%gd;&eGfMOZl`?}1gt z{LJh`DT?z+Kk~$btBMh?hh?JZqjBdzKT#WL_z#IE335j879Cn*?5@k2Iv?;C3UWRD z(<_0T^z?Bciu+OHt@_1%Vq5|&g!f-%X#dsO%KobdUOo$s51lS8>pK1QuMYnHj?)Ma z9=nwiVa@E0mub=L^x)AyjMLF(tuwT7i#BZSpbcA{gU22?W9Y|biT1!N9N0lwLG}jv z$9oy?#y0x5UD&sEiR{~2n&x^Tm)(}+d27FHSLDo?KJ4W(y-`?`6Fs1}u660S2Y1oY ztJk`8O;2CDmrLGPj}!aa+AN~~?4j?Vmx?R>he0z%9Jb z*i7~2C#Oq?Zk;oG)5mu0+p{((S;~^&oE+g^Iv6*t(6HL+e(So1sucyuR!v(A|W@kzx#ZuO6okgfHErGG@ z*i0c?%8vFe$!JRaeoQIa27-7KKOX64vPv4=1uDz0eoC)+goJ zWyHkzi^u{=)`GC+#xOvf^5OW`tmz4^2ht-Jonfb#@}Ky5k@9o0=o^YI<@qb7U+A^I ztz0nRK=xYS4_b74O>duvZm$itP#Rg&6CL9AFisY_;9;Qq)&^Ux^yG~l^eOlYlj_p# zG>!N%u7@mX55k)fkGg6cEl2U1rdZ-2+CSvTb0GJIdk3B7MpZ6T6{-Y;UnrOD+8{rC zPeM7CQ^8nw{76};qUdY<4XRF7Y@=&~C%HkqLsg8HAJzs<`_*-j;o9i0s+CIn7xEGE zXq_T%P7=&>Jx=lU_*>@TU+T3%>Gyrbc+yjToY@BVqvqoM{R+jn?*Gr32+*aT^Q{fa zd0Z!$8T}64pVI$G|K(d7O!3;pPt+4map&mY)ql3FHH;z$avND2e3a#PnrytkzO}&& z%NKsgM_Kg!|2*m0g6_+5zQ*!p3<17I)&^xC&~!OR`TxQrzmt_Jav=9Qhx~scel%4r z|3pIhucQ9ab^n77`Ou}le_k8hob4O!Otd!G)A-upaWq_Zjjj!T6?_+QZSZ~)za(pe zA6sGevC+!lccuo5w5RROI4AL%)KkS(zeJub3HG+hhPFlzOsuRiu1d64_%>=}^hfRz zTr1piF%MGY6}cri3=szfVqcv55JtVPt@Z%N`-%UGnjL^EadhCy@1vj9tyH7Q77Q&U zsKK>Di}Qj3PjnV2?$71SA&b9)*rrGBZ02=8SrX(!7qP?_FAG-Aw~W${oOp0m`G89b zo_uiCbbMGQ`Ay7sm0ztbAtAvZi*&y`#vUKU*-X~~5@v*_9Tbo^Z{M~PM{V^>n^1@=gxJdpTwCH%p(}NG+O4oQH@)WWx zFGL<2Y92fm@gb48CwgMSTH__Zk8iP!{z5J*F1oCj?Fu5Ex3GRlN+1{34@D2?fot7T ztRKqj?c*elr+Za`zu}>GQNwkm-|L~ne%Y1&RnW~_ze?`wh~}byC+JlvIj}T)0~gzI zB^kk(CBWW&#llpH7Xe3iVWE)@k4$#Jc2}nvB;wF>42q_CMese7v?jQHYIyr3?HMdD z8xGIz8J_cG&5NG>(}n4qtn%#h?pR#pDyg}5J|Mh&^H|E%X-Om5lEP4z1B_Deob-hKGI)eIIExKTb zp!?QQH(2S(8#~mOU}#LLOSjWB;t%Vn1{+K(rDarDg8Dsn14W>&P`|dz*a6G0`F(pV z2YHXqJ5|PzWjmK_#GmDL)EwVfqwA<=xdVE29{FJ%wSN8g+m%IrdCv&>2zhj!B5qC+ z%yYfe*HI78Q~oC@-gW;tPXcbC>!^Rr{D7tEIo~?!7(b{dm>Knk_p{WW^v%9?)YZI> z_q-RdbDb3}}i(E&2n)$z0 zm22&q&nHN}YaOWMSVwfNqdw;0KhFI2{i90s{r{GS|I5sOg3Av+=t=WG+GVki9;-&Br?;M++5!Y_LL1o5M)^*ZMB z3CsV4NB;YH?NH=E?sX3N&l10D9reY8^8cGhe#s%f%^{!HQTwy>1-T^asB~;-ccXhO z@8@TU#7B*;qmF?|)=>vPxEjGm-6i>rxj&|ZRGXTv#@gvksiqa@;~R7K;h)WwwbCoh z*`VIzKmiAtx9p|2O4`$TVOB|-YgQbuz(VFK+V|SfVk6L?)>)ig+FpT&Jh)Hon%V*& zrPQC8Ru-m8eARl}9>7xy@nTRBqPAK~OutQbboBs@qM_k-6EeF;%8i1Drb z#g97@XosSzb-$s(qaS#xdhPFf!FCou@e16rTVJNtw==X2khTM2We)!zpw+pn2ajR_ zZkBcdzI*WK+*(TgV&&^?A9%_v%t7V``p0_%eK-0~+l4)Vm&zW%1w1$xaw%>h#k*`* z-^_S5tiPF_B&@%Q9?;X)y7RUE#?z@P0XryUf1^!aKBtK8O8;Lx^uPDeFV-2HH}8D! zwyis}@4e}!+js2F?%uj>=Z@@BzRWlKL6)wHxG>*!a#|Zpm0v- zo+vv;=ds^AUdm7IPE=0GpsRCaMvmFMb=Q8g0yn-Zzh`LIep<~c(Q?)B_KEUpRwFA` zEmWs)7!}DJI41B9#s)UMS<$5}3D11#5f3MMN_wF$cD+i~*77N+at@GPOlJX|d>nm4NPB zH(GC{CvWVa4#5nVRF`h2X~Yk`Ko-LcW!6mDSM7nGY?q^errGi0$8!NW@_fj>wK849 zyBVUpobXHB-Q-CsA2NhrESCLeth2xPUE?TTKRp3ysrM^Szfn2!AVhXcqdE!N&n$nH~Is9?(SiJ z-^I6X^nQTBFfk zuI0Ls_)%3F_n+egW6UoX;gc}V2Gumgy}*KP{o$5$`9J01|0eU>_rKP`@7w>k(b0aO zCoTU!dgOne^*=~FaNxtcTJvwD{@Hc^Ut;<8{kztUdWj$U*YCdqa=c9!1stTxUZ0U-!r#bI5OV+B)4%oygMW$C+;Bt`jE;uT zRB5JTs93m*PScs`$RDKe*!aw}+-J?TsjQQpF4r-eUm%VZgH(8I4l9?Tz05UPI4Daq z@CwjSPT4OhX#JJq@nZj&wG#~vsBI8Aso8XC)0tost z`FK&KA(6=7dipmxRd*wH$BJ~8Lu12x19MnDJCRm79-sve-tk0B97wZ){?WgM^^N`6 zk&E^Hu!b7Md0eUQ>kiV5?;|?q8ruCF z5nTInzT~0*U!dzu5U#ghr`#9VV~>Truz`=J6dFcw1VmS{Jawu-5NGWk6Lt| z+QgI%d?QkRP8NN)qDy%;F@33UdYMZuqk=$(g0I`SyN%P^xVw$(OL;L|f?x7kPkuP$ zZ{zwgk$!M{GUpN+u0Fb*rV)R@-OV$lafggYiMk(KD%^dJ_gnmtDhD_FG8JJn6fcuv z&zwA%d}EE`?k_Um$5rN9e!$($GpW=RWw<)}tE;8le+&5td9+RuHzx_^xgMwZdi*W( z@GtebcNjy|b5ByFtNh>3#NG9nDb9zx|1|Sss$0+baQ7Q|-AmqMc<!YS??{o@^=-LouTcJg5Z)&1#2b68>QqjAeed#h@Lqei}yBl3agu6d~Md~+x ze93V4{q$Iws<~uw_iiuleis$qgS)F4KktrE)Vk1k64W5|=M5n9w^5zab4c!PD))TI zd=l}<>w5Y(xynNeYIQekDEy0l6z`aN7(J3A-3Izce~3N_{etbnK7I*GrOSw1bzC~)0bwZa@%ti)b7}uE(9N5nsz5lS#zp_CC!h0+-zVua z>S6i)SR)qF9mzoA|F$x{Jc%>OqYPj5Mfin&H+hoEhYaBt`IoBQ{AtGT|3q$-uiWg*RD>N} zadcW5JS(}X)(!=H8Dr>8j|MUPAN34hRGu6w6`;V z()K6)g=Bdz^D8x#@4sIX@>SZOkdH9GgylLXo_VgvDPG?bScJa?fjaJT$L}#AuIHYi zNLT;yAs+6YU}n@C-my}D(tr5y`zyFXy^r~Qmva>1lJCNA8^Q0hEWgtynCU+JUhqrd z$9?0T_5A}Vk$0sn>IBPQ!$j~kg5Q6d`9;r?x7O7?Bwy2zR`7G-hkO@)f7rwSI8STr z`(I0W==;Z+v@ZECF#ib@h8*}@`2Ej%_}|Zpv&-+o@BfE~e}dbu&5xOpE^Uq@aA&<=;g7 zQWiUDiS?he_%@PX_(iX`5Wfq*mrNzS{z4#!>*=4KY;x5dK>RqwboGNi*p1!Op+XNo z@bX!t$LB_Zoqc}q?EdV;_*6c+*x&bX;`jcBvDB!29mxT!x1P6v)f;65tX}khkzK7z z*Q|_25%3n<)?PaF14PICM7z%u!G+2HvWNZ^&~+vVpI2LZe@{^lq3`O#>v;#6*^i9I zyV>q3qx6K+H}<9a7QRQkBxR1mr1*mOp-q?9sL)04!XtDE>-30+lRPE8&=-r-OL>Nk zn0QVlvOp3z5YtkzH3wbhr=atYA7rnc{kyopQvNtG{q!ojl;?Yyj{KJbr+*U{0Mng- z)3Y+@!qdMpA?Ki#BP|cwEvih~ugo)BnXX}h4AEUq_$BUg#pxesoc<5xM)}IkzDz~f z49Lr**z>qNn5@`^;`E9m+o1f0HBQFFBIqMoFGSNY$=#F2UUF|Kg&Kh8u+6Yen?^%8)GOOc!IK8YB2tV!{_pI+fNBVW)w8vTg8kP;d zMsWI*%-_QNa?!eiHK?W`?fs0COFcop3#UKm;TN3WzW=q9hra)#9{#Vf{1Ye)Iq*SG zn&0T=(x< zCunore@Ay8f9JrU@AKmHn>RQ7U4)&|iI9B3>EA&oRmwahb>D4KYHn@nnl&q%Pf%mP zcwOc_E#$wLIQ>2nzf?H=E2~oJ%}r}lf4XR>z6zbcGWEt(2E)hKfTcaHG1PpKAco3U z)UmX;X8RUA&-4Gf2>pCWLFy16D}`29am!2e8G(FB&b-Oho`JKA64R4NE|I1EJb(rA zxt{(_j`GR@HHuo|U*`|{QM_ZUb8zUp066@A2mRA`0PdjRs;_?)>DJT#2Kv92{@+gj zwhMOl7uC*wp2o3Aw0^9zOffl52U$lZzxJ{0*bD{6MoJ^bpDpG`qxMpMuEb%SVa`1XVa)=X;l?p{p?1@8mRV^U?oRX1wJ{xS|kl)UWlOoNUq zoTSlo87B&zr=8^$5>1!+pwL_5+@oliuR`bGdBevw4lel%4lZ(AI6~~+mkJ*j%nm~g z`&=1W0{|Vmm2+jpMhkTKg^qCq9OfYQxivA7esEth2ND{tKDwQz5kJN~$Wvfb;mwFg zUG>2wlBIS${h7Q z$0@oVe@lJ#XsL1VyXKMqq^JD5_@-`~hu?>TpJM)n+N;0hz%lVImHLzZ>jh8wSMx(P zU-{1wzpMW&IdIHIaPSYXe0gvC)ab*(kF$K?$9?0T_5JT7J-cvFu~(P$xT61&dzGv2 zyqTmp_$0}fyeRv!`zH6FQcsZY!olzN@UP+ex9@)~oZzw_bPJzd=mpVOX`K{Lr09D76j#U&zGE_G$< z+U9ku)6Lg3Uzxfsb;pXeG>B<>Ta-qjAEkfOr!CN6+T1A}n0_9P8t1%vdQIg~9gsU2 z|C-^yp@_0MLN0h-Fh{`r0d_sD^l!U>BQ70|7_d9Lr5S%X(?axcshw#dC{1;prQ@EX znubt1?oC{D-NTqQRTt*gL+md4R?us+u5ZU$?s6N$$^?tR5J+$pi2e}E2c2JUG36nP zj(4dzJ0H93KDxZ7(0SwZ5y5Jt44}WoqRV&)bl6Qw`t{_8!?*xrUZH~qhyEX9dF_03 zoi1rOU^`~K!&9NM+A?Kdwa0EFh`E9OQ75Qh+hy#4<=6a}f@s-DzKk2-u*C~6WZBLo z8}V|M=P522+AZ3p3^!!ViE+J4K5PZxa7uM zXE|32=HvC;If``2KgIIpIfeX2u$}K<`7QN?Q=AXmdCDOlWs&wPffY%}pgl>Ua<5X+bHiaZ^@nfW!ga3}M(2_s)MKhjBA?4)N{ ze>sZ}ZCUt5e^bQo!WIs*d`T~P>+p|yg)KakQ2tXM`GXGm ztq%E<`O-+XJD(lv>>*@G?qx z;+%T=Y+M1z2OK5?=8Z2E9h0knP_+SDxHx->1GZ4z77+^Ag3-yPcV6bwVGA4SmR%SE z<`XXZ_knKIRQ+4eo`<{KMvw)5ZO139%A6hoe}tuKT;anOJ>Uwg47vnd!Hl)^xHwZ$ zQI$`(?WM*Q-diQTb`FU#f*D9uCk(hkwLT;Sec5iQ&p5PY!LNsVM~J4&gmfAFBya&& zaO+QS1sQPrRO!PNcJm8nkQq^Ljo=C?uGEF%3ZG{AGXI18MsS67EWd@z@4NVLg)cee zqb$;XrCb45aN`Qkvi@?ccK zoex~$=c(|G;|gQN*{RYveGPqla=K6~b&M8@_g%w$G(K`a~N%;V^q@CjL_YyK#kZkY@w`NxWdgI`fkvT`0C#p zydhy%+yDr{ulO1a;^SNrjX`|Mq6ZA3Qe6RqxHK_{w{im?t5j9&)ALn?T^Pju462;s zNDRXov2A#a1qIuN>I%^P-Mtj;s)I~5TR9|iI3XM%535>8@ikKw@&^J2;ntsE5Hbq) zY0!s39Omb5kQq^LjbIR0bEPg6gLs-O)nZ4iFw91eVq*ft#C``7Yx*k{`?&HQb#^vaLs_t`eQ!urcGEBG40AWkMMzt6Ve zPM&w$?WYk8;#5NUKHG+Ahx}I3f#^@l#Tdk<&TM!8Xd(aM{SKE#qWw(yWe57KHSw9Ha0)JC&rbNeznlns` zBUAhHGZLC8&}pUC;iebi8*E|UM7fJ7d&0g6ql#~*eG>s&h+^!*#!DEEkGu15CPNhE z=&^8(t;!t-doU)$a81T$vTo7JbY5oX)REVAT=*s7-Q-CsA2NhrcwAd+h;R zXb<0Nu^yUqJd3jk>`hmFvA7Z+>=ukJg55$m@3Hb!H0}#_3ue3LW9^sSHKnm zwh+Dp%UxtTT3y{)mg%r!uXO=iFgi)cr}Me=gPl{gE__QOd`qIXRn$@fwh*udjjN!Q z1Z<)9Spg+r3)OlFdm`M}O0Zj~ZYL7bbK_vQ@a=845PwTzQ%|zbOvlfsJ%Ld`Rg>c?NIBy}Gw}AfOVqgm!Nv`X>h43wj@Qq5e$sGMB z-H(9xnT#uCKSC?fK-Y8I4AERp_$BUg-wzSKB_TC!u4pT^+fD&Zv*Wd2rw#id-1-~R zit~gobzDIP+@9h`zH=PIw1t>W5o{Kqigf&@W~Eq{bc7xJwJzWa#r*zp+C_E9 ze}?0au-fz)jvuz@;S9%0+Y0sym$tn^z!fTO6+Vp%1YDt3C(u&{KjgH1g`rk{KS^G# zQ^W>b!RTnvT;ln3Bj+rHZ&b44)J1R!Az!Zc3ISIzH7xiO>fMDa$X&V_(ZhFZ9@O!xuS8A~S~gJrL{|f*nJ!V+eK(=r}G0-VnY~S?Sg7?^M|1_;A)^ zMMv=E=s(yt$WhMFh;bS5sH@$U5OoFpYr786!#66Sg<7ZQ%K?LMV+a{moo;VhqnA4d zA)|18-xBuOHiU0f8V%WV$VO}%L^+wv;g|);vJh^Xm-JTu%5U?r!oVl@A%hFY?28Bx-dJ-G=iR zpoLne=j!3CM>n=HRI55CC7ku>?!UrWkEXdS6k8B%Li&4Yd^#MyQE8^9Y4e>!QB(8~ zUdrUOzI6C0O6Pk2Hu{aq{_K`5qlxSry2Cdr%f<|S0b21Z<)DDXkqxi2o*h0V-xHAmcf>Fe4;Y@~rEd*>q#xQc#I6{shG)>alSB#M`T#~VpjICOk9e~0rP z-TDjIf@yAc`@y?jw;yxf<4Crvb4z^SV^?42rY&7tHuaNrLRV*Jr}f*{L!q9o?w*#| zqo%J2JSBP)?IQGfiqA>NHxNdsT%%G9;Z>sF_muW7zA zbzAC=6>I4sXnI?eMxjs8zme3O8W`U{UK*KbxpkyC(=yOMnbKHCd`jb3)N!CNNpbm+gOlSO1BKDq$^2Alremmq9TDcd zN4k&j9f@$>W3d>p1w6du0=6J}kY3k><@ZvuTi8g23g3~Cnu#KLMZtU!r*eMlRpYSk z00;V8=wImH0U|lju~$^+>p>)kF&)la6gp^d7%RUy_ErD*=+&u`hr)S}W~@^loUrOL z9u?{};2S6%>IC&`yNn&M{F>i))`H*);k-vndE|wzZ5MEbTAe^Y8CH^RZ%i&?L_!? zg*}cB7(_)!@a5>=H3mbR?J)MhJ5G;5FfIW-DFz_?#1gx^={Ko-$Pj)R16`_TGKBLU zP5tU$v=!S03?g6H}P6K?{PGo z_t=1S0|O3yoi^ZblAGGRfCHLVz#0P95U_@THK5P97+Aw~B-drz(Bq+R1)ctDTs?C# z?k2~gY<8wJQY>XB$EWrc;!t5)0%O@RdJrmKv-E$@@EG& z*f)%2`!D*q%CfuDw zm#f`^?41bMg4DFR>M2XW76P`Q+XPyQ*ewKXq5ApJp|zg5aX6E~XewX})h$N9f1mQS zpGLnWkz*JDSW3AN^m%B2N1qf>BcsO9J+In zo+P3R8xVfjk=Juyp-2~hz!r?wTIwl};sUl{+RqAguuiaBFbzlE7t)M$c(K?*Veeh^ z0fp?Qec8Uzkwn-6PJM(+e%|ARY-FXISnzp|pCD%QqHN^6$Fbt{FEus0&?jR<=q!rlmU8y915#CMZi*WL)<`3yH9 zJqoK`&E5!a*W1tr3HxjWIeQVJkFtEdKjLAF9`;ADGUyWaM_iiwBi3*Oe_y4lVxOK< zA*_bTak_~`;tVHQ&~r+l3P!Yw;+*GY;!@Q9X#VRdi8TzYWl$8&zn$VWO|eu3b=upR zUt=wqDy~XE_i+JdaO+=if{NzczNN+)WZdnR9!0+W5o7%P4KgF%f9|`mM?N37v}+M`6-g)lK)mFwh&J}=ffGk=8%uFX!*Xg7c#Cw zS^QEa-~I^UU+De_!3m_iB2R~X`y+B({x)IctLBFsSN*-f`pa2-jhwyk5X;x{bl7+H z!j0Ui+U@7Ns4T)S^v{tTjED3$GfyOx@532(JLI=ITgR2z?-;eecXn)IL=x z<)ik|!X&=85w#Z!CJyBGn|IyuF4{yrdbi$jI^7aVsFe6wdW6H_Z3Gb zDZ8=!-r4=M|GFsN;>gtgJV`SV6NS;Tcl_eu4zUW_vjctnKxB7!b>6o77TPL)%jERL z`?gMQ?H=zR@7gnb@1dK!CnK|oynTPMFgx8I?;fWcASD_fZ)%jie8CBLIlBT;LoR3;)17 zM(iV`3{6C{?I!H+Uts(y>7~XncEUSH=;VzZ-bupCq`GuFO(Xt*f0!}hLg&9Xkg`!% zsCV0C?11Ih&yw%^7x!}mf6(HE7qV>Ul8yMs`G(GL!7v=f_gZAkBjaD6oyB7;NRNxP z{D6NnR{x@Z)Dhef`qw%IJ%gVF?l`5X$FJL)&hm0UA428>`o1OX!#}>o&)*;?M7>=| z{A0i|f4q?RhkT1r`U%`W{L+4fJ|F&}+n)~KPK_7sSNFd|u10OiCvWV2kkX+K(@ywp z`~>#4Dq}0lT$>8lk_H38~z)Q{BsWZ>#h7m zzThWa*}ne%B=|{Ju+uPg(Ij>ny$i)pP{qMc}t>(FuzRwx#G)&!uZ)8-rQ9Y*0QM9I2bC?ju zE9jGC+#*jvE7SEjHA8fl6Ml)in>VNb;3J%Z}r> zSr19Y?YB6=<;EV74g-(HW_7s$C)9w^t^;;rp5)g)c7mR+)}>?X02ke7BZ6M8 z)}`Z~&qde0AsvcC$!yyZc{fiHUC%3#BleuQ=ud;L)>V-H8y@<9104ypOZ*0D@9T>e z+d*Upx_Zie)%L>FOo_UogQdL_dysW!IjZqq?6qLuBC1E<0^1OAQZJy}EtQvPV*3ZQ zNU>wF?O|;D7O`nTv+&u&pan}lj_=7!+!Jfo(YpFK>@BVYHQcX{ML&Vo9*PzbvEuU{p8 zh|>M{VV2MA<%^VG2){+?T&s=3Z{u7pdzz<3zUlyy+M}SKMNzdq%_$JcwV6x#SC{{9 zDV?kSUf_f|=0wniGrdauE_)i>7o3)-!*8bhcFDhyu^qepwp#fKy_@)5_B61wfz$GI z_!f`+-46L1to%g2*wbvvZr+^edo6w44dYzTT7?ccS6r>}nA$utmU2u~;$Jk8fOB0O zdmP!n)MepZlWzRVoh0B=&UPO5G#RyAJewYSwqL2DO9_{{iHfDiQ7Gw%hdu|o>1>g# z>^@9B7yTzdFQ>9R4d7Cn2|RK?_;vB7t_t2%=}iKT^y;gE1)&-Pj#L>J$~X>VON_ZqENmr6i0fK%3RA2IFf0g`+41N;0fFrr}w^$tMQO0oxxeico7ZOK$f#pj-3HcWiNBX8iKFT8PSIV_m z9BCUheish0h6T-sBjt%7&yRF>7U7E9P+;s|6*{YfAPrwl0*Im zhkU`2da|24`x5NS>h0?6X^CC(^K+ko(L1|j(cWDCT4DW&)n_9+wL3Qc4&B8k!)9ow-sQx zx^4D7bHj)B?5#%oh7OiH#Kb3@H30H4q!C@{vyh}7(XZLIVlp-b9c$DNal(GSf^MVA z(-s}JV&V?72kC8VN1j5(_)H7MiLIDzb7tF+CBX_?t$fHEJIEDYCe@|eX&Uhdn=>!h#!a0Y{%!R}X zPdMb`-74)@-m~*zg-@t9tozSVYWyy&>oJx;XX)S7fBii1}38nDJWkx|6dZnOMfklPvtB=7gqQW#P7li z?@U0in(^o_*t!U}T<<=^0uf6^g;gG0Vxg}vFH(Ihr!y`7sH zJ_CD#%Yv#1SRu4v#^9!kr9~Key9R4d8`a7QJb+E^26*^d$!Qy86a9?HQhnzhlq< z%13)5SOpl$2-XD>>H!Y)HL=h9Jj{O3F}@RL=VR;FM;AW4OOxPy)69VMcI%dTgr*<1 z(%bl-jq}-fp4>aeE_k;K{wG)+=sugk7Ark@V~6qxFO%xh?KF+}1I~A8;(TJ0^G~WW z(JpL9>a=Xmlr$U+gkkT_qD182LCINwf(d|)#&CobbORC%aBjkD#rQcqKy?d*3u=;M^m zg%gdje0e`Zt_$b;6_5ND)o)1|r2G>84dQps22AnTGPON?R$ldwYwiwZSM;xePLH+^PySTXC=I)9)4a{eH$&K z?%RiFlN|B}qnWaKOcmO<1o;OHu<9u?fq(&u9s&l~PO7lae)~MPmk-iak0%lJSr5IL zI%rq=l864&pz}Bc`HFkoL&sRsm4B2R8{FJU*x(ZMG4tCQF1(}MLMDi%!r;ivftz;i z-Ia$C;=t(ez+PA&Za+l-_wE@U*uQ6z?rd>Aa;>rBz~143kyy?g$vH@J_K~gQTx{!D z@2jodJqv_8Uo&`TCpT7Vl2v$TzeTs_)`u;6uxn&x&_&N}at>N0b;XA z#E0^0yt9+@YmLg=xV>MO5F3>C(wO8FwKEy&j!tkd+Y9l6<=(nztCHJt_w z@(R-u7|V{$6tczqe)=v=@euCMwviJ%G|-RYha84R7t#h#>I&~G+t$vuowIG^q|B%? zU{a0P&Y{&wdh*5&a)a$0E5o{2!?KuqxnfCjo*urhXgjnE+ac`eCc=4owvsHr*5B(l+grFIABRe|5`nZ#ga~PM?c6Jquwqg zmh>XampM1&Uq~$J6^DG3McS{FYd$Qgg?MbIpC8|OdTUuwCo?1H!ji&ydTuNy!}`lv j`g37POLd;!DV8to1i@DNXL8x@X{pZBd&(i-g(dxOV|j>h literal 0 HcmV?d00001 diff --git a/source/eventy.d b/source/eventy.d new file mode 100644 index 0000000..ca83316 --- /dev/null +++ b/source/eventy.d @@ -0,0 +1,181 @@ +module eventy; + +import core.thread : Thread; +import std.container.dlist : DList; +import core.sync.mutex : Mutex; + +public class EventManager : Thread +{ + /* List of signals than we can expect */ + private Signal[] signals; + private Mutex signalMutex; + + /* Recieved signals */ + private DList!(ulong) signalInbox; + private Mutex signalInboxMutex; + + this() + { + /* Initialize the signal queue */ + } + + /** + * Event loop + */ + private void eventLoop() + { + while(true) + { + /* Whether or not there is anything to process */ + bool isEmpty; + + /* The signal ID to be processed */ + ulong currentID; + + /* Lock the signal inbox */ + signalInboxMutex.lock(); + + /* Check whether or not it is empty */ + isEmpty = signalInbox.empty(); + + /* If it is not empty then dequeue a signal */ + if(!isEmpty) + { + currentID = signalInbox.front(); + signalInbox.removeFront(1); + } + + /* Unlock the signal inbox */ + signalInboxMutex.unlock(); + + /* Only process if we got something */ + if(!isEmpty) + { + /* Find the matching Signal */ + Signal matchingSignal = findSignal(currentID); + + /* Get the Signal's Event(s) */ + Event[] signalHandlers = matchingSignal.getEvents(); + + /* Dispatch all events */ + foreach(Event signalHandler; signalHandlers) + { + /* Dispatch the current signal handler */ + signalHandler.run(); + } + } + } + } + + /** + * Attach a new Signal to the event loop that + * can then be triggered with signal(ulong id) + */ + public void attachSignal(Signal signal) + { + + } + + private Signal findSignal(ulong id) + { + /* The matching Signal */ + Signal matchingSignal; + + /* Lock the signal registry */ + signalMutex.lock(); + + /* Find the matching Signal */ + foreach(Signal signal; signals) + { + if(signal.getID() == id) + { + matchingSignal = signal; + break; + } + } + + /* Unllcok the signal registry */ + signalMutex.unlock(); + + return matchingSignal; + } + + /* + * Sends a signal by putting it in the signal queue + * + */ + public void signal(ulong id) + { + + } +} + +/** +* Signal +* +* A signal is associates a unique number (used to trigger +* the signal) with an event to be run on reception of the +* signal +*/ +public final class Signal +{ + /* The Event to trigger on reception of this signal */ + private Event[] triggerEvents; + + /* Unique signal ID */ + private ulong ID; + + /* Get the events */ + public Event[] getEvents() + { + return triggerEvents; + } + + /* Get this Signal's unique identifier */ + public ulong getID() + { + return ID; + } +} + +public final class Event +{ + /* The function to call when this event is ran */ + private void function() handler; + + /* Whether or not a new thread should be spwaned for running this event */ + private bool spawnThread; + + /** + * Constructs a new Event with the given function to be + * run, `handler`, and whether or not a new thread should + * be spawned to run the handler, `spawnThread`, which + * is `false` by default + */ + this(void function() handler, bool spawnThread = false) + { + this.handler = handler; + + /* TODO: Handle `spwanThread` = true */ + this.spawnThread = spawnThread; + } + + public void run() + { + /* Call on this thread if spawnThread = false */ + if(!spawnThread) + { + handler(); + } + /* Call on a new thread if spawnThread = true */ + else + { + /* Create the new thread with the handler function */ + Thread eventHandlerThread = new Thread(handler); + + /* Start the thread */ + eventHandlerThread.start(); + } + + } +} \ No newline at end of file