From 00522675ddc7d971f19159aa3e74e481cd25d3b4 Mon Sep 17 00:00:00 2001
From: jez04 <david.jezek@post.cz>
Date: Thu, 10 Oct 2024 00:10:41 +0200
Subject: [PATCH] feat: solution

---
 src/main/java/lab/Level.java           |  21 +++++++++++
 src/main/java/lab/Monster.java         |  49 +++++++++++++++++++++++++
 src/main/java/lab/Player.java          |   7 +++-
 src/main/resources/lab/red-monster.gif | Bin 0 -> 6799 bytes
 4 files changed, 76 insertions(+), 1 deletion(-)
 create mode 100644 src/main/java/lab/Monster.java
 create mode 100644 src/main/resources/lab/red-monster.gif

diff --git a/src/main/java/lab/Level.java b/src/main/java/lab/Level.java
index d8645b9..f4a0be2 100644
--- a/src/main/java/lab/Level.java
+++ b/src/main/java/lab/Level.java
@@ -13,6 +13,7 @@ public class Level {
 	private Player player;
 	private double width;
 	private double height;
+	private Monster[] monsters;
 
 	public Level(double width, double height) {
 		this.width = width;
@@ -21,6 +22,10 @@ public class Level {
 		obstacle1 = new Obstacle(this, new Point2D(300, 200), new Dimension2D(80, 40));
 		obstacle2 = new Obstacle(this);
 		player = new Player(this, new Point2D(20, 250), new Point2D(100, -20));
+		monsters = new Monster[5];
+		for (int i = 0; i < monsters.length; i++) {
+			monsters[i] = new Monster(this);
+		}
 	}
 
 	public void draw(GraphicsContext gc) {
@@ -30,10 +35,26 @@ public class Level {
 		obstacle1.draw(gc);
 		obstacle2.draw(gc);
 		player.draw(gc);
+		for (Monster monster : monsters) {
+			monster.draw(gc);
+		}
 	}
 
 	public void simulate(double delay) {
 		player.simulate(delay);
+		for (Monster monster : monsters) {
+			monster.simulate(delay);
+			if (monster.getBoundingBox().intersects(player.getBoundingBox())) {
+				monster.changeDirection();
+			}
+		}
 	}
 
+	public double getWidth() {
+		return width;
+	}
+
+	public double getHeight() {
+		return height;
+	}
 }
diff --git a/src/main/java/lab/Monster.java b/src/main/java/lab/Monster.java
new file mode 100644
index 0000000..88144d1
--- /dev/null
+++ b/src/main/java/lab/Monster.java
@@ -0,0 +1,49 @@
+package lab;
+
+import java.util.Random;
+
+import javafx.geometry.Point2D;
+import javafx.geometry.Rectangle2D;
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.image.Image;
+
+public class Monster {
+
+	private static final Random RANDOM = new Random();
+
+	private Level level;
+	private Image image;
+	private Point2D position;
+	private Point2D speed;
+
+	public Monster(Level level) {
+		this.level = level;
+		image = new Image(getClass().getResourceAsStream("red-monster.gif"));
+		position = new Point2D(level.getWidth() * 0.5 + RANDOM.nextDouble(level.getWidth() * 0.5 - image.getWidth()),
+				RANDOM.nextDouble(level.getHeight()));
+		speed = new Point2D(0, RANDOM.nextDouble(50, 150));
+	}
+
+	public Monster(Level level, Point2D position) {
+		this.level = level;
+		this.position = position;
+		image = new Image(getClass().getResourceAsStream("spike.gif"));
+	}
+
+	public void draw(GraphicsContext gc) {
+		gc.drawImage(image, position.getX(), position.getY());
+	}
+
+	public void changeDirection() {
+		speed = speed.multiply(-1);
+	}
+	public void simulate(double delay) {
+		position = position.add(speed.multiply(delay / 1_000_000_000));
+		position = new Point2D(position.getX(), position.getY() % level.getHeight());
+	}
+
+	public Rectangle2D getBoundingBox() {
+		return new Rectangle2D(position.getX(), position.getY(), image.getWidth(), image.getHeight());
+	}
+
+}
diff --git a/src/main/java/lab/Player.java b/src/main/java/lab/Player.java
index 92f7fd6..db14f4a 100644
--- a/src/main/java/lab/Player.java
+++ b/src/main/java/lab/Player.java
@@ -1,6 +1,7 @@
 package lab;
 
 import javafx.geometry.Point2D;
+import javafx.geometry.Rectangle2D;
 import javafx.scene.canvas.GraphicsContext;
 import javafx.scene.paint.Color;
 import javafx.scene.transform.Affine;
@@ -37,7 +38,11 @@ public class Player {
 
 	public void simulate(double delay) {
 		position = position.add(speed.multiply(delay/1_000_000_000));
-		speed = speed.multiply(0.9994);
+//		speed = speed.multiply(0.9994);
+	}
+
+	public Rectangle2D getBoundingBox() {
+		return new Rectangle2D(position.getX(), position.getY(), 20, 50);
 	}
 
 }
diff --git a/src/main/resources/lab/red-monster.gif b/src/main/resources/lab/red-monster.gif
new file mode 100644
index 0000000000000000000000000000000000000000..c545c2220ec3a52e9b046308ea4a1c1620db0f40
GIT binary patch
literal 6799
zcmb`LRaD#CqObo6fdq<EJW$-BNPtkqT>=y>7Tn#fA-D&3cP+)e!QG))p|n5?lol#<
z6=+$fYu~%~xexd4ocTP*m@jjD<NJLoYRX6%v@M_k>=OgLyi$L=<P4}{TSUz;QZ7Ec
zW`F<vQJzc5l*i)l|KDN%`<AxS6MY3al#;lJC;<on0QMUy1#dgFubnMhfRnEyn~Iti
z3Shs45R(8DfY6@{z&~#Rkel-<wT1y?<lObV6<><2S`eRAvuhtKR+Lf^&58W{`BwsK
zgq5po<q~CGv3HQ8l(cMFqoZPZ_Qoq^%G2?|QPDNkHrhv<?T*`7*fAULPmOxpcUy9=
z??+!x5h9@h0W7*8h46%Dm<X0AV;vwiJ~3M&*$|F1g=dE5lvyX+8y51!Sd^BRd)ue@
z)o=vmhJ-aXRU%)sGGx?ybPwk$KldGA(8gztG&Vmkn51!yYe;0B3k5@1V9%?USGRID
zMz&tVcdHyH-@QtxI<e1D@Rs>1eLC>Ds|<0NXkEIE*)w@$(VFjB_v&o<CHePGKM7dF
zPK{Oe?&Ky)b~cCL1|XSc2R@XJ*^&Kr<QiGBA;og4C5ZK$S*zzD=-%QOd5BWLGH;s{
zV8=PPbuCTBO}U_~6A6+A?8!@&`+7=Rzi-!)7-TOwQ}wWjTCvGO8|IE&VX}0U_rjtE
z#r65UTsPb1;%W);uP{%UJ#Q%usTv7wwpzHt+FpoGzI{2N%{UP6v;20(9t3+Da_Oat
zSNx<|?A-0MO)#9F>wYaGUL)*7OWfX{FKOD;?$Q@_L<^ud{am&?eaD+W<N9UD80eil
zzl?-Uap*m019H}u0xASgw#klPH&(n^6N+hb!i9A}=ZDX(eO{hPjEKGIQ42mG*ax%W
zL+gRH2FV+CYPbrpVFH-ZuF!^DU#!2@2qlcW69HlSQtYe457VX#LLTXfiiy5broV5Z
z#}4Ks`H~@`+VYp0;!Cm?dZ=6;5+yB#Ixwa1*6n<KA3fVGm#n#ytDRDbiBU?$|Namk
z8zf^}iT&vGg~J>i2-syR1<Tqw8mdQgOD_CkU>5Nim3XJ4E;4kGOLY|uekQ9PG)i&N
zVaR>UV>s<ep|+~LLy{65jQaMOTxSi%V3FEr$-9R<Y9yJ}I95vPgmylGWIZA$OopLA
zeb5iP{6gv$Dw4N;7ehD>Y;$!jiaA}G38J~(vsqW6$d=Dn{Q<P?Tv-zj6>KiZ#tA$p
zxcPZcsCIOi-mPv?t(-qM^z%tYTaB(@9dG<Nzf&m;-gzs0D!t{jGXsD%blF8SHNS|s
zhi;}_7pZHiK<$-sfZGg1_--%SjXU=rlsn>|K^wa{DL#&G+{KgKqUMWX-N?#gU*;|x
zDYHCjNFL2F{`F;S->a~dm*u_}1zsWhi)bp@D@HE4yH8IQNy?bg&%-zvGn!i^X#_au
zW!CQtREgxwm@Y0_^%0;V?>R@x+YP*ySc$kv9FZ5S?nw-P8iU@Q(TH@pYw{OHNJ1;x
zQA4}Xl%ntp{$f{9b=FCwcD%RT)xe8f*ymbgx>(Ll8Sy&nA<Z)K_HOg|1=G*(+jVa0
z%8~oQ#3F!w7BjsfK1iUr$5u&VyP+HQA&jv<-sVwTxWRRIaAnqg^M<;x1=fI1-LM<i
zmhL;HY_G2?-LL0fY73qQPF(NYS}TN_U~F7J?ryHT!CEpl01X?^UUy;BZ@Z8h&g(_n
z?NG8El7j3<&GH&M^BMI}8K<M~%$x&1d5<tl>giIyex5x8;FjOXk(pIwB2L6yrXXHq
zJxm>kW$2fu<M@NKf0K&@AOKK+>VL>ZeKdFf<`20{9NcZ|n<+eDqU<wDZuG1TXYP9=
z_y|wr<foL%$Ypw9IBtXhsy5~cn`iUA|G*$^{WN3dBHSonj<kWh&n+%6G??58^0+2M
zr;v)$*YA#cpjL2bXgDSUOTz@!G>OZQ4~Ix5Cf|M-<dzwdoy(N(WDQ116PBRFywtrb
z`~r$>%;61+VsMz`3kR?0bVc>iZUwPXXg_jLB{eP9R-CCmLzW3v<~et-FsAtF3a}Qp
z4s3=?=j{N_)+KczItW6ETEdS)ZErf_#1p?lC>O1cEgm5NtkSmtH8okVIteuuAqEOa
z?RDD<i8s&6Fy4glnT~Fx&MG^zE=7+{xIyHSUO`qxrJUXap-`pQCXUoZ>iHhauww(U
zvH9euuPA|&@m-9@>=U>!FDep507BxPj%g}j8uYR|AYxgm%>+hm?i(bjBSr-1cy%pf
zJsX2|qi;;ODgP>9AZR3^AQ7={j(3XI{+ht>c_KndWi`_2ho=oL(-z^Ml#)9iRa8qp
z+GnEvh8?LYO-Cx}5FHksYO?z)<5t_8)t$s&sDzrGB@7zU72k`u93A$ls1W1*`Y~~s
zwHFXNbbIHo$iUg$Y_`1tl~f&%V)_+m0V0nba3tMtN}rN&4)lLQmm~8r_ywBv>w<uF
z$LQEimzM2CllL3vRJo-R=OB=33g-5Zp^@I;L%V5i4K@9R=+O(g1rF+By-j6v^E9+R
z&aWj2(d1Q%ivzhq3<R!U<W7_E3T(V1y4#B;Po)(<Tp}XsVKCJJ`%)I+LVQsNM6ReT
zF2LjM!8GVySh}|Ob07u}I{!^Yl=SFI(axO(r)bY1f$0WCHeNsvqZ)HB4e6?v5c@Gl
zat;;&ZYd@k5!?J;!)0;3P-5&%yo>|xvu3=dl^&b36Es1aq_z+utQHdvL3KHn<qu2N
z*JdO{YDa~S^Nez;m-cSe1q+J_hJzUDnKe>-gY`k9lcq-{nc3=b7CizZGqKp4<sKzx
zC+^6G=2TRGeWclV!kPxSw~mK<5lbu7x~gsTv17?Tq)6%`<$gnocYpb2Ckw9nq<@N<
zCYJm3N^j3v#7w5y6uzf)UT{3PY*w*zrLmqLXO%7tHqzRZ8{@%cH?^WWFRMn1m6MX;
z?iSN_7F<TXB^Y6rLm|dloLOrXuVvO(jbBSEUq|jr$BP&;-*RbEXO-{pnap&|@f4RY
z(eRyDzHfvjJ=?N}TRozDr?A3zw_smiB7B{{l0EO~Y18DpMjHX^t}TgK`$QL^Cg(Nd
zsbX_;QU5jD(WMJ}@iUizmwJ!?64u|k+{qQ}BP}L>Zkw!du^qnI&uXn>Ic=tcOb9jW
z-hH4jyH>@Fn3mZt`9{}^<2H4^+L8{1f^$M8f~2ExZ3LA^ofUC?E?kvr3(2GO9-&_%
zCIqj|Dy7eURbe08{rx>DloIscd?5s2fGMExAHLB4U%ps7c>m!G`~Sn2Qs!SRdseFO
zgFw{-^yMuGTIn4qtFamxRl_!YSlqZrVz@0#@e<u&PdP&}XU}Z?sHWP433N_;M&ST~
z`3DGS1Z#(edt$JWQ4fPmQ3;vPAd<<c+(3FpRsw=BFP{-`O)tsDKoWEOfJ*Da5RZ}u
z@unPP%L^KxSlha;MtccK{r-F=sMe5q9}}T@w~`!-Vp&D%qxNF6MPS)%Rq+*kqjwAK
zQe;;wE#-+S`=TU%VimOW)T|>r`5(Tt2uwdDi~7#~)o6YjVA23n8|y7vutf#j7Kc;Y
z%(X|{ysaNv!~m!~&X4xOr^`#L6OJ5&IK(EQ9WDKQIlh)1j{yZPI8*k>36VS~5tlx&
z>5M&81wf%3-yB!>MZ9&9@N-7|5;=2wAy2Y%Y57td0SQXTnUZqdP6OwtS^16Mq$IE=
zP9xez(4yabBz`zf#cn>v=I{4pc>+zh#ykl3nIqbY?)TxokWi|}JG`GnSnvxE`Ie33
zGJTdOH{-u>Ac#ng(D+e?NeTneyd2+B8F$%$C<rr>6Em1gyng~UY?PkgUt{8^h?F+X
z{*wG#lpy7%D=2R;FNYxD5|u+XOw(O<vcf<4p{O(Q%W0kr(T8KnMU6fCe9O<g1eZ5e
z#;&dd5CeOCHqR1)%cUQ9((cP8H8#T4E<+ER0n8qV<ntIC;+oOl%to;gr5DkJSe7G`
z$YdWOUN2HEkMFMv1Sd+GdSjV4%wzDLFoa^ca89XYiikc4Uy)>O?vwCL;mV6L$PFz%
z9yj^$P&t#Ub<$SK=tpjmyBf8xu?T&UXDMj+ZB2Q)gGKdridQdkq<{stR?Thb-g21a
zBHjgIc}(tbR2C=BnN^M%n9MCOB0pxb9jS9VCJq*7V$`I&aN@}<2~<7?Y2>#>(3K41
za$@q)dU{!rms7S5ri}Gl)-$5?jsY>=rkuI0*lDAtkua$&jNYeS=c=Te-}&0P!~SZ^
z@sOhvhmOSJxb=sRiDJuYJgql3M4~vXgrRwKA8E=a4>p_{hrUc6qMQfLM|$oqPVm$P
z19bRQ-|mKK_+;h8RAaK%v_Uy`H~%!g2Vrc^wWQwb0+4<?5iI~@%{2K`P!G=1Hky0I
zXcF=+bW0fG9(YsjIrW!$?{*G*^Mid%BCQ{X|EL%wf{CikAMU*N?!N2L@gDvtpf6(L
z%{a+aiCW2v_MSYdS<tGK2FtLgH94ayCp>!_w$70M!S5E-2!80AUC#0Xe#OG_19yJl
zMzG{owU4lKTQ}+0z#wYDV_1sa4S|^FIKH)nNWGtAYsa!R+ni|`nmYRrUU&EGmd1+o
z?%LCsb}{8tH(#CPqz_+xY-uQ#hx|7)0D$Drnv(kuGjg$WeGC7rsmnk|hh|ref7TSj
z{B<CxJM;}W79*+*XGo1q^_W@(qCwWAK~JQfH<HVlRt7ilH6kkxwO_tj4b<Xa?X+jy
zN>teRbozy8zUVs5111op0fmO@Jxho%j53i^h)>ACK%}wvQv`L=%ri5k2y^p!+#y8{
zCH2bX*h-F&uu@4!4@d`u`8iumoOgytce^D5-bYuc`?5g=G1t{rF+n|5H>*6qv51E(
zPY{R|J*kr+T;CIyS=g;)2G`CUd9#LZT8Q<)-xK8Y_QjlK28l06@4`d&AqU$n&n<bh
z*0`vWya4>511UdMT^t(&HOtL7TnVnqWy773pbkDlp2Ae01uYI`NJNk0;EShw=lX5T
zVEqkm2x%Qu7LP>Gg2nz!rr0oq=$9uXc)A91P_7|YFyY>;#LsMJNngOZi%kEU$)U;*
zK%d|#TAY#J%UYz%<IO!nSwe2=6j%l@nQzpf#OWQf$P)M29bFxA&HAG?qRMtSTJW>R
zseHApiOTT1FrkB(nZzgVt~Lg;lQtt{9(+<HcbhiWJ$aumi(PfRPc5{>*FIE1e11{;
zm{!#HfwVI&wG<=L+%9eQF^%61Uzj6vx_UQ~GxEF4F8%%v^uydEr#_F1`621yy-iJZ
zMyZ~U^j04-iUOX?-B4k)pBQ_`vQV%qJPk_H<;8@gf;zYE=<al~Doo8;sgb`68Y`95
zCq_{Pc&PnUi+&{+Q$}C5hu^eb_mq=;YD-v6LWW@asvnc(`jaDQC5*#{M5?$O1-<`@
zM%}tNt4m!+>d$Y8o86$w(bdfJ$3?*4vUAwwHAyvNJ~qD;sa)Bg+u7tjoTVA{dl{Uh
zUWIk&9NVl~W-;dK9;?Xuq@Tsm2Uls}_%|>3)uAf7btF-FWvC-~?4WdAjN8p|tv4a$
zAm0LYRC#zuy5DIcxXi!OwmLa~LNhRq$%@Ui(v;5y6zq+%<!(%{;eBj8U|-6fAmmWQ
z-J`CCF0s4mz7iB1pggB*jj6)RHIA@~zirJM{vyQ0wj(Osyk>gK65VFl@u@!XMBshb
zuXgdzPyZ&?J;T8E{Mo>>QSWN*p6e0a>FAoDxjmF-+L`cj4tymXg<vo{A39L(UT!{B
zZvz$054#BU($XZI8#8zu@3ZkTbkt3BCcwSN1nRfX()s$@S|^%_15aH3B42tVDa95T
zF~<TG%7wnLFfp0xMn-{_l=Tzjm-+ZYIopT@j@(wq=6mR*J6HD*j0QWi7Y2Nx1F9R=
zU4mGCzvADzGC2ZM{(=_ivh7L2Q(^Xrz6wUeyLy2Kf4yNQ66q#>?~PC2igj7(Onl$F
z_;Z;Ttzxmqe2ADI9}M6VxjL$}1Yfb3bopGKG<LC$Bl!D7u1}rY|94#jyeBa&{4duK
zJoW#_HO^<<|Lq$2t}B-@BmZ^{Ew}LSf4RmZ+pvU81q9(A*MP>kfwM{pa{eV7#bt^Z
zi9|?lWfe_OdP#kGBc%B`5@@~c6CB^w)B7w(f3S+Fu)}lUk86nQ%CR)`zlcf;wKM;h
zYbgD34aqGl7ttbnl!CNWI4bAcAKP#SVol9=v%yUfGztU_e3uB<{VpgQRV*TVkw(^P
zN-h+fRaLh3>CRZh%|1*~5UM}`mbFibdVA!lI;6j%7{ker=bDyCN$);~oRwjiz@!Yg
zznX~Bn8(W}X-s`adhK_D%bl5I9mR1<!DAA+2$EO=d4hvg^a!ICnE{#E69F$-P@=im
zJZ#35m^wQnRF8Ig{bcs3yZQG+K`A&-^u6=W!UX>oORp|ZjGq~j#hUhh5Va67TayjJ
zV|IP;Rh|gI<Tq}*CpEjjyBw_`88eraqfSa_n;SN<`OU#Q%QjQ$Va0g*J}&Ce@8S0M
zJ^u16lIq4GL@%?pkwlWS%R843VP%gC9(A`|V7`hhVAW%&7uc%Mt8s}Gj*AOoN!IOU
z7T~TQ3FkLl%eIGJRdJ+q(NF+<g|;bBrk-tq-pPVZvW0uH7%$x_5gxMg9h2LC<Np~L
zA0y^n3ee<anT5jT#r+m3qIrVt<P*xcY_W*~@4V$7@AU8j;0g9U{bZTJWkc2R<Omqw
zd)K}6C#t>6af}s6Vn}8om8@M>*6d&0!Le?oX1Lus|1}~Dk$|KW-b(J>a65tVLl@rm
z9)@g*7DsI1GxHBM#Wq)IY?eyPUa!lOq^6?`3cu3=*obr)N0(AK$#Fif?^Z-%8ud6R
zZqrki&#F?!o=Qjj5qgm(&U@0x(PuP^yC511Ca)M|?*&DKU-TYRbG{w6Evh+WdT*3?
zlkHF2LZr#=+MY;vU0zk)8(*)+Pkmlkw=18|VR=dER4SPLw!TSVU{P$MtAt#mv~S8R
z<g`@$lyURv-Cux*{fpq^O$x<j^m8*GE{R)@r+3q>fRsn{Ctb)vlM$*QMC0@bRjl+2
zEbX^TD}M^xB%a*vDCUptsXsalHIJ>W#HW|#wp&LBY5hfuu9CVXawSQXZJiW%C!RDt
zB-tuqm?}>C>UtKQEed6?c*?`&w(M$Ss(WARg2><wjSp<%_^AzBGJH>jMT(n+`mRkE
zzGcM#yMK&*{4z{oVJpwP;sItG*R|WiXEyvg*I7$KkX|A1XGns|eBfOnWWL{lP`&2-
zo8{a*Pnq|nj=SC3_qS+%9@o}{Uv0VgSd8toOo-e+otbsN{?wlFf8YTE|C4b4#~}nV
zTS7A}oL@ib(%JKgTE{Bees46L@O?L#T#e2Odvd{L(sir^1Qrl@M?J*!k90&vMgK`5
zp>_#b5&tZe+Ye3Uva%!cm<n9n!W5(lOU=Z5)%_|1gNtkBSsGFQl#o^@Uw1c@`dE*m
z*cfyG`BEh<ql~E`>rV&Ck<Le_$0tHoN?!pR<v#NQ)isUv;r~PsR0Z$=7|wi?{29Cl
z<a{G>)%ST$2S*_?&pAsWY*fKN&RGtmzmNjXsOG720$pg6^i9GeyZ#L&PEZPXDcRF&
z+E5TAnG%s8BfE#s+S%<^B;qX8OmT_&S)Ws$G5=Uh>L!WP1E{t?_Wpcuynu-S;G*xH
ztJyII{IgH6qWAnJn+XhGxGzqpL>duT#VY@%YAw0d5ZE+qo2Vyi(QjoJ_j|FfJg@E9
z3Q^Olq?nmEHa;az1tX%@=g1;RcKFk)$C~4jsYPJdH=Dsa^#Jl;->V6iv`(-yuQwfX
z?5iJ+_?W+~m_){X8~)iRUHWEp<fVKu+Nb5L^@)Mtvjzsd>Pb*lzug@Cgpl!P{Y8V^
zFQf&CBp&WfYI6;m-jP!fKiS_vo(5{kr!7ssFwNH<x>?b^1tg&@bqMc`Z-rx3W7nTC
z_^D91+M*D&AYrt3IwO-kjE!nXQl8z{^&lgkxWMa32Rd7eM9Z1rkfiiFb?Mgh;CkxR
zM1D6+9QpzA;!u)?*tnc5$1rkBL*4>yo#wUo6_vUGa-zd}Y<`~xG2HynlAjj(Mh`v{
z;~-LvMc0`@&4Z6)^H>(E&18NR9ly`g8eEIHT`TOZkfY~&NgqIVbwupx%wsr9oFsL^
z8tyY}!d)IDz^7D^>wjL0omuOVE8yB~eO;PvOu}zgC6F&*k(Tw1qt-Cx329x82>PUn
zLIAzopg66IZ`^ERY782BbtP{B!Y|Lb!*B5S^qr>YBF)?3lb0LqXaQYwsV6rpf~a=>
zZ}c6^#tkg3oA%XoUE8;PJ``YGO|<>iT2B`GjiS{ixKD4&Rcg%?Te(}D*Fv(0PXuT*
zYTlE6_h=kUuX}F6i-Pl7Z7zfEaN1slEMz=G=*P0;WeYYNa9Z}71PDANJ%6yCWY#)`
zXTr4-3689Moj4O%Hg4Wro_3NUebn)-tMON%VXwSkui29K#SfhVjWyX*gQec3@3}MX
zFxBMwpj)jR$Xr38@s)R{7wh#=pBgpoJj{h!omY(aQR!YB{tH=)5jk&ClFd}~En|_!
z#2$AqB=+J5hG&w0zyH0Zv^Q}2(aXTrBKfO0=b16$8H<KH;X-!7kU_O?v#?^yZrYys
zXjWm0(}{nVa4!t~m8>d(`iEm`YSr0buM9ymp6BB|p69>5*2BWTeS*vh{Rts-^1m-O
L6fET+!2SOMfxLig

literal 0
HcmV?d00001

-- 
GitLab