From 8a48a85b2b5b0384a3ca03490a1dd08beca414a6 Mon Sep 17 00:00:00 2001 From: JanEhehalt Date: Wed, 23 Nov 2022 09:00:15 +0100 Subject: [PATCH] [FIXED] Bug in isometricRenderer.c -> Segmentation Fault --- Input/inputHandler.c | 8 +++---- IsometricMap/isometricMap.c | 38 ++++++++++++++++++++----------- IsometricMap/isometricMap.h | 6 ++--- IsometricMap/isometricRenderer.c | 12 ++++++---- README.md | 1 - inputHandler.o | Bin 0 -> 5456 bytes isometricMap.o | Bin 0 -> 3760 bytes isometricRenderer.o | Bin 0 -> 2568 bytes list.o | Bin 0 -> 3168 bytes main.c | 15 +++++++++++- main.o | Bin 0 -> 4576 bytes spiel | Bin 0 -> 22752 bytes sprite.o | Bin 0 -> 2648 bytes tile.o | Bin 0 -> 1072 bytes 14 files changed, 53 insertions(+), 27 deletions(-) create mode 100644 inputHandler.o create mode 100644 isometricMap.o create mode 100644 isometricRenderer.o create mode 100644 list.o create mode 100644 main.o create mode 100755 spiel create mode 100644 sprite.o create mode 100644 tile.o diff --git a/Input/inputHandler.c b/Input/inputHandler.c index 7bf8d95..579ceb3 100644 --- a/Input/inputHandler.c +++ b/Input/inputHandler.c @@ -129,15 +129,15 @@ void mouseInput(InputHandler *inputHandler, List *sprites, Texture2D *texture, C void keyboardInput(InputHandler *inputHandler, Camera2D *camera){ if(IsKeyDown(KEY_W)){ - (*camera).target.y -= 100.0f * GetFrameTime(); + (*camera).target.y -= 1000.0f * GetFrameTime(); } if(IsKeyDown(KEY_S)){ - (*camera).target.y += 100.0f * GetFrameTime(); + (*camera).target.y += 1000.0f * GetFrameTime(); } if(IsKeyDown(KEY_D)){ - (*camera).target.x += 100.0f * GetFrameTime(); + (*camera).target.x += 1000.0f * GetFrameTime(); } if(IsKeyDown(KEY_A)){ - (*camera).target.x -= 100.0f * GetFrameTime(); + (*camera).target.x -= 1000.0f * GetFrameTime(); } } \ No newline at end of file diff --git a/IsometricMap/isometricMap.c b/IsometricMap/isometricMap.c index 957ab94..1b2069f 100644 --- a/IsometricMap/isometricMap.c +++ b/IsometricMap/isometricMap.c @@ -5,20 +5,20 @@ #include "raymath.h" #include "raylib.h" -IsometricMap * IsometricMapInit(int x, int y){ +IsometricMap * IsometricMapInit(int x, int y, int layer){ IsometricMap* map = (IsometricMap *) malloc(sizeof(IsometricMap)); map->tileTextures[0] = LoadTexture("assets/grass.png"); map->tileTextures[1] = LoadTexture("assets/tower.png"); map->originX = 0; - map->originY = 0; + map->originY = -layer * map->tileTextures[0].width / 4; map->width = x * map->tileTextures[0].width; map->height = y * map->tileTextures[0].height; - Tile* tiles[x]; + Tile*** tiles = (Tile***)malloc(x*sizeof(Tile*)); int n = 0; for(n=0; nsizeX = x; @@ -29,14 +29,11 @@ IsometricMap * IsometricMapInit(int x, int y){ for(i=0; i < x; i++){ for(j=0; j < y; j++){ - if(i != j){ - Tile tmp = {0, i, j}; - tiles[i][j] = tmp; - } - else{ - Tile tmp = {1, i, j}; - tiles[i][j] = tmp; - } + Tile *tmp = (Tile *) malloc(sizeof(Tile)); + tmp->textureId = 0; + tmp->x = i; + tmp->y = j; + tiles[i][j] = tmp; } } map->tiles = tiles; @@ -59,7 +56,7 @@ Vector2 * IsometricMapCalcOffsetForTileAt(int x, int y, int textureSize){ } Tile * IsometricMapGetTileFromArrayPosition(IsometricMap *map, int x, int y){ - return &(map->tiles[x][y]); + return map->tiles[x][y]; } void IsometricMapProject(IsometricMap *isometricMap, Camera2D *camera, int x, int y, Vector2 *tmp){ @@ -90,6 +87,21 @@ void IsometricMapProject(IsometricMap *isometricMap, Camera2D *camera, int x, in } +void IsometricMapAddTile(IsometricMap *isometricMap, int x, int y, int textureId){ + + //if(x < isometricMap->sizeX && y < isometricMap->sizeY){ + + Tile *tile = (Tile *) malloc(sizeof(Tile)); + tile->textureId = textureId; + tile->x = x; + tile->y = y; + + //Tile tile = {textureId, x, y}; + isometricMap->tiles[x][y] = tile; + + //} + +} diff --git a/IsometricMap/isometricMap.h b/IsometricMap/isometricMap.h index 50d0661..7d31680 100644 --- a/IsometricMap/isometricMap.h +++ b/IsometricMap/isometricMap.h @@ -5,7 +5,7 @@ typedef struct IsometricMap{ Texture2D tileTextures[10]; - Tile **tiles; + Tile ***tiles; int sizeX; int sizeY; int originX; @@ -15,17 +15,17 @@ typedef struct IsometricMap{ } IsometricMap; // TODO: -void IsometricMapAddTile(IsometricMap *isometricMap, int x, int y, int textureId); Tile * IsometricMapGetTileFromWorldCoordinates(IsometricMap *isometricMap, float x, float y); // World Coordinates -> Screen Coordinates Vector2 IsometricMapUnproject(IsometricMap *isometricMap, Camera2D *camera, int x, int y); // Working -IsometricMap * IsometricMapInit(int x, int y); +IsometricMap * IsometricMapInit(int x, int y, int layer); Vector2 * IsometricMapCalcOffsetForTileAt(int x, int y, int textureSize); Tile * IsometricMapGetTileFromArrayPosition(IsometricMap *isometricMap, int x, int y); // Screen Coordinates -> World Coordinates void IsometricMapProject(IsometricMap *isometricMap, Camera2D *camera, int x, int y, Vector2 *tmp); +void IsometricMapAddTile(IsometricMap *isometricMap, int x, int y, int textureId); #endif \ No newline at end of file diff --git a/IsometricMap/isometricRenderer.c b/IsometricMap/isometricRenderer.c index 7a88c64..c961894 100644 --- a/IsometricMap/isometricRenderer.c +++ b/IsometricMap/isometricRenderer.c @@ -47,11 +47,13 @@ void IsometricRendererRenderIsometricMap(IsometricMap *map, InputHandler *input) float y = map->originY + offset->y; // TODO -> results in Segmentation fault - //int textureId = map->tiles[i][j].textureId; - int textureId = 0; - if(i == input->selectedTile.x && j == input->selectedTile.y){ - textureId = 1; - } + int textureId = map->tiles[i][j]->textureId; + + //int textureId = 0; + //if(i == input->selectedTile.x && j == input->selectedTile.y){ + // textureId = 1; + //} + DrawTexture(map->tileTextures[textureId], x, y, WHITE); } } diff --git a/README.md b/README.md index 479fa7c..25277de 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,5 @@ Fantasy Welt oder Realistisch? ## TODO -+ Bug in isometricRenderer.c -> Segmentation Fault + Sprites in LinkedList speichern + LinkedList erweitern diff --git a/inputHandler.o b/inputHandler.o new file mode 100644 index 0000000000000000000000000000000000000000..2c06c3074355de1321db435966bc1305e8fbfb58 GIT binary patch literal 5456 zcmbtXU2GiH6~3F@1_MrJO+f?^VEaJoAhWSiM3g|&wc~NdV3Wv+g#jaHZI6kGy=(2x zIyO}x!VY4zisT0#fWEYE2woypDi$vu2U;&kMea+qYEvoDpl%vV7>vXU8JY9lpWW-p zj#Zo%%bIMvPQp&4`-CHKV^^G%l_g4Q8o2Z7r5#O697ivNB?P z?HT*b(&PbHWB94DZ!xnMqY}M#Ugp55#IVdXvo`ZEC0mcY_ze&9YbET4l^+}b3vdBSA z%b)Yd$8P1#64htQ`&19yDXQIq<>oxg?VY#W?n_;+`Cc_p6i1H?DK8C)`YJ4IxH1)m zj&*VBZlN1ZL@8qhHK<2It$gkh0q=FXWlQF90R_!TXFaC_+Ie=t%RO0LM_)cth5gId z!FGusV#VS-fSxtu)m!;q@}wt1t77|?IgP%wF*~`9F+oxBsB)5lQzR1+txSryxKi0` zou+mb87LZ!WZ&0~!7o5hXWDpumO7HzLhvqO35rwSA`RyAi8}Z4;(s3sE&rX8{0Q0i z)2T-cxi1#&Nm$To$|B+}F5Y-3RM=zzx8~i?RlqIxG69t8D-{Gm$|oYcFtlB{sA+ld z-f3ChOXu+s4@Fu8OnYhaHo=5E{~}(!Tw$Gh=!*Gu zaT}|x5#8sNOKDh%fEG2g1dvfzmIiNn0 zO|B(k*t0cruEdNB+v!GJfFh5{tY^%AAQU|c0qL#Ym=ojGd}8+n&zUBU)uqHPm{1q- z4X6Zv?Z6Nx7?sA&wpMb=45xZkI=@QJuafgNIX}1QCW+EbLPtBdy6|juPtLFT=Ezlk zbFLZB6$C4<_I^}5_pE;5#8!=X!Aqm|Eg7L&Dl643v~Ja?>Rugfm8^uc=CWs#r^gP( zrVhm(9%+hAi{`9oPNTVl4clW*vQI#~|D3=D#d%33oAbYA?3H$Q^vIDzvBuuPT*}GC z4#xM#n;&h-@lngGk2S}e_s3iI3Y^>FI7R8ft#b64UPe{x0SnUuxmz?W^hys4O+`cZ z*WXq*N5vB(e7Br)QB3B}=o{OP?AUJ3gu}lJk(QWGNS%YaPPmyX!2Xn+e+r8#j&N%P z1Tlin(*wDQmzv-9CFcheBv>xOzS*cXAFlaJ4SQC*-fR^nrdkr_QM+{}%x=3CBqYoz zC^aO^Zm)qtfBP*sa&?#HKaV|O_tAqnzw9HR7M=*eae~0FczNCkJ0ZLKeYcyqN zp#uhvuyJU2Vhz@rO^@47W^|}KIdMFbei^HDW;tD3&T-PI;~6`fwTCx@J@%NL1bSj3 zGwRq!GIr9jS=VUR=}cwqjMJ7JI>Trx<&3a1_Vi#nnHg5=J#A07r_ZL~QAZ{@Zl4?- zwtaGifT0QWTf z4vptC4ZlmnztC`tsZGTJ-S-xiT^jlL7Ibov!;XY+tMEX>7x8sZ5vIhzOMJl7WdynMo5w0|AMrS>7>;6 z)4og?*7w_&q~afFP8YvDs<2l6%Q8@>q%rc3UyI6K<-gY2FnLq{wCt0Pp`7qN@Y_Sp gpL>GXH7rQ-t!OH5f2?tb*0S%z1c@V>%G+=M6NC;8UjP6A literal 0 HcmV?d00001 diff --git a/isometricMap.o b/isometricMap.o new file mode 100644 index 0000000000000000000000000000000000000000..b31a2be67b56b1a0786dab0e78bba8396b600220 GIT binary patch literal 3760 zcmbtWL2MgU5dHSLt%0<5P$WRDz@UOcX-xt}v{V$Q;U`;^P^--fXlY&7-ZXAwJ6f+x z0}Vt9Aih?SeC!1&2kyP}kVB-}X^>sygFzrgs0Rxf$)Y)grVGg|M>->SnFAJi+dake7Q(wsc|ngtatlL3&ST$h<7vr}G!&ar;~ zKXUuKfV{^f@0AT&DNZkAP!NOO{9~CdB4~s>z8j0PVd;y!PhKoE+!oAocY)U=&;b zuF?!$av5~#2wk}LotcQTz;YFn3u!C!Ecc@sxP<;iTDBHbyEno0duMKS050lVg*eqB z67gtNLn*Pa$J&)y*lW-d&t?tb!GPumTHP6I(>T(0ivWGZl z9#_F}-)P#;b2}cSX}@Bc&G^&Y-iIFr;V&I>AtM0L96Tsj@Q<*&lU4x4wh#>GA-}J; zGfQp1Kv)w|l~ykaBDE9Atm^ESaaQtVS5fHP_u+G7Q{HJ(H&He&*ljEm(NzJ|j zMiQBHQq{FYY&bd*jFICu^>`|wlgQxEiDP|3krM+0r|3vzr0>`ejgVw?d^{Z^L+NOI zM7^qKHI+mn89f@i9Epuxj*LbV<1L~3qvNp?qoeQ}97t;;iE*`0Z?O-mI-&zwI@zab z(aCT+lh70CR0}Drr7x+mR>!`0939C^coq;m9)30P3P!44W}=(M(937?0{v61U|W7=m0R3hFVLd7P|yYVpC(7(sV!EG3S zv>;-REzRQMUYz5YZ7(>uUgQ3D4EMrM;3r{&Uk_*g)7(EGh~A!N=@Z-wbWLM&mU%Y`^$z+YUtK=lcL%k zR{L~b{cuy`Tjh4h>psX1zU+M6LHT&ct`7ioz`pAm(6R5*YzM7LZ5Zc>F>E^A_WDJU z9$F{3{S$W-?z|D@c7)rPqt1BDo{HH&PTJq>5jniH9WSxE;;{O8*3i~}`Lok;*mif~ zF;=@7DY1s~bGVdkC?!_I)Y^Hrt$p?trfzI-=W6>~oFs5A+%9egkHI~Z{Zl^vRkUeh zXFlxA*0HgD&))Iove}*+xkYD4yrH*;uZgxtdBY1gdc%pZj5jIHom&-5aFR8i`GJ@3 zt6Ztl@h0oNKGpMQaVR~ZXTzn|GSj<_)_?UiHA2~BxbiL8{UmVd#&g!G5Jsisc!nk6% z9>F#JdJ;kan}n&jNS^W(DDPbaWi6(hJbo;?frk@E{239ujXtm^VjqPj1|qDas-GyB z<>e$q&T24c(aRCxBZ|_)@LT6d00Fh{pMh{Wb#ImGzGW{)o(jI7i7%|eF`sv6s(>%m zM^u-+-oVr7KIxm&|6*PIJG_V_!Th+30^L)02^WYz z5{XN`Krh_LTIog9mg(v1(lU*ev~J;xf_^P+r9odT6hP19vsojDST1iFI(`#p3RXJv zj_}{k74=m!ziOD)4ba^V#`V;ana&#C0RQtD$9ke9crz1-kwgPmT+rtQ@p%##ahAa4 zmnMDSDBM%<7;37OH~NIYPYFD*4e%f!@`L*ii=M&se_KB)_8$@brIPj3-!F21sn20h z+WtH%IFJYib6-Q8zJ782x-Hg3eY}f!hU8Dei)c{KVEt`T|CUS?I#_=d@qXtwBrb&H zh0c#^WxYJVetXkaZL$BncwzbmAMI05SU;+`xIdp`+%G}?1~J&L{)(7?#b1neu>LQS CoA(g_ literal 0 HcmV?d00001 diff --git a/list.o b/list.o new file mode 100644 index 0000000000000000000000000000000000000000..eb4318e2280fe88d0172908cc5b38143197e37ff GIT binary patch literal 3168 zcmb_dO=w(I6h1Rk(=knxv4}=mJ2IWz=gO+z3OL$2>tN8D~H8Y?!#*^Vc zdWP&oy4`aWW^W|p4DF4)@|_aWD0E$E_jOVki;NuyE5^*%ukJ&1n{7m_t(dIsXdAt@ z-S!>rbh45g-RKe2VO2}}ZX1uL*iw48DJ2G-v^#w}dZKT^IG`)KFW?Q8EU86Pft^Aq zyE`U9vcnXmY(FZA>>{%NkF|&WELfbZeM(}Y3an6Gz&{i}F73pLv~o-2uboE5JY0X~ zR;Jf8F;6rp)N{NEF*Iq#$F!_JD7$jTRPV_3Q1^e?!nA|0LiX&cb;UZnIyOECuLI1_ z%{^shmnu;`jI3#U%FazpMnal=@9~_So3bazBo4>04l4CNT=VCb07tD$SPB=>gK~q! zy9I-cIbAKDqjX%SWElON7}keoX?kbD^}r0!|Lk=~(CPhaclUn3mp8~XJ0 zU-tA@2uJGDr>Fm_r~j02q;vF9`nphy+C*GbIl6vB>IsS?dP9!E?+07#H>5qzMG#@F~P8 zj`A11MJ#_0`xowkU*tGN723;C#BDC{z0g13Sn;7eU%W6oQ!HO76fWf#%ZoF!#e5lRUbWhgwxwXb9u^wG zh8L_rGYVVKBxF?tdcNNBgRl@Z>Y*mjddqLKxGwSM0&iocTD^p>q2B@$B@gfr*G<2@ zAzXhQNV>*29glva3ctZP*$->@=Zq_R4s-B@Wbc4N zqIz_EmHT3z>!ya&8>8Y_$P=iHcz^=4fU`i}~!npq5<-e#c zcBKB(zmW1*{g2B{E)E4n+UEn)TSxDO=}$4^uIfpizfVxFlX-vC-#Gs@P890S$eaFu E1AQhP#{d8T literal 0 HcmV?d00001 diff --git a/main.c b/main.c index 28c66bb..d7f102b 100644 --- a/main.c +++ b/main.c @@ -28,7 +28,16 @@ int main(){ camera.rotation = 0.0f; camera.zoom = 1.0f; - IsometricMap *map = IsometricMapInit(20, 20); + // TODO -> Isometric Map Array for multiple Layers + // -> Make only most upper layer selectable + // take selected Tile, if that tile has one above select a tile in the upper layer + IsometricMap *map = IsometricMapInit(50, 80, 0); + IsometricMap *Layer1 = IsometricMapInit(20, 20, 1); + IsometricMap *Layer2 = IsometricMapInit(15, 15, 2); + IsometricMap *Layer3 = IsometricMapInit(10, 10, 3); + IsometricMap *Layer4 = IsometricMapInit(4, 4, 4); + + IsometricMapAddTile(Layer4, 2, 2, 1); SetTargetFPS(60); while(!WindowShouldClose()){ @@ -40,6 +49,10 @@ int main(){ BeginMode2D(camera); IsometricRendererRenderIsometricMap(map, &inputHandler); + IsometricRendererRenderIsometricMap(Layer1, &inputHandler); + IsometricRendererRenderIsometricMap(Layer2, &inputHandler); + IsometricRendererRenderIsometricMap(Layer3, &inputHandler); + IsometricRendererRenderIsometricMap(Layer4, &inputHandler); ListDrawAllSprites(sprites); diff --git a/main.o b/main.o new file mode 100644 index 0000000000000000000000000000000000000000..90818e828be777fdae379fbc470c4f945dcd8ec8 GIT binary patch literal 4576 zcmbuCZERCj7=TadfT@FS2nvEwP;?q8+e9P8k8a~`cS#3?Zb~Ai+_iUGp}n`cy%k0x zPUkgiu1yvr(fC98ZA>&l6C`2lz+^M>W149ANBBW92#J_waT>M0@44r!XI)QX^dvnW z&--!S^KsvM`=%1I-P(S>&BY)R|I>)X|hO&Dt5(UZZV+xl)RAf%=t*<^m1Mv^cm5PKK%S zlrqZNF>Lz-zkpSPGRiye@y?iN|G`C69zO)tL<>|rz9xw8B5vsTdK6*BMbDvV1&RVF z!itN+D1zN0w4$SRzstJLr^|@(YW4g&{^ zKe@(j4bdS-iMa*;2ILWLF9JGi>Jz!IH0rmwo;AlqMcUOiNR!X-}y636B$e zUhCn9S*Y_sFM+49hzuWgESMm$_)Z@tzEkzS&2_75$KaAY3Tz9N5b`4$C~NEAUD3W~ zl{(`0Pu74I6G|G)2Q}o^QZ=!^YR1QycvMTR{B#vd8IJsPRn_?F<&f%E586-ek?5~l z#?iw%A%40yz%Y5?K3A4U094~43EwB-aQIdI^ho%igy$suZ3%y0!atGl%M$*RgkP8N z+Y&x6;eNPq)%LkT!gomcZVBHf;SmWxBH<*hC5=#=HYC;=IoQ@3i5=|dh$=m?p4PUA z5+hwk(tgED1`$(B^ysJToTZaUGHauVbY;!7Zd=KCx0YE3S`&$$WJ)Jd-R{w>0p0F6 z6eVr?K+@Q6X^>(DNP9}xtTruvV!$$UM#2+zn+d&Tf7$h6-AL$`Zh5UZBaH)nwWdRm=AXOk29P@kz;32*eW9=A=aC88Sx_8?)S1E!VMQpwXg z2hq3&%K*Hf`a=T8Pgc&)GtT|+Tw1K)K{nmzu36{JraIU!jDV1BjKM39G@#b?^gnE5cs&j*9rWl!0#9MZvw}65cl7J8vq5@ zy8(WjKQ7@fNO)AjlM;SP;13A%z9H}j1^&Ij@e7B?IVbQ<0$;^mZMd$71iqGWG{bjv zBmA&@B9)fR{UG&Lj z;{hWV%2;Mbx9lOXK~MT%tl!eox;O9ttb<^WSF`fX9|nenzwf<~r_1};;#uKVh2bZb z4F0Era*UndebC2w_!kNNN`~=cj59SDd1W2_8_7rImOVy`;3?>#&;M$Vc@cdsIZGI? zXY)5fUo7leETX;8L;Fg-{mdTY6AO=@w{0NgeNiv-FV}wzr&qI|W%1kSODL80{{Wy}215V< literal 0 HcmV?d00001 diff --git a/spiel b/spiel new file mode 100755 index 0000000000000000000000000000000000000000..653fa6a101f8a6684b8b6ae51e5be66606140b8d GIT binary patch literal 22752 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 NmvOwvq2NH-{{XUYXL$es literal 0 HcmV?d00001 diff --git a/sprite.o b/sprite.o new file mode 100644 index 0000000000000000000000000000000000000000..31f9dbafc463a4c18445a0b82a1f4a001a667c2b GIT binary patch literal 2648 zcmbtVO>7fK6n<+HaKVWeltU^av==Ih!q%y{fM~V(u`@`apd^keBx*L!wiN6*TCdfB z)E~(zVzff!21mGYM4YN#fKY+B<$wf-9#SbqmZ${C7ptn|zBfCAH=FgPebVfE?|XkU z@6Fgh=BD!rO#?+5d=6brp#U#;c4bS577Rc?v@!?&E-?NlYy4#}{(YPA`dh{eO@3-~ zlIJ#=qg~3}Xkt{LvRmxYMjzvAsJ59#tjTyH*0|ov9L{aFGJCC5Z~F$>)4lB? zUhi!e@q_X9r`8Z1x0i9aYrK9&BQLJMPP6Nu5l%;j)n|`YlV-6?L)fJz^G`MXlfyqh z^Df?pU&!m)6TW`1(}50O%vZ~0fT@Xzg8>8W$_!{Ly0$;PE47Lbg=&hr$Pd!P$qndN6BGSA zlfxRifPv5nTtsi^qwKjxGVup_fbcm_Hlzl9luzPH;6PXpqLMq{T_?_*jD5*;CUvT< zQAyE-tr%%Z(UmxS*LG0&)2X&o5%0y(AE<(4&w~MR3E=F+GKQL>TE1tc8+;and zK}oJtwoMOP0Oq3Y*3HR~)&M|Hljrr&dO9riB>M&2Uptmu(j|`s~L=y|!?L={5}!X(eE=2RX&6 z7bE^`Q2$8c(UMeC0sN;&^){3ym!&S*JRUmgQJ0*cl@hA?4SX;N>te=i)2 Hay0&5O?$VD literal 0 HcmV?d00001 diff --git a/tile.o b/tile.o new file mode 100644 index 0000000000000000000000000000000000000000..ab5577697d3b561c8f279c63aed45d60cd7d22fa GIT binary patch literal 1072 zcmbVL%}T>S5T11F?@4chmwHmcE{W8G9wbm|FCtzFy(TfJ*!+-ez+Utfd=wv{ujCWx z%yyS9yQ!c9Gqdx}d^7u#ypL{gI-UnwJh+Bcq)~uR0}Le`!Y=FpjEBRk-pM3xa?$iI z`GEWVppjAVcJ6b3z=P8zE?Hf)d#D?z1t%kMkn0jLO7GZ0q zF}W+3z+lq_5n;F^N5u0iQo>0p(56^R>Ugq+XkKGcz#OcI^mrTd4MzRVq$TdF|+|rcghdOZg8~v{0US lS_wK(IR0_Y-BIdZZM1EkqDr@q*1mg6Ocj4Bt5(K7{|^jnI4S@D literal 0 HcmV?d00001