From df2499a0f27c23b1039f6288060f926983b8e8b8 Mon Sep 17 00:00:00 2001 From: Deahaka <96499407+Deahaka@users.noreply.github.com> Date: Sat, 16 Nov 2024 15:56:50 +0200 Subject: [PATCH] snow_wings --- code/__DEFINES/human_layers.dm | 24 ++++++++++-------- code/__HELPERS/global_lists.dm | 5 ++++ code/_globalvars/lists/mob.dm | 1 + .../mob/dead/new_player/sprite_accessories.dm | 17 +++++++++++++ .../mob/living/carbon/human/human_defines.dm | 2 ++ .../mob/living/carbon/human/update_icons.dm | 17 +++++++++++++ code/modules/mob/living/carbon/species.dm | 13 +++++++--- icons/mob/human_races/r_moth.dmi | Bin 1664 -> 1671 bytes icons/mob/species/tail.dmi | Bin 4595 -> 3952 bytes icons/mob/species/wings/wings.dmi | Bin 0 -> 2881 bytes 10 files changed, 65 insertions(+), 14 deletions(-) create mode 100644 icons/mob/species/wings/wings.dmi diff --git a/code/__DEFINES/human_layers.dm b/code/__DEFINES/human_layers.dm index d5ac904d9b19..a0ef79ccc02d 100644 --- a/code/__DEFINES/human_layers.dm +++ b/code/__DEFINES/human_layers.dm @@ -1,15 +1,17 @@ //Human Overlays Indexes///////// -#define TOTAL_LAYERS 29 -#define FIRE_LOWER_LAYER 29 -#define BODY_LAYER 28 -#define EXTERNAL_APPEARANCE 27 -#define MUTATIONS_LAYER 26 -#define DAMAGE_LAYER 25 -#define SURGERY_LAYER 24 //bs12 specific. -#define BANDAGE_LAYER 23 -#define UNIFORM_LAYER 22 -#define ID_LAYER 21 -#define SHOES_LAYER 20 +#define TOTAL_LAYERS 31 +#define WING_UNDERLIMBS_LAYER 31 +#define FIRE_LOWER_LAYER 30 +#define BODY_LAYER 29 +#define EXTERNAL_APPEARANCE 28 +#define MUTATIONS_LAYER 27 +#define DAMAGE_LAYER 26 +#define SURGERY_LAYER 25 //bs12 specific. +#define BANDAGE_LAYER 24 +#define UNIFORM_LAYER 23 +#define ID_LAYER 22 +#define SHOES_LAYER 21 +#define WING_LAYER 20 #define TAIL_LAYER 19 //bs12 specific. this hack is probably gonna come back to haunt me #define GLOVES_LAYER 18 #define R_EAR_LAYER 17 diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 0f48cd1cc809..4494d8c04405 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -299,6 +299,11 @@ init_washing_items_list() + global.body_wing_accessory_by_name = list() + for(var/A as anything in subtypesof(/datum/sprite_accessory/wing)) + var/datum/sprite_accessory/wing/B = new A + global.body_wing_accessory_by_name[B.name] = B + /proc/init_washing_items_list() var/list/path_list = list(/obj/item/clothing/mask, /obj/item/clothing/head, diff --git a/code/_globalvars/lists/mob.dm b/code/_globalvars/lists/mob.dm index d3a0291dd300..70eaedbc4826 100644 --- a/code/_globalvars/lists/mob.dm +++ b/code/_globalvars/lists/mob.dm @@ -4,6 +4,7 @@ var/global/list/all_languages[0] var/global/list/language_keys[0] //table of say codes for all languages var/global/list/whitelisted_species = list(HUMAN) var/global/list/all_zombie_species_names = list(ZOMBIE, ZOMBIE_TAJARAN, ZOMBIE_SKRELL, ZOMBIE_UNATHI) +var/global/list/body_wing_accessory_by_name var/global/list/clients = list() //list of all clients var/global/list/admins = list() //list of all clients whom are admins diff --git a/code/modules/mob/dead/new_player/sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories.dm index 846e9fed9b7c..d3a4029d3bbb 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories.dm @@ -1823,3 +1823,20 @@ icon_state = "dio_brush" do_colouration = FALSE species_allowed = list(DIONA, PODMAN) + +/datum/sprite_accessory/wing + icon = 'icons/mob/species/wings/wings.dmi' + name = "none" + icon_state = "none" + +/datum/sprite_accessory/wing/atlas + name = "Atlas Wings" + icon_state = "atlas" + +/datum/sprite_accessory/wing/royal + name = "Royal Wings" + icon_state = "royal" + +/datum/sprite_accessory/wing/feathery + name = "Feathery Wings" + icon_state = "feathery" diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 8ffca43ee5d0..f1be83c2696b 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -126,3 +126,5 @@ // Reagent allergies. var/list/allergies var/next_allergy_message = 0 + + var/wing_accessory_name = "none" diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 6a85c3d7ebc4..810ebdcffeaa 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -239,6 +239,7 @@ Please contact me on #coderbus IRC. ~Carn x standing += MA update_tail_showing() + update_wing_layer() overlays_standing[BODY_LAYER] = standing apply_standing_overlay(BODY_LAYER) @@ -830,6 +831,22 @@ Please contact me on #coderbus IRC. ~Carn x apply_standing_overlay(L_HAND_LAYER) +/mob/living/carbon/human/proc/update_wing_layer() + remove_standing_overlay(WING_UNDERLIMBS_LAYER) + remove_standing_overlay(WING_LAYER) + var/datum/sprite_accessory/wing/body_accessory = global.body_wing_accessory_by_name[wing_accessory_name] + if(!istype(body_accessory)) + return + + var/mutable_appearance/wings = mutable_appearance(body_accessory.icon, body_accessory.icon_state, layer = -WING_LAYER) + overlays_standing[WING_LAYER] = wings + + var/mutable_appearance/under_wing = mutable_appearance(body_accessory.icon, "[body_accessory.icon_state]_BEHIND", layer = -WING_UNDERLIMBS_LAYER) + overlays_standing[WING_UNDERLIMBS_LAYER] = under_wing + + apply_standing_overlay(WING_UNDERLIMBS_LAYER) + apply_standing_overlay(WING_LAYER) + /mob/living/carbon/human/proc/update_tail_showing() remove_standing_overlay(TAIL_LAYER) diff --git a/code/modules/mob/living/carbon/species.dm b/code/modules/mob/living/carbon/species.dm index 6dc0f506dcfc..f1e6669bc0c3 100644 --- a/code/modules/mob/living/carbon/species.dm +++ b/code/modules/mob/living/carbon/species.dm @@ -14,6 +14,7 @@ var/gender_tail_icons = FALSE var/gender_limb_icons = FALSE var/fat_limb_icons = FALSE + var/list/avaible_wings = list() var/hud_offset_x = 0 // As above, but specifically for the HUD indicator. var/hud_offset_y = 0 // As above, but specifically for the HUD indicator. var/blood_trail_type = /obj/effect/decal/cleanable/blood/tracks/footprints @@ -2118,7 +2119,7 @@ flesh_color = "00FF00" icobase = 'icons/mob/human_races/r_moth.dmi' deform = 'icons/mob/human_races/r_moth.dmi' - tail = "moth_wings" + avaible_wings = list("Atlas Wings") flags = list( NO_BREATHE = TRUE, NO_BLOOD = TRUE, @@ -2131,7 +2132,6 @@ NO_MINORCUTS = TRUE, NO_VOMIT = TRUE, NO_EMOTION = TRUE, - HAS_TAIL = TRUE, NO_DNA = TRUE, NO_PAIN = TRUE, NO_GENDERS = TRUE, @@ -2152,7 +2152,14 @@ H.real_name = "[pick(global.moth_first)] [pick(global.moth_second)]" H.name = H.real_name RegisterSignal(H, COMSIG_PARENT_ATTACKBY, PROC_REF(try_eat_item)) - return ..() + randomise_wings(H) + . = ..() + +/datum/species/moth/proc/randomise_wings(mob/living/carbon/human/H) + if(SSholiday.holidays[NEW_YEAR]) + H.wing_accessory_name = pick("Royal Wings", "Feathery Wings") + return + H.wing_accessory_name = pick(avaible_wings) /datum/species/moth/call_digest_proc(mob/living/M, datum/reagent/R) return R.on_moth_digest(M) diff --git a/icons/mob/human_races/r_moth.dmi b/icons/mob/human_races/r_moth.dmi index e989ce9a016108ff50b2aaab0c77632bc6c6f61e..646e6f8b95fe53a43033f92f14b593cd976c0997 100644 GIT binary patch delta 1396 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 diff --git a/icons/mob/species/tail.dmi b/icons/mob/species/tail.dmi index 1f84fe56723e4e9f287cc13c886942a635230dae..58aff8aa901423b2f943eb152449433a5b86da99 100644 GIT binary patch literal 3952 zcmZWpc{mho_qJ3-ma=6VTL_I&BkLHFHH_@C4cSYB?0Z8bio9wlTM{abUA8gCE@Vqc z#t?7HFf(W@W5)dI{eACyeb@Uv*Y!N-JkKBJIrn|;bM9Y-neuRnaj~$l@R*w!*|M;( zdj8&=?7v>>JM9vGnU1TL_Qp6I4yY}8$wo=jSnlFwS&uM11+~-ahB8JDDzYj<2G(co z{M8jer_bw2U9vuB?Wu0#qoJ%WW^aG(oGMsSQbzi$ppejMpq9jGDL!c>K}{psUx6JQ z9Q^$J6ciMalapBitnBC5d3bmX3=CL=SWcZf#iq!1orNWrg(Xa0`Uv<42aH4ANSRHB z&GL-24Fa-B{KCr5dauF%3|OrGab%$DH9b4krOx}__sliH>LNnIzY>-cmCyreDTvG7 zj9k6)>p#|TTbLb-!M9nzUzdScd*^T?-!Sjnfg$06!3Y+X=)xy|4D)tN^Bd1lgkIv` zY&L~1^*5e(pM?kXhbsrLvO7z`gX!BlzuMsEDG%( zc7^mJ90PQ;xT2LI5asSAsTJfs_1%=!#1I%{WUlmpYOVD8gxSxSi3Z+LPlMFk#;F$` z7bTy%OsVMT7b}KZv%v`T3S8*dtO!6DoRQ1l zRqzfOnS|`qTQ$LxEv0;pT{gc8m}PEs$v(Ppqli0dPD>yyO#TcIFI@jQSYPoBk9jF_ zzO=WHbjU1e+7fa_nSizWyD-+)V;c2-{ju^s%?Bo*KePVg<@c&>S|^3Zkv1G-q#pV* z7az@RQan57bORO8_zrfDv6K$HW7BSZt3*?FP@cJ7Zypiumz4J}fq|EAZLV0)6<(3ub<&1j!{w%0nT(3<_@*_#c zx5N%vbgwJaj4h5W>))?3HC5aY*ycK%MA6xMNDCQplxummm9a>R8FG9Xv~3OewU;h@ zlEhE?d3;Cj>jU019MMB`x~;Zy4O1kdE-ZelGuJ!!LKp9*rd+}ZVOp>IBCa^$ZsmM7 zD5s1@V^*pHnsrNbZuO|*wSzJbSu4wT(l0Ncsy1Ex`0-_`Ym#VAVpkPGp$1TOukaFq zB5CzAkAT{#5XLWMh22@=w9dT~AKtvmHM%lbuC)=_M{Rcp7CON@(rog2I+ckJ;mM3k zv}|rP-ZRha3@>6+eZG61ecd<#T&0#pxz(q@bshP1zk(nAK_&$U+OW2FchJLNIum$@6V*0N$NU4BC zaJOLSFdF1PKcLAU*=YkrJbC)^HC4bYH}ol61Ya$QcKmVDw8L{#drHf(AD>K};}Vd# zYaDM^LlyN!JvC(a8wS2eTPd|@9TENnKU$x7Wu@f9tZoP5bpLB{dkRYCbHKN~?vpo^ zdclQca^L;8Q?S~|GU00EWPbND&ur%PhTL4EsC_mO z+Yl;m8oBjgEzJq^uJ<-+)Pm9QTF3lyb_W-?(iv(QHU_!I=?A11>+ipG9gTeYQBXckF20r3>&xkr#Om33sdFRmUJU5r6WbD+mDa>YCqEDsNlg7j2u9qS7$`Ul%Sdr`t z_783J)y)bH?n~~S!Z@55YQv4p7QcrQjd^c*B!qDRmO2UyQ*;+WYM~KNUpGBCIt_L$ zy*vgcu!2JDM3T{L7Q*>0n2{-$ezu$3LNCwx;+p!etkrk`{*B=(Fyg?!z$0mx(f(f{+zLbaw@0sR3kI8SR*gA8QrlV7GI{yH8j)@h$C%!Gw zoxO<2uuhNY-I>Iuy)_3bO}aSNeijoIhZIpaG)7l4s<0DngHY+|$eqdo9qC9Qn|ScJ zz=?5HH6n1>$NgO4u5yM)MaU6dODy?J?f$V=l+}ye0WeMsow+V>eFJ~`__SOtFo+ul z^wslmTco(L4TxPg=ScW_^!BnPid#mbNfxwbmY1b@jZib0!XtU_XGeC<)GBDy9@&Q!gFBMtq*o6R?(UNJ+W zr#a(7Te_Z$l$+`1T+7ff!0u1nNLtC4l50D9@5Va9H=7_6QWLH5Qn4{gY}b>-X$3WX zw?Ac&4eAQIUwg`W8IjDqE&Lg z9?#AkwMgF*FX{mIxvCm;lBk`e*_(K%wi-mTKzn$8Bb$q9*=3fngewSBWmblE}9L4DWJtjUe10n`k3OqVDRbG*3 zh=b6;l-qc=-Lu>}+mfUC$-eaMw@atd;=1460s14@P<#6Mqk|T5Mf_ zFL+SmdeFgST-?Nu;dxqY#%%bYj=07s9mHG$&e;k96{l0z2nVM&ZeSOAB znM5ZT^XngC(qZdW7WPq$qAIde6$iKlT6t_%ic){V5#WWV1|oyCL=o?+W>PXO4$dAM zVQd!izaY_g1CZKWA9LgIim0n42P`_3j$R+Al41@ZwYs~{m`O2{K#`c|X*94wr zKOKzhPsxRO{y7!ILCSZ#%lds$FHU;6dHCgJx}40*6S)yTy4aXsEc=R3Q-@8vv@{X0 z$7r|enaHkM;xo1R_Tlx(W0yy2P>K2hEm&0fcYix0VpQK^)GM+HdQpYgC%!9w_xW6e zLEZfl+!S1GUb+Pyr0n!>meo^AHiJ9R_T7Aa_`T}UEkEQ()Nzo-+{WrXfxScsfH33C zlsPO~T7`)s^`CX~BA?FHK#X$-?iJk|z&zj+O^}KS1c15puS)Vj>SF62R4Wvd&mzfB zzYO5taOquPw@! z%8W)1vB1HZUr?4+-R} zwY41q@S@jFn9c*cNo55PTRBH3_)kFakG!h4i|<_zlgS76^FdJgnt`h(P6Io85c@Ih zhO8)W;@tGj2kQk#(32~hRwc-v#P{M!e6V)m;>8K3(}>*@yd@j$uF^AI(? zo=}=9MdC`eMtWQ|E->S(oC78q{>1D};HmG!^Qmz5)Uy2R=~C&C0^zdaZy1Km*8$3! zX(Y&j%M?Btd{VcryKF*hySiM^5qJgeUyJGCuKCgWCFtnPv-7uF=wkS`JDR;0P64b@KnI3q*;;<#WsdN1L8JY5v7`nc`NaJ~R zb2}rgH2RIH73!yXn4(J+=3o8iX|?y4G7M{b&rybypKzixeqg4z4u6{Os_x07O0`g* z+j|>dvz~I&?$=J#WamyIff_5;L!9M?sqoo@iBj_Tha(#$XqUzPpe2ysKHr3FSxz*a zyA%f@W?KUdO^?kjX#1M`Zvo}$hm3;s!m)U&3W#EPoGvjBuIu}aYKhR?Cpu?kiQvqGvDst5eg_(o>WWw9Fg za?nkdokv9r-{^OA;^_pvAg7YV^3+?05);U`sQB6A)XOZYqRB3E; z{)hc+UFsW=G|OQ<8RK+?!I?M_u@xm*VeZ?5+)c^clEU2Ov~ZXyiZ_reOQt~4vo6Ha c^8O{*M*o^2$?46=nNCCQ$x?4)clb|uD| zJw#y;Ll_Kxe*gEp@B2IFf6ux1`9Ala^PJD~oV&%F80j$3a?%0-00uo>t(yP<5O>y{ z&QqPuMB6(so|$D6Lvw9B9xthU`I@PyqPDi;7zOXMrs&EL>e( zg@uJ9BO@6Y7*Hq_3kyqt5DY8_rZJ+C*AfHqfeZyB0UG67?2-2~-0 zk!Dh<0DyC>9taM)0{|$>$=5tbFSN#!)~4NUZJ=zI1UR^n(n`Wy{Ac7ng?Hy#Ls$9| z_b1XKtiiRMQGWnR_K?ME9U9^a8~%=h;-5WKBg)_6t+47_P%20;Cqa6NMf z56!IuweAKu`@7!{boccE03Kw%c-BYTF2kff-f#7&(SlUxw{ZPd0o`%5?6AAsl;E?@ z+ zB>Emcje2U5nq*_1Qhg$tpijku$qp`yVr4hUvvbI&zYEVTVRTR&x9%8O_QS7cII<~S zi@G4Wm+W&gysgVVrJS-?Tc7?NORlSOD;ru}hz~diT z5u2wWmd_mT*h=##gMr~Ep|jpD{fU%BK`tL|E3va8{nbP|hgCfY!3GK3I_@?OA;xRu z@Vg<^0;2FzgH6kONUQIX=H7X3?uxg%_S?^`^F;0b4`8O zpZE-CGBr*1!0$Xh?K$L)dE@EHHO8<@OSY~%pe77AMULa7gGN@MIk@PaN{oUx!@ATx zO$<~J4ZHQ=NjT%-9R+#XD!mzALp8geN=lE5jqMzHv%67WxrORjkB)F))Jx$%=&vuVrM)FEg`V|0;i2h!fx4rKY2Ry96&glE|`EP;}g3d8=F0j`|8HVeu_1*(EL`Iv|%XH2KPS^zu*W0!}$q+T!bB+@09puly1A4H)uxbu9 zcyZTo^owJt=*$cW`1daR*Uo2tbjUd!UR2k^Abvo5N<)j@Xu;!7J!nk!$ZVCj*&}o? zs66ud%pOM*5F*)w3zG6a?&SB7g6<1CF=a^AW5-9-UHioRBv~mnkgw~r_rl#!f!_M6 zY~bpN!%8yGoNxhu^Dn0bw%!7#jFfexLstJ$5ew6M6S~Y7Qiu$ggVSq62N(NdILiN8 zKaD!Zcl?VQ^t1-wMZY=N@$!~JugdqT#-!F03m2w)j2m(b)d#Yl1CAgmMDIGjhuQFrwlvju?a_sP zMhTzjYTOlqr>?6)agSvu(QCKpwu2~we9%TywN4U}f! zAaM~2$G=WKbK7R=l{@~Dw3r` zDT?;5UlIASSKexe-JR?&BeA_KUS_+FvK%E8c= zt?_mzjeeS8yZh-hQo5uup^_o!qvZkAv3&fKB_Y(&#zcYiJu7Rt-BO0t15%ZFlNffk zJ}Ic3S}0sQ1e6^OI0O$;_fAbga_NoPP)9!p-|L9HpY5GvFINK+t-`rfLMpXz&@Z06 z>i^{VKjJ|{{aLa%!rsbDlclTG9PBd`_j6~)m(^{@7lB!f2q}$kG;WH+a1SgNjrEUfRWV%Dq_bi=N;qR|$2k5F->_f?FYu!LYGqf;w?w0SY+g z4-df0D{w#^0&@bH-#&OW9JS2)KiL0B)Z~5pDT_UF;adVWkJNWF=k(5^Dlg!NI^l?l zo=QYJtY?!^Mq7psHI?fa9yWgFB$ZthH#t24e38@NX;nu-qm+RD_5?X#wh*vljyG3X zPkNu3jo@^-F|LWNeSwT7X`Rg>`#*{)Ay~BB z?t0U58MPYO+YW|Z==IzJmdwd$Wa8Q`eyxYK&TF}#j$>Y^AY0b?w>0DD1{p?cnNd%? zMNzKjE-}M|_;wi-?Etgl=#ok|lLnZ;9Z|RYv)2KisY8xq;Nn8~ABh*G5Zir{h^{92 zd|{8U*NWS{-x$0>USN?L3cu$p*Y#h1x2pxjzZYJ^b{JKka5zs>1^h9$_53a)TTJ(N zhW}ch$*J#RL1E*&r2dVK4cGWZ)yiaFpUreI%)`u1W1N&V9uqz*3mKd#44ITH!>y4C zDLCYtpX0L|myd0Jv+OTRMwwJBE?3w8m|@ykB2UR1wh8Zo8t!Iv`TR(w>-qr}l+16n z{njHM^$X&Z9@!N0S?~9XaJaRYVVTjTMxl2J0-n>vdq1siFMB25p?yb4)zkcRo@l3( zz&rXe70qOty;1mOTEMe(d;NWatK3v*0QCd|+r;eSOO&(;v&jQrQ|c5uFlj%ti*c>a z-Ph`T>9kwj;M1!O2pe?u$EK!_aQ~Fx3mOqwv$M044qtyW94u!^5@(~=`QzpSFR7P| z7ukrvo0jZbw2<1%Xli>WKNoEdqW%z!em0WSUy_yOjXr7U_NywR<7r)$X_;j;xEa)h zX=rk(*5O8&;S5r;z59iI$%kVD+H$M>>8I35Ik1*ciR(Kr1QaK=QjctV+mc@UkA(gI z7ihk6%lL!0RBYwr<8Li}TSRcDq<6;4`f0~XDIiU`8Q6B^%T~zPOVm<;OdDOjYUlz_U(4GRdm#!g(~-<`B92;otRV3~K1BE)`)b{JNv_TX$*C z|7^}(<4w1lC@{oZ;ub)LpQwg8GMTy-kv1Q0y*+`$*W2&Qyi7=us}(dRtXn40PCc3H5d+z<5UcQ3wI6U3Y%@cGrv+FH4wrpcj%XT1L&*1yyiXe9<);~k(3 z4jhGul>Oi?s#vjCVVK*n-<8b>T2AlQ_Nw&fW?8%x4RKPMDpux0o5`#=plMzeEv=>u zNQ_}~H;W5`?{Xdo2;whdhamOqjEzy@51B8paNf!}#j6014MtXK`^;G9yagtW^+p1fL)%hp9rsa)aN_A*M>y_rreqi;Am_dLSx zxS`yrg$Dy#k#ou>9Q#zhej4(D=yE0K>oeiX>u*5Hho_pC@#?SW|3u#Yv$Jd58_Y4A zVoyC#a#(8jRR->aw?q}`s1KlWK2ZI7wG}#2;qkh;QGQ*W0<*!U0gEhuEZHC~Xk)_} z+&)-Y)wWfgJDIFk{Z+5aEz2opiE0+zE1X$j7c`Vd7KpsaJkZN%hFI^r#QEf0+a2uR zOXFO(@1)G#8+Q|jiTC4fIHP?#e=~l5>5LW^H+;Bb-mtr;$frnd6C%k5B!HqAre= zvapgNjT;)Y;&H`xe-U^UzE~w!)zNzSyUgyS82k5ke|9Q$G;e{d`JVzpDUd$=E<@@8 zI)9LmL+{(8CImboqf52{iDcF^oF|&O-W8IvyHh-}Fj`y=$O+2grxLB_4ki^hJ$`Q> z7Xcrc=4+*Hyo>E4E*tkaf75;XA}C|~doK!vz4eyTm@Iog__Xw<9^J+Bh~3x@zEtDk zuY(V>ZR07Dz7!R&8X8lIgxvUXUY`8#j;UvB^WQzR& zh!kS7hEaiX48B}Vwtb*bKNB8^xS0Mi4ksi(L`vf9xEs9r*|^@DykIUn~$- zzk%-OejWu5bb;}Y?w>q$q~Z}rFa#&>%SCs9ArY_IPeg{LvtWBW8;{O{B_tJ3L}`Ro zY(AhoAbiY)0r&TlDa#e}mPkV;=mUNh8OUw|cNFM;P)005u}0{{R3yb+fl0002bP)t-sz`(%A zrDfm0d+5uI_t=(!S1P!HJlMR1&a7;qay+q=UDUdPiefanqH=FbB!RHRq{`T@)Zx+d z|1@KBF%0g#4=uO zW~RRYI#xAfbU12z053i^W_L4SZ#QXrHDq)&VsbQLaZZVzEK^}HTWYk?+bU07SdXMC zP+cxoWHn`VXsN?zsKI8Yz%yZSXs^kWl8mUQow~WK(a^tcZf$;kd%C!*z`($a>0$o> z0004WQchCV=-0C=2JR&a84_w-Y6@%7{?OD!tS z%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5DX}Ccu{hqz)x*=zMTv_u zC9|j)q?d~`ttc@!6~s0~Q%q1*QGR7&4zWgp6%$mImYP_Sky=zqtf?^dxD+ZYxca$( z!wUe`Us!e~H~fzP011UjL_t(|ob8$mcdNJ+g~5h^9LLzYZYd?#9{0wb%&VDta@(1y zc`5(@Kg~XpO#C8JJa+I}<*b`vII{TIIs&wF9jA*fy6EBq!|nBYZrc#e;ktd#^ZIUE zi0-9)L&-FhPtPUc4Lm&SJCDtH= z=t?B?NkGO%!yzUv0P%Y`95Fh09k)W#k2y4RhkB9>X-4bg*AR>m$7nRVV-k?v;d6cb znqm|%0J31zHb`Um{^nN~U3Ae!7uOjEf6&rYYHk*d$K&XoOxqnB{6W`q`{rKyXm&gk zMH9~XBsvw*=no>_GZOZD=-@ctnD{_=s)#0kkn$jW%RO}a#MeJAVZ0BN7$LXULt7mgB~kctsM ziO}Q^DnN(kQd1W)(**ce9!D77F^}St08Rd&AGkNn=3UYE*^PVH!QXhCV46($I7&_- zH2H(byP?l)0GW@b`yKq9$7z~IG=;H^`Te{3Xc@Qh2g3t@Q00A_WgZ$GcJLYc&5~pu zMbSLLrIlpw9cA4WQ>AcJPVEi^XCd^MCMoj!!ZF@=iV`0hB+e zcD7HT5BWALc{I|kUypqu0cQmGK!7un@bf$Pf&e|zHEVwma(UbSpkL=L0aXXDjqmv~ zO=pP)OlE1i{J|Pf+FMj-+8@L)Z<||wp!2qXx`Rz~nj(wk zBQZ(9WcIjRVCP3$KIsqAU2fwK`f`6Gq2iNyJHSl``ujg|FvUtV4Y+v35zhZ*2`Kp( z6^;a?YGYdxss@y|1=Jnr?>}KsWB&7UmV(a#VLDs>TONC|162N?&sd;qFpzt-KS&L9 z-g1a_2m1R@Bp_e?vc&Ia=NWs;Usm#%9ia9Hp&!$Lj5K`p2ia@h60q)oZ2;34fD1ju zi{;lLG%FW*{ff3VJ5E4b;vQGh&#f?rolE&=&+_4A4j*#d4~y7UK| zFsxo?jx>9smB@ddS1VnEtJU*YI`m#Xvp;C*93C`#dV2cFah{(a(K7>hVz*G!H7qb3t+wWKUUp0`F}=#5c%;X3CS9Ah_Au_Gx>v* z2jQvip(WuP{-nttL;!dlE3I{lSDJ-0=qisPezH!Y2g;;l>{%*d2e61l0Lf z;$G=f`-7z6jz1^`r2Ox#@O`feEUo>)bS@>V{XtoQI^RZok><=isqHruTe|HJ$`RK2 z7DD-hN;D0K`MTu~-pdAQYkFIk0YP+$sF*~`T-nj@wab`&2tjH1jTU5ObYvb<~) zFqQ`1zJDk3swC|)(y^@a_6W6sw{Ox4%-!-uR8=KjO3df>0DtA$1lS=IB?eYN#0v5W z40d~jzbON67Z5`V(J~ko+ErGd9EA?8Mb z9|BaL+5=Pu-fk6QKt)lB3ge0&Q5B-ad8`b)oiV1G%Lqy;NU(HEY>QACc+!xn?}c~{ zlV*B|NzcaT@rMwSeB?E)H-`k>Vlp{3Xu4!{t7&zJRj58AAI9bp8X zAz+gq=|k1x>x?q+rt9_E+_H-dD+_}^SlIPq+3d*a_qGRlgFjf5g~hoGG&=## zG5dQaf6zfbH=eu5(ZPv;27k}!4^k>G-f{=Cg7}&`Fowb3Gx>uk096Eyr_WS{lqWl! zZ~A*Ce^BJ~#+~I^^9bez()3Dx`g-AwH+hpkNPzM+v2hZqjHvz$U~`!KL0ackHVYM8 zUUi8TjmaOxsxK4522co;;n|l9CVx2Joe%3p}%n zZ14xMn^SF7Hh>k?YJOga(clkOBuP<~R(=TGW~zb&KW7~p{K1N5a7ONp4PZ`ftMe|a z4gMfTjMnwJO<{?bTrU03dM`BjgW{zkQLTJo>5`SAI_E4g`GW!zhcvdcYp5MAraI>= zG5Leorw5>&v5saLwLfPKn*2dXN)xlNd(;&)<+HQ?QPkiM;xU-Z1~!F{mkRoRe$KzA znfyV#NDBENw7IomDClV^&iHp_lRpSJbr2^uo>b(jC2IPt&yqL%K_O9vY-BUUvXPM2 f-Kxv@{}O)yqc+iM*NZXa00000NkvXXu0mjfEEsTZ literal 0 HcmV?d00001