From 9e35cc9ebbdbe868bd1082e564ab541d74694bbb Mon Sep 17 00:00:00 2001 From: Jonas Date: Tue, 15 Sep 2026 09:57:01 +0200 Subject: [PATCH 1/2] Player Movement: A - links D - rechts Leertaste - Springen --- SMIMS-Game/Player.class | Bin 1101 -> 1563 bytes SMIMS-Game/Player.ctxt | 9 ++-- SMIMS-Game/Player.java | 90 +++++++++++++++++++++---------- SMIMS-Game/PlayerTestWorld.class | Bin 0 -> 574 bytes SMIMS-Game/PlayerTestWorld.ctxt | 10 ++++ SMIMS-Game/PlayerTestWorld.java | 33 ++++++++++++ SMIMS-Game/project.greenfoot | 45 ++++++++++------ 7 files changed, 140 insertions(+), 47 deletions(-) create mode 100644 SMIMS-Game/PlayerTestWorld.class create mode 100644 SMIMS-Game/PlayerTestWorld.ctxt create mode 100644 SMIMS-Game/PlayerTestWorld.java diff --git a/SMIMS-Game/Player.class b/SMIMS-Game/Player.class index 53822cc5902166bc4c25a83757c43afe637e31e7..ff9a79d8785e72a9b61bb93f2b512732c93c11e8 100644 GIT binary patch literal 1563 zcmZWpTT|Oc7(Ma@8M6*xZYBhhv^3ZX1sZZ`F_3a;z>NuMpcFcj8HBwUfsq(l!0=Nt z{Q-UM47i;>^f3?pPwn)4vH`apjdoZ2?Vj_U^X=--zkmM&zyfxXh#+brrVvM)fzFDr zwY%?m!Q?_I@O%SpvySTo^9G{X+*UghXg85m=zwDEZPmWeTokXJXk9j76lBF6g-!{p z!_(uFjlkD#B{+~kw?bM1X2rM9oZv#{dKLO)E_J5;z$w|)4S|x#fIvDktz&Xr*1!Ci1kmAzOCO zDa_-gfecyJU0rYk?bmcEU>@sxha4CfZB22hYS(J{T=7;|SkAnZdrF!`g(WQ0Tmlx3 z?TR*VFWb8Q#)vS=jjym`VpX9avNE^8|6WMjh`6e+%dtpjmb^0IJByC1-<%%rX@Aq+ zt8ykSK2*1C-;wX;WGpyvYRs$HI9s$KYKy$oMqrnY*6fq!y7o$VCN{kj)~|G6`&^~{ zRlB<1ASbV@&v)ozW1)fW|G8lxx#6AqCH=~gd^#GG6H;kBr0WshkvLl(c8(%)s>7a# zIP7_F!=A^KeH^SF+StD4*L$uv*x$E)g<+XjFs&|ig_IS$LYEc2LXR~4zk~oqws*M| zh$2Ric8)t?qL-sVB(cVbYQW(Q*7;@N?G4ouzl17f)p3{aFy9Baz-dAPci47PQx}1{ zTL4o{z=+%_!btAtOhW*t)1Ur^&px2nBI0A~5@wl$$vU2-pZ_PY+YAV86r!h}I;2g= zEyfTH9mW&h&08(gP3rHsE{4cphL-W}Hj}tEa3uX@$dw^~{|9ti>{CIje+|Bd%u$Mb zM8+|)OYv+=6xkT5l;8QBcJ-f4^{2|J=(ld3;u8n`h zoJ4*?e!Pya`7YG)O}tv3=bmrF;qzFyX}B*|mVIHpS^55-k+`XQBkviO2ADt!Qy9QB z9^e_Xe}TuCptAML*7L3@+nhapu6u_SV8Q^21iozqo(Eo gZ1R!wGlpe+k1dK9&-owt3)(Odi81yAXCm1C2iYqb)Bpeg literal 1101 zcmZ`&TT|0O6#lkJNt%XRX}QSN8@3UtQtw5if?~%a&fqY@i-fQ(!8Bpor3^pCU*L-` z&Pa89@X-hVla6Q80v$&mva@^kobUV2wX` zw;OiWv;9hTUDRB^lFw{OrZE%am|##VT)YW|7iD-Bu6r10_b zWWiFfOL}`tuFqc{R(E*qwY}p}Bq1C2Htd=!&+VWp_S`x(T57#3)ho6`blvO1cHXVp z2kksP@LN(tbGJzOUf2bhSM~xqHT@m-oN6)FgTtD`pShAh-lCY5Pe{+A(-1nWfe~`==!W`|+wddN@k0?(?WMr5~7x1_(qCqj)^&}yu zo0yrml+mcCZYORvkz1Yl0Zsh?Rrz>E*fMF12q%!DKR^;qwIJF=I!RazjZ48G*PoCh Vl01&cFN`w{kwxj;5``jI{sYtB$tM5+ diff --git a/SMIMS-Game/Player.ctxt b/SMIMS-Game/Player.ctxt index c19adf5..9dcc8a3 100644 --- a/SMIMS-Game/Player.ctxt +++ b/SMIMS-Game/Player.ctxt @@ -1,10 +1,11 @@ #BlueJ class context comment0.target=Player -comment0.text=\r\n\ Write\ a\ description\ of\ class\ Player\ here.\r\n\ \r\n\ @author\ (your\ name)\ \r\n\ @version\ (a\ version\ number\ or\ a\ date)\r\n comment1.params= comment1.target=void\ act() comment2.params= -comment2.target=void\ player_movement() +comment2.target=void\ moveLeftAndRight() comment3.params= -comment3.target=boolean\ onGround() -numComments=4 +comment3.target=void\ jump() +comment4.params= +comment4.target=void\ fall() +numComments=5 diff --git a/SMIMS-Game/Player.java b/SMIMS-Game/Player.java index f3a9eaf..dbe19ac 100644 --- a/SMIMS-Game/Player.java +++ b/SMIMS-Game/Player.java @@ -1,38 +1,74 @@ -import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) +import greenfoot.*; -/** - * Write a description of class Player here. - * - * @author (your name) - * @version (a version number or a date) - */ public class Player extends Actor { - int velocityY = 0; - int speed = 5; + private int speed = 4; + private int jumpStrength = 12; + private int gravity = 1; + + private int verticalSpeed = 0; + private boolean onGround = false; + public void act() { - player_movement(); + moveLeftAndRight(); + jump(); + fall(); } - - public void player_movement(){ - if (Greenfoot.isKeyDown("D")){ - setLocation(getX()+speed, getY()); + + // Bewegung nach links und rechts + private void moveLeftAndRight() + { + if (Greenfoot.isKeyDown("a")) + { + setLocation(getX() - speed, getY()); } - if (Greenfoot.isKeyDown("A")){ - setLocation(getX()-speed, getY()); + + if (Greenfoot.isKeyDown("d")) + { + setLocation(getX() + speed, getY()); } } - - public boolean onGround(){ - int height = getImage().getHeight(); - - Actor floor = getOneObjectAtOffset( - 0, - height / 2 + 1, - Ground.class - ); - - return floor != null; + + // Springen + private void jump() + { + if (Greenfoot.isKeyDown("space") && onGround) + { + verticalSpeed = -jumpStrength; + onGround = false; + } + } + + // Schwerkraft und Boden-Kollision + private void fall() + { + verticalSpeed += gravity; + + int newY = getY() + verticalSpeed; + + // Prüfen, ob wir auf Ground landen + setLocation(getX(), newY); + + Actor ground = getOneIntersectingObject(Ground.class); + + if (ground != null) + { + // Wenn wir fallen, stehen wir auf dem Ground + if (verticalSpeed >= 0) + { + int groundTop = ground.getY() - ground.getImage().getHeight() / 2; + int characterHalfHeight = getImage().getHeight() / 2; + + setLocation(getX(), groundTop - characterHalfHeight); + + verticalSpeed = 0; + onGround = true; + } + } + else + { + onGround = false; + } } } diff --git a/SMIMS-Game/PlayerTestWorld.class b/SMIMS-Game/PlayerTestWorld.class new file mode 100644 index 0000000000000000000000000000000000000000..99be99adc32fd8c1bb24f698083891ffd1526545 GIT binary patch literal 574 zcmZ8d+b#o96kVqsW{ja7t-8~aP$hf-ksu*W#w8)eO8kXi@j^o41N@6$ z5bI2vNWARXd(Bywy}y3mKLPAw$wmrk6NZBU3<_j!l$5ROD2g{PBGn882Digj81Jwt zSF6?4nhgs>CTs`8a7Z|9`cG1w%TC-Um~AE7zLEmz@@mb*D5-}k>b3$KBgkqaM~jR( z$RRH<U`VM`u&@9T`<*PBGf zyr|(fYrYEg+y{;LHtYzv-oLb4l)Xu^30Ph)rN-LHQX1mc!SECD-2gWzQX;$IH8H7%DO8o7vF^bYzhno%2}AB**v8e du#942SL{jl?JWM8;|syrVP8yEDkVV{e*uiSXxRV& literal 0 HcmV?d00001 diff --git a/SMIMS-Game/PlayerTestWorld.ctxt b/SMIMS-Game/PlayerTestWorld.ctxt new file mode 100644 index 0000000..641bfe3 --- /dev/null +++ b/SMIMS-Game/PlayerTestWorld.ctxt @@ -0,0 +1,10 @@ +#BlueJ class context +comment0.target=PlayerTestWorld +comment0.text=\r\n\ Write\ a\ description\ of\ class\ PlayerTestWorld\ here.\r\n\ \r\n\ @author\ (your\ name)\ \r\n\ @version\ (a\ version\ number\ or\ a\ date)\r\n +comment1.params= +comment1.target=PlayerTestWorld() +comment1.text=\r\n\ Constructor\ for\ objects\ of\ class\ PlayerTestWorld.\r\n\ \r\n +comment2.params= +comment2.target=void\ prepare() +comment2.text=\r\n\ Prepare\ the\ world\ for\ the\ start\ of\ the\ program.\r\n\ That\ is\:\ create\ the\ initial\ objects\ and\ add\ them\ to\ the\ world.\r\n +numComments=3 diff --git a/SMIMS-Game/PlayerTestWorld.java b/SMIMS-Game/PlayerTestWorld.java new file mode 100644 index 0000000..abc6190 --- /dev/null +++ b/SMIMS-Game/PlayerTestWorld.java @@ -0,0 +1,33 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +/** + * Write a description of class PlayerTestWorld here. + * + * @author (your name) + * @version (a version number or a date) + */ +public class PlayerTestWorld extends World +{ + + /** + * Constructor for objects of class PlayerTestWorld. + * + */ + public PlayerTestWorld() + { + // Create a new world with 600x400 cells with a cell size of 1x1 pixels. + super(600, 400, 1); + prepare(); + } + /** + * Prepare the world for the start of the program. + * That is: create the initial objects and add them to the world. + */ + private void prepare() + { + Ground ground = new Ground(); + addObject(ground,260,375); + Player player = new Player(); + addObject(player,264,237); + } +} diff --git a/SMIMS-Game/project.greenfoot b/SMIMS-Game/project.greenfoot index 73e93c0..f079710 100644 --- a/SMIMS-Game/project.greenfoot +++ b/SMIMS-Game/project.greenfoot @@ -1,19 +1,25 @@ #Greenfoot project file class.Ground.image=weave.jpg class.Player.image=ppl2.png -dependency1.from=MyWorld -dependency1.to=Player +dependency1.from=PlayerTestWorld +dependency1.to=Ground dependency1.type=UsesDependency -dependency2.from=Player -dependency2.to=Ground +dependency2.from=PlayerTestWorld +dependency2.to=Player dependency2.type=UsesDependency -editor.fx.0.height=0 -editor.fx.0.width=0 -editor.fx.0.x=0 -editor.fx.0.y=0 -height=736 -package.numDependencies=2 -package.numTargets=3 +dependency3.from=MyWorld +dependency3.to=Player +dependency3.type=UsesDependency +dependency4.from=Player +dependency4.to=Ground +dependency4.type=UsesDependency +editor.fx.0.height=737 +editor.fx.0.width=814 +editor.fx.0.x=360 +editor.fx.0.y=26 +height=830 +package.numDependencies=4 +package.numTargets=4 project.charset=UTF-8 publish.hasSource=false publish.locked=true @@ -43,14 +49,21 @@ target2.width=120 target2.x=0 target2.y=0 target3.height=70 -target3.name=MyWorld +target3.name=PlayerTestWorld target3.showInterface=false target3.type=ClassTarget target3.width=120 target3.x=0 target3.y=0 +target4.height=70 +target4.name=MyWorld +target4.showInterface=false +target4.type=ClassTarget +target4.width=120 +target4.x=0 +target4.y=0 version=3.1.0 -width=856 -world.lastInstantiated=MyWorld -xPosition=652 -yPosition=76 +width=1550 +world.lastInstantiated=PlayerTestWorld +xPosition=0 +yPosition=0 From 46823901ddfafb7be75649bcc9eba2c047fd4a16 Mon Sep 17 00:00:00 2001 From: Caspar Date: Tue, 15 Sep 2026 10:06:00 +0200 Subject: [PATCH 2/2] Plattform Verssion 1 --- SMIMS-Game/BreakingPlattform.class | Bin 0 -> 576 bytes SMIMS-Game/BreakingPlattform.ctxt | 9 +++++ SMIMS-Game/BreakingPlattform.java | 32 ++++++++++++++++ SMIMS-Game/MovingPlattform.class | Bin 0 -> 757 bytes SMIMS-Game/MovingPlattform.ctxt | 11 ++++++ SMIMS-Game/MovingPlattform.java | 38 +++++++++++++++++++ SMIMS-Game/Plattform.class | Bin 0 -> 1177 bytes SMIMS-Game/Plattform.ctxt | 13 +++++++ SMIMS-Game/Plattform.java | 55 ++++++++++++++++++++++++++++ SMIMS-Game/images/Wall.jpg | Bin 0 -> 1052 bytes SMIMS-Game/images/bathroom-tile.jpg | Bin 0 -> 1978 bytes SMIMS-Game/images/sandstone.jpg | Bin 0 -> 1408 bytes 12 files changed, 158 insertions(+) create mode 100644 SMIMS-Game/BreakingPlattform.class create mode 100644 SMIMS-Game/BreakingPlattform.ctxt create mode 100644 SMIMS-Game/BreakingPlattform.java create mode 100644 SMIMS-Game/MovingPlattform.class create mode 100644 SMIMS-Game/MovingPlattform.ctxt create mode 100644 SMIMS-Game/MovingPlattform.java create mode 100644 SMIMS-Game/Plattform.class create mode 100644 SMIMS-Game/Plattform.ctxt create mode 100644 SMIMS-Game/Plattform.java create mode 100644 SMIMS-Game/images/Wall.jpg create mode 100644 SMIMS-Game/images/bathroom-tile.jpg create mode 100644 SMIMS-Game/images/sandstone.jpg diff --git a/SMIMS-Game/BreakingPlattform.class b/SMIMS-Game/BreakingPlattform.class new file mode 100644 index 0000000000000000000000000000000000000000..c6d81c8fb8a3062c9d811be62b14a2b8e64268bd GIT binary patch literal 576 zcmZXQOH0E*6ot<;v1wvzZEGJ|Mcio?t_4L=K@jQ#Diyk$#;CC`NmId}qW?nh0WSOj z{wVQGla`2!TypN*^W8J^{qy++U>_?MQqT=SvCIiu~-+Vws@+}EawBl(cWOZ zP^C~(y|L4TPG_0gjwVq-m5R5VQZ8dkm6WXWj`=6#oL3mn$T)h;)W*yLY2YjBD6*Ew uswCLen7zmu=B#kZ(saolm5Q2)7HBGH1dW2$U|=-?%lw5IG}mZJVfhyZG+oL7 literal 0 HcmV?d00001 diff --git a/SMIMS-Game/BreakingPlattform.ctxt b/SMIMS-Game/BreakingPlattform.ctxt new file mode 100644 index 0000000..82d1599 --- /dev/null +++ b/SMIMS-Game/BreakingPlattform.ctxt @@ -0,0 +1,9 @@ +#BlueJ class context +comment0.target=BreakingPlattform +comment0.text=\r\n\ Write\ a\ description\ of\ class\ BreakingPlattform\ here.\r\n\ \r\n\ @author\ (your\ name)\ \r\n\ @version\ (a\ version\ number\ or\ a\ date)\r\n +comment1.params= +comment1.target=void\ act() +comment1.text=\r\n\ Act\ -\ do\ whatever\ the\ BreakingPlattform\ wants\ to\ do.\ This\ method\ is\ called\ whenever\r\n\ the\ 'Act'\ or\ 'Run'\ button\ gets\ pressed\ in\ the\ environment.\r\n +comment2.params= +comment2.target=void\ breakPlattform() +numComments=3 diff --git a/SMIMS-Game/BreakingPlattform.java b/SMIMS-Game/BreakingPlattform.java new file mode 100644 index 0000000..2fc9b35 --- /dev/null +++ b/SMIMS-Game/BreakingPlattform.java @@ -0,0 +1,32 @@ +import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) + +/** + * Write a description of class BreakingPlattform here. + * + * @author (your name) + * @version (a version number or a date) + */ +public class BreakingPlattform extends Plattform +{ + boolean IsBreaking= false; + /** + * Act - do whatever the BreakingPlattform wants to do. This method is called whenever + * the 'Act' or 'Run' button gets pressed in the environment. + */ + public void act() + { + super.act(); + if(this.PlayerOnPlattform() && IsBreaking==false) + { + IsBreaking= true; + } + } + + public void breakPlattform() + { + if(this.PlayerOnPlattform()) + { + + } + } +} diff --git a/SMIMS-Game/MovingPlattform.class b/SMIMS-Game/MovingPlattform.class new file mode 100644 index 0000000000000000000000000000000000000000..36738172c868995f1eff62676d725c897349bfbc GIT binary patch literal 757 zcmZ8e?`zXg6g{tLn6dovwxF_=Vd`gKjh|}^X@(O+;@Nf{qYmPGdwm?fTp8pp@g!4@iOw#^gK=`0_7*+ zG)$igXm)2{paMgOX<-ePK&=-q!s+-*c4$l)2H{*_(_MLrE~lLJFCU|l1~Q+`aPt{>zur$h|6R|U z3oN9n%|&*Au7OT ztTI={B6nh710ACJWi}if5wQ;Usmk@Kz2%zS34pfNx}LquFjOq*-5jB@svysxY#fIti5ub=#t1`#aL>Zb>(V^RF?M2pE)5eL zr!dKo^+lk&rV&`K!;mblugg+%IL&cJ0#u6gP*{y-AW_pCGqU=u?F!#)iVe$bW^f)C z6wGqWq4Gj;un3i^mbMj?NiWjmSa>qgMUG3DCud4ub0X|& zP^;IeUWQq!Q{OX=49zy2hPGxKzF+NCryVzg%ebQ8D#rpA8FF33Niiw$`p~d_hLK`V zy!LIi^n!F;b9V)?(k(}99`5f5@3FCClVwn=SKbxK3|*4X9Y6H*Y)O25!=c;Z_H{K&Lji z1*Hp?Uj&dx0z>}|K$A}}nf)#KNMEho0{@1bUZ%|;J%!}U7RKeK(!x}F_X9HW@E!^+ zXJx8*SZ9H#0HZ{13|rq(= welt.getHeight()-5 ||this.getY()<=0) + { + this.loescheMich(); + } + } + + public void loescheMich() + { + getWorld().removeObject(this); + } + + public boolean PlayerOnPlattform() + { + Actor Spieler= getOneObjectAtOffset(0, 5, Player.class); + if(Spieler!= null) + { + if(Spieler.equals(Player.class)) + { + return true; + } + else + { + return false; + } + } + else + { + return false; + } + } +} diff --git a/SMIMS-Game/images/Wall.jpg b/SMIMS-Game/images/Wall.jpg new file mode 100644 index 0000000000000000000000000000000000000000..66e434434d8425346987e00a6ac7d7da4703a567 GIT binary patch literal 1052 zcmex=W3kC&HER#Z$- zLRnr_MM+*sQBB)iUrp0QQ&Gvl(a^-w+Rn~SRnNuK*~Y`%*3KGa2qPCaHyECr+Na zbot8FYu9hwy!G(W<0ns_J%91?)yGetzkL1n{m0K=Ab&A3Fhjfr_ZgbM1cClyVqsxs zVF&q(k*OSrnFU!`6%E;h90S=C3x$=88aYIqCNA7~kW<+>=!0ld(M2vX6_bamA3-$>a_FV<9?s6+y5C_ z9tZztm?t*>`{DYJAr+7RIUD?ExW4N@!wcV-rwk?aALeA$e?D~i-;ex%TKzx#OznR@ z%>2(#WB#8(H0G%Y`3_9gWv(vJVzr~IGcLMwy(O{w{Rnb-Yicz?LQRrFOz06X{N{+~RD|1-qB{?D+` zw0P>pA80NS33O!;&G-1vFyUwj3VXuAmwnZjXEbX1<8X2&zpyKgmr3Txuu7~vx zEw21$c;34F?}z(;LPZ$+kprM=sz?B%D-g%%_t`%&=Kov0{$I zv^rucpb;n_f`Xk&q@XCalR*$rRH}$PBJTu~OLE)01hC{&+s)*|C42w^RwG%+!qWjfE?e4dXB$HnJAFL(#A7+@7x zMWt|n0gFOqQD6gL13)n((2{^B7sY@|Gc=+zjF~3Hh8yO%P zScbFhmaI0KvuOvN6Kk>baP}pJ{hEq8%gxOr4(?HLM~s}QJYs9~&Rt*a{(8?h@%s}J4;=gD>AJg2KyJL|2Q7uUA&xxLI9u>(}4w8}8m~y#Ju-QA_LNw)T!EPhY<3e%dFg05GK-}GxhKnj7xQJ@_W7z)8&cT&ta$kvB2EkiY z*ir&PcQ0N8L7xO~RBF5nxY-bF7t74>>M<;(BT~tgE6{DWRm$l3w;?ER#GbL#e1Z7! z^s&!FZ~^fKBHIl?v>HF>@i@5ZW3-j8&V--?0z?!BL1VRsK;DdMd4)j0!^LLOFH4#( z4-IQlk+#n9=w;#RazOkhY^YBjf{yz0#g$&imw**`huGk(5Rj)~9x7|x{+p=ZQRtGlPB_k=on>~ce#b;ZF8fGeZt!N@m zf)RXmGY5EjBR5!-ik^^AqgQTlDT)tKh)aKip!D8dZuZgmX`}j`)yWXFvo$u8P{Rwd z2I&j&LiBYoDXCWx1g+m6%z|K*&Zy_-wqnUh`%BGt7PoQ}v^Le_z6xaE5L?+h$%e?VtA{*aSg71S)oqtUpvQ0Hv9`RFO^Mfq!Tn9+Aw)dLZ~&r&^6ttwsB7 zQfyIzSgwFz8=n|i_lm2b5^|_(g^A8FRU=62J7l~?o7Iiw_Jhvsu{)CrEOxb-G4KWi zIS@pq%PRz)meaAqC3O&lPM=!D-m?ONGsFoTbOMp|9}Yg!HRv4Ae`cD7Cux6a<3*`F z?KOcoAuTCDeq30!&aR-`y~Ba1bQG`V5UQn`VHX?mA0U`O9`-*n-lYm8=pGUdLm(Fm zTYeFb5&~{VC-a-P%^}JzyCM1#PFNAGuFZ2>UMn^uJ1|e+m7CI)MYc*m0d^1sK~ToV z+;vqwUslw6k?a7flcTagBTU1Is!b(eZ=wP%ug5xy_ZJ5UJ*sgrTS^pUbeK>egeZ*! zA$#EMiTj~aK7LZy)T`(tu{3?^$te#nNNb41=!6@}6u-A4yJrR?U-Z-r83@Gvb&N|h@>OAf5G2f|uYu4r+{!p)>Zb5s Uv`?r7cuM#pAg@gqc@#eR8zQv|m;e9( literal 0 HcmV?d00001 diff --git a/SMIMS-Game/images/sandstone.jpg b/SMIMS-Game/images/sandstone.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0280dfc054d6825ec7943ceca2626d4967bbc71e GIT binary patch literal 1408 zcmex=W3kC&HER#Z$- zLRnr_MM+*sQBB)iUrp0QQ&Gvl(a^-w+Rn~SRnNuK*~Y`%*3KGa2qPCaHyECr+Na zbot8FYu9hwy!G(W<0ns_J%91?)yGetzkL1n{m0K=Ab&A3Fhjfr_ZgbM1cClyVqsxs zVF&q(k*OSrnFU!`6%E;h90S=C3x$=88aYIqCNA7~kW<+>=!0ld(M2vX6_bamA3t3hv!M0n<)^od*6@Wid(8OM zc3owjQB|FZ(qf-7rG?59_?_Rrbzn~EeYJ3U!JY7pOCtGa?wE1f@aL4?B?j+(6KobL zO*@%mW^sJ2otvgX((T2m2?uwr|8aroKLh`%rw0`GeOE}Ie`!|0?u~s;J9Qg-nhcL$ z>hv(m7kE>{*C3ba_w3U;;mm`F%g$eGUm~`SzF4)fPIcnCb0WQW!}`c zS-pDBTNxQXUN(0@t6dBsMWH(nzIWg#dmrvzGPUwa!JXjk$FyDguEO4?kRg(-h;zjrEZa(iHF`$DBb zR^`z1Jd4M7q+;49PV=}h@#GzY+82!G+b%vmF?(YBy#tTei>wfw^CUNC&cx$czOB=F zjg02JJ=9?Q(w9qiQ>=60)`L%KT^Y2kSFboRp>Yy_epTcmVf~qmK^})S-+H;M*N_Z2 z#b$i0wsP4j%_&P7CvN=o`JhsRcrnw>5I4sye{MXMf9&(0A#7cd;9}*TZ%cU=YzeZs z+mm?AQRK%#gIu}DAhQQ@?vEXKQ~onVEL5&|a{Tn9w>Z$R_&ULk=yO2 z35A=x%BQ_@I>s__!|&yizXF)0Tr!o7@>Dj+T0BXbYGzQ;lVVh&e~{%rgH=e`q&q5$ z6?d^cXwqCK!y@!RRKf0%zubZg%uAg<6csB8KHd1>@uddwvuRGdrCA!U`akx%DQxs` z3HPaumJ&;nCkmFTdfxac-?4x#adA=P)B{fpPS`v9=N?$69JeRo!M~E$xqkJPJrl~m X{bzU`v_W5DqS=HZqva-y|8D{SJsU#v literal 0 HcmV?d00001