From cbb34cf2e058ccbb5bcc0677565b61913383124b Mon Sep 17 00:00:00 2001 From: Raphael Date: Fri, 31 Jan 2025 19:58:32 +0100 Subject: [PATCH] feat: finishing the ex00 of the module 04 --- cpp04/ex00/Animal.cpp | 17 ++++++++--------- cpp04/ex00/Animal.hpp | 8 ++++---- cpp04/ex00/Cat.cpp | 10 +++++----- cpp04/ex00/Cat.hpp | 3 ++- cpp04/ex00/Dog.cpp | 10 +++++----- cpp04/ex00/Dog.hpp | 4 ++-- cpp04/ex00/Makefile | 15 ++++++++++----- cpp04/ex00/WrongAnimal.cpp | 31 +++++++++++++++++++++++++++++++ cpp04/ex00/WrongAnimal.hpp | 30 ++++++++++++++++++++++++++++++ cpp04/ex00/WrongCat.cpp | 26 ++++++++++++++++++++++++++ cpp04/ex00/WrongCat.hpp | 30 ++++++++++++++++++++++++++++++ cpp04/ex00/main.cpp | 33 ++++++++++++++++++++++++++++----- cpp04/ex00/polymorphism | Bin 0 -> 62560 bytes 13 files changed, 181 insertions(+), 36 deletions(-) create mode 100644 cpp04/ex00/WrongAnimal.cpp create mode 100644 cpp04/ex00/WrongAnimal.hpp create mode 100644 cpp04/ex00/WrongCat.cpp create mode 100644 cpp04/ex00/WrongCat.hpp create mode 100755 cpp04/ex00/polymorphism diff --git a/cpp04/ex00/Animal.cpp b/cpp04/ex00/Animal.cpp index 410e2e7..b80a082 100644 --- a/cpp04/ex00/Animal.cpp +++ b/cpp04/ex00/Animal.cpp @@ -6,7 +6,7 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/30 13:21:01 by rparodi #+# #+# */ -/* Updated: 2025/01/30 13:37:51 by rparodi ### ########.fr */ +/* Updated: 2025/01/31 19:53:47 by rparodi ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,19 +14,18 @@ #include Animal::Animal() { - std::cout << "[Animal] Creating the class" << std::endl; + std::cout << "[Animal]\tCreating the class" << std::endl; type = ""; } Animal::~Animal() { - std::cout << "[Animal] Deleting the class" << std::endl; + std::cout << "[Animal]\tDeleting the class" << std::endl; } -void Animal::makeSound() { - if (type.compare("Cat")) - std::cout << "🐱 | Meow Meow" << std::endl; - else if (type.compare("Dog")) - std::cout << "🐶 | Wouf Wouf" << std::endl; - else +std::string Animal::getType() const { + return (type); +} + +void Animal::makeSound() const { std::cout << "🤔 | thinking how to make a sound" << std::endl; } diff --git a/cpp04/ex00/Animal.hpp b/cpp04/ex00/Animal.hpp index bcd273a..bfb8474 100644 --- a/cpp04/ex00/Animal.hpp +++ b/cpp04/ex00/Animal.hpp @@ -6,7 +6,7 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/28 17:44:54 by rparodi #+# #+# */ -/* Updated: 2025/01/30 13:42:23 by rparodi ### ########.fr */ +/* Updated: 2025/01/31 19:23:05 by rparodi ### ########.fr */ /* */ /* ************************************************************************** */ @@ -19,9 +19,9 @@ class Animal { public: Animal(); - ~Animal(); - void makeSound(); - std::string getType(); + virtual ~Animal(); + virtual void makeSound() const; + std::string getType() const; protected: std::string type; private: diff --git a/cpp04/ex00/Cat.cpp b/cpp04/ex00/Cat.cpp index 207c674..5e2ef4c 100644 --- a/cpp04/ex00/Cat.cpp +++ b/cpp04/ex00/Cat.cpp @@ -6,21 +6,21 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/30 13:32:43 by rparodi #+# #+# */ -/* Updated: 2025/01/30 13:38:46 by rparodi ### ########.fr */ +/* Updated: 2025/01/31 19:54:03 by rparodi ### ########.fr */ /* */ /* ************************************************************************** */ #include "Cat.hpp" Cat::Cat() { - std::cout << "[Cat] Creating the class" << std::endl; + std::cout << "[Cat]\t\tCreating the class" << std::endl; type = "Cat"; } Cat::~Cat() { - std::cout << "[Cat] Deleting the class" << std::endl; + std::cout << "[Cat]\t\tDeleting the class" << std::endl; } -std::string Cat::getType() { - return (type); +void Cat::makeSound() const { + std::cout << "🐱 | Meow Meow" << std::endl; } diff --git a/cpp04/ex00/Cat.hpp b/cpp04/ex00/Cat.hpp index 130e8ed..f770266 100644 --- a/cpp04/ex00/Cat.hpp +++ b/cpp04/ex00/Cat.hpp @@ -6,7 +6,7 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/28 17:44:48 by rparodi #+# #+# */ -/* Updated: 2025/01/30 13:41:27 by rparodi ### ########.fr */ +/* Updated: 2025/01/31 18:24:18 by rparodi ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,6 +20,7 @@ class Cat : public Animal { public: Cat(); ~Cat(); + virtual void makeSound() const; protected: private: diff --git a/cpp04/ex00/Dog.cpp b/cpp04/ex00/Dog.cpp index cf6a045..7b8c767 100644 --- a/cpp04/ex00/Dog.cpp +++ b/cpp04/ex00/Dog.cpp @@ -6,21 +6,21 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/30 13:40:30 by rparodi #+# #+# */ -/* Updated: 2025/01/30 13:40:51 by rparodi ### ########.fr */ +/* Updated: 2025/01/31 19:53:02 by rparodi ### ########.fr */ /* */ /* ************************************************************************** */ #include "Dog.hpp" Dog::Dog() { - std::cout << "[Dog] Creating the class" << std::endl; + std::cout << "[Dog]\t\tCreating the class" << std::endl; type = "Dog"; } Dog::~Dog() { - std::cout << "[Dog] Deleting the class" << std::endl; + std::cout << "[Dog]\t\tDeleting the class" << std::endl; } -std::string Dog::getType() { - return (type); +void Dog::makeSound() const { + std::cout << "🐶 | Wouf Wouf" << std::endl; } diff --git a/cpp04/ex00/Dog.hpp b/cpp04/ex00/Dog.hpp index 80c5361..9d67241 100644 --- a/cpp04/ex00/Dog.hpp +++ b/cpp04/ex00/Dog.hpp @@ -6,7 +6,7 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/28 17:44:51 by rparodi #+# #+# */ -/* Updated: 2025/01/30 13:32:28 by rparodi ### ########.fr */ +/* Updated: 2025/01/31 18:24:07 by rparodi ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,7 +20,7 @@ class Dog : public Animal { public: Dog(); ~Dog(); - std::string getType(); + virtual void makeSound() const; protected: private: diff --git a/cpp04/ex00/Makefile b/cpp04/ex00/Makefile index 8380d2b..cba237f 100644 --- a/cpp04/ex00/Makefile +++ b/cpp04/ex00/Makefile @@ -12,20 +12,25 @@ # Variables # Name -NAME = polyformism +NAME = polymorphism # Commands CXX = c++ RM = rm -rf # Flags -# Mandatory flags for 42 CXXFLAGS = -Werror -Wextra -Wall -std=c++98 -I./includes/ +# Mandatory flags for 42 +CXXFLAGS = -Werror -Wextra -Wall -std=c++98 -I./includes/ # Flags to debug and have the dependences (can be removed for correction) CXXFLAGS += -MMD -g3 -# Flag to debug (TO REMOVE) -# CXXFLAGS += -D DEBUG=1 + # Sources -SRC = main.cpp +SRC = Animal.cpp \ + Cat.cpp \ + Dog.cpp \ + WrongAnimal.cpp \ + WrongCat.cpp \ + main.cpp # Objects OBJDIRNAME = ./build diff --git a/cpp04/ex00/WrongAnimal.cpp b/cpp04/ex00/WrongAnimal.cpp new file mode 100644 index 0000000..0afff32 --- /dev/null +++ b/cpp04/ex00/WrongAnimal.cpp @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* WrongAnimal.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: rparodi +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/01/30 13:21:01 by rparodi #+# #+# */ +/* Updated: 2025/01/31 19:54:23 by rparodi ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "WrongAnimal.hpp" +#include + +WrongAnimal::WrongAnimal() { + std::cout << "[WrongAnimal]\tCreating the class" << std::endl; + type = ""; +} + +WrongAnimal::~WrongAnimal() { + std::cout << "[WrongAnimal]\tDeleting the class" << std::endl; +} + +std::string WrongAnimal::getType() const { + return (type); +} + +void WrongAnimal::makeSound() const { + std::cout << "🦊 | What does the fox say ?" << std::endl; +} diff --git a/cpp04/ex00/WrongAnimal.hpp b/cpp04/ex00/WrongAnimal.hpp new file mode 100644 index 0000000..3e13252 --- /dev/null +++ b/cpp04/ex00/WrongAnimal.hpp @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* WrongAnimal.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: rparodi +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/01/28 17:44:54 by rparodi #+# #+# */ +/* Updated: 2025/01/31 19:34:06 by rparodi ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef WRONGANIMAL_HPP +#define WRONGANIMAL_HPP + +#include +#include + +class WrongAnimal { + public: + WrongAnimal(); + virtual ~WrongAnimal(); + virtual void makeSound() const; + std::string getType() const; + protected: + std::string type; + private: +}; + +#endif diff --git a/cpp04/ex00/WrongCat.cpp b/cpp04/ex00/WrongCat.cpp new file mode 100644 index 0000000..e7abd44 --- /dev/null +++ b/cpp04/ex00/WrongCat.cpp @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* WrongCat.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: rparodi +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/01/30 13:32:43 by rparodi #+# #+# */ +/* Updated: 2025/01/31 19:54:35 by rparodi ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "WrongCat.hpp" + +WrongCat::WrongCat() { + std::cout << "[WrongCat]\tCreating the class" << std::endl; + type = "WrongCat"; +} + +WrongCat::~WrongCat() { + std::cout << "[WrongCat]\tDeleting the class" << std::endl; +} + +void WrongCat::makeSound() const { + std::cout << "🙀 | Help me I transform my self in cat" << std::endl; +} diff --git a/cpp04/ex00/WrongCat.hpp b/cpp04/ex00/WrongCat.hpp new file mode 100644 index 0000000..d9e55b6 --- /dev/null +++ b/cpp04/ex00/WrongCat.hpp @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* WrongCat.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: rparodi +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/01/28 17:44:48 by rparodi #+# #+# */ +/* Updated: 2025/01/31 19:37:00 by rparodi ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef WRONGCAT_HPP +#define WRONGCAT_HPP + +#include "WrongAnimal.hpp" +#include + +class WrongCat : public WrongAnimal { + public: + WrongCat(); + ~WrongCat(); + virtual void makeSound() const; + protected: + + private: + +}; + +#endif diff --git a/cpp04/ex00/main.cpp b/cpp04/ex00/main.cpp index abfe447..3d8220d 100644 --- a/cpp04/ex00/main.cpp +++ b/cpp04/ex00/main.cpp @@ -6,22 +6,45 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/28 17:08:09 by rparodi #+# #+# */ -/* Updated: 2025/01/30 13:12:32 by rparodi ### ########.fr */ +/* Updated: 2025/01/31 19:52:09 by rparodi ### ########.fr */ /* */ /* ************************************************************************** */ #include "Animal.hpp" #include "Dog.hpp" #include "Cat.hpp" +#include "WrongAnimal.hpp" +#include "WrongCat.hpp" int main() { + std::cout << "\033[0;33m[ Building classes ]\033[0m" << std::endl; const Animal* meta = new Animal(); const Animal* j = new Dog(); const Animal* i = new Cat(); - std::cout << j->getType() << " " << std::endl; - std::cout << i->getType() << " " << std::endl; - i->makeSound(); //will output the cat sound! - j->makeSound(); + const WrongAnimal* k = new WrongAnimal(); + const WrongAnimal* l = new WrongCat(); + + std::cout << std::endl << "\033[0;33m[ Testing the getType method ]\033[0m" << std::endl; + std::cout << "Type of j:\t" << j->getType() << std::endl; + std::cout << "Type of i:\t" << i->getType() << std::endl; + std::cout << "Type of l:\t" << l->getType() << std::endl; + + std::cout << std::endl << "\033[0;33m[ Testing the makeSound method ]\033[0m" << std::endl; + std::cout << "Sound of meta:\t"; meta->makeSound(); + std::cout << std::endl << "Sound of i:\t"; + i->makeSound(); + std::cout << std::endl << "Sound of j:\t"; + j->makeSound(); + std::cout << std::endl << "Sound of k:\t"; + k->makeSound(); + std::cout << std::endl << "Sound of l:\t"; + l->makeSound(); + std::cout << std::endl << "\033[0;33m[ Deleting classes ]\033[0m" << std::endl; + delete meta; + delete j; + delete i; + delete k; + delete l; return 0; } diff --git a/cpp04/ex00/polymorphism b/cpp04/ex00/polymorphism new file mode 100755 index 0000000000000000000000000000000000000000..58d30a1c6c8f44e2aacbaa39b4f96a819da09fa1 GIT binary patch literal 62560 zcmb<-^>JfjWMqH=CI&kO5Klqa0W1U|85kbC0&~HH1A_$vFM|Vv8iOhW8v_Fa3j+fK zOq~Oi1*2~;fweHeXbuRMff=e#0>ofoV31&jm;j??pz2^W$W0(25Dl^q#D-vqK9~z` z@IXXiG=l(y57Ng9VnX>00#JQWdZsW)l7Rt6BkKd(X8@6BFo5cV(l4O)!DwWCps;!1 z1JU;&2BHr}Ux51i2iR~12ADojaDnvQ@P+8R5ev}=qXj?;K+2&sEIdKRfUpJBTnlJ; z!e|AEaSSjTU0(!LUj$SijCO(QgV7*6KtjP!OHx2=QtbT@swnZm%}U;^MAT}`=7R^CW`*6jB0@U9y8fra*eokhRnTdW*if&G3UTKAH zg@u`}nTcL;zMc`-dXT$7c7W29yI&{+Qv<^RkQhuqh%Lgv08Zy1`G7aw^A^w8a3IE$ z+v|E&&ij40)_Q}~fXo2t0jU8Q3~~-MYC&8EK?Vi}aRvqkkXb?u3=EtM3=CWh3=EYOF*^eT12>oj@h37KzR@xi9?A%^j;t_<-}xYgmb*xAq(;yRPmyp$Yl4#eX&GmuC9f=eti^NZt?5{pw! zJo7S3Tp&jJ1?T4!y9T%g1?LCHgIpI9=4WUC_C{h-W|^TO$V)ki#l`U@l?AEsnR#jX zSX3Dq#K#wB#wTMaj8Cpej895U&&-QYPAo~zV2F=O$q6U}MMOnKd_ihaaeiK6PG(7E ze3=1xL6aEl8sMEwo?d4|*C6j;6HxdBm*f(pcXJp9W91-E@o+L>&2gkj|wNG+(20*QeztULpWBbW2AatkC5s>?uXL0AG>o`LE@ zXpsgIW>7#92i3D+K?Vi}4J2`>)4@^(NaCRS5-iBTz+izSj$BteAc=$g3{&rcBo1;D zOgsQd9J##^fg}!UTfo#OAc=$88!+(LG2xo*eD(ifzc2kE(AXF%l-0be#7C>&HB)v zfx)BoKnc_T3m(l!I1Ymi_;32ipMl}O>Jxtk27Y-5hX1M{eg;VH<%9qK|NmFL<z@8tn7{}hN1D(YTt0P_!l_@JWfah*u(ttpq4uW14#di?NA{X2;XD> zC75}!Xy(Brkj&flkFa@{Vdn9onFo_VGB1k=^RB?m+xrjIzc2|T^Q4F{?<&l^Tr~4w z5=iEq`b*fq*I?$!qL~MiKr*iiuX&*SVffaw^J1Jw=Od5iCm#YrTn!Hxp7c0=e1WV3 z!++7mJ`4!)XY`p!~HD zB;nEc4or1^@HqI+-s9j8W)H?=9vALEaaH~Q|Nj{4 zV_yaa#@NFc_JP#D?n1Z$q{XB8je$pJ?GKOc+8-XBwHG{&vr8B_FnBZ{=kVyPz42nl zpa1{&gBnEpJPaHdUS$6H|KFqYphu_ggO^|rcGo`G2kQU5$p7>IKTPNXNc+AQ#tsZG zGT_3^M+{;Qdvw>{@aVkg(Rs|Hv-Cr!@0%Cbe?#@bG=F$e0=DG%iyB4-283(VCZM|4 z^@m5N>kW_N3?TPHoR|V~;<4YjoOlLi71$Nc$2nd^fz)Dm7|07RtYA72jsv;Zqx1NS z`wYmADAH0x+Sf~IFi3c8?2Rko#bozeibba&U->?7w zJ-TZ@yeR$s|38{}Ag{jg=mb$eKmq5`UHZYJ`54EGO0Xu^7aq+=6k?ImBC>t~uzSEE z1dg(O4Y2Xd*&yAW$34I?2$FlT5+u@mL;zH1F$BEe`t|?+i?2UX-GiK7ZoJt37vyYk zMC>qdU;taQ?*k|zY(ZvWO)Jj75Mgoy6wv!V8#yq%uz?F>kCGR^|3dX4qQe7h$?+GU z`T$4zKsbxb(1GE_vY)up$C{r|<3Z`;MIXpxI2=-h>5%i_( zc7x;3!w?pK4WNLk1?j~af6YIT0ty^|vp^bZ;KDe9%^Fr1AmXnBY{~H#6aGT$S9o~@ z&)*1V%>&u;>^rXbd-EO1Suf6kJch#|n=teBf3UH~U$FlrCH_1?y0FKe9!Lt5pO=0I znTRMKFye0qEdIDbT2SIo5+s5r{y^pR14E?pn&UgHyp{lEsh!_&1=jv=h`>TBuXn(O zaRi+@OaUSekAN*X{sL6K5>Z}*+zTltEJ02b1M9|CrO3dn0_8_gGJCP=>;L~A*c}Fz z@A?Y$6vA;J_kzl6{onupBOHfZKBDGN)bctLVj;Hj+7BcJir=GOQR7zuQcznI~={(cS8jgmfof<*A7j~g$JgNiXo{+?h2%ikA30Y4X{7i<1r`~@0}uz=t9 z4y0iYTo`*4yx{%^)rScF6<|w_zu52-XZ}Vw>pRF6Hn0wC>467se|PPT7xO?K!{Lx7 z%<@?tZ0zwD>fq9p*z!5^GdRIvjen37IQ~DQ#y>{>7Bz;(pEgJfO8i-ZL{Q?d@l63E z1H*CGKcE@}l1=PE4XO8^Ksot1xT=1^^!fk){Td7m3@=_lggrWcdUW=JDnSS<;{X5u zFOc$2D@eej)Aa*H*Cu3Lpso`{mj_7KHAF4g3K9UdvLL!@kadANSP)$nAYBg-Wp67; zz@yXk0z{V^vMx|J45CW|q)Q7{4tsRBf&@G|T~9!C2_WkNb=DxdBtW`EV6p4b-3k)$ z=yW{*4k?e$y`X*@IE*|xx4!uI|No2YA0gou4+_LpAWk<}0#qjK26G{LIzjSXAc4-- zAE2H@cj*m}-r5BooqIuj!x#CWVyb&DL~1Ko$Of$Xphssf2clBn3u1#^@FM0TG&_LI zdGYQ8tYn@FvPvGTx%C3XstX>ywGAGfdvAc8%mT3rBDEDPbnyeo7a*%Z9Z_iZ+6!Vs ztorx?VO7J6X1G-gK~`-6Yi`{EvFdAkX6{G~DNfxH*^E*)NBe&BT zL29~PKX`PuZU9AV^A8687SOxV$o^JUDB;V1g?Fnd8x2`{Kp?x8OK@vHa8j z{|pQapuRYGEDk>U22weSM?+vV1V%$(Gz3ONU^E0qLtr!nMnhmU1V%%EIw8Qw0Gg^t zm}LQ-2Ra}E8J|iJh0q_Mw3%aGW^Q5*g8_8irvX%bG()43=$u_QAuU7;i+RRO%3 zkO3~|lA4o>Cih|fk|_!`3MCntdD$Rc8TsW3CHV@uiP@CzgOTOn|!Y0#rTBU(wEqC9#}XT?vuF>c$Bh6>1cGQ}fHg1ju|C z&VY{7FOYz^!$1;3H$Z7)m;7{)T9|thpz7i7ami1|?jDfFXoxI!H*Hg>Q3%g3O#>4k zJCHF4bbPo#3gR9CX$ZXlN*fx67v<-rLt>4A0Un<}pze!ClExmXCymS3SzoLH$~kL*?udk56L4KfgS3dlm}1So9*whkJ(3=9mg@LU1a2lFq) z-QcLik`m#DASuJ@^qCC`H3}Z7IRy&2sS2J7B}IvO#cBCPxeB?J3dN~8X$qNn3dxBj z4ARjC*2c!U(F#tbnK>z-1Po5{sl^Jh($NOF2>FoIVtC3=Pb~?lEJ#(zO)bgDPl2ig zi{z&%WLa@Cz}T5c>>Mjj?52UTN-!v&pqd8}%1;A{CR%Ya!1*9U;T(`{a85R|G8FsZ zVT9^C&^k|PW^2%14Rr4 zKf%htFyY?+{|Rgi3>WVG|KGsI!0-UXXJlXyxc~ou2_pl;h5P^ir!X-vG(7nKzlVu| zLE+*5|67U?t1$F{|%73r~m&8ure?h zJp2FOf|Y^c!n6PX6IdA-6rTV8zX7E0`TzeHSQr=4uO8X=AJk@B#atof)(p zfEgABAisfd%H99}mw@(-@mM>6+yyp+DUXMp!;yzgfPn#|2DF*v&E5b1CxX=JAgc?9 zs{>7vfGUZUd;kA?gVcE-smp*X133vC_H!5+7&2~Q4=<44_b@UrR6M}#_d8Jiuam5+(+Q2RCv1YYGzsL&8Jc{sQGOkbYeLy1~f6u;4z_UvrS$f#xqz6GY+x z)L(m$)uH-J1DeOdadrbq9h$#C!%@c1i-nSmkW5$?3y!_2_Y@d&rS*Dy0MSlq;( zmO=4!fr)`3;{i0SK0$IPT3Y=9Dw7^S(<+M%Qkq7jRgih0GBe{LG(HuO)S>y?g@u7( z!wuZ=3EHq%@EEthTA=!I#peoUNLdO_r#eXPK#Nb%-bRf_(D?L0R)-p&pt66$BdEVJ zkkq01ONNz!K?9G!Y*-l>JZ|8Qj|3J5h8>Uo|9{EKz`#<1WDoOw7I?;CU|{&qEXyd& zpuxbP;ZV%b!pJ&@k+G9e8no8|Tof?;XO?6Xl-7)4aM5L8C}izqWGsWr{{PR&A;PN5 zAZY|MM}>hw#UY=efsu6vBV#KTb0QdAR2djDSsNJ{^XOpCVDeWXV>*LB1A{;76HbN@ zLk5OcM%G3yhAu`!28P{?tn;`S4uF^+8CiF8F?<6tmou^6;9^+A1lne|o>}!P7sC~1 zHwK1TEUHtv8TPYyGB9+os&3_GSj&2qm4Ts&+vg!S<2i14s6ygzlpGC#(GVC7fzc2c z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7^WcroyTl|o+EPsN-GFK=9dbf^Z_U>06q8Y z0+b%Ap#qu$0J$A>rUr;pffu_e9#7I5Dhyg4YZCJ#P3mtgqtLY z1Df-Jo@*uz<%8!G7#J9&pnM7FJS=Fu86*UnV*t^h4d5Vp0rb4FumAq%gZLgS5c6U4 z8XMRkeCRX@LkCnIw80ysKAaguBF>?bfN;U*V?mi<3aX5O0lEzv8Vn3GpaB6p(*v~8 z9Haqs<`#%{;D*=_6Ft#L1{K?;@;7?@gMTm}YCHis%^5Y;;oO!Y4YQxmp=sfl;M)FeI@kdn!&U}_5JAURI9sYzho zv??$)eG-_Ou>?%b1WikFvd#Jj=FOI81!m|C<3Of5bFrk30W zQ_FPOK>AjCf~hrGU}{|(nA$KGOl{f%rZ(RKQ(HcOsjY16Abs0pz|?jlFtx)2Ozo@% zQ@i@W)b5pFYR?fcwf8=l+Q-EK(!O5-Oda$9Q-{;Q)R9Iob#w`sI(7g|9ls5xPP_$E zCpkGm+E1y1snd>N>P#${I$Hpy&NYLn^E1KJh4oyd=87il;dVF<#Ys0IbQ`+F3-S}>vu5a#=*_Nz{%$> z38p->z?7#onDX)gQ{J&)$|sMTfq{EEDE@_ldO$)#!E3-&2sot(g>47(!cTyy$eUm) z`W2Xp`3%nS_s85kH?*?2(H?|VVHNK}w#4l@J8Nd^W6b`gG1?ZnO^bOCh8p)4cFpTZy` z8HBEZL|!m~MUI0qlE4{e1_qw%%nS_AK&3IO$X(C@a&JM(SeZc+O~NcJ3=Cl1!ki$- z3H)VdVBr4(vYtg0q(Bs8ju2>z9mh9_!5|gFAW;S(W<~}E4jyKZ<-#@~gTQ8pI<-0mKqukQSN;GI0Y|6NQ$8l5@q_GSkhujC%>u_KDESJ52nLylAkk)Y(U&06aC8$sfJFCz;{~J{VuH{QkZ1@q zSQyRwnV{B_XdXKQgFrDm1A|xvI|G9VBNGFI3}{&n$9=FKkWmaW+)NA%9I2=_f>RWO zj4((l7uAVSDQS>Y3^rXt${?u-q@V&FmkQP<3<)n*4h9ARkmWMEAf*T3j)D5i1SDF; zXwJdF08VbgcA&N&|0&S%bR442Al)E~g{(p9>KWtF)H#9FvB-FUWN(2KBH{vKl8`@0 zYAxej6pfIggZ~~A0|P6EP#8$bCPq;9Mz{f@L?#X-*A8|yIM_k44E7&`P#Q=|5t4U7 z*@8hR2PDD_5drxb>_@0-&~gwCc1AQef(&L5ssZWafyjXsfHgzpT0wFGNOIu(4Ur20 zC5k9S`W0soS^yGiMi!Fk1(~oEVJ^r31{u)u6OK~|QIM4kGIKy`*CRwBYL|dSuOdVt zYFC3q{~<&{Y9XFw0-b}($@Uvksk1;Ubyjet&LFfGq_2@tiwiZ%kAk97Kp4itLB;}XNgHT5Wyg$1rmVd1c-nUNFWcy2AjhmV+9h(M-p%X2^1m;c!2~8kOYE2 z0!2syQ6Pb0B!MK5KnapS7D%8JNuUTMP=+K>4HBqA5@-eq)FK3!x|tamLcBw)nCz#wQ2(k=`pdO+)PWWd>b8CU>B zFvz%q^sNN3!O9q9OhEcfK&m0>N#+sAxwAo@g9ykwKs#5U&N^clH)!c18!rO`O9%@C zgNB%}q8|$bLp`X+uaw5Zz~IWvz#t~Y!K4h5787OUm;{ni*#l}+h%qt=Fff8NLqt`N zurM&(0m+CnG6^t2WTu1Et36|3U|oGID@L83aH(l+}BA85p8LmV>-605VQs z4le_P7>K1Q03E^sE&XE*+sDhmAR?g1%D|w-%fO(;G_fLsm4TrSbYPn%Y|%Ps@gHN@ z3y?}t16BqG3k;R8W$mD)WQ<`#d<+aCqW0KSYHxrpd!SR6=|tRF-b*nMDCIBt0;bj# zfT<1bU~1DmFtzyznA!sAk8XwZN4G)xquU|<(H)Tf=+1O-XLA>*ZNka6doq}}XC0W@ zdlF3T`vRu+L;9l!jlkW@!vSFGNH&-{+6ShNtpZcWkAkTa*TK}u&tU2lKe%6cS{qEA zaR*apqrlX;TrhPW(jUD5>5pE7^hYm&`lFzZ=wEP$l!s9o+7Yz_^(47X6Ty^O8kjN% z_ec30dO$orM^IhD$>+2V%yZrkrd%$7Dc6T!%Iy=Fa%Tp06!|5sx}5wxZSXE9FQm&U0PS*ud?W}ml0g94JkAiT>d1nP1M zK)alvGFR{&s44^L7W@p>@Elb6LAsp6AO*r8a|EDWPO!ls6@nm91_5Z76RcegRHTE= z5Y`5DuMJoj7(_s71)yC{uqu!~sAHjBPOvaYpCHHtQ3e5MmlH!A+T{eh0b~q=7_`d? z5)puQIk$maaRNkuS)iUG1J6Ntmy;LL(a^WSA3qkEwUPzY{T=VdON)!QTmlJFT zIE2uQ6o7U)!H$#$b=LS4SQ!{Zz?z|5PK0JRRt5$^Fc<6|VQ*Fj20oAz1fX3`kPiew zVFe9WXqOW%%pd^ma)RvxI|ytXG{m4?POv0M2o{piE+^O+FaZuW0ce*KtQ;Qjf)ByI zc*e@WAP(trN`ShYpj5{o0qSysSS%8tE~gl%%P9fsa)MX_43YxSE+;k<1)yC{upFw( zAyx`NyPRMJaMwfSpj}Rc9N3it&@LysFtp1F4w_wT3=EJUg@pNjHUTb7S!8JVrO6w0(Cj1AYD$d9*|KCQjjhus*T_j#UKUga-upBDh26sV$&r6?Q(*x z00-48cGNWb9^@>L2gXzx||?|h`4~5BmnJlwxei-6dk;fE~fyr%L&Tf2sc2KNI|-sU{`~K9Tdxu zU=e_JIl(~&$`%X)&@Lxf1nx(uYG{`e&5a;~83dqRPOu!90BeTGLA#t_VK4#C-w-)y zmlJFs$YG)k0?;lel8_Xn%L&#CHWy?7gA}C8i4X-zF-SqWoCr~fT1b}@Aqr6o>2e}O zL24nMg>^Y0)i(>Y`etPWRo@H(&@QJ47iyG4x|{;gE~hz)EF>~`Aze-ZXqPhzn-WNu zQwY@Ml!A0QK{*zzUl3GOGDt(Zob6l;41Az=gcPL92@Wt2!5{_ca)Q`kZ46S7E+>)z zq|1pU0O@if2|&7>NCJ>9Cz1f9%ZVfa>2e|oK)Rer0+22zk^m^x@m3)TK)Rd=0dSX7 z2G-?lgm*dl+PE1QM7lv;PLN_yLsvi(T)#oOoKlc3CrC~ZWC?>5q|1pU0O@if2|&7> zNCJ>9CtN@f)N*2wf^<3Iq6|`yE+>)zq|1pU0O@if2|&7>NCJ>9Cz1f9%ZVfa>2e|o zK)ReD&w+g?2x{IjNI|-sa8U*+NS6~y0Mg|IsfMH{DNqIwo(=LGL_l@|Mwe608Pw&x z&Bnl>Au22n;xI5OfViTfj2s@IE~8>DD+7Zlq>K51hk*eis#L@Z>0*jPx|m=YUyynR za1WIaB)}I0>imINDh|+{!k}F%jA11pasGDDP7q!O232VHkq^{~Q-SR%2JNq644Vg1 zDKeRrfk6mEC2ZF*r2BXRta3g!m1?kk$&ilWJCI5V4J7k~K{l(yRwY0>hO0qM7?9h+ zzJPWNK~V#nq2y;{U;uSckUNGT?_thR!p`>|?HIC+b__xDm7^U)MupLiArrXFhxboL zJBAFPIUvx)#9t z9m5AWI);ZqoBk0ULl76yF+7B|V|bjjjv)i|$R<$F3Dz;ZgSBJ00ICwXV+cCf1+!xa zJN^l|WB3JY#}IZv6#kAOY?(TwV+gv<7ty_iE?w0EjTl2`43DxgFo0%hkUNGSu+A95 zE^5NnF&tgG3Z6I|UAhWdo;td8b#&<}19;gic=g%n(pAvfV(2^~c;O9bVcF=?RoH5| z(WR^4!Flko`5Dl3*U`R(4*V0wkK50ltbQ>E317evjbcQm8gMk4yLut*l4B(ZekcEg+qf1x8xdfbFK!pe-SVotwGBGf4`~$7r zgCrKv8VE?xj4oY;bUDGRW2e|oK)ReDNw5|wE?sTF=yF1qu3iImIT16IATDBt611lm zbLr}RXcrU9(p69o6*0Fb0$Tp5@&MX_L!P1h$;QCIg0z4XvUC-8Z3^-XB^PMR1BOc2 z#VU~QBV_5SG&YrLu&Y-f9Yb78S78TdK{|#ypq&jMw?me$)`6DzGQ@BpI)*Xq3=AKH zP&0ra{`&{b26 zVW1-}MT9|}RC%U}1*xEY=%UHI3=Hy26C<)fJTWLQAP2+~hw?nGGBYrUNEAU-Iz)nw zQji4k7!+W~6GM7izM$R~=r9_QTwVqSMbP;?eC41mhBY8As7J}bD9EVFC(O#sCm=4( zC&(Bo&cMKA$;iydz`$(6z|7|iW_u9 zC>t+KA*;P4NSIxh)w$ z7V?NOcnX6xax*aSf*jGwD9OOU$HV}!mS2T|na_@!o11|_fSdAdi3qRA2%=+`bYJL0Mr2230-AJU*}oxKSn45E2mAf(%gy1s5oYHAKN7psB|Q zabpTNdh__)g&7#MSQ(fkKrs$-m^P{kkh~7eV|ieY4c?T4NG5zBe={)fLz0OAG$`Rw zE(l2`La<~a3`r&;kYpkXN+x2^n1<^SM;~iAyF))nA`)EzU4M_^4H3h?HO~Ei)Q&@A4))bKD76SvVS_rV38Pe+W6tNfg459;*Xoy47NkPm3{?ox1qza!oU&Y9LnCnTfUk?tH#E{S&@h}lnG{o6oCDvm%+f!zyOji z*2@4LvRw|AhpL5eK#CzOU6>O%7#JM$GIJAi^pXn-KsRj^mlS2@rKgpHyv_ud%qS>e z-~?R|Ai}`O1UtW0kcF95l8gBigBObkD+3$zw)!U^5$012Ov;Qfp?OT)42+B{Abqft zWSRLHS%tVbY*;zjN?3W=PO>rQbIfDaV;1yc&VRzn#KtV-#mdg+#mdO`l#Mwzjahge zb1ugsv1~v{6R$-7DgEEU+#yFXpT#tc+~T;$CbMm^0Iu#pf|+GAT1Mi-Xl$ zfz`7yXU}661sNH|23AwTD$Lf$%D`d7%EiTTl9iLqi4PuVaI}znv-FNdNK1cva*4* zBijVFQa0uSj(M!Q%mQA_1>k%vh?I}>(wK$jG3RkyV-^DC%P3Y}u)b0@=4`MgQ7`6f za5fh6VvAtTN@EtA$DGA+jadw&dIwlF8*|P)W)Wy62B|1v<%MQq93% z-w{#Mjpo_Gn`d3}(_wiQ#6-!nuoD|d&9kuc76xygeG0B;UyatYSlj-i^(?sgI%u2G z;YIm*>3G}H$SP2>G;CKLsaYDfzYWx&mH}0#e8>%IV`3ZBvLLOn2DLFW!3H%*J(dQw zEVM4h+MqT>uAD(9xw0@^9nI*Y8GQ)$m%-T>)RczynBjbsJPlj6OlqEnEjk8O)7+qp zDaJN|l?T?iHXyQbEe_HN%F>|5wE;7M#x+Pamd3R>G(&?L*Vf4SR}6Ga6T|+|{5uTt z??@Z%%1zA7gSD+0z{66obtI(b)CJJRCd@*NtUO#Cimc{r915)BY)@IG**MlPXU}65 zU=}T56=9pmDghG60ttvA31or<#7kHu*(S2ef>dP8V-;nVKoUp?2}ptl$$VHP**KoC z`f=E>^04h@Rb=B3VpVydu-!kqGim5Eu#iTA z8KgiKSpkOv*oY*s3b_(irYEdCY^htKrIu{aG=pVRuSfu32e++^Wfan32e-nFs>wX+5|S{3IoZYP^YlazR0SL1uAsW?m|Y zZD69GT47+oP+XG202`HNh!2i0N=-}7FU>1qh<8K`UV|ixEAx_5Q{u}rOETh%OHwlP z8Itnza~SG8^D;{q;-i8~d@SPQGxIaST*P2D1Eg=vkW`Xip3IPzo?23#%n zW{8JSVBum0@KADm2}4>zDM%HVDrQJ4&rC^W0BZz|fafL^<)r2@6lYeY#+NYUCKZ7V z&P^%?+nk$J3>GM60Gk2QP?`tU%TSh9UQm>oSCYn%UJ#$3mR6h!vI)k@FH0>-%gHZ~ zPb^B0Pb^AJWGG5ak1tLvONH>_%yp>4HiyRa}q~w7^=4qnK;2vpb96bxahb*CaA%h%gPp=qk`FbYBp<3OzO106NCncTWQdP1D@n?UFDNOB z2hH*@#Dn6@(2yZ1u{bk19x`oX1Db8pQ7A4+v9ba&<4cMXGfRrW!gf&c#2ip;l;jsd zL>259AbJ_JVJ$edTL2XWkITwX>vt{p`mLT zD9eKcAnuD#&&f|p%!w~cEQ$x`^!O-0sM*d&u4N#Tpj;O;t^r8a-N)a_(I-B>xHKu= zGalk5aOGW+ky*@8=bQ*C!~DFBofAt?oEjhH2NHu>0b;|<2eYvl4r|cYx#XvVoaJro zlAn%Ys7ro2+)$VNbhx1)HWoucgLj}_0wf~A9R-Ld80wHYpzt&_L=r)_*BeC^GtA?o z{7_WD+=wCwb1bSL7FQ!V1RU59x55J30xXRs#NiS!+u;H*n-K!IY=y-FsFlVLj~e|T zF|d1bQ%e#VvKTTMU=xuQ&_irt7d&=D`LGGcEzm10VHZ^DLhmF2&37VW*mTGVsQwF3 z`Zkn?O?$v@DuK~|#UXnok<9|JVMDbN(3Q%t<7Bm=eAtjI?0{Psy%&0J5y%W=3>zoP zfa-^x3RDf{!^VSBq#*8rooaL!x{(#xED#&kN8JI_52a5-X;@zrw!IZb&xN*pL1rLh zSWB8i7-BzcxwJHt4{I@ZDnsOv_2OrPR#UJreEg5D3Uo0SBLfRV4Ku_<1*n2>&|EbZ z^+I5I5e6P>h$W#DIkr8v-naFEg@&{~@_%s6U3_-IO=FSo{ahN+NpozCb?S-Xeba%pTE=6}IEGNL+ zxt4%C=b+gObLSp3ahN-Apo!0ex)YW|(A^2UNC(}Wup9<+=Me(#e1c{#%$+PYsObUb zP6agatx$Kuavr)nVdpxdyAzgkVeWiPz@0j1_QKrhgC-7hX9k-16{tIrw}*q$8!Uao zj{QP+C#*z(xf7J(u;n{gJ}N=87kt_^13v>S=c9)YY*#tDy|9u4W-sU$>gAOrc z;AcpHmM9=Ufv_l4d;*%d22}h4nz$WkX%>SF!v(Z_3c6O3kwJ_>A{I406hh5mfYu}+ zJ3+V>Y>p_ygBVoxxZFPntX`Ob11%kb%);j1Rp5XUVsJ1)HGePI90`USXzn})7MEgR zNI+G8hmnCnkU@}Pg#kod17sls1H)5B1_mJpeg;@c4?5}qB=rp@4y`Fc2OEIInV2Bz zVKph}ygZP&AXFUrG&_*EK2#i5bHL1TU}9hpV320mfaXqjuzHYARGiENasLIV`#~3a zf>eNRHw3vKR`Y>Q`U8nuvNJF!Fi0~jKr_D)YK{fe908DG1_lPueS{!$U^P0-oim~8 z8KCMx$H{`UtN^={p8@$8d5}2h9zjUn0Pzs`7Fa!k4`Zn_L&6hQGlDiQf#h_+;tUK4 z0+9FuiGgr2=;SRXX@(VO{%QcL$BakNiIG^{!_2^-$RN(308Kv;Aj26L7`Ry&7=)Mv z7<$lZXhD!TR1Gqv2fB`yL6G5sA;g`qbmah2&&1CV0L^!>_=*6DBO3r^7vd0q0yRGY zYCg=Iw>Z>;mehgb5&4uxkQKI|BQ_ZL85E%Ift}DV3c4HsqyP;^;tGBg;WhR<@adVU7vi_k&3x531rEiBOCA0Y7yP;)Y%;Q-n^0}{Up zRgaz@8$m~8Gx0Joprs$swF%&I0O}qtkRc2V4BtTJGhyaOCN@a=M80tkq=gT31ucUh zg9X$*uy_ZZ{|O3z^!%s;H3#0}1sTG?z+eG2X9v_hFn_s0)x%n_uyQ6EtX_uU05tuB zu1N+NRmcWO&kbnlc`4K!Sj!z&zHNkxBi|1QGUpgr9K=G!g3$B>>rueU83lF*1|=qb z1_Nk039IkS*&*c{dimo57MEeT0j+mnws?Zghw%{fB+%8h41x?lpyA91m0AK;&(DDF zp3PA6(aY8SF!j)M1v-8PWYh()IEaOcL07GV;t@UkIXOV-fq_8)+9QJL(gch1Gaz5U z0g^L?ilc|WBUF5YC?sDPf)q0_FvLN{KS0G{>Awst4poFi^@7Fu8PL*)*+eSbH%VAqiN5Jx8;*La5b zsE{zw=oD!52|iK+8%qI6xPXS&5CdqiQ5Dp|A@rdmxJeM@sVRviiQs{M%aYWh+|0bh zlGHK>cOOqD=ZJ`SV?7g)GlD_3ft-OdROAe?KEx9`Vh2(HQV22F(?1?GzmOMSTAZ2! zlEN~87N1;^7@w4yo|zY)oLG{a;ouw*;ppTUZ>VPs(h*!@4jt4qG(sNL^h^#eF*HOP z&-6@o4Nmk-c6D_&bPe(jHi<{}fS!>d11OzvX7U+6@&ye^K zgLv0qGZf=M38gqcJ|i(NB_|c+N_c=m!^4ksXM-XV-N~TX_cJsA2S8#{W|^TOC@^vo zi;Ka-z44iOY5A@w0R~E|4DsMAas@K94K+6;45k|;p5dhiXuKMhZIR4F8!m?A z;HcmdljQtTX#7Ls1MDx9WNBm&A77jqpNubMLYxT8A6SRyNzXKi!LDeL21zWiaD(_6 znpPC0Qph$ND$VbR&1mb{@V3e>&ihPiIhWPlT z;$oQ9QAlYDl63uoODteBxh9}lS&$}VOF-tKSO7^N@#z&6@dc?x#rb)OIhiGu@nr@m zr9+e-C}lvC3Ce5;Y;p(dGy+T#HI;_um1pLq#0RAom*%EAfEpOapeht%2PEL5Lc*X) z9^_!K-QXFW`1IWTJc#$>!F8OcF>EFQ#aGx|6XJ=Y1e6$q(Jg_bZj4X_1rkaqGUydo z=9VNTG3XVS6hY_=7%MZcB(kfnM> z`Ctbo=4K`{=%weEfC)XY{U9|AdP&8_40_4=xu6vZ40_;cQ*hk_V<#ph6{VKJcsZGQ zsW3KZQW>hDC^0WRwHVaEr4UPl$I}@=+wQ<7NkGT>C78in1{nwiC&9yIa2^ALG6Mr> zTO3@!1ysKUR6lIK0Hy`jE{E|!xmP=i7GKw%G}LHc0*q)Y||(5h{?`!}#b z?BBo!QpLa!4)q6w#{k-F31fn3(7efiB=>W0LG*J#2QKu$svvO;VnUq*x37+Yf#DyL zeha963#k4HAWaMmp#73ycf#Bc6=vuKkJBU4-wCMx6HxsXP=)B>2lM}QsD3A?ItOlu z`yHSI1v5Z_28}-{s5?MPVfq(B(?2x05aT(}jwL96fYiehB;{Z6`Wvghp-?dy8TZX7#KifKCo;8n`e0715po~FM;qN z=@`U@g~LY%1_sdKIWYaOc?}6)kSc_F2oJ%B>HiCLKTJPtyjTIMe+Nt>ltwSlxEL8g zyP3gx3#0@#UvUGfUjQ1hF#BLMEFFR7dq7bHv;RdrB>Z3agG>XBu|a4U3DXawCBX9` zkTM9Y20CuY5CG;ez{Ue1JWT&9qUnc?=PiKhhq)77Ka8&qy3`(827<(33!1M>gMIa1NSbhn8l_)>m@`%37Q5pE&~Abf7rYL literal 0 HcmV?d00001