From 1ead4738309e09e05daab67bd35cca3448407c2b Mon Sep 17 00:00:00 2001 From: William Petit Date: Wed, 27 Jun 2018 16:09:39 +0200 Subject: [PATCH] =?UTF-8?q?CESI:=20M=C3=A9tiers=20DevOps,=20base=20slides?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/img/devops-toolchain.svg | 221 ++++++++++++++++++ cesi/metiers_devops/presentation/slides.md | 124 ++++++++++ ...e préparation RIL B1 - Métier DEVOPS.doc | Bin 0 -> 117248 bytes .../ressources/bibliographie.md | 8 + .../ressources/ci-env/.gitignore | 1 + .../ressources/ci-env/docker-compose.yml | 20 ++ 6 files changed, 374 insertions(+) create mode 100644 cesi/metiers_devops/presentation/img/devops-toolchain.svg create mode 100644 cesi/metiers_devops/presentation/slides.md create mode 100644 cesi/metiers_devops/ressources/Fiche de préparation RIL B1 - Métier DEVOPS.doc create mode 100644 cesi/metiers_devops/ressources/bibliographie.md create mode 100644 cesi/metiers_devops/ressources/ci-env/.gitignore create mode 100644 cesi/metiers_devops/ressources/ci-env/docker-compose.yml diff --git a/cesi/metiers_devops/presentation/img/devops-toolchain.svg b/cesi/metiers_devops/presentation/img/devops-toolchain.svg new file mode 100644 index 0000000..3c09b2b --- /dev/null +++ b/cesi/metiers_devops/presentation/img/devops-toolchain.svg @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cesi/metiers_devops/presentation/slides.md b/cesi/metiers_devops/presentation/slides.md new file mode 100644 index 0000000..b579cbe --- /dev/null +++ b/cesi/metiers_devops/presentation/slides.md @@ -0,0 +1,124 @@ + + + + +# DevOps + +William Petit - S.C.O.P. Cadoles + +--- + + +## Qu'est que le "DevOps" ? + +--- + +### Contexte + +- Première apparition du terme en 2008/2009 lors de la conférence de Andrew Shafer et Patrick Debois intitulée "[Agile Infrastructure](https://www.youtube.com/watch?v=Y_u84PNrX9g)" + +- Contraction de "Development" et "Operations" + +--- + +### Objectifs + +- **Automatiser** (et donc fluidifier) les étapes du cycle de vie d'un logiciel, du développement à la production. + +- **Superviser** l'ensemble de ces étapes afin d'obtenir des indicateurs concrets de la "santé" du projet. + +--- + +### Un mouvement + +- Intimement lié aux pratiques "[Agile](http://agilemanifesto.org/)" + +- Un socle de valeurs et des pratiques en constante évolution + +--- + +### Une culture + +- Un rapprochement (voir fusion) des métiers du développement et du suivi opérationnel. + +- Un échange permanent (culture du partage) afin de continuer à améliorer les pratiques de développement et de suivi de production. + +--- + +## Cycle de vie + +![](./img/devops-toolchain.svg) + +

CC BY-SA 4.0

+ +--- + +## Planifier ("Plan") + +- Privilégier les cycles courts: _"release often, release early"_. + +- S'appuyer sur les outils méthodologiques proposés par les méthodes agiles ([SCRUM](https://en.wikipedia.org/wiki/Scrum_%28software_development%29), [Kanban](https://en.wikipedia.org/wiki/Kanban), [Extreme Programming](https://fr.wikipedia.org/wiki/Extreme_programming)...). + +- Définir les objectifs à court/moyen terme en gardant à l'idée les objectifs à long terme (découpage des tâches). + +--- + +## Créer ("Create") + +- S'appuyer sur un gestionnaire de version des sources solide ([Git](https://git-scm.com/), [Bazaar](http://bazaar.canonical.com/en/), [Mercurial](https://www.mercurial-scm.org/)...). **Il est central dans le processus DevOps.**. + +- Sélectionner une **forge logicielle** pour gestionnaire de version des sources ([Gitlab](https://about.gitlab.com/), [Gitea](https://gitea.io/en-US/)...). + +- Choisir une **méthodologie de travail commune** à l'ensemble de l'équipe et cultiver la rigueur quant à son usage. + +- **Former régulièrement** les membres de l'équipe à l'usage de l'outil de gestion de version des sources. + +- **Définir clairement les objectifs de qualité** attendus par l'équipe pour sa base de code source. + +--- + +## Vérifier ("Verify") + +- Maintenir un haut niveau de qualité du code en intégrant des mécanismes comme la **revue de code** et le **travail en binôme**. + +- Cultiver une approche du **développement piloté par les tests**. + +- Intégrer dans le processus de développement des outils permettant de vérifier l'état du projet de manière automatisée (qualité du code, tests de non regréssion...). Ces outils prennent aujourd'hui principalement la forme de **serveurs d'intégration continue** ([Jenkins](https://jenkins.io/), [Gitlab CI](https://about.gitlab.com/features/gitlab-ci-cd/)...). + +--- + +## Empaqueter ("Package") + +- Choisir un système d'empaquetage pour la diffusion du logiciel (Simple archive ? Paquet GNU/Linux ? Images de conteneur, de machine virtuelle ?). + +- Implémenter l'empaquetage du logiciel à partir des sources. + +- Définir les évènements qui déclencheront un empaquetage du logiciel. + +--- + +## Délivrer ("Release") + +- Définir la méthodologie de diffusion des "artefacts" générés après la phase d'empaquetage. + +- Définir la méthodologie de versionnement de ces artefacts. + +- Mettre en place des mécanismes de traçabilité des artefacts (signature cryptographique, somme de contrôle). + +--- + +## Configurer ("Configure") + +- Définir la méthodologie de déploiement du logiciel dans ses différentes cibles de déploiement (développement -> qualification -> production). + +- Automatiser la mise à jour de ces différentes cibles lorsqu'une nouvelle version du logiciel est disponible. + +--- + +## Superviser ("Monitor") + +- Vérifier que toutes les phases précédentes se déroulent comme prévues. + +- Vérifier que les différentes cibles de déploiement sont opérationnelles avant et après mise à jour. + +- Générer des indicateurs concrets sur le comportement du logiciel afin d'améliorer ses fonctionnalités/performances dans la prochaine itération. diff --git a/cesi/metiers_devops/ressources/Fiche de préparation RIL B1 - Métier DEVOPS.doc b/cesi/metiers_devops/ressources/Fiche de préparation RIL B1 - Métier DEVOPS.doc new file mode 100644 index 0000000000000000000000000000000000000000..fe95ca89d551bc99953cff09123007388b3849d4 GIT binary patch literal 117248 zcmeF42_Tfs|G=NMSZ8up3R{ShlumM1&WccoA|d2HqhzJ~BGP@3=#~ygw@T%jIO$$|Q$+nCTTUQP@ni)11pVi-skHXaNM zU4vnRuw^Tjt+=OlPmSWr^drD2flc0uVW%yqX!BFOXEBBPY3b|~>awsi(*tBs4191E zXhVBfajLnuy%;qJdn&jm!roc}!$v?cru&n|V%TS}2Mob58_1U@ z!%-|f_ftnu-B(CqSR)v1q%mwU?9*XC0rscIU>MSvv#>{7fA(?^&UYM!U4#Q=RWNKh z*q_1iZYY9o8$BPY;e4z%bX{np@9E*_dlWC@Mvsrar>C192Bmj0=yrO(q5NUo=}s zPj}x*gnUN|*2mWUJajufpXqjXdwTSAIdfSb1$(J98wE5O+= z$k_{71qlRQqMvhscc7n_vmenR5G?*a-d_F=%RDHDdc-(5QjP;JACEwPVt|966LI1M z;tDv#pXd6>joQX_l5}XC61V<<5cy+>TBV$t&!Ypq% zz`@JGBP77hH<03PJZ5?E2&&UnCQMbCIGx}CW;L35cA#IaGtt?L znj(lnxr2|7vj;@vPxM~4!WpuDxj!{p#=JyF&+-N_ zdIhS?uJ!YVqI#uI2M@(*zHgp{Gc1l>T$dViv$w z3ep5N7ldW8fGV%q&YlilP>A8*&)LV%+r`hp$JNal1nun@h_c$BSkC0*NA!W51&sl* zLRo;{Kvb6Xkw}Q3q@b5>e#G*4qN10#=QyGV6!tNc(hkX4hO{TfIoR3L$Acn5ipK&s zq*dOK(%R*@>LW@E@r5L*FzH;O9((+9I3gmQo| zL`)Z(48JNA(r+#2zRt%7zdI5Cl2Qj#Qy(c9-3<;%O`chA1$T+6v|H2Ub;F4i6m02>7t zWWcat60Q}R>ev*XwX=*RFjHeZW(GKb8GLYohgkW@h`XAESYi^cZ!F|`^*8h1(yRX% zS$lKA zJi2rEPveN6Mya31$pzdPjt{SoIW)tMPk|U3F`{ntI4~?E02L}sh%sXzFQ^#-IppHh zmw$Tzq>Dh;X{68TKqkN>^GY~p*M^?%bZtyNU9JO$-<|`5K|SR-1ar7B9ETt(@pLJ3 zxHzFoOAy0)cv9ux+mV#=!HMLJ>TXnTqdL1BK%?bd+xRXM7!(;TOg?lEcwX3bfiNft z*WG1xkfU91Hd5YeER+{N83+1{qM~UVlO7Xdi!h#o#Tbk%>hi^ltr}6PfN|^c(Sy>j z0OPi2;Z{uO8P18nyBja49vV{S5Gg=URXU4`im1_2G?!wexzTC`s_)O*p}U=S0!r;6 z)(lk$W0e5Xp;ig>{qTYwP9u6cN%eGMt}>QS#`!Q_KfU&#JP)H?e@K7ik;lEklde%_N=sfm-~RsvCiKpb4CrtIFYE+ru(P)?^$Zy0&(2IK z7sDn0rgA}qa?$-th)^!NyZx{A`54Ou#);&e2GHw#rhC8DjCsZ6!|3rJG{aDlyVF#d zxbv&M07*3A5%mE|75<*~9!;ZwAp^>81a&7x-LdHNLmN!*Yf#&F%KaZsX#EIWSNF&c zEI-Ew@Ti?H1LA2k;NmIhrTX}r3jkh(dl|VJV35&A0ANd`nx?pfbei} zApz*27si3)E(^#3TPT-J`w3^X{QosW^Vd~lP}}|>RCWf*{Ce3j#dTHi;SBvldTqg5 z!0|6^|B>A3<2cb^#^C-42gm@U0YzXepahr#^8uzlLKI`!V6tpv^jZ4{EWV7#^wYw4 z2+iEfGqO}sXdgg%sn1a`9@O%~EPcSmi84^dxfY-nqpcJSCs(>cob8XS*7qy>jv*7nddh+4)7s>l~gM9V)ZB(YvjREM;pCeGYCeZw4C`W!DNjXxSGEVvP z2spm`7$!CRO6KqmN>TLq2Gir9yJ5qqXYK9|aZ}^^Mr3zxxc07CsA2uthV42pJ#F33 zOLvF!Vse!HhCKfQd<8lIdL4lDUjaaMz!(740q7ks9e`dJn1R_GumGHZ<-i&s3}~o) z{o?7v+^p-VxyKJ4kIvn+(%s2i2jXYgWW`;P5_ZkLppAkujq7%WF`0A%jlHr8BfvQO z0h6HH80K_9l$bQ#ooR#^gIOZ*?iTp>oU0-Ba|Q;A>*ov%TFi{IEV^c3u<(PK7tXTK zrch>?K+ePUqEHg9L6cl5q_5i<#Td$H`Tu9`t-PRW#vk?7{SKnn0wO@~0(vN7+(5St zx`3=73DP?(HKvvwAYp zCI5%NU;eCb0sc<;GmZb@yUYI^lz}I}Q{Wl!9;g9o0TIZoe4qgM0ki=ffCx-L5(6Xv zA}|UV4JZN{fEJ(w7z1;G`G7gF9QgjBqL}*s=vMlz^fQTj&TKfd+H>_{&kdfiV_VKf zQhIAXI!3>K{P!3XS=2dT)z`U)M}a+7YPjC(`?b_vShOjK$LscCIU^Flrm=D+iO92mnscZx@mStB)i~V0`VT>7>L9e?#)uHt3IE0|< z-!-g9y$^u7r>HXQtKUb}|GWPy^5;Wx4F*;LF~D&k6}Sc50rCKPoBs;T#lUNz6etHO zfqI}BAOrM%K{KPM*jwrtgE3i{jwxph#^l3fDPatTRwL@#9(I|)@Ov#xSHNV+VLWMn z%+Qn9UtXXIl?A2xp-%IL0hu1fnK}#dJWSLEU&@m&DcsKj4`S%171XldQ(G``)Q6LU zei-VnnEkRs_;*=;UJYcp(0aq461D@2i_>UHO;iJRRdiiaW^h4aC`Wt$ z3}?6An|3rd6!pPfffYai5CkCEhXOl+7$6on0>lHTJRAqE0@s0?z&+prfXc`-;4M%M z)BvA>uK+4DZNN|{50bzL0F|FnfEJ(w%mh$bG6bA}PvuX`v&*wnsk>v;T?}=%7Ww#~ zpP#wJ%0#_SFr3A7pTN|^r-ryUv#${InL{w$Yf$5OrOOltix5kD3DMP$|FwIPUhZ3K{;IIiD4$Vp)fGVc>ji8DwgZs>(&bp-Ja7?61(04}1qy&yKrw*yycGBhd8~)@PqWY6zWPLiBy#M~&m2USDT1WDdcql+9*}gGC6#UP7=cA-&z@(yqIgvX99l zxnYpsNJgUpB#*g(3E&3=0Q-Ogz)heMcniQAc^Drs9+&_u04#x3KqwFo+y!!gI-nk4 zs(Al-OEqJC@!zyCrU1qTShV|H^*_tj1CvC$W(**C&j*}<<$x>T1^57{3I)KW{E#Ng!3X}t=>{J6BP#!n|ZUB`d0YDKL3ycF$nNkHz zfTs6N?+co;(Jqy`J4W5bAg8tH#|Ql|=LXeA)q#CRed*oMK11v?>?;l;a|jmo|49R; zIG958w;r0%OB}yiLtu(1f9C_{0McJ;AOHvgf&rwL5A-|DarUFP7ivc?z z0yqtv1@eIcpaZ}}Kv#jWfH|-L2nFJS1Rw{v2h;|S*I0PIAP6DVroCEFvcYz$> z8IT8{GV%(j2R;Ffzz?7eK;?!5kN}1Pl7JjA8bD=f9H0Zt1ZD#!z@%J|L)0u_9|x-%qPO~O=!2#d@ z?>WG@W~-oJk7Zm5JzQ7>`khXH{|O0Wi2)%#XjN4oSQHqRm-P>H3!p63>fsy!Yo?B) z`M?UTuuyAV064&^w;s-ce&dK61kpw$5~&OJ5(pL!9v;rrm3z%={b5z%u0?Y_9Rh0o z+?+iKgn4umI>^7fwPywp=Q+4|)dqO`J9@)qDiIf0!h)_;xh&ALUO>c&{fR zYo)Fz>xTKl(P$-DXUY*CaI6c2a-{y8_aQ*2{IK3821T3=j_-1rh+% z4@?3s0jWS5kO5oA*ok3nrdi}4>G;qrATlJOEw;Z-54%5#Vru0cAi3&;@1!vw+!v31A9X1B-w!7{m5^ zEuR=-1}$RPm@HKc9vFK|A!D$Ij28AjjG_J(vjF9#BY?6{BE|_iy?lio^upOZ8Nh^*t|8e!1d4!SpaekWpcJSFJ_4TrR3@5$ zP5>$v3ms zzc9xW&1f_=?s{{BGB0vOuf9X*G0?_-Pz>m>u34E3?phKxX&7(&k!}e)OWqz53r~|h9jBS0Dgc9WA;O#>i@>7d?9f?LzC&Y zFQv>;_=VNB2(c~nmHxc=jtO_jpy~8pT`T|moKrWYYvrGxZnlHyX8InE?RsaM?#2u2 zZK78};7_DL5mJiYqopRe7t`-}NpCPZ86&@Q)xUnHgg*bDE`MKI8SsbwY9IpG3Pb}j zz%Jk@kN_M5GJwm#6(9?^3t-FOz8??(K35byzMXb9EirnXXY@KJD<=c1X;zpteO@%W z3#Ywz$2h~9`o7X^Cng<11&J26>rE%>oNfjmcteWW4I4|Dt$o*#DK0kW9p3$DhKrJ8 z9${lRCqtm0wF9j-5N4{2P(9OC|1i`kOztRVTFutO9i^W(fg9=_6tXLRVmCYO?Kl(# zZ4EV;4bF4~LuBGe?~%+y0VMNn0FwC@sxDA}gZ_Yp@sNLsS(MTW3avNBM4Vi43=`(; zz^SW^g~Yl$q2dkA?=RO`lm$MhFaOYM8v6cU`TjQ-UB8ho4+6ct2owYMj50H4w9I6* zF!@Yn^kHFU*GfQ*2=f(tOmORxh#!@?p}HE$eK0T%7!OPU&I70{ zqyqPV2f!ns0C)wUGV&TI1%3c+KnEZK^{p772#f{B0WEbE&+954WIni%c`S2(beNA# zm``1WG1DVj#^OS41!7#7YHo&lms+zAX7>NVw#W)2D1B|{c?-1$IN;8t zQw%!6sDI4b#7cXq8dl)O6dTeLTCbCOHcMuIHfQ^dJxO#0P`Px|Z%~$QE)wwF3$}gK zK6>0EkiOGpj%18v$uxXp!6*-XMoVAKJ!4pk`OoUPr0cKi`J(Rae1G*kzS~QDNYCRz z&rwPk_5VMi=j?i37-x6gMY`I+D7h*|%PdCAFU!BLew^Kk0r^4(cMT5oXVG_RKaQPz z=^Dqb_~IEsE5&F1h8JY9%=0yYVLsoz0FHdRPlJf;k8 z`fvq~m@AwaeYMaJMx)WU3(-@SfUav3B@*F?>DYM6k>jz6*fa=@jz%#NVZ;fY7ybP! zHfWDI08U^KFc=U4B!HoSBrp}24yXeQ0879c@Bq93A7B*_3WNdSz#*WaGOzOfovSDI zuRF0na9QBoWqHd2Pwekss;OtT0|(DWJ#T4rW{hE4+YZ1tW@J%GQh zg=g-e^laVxXv2GH{i!`0Ne`xUpe{h)9rU(^*i04-JKQ2iF6$4Gt%38KqK%O!6?v5MhlZq z9-|N28$yco8@+#B`ucxV`r!{p_Gu);9r=;JP6npbWqh!7GySPw2eFTUHasX5Y z9ss34IZz4I1D^nT+4u_PX5a_V24HKT4FR|T9zXyP0TcmCU@71O_yKi=_phD27IQM< ztquK7t23GFD^68x;!anbx(`}@Qs#Wbc;fjS-I3=l@S_0P zofdexo!K1n=i$3`=d(G6o;St`?7YkI-_Nyy6wq@3Cj#@iC#oy9GD1~Hv;xB zvj|fKvl#3lFeb|JGmP6NPD+8k(!MlYr)CVG~qUC+v*jpqMAAPR2OmsWCqQKRnHh&dx|o@bC%q^YQZXi3<%D5FREWDLGVP=+F@|ilatIjg}rdR8~cH^q8^A%F4q>PMkbZ zX|m!tWhERxKfjQmkhHL{w2qRTlFl!0op-Ur=<4w}cmUtEadG1b@B|fJ3diB`9C%JH zPCh}(_y`Ux7?&`&2tjnD*r+-JLyFgoC0lKXF(;C1J5N4PB>0HgFB8xSY)CZUUZ~xXE7!KJ{-b$ zVN4sVl{Am#WBj)|{JpX2ecbpNwkCsGu-rns(P^4%Ydy1+x{KNE56j=?w=Z_I&ABmve+*kscUynuZ%E{{<^C|H)c1NjBTxv>S_&7Q^%0D zs@ONTla#cvv-ve@jq&Ekl8ZM!^ou>2UUK8=;`I>;FGS{7-jY_psuNwsk`$@`BfmX< zpciMblNqL-f;=)DeU3p?4nf5SA{@R(jo}AK)Eh8Hu-yW!u9@BnKr4xH3 z)%IfXIy-4wXY%ukoJHS!cV{2=RT}X|=Z9~{mg6OD`CFUrRZhJ?@@hBoA8ulx{5dLR z=wr)McD59ywqhX|AR+~7(&95`Y4 z?pN!BUZxra%56x#qcJ~5$W%ZfFmR3Ev}4zdqHD*DDfCN9z4Aov$c?Hia_z=b($+e) zij;oSwR(`#?s#dW)b`IS*L?a|l=~v;_PhCQT!oVBHia6StbJ)RZlG=M`(@jcR~2)|*$xeP@}zjnI|By-S6=kTabMfU;)%fl z_I%UNI97U}T{BDKoy^PE=e#{VdEY!L+i}e@<+|DvjWY*CRoicAsXmOY7ah6#RKDDd z*ijzNCl$rcNNb9$a^YP1%tNhoi|^_|#1$FWtWCE)%T+cg7vHIM_396`nt6^1%9oC< zD9M;QzGLx>RU@j8#tVJiVpg{^G-hIhtd_6@$#~6h#iSuhfz=#OQ_tB*%_Q+yk}la= z8Lqe{eLjsp^5Er5>Qj9Zwr?P|#_o#P^>wh~WSL|BtCTft4+OkTp8YZFV&;uWRjM1) z8%*lOrXM?0C8d<46thNDt8|)BwK?g!USJwWY!dq4EqcaTbI_v<$8qV^Uw35P4Llta zs9dBa%1b_~@O8eOS2MZAees#leDU1ayaT?(^4OD0zkNPEYWlE*nDcYpPUAn#-MzGZ z;j-r~TlT66CD`P}ujiPsQ==}|yh=q$_0k5xBmAxlTmld0PHM?3t^KBGbsd8ec*_(_4t`^x08?c%CAZdN1C)x0e>-yNM+ z@@TrWLx#>Ro0;L{LfJ;%CeN=2q9v^bFV}B*-gs>LIPd8lPn6E2wqE}rcq1?VM$;+~Tr;%XN((mK!xzRX*ENx6aumqrT|rH`^P>w1$-& zzVh_Pz8_<=YQEh*Q~PpDLGkw!`$ICs+Jf`8s9bI8#MH|*^?Bv+g_^4zPnvzxyeVIp zcjMI%3E@%W4pw)k zXlq(}!Xe>`N^L=Fl1u5hjz;}XEbT_e*g-LQ2d0_SO27E*^+NJZar&1l#2u~v8QOxm zA5zv-KJ~njHBn_Mc~{l0nEd1BmHrKP)+Xb!OeXkFviRV>=0L6cHonOhE5(T=OK_JS zni;8CPP{zmNSL_I<;oZUASQEE6K<5HX-fDrjJo*+Ti|!f0~eX z(EX0NVK$dvPTF)@>%z`MUzMGr?u>n}lQc%>q-V(Rbk}XKL!GX8uaP~zs(yOM)%|Dv zistS+cRtfOUrc&`js6(J%CT0pcgJLi73YY>=t@^AeX+LJEm9Z1)x71x)txh~ydsar zC8g$zzpypk{_U&YI`K|yAy>Wg9ABm2^>UHTkJriT1m`~;)KU0jb;pq5t%>=Z`wuwy zr^0GzJoDsgZE&@aL9_~<7{+wp3e82uPwiio4e$oG5?o?Z#!dL$;YONc{Z9cX8veS>YSjd)zLI z8d2^dmOro7y5&^OY^4WYBKEesG|fg#teB+CUf=SZ_{W)~rZM-%8zQV&{Q=}ipiB!+pHr`x$=MtT{>jq6foYoRz z`g!Bq*ri;9FYPpWEkOSIb;jL*`vT`)N+py$-MG@Q+L;h*nRrUkI96;oM~ud1wUklM zkBN^ie|sjdFm=O?C+ojNw&gu|WqVLKbA@q!>(~dOD`gU`PWuHM8{MSknf~4*T70)% zwO?uACLSIOXUEtJ`AKO3gp@6H{<;zGvS-_lHqMxnQC<1+!MLe5vo^VZyq4h~AH7o~ zBz$}DdY9qZYaBO!*}Zg0*-Pd7oW9+&P&I5v!NMI?rpfnhmv83mHe-d z7TvQ&{=IaF;M`EfFN>Y;`eXjSR;hP*pG@=k^1;IL<4Bi`B;Kw0=Zi-SI(kAutIBo0 zWuy6qafvIheia-1EG_ZFwdad3WS?hR-5wWBtOU8~aN~$kN zJvy~UF>+6}ni}uSSPnbivBvq_zWK^aG`Lp@@$HE>kEQ)@ds!qIWchs8`VODu5L+1w z(oW}2Ou?oyB0H;6)0O!fvURgyF>Lo445*Njq|%PceV9XToyf#+e2+ z@vj1seY^{2PAswe@qvG@(Wlk^PI2FluUnp%=6Br4>_MVNn9`IjbIflfiAIGy=JfA~ z+Wzo{@t*c}!|h)l_zF%L>cu-&VffYyFUq#Yr8O$(XB9hTsE0^veCHx|5a%rpSeD`T zs_M0+cIpbd%ipSAWG=V*wvkhxICI$u{VcPp^gRbWg5}2y#n*`^Pg#;_Jmcgi{ifu} z?=CKynRQZknMUkxk5@8g_D|%e8yT7#?6oPLV!C$uHG}+>X(<^)ckQV>V5)iUiE6RV z4ByNkbAw3rLa)KqC5hEj56?R_W!}d3Ttz~g>@9YT8Xh^lM0vg3?wu3%5N0Nc7)L#~ z-#E_3xi(|^bMGH!o~4q0Ciw;)_v=3xY8K*e*x=Nfeb-v3xUJq*Y-?Cjvh!q&vWdZh zz55l%dW=#pv3zsi+%!ZdkdUNbCnyziaCC+E#(jaOChgK#EEO^`D}B_WSLPx!vW=RC zn!J<=Qk-BLP#SwVYiG`({Ge$^?}yDYd*vAW#UVHLVV&#xl+4H{mokpN@-5%`?Ma?+ zl3vg#l|8QW=0#o`mrl%@Gw*Ul(zx{EkWG%4ZLid=NeFto{Af~RUb}pa{Qb83!uDH6 z9$a_E&|<{q81oWm9$r3U86Tyrv2)go1Qq6z-A-N`E31D{Xo8I2+q+wM%pdKqdv|iW z&ita%S(`K~HW}s`^WK;;L_Z^W#+tom)^C^GNjh#jSL4B(Ko#xlTv+mLLo;LC7b%{` z?2FQg7fjl-SEU<%ZyH|hJd&iYJM!kH;#-e^AfA$n^bsIP9RV)Npg;e zd76I6iI@$i(j*GRL=q2;QIO^oj?g%xY&G5A?P^hK>xFOl?V6hRFWUPSa1X9-Sr8wu z^`7`%dQrA@O;;Cw;sb{(W(8UIUqi(^DRQ@D>AuwX_m{jnRP#ym=9ou}UKpb^_4~}S zVTvI+3&M5P)TE_W#GcX1R^aALxs?}Hlf2hhaH;1D-P@bwggfrrpT2p#M9qMAlU&@< zq_ERP`SAq_kNspdH=4FjTErDmW5TJhsx%1bVLJOC@T}=@3STC66o;)3mxzzoQBbVSuTJ+=ocuXqiNn*KImd=1 z+8*3BQhu9FQZnx%=W{c6rp8q8J>1k_eskYzoc0yV$0j$XoIE!vrp4Wh-)-i)l;+5l z4og**nFmE*Pr2n16#Bv2e4WL-=!f4zulZatQGCtG?YMaVoOAvnetRdqvBYH5VyiTD z-o&Nveq(c}%~0{`BYVxH@s)M*7mcsvUQRFl({wwXWJePis- z3mc!Vwc!?v&`dmmFCO|PKR*A-{hg1twP;$juCO)V$GdEi9bWlJ-KNLU9|Q1eKUUn` zVJo<*V*i+hFJ3n2ygfESZvB@l$FgUrj}XpZ+jQoJqT&c~-|V8T%TMbb+GG2EQ&G%@ z4J$8QzV^nfL!s_W`xw+F_wQe~v*iS8fl#9Qa~_Y!IH)iJzVd{A3&< zwg~&{zxzx{FEypQeAJZMqdf;6t_k*dPP`MpN&!E0J{ct|+2jM|JATqA@kK>NXxFv< zbfeA$68htr^8YhKa(gM?)KYR-ilJn%{X`37G}^ifJk|Qs&ZrQSPqeU*{$VL3Z4NZ@ z)Tgvz{FE+js${KLNtTVPSSNCA3g zPb*Z&M59-?KRRQAMTYQmQq>^~RS2LCH<6u_3x6G{2Mh`>q^JjXzcP#=C0*J5~oUP8fF< zuBY2g7U8aUz2Err*oFMvkL86A`}{K^9fE3fid-cNhQcM%%Ma6jID4-V?7gJedoi~W zl)CW`3x60Ztzv3Kwo@7rq)B+rZkohR&32IjhN_t%7rM0QPic%&0S5;je(-qE31~Fw zP04mzQ$o=d&>gC-P|8N1l?%i5veFf5h4bIY8XU?RT7RPVtm$99+pny-!m3fhQS0JT z1*Y1T%@@CD`uvBQlTroLj8GnI^eO2c&B(7@di?MCUOhv_|I3%o__eAd{mpgsvGqTt zb5u?1|HV=j<_)XsqjjY@WKf6nH4jtS;EezMpABcoYz`Sn2XwDr^Yp*lfgX7F_=Gt% zc@@8wJoGW`zvj!>?2?G%;G)-Nz4fEJ-BQ3IkY?)lu(Mbtk(FK(VohYs-HK{b*3jcU@5i=}>aI08~deN+#IKe!<|JHxSJFu4&e;p7if2Xw*Y zO`D$Y2h;ASu#Nlgx`N67_!Y2!N9XU#1NKsYx4C{}IbfUB*x!{>_IdqROtRrX6G)(S z|6P-8;2x`AlWb1OqMRO>WCNKnFv(_MlFh&*n}JC-1Cwk9CfN*3vKg3UGcd_!V3N(i zB%6UrHUpDv1}51IOtKl6WJ8;U^Pin$lPW5Oo$6&o+(VK6G=mT;fQG~2>t66Ey8B~K z+T-f3M_s+yyU(2PP-HWb@56W^>hpVMWwtBlXlrBd9U%k{mhv;cfik1&TPl~uD z8T0lJO}c^+y&ex1mJgyn65^I*ldsgQJj+VzfA95C9&w^E&fXq?{1>lQgVl@!Uh1=B zs_gG@pm{vzcr@bx-ok}>Ja@r`iyN7_30^R>hrp8!E{i%WiPtq|o z(*TElXmbw0#EGn2=!bxQc<_u*s^|sk4hIx0n4@5hW+}jI1Pio>nLKxqJIv&v*trRK zFEqo4z=O|5?mWEsh4}tH%cjcu2Ta!SQ)4$-2k9p(2(e|bp!fsywe;nK6oprbJsuJ* z`But&)DU?O#qKLQLYc#sa^K-Vd&X@kw>ivqVcwR4P?%lNu{~drW)%*WB}e6(X5O>n!_`VqBBTy zc=@_%&H>yX%~47f3u=L(i6}Vq!$F;r0wzvm;zB<>=!ci~bobYEh6g{5rYjVk;pGFJ zVN-d-R48gr5jotQ&T9O+mK=cfcFNIHB}Oe7PNeDyvD=D>sNfP==n0X9o)B5+36X`K zunLE9PwSx*tlWq!bce|O*XWKSD_vpbHk|r#0ajk!-A433s8s)hve6~O90k)G$*vV+% z`~&&_PnN&mSFfVJCUbob-EFqpz_ zk@d;Jb>RF1`Ty6KKlV%b4wS!v^7q%5Klb(C@9S5fHyRlGGiZf5_S?XD+2;*AA8LPQ zAfJ0HSK*L(f4x4jf8pToIX`=S9ytHsA^-pN{Ad5N$w2uVD1U!_{rgYrANyC32Fm|H z`Tzf4{-a~Jjt{HeJMFb@Y-75RJSB)Bg5^*IUq1$vp2fU%g9 zfU%g9fU%g9fU%g9fU%g9z&c$2<|JS&<|JSPa}o-;F&rOWA9HAipRQReV_4}3Z7m)z z%7SiFU=dcwl9D%AW{zegtKH0%{ScBNQx6G~GdduyxJw zq*{O4dz<;`MO)l$3R<-a=D^vaNtQ4N&Wp0{24_DOM)2wX^-?GJ++a09leSRB&uO`o zNr5P1I9N}2?ViZ)_TCchp-7py*RRA;<^(g&f1TTlq&HF|txAzJnh%NRG+~ysGJURA z_si{WXMOo-_97>mQ3bW$Mw;YQX_BMVf*?5)isXK-u){nVm1095x}cO6u;G3#Ekv=Q z=}JHSI2mlPR1uSn*^e6S%&Cm9VkN#ZG2bBptS$Jwd!3V|Ch@Uy)V(9GW4g~wq^fM>Y?6B z6s$t~?`qrF_mBR{dg)in)Zf+0v(Jfts;Bs;?!5H>oHqT#ZTVkt=QY;?-Elb4T3vLT z`*VBF>%qB}V>7Dnd)?626a63r{p*Q%r0WosKYTq=9gHL_9IJqDD58k8Ar0JECj1Vj zeM2!k3*9tjLjRTnGr~M!DMS~TD^H}ngCUEJY7#)c5Pm6k8ufvN7`~|(fxfA@(HuT6 z$knQzkYkWJ%Sm!VqN$Yg-0V(l8Mwn?ScEV9(3X3%0k<9@;hT!(*kEIQBYjxC5{JEp zKMX!KI183JhudNt2W`W1;nBv;$%*G8ppOp%JiPq8JUo0n1OlHRA0NK}Yy{pxLV^N= zkQqgS4o649zW@(`2Zi{xt&{Q{#AIAJ!*>wxVlt36F7#g+Z-wx~ zCkoRB!{x)52;pM6I6)q`HQ(+1BxM}m2tueb|ckkJ|Z~uXWV~I(}PnGPMb-KJ_)(W74l6eX_S=p zFJTdXC}mv<`n`K0<&uBcB z72__gP&heG$jwYWr*PGdJlmOPbNQ|vS{t*9?|p!G@tF$J=9eaMO)|IkUfYc6rWD`v zTO~mF@X`JOVN2Mk;B`4cdzydbTsvD=&>UAMd;P|qfK8e~o8(j~tiM$~+_X>_`K1lYi;IWx!RY{0Q%{RMz@UU0$c*S1zD<@`cY?V0}aGF%Q!?4}``zFoll~H#K{3|7+DkAKozDv&9=%y0s+5WKY zY3-h}4t`SW_}6>!mFY1D#WJ3{`(0@s7Paf+;+DwF@^YD?mABR1pUOlwOt}*AY0jES zhF1<4X|8ozKxnTPZ+p{;ja8aR@^mw)yiR-T5RXo*$X+m1XerMOz3lAA zPlP-wc1`*2rspuOOroQ#d`Csh(yC@{iLgj_?MDBWkGx^lHZ|J(_45x!TwVA&QuAV= zb-U7@mzm{nRf<=d$z`1lo_R~eg!pWfhf78Se?TYpt@@@w!ljT%`Sx_r5h*tgAJK(LYwV)3gYuqqehUgncPfY+Vq$^MO}5Lf6*1`+;xkWh;KVHqqM%rEW*-A zrof=yzRB`S)!zDTjSq9w*GDWdxLZ2(#kb)(Ig>Q@)Z~$>-ko`&bX&W8Pu%B7?Fjp3 z1-G&vBi&0sd^HyFI%HcP^~hJ)_-sr~S+%&-o7a{S7oTce$l_GAGm?r(P#iYSs2o#! zY-GPSvoYv>n}mgRW7xT}i!E6@ESF4wy(l?1O2xCxBW1*c844&)R3bd zb<0-9HCjfIXJllR;jSB<4i;_pdolUxaPlV8mFd@;EECWE&^)^?Liw1bpx=V`@8vCI zcT{FdXuGD6$F+RaYc*d{IK*xo`DIny*otk#HC5)X8J{vPmBr<{BZIeL31VH z@fy8Wg--1DU755K^-*VS9v%<1cp17R>DI$)H?46`QrvywKPM$>t$6Dj8*N*f=@e=J zr(YQMBqMCZ;97g(n<~~TN`|gEU0r>rnxpJa=uwYN_!lItgiJ;4@)VgyuT9yRWcede z3fmp7r;|4|raqAMTy45GA#Tn%9kZ3Vr+av(4?26#l=BpEu+ZzLWLbl@5h0C*9eis8 zJk~o>~Yw>FK!S))`v4HPouC=zJerLr^VYe{&2F} zkPLONfJr+FJ2t^P*oth=w+^sBEIq|Swp+|2KiX)xUx_l`%ThXO{Ni6i=q}y z%QDD}Df}3==u%Op+wk-T50~Rr_FLi_TfB?cb!;olmT8lD+KFXbeQ;@$fe$i|lqo9g zxbh+MNlqqLoAR-g&7r2pYa3)|XB3**?#0XFFE6etnT%`baXeh4P*D3x?V1~*V7%Sd ziM1^ZdrrD5bQ9N!CA3$9T|qgM{7t3_-w;l!$qdfy#CRWicWCO!Y|HF^F@HQV=}92$ zLmj0uQ0cjm$YTsPYiKv&D_8E&a7@rGxBYOhKG4(LcAtpzwTlaPDv3*CQRc3DZf5zXO!Amd$*tqV9$y`D+mx%$+^tlBd^+Y~@{*aY&S}qI zybX?x)IBmQHSUvaROLPFEvft*sd44hZHXYV|WyQn-6)L2a$Mo$f~;;jf1t<=c)xNecW#K zRjLyk>=|}n#_@Azn%0DdqKwC#*!qoyVZJSyRWH0&f6Yw`Eoxm%y1nbFPh`9n{-Tsty0Yb0*J9x^x z&lMRtH_b9!oqt%83*=GUR;`oenj7Y;BXcd*Ob-(S#M>^BZkq>uNdh^~zB%!ZwU&ly z(DxjzFJ2vK?Q;u1cfwK>T$|HvP03?2a~4?NT@l#4bmH1aW`_#b-c@Ru7)Cn!_0Z%_ zj5Oulk7LzW6%%e6w(8J(g5CG=&-F0U{J2I#&BY%`jdRP^iAqFY&m1(%dv6XY;IXt; zoPzYLltiVsQRI6hPbgl$>B@+jeLrtB91 zC(q3XzL56YTjf_i4>)+HsKiMkS|d+JZ=qb=J*&oRt=^&j`A~pL_$$4m($tD8zhobg zznQ;i%RRm?>Dkg-Po?S9i}7{5Cb_lSEFmn4r%-|^6Wq?BehiE!?t z?4?N(%hlvQ8+|*sZeRQIPHf#QZ3n^O%}MRozm;tclRLl7EKiHyx@1Mr&Id=2b>v@; zE_iuQbMCTXZ>6_yb^ozD<*p1_Rrb#O;;@G@!_(gJjh`YUUi3=slO?}qo!0)#-UXT7 zC$Y2Mo6Cd(?6=ur1=p1;HQ}?3&ouNLryf38w3rxtE`B$k;dY_<3!-f&&nGm2QgRu$ zZ&zp!*Y=LvLgLfeGfz9q=9Kz^r!g+)_e-o^u5jgZqE6}dp+PB^GRvQ97e_Xf+qa32 zm*F;=aXhNYUjK5Q!ut2_uWuc%e$&)mad9ExeDn?XAIaIAF4Fn9wsz9(Ceml&_QRwP zN3ONiyEjHvoM?+B33XzxjLSMP{p7GuEJA1tw`q4`4oakU$y8i><8wVR%nXq1Fd>zH z(jHM3e5QkcV&$5t)%xz<0%U)K7axacjMY4O#Y=O}YwcS5f+?hN_Km@tZf)ztHjx?^ zP7ifz%xt#5tIhxFb=JfuFQ%M6xJb0ox>6f%z8f3JQ!~o-x3ua)sdWq!t+i>tzA{Ks zBV*N%tWg_{6fUL51g|BW6d9HAQjg?NmP{H{);KSv#MZnMi&zy_T#6^B9WT-RL57Mg z@Y{j(f*Y5j=dKjS7af@9A)4cRM5%RT`xel+_%dGY^7u}SKRMK@F(dnjSElFWIr5LA z_Fbq`ca*;H+IH8?sf0-Vyj3D<@j|W%+n*o6*4L)z&L6V86dxq}d3Fh5pQu{NwR5k( zMD9OzG9g@>E3=%e{ar*0BNa9$L(BQ`L!(edOIy@cnfCR>PVD(M`^>n;P?@$ZGMM&< zR!eXR`bH)+wssi25$d=zm{gM;FVwJSt71F{B6D8@Sy}n(N~k?78nzvukoDkYf$R}A zYgz8h6OwJ9@DaBmdnSfW4!+jGCtB5s36tkkbYfdHEaHO`g45=>f7B{_vhDqrg*&64 z@7}$Z@Tx_;(k1o1`o#HGgst3W3k}!xp3-vc zow`!}$4MQ69qp&5%>76X@f;*Jts$*sXeTzv`NNW_yP<6_4SR85tyWNU1;2FMhi~Mk z_CKnJpZNaR=GHR1XC(hgdz?4ee{Nb+Lmt1iUHUl)sIU_&7HKfu(UZx0PYtIb1oe7rj*x_&t1%e`r2Zi=#Uprk>Y2(vP3ca_yIM<@)=9g)AhfcXf^4BIPro4Je zR%~e-EL+}Cf3$T_n@$rP{Y^!>EO=Me)aDk;V+-=*54;|8b%VS>bjeZet1D%X@JL;< zk90hd>|5CwIN`I|scZQSx2sN7E_*-6sUB*2zrzlCV)F@KJt3bz*R6wIScE-UPX}Lr zHS(wsL9G)rT;8VjZOsk)xVT17{gW!%+OkHw^A8^QEZ8>2M~}oG*q$Hu`bWUk%=(2* zL3x;@dmMLNQ@jFp;bQC{ce2%#SH3bY?AwM}d5^GfH1*z`H+Jmxn`&$73Ci1M_)H>O z)$a&{hUIo_ajX^iH*5*2v3-=*^pJ4x*7vi?_u7@3ZNm8!6DVlMrI58$I%aBLN@@2m zBpu!nMsO=$Uu<%e>*ck5pOh09Ir^wBjD0I}Yim2oN9eDYKAr-flkZ#I{4h6PE8NCVjO{ zi)$NFL~1(F&e@4=mYI_BL*<8khp0KJ>4$bD;jw$iwvN5f>gLC_g@tQtbz+rrnI)zj z+k!4Z*0-v3Oj;sz$CNz%Ve^BgA=%ynZY`OTXt^g3lV^!Vi)CSP70&uKJlfu7Ix@F2 za-qxmAt&x)VfGTM+cJYS)J~CYvn9tJS@LqnSN&=B1{TksZyH-?eEzNIV#v}q&*V_e zCQixpwP)&9NuOEaFIXKH&|D}ivoK)frgHbz&Fv|qrKao3GWM=}F`Im$T$w*d;`|uf zkaNo>zA1X2vRhqzk2aZ~uk9YW7E)#%%G0#x*p$NXo1;Q?8;u{#Q9k@?on^+h_TA$y z+!G_EK3Y?QZ<^&P)&e+F)9b@Ul%Fc$P?Z~pDDRHhIBhRQ#7DLmaI}`8Zm|RY1Ub{ zjH!eZE2Ew?cSw?>nqNaS0hudEuV&re+o8}jEu#LqQNqgYGfMVm~MkjWLYcGWz+0wp(+ zs$E!OkX5)>z-ILg*;RL+T@&3i!LTXZbcUSSlVa?PJy}brV|G-y%(wP4q?&81+VJEx zotW&WO(1z5?XSxU8{W6c5IV6@2DgNMbiB;`y5vR}t_=!jbjz$x?EHF}9}`{it?v?c zt$IIvV_52yr^c9K!d43Es5S2fuF}5I+?yv#s^b=EXh8B2$2Y;I^FQady5rU3ZpX^p z$=n?oqLtRZvTb=Ixyj{@khq)2+MJ}sB_*DkEq6Y^c-fHr`h)ZG&nX{luzm16?xY;a z_`BE0s7&6FN%hm0g}tq+&P=%#u~jkUkXAgpj`k0buXbr>t6K%g39rN+@7<hw)b9SYARbNudtD6hv@ZVp$-*^sw-<#EE z@DbYT9qnG8d7nxRljb))NRl$Vw^W~}?F@MXNa=Xk!L%Zx-YpnfcoG z;b8A4`B8T=1C+jtK`1xv^5f6~iSBJ~-w|pbJnsM4dlP6Xzqeud2$|xTXAU8iF+*fJ zp9FCBA7E0xW3?*bP(=kg(<`52&A;US9^hN57)l-wXbpCI*de>F&*8vGpDGtSlK7SQ>#=iX_@Q$FxF2! zwHUi`0fI-C<&4b$Usr8A%h9Z39O;rmM_&0Dh(;VgWOKYigIb33z#XP_A*+|;T4aKM zUyU&%Y(>k@{a zI%_xWTqyb6W?-p#&2i#o#bPySfm#|+F&zUGnXN7iC%t&#qL-D~mh2h+cX(;e6t{Vk zFCj8vPXPaahOJzh>%vXQ1$^MT1<3{>gs%#D7Z>P}d*;(MA>bcH-hw}~X6 zQIsf*D{61Kd>^JQOp$`z_hB-Kj(r%3yB-KrrKm3S=um(4&Abv5uRr#OdPg?)`dgje9M-&gsm~R6NKWYZwzlfW_xCJGrPg=>kqcrstb2@AzcHh9Fi97M0IO6XOrL2 zUeWk#nbFrCt}$<(7!%uA*YbKkp~2n5*xVo_lWxSCR`L()VDC%#Vg-#uftvUS{xyWg zTDdrQB>3VdG1c~|Kc`!yN8}eo9IMS<%}Ad|KH?8}a$HQntqcR5)?T=_+~Ex=z}t;# z)6b3=4Y*W|DyUC5;B^WW|Qf^jsVW>{d?o)T%j-e553OX;1hQz37klFa4_e#U!*m^!FHrr8kxBPAc&{sl=8?tFHsdWP zA>_3TyY~V?RvNds?c<{gB(!~Aaxf!bgfOB3b{KX(DB*FO?UoP4*1Z}lKRF_z=f+#2 zNpDX@jFGRnb<05{Z$hkINhIc}Ki=3hm60Am@}utkSxPu5qUSQOtTR z)zA7D5HJ`m2u}$p3UAP&ecI(*?}V+baJ_6Ek#G#+bW2dIBl*4Az&;H1@DD{5Ir~|6 zn1_$!wd7u&Z|eNKY7FdkDm34=k_p82!|h` z+V&ESyUB26c+J$x$a;^$QuErf-mL3SRJHof8SNHs1abhI>+11!l7f@w+m!^~1RXGm z@NM|?^88qFx6-3M-v+1{A0ivQ54#W>_PevekJ82&^ged;xK=~8lC(s{_@3N|P65O^ zrq)=-bLD+ib6xK6uVJI;;A3ag&#w7=`gEUxD*}F=oIzs&Y9$jlZ5T)}~61W}DWh%p^LU!QryIm$6V`Z%(&3u7=xxCVzbRPo*v-eDTKOM$VcV=k_q z)s)DeBpii9``q0a?9(9QOZQKDczTln|ZaiE!s1r#D3F?}jV}GJH7>R=4QNR2|z<*66h%>qeb^MOzpynJj@uQf+ z%S2->B-Ybd-51EAR~B#yPGbscJFX*tJdZyr$}UPj_2i|4hGWv^jgM>H%@r14UAbVq z%#F4sP?14t0-AG*6^_F2QXwC?HRPl=?MMf-NMy3EZGb*3Dlt)XhS=!Ui=JtF?Bxk9 z`Mi0jB*vUcdrY@$K~|>qJDjFg>S?SX;CcwRARD00QO^0*kqBpt@93vB+z@%?E3x}@ zI-C*XG)FMSLb7nM^W(EomDw?2LaR#bw0GfiP{K8RgRuZ1n94^LI<5-lNYSH;_oadU z72ypg_!#X7xGU<3_ZCo83A^?-G#PX2POV6`Bm!t7Pr6+pEjgDLIPcO{+cIEjcyjx>58k3p|bA7 zfCNl1D8c*+MG%FyHg4_1&f;2uq|51npkVC~l(Pn8H_Vq}JdSd*4AY$gMMaXn?8EXb z+Az>HfVCu85cWU6XG}2)Az#OQsUQGL27@p_o$LeKnlDTOmTcm@uyG}zD7bg!M* zC`i;c^*{cLsOrQxNY6AuB-7Y>3u(igVRJ3gjnr2gKT7M2a7g z2tZ(bwYwKQwB&xew#nR9iMfJftz!G)OIF*}JScAqbqMxtOU6;IVv(AoxsdoB~{wo6t2E z-E?W;8G;Q`*;&Hs6S`i%t81|1s&i-48Gb!@a+nu6!~m*)jd7g*leFo|D3d93kjA|G1E!(DS7iU>$VAuF5MhsHAlFEqi~H_f{FAB8>pwL z6Svc+(AH44sGq}>xUJ#4D-9w>`>>){FMc`ZO*L)w{=q^ra}<#_0)obpRALKdU#w~* z&ULztAPDK6Z<5EIw#o9aJCW3_r@$D}!?#mx@$x0S&HKO81GW#Q52(OxvNRRoh0-}i z$eEZI&n)op4>tN~nSDuM@0Hb2^{0|7^_baSqt#)YtPao~4?hi?e1MGq)A)fRhaZa` z-#qb3s*C^CBWngC)<7RoneEFK((A~OCXy-iv#sdb9Cy0{#k9nTx2W%_wRe$d;`o;}0n@Xg zP0At$l*bjU=JFAma)rT$+ExERUhhuY4E0sFWRCJO8;AdM-=7YZ3)pu@uii9qmIyer zdT~%_1C@oSvu^W#h&YVF18!9l6NhtY_A0-J;ac@E@Go7RJ>E2yF&MEXLno8te&kNR z%g3{-?_D+dRxpI~6;l)4O!%HeATTEeb)ymyEEKhRE1QD!f^Oj>^cSWT2ZD8=0m@-C?NfThrOfa@XDT{Hl;VYxuoNzD(n)a*qCmnQY=nap(R`-3 z%ijBZ!w0ihBP}BsQt+nYQR<(-s*6&lVkVM4Dsr3NkZjQUAo;i(iqEXn|znR1GTm-hf8;I95o<*xlW`1X|mNollqJ`#}A2{r3BF%q%|4s3nJ0 zvNuFOztyTV8ACFyf@Dg*DTN2jO~Kphvw}`f&3w)i&tvb-Z~T~hLu^)~XGY#ytc3p0 z*!SzB)ykII84u6@t*3`1XYN)KMdtZa0GBxl*76&)Kf$|O!P7b$zYkj{zFcwX>9Ab; zwVLC+G@Ius^KECRj3+PEDE3X>v-+vX)j@+Mk$ZNbs1P~ZHVC`F*G!qr@{`!*Q7U_h_qiatd-+I{g68=6j5@x`FIB)(l!cV#R{wgXNLGa4n z2w6l$AXsUFXbGsf^xN74rfvleZ(fSx#O8NbRg(;@xs_ig-!s(i9vMn}UXa#vs1d;h zm0m$X$8Z$h^RK)c-)6Mr?u(0ybeB|y5_DS(wp>Cs4 zxnHg%H|kR)9yp|U?kUl^e}U!<$8@~QZNB~`pATifQ6Ctfq!l@GCE!||rM>7Y_y%cH zsM?r#%xxT`i8CTP1!c#~>te%okYK|QwpH(_5e_XXD4CgVLtDOhdCo73jNM{%90j(k zTTderD`6pDe!X=%?0h-&q8xFH#^FnSi@s5c3f2Hv?)XW5Cg;uOuo|XGT-tuS!Dirk zERQeqQPK96+HlP?%}=dxeFH!O_}9WgZ7BkP)w#8ZuV8E7aksyOi6Wx*9(_Bz)fuFv zP`W1fy0ub_&?ls{RP&YLmue3$-QK%usb!90QG$Eh0m6kT+YpMtM6x9?tz(Jg?tNIb z%LlJAR2yEw@%*TF%|1+E&hvza@MqIZ=A8Td8Z*N0ZqnZjXj5Op5WL|V-ixS54u=Sc zbt*CA>a)uqh~7~ziS-=_&Toy%<9{ZvIV_vI3oey=IR&<-o2I0-14D5zrFyL^8X(9J-m+D=Dqq;Th5S{A%@ zW~<)ccXwh`o%>tOAHZ%?+yCj<__q=^v5-O$bDu|6Q5+y-1%njX(0Ejy4Ku-#?}Pkx zb7CVP%o5W!Hp``fVF=^>`Ox6B@XSn_?x@)z+|rYC_n&s2d6&K$=C)mB`fE{g8Pki6 zyL#yy`qUox-@M%zhyR*T7(*hBFS@dh1lufoEN|VuZXQOq{{8zv9zZ}}lRk$)4nWs4 zjK{t7AnPPhCw>e@F7VODshrkJ-XM@Dc9xTxgTYs05EL`w75s81Tom%|%H=0?)jh-% zQZ$-~x)m?(W@Fs01EJ6@1MaY%AuXAky%Mt9MU3Y@sqv7%C zv$wS#si*aY(eC3 z?WNFyiv`&?QkBnX%1H>Gyq-hO`q`bMn;moII@W4La#;H6z2=Ztwl3BZC%AcPqNQ&x zKaa0|~F9Ujo^jZu)R9BuSU_?R*N3;V3sRx520AW%TJ>4r&bs zUxcD-@*-=a#faA7cUr{eJOpO7iJ3bQ#e~e+5Wgj4h*fQk}i zJiZXVk-4tq_~Cl*dY2%c>PG*ol;jIh2|XkmXp(HQisWxOguX~rtSv*|BJx)jdsyL^ zD{6m+G_sU4r4zrEHOfg&b$S8ZG(U*h7+MtZp4uT{sM+ecXcU|hROF_G*r1yiavt8& zkqmlew`!Hu5b@MC#5l=D#OVrFxkO*ZKYmYy)Jv@h*kba`Jxu6nFLRwAZ5VG}kgg^2 zmzA&i=*B#%`Pkz5+9}R8+4%h}^7{fN#$JW+qUO(wivm$^b(B2I?1D=>eBE}^1#jX) z&-2#i8a#hvV(Y0q_3e#xjLxgvNS{Sh2vA5+)vu>&7r5-BREyq>;52 zu`fjvz<614N8wdX);MXH(H$L^=VKUk>v?3G<|nYZJ)jMKfwo8;&V0AoBINpw}QeQ$W@5C6u8*{-fS< zxG*}8z0asP?`EP2!sbgt=hU5v`tjb9>&>6D_$rR_ybjUt`*0!hjJ|bRqmbwqrXSdK zAl5J}k0L$1A&qG~HoUgf-nJFR+ay$&T_{H%#T7l1IOtE(n}FwWdtssm1oEchuIUiy^XAV3`j@Ak+MiP3rHrrb8r$%V>v_QKnko`BLrv~!9TmjMKZ39 z*2taMoVC}mXsWHRdc3xQT7;yU3m ztAt|9p~M`GhviL|*qbRikGYNBrky)laNqZ%pO3!Y_MUa2$9Ti$3-+a?f##*cPciYq z(%i-;a}(dHFz@i)4%ZVI!gy>&&(&0{4-z}tFsw8liZQ{VKqGAPWbg4@4qZ{c0M>?4uL|&v-4sK>RG-L<<5!l44UFhSWp3&8-(xVz)(P zaMkHwXKi}v77Zd+s8%v7lL2aD9P%apC37 z!zbAg{WCV0l7B9AAOEMdg!S@`oP$vRhU_GGyA=#`{L6f z{k3lORJxhia=Uw?gx~S&pZi<#qmMnu-ou=_XYG&2O{OducX|$azYJ#Te$Zc7m*!ev zcY$~L!_`)b=PEoBOE6HH@?7M41dKXNG410SH>m|ETynpJ?kD!)FcWjMn2!1lpi_Jg zi@PFVl(X|ayC0g0r@BC{V5(k24TN*DiGbOMSjdVyY3X6rXLWt0TTrxzCW!x?#d94lV6@^BoOyTlfJ1_(@ff*>zN|u%`D^THz4^-hL}+ z%h1i?lPc;erVWKz;=t4}Q8RP_i!yO&xk12CxaSsJdw|fVL3&*`iq8^W2&Rm<)bu&uYsYMrl8OgblvLG_~udrD}m0lTHXLYVxHl>MW z5hJ!5*-kr7)QG(+pV6Kp^Y-PrfBkOcEM zJ=OY00`mkyN-VMl9^2`9afX^vup2@d%+@9*?sRzut9Vb64@@hK6ow3vR!YZ@J+-lv zE+I6JkUi%L*0Jk-^KqRFrK!66*LQK_u8`*}h-}>Y8giK^uu)3pwl$cSTs$zCvZ`UZ zS97Q{V{e1_18@DIYKd4qmHybDM8ARmRn#&@@a~wQpC5ld9wz?fPw3&HX@A4w8$F&P zh|49g0a%yh^~Q&C|O#$2W7F0eU4^+k#tE+D(~S| zf_;a>*6Ahly5%@hE`4bVEw&HNzCv(G(S7tHCRzi#Aw4R3w9_$N z;u>Gu?eAVa>VN9n7c4fW!4}7{Go%A7swMN~6{K80NbTd>sn6IdNGwu?bv9ot@R-Cc@N>iaLOsie1~sezq*@y z>AX8zG9VN(cKcPb#&ICg)05f>u3d0AZ4AkX^q4z@R+(tJc~6PWA=tAkjDg3%dqKoZ zZag_4ozeA|Q?8J;XU~tD#K_TbHU#04_pX`Jx&rXwA4GAlHVn6@L0-gSk`m-f4yJvz z!qotwR+`Ay)7k4ZViBw67@{$$*UPCbYBX&f7X0x?OD*AW0@0AhDhDQm8?q&Ob|P7u zt`Pj^QLP)utJx-zUEQ-{m`<(SJYLKCJvHu6@7jcopVvfXBywDwO(DrrQv%GkVo`O; zNkrLp>r=tn3tK6QPSs{z;#Rdq1Ghw#j^12$*NzUBNa+qgqXbFh#(27V6Q{32p|3o1 znAU%mL0yV1f?qw9&F@A`ulJIA%Wh{co83^Xui~I%lHlOc*j)ZXsrUmtfq9 zV5A*$x2Z`(OO3k>HOVe`rk26u{v0)%GNE(Bf`x)u z3x@5ca}#J&I>R4oT$*=$!~0L|O^gQo+M@6bYvSsf&O>@W5u9fh@BX0GZiFdQ3(z8X z`^&as#h3nGD}j-bmOBc%9JBGio>fen%~Pw=8wyAJ4+r+RO3F^BGTw3k zrhfRNPaVa<(LV6mUq>xLs2sA8|Cax^m5M{pXsm4Wg;IS(>OD;5TPH9i$7`Dye4foo z_%|rzYFg#ck0hqm9QpQ@J^uLJ91L{a{kO;`!bj$?&7V!!Ax~gH2NhIYxNhraV<%O& z3xcxSldS}d$9b)LDrvJVs@K1&7e(|NGp+wR5*ilfscKEFLx;ZBRG$5M9p;}9q9(Bq zn+qvfy8T0MY=Dojj;mAZG_`y^kxIYnd>6iwd48ExOr#F=1*dQL`Tsg9`^yHM*B?5U zwtFduLLLR2uFvY`T^+O17G^1dBQH7qv~IsPC89ci*}vUb5OexeEZG8t$3D%1$7fQ8 zgyo(?25&7E;E(h~nj6x7d}tU^_?}~Q#$B|#@d-I21DY_tZ28Y<6YD5SARv$DXc+Yg z?WkR_@d8s<3KL|}S@*6-ry+nkm#yRbQ6_bqq6Ps!%`}jDpA7wB|cxx$E!4t|A^hLUvW+8ubybHV50Diy0sURB#p|DU310 zV8mPUT|tzu8S~d2HUi*t>7S?EV zy~=eLJZe;cxc?-asW}i;%@mJjBwJD>^(05a1Uz!NM#_~O1coWs=GBIkY)qmV%I@MR z@BR2vP|x^&gUkf&dDmz~y<=fxmrdsf7{8CuPX9dNF;LuTGkNXiNzRR3eVy=A@i4ON zB2zb#Eo^Wf#$JmO3?8u?p=iv9a;RtR!!9>x^wrl|1tghi+_WDJHL0K<0b)Qcsw%k@ z!&p||gNYfjv-?PR7`iTnD}4GgBM+{*>{DH-GS&o zklt2I+L9pX1TmpgoRx6*1;Kcs=xM3PyEae$yi$r}%e#@h)W0}(6<>uL3!`zNv7#w9 zusvf^0`)x&PWw1=-H@odfQ)M5^L-sLp6c-+;+)Q!R#nf7E`!CuQ@PtiAmXb=>0xb3 zgf)`;PScH-bI{=tbFB3{=P8y{H#+J|*o z~|!E;t7f0bW66dhWcZbF~yIi=%8oNk+A2W~K3dI#dMj6zR6t@r68 z9i(iYs0`~YHEu0K>JMgv)^*Qc93Y>F3nYaA_vHl)Jw><)Vk5$VEs2v7ijPGr%=fVk z#;CXxJoiekGZ@w5-kU5++QsRte0z84gP-qn9CUJdy_jfw0RsL{hCfh{^V=GvunwDh zXn<#6)l>A0quH=m`DNYZE$^&v#u;h9{nPXjwGJx82BWv9)kfvjMOAK@$7ZYfdAs>$j}A2fb`A#En-78u@2@|Czxc!$`|Re&)8PJm%TCYI_ zHU$f(7mwUn#!>>C5(skOr?JL)P#@BFNb2stAD~+O)xD7sXFj|gGz$UOJ(!HD4eCM&t!T-{qwQZ)u8--Q zte<-E#=g(1=xfKFRGV&TroLD?>KGpHS_lh$joe_uyXmo+6Gek744$a&Yb_T(~9G6LU;oyGb(3e+KETu?UlI|KQNu-qNP|{iZ0GQR!4=vuAG7 zDY_GVY&{ef^ZTd6YV%cZozpa0r(^z((09K)dqePKm((fE*30IwP&gP1=~N0gl%n`o z_msS%R{8J2Wrt9*{a>jR%*0vFww%*P z()Q)y`$Sivaskqt_X0=+`Y!_}r%%sAjt<+VZ9gJ{zc@ZJ#M)1Bp&JfI&luBqtXdGSFN-p zm9lD2HB|U_KPoDBRs#wmn}iJ@2v;$Qb9^nLz%|`+0eu4 z?teAun4u}gG_#dMWvO_AJjfgsXdRsNUJNWIY;`@Di^a_=3~jt@YOWg5Q7`epxW)%4 z@Tl5$u4yo8_O83pH&WADl+d@J3eR#}S4AWV$5L1sZ1f}*Dw?pTjT}MrOSdv*zKbHy zg84=`T7{R(P@^Jm>^__n9-Zte~;`X!{AA6KP-acIW|O@>?p39b~bzBW{Kb}X<%D2YJKYXTtda5`^|-^wQ7TWnnp*N1rPtl81$_k9QN zEg1LGONJ?uG(fx+bh+N%hYa)7kkXfn+f0$**YAO4uTnluipGu1DuN^6`d z&|>e9G3W*^hh+<3t}#i#P5vZ3g=B~^c&Ax)A|hS~v2gDlQN2E{$ur<}XhBDiZ zxKvAj2(`J`9K6$xg%s-7$B5Yr7n9~gMHaXVm*egxWhLCl6wZ8IZ5W-8*tMGQH+t8< z6bqB%Hih}?^Ux+SRXd3-r^4otRk##2F}>NJ9VoV1IHz53^!#Q)+{We2Ps}e*CK{T4 z7<$OeaVo>X{1uvyT7bd7z}3Wb4Oq;}cBHVQJs@XdWG8oUod}DL8GlS^u;;ZLHM2*l zpTPorns(#-3%rl95b_4JNa}0%f+N3nn{WvUj&X ztJ;LgQVW~J@LN-C?I826mfajrtVpaOH(xQW{3U(M-`lhPb12@+zA=U&!oLd^45Cl0 zNw%L%7j6wc{p9|+Q%dv~*Fw~3lA|X#UZ(BXHeE;HnlT#j}^p&0qixH<#SFJzl z0SPnW2kkRRY;Tbc&S($H*-22`#md?TLKaKx7>)2fVxWiXm^ibe?DIYxPSh)5lxh~`# zZ|JyE2mGrZ;)q6PsO^=J@5IF4)9##K-8F0;PxzgU{{_ohSwCG$pN`D*M^uBvP7Hnv zWEIy)>Xd!)er-?t=6Hm*Dn3l?Xet8u;;lE;kwg6(_q&@E}E@u26%~g zSiXhTfU9^@s*^sdWw!xB1o|Y^`Uh-DW1zrK<8FRy2EPf0ZlQ zKo{@D-T$NQZAAsyA;oHYGuL>=x_xi~xzd3RiVQhA1{pqHW|q+^fuc zXR_NKzvoR8Bo_cwg5kkET5uqQlRLybi9u^hHd^7GRcd2ET1rq%c}$!S$g-VjDkk~<_HGE9G< z94SBdfZa9NtbII;g)o+taWgq9kSjL-$n+DswUC^l*LPk4Ta@IZgVcjC8{9^mz8WeZ&6a z-lKu0i$4Xg-4ecgyUTPn(fX7uh0mgsA49mP1bj7z6_GAV@t4--1kkdsK$qOhju*L5 zMHsIP@h@gBaKUb=i> zU@0Qo`R)ymN3NqF|M_I>LK4sAhyHq*uif_^*xO!wo^04nCnRKbD{VYnr=tT?MICIz zPG{3t774E1)rJdK2*vZCn}e3?oNBVK)zntTx#}-w@N;w{Ric?99r^&uWC&f!X`nnw zjYVH`7q!Zjz;@eweyHAmQ-0#K%1ZqeHI9y~MAIX8=sq%F9l|iwmwG3l(#1IncPZ&U z^@G}m&0Ggc0AT8Y{k^}&ab6?aU++3z_kO#4_T#4v>Wk}IFNV^6b882|C`FMT75tzK z23z<5+hR&*)^L+X5t>eezC({^sO(AW)T8fu7wSj8HD>!AWwcVxvzGq;{X2afa4UH! z@rDiH>M$FjuU0THy;JDxb=l{Bqna6GVj*mKTr}aJAcNK*D zZS9^JoCdi(i&adyXU*Y7I!ndjLIFgY$%aM)2zKucq7dotjYZ8_=`88bHsr!17|}bnvck zkNU5{^$(>KAHZM@gXMso175o|Injv`pnzNpmeXYmY!-sSJeJiBEu&=>cbz^s1~~c< zOueVTVT!;d8L{K}^A#Lzf8q1R+Dkekom!t1dQJ3?X4cW*f}7X3_jyKtay(4$Dh zYwc}dI%_h!)j>uTegQWnMWUycf`ma1DoA}mT-JJ8GophEDQJ1&>yphKwlz>2jXLSb z=~Hl6x9#wK=~Q?v(k(>6kOXp(K|1Czu39NZ4JGO}$GrXGEL8{oTFWinzC#}4m@9px zNIPWuhUCpRkfj+uSL4CNI$#ovDnqp6VIzA29k@8`VVw|y#X?qnvAsqNwsSlyW6IOA zr*iXVH7>&VTVGUQQiKzurZnrWBPo0|Od6024-)?vWIj{e2_roZ!s_R*D zA&eutt+k$~1WA5NFP)5?HDZ>MKb6#03QTkndSR0e%Ah2LO@xU-&BQ~xBJEnn>yYA) zFKE>QTb+b}(EHr&JE}7#?R&avvd0ga3HmReMEG_uI-k67bX_ zW!6Pl+H4aWNs^jz4>KJ^V;LY{r)Z6PZ>hxwV3Hh;=T2OzwfyZqVQJ>6#`EU+;S)zs zOqqNHXN?$t!Z3qrD%^(&f+Mu{VWL=)0+ChC}`^eA4F@mou$m$LXhW_`H2sRX2E@kq%(s5$&_hwW8*L`7OjW1#Eh#=zxz-PF~t} z^&hHpW?gz@jzpDmgjwHZ_n=r(-!Fl4r7*Wwn@o#SI4D;L8a;g&j^M41%|pF~9`D?9 zB0jL~!*rZsrXn1yEn1N%LyGyZ*B>~fDT2TD==oU@Go?u3?WR)^CQ1BzW7qEgfw2-T zAUW@K|M@u>m`WfWJ0X*V<#)6KD;Ke`{0*|P@<#=0$E543UzAmd(x+%?_NTcrWZwEX z9YME@s%2X5T13TS2sf0bA{VyWPrQm*lx=N9Fndn1my`poI2OAzo)zA%=!LC09*q(HxafB0&70+uYlQ4=&H&EDS zyPTW!Dcjc%A9a45Znd1G7rZrSvpomN%_Y?;#UZLw*7GVnXu@MUVz1Y5VrWTU|9lS% zk(t%xu!$#5r>Z4y&AA`N$x}e49up@pw9;5q$sS-a!qIYgBx`VPhZU6f=BIbS>u(mK zucdZ>ZaD;6IDRfc)>#7Fo=sGZ9OBAzd+80m*Jr#Hxwbq*iLJo-jpu ztVIA4I6s2+E;lUvWFQvrJ5zGd~(RR?4d2CDzoOmqT zov7N`kUs07p~3ZeP_Ix`B{fD+a3LJ&fW*JU@N8ovG4;rG&jlqoB>JpmVe^)|Kzy--`>b-+{kAtIgzk#;tsn9YB@OVSOwH@5~x-3$lpe`-Yk7(Ft5sFnd#%ka-?52^;27R*56*M1%-j{q$G zPC`$>uafL95amK7UJfCQG&KR!0_&mXMxcMd+ib%1#`P?HMGQ{vBl+W{8;z3wA0 z1JJf3fV+S9>!64JpfAqg`9rXSQ>9_B(=Y_U)-O>09G#KBqCFc>?)>c7^&3~N@Cm@W1s(6vlNxC;t_Z{7o5pC+Ysv z6q>+}{!JI4$Nx^nOt1@Jjt+Ww_wQB?_&PVJneLV}oxnfnOXA<@%i*6iW&)#G(7{yx zr?Inu{@#XpfSMdZAKk&c`-71P!g&7CPw=5Cf;bEw)k*IF0Q8aJ@9|%RRf9gArMvid zpHd$%!z2#z04yHR&jIER?mjTLzsLU%Ed1*nvV&C%kNR@R0f3h@9ca(ejGloPtj&Yn zNfNd?3&-t)U!q{bctB}u=zaH|^WA%>tM`4J{p}Tlz3#kC>$}*Y%z19dgc7-=aQ=Cf zKC{efL{D;0KDzbeQ)&L*uT{m@$U7H?ubwTD;J+h3sk)P^z3A7BV5;qS^1S$b#jmq+ z(mzFv?F;8LEGEmW;vNbM>f9=XKl#(p(sW!SCfqbG=W=1l4h1_Ca96Z{#Mrn%T_II%=u_fG7(?&i|&6X}K2ng->Bm*pH=+yL3Ug5m0Vojz>W5+yF%|)9GumM)JtY1ez7HTcf30ihZ=O15K{Po)6R`s zpB}$)r)eg+Dj9v+q5oprKJU$Kf%q5Pch z_$w(M+@n$kJvx++#B4okjvNZTG~6L56R1>}YN%8Y3Y$NUaXTt9E%I~PqUSJcBXiWN zt)17pwDN@A`Nzu={5fw9cPtnp``qROb#a)8-bb&BWteS)eWD9OrfX46mO}+P1E)j^ zP3n|0x#6*s7EPDS&pHkDat@zAH?4MC8dIF+i<&?@$rZw%zA&=Qe|bXVW_e0U?|yZM za(^z!QLm6+I>&HV{oP1*zNpFLcj zk7|sHr=@Z-`o84WNaeJAo%#MT4?@P0;oO=vexQHzfviKutE86^KfX*=XzdC$I8 zLVXZWy{8}bO2<89J3$?u*11e)-d-2v`4#u>hvaJ??wj2_!=$3W9$25A4P91ou;z+m ziJ->W^>`^=K537#N!OEiyq{Jq{m|7>@%CGMDRcIrhj4?t{aIO_wPS^XBb|mU$p-7n zd%Gf>f&My0dc@OytGb6za?5N-40h`G9h=PJKK-@AGwS&#MV=K{bsbaup)gJ9oyReP zS*+qU%{jZjvra22&2Qh~xxz-uB5e<#>XfEA*Of$G92Mm||C4I;bJ$994)!FcXZu0( z-3o_~s<3r3{&j7keDx5jG|2C%Oe$4VsnOPRTv)M18sq%=hgI>2d!35yTTA*Xgor;> zJLTc%KiMXd+NH5fNc!wj-?)Zn|F~eiOrV;TjYTJDyo?=k!f=%FOl`RivweJ0y>T8A zZk_NDLPtk<9Die0D){>^g*UZ=b4&SPTXDKR#PHhveD~KFmCc1<>Eq+91g*A0*}&dx ze={3_^p=;eJwmpM1#NC0+ghsLa?lHjNZv&1Hta7BMKT%hVBSSMx1ZKz>1%XAQ+u%~ zdVgVbcGtQ(2Hy~?68E>sDPg;-BOVepgZf$mAO(ECAe7>BDbCvYp=AQ?=FG*}yFDvE!F)z(hnwelKR3Ae$$lO%C_?$vIc7ovI zkd?eR6RYX6sq*}|XnNG~S6E``*^^C;hOc=h#MampcdzGZ^9CrF9qCO?e(sUuHC1%# zyR*%b>i6lmfzMu}^KU=>RPe(e&686uRSq+G!qZ(EobO{N;}`2_#Q_Dp%|9u{bY(u< zSNFBVh~zEN?L$YM$8w(?qA18vg%5YXxj^Q4)~$H?cmqo2x7LrQ#BU4a8Ri~$zCitq zlEhGpO~bg`HGS9k&@qi-`8Y#ypDN{<`V+pxp(-NZ^79;r-|GL#h%5QHbglixp4f#+ zK^{YO{WT8j9<^QV1sC2Y(;k}0g~M;qw50;p#<{DXW}`+*-?-MLaBUy`=KEmNkL!yD z_C-BGdQ#>K=WpXtTfZ=~&$F1^=K|Zmcdz_PeDv_;w)|}-FV(;vw&KlG&UaoGCE8`X z5VCwo458OY$^Drby!G$YB2pSM3?4?ZF`f=d#jnx7$v23)A~^Lkm!JF7g?q;@eUh=` zAMh)@lN8g2nk;p>f;ubjZ}K)U_-3~CAHT4P7@u6%?kslO|3plxKzZA3E^|Q-&cw5vOV{52@f`D+Y)fR&+C2R~+B*~Q zsH%H`pP4L#1i}CzvNI%rYzZ@yg#;2zGMOYSfj|%hqc9{xh)gmuGhq>xVH2cQL5nLY z)oRr$rGO~71*@nCN~>0|E-3g_t9{~DYpdq{{`bx#lSnAxy}rKpzMT1f_ndp~S^xLk zbN=VdT?&`aof7{_io^D-;ibA?e1F%g)882~;@4X;3wICN)BCIEKVSR6mfer;KKka7 zCASaR@I2 z;&vu~-T&G-QJy=l9O^!H_t8W5zg&6D{o(a{i%Zte9+dtc-q`V3o1!1wv*S8<)vbkd zI`7C|yz{SP#twe?Paoz)^thO>B?ES)KFfQp z;}4HN_H5U|z0z;>4E?gYBH{8}s6-AKv@x)-BGr`X+C_?1pQK zN-}PkIV9>>#9Z4OOIPo>V#$&@n@9Jo82M1e_9>4XORUQ|TH-za(1br`$K^iQFa4!O z4acv4^X`9Sf3j`*1M9ceJ(D?Q*4C%?bo$}rmtIIu$@uV#9eoyk@wfAa#h=*!>C8v} zarm#_eVR1>o{fpoDFYf-`vY)TZJ(hFfyd7&g{XV?vyh2OHF~`MI=Kic} zb^5rEANX+n*O}Ayt$Vk8{~vC?bJ%;8U6xq4?)~%DOS4{`U)g=hg6cQpujy-B@ub69 zwRK*_lm&-AtN3u<&cA(>JmiX)t5a^Z3@x_q|7@o5w_UO=SE<9EwA&x)xAL@ubJyQ( zx_b}fT0f4S-)el*H4<&04jG~Y8cK2WvzEBE->hC5&$M~iI~$HX@_N|XlWASk zFBmfY)4z1xJ~}FSz4PhYs-C#z&X;;z-dq z^;d2C{0_sF&kuQOfoa7Xs?W_Ow>R$kKBMoom173QU-HBBT<@`U5yS5}aOimA9S=Rl~7`p1NwMkKMY;F%@;r zr6gSK9%Hju(#KRgt7;O=3o5PI32vV?!R%Xxt70*(1(i1Ovxy(Bip98`<>gFQ2oZ1u zeK@ZBG=)hC`lJNIqy~LbgFb0NpR}M)deA35!Mw;_RkN5HiIrep=y4b69zj>amY6hRxKXB8ib*&PSckKt&0}RQ8%iGgK^(YciZ-6Wg`AVm;cC)d*j1?t7H5n2 z!qZgdsB^n3by*Lku4M9-H(#k2VUCk@7brEloHVXfisu|u-Bmb2POnUDDW5_)R)b(D z41?h?0!G1TNCsJPk+l%{Dy@8ZZ9H56QqFvkGTsQ!z;OtpydJm7`y}T!DsLV7-{U%v-E=AFdRm~c$ffFp#f=}QZ_#Rl8QeB`2^n$@~K8%EP$btzl6{dp|D!>OzVLfbw+u=@l z1bz+Az_ajscmqC!kKk|c4~U`d$HG7`g9TE+4h1j^=0Fv=;YwHuH^652Is5{4!(;FQ z9E7*v9rz2J0>!m-BgnP&I6Maj;SjtH1G%A8jjc zTmJuwG~3GSO#aQKKSviAm^QKmM;E?a$6EEh5wb6a!;CT9K#Bk|HfI z44ckM!_dl|qXvF1ql;dGM&sRm1_aiqcxKM3kYUn+iK+!6_d{9FA>J zoli*ut&LGdYw;wGRGtXNQ#WFpLJ~C4@3lKY;z)v0fIRFTfs7&$e?+X%)6*E;h#h&|Gcg+HyZr710>x!3kK25N<*& zd*Lt)qUV?f8{r99E26=OoCvP9C6Sw)fk5XiXIMHpO;fpuKpyxKHWTn(4!jJaRai;S z30vWCNZM5-UIQ19S1#m1J~*HdieM5crL4iJ$RDP!Q!LH4iMK1Xn=&Qx++= zmAYI{BS2d77IL{6_P}xIOub_v5k?Vk29&}|kbh4_W5`DqSHfzL5g{L0NRPh+q?Z?s zUV8QqKzj3D)K_}&_SGVS@}Dbh)%-4Md@smM_G$P%9EGpJNbTdGKbT=SjDztY=R?l$ zP^2;pq?OD8X(_efg-vh(UI5Xv-hp>PTGCe_l9LuCde;3QI@S{)`qdE--ReUSz3T5E zI?_rI{pdyz-RM3Lz36ceo#_E%9pwi=jH)MyZZaH1FUbZubJDV9 z{Fat2XHZ(VoIz>fat5W9%NYy{oWU&Y34t>idN$A0;-?aRdVsmu7eg(qgy7Y{7f`t} z+lyR7daO>^|7wid6&u_JTbNwMp%}TM8|uf8sP#Q(ZtT|jXHs*L@2@G_JmluqM;g27 zgOJP+TAQ96l7G~?uf6pL`B!Z|_OwZ8voIYl1QR4rs;!*$s5vou)SMVSs)48mJ?dj^M%4># ziq)fW-f6F0?;hkLr&nHm{Q^4v$iD2g6RZyAg>os(NJ?waw8@dCu#u*7WJA%1X~uSu6Xh zE=&5U-8~1W^h*Y)Hxd%nJEcR^)cO(XJy|d8&T-Bo#Gcvih{|RQ1uI8ESC9S!(L?S?XiwJoRF+ zi&dIRwIpSc`qjY2>WFW#QWyHv7Za~g5rbE$opI~ceevtn$uaBIbnmr%jqV0@P5dqD z+N#@?p?<5nW6s^`@k{PiQ&WDa_QpJ|{+O{}T^e^lZNKP%>hE|#jfy|0{%k#{66U<7 zHg-R%inBgZvwD1~BCq}jt7$)IQVNdTvLk&*V@@}}uHT4`BSvNz;+D})?A+)nvBnDh zm@ab^j!^yic@&A~qxH%85t+B-pw#H=Vq!C`(e_ONyGOuo2!vY@*k?&inv;~Gle&=G zUlxN$EoCddqNoRr9!f$>F$2@T5VwRa9Jom;VT=rm2#?@1?2RMU@!Vyqfx>D=%Ltd; z@Kw!3M{etxioFzj2KmZI?`t@oMmk0n5y5BYJ4G5JP@XiS)h6Kfi(RUg6K4T2-Rz|# zYq`fnhHGD{*K)U?Cih%!sHq|+i8EG@(=CE1;d~{YYwURA!zxE4BIfRZL#BFi)6D`c zE>n#_UJ_5Dt~cu8gWJ0U4m-80;Z~q};w`6^g_PCDL{V-MLqX5hO57=|v(XsA$J|9; zrz^4C1|=!TZB=qhnJzO_W}Y-L+W$10TTSOjao;D%b?6`#dPCp(p$8Ch09Hb`S{4KfO1P}EXzCf zY6)(qb_F}=wd5v5H$Ru2M60c|W|;@-66-=<=Opk}ss7X5ALxuD={8#%5#aH4cYpEi zv_+<0u@F7#{9VT^_(>lp1F_}URHtu|(_Q5<=ksS{olEnVG^fh{ zhwkJGkFUBZY;OIMI_Gk;!|QXo-AG^3kaA0-5qEDWt}3tdcs&b!=4lHTR+YQVvpsbc z_~$^-0v!_QkU)n7Iwa5`fq$0-&NTlwzH#`Ct;zjNH{HVgfAqK8Efn%Aka;#!TWvW{ z=IgZ}>n0mOmM}Jf+*>K@0rF4jHjsJ$10Zwv9U$}i$3gD5YyepYco8J+KS1mGzTM@m zGHa9jnu;ps@G_s4B@?kFZ?R>uN}p%PHZ9-;7jjzL11X5qLGm$cPf&_WRs*C4Gpl^8 zDM(rpro(hdphE&366laXhXgt#&>?{i33N!HLjoNV=#W5%1pco}AUFq>xvu;tE^}#_ z0n7jS@?XCEk1zk-%luj9=Aq9|%3S_zo}mmrQ_7teP0vye!fl4ZkN}A=1ct&eI3I?? z2p9>YU^K{cmdP*%EMNusA3p`;{uO!tG97}?V9K+p@*Ji-pPB{oEan8@-V&7qxsV5T z$Oi}fz}+T=*hMfACc$Kw0>v;Dra=izhZ#@`GvPv*1+(EIm;-a+Vkm=4;8K_e^T7!V zpd93W0~aiWN>~I{a2YHHH&jCnc%T+8hdS_r59(nFEQMvT9Ik*Ba3x#?SHnv1!zx$} zYhW#`gKJYMJ9eTP?`?j&H zAR34gEW_Evevm+Sj?qKTM*4MJ`T5xLwmrGQRc`$}Tho{NM-n&!&bI!NcB)*|mLm%i1{h&V# zfPpXw%rF=dAQ2?}q1eOVd>9TRU?hx!(U1hmAl;`0tYCu_NQE>=hp~_WnJ^B4eWA z#`(X(7{1%-m-hikOR$VI8aH)TwQ-R}VQRHeRh$f$hbH^0k~+_2u5w?*bU7tC#<)mh zT=pZz=uSqrAucMiM`vRXf9Fk?&+VeR7$^0}GDgQML!H-GVe+_L6O4W2&SyqAdECNP z!USTG8hWV;8>z|)S6D0-n`K98iX}-!g@@Z!beJ*L(8FR$O}{Ep*^(`ZmPGqFRW`e- zroyw-tIE8~xretpCEQjP=CURG+zV9Vv?&gAZoSX%;k7}$lt|4FQ^qw8{WjnT9Dcj@ zqT%WOf>>qtckk>sjO5R&It**SwKj>$x z2N$lesr-VBd`qf5Nu}i#EFluR-M)6f-3GW z_LkW_)zzLFLwIE1u42V)#ifg!{H0h?Hm#swqTQjasb$5b(~|RhPnnXq-n6FJY)v&M zTg=lItU6(y(onUa&RMtIKh&=h;#V&#E-h%t^-c&^vHtL4T3W&8wRv8Zl4Io3MRQ0^ zvpF2rB$LCEQDCs-CULuTc#_4IZppCcq~=@l@>2U$6dWzKS*DzyH^AIbduZ54W4Im? ztPLuEweiYMtFP{2u&=gQu1d5F$XlJ*(8aIrO0%d3yZSr-q(SBOwvV;tg{N8ku1tqL zEy^ZfFN#umeKoIkDvVRT8)9erk1%}XtNfg5QJ;3XW~v(h z(Y~+5*!~{TfBJm7ucCXDb@lSnq~j|GCKy&3M}J_d9yKx{A$-(5%5;x1#2d7>uMThx zoW$7!sm`VsJj{Nv^oAG-k{(}8AJo`*FFPC9--FvA2b#KF{d%Sg{p5{z@@K6meyHb; zgEy?3TQ~mvg2XRY+-`qr-?T-~ZgDJ@IH5)od2++BN4K1aDZa0`>{oj)e{6$vt%I_(s7Qjjj(D)2RguCoYK+EIeNp(e}FpLIgAVpSPtqHLB7C$yr2R zYHD%?{5YOv3Y6EF71!kI-Q?=uz(#gtTpJ1vun0!_M;Oi6S?YMCq$Vem5jID*q465nmvL&Of4mkx zmA3=TXFm)Ha2@AJ<7gdTN+^C3uWF56zR)n@HgimjJWC6eLAThw zRa$ghCj+vO_Xk`jkckj_QeBmHSj=RwNC=)f;Lhf~`k?*Z)LMfkB=_4@50v&9swi%K_gy4cc|Uk|8ID_D4qdRqK(VE?=155$k2Gr zZr(PdrL0GIPYQXi=7)nKXyq4$FK`;#a7*?EgDDV7ge*S2gRzw1&K)Y(=c}t)P|qVz z=2?03raGC{nzPLbbl`N>dIxUuC3KCBzAn${H5jk6>I1ehxzDUZw`YOVJ=pM2X|1!| z;4W}RxxKC~_t@)PPLt2Mz};(5NuA4F;VO4KRpi8q?&_|Yb@g5I9Ls8>JYH8^e;H+z z+v#)VyXvZpOL`5l*L!`Q>M2!MthKMPc8y*|L7UAX=PlB%8s%#Ron;8%ndqP~s7Tt% z-_bwI&<9u0E6C3VspyFX=%TuhrG?8L@NGUC3?+6d+UZqjyQwOf9w`z1G!fks9VamV zC`6mgWrfa)j~y+unBO#dF5RaXeblbaQ%VCq`s}4FFpC*WEb(!m|0bi)PT`k`kIb;@ znd!QfnWOUlA$gS4OdX_0G?Qa3Km98N&9i=QP!O7JGW=K$nbat)MeT!iO`@E-`^<94 zpqy!x(GnsDnT_l3udmk1SS6YxWiCS&Qf_^=?qQum)~(Rm_=&%Z5TSckq%3ht(Z;7C zwS4lLhD7qn>vSmv*J8{_U(Sz3OTGEc{AS|n5A*74C86SZ^0ciag*2M$AL=?g>DaVV zgi1$$C|9)UrJ6*%tl8*~7FII{vQb~z3uxQyC$r~fg*j2HxkEeG@=Xc-vFX#T@AS}W zVs9~8p3YCyXX)9+3~y>1D9p5~47SqN?bJREc^A;al8~we@^IyG+|kr>ayhDB8>s<* zn|6&z>Ce7x$m7nkjwS0=(z4IoYDyWU(q{6>HI4J-&`N-AjYKjiQ&4Imzl=Z#X-78t5eZ=@p2#|nUuu)oy3$fET*(hxq`RVNNP6*;cdb>l(TAM7j6{hDPJx0mAQ_sBj6z*F7;7{r6ShoH z;&8`9e@#aVYGsUI+ALg#_jaX zWNbT5W1~!{G$U0njR+RPU@+s+z6$*B49&Uwe^HNrhjiy|{qB{CpIIE+-ydS$eC5}l zOBtkLiaj6O4@|oZeN~ttYdBM@aCu_;(Zwbe7CtL4_nQw)Dk7YPBWwEps{_syTc?!) zXL{-~oMGX`&hlM5O++S2`Xh+}*Vyg2I)!V?UOwx}9VQhS&UzNhSvSpZI#BLQ+HT@4 zIohH`U`-+p=GmON7?9u42JnC*whn@ zVVtBPMwyumGe)qDqNi$XjBe+}(AOw)PQ8a4MBHxtWYWR+p4k3(nTh$?2`k3tvsRXB z%SdwMW~3&iI?^31@nxhXSu)1jGc#;Tcb4l0erovmZSEOX5*z(g;ElKu*OiPm0YUg$Cj?|PSizU}$ z&$L=CmbBcf#?Q)gjBko%2}!}0t*_^17TAblvFICn&?R2l%I#OX>=QjX$M@gk(wKE<6JjFz0CzRKKr`56lEZ$8xW|EHyBIPEiWjBz5n zpgEh^7ZXVS*AZhtvlG3&79Ct>TJ1GG&LRIYGO25CMrQ~gth?A}2=*^K^k2#UKLOTm B*?Ry0 literal 0 HcmV?d00001 diff --git a/cesi/metiers_devops/ressources/bibliographie.md b/cesi/metiers_devops/ressources/bibliographie.md new file mode 100644 index 0000000..1b1a5dc --- /dev/null +++ b/cesi/metiers_devops/ressources/bibliographie.md @@ -0,0 +1,8 @@ +# Bibliographie + +- [DevOps Best Practices](https://gist.github.com/jpswade/4135841363e72ece8086146bd7bb5d91) +- [The Journey to DevOps - Notes from The Project Phoenix](https://wade.be/development/2017/09/13/journey-to-dev-ops-phoenix-project.html) +- [Top 10 DevOps Values](https://fr.slideshare.net/arunmurughan/top-10-devops-values) +- [What is DevOps ?](https://theagileadmin.com/what-is-devops/) +- [The death of microservices madness in 2018](https://www.dwmkerr.com/the-death-of-microservice-madness-in-2018/) +- [The most demanded DevOps skills stats, DIY approach.](http://devopsystuff.com/2018/02/18/the-most-demanded-devops-skills-stats-diy-approach/) \ No newline at end of file diff --git a/cesi/metiers_devops/ressources/ci-env/.gitignore b/cesi/metiers_devops/ressources/ci-env/.gitignore new file mode 100644 index 0000000..2fc4c76 --- /dev/null +++ b/cesi/metiers_devops/ressources/ci-env/.gitignore @@ -0,0 +1 @@ +/.data \ No newline at end of file diff --git a/cesi/metiers_devops/ressources/ci-env/docker-compose.yml b/cesi/metiers_devops/ressources/ci-env/docker-compose.yml new file mode 100644 index 0000000..8e0454a --- /dev/null +++ b/cesi/metiers_devops/ressources/ci-env/docker-compose.yml @@ -0,0 +1,20 @@ +version: '2.2' +services: + gitlab: + image: gitlab/gitlab-ce:latest + restart: always + ports: + - "8443:443" + - "8080:80" + - "2222:22" + volumes: + - ./.data/gitlab/config:/etc/gitlab + - ./.data/gitlab/log:/var/log/gitlab + - ./.data/gitlab/data:/var/opt/gitlab + gitlab-runner: + image: gitlab/gitlab-runner + volumes: + - ./.data/gitlab-runner/config:/etc/gitlab + - /var/run/docker.sock:/var/run/docker.sock + depends_on: + - gitlab \ No newline at end of file