From 72f1d080a0e4c818fdaf191c59b050dcc1ce98ce Mon Sep 17 00:00:00 2001 From: Hofmann Jonas Date: Tue, 9 Dec 2025 11:10:29 +0100 Subject: [PATCH] adToTree working again --- bintree.c | 19 +++++++++++-------- bintree.o | Bin 2421 -> 2535 bytes bintreeTests.c | 37 +++++++++++++++++++------------------ runbintreeTests.exe | Bin 102878 -> 102366 bytes 4 files changed, 30 insertions(+), 26 deletions(-) diff --git a/bintree.c b/bintree.c index 6c6c03d..c55d660 100644 --- a/bintree.c +++ b/bintree.c @@ -41,7 +41,7 @@ TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFc newNode->data = calloc(1, dataSize); newNode->left = NULL; newNode->right = NULL; - memcpy(&newNode->data, data, dataSize); + memcpy(newNode->data, data, dataSize); return addToTreeRec(root, newNode, compareFct, isDuplicate); @@ -52,26 +52,29 @@ TreeNode *addToTreeRec(TreeNode *currentNode, TreeNode *newNode, CompareFctType { if ((currentNode == NULL)) { + // printf("Node == NULL\n"); if (isDuplicate == NULL) { return newNode; } - // dosn't consider is Duplicate != Null upon root Null else { return currentNode; } } - else if ((compareFct(¤tNode->data, &newNode->data) < 0)) + else if ((compareFct(currentNode->data, newNode->data) < 0)) { + // printf("<0\n"); currentNode->left = addToTreeRec(currentNode->left, newNode, compareFct, isDuplicate); } - else if ((compareFct(¤tNode->data, &newNode->data) > 0)) + else if ((compareFct(currentNode->data, newNode->data) > 0)) { + // printf(">0\n"); currentNode->right = addToTreeRec(currentNode->right, newNode, compareFct, isDuplicate); } - else if ((compareFct(¤tNode->data, &newNode->data) == 0)) + else if ((compareFct(currentNode->data, newNode->data) == 0)) { + // printf("==0\n"); if (isDuplicate == NULL) { currentNode->left = addToTreeRec(currentNode->left, newNode, compareFct, isDuplicate); @@ -132,7 +135,7 @@ void clearNode(TreeNode *node) // printf("in clearNode\n"); // printf("node-> data = %u\n", node->data); // printf("node-> data = %u\n", _ADDRESSOF(node->data)); - free(&node->data); + free(node->data); node->data = NULL; // printf("node-> data = %u\n", &node->data); // printf("data freed \n"); @@ -144,8 +147,8 @@ void clearNode(TreeNode *node) free(node); // printf("node = %d\n", node); node = NULL; - printf("node = %u\n", &node); - printf("freed node\n"); + // printf("node = %u\n", &node); + // printf("freed node\n"); } diff --git a/bintree.o b/bintree.o index a7303bbba52a42c24429418bb59cf4cf4c05787c..707274c8e5ecaee5bdf934b681041b4a312b3296 100644 GIT binary patch delta 780 zcmew=^jw%LrH!2d1pL@1a!Cm$Ff%adFfuTlUw!u;pc%X%y-+hIFJzLl$@%~PzejhdfJdhj z$IJa7S)h^F4XCpQ8X$mdKm?PVr4YgZf!7(hb(i`8bqgcwp2eifwB_IAgG>vVx)~-X zG8@T=BT0jO0Q2o}SAoe#nL8&hV3C+y!s1as2dEGPKr|Z@0|O6~76h^-fNT(L0K^JF zHi#|*VjUnGL_Y#z3m_Xr^8us81;_@`py&wzviCvD80-ufY;6q~ z^1#9hs-;{E3_zWeby@T4OMuFyftZD1ACMFSvyK5t88C|p7#$EXE+7jc76TUp#w=89 zGhA#pT&x#pg)G>V-9Q$^l*2%l99Zl;M0WE_)=)-pSTHgufE)z`YCsGM5rl{_Py`en z2oYPL2q;t#B3?idP}o33N{UibgEOmAK_P@t69QBN3MYt&UP)>N$omYF_p)=cg2Ik} e@@e+H7{5XYz6 zRl%e4pyU4wtp_UgCtESeWls42|G!6fsDMYO6UWP`IMmkZfOLCwJAh2k@aXnc0BVu& z?L6q&c>-wO3vYxW0Eo^fV7eFR zkY2FI;ZnV<+)$O1nOQpdCZK@H7g!`FFJbYhp9#_q1R#1VF!Xq!^Z_7S0>}o@_kmae z$Oh4>Ou$eEvO)9`AhrOqLG%S6b^)?Mv=T5T0)Xti{FGD$TLslpE{3$C)YKFOkN{8| z2Hc&UCs(s3dKUr(q=A@)!4jxj2Fywavc$lwd>~5}%xZ#*b-~3Z!o_9+S#p~r*}@sY zo?-+#87Kk-YCsI~8bZVvC<5{rLc|s*0`eY0#0w|_@+3s01nBdata); + TEST_ASSERT_EQUAL(score1, *(int *)testRoot->data); + TEST_ASSERT_NOT_NULL(testRoot->left); - TEST_ASSERT_EQUAL_UINT16(score2, testRoot->left->data); + TEST_ASSERT_EQUAL(score2, *(int *)testRoot->left->data); TEST_ASSERT_NOT_NULL(testRoot->right); - TEST_ASSERT_EQUAL_UINT16(score3, testRoot->right->data); + TEST_ASSERT_EQUAL(score3, *(int *)testRoot->right->data); TEST_ASSERT_NOT_NULL(testRoot->left->left); - TEST_ASSERT_EQUAL_UINT16(score4, testRoot->left->left->data); + TEST_ASSERT_EQUAL(score4, *(int *)testRoot->left->left->data); TEST_ASSERT_NOT_NULL(testRoot->left->right); - TEST_ASSERT_EQUAL_UINT16(score5, testRoot->left->right->data); + TEST_ASSERT_EQUAL(score5, *(int *)testRoot->left->right->data); TEST_ASSERT_NOT_NULL(testRoot->right->left); - TEST_ASSERT_EQUAL_UINT16(score6, testRoot->right->left->data); + TEST_ASSERT_EQUAL(score6, *(int *)testRoot->right->left->data); TEST_ASSERT_NOT_NULL(testRoot->right->right); - TEST_ASSERT_EQUAL_UINT16(score7, testRoot->right->right->data); - + TEST_ASSERT_EQUAL(score7, *(int *)testRoot->right->right->data); + // Adding Double testRoot = addToTree(testRoot, &score4, sizeof(int), compareIntEntries, NULL); TEST_ASSERT_NOT_NULL(testRoot->left->left->left); - TEST_ASSERT_EQUAL_UINT16(score4, testRoot->left->left->left->data); + TEST_ASSERT_EQUAL_UINT16(score4, *(int *)testRoot->left->left->left->data); // Trying to add Double while Doubles not Permitted testRoot = addToTree(testRoot, &score7, sizeof(int), compareIntEntries, &testIsDouble); @@ -105,7 +106,6 @@ void test_clearTreeworksLikeExpected(void) int score7 = 21; - // Fill Tree testRoot = addToTree(testRoot, &score1, sizeof(int), compareIntEntries, NULL); testRoot = addToTree(testRoot, &score2, sizeof(int), compareIntEntries, NULL); testRoot = addToTree(testRoot, &score3, sizeof(int), compareIntEntries, NULL); @@ -113,17 +113,18 @@ void test_clearTreeworksLikeExpected(void) testRoot = addToTree(testRoot, &score5, sizeof(int), compareIntEntries, NULL); testRoot = addToTree(testRoot, &score6, sizeof(int), compareIntEntries, NULL); testRoot = addToTree(testRoot, &score7, sizeof(int), compareIntEntries, NULL); - testRoot = addToTree(testRoot, &score4, sizeof(int), compareIntEntries, NULL); printf("Tree Filled\n"); // Save all Adresses - TreeNode *node1 = testRoot->left; + void *node1 = testRoot->left; + /* TreeNode *node2 = testRoot->left->left; TreeNode *node3 = testRoot->left->right; TreeNode *node4 = testRoot->right; TreeNode *node5 = testRoot->right->left; TreeNode *node6 = testRoot->right->right; TreeNode *node7 = testRoot->left->left->left; + */ printf("Adresses Saved\n"); clearTree(testRoot); @@ -131,11 +132,11 @@ void test_clearTreeworksLikeExpected(void) // Check if everything has been set to NULL TEST_ASSERT_NULL(testRoot->data); - TEST_ASSERT_NULL(testRoot); + //TEST_ASSERT_NULL(testRoot); - TEST_ASSERT_NULL(node1->data); + //TEST_ASSERT_NULL(node1->data); // TEST_ASSERT_NULL(node1); - + /* TEST_ASSERT_NULL(node2->data); // TEST_ASSERT_NULL(node2); @@ -153,7 +154,7 @@ void test_clearTreeworksLikeExpected(void) TEST_ASSERT_NULL(node7->data); // TEST_ASSERT_NULL(node7); - + // */ } @@ -198,9 +199,9 @@ int main() UNITY_BEGIN(); printf("\n============================\nBinary Tree tests\n============================\n"); - // RUN_TEST(test_addToTreeExpandsTreeCorrectly); + RUN_TEST(test_addToTreeExpandsTreeCorrectly); // RUN_TEST(test_nextTreeDataReturnsNextDataCorrectly); - RUN_TEST(test_clearTreeworksLikeExpected); + // RUN_TEST(test_clearTreeworksLikeExpected); // RUN_TEST(test_treeSizeWorkingLikeExpected); return UNITY_END(); diff --git a/runbintreeTests.exe b/runbintreeTests.exe index c9a5f87eac2604a789d88717676ff6e255c2cb22..1e05d197464c837c505071d9e934f58cab853339 100644 GIT binary patch delta 18738 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 E08n3d_W%F@ delta 19476 zcmbt+3s_av_U~F#7EfVskvALIyg_{M5R_18zIqLImdBZ+V-W8?@QWltmHS)$^01C z)EPjvDCKk~9~V0ZoZVk0$8`-|KDVl&isR~Cq1b@ZA7w86k&ouU<5_viO; zoQd1q)sTIXpq}}aQhY?4iMe(7uX`fEg$jI}DWTh7cp_pYJo;k#U;*Qr!iy+!!Cj=^Wlt44yF zpf+)u*Sk%*y_(m%E@0%sV3u_wAf}k8#Z^r87ebpI}~Swm@}i~4Hk;W zTPlyER36_7uzJ+W9@Axy;}wtBk%63Erq<%nta3P7<#2HTXS7s629`WCWUs%}!W$a> zh|Q~Pq@?=Q8=^Bey5ZM3A!_6Brq zrsDZ3#?96dw%+|z=OYJG?j2Q=CfP+hdy*|tvx6V4(s&y; z-fCslFXY|@;V$I9$@cRLxhHT`fE@RfNJl@39C4AzA&o@#dxIe9H>IT6!hy^o>79Sr zcT}(?>6Y9R4_em$VYD~BgY_-7uO;{RgQnwDPA}OkJ07&usVv)VmPa16{N?vPqus8u z(q?+-LDP%B+b3FJv)uonybWo49S5>HV9A*o{u{n zS^r11oZA{%k2Wg$Hd%i|(U-}3v{}(VDeF%u`ZQUOJ{YSQh_b;>#lT-S=(0N4DeKoN z`rnh-5w`I>TRU{@fEsPVzwPHoH;=O`Koh0{573?gfttI&*&D8-uAYI~D=KUXj}t9G zvtI?q&*gju5>s*PU`D+~DdUJIO^ew`HDtTNAS+}(aM-|Z>n_Sk3_gS14!7PDi z!99%y$^zD*6U|SuD!5S0I@ikn9M}h4KQPi~87fQ5!IZ1VnJ;fz<@DshIFE^XgQ>(X zulXYL(vSW+FgM;GXM7CT=z?VZzWbI%H05f)`%Gd={FqQ6`8ku-*S)!G4K8I~!O^XK z?6OmWB1xd-bF+h1pokCQ-zS@gTW zP;$DQ_Sc1xXUl24E|RP+r_*%_a~p80*9^Rq|+SFCP8IlZL|CRbD< z7O#b7t-EHZunbJ2L(}3rJXQgpd&eXU1Co||XPvuAhymN2dxr&SdbpP}`kTD{0iD1V zy)U*qEw^`_6K;+FzIM~aBycl2zXi||-6O%IJS ze!(L=1!>C-phE?EVSVu0x6%N@9 zDWb1L>PSEl{U9<%pM`4n!E>!{2C9SilLJaE>{~A-VhjEo1Ek>RaRBzQBmRNlyVzFS zBFvgZH%945{v^65DkgFns@Vr`w7SWb+^|hvPunsAs4>PhX0RMp${J0BemK%EM30fXAB({?Qcno6$|FX>6k~(0uZg_&GMMuz2V)DtG1vD%+ zD(^U+Jy|*_KPu@sDCxYRD1s~sOP;3`g##4UJWm(Uw%8b*@ga4dO_1e0CvT&Fi%mDi zF+j;PTIOwe23xIfwXorXcdjuXgBZ^;yokdZJyNHHkNW|lGNm@)UV)W;X{|c?707b* zU6MaM9<&Y`u3Pbd*($49ZcFFqgBI|_Kc7w1`yGu<=Pe}scU0?hB4rB+D| z4!kY3ss^_9v$M`xcSJM&Y3N8o$J4lB{<=GjYP-9T_Ob>8GUQt}Wn$uRWSaTr zE(Y!W4k=@da%BrQSYV8LO*l%IbeSV>O4@0;l*Y&C9&S+QyAiUS@1#fR-{U96`Y=G5 zE1oiM>p>T*_20M9NeM|oGuWL0Dct*-W#uOY^#5K8n4d%UBt+^OR;UB6hAamhw}tj3 z#KtBuKnXZZ=4}C^tk!onBcP5JCi(`g%9exr+XYRL``~gm-IN%qYg?`k`V?e2X!T}# zE-@x{G6R&L6J_2OG{AIxx#D6S(Cn-GH3oiy(o1gyjfyEoBC?2*b zEQ>c_EY&4P>i%7?&gwsq<*eRoqO+2t!%s*Kr01X0GJ6r@dR}I`!M;6~9!wq*Tgxgc z+0T`ETlO=pUSpd&|4eq~$*L^sloFBp${0ECsh?wfnjSWD(q4BbQ$|NK6tl))%6X@Y zHE%EjT7)fQXmv`Yu49Qh_v4V|+&68c`%|J~moq@gX^G6+a;mXfCvBv+Q=&-t5*j!{ z=OQrNB-~$2Ge-oFv14fY2pyT5LDzyz&Y(L+#OPNqRtH`OSq_|!qtbRj#*SnPC4m%~ zws-9pJ3f=(UPlws%ZX+reIi{)PNvbL>3X6`qaQ%Jmr8#~kI{wK zsCqolKffZ;l@8?gpH-4GM?( zbYw=N?lRsU*|)Y^ewze?-D_~8r0Uuf&~o{D3bNd)>eckzn4H+*3{XNP$h<97jMe(LRWv@+pR7os z6EgjEALI3beH*Spmc1TWMK@%Q&~1FcV6)X=>MHtC<|guGHJzT75%*lRwR?7fMIsFg zEt9kQU(!8*Um1X@av+&@WhLu!6njf^46Kqg&3sl;?bt%&XLD@Lxgqnm=6uKi$$Aft zC^ji?*-graK9eS;E?F`%fA%p%<%*DmRB#V?81?O&z0vA#lHxC4xmZZEJWh6aIZ1Z7 z&CcPMOm#sR@_@qxtHZtq8l62#_eqsH;tj}h3l25V_1Ve3ml9>?mp@{i6~nI#LudUZ zk-nF$Cz})LO^^>0sC!NXc`bn^<;3g$R;l)Q9kT54;0kKYX{aeWiSkzZY~XHqRY^zku3=wqQ;gu5VgW7t3=Ch2S- z%H(@r=53>OmI2aewc@m5mu_J;gV-AZ>>-+eNW;>T+5cUW5tc7hhXDE7Y0NmXiELS*+3OCua)E5e{3xJ%*Rxg;CgoJYXry(Hv`9LN~n_HMB zBuAMzPcXElNPa8a?7bn7X5#98bAg{+=o+hp%ft8iH3uXU%i(%ef`|_FX7T!zAQOj@=)E z-Zb60z?9?XXU>2X>Wm*k#fkAjzm~#RUjxRj#u;CyW|e2n%BskkJ?q>B;geGO)x^j! zie_C9j>1mrHB-=b0EXD}hL)U&cr3VQOKDu;1Tt+XU0wJ`c;R&TyQNo#v zXbwu0xNP+M38-!!X}Z{V^MzK)L5xYzLA$xD`Ta(Zgf6_Xh?!X-&qvHXf7wN!cdg{o z{kthFrS}@56RzHL!-6q1Uup=%QZ(^&NO7PyJHG9FAiA)33Y}FPt6h(Z>~{JV2H=9Q zXbOG0I5cUZ1UCHBoQ|Hp`HAg2aFdWIsT$|u-61%9&EEJrdcsc?PXxpQc2$sp(V0Q7ms&7m_(be>N|L(sP3t8@9Q@|tMcT(XDkkD`O7H530R z`s%dxUy*OTiJ^jApFM9|@-+lWg<=R2ht{YY6T70QQs`RVaCzWEy4 zffh?sL^zU60{N_{(OlpNXtD*2RD!PX+8IQXCFRcsQitv36elH3>hKhZg5M!7|E6vMF!O;l)@ zLOm5q6#5JH5Y`i4DD8u1 z19kZcT3f$K{Zjv!oVO(4<3YKyGjzcu-m|@2ZN^RO+_cb0&>}tMmr!GsKL)d%;~1?) z*#(}_7j+!BA3US2!5r5Cp3$#S-UQzZ+8n}h7r`_7yq@De2G3{*N)LEOKR_{qXVg2C z{7j8o1fEeN%4+b8-j2c&cm%?22>0U9Lhy{1;<~d7JfkAYA@GdG z;RHSop3!qCUEmq5#aVh8Jfpt2q+A2f=&LASfoF6Zu5!KL8Ldb_9PkxJFhdhL&Uv3q z4<_NqYTy~w4@UvdXkIGE4F=C>eHzE5f@jo_j^B!bXEbg!#}$ER)FT5wy93YYp)p7d zJflBlaa;pnOe8L5*BC4zha?82t*x`8k>X0p1HdqbqO( z>%cRbiyJ}&_#)89P~yS2g8qS$3Z5(BxDb>a@Osd26a)Bp(Ag*j;IT-#&ryn>!}#}t zxs6iED&u^*i!zt-xB~Sw6r0FX*Il^cMIc&}}Fk;9Eg=p_~AZ z709Jlptrzhf_9*s2hV7TaW=XOf*y1)N)J@F3>9|_rP~EisG=J z!`ek~6ld^^{(#aSd@pGI9IPhrj2=YMf$snfuSQJp#&|IEP$HNS=WboLkx!owK;IU0}W|U0u*rK_xdFX2J*nYVrlw$DMa=F7OrQop* za{=?Ysa!1t?6X`3%4%i=T7t3xd?o01lt;j~gZ>TWaqvB$KDF3H!0SP$q3i;WvxO5D z(25mT5{vLsj0f`ZK#uzsg^dEEE)G2BFcux9=49szRvt%8c9b&XXPXJiA$yYlU2XN)OG7fkIMZU_HW(ax_`(1j)PqX zY2ntC&aGQpdGeHNTd2?W#~i)ZxnPvw1X+j4?jjRq)xftBEvoLhvI-hs+WMHI@C{RS zCOFja{A$WSo)3R?;^V%&6RmmtNPkBkq~+;&98Mi*=F?u4j+j221Mj$^ZvGOSPSv$l z%Q*)ktf*bOyg^^Lq=9oPDav%WK9}Hx#d_ui+dVHDC0@M(`~@yjV*A0mEBAI7fQ#iF8Lt z-huhaXk9?{Z9(Kq2Rf!rm+H}g({yUx+8WN^<1(uL2_v3;aE^ue^s8P}Q?wQU)ayU29xQy2uD{&4>b1oa5$o}|UZy_E@ z06WK1NnOgPdH_qhU)vF*l+av7JYe5s#pP#@DVl$4k zNm3%0E=$fr&60-YYZ5qbEwg09E&++0j{;N*%WGCNE^6TXT;xemj@kA1Cyk!A)hg%U zMmlSs`qr7}XwmK%?|vKQVbZQbVqwMb?b6Sgw(O1>wFke*HS&3)0lmVUJ_#yhh~Y27Di-I%xCS?elk=yRjtWcG8z z`40Njb0hhSwEMXjz8jyuRJ&hGdYWk1{&3RUM91$B=ef>>`&0Qa9N*G>zAE=3hB8>{ zn6WkU>y~i$o&T6Z-+4Zjd^LskJwJ+MPoe1tD#`W9boYU5GI%om@<4LzqRFxgH!VgG z_Xo)z6L99UJ|0(9w}|U--dRL54<>7F6xj@zho*yJG2@CCov-ZNdNj5WXz)_lYIKVY)`SPkY-1m+i6KM4dhhiHh*i6WId%?HB zPE$OQCLbO`KFXujhZk!C^X*hl6KLphUpo6WL411^? z;=)z@K!<+|WjS>3i>F9ME}eBGfjmB*wjPNX)M#hVk=JwVYCGlH38)o%Jdpl=L`$Nx zsoT+|nx)xx>M1!=LhVNflAp5Zt5A;^Yp2#{OX~cWH0012I`gHMHCdTt6a zWYFm^FV&Q0*s1o8k!s$0*^|VL-riBESvlHH>y*K?;(IH3cZcx~hIA^zf~MP9M2wc| z2fZ?o)ThzJS9(*vOtVubjkFW?+YA4;7Xs61>9JUnmr9$CEg|~h^!BkANn{Fb?@S>1 zBj`t+5re!_ZJs!?ez;8{SL_AU3O$}m4&rU+@%5VDlI-mKhfBHk9oLhgi8S=p^_qth z?bPi_k{W|fFTLtcDiY}RS1UCK66{Q(QB9f`1IV^`y8N|D%_s48>gfse^VfpOtHUV& zdX?tSVRouV3qloV?`poNVN$pVTeWI3}8$yjICX%=z^va1*L>x@rP7WcZgXzeV z8RT9ZU3=0%Zb#AcC$mOHJRD**h=d|v_PQ-~&a_vC%;DH>$ z73!j+^Jo(P-@LOYQzXlZ|BE1KNwT*fkU@%dKB@vsrEb>)9F7VDn&_hIAx5SbJiZk| z-Vi)C2_a4RY_b;^6uC+8$QK-%zIj6szLoMj<>)--|A!HHICx(0X`=J5j}X2U`a55z z&tIR54()Wi(XA!u&3}IX&h}gFp_bD(%R{?`WV<`|JL~Xne}Ch zFkMc8U}Am&f@$jdQxu!Di6EH5Ge9t*H-TV!9|pl>XVo$F|A2(W5!M^UZ==h4quCnE zhcJ|$fq*5uvp0&Z{_jDs7kK_0#Wt0ZAlP~y1Bn|g5o~0~AYrS!0fG&Y{1U~s%|Rg8 zg{OdEyIu=|&3zvT4u(r0ICg#k!66iIJBl4iV?l6eEw~-b&Z);haPA!jh*R(?2+qVm zKyX5a-H9SArqcX785o|<$L?Hn!oQVkyB|Vc8W7?Kiy& zR~??ybEt>EXk7AYRmgZCFZQ?CEUv;u0e`KyY0I^SHq@+c08#`yw1w-(Kjn%CLb1({ z_ZEA3-XI?9$4}wA+d{p?00-WKUnj;o@CyYu1auaEj)2um4!nWiApYdY2e!pKi1i-4 zgBT$2Gf1z8_);JrY`g*A%^FKY7XMoy&*Ro%%bfjllMWSfAIJwP#0^gy-UBSPERQ=+ zS`p^i8#Y~5L~0$jHLh1`Fl$~IdePO|yrE*PBR|Kj8z#V^_CZ4h_HWy|S%bzKz0fI= z23ovgf_HxvG8%|pg%kpbQz0{eWU7!FAeAbl9>{7HvH?h|Q3bUDI;2AO0y(BaUINmk zLQVteQ6cXGVKc_ouzv!{R3Z0(R1%}Tk-sC};;4)wfoxDA2|!v^NG6bdDun&h*F!3# z6iAl}Sq=pM(rKYxj++2oM9Q|TMIhZOcM zTZJ43qEjXRIuN}IIS(X4g?tF)9==Rw!C14g0)dp`nc9Z%cs>zz7;sxg0|CVa*&7W4 za!!Rz1X3GpZ?gi3Z-_neD3Dhb1fz^U_FdIBy?v}#fK-Iyg{Ce1Wk5s2?2Uc}axmN; z3BhiskF-Zpf#k)=h}_nEAoa2KHuHcO@IKlWYdsM5RvHV=vY9>u$YZFz(d$4C;Z?NF z<^v!<;e~4>3}>&*&D3@vUs%k zsT-!LW2U|4FfIQOMh5Qpp_E>wHpMiX(LWmn)7Drkk>9H|) z$=ns$mTHzG1uJS_e|`baiSF+FLL3}xK!_U=zi|hu7bkl_EXonz^5ByPw&qx>bNEX@ zjBXsOfudf+I}dPAO0Q_Sauq291F>O+{LFG^D)g?`M3OC z;%Q(03BrvR3;p;oFK)agJ4*u4plRd8OMZMS(T zRb=mXCiL-4?`rXhns@Z@*{%5eF%+$UAl+U50&{M%y@MkxfC@PSq*sM}2Bdz9eXZYs zbf^#)TuI`m+S~X8saGK>zJR!5i;*Q`B&QAMKjGgJzYXWd^Y_GI5q!8?w`9jUJW*Vh z!2646NQAgEg1<(zC31I3$f-z-?Kk4TA~6P~1I2(2Usv(R7z_gt$r0$vSXi{nve3?ah{GazKXH#A?<77sh(Atx z6=TpPar_@7ewv)-x9p**4TySuGWE z4oEw@NT-^?RjPEina+wdtX)yVCQgqPVNrPvjqeL~ovmo~rQ%mZ&~r$$XefWotrZ6< zJ8t^%p5mD(^#1N5K1D1ah8whQGPoOz+ddUsX*@V>F}P3S`BrgTG4CR-$>ryWA13gN zagkn@%P$lUC-RHH4=Cn`iv>xj(7yx~E+z4;r~-=x;ycN(miUF@?&16*@iAtRnF3qq zY2e;s+!n^Aj{xT|9o#9#ZDL$%DsOnY6wGU2_%1n6avJ!HGJh-$p}OTzM@J%*#4i-L zj6!1FvQ11n?61lE0mk>pe8gz*W|`l|_+F7`u|hL2Tkp#F?hM{QxU#3y_+(Kx2E4P( z?_|7I=KV5l{L_s0D-(M%`E^8JCbqJkp;`QR5+fUH$HE|9=C?6ERp$F=gU^)t$Lx6L z9PFP(Wlv8)UpnMs!WEUV*|$LaR2HPn){jHwQn~Uy##hSx+VS9PW&ZAXII5Q&-7&yX zz2fL{o+L<)mgK`|12e*^QS@UApoh>=fF^B~oz0mD$E}PXE`B}{t=l2v6@{qZUMBVy zvPGphNGyT_2<=61a7Z?sG8u*)ayEripzlzOqozuNl+DGdh;l-%Fs>MUm(-!_$VI7x zhl|-I2;D6kbd|v1n#^ZR1K%U_Z!+F2^CPE&@0IxzjK3@MDW%AUn;~^_Vi^+PW{B-& zSnAvi98&>e~VR+Z@} zKiq=ERn^#b>czLKk@-bcVuzrw7k`DGXlIBSbNTkjR%@Qj^L~FE465#Y8AzAduZAD) zm8pt#8;aIav7iPCZ&g(p9Ds3Sa~cliSvm>`Cq54+m@faQLB|$}C^#G$pgX!Q_rWi8fOeVOsXd&LV^r$-juh5rT zU8CXL7eLr=M&xsTMZ@w%HA^tUR)pF74jZj%dN_yTU6sm@7mzO1nn(kZ8L3)a69C