From 39a8c7402ed0431a2181a45fb101984675998a1e Mon Sep 17 00:00:00 2001 From: polsevev Date: Mon, 27 May 2024 23:30:30 +0200 Subject: [PATCH] Getting close to finishing chapter 4 --- build/report.pdf | Bin 1018143 -> 1018566 bytes chapter/ch4.tex | 17 +++++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/build/report.pdf b/build/report.pdf index 1586e6917ff9b4ea5463974b2b942d4f28d8b677..e0955841b7e53391469e22948b2bb6b78a3c5075 100644 GIT binary patch delta 28816 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�fc*u8U^$T zR3nIXg&%U5GEw!uk0e31R>^&h{E9trq*xE;$QpjX4QWFk z#!A+ba&LN;cialsi51=H0%)g3bn+8v(ta| zf6sv$*p>xn3cjWev|XrcQRc+kU-VFa%(P_a3%d81S6F9!h>uJuJMYY7V~7tKH-)Yr zJ~`S#!E&TH*?`2w^$XcEWo@q9it1#1GjdqXGtv$c>U-pgKrGWj`MMw|9%ID-oufl$VR7U!ZNjp2wJib#`Q+c$+Xb-lGhH ztmcCQwwc8!lR7S;w`O_DUZb`1*@?bhD@235)HF4m+;{k@@Lnhc(&?W=XfNQtdoYWV zo@gm>0k0!#*Sf+?-5@w%C(piu`P`&Rv5dlE6`q+#S1SP!$tVB|ZH~pW(^NSa$+oTW1)9g?+t{fnHK9Fj1RihJ_W5CLBIe8WvD=S^S zgG>v?RLG)i!*~iUZ6Mdn3YE&(`wH!USikKZH+UpEQ$|1b_**V6>9k}PZQ!~#zo!wM#+ z;^~7@jw5>cd-$%>!-?xzEB2lxQq&C3W$n>nQCdF+;$0ko;o6%u-?`P^j*Wz$Od|NM zB_(t&GC}7%n*4wyoIR;ZF%de648rH9b05LXcAr15k9{*dH&!8u^RKa&-=<&1tha;y z8~~S!+6CW^Y7{%goHY)!%DpPnG2TuxXLLndjD4;?!RgN`8jaY|59Fgo#k}`ysT)xl z96nC4-7`f3Ei&taUy}P+Om;=nooLz@#RZ_dBgZ6+dR2;Aeyg9IdHeVJ83l`KYH|6P z6DC8xh1~V8Zk6~QyG>Wak|O*exzFy5KCUb-l|Hhd%&MM&4LN5#v1ZXcRTnbwc!Bph z_=M%6YdA}Ue=JL>HT&w2M^RY*y{{scDe4Cn;mK`2b^qA|#Z$ zp{FttjhLBPuKuEv?#-=LLSq;jWV0(N`sK<8__>UG^zAU59Q_x`OjwwJquPTsB0>BT zOx!j_zBXN6Q#k+tC0dxniVR%UfL^x<1ItvwUvVFTZn};R9Fe(EnU}UU zz!ECuCZ&x3e0>bGjBv3nU-gH$l0&Xne6YHNqjJyp!_-602DQ|Ixf}dqImbm^(b}bB z{&*$Nkt>jVHoZX3$np|QWKd3n;>{Hut@!n)+3-upXN5x)QdNlvQiIUO%yT7XYJ-8x znn!n2+AvKIrw;^Klx25z{l(bzh@Bh}pg4u4RZ(ylOJ>G;ZDM;DzW<^4E1uBxAFc}Y z6(V{{)jiHJGFQ@?KF>s+m1e@C3EBSq`u2;2AH#7XqXqN4!b&WM1lZGUH|rde@-6km zz;9Kn3)P_Zd-da>-)qCqy#|#rrU_p%d1^b%McH=!uwEm`o~1>p;-6KVe?2VD0I+U( zqP!D#CWDc4Hfrrgix)=0;4cq;C$1eOm`4FzDLhF=Kfwcg5h+t=sq_P1l|vI-YMFc! zwrnA}3g>?XM(Ld`zVd_`EIEnQBN@R`)VXw`V1-xK7r7|iL2C#y*HalILDW;|ut1ad zh~pj2;>9*b-`8^${D`V=;_Q_c1h}ZS9HWEkT26C5MKT0;UFhu}$WS-vo0!72ORpXI zJgq5My7a9xH8$&LVe8(^DqDk4_MW4iNr#}CD&o?&e)J2zQr~d%kACO7iN_{?C@vbL zgGoh~#+0-s6Pt&8J<*e)`h-_i#}m7iW5b^I+zt%cO}b6K9h1bRtEtsLbM{?=qc84G_bjR|5n(VM*e)70Ib0y_5dj`%CwTIU z0Li>HwkPhp!b194(;K238;#hGi-9pUALzz0#yaV1IyxUS;j?m6IP^Ln_b}SW_+eP; z?Ax~&rHB`RgA$Z@jHk5g@t=2pB=^fhD z!JtZLMuGPIfrs1kYlLS0I2b0q{XOQb1-xAayA!^GrNVBfx1lJ7tN{WTm_~VKH#iIH z+-J=X!$6gj3@arSgmnst!k(0a$GbBYIk|_~{$@6WsqNKY>u>$Wex;(Oo#&?FO-p=J zOwFwEreMmR9=^AdGs7xPF>CuG@M=#}u^=axj5<&!K!yBEo}o(3$lk|-=y7vO0&{1t z`E6-!@|AwSfK|N>mMcI?u#crn2c1kK`zlgXDsychFjYx)k((w9^;~e(@;M8{bzz-bCUBsnKNd1H91V(9k3FZ z_Glr7z|hEKZtG5Jh#qQz%H(!xMKzQFwOvlKUtxSktzyv)rRS(wfo+LzLpA*i68wzQ zLV)2Q^!;u%REnq9F|%^*_GeoRC2=YP%p2aLlQG_zCf>!c7;1JFPkQVL9L=AK8-83B zqmRiKA7?3oL%y#Sd2x|}dZKML+V(${U{`LffhyND%`u5!*BhjR^%wA`2cgd;&Oe+t zJNNIU5;Aqyp1t+5hB``X_CZBp8aWo?DobT0F%Kmv^!HYO!sZ$+2a4ocA0iaV-Bc}W zsL8@Z?4!=&``tG#cGXYZe`Y6CL|R0J=R$K-p|$XS5LR7_=Jy4h+(*^R=SH=1{tmJ% zHoewwx=DHV$D*tIxm>7R*{IiEW(l~WPm;Q}6gh;f<5)PO@3QcX#bu)>G;dRbWz}(2RpzEtv4%lXR;0neWu>O#V`Z8u zE^J=`i=<{zh*&QZ)Hgz2l^zn5RCVykq2JLy%Gy0K5srgFy3ueI#^ia>~P~TC^zSJ{xtz53dWsIy72I)nih4%p~pre5I6GTHHA(PZL6jBDhfP zuV9!+4P2SDidpc>{6~)7HH7-$IlX~Wh@0sCUeIglYeAl|!qfUBp*OsejJSo~iWam= zNLgYm-BP`|xPEK5g-Cc=7haTjGAD}#jMoorrBcxS;50B1I1_2MQ zM1`IA9b1P%OBK!>k`xSC8wD|UHkV<=FbxWJ+6K|ehzPwqqEV8FQHHSw0^lnk3M51& zh0`UA(eTkO6#V;(SlT60B-?S!Kq%E#2$rouAjL#6TxOAz#9Y)biuXdG9`~rOFj?XQ zo_Z`ZXR@O3gB(6U6b9F8b4e>G!3nAJ@66@MkqTzRab4>G~&70JEQ z_Sc>XY~bPj69`LL9DP%ky%i5h;Oy=F#af&J4qgUe$wv!?dEsEuRuXNBwI+er#m&HJ zpv_zpZ%7bRTrEj1Q?$n`52cRzBis;I7C^c(hUFRhUql3uhlF ze&iz9-|PNx6D{hQQtUGHUVk+CsC-7G;0YAHU4jE)>cxORj7!c#YnJPiGtvo{JAc| z*g~j^njwsU)E8db#3>uCpj^WkqS7E->f^380a;|%YRWPozzR(V&dFE2?q*`t>DJoy)Vp`3G zj+jADLVm=2#Mp?Bp;LyyonZLoCQM5x1*5|!HI=9VB-z=U-#K<}dQHIX?d+$L4ex>p zI2~N28mldG8^f$QUAx!hO>8n`Cv!tGl4H797A!A+I`M=yBn`O2RJtndxYbQgEkI!4 zHbQg8J*iFx%IL&ygotBUP?xPaYR9q4EMCuy(c-zItuR!sGa%7Q=JMe+`fFV&&#lYwa=Sfl7^I}h3`jXzXgj6L7|Mz zK*t;;Gh-CwhW4fj*_+*o(-&|$e3Z;@dbAe(PU;=zi`hU<&Byd)qVwQtv(Wf${W%wZ zHQ|T|isTk5Fae^9O*u}HJFlZ3k@w0fK0j#~fR1E|L~<3l%2nm4pP6;JC6dxWG_akN zq7*gB$nJ|{^`2h}TgYpvdXl}TeV%T#Eo?z0u{=KPfw^dGo;zdXIb0`!rIZ?E3F}vDnw9@Do3n zSqyj5seg>SPA#Dra{6{_V`dU{O7erS3Pg*hL&?>X^?B%P--C_L&&~8&$#O z0PX7_ga1Zy%*43FUV#Ckeen);R=&Zl{pRpdh6P2qgFlb2|D`;&C*!G}T&fg449w2A z)1A(FTZ1ilSziU%q|;dffb%HD5!C~Q6WOPUVsG;pmp(Z721v_3lkt7@T){(nMwZa% zONiw2=cjYn*u-1nd#6_jLPG|In$Oid=|8Z5A>>CQfowa`Ua>WF2%^XlzRFq zDhn;}Xu6c4dqb6@uVFS^48%Qs{h0XJ6?jy5$NDI*82FHv=OqX@dh9}aM9uS;s-vP- zkk8@wyMoMf_VlOhpQ(`yRzkTwZ^y$p{M4p2EvE{K`tCU&6_I=vfiK8P5IpF!Y2`@q z=qxya7d$ydp;Gg5kO|cKW0@$(8?^g9pvU;VdxloNXwMI%*APM7wW6;{EZY8V)==9K zs2<#@?z3)Zd$XaQF)kf<>P9RWg$bnW zK)Qnq4LUuHWq;SF4->v@C~KSU-!Dm|Bnw!p=#VL>U+huZ^yl1LMF0H|*@pxDiTw2LzC+R4N#GAZ z{8S*|#=eGhK|boeAv(1?f9D~#*MX-OH2J(!rmGQ>v}E;%@5#~K_nLNZI%+Sb61`Jf z<vISxeq;ITb2@% z{^U^+dr{xxpO%xOlGjAHTiBkns zSadu?Xe_Mu?A>}N`0t93VeKrElzdCEOwg_US@EgCkyT$1V_%7DQHX4{WDHf++C%lm zV#!NUX)L&Rk$^?flc{fa9aYxbL-wY45=z#(M=39KxFP=_D91-PSC5XIOHeiKpm1(gb`)I80`Gg8XoG)jvvx@oAlDJO_VY zacffcK&gQ#5{bMGQf2AutZ#f*fE7{y4?8tFMH#_+ds?MxyBu9pm5M{`rmo${(oZN)4yR zx;AKf__{s}bbOs6Q~NNxD9aSAX6)>na7V79v1LAd7$x02+Cto!n_OHbKYxospyj!uvQ&3D-*UT)YO$!y3c(QBrF2KOADDb!N~za1 z)H>uv$AZk{%?Xcrl;=g43ZyI5$<*k`_xiY*T0bqj?e2D$or1mQf0hR3T@`Z$A|xYg zob)Jbm1SgQINrd;+`m_BImA@DvHa$evp7%9aQEi;iX_hY^O$0El^|K+*$2K=T6o8H z-!O_Iztx%FbY|}?kBNNLODpNmQ8nAj9jly2XPW(@!lc>@)Vp;vG#kYjYwxbM(L!S= zodmggZ^Z>%y*q4|8)6rrU%vJj=e)ksa(JPk-C13oaPhF$F3&b=Wvo$rCBv9Lby@w; zc<9;Yt`V!`&N$M5Er*8Af|aN(rChql43a~?)kXh(I;M|_whj_K*{lB<$W5QI?y1r5 zHl#+8TZA`-K+7ZJ@u_TIwTxVFq)Kf$Qemg{0|FOmEfmho-qa;!fdv`4DZ&6*{0k)u zGZz~h4I?uJBO?VB9D|&Lsi={w86l-8H!~wMDm&A$tF#Y?;`&{@t36Y*{OUR7bn}idRi< zT`x;Zt>fY)TW?-RO+&*&OiV-+1_uXZCkVPUVr+h}63>B#G0&cRVUKX0 z2Fv=QBqYk^@Co&>Pwe|uKhDj=_-GENfw*`!=bw*E&MULx*`rs}lKO%ba2}&Y#bTBj zDXSa66y|~lB z4r8Y-r7au6~@Pje28;ak9OMOBl7-_kE6{r-i9wG5Db- z!J1t3m{dGSv&Lw~b==IKC_oF5VyzZi1xwyc;xS`ARJB76CC<1L2yS5#4iU9hrUaPK zwY?YWIhNT#sEaWLh~GLp9Nzdm|2fwS1^NhQq7AfRqaQ|Nj0M`T(hs#UMh0zI>xbhR z543pad!gAQroS=OE~Yna#VwK7YNUGvUcYr1Gq7EV=)Q;Mi+LWRQ)^7Jed{stOyCxg z*tyT?jh;J_6}`a$aZL1RHN%ls*cVQu7dq*?o|ysCGywkiq1xI)M&iP&$>4BenK7%e zu5q_9DWVe|irQ7hv;@ufiG0yxM zu~vX!$ItEszh5M-*wFH_AV!)b0uIlZay@tu3+xqoO{HJl`#lu8E2JKvH>d3KyVO$z`tp8vYR*QBhji%H%gF;&vNF~`FNFYc|R zB``_Er<0Y>$`j2GNW=$|bOzpzpeOe@V~1i)xjB!u zhbH=eDC?R*xOcN-D;!PlJsOf#K#V$?#a32XRt0KaEDBXz;}I_0%YC7F#;l2B&;|;y zJOT^7oRBrYV=?sIC-T2ryzcVXP%{t&1W$#FFv6-hV#jqWaY7Fo;hJwkI@(>4{@qWU zh!%zfn1s&$NE3Zfj5TjNj(GAtyqcCTS9lsk1Ml1h#=2DnxAQ=BMhiH{7Uo(Qk0aK3 zkDn)4^yL?Vzxx70VGD;h9P1KQALy}ROvC)s%j1dsZ8Km0NG6N0fB?E|PPMdDS*5T@ zS}rM_+6~K_5qd{3DIN2U+GJB|CP!|4^#h|zC@dYJ;dQ}AIvtaZ?%1;( zttu{@`{UR%vA$sAY(%`N6Y^T=Lhi3b*!HF^-B}(_NGD^Hu}+?&ErnG^0}99`<-VsA zvI$uam%}O#8jJq>C1?)vANRk#wGDF%SSrsGSku2eeZ?vACl^`mj-ICxm#fXXlHZ=~ zr449ftEEi*SPCZrs`Qu=93_@KbJ6jLbQCrcYw@{%2%oaM>H;&LP6Dj&kKQ#wuk#ku zyW(Hrd;#MpX08+D(zeUWICDen89p(L18aE@B21TylO~s8nj*mbKlFqgbYLIZsixzu}lhb_QN**=8k^a zX&x8Mw>XBdWHmk(^fo_+zoa&v8OFkh4DX0J(F1tZfFBPoX7?1%y*&mWzL_;cFK$7v zh3GiqoprCSHDWVPQiOZRc|4BexGO$ez*kZ4+5oh zs*_*R((JV--Y8GVa54O2I48C}D03(bEbg`^?$%|rcD-nUC>5nWTENu{&%eDo_|^;n zo7f;{G)WICmc4p} zo+Uprv#+8W3}EVPk1lD-_~NV{9oB3FAwNs$VO+Sn+y_rN8y%LG<$jCR~u z{@{a4Na*r@KtVjGx{t0I(PNW-E%@aNmR?Bs<>&VMyL<+Q%|bs5gag6o9Q=5iuAoKW z61q3miVAMF(L*(fu93z6XT^$Bb@DIi&dg z7omtySP%jffD?t|#|7sU^@>TM;&5^HsHctoo6=J0pMfaVi^@tMokCj-5N$gT7CI$; z!NwJLRd1~D1iZswze;nmH$2*vRlCT4&-TysPG0|Bf)`pJ1Azwnhe^oawxnnM&CZ{N z|5@-qzu-Pr76_C5UtsGslpHP_{r}>x!*}ApT==6Rs;K+Q7qeY)=huWc{{r4AEryrE z@!Qx6XFOioe?x1Vh2w8h^%r%a#5$DBU+Y7OSpZ^||G;1Nhcmj|(04Nd1L+Qfx4T0{ zRe4hWQLoM)-d#`OSAlpHrrauoDuknk$)mm$cb)GRP6Tw$nS&8y|3;1N-SFB_U5=T+ zsDJVs?TglZeXovzU;ej9Ajy00LQDmt0)RgKdrk|pW_jCv&5;Ls;IQR89NvsU$pLvP zT^Zhg-t9qiAI~&I`nZYB&(_*+OZ2h@8xQ_p4!nj>2jQB)8-;1nZB#BMJwQ}{^J%#V zX2rzlMA4Tk&JE}?*EdBond7(q`0c-a3;pJ^{o6H8gY`-uIQp)R2sl5#s9ao3ik^a{ zF1`65zx8R5xPJ!7-#pvF=zE{$UJm*nSqWejHjR$oUaG}p%^KlEtFw#r-*+B2aZ1qc z^Q|v&6ZKw>EBv5_-+dmzz6r&Zl?X{mvq4@xJAi2Reo8+TDD#&lDwHh^Nhx43ywxd+ z!O~j?Ma3r-s3s`)!*}|sjxZ(Rt2wJmiDC2+6mmb6GzI{-s;e`gK7&Yox`63Q1Pcr{ z-W}aDm_99>?J{KXx~Lz!if-6(1sf?J=qcRk1DF$o)3vPk^|MZ{ys>W+7EY{L1Mi16 zPOLu%Iv;uCcMQ&>^ZzFLH#q~-X{@y` z#kEhY(*nSP6qf5(!~0oq`L{E$8v%mN*D0Y&m12Z$eS-oU}YDRd(A)r3_u?k)XlL+GpP-7uLdYkwtaKhMFSz0+sIKRQxdT2 zbC$BPTT4uFhsgcK=uo#@28tFpjI@L61_iP5U|Wu5Cyo+(qCU&WVe5QgZ(DSVv+20 ztTVeimAl6`|Gc2#p95N%RAX8{{eL2M2N?TqCt{svyAL$;8U8crdiNtxzT_sAu~hnF z6nMS3pkUQ4t4$(fWz(7UiPAK(frUh+u}RHxIm~D$kA;LynJkvZdhMt<&+=U!C-9Oh z%DGg^K;k+xOp=+ouHL1TE_t$Qx+SlW8#mQ!X@g*THEoy7YEoZ5y!q@eDu08%JXPuL z;c=I$SZE8_k)V0#IqZIlF4Rau-^xqr#!4kWg^+@+M}U2eFgwJvvqV0u5fT{5dlU3a-!#>PnYmpTB- zrEAR+?Op35A-|>T=`x3q<78=?ez_SnEiUOgaUkO)N0Z0%S;c|cCAGhz_L15ZwQDyg zBsTMYn_uxi!<*4X?MFWDK-codd?_WaHF2j$+-cf@CST6`(0>!xU(_C9p9;d5$H@8C5zqdZKns?ULHxQ@fz{nc915 zA4hX8y-*_NOMf<K`DP)ugTiM5tH`m%OEG>Sc%t8Gp!mW4#QEzFk?&!6H6!JFj2b zEnb@F6*YNc@l?)Iw6l1=h1We@uUF$3Djb=y3RSK-=lGN| z-6?l`^M7eUn&ok7HkBPC5?ce#QcCjyC*0E7fU`j`eU#WPnboAO2AnikaUxyWVQ(%w zMj>YL=M~!*6u!()`!XNfHy0q%WQ&UG)aG%Pq?^z^kl2durIhB;9d2nYx;F@>hvat2 ztR{6G-IZ|M}ar2{`8LmH?Yv_ zd#N0zpEF4RM(?DI^CVG}xB)(re3wcKd4Hb+z`MJQGA)H48H$D*O?#&@JdeSLLwPPw z&sF0lRgZX2VN_YausD_6xqm&K$_7Wy_3u1Z{`;kFPgQd#@k58=?;3b}F3x+Ld5rJw zjY^`2W7RR0=dx%zo^(EX-W+B3la$>(Yyvj}`BrR<^N9NvCL_mp_d1i&7e78=Lx16Z z#{Kvnyz}czy8TMqIq*R7R8&oO<_BVdrVpFrj)1I++DEn}la7V1G7G@&qj~Z2Qdj%p zeGQ8eX`*xM7KNHJaiWc11N(^ijb9d>=do>A4jQrv4XaoX?w5ccjs@^&vK;mW`)v;V z036c&RCcd5O~`nA*tu_?Uy4)J0e@i{cu$)v&$wY$cG>hxI=9G=(s>Pb^fKxA`KkIB zt$hpIRXI;}YmWtv{LA483BT|wPmk@1eyIZj2)1>oeil-fBQ2;j>dxg$7f(Lr8#NXu zkkL@H4`STyYPwAVFy;`%mTh_0;%R%mGQ|u{3>X=Up7<&;zbRDd{J&vO)ej(Y@8;TLNkG zdp)LrSfXVp{IWQqP3uGsye5J$g?+Ehp#<%iraaKQ(x~Wo1R;U<-r#v5vEt_(s%}qC zhv9H44}kbYWayvhccHj~{C^Y9?uy6K^MWgj(}8E4(TB_crvv8s-ESE*PDlIV6_Knx zh+P|znf1uTp6*KJ&!$7cKpt{H&q)qjY{#VNhF#0PfR zsS5>U6a($XW1b&T9-}qTD4$>I;*8EhSrBA%@OT6`CKDIeYbTv}5)yIC_ZNC0U>psO zV6N;n{h{N-;j-AH`j7lHQCjMvMpZj7^n2=-=q|s|-Mi|1dyf+H}X?&p>H|p4l!OtFGY3Y7D|FcFlPrpq@8z)Ild15Lwo(MHH z9CAaW{FD!@KYx!11askL94W#Xk8dNRzt)fsl-&6O0&>F@sRzbMG0;;v3PZ>S*IRdP zbQ-*s58h%nYC}~r*oBdK^Z@*F!fkDz58^DJd_%KqpG(&YWR6P^Ekn5OxI5+T(s;`q zJqq#R&^E5c!#=;aLFF*FjlhmD9#`*S19jCrk;&mQ#(xXq+s%Q=`xB)xnOb?clB?x;Uu!$zBVo?V zrHY0;vgHmRae%ARO&&XLqfPYw^*m6S<1dG5TO>0@3CCNg6m61D+~aJe0@iN_{>RSU zI!)NrIe#$AnUhU=vqT@AfsY1P!Q)Pe_(KD*Y1C{s)C@Rb0((z#63k&e1#{@9VD5VR z*p1LRc-BV1vgs9l-n(sv{^8bAE*+4-B`JPMpg@)z=NF&{V$F$LuHM5xIdV=giTr&m z075j5H9WgL9m>;N1_>ewtb-@GcbKTTKOb4ej(@FSLvxvp&raQ8IX1aDFm?02M;doG*y)@5KmviT^!CNXRI=thCW=xp-=L;%!sROoCaPVm^h7- zaDTkB!A7tZ9a_i8^I^McW<86}<9zu3?L6O1GBE2*5?I{Z3Pvi(CBE%>tme3IePy$6 zUpanY^#~UJmba~PpsCb+@nA$UJ%$h*oN#2{GC@w5UfulO*AftD{?QF}#q+GYRZ>9# zqZgk6Wh$NVtoX{_Ch)a`kHewv^?g_V_J0~2mO(O4f3p@A#nt- zERsx8&NZnyOFTQ*0%TY{9evp>@=^IFQESfy9ihA6BSOy%(+PgUD_Y{;O=8XBJh=$$ zTR7E+(}xpD9&#owuvW-u5ZgnP$~a017o~_;#UZaRT4v0266O?EX~z=ffPW8=P`f+o zVlKW2bmx8Yux}6Lw{yDJCLWw8e^`JZ@!KmED)^`2Ex+4+V9-%rHc#k}h=(glJy>j# zj$a+`QNpLPnPb6XBn+aNGGy5J3aswv?pS-p+MD=82?{ZmARYq5nVgtY2tWvP&h~`} z%#lXejR+CA5ivy(ALinGhH3@QAHznt^c5PEzT(VDJ_AFP&j|eUU8qm!oOni-I!WRz zH@6&SYskz@AjQ*3cvN5`WVh%$U#VmNnH_33BTryl{C#0A&I{_vFBUf2k6bO}|wFrL7juO*Q@sbLKcG{KXky4Vbxq089~YN`mp#go^bCOsH^} z1_UL*QyLHz!hagza!L>=K&U1V0>^bwVhGvZL>HrhDM2uBFku4Yb4i$)GQwO;fQkyB zGUl-ePy|@DOkqg~!JsTIkp+s`C5yOn1S^sW#U+8)l>yH9LK(!#V3T59DZ?ciL7fs! zz~`lyfX^#`$MV-LeC7r;SStoFH637IFU|=|1f`Q>;VK7-?io|LHftIX; zf&`L5rU*Yvfs-_Wu?3q$v3{6r0%oqTSFv%#7^z}x4kq9$11k0p_-z6R9ykvN2gB@z zJ24Um_twq+`13DU%rC_o59gmQFW(JMp4^G!>JhoVtoI74WzWls;b+kHNjgF=l!|ZS| zU%7(=H#>y$s9t||h&n`-Zyrz%_2w6(;fQp-ekjQ*!VS!#Mb{4qSxh&-Si%Q)>;b0E z-YgeqN8`$!z`hrUZgxC=Ub!!;J^t_GXoi1(7zZq9z8dGNE0nIum|^yIyjpx(o{d*i zHJe_&9?vgMpDjMS6MG>lo{`mSB470#w4E+7g)1;(fBNR+kr7tBd&upS=8RUc09)!6N;|mK3uW6s45J z$1;^zupFZx3zWU4oL#I&|LpYrcnL>djmt+gCP$A#jsgl}(8r{L1PIz#M!Lf`E>^X$MY< z*L`(w8<(o5eVKb37tuFJhhFp-=y%#U>l@HRwQw1gAnhw?+c;E$oKhQyN?;vd8;8Cj z*EY`jh7Opu4I0}x6oL}kVasS6taonWP%wzwVawJxA;S(XWncG@VF!n^N$9bU3(g!Jda3vlJM;$Rz@(4b25pdIgEl>F(0w_? zVTVIh@57<5{f!;L%_PerkJ-;~^a2kFCy%Oajjc840t)0G+RSi9=CdmV&c3i+f7n44 z=Y2Fecz2Hm!Wc%{wedD!D0ak%O8kEPfB0?g-J9(7)I6aVVyk3-D-8>@QP*c6# zwUAo7lbw(SMC^vmi*&Tl`SDsrj*3=FoT3BDWu0wdiXFzN=5I8`Sj2r-lWJQ!HyDzpofKU;zdVO26zIK7aj`GfyP=2kzTW zA}Mwykqy}0Nn{6Rw-u?4lfCy=m)c|uBm|2vOFFj#WekuH12i-^m!XObDSuf@Z{#)- zzR$1d%K~b^t>I?hs6?Cu|TI@@Vg#H!G{`)2n!Dq_9=a{tS` zWcT@yrkRTF_jM7Crgx9Scz8y6ftPBgcIcUA`i2Liy>#Yi&$i#g`iY62%bFunPeOgX5ex!(-nu)W z=rnr4pMG2OHT(sO;6!+Yw1|sB@exMruHA&k1+FUUT1P6>vRU=b9)GppzKSM$2Hhvi z3m(VeEOg!qj8}%n%TyKTH7GzE&qmoFR9ZySuw`#u$7!Yf5@(OzfR*SMXmh-dqc=(3JJblsvrcz@-M z8OgWY{*YHmWJb#aSkw#Ya_L&!k;nsnQ$7?DNIOm15pyq$-korKbu##ze_=H%P?Jed zwzngB!XiGPZs`4sLDA291vdV49NP=HU7qQcCRr&?g(KD#Z-3XHm`(#TA3oj3v;_pc zQuPiLi_5g;eLmp%!F=r*uIxfe594IOPbv&HoN8JJyOK6|r14c&pfS-u2L5e(cO|<5 zZMF+u%;LzocPFHG)}TE0563k0jTIB<&Xix1v>4q4ZkHE$Z>^iPAZPYx3vDQ_ax{E3 zX%e+4KarrI!GBHaL8cc}%Q*hA_(kGFnATw^;5?lk2)x%YO~V;=O!KInm;(*lKAj|c zA!W4ZVL7_U0Y!k(Ve~x0U>FZuZn3y=Sw_v!-;A0z<;sHQlpMM7%p#JBrY)U4c?N7(HR_sM) z7xI}5R(XTjUM}D&R)1-y(^d*iwT|mF^9j-XnyBOf{-l^hRrKdSIhh`j{tu#WB~@^x zEcY^6QQ1w_G`u@_>Binl$5k=s;)nH)X4&yOG)a>x&Z=)z@u}`mWNEC*d@F-zHR%ao zNn=R3w0}~CySBGHw@T{Z9YvOlci=34ljyf=JBbWyT-&|!v>Q71;fCi>L8K4YkqM~F z9S%95kR-~a=#$_lQaeYcb)4OXuWrlv!3i<^by#zeFsH%7XAT^YcNSc4)-&L9o@X@` zcrc4Aw-=+ss%)X%sG~Xb;oG!6q>mU9l0&H+ZhxJR%TfXvzoQtW{P^ma#+R>PS2OWw z7#lm%l~r(McC=t05>P}hT-T62Kx}vHJ_bwXTGYwNE}YJkPo4Zj@(jprg$v(kR24}q}zhK$Ln#HuTg7*uA$*sdkN=Ymc zmw(*?SQY0*#RvH>pieV$Zq-VJX|<|pTC9d&5BRpBabALCLB=ep+`uOqb2wyOVc?n! z0g^^@QP<@Rig4Wa&W@94>FuJ+b%e>fm$qw;W^80937l}1xgZkg+RgfNG!Gq>=1l5- z7NA`G)iT2Lb0^zk%;q_sM`A&85Mb43pMUaUUPAvk+ku67F)|3TgjXRa6+k*_f$^X) zh1p>3#z6!Lw`68jtR$;~CF6HFoD%nkFLfl1&=@Lt{*$mS=oWv4s11HHs!pwKgoNMT^?oMfj1edoFdM80bIW%OG=Ia)4k^<{F(!!Wy^Mjs5^1zUImaDMaikTLZF&|4_vUq>o}L7p z*RW;lXuVHuR8bgo=B2kf5UBkm5;#Z7jYTcpGE5(@j?oqnpIg^X!zhvv?y>(Bt7noT zjq`HG_#YeFPc5bzJ8rqF%70>&EFD4LY|6~zOwUg*KmL9h_bS262wwVWf-676CYuNy z#<@=YO5c|tG_PWap>@JGJ-0fjGgS?*H&MCe%p(ii^VZZE3G{;r$Xjq9o}IiBzKxwM z!aHi6vbm%n$H~)tmLc*QuEO*>#URDY_Aqec-nj-MxChT6aIdM@Vt+8}bdkv!O0!Iy z@x>FzR5-L0cqBM;meC3i2-hCv$`W^i3g$!%e|lM*iGL$)mh5d1Zyn}8Jw--Jr4BzN zz2R}&c(CAa3#non3PrA~h&XWOtz28{xXiQf%e7UkD}9@5Mbp0dzx&liTvfAY(mRHr zx3~9$xC4K_$zAiVS$|P;iHF#@eH3C>5Uc?64?(uZb>F6Dq|QkRm&m07`HWon?0V^L zwhikvIZ+|$A1C>)fimZ$_iyx(*IwSnD73;hAw*v|?>rwuY>z;ART+u$oBhVh-~Oh} z_!t8Cu+3Nsj;1t_r%SKlnXrugZNKqvw!XX)3H+#T-U>^-et)e+4o>GY&Z#hQQ-X%! zjA{uKRowOhFL#rrpyIL$x=DOyT1*L3LBA00@_6+COOAJYhm9q4*~+sW^roaKb+!A{ zcdlO9q*yD9T`;0C>6U%wgE7}7SPC_L@!|K2`&J%V%-wRac5Z~>Gs8*5F71Y|-HXb_ zTmO3qy9VfF1b?q&GxC6;;g1x~x%p|`iq1b87H4IyA109jso{0q(|J%JjH1SYb(a`K zJLUyft*}Q6q3_1U&Htpx6YwC@htH>$smt#8*hP;Z(glNU@r-%0e(?U?Ok zm7eTucYimOn)Eis7q)d6y`|T^32i3p^h!Q$CepFDeB$h*nrA!Ri1hEF<(MxS#vyr~ z>C4r6HoGDFe)s}#ccRS8a!;@*$+AiBH|y~uy4d6kZx$EItcsbT8>C`-OUl`g{Rb5F zTP|?K+o>}xD=yIU#RU$rgbv;exAW+Gd%`S%jDP)_3{_Qm31Y!X&)!f5QKn(!GaCYT z^PvsiVa9fY8kSO|hbzE9LS(Jd-d(O(`+%xUkN7|+sPy>a-UT;xYHTk!Qq_4W^?c+QxnM?Kvs$E_v5Ea# zuX+h&<5_4?5>U~O^NXK?dK6V&)nZ!@Z~GC0{K$w(B_xDL<&~84*mWc7FK)Py>E@0d zD`M3#q=%~sBvEoPE6{iWfD{*iVD6*AyMK!tOh?)>M%aO>fDUvVdVZe9flnUM@%7Q* zF1RRBxnI##Zc1L{b-l1O?8GBpq|D{MTAb|9Kry)zm=}DDTLSF!UO{oD2xRIodm?wj zkD0x-MpQ?B+8!D`*qrFAbgr8+foaM2qM=L<8H^6Nm-`~U*ui>m2TeEW7elPV!hbQ( zt#?x(JLQP}0VmtCyxK3(?bGvtgw|UVW-FIF%Cx5AVd{XfgYGOFxgbU_7&CG*1VU7~ z*7Hd6)$u4*1!p^V^d?Rqe$It177pZZ>if~qaM=%V!AFm z)Y!!CGR&WWdXRu19<&(kX$jZP=YJ&|eAHZ#WQi@zMZlSGc5sp2z2{rx5sJx=#OHX6D=h>jhwiB= zu4;J1b@<=ic^akVwot9Ou3Pk~x-gy0Sc={jUvSMSG@x%-hx3hu_NfH4w zmk~+CD_>;8 z(Tz$JtfJ3Yt@1@9l`ol4`LYSRUMwamUvefYUwA|2VJP(~$*NkyN7$(%7l zy`*C@g>=kS*P?R^M#v(^N)QO;%H9xB1i>Ie9F;5}ioOZhBr6d?U}=H~Vr3T0V%Va9 zj{+=I3RX_4a>2@37zB89jZ)Zn@>scK<9*amFc&*~cbMT>R2c`8an%nWy!c9Cro>8# z@qfWpDu9woMNsP*$@u8q2oyxb^$f^Jbp}C3sxt^O5^MnqGBQ;PGIFRCWaLsQ$S7PX z$SCU>$*`jW889rn^^5|l&VagH&Eq_Qg562f_v(ZaK!o}YlwhG!#BiufcyJ}`6BJ@3 zON0OqQPrT%YrJrEnlqRg^<6fyHXeIKk$=>81(dqUK?jL-V~n{8t^tK;%g}-xtPtS; z5n)zP|Kk;zKvXFYDpZO=71dY-fmtmf0aUfN&c)7@LfCRtRRn=6x{Uw{P-;}eEQrRC z3mVm|6A(=y`?_2)LBkkd5#tC!r4Z#l)OTLvUKhq=T)P`viBS#fa28`G866#s#(%HO zS%JFFyffqXzyD!yLSkae5Inz{%|48tJ-d@HvV{(9z97~yxA{b@mjQBFEc9>ld9k?+ zkW0ZbjN0UL!3Jr|4JFtV+HymVmU3HeNYSb@n|v|ah(p-q<76cb;PVM~j%_~5miz$y zT($wR+~SjxZEA-Vj->Ujt)8S}g?|Q!jm7351NfXB5G@j%4FkM}I%d-VuL+Z-_Tdmu zHVkl@khgAt(-3$T6{g9@#oO3+8fR~FZi{8)AXf&6MGj&&KyF~0q$n?^WGdCnSb#y>JrM_ zn(r9LlYP8?K2TU0;%q@p1LQ!>$1x$Rm{dZw%mwQQMheq#iBG|Ig|kf z+$}yI*N3#t2k66XxoBUkX6+`Q0Q%$sayeVgzb!trBPgSB03UMWfN&-xtI*yCOfqO2 zq}gZ4Hc)M8XB$seZMQ4u9R>D*WfYxe+^wUvOMPS^tqZKX;eTu5uq6~|EJt*b2zOS? zWdi!iIGq_FGTdE5UrauBvp3zmTfz&EDHPlKNLDmg;Iw23)vA!z2ZQPk1fLq}oGvGS zcgxiQ)zNyTmkH#HEw0{uAbTVn1C)5@AD|D;K)vl~)UQXLfo;IJ73qgXkK~y4gnjux zVNZI6upRgHE`R5MVeV^@15$+Oh+TUJe-fY~P!X`m1H!!ek=;}K@o8OGZo7`tqg}_F zoW<|Eioc4(kUG{!-JzMp&>8c0Tx50kLd_b(9QQso+lqLen z>%>5+9I$>&L$s0G;gpBK+8w?-aqTTWX0as?;R6)d(|_^bW<-(KOXD^pDH`x?MxV3I zA_EwUv$E#~aL>3iV!ZAMtT&;avzDOPqaJ)bOH-vwqKeCETRGan9c=HvC5mvT)6 zw;^alY#>bF4YA1-A#8|v$h0p+)%nN|DA(wP(V++ElRTp%&tDzg5PEU_1EswWk|Uva zh$+;T$$!Z`=;rP8vYSokht$L+G`YZi!dCPT3{I#Z*tCs8%h0e4B4O1n52#Hl^*%pR zti3JD9AKaR^N6t1J$6|xE*GoG?E6=X4S7JNe6AOjA_=LcphKeC@C!OGv@CaP_3P{R zr}n3l18Txt!_57LYErMbqG89@WyQg8l%^#@)1T#T zP2P2r^Zu|0DeAvS1dP;^k=+ZDQ%G=rBEC~ zad&rjcPBuAAi;vWyA&_(6o*pWDGmjSYjG_urAXnXd+)R9Isd=by(?=ad1jt>W}bOx zzK?=bS&c!&%+3TPX$OHaurM<70>l*5)mc~p%*&@;7qA&X zfe|2U2LU-DQ;6BwyE}p{ETOPG|M?4`Hl+cu@bGZa|8*Q7VheHvn*t#K1t8QCWDCn^ z3bX;J*_nbtQ1|}|LCtRoh1&BnF}b?BG6HR#80{P_1Zn7h0j^-EB|sJA1afo%nE`%F z1}Fk;LH|f&M5X|!TY{bbcBt8zLtTN6AOOr@12zRgoM1cr>-w)w4*>30}dn&!hnXJ2-=6#Q)*I zOvsNm3lJ2*!OYCe&Bg`*IRHRzrj|^<6R5k}gZ^@Vvivr~G@c z2iemJ=mG*j9i2hmo_{+28zHl>0L;LqP=E=@0t`WZj1Dt{%>Tx)`*#Gp0rZ$*(lZOM~ z{ohf4l!4%Xs$hORDFZRL1MvJ^EUZiaDcI$o384OGJ!k;`9ZS&;Hn$)E_2Zc9GjlMT z!oFDkpNIXgBmaLh{yWP5b_B1vZ(o4@?je-r*cexNPb#{C}#Y;K*QupLmagKYxj zf2mrazZX{lWCnJ&{a>#P6bRb|5r~D&zl{WcJ4u4wKxWEdsHx>&v+=iCITB08Csqa08A49A}(eCljI{}0We8DB31yC^dn*eFv&b3b^w#?BZ6g@e?+kC3Xceu zUGZPU4a=weh+r919}z5r+9QHxP=7?Q44RJ!mO<+g!4&EIi+Er@;J=6smK|to51aen z53hfF0E-QTJ|2OQO#VeIusvfk0XjZ^x?%B6AKkFKW-|K&!g>aJ%m>o|yEGf1?H>%7 zO7lM;jAHRv3e0Ko`^^J#{DT6k!150WyK3+s5T?-j4+yK?<}n_uI-B2f_vnX}|3@_} zFaqQc2rJ+24+tyA{$I!rMqharpKd794f7!rx zj}2po$+x$0{-Zz^nA$(Yv%u6odf8!7oos+kf3$-I78LpigfX1|fUtJB`~hL=UH`aS zm?F17AWVw;U+}+n)704!CJ*}8;}f>H|G|H~4M89`kSX%~jGZZ8kk!Ya)}PfP1g;EQ zqpa+xeP z{!{BSbCV5vuW?L)o9|BY&aB&V9UZ#HY!EYxH^+^t1FjdslQcN=4yRkw8GBOvl#P{F z6_&>@sOk?GU&4<@N4~)2=4N{dAJit2(N-y1BQiPFE<^5gCOmqWKqR?;cm2M1n3ZF_ zZ=sa_33%;2!Tvs~z1&5{zF_KZHz&TF@i<_TVzXNU_co3?;G#9ipW4J}L^-aI9p7C2 ztl@j1v(nojf5*ndkDJnCW#z0J6G9j2ss~&_v=(~rwiwYDk;FWsayGV z7$m~ReMBuPzx*f^BGYky63&tF)b2Q?A|9QY)flIyVe@A3f6ZZis5)&*5(dtXKfO50 zt9}+1wRUzh=XH~7FPteWRa?I?gnkZtL7ZKlk#!EO<=lRwo^V@#W}=hIY<^4M@;aFRRfHR^ z)F+Ws%=mk1^HAycz7+)^n*EGrQUtqL{9X}MJ{Drh)4VK66xB{pzl%GJ09M6M;%+rD#Q2b_1!}8R=@$91W>i(cgZz`Td`)ay^g|ySIaJF6d z>!MiG@p5U)8F2<*KAT6+-`Sg>oEnKT#<9UqKGy%@lMCN}ueE|kZy=pN#MNJ24H+)) z>k$o8)}r(s<*dXfNxb{eJxMc@*V*)`d5cwiZVr7Zmp8KcuN091$gb80Es1mtQk!q< z`LQdn!<15(uKVnJ*K_>!N&2@$dXs#QQ}E-5+cR6tDOY&qISOiew-4JyQzaY3KJRzu zQlzLlVf_k!=xi3C{b`o5#k9<{j2^&GO4X6sS9(0ReaK%UFt<%rTdUpqU_s`PT#7Qfc1FU!kpd9WKQB+N$7w%(o>4%bg|?!OSy|=p{~d$ z;sWyiJ5Qtd+2aSXp6KL;A_~EKwKDq)9FGTA8-0skL%3%Yjfr$o%R{467Bv?_26cec92&VU~Icq}Y=9>)3l5EFYCWpR2wKF5_3? zi_I<|N8}l8|DfbSoAonKUXH!JMUwSmb_aidaClmK7U74yYO(K#Hba3%U6_YAA)Z}$pSN)v1OM9Ys*mSww6gUWkFxhmk8 z8Z|)rddd?07$IRMrqR!Y7;A4L&m<6mLT{@EX_tCXQbbHga5ROpIc*<;*x=5cz{OXmAz9^kibY_UcQ`8O;uZ(8o` zv>W-8L@@^-K#kx53p*&yAJkb4S96hnKiXsN2pZ#Y9f%$C$>od32$N{`{xX>$-nDjd zg1;4&{`o_vDxq~cv|exVI-KEL{^r7$Ip96QDw7tAi!))pC+* z@hYz|vg79tKwAW&sjoBpS~#uVhk2@aldWW!oZHa{^ z6}2K6?;F;>%)KJDYe7wa8iy~159jA(?sY5Lxb=P#LgJakxV1RhjTl}-LK-8RZ~x9n z0K>jpL{m7$J-OV65fT$!j7SVLGgW1J(O#mN;|}4&5Av;~%~#cB&LW8JEYPsiW^$3k zesz8uMpRr{P@{SPAN@5)wE)B5qSq5diJEaRpogwMW z+O~Ah23NuQGv8Z3uGM*GpW$K~)B*1;udL}{^8B&qlM$}==bg-{d|6w6@k$?hiX_K1 z)oxPM3nL!tr{u$|)^XW<6de*v;3iPY5N(ZWLjb2#$tN>*i%b_*S*+}V7_-a6=i=CD zGx#&8>4N?abv(CXnyW-#c@YxL3@&Yoh-Mq)lif1yGPWay5>`0SB|o%GnBX?=7>_Td z>U`;W@3Ut%R^;hYW-YdVp7KSn#7(dx>FvY#o%g4ik;NVn_Us-gShfT|(V%F}*)V0& zmZSbn^{ZSWx{6mOQQ|#FgyXxF%?u0OViAJ5L7xPDQB{-Ca|vZ5EtA?i;e-g=sh!-4 z!_iCQ+TR$sbmMTib*ttZEX>bg>weqCTs3lI#(dxx-=mo5_k5Lq^F1&Mpa(cAjK1wP zNv)vc3_lK){A9rf^xqFp=o#L~ZV!BZ2*=k1a#!l|bqpjl*y#!4$)&zHH}gKwtO-}q zn<)O3PQsgG!R?AGDpUHYJ*)CaH7&J4(kGD0%*dDVg}lT$Bc38`bZEHp#N8~(jv>d=){I^-YAyPTqf#Ra=`m=GjreX2KvO3L#8A?d{49=a9#6%Pwpj3Ol2k7I6XL}U7M_g ze?357c)w5-#g+Nif-8}?-*4+rNr;}57R)1|m9f_a>dm6uO>pSbiQMvJE}2`2jH>1L z+i@~eThfFhrDw4mb-S)V}B*H4b2YADT?;K#>F?yo5^XKL^x z3zCD>Z>vmytJm)~E{g%w`OydKD-%Y;i8P%Pgr{v-TjyUog#a8o*Eh}Y=vT1i zCWC~wY>pkHEy-Sp!13lGMdvnlZm3m2$|X>62wlu)%^F;!;b3F`Vy`6l zQpFd4U5BC%H3E|Y!25=XEW~(qGvgY_aonOi<)ln!h6Zs@)s8Me0=#W~OU7Qrxoj4TskC0y`B{)(Bh6mumm`z&IVQZ$ z(H(Bw(Sa&`LNDUp^T2x*!>s=>pb!ZvBRCvfq$@v*bnXi>WmlguC3Sau;uc$acKoub zQf+2>D7D97S!#HZiZ`DYtB!Fb1grgkL_1Clm$9YYH8MrUs;9;bFo#2HBm@Y5?%3ny zzEWROPt`a|tbX9Bn;Y1!cHpq!+fWt!pqMbgT$wH$-8M=yP-B!0EgAY1{%bY5dd~f% zpGwp>Pp0%GQWLGd#FP6xg9-6yRx0QLKRj-QzT8Y+6GNK=qti$-Woj^~XzTmxENa_P z;_|RaWQwr=Vto>b>kBVkRhHY&FHly0CQl4d=%i!r zmNZKhQxVQlGY^Sq$_Pm4befqRn+@%{#eVeS(|Uekz24M$qwB-G2G2A#@g}IN*pe(J zq7)ST)2Pv!c3(Ip8iR)Wdk)io~A@e_ZqJ zJKnUt*${g^xp3-P{>|+6;ZzS^o|ul+VCylwn)32fUeLGdh@W*_j$Vd?hwU2B)NXmeUsztfIEwk+PDPe|t;^=IQD`?qG`5cAY7R)lj>Xp_J zDq9r!QA?EoSxNE?E`&Zms|p;p=tPTB<3IWBzJqqWSn)mXMD)oixI<1VXmHib9hv*)Fo z45KsTL|g9fA(H>Hue@w|bJ$69XQq%R-r$D6(wnFm!1n zgB;5dFx#`M-ui9K;4T7QWA(*T7PSrS#Ad9Wrlt3u`CxD}|M+*C&|rC4e>jLpR&hE> zDMDsrpT@2NtK}6Sa4Gt`YYzUW`xiwl9_BlOE%YycHJ&6y<4}St7hIxWcOiXW6X|MZ zNHa`{avBLqr?7dZi5v~T{@rP6XL^&11;yY@rNKJO1WVUH|3%svW|dj#hmTkDSt1%A zyz%nO6I`qC4gztZLfVqJ1S)B>c%#Sj$T|%~mN`GyYXeJ9)ZD3M$Fex;&9ih5Uwc=O zyf=D(*ov*>kx({-HrGY*9Xdp&8KPACFI)O)6AV0;F`Y~u(0PE+9^&F0!__7?KX)-w zELWnVpF}!AXN9~4Y#%|8ryDafb7E%Z7-D8-W@g7sW9Gk|m>FY;nVFfHnVFe=+1tH+ zcY62q^hw>-Rjt-YCC#X(`&YJ|GJztV`W_l>@b4ovBvm7{TQ@O{qw27AadL_6%)vU-=WR@+gl-5?ga@6Oy)PJ{ z3_IWJ&v;q}p!5jBkEwO|HKmI|9&5t69gBDUEj8hTLC+!gycHIdp4wQ6{Y=PHv@$g0 z#y!>ntFSIJ5~bJpXR>Yqc36wTAvbLN{_Z%9;W7C*cByV)pP-!066z*rBax| zkUc@225IBv=B9;U5DE_{MURndPxF=-h#SW0F69lw7tH{-7N1=7(^n zh;IH}$wQ5V9sCoz$l!}};kwPsltl;HBKyzvBMF~qI1#5G)EVO{DsU{Lvl$rm_jz06 zEZACNkq*d%Swes5^7l?FRExEn-1a2*G07{v?@@2tM6T1;iFPG99K?D+yX$=C0&WZf z8kRV!KxJk8mIU$j-H1g6w-~xM8$N06n8G4Yeq*&(#nP7xscPP+Gz+~F6eeIoyBKe+Ms<3_*KEq@$b;5c~FEvgc)coybc;Y@1UR- zP>Im}rBX5iE6DY2d6q$OEg$Zau*!SZ7sEtq<<CkorG&J;c%-1}$ZM;3 zr+Cx~593VI%{%=OjBT9OkE`l%MHeC`APdx(`5dDUr~b>jq^ohwwc+inUqVp&Z>e69 z#Qqn>`SyCh5I*TPtZ~jXWo1 zf|xN0b{XEJhJTRk{=AzDwaJVkH+hk^xSd#L&o8zc@^3ZuKR}+b(lwG5&Mpal1Wsde zteP)WO)wgmoj=smVB$95)BgtvC;dQ1eh9l^y9}^@O((R}~O)sL6Gv&k) zI@b=0lpl{JXQPx_S)0KbE(|f=82w$qf5C;ARKF2Atu((-g zr$10lZSsH^nbdxS_gmY}A*VC%Llk&3&smBUX~@Nrnm`I$WbFS+jle3lZ;gT9sy!pq zv9KhCz*L*5u3;qGLfcI)CUhMk01^$ttjXQUZ1FVsSW}mt*CG50aIB`K=szhH#}0|p zfXjP3Y))s>l^hhbBcGg42Ax<7j({{?YUXZBAf;J%k{Bw_hg#Wn&~?~swPIuLr4bz3 zgKTNhfIt09ebWd65))uNIIn@48>K|`yasTWWfMuGTv#uM)}1WlPX+#dV>$`bVEYuT4VIyJt&xajU49a3<;mk3hKZU&NC*ScV6 z-D_enf7>bO>S!9Nby?4>AAl>Vub#kPkMKx=We;&KrT|ey6kT2CeO|?PWWvY7kvC~e zXK!T!&OH$_r|zSWcagMCH2;%O+>GjBa)u;bEtg!OH;ys@BXM+dmK)XnMC7vLpg%#8 z7qWB4Q^gip@2%gw?n>kIT6|}b$$E8pQE~Ska-#XWb>6)Dd6b$>eA~nCYOhcsUcSoB zLYy)38`M_13|WIRR9~K*?P9et_SwwdWe0fqKSd!ZPgY9;CSKxqsFmOSZ(Ook^5-yo z^L?`M#CFSo&7jV~pQn6oJdIqN5Z-@7S={lr$uJ^#_w`2MkMfZslq@Ow^x1QVEA}9v102E4-{M^uv1r&Ny3|Tu zOH)OpWNtb5$=lvAKSMgB4J5w9!F^lU=|4-jG`XX$ zz&qrG_=DvRk+JUaXwj$Nz`e>C!6kM8>q z75h^FiUoetiIs}MFo47HHA7>VAyp>(Q^eMaQ)=S=Yrq=bhzCtuK(^SO*FP!cESOAR zy_sl*TCB3P4J^-rM?mkg+I937*1qQ!G1XZPsP~+pa*vKUp}-#3b)tSmK?gj8mK>ZL zh-{tVzc9sGZQi9ULccLar~E_6STQ@Kru2q^4QmC9A`7|p{7+NzG;8S=S)cD;CJv1Y zzmun_J$gm*qUUT^MKkN@y+5y~oDg4usq}nR>J(4ndev^G_-XdIUI$4K5+1}&`w=~9 zc&bu|>IL5EetDgmnf+(<8K>c{R(+*`c38bh&!{Tet}0!+wd8&+fZ&ZTjwbW>HpM;+ za2vgn4IQv92iI`;tf77Uv=L#~G+A_|-c*NYHv4m%I4+%Qki~N5XL=e+>-bjr6da!6 zT}{=!3M0tPNt3;DPd?2tj4g~M$-S zcEAs}>`Dw-^!laT#Q;N+n{zwVo-BV5Fk5S%Sy6m71I24uA^+B2+)jlE?rnuLIkyzO zj_E7SujYD9`ZBsEMwT)ZFnl2iFEBQOY#8^*k&NcDasR@4kp(Yfx<1Jm*fp}WXYUw5 zezv1SKtzy@&=4h0p`cG-XTVkGB@_Xn+=B&)a$S{t!ryV%>K}{dHsx$h|Jmn8qFD z9atlvNb}5auCWWvNt&QNt&ktSn0x%m0`zj1F%td+KNv!xr@IO^v}u!oV?Ag2okxpG zy|~z+&(!LSELKeHf{ojZ8(wk(@WgS&_G3fV;b?BD3;a}4Y0pJPwHkl2*Wv6j#L96F z<187Ir%Wn$ODQ%2IZh}N=tMb%zty4Frt{qIie--r<8Kol>fS;bgk*1IqK~7H?Zezf zh)UD(`!R;K2-{^3p$|aN-n_IG<%xse&+lCt%!to&Ezec9IO5rJ2fon(+R31uMLg1E z`jMZE*``QqRCqt-N@RUuC3M+N;whbbosm(XeMiR@mY^JCSn@wFRKBlem*Au9u}t>VeSDP#e0b#c`}{Q!gQl@U zExeCr5_calpt+@j@gQ-(!8Y~;rW&s9Lzuig*m=Cxelw;g?SD{B82IIJlcsbeJm*J= z?<_^YP?X{n_l;tw)pmTY!=Jj~^5Up|Aco+3H3Q)#+_2+Se79fLZ>VP@6&BTFZFZ*( zfgRS3v~XLh!wo`s06Gn4v)JraGCdy8lTXWrWN2ivJEud%FPb_qD_LSiQp5pHH2L1c z`EipAIrHDmo~>*d@@7I$iofi7$)TaIkcp7!GgkUG%bs~wcnRKo6o7MA0q)KH>?4;O zl>zi4r0>uRdJ@Qi`)`>?gM1czUiaV~Ydpeujr!^uDqNl~AaZhO?+Lti{9;Oc_A6cB7T{c+jzmKCNv8SsXnIzV>>8yWuCJ>)fl!4D<_jH|>Dcp;B z7^BvnL+-UQZJ^* zaD{0TSRr^I!o1nX7C=hHTTM)mfOC}{ioxuPKX=0KadjltzQ2SEwyE=S8g>j7d3*i-RX%G0=7%zG!T$=$PQ=%tjwkwuI% z=!LFLtKjTwaq&lF)ul~*R0)KH$|HdoU_Mtdejg-QRJkU4{L_fLc)Mv=AmWaTZclU- zTlr@o@$&Wzg7?Tc+lBso9c}G4IIGWd!>*IuS>wvjzSli3G8E`&*VHQ zV0{CTN^m@COyBIG$45Acd_YXhIm5J}awn?>2A9q#valqsxbmT5D1CjvY9^Zw|%kGK3L4=%d-tb9Ak>dj7 zRPs~ktYL`AW}(m^le=s^RmOIP20>5!0%dZ!LbPuau@JZD8>-1neaYOtxmai_0H>Me z+uNCvVMLvSK9jJHZFv-Mhc0InqJSRFVGmg34md9~?w5jvb%!n0eLtQC?8Jj9WzNSaBmJ_|k~mLBqDD=G>izf#^R*G&3_oymjs zu7?VBm~Y^!LRrsfWSm(i%v;s%yd~a>waA%_9IwZox!uvB)>+UJH|2fRk?hjR8KO%n zCCo5S4Gd}figkz?^8+vSIN-_p@yC*bD0JyWoff~co3{`IYOERn^wbMz%sPWIypw;ki)9;r^F)yeKsd^R--sXGjmARTjpoW$P&c$<`aQOyJLlbRTwsFpGdMs&24 z#o{^fgLa5v`Kqr z5{MM5Mr#X+f}@schFqpp#Ky0rV8mvZjXz~KFYHMWYR6|ayZm_P_Zt$BZX;Ww*}dEV z{I7%u!olORK=xt13f{m+bJ}!N4|vshv^*v;v%Ps;UbsEMyf}6fD<_+^7I!nqnj$Kv zL5V>vca2jWK@GPv#F|JAOsX!G=?Hw0a>QJ`5h%AnK+A)f(ZF`VgU@vD?xYjKY*H`&tZE$3x;+(Xv@gHzycd zlbVZdaQ)9Nxmv9RjuoCuS# zxZjYL4FAIDk%UBxQQl zjXZUbhZpPA>Aa7=2YpxhIMNDwncoz|;lBrdxJR5@P(%ttPFc0GwTnN-OK_ZxyQVV% zK?~wFs%Yu}R(l{LYRIiA342ro%HvYRQ3ipIfb@NAZma0yLc_T<+`;xUT3{2x= zHAY;y?|DfeT^DF9dp9GaPium;f;2kJ_?~ISbLO3O$~yHHQlf%+*^Nwnic-Tavf|Gfh%PPP)p_5PwX7oMd550sf1ldyKG{Saz={2XRQL zJc}UXs{gFn=S+i#W!z2of?#8Zj*1NBH}fVD@*U}=CL*tSjI-hpDb)l5O(Q& z5cCpz-+V}L!U^WQ8#1JQ^j%8 zG_|}=o7PBesCRE@3mvSjRP(`|AlasF$Xi1sd{wZJ~&pMc(;*H7vY@@-;Oh*}&>cn4@9aQ6$=seQvjgRM= zBqnKl-rais`2KgRyULx%h|=loG8O=;Vjs)QA2B<+`W_P$hXu~BVdDMZsGM*DZgbpk zn+SFFyUiROKbU4~z0pYoQXfKtK7ywAt4xh!v*kulxt^fiVmn9UxB4JhE4;9>MnC&W zu6+HvP@YBn`be$^-{63e?CZlfD8X%}XF9);$tNCQeDkXDjp*`vvTgEpcN_5NWAYf5 zBLD2^?CJ!2d)2>T+Fgw_xS{jAzda}+yaxM3`5Xy*ON)K7WTt&ii8X55<}%~JHMnwk zTeag!MgFnVxO!dJ_QY2vY28odqwEKR7T=8`fcHSD;WJXCp{8|nY+&Ly+Iidgg!1vP z#K0$G>2+s3Ml7@;??(|tM=(%q5N8`XG8@0Ui=*(37RCZbnI0*M9T$tw)_W5Ke;2S` zd_+lWEGF4zEhakZCi?IVU!iN4|BAf{!-wbVA*kEpD4u5N{pW;cXH<2pf_|H?JK}%< zP}8&Etvx@GR`m_)z6G-_tYX>Hsj_4M&;tz`gzYCEXP7zRj0*61-2prEyQa&L{RL)r zsm`6ltQH#DZd!@$R$A9aJgF{7QO-EM^2CDN-i}{FGbJ;iYNeLttzBk;3wgvTF!w4^Pi)}?62 z+w1OVS!YdsLIcM@!=2Nk?UTP>!=YI-yDrJ9U2?O+-csF-ZPYu}b=1a>XWV-4W}mIo zBVoy|l$(#oFAC}4`FW%rJTK>(pZWv8uRidr85OJt4?>`_^<$=Sqt`Q7={`r3-3)== z)y5w|+&dVxPv8OH(q((khOtmlPz9<7all!70^a7~j`99s)y`pPl;qv$GL3XIxP7Ao zN1EZ{aMc2gw`w9Zef!*0Ycd@+t*zywqPVRwAK^+1&`msztU~{O-a0sGKrG;!a%0)= zJfIG5P)_61XaVrYx~;maV9!V4-5&aK0m>z+sLt>|0irE8O_+7d710zpd?l;2i9Dn>@TO`RkZ zjf>hZ?`sz{`HH?;N9y;Y@mxy8uHAc-NX=)(pi)F#E=(ob*fVT}Ur5`16>{GCZ6FsbmUf^~JsgxWIan#7_?2;ryxF)^6UKV`tks`(EZ?~zNV-8Om7;j= zqWA#i?`=+A3QWi)hk4Gw&Dn4(Matbp%0X;0fRHj5m@kSDZzD0ubQ`}+G`lwJ2o|U1 zsA4Hp(}6@oA7JVp#_n#c<6lQJ?D{=(4_(&YU3Q(UAN)@UVsc)l+*C^AJ7%)sO{+(v%-;Nt0mewN&b=UL)XnoZeVl5aW?BlqLI%J&8jjH7UO@Vh#;dXHNzJ(NLyIkMm}FgR1-rdafywr0;r z#46f<9OAQfQ5v^jXEPJ1apHc>!7*nl0|XuM%9)%VZw!a)iI#~WDR1X-=u2z|AauK7Q-Y)8gm-KTKGP)be9eC+HlE5sr*%68F0<*lV)IHSii$TUlytf?PO_K7@s;|&uliaUl~4k;l|yTEy<>L@YWPKMxi~T zg#*>52GL|ipNu^FOC>i(4W!T?0%mG{MS_Eti?i(O&*m+9g8UliI8U`(_;VS|v#{|t zAzG{04TPyFaJ3zDV=EMI3mk7=<<7g`M_g?V^8^*Go;y0EJ36TjT}x8sF1H)ktZ# zh8;@~)%R(;RX@(Emw3lRswB@MmbAy=H0d9NZ9(QF(8f&t>NfH{2}=akYH71oqG#nx z(&GhHvS*n~@Z7I&TwBDe7V_kr`vU_E0e5^+l(t~0z-(0HG3 z-xQKjHVO^-KrS8`F-s zG_FuCh{BVuU_788YE1z_UKk@QcSNOH#JR9+%9c*}oQ{=GAfAsEPh?z-64ul(F9(oQE8s51(%!OTE18&xZ zzIwUi9<38WDZ5h{8c2U{9B_~Ac8b41YAd*bha(DuszSvUik`ybPMx{Ha0*ay)W+tX z%M7{wv425|+SH1OKCcH=e zYX{p1jAdDQluz=V6ZfnqJiLE~3x+f&JP5`fkma~P(ia5%M9a67_c-G*$4B3>bmY2a7R-Mde=ZrFdGXyp)eRC0Z>Z5*X1I3~KBI zQB+~l_ttYXbd)p`8n+w3RgYALYOXE{mmQq~-Mj)8zq3~1lMb5C4TZ8=!PAvrt}3tN zzjv4LH4;2@p+58oETO<`eI*R+b%c!RK_rBz7|-;NcZ8Sk#Y+jPMdcAh!Pz3kUD`%# zf+#Y?rmyRL0@1Q%U;O)!t!V0^(m9+0uyaC{*aSA_aN zmy8EgcK|O_b1$qUYPcoWJ)1Pew5-F#e!UEk;G71BsKgJc3<2sa#=7nd~J3a zPyp5NmB-2Ev(Xzg9zHAk&1#wCu{&8Q64$?Iou%b;-)^R(9N*mYVqbm+#W<%1XUn+R zuUK;l>Fn%?)9ODF7F;s;N$m7inlnJvpKp>Pze2wv3E>B_Lt2qnev`zALi^7F>QK8M_b}fGv^tJ_WpB#idL?ywVU2&oBaE@^0D@!Ci8${5GCeQ-;J3w=cUT$*`ilk zfG6|+mQWOklwg{a(0>_B>UP!yqcg%PlYg)LP<~tC)kIOBPL-+RyeE18DzFZ#V@PKk zbY2DF*2B1jR4qdwd^Y|dM8630^}#5t>%!&$cIoH%n1ANNm{V0}8V{VC8e7pe;uz4Q z#SL?~4ZidRY1d|Q+xY}|Dm{9~YC`7PqFf7Hb%eR-;cr4g+4?rtP3D29utmdnTNMG> zCi$NIx%-rxe1$I%$h9TJdy6a(`gjFK-f>e;8(^VDahRB);jBOG`9BSewf5{6GXo#F z2|B5Ym%pC`*<#V)i7pzYMph@l=L66WGl~==RJIW4qQR18#unz?*VwwAtm{6d9@I^ zb;&P5wQi%^%Dj_gMBYAh=`X>&Zhs*R7IDOl=~7AwFmWW5?~>w%D*CojY~JlX*T-}9 z!0rTQj1_LDT6TldU*VtpC&FfH-g1Yh&A*6Qo58P+>BR@azL%&8;c-iV&%f!2kS}m> ztKI?E*AuSt?7IoKgf{TDC#n0);REULbc8;(WjDfx$NIkm{2SavcMt}0i}~F~urE1L z`6Xkg{uey@l?9}OIt8|7#^#q3so>AX_=HwFv}^xFdF@1p7LNQ#6Y_&a*T_Plvi}WX zGL;DBKm5SkMi57%sab?4XSd{seu<#6n*JYPZc>|4n*#sQ{9i~4Gxnse`@fJB)^qsZ zp=v%+ifvQ;w~g^5Milt}Nn|&pvQk4)x57L1#IE@EfAjmP2lSs9=Tc)w3J?D4qN$^S z|7iY;f8IanVi>HL%S_3$TXanMB1$~JpGXh)&GFw(Y<;$%ZBiLAsWGWpHTP=PsA-~`6q_1KRQD->IOz;jO_aGzk4_AEEcgvDMq)C6Gb7uYU zm_i|Uet~tAC?kCU-{+$@d>lrs$Vd>Wql3%%1n8weWkQnH72zm1vc)N!-6C+`;bThe z)!bI^g$@rf7Q^?sMcKtH=zPHz#iJe(lg{h)AasCKYcVRW5kUGl!`ZbNsSugZGHTN} z3of_1!s#T=wh!a4qC;8{1TEP!SBLeoKb?L?FX=BG4(wFEx;MqFEOBFli>|1V zIzD&9|BfvL9L?9VQ>X6)9p=b$N0)R<r+AyX zz~4j#>-~7`=RYx^jJvt(872hRgsnWv;wMcRX$BhCwyjZ#azd3+B?gIl)j5_krIPqq zFMdgdb{0TR@Qu{V6+7DAj{CHD8}HBy2X|rxby0*l&NZ4m>;%G*8R_F)N%urCE#qCE zkVrmW@O_+{H;xjpGb1FDi#K?^p);_Jos}}t0q09c;wGy<|JWmWA68S*wkyEcfzPjrOE*}UlUh1)sHd_v8i_tRAy>Q%cMO*9{0b1M$hg*EQ z{!xx_jJ;S*@QX8dlN-25*G$0lt6+U>jw-yFz3EREXEP(a|F9g4lglDeP!QO;SefA| KD8v-R;r|Dd0>%IU diff --git a/chapter/ch4.tex b/chapter/ch4.tex index 32e0f70..ea545a5 100644 --- a/chapter/ch4.tex +++ b/chapter/ch4.tex @@ -438,7 +438,7 @@ We can now determine if we are currently exploring a match. This means the curre A comparison result of \texttt{Matched} means the two nodes match, but the \texttt{applicable to} node is not a wildcard. With this case, we perform a search on each child nodes of \texttt{applicable to} AST and the user AST. This is performed in order, meaning the n-th child node of \texttt{applicable to} is checked against the n-th child node of the user AST. -When checking the child nodes, we have to check for a special case if the comparison of the child nodes result in \texttt{MatchedWithPlussedWildcard}. If this result is encountered, we have to continue matching the same \texttt{applicable to} node against each subsequent sibling node of the code AST. This is because, a wildcard with a Keene plus can match against multiple sibling nodes. This behavior can bee seen in line 17-31 of Listing \ref{lst:pseudocodeChildSearch}. +When checking the child nodes, we have to check for a special case when the comparison of the child nodes result in \texttt{MatchedWithPlussedWildcard}. If this result is encountered, we have to continue matching the same \texttt{applicable to} node against each subsequent sibling node of the code node. This is because, a wildcard with a Keene plus can match against multiple sibling nodes. This behavior can bee seen in line 17-31 of Listing \ref{lst:pseudocodeChildSearch}. If all child nodes did not give the result of NoMatch, we have successfully matched every node of the \texttt{applicable to} AST. This does not yet mean we have a match, as there might be remaining nodes in the child node of the code AST. To check for this, we check whether or not \texttt{codeI} is equal to the length of \texttt{code.children}. If it is unequal, we have not matched all child nodes of the code AST and have to return \texttt{NoMatch}. This can be seen on lines 37-39 of Listing \ref{lst:pseudocodeChildSearch}. @@ -536,17 +536,22 @@ export interface Match { To perform the transformation and replacement on each of the matches, we take the resulting list of matches, the template from the \texttt{transform to} section of the current case of the proposal, and the AST version of original code parsed by Babel. All the transformations are then applied to the code and we use \cite{BabelGenerate}{Babel generate} to generate JavaScript code from the transformed AST. -An important discovery is to ensure we transform the leaves of the AST first, this is because if the transformation was applied from top to bottom, it might remove transformations done using a previous match. This means if we transform from top to bottom on the tree, we might end up with \texttt{a(b) |> c(\%)} in stead of \texttt{b |> a(\%) |> c(\%)} in the case of the pipeline proposal. This is quite easily solved in our case, as the matcher looks for matches from the top of the tree to the bottom of the tree, the matches it discovers are always in that order. Therefore when transforming, all that has to be done is reverse the list of matches, to get the ones closest to the leaves of the tree first. +An important discovery is to ensure we transform the leafs of the AST first, this is because if the transformation was applied from top to bottom, it might remove transformations done using a previous match. This means if we transform from top to bottom on the tree, we might end up with \texttt{a(b) |> c(\%)} in stead of \texttt{b |> a(\%) |> c(\%)} in the case of the pipeline proposal. This is quite easily solved in our case, as the matcher looks for matches from the top of the tree to the bottom of the tree, the matches it discovers are always in that order. Therefore when transforming, all that has to be done is reverse the list of matches, to get the ones closest to the leaves of the tree first. -\subsubsection*{Preparing the transform to template} +\subsubsection{Inserting wildcard into transformation template} -The transformations are performed by inserting the matched wildcards from the applicable to template into their respective locations in the transform to template. Then the entire transform to template is placed into the original code AST where the match was discovered. Doing this we are essentially doing a transformation that is a find and replace with context passed through the wildcards. +The transformations are performed by inserting the matched wildcards from the \texttt{applicable to} template into their respective locations in the \texttt{transform to} template. Then the entire transformed \texttt{transform to} template is placed into the original code AST where the root of the match was previously located. Doing this we are essentially doing a transformation that is a find and replace with context passed through the wildcards. + +First we have to extract every node that was matched against the wildcards in the match. To do this we recursively search through the match until we encounter an \texttt{Identifier} that shares a name with a wildcard. We then take the AST node paired with that wildcard and store it inside a JavaScript \texttt{Map}. + +To insert all nodes matched against wildcards, we use \texttt{@babel/traverse}\cite{BabelTraverse}, and traverse the AST of the \texttt{transform to} template. We use custom visitors for \textit{Identifier} and \textit{ExpressionStatement} with an \texttt{Identifier} as expression. Each visitor checks if the identifier is a registered wildcard, if it is, we perform a replacement of the \texttt{Identifier} with the node/s the wildcard was matched with. -In order to perform the transformation, all the sections matched against a wildcard have to be transferred into the \texttt{transform to} template. We utilize the functionality from Babel here and traverse the generated AST of the transform to template using \cite{BabelTraverse}{Babel traverse}, as this gives ut utility functions to replace, replace with many, and remove nodes of the AST. We use custom visitors for \textit{Identifier} and \textit{ExpressionStatement} with an Identifier as expression, in order to determine where the wildcard matches have to be placed, as they have to placed at the same location that shares a name with the wildcard. Once a shared identifier between the \texttt{transform to} template and the \texttt{applicable to} template is discovered, a babel traverse replace with multiple is performed and the node/s found in the match is inserted in place of the wildcard. \subsubsection*{Inserting the template into the AST} -Having a transformed version of the users code, it has to be inserted into the full AST definition of the users code, again we use \cite{BabelTraverse}{babel/traverse} to traverse the entirety of the code AST using a visitor. This visitor does not apply to any node-type, as the matched section can be any type. Therefore we use a generic visitor, and use an equality check to find the exact part of the code this specific match comes from. Once we find where in the users code the match came from, we replace it with the transformed \texttt{transform to} nodes. This might be multiple Statements, therefore the function \texttt{replaceWithMultiple} is used, to insert every Statement from the \texttt{transform to} body, and we are careful to remove any following sibling nodes that were part of the original match. This is done by removing the \textit{n-1} next siblings from where we inserted the transform to template. +Having a transformed version of the users code, it has to be inserted into the full AST definition of the users code, again we use \cite{BabelTraverse}{babel/traverse} to traverse the entirety of the code AST using a visitor. This visitor does not apply to any node-type, as the matched section can be any type. Therefore we use a generic visitor, and use an equality check to find the exact part of the code this specific match comes from. Once we find where in the users code the match came from, we replace it with the transformed \texttt{transform to} nodes. This might be multiple statements, therefore the function \texttt{replaceWithMultiple} is used, to insert every Statement from the \texttt{transform to} body, and we are careful to remove any following sibling nodes that were part of the original match. This is done by removing the \textit{n-1} next siblings from where we inserted the transform to template. + +\subsubsection*{Generating source code from transformed AST} To generate JavaScript from the transformed AST created by this tool, we use a JavaScript library titled \cite{BabelGenerate}{babel/generator}. This library is specifically designed for use with Babel to generate JavaScript from a Babel AST. The transformed AST definition of the users code is transformed, while being careful to apply all Babel plugins the current proposal might require.