From 90caf3bc45f1c8364d4ad7df62fe797e3a3d59f0 Mon Sep 17 00:00:00 2001 From: Michal Date: Thu, 5 Dec 2013 14:29:12 +0100 Subject: [PATCH] initial import --- Makefile | 93 + Makefile-win | 71 + Symbola.ttf | Bin 0 -> 2185220 bytes action.cpp | 43 + action.h | 44 + artifacts.txt | 233 ++ attack.cpp | 29 + attack.h | 28 + aztec_names.txt | 382 ++ collective.cpp | 810 +++++ collective.h | 134 + collective_action.cpp | 41 + collective_action.h | 28 + controller.cpp | 8 + controller.h | 40 + coolvetica rg.ttf | Bin 0 -> 96312 bytes creature.cpp | 1673 +++++++++ creature.h | 279 ++ creature_attributes.h | 60 + creature_factory.cpp | 1439 ++++++++ creature_factory.h | 56 + creature_view.h | 20 + creatures.txt | 347 ++ debug.cpp | 78 + debug.h | 93 + demons.txt | 664 ++++ dogs.txt | 56 + dwarfs.txt | 82 + effect.cpp | 340 ++ effect.h | 195 ++ enemy_check.cpp | 43 + enemy_check.h | 20 + entity.h | 10 + enums.h | 398 +++ equipment.cpp | 56 + equipment.h | 23 + event.cpp | 67 + event.h | 36 + field_of_view.cpp | 114 + field_of_view.h | 42 + fire.cpp | 33 + fire.h | 22 + first_names.txt | 1758 ++++++++++ gods.txt | 411 +++ inventory.cpp | 67 + inventory.h | 30 + item.cpp | 392 +++ item.h | 104 + item_attributes.h | 59 + item_factory.cpp | 771 ++++ item_factory.h | 46 + level.cpp | 401 +++ level.h | 232 ++ level_generator.h | 21 + level_maker.cpp | 1452 ++++++++ level_maker.h | 32 + location.cpp | 61 + location.h | 29 + logging_view.h | 66 + main.cpp | 71 + map_layout.cpp | 243 ++ map_layout.h | 55 + map_memory.cpp | 22 + map_memory.h | 20 + markov_chain.cpp | 30 + markov_chain.h | 19 + message_buffer.cpp | 54 + message_buffer.h | 27 + minion_equipment.cpp | 46 + minion_equipment.h | 20 + model.cpp | 248 ++ model.h | 60 + monkey_test.cpp | 60 + monster.cpp | 85 + monster.h | 31 + monster_ai.cpp | 776 ++++ monster_ai.h | 77 + name_generator.cpp | 85 + name_generator.h | 37 + pantheon.cpp | 269 ++ pantheon.h | 61 + player.cpp | 563 +++ player.h | 65 + poison_gas.cpp | 32 + poison_gas.h | 17 + quest.cpp | 36 + quest.h | 27 + ranged_weapon.cpp | 20 + ranged_weapon.h | 13 + replay_view.h | 84 + shortest_path.cpp | 167 + shortest_path.h | 42 + skill.cpp | 46 + skill.h | 33 + square.cpp | 339 ++ square.h | 214 ++ square_factory.cpp | 653 ++++ square_factory.h | 26 + stdafx.h | 110 + task.cpp | 340 ++ task.h | 38 + test.cpp | 356 ++ time_queue.cpp | 69 + time_queue.h | 29 + timer_var.h | 31 + town_names.txt | 5629 ++++++++++++++++++++++++++++++ tribe.cpp | 120 + tribe.h | 53 + trigger.cpp | 102 + trigger.h | 31 + typodermic license agreement.pdf | Bin 0 -> 90693 bytes util.cpp | 408 +++ util.h | 655 ++++ view.cpp | 21 + view.h | 151 + view_index.cpp | 30 + view_index.h | 27 + view_object.cpp | 211 ++ view_object.h | 63 + village_control.cpp | 184 + village_control.h | 27 + window_view.cpp | 1364 ++++++++ window_view.h | 114 + world.txt | 175 + 124 files changed, 29273 insertions(+) create mode 100644 Makefile create mode 100644 Makefile-win create mode 100644 Symbola.ttf create mode 100644 action.cpp create mode 100644 action.h create mode 100644 artifacts.txt create mode 100644 attack.cpp create mode 100644 attack.h create mode 100644 aztec_names.txt create mode 100644 collective.cpp create mode 100644 collective.h create mode 100644 collective_action.cpp create mode 100644 collective_action.h create mode 100644 controller.cpp create mode 100644 controller.h create mode 100644 coolvetica rg.ttf create mode 100644 creature.cpp create mode 100644 creature.h create mode 100644 creature_attributes.h create mode 100644 creature_factory.cpp create mode 100644 creature_factory.h create mode 100644 creature_view.h create mode 100644 creatures.txt create mode 100644 debug.cpp create mode 100644 debug.h create mode 100644 demons.txt create mode 100644 dogs.txt create mode 100644 dwarfs.txt create mode 100644 effect.cpp create mode 100644 effect.h create mode 100644 enemy_check.cpp create mode 100644 enemy_check.h create mode 100644 entity.h create mode 100644 enums.h create mode 100644 equipment.cpp create mode 100644 equipment.h create mode 100644 event.cpp create mode 100644 event.h create mode 100644 field_of_view.cpp create mode 100644 field_of_view.h create mode 100644 fire.cpp create mode 100644 fire.h create mode 100644 first_names.txt create mode 100644 gods.txt create mode 100644 inventory.cpp create mode 100644 inventory.h create mode 100644 item.cpp create mode 100644 item.h create mode 100644 item_attributes.h create mode 100644 item_factory.cpp create mode 100644 item_factory.h create mode 100644 level.cpp create mode 100644 level.h create mode 100644 level_generator.h create mode 100644 level_maker.cpp create mode 100644 level_maker.h create mode 100644 location.cpp create mode 100644 location.h create mode 100644 logging_view.h create mode 100644 main.cpp create mode 100644 map_layout.cpp create mode 100644 map_layout.h create mode 100644 map_memory.cpp create mode 100644 map_memory.h create mode 100644 markov_chain.cpp create mode 100644 markov_chain.h create mode 100644 message_buffer.cpp create mode 100644 message_buffer.h create mode 100644 minion_equipment.cpp create mode 100644 minion_equipment.h create mode 100644 model.cpp create mode 100644 model.h create mode 100644 monkey_test.cpp create mode 100644 monster.cpp create mode 100644 monster.h create mode 100644 monster_ai.cpp create mode 100644 monster_ai.h create mode 100644 name_generator.cpp create mode 100644 name_generator.h create mode 100644 pantheon.cpp create mode 100644 pantheon.h create mode 100644 player.cpp create mode 100644 player.h create mode 100644 poison_gas.cpp create mode 100644 poison_gas.h create mode 100644 quest.cpp create mode 100644 quest.h create mode 100644 ranged_weapon.cpp create mode 100644 ranged_weapon.h create mode 100644 replay_view.h create mode 100644 shortest_path.cpp create mode 100644 shortest_path.h create mode 100644 skill.cpp create mode 100644 skill.h create mode 100644 square.cpp create mode 100644 square.h create mode 100644 square_factory.cpp create mode 100644 square_factory.h create mode 100644 stdafx.h create mode 100644 task.cpp create mode 100644 task.h create mode 100644 test.cpp create mode 100644 time_queue.cpp create mode 100644 time_queue.h create mode 100644 timer_var.h create mode 100644 town_names.txt create mode 100644 tribe.cpp create mode 100644 tribe.h create mode 100644 trigger.cpp create mode 100644 trigger.h create mode 100644 typodermic license agreement.pdf create mode 100644 util.cpp create mode 100644 util.h create mode 100644 view.cpp create mode 100644 view.h create mode 100644 view_index.cpp create mode 100644 view_index.h create mode 100644 view_object.cpp create mode 100644 view_object.h create mode 100644 village_control.cpp create mode 100644 village_control.h create mode 100644 window_view.cpp create mode 100644 window_view.h create mode 100644 world.txt diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..a3fd6648b --- /dev/null +++ b/Makefile @@ -0,0 +1,93 @@ + + +CC = new-g++ +LD = new-g++ +CFLAGS = -Wall -std=c++0x -Wno-sign-compare -Wno-unused-variable -Wl,-rpath=. + +CMD:=$(shell rm -f zagadka) + +ifdef DATA_DIR + CFLAGS += -DDATA_DIR=\"$(DATA_DIR)\" +endif + +ifdef OPT +GFLAG = -O3 -DRELEASE +else +GFLAG = -g +endif + +ifndef OPTFLAGS + OPTFLAGS = -static-libstdc++ ${GFLAG} +endif + +ifdef OPT +OBJDIR = obj-opt +else +OBJDIR = obj +endif + +NAME = zagadka + +ROOT = ./ +TOROOT = ./../ +IPATH = -I. -I./extern + +CFLAGS += $(IPATH) + +SRCS = time_queue.cpp level.cpp model.cpp square.cpp util.cpp monster.cpp square_factory.cpp view.cpp creature.cpp message_buffer.cpp item_factory.cpp item.cpp inventory.cpp debug.cpp player.cpp window_view.cpp field_of_view.cpp view_object.cpp creature_factory.cpp quest.cpp shortest_path.cpp effect.cpp equipment.cpp level_maker.cpp monster_ai.cpp attack.cpp attack.cpp tribe.cpp name_generator.cpp event.cpp location.cpp skill.cpp fire.cpp ranged_weapon.cpp action.cpp map_layout.cpp trigger.cpp map_memory.cpp view_index.cpp pantheon.cpp enemy_check.cpp collective.cpp collective_action.cpp task.cpp markov_chain.cpp controller.cpp village_control.cpp poison_gas.cpp minion_equipment.cpp + +#LIBS = -L/usr/lib/x86_64-linux-gnu `pkg-config --libs allegro-5.0 allegro_ttf-5.0 allegro_primitives-5.0 allegro_image-5.0` +LIBS = -L/usr/lib/x86_64-linux-gnu -lsfml-graphics -lsfml-window -lsfml-system ${LDFLAGS} + +ifdef debug + CFLAGS += -g + OBJDIR := ${addsuffix -d,$(OBJDIR)} + NAME := ${addsuffix -d,$(NAME)} +else + CFLAGS += $(OPTFLAGS) +endif + + +OBJS = $(addprefix $(OBJDIR)/,$(SRCS:.cpp=.o)) +DEPS = $(addprefix $(OBJDIR)/,$(SRCS:.cpp=.d)) + +############################################################################## + + +all: $(OBJDIR) $(NAME) + ctags --c++-kinds=+p --fields=+iaS --extra=+q *.h + +$(OBJDIR): + mkdir $(OBJDIR) + +stdafx.h.gch: stdafx.h $(wildcard *.h) + $(CC) -MMD $(CFLAGS) -c $< -o $@ + +ifndef OPT +PCH = stdafx.h.gch +endif + +$(OBJDIR)/%.o: %.cpp ${PCH} + $(CC) -MMD $(CFLAGS) -c $< -o $@ + +$(NAME): $(OBJS) $(OBJDIR)/main.o + $(LD) $(CFLAGS) -o $@ $^ $(LIBS) + +test: $(OBJS) $(OBJDIR)/test.o + $(LD) $(CFLAGS) -o $@ $^ $(LIBS) + +monkey: $(OBJS) $(OBJDIR)/monkey_test.o + $(LD) $(CFLAGS) -o $@ $^ $(LIBS) + +clean: + $(RM) $(OBJDIR)/*.o + $(RM) $(OBJDIR)/*.d + $(RM) log13* + $(RM) log.out + $(RM) $(OBJDIR)/test + $(RM) $(OBJDIR)-opt/*.o + $(RM) $(OBJDIR)-opt/*.d + $(RM) $(NAME) + $(RM) stdafx.h.gch + +-include $(DEPS) diff --git a/Makefile-win b/Makefile-win new file mode 100644 index 000000000..698325a5d --- /dev/null +++ b/Makefile-win @@ -0,0 +1,71 @@ + + +CC = g++ +LD = g++ +CFLAGS = -Wall -std=c++0x -Wno-sign-compare -Wno-unused-variable + +ifdef DATA_DIR + CFLAGS += -DDATA_DIR=\"$(DATA_DIR)\" +endif + +ifndef OPTFLAGS + OPTFLAGS = -Winvalid-pch -static-libstdc++ -static -DSFML_STATIC -DWINDOWS -DRELEASE -O3 +endif + +OBJDIR = obj +NAME = zagadka + +ROOT = ./ +TOROOT = ./../ +IPATH = -I. -I./extern + +CFLAGS += $(IPATH) + +SRCS = time_queue.cpp level.cpp model.cpp square.cpp util.cpp monster.cpp square_factory.cpp view.cpp creature.cpp message_buffer.cpp item_factory.cpp item.cpp inventory.cpp debug.cpp player.cpp window_view.cpp field_of_view.cpp view_object.cpp creature_factory.cpp quest.cpp shortest_path.cpp effect.cpp equipment.cpp level_maker.cpp monster_ai.cpp attack.cpp attack.cpp tribe.cpp name_generator.cpp event.cpp location.cpp skill.cpp fire.cpp ranged_weapon.cpp action.cpp map_layout.cpp trigger.cpp map_memory.cpp view_index.cpp pantheon.cpp enemy_check.cpp collective.cpp collective_action.cpp task.cpp markov_chain.cpp controller.cpp village_control.cpp poison_gas.cpp minion_equipment.cpp + +LIBS = -lsfml-graphics-s -lsfml-window-s -lsfml-system-s -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lole32 -ldinput -lddraw -ldxguid -lwinmm -ldsound -lpsapi -lgdiplus -lshlwapi -luuid -lfreetype-2.4.8-static-md -lopengl32 -lglu32 + + + +ifdef debug + CFLAGS += -g + OBJDIR := ${addsuffix -d,$(OBJDIR)} + NAME := ${addsuffix -d,$(NAME)} +else + CFLAGS += $(OPTFLAGS) +endif + + +OBJS = $(addprefix $(OBJDIR)/,$(SRCS:.cpp=.o)) +DEPS = $(addprefix $(OBJDIR)/,$(SRCS:.cpp=.d)) + +############################################################################## + +all: $(OBJDIR) $(NAME) + ctags --c++-kinds=+p --fields=+iaS --extra=+q *.h + +$(OBJDIR): + mkdir $(OBJDIR) + +stdafx.h.gch: stdafx.h $(wildcard *.h) + $(CC) -MMD $(CFLAGS) -c $< -o $@ + +$(OBJDIR)/%.o: %.cpp stdafx.h.gch + $(CC) -MMD $(CFLAGS) -c $< -o $@ + +$(NAME): $(OBJS) $(OBJDIR)/main.o + $(LD) $(CFLAGS) -o $@ $^ $(LIBS) + +test: $(OBJS) $(OBJDIR)/test.o + $(LD) $(CFLAGS) -o $@ $^ $(LIBS) + +monkey: $(OBJS) $(OBJDIR)/monkey_test.o + $(LD) $(CFLAGS) -o $@ $^ $(LIBS) + +clean: + $(RM) $(OBJDIR)/*.o + $(RM) $(OBJDIR)/*.d + $(RM) $(NAME) + $(RM) stdafx.h.gch + +-include $(DEPS) diff --git a/Symbola.ttf b/Symbola.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a49cc68b2cd7eab361e4d035ea44cdbc903f6a49 GIT binary patch literal 2185220 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

^?R@+4_&JtX;o55bEpnO*T)momGgU~*SZX@O!a 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%0AY$SKijtz? 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%0Ab*FZtTz;UH{}l2O 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 o&?6{ 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∋z2W*;^rROxcCtA_n}n(^9u3`MqMx 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

OkDIZ+~$;HX84;_K+s-l#l<9;@A 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

00GxIJFRS8{lv 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 z z9(8S5Eoq6Ph%47>m^S>@gdDhH^yJjzbA97CTy-dx7&>tW)DLaCg?T$&RnBdFFs4WM z_ipVyu56L|fa%zr9xPN2&0ngw4)$fWcrM=uUshsib}l;nC;Lv?M{Hq8gS~#J&gZyb z%$m&Y){~#?OodV5FhI=)L(t2@YROVqkqfa`s}dXs+WSI0K%k|{mjNoKb=HQpsQBMK z%3xGH9**v&m3-&Fc%BYm=^_*@p@v{$>ii=Q=Z8oYMGaxArf3S9n&cH~B+Y3-y7M6o zzG0I>pgddcJjhBB2CzqOl>04Ni*ytqK8W;W3}s6^K|pPG>O*-W1+vE3ot9%MnnYcr z8%dPhAvvhnov*4{jibW~b*GRF%hh46^RtZ9CtB3eWWHc%q0R^U zB+MRGkkynL?3EOoA@U~4Cx4oMnfod7$&dEjg^Ke}^*jeOHB$NEXOKW&rC7*@Rg40- zCy~ZBHn6&!FST_ALs-X*b>W1FEs(B#~?UAKbd6*e18!z<94vRfq^pe_z4B z1fB6S6xSIrZo1KI!?*6ERX#{a^?2Bs~^1fjZd?;G)`Q#jjfJJQ$I4V zuAP<-UB3Uak4*k}AGIKb2Cv(cYEKOw*h5FWsaE>ni<@3KIkjn9#wm=s`?lA&{NJg@ z4b$eJmK^@clWamPvg|Ea1@qNL7Ufig0t$GGpS5AJ!fkEURCh3dO#y(^KmZ=NfT<|o z3|@6(l+=0Psknjib78Sw?R@CMh!|vJ{a+`SbUxxns2awCrt#tIfqSHoA&H_qLFSN!u_q6Y<`&ovw^cLZe>OP;e7+yY4OVxqf64 zzWD9|e?6@q@Fy(#fM@A`66Y~-U=TkuuAHLCcg%Sh*!|hmxedj)Uw*Ia5CzeCiiw74DOa=JF&Ok=ihR;zm3$RTOZnE4R zuEf=BS>RfjX6d-#sTM!PDHT#vL9EMOfUQJ%DN|EGM8)X5y~UQE>|8k@GNFXT#W~e6 z0!59=9Asf;`*+FC|IR4Cj!b&NnU(>ZvL*s^vu}!)!WU;7;2_OmPg)p)t+?y z9j(WsO?ijrd}TrmT5>kjV8iLD{Siv3IG0T3lhK5M>_)>V>q*$kl6}g~h%p>_zH>!B zk|+-q)SFR%KGbB~A|s&4nSJ}sYGJ4>+mXCl(TuV~D@DNz(7@_K*f?{=d**_cHZO&X z<7eG%lTPRIW7XJzt_9uccBJ%Z*!v^u(8YGfmWQuhJv`%td-FX6r1E;h_}9rdVqQp^$hUfUZ6e-1eA1vtOVcsMn1?2 z^%p>QS$37$_WCL!e>YZlm&M^!0jmK^5yvuQLHoRb@HH2XE^ztuMMVi-H{owSW;d(a8TMJfao>9!x62j$gYTcjPV zRiFB-b5m%7Sd4_Pl6XdFz{Er62i1@(iUk2mt^bWIP+VRoE0zQ>dTC$7Cmt}+1-S5< z2u&eq5B?3%9MQA^7}+Q~4XT(Hpx=|83mXOmj7pdPk{!fM;WJgiA-yjYNnoN+3JF!g z5b@{(zIG$L{Xrvp)=3%&q3wsdkPLNrCrQ{ODC!%3^Ed2>n&*xNtCyhKiNr4pyvz4v z6^Dx`)}Jv`3SQbEzx@Z&;w6j3K)lk zyY>V>UH}Y}r6^KN3_0v&?@p!a!91JZbnQ8#v`f}l<&N?5!A*QT^sX{u4TIFb2jUzj z#JT>14|XhepEFnrA!sz4ObkG;$ui>FRlQ8l_}Vqw=xgkPTG!+BD0D2x0+ON%Y!QaHGsld8a;$g>uCr?lk-!(k*?1w31{%-Kdi2h#Vk!Ofehwz+5;v*rL)Q9bZ8 ziB**(2QztJnLqLA;8{U|$yc`{GVGKppDG`itjUlv5K~YM;P14_IY0Wp?IOiB>tcbMZ)jKdQ@(FVoxK#j4*zS=#OPp%2~R z&C2}lTxKD&&})tIi9?xr>RWQJXHdgU#wiMANGm-Euzyp-^u_)oI@SN;=K#s^to@`IUN|=O2fEPBnGfWKrLW z9)xM3r^of>?ay()>q#O1Zxgabj#JknX77JfKc{|0{WopUVZ?Ix(M@`i-a>Ds_tJ;y z%OJsY%h5OaqSxzgPD%we@`^+4v@b1|9q<@x(P%|^4tILBkH>0 z6h65{e;q%FgGg5-XM}VE14Txo`*`@_s}kJ-`x~PO9^exh4v^S`^FGdn0rN76ox#LrG zB+a31VuvOcP;wh=zHWuib)N`iAI)Rf@n}$7x~fW-@Deo#{j8FZbK>g3X?R=s4#TIP z3a{79e-yG1C6k`#1&_Je=G%Go-!8l;BoJs*Iwl^H&EDBPm)Xz{78`&hC3ph?Bp{Nn5fYb_3_b5*f zF}k23`aH~q^Wm1rQB$w~i?!Vi8zq?=HCJAUG~A;sf233z;G%gHSfKBT{k&$_#g)b! zlsc5%l{&j=ElXt?K{q{^4TS!PYT#*sPY!pZ#=;&EQ-^qC(6+69Dyyh{Lqk$lP(zzF zgnAD(`bOOBkwlm&*(YT#!cB~~Bv-eFP_EOED(4cL>qx@ie9z^tyJJgjX!}Jmi;MAHm?}{P>-`_Eo#SAh5fDAgFcU%LETE+pb-^qxe zOfiggM`Z(i8@5xe^Ajp?NbXY+W>CGJHDUv<7UO}G7O(4xZ~b+AYz}_-+({aK4(&>0#Si}rR(Lv<&>lKUOb-U3zZ2p8@N|CKgsxlkZLw3-O2tt;H zVTYq4oEeNDA$=sGDm!)&%p_ zWIBJscus_h2C2{Dd=&VE<)8#~)C4Ofbv8utaR;^^!i(O@ei?a;FT>vRYoG^?0Y85? zIMP+rd#FDJ63M5iFH>KozD@lz^+W2X)GvXc|6g5gnoz(lY6jsf8>Am}$hQ)KdJ)P< zWJ^#mpDJze3IDIpCrD(|YZtaWUk(OOz|Ojl1l1Ku*BK3HH6iB2E!c&##~r#tCa5Oa zh(-;%GBoKlF?U%A^^x8&?W-+!d#0eF{l>w81}!1ckehJ^}M& zy{{s6ms9aDO})n(ht&{9*psbf1)rBvHz{gMqOECO=*f`cusluRl^D zLHVJLfC2bi&o^zs9SSYtH7FGiECSdA{%5x7;r4_@AY%wfEO3T=nbH?|)ZiRSO6 z2$eS@6t7jK%=~>+Uz*m%%UPMtJ&+p$9mptBHk?T=ot2$RbfE24;5Sl&4m=i2!LdyG zAbNu&WHC53x_{Ftdo$0NF-cZRSxX4C14S6!SFaS5NWkJ;W06X1Lva;ph+*T`QvHZ3 z$<&`)>lxIeQ~-6Fd4?K>gZw)jLKkEauAEEse#eX@5fYspY0X;@62p|yJ9R6?t^|@w zU&f6al%ZU>@%2`SF&mA3M&Tnf;kXlKBqNDZHX1@kI6R67d5>Fr01GdfP3{gDcEGTh z0i-(Xqq<~X9*y4KbZxm^+&O5Nid|}LqW|$zhN$tu@yZVF*ogaW#b^(|ni&*-0vCDp zu!-=UGJ`cJHlbBB;k9W63CuQI6zOxi7zLD@;$~yWBGYb0_=*{z6H#cMAw@RE6mv9I z2u31DI3T~X_gSjNX>8|ZPBa2K{4;7q7xx}?;DDIhX{1N44XBx0Gszp13h>>%Uc`RJ zGnv>QT|PNHds5+KA(F7f**mUWjUs&S);DAgh7qh<%0!*|=)&V7v0$f23rUIfBM;xM6oNP`u5#Ur_`!{F* z`Rrn_n3)HjlgUk$qNje`{)yqGQK&VQ*{ZdXly-7df?;2U;(-7$54g=zgZfp?QWFC& zg_?T~0}vwR>ITOaR)2LSwKTH(8GGdDSn5hSwxczE>1>MPZ~sJnEf-d)evMV-?78uP z@qESne|G%2_c?Ho?hhr;C&jcReaJ$nKApN_xNq(AyU`4YT6KMTLXKgpwx8Pa%_jAWQmBK-e(HNU z`ky=ZkKQ2IoyX|O-*#e9=I&tm&TOMO&AOaCIW)x3p^jaPQa_6h1;?jvlBWAKaem^a zm8a5kvISTjU?bZ$^;sno9iQ0Ie)%eHG5+BYum1X9MNvF`f9GHN4vOslty`~9wv{61 zy$YM^)aahrbfdBMn@oc07*2;yt$m*Qqv@Ljq4S=#XFkD1SgG?MM?W$;wq^W^#44ab z2WP5Pw!_k5xzGVh7kN*ACfvvUs3*~Lq32HcLr5(Gl(O=N7Vk-*$(w4zD2$CzV6$$z z?I0KvVLk}VB5?@hZQ{Fs4tbO0H%uHDe}5lT5W*FG3p4CJzH)|_OB(Pjykwt^k@tjm zMoxroK-iE#xG8!-zH`LyPu?XOBzPD8R~U5234S~Txwmj13$K)HilN#ME3N5){{Ggy zJFE``I}cT)fjz_YOs2K)wvn$b?tibASX|h_KX~@V#@eq?rXhI6@t2wa7x>)RVYTlWl>6w&%I^_LtX3}tC+)x0a*H{a2;dF6lKUzh}Px zG4YjPaq|B&KEC$Nfxz@lw>iZV*QOS@AN61I{!er6GtYEB<;8NV2lk(7zKM-<)Q>uY z5Qo0^yS+R1XL5U%R_9PQB=gv3x4q9P&d%-K<|H2e^R-_|hRu846^B1N)~2b$S5A3$ zoeLxmY3bD1ncEiLvN}OIQ^WfUjRKRa^7N-c&6V>ZwS7T-b$8+GLx%&-_anrj}4m=mXSWQGW{!{oknH z(8L>t*NlZ!2XpSOQq(pD8$}=v$-X910r~81UBn>&#gimBOob*^>iQBStG4aO-EXXW zh(6f&dtI9F{jRHv>~Dc3`)_<*(Q6k{}|_YY$4Ccikgs_qAsy zg39_{zl((WkPF>BHj|^M zP&BIn7<%k3AQb0NsYZ8MN!Mm6Clqekbf&KY*s(xDvkQP!nOR)*225_&tx1MtML$A^ zD+Bvd_q)9-Zbk9b0mNoB0Smw5aMH~5tyJiM90EwfZ@;dqs>PTO(J-4T5h~A7E(*_7 z*lI0vnG`UiA}trQ0p}P!ow2y_k91!6z~y&cX%u)tveIr}@9JK~px6Xo8y4LDk5do- z^;;gk=onkwWWPPgIQQM>&?^JgMat|i)vA?R#|=}1iK4w6bl&iw#tK|&d1#t-2FpX0 z%Ft)a)uC*0p#KSedTjE_F_&Jta2wO1fjt%fjHwH}EbA1D2y?Bl%XHuc`i01htzKyk zZ2IO6cTk^iotc_Clz=z!yg6&qW7Wu5>?^U+zQbOgvg>Wy9)e$0Ll_RU${lYxH@66JtmetPIbHw&PI`9~P6S;~^P=Fkej%@?NY^9x_JM zz55K?j?LXYc=X1R6U!(*Tz&KhR3|;>xcNbK>^g*0AwVZ`Cmd8m_eWdEu@(hnTJs_9 zz)1^`M=3^9PX~d09SxXbf3U>S#aghSv2InUn21H^-{mHlaKWtDuM0Ly0FMK|aP)}`Wq*(JHkLy&4tW!cY2z?}kkZH7u-bSeJ z`UX-&R=1z-=MzqWP>t@lbsFZQ=cCmo0Cx%LA;&=^2?6oj2TgKoer0Rlw&>PD@yH1v zy@b%M-+>Th+^YLY$d+&9Bm@|GE_#d$y17N9H_#o4YK!;@Bv0c;CeHw>TBwoUcAtU_Nkbq`-|pa$;~s)W0qsc?JRT3_^P}z~`Cl;z zek~26u_B=f_e}Z(2jN{sCugEs9AAWnOx8LS@ zcHZJ6yfJKje>o%%2uOn(wpE9ZP@*gZb%nZlZgnV1)y>XV!pPj5PgOc^m4ckfi54Tq zui@I)Mh(fRt&B(tEsODVnX&a?wdv7KV(PI>1=KI}x_}j=lTb+L?K`$1luiYvu7w=k zpc6=j(!!Wq+%++GmXaTlU13-+uCaoEAc$kgx3bJ^=RGCG%QqNqb;s(C&uOt}BA-u` zo|?Y%_z~)?#hTmWfC(!yf6-ScElo`#N$Zvnpe_`NGbY;QdkZwPsl-ue>l?+Rdj?tH zJ|6pcsyCgUwIXxvwSSeHJU1?4@7P&(o*uN-sV%E|Haysu{Rir*P~FN*@L{L-s@iTR zpH3S^V0O_dDb7b7DHe=|$`Y>{VKp)MxP@{y)+NNzkzm{}&D4W-h0%0xf|aw92Sr^_ zxLAn#>b18-`lI7d^%whg-rej(Q!|L~6o=_a(}{8tjYD6s*n%* zu}_aNU*mq>lj-T}Y4l9?Tm?__Ej{-E4f0XQ{qN{zAroL1f2Fm7f@k|ufiK9^Q&_@; zg!qXWz7UU~2Xee^60yqvM(p%t87GyATizPk2FdTm#7I=NtE>yw-DOX{3G zx3b-pL%n_M3o}l!y?=D-18jVR)tuaiUG1)(S2dC*!9P8wJhNeiI9g|4_u=)d6joWYl0eTfqEoNx;dupfAt zpt^3odw0ORz+ez$JXyINFu2efuWiFd1SVC7r_a`4oFmz6$c5b9U5_qI)b?H1t(;i zZPHtCBU0W4e@S2k(jZ7DFeoI1piS(?X-yzqrXA$sAuT$QX-yRpe|`$g#fj8+vE1fKei18 z;$B&p)mxgz{L+=fHNIV^CGRJlK~4^a6c0|rh-rJ7OJqyu7(}~SBv2}Z>s@3+G8~}9 zPzyM~Qf*Znmp8HV@VOgF-qXrCT>+-AZYS?td6Oh3qh{w;)!{U|H$Ey$CM`fV%fi^n zrwu)=7Z`R5{xYqG)IU~_qRu+(YG8jX03t0-7t01iBj69AP<Mj(+94ssbzvy`%~p0DM`7O3$bc&ByZyNz&Dj zDGmsn<5e{3a{|0*B7MkYd533Ro`3Z}mRP-R3pqM10XsachLybXMYX1AEF^ppuxcX3 z3YH+twnF%~`7esX4SQime@9N#193f^R>bqHdkW48*7O{JH=F=qrZIa z%}he4Ztc8Nrr5VIlr9w#iR@zMJ;PVf)RC+I>IZq3wYf5)?fV&P?Ty^5fY_~s;QpNY zTiQhFHdZR*HNXZOa^n*M1N&YO5y7;?xQI0lupy4;0xHl#WZDzP#)>q%SLU@Q0D6Q% z#`5|gl?d@WSKf-U^@WT^-2w16U5g|q@pc4J9Cf9&wr^?=JOqR6;3YX@bA0y46Qcv2)=$N=_7rGg&`Q#_m00NNG&m>7?^)o_`} z;ymc**Mz&cclAWUE9Ng<=M=T7L@qDk{o@A`rOhJPfgx^=29y&zKK2iz_k~S zDN9YYD6smW@7AwDr0z~3r^*M0ZjNu-(x0C;Z$I(HR9j|#blWp)KYRC?;_80xx*MPR z(*4{Y(-->o?0NT@&*}SC-~30CnE3Jk3k#i}mpY41k=n(Zg-usHdj4Adl847`vwEjH ze>T$j;o!btFy<(IC?6-7_iP=%@6I<&oL?OZZV5z^%+~wQUwcp*MQuZQ-&aSDurhx} zojcJgChsjbO?^XxY&2{Djwg-NOiAq}Yc^|&vYO?uLj9l1k!Se;yNp?>8hC32fixbck^8JYM%LSM2 zvQAuvCSZU9OT&D`cL%$=Y|&?&q)Az`d0mHT~qxg69 z+g!gv_bB=7?&$WZdspQAb#I07Bw8U+DwBj)7rL(;5aJtJC%T7mB;0G5j==2v9Wph_WN_!2cI<3BC-9h-v;Ck$O1%Ab`ju+{$Si7 zTol?w0`b2i6VUH5`9Ti(BLQh0dtpT7Uo#QpF|m=X-3@_){Dhl}@S=n`1iS(LCZcdf zghIe1q_Y{mh`N!EkW!5_L-op%3giKxBk&=wUmVacEgB%{dj5Qru@$0O3Q@sC#lV=# zQuLI!K$7tjOoNq~ULZBFQgKqyG!%4UB6A3SWDugLBee_luk05bTEsUK7h(m7R%1COi(rLh{Q#} z07OX;Mrg~hDJ{s+WsQj-k%pxhEsVT?EG_VeVS|4XdHPnIV^QB!@=Tcugoh2>mKl`+ z&(})>1|wEv8D2)npB@0%tbp9L5EIsII;!JQ!ZqMMX#q;(v?!gh2tWX?)~u)kFcI0J z`&|e{bQ%+wuN5N)qu7jh$Rx3#EIOo8Q^&V)>e_zumfhw zvMR+Gxeh=KUbaF-ROUpYj>Qc_0#lJOLmO<6L8=rGM+z1j0jE@0)ljD zyd{BWNd;8~mQ9Z1UBMVwWqaL}!y!1*#I1Bnv2Z~w0=#Q##)vhPoJ-6Qd`MTIq|*iv zCQ^18;I1rCNsN%Kqm)k;NaDd+K(VHt{r_2e4=_23;}7(D zdS-g!=6rj58}4>5>T*z)P|i7^git~t1c)FIK_ZBpWH8Yt+9pS13?^9^V{E|22Agcs zAB+PA2b|z;{C?dtdwUYX_V?ZsAA7qq9jdDXSSL zQfdT}fo08R!&LjX>EErJp&==)VoSL5XH?fE0>OGiPN=oAg=Ce@3iH?K2%u1FV-JSG zdDA9JTn*NRrzi?g8HfZGIjqP9hA1#KX}vRLq;XQ7lX2HD-DMQ|r3PQNHjoVFCB>gz zJ(oTa>YJcShnUHtU-8p$T?nQTd@KW2tSy$4lvFE1ph&N(nmHP`?IW^oXL2UCX}d-! za&0y9N&b{CB?WU>%i}_$rD#pdHB(C|YgBVYT$bu!X2)x48iH%h7F}*>QhpKrl~Eno zY5HsZM}*);lphQ4^0*HhF>MG2SBffiI?jZojGxGUjTJ%&nXkt6pV!5#xEhs18LUlV z@7kehp<2U-P%SiCWNHj?#wUjl?p8J2Akbk($_O8CuzCbBVId;|^S~xQPIWLp!k5Ee zHhp1@V$QKUSWCakw76Wd?Q|B-wbg(1aeC~uPC%M=Ej&7yA48RZr9};2uTM$$Pd-x( zo*@&T888r%zg~xdi`eV6NK$Ns5ZlB~X)XSMDOvIE7%2o)IL_kmJJey6#+KN$xQS5o zvOnij)Z$zplc!5L#9M>M+z8vQPPVBfILa=lWjV3~spX@x(`uR;`9Taj@ENmR2@JlR z=|}2N|7cylB^v8I)a>@1W!Q+r{TDhFA%ebdc1|ElYVA>e+T7Q+I-4zpX2Rq3R+g#u zBh8)}XZ5}gk!RpM_PS~#I(n?C0Xw#{s^(WMsyd`G^r z%}x1y`zRY>4Z<1+F?wnMLhubDepLW-nN$PiIY;kT)2j?fv zDh+>&aU^qhgG5$GL0& z`9S^PhriXv2BRVWNTok?UR!HtVV5-6N#oei`SE6F23@a>j)ww)iLfDc*pO$ax50n8 z9Xn?IRb#3qU`J(h)iubSQjUcJ-On|wSPXF8J@g$37R0WWtM~Cq>JgQyRA5RDA(RVB zSG zZzIF2qTY7ZMUO-qcU<-2X-}SWMaoVszi7;3qsOctIb+67m2_HUqV#(0*gMuQm;v_> z=SXL;{h}!+uRB=^I8TJ{bKY!sKD*G*)}hnXq+)onh|YXf3j9*IG=ts(bdz^8L{S+rYWUpOR78FKVk9g z>2z}Km>+G8t|mq()HOX+*!{%gXNU7MI4hAmi%uimkw_#yj!{p^(z3}SXH}5)TynzVtq2-HD3OB5sV~n5QduSgi*pZB? z997fXF?;E_bH~UG8dILHYR0OvSJ2b6s+m;_ktJ<2vKt>=wH@(om6 zbuQ$`RaIZBx}oa!s=MKl@qL^Ly;$`s;-bG>^@plYhp4a0rM@pxgh+$N%~?#jM+rz9 z6a~HE#GTO+Q$UR%1FFRPdg^oV4$g^XDToM`C4yN)1jYEK8!t*hsBj0zNlK|6`G;Iu zB=zx955oyaSP>Q`XbcrfJxW|Dv7on5#sN;e#1Oupzw_3;g7`=qqVtG&7qpMF#tI3QPD$5W6SNaufFD77&esFCvLy}+0)u>BbBIbJ#zEp4Nn&o z^0AzMZtbXTC)8)!$C|}dS5wo$%g!W+pSma%UwqsZqsS!Zx8`Y?KJ8=Y^EaBD2b{^y z1GrT63}jJT?RXaOYb{;#ckb5xW}_LJxbWJ4zCxzo>zwxld3K3pFP#FHo1fiD91{#Yt$9T zkzedS;|8ThdaZqZW3Mu5eL5Z){M$OJXA=JPKK2LG`E9b_UtPyeJ2f7nJMY=!{A2YD z+|mE$Kf{rDI@!^*w`pxh=O~0?roAU`35PiB(UL`kIBP#IggonHtwyzWeSo-#_t@UPaXEyXII?pocF^G z&b=FPBVW}>aMHit>gkAdIUR~!n=NG{g?_sGk+59qyv94=WXXABXxZ!b>ryLLu{A_2Vuw3L ziH2~e!c8Wwb`?Z3d?|}DaF9i0A+cA0#ud?(+a<&58NIp7`ZDw`gd!#kS3T{n+QG>9 z=sbQOf$d~8;Q=ffg98^l8~M_j_awe?I0Q#xH~^CG2LPGw@WfY)iYG+C=6;HXRFPn+g#r8DNq|le&RWxJan2VaijCum~|&455bSCgQ~~9r#n8 z&Clif<&vNH8hWrmXl-tj-&k;0yldpN%*=yY6n{Y+eK3+@tqp5sXoC3ocpcJO2Bf;t zskUOYMWZLhdk-cj&ALEJS2tx_kWt7~;<$`3YTo!muV}X~si~<*}y?`alNYfNH9p`mLubh{!|3FV>T9&MP?fa6k9Zq;`5y8#q)mX zKM@h@`ddr0s;#m9PKv!X^08v~<_cI*MFRd*{%?^e9ErnvUZZn$W29!;M$xcLQWN*n z5P~rxGF!=*lfkMuF)1Nw(jBe+4RunDKV7Fv*}|-z6?WK6#Sc%mEe|55wXCk{M&{U{ zZ0HL#JFY|hWqPNqs~J1GfBQQB*g*Qq=SvL-k-i;LPy5DGR-AI!!G~4n0_zY>-*^T# zli51`;M_bM;dU~mnHq66)|%F@`$jD_iVKqsu}$@JYRQV#@O(>-hHrCJ>JPSBJ~eB^ zzt*K?1L0Y-4sS%zn(*kpMb>mi;CXAQ@y3HEEl}9H>GiWUUvZp|&YYF1nb*{z)W}Mw zmP)l>*If6Civ8|Dy-nOa~ria&TU4tb^MG{dU2c9WgfL=gzm8k(ogw2O|Wvmh}9Coq1I z$=wR!OaOWx3x`&ZXZTO|1dB6`%kD#F9p6X8<{#e)awU&=1VisAC44T*!Vnuj*mLy6sW?M} z!2m%!)H1&D?P#%e3Q@sZ=1pKELXf#b69PuS3s^Ziup7vuHVMc*IVJ>&I5%?(@|WBn z1TDBeBYol|k`D-?J<3G$;^r@8C&!C;EM}AA!v#cmgQ6isy+G3#De#P67=x!LxNziC z9F5?%p1>(eU_%$LIljuGP@n@s+{Ls9gJ=ur#i6(-V0(CU4IJf_P*v;zx`gB+8-~2= zedo@41=E}k+=e|t+uMgtRy65u{_!n6zRieU-3V-4CJQedf#|MIDkhh=$|*w(jsuU2 zbNsuvB`Ht@#KC04D1dVpD0d3NJ)8n@Th3is#CzdO$QPXac62ZQ!Uy9<3gLgxSac^R&(9dvcW#A#XGm#l7WX_=PJbj6aXE0d*B#Gj8hS?Sz3%MJu0nKVPX?D&NU zgfU&eu*tYR!sJPbnxLJsS~f)LYDQRzNG>$tSuMOU9p5d@QdsC1xU6+7(lVjzCuzBG z`q-@}s-u}dSwFk0TTZmkjln^qu_wl=36f5Pu#tuUHZp=3g@d`X^mM`w9TH5BDa? zu4gkXHKeQ+A;{!(f9Rl~mR9vp8c`ButxYKfsx{p|vnAe6PVtxGy*2QZGs07Y%D@q; z$7X!B`Dpdx;`B&9iaS^BIt|H|oNQi57mOo|S@XmioY;k8>GlXYNmFK4lYYP1VlGL2 z?#xUm%j;RDzL=&`Zj1jAe{Qx9YusS38cb&!W7$lp1#wEV2wGIsZ8q*Wq&AQX(H27LC-_)+Upw!Nn$vX~gK!V)2e1pB|Pmw~3L-Nl~QYj-DQk{1~pAXGM@` zmPUf)==*Pp1vT=oW()Rlu$L^UZOk?d{HauG&5@-U5=_+~hN_J#8062b4I>T?j7*K2 zWLh&VJ6-D7v{Isq9iZ8^1)Uw$napmjt~Z?b7vjz7F~DzIOAH}`<5U}6ZJ%l?Gu7lx z%^GcK?w%T*i-X&i%`A~Eu-US%#$xB`hc7g=Cdmw@lQ;;0yQbE%$I6AHGvaAGHa9*x z!c!IMihOn;zl;TEAed!4vGUmDM!Y5^iog|=WUU(3t%t%qX{uzj&QN+vhN&T9j&Br; zH2RHpwPi52NbN+j#DHPgi4G&K)MflkH4FOs=|QOE;PHtr#cm{wB@qjxwzY12LS7fb zcBW+3EHz_(%kYOA$t%hzN~0-1?i2WWECd9}Mq);zu|R9i8zm(<9dVYz@O(tR9V18* znUG}Ftf}q^NK!Z)nHN!Wq`hwN)kF?Es#d5DF{DPp@prk^sds2BXD76xUN7m%^uQyv zBUoFjR?C~or%pLOE=L>Xd2*PHo$SYrpp;S*dTJ2#;c}d=WrMH4X?p144$?0-KtNj{#oTfu&;p+&vE4Iuy!6G&y%;| zn-7-%SLd0=Voc)8pKsbykPl1 zxb|ax(9Z1>w;I%&Xtmrjuf}y>xe`nQ*f_3{0wwCIXV<-xTL4hTIN#)MIj)N0yP+j+ zh?JK(=mrW6-M70Sl=Y)fZ`=tKF?}K>9`_zP%GJ{_AjAz2uCuv=3|_)~;4KQfgeyYN zH{KfpmV$87;X2+MXSoyXXK?k%_;8|;DBL@Qv4Kw<#tS>84`=Ybef9h{B5$7$TX@~T z+AA9oI1m-JptvL4T;ti;c}UJa=wFnNMX@~Pz`;$bTuy{q!npY@0Dka`R{3QJ*g&w~ z5Fy`%0xm(GJ%)_#{F(Tfhp!SZ$Sa|3@w^Y?5{^HZD}LBoFG9EiIR&*R%0rG|=$+X0 z>E;*Wd4y4{Zh?+k?vccOT|YW@oPe~ICWOo-|?4;y(_xg$0tu%l|^LEs1HJ)ImMVY zC0WnN`za$V`O~=6D>p1z*uP*|AQnsKtQqat4Xmr35Uo!ie9b0=rpvKFZZOUoi_t>H zdDr)wap5dZ99T`8UMH>+}r5O%{!soRT{TD7{>NE;=iBicMU z5=%`@vv3gyCBDX~v%<64a>ek?ntHym@=ao^kCvSG^!(`IkqK6l3FjaQ$BSfHv|Q_y3L3hlKYaN;*74$Fu9DKZ*C zN#mpF$Z*rP_OVGeM(*-2uF2;@*~QH@UB;{p9n%pF?vM#B6Q?do*QLxrOIK?LZlErY zurby7spD5KnZ9)L%B`PGj6~qIMDDM#lu?mVDx*5T>-AAx!Tq;-E!foBHf!dJ?r;uo;SO zVDV~?ZC)Np7Ic|eIb>ZUxU1>>rYU7p|EUdmLRftb{Db4wW-nqJhGe9pj$naa2>iN~ zjx}mzRc%+;tks%sEsd!O*7!ry0}}0T)hBeAeReK^I6h|My^&Ir-QtS|q|r^jF@_cT zQ%wWnndSNq<$2B7nJ!(2`yDuWk$tpyU z+Cp}a)ArXFkR(DGc#+qI4&l%Ef07@QwU;v z5q^(uJ`iXS;bX#O7Iy~K57^0&T7l@|XBto@?qL?z%v_m>gDnU`ycTcy2^W{}_)$6R z!igISq6fDUm)N{W6s?gUD+R-(r>m#PDAyBkE9vTuN8z~D7Zlz%z3~_>K5``)kM%^m zqFq6++j27;D8Bke44FK5mq%LWA~(u!FQ5X>d!qc#JzP+P&=re(WaaJYVs|t(l$sN% zmSTO=p}l#jA(}m8UAiWni|Vs_r!}S$ZIcIgq|^AF%%rPprnMw;xRX1lp;&57C0dKc zrrzdQOh#a(SCSCh^OLZF8uA@2JNSNLdk9JH^u5BzRdUR7(pA}{EWdF=&T}wE7X*EJA zWt`un;+ic@4EpR4@XXTTTF24%7`7M>ed7a%e8;8U4e^2+D`C(37!ibdu`<;A-E z&s%#pIJvq+cvE&FyeyM?Kyz}T#&wGdc?6jaCl#%9=BHOZmkVXZN*Y&%f<$h^bM}4 z&!ww#dEbK3#TgmI*Qn1`Bc5#$pSgNGa4zj=E7rF*H;yQkI$N7ZTE1ZOuSU(@kZi`f zrK4qIbMxolOLaQSZ$BOz_Dbpwa?*|JCDr-X6{{cXI&8w}wIdBM)cwvp@+Kn2rSkQ4 z`Ra78ZdxWoUSK(@1*6)MWDYqYme9fP*l?8~lSq+b?<0pPum*pq9h3_BLer(`T00~$VAC$kN2dno{cC`1SRQpYNIKd0r*26i=b!jV z*p|D9{72{NMC;VSKjNM%HdrO{Lp8K)Q(XT39a4B|jr6Dv?>SAI5J?0AQwOde=MSzq zv@@K({*3E&^Tr!b+W>BWFX@W!oyjJ6r9EJ?IG~J>ul-rIZCmQ z=PHj~Sl!=8<}C@|oM=~LOFyxahisj;ZSr*^kCVb7Qkaz6;yea#m*%;%N1kxVA=l2G z|FyMiPw1b$Y}HLG_x6lBc=f8DQ6GH%=4T5GUtOJFF{+Q+e1bj2m~rki$hi}rw{+Jb zL5enye`(?yzGVOL-x@PZZU~NFIJ?DPyVkjS#_FB3ryNqeWmg+LK719iyUozd#m=P* zM=M(M@{bX1)HkW+wWWivY`JvQacZ$ZgT%kw8sR(`L8v2g{3)lbI(F5{>#w-_`jsoU ztvLC#Z*JPUZpN&(j_~YnB|oiQK@G#08ZK^Ky3ilpBvp4hzq>T-le;fFao6aU&t6E3 z*!ot^nNr<1`q-=26{JtwntSZ(ZPtkOE6zCSh{KQDc_UwA@H3Rh*nn~){1uw3M&eff z!9&ttWwejf^W#1&6kJ3L(eH{pNOhP?Ol+p{=>_s}B#1v;yyCa`&z%T&&iE%AXrA@^ z#~z!}dDTnKD`e8@JKz4zDMt^S(-%MagC(~;G5@4fPXG0jTdnl-QdEu3*qnVpzlA8U;ij%}(N9W;@YXk>S8)UsLhnA29>@S|(4ozzEe z_yw6gmK=A@4VQlQ_r(W2|MMApzOn80y>Fj;(cF={Hy<`raW46}9LFhbwx%ZCTb$J6 z(o)ybIAJ9GVJzT@`~6vFLEs*O!v;^|AUp9%)N=7yABKKWDgEULwJmQL|6%9m%_q*7yJN?k83V_hxvT5y zvzKO9C%e`?dfwPmPyNc`<(FQ%VhKG)JH!r8PGqM}Si5YFIbrE@gCk4zBNFC{VAJw> z$E;mBb^9@Aa+>0IOuoyWS6&c4(qrHOvl^Z+r&V2m)$8rBLVi;9O4WyD+<{JpivZlp z<^hu#QY!G>WOqFV!in=joTT_N5WmIo8~=^XWBlY>w&Jy0W%v``#DRW`9)`cfk>K#3 z!#Yz?7F`ViGt^tGqtZ5ZN)Ox^Kr5>>58F?vr87pBZ>Og8Z9?6_0l?O9=+Z zg)PewgX^s3B`l`0f>O7q{I%{*U(^`{4I}bJ1nL z{q0vS%%^@i<$O(pi(UPcS=r8S(2x9bDrq#x0Y5x=lF~d3xpf4S11#K>Oq$MBda!PK zR}W(FTS{_VWBVBRhZ=ey-vJcSU@#ZVG3OC2lLuV+Twd|yW}F}f#v z@z%!a=kAzzS$*@KgLX`w=nPt$*IS9j&U@244(aQhn4B!x>iPhT+WxGhF_CC$&Av~J15^%K{P?31|6&>%BTVsEJw z8p*(o=MLcmGYP8~ZdLHygZ#6^lL`;*Sq)*yjq_4Lm8ek?)%Yi{#E(CORze+)M{KR| z4Gu7@U|Z?cW&Br%aWzHZrZeK?7}ThXRttCU$JrP z^WA+vI^yniYyNfHQC9Y-{1&7BD1YZMX>*Gtsn5-rd-nPx*7tTFwsqsQ{s)?Ww)p(6 z5AN%k_1>?ibtva=@nw$kZ#l}J+;+^-%}2!sjyUtowI{7T~zWjD-tgmW=MxO*-H5a#3)`2p&SDg+i{MD+jV?B6Z)gx6u ztoj)|hu*9D2pN_Jq057$n$(kaGKx$lbIB5dYq!{2JdK=7zJe^JH;b&=ZY;Fd$@}DE z>@`Y~CB>wy)FgEyQs;DOp~%H_jC3+GFAC@1JeZP!URK^wey99Z8HBJ8s?}<}+N$=c z6V+Mj5_PS*MLj{?rJk=|u3o3!s@|`DPyK=Vy!x{Gj{1A`Q`KP_3t|tbp0%-&Y!aKp zma#+G7Ip&L#m;A6VP9vru>05}?1$`U>{a$2`-uHrtI`ZDqGhxOty3GLP1WXWE4206 zR_%E0H0^BdQtcY;8`|C4L)w$tbK0-8x3%ACf7J$crki>cLA)FFE`6*%O<$m|)Hmu! z>pS$b^o#YY^qcfM^#}FG^=I^7=x^vB=%48SGPt1_F_K0Wfug#NamEy5o^i0T!Psh? zXq;hOXk2bwXWVMsZ#-)JzWp7D|KceBcrk<~J377#J9&zxw^GUu5~&DG`x z^JsI2d6s#xd8K)SdAoU!`LOu|^Lg`S^Bwc|=3mSK3zwy>lvQVqu==e@)*NfOwa(gX z9c!Ixon!5>uC=~t-D5p${lI$Odf9r%`h)d1>)*DH{g@iNV7J=+_C$M@y~ti;Z?=!I zPqug47usL7ueWcrc?6;_v8;sMfKzyW|ATv*mA_$ozH0@3dKwCyBvD$-n#%ovQcjeoGfT+AZ(6>ja;3M*w@SInxBoA157b-bnIb6EyI}l35XKis6z4jX)+*n`q<;yWRmO##H{L%^ ze1_VseB({98{^x-B$KP*RYpEfDN0Xp=XGuKOBk* z?7Yo=;-2GRS3{6V~l*+dQ0dSzV|Le0#dzBiMZivZ50boB+4;6^_X>H%eutCE`C=Q^%M8OPo=E=DO^;CH##PI(hVZS)4 zN*k4LUw}I{ZlDeetqDMOJ54QM<`G~70}&Q5rdMeT%KsPjBAtv4{-g0 zL(c=?!6kfzLqic<%^6l^AMna5m31CEq5KwckKkkbt47$QSBD07wLc&eyya$PIqp z9_j#a){h?WLhlA72q~iVdVlXRRoNzJXd$o03wnP^hWCUY>*OenvR2*=e!XsD-*H$w zi?Erh2P9=dxgYQEpS||?ATC=}bNVn84GkjUqb&MgFS^mR9`~>AjFI&K^KBAfs>;<~ zvHO82UT>4vZJ(*?x=+S$cNktXh-HOB9DI&l{+G=1I@qrx&Dn}e9oPrKfZdXpdk|l_ zA4KcC-_95hvmEuj>8DJ%Tlf@hk5}M6549x4A6T+H_#2esP?zVVSK~+nPzW_6{&}Ou zMhgC6D9*KB+Zd;qrVR+Yqxlql_YmHANwj?z|BHVJplYZ--jf(iJ?e9ES?9q@X7fTQ zKa&4N5A%^V0`Y$owuC>x1nw^Ps6}O_3pXM@xXazw+Fp)eM6cOc3z1+_sVIvmoF=gy%Khm%-JXfZ%@1|AAt>$1Xi+Lhw_-@DNK%A`5Hi~V#mh0)D(K$%BL@p@xnSY)qw^E~1aOdBTpV16w-k{20^(4gKjGt z`IbBWibyyd@bamYzUOuHIP>Gdz-(mjL*=K0On}7l&^fY<<_p0 zvG-!I3D>i1z#@&{y$(qVrj87PV_B#bopXsoB2l~_{8%&XfOb0L!Xi+n)bilT30}9u z1fGXJcLYOlp@7hiyLjsuIRDLgX^%J5O_1&APA4yV1wM>%hS>*1MHz|9Vq7>m*LeMs zmpwVtAWEugc{-dhe}I2Opnk)vBIr&G@D~1l2muOW?`ll8G4z1}54!ccw-<0S6~2^Cq2q=#tInWLmtpwNr^#~?GPl^1-$di{B(=SsELN0AA7K0nxx4~ z1XK`87xU5MZP~WiUnUDG0Q{T0%Inh98oYqZ&Shkm5rc)bno1~8l+hXBH44g&<^Edz47Cjh@Fh}_K3ZTMF3-y$+3~|l(hQ`cUky7ns&RS3kyqv+ zl0j@iEwCOrvJ4;Iy8i?<@*zoU$`X@abi?)AFF#@XOV9k^7bkAN^28gje|h)Cuf2BB z?sNzz;OsKA?l($dd?Hp55@s7$Q9O7%7HbMIH4NWmQ2?BUr;Aa=Z@9%a1Q-h#XM|D3 zT&<@dhSX1nJ=!QLpr~67?fy|baXyVQ!|f1_pX5Hd;4+IiI560Gp{Y@Yo1|?Z-e2fa_M+Y$8gKwox=!5T9?0=60wW z*p57F@gAH{k%KY77I6?*3C;Q$c>yVZv^ybD!)&*B`;@4?ShUSS3Nd^~Z;RdXHvw;e zRbbM2Mzpk8d=|wgnF+|lY@K+2hTmXOcE+&o+@k1|4{Wh$>VDC>Tj()?2AeWYC^paR=+RvRBmjtFBWsNS+iE+%0Bssi@~X zEBY#kw!{pwL&ZQZ5#7#a8iI>>gW+8ZXpJaBHQ{a+`LUQ;=O3bv)8P9q2g!+Lcma>| z57F*+T##XinkAJ4xp|`?CwRZODMwDUjUnQ4whEw57oVh>ucpZH0K#t^Y9NxMOAvz( zq3tk}9=4EKR1a`+4Y38{)14iVE~ag__&i!pQs=L@K?MqwkR%>P>Ay9G3t6y11w|DQ z5eiw5!-B{}|0p@#9o}(60|SwHut|psGT9(deTF-2w}I5ii{d$E9(_9lxSu7nR)J9G zWORsQUJ`H-BtC%yPGQcGg3xvfs;A@e3KQk*-3ORi92x_>}qkBUXkbNd$ zkIP)5ce^eLFkA+BP_%?Xm{qsvF#^RJIfj?QwR+Jbhb6=Y9}=UMT8E9pIb2Y-^uaJj zb5S(-u6X2fD4igFoFO{ehXvmgkNA*48G|2)UW;P1xB?k+uy5SO|b8V!qXI7eAVqv(IY31gc=S}{ymxNt)# zg7%GjMA<`upn#`7$jy9_=*mpfxmQv`8vS~J=rMKR$0!V0{4D?#X1r&Jy6u7^=}7Sk zeWFe0QvmO0@)-<4A%f14VkqA14Sq*-DB*%II&sk=wG1E8Jz^;2=UkjLfpJtnpGy}! zh!*EHn%3yX;rvKuiq5(4I9t#fJ5TVPD{I{0a-2XSi_c}^^B_4bOIHgavqg+y@L(Zg z)?i!+mGRziuI4cLnN$^$A-KPdV0~K9`KKUMvK-RHxl%|L5Umg=E=RhI>q;0g(d=ca zNlDqHXddYKwgA;RQgpW)vETxXhQ)Nd+Q*d#gYSt)=gn3}x^s)x!*I!yi%HGNS!H-I}+t)d%`20!(|Izq^ zL%v$RTYgG@OKDKHE4!6F@MyY0xkLGm@MwBf`B3?TO4M4lpmwUG)tTx-^$_(i^;mc^ zT?j9x@2hXBe}msrN%$*mV8^mE*d^>*b|br$-OJu#@3TQ@z6e%BleER!MtCNjrJW1E zr2Dm>YM<%0-lC7!SLmDdWA!ui^Yw4*-_zgG|Edpy_s1HGjCIB~;}qjO;|k+O;~rzL z@e|`$#{0&A88bV~+2#@EHuw--XkKOBY~E`=4)38qnSZmW<+s9Ci#63+Xl=7Dw!Q{W zq5G^yt)IY8=q>95>o3-4$dZ?}8|~xmQ|)u@tL>ZZJM2g7x9ksX$CvT-`40AN^_}cH z+jp7oI^S)+@A`h}`@r{i|3v?V{!9Ir`>*of;D5{iTmL`&PQV|i4Xg@m3tSXiiN< zB+rAHdl_USfMh z8WBHvM_%8e7S007J%~UZ2(gR1uI-}RJg(*fRD>8Q!yteb)j1@1!J)@3R#CuxiB?oG z&~Dt26>Vc=-Z(@!UhaC?OY?nj!t6pfD#FrZc%pOOXdmy|Ym;z<@MepMJ?kN_53b$< zAzlsOOH|;W;yF4~cm*6}6p^Z$#~%?x?@|OBMPvK{uK=%djyShocRa!YDZleDGXxrL z@giWE=w*MDm3zQTj&km!!Y}mlWTCtQo{2aaG1lIt;`SL2b0Uz!PyO&E(&tVNTtWKy zta>o_0sVZkVmw?3ipBbXXW{WXynlp(;UnZN^tr(C!tt1B#~ru}0-vNXZxJJmi#~7x zLBIh7@P5R!#RSqoh2k9#B*O6kD&nZ&MC4(Ah<^F-MA?1j1B4$1_}+|wB;65oc|FEl z0Dw>)We24=v{8O-oL_A&#rXdsl(U#TjzbTRd=MoLZj1@C=ifxZeJ~Bgi-J5pH%HuP ziMQZ(BHVpNFVS|lH4n;mF~I^rgzPW33wCh329kQ+CR}8T$NUvQaA&X&-h>!6|DVrW z2hh?XM#n)wtQBwU{3d~mOhF-nK5?}`(2(FeK{I8x;&;hQ?ffOb0)fHfH|GYA7Qyr$ zq(}!Ln&7g8^Bt!F-VJlv6EqliaofYGyuxR=*}#7bESB5whU}Kd<$3;+Lx_S=G%ETR zjc_PO^LZACr~vL>Sr>AFG`+9Ad9xc$%TmC;jXIk@wyf(y#%<>C@E<8cy_WAc_z3l%tN0dg+M@!oyN z8QrCHj~79>{5{(6#9Wu)UtkRk-3J{HAV9*yS{=e!NwmphrMLm_X zl1FoZ7EIRH$=gNz2MB4zx`g`zehQ55uYrdoC5IN1;L&4WSysB^A)S`xqr;6zT z_7ISBrHA3TgvB|tj0~=sD%wiSK?KP!1@vV}Gc-0nLKoft)ubsCB%gKOj*yN2gGu8l zMgWaULn6%`nHn#fFCHMEv-U~_UcPL{c)S7(iF6;p8uSG#TSd?;qIJaV;Bz7dJ4DzX znZcdMtx!E)XK!k@28$Meuzr-V+ zkl%;KxWW`zDHa5$^7-Y$a@c@81yL5IoZbYpaY-m@!%Tn_0M~SInHY}%RY0t0msdh5 zKG3pdjJ9Da;Kbib^wZ@iQw=G=~OZ8IFdNbUt-)5#ENlo%9}+$ zpgI0U@Qyn@E^uPWP(gQG2rhS4K<9lb6{zI4nHbms%|nlPE9wE0B+7eJ>yk4{acPZ4 zxmx4Q=_1&*B9OF0P=Z&bEYn@2xH5@<_T}9v07Gz=ujlyX%H6dB+#zyOEJan0G@&KG zU~nGL&g5XYwCFMn@6GL3C>M+ehCKQlJ}H7%d8d7Opt#ekUXj*XI>hW;RtbrCU_+imC`>9>$%*+ED0Y=)g-5VY>YxQpqtbY<(zWk88^7h02;k)EH*)?6c_L;(kbxd4l{u*z$bD0{tE{K)S*h z<5SxM!h?l|0&q9*CW|MU0E=f6a@NJHAR5{1bu+I%?bMgHZ2ZN} zU0`K!q_BS$5xtnnvgXs(2$JE*O)RQ}MA)Nb15kv@mBI-MvYZ~zXvZPuaNofeupUDx4=&BiwBz@Rm4J*XfqcTDe zAu2P|08~^_!io}87F&jCNjPqfst>6&ZmFq$g9iOX^2a`-gy||Udm+2Ety=+HDYDX%H+L)L^#m~u)darBOaZ<3F8F(hFznN-vi zih#s&K$feO(8JV1ZWSA&$|*9CN#2N1pQVsIan?)76BJXF_md{FO2e~yo!#2BusNaN@-L>3SUIh)~uq| z#NJ0`sTLTi*5tQ{M!vxv02uOa;2tPI%OKl}nz}y-w<+IGC3gTaaIg@WR)SJUO%Q=M ze_ZZ_H%?Gd&Xh?CaRP8qF-AZUVu^5=Mu45UA^4`y0-K{5NEgU#OIH~DjSy#A^4pU9 zpn+J=1zLxbOU;xm%TJ>wAq5Ti)D)Sd8BO~o5{kq^x}hi%=rgX!^7r8=hz!F-^Vtyz zPK=U9u8UYE6rdcph@{3FKuam-7YHD3!&yQO>XLR5JZp`S%iu>jFE3nYx*kms8LMsn(H$3c+5H2PxDp!&Az}m@N=0{8R$p z!J&)JC?fA*5_LEvN_kd?(W+8AZIhHNBAN5lMg##cnPLMPs>QYISSEq|UoyLLwP7%na4}Eye;zX&>?(Pz1&UacsvEX6SP093*=5W16B!YYQrM zWdV6Z(!QfeF(fY16@+fENRzV-QzR?8rCG?!1v#NA;7*DxR@S8wBQJ)iidYk@pfvg@ z;!uE?eV99@D26V6Mvw}D@LvS%Y@R~=p08c_bD#cukyh~D4Lt3w;CdZhC6g;$5 zgPTg+(7~*7J*~!|<%Pk7k|9XHln6mCF?lbHcielHYT-?0A-E8>BEw|h?@Ch-X79*_@35M(&)+xswSLYC_bG-s&EiCnSh1)tLgcM&M+9ibFUh8Mf5Ao zjH=c2bK7JFq)tF4ZBkIqQ$3uLGCqoQW2SA<5~Gs#As`vdx^f&IWRT;{NaP)szN<(8 z1kE5R70)i|L#7oA=c~Ul4$fO>iz<)Q za2a&~P4GTK^FN0Xs_@LnE2Jnl@wt=JVzw>Ql7rIKeDY#U3L`-$n3F-&G_q=4i$IX^ znc?v_i;~HzWs-<#wQ`6D2q7e`S+oEV7g&y*Tej>|G9VZkY@{S<+EkpqTnA}L$mHrE z#Ic3ckTOO^2hlZJ9_g%cj3qBqq=c!eiI$Yb$6+8HnS)#YpgSZRh2)leKAC3@i{PXT zYzUQt%#^G?pq%ZhF-t{qw;?r#+~%4~Ii4ERK@A#1@|OM882M0#SPp7xltH<={F*`p zM*=T2Qy!rdY!!J}2cPwnR}D0i7!I9o$DrE)AJGQZ%E(lM;E!DS(Md#?A^Rg!IW9C? zRg%sCBo-G#aU?^#o`wUmA)E2_3aPe`ZBDCU4|565$Bh)OrW|m-=JHkC`De1DlCY)nh2aMfzETFDdECQATyzRxc=NnRf3qHzHNW2%K*qjJ)|tt za)^%RtODbKGfZ?QqO{0$jc!`^Pw|&;B!|eONjC;xjGqh;`+GXHMokG?=iV4O%Saq0k!+<0Nhi(uoi`d!W-?++r?3d_qa(7v0hjpu@ zHM%-G1FC_}Cf`ydqQbwxK|1+hQp#wS6y?$~6-5+_T2QtSKU%L^WUAW8zyn}C1kp#Z zOeN$zm9l8+bofN7RzW)qtd>WP9S|uy6Xb&!-{A~{0Z`qtzv?FeR#yE9xx-Wa6cJ4k zcL=A|ARI6<)T2^Ff4dL|JH-_qmn__}fPcQ1hc3W;G+046oJNLVp1(& z1o(tN)nPD_E$21I6hbD<5|JOoBrfG$a0d??Tt$S0lg%e6t8Oh`UCqvS9n6zMH> zTeBeUWQKf%65{_rs&SJoi)#rgG=yBo7!9QnFDa#fI-tOuf1@UhFK)g_54jwI8#+47 zv{nhm3Zx)~-p@l7gqmSo#S%y#M{_}fWREf#eAfWsV2<{)c?Mv|aP!$T^;&svNH$d; zN4J6uBGAe35{@H#T5V8jSF#W|w1`U!0M3$F5fPyyOsVt9k>I~!pp$Ao3*d&J@h-%j zPC^!>YPCuTBquAeuf`CT%Fnp^%)$xQr@*m}GNs5GVD3U8bLPRd7p_^T)~pbi4q&n+ z;C2|I5>hQA4L34!2W8k7!r1}eadlvOONznG;jKDspP){Z!eT5aHwJvhQ?|pt4SC%jOM-# znulUmp`oaBF>DqSIML}HH{E#B6(^ne^0PnrdAozjp2=Z@ziSIWrKT{9tOz zC)R3OiXzoL?CQcIEKLZaFw=Au z=LMCTy8Qxl9<8>N#w?6sSy2p|9$b*51XV4YE;mC^$bMRo6fM6DvBZ2(H4q&BYF;-% zo#*thgbc1rG~2*RCxr_j2|21}kw1}{N{pIDL?&xEQm`VGV45Oz&mJ4nMb6SzC8$xX zM?mmC1Kb7eKoFdt7&Wq~SJN7ucTqzPJ>g8Ll@Z6DM&R73DM^)*K7SCnR%%_q&WC|( zYI1@89tKYU@zt?t4Jfu^Nbl;nDCLj9bTIr;$k@<)Gl97C(4^FdFUZ|~HuSzs{jes` z1-Mu?QZiYt1P!bRRfOJz*a9G`o~QTgai->I0gE(%<-`pYtLe0lY?Hxsuu)!3vxFuo zz5p`3`w`t9PZ5?)a*oDolVVw;gw(W2z{6qs4tNl^0+@;rrI>r*oTx^Ul2ef7tCohU z4a&4UH5JRb8(HuD5ppPnMIYF!$K-5B47p`xRYmeM+aIKQyaZ%nE=iLTffiP=h?Sj` z1xBovLzpT(_a?B4NrS@DwbD;uFFK2nQV7;;p{XDNre-6C)yZYte$^%OC4*nWlcWOq zrK+^6CZrf&>dHiC4Yr}dz=nP_6EqYY!MoQpYDvN5Ra560on}?tKFklHodwG5(9m{AR6cf`3CYhzbPBu*(sM@l3XHiJ2ki zr@9(MvLuB_Ap1uUeHjt=!-lT;2GkUi+5(swOJ-EpiYK8_E2koRscdFwa~)N)b`H}G zlL7;MFpJ5xWrW&~p$~M@@Nb4|S8YC(A_J6Yfq|uc20hD2QME~> zBmAlyU@ z0~pmys%odsf{|%jSTb7X;w;TBY(l;$&Blg>{JNml2GF^cAWIRDT9LF8Sq{%TJEG#6 z%V4iWgH{C9L2U*I0{cm8gSw{GDiQ2Pskn`p=fwAOB>?8+6QSR0HZ1^kd>NRW55hCd=C!^cjrC@6XY@#=oSl8WP9FM z#J`1!95@toVQNtt4Cz{Kp+CTLB+FPO- zNS%-q1!&VG-!uck2N{GUCdSOGpiM(d)8%|(vDu~7V6zU5GtTv-XFm<2`JrJD2(7GP z1|Gm&72LQ*R7-QD3|;_Jwq}tiTLWXO2FwCMR=45e8SF?Jqb%Yn3bh~^M$nJzUZ6)$ zOIhYHEtLsC4fE+9rlqil^`Eqqb0g;^1SCclY*tT^7m5aam@^1gT~U45M+G9u2SPik z8CN?EJZMXJ3VvDmS&l?QXKONZ3q%FCHs!bF(?MLXCZ zkogW5r00E*L=Zt-OT$82&(RyDASO@!o%aEgn$;ilWRkyIfCXF z`p_~`6@94U4hzyOD-^1>tPqt#Ss`i#I&iTWlgia5 zvcd?iO0iu>umb`84w{E8tU-wQ_84lMt4Uk7@0X|zbaf~hAM8*W)~lw5AqZ?~mL4;r z&cC2qVIBno(tDn=9k@V-{73?2`>EEYb)X7Zt2_-32n4Pztl)%o77qllf!#2qc(L}z z))v>i-VlfBUOmTk@8B$0?{E)R&2T-~%hb$o$#K{#cp8$)Ivq+lp*HxjUk)aTF6XnP zTOopdYvjujT6_5c^|f=%7nCzdNhoJ$6r^uSX{=L`WCCj_h&ZE!IS#|IzlLEgY9*k_ z(%?N9?6shT7*_Nwh!Fm;@CqEBZ$Yc8ws|tbz1ljgD|l`Yh9gI2P%dANGl8iwn4 zt!S0?yPmS*(%@x$&7|UDKkO{tR|i58$h9=e(I(o4wMHP38(|YdF@>rb#3>Ch{e8Yr zQxhSi(84V6(ps&G4FZci4Q@5{G`AUST!nF_n4IjH?px~_4?ZSLhi{Z%$|O|!%089@ ziHBUvLF3x`znKn@88983YgCGy^GYoiI~mwj1}s~(mXAYC8+>cqAHsSw7=ejYz@_M< z0vj`nD<+l=!2@E{^=e5qkoE&H{DXB!3B+Yy0CWXyq#M=LGWhNo!b{{*b>GeN8KVW0dylnBS_1N`2vPgZ*yA<^uCX+1$^vpY^k`g05xXR z(7``~wX6uaV1Kh`gs>0+YIh(2b9C@YAfNmY92Aq<0(nK(GP9xE27e0IeP*XVmQ<)% zjm*Nf)vyZ3b*&Tpum2wW%Sj`3BUZNf%!CmgR`+!!>?MZ+#t9Z_hlp4YIE)? z;PO0>0OcX=c5M+P?7*glbT9`<_H*G%Uy+dM3u)D1_6|;h42dGqBsmCo0e*=1s@too z$*tsm@+f(lyg*(h?~#w-;a?>g@ba%g-lYy{v@{u>{>!Cx(vk4?KSR0zdnjL*z9row zRpOz3AbleJ3ziVJ&uE4=&`vsrPNnnd3c7(FMNgt<(u?So^hSCI{SJMC{up-v%JERS z5KYK=xkc`kC&)A9#qt_?GwuVNDx#rYBYy+80v?i|l%JD-CBH3yDF0dhTu~IilEA@M zlhUn>Q>H5ml@-c*Wvg<6vQs%v`HFI_@(txKHEB^qam}*4L zs13M7Fh-rK&cQ8$mFhuPn z_7l6=I5wRvWUJUFb~M|;&SDp_D{;r*4)z`P1p6_2k-f=2V4tvmVNcA~;z*9uj7#O? zwHewXZMAlowoN+)@lf|@*J|I??$I9BexN4R zU#_pykJOLXck1Wqm+4>EZ_)45AJL!IU(jFE|4;v;{&%BFL_^IW!C9vu&^`<+?cjqfU`>K2IHnzdo2GcPR4A>CB7-PU8m}+`Ua3Day zfJq^NkdP1pAqnKA6DRPdyy+O9HvjK4t7iKk`F;MDZ#9~odFGj!=Xs_*^E}&>oyrZ$ z?aKYQ$8bRTuJR-0HCRG@AC^%6uBcdjIxXdvsHNW0Zt1m*;9kQD%NolmmUAtaSgx|{ zvD{|4-|`4-p?)8>P=5tmsGnH=Zc*W&&Sec*6V?`Mmvx$TmUW4Bt@Tvv7VCCcLj9`s z4(mhK$F0wO&J6@8GICp}?a)z;8j~G3)yJVdX;^gN6d(5sk~oj%PNMjEJ)LK3su4*e zR6)G-(kLZznhG5_GpD>rm56c$vXY;{fsS-5mCyA6 z_&2G39TmZUd*N(LdyzT%eeUNmv3YP>v@h>HjC??A?VskF8`Sz$T#e`RLVj`qru7nf zfd~FW2I|UV()o*BJ<-d2TrpVzB~3+~6UhW{i6z3EadnRq!kg3*IST zyof|TbR2Z*CuodN@&bazL?z|sA;9TVu3$o*V^Aokn6X&LFODmDTPU8Fpmom#?eoQN zi}3#2&=+G`Qd$AOBIJqQmc$jXpQwx?l!-#c9R5Pf#@+9?G=ahX(Ap(b2`h%<$zt(5sZE+vxV zfV4m<1{%@iWAbcpd=W)FFxgCI{P0XjdcaUP)fk}w;dsOg)tabQ6E$vWSsHjh6_RHj zGywTUq>3lG+^0~nRSHd)>k%&3De@TBFJ$HEj(N$GladsbMMF%=$8Wsw)-Dif5z%6( zln$s-kh9oN(B6&aqJAM>6Tj0IPIM{5k z;atiC^NmKYv2km1sbt52sTZ!@9oBNeAQ}{@H|car9roam!2#tjV<_FyAzK}0quJaqtGeq?AhSzw#Z)Ks?)yE7uZN12=!Cu~_kqty(Z zAn3y4hzy1uacm)Bvj7jprg)gst2p#{IN_DbsyK1TVv|v@S8@s1fg-PS@(6Siuo-Q! zn%N_;oQ2I^6Ir@4SjYq_x2S3rjT9iuSVoij7YDs?H0BJ0nP6ZMM|3=sX6Q}JM25I_ zz)%|*JTo<6--v9$nRa0JsxTV5Aa6 zU{sdVZ>rh>tu&*B-HNjymr31|FaAJ235*gtod%2g9UQ=tIWPrDO%9t3l(j;?o6mAJ zH5m?zlvVixuO=YWJcp=RDD%~X0=5(tR6+X(!=+k{O>AF2j^jr^cF=>sswZ*VYv{16 z^L<3kO$`J@a)DJG6Qt+mQr5gNGqil}-;+2&a$wWWvLhdJfZ$Up%uP+gOM{6#f^Fn| z$_rt>eENc=)e?jcW}e{G=khh@O-~3G$}cp*aw-I-_?VlzhHy}MPY|&Y z)uHA*fS&;Vv_?^@oD%e;;OZK7Tott)2Pe230IhV7(*Yy3yvsP2oNTGp4-qEN_Bx

L(%;iH$Jjs%VfKwLaoqOEe2S>FW?YjDpY_wM18IU+^@^33!tBa|b1%f4o-- z4(o@u?hw=?VTr_tFE&l%E47t4h-%mZE>bw^r}4UExAF2z`3wC5m=vQCsc6}O-<;!^ z8(>{hBedFFF#k+c|1Bt6fI93=0_pi6o3t9JW5Zlsqve7+54PbsqZ$61q?dVtP9+TOH&X&|RSVl5A4F~fywY-3Go{I|n3x|97M?Ku=FycIsEY|`) z2=_{;7r0#CGT}G~D#zJ}O%U6#QSCTH8K`&I;UZWxB{hHwV$k@N?bEm&`Y6w7^;SCw z6e`}x8vy?6&&=W9pKFoqqa;E}rfLldw3;*mN0ZFwg&`^%&SUa)p)gb;Cx~(QiOU-Y z^7S15Yo5T1vf;PKvF7;SISr!{1^G>amh)4QZI2cOgcz}?B0_8A!+a^(NAqYl<{KZF z6DT0qg7Xh*TgjA-u62HUAE1<&ZcYtrp(WuoB96e^5)HE00YMv5@=M zL_J1jfnC7Fgu`sYiO>~5nOgI;x?FDOm6C|Fd}<_heLg#T=?joLNN^z_8nwF6D3$w% zaV3Y+4xS&9Vtg|~iWMwSVEw|omFPSCqe|u3pTq)3_vsRuMKA%1oe5Knn6In^L0Eu- zsfFsMRg#jR5?aHd(IGu>$fM7R2bFBp9wjANKS+}^Jg|`@2qLn~3X^^yNVcy~HWGoi z&}KV$#ZUq#Lc)62(PTyV;Sfg?m^2nD&`H4QLawFNYoRs-O`HImny)G!+X=S%eT~=o zIEi2*7frzDC`q8zf$-B$;zgsDpsQTP4-~}2E{D@(Q*b#bCxWvVQ5`5BxB0C1ibWKt zCp58)HsER0j-2>y6fy3a;Eg=r7QFkY;vWD-Meka!Aq_LSB~m%Nl?&h~g8a@^ne`Xyq={zCdDfC>!&M;m3Xpd|D@*-TUM?IXl!0nNC__}@9}zP9ltT3H z5Irc0gq8Mh2PbhZweW`CEdzOhe2w68F0J)8O}l>mCS9fH$%*yH_J~yuV=~HVwjtVPWsXAOHqp#c!CBjSjaxl$o3+5uuNT%x;IzB*#syy;vUD z^swRu4M?-e0o`sKBU>%F&1dmpQ312Y34>*2WN8s*iNIHL3IrG$Kb*NdS-fy5w#)vb5*0+lShm(@j*!zxwM z<1L)z+Hqr%Lsc%|@B4Y(`uKA* znedbepd_J&cy8j)uPKmp%3cl#7^CLu`@F^3E}joC(Aer*JOP!9)>7x^vQhIV zT^vW~&p;xwJ=B}isJl?4(;@AneuXh)m()XVZlwpy^)vf6#oxsdK+6Id^}De3-5P-I zqe;3*BL?+xDuX?iLzY+j3I|~)l=FttXlyH|fG$oa)C01j9>O>Z>xVu=V30`S+qmRw za7(z%hh{$+CCltm6fMiymqD3EnSDa!h$h8*;Rj^(RZ_PR_UclO^kM?SzK6X8j5q2b zPE@lw2A%w=QL6e5r=2tzUex+~8#SH5{sSl$2_kO1cJcoBl;atM9M}D)nf{s~1qD`V@X464Mm4rZSn6Bc33*>|Ojz_!)21monNzivkA0$5fulmj1EWgbdcse5{=ajw z)%b*{9U!R`5D1FI50rxNRH9#KQ4p09hZJ6eta$Of$lEyq3j4U|$=<^2HOb|0|C<-c zuGX^0dG@2K@2wpJ@DEPfpYl?_R?1rH zHW^z%n>hj+FaDzx=RetP(2f$!ZNyLv%8~_URqr>_50s00KM7tBb-o7q5KpER|6`6M zL{Fh-)cu@mf5;P!@PgTL=rCb5`wfmI32s?>o5)w4L8RQSF_1n^e3&ER1)Pn>AJbY0 z^npsgY@i0d!Qo;KMSYh;7Ea^9HWQEMz-#iqpJUISBwioDg&C7U{SC(+0|tOxLTt5} z*yU%$Ih^^0tr{NZ5>EXTy#q`Ru1C?thSHftKp1OyU2)M|21y`kAE*B#nlQ-Tp#c$I zmS~;$e2xo0;I!96y)WZ739-+&!0$&mG5&!6-pZ3um?S>9M|gsw+`CaK?B8Raf>q-UPW3L1P#qY2?g8+7|eZO@dC=tI{lSpRQbp3XMWW zm?BIU77D9{jl$W&#lj9@4>YeH6rO;!)t6vx^?!sz@I$R)!_!mHx*E|h(4U~+#BHwb zfYsI8^!Mu@)gPQd=PC@HtBhg5Fw?Nqu+DI*;hdb#)vbp64c|08Yj^?vr{948X-($} zYM{7N6M@cEN}MbXiF2THb)tBhc%Haj+$r85?h_vr9}^GeG_F2^zSXBj+_ZxNUp2J* z+l{@@x0+*IW<1e&n(=(&m!WNSlkslj!^S6#-!;Bud=2(n4;lZ@_!%ziKm#3@(wn47 z7{X>qi=-1U3ZElgEbWl?NViG%!Jg~W()XpGNWX+#*H5IsODa}(PE)xlZfZ7l!oKTF z(<0Lerj5|Hx&T&QuQBa4-D!Hz^qA?O=|$74rngKV!NJKt>B1#V8qG0tlX;SPz&vJN zU|z*7z-~2PVZP3Mi}_yj!{#Rn{--}O|H=HREPxe#-1~Hg+$WF1Htb4ylYF*(k$k0m zy?l#&zxI-~M7xk>lt#NC!wbMG)I@7w?y2g46Y|CC^-I?<^ z{Y~q$))%Zlv%YEl(E3N~zic|2$>y*HZ82NZ=jdPMEWk>dMM0c;rCSrps1e6SMWrh2 z{*zJ`H*iDt&GMR9P^IEQXkg)BA(8)C)Xb8QGpC|e2=E+q=8*%)L-|Np&e5PF0m`Hj zIVN;&kw<|dxb+hLuBZ(LBs9w>q}~PVFjO$iIpt6wlO~xo4BJ4>D~0cZCYBK{`*NyT z@W9K_gl$GGlsrCwcbaM!;8Cg)NCh~sl%qxS?_*WG@}+22R-kl60Hrin_&PdJs?`PT zb3b#3O%tTojxx~n4tIl?*C9mv7w5g zoaPYPE(bXOJwX8_xsEC-cNSmrnzRr(UzdDq=dvJ0{^GytDPVQ9N|4qR8ad~>=Klp+ z5yOc>|EX7xDwfw~A}GbUFNRlW`2Vscj)zO6@*m3h!cHvE)c-REMO=!Z<1zU>{E8{R zNZyokUNJ|py#Eve>*^WVG0ws}RImOV#CFWpFfMGFbF*Fg3;@e`Vm~KL> zc^xM}yCfSS#4Gz>Vm49P$HyI|Gg5qA3>6t7AD7`)PV?yGV~=8vqnW%E>(arbG+df} zB9Ifs6&q)wx5c=L(&Y!Y(sGZlYEhc~|Hbu-u_=9RWvK#i5Dv z7RH66yH%sv0yR#Q^NY(WzAe`5zlBmvR}7WFE5Qow$uTVq+r?yG9GVDlX^uSL&znab zKL?ort3p&M%lxvSzB3N}F1sFER9<}m`vo=& zZt{ghJB;*{>lK?zw3^Cc0LbB2EH<;rDFjR~Z=w$h0f~$o;x1m9WHmdn=Ns_iwj$lG zwtGDZR_2G1k7mW|H&()huR|Xnbw}b>nEHbC5I1fznM4aN-&sv$&BbW;JK`{WXAotR zUo;AKr_txZ*-e=OLn4Zc1uT-qSzYpFcFOKDD^8uv4i;AU|0$kDPbt5)?GeR4EU>L9D%?`ae(X?;X7zBDNY|wdYpdPE3xCLxCB?F z1^dcy1r!ueBL6nI=o>~hJlb#Co+2p7;uBy1(^v)zAtIRtiI|)$WYoK?xI4NZ*1%9( zS!sf@3=lCPKs%HO93aDWxbmHQRS4i3_X;|s7^Nb}y993&^M+MYx=V7b>RO)5>P6AevapK@nP&6c|0E(tR^*Y#0v=g{v z@%V4R<)IY7HNo(t2DiNcw-BIG@bO!_c zfOj3`Z^{E&fdB`T4d$tQ1<1z&qjmO=30L~Cv#ANPTk>?ZLc!rNmC^*(njk=!2s%QM zdKsSVR)0Qj;3@5MK;gt{LPfMnT3U}T6+Ep~e#OM477(JsIA#=JTR^ims_qK>%po-X z3@S}5t?Z^Zgn+QqDw}OMV^`E?3k{gZ4Oy{oj!JXfD4cyi1AA8I;yUCLs zredjG3dQn{pkkUp9N;0Ah4vkxYsn7d$~<*8NkuIn9L(d`R0zQDnr!u}&q6ZdABY~k zW`O}v;sXSTy1pRLN)@K!S9s}I#hV?@%j8c$=tuD*yNha-!>m+Z6N>sWo9y#LTvL~g z|DFUgF*%oT6cASOCc#JtGF51dk<`}D$FG#-0Pq0xK~XoV63;DLINm52{FJLVnv0ME zio8%V_@O_CWAn^$*c8wz1jsxOx~vqx0-{KS?e(KD-bsLSq6#9x>;oIYxFcbh4`hF# zjXV|wZqgMmlrB_Qb3q}c%~B}87~t}j5^(CNK-qzc$I!ECLD=Eq01 z5-b#0L^Ss`pf1Sif&j{)e6%d^cuaN;^O7N=B*;e#UJbOghV)T^{Af`amDuYXQCL*d z5IriuF-DB~EM^O6K9l_#qDT5$O))S5tne4jam^+)7n-er1s8`WkkBVGXrh1( z!!5gyc#ZH;G1%lq9f;>>%rtRD+<^`w%nE@+d0C>i6c9Q-kVjFtI*(BH9;nO}aUrC@ zMtNKs-6ZndpBz;#N9i~O3Ye(76cbfIvb5!KDhfIul#L+hS|*$X&@7^K=ohZew_o-i zudLXOUN!{O%o+j^;KW=_!1Z$ikWE^fX8*0AzJ$_l8>a0!3CCIgAiY7mlSqTOL7>2Cv0$6D+de^*LacOsbYehuPrsKts-Ear&SV2fHaAkGsXu+Tj-65GQ)U zRnDxyqRU9QxFQUz7q{Lv!U8aK2XiSF7)P@^!?-Qt)R$TOC{Fa7{8kwLF5_Q@fXNSw zNj7Mt`K?B~-r>d6*<|%XG+O;+<=gCqb#y#I5>_t@+8ja2Wwyd(G(dON)UAbU=?WV) zgx~DM(+#uYR=>kVMKgHh^g7%=pT}!Op^A;3W(S@@vs(-6k<3rao-j-mSrLS>N0 zu}p$UvdUcP6#$jZF_{9gJgg{%=a6!2%(;-&ii9+HPDM&dI)~EO`fbQ%qZsW8OS=mF z%6((>#IM5h7d-WtqPT3fJBq3Dsq^23^jh9&GC^RgY_|V0o0dU)4#OZeGC#vJ_ZOau zGC}!BSeo@H08e3YYm=t|fT9o>7*q4(`KBxdDA%#idlXpoLtFe?mhm3A`#s3u_YC;G zzMD$gQhn{XtkbNNWmwCY@%lZ}yk6g+$Lo8sB%jt3`P@8*mhU$>6dm-?9~${x*&npA zXO7D^of<__U!#1s^A(TZHbtgBxzp-}S;}1{J*M@5)`;5kPAhf8J%pZ(t>H;a8>%$v zG@f({f1bt55`Mw^{xnVpM|fs+yWbxaPUbyxCQ%lrpOPnfCHo1ALvzZkjnhJDA?I=^ zKbLJtH!K4;rKbo`>+sJ5t5r@t&uVqsY-i<)fLVAng?uOP`0Ws|a^;!W!n!Y%4Er3V&w&DEdd74E_yj zk|v-sjqWs3ImIsrs4(K(@ltYAyJgwO3(7IL*Cvm@VfDM^Ngzn!A5^OxXJ>aJsVo5? zo^0iDr1_f?YJ9VVOviww&8Fdj3Ka#(_;y?X)<;W<&#p#@K%X3tW z0tFv{?a!d?-Pruf6IeB2C!BLTgEwU z+OfRF7L^dVM!ecHyAtqZS(r&IrS4TsA;Om!>-Z;H3i0eCbe~PRGtX56aQt>t3EdI8 zNT$>2p)>XyX^;4Xu0^+0x3NT%hg4niAJUJ(2kJ3&&dRkXd@0T4k56ica!xJ*LOcuj z1n)DI3=ayBLrM4}qSw%)@dFUxNPEg+gMo06Su3y~+7e&(-C4KyulbSx#}AL5dFFYq z|Lf_2L~>=#5@v0;KK@Z)Q`gU<31$BD$@<3BjFiJ!Q@z?Xxou`^vwUxzQEb@S;0+In zQ<6uvoqXma%jZmQPQ7_gTEDeERx>Z$)5_dlgA!bF#z)#ubi0NV)y~?>q<@xopCL`FWp_`#`1B{IKHK)y zo9_9U&Vx3)MEbyJ(fQy9y;(O6Ew@&8hVIL{z3_nkpzbN%_jE7m-q0P={XzG47}>TL zT9vmUsty}a{23?vQt;{32D=}yRwt!#PaQs&GCul^Pp;J|E&e8sgjL80v~XbU1Q}YQ zXj(M(F#wLu&)c6sitQW$n52T2Q_@>X<~oV`h`h|f)D;|5qX%>EsT0w=+FN#XYO*au zFpyOHJ}T`|fTjJtUERY?p*>q>560`7T+`-z>*i-4FuB@J#^kk3SS1L|lQf2!64|bS z-kzao?MV0JDRYLGriW(Vpg((Xa?emaJlNYiZO+iL^zh8De)gq{Tad#kFla03KBfn2nog1;>rTzj_RW(w^ zEtkN)_>p}x>Wr2yVTR(F;V{}A*=5P9b0U^Yq<|34*fNxCr((EqY_zLuWUO<~mL)@r z-QJ2pTgc}Px&78;)+2eHxGdwc&kgKyn&W2)duPn*=^2_bh>A}i8(uUra-?@~UQh4n zAOGZb9ty?eB-+!_7$W?PvMzc+-6q{!&!eyg#&@g?`_^es$XYLyu9RJ18 zoXL|%`_ngkY0k*9(a}*;PydBpZzz#AoZBhMjb>L}qO-mw9=lrjOQT1QB#yk>Bbplw zHQuYzbq$^yg(Ghp9QDbrDZZNeix@lGoHCl4v%4FdFqkjw_g*iRV_$Pu#ZjlZeMcs1U2HmB)9pDWes3{2n0M#5{hZmHZh=wD^3WgBbR7=1Ib3N;T zTNfO?W#}kQ=FR8yEy35LqRwVtC^Psd=3qcw`fu?SO_brP6EcQ(z!X zY!Tmq<3OSD5@G}wNCzLSaItB1^BnVi;`kn;cfOsCH4QSs6?*hV5eUEdXtkXU*5bX_ zs6S2g&9{f^=)I#d_g;Oq>BzjMq~V}7xGY%n(95;{mfoN2X*_Xw#+46kI`5_{$A;8H zm!D`Uo2UMK^6;j~nX&Tir^aG#Hc~g*Vtfi^xQ#!2QmJG^O`~q$p#KtZaIxXKu{P6F zKQwy0;tvm);l)Fk)->Xp?-j?tZ1h}VcrKAVGMEhLr_PQ3FGTq@aM%ab%MN!(EH&^Hfh z5}i9g=28nfn>lHuN%IUJ4YY=(7%tQxNBFQnHtu*gVRYa!B8iUFgawTNektGnJVORP z*D+x5Ap?+*GCydDl#U`u1R;_1SVh?nYApR`Inm(=JIjrBcV|=6`3sw)={4&sYz`xw z$~Za_CaJQ&W7c##RHiOjHR7_!(aMN5W~nm!YrPl4VH2h`F^6yr=u1Q4t zqlbQuo7o-Zjn}y9zdNUMW9y=T_xf<6wyty8x>dDH8+sz~>%CT!=Y{3*_{y21YvS?E zJwrM(c<_Mqskk59Xx7;xE?&s)xF_Db7xWgSVz#C6zAi3$O@r?(!pd}b7 z;?M}Agfw725hQ^B=pXH=5lE3th$I*aa8pq}mLmYItBF4HUEbm0(*tf*5q!@z zZPD3<;&arIPoClPiF~0{G-$IUk(QoUKe1Oa|2p+W)|IYP51AuJqP7b4cOjd2bEQ0Z z0vyD|nP7o?H>1?(oN6gkyfB5{-fn=IVXr$8N_*fd$t1#m8$4e4D{2?$WBYFW>)*b* z@5mGa*{^x>`0MAlC-Q6_OfxE!f0iF@uWxX>BqCLEL6QC`#l+9Ls`qCEoIr?ubCCR z{F%+w{oYZFGZxYtxo5%ln#QOVt||oFkHkFREJ&6zTV=T?14mylEo{UJA|!=t6n{80 zc-h=}_Zye2|MSkvF59X8YoU7aH~meI`&szaEvKKp<<(`=J(sMUJ#?!*5HjNG;Vwt| z^aJ~|1F{^0rxc@2gmGQbFTzT_=rx#=F-g$taTEi$ORW{66Gl_%Wzb*<(5-D-7391D zG`3&bE&g8T*468}bu&R(MG=z8Gd0EW4hI>L7!hbHnSrMsA~?)|xOhlrT<~{9^g|Ox zDH$UIGTy=Tr*FS!`8~Tb*WNldcJjvQm#kgG#?CtHn%?$yR&kjq7!%jtHSn=9aHQkj zd2g*c^Q_%{>5luJ7aqJ_o-~+VG;i?I6HZvg(%-vd_bkIjqA)cx?Vc%rLb7Z6+Edvd zj*XtYap5^DS4pl>rZ%KBl3xe_NO5p0fA;? zfYqj7a-li+rR%<~*MD8FJ^+6l31~Yw9pAE7&9;P$=c_B!57b|&o6b1n*0A;L2mXgu zv%5e0S*)tpjVm-T_ihnvV!8Pb%)KASmd_dW&wU&y_XVo9ZI5j?3;xv}`6P>e(qpfx z|4?^cI>xp!*UjSQ^Nhg@)pxz-Sis8GA9$J_G}&*p*p6&NNlV#ntoGLrT^#x9#xvA) zY*Wnatq`L=IJt!GMNAxc#gJHJuTVd%u69=a{eVGyMCjTcyVz(t$)c<^)m@?PQ2+7P z{ktE6zt2mltr^-Bhi!%_If^t||2-E`efovx9!MA7Jw2IvIl;>Kao z5t*b&&qO0jaY|*NYkylRoy1%M@opNP(wJJ%CuJNH@^CU`dJ5ro~!qozNg&RsBf^&b&tK;`;{mDdRYrIvVbqWUU0N*+wt&O zCU1E5V{QBEV|@*x+H>X^mn>8_G3D!Qp<`xWx&F~_q%J*0S#cvQq<8*^S=THH#9#UH zN#BuvesGeyP)P3l^w7CKxZ7h>l+Mm+oeS2?6MB0``}?odySzaLzhrk@UamjqgYBQS zJ#*i>*f#a@%#`}@W6!Lvguq$dh%LA?-+k!IdvD%sxNpI1pGY)7vSz3BBKWNua%Pk6 z3Xp|1b3udS!}}=hrXJxRKK^JU8f;u(=n9iq$$#3DaCn|e$|Vg3t9Eo2mpw=X{{#g{ zlq^4f6#yU(b4@aCn-;$()ND6Q`^^s?`k7aK)aY}Cmmd<^%e!l5k9~F7sUOaTYZafT z(^gqq-nphpeZ&^5RNB@$Ux^P#2iZI6Et%z!Y0P-}b!oHv#_ain_Qr5}zIXcQIqUB1 zf2r++%!#ueduY*u)5pA`pi>%8SX3VyijS?Gv1t9mh3%WpYh(*fIIn39F0CEzvzzyy zVQAd5XzViUdreD|v;W4<*Z0K+!&3*ArT<_&^6adZhE7MwW%ma~Bitt%rduj~un3}v zXa8}^)>OA6e2LSjjOb6XtuP0p=2Y|2)#~`k>QAZ$TE?1}FG{zL4eyE^`DwpvOffp` zmGP$b6BaHA)J3Z;D;gCY=cT>EgGNc`)Wxv`@E9?vr#5!G_=ishlL8tR9~upaYlH{y z+IiL8(ZuwXlPea@niZTCuC7`W^i8UtUFJ#cJ+(XCwe!CFcAoa&9ju3ag&kDiR?kr% zRv$iZ)hX9rcp=-xbYE3}b)Wj=DVIiDw-5I7IqvtRE#hxz-K(#V^tLN1F=FC57XlQ{xqco58EScK9 z>bgOb-{$WsU-8SGD>tN5qc~;T`{sDCDO=$TWrWw;3jtx~jc-UbBQxh+F=G(37Rg%H zn2vSSc9?q`Q_F)>HVlc1E!q%yWb?^OS2)~tUW+#t-8F4_Yr`^6%#rffUq3wi^4YV- z;-+6;&>nH6v-hULu8g*JyV>}Lct}^Ko2`4A&1Wy79l;XXlnwst`J6o0X7K!jH3VMq zR@E4)hvi<9c*87`Zg64X>!7Wo929M;NiQN;^>M~T?=;cg0sqc-2?q!{%IA9;bToe@ zgZ?n5ABys}BV*F&&*>@WI-AR4go$x^34qH90M6U}#Jv2efy}g|v|CbsxEP1lCarF$ zNMJ!I5vaVR(NNZ;fYu;U5&|i}147(~I={L_5wvxJ()gN)zeEzw5n8EkB0RJ!VFhnC z962tYXp=1W;d$u?F$)o%A5W}z6TE5jkO|*Z3tmzx!UnfwkPiQ)3>R`#S-SRQc-v96 z%Hc1I`jVBh#ouUE&Sz|9tSr;5uc)rBa$1;W;beziZ<~LL*CGXsf}yIt(GH(x3+Lz? z=1*C)om@_O=Xv)#E5g?9nfERc%O!(HS{JrWhC3)%)!CC;Qn5j}NDxD^yR(0JI243` z%`@a0+1@b86Ss;EW1~4E$hIfU{qvg}CE0oUq;hf5luq>{ESa5Cq7^<_`GFqRDkPkA z%4IeN(-p8*6%u8S1KxIRFaiRHMQ&>u{F^c%D6O;9%ZevsbB~q9n`)D{C!N>IQ2MlX z++Q(izSoy%sF)0Q8D$cDgXsftW^s8Ul1q;nE~}6|48x`wlM*<0u*e?C$*l6vricUf z+Bx(3H!iZO9~sRToZE1E#k7TPxvtDx8;dFavWTey+Lm6at;V*}uGq;Aiw$rpSY^;t z;Wma1U4AHvGIs^6p*56aaIBTU&t{Lg!r6pVQpG8HJT~|om&8MQ%j9YBRv&7#Om_uh z{+9VvYjxPdtcgUx?N-9@1ZJ)cHA{6~c~ZBv!o;GrK4-Ju&={#c za_VSzqc04fnPvu)cQ}(4eJ}!IcFq`Y?n_tLBaUh_eAtO~ZL)Wo4OLf+DP+Nh zOF0bANH9erR)~Q{W6;jbO{wzQNlorDhsz}z;W8|>_KcK4_P}V03ocwuo*?|wRbqD< zrW0}U4R=(`8G-XV_077O#^z8B&jXhdD*1ZAN!G_stmfPJX z1_t9v#2jRqQ=&_0K9X2PIfNhJdcHZrH&wwoG!9_4&L?y|a5Cy|Nnz-xtqUKRj#i;w z1ZW301F)DL(xOIVb}l?96(3qivXMw3fs%^kcSbnhL#njr6I~KtU+32IG&gO5_yI^t;@7fb`(6v^ zN#mRslf?EMfgPlM^6$SQK>e=WlWX~7QNZkB3F#=vDz#>ZkMNC{};&F zxzl&;k}AC}TcFC^J9|!(e&O6%Uo$)X4NGcIU}mdLNc!u{1NB}(3}IMtRd_;1$!kl5 z1-Q7aPt?JjA-K(7iR=}I>ZD+{)dk>Z-VWm+LfSjLcW&ntm*lYdX0*4*2L>h^Bx^{h zb#yP8JNJYUPx4(ht@&HcNvXTrJZt^Jm4=wOd%@ps`KkKXb1P>?;J^>|s)F)p^Lh6K zomDndI(Av*nNy~pSdLrzwi;{?8)6kko4(0fE5xLT&0F17>GZVt4PA}is6kLFBb{p|)TPJBgKdy7iNWT@Ai1ratL=mTKFT<$>oF9Q~JtYVG}Y^I0bS2cj5t`cusz z__+$E=5 z1;>zb`b9QY;SOBU^vVsDS>D%^b0{tu?hJJ%Vg- zM@>^h4R9J+D?4Bmq9HKq^OQ5Czr#7;I3T$aCLt84Z0jArr7ap8j`dl}EQ-H(gl!5n z&9>U_fJYRweWb!@2?)Pho{UD5v>w3O)xUpfnr3)RSEp;&_0e1}41UrmG=kDl3L9zCc>t15%-Osa0Z1-y~F-!KTzbyLmUswEtHJz~Pj_>yOe|JNw`_4PM zSp0#WF()n(oVxy=pMLF$Q|6!X*c~?C2^T+d>DOup4z9cHHUAUpCl7v|`JQ3{^>_78 zJvF=GiOrjz(&;K8v+k1a7ypU+%+SrzEzm8|t1b`&2UbO<}$i&wW#R`W?@` zr+gIV=?O+IK8dgse|h-Q{R#J~#wmJrvFtnb*Ecma#wvWZ>SXhj<&!%V*DdSCV0GV> zNyqGD{j5gz*&%b=a82yO)7YW9#+Iv@Hw*@O@}-b?-{9am>JM4xIgda7yMqURr@qb_ z)d;pE9iegzJ8^Yh9CV zX5Y}ICoA^FbJxJPa?godUCG_uv8-MAU_tLRhuPvB>YJ6VKJC)(g?sj;>sVlC!0|#% zFU*=XOMPqZ+_~zTv)O72s)kut&Q=X`g*FNb9kWzJ?&p;}_&<2PV@|dqmjG%1M}wf# z)nL!0PP$19>CR_97GVii$C_9hOS3N4%LdpG8)LKBJhq4}W2@L&ww`Tbr?Iox7Iq=K zgk8q2WLL9m*$wO_c00R^-Nznc`{C*7TkL60V;H}Z7y}YfZ5*QEpctZa1O7%b(*0)| zpFmLb)V7Vap^?U@+}>AiM(#^Rh<~+Vhll8w_D2IImXI{mVIk2bC6euYZk|ZC(16Nu z!4pA={&K%_;}phrT6k!0q%=T96Bz1R$!G%r(-Vsd?I1#%Y5VeXYZQM>7-(ye5HZ-Z z;ln?#A;a)T;)WpPxx)`ir$3_niNeGs6i*yLX*lQLJI^8XosUam;=+GWhNIaj_kyR$ zgUP3&?39{*OE)dBt@1CkHp79p@0`l2O!JI3v#UDU9jWb$bSiZgIS!wsu9?H5_jNT- z?h4HeH^=P8ll*Zx-pdwr!NcO0!c$HDvRe0`TS!OZt8KROl~<#tza>Swx*XEnz|6_EyU*5#KUX=_{1);7DX?O$)cxnTSDvBt)~ zZr}dk8*ePQ;tF-8`YTpzxcu_*wzdb6VEcB}*4D3U#@<0=gtR_?VFj* zzMVVumf4YM`gx`uShLJ^4^)_Jo_M^D!D_cKP!ltr>#Im*f>uj!cv5Gqx;?$Z)N0a? zc|%j}0oFCfmbzV4-cVg!HoM~0LuEa-Q^c|Mib;v-kdFGv)zjQ&ms}Tzx@pjvSWws8 zTvt|J7j;!hSPfu`Zf&&LoIWw(46@$Hu({9N+~>z^CTKTG<<_R2$?>W$IbF7RZEaJ0 zcF1pQv4*GHZ5BA}P0C4l={02!w6}U47R9PJXI77++07W<5HA8UX*}cMJ}>5oC+vv zmB=kIauaWELWTxrzH90A^Z8jTSH5cbnVlDuu;MR#dmzT($8P%hp;>uFxCBa-~igtq`R8y1B^{Gno^U zv+C$$LLCu~1NbH{^HQ z+HKWXt=T&(q9@K`m)B>`^t;hT>9dc_h=wv)DT>ud;;gVLna4tg!)K>Yn>}mBa*JtB z#nS1%mSCXOH*MKqRJ7R2I%i8W=AM>5`{&Rhg{6GYh^@mGgV)C1QI^&-);iYhfMRsH zquVi3=CbOeZ)ex^PhF_jkIYcqk?D11t${#uuxpV8lchTJ4}#I4smtNs4ges7<_(ln*v47O=%3VQFIp1x+kpABAYMn8Dr z#`v86{&So*hrhf$VjlCXpEJYVYm{62JJ(Act-@}XW7O_X4C)igPmI~*l;p^=;jcTf z!uNFe!(sg!NMU6TWY)-7pJ|3=CB-jNe?AY^#GwT-S{G z^M!{pr}Q;PBVm7sC)Idwj=#Pvy@dU9w=St0(rwo5*4?h#5B_rK1#OUayYhqGgmI+0 zLC078lb>1Q+?Z6Dv_&Dkf)8hW_-mKDLkmzE{?XK!qBw#jSF7}uhePlA#1z|NSe4@q zF@QTA#~f8-c)zLZ_r zSdmg*P|a%_evMvgm2!_iR5Q zR9P8KUAMWSGMQLt=ykZt)w{jPTh*8A7OH>N-@2=8%96`oKlROxKRGbKRt0ddYc)s0 z=guD+{p!5#>{;+?TvdJM(pjT7&z&T~oUZz*`ryjh7yOh}vYE15{X1g*souYA<^``p zab>R6{n?*0+o6}bSBM?HWmwaG(=J@!DerHStuZGsPhQExgY%a{>xe4 zZ+{SXGgt57-|V}P^}i1qkRfC5mL3+zb-g(8I!SlB?gHKAx_flL(S4-*BQ$hip*CEt z*92uGneQC*ZX3*J@eiNLk+9@Dk@O^)L~}F0PCFyv{YK|uxt`5QYsj@K=1W!M4ew9N zh_241*7}%wSUYM-Cg?mZ%0*#r0;zL4L|?d??;K;&hN&Q5z0eel(4bxV+(eT$X|!0t zpc3%j7v}+NYWOK3c1qLI!|F-u@6`*{nzuJUapB*gU-S6awrp9jc=N3|S)1C~6*UKD z4t9nbp!jUMc13^O?dl$#=5IJJIz<>9-|qIhyz^UwwN1?X_iY>MYv8ZF@zr~A|Kq~d zb)ut-&0Ffu-t9Nm%$y_E4VQ``iPm7K`KUmhH~I z{zR;9Fnd$)ln zKA7EF8Foy@m8W`K_7LToctZp;9?UHE*gf&t-KlyH(^vNz4g7J!#IbR=%N3q? zg{#wvJ=O0u+fC+uEg)O$=goy(;2Xq0=@PmgtcS0KKG|)MTt1Q$Dea(!Q&lcZ1WH@& z5NGIn5n5w7GR7y`f$26rDflNBJTRY)7*5uGbf%kf7Ac6Un)$tns1q-8`&~qiAjT%l z1o(CrAE$Hkec}SvLA37mfDfE$qrjY&p?&2|oi)ju@7j9iR(<5eSv@<;w!Cg=Zzu~y zqKxfPU;0pemxa}LA5!0;uivUKzR2`UH$MILtHkq1M@|mIyL9=6wRP7`p5yi|m^DX# z{yQgcsqTAOxbf>>+H~dfhSoZd!!)zX{(!r_e;N~Rz4iQ4B9V4$^^q5S@klw_^5rj! z49;Op&Ia7(7gp3a$7>UnM%#)Na$jh~<*Yk}bF;q_0^?8beB5f- zaynh%6KpTIeLi;Pl)eR5HV%xWTVYmo%huRW>(!5);f>kIlz4F2YANhCe_IL3Vp%Pm zPNQ>|Chc~g{+j;@`I6IB&)QD)UD}T&J>v(Y+r+==8gw1dk|0Ur4P$Vqj=Oy#&NI;R zF{cA#Nk`ZV1vok^rwv(5T+#d@ajY|)i7}_vz{JneZR5XJzo!?~FRM3I-p*Pc>GqB7 z$$lbKg}=%Ae#G{;t?sM*m+nq&a&IAgw!*z(?e6oUOV<8HJ-vM2 zO~NGRi&eSUd(QAy7G)vOYRk@guT>+HIKE{bur0h-k9x=Fgpx*zLa)BRFA2c-i-CziV5Hpnf^NwMRC zEllPN^DURQv|j2UO78Hv`ECf5vha$bDM*NduJMFGOXe22kd-Z3Jn|quK`%&V(-fEv zf5-|4a%q~oG_H0-Wg+ zQu0gt79h3pFvAA4m4L|?Jln{6 zlLsE4S`?4en1tW&)@Vdu5sH;ziGyazhil%fpcl&ZS6NW@^NSQo+} zmeJa75du!}BbROXWc4b2g`U+cSyHQiwtmr~x@dzfk+9c~pDx^=U1O_H>VFy^F$Z0a zLGyT$wRis|dw?g)pZHacN9!?7#o+z#5sdP}!J`jVjuWy#Q9 z3hPF2-n#_6sg>!2ePBAG%(EOHn(->(gu@&ch~0i*`H=t3b(&4Y}#iq3|?vL5NWt@n$;s6Vqp@ z{BXwjqu#@h3#-DbhIhnSH9W2V@4t+W*Yyco=|< z^PniYrHvnA(?ks_)@iLHKtEC?Db4Un8>R6X-#dJkad-FOkA)?X#nCHb@#ea-LKOox zkH_A)ec5%j)>-W0Nn`2jPRCK;GC3M@2G<9JwYCBM-^b_b&mZ5hr?V#7dvRYPuJ6?A z7dI?D|B@PW`_03XYSyO>a)TvxmLQv>m2R}J1G4fDu%Hu#enTqsPtd-$UR1s5D&=bvIF;h-T5bt`wKCT!2kh-wi zE&34wo2?SfYBfcRB`KTfryLp*KT z1Lu@p+G&8UCOA9S0~mcLH`Z1MGA^@H?ee58Wj)=lEfQ`LJ6z%n5e_CSwp3$_6mqr% zoq}YmtoFluU8UrMWhcK7PT*d$!C<(WWv#is zs@$*mV^E59beE?hCWBw;4C0s3W!z>O8ES8Eh}O<>cxy4wxX$kM#>wx1&+RgVTvo}U z*xg2xP!%W>nZa8h@;IyIrX|DK(^z>+$mFOQNU0m0?9yc;&gsw`46q$z##EQ&tae#! zOkJ_K$LC5~1-r4isV3Pz#Wu;7u)5ay;eyL-Y6+J&IV-V$DHtP)&BH`fmCY%()!0q! z4t47swr{3v?bvi9c4yXIC0H8OZDw!x*>^DOSszB&kHS;jVZ)fe)ihr3k*DJ<-L0<< zvAZgRWsPO#K&sD6tG8yCz|2ndJKaXh zH%;Xhr{3?hn*DKqjWywp1uARx8LPg^VRMD8RZfo*Z#*InKl++GuI{}|5CZC@!5@9) zhTB+Q#T~(??5C@@d*atTZ14y5`f_Wz93Gx$+AG>-4^A60hut=JyU42RVwH7?Efw`9zo4(OL3`jX!|Y+yC0^NWIL~4- zY;1H|eD%iK7>xyV$LnUC#r*-NaNBgB=>DYptL~q=&vYs#Ek-7@FpINV*2r3+ThIyB zG|Xthfl+93c3_mIkS_yv0aszD<_~WolY7$+hb9QNNKsEKrO&;_U|Gy*gn?=>w39YS z_($V!Y^^XH$+;P1gPSChD?>s4N$JDbhru`mzNZ+U-wR<0m>m?N@hSIcZ-pqxN6>C4 z263#+DQP}^F+n2Q%V=#4fcZS>j2@`EbAOnQc(Lv|`Y)=ms2lLS^q1;DVf2?zmd~F5 zo&T0P6#o`W**iBFt=lClt9LS+CwzloyZ3{*_`9nG=LOMqmrORNY`)Vhf$QIMct6;s z7`94I0~ndvVAo>))M>M8N9PO-s2_E8PK!*P(buoO`~A6}GFfE)**%%|bvIzar(c%o zXj(KfI>-)}8BDtyVI&S}PJ&Z3pR9N;f8SE}{ylp0-nj;G#Nqkq$&*S`1OyV)PVC;atL_LcYapB@tbU@6<8_;32i<9rv3 zsMSqY7XQE$`t6y+wI3S7@3DC`YWDruy-i~-Yw*KsWbfwp%k1wNm_>0g(On6N`K`I# z-NQYnJ$2JfLgj`H7cF~2{o4m0;?%QwzR;`wFEb3Y#QRrX@-*{SW`A$|$;H#B%$(By z>3)mkStENs(-+K%goHQn~fWc3_A6F*rz&^&k6K`9$LH@qk7>sd{2R&7W zDgN_3hKxh6LIG0tAyp7Df|c?d_F}t>KntmPy8;Mc@p((QJvN zJ1khPBC0!#FPrB)I^pzB^QnO!OL%rK(7lc{|pNA8#`zZpe@6< z(MgL+`n4jr)zup1Gnn0C5M~}w?>_T`OXioSU_tC0v8-uQQw5B?Ois)**#GR5;V8#i zVfLi_>~V9@8#0nWnCa0=Z&~DPtwE_aJ2x5+s~;_p~Rc-auh$4n!lU(KW87hO8 z%KimbQM^oV9*+hkvl;U#=~B;3(~LS;qAZ^#oM*TtG2P!(Z8zgoCLWGdLIIMM`%IoH ziyMxMB%x7EG$&fh4A)hL(l7+mWMN*Ht8r;`dabi}ZFx%2yW^D(n_-f%-Lnd%Ab9ll>2@DOyQpkk&tSL&^3F zmZuTF7keUYDIYo$yD@ZVPXlJ!?ZlXigFf^n^qW`;;ssKM-ut{M+O4MR8Ctg%pL(2D zfK@nUfwrid@!_&4l5|35B%KC26VWscati~JRabnjJDKhRECuoKkb12t((3S~jQp5T&^%H_)`LK37Lkx)MrkEAJ| zv>;|Ye3?+^vfFx^j3-;80mWm|i{WQVE*s+2Ojy~=o@ zFJh?n=$Wa~Z1XaM$$sY3m`z!#dvK%9x~@SqTY~fV2j%+t18I*i+v>F29d4KU@)eS$ z&tk$swZcRPw0f%@6@BY)6ML>RwkU%+JMIaIv5|+?luu4hYW2a=tKOWw)4A-L{$W>* z;&ht)>836m`kTeRzOH~EoW(q*!~Y+5?;RgUb@h$!ow_r#GuwBzcS*K-my2ZCa+ka1 zUU9)T#sx4KFklGXglc23F{YVj2qi!W2?@=#5Fmt>&;o9>m>!BH?eP2FnO#XX@IHBd zpZBkKrJZu`x#yf)X7-+Y&OPUvdW~Bk%=I09bYjuq0qhM^{EVn-WgJY4$Bm1%L6T)>UPZa@Eu5lNhD4Nr{Rcm+@yY<`y%_fUu=vh_04q-H=g<`jzajbGRj^ zAoc5<#LQ;J++(WnfJfuY)fZmzq!0HO-No?Hs#mBu}}8jIENEB-o?h7Ld6a8h&h4s zM6)})c(mxQ%}Sb2^%6y|??|_1R?Hn%KFpo0&R!PTRP9Z2j&S{1o`%w_hcwi*3OUs- zMXNphO=@TRbRk$&n$2BwW~D>ZNCQ7zs@EfBDVN>ZUsZ~AI0N-$sv}jBT0Y7t#Rp~` zY{qRqU)PHppf8MJZK%lB-&SjDv<=GtX0+QTn!m}gD|6HJMf$ExnF3}>9Rj4_ceTm< zS-{j#q(2Yzt=r&kGOfq3@{7gzpMJ#+p~D)Na@ybK)!zzE&d!u7%;u{REnPA$?rz|6 zb4PUE#Z~k6?+}Cz)9}uZ`QR^o5o9?O5C^(sw+wf^&gdCQMxHAZ<9enecTd;OL4!`_ z7NPZ$;oNO9JDT&elJPN2i$sR4kw`hthH(Mo|~1{NVm04n_~etBpybCZO% z-T}o{54;sU0=THfwf2}(HEjaYT}|H|0#!F$iXu%3Lr zX44fbn3=hccsnC#xkGntJbU-sCcupf%zVkl0qI(r@ z&wV6^xaw=xuD#}()oZrssp@h6L(LOY7=N=QGny+GSX)xti&h zduv3x?0_03>mPY>`O1flZ%#NN_v+(n_&}7bJNuyr&pG@4`$^dWck^Rf?sOuZaDwrl z-@W=OL)7r&sWNiK+HKp`uHLz0?UJoqmn`14ZSfgr)VGfrR5rM|w5%C@;KuLxMdFJB zhkbt~m z%bw~UZFB9j8UP0&0|^Vfm0lHVVnf4S4Lg?J%_9QxA7s^W{EK4E-+R?#ap zCmIJI-bW^5-E2OYOWb72sWTrqcBq(?Wd4+8zngtVZu#N+zq{&*J%+Y^#)E~7V;`Jz zCU?8fo%@lKm{9H`l_B0)8{hfU%YS|R{SD;MiYu;MUVYq5Y=u2;#f;-tPG5nIR=$m= zpLeq1J9Xc4d!Byw{eOHpB%|2{Eg5%iY@XG%J@;e4$%Kf5lX4$vI_c>j5>0_sKjGlhxI(!1DNGcskCL`(j?CD?b{&j`l z-*Dj_#70`~yZnm#jc2-*TZUA!)Zd+4IdpmMbH-zgBfm4gzqL1&8(bz_Dfo?lZ3u1= znSo~w8#r+I8NV4fZp(tEit?s~$28*j!R~S6cAq|a$dFOFJ08J4VdEMS?azI2rM>?K z?rFPgLw|esXMaGjwe1{|&z)XXTwFDMYE@BD)ztQiB2MaG)ikcUf4}PXi4&(xi+f#8 zZzAD^FBiH_Y;5P}Vb602^NwP3+-Wd)ETPXbooJwAVPyotoM+udB4*O=#u7Ji^Ye6N zvrm1@=*k_AHwChe6-<^nVRRE&FxfbKLGI7&1vTe(*BWo=3h!TYHK}xE+!3x{c<2pr z#@NwP{A}m@+&9~nk@2VIKI!)HBKsiI(v5Wolb@Y}i~o-;0?XlA$`1w{$yz%DSnRb1 zLtZSU_Hblr)#yCH%g}+2_mK;$F-8>(6~58+h&{A*Tb1uSCa5u|^`Ao)Pc^=~IQQ@m zWLdQ{>6Cp{=l^b1>6RZ1Hz_t=aK(ta<9fId^bI9Xkmo&>TS$u*GOj6V{Y%$mZsX3S zWTJ8Ksuv@UP%1g(irjj}Nv4)e`!xx6Zv*d9wB;qj*Vr@Y$NRNccQzDWb;kS`R?s^z z)z8no@)JGU1CUa99Ly(&+IzJSJ_V_TKABjEaN}Drk)&t(?XkARuM)LMrr(17asjpn zCSOL(mosgcaZT^Nm`u?ZP$kxc>imN6H8xsG1DeNnabnsL8j+3iZgPbY>$A1^P zmf;@jx|(T(qA_!9?%6%~9Dd@7!|m-je)06vWNmwU4wlEvyT%^U@&h$Q{(@c+=siiR zamAQ1|7mYOtG%6kyk}1?J$f{S|E|6L445Z>1OycHx#xZuIWol~0;GzN#{SXFDou~s z+XppEoZWxS_?g1wPA}ni9)4?lZR1WJ!G=$pe(e+`$zL+XczyDwj$G&DORN)F(vgdG zT!PzNV)7-pFkb7(eLs~MHaT|~_Z=O%@2td*4&!ygF;#Z2)ZYfJ(p2M0ej5M1sjpC= zCH25-QW(Fc^vR)i`&3i9$|lHrcL%o#jo~ zJ#asE4m@sq#`Y4tR=o#HpigXH*$zWim+&j2lO%LA)uahqE?dcP?4%k;CSgzLO#J#R zBumJ0ay(f}){#?>uo~Y&t|dFjjbsr9)Jz;AKKa4#gCQt+qnQkt4`e?4H$1Z^NJyS5MP67Tx zasf->Y^66*8|j||D-@$=NJ$n{-$ax7d?k9=2c`l{fllFE;=^mAFZ=ZE0q2BA)xzJy zHqEc)aiDESSDER;E01qc{!FjwN-8}UzDM8x9L#^4))!Y%o(APXyy=Gr#EFv*PZ8Rd zEi-nj?sx>IbkPVG4o`HrW8~Lym>b9NSrfshDU!fdDAu@UARE$@I`}cv)JS7E77N!$ z5((r-8dqY?OK_= z&;S&N&lh3;uDB-UOI`rD3n-!2!sq8HOpV6Er{$?!qiK!msRdFOnk4%B#iq!r&SSVc z_TPoi{@uHA#__;!enXxsT(1ATue1V#Km6=!H%(#raJM@hxZu|zFX}O zI*d=dRDmC*l-@}e4l$l}M7v$wBVA(u=eh4*%zfW46e{W$8bWR|b|zcNjN05E#k76h z{ZnslKXbcKF@5sjr5EJ-`TEUeRHd!PxT9*BGpQ&1%!y)o*CONUi#%qzLd+HZ!^RJk( z`{a2u2Kr~{alijp^QCKzzZu&Y=Dy$5ZdrN9i5`U+zWr)b#=2a5MDU{Z*5Q}oLU=KJ z6zgd3nBEH|G69mtVsZlZ1)bSv4VB6?mWGQ_mFf>MD<98KPa68 zdJ#1wrGIp7E1*+jJL?ZxOybK6KZx9_H5)%cAtmjPy) zNP$cjLIGB!ttCF<=IvFLo=iHj{AIB;E4ymcbRy-+vVvTa@RXl;^2Z}K70KL0m=sh4t(8b9Q2A|(%%%h7m^tfwmB1l}7BM2i&inepJ|&J^68 zl2cspc2+F81-p1VS$?Umksv#kl){_6%cr>P<3>;Hf1P)5c+~N7?w_!Wa&ZAQ*vzS} zFSUyYaWb}z=k7Khlbj@&h8^`Op6OTm`Z>bnN#mtx<1w**-u@M39xQ@Y$jzad9cei( zcGcB2$F+>C!pw>n;}JF4f~Y8-l)Kr^xW~FO0|(EZ5Uq;7FEA}pKTI=Oue>tpFH3fa zOO~EKwQ}B?M7^h(eD$<5^>pm4r|sIG?RSr_;FXC1R&h>cLw;Xdd-0F~aV3D2XS-NY zy&y8cRpcybb4e8es7*=3nt|&Q&8(BZbN1$RTcUAEGj&(*E$;8hB=wW_axLB=u-}O^ ztv9~2hl@B*{{drN?D#s^twA1hy5Oz7`;D5WkxF`WyhW7RUz5!z8snORo{%&cftZ{O znpoAtY2MgNLM08pWE$Q~`<220mtJXSND_9VQ=I`O)BPMLirk>d*d}3j>q&WeWjfuD z*NT`De)W}YZ4(<}WzP8Y=qPFCc28DNi`u?G_$&5osnNJ+#LUg481@BP!WqlWBEvc8 z_N4yB{qbv9H*`%frFz^519V3Ekeb5vE;SC??UOGYGzN=voUWHQ6~vi;lxnCAX&JcY)=@<2r??3p5XkKZWX zg*~scu&?!KExSfM*tr;n5&bXhUc}oT>x%!a)*Z@d3QZ6HFKFKBgzSI&rK)#YhHCHo zmMz?i0~P&LhyKAAfr)qe&V5;Fo5o-7g_d_*(D<@q$ zl@+0e|Ktfydaxz0hF65(<-B&YsfPdH7RG&rGl0pWsfOPy``4-AlD+iP{q$b;`}evZ zf1iA`moxT4A>aKJUIOoRKe<=n_U8WnG4mC@E~c4#X&(7-FY}*|KmIuP@?QQssN)^_ z_JbY|wCqsFJ4o?9RsZnBu_Xtj$X<3@**-^bzat2RyjMu>ztpa;-lvACLf%nO$p67o z$Um}u83&dY7&H&i8PR?cGbyj0?VNP`f$YJHWdCtmkb!qcN9C2g9WVS*?d`KF z8U|EV86P=zEURrAI@f7@+12q3DH=L#!ida>!GlO*#PI1OODB&UanfPljGS)tBefrX zXng*=c^i*g$rSI{@#OL$qnn$j3a^Br)zkb3&>x%f<_M zVSLQh6nocxtc3T$fQIGVj#z3KTI=KMd}sh+`~iH7@AuLz2QO4TcsSx?adqb@)=53IbOC2ZY|!A#J76 zbK$=C{Bvnm845#ji+}uKo46wJD|`-%n@Nms?|g*)4T)g;^a0~B=6#&HJK(aQf($br zH*bx{y4PRMd}=(y-eo-Az5Yt(knxQ1K26zU>@_ot_piM2a#VYH_m`i3YW#5M5bHj4 z=+sk<&O`q`eM9%xpL{~NfB!r8J8CW0ut)vSA!Mt;iZxwdqifR82w>NTsSkif5?y;X zEdr?1pn`=G=J!y%V^0XC|8!RfT{yPP2P~D5fCN)~rCE?aQl>e5e#;2SFE;T{__SGx zuBSaCl9|-vDiU_`Y)CCf93Qtd)EO9KcM!IJeTc*x7P%Zh4)B~clk=1+f=jM#h}2?J z_sk7?BbS73Pv{;{5*X4JkuIyz=w;*p+sDMkp$+$%_7!MrWq3anSNXq1yDYi;b^V zR?V6)3O>>BE4Z}X8TSu7yDBZscN0Y9Ogy)aRE#c}GI09R){1JbLLHl~8a6I5J>C9H z*3mjSD+_IWVA#k_Wm7#RWO9j1{>=hb8*yQBaMJjThn1%N)>pQmwL%NGt&hN_!(UP{ zp`xUCd{xV|=oFXn*Jep$mKf8^I@G}<2P}Nx#Jl#_EoI~NLJ;PR{i;NzmiKl4<)x>l z+(!Py*4Vk3i<_iKT%mgx=B#WPHqxg>z5O?KEiM^XRTkxEVM*Zp4Vf{=DWxaEliGiL z&Ss}nw99yH!|d7>Wo^YJL!_*f^hZZd>etTopUk+Xxuyk`5a($db7iyzk*g-xx5a(x z{d1k-u=CwcFhvd6Mpo}<}=?iMkj{Kn{=owL#e?J+(+gv zCE;hDfhV7-YbH)yyL$5ERb)jyW4!f7)4)@&xbw?gaqV;{JKOu69Jr%BlO$UW)AlO|4HwQAAA70MgNKc)Gf{VDNJV@zbAw1qx9 z@P7;6r?(4=X?0MrHL`}Ix#nWNT(Cw$R~72guo9w63g&1PNQs$F*E|ZAM5q$o6Jaf{ zn5!Jr;Sc_-g%JuyY$E1MW}@}biMPkX(T+<_Ic4cLFE!n_s%_+nOIIu^e&<#)Zs>Ww z(uQI#7OD=OH?ZHh*4A5%S6bgAzb#Q*iFB4zhGc}{PZ+9P`=M{In$ZaehIw-yD{IzQrcfHT(TmJejq^D66i==3>%h&H#LtZQq_QYStR!C?8&M2fj;`tIVfC2oIwtPNU| zsm8hD+k(r~qo}Zy4B_`O3vE>;^i_jQ8-($uRpAo6>(|1|=sC8FOj`sSFHu`$G@SV^ zphxSv_h>nB*5Sn2%Chc{1fzTXblR)tD+RAVT$GqQ{c2%2QfuZ?1eQ@(EtXh-A1^*L zp^2VK8sTpfM;H#gZM=T?R#GmAoy;qIu6x`ZhrL5E&JMNcGwkf2XYL-Nc~x<1Nqnj^R^1y2l) zh{7Zy5~ne2cD*~Gxjh`&m1XTQEw)vPxU=1#3K8Dv(7CPf9u9Bm97}Fe0=zQ=Fe&0M zW!SAHo`}j$GX5?sBvps+5V(JIGTa3-c-L%}oS$sb=Lp>`9gK4h!@6e(?wPDHZ?>S# zxp4;Lnd7>2wr`FBZwH>4?DiR)I!EA&XS2SU_U^xQi0Vw9eJHEBg4y-ubtdxXt|l0gQ?3#asC= z;N_ObZaKF(CM@0B0L-7p!18b!e$^IX-n0gux=y!kH2o8&2*L#t>av^ei$l-hku>`X zx7MANRZ?x`R0Gh=pnHj^Lw-vwhH=zW7DEI0OgxAbW8P4~2>BKbxYx+zw1BY3OT6`m zd&Q}<55LL()zcs96JC;Maqfhu1zg0<2H3z%#+6~6#ZFBVwS}QHajP+p&mNr1X&ER* z7#Gtpw526nock!Sfc0j0If(fULa8qZrV(2`glK`HwjdN4B4RVAPjYdds;WT7q$Dbf zLm3#qrC4Va4cKv*6-vRz5>Js=x?0rilO)$kf&;M;w+n&!f@_WF?C%seOWrx56B)M@ z^EfXHEwF2AcsQgHT)9)5n}=k{-~4j~?c4 z4kV^D2hidk?9_?KXyF&_auStRK4n=1kcc|S{MJM+*(r3UT_>=C3 z=l(&%wilA(+50YSJc;rBYr#3&w*9dpG2W23Z6n{2VAx?ib>fM}GYb|NA?^}*)4ztr zM%i<^|Ab}L#_kuEGOy+~NXEH1try5E-1%K+Ugm}mQR5k`w5H#5g|(>hj23m$jg(G2 zD=!PT^8bY0{_(c;&?~1)zWE!#2ItEaz_N1p{NSri(mW3b+n35;9wj9*S4)Rx3tBX7A*t;w(pG+S4T zwI=uuC~Dy8JEUMf!M$1J=z3j9Mcm{ra)+n+CcE4CBKJ1)E;h4&nR}EOS#EfZgN~A< zCwfD6Y#rg03h$jB>ysX1jbBL4 z{~8y-u%8&E3wOPi9oBDl;oc1C@KX{;HKor(lKb0=Q*I^NUn_ z!RUsDpQ7u@&vU8M*RyyO%Rd1UX=DBpRDnbK+U#pA!*_P6zvK2kcauGKwlntI?hm+l ziXFzq`-?4HEc(+=L?_tU1r0{7?q|=Ex zJ-27YQmNRGWGbCFJ&{SJUQ>LLt7+0%6!wu+DuZ-d05&M}=Bz{l;55Yo=a`Voxh%4hfJ?$p+XB1i6pM$#*3WfjR;z=au0eW6GowycfxapF{*CK#oYCykxd&c{3V;roH{kT|MyIp5N`r|@M1WXaRd(vPvT`w-pZ zR`?bm==tT9D^IS5rzE_`f0XSqzZSnE#i+qRtb7c!jWlPp^RcSC0@BH8wzJ{$>({0S z;p<^Pe+PWPJpc>9r){snik?QT{0e#;16mvvrZEv~wr2W`9ZZIiv9JfBwttJ^E%pR* z8rewBCzp^b@iPWr%aB7Lpdu_0?{2hw4A-U2)dRfVF@ZMC@6D++-p71T61701Dh#Y| z`pq>8MBqVj%#opU5#h{&+ArsCN*eSccx;Dm+?;(O)x1aW0}C9&Z$oVpN!M6*y?U|O zfNfP7t2jZ)CJU|v8FeK9Zq$1)QS(64g8~*_O)EeX7O6l=E7mXsHjsHTFcYMLn8}IB z8YK+mm}8bSG-m2_%66KTY(M}AQVicd<_$_Ag(3l7YJo~G^Ep^hq&ER-unN}lp68+Q zF@b7pOzyy13foFdTD8Dp(a1B?B&KPO$yk$JHr_H`y!KRKKpoG0e!KCiaqvxI`@?V9 zi6ca&h_{9@<}`@a3x-Y*Y5b*(f_BDXD(>VPpSwr(vUBjDqGK z^Ay8o^x(jOPqefgQ|9(6Y3|QTsV8G3w$E!J=X;B_vM1H5=3_2gf7x1~aKzHm_(|ca z`~U2AwmN+sKKGdUWf`$M=YyA=5~i(wve-}*3_K7C=jJx8UE9R8HTz4Ru3J8d9g~|s z@VLfRWTP+ZD9=s2$Td&>o6xj;QQIPRB=ehz<1XSfBeiqYmi4(i-C0lO$(=jNwY!gT z5B{_9VskU8Pez+_cZQlAff#llYCGM+Uio##&V}vzc zO@@3$q*4}c97kruIE6Nex7b@epQ-m`pS*Qy;}hRqmmvXf`?dUMrwzucNMg*2&X2e+ zr_AkAm%P+Ctu`od->jI`CC@lR5D?UW=Y@u8PBnZ2H=4H(<)t#`P}h$(-rmZJ<%-be zJwtESjqxz5;T=P>o8?xSHQIPbE3c5h@b+d`?$y>ahJL{?LygaA8G*c;Z4Ekde_(~7 ztauK?v>dM$wKkC4Hc4hwzP03XL28w;t)dz@T)D%Hi@4-wrHI^O_q3{NE`M3Jz5jaFI$Z|IW#o8Ll}IVzzyX&W0^cuCUz6iTjp_w z)XXcd_=BzfpzSjFV%-RJ&?tDXotVxenk{8(*+J|Gb^<$tUC6FrPh?ML&t)%V zuVHUw?___={*ir(eSv+AeV0ARe$IZ+**J;waA7XPRd5Yl3pa|J#LeOsaVxoX+!@^Y z+-2M~+>P9w+;6!*a(lQJxi`3faTqS#VV*&NJs%(Ci}(t@fgi$;<|py9`KA0S{$&14 z{sR6Aemj2)f47b5PGILq4aH1TvKE5ZuBFZ{vC&|?m{$IeM{2d#14P~F_1qwXn#@sO zGMGhE;Tb3EjxHV_kql>z`GkNDpR|B9P1xw`KY)dF^Vs*sQiBz8kWW=D7Fh31KCN)7 zrOq3v^bTuH=wz^1P(p7o9FCe*{!jNu&s~p(FG0;QnWcuM1e>Te?7zss0xhrKooHGK<07x zqB^>0pQ;qHdV!DT?5KOXX^#G`_TjV#2SA%>-cMP~gY@#;w+wBeo)$ZbT%l!;u3Vwg zl$1%cw~Gr^`I%b&3}e*SWWICpo1d?jd4=+QGJBwoxah4=p6?#wW;+4%PumG8dAucs zi$bX$VC*HeM$S<=CWC#Nhz>r)F0*z`906;_(CDo%nu(@Zv~h6+0TcF!(zKFh-OQFa z0*zUJ+AU_5x2I?G6imcc`xRh%o`RnOQ_Mf*)FeTxWnTE8o;7E3y$M!EU(zOI-$pYB zMZP`FS3n`NFmeiKe_u2vA+wZ4@~1VoX9sld%I%R9pF?4bxxK=vWK-+uf-82r@s6>F zWqnCj_V|^AfTJTO@Cj9misn(^qE1(g69aOb3lJo!30~CgVIi8o;iDSLX^twwAevQB z5*?0+il|gkmtB#QE(g3Pafp?qvB7Xm_7D;dmrUQ3a@fNx42AuwQ*(wTUe%l~4;;pe zNl1NOLG#2!uLymP%j0ybPWUzyHK)hzhw=u&x%@J8I6k{q^eCd@*1eL0VW-8r2Drl9 zs}N?~6=$t_)9WT5`Pdsnk#KlVI2?=`kw{37)kH!eNEN|oI9wCP$2=^eImX?3EE=q# zIg3>Uyw+67S)(eEh^$p)q;QB2Twwy}v2b{EzGyJIMN`6I*=f8F5Z&%4Q#D68?9hyM zJr)V=2}OY>v?UOa2KNM`(O`85OgyCm1Vun76ai~sie4?CP#_qMnslSUvWSua9Cl1B z082DOv&X>Du|1`XyYp2EM#+N?M>MQBYpl~2%DV*4z)?um$W)42){OU6H5PR^D=CB3 zlxBS|vUk9mQ*t=3P^B2k?!m2zA`Bgs6xoxwb4o3{rKgGEiJfbPkYN!_F)xt{e2E+u5#8?qx(0VSeRPWPZ7 zODnm>VvCkxU6SJ5oDd@}nGS$R2t1vqNnzHhQ2sSJ7?vG1suT`795wKm2Wp$0QYh?D z79la9I3Ev-E?EtK3EVm`A(3?{4u=s9YWQIE;%U-?i<}Oy?)=KC7p(#7LagY;lmn+j zRlY$As#cAARK|E98Vp9C076H2K`<27YeK=WPBVilYKoz+D(G8$$kal|RnsRVPZ{Id zd}{Degd!H@D>V4Lz(8`;&khKICAAhcgP-eAab@}b_u#3BTmGk3dh-FZy>~r z5Ak@tKEk+tKCjoq&;xA786Q1%u54U9WZAem54A={Uv=6y(^eEs%H21e8I6{B7tbj9 zD~9PBQbp}>O5GDa~v95iw4zp^tiS&7!FUs_ihwz2jnUZiNua9 z)!2$_mE4J(cO!UBYa4*zohT3i{!=v)(#TsVK`B$z8<08^c(t(<`D#k_MUcN(jp-J> zm%-Eoe8CLmEE+V5DUx=2*gy*siIxOe9Kiz0HJfb5^xf#karkzr#hP{}<@;Teejt(* zwCm~pV34BJ)gOD9)AOvpmoI!r&}<0GF>Q>PK3L6SvjAmRGp^A<4h&fJ2Aa^! zrBc>bLV-eIF`YaHs`3Oas;Ke_Krtp(ti2Nv(~5=XU0UbUY3Z>VuI{F{fn5mVhlnr2; z04|gk>@<^U2g>hK<{u2()3Wgiy`+T{@hyd<4d9LFhAUV9_;(OeV9)Qur}FnVgAru}k5d<3{X&y$`!zA18k$uaS4ie)4bf z4aqS)qcVOb#uPCXeI(NP%ra&Tvz|Ho2#NGh%+t(^%p1&m%t7X}9*H#07PFP?V0Jh= zj_qLQvP;&t0?D>#Lx3W9g+u3{BhuO#2XW5t8H`#x&AF^MVGO29Jq-m~{tK|l9 zZCpDym7B*cA{JXd*CD;7o6IQ`b;D|1 z&`o8y${(u?5N2UAiHV?ffG}7PWqXsYf>e&Be~oauQP^#U$tX@Gq1oM;J0&L-2n61+LVwl2%pF&b$Vp{+$+|&I3iA(`Up)8$rw-D;Y zs*v+b=e|_>R^-1;rxZb{w;D$ig1`R%o_|xspvZoaJjRzPM0kO1^;dLRn)3n-4hFQos{ z+3E<2vCuL-q;PR$bqY9oK=Va@iDn_aaJI^s;#j`qFIJ4;oL_>4u$c$ zxh=w4aze`qe$8>G$HjWRc8^=&JsyFp#`<(IlXNh=P|U)Q5)1dIJj04%kwp$0!(I=U z%yM2I9E&*RFk;!jgig^#kLq%UxRe}K?J;-AVNa2$*Fm!qOiYTo_@v}VKwu34bew)? z2A+Xs39ijOVLr|?46jD8VFiM$8git$paXH4m584aWQeG;2VUrckpOrIh`h(1jEHV~ zf=dXz*PaZE9($Y@eT*aS#x52QGU6idqxm8eb~$4VeDlY+IB#Z|W#V>?=Mmue*l5@J z&LDR|w5vvC(?#P}yyA9}=UrS=G!l+g(!)IJg21>Y#%UZEjr^Xv9k?(GZvu0vn}Oel zaXHIOqjJ`PD5tT6f!I?)MKLmz!c>|F2AgH_ST@lTm9bbPF^d+n=ulL~SCNR_B?M=O zF*Px9EHshR!p0to%`AGMDb!sTA!KVGWQFvB}?xj4Kv@E=PD@+U?vtuPQD@s zksi8`c0(B?GRU=+ssmA%6lIf1m7@7QZG%m;gwflqXeZn+4dO!(nULa$VsaBHqa0o6 zwMXGLg0xT^m1ZTsq$Dnk1jF!vMDdyJd?6LM=Tg>;YZRy8gWaN5swy(XGg+&l&2XVv zL0aG;69J`U45l*ST+}-3mf*LKirjG2hsMEh3CAMQS+o$XM_BM3q#S~uUC@t6&1 zj*Qt9qp{c@9r^5idBrUN-I|aW{zw0>?3aLfN99 z5I%(QTQ@lRiv^eDWJA2l24OI2hjJyV$ZW*nk|L5v3JZwc5psArG3fRSPC-e;{33C> zTrNhV2hqI2HKW0gq77Pf8 zTj7(@r(;lb7_z<%#d-Av^u{P;yn@8rP>`h1QM-_PGtOipQYrSoQw}zosWE+6C@wgD zFjHgUc8ozk`M1T~-+*W|GRENf8w2RGU0Iil)PpII&^tk!_#IhQHhzzoU%OCpJAfWl zSu8QA>K3zL46K^85GS3BP=v;tl#?|G$}PJkX*m!XcVlI1D8MKRFdU9ihEE2W9jN9) zNI&XCtSH=1FRliLKRQCXWXuB^$}M>lz&X4iA^w_Nj>i3H6n-wO3*l9vkUoVL9HWM@ zfbcmMkSLXHSdr>!kz4Szzk&j2kwDyJZ&f(V+to4Xn}x8yrnJH_O6way?g9$*UMSyn zp$P2*GTb4gBx#H)V9{qVXn5r(%ci<_&Hk~HF9@di! zX~p(Lf(crGd}FOv+lA3#)-a)oG!;vS>Qm8RVxby`xT?bPf2!?P*b}>;r~Dc= zt`Y)SQH!`LIE-pD?cwGlw(eSTIyn~-;Wdy5??fEkN69nfC0N3}PdesUBuiJ8e9!yM17W6okOVy}vK@_8fK-yP3V7y^Xyen#n!vi|iZh`|Ky|*K8L@pMU_D;>w_x z9Kwy}rf_q(#oY0b05?L}e92&Z;Ro|0 z`HB2Yei45>bdnn(`EBNR@VD{z@W1DuAJtS7A_;1TqdknXIDnp%i; zeH50^S0Vws>J_Z9!pXSD1^Ydo>B>l{JAcfcH!k z3p2+ah11Uf>m`NO_4W{^DyH5kFOXOFDM%-gRNy%hC=Z_Rs6L9Qf^-3tc`j>uE_}blSUbraq8C8+xhjF1hsiqTVx88#P>BMvf}qpWEnY}FZV9&P^c2*VC ziaifV&)UI}*_Ou-pY0WJ0-uljOatH0Q7Zbn? zw~ar6tQ&li;0#}HEE0XukZ3O}8zXW-PV)FwL`2avdJ-HkDYJ(N@As?r5F`3E0jZD( zv4hEui89qRNU|@W>YU{ALeVL^>CtWPFDed>K;(>&fW*dC$stQl%^nEB=TJy-2w`T( zIS7U04hW$z+-=ztc0`#)=puX4JjQ!(k)F@80L)t}F@H?h<UJ~u9a+j`O z_7{(fyx?O`wqq66Cn>)Z=!{L0WpbTY_xp{fps-P)ThYs8yIqqVqB2jBd;qLe6j|{z zk}}U5^arXGF{s-WV_AUJ{lr(M@VehF*9eHxEjuKo#^d*UKFpIazR=)--60X*BMwE^ z^@}Wo^L&z~%0A-@Sph{=Qf4b6D9Vy@i8rYGjAJd-6^cEGz{?d5$?q4nONglY{j##( zhmWxgF5w-jEX#8#1=UUh7KJiJ3{aLm0iW+fS&*pH31y)oDOBK5jL#G?6tc^eI018| zPY-!EDT>b*n3uYo$x5Yldzr$6 z6k?lVCz23GekE$FUnC+zgm0b#AxSr$)C9XGA&zdPgbAOll2zEpfP{|kA%~*aDV+*%AS;2nKB9x1@g=3;V`PmCp#zB4GNkLXDO%u@K~|H| zujF}3L6MB((6Fi$yhsisYDZu;_MQ7Fe+w~C0Ed`&-U1=C4Tc=rZ63vFeCA_)0TP(! z(?Q)hqzRHD$!MvazA$ndG=bM(+pM6~y|7ETOm@n6CS>PqN=Wi;0=tr|8%rn^G^C7P zF)307D(lmUtYLWaXk*l56&*@un|k5IO!RL8P1T2f7DWsph0^dNhqMMfo`A6hDR5w> z$iGwQBMIaS3&bx%TREhF@ff9Qa_9GY{R-qQ5NQd|a=*LX=Yn)01g%3b#$BLed73@wqpeSl66olG0 zij}(Yn>j@dl0;bexsPc7d~w6P!HY&tyQ3xCw&|pU6P9M%bFX$V4$Q?1Zl8U%3>*TOoZj)udBrnrL7!YBfOwN%p^he1dzjT{Gfii;2A2Pn9cn+I* zUX*cpvmEuv$6=k(@r8+S9ePTZw+2FfvYwXp0*ibzl+WtT1dA*3mv}VEdb9kgII8lC za=;^xq!gP`=*c`kl()k@<+u2B{XSZHor&XW%0K+K0A`qp>1LT;-=v28s&N)d$s_5d z#R@4^b)R}AFzk};n&3MD76zh+Bvmyiscm?1I*f}!cqFYt9_dIE-8$JHkWpF&oH0qH zO~L_-BuPQZaU!j(+T_P^go*Y<2SOG2CQ;(#JXH+KYOBc(O;Ja}*P(<#04DGD$+{{@ zY)l3YDJTO6jw9@NQhi3Z?9&}&uZku_amt`^fRdO*8-0uj++$>LKx%vrzuF-Q5m_B= zvhx>N#3NGVmv#9hdidHZd@p)PZ9tEngLs4z`4>ej8!6zBNiD^(OGL;`d63D7g~@ow zMAas%K)4JJ>$)g^d8Bd#9L){rI=RC{b%W#&sW)Kg%j!})#dIUW3Q6R2%9C_5#VWVq zWh1M*EPl>1u?`HVK6RZAHfb+_qZ{CmP*;ry1Afj=#+ij*q+G}+n5Z{M_)&W~h z@|Scq!^8_W9@sULDK?u9*HrkY^pF~-kwxpkig{>6>ro2S??)Zf!rs1(QQ+d}bAd~8 zWS5x43a|y3!nu%cH5^pl`7PF|LW>;PAO-M3@j{RFoXz&f2AKeqZ2wgc7D^T{{?Zvu zUKkYMRc~xSa419#!4)lWqu{tD49uSn$oGH60A>V(y3jkOftI)yXZ2z(&2yra*dt*jBSm9kF`LB!MuRGE=j=7fFk*5`K8|zf8K2Dg_*jLa@o`R8 zvr<;IQsRY4S^_p>3T}Oi4t8)o1uxefbnQsDoJj0F}y3S zgfrQCD!$_UG#9xf$sNcy(tb8@_4ISw8~%8ij&jLQXRC3 z_;eMRbI6YFEwl`6PpdzUr_Hu2nN5KO+HSyvwoPTwHnf4vTVwKYKAI*s(~>Zqgr;SH zNANR_h`l}ufh-|5B{3;YXid5t5W*h#`wYtHwzrdUMvMDarQ}djh&QC1*d-cUmCS~u zG<&V0b&s+;N~ak=tRt_E(v%ZN{1YnEEpGP5XxB@2F~~JXFA^EP>v@4*c7E&n_> z#^P~x{llf&6!z?Lj}jw~x}r`;I#aH?lEuy#7ffZ4oGgyIG%a21j=CJ_InJ2iPmiGx z1^@}G}_tN5qvrJ;*uJSzFDar;PP})9Kh)@ zscdp~B9$3~Z1VS>{7ceBiJ55rxd1tvW<4jTT!sq^05{fX|yIOlG*s# z$s%1yB#V4nC|*QAe6px0OL!%n^irV_G36bZu;ycVltP#@Um_7tBp6;-+yoKqiLuA3 z$21JD*+6;)NPDmum@F&Q5jys7)0x!RJY}<5%Tl?<6Z*@p+OpP(<3^BXaG1)(E&<48 z05!|k#WA4nvg+6QuTp1(VMp|7vi5vykz>Kv7_=Y0X&-7hhVqGe(>7xWFR)mDg*UO7 zR+&_sF|{J8$wmH3%+~BF&HbZ|Hq5tazboOJm-5Sea%RfsN~+V7NhzHB+~Mc6y5(e8 z?rY-umEV2g+<=%eS=(6n<(UHAgNtQSNtSWDy!2NOew$6lR`gOYT-jI` zTw;j=mZj*c8B>rxcQ&_652TXbMtBG{BUgwUzRwx+jbpmL`}m|HhfKz7cI}Kc!w|l@ zee1Y(y-L>LRk~_{aqyBrARS9&q5f>ojBHpFiT2Ax;yz#PQsd))yid+zmflr%U+34n z*4(v{8DY#Zx{Pn(J5_+kgppun%<}5t%Er2+uE*TK?_DE_-jJ;Y9`!ia34OT1DF26l8ETcXXVYWs~hQ(I<5{OSx#HNpp zyFw>A^;AsqBWii3Haa7e@VRn#F=<(FM04GPy>?b_sE)Cr1_LXSNtfFfBNK~PlQ%u3 z8Pyv=1f+7q-d5!CNPbcjTTb>VE?v@d?}{NZvv>{sd}xpft`eWexMUEARmQ#NCsB@$ zL(in#G%5{^NJC?O(9OV@FyOVBDe+_Q(Qm+ziL2do(-$J|}q2MfhU zF%!IpL>lXspJzNagNCCSJ$n6w3E%G7!|h4s?rL+9XHNT~^ILX(_uB}HJ&vvKH_MTk zKs;^zwoc_{4~`sj?(3}4Flr<-qw7H$701~8#1mu?7wIN7nry7j}jg{~P> zxO>P$SoykuHpL(HABpIm=9_>X z8)%$R{8=v!#0%)jK`uoI@17<=-mzpM+w>m=fv5>yy67K8-YDMHfBnnGNaMb`W#Ai!KIoijuPfC((^75XXN;`7r;pn@WmkHXeMpw6@VTzu(t1X1%?O$4 zKGDNhJEQvC1?sv=!g~5^-l{Pj%}Ppa%w)^Ci?fT2Pd+u|m!bp5iQ^Y&5hfJ!S2A@Y zM?mzgnj-ZdA!Ug<#s)dTKCU)gXM?A;sXv};AHv)65u_U6+hC?`mF*nJ)3@1vXM5K6I;7}> zrWE}nyihw4zbJ(r4UMD?o(nq29PAf94%XQlV4Zy#*-Cbj+hLvkXYv>FchffeGx9xS zV;qpEsbzLKGk|GhCSs@XG0Y0)WabR!JlJJl&D@9)=B6%QF}_mxxj+bCtJ`}*1ygqh zI=(E%9YCmnfEd+j7PEN>1&|M{;pat=U}V#wg@C{)ZN4`tgcZ7ijwy^6`evrGL_rZv ziNT`*)tpgCJMYH z32pom3I-qG2sRF~dFsH~r!`Oqknq#yGh4%K3^YG#gC;W@gBHzW@cW#^Yz?bQCP9#< zj*uuG+N6aRu{sF}v^M5z1@b>-3T)N|>_ZfOlzVRG@KX)PmBDJm5v^?&HukF=B-qtZ zWXhB&9@gF%J^XZ2KQ7A&qj+^d&Cp@Bg9g?PZL1kj6_*abU+WHroFjx8YStJuFce`2 zG>Zd>7FjEKCUDFjMk>J}OU_;FfH|mh2!aB$>8PXMgaEUu2rq_MRa=0UhRkvrue(xd zX0}srhHd65<@o{CZEe*}P1Qq(*9_ooS;yh$1wF~B^(z0R?l@;w=Vu7IEAwO6Vy(r^ zP2-?bi7wE2Auz6FKz8sA?iP6(B7|VITy)%^c|&q{&;e7e9d@7H?;JA=@dHxfYs<0y zs@PR}gIkbNoI??(a4s2Eq<_-90V3yOV&J+M&uE^p6g}U8;XE~I!o*9JtdJV|X*Wpx<8*)v>>4^iR2lEJ=6yJ}w&<>8D?*2ZvkDXoRS zMjkEV|5`z5(YRv;#W4zkxn1#$9}-W;VmrK=98fjBgSZ%%C%HrO!ta427jO_%Au6$6 z=Qwsc2jkn6=d$b|M*jbZdk-k7sMWPuXLZy{r0JDW&S(=y6djD-g_LnPCjR!y}$kC z03NjJTj4A0Y8^Y3Qs|ur7>Uk_`ax9>pNtIRi$`h8*qxyQcbQbCw=$E>ECLCaZ&&0K z*UU0GGrRx&Qm>|jG5VU-Odn^?QaIEOmDb6ryk9gopKfSCcWXU5pWiT$C=I&ZfwIz& z&l^PD)F_FElLU+g;j^-IeD}Dh(HEpOUWvqLYbw|Ar)?A$9L3Wt*_97)%Z{$$4 zSf---lnxUgWZPoaN(omVkUUfliHZUhWkHW8fTk!sdX8!}$}BjD?(q3JyhP?kTjd#6 z@D>bLGsj*BaBkQp+sU5pRg{ zGV-aGtOW`Pi?#1FA|+?u!dekxArNpq??=P$47OT5dbfw+S5_NzwR!FbN_}iczI+Q* zVOA@yfp<`v+tn7A)NmEztP*V~lRM_^HV5oxmwZz<2y{Jx*#7)1scIf=xQbEQ6xYx? zaA!*Dya6Z#oz6uaGM&blQz+HxJOMS5rO#*N4#jpz!p|dv>Q<#KQ^C@jh$^AvB?e=) zF$|h!saATWVIBEAHwsC>o7z?zhmt9Su&2K7O<#?5I5AS2KNkO}DHw9h~v zec}JAD$8)l4Kx-_1TFP!@OWE}R)f#mW}vjB9^f5f9MlWw4fM8{|Lq4cFNc)UQYO$| zhp0>{AN1FyR26u?wSv~!1Z0v>N}#ZW_zj^;qCpn1dYA`vXAskG18WBnJ5SsfF@5oNm8m75YAUb+U6M1X+w4%$f!p)v@u9Lr$w}v;C~)Wk*U|~fd`}s zKbRDsA>Lj9j%9=>&>S%7qO#hY4kK3`yt!B!3^i%_~4}`o}5hWoA_Mh z<%vT2cmCyff)z6jQmz;e*_$|Hil{?9`4q=M=oWl*EDXDZtONNQ+ye6E50jCLv3?lt z7?3(1I+tvaP9|$8*CUHL@rhi9wtg&D%B}{ zlv+=JoG{Ul5nRHll@i7-(Hb37-WkYd&J4Tw3r8aDGfW((aZqC+fv!TU;e8axO11IB zV8zyj)DKiMI>acoTGk5Qmq=}fJew5dmj!_6s5uit99V``6vfkEGGrZ0^)UP<${og3 zFDA7@Yv7mc<2#NWTU`L)Wve= zfDQ$jItQf5|b4l(I0TZCK&&>rW0C(%$Pui_a8 zm>p)9M5eKAU#cwPq41zrs+8&=LxaR5RZ?~<)L*2Geq$zkrN>j~c-fWoE_I*rCmo+V zUUuV8U0{yDANjYr`y2v7d#GjyPC_N})Umk#Ww#rTvP`?1&UH`-&=3}rMEZT zW;WT-6az1(?J6U$bi`<#+#-V@A6}!Dq_$-yX*wxNX41H&8mphNC7?K*Ee>lo*Uj(} zO9TRMAclzbOZ5zE%#!Nh*UK6?)|Bbi+sHwa9|CjKc9$-fMlz$(>DC+E;GN|*X~_x( zjRF%YRCXMWZ{iMcUdXy$4Oy8-rHvEwtuKM>+C;)9sLeDrNf9v#)KnqB(JACrj@Y!p9a0hytTJ!`G18F@s92N+q8n$_q;@;h+<^$$;;e`|jEfW5GAw^cqe(1`c9jlXmMxuZLw#??MWa$Ky!R=IV?nzu@w zlFg_`skDyAPvP~ywojhfy@)=2MekbNv3}RdtJ}um2NS~i`a-H1|ArsO?{6CB3Q@z* zlq-dU!DdScU7br~8}-FNJ6e9n#18lFYqyV_+w(VtH?s$F?oB;P9f^&ZFn3FB~O{bv)gxSvnE5O=w^D#O|x{sqN40-j4ac;j^aF$^;IL4C1*?P%80A zdF{$MefSpPWW6oVn}L5ktUvYgvSq1S9WU^|LO$3|$P;)wqs8xmzv{jgpQM7e>! z%DM0zeY)JHl7)gn>+Mv9p=X}oTvNfTdC8Bnvykcd63f3N$El#wZ=5Z|N}Vr0(1FS7g{TA%ol*_h!?Ubpf;}@7`ct zPs|CXPKnl%Q<+fObw(iPK7}zfOm1_}Sm-yqDZYAdwxisVqYW`**Q77nEi8uwrekU< zyG%6Hu3S!CCxF_U1Dvve{|Rb4NFm#@3$#b=q+So82Ld!nQyNV+(nP6UEV?Nk)C01C z1+F4X3cNt@7GXpW3?&p00bnwO$e;(s!RmcDf6>A;id zZ~_F&h4}Udb-D*%csi08`S`=P2kt^sp;$ppexC61Q}56cCU$3Q4)>9K- z3|bzinoyJQ<$?g^p5t#zcdUKn!8Y%o@MGqD@TK8rk2P?#`j*L)zom2J*5_V2v#9(^ z+>PIg$TSb4(X;)Ixi36}KMfo>{@~>JTzmkJfb1O}aIgDh%o43jnv+#xu5Z&qg%*Xa zIa!F7K7+232&W#0iUAGtDT^PS zzPosq8gcR_kS9joK;7Mm8_*TPw|K=mdRgnhCA^0E@in0iHy@y%T{O@-=W*e0=rKw~ z9e`3QUkcOks_${p_ta1A9k)T*lw&WQ#(mxRd!)PjZv1_!eShMw;HWeuWV*INzU^RI z_E7u6L>h?kgAIhi&P4yYg;xmwy!dyj`M&i#(c0@bQ8%{Zb~InunO-o7e}|sgEXeT& z>ho8GPCR@s{qX#Ov9nJI-=c>oegR3RzYwpxfU7Q0Uj{PU4|d=kk39bzzOoDdgj9Fl ziGPAVBsuhN=ldWZtqH1i1=6yhwp0RYkCcN&i`3{En>I0RDydH(_A0Q?DS{V+6%mx6 zPdWI8l={yL4786(A%M;x1uFsunj}LgU`fvd?iSUNAfo{PPy7{3F>)CoQH~d{fc}61 z)AD`7zb;-tw@+BwGrKie*4_75??M{gz5_pBxg3poGTon8H3qfGS~jpy(apP!%De40 zAy6r`q=Tl3qH2UMo}qM@8?z=BNbmI5{i<*um*saY3$WB{PYbL$Q|&|(aO3;vb!xfr zTo*PT6TW38pw-hyjhIy*>-%7s@~IVg9aPkMP|c7}862 zFm^{skI??#-a&h?AAN`ya!vtvP?QaD&lb$1kFgK^_Th|~v)P{hLM9vcfb+15GMhc1 z0YGE%-D}X!{Ew++Jl5SU@+_HnAEU!?`a}O7!=OKK5hMfSLXCsYYl()9&543C+Q^^iOyb zT0vzCXD{AG_X#R$K7Jowd?h}C>L*Qt-{mME>?HW+QUm15tcRJB4H=IcfLH7VoK7l! z^Y8~+f*_b1Q|K4w2k;Z1_Z9)49ppxgP^5#Dp78si9E29q1dEtHrL+yQkagckm_Y-` z=%H|eWgWP;Wm{zE-wH{xL=)G!*$&wfq&WTjjHq&1` z+PslAC{@{d8oeeggz}#zV=Ke7MnGXs&A1@ELg|Wd7#-72riRz;wW?!2f21wekcsQj ztaaPn{#v`n?ocO-rNVBGs>#}~P&qe60GlX!j@xS}BjgcNQHQ%DHU0+}C95_sI3$ra zMpEOk8g#pV2Plby?RPj-HJM1DMeC=+)&=sXnfnO>I%F(ed!hjDIP<1N<- z7LIzStfR|f)VX`R>V#c1Q;T1+x+*fwjFzQx+psjdEA*cJB^7;2A@9ipyvqaLy@fx` zJ^?*e2e@{OC~+)J^;!y=L>_=6EU&1xAaJEk4%!w8Q##m{gJ4Fky1W~aHW+5Z1it>@ zWdD0_g2F#3M+x{%@TV~|d_zxY=D4SNt_&3aX-bjHB-5|Up0`mVw-(Hi*X(~4?UyL$ z_R7tT*`bo^^rZ1tVRvl23Q{JF682DCzu-x1eZ$ykZ6lVfEW2qD!oPQMnK^gZ@*~ea zPj%u8!enYmz3>)AnHp+V=KEv??w~z0*IC$ZuSeUeUemvBN}Ew z70e_1TXMmx_JDa-TwyIX2=VvP`}jPzcxqmxZ_m!IsHji(RC;H1&?o=B*M;M9!v+U9 zI(#>86p#*1#XmaxkEsm8!S7Rw!C)U(xg2xp?uPad4>9sQ^!nCDsNr+ue~*{>iW8jEh{u@mi>@5y9ZyT zyQfVS?dt0z58P54mw9{tEBa3k97>F9CEjOl^guF|MB zURs7eD7nGJM%*QSn`2Wto{YLytoOLfrFTSyCv)aYXXHxLGYj3;Y-@8py1w)9Fr7rD z%(N?+Tz@^lp#2RwdOnhU-m48K0kQI4){C^P7J+`u zi~!dri6#()*svD7a-ct;WD|fT&+7R%a4mjq#BU>nTd%#AGBY3U?0*$+VG7VOyb|x& zaCad?t?a*UBR#b{foGXl@u)?Qyprh^THnS;Xt`dpl;iOc>Jz-n;GOKpXW-Mo`(b$6 z=X?Xx1UwC?%QuKs$iVr10dc|*V;3x-lufZVgr`Z3D-?bVi$0eyf8cxp-%wrNxy<^f z!emW;Y55O$_Szh;%jK(4-dnSErb8wje`rhJ-A1#ML#R%RADG$PHf?Ha+YI!yDNojJ zx4WeB4_>Mt**RQceEI5pj|I(Gv}Ny+#n~klP8o&htrtr=@XO89r?j-|s8n{#9VB-T=A7t`+m| z?*VQ5A@EqZ2Ry+a1YhvSz#IH&@CSb>?F>{+dOPjCv~y{nqPX0f!Q8 z{8Tg(a*{0syZ3VN9KRZD-&-IO{d&kwwg(+RhtQo6k$wc~vpfP7T24al?B}6M%NbEm z{~kJrK0%+OuSFTj3#MamL)FGi3BdCN)QA?EXq`pfF06?b`*+PWY>S%d!Q*6m=x<1? zO|Bg}M(!QDe`s6W2X||6I&ob|A z*x+==yx!SuZ3i3+XJSj)-e#Psh z4nYl&sUFX4cGi(pa?xe*xXGQJJ^!Y-E! zUXc16oC6JiL+p&9Chgz04c$8QQSb)%9-PtHN!;)%w{07|6}}J(hx+3Tdln^VH~uBedtQ9;Vkx`m;tpn$e}l*4sq%l5 zf!H>@KBG+Bz9v`-Tlci#3$TkH3719=!gXH<(VVtNVPkWK@Gn${rub{g6<>#oGlX3s z8jS-tRgaJqx5@?&QeTn#Z}SYC4WW@?{B#J74wQw39>1S%_6V2!l$)G~2Sh{V!C%6{ zfRFM8&iRFJ!wlUZwgz_v@RK3*1i56hA3YJiEj;jgkRApn;r?x*-v;0Mjh|W%4gFTU zJ4iXh=R@Cw%HhV~z?-3R+5^vp=j;j!{r++|e!Cw(6hfy0LM&7c2T*TtIXUu8h;oGC z5;WV7JN%nN<){UBgh0&}42DuQKM&E{IHD5@0Uwf|Rsgj2|AfJJ1MViZo`<}E;$Ue6 za~a{KIU_ikLTP7XPz&-lmjE#mYX6b)R$eeSrL1pa={R7ji31S0;DApg-0IDz;ViMw zk*mlyS^rPlL)Vct@izj?B8jRlK~QCc&{ZSQNP1f+k}W)wn;z3v`VsgJ8OL|?(h$b)%UA%ubK^`lO@EZ$?tK z{U+oUDk;10MU=|pHNqKQdHdwat0qjK_ZXykjH<<}x_I0gX18gr$^OH=y-Pp-_+ao;ha~d+!vl@Z#fi%sm0-?Pn z**ODi@U_A=Y6*3-LM}lUh4-i)iAH#Vky2$a>OV8BK`iq%T78@*Fa@o-f<0k<1>JH& zcogluY<>I^*|);a%l1c)9!2wI;}}TJ2BVIkk{@_4D6~553&s%&lUXyy#>$(can3V$ zT9z@tt*VMf;f!J-jticrWT(+}NNOy#&#{|@TFN4PokvA^weY$`d1%rk0tdSSC0UiK zi%)X}9J`)C!GpcMOFsJOV;J$#lP3Mx+xyk{@o4OX32@*mIMyK^SR?Mt8b6*u0S!7T(zzu0%KfM zXF&@lY$;ZC+LUAiZ^mRNWP+5o;fIb1c282 zGrST17shxaS}Iohyz=5Y7w@#|#8WKbXc+g)MAucuqx&I|*pbFzKL^+?ut?-fWQu9qU&?`tjD(Jo!Ol)G!DhgYm@ zS^V(R_{%xFOj9z)jc9ldnJ+eLv$bkKA$euhN)GZHKuW1Bwm4hO^Q=4$VcXh3uu#5Z z%&cjXuD|$mUhvYdSeLP-m%rr}y%Ztt@ONQz259t{h>68<` zbRBTgGOt$RUaYHovNkzr}WO7e=`RB#O zu)8Z7eP7(|61S_$%d4VM^xAD(1D@uY$ollb9eY;t%#ssuwT#hCoIEwi#cMQU@AO{=pl@Jsjr58QshA^amo#S<}>m3yUGxgJO@mLbW^ z&VqTP1N?a%zYA=!C8A!0=%B|yEWs40cRUBGMJ|S#V(Y(9cIy&3SpirJykcUzjk+u~0p2a1X5EB76_Q`Q>m= z<_6MuJtP)^xWfMTYiW(&r_}(2?!w1V0DrV67>){$CBlA0mvufod`t8A&&DJW0tf%$ zG{>-hTERFdIl42q3vz{gIs(VGARqqdHQ{wCALnmDA<#n>Z{51pR`)ghA=?w;4=5&I z$1fK&oH*K0fabma`s>aUCyqBic=X|isN){|8s7KU{1_M{3*XZ>E=LtVtUO@KDID#p zlh$rArJJb+NH(&9c9`&ja|lBpb7X3Xt;mYyMs!eW-icM|7#~MRIZkL0vvvR zd}eF*juB843XQ=x{kXHGBvNL;{haY7g-h11FjKh}%9d9SmNR?z{e4KY4QZC5rt2i; zbUe*yHZ9t;Gy64k=n}qf@SJ$fA&LHOvTpzsNOeFPy&!gz7XA%8AK%E=R5lgTtj^My zp_FK}e1lO*^DNGQ5`EW0KGyndvyxpYymu+>xqqRB9M}%z)Jl)upMBjrHV;eCq(wh$ zE-SmW7|Pd0z})v|oiiYhLXi(-A=$h&+fG9Lf)g5B#;0Xv2MY`LmX$5t*JI&nNcP!~7BU4be{F zO7j7g1ywYd{6IW~zmy>r$|q{m2o)iAD`1joI7N%~6!{}ZkK(x}PT->|uDW3Eg-7wl z+aRJW;iF#(#9EFWd+XW9o`M$yfBlfHMc0^3(w6d-_@DjDn61e7lr~_r`{Mb(De397 z`rJ7J`x=1#SNKnuePAaE0_^7k#ZOgh?-eQj9MH<7BJjcfL#Q}m^8A2u0QG>y4BSVc zd7z3C_fw$dh3Zy>Tn_~m8waVM917Wr?k2ztay&Q-irytK1w?EFN;|N}#olHPZvXG@+?)KziNTEHG)4c$w*SG^J(V3rHz^roXO2g5Qx;Q2+3_ zp-iXC<^7}%2kNpO9x>{EYJu<%O}78J&6{34y?N_118vWtw}sCr`ChBcXQJ(<>~p5D z@DFA&Fq~PC4VW`&!g85bjwtw*&_%pE2C6k*G6*JmiCHgSQKFOQk7)C|xpe>BgSX6? zyYr&}J4|78=xXdPmz`DXRdUKtAKkY%(k7idLltS?w?|!FeQe5<{)Pr&DU=kghWeeT z7+r_^>L-j9&W&^yf3x}NXE$zs?itYN*LF?80gqn=|Leoq9=Kwv1l_nP0`)@RweZY-Rre zQbHzR${N6x?SLyM1D#u(whU?_Z-ko2ucf^M-mz(jH^+=--e?AH?mxp$7;3dAd3}O6 z>%B=nOoz?9nNQjg8%~CUDJTkq$#oEdh9HT~MadK_ng9QUCCS#0g6dmujYR$jkeV?9 zd8_xnZk_4i*Wh2ZhnD0$yZ+QCjW_Irl72H^I3(OX2w`evy7!+$P=-~Pj^i!@XKQAG zOUD0)aK_9#tmE4vKen2LAO0QWw(mrv@zK-$_yEbvlz({dC5$J3(4Dw06X<;9^)KhQ zwKO!~+*XC_+z>E+*v;on&i@J8vCznuR;z$iEz%zh#a!E1-sPG9Ak5Nmmg{rF{YlyLL1>ppw-OMLZ zN_-+LX5ci6WfJ&==%)wA5eXO#5NszJUPZ5K(OpY?I6-AlYY?6fIFmRlz{TMpPk1_U zVMx}GR69fo1ng>}X$`I>R$X%AVB?8xz(~w;z;B8uS@a77$6e9AfrR~uo?Y-@eFDCU ze4G>Mqwpa3QVv)W^5#^KRQ^z%!Bp$S?lHpiMSlu0!vjfl5(5NGf~~?K;%P|aJm7Xn zC#SlZ^efx~WhKawFgXuxffg2sYx23}2tul$i^`Fn^fuf}z5zZ-64651BF*lPaEsUE zL!8WJ(s5SKwrOM!-l{e+76UC&E6ii6{8Q$cfgQ-A#%2cFYwWCn@#WNdt$yAr;Tf3~ zg5|9YXDH+$WQA5*)B&2E{(?DzbNO8LXqF4|%!nVMbQqfqaPn;oC4*>gR^pUUy_Fgj zq`#BXZ-Eth;46j2IugAy@`%O7Ni90bKr5>-L+%8Ime7(B9I92Z2Ac7JSM@@j(pxDM zsJzC)%*;Rk8F|za{I*5H*;&1uRc6LCx%gtq6&OJ~IS*tm0~a#)6iMcMv&G6tTA$T$ zeVi;H<)~6tHIQ9hUgPt#5(5;d)}uSGi2AaIQFMkmTVoz?@kk&`1I0x0ImkHy)!i#` zy2G0t45r5{u0VBF6qpWh*HypjfY2wou3o{)be-jPPt;&`C6pGAQ!aCPg7rlS$iXGs zsW32d-3e77;?uZt<^DF7Y# z7|SiXNv2+9Oo?w}b#bkOb~|*eBA6c4L0bX}28zNlY|wy=)NjAiDibe19WpJ_=SU0# zXLzrgQA!jlDVNK!6q36rs{c*eZQvxDV_Kof;xRx%_rjv_>~UExl%KK;gEM0|!~IC6 zk%M!4xBbTCtf?A}!J)0y(q`P=K;5C$a21+5V{UI)n;LJFhQ zu#iHi#F|lE(Z#b7Kjdc*=j1omHEJ?AHx$k?L^Qsp9(5SX3GgbL+~76okVNPAb1YfeK$iqTLBG8IUeo(}nW>bQO7m-*=c5n?L5aa+ncW~>EQ{b^oo&uql63snuerrB!A@Yw;%YjRwxKj+O z#9b;yGjm5g)G%7j`bUoH>BWVSNJ!@$Ua!LHqTV^q zEG49bw}t0UP*Y9TVOrl6UY$M=)M!8mCh7F@GPSz#T2RWoC$CLthBY-oTfgeJu2$J~=5!`#r54(n*vS6evemPA)I74P z%V&}>49&`8m3Jp4LS7I23xzTqst~l*sf5kU5j{O<^*iNV*D6_+#^jx)vf=-_x_pdY z3;8O&-{^c^o!0Bo>AZf8#^(`zKQ{6oa7wV^mWz6gWuVizW{{$00%G?A{D{Be;1g}% z;OIlJsR%=Wv)0g?uTd_igk8Q?!IFzPVo1;o2dZvcWc$lQb8`SX2-BdFjZWl8P?8ZbVsm7uiB_ z;XG>0o@Wf_wc3lq*_r8%LROh5ETyN#7bwBWFYK*BtBslruM-m4abXjVX;cfcsPhW7 zO=11*d%8ZOtt~UJsI#a8{@}Mbvp8VxLf@fg;jQxSp3;(@;Z2DJy%PNY3YBuwZaKg3~sO$jaZn-@9} z#s}!AD7wM?CrQcTiGqYaPST0NWQzf5huH@Xo+g;_Ak4r~@F0gV6@AJRZ~-V0h^Pm- z6HXQ;@>-h0?H2vk|WCl9en9PZG z|5SW}ZX}vxzt)wJ~qHew!0;}|yO&Y&njlVp!?aN7>-5KLvbahI# z5ZkJu!us4?Wo<;39#Lp0#MCRlKp$$gILPxfdMEdrvF-2GQg%MTOsPdB*+xGCXM2e> zmur#6MqUBzluhDy)yy0?%qR#NNq`?RXogbG#$wn!8J(EOEApTK zNU?ArYr}XF#7r1EGYlIN`QQ{62`nEO_b_PMNq9dft5|YYErJIMi`+IK4YNNUCam)i z@0s913-J2`%?VD8O#F(AN2|-d8#j8d6~^^k`@~=O%y}^9g5tmKJ$mtK?cNGAlkRhB zhOO3)bA;2gOhuVcY;c82tFOPwVB4fog{vkwZCa&4tCu7TZ}Xs>rckWZnV+0655ImN zjjym2B?=*2xRT`^eCd3xafU(_wYTOkfts*kU9PTGFD-S@`;T7KuPnp&$2-@oK@(JO zY~SG8J0eYY}q;v$Reg=jv`U`gpw-$a@hd z={&izBEP51O-fwQc>wFf0wd{hrP2&G5%{u)*GRMCg%xH~k?HaK6x!L2G;^Bg(kJ|v zT=Fu%Rx|i`l|A)mB&6O`Td-Ej%V%LEV!j?D6@iKA$FigvV_kr*mk==z3IBW{j|n z$6vzLo41f_pXkWG+9^>$g0tVPxY`E_&5!alQ^ z8tWbSMZC7SxO5a;OWlG;vH$FoEN)tlzt{9g`lNWabg`saGjXxBZ{Vj7U*s~Jc@QZn z{(kt@nOoyhv_oZ!Mx%Hc@4J1)^gV4&)2BDJwl;r$=nzh#Yaxx?6~5WUzyCw;Oy9F- z`m{Z*&G_YF^vWeWVH{s})p>7ET1OZjD2y?!M`kX^cz z)`YKTwy*15=eHYs`Xk&DEn}-JD#mf}s(#aQXSy*+Y(dS39 zD|$xuz1K)nf9c2g_{$1ob6xFy2SMxRxbDZp?o~*pG&Q*h9R;7eOE+?lGB1H8Cn$ay z;W+`V@hO-E<23 zF?)mm<(c$m{M_S?%H@TLlWXrgx?}e#VcH|t-Six)LRF9J3%8ZzJqcZ%>f0jj8@3cY zE6RaWPsQ&6GX)(?tdxLTQz6=fHhM{)LRu11nGqQAq2^pR>k3#uAaKGZ$GC5eumhAu`Fa{*te(t?I#vYvP*DL{o5xOOtMMv-QXOL@twfBx?1YcdEpz% zK;`mTS4O*LO4>H`y-;Gtl%Q!_zxahxGZYjx3f~HENHSMtcjaf3@g8iG5j+#q$U6xg z0~|#l#{|z&b;) z0ww&6dL{Nr3!ZqJI)Z6)=?jb3w`J#dWv|MVP*KY8A(I#Die8z;3vUYFQbvT$B`@@C zfXbRRXSq(A(>Q%@J+m^Ac>C_m>VKmOD*-H&tR^0=`F+d-?F&x z*4q{?JR~%A!9VnF>N@cH4>p^$kPC2DOGDrM#>NGV$ypM0)ZpR8#WD1Bb92Wp(OR=6 zP%i|GfqF=sQ;Q}pK6q>2g8loJCW~VNNrKgDu8(LE*|4g3*O{gV1*uo{ScMDPz}{)c=oB(aY8t%Q+DLEPnCM0#?tw+6`! zk#|!Ri(D^C9AeL2E@U#{WqP%Dg+3eaLJ~0F@_~Fx)>PZp)KNWf-mQ`?RA#H=QH2Ek zxPSh<0|(~KIk+<_zsjpNFUGrQX-I9i7<2LBsJ3*%%1KL?=`$ATqv-Z|tu0sdHMh@a z)cWO+QgYdd;e2sz7h57cmzS6KrOG|ouFB2JHYoAO^Y`zYJ9qzH9Ee^eS2^a-ELCS& z4_nX}NTis^#gFTkMfHm=v@KZF(%eT0Dskgap-9bJj=(=V$Z^}^x)+U23w>-VQ?%#z!JfhjyxH*{{0>NEc{X< z3gUB(D0vR!#((^y5mD#1|(qK(MMM?Z9UiCk= zjo9*b0$%$Cps^18l%GpG3t2%#%q@mO5{5^_a{xSmQgkH7HwAuXvIhB=WL_|lIBF2R zNZcgwzzJgXGR1tNmQ%bR4w9&CVAuwcq<9n{HVHSwQ-H>TnGAM7Q$wB$;ubuRglL6Q zi73oEFsG&7TmTRMV?in8W`LIxQb!s|v@4LN8XiDMHUzz;S{jD?;C=kA-egkHBq!NS z8TGq1RUfccWrHTMAN^XphLN?-rbk;#b(}e(oM)~otawuwrdWjy(*LXMYCWXXv#Xek zE@Os9Z8Rt>5Uq-Mhmm!cXgrY`TB-q)t4zZiCACr{k*OIOq+>UOYE=pa-%wthWCLO! zp6o8jhzNfVsFl1jf*95+tLcy#GZ*ab_Eb{B$6W^_O{(5o8?3R+%;rN|c1lo`YI#;c zNqn1&7+E_5Dol3TXA-SVqNZC_;|q%h-l`n0(?^yTKkR%YVz0{z1dy6?w63PJP?LQQJTW4o4-tV!tEUU7LkJ9|o0I9K4b#kh}bx%Gq#xZ`P<` z!Xu;ajdbhPIe+H4+f?bXtitS^*6U`V8fxJM#x$~%Q`9r^K=VryjR6usz(w6f$mUX$I-8lId#75d@r{ zLJ~_S>PM)71r4-Bf}emu3oZOo*eQjmNQ!wMA^eNWoAA37N_AbVeEb5#iE)C=&%Zdn zZI-M@vd5kyF)h4GT5^RqH_?t7Nn9a5UIR%#aDCA|-4cS(dZLBCOL z&acMnz`N{U;74~Q@cDM~)Dt%x@{5s!fimnKH7pW4|S0cesls)f1ogH%fGNf8%XXe=q>Ae*kyj z55M?unA}`4>Y>b0GPFPF(i^PVR1Xv}yb2oeFZ>JMf>z+Wt69Y`B{rg+>y_&b3Jt!R znRNj_PEkMIRh6kb{soG>`Ovn_(P+)~t(`6NTT8nqRnN@OPfU%;HT>J4QzaZt6>$Ee zVHR&DR1W-vNLLR{R>0^`1fHP%!TCl|eZl}o#G#-s8xZ0nK^(1#a+Mg~U{unX60zijElOTq$EhE zHp`i@`0?)zw(iwS7DayFDwa zHB?Q0K2XQ=hRs%~!D7+t$32$SB=J{B*b%qC0gZSBgJ(Xx`)Yg@wBr}N9<9V5229bg zWfsrZ@Uo1@WJ+B;DN*m}=ad?>cfE!>_bon7BeiMTlq)9;L)v5CqKvZ-AZNO_7XQ7v zWkFN2Wqkd_{FsPmck|D340wYPuh-pRLphjshZvi55=KlMFHn#I+9awAQNLOOR$9?` zn;N;4Nc_hDisY7%SP<%rqLt(Ku@VJqqnDgCC4&V<7-^mpSqd*qGNNE5i4_UCP67`= z0@Xcy>cPNDkbEq}UkI$E{zOmaK?jJ95TXG_j>=nlc+kvK@w~kGiVZBR4hU>u6KOdX=CYap{cs-oSDJ(S-78W9mjZUsMjImo&>;2pDiFp_OQ_{l#C zFaji03jtw967oHyR|R?O4`_ku4QaFqmKQ)ZPZIqpG6JG5PlO0Uj733cP;3Nv7y<`^bRg>wfGz4E*{h5K^)8&sfiJsg;TqG)83@qU$+@}Ath`RSc2kn`}p_g;D9z|;0_ zVab@89)oXHcZQTfNad)XC1>MPtK#lk%3ZFSEUi`f zd^{r~KJe#H<7{qKZf$&zZB`lHJTQ(PHE<948XNWwD1G@hIsQI~{Q@-C1Ij3oO2pj()>5O4yTa47}zjX1lD zN>!N0FntSn7yj;T4-FW8V zY4`(AsD_D9{888NANJojNv*b7%sCBh zvGTu2jfEF~)@6WkYHUQg5-8!wiT)1X%uD#)R%1}A**ArDsz)y=DNdHPYQOZeTJ`K| zuBEap%;V9yk^ZIBH$N7rb;wW~i`6Gt$Ykb=$^t>3m!kh>_Ba(5cd!vR1*HS+Nhojr zq{59pHm^0F{>R8tya)9alpg<}BomjTXJrMGuai&;*7NXWJPDmCEh&`BkK1T`Sc#_B zUTvV-n%nT*{h!iT4s0fW2T(JVC8uoJvF7?%b$}81REX`qG=n?DPJ>9ZUWhnZ0oJLV zX}6`_3$fjRmw?PdkTU^ReTv=z`XiA>A~ghA7uGz%dSoFS)6gQ0lBnea@;JDN@`Wkp z0r`Vyfka9@hz*Gv30@_RH5o+&8f$PR1>P2@YDlEj@Fp+Rs~}Wa#N`Puu(Jd#U{-U7 zdOj8Y`R1qiE=6wliY}#3-%?+t`cunHs;Q|>{P%Vv*MkNW3x2hfK<4;SWJ)#YkcQsrvN$QVY&J~=uC@1OYC zXPqBIK*`}VMZ*0mceu=47z|S_wt~m-t|N!P9d5`t4(UZ7!9Vs^2C{S&ENE+F>6!Y1 z6`}Uw#_Yg2cXWbL7oB|)&8k^n)>!K}HMND2Ia@m$cb>-Qk66qub1YsS{l{+=YYI2m zln%8!EDhK#E9ijPuG7UP=RDm1@vs8BEnQ*rX4y?$4(27ROlD25tn6>hPxt!L^PKjk zZVR&}WUFNQXUG($a)Ujo&{tpMXjQPaIz~m)QnOrM2^yZ^_zi9!jC(H3xC*dL?gk6? zaq#8?FO?Kq3giC!c!DI7nuwt2ARs_=DSs?9585p3 z={}1Q9nP>p6#t?UrB^*SVe+v#8F8NzvQa6x;!(NO-y9`l+oNHrp+(sG_h3io`#z1j zOpWgyf8W_R508Ey$9k5s1$m9HqL-!fZK`6GGGA#Q77Euo)fM(A4dK0Au3@z@-eZEg zs#?&V*wG_hf98=ck*!mEJ7&yla#lb_>&06id}^ZGosHjL#J)YJf8*SFz<1I7Imk1~ zx})PPkj6T<_T(iwQry4gPAbC4jm2@hPHMIE$+H{|Z~S=>o_8eISa`c6GvDu#^GUrU zDs^S|3PxwrW_I$K>GAqui_)d;a9(c2i(bR0@8rvhXs4^2WuP>jEmT_Wtq$86(awVJ z<Oi z|LdfZYi-GNL%~T}abf_?e#>3Vl(@kWw||s&NBs`1Rc5!v;1TYcvU1sUwbop?VXna$ zOt*S=NNjSQ%$+gzq{^tPZ*u2y+DH2ZXW8tx#W;iOLDol*6{|UI4OsV2L;bvzZW3S< z=EWb9CD|RCNg^|8CRruO3`xzMAqy}7HOvqK`KePWyYL{W!z3KKN4!Qvup&w&^F(|U zWR!$k-~=)6iwB|X0QiHDsY0GQbjxMWfji0Ih-U`xA&(kraq3pMs2tP?Md3{~*R-u0 zR{wynGO(d?y*b>_w&nHe?5j&x`Rl9W4a4sDg}h5fj?8zDn7{3nPpflt9cb)|a@2l?^Rti4{ z`8I=@zn2Q={)247n}rq+_<)oNR-73v>VC#{A90)>XR>k1br>mbtm=Dx=ER%Nz zvv(Ivb}oPdGWR43%IO-7$Go1u63)s1=6<5T7wh!tKRpIfY9J9D+BF;BUIIaL}3s3{;%82*`0 zXa55JM`p0@6#$G~u8FuTzB8#2@u*2u8UgruJwzN5L63kHpDtX4;yk-C0w>6sU_fQ? z5BR{velSE#xHy0&KXN=Qk(a-WXXEejH*Yk43k54m(ObCi*)3b2Jhf%p)6_V;N5E7X zX!B=MtRUds7ts`au>T^MhsO^f`}t_&Yxq03dG^bVe@A~srCUxtxpm94Pp5Lp{K)^r zJ_57G1b86++}6 zw^8eH>;{j7+GGz+98m#Dv$OEq9}HvYgO5#kMC8Q?5Bvi^iaiB=V}RKI4Dc`;>J^gp z5fF(Mlo#-&pe`d_gy27Xx^ZwJ9}f9Y00D6O`&Z(%XbrRJ$uS)-&Zv+VOg=q)oX|ZH zzc_h3Dw!;7gov*5piP^K51{4DQ|~X7Zy1}OMZI$dy^B72vA^cohDr&wotIQK2?L;+ z8%}M4jG|8pE2vF#w$FO%+}|i%UJL1RQgYBG?k)D1m|xKj_WV5HCWyB}YBULQN3Bmw!6PvTRQKQ+7s+*^3dz;YNeDCNR2Q0if%acz|~9I{!`FHOa7FPMrF z(}gEUh-3Tk8~3)i%!n6`o}7rjI3^jVKgF>ZUO=y+zrK)LSP} zL-*p5)H*yI-H)HcM^Wodz2nF9+&;FtzNUQY$2H|dZ+i*S3$pjY7-%4)j!(?WIWqM{ zB&^;~lb+W@&ku%i4y|ESQe#w*0Eitbgsy=i+( z$hl)X)?Tx1+coqjxa=gQd+N6Z=ngy%vf_24`|zvy6wKUe`~-f6tY<^s$+5ZV=E^*u z&Xk@LuH}*=ZgYBp6GgQ4@{ERE-*wS6?+zqsE@(HL=XS$NyRToO9>S z07?Fj(RpT{ipqC2RCL)eMRxB&WXD*!WMQ< z>@0rp*pA1z{}b+*cJbxoi~qc2UN#ua%)dmOReXXU&t3M-XLCkP{~LepgkjHLw%{ag zHaC02;z`9f`RdbNUj3Z!^96%WJbvITs0nrGGUd;R_enOg8P;VMY|AlNxpfw(FSC~A zbGSl8sYjPHE>~h6esE_T-}Z2Z=8`E9)&v~5Tww4*eHYw7(}*w$L4>*Lgl{n$!)i^{mSw*pKB{WLzdvJn+uf3IT1=xTXV z_2`kY+OI!KSKePOh+oR-XTB#VoBiD*{mm@_@kw9XLkGmld#rE#_x-__+K(MXMjt=v z(zWBR<3{Zse|&MBebb4nC%m~9i$k*+KUav?FTeh}n}1o+HKIbERXw7sx+#Ip6#8LaiKEo7&I6! zYIw;(s-wL^sk*sQwa0QRE*d?r4%@h|J-e_F({=X>cXa>pqrVK^Ot$nLzK|8FsBNe9_nuht<|k(&m5e|^4z#@ekSY}?klV)+&_TZ|ErTW4s2dJ zaQ4&-?GGEIsY`w_&VKcb_lxVfJ7R@*wYqsitI$$->4_(>#NgcSVck)9=16?KjE}eM z``iKS(^i1zMt@*(Zod`ix$kskSyhV(IRL0fj`U@L3^)4*fYrHmm{4-WLpGk0(g%L8 zjmxvC2`@RD+hy{@Hh1);g7wWG4m+LKnM0isb6{Q)hYX{YnGgH_MDj) z6y_8b3g73CpLOh>xijW3+H*;#6x?jxWB)APx^(K`*7b8|994LsYVNd_eLw!;t+sHbJ6eS+S5I89ct>dFh@pkobD<$WetG7AOV($@$!6iUQ|=r)YTi{-1CfeM z*Rku*Y`8#-U3=mN?7n4xv0&+@(oc^n+V&{eE7(qW+Y*M-Ogq5T{IBKf!)FF#V{vTC?1yil!a2&!4VnT`8Sc z`;R{R=#D{?DnsAX!}Sw~*O>^)N^3jz!%w?_UQY&ou2UGU`=Khcv5&jkG(~2hy+mAG z1F`kg(9%;G)Ag*yg^p-F5p@KaZI424+>ldxturYAz zIiK0Da>IXDm|a*P92D;B{;B=JRclVaX!kzf5c7gmHh$LZvlgE7?eMwdZ&+f#Kk7c= zVd z5*T{w=<5dkYr&*h{LBmagV&wCSg@@N3*YYH{#E?vw(ov#=R3fo0U3N(xl;NJ9_p>k z8=RuQY-ZmyuIP8YgG;4~t=DHg3$$5)n>Q;1{Ds{KnUaK9%}0$bt+sR1BW-6p^`eJR zt;e zxLG(*SW|dwF~SIaYTuuVj2SVZepu(AIgj?w{VRMYXRJH+D*K@+(&HCjTp0b(Ll1MS z3oqXGqaQvht-SaW#2mP{kT|XD)HC!X*ST!j%HmTiSFdvH$bMx%_Iot2ez22$Ri1{} zwm`1~RQeU_d#j383$YFpECYSEXWb0!M2g*}JE*fv;~scAIcjUkm-opH2{H)?D zKfms$=lQE1Q5*P{rro=nihD1|;zHBc7T+yi(`xVMGh9I!W=q9)i{sa{4jnZ8eh<|@%R}SOE0Vf<+n=WpV@L`X?xOnEEV`JydnYWMY_i5qr_CQ1u9|err zJpSEir~VJ$MFwCb@G7DdIWr+Jlhh$*=8~P#dMeiocyN7bHj#RhikptQQ1l1>;mJf3 z#BA;two#77*%Dp1mtA@t*WSAwop7pz6E18uGpDYVWz$XW$Nf^FR0w^Bp!cQ$D!s+RjX*H5xt!k2oirb>`N5*&0opsdF)rrnF#m|jh5;g;^QojC# zj`k6u0j*UPV|gQ#H+`|NvM887Pwb2ZFgzBLYEx>svA~G=L_vxA#@Ela5*xXhymMh_c(ZlMfiv} z^G842IBK>yV?^wRXw{nQRt!6;y-BY~1)BR?bw4(j?8`6Cb}fm{>UvWfrO&Ic+hdGdrjB~|t3`ZPOeJES(~ens+VI+I>azH#vVlv)heTTk zM{BFcE->>-UahXF$ajqz$?Waf$|qQ(ITYTS%laLMc&H!s`-)3(73eLvYr>s1d(MoQ z0z8ntb^h8)Q+Ck3v-?LaPTB|2&XH`>7F@Ar96ILiDLY0-95b-a!{^@)gWduLobc(eH8oCx$6egGam4Al>R{n^GcNe+H2*FB+7apM4Qqch#9rGtC&#yruBeknUids0DZVt= z;Pob>DJakJ=em@cH47*84-U`F9J{;0e&?c_haL~7<=D&>VMA6Lr(i=uNz`POm;Gs3 zXg$`S^<~n{vZciaDeMzV=g- z74@2&Y3*;%T%6GYkvd{LBHRDIEj@BOAV)}hSxpQ;VqO<-rYD?A9tsGZVIH7T#uwj5d^D1KU ztX=(+HhViSRV5W^d`wh@pxBhAeO|*Q=-kjDzkn-)*ooMe=~P>MO}DA@SM96 zp*CMq()&MNyH<=yYD;p}&@*L&g8{=z2P3IyH6sPX2w+D;Ly)omm{6lf#?&6wbTMYq zWlaq3WXD8LZXYDnyt28n- z6d_bc`om|%eM(!~v}j~Zq)}MBzH;!0{%Zybs+p*=hpl@hx2UQDW--y_%S=k^3BB(4 zNdHKz@{B*~4RsfFtu{H0uR8vH?v+S=)5uxLF()?oQ+#-Kw!2Eh% z-uyv6YgkD=+}s@40+h$b`I7pXmGdsB3b#xj(Y#pg++u%O{2~^P!l5y+gY}UQpr7#x z+EnTvUy0aQ4?E*$hc(AmmCOU<6m^>{fHOW}Ro!Kn_=MLYO;FS!COK8=dSnn+Q1#h& z0qX_2MN1D7%$&NUG64{J6_FckFDu))jFgrpQ z6d9vK**`9qFcRC>zf!zw*p|fLcvtYmwJ~0{l1gobe%49naC4di61REkHTf|OiG20? zmfEzS+OO~rp7BXTo0zBxqv^PRLdd?#2PZW+c`Hx0f{Y-<=8KW%IAqHVgG96rxVCqltQ#YEr9dy<@y z;*H$0V+Z)s`rq@@6#r?*Jj=Jt-Cs34GJ9%5!FC7QBCWl}f7w|9|LKA}aH+^`o^nNg zSVeqd*T9jHdV6K@(i8u;ZXi~SCI*Q06NO*O#^wB3l2)j!ldkDVcFp86(`9ivuNsld zcfBI6X! zI<$L&X+>+=7p>65pfktvh3bcfnz;=l+3PT+w47VV!QqMZp31)Zka1_L*6Ucb z6w)jE19qG<^tBkK1VRo|DzxjYO7)anI@U^^)a;FDSHWW$*oX^CSfD`fUOORB zd>7=0Dn|>X;)2sU0WGnpQ$gu{A__Rc87+~fSSW-VMl#wIw$B5-;ns5YVXYd;FnI?X zK-sYG%LKJ{3R>XQ_dIp6>pF+H1hRrDTe|C71XfevXNJ4LZBGiSLM#n6z@TWzU~H7Z z&PQ@mEk0#3c-LbOd!^NF3WTET{H27*VM~ z)O5XR(2)Mx{OKdA!~w65m^InAAXGhTi~NxslsYs;w>W=V)cn}s(cfZ*jBKWhYvzWo zA2^~tsa9aKT1Dh7Yvi^mjjHhCZ+<-3e&+>l`1kATTSgB&ZOP)}vRM5esB3IKb)hyo zc~ob9RCa_OnCauh=5}dpbfToDB9SD_Pb?RbQ<|)3lF;G{RS(n6VX{w2_;ppRtQFL1 z-akza_$J9}Vss!Rgs|^Ief#7<4X;JQe9n}y($3)8Gy`i-Eq;I|$)ObAV5v&Z!XA_glT>yM zpL>1kA#VLC_69z3%$7O!^yAi^-8CTM^V#nX(fLSCZo74vX5XZ9W9#ad4;c_qYlg_l zET8H$xsggZoC-^PIFyule>#_yt3xmp@SpV#V^<=%3Pr?`|1UpI%f3pk&4nV zl>5t!>vQph{g8m&G_(1{kAiX{mV8L5;LJqkwvz{95S1{7aht|%m!yDL8-5KDD*txw z4aL=Go=`O=P@_y)_}$rev`iWj^KU%B%~fRKz=GrKf_>l*_Ro(xYBkq3#Xe=sj&$Rc z^q2UuEM}tLm&57Eb0Q-A=wg<9FfD=8w(U^ z?Cy*tvCx#p@lIz1mKC9SotBYF8fIv)YY;0DcM`@7rUnrrAU|e>hhRnk3zQ|N$1*6! zB4jz;e5MVoNk-1_>!1K`)i^`KSbHl1%2cxbBAFIkV@39?gT>u~FS*-sC)&siBO9U$ zWio15Kcd|!v>l7F5Uqktn^$m0TfCk^3Zj)QO&_^aNzAL*?h=M=MTNY)-H zShaPXy2{Df8h=%0r=SU^hh^@DP^}sj&Fmn(Q6E^*hS~4NEL;W=W*oiOaak>l{Zgci zWh5W7@5gpwS~Qc;x$p4d#tyT2kr4~|Ov4N>pHflL2tN+F?U^>ipBZ8yadOQdc&WSJvo;*~AZvM!%a~gi~=?rG7GVp<@2uw~C{rh4?x*71jpx zyj_?HBT(W44}|T~yv=eA zds(vT?Bq$C9>PKkOM^0evt&Py<$Ey^U*aNP!i`HZB9g8JC81IfI~UlOq&u>|vUffg ze$D>mbrIo-%!Dq5zxgaF$T~KE(vpf&uPbmJyfda5xWTJ1t67h)ko_tv;37-E&N;?aP%%EVp(~3?cV|e7q%3o^ zlkEuJ!{YYf9(+J4llmc4Hk-F$lS5=ep=lqlkUC>+vJo$|?f|!HA?1^;+}&&0$01!ZBEpzbT29Is;+l((sezv6Wq2Bd-R1W~z$ouj?GA zC|U#&k1IO#1Xo!*AY37-vSelQ#;`f9iw3Sd(Jz|T$?fapkt5|5&(>qRUB3}ju)n&5 zK(lbbZNk>>3NP~s#eNQ3e&=c~pRs9CZg_J_)M{r0Hv}}37bYLwG+tLSM~$5~IerYB zS_ih6IX|Zh?LWA6|8cTnHK_qfg{zT~s$DC{3$#GMtU{>7nrYEoUCfeeGZ}4sT5J)e zgP}XxL(zr>KY_$ru>9p{`yDO`*=>L%-@~$iJ@$^FAvv6|H^l0UAa@!%HcBL9C9t_( zkP|uU4^c_c1SO!Tx}*tu-l!iWaZ7Yr0#*KCLdgvec>R7JP-@-=0*0a-?itw zX5aPLW5WK|Ub&}W5Be5USJ-&*O?%!e{BP_%PuM?u?G@p!ljqDm>7=={HVn60xR-d7 z*SO!=t;H|7C+t1g0&A50OreuPvLLAH6WBFvtZitd&`WeYcLso?BioY413W%ID_S*t;&maF)o|d`IHdgeY0S!)j}cOhye6cx0@^^;d6qVuXNcsk3)uQO zEAWD)RCH~{WinH*X=XBqT~Ty|w=hKALcClAtVl?i;@cNanmbr*sH+=M6FIx<%NY0f zbS{$}mPM%V4LSVlpy=-G@}6vl9^}1yxqLWo zhvoA5oc$qPZ(td^g}7zD?G&fz27;6hqi60NuUNN4%4Ay^Egl8Kdh&G01ugcr5`ksp z_fBX(7Wd_?v+Q+v~QewbvkPO_FQ}0dBT8rJ!R?>S3fky*$HatM5m zrEO5GpSx7lDMEFQRQZwCIY;3x=-+?BNajgQ)OcWFs>Of>^b^XbL}gXchJY$ zhUm4oBT~vw`~3<#iN4kEefW&cLce4kw~Y$ zVIypY!i8xhOn(?{u)YJ0b7{t)6=Ny31Q*{0Fg~IANE)ZaSW`;l8?3RRzj_YeCs^lz z4Wr|@$3|%AIkdG>3K~8kJ=!Ts7sZ?Gg9bjDxve`$#!YvA6KCv09F8pe4*C$LL_1lZ zq`j(^HUM@x!RJXj1yNLd4F+$F5gPnK4o(Kd8Bs|TukFU z^}|v_j%%2W-SD)^i36AJk~8+--sJSPzN$gfkE;rg2}fh1rSXfoN#~B3Fl@MX()iJ> zGdM-;S^}S7!`B>X^^3J@7u6_@YdQV$)m}A~ISpY#y;{cv<$RgBh-Iq8W?m@>Gp@{O zVJp=dYZ_=JEbgoz#&-vVEZ4}j+kZVT+c|RDS_~!fx#^E?!}oRHVtK~eD~GS1JJ+~w zW!I$1yi^yrj^l+Tmf(}loqu0?fG!+6Z?HD)JT76sIrGw)Ckd*LpFDN>nv-PiZ;i8; zR4&-pKNhTNXb4ut@)^tY8JV#C`p}J0--Ju7fN#tgjIo-PU_uSqqegB?4;?xnmrD(= zebt~q=T+%!s{f=@#*T~R68C>Em5N<^;jTFs3N^>-+3`WuH$*UxpNVm4EoY|e4xpMhb@gGx{W8f#NOIGnWFXvLt(Qp1G*2M;j z{~K*gw#&2ep5-S_A|5BxxNo|}FJ>%WJfqv1x_p@!E-K<;{=OyMzl}D9;`Cxu5?_$} z@h5<_EozCu~=?I9G34RqW#mbbX0Vzt;L4i-m>lf+r#BJo)9MDcX-9PuLYa`AfccJY4kVeu*PdGUAR zYvMcN$Kn@a0aF})DIrxzjnW`#gfvl_DJ_&%Nhe^ueU@~-bdhwqbc3{CdO&(adP@4G z^osO`^q%y&^cChDO-y-J$c^$Kxl5iP&yW|($I2(kTjcHXPWdYN7Wr=Zp!~S}to(xf zNBPhA_WOlwD+(rCl1io0UujoHC=->L%0gw8a)Po+IZL@v*{xiw+^XE8{6P7!@~rY( zpQ>MKoMvbdEvMCMt=cecoHkQisIAi0Yo}`4vEYhUZUZs-v`r`PMP*xhs-qVdkxSLny-8}u{u^YzR0tMyy-yY&b4$Mv7- zztLaS-_k$O|E7O!@P=VTjl9ulv>PLhNyaQ=v2l!XqH(%$j&ZSZg>i$i-?-m+*m%}_tH%~RsF)uc+FmEvToA;ZKm_IRp zVZLm>VZLX6W`1SymTAST3ab%|2fM5Z)(mT&wcJ`~ZM4p`&bM}3S6Vk(cUTWtk6J&q zer5gMddqs>`rP`;$N6+$*oP?oz82q5-#FiN-vZw%-+JF^zH@vR`7ZZe?YqTym+yPN zM}0r>{lfQ>?{(k1zR!GL`Z-KcNBlW|y}!-h<)7f6Q5Hu#6&pMrl4{yq3jNDTQx@laK0KxlAiWN30|MrdJZb?Ai9 zsi8AN=Z7u}T@%_Dx;u0*^mypG(2JqhL+^z?3w;^x7uLd|a2j)B4dFrIuJFY0jPSzn zs_+TnP2sb`7lwC-uMO`D-xdCT__6Ra;a`Pc3BM73JN!ZT^YE9Eei1zqiDV;nk=DrY z$b`tu$b!g<$Z?TVB3mQdBReBkMsAGkk30~0H1bsB=aCm8e~7#l`5^Ln!SOj2cqANJ{tXL^q0|>qpwHbjeZ*a zd-R`}aiVzK=xovC34#;2a|_-bI21W|;4O5-XQkJ$k0It~Iyvf*BH&sc-*@Q-&BC}R zr8{1}W$(KAANCF=L-0wMb}{{TFR}qWJ`XTbThTM*s_RR1A2#1Ue6uuc)}@r1eJfx* z{JWAtd(Ugmw2ha%FU4R2yC*_SgFT5JT2|>!>7;Ki<;tRboHGCaOcqoS+dh}Q%+5-JD$BT}_J60_!|9+G8p|^5n@>D^$Q@7arMK{5yc)i#B=Y|R zhCVthWx-B*9+s%ZK=TuhX0_C#w&%Vkkz4q@d~Z| zBwBjJP!Fh=GCuUARKlU4JJg(&UUw6F)rnY(9v+${DV5mob>ddyp4wQVr*~OQQl(q$ zq~})8nNu1Jea9ixlrqK%13F=Y($~7j-nsXovL}sK{auUV3b#j-4hcP4Do^iaIta_P156(_`et_s9VOPv=s0qsQtCd%Fl`)CLk`IYWq6%K)+vNwoPHbd zQOde3QJHn~H0>2qO8(!R^p@SBsy&>P{{6k)440HtBBoSg=}zecbrE1i_J`rUl&Jiq z{jd#Txx~tP6}?G8Db<5Y2Bt*Rp(myC@Tkm!J2i-sm(``i)EiHvl&XxdQm#1ZsVxH~Bq9_I_9@+{?o4bM;AImMvk6F;{x^-=C0uqf8MkQX_D|w(*qh1k+!7j!w^`?wWqVu zLw(OfPHsCQJ(O!%jbXBL*d~R00yv~qE@gh`38RzIj%QS`TML;jVeZj~C8iHFdUNZj z)a$!@$n#1ntH+1FRw6Kt??{e1@yP`wI4XAXD(AK5h1x188)jc2Q-Saf&TK)+?4T^K zEvH<({JeGppM{*_O4Z`Os0>afc(HWCSa)+eq)92U+arq7tsXu~)UjL08L;wX*prHM zjn8jbzF6W54@)N2qlqBSi1Rw2y>oY}i%YM!Mxt~)tmd6p`abHzkwdkIM-WCT?DgiM zEFo17@CQMcy-8(U^z@_q(tOzbT{1k?di0d)2kZ2*j6sf9cpOl0bL*kI{JEzLO6Xz6 zIUdSX=?+!SAvB4^RJ>oLI4)KdaG z^Kf!F@G3({s(t{FG;wAVnp}J7_Ams?!k(@$%kl?d%Zyc1p zA)@CY~*$6%lb`hOrx;hr?n}<_T}Of=C7ukncHUv9vo%rIJg8Wpq5$$_3B zqsJ61l@CdVveL=1)llP6-B>1>iI}N0`{Q~@FW#vc2{97k*Gr;Q9EIGFO$*+Ss+4y; zqWgB!P0((dQ5;Z&?$dQ#BZ352vOloMNyN8`SkukjI#@A`UEnZbs*fA0=EL_HT&pVH z(v9WdIBXazv6>z{?ozcxMAqafF+W0T>Xg4Lsp1O`DZ9W?RP*h29zFqS#td_pCq@*B zCHwmoGbjaQQ?WlX)kI7VJm!eCxCwbAG?VgRQfH!auO0^lQ54qD84{E>Ln_eI_!&4NJ4`m)OcKBYDwsaS4)}7VkXIx zh;vo;J_G{Yw31wO%_!`of;E#%;s^lPmqrt{DoTih8ZK#SabSQ@8`FH;reGo#UZ$8K$%j?= zO5u`lk_+fzq7CYzREz~Rc?d!-buhY8(c~~Hsr``;l~oDs4yci!r1}bv^o9Y7kAt0; z6_c`Rb<|3EP?ZZN5<$BSFF?Ax9gx}s3^fHVmWNZRaH~THfq_wlZS0{+;70)*fDuL> zuHwkr!;huM@a%nu%Hruz9XJuXB-O8X@3ms4@Dm5GPZ&(yWPM1b_>x?{*W0M7;+@XFA;2A9zRt{0I+V z$fpv5EEqh-NpT{B4sLu{LfIXJ07KWz?iU=*5FbR2hcYhdok7n*fJO5GHKaY%Xj zfrC88y6XExvMe8wheDE|3n;^CQJpFURO*MWUHBC@>LFoEFCHK*g(?pJo*GsSBh81S zA^TIv0{CVybJ`*_P}Jms1GHKU{D^h}bQ#8n9w>JiI@Aa>ekl7AFdw$t3KqMm^#byC z$rd$^5T=-o6aF*;9&1t@1QOo#0L+q$H^xUCiwWF1=xN$BY8t_?2YB2aj+HI^2qI(n z(-Lts3`N^W$iawcQmxVauJQNy=z-yf9{P3%lpr8xnjbNQ0-fBJfEWcu7te!ZZhz zuyw#D46P`m>tPwI5LYG+SQc+TJXl$OVYyQj)eve+90V6_WQ7){cuFtSHcOW7Gtg$B z{ly8u$R!cu0__-JsF+yB02tcMrmFd=v0$oHeE<(Jj^@$w1@sbt?ImPU88XVMo4qtF z%DNsjg=ro|AXD>GUS()aiPW8f(o0lRx5EMLCyI{1RHr(`+?ha z67mi{?IjMagj4k0T*~bqk_BXT+CyjIFAk~PU4Sa9g|N6}NPF-KBvV6C9IF741R_XQ z3$QNMlZFnwmIL=AR6nRtbuAX5m2}V>yM{j$Gxcttkkg{Vo<0zD0ql0cC<9>gBW8^> zMV0MKA!kJ_@KqB0UW;${g61wlCd}t<997WVgHXjXEW%7P>ox#lPev1oXm2V@7A+YM{r(%scg`m|3JQI4lCvIS_;8feC6>d=VI2?k*0&hDe7F zcy~KcE-Z2(OLV}3u5tmm+v&3M2#E)Zd!f&}LJNhOR@_H$A`?#eqhzx<79P~_>5HNX zVl;wbA`MlOi@PAh2}t7w2aBAim(?57bb7gSkR;f?n`0s1{gu`hSE?*Q~ktgS;UVxV0t~ALs>i zc-{fvhiJxOgbR%x4n5QnLo~uee}gdh7{I8C33!^`fxcCk##@Rhq9Q7-0l$T!clkmV z2ti{G#1((*^{>%xGA%F&MiQ~u?jwK^!%y^dpjv8sAc5|$yVo z)(DS9u;4H-%eOP66#hb(p#L9_;@=Z+6}JpiH=C*5-OUh^q+fd=2qoqR06|%5YLTrW2jfljA2&Tbg6h;L9c15B}LWdP( znn$e%c@Qu^2=Mc(9tP}3F;JuK7MDUw!iv2do7F~QfL)7fuy-Hp4G5Sh>}&04-X36u z8I-m-dTm7@pP(3!#o`W^hG^so1tkzVRUN}>)qE@(kHxqxJ(-eji`}6_EW#y8eY;4Z zFl(f;R#$<20JEIB*r*;fCYAhAonPtChDAd!+MpSuHWN0Cu-r^C-=$#oAks<%eMsuS zxDo%jDZQF%mU0=f2Gk{@DBc1DxdZS3vMkyDE6KIR5veDZupB|C0clVSZ;B_;-x33@E9 zOxIIkeKVdYQ_Q5M=lB)6FDNL*s9%mYMn4=$DSd~mN2R`~segK!Y1w_}oD zIiSZ7-;qz2O1KuZ=pk-_BbOt{3bKhiypoh00odOv;g~WF4C$cP6(ZvAnT0&en<4Bh z=$rA5to-Fz274JFeQ+bsr+L| zH1^9RcJ#ugU-g z*H4BPa2=GvVsHJ1AW3~96>71J=<2oafRPP5-dF9&sv%g7Ekw!Vt0{vzne*hmADCRc_e$N6}rTa7?dLF22@Bz z_-8C=V5jKG3h+EdM=MB7^;V^$Rw$4(Gl|ICU(y;o+fNF9nd9JBf)sZ^6r`kxa-c_D zQ7~X}*xeku+0V!!b?H7W|L>VX0?W(^ueT&Ir=UJmNr7ZE|Q zUQDOXFKLr$kkxW15cHvN`&7KF^GT*!{^+=9)y3x%iHJ}~`XSq>7cb#qAHur0K-Wb@OBjV)NX@97 zQNwE zbt;mhdtntw(~FN$feh8eX+#&N5EvM-y8Qx!g98DsnN-f6PVR#PuO{2n*c3JpQQY3% z^l`1M_JU(58V=%Al_r+sk!c+k2dcjtiO{m`#_otpuO<_O8`xv+43hLcRO6V^?@_?V z&7xoTMRoB{h9+tm{q`P>Bj`JtSkR7k7Iya~up}d>vl-UA8)f(=V3Yfjnh!V#IKWGm z<|+FqM$KfBpYkhI>+_w0dntR9&MwhV^4m!5+-|DS#l<88{tsn}hx!2m)UuFH4IH%0 zy-#9&nNbxf>AJ8+M~tPfN;2ebL?>(_O8-9H>Z#oTfQtg|Q_{0yQ?vdmYqUsOL7&0D zLIspnU9{0u^(HbRCW2h_B@kqYAsu!caHqzQ?7$Rya{?)KBY~oL6>K92a3SY_&j7^u zDUNbE*+3tae<&_t-vZP;x4i@EP@aRm;(MfG^lG5z#nfP;U8eIClkypOsMw<&{i0H% zwxW@|5mSkY=h0eF)5;+XB=u-KrQRZg((bcl)2~lv9X;*>s<7N15`^2f+b=kJeOC*_ zV)oi{?Z%m2?;(LHqoQcd4n$yePlsim3~Ae6loTsm#Vp4Q%)k`iqbhD2(7Hh1)jXAg zIL|g7rHcs*d$WzD#tq1eDr3Sh?Wcv2z5N2T$y=@(Adl-%)&U6j&ORE3s81yUQzN1a zpD?A^M1rpWj&w5-LUB6~)FDJ6gmL`hKwM5T)3 z3)qL!Y2)?c&zOez0wd~q6!<5|z%YhmPuk$cQV`1dJ*kL0NR`MQOUSsv#LRH`0IBBN zelb!@BFf*)>^oE1uSs9_i;+ac{wL{!wN3&;b~ajt?TAmc-K{ua8dErvNk+eA0xbS4 z3M!Bvxz>|fJE?oukd_z2mG2bfwCkvl=(W}MF@*0`UO9_=-hc#kNm{5Dst*Otu4 z_mS4#>tI zFi_|e#t4&z*}@`WC5vNpHoQxB30KpGBEoltN8n%jobX%WRpBk+ec^NAE3u!b!oxHn z){D*JP;tCCU7RN_6W59-i(AC=#EY4S=^gMeeMtPV_%rd>;_t;b#J`B2z{k{TsU9P|BZ_q%zsl2az zru<8>RYmoyakWBiP+QfZ>KJvhI$K?$9;2>TH>umy9qLYXuX=-eyLzws1NCwB8TD7{ z%kVmVNBux_PX}2_ObSbR?tP=g!gGiuhpCNPJOg~lzuexKHa2mW8SA%={MOPUE}A zBbYya&iJkIs_~}r9{f=MW!NSbJ(y85XV#l7W~VvYoNUfE7n!S=FY1}*4s)k@rFkQ~ zQSUQWB%Iwz4<2dNBx&+TWC0~lvQmFu-chN>U3*9JW`K`N9q~YcIy)B3hR37 zHtSyN2iD`(&#YftuULPwK88nXKOcf9_)@+qUw_{qY!W=qHxoXoD}C#H8+==R=lL#% zSL$`XTYdNVe&Bn`_bcDa%qR6@-~agve#vk7qyDVF*5B+Og1xP$_~-Z+!!Pv&|0e%7 z|91Z+{;T~r`w#fP>wg5Esn7Xe@c+U8mj46zrhe)FHlPFofkdDp&;ak$p@C6>Nr9Px z1%VZT;{qE3TLTvaE(=@*|I|AJ4+I_#JP~*{@SDKz18)T03v>thpdO3{v%%V6bFd>g zIygBv8y>2wg2x9p2G0!c2<{AC2_MzlgZBm>3_ccon)#@{75q5(f5C2qnl?h=P&!o2 zyi~hF6GJmY3qmVH>p~ksTbY;YRiT?gcZBW_JskRR=;_c4q1QrhhdvDbJ@j>$b3Iin z!gb*R;lbe%;fWM|%v}?Qg+q0;ol>lx!rsz4C2v`hx3I~(_Kt{9>nt+Da!%%I7o#Tw zd3u-LDXk_e&#d&aTP|Jq3LRCRfaTz=r}D^%6Lqe~C$_vI2I{IQ5@^rLGcS+Q@+gl> zT3YBX>2k}bC#-z$9WUvBI+h4`*Ymey`-E7O?y>^tbw(B~<#NmVZ;l=-Uh#*%<7%gG z0`K}r$5?v=>)9YVB9S!hEV}c`qjLU(97uL>W;t}Ro>!ztD?-M*pgO|Qd4Yn-c&~a# z?@i|#D~QqU0?~AduoqATe{6J@F1luB$??_#++Z$Xl504j|^roZtwNupzeqk&__p<*_Z#f+Ia9>`6_pW#J^7M{Qi9HJR?jI?=_x#95 z2$EITQVPU$9Duz_6hwm}>!?5mhs92r=6fll2kb;_uUEY?JZin8$CdZoJN7*9OQrLq ztlD^4xMiXxaWGSsgmQH)lS{By4jo;LFh4S!du|bjN0modsXDkY^ORbae_8b}!Sv9R z9-&dzy@ckKb(p%z!0A2rj$XP_r6FtPSvpGOojcr@XhB^r$-||;v^3p&P)c#c!n~B8 zKD_G^TD%)aI+o{*_*-TA^PYHbmaZMBdbhn}=`mP7Too%(6M6SbLfDJ@$T~2UI02^jSmB+{Stl zR0anxGpu!I0xY57&>Ow7=&?>cQ0!}DO1yf7lyg!JP|tLen-BHX@M8Jna>bUI^z!tM zUf%!BHA9@^jqC`gtSXlmM))qP+C4mbg&gVV5mSD2dnDko)49#G;Fj!VR4z=S#Jleu zy$tEvg(=P)noCTSPI}w5@^{O*^zM7dlD+G>QJxVYH0G)rku%D;q4Y;++C3WScsTUA zOqAGkSty~=BgH#b<>AmS4DPeh+(GzTmxzY(s>2+{Dxj3yQW}vXcK&kRl-VB#z z9C!qIb*@B^_n_QH_A>e28zml{?3n<|x$sD$ zb0#0}!pq+)-#gO%kvzmv%GFh*_d<`@dk}D_2>Srmd%65r-bVB-%qzsXPxxetI-Du# z%TP}d|Aq!vZEgyW_r6Ceoe*~<>S9!D&^;#bP_gA4d3kx{&~=ach$HN4(L3wIb3#e+ zZaHQScg^zl#8zIo)8M%|cn|s}>{WHBD39e{FZ3cs!G;>>Z88jdsrwREe*X|UJa)Yz zdX9b6;^pck@UFe1ci%fwsg5ej5Pysj)GHD`2&>K|dqt~f4eZiaoCrfW}|E3^2=`>3qXQ&oJL&)N^BHA@@Lzobbbk?qrS#bYW(zaaSa z$~~EMD!Yo_Sy5tuN#Lm{LU4kr;xkmxQ>ltX@1MBE4pk<4H%YsdWQD2p=B>F$gr<0ZZC=!_cCblQa+84&O2)3Rx!4=(YW!$2i zT&6Xh&uWp?L(?pjY;*zY$}ts-%eNY z95}FdP)K?1O{RkF>3m#G?+vSYNSw>3D)Q;ileuhaZz7*f6+&h>J)D2hRWy~K&aaMX zprV=aNBp#rCYV;aS!pA{m?GkE3l!2Bx1A{bM=G1jHdCSP4uyp=InckCg}CR=Lt+iv z@8aKH(gg&Rg=`;8=R??XZxeP$)D$5YRJwm+gbX#vZOUpv0gA9AktIoXQqn zs>*=1JQZbc2chXaBZFv8RWzsb!1rE~ICMg|Aoc8_927(wKPHpU=J=6RI!MSSuOwP` z(`EM$^63s=2wCOR-1bBjSV9rm6lpP?*^|m~elzopq8DDPNI^ghA^UPk(6g}u=^XxD zHKww~HYWcE7_aoRI-P-f9?U=-b_Eg9M%3-4A1uW zL}y_GrQx=R6;^j}6ORhFVLRZ2F8(~4@TJ9?oJ!g$Y$PqVB5F9GnTJ?NIH)PCI965L z95ohhLz*o2HYx9^41yEGN@P=QB$~oYEcHPW#nX(!uu{oEQ}zy`e{Z%js#e->(h~?d zpKi`tfnd(y-V7@h5iJX#;2$?TmFNAw)aM};wAvR^HL>4H!8usX!c}6W=_mUVz#6l{ zMkFhZeODk|>{|!u~<<;|@j?oO7sSsqE8K0GTUN z2vNa3K!&+^B{K~#64Ca9C7M1Y?+fUenQw5uF4X%F(tc)q)_-BvA{jd+8n|r zb~%z%Na3HpyriYM?#l?QBHlZe$h99N_Fu@%pdU=a#$=+-lnn1O^EuClThTTe5f=8l|TE?W&!0lHuFgAp&jYI9 zKZLqU7NEyOXPX%`S*yhgcMOzc;fhyMJGJcEHBAypBqDdpv{SG4?8>g`r5A<)(`VFYmo=vSA zx)*#lV+EV3=IsqjQ3(w#)j;T&ehW6EoM~VbA)-)p$Y4!PmD3}m2Aj+9`QlRIfP2WH zo(w$y8@-Xw8E?1B zmjund&H6ij!)epIzsKM#2qb5!(|K2r{Dgdp^ZU?3QM<*^SX_}njb#RIb+QuO3VTNi zD>-!82no;TSswD8pSYz2Y{=er=d2g3R(SXTsKc9UwZ|2@}zNg-K zGk4CF;H3N#w2>h0g3E`XzD59x6o*`8IWC5Z0-DO$gdQ zv8!kL{vyEGDZCiTjzd`5R=bZY0bJkGI4#WLj)aR#!|7<8R%`P-wE^eLsX1_q|*w z@+DkJ!99b>eS)r@a9u%Hk95vIBG-;Q$-R&wU`Dmhat5wUIIh0OvQk=RSybF$Vh!m` z8ke-p>jIvX^!No9GK;V;7Mf|NWQlMKMn2B;Ua)}neG+)tCh~q=@?WonnJPHkePmYbNE_8pFgCQC z=4om%ZGTeA)n)4eDQ^}pPMUc6URLcHW>>m8QmxpiQBjgEEalqoG{vF#ZCH_Z$w{%=fOZSwq;D*$8bXo0i_pcT@)<7Pfgr?Wy{~0U-WUq&@ zVp6G^f2r&iQ~sw|u<59Jdv&*RM)icvG{X}8ElRWmG)R=|`&BA6|KqCG?y}J!bhd4@ z*^a+|8xp@zZ8K5?pmDy7n7tRU{89K2HpSx6jb{+SPgc9+6kFbPy}mcKx|yF?Q@b4D z_^PCo6#E+BIRa1)M_k;1Yt|!?HE^j2rPc)UkypTd1FYzDl%A_}u=^_2(t5<}S&VsX zMfCMa!@`^8a#j+}zGEFbE9Og5m&-mbNg|dQKD^SdryeiWij6Db^-Ms%WIN~?ODx-s zE5K_5@MQPHbvFRB+%DL;7OKEyEOD*-_tiQj*%98vwMb(!IFb6q{Y&L+-xRzrs^^8_ z6sGo{-Hs$-I+!tFbb9$nJRe8ZJkDn?Et}i2^`r@ zbzJ*iuVt4{`F})9|8u0IYuf7-@exwsLzSj#j?^>l#p%%7hG4isz1l{o{WEJuM*w(T zT=-l~mqI%Ryz6CRy+PgVaKtOY{~A35`a6JWZY7)`(Kt&srZ&v=_fdXl-Rh3k`fcv~aiG?Ec|A}8FyaL{ZUi!NQbLwHw<1|q zO*k5`pn6D!agHRr8l$>2u3mI);4AsRfd2ja5uhB*e)Uc)ee1tgaf-rcpmsFu)mWpH zZxas)L@TvH#}XX1F8m&sWB!V8RTAY$QtlX#=GM(3HC~H)xQvM3?2XRtLH@=xQ%1rCFB2Ou)P~U;vVIb4)B%q!lpGAahkJ!jm zp?`5Qfx`tt?Pc&Herf!R^uayi74Y3(%?*)V*t@-WZM{QFGnl{Z0adnQnwn?&IW6C= zXZ$k>_PO;=#d$$1)+m=moZ_eRN5f<+ooWkPKxFm_lzte< zG}fR?k4=Dva#!v*K(H>9_6mH8B7n@XF8KPNRZT2!ytR$ly|&m1l8wtD9~S7TN@F4I zH@A=w3)nD}^2o^IK~Tsm5F^bB0ND2ihs1WSbxAH^6iy_SeuL$%1)<BT~BxuK>RsEGz0@#!vDBbtch2K=^r=k>W%%l z9mzJY6yQNmai&6$t;*FR*${fHRbqsc;VKw#+DeCOd4$O4NFmpAB)E9-_0BE{WyfZy zvMSwQ_LL6Duchk38^nvoMSq6^E?Z~8g>%;{Nu?!tAS&XOGw)b$Rv%M z;GmSRFo2bW6Ol0y$w*wE0@vTPY>1?>KSoDeQs6p`Np-*wK2*|XJ!ADf$YqoiymC)M z;#VCUZc8U$b)_tLa8KmfX~(Kjci7p$!iJJltOlRDp-g5aj9kZ1Mzwk!7&qq9)&D<$ zHjwL&#GUQJ8J~c~75!02DWyr(jzZr9T1t}3&%jSSxhxzT3|}|ky&L-OpBY3_iR*uI ztxc7kNrdV$x_}!)j`0Zqt%pcQlH=nzxu-Om25A@@jU<3$H1IU$)rUF$gV53x0(Sz; zLb(Mf+SD|Yt5T_=^$jcVJSDsy;ON`1R3Q66j;ClW;R2Fy6=7q#pz(LmaP)ToL%~W` zc(yvsb#Y$^$g4&FQ}oPM)1>2}&WCXdD1nIjlNFv4zd+%e#I5REu+= z|CsZUu!FEkrLJapq88pDWzI!b_D5ql7lu@aiY^I{c;wOm4Ur|EgeOgI zor}Xylb7PYFH#MZ@Jj#{*UD(6qW+C6D_FC$;J1w@0C^sW2%FIOeHcf}Q|qf3 zUylGkjMnAKOHhI6fiO~Z#UBG%8Hhp)l`{QL=3I!oSb$5V^V&G9^@-O8YJJOP3+@$A z7NR5=yJ4AqL7IJv@B?VwRB(jKwc@ zC}^ll)|0MqZdK}LsaHz~g-H;CkFne!#0G<5wV1C;R>>wAC?czD zMKrqx#4&UcDU6;u-AJ`%8n0wBX?C71qFjXoc_gdo>|gEG{C~s0aq&``2Jla!v;Qab zoK|(SnFlEKWz-Ja@3V26=-#?pSzu(6-e#8JW$g7#D~m@Vx8uEx^VK^P4J%-KSjVh0 zF)}eOF(ENEv0-AX#EywQ68k5PNSu`Te~DiwE=^pOxG}LX@khLs@m%6>iFXqJ;%{Xb zSbDL_y09GkIKIa8Mr>>TPR4=kD89no>pk&Pu}_lmQ$H)!q@h>@ zeI;oPX&q@JX)EdH(yr1h=@98y=@jWq=>lntnSD%&f&DzlVBlw*`rlrzKkFm6%qRvuEGQeIZxP(I-AVQ8uwuKTs3x~e)!U02;q zouU3x-CI3KJxVjG)Qft%K1?5_ zucA+m*Z$fUYkwWf*Z#U#ze>MJzeE3{{+Rx({;K}A{xAJ&yno@~=6*YtiyURFYD_Yw z8=La?FZMAGF^(}#HqJ19gI7_nGyY)QZT#7I(s;>u-FVOV#Q4UPP?#fYR?Tky_Qe|J zG;^!C>tpLH8|&iY&8srr zycl7RwO6;N+8f*3+P}2-#!6tv*e7EpunX-g?Cb1X>^toT?I-P*>^JNW?ayuBQJtid zciNrd&KPGkXDw#~XG^RFwu>{%Im9`}IoUZ2Yk~dNxxu;JxzBmTdD?l!`G@l_=c^tblKCy5mV>G>^x?#iD}^Swo;(G1dt9^>-Hi#&=C9`NGHZ`=#TeS;eM@gs10 zF3z9e^0{ZhYyc1pAL<5kEt*Z#eg}97*x>muJv$B%M>{RBqEjKAn0NF5I@-3vBnab! zGSW?*w4#dXxAY2u(-CUgQlb_|0v$yUxv5P6J(?=dU)cy18T5~Z!bHo60FL#aFdu`D zwH9eF-i8y0HX+5q{QfZ zG-oCD=IBI7vNN6$7WIsIMIIc?M+@fHv}mr0J=_Zf!z&Yusx>?kn;-%aZ6n^%_ek#k z1}DKIQ2pX9P%M}%21)D_v1}28_yB=kj6}^zbCF~;Z70k+kxLCs?4fxgfm*i%(S8?a z>c`thfa5VLT8W~W=eSCO#!Y=k{v6?q&cv}09*F42GpOU87<$+e?mA!yj9WxPqvayH z9PC&mTq}Wo(#9d%8j+S|<(0bV7vio5i{XLMmvrNPu&a@wgf7#5x^>V#K$JAht`3 zvbfR~F<~T7Q{#&?X^}C~d8E%MFYw-gI=Fs=)X`6_Se(V}#PJ&Xe~TcCI7ZV|xQtQL zeuBiEs0rylJ`n808jE*AGCXKVv=GriyTz^%ouFkUh-OFZg^{*mT@TtK2E>I3U<4y$ zj4;?)gxun!0fND#i8Ro3;sA)X5|atl z(@amXCLI(9m&L%u9zky5b~d-I<+J9b3z>$-14*YR>FT zKA&kk6P@ivi565E-xgoZF$e>Es>~zsnGL2GF3&;o~N^&lz+326kzKyo% z;R~*!xTwlIIh)I6dvn=rjy-OxSXjXEw+p^G3f7mfdmLHu3bNymEuze!R`gFnlcb#Q z2{s`JHrc?M9lG5^U3-Y+j7&b8YaA4T6==zYoNhM`N}}GqqwCH)`Ajx9o41FUu9Wk8 z9Ms344s7jwCX)vq4fQ0Q83aUedQbrfrDPSS@eI*tPdEyIskVQ2F_%-)+at)(o)h#( z6$qo^^>{J|%O>Z9JZixN?6SE`zHwz9f3t}X|LDmYZH@-25tqJ&5t{d*%uJyNWt4#F zGOF#4%FOxbte8hPlH5UEH4avHYy+^)DCY8oJ5gEFpr$h*sFEV}D5)740qY()3sBA~ zZyB1sZJ^3`96gT;yuAffshM2>%l8ApPYacy+Zs86t!q$&ZbB_e)kbNLzL|W_Qc)nd z=mDdT=^a!$9T-V*0vK`gJ1RT{cpA?{sCtPIN!&v`xZU6i`3!L8<>ZP*6e87OaiZE& z^t_~hKMAWjuoO|glWT@O?r4BUDhN*6SnR{rA&H~Gf58wZRI<6*L#Jqmv`Z9v$)!h; zDQ4tJQK2y)z2f!e2^$^BWdSWOrTq5`sO+KV*t{b7d~tg?HQC%kIZKvrpnh;ZOVBgo z6tp509F#2WD*;7@@Iq$0z7>S0XidIp39-y(n4qrhgmMLMdN^U zp^!#h+I$w#T1+Eapmnd9&)msn5A4AWKNVIe2(CYt_-~iZ7t^eWK!SkpW2yrp6koY` zJzxO6|i*b6fh#mz7NyQT)H}M^g9zaF-kv>QdVaAU!_o6pk7JiS=118wc zzk_4BjIcDm4RUoasR}MIj|04`Xc~@M>>&hO(-Ah0v_i5W^C9WYCG0|&v)@L=GI(PH zOGD*hx*pn45pcpn0XriwR^tF1MS2d5;Lov4Xb9>IMh-s_C<;~&vNO-tG;HwrW(SfF zH_9kwtfUE-;+=*NM4#RuBi|mt3~d-}-oYt^6~!|GbsloLt-=v0#?jHg!#0rkER{wO zD2Fq6l7=?!;7Cp_P?Rc36J&6dyASgq@^P4=VLqTjT!E7%d_t*-vNh6^Mgs;+M`MjJ zqbvnFL5>buz;j6q)j5SS^@1RE&qj_c!ZetuMaFkDl+>oQh$5^lxvwQHQU*uf24bm9 zJE1vw7HX_Tsu8C|9Q)?vv)TM?$|k~W(4%A-pW~@Uh|x6;E>cEvgz;QO2;_plLIJ3p zog#CEqXW} zM*sncQf1(prv=$Fbn)8>QIM5EhZF9}IC>F|g53Qc<@8g7jLoJ{((IvRjSwQ%N_7UM z=DwMftl#w`cN&bmN&Q z@OU!49We-RgvoduQ$k-r`MQ^KB@b()NkmrP9JondoWfJ)wg_6qZCnW(6vQHiN8}i# z>Tic~bB=$1zle42lb-N=M&}RWpn3RS1 zP|Buq1ip}`l;==|JBUqrqiUebwA)Jh`8ROE&^c7q?hoE)d!)0&im-B0#BUc3>%75}PyzkWR4i z-zOMCBDm}x6{JUB;Fq$G2jAp5w(Z*XIT?KVztJ;!``5Ve5^Nh4)a;e%=zgd{Xg{u` zi`l1;Y36xwGvPtrsd0~y$y>ipXYvnX5hI)ZTk)Vke_pnrzM@G-uY#X9Jg?|tW|2IT!Rq$9F{|6F^-8hQI8Adv(Tf#w{=_jCmDJW*A zlBDgGa}q5X3LL9#jfBI0VyBISI&6FDfnMIlqxei3uoq{6|Sb;TVMCJg)D2 ze(jKl{~Ug-ZzbmM$jem-$%bVcgrC9C|fs!?d zj%!aQd$D&A&6ndxdge=tMt>Uj<#SQN)e?3m9*8vD5BQM86Hi4_;QX?ES7O%_rozV? zE8rJ$j-NyLWtRlyptCvpqI=R{)4V>(D8l$A)PzONA4n4da2j_}6u7Ink% zj19-5Tyt!pkh>sABwQ5u(ZndWjUbW{)kqhuu{{YLtaC}gX$XbBi#R=TSL{=WH?~9I z*;fb5S3#Kcea#yPM^jE|+y#zBZlVQU=2TUgCAjxE`6=LrXKH|2-3}_&ia1^=cWN7Umij_$eiqC^!5be7lZ%oD|(Pd=J zrvPJ5I_2Mh04yR!`HyoNJA;pSN*L#%5If_muvQS*Xt+8BI`3U&g_ixFoUk9;^j5w8e_r%&+ zBvHk2hAcClGKYVGLGH5>f`;OfCkHmvzz=ZyQmR`1H?rzvn0IXoI5vzc1hz%SIGe2T zvXLpEB}S$o$)wS9f65)=9K`LK_&W+!!F?c6d7)9N+Nz0 z{V3lR*t^(^@;U(xMs?5$FB>kSOmkh7Ls#X%aW$fN!g-u8Pg@WYJT9ReU^9m#YJ9-2 zQ&Mmdn|%SV_tUhS!0aKKyEj{XK}n&eax#%m)Dzu_-o$v!-dj7dL1If(Ro*qRZ{o1T zaf#W9vlAC3u1s8?_(S5Z#Gev>!Th~fc~#{v5^L@?oy9I-bJ;cQX10*s&mLh;v{0^94n4gq%lm4u1HRAED5 zOU&cjMc79;SU6hvm2kRn9x5x(7j6<32=@sO3r`6z39k$937-gGW16QSdSVGn@+>c| zD6S%|DNYkN5w{h0!fd|%#b#~gdE)gV&FA}*_!sdxUR(K};uoSXsd$4TFV#_9xmOx5 zO_0`>HjuWEwv%?2_LdHoj*(_dXJJNPYklRXrI)2Qr1vG7(f1uuPT5)6M>$+ML7AhRqgsUN9dY6(r#Qd(g^jpZ%1?X_LB zS=u4}YAoNV-LBoMJ)%9Wy{x@~`F)>i-{_)l>UcL@@6?CuqxDtwN&0ks6MY+fM}2pF zfBkU%c+BxTTfb1Br(di8p3m}oRDVYQtNy0`fj+R#@>pXvRQ_Mj*vyz={KDANIM6uK zIMF!GIM=w?xYD>DbN%iz{$%{cc+Pm$_y@1G%&_d8YZlFRbC@~GT-h8r+wXX+HFman zA!;pOYyRH61GSd_Vm@#F-F(OVm-(fYur$EL;&6;AZ7gk!{$2!urBdBXLK!>ehn@`XJ-SG~gZojMDz<%_7ao{65biQA~JVMA1G%-ik8e|)^ z97rP~zPN3x#s>qvxPAkV$KdHi3}rBi5yxm7QTo2`i)$AhAGjSzFFH?CzW7r?IuJY_ z#Li$yqaM+A;A7ir{;k^E5n&CGP+raNpzvwt^e-PA&K(uWo6#3%!i5yg*>YpgS zOSpkNBHllC8>>5n5T}{=fpbJT;v9V+Y|Evg6McGGZ54w-S`h0YVW;1^m<5rDD?P$wOYZ4)vLW3>F@KN#QVr#=z0+D1@I^9sadtYwn?!(Hx7|Sj_wRF=h-z!sNZpZaF$`2`jx^qHXK_U6 zvOO9|`2r_{*OU)OI8JgPsb;?Vu8bM3q`;LJlqBW5VGVn7v0!%~^?_2;`9R31WeYZ* zzC&>qx6da$H!mbWE>dReHXt6Vvfqipgj|epi^v&4j)WQ*w9;L*Ql-M4DppEme@3lb zt@MT;l`7kx3M~2y@G5N5!nabnSn1^-m142-o|P<>u$FO81%GU=?a()NkZV>-me=bU zm6GlDZAB-0d5bBQQ!Zze-e`l~Sp@|(@z?hc0?`|P%&Zkz(yXx@q3Y!yW++Vs7Q)}D1f|huC955#*&A%;5JgUfqO?B{ z{*|NYML|~%ih~G|kljd_nX$T9&USD+Q%q8Y$*nBfmy#(HlNO16KbT~0*n#&wmCiOA zM0QRH4o+Hz=4xeO=0H>&iGM0r#|++$K5&BjYUp}fqj|-2`fjzY3Sm2_gtEj8K@3%S0dD{h&OlYLY7d1+-y1>8 zIjAH6+W44*VrbQXL5!=3@NJ%#49(ObJ~9;T^=$%xH}#;c%}wR8aw)aU#NvpP7P%* zR@gyghC2vUIEsWSB0R9lqRerq%9As9x5g!fq?6W*@5Lh_o7zl%{c&IzB^%_-gX18l-`Kk!rrv(vqMpFhV$4uO zCjb#a2{!CX0ue-$KfIu2F>qj*q$b|kA*fP$W=U`VjfE{S9TUGgaBjT(Kn9b{3%@)0dOGu280>zBkE zeZ@*GkAVaqgqc*|+#qrDuh@b;jUxOb9!mV-94adKfp4wkZ`}gv`*!c(@WiBJT0YVZ zhLR@6_bZjG+F}a-wg5Ev)c`av4Fnp(4sasf^05hHScq8Og|5a@C5+xD6-(vm;lIBR zjpxJ5%h`NydZk>Y|9k9G8P#XVy;npgMm3sLrRuKbRx2s-e8lOx`1en@%O!hS{NWz~ zLkpLI&2;`>Dj!T_9|g;QA26AZOB!}-z&c?25wZ0rrK;tWxEnk-WIoBQ z1qUkriuQ80%~r}sOlVswuY*gBbwG&zpF?gVegV&b?(;y#{?WpzHXVaG`&GGa*o`-! zEOxbB!}MJC0GKvj0|oYbu;}}e5N<`Srj>A>ZPmgz;8`v~Kw=o^WI7m;{tf|o5;*t{ zwd_|$|8+pg`fb>pPWg|Zjo?SNcoY?3rj;s1|6(W}RctDU(&;B~=@c;wwrKHKXar8> z>xx~or_%@fM@XFjMa&-~l522e(ZQO6nl{^peAmHs)N@qYX77-#kj0URrN1}X`a+^E z!fuP}U3ofjY^}4h=!kv3>B*UL-ox=;J(;@*yIAx*xNUVZb$FbOpNl4}%uy zan1O5JCdHXQCjX)l&UP)w*N9eQ!7nJ9MeB>KLl2oPh8&tpPh*5s@Pc@j2kC$$%t9V z@LQnpe@-=eKvnpA$cJ#hfXl?`h{T9D9eab~N}Lh!=26rSfPW#{2y1~^j+hM#nF;go zvy0LokwBX&)o|kf{@oNj>ri}%Gl=$sVJm8RXb9jryl@5^bWVnz4_bnWv)V$cON7+I-WUWXGz-uovpp2oS)rc1R@m_UR6qhYgy z;mgzTFMJzjgdj-D)yB>ExpGx$Ih)-M>g+J$`R}FxVKhX11N-#neH4*Jtnk1G`f~XY z_&qV32C^dKas}ytBDB$sbRg`{^-_&PC2+o`3#_B%FkVas)y7axi6~Zzl)}UwE<%vT zC|Lcy!1H;WJ*dL@1-!0`l|?pdQl@?OcG)hc{I5ef{fk;y5E}~2sUSxG;;G0$sY8K0 z%+WlB`Fo)L`Cm8-B3(ye&49%r#R?{lR*;3_Ocdn^o+w^GLEb<=fkXkT7It&Wbv?B% zvQ`RY^%Pt!Vo)!#ZCYZIJL1D2HyteLpJ%YYRELpv`|;$ADP4ww1sQ+~H#6Wyj8=yf zjW@{&ZYi3`Xtxpjt3nkWT2b|+W&2-qUeyA-J&aF(&tkQJB%LQgo&j^Qr`!f=4_8#g zHs>6$znJSZVEu_LT18APw2d0Ve}gcP*ozLzYhf_>btolX2dfs~+cnG(`yx(lD%Lhf z>_;2jMSicTwDB*&rNq?m|9~3GjV-7V3V#yn!n5{(>9oN%mxU>b?Fz9-vGm{fH7eR? zqA+Jwj^jb#Xfj_E3db<7Rx3;naU>G+6B~cKl5&c?Cu)7A6P3hJ%obWHF$pWMZ(uOtbzy$Vt%R#_h>O_Zi#mGzmJ1+K6TXCv+lS#^>rS%_6HbPA6Zu_D zy1Uvu$!}}YokxBnliz}Do{XQMH%l^nC(r1HBVO{0z%Ig)(8dSDSByLOqarTcV9aB( z(T&VO#icu}EyO!l%+Z6>#oUFDUrgpRF7RG3dJ>ypFSu7u#1>^8VBm}*8N*o{M1m`t zcA6p%0D)={@sWN60@lE#@@XPK1yv5?)ygqC21Q{vkiGRmchGYHOT5n=NlSjq+YClD5-8G6)8Qc+ zJ%|tZ@vgycKHyD~<8)9lEcRi(5bnS#Voma1B2Cc?jX z9swxQa&s?MeM~&gK!YU#E;@%F`AMK(o~S}pExC(ZG#0xlY+&RTd-vOop^$g+PNWUK z6Zl(m$+PAO?j}vvE3~i<{eV*o5=(4!B+_`Fj2?Y~VT4q8OpJ{*1 zf}y!(wK%b06pI=5M2C^~%uM64f~I9EZNd?0Q_a`R^aRhW)l9D;?9l4%VT zQ6S&bwZhSDl{7XJaGyuZgIP7;qGtVLbB3DrP!N3$Pi zMjJEj+O-L3gUA}`#)KlVElw=argVG&xRv@*ZEX;`!0t+$M954x?kcxY565ZC8G4#c z3h*8U1}|ADwHo1{7*X{s)8kYpfL=i}ya@qyd}`&16@2RH`vD-G zQQIa)TX1X@Vj@Z6*mnA8oT#%}-`$Rb_0RM)%F^1@(@uX|u}BMz2}H572#?C~IGWMg zCJ=|T)^>Cnf&yB4f=e^t@dS(Wu;D-cv7`>n8}{$SqGT08@EqME7NnP~Sw6bbR;x`Y zb^tyTGngZs(a<}>aWoONlkmYnL0BxU+!m8Oo}7muOe7tV=>D;_T2`+em9*>VAP7a3 zp2zOPJ7ON0hO;1Tk`mxMaO4V>FhI@iw3jl|lgZ!HmY%*lO)i^0iu@BC zyonJ{pK}uMN+)54ixpMfqmzvZ!I@(s=0~M%HHT%}EN`-Bs6&aWe{b2y)v6QIrj`Xz zXbV62EJT`ycj90Ja0zzUanN+7t?&MhYSyd^N1)8FN9H@40uH`-H(FzH1vBm6Nm5ay z0x=J^qp(C=4w1!;leX>T1W#9nLO2K1m7%UnJCKUJlDkZ~t#Mb{Kwl%hpo5f>5gy5D zdbXk#8^?C2xhlSAO)Xtc`_mC)b;m)_p*i6;YUni)8-#S=4M-jkhsbkr!W|ERPYfqh z{I<1CY@-yDZfppCuH7*Ki<)$NQ>&t0^Ra)FW^@I}2e5lU$*`zjY8Ac*z41jL@ITVf*-gdG$gI4nDoxJ6t-F_6>B46YAyM}u5Z zFA`O3j;bJSRivq|U3J|pJ*VP%>sLx0g{kGDRw_&@7CTC7mr5Naw!kQqv|4^`lF@Ig zd3eR8L&KqBV=FJO*1RpOeQbjd7q4IzJWsf#gNSd>vmzEtgxnwiDk~9{gOHdD1%E`)baWX`yq8_m zvz~u5(Yb)=yj*vy_8au|-Jsdc0j(WSH#-k9NbPxlxa$(LD{PD>?)sIAk=p^K%?mpe z@xAb%RzUA<`DY8XEj_Q|cqg}c6B|9FILhPC*VIF^x~ht=DpS@ZrfLC zHMS$~p5ELeBHot4=F=h^qD-gz$NG`BmTw|}Xm7aOnYX`=KiHRBfDf^aJ_X>1pe-^)v}qU&~Z>TGl^W7Kx@ z@_GechO7!dMNgokPahI@6oq*tWMfkow7fY+4z8NJ#>;5%GS*G)oVnaf2}s$#kRREW zsN36m=z>q)_A&0!LV>p(Lr&i4(gCcN7Y?k!%Nt#09;DgXZoOh(?&j4hus}Zga4rDV zn9`O3!7bg43JlZ9!OJgDJP4PP%g?CQYW^GeU^@hU)mE`*5YcVDwz7SCtSbnaW;9XYB1qba?`-w{R67i+POq!Td!90)+I)lQIPC_ z&U$_(|J;EFC%pTVxEJ>_4pml`w@+vZ7j?_K;=1LVC1xgeN$it2ByoIV4zF5%b>im4 z9jIFVWa6d7n~8toUWUL-+{qY<_nlT@Q^GqLyRupAP<8^plQEawz!u<5r$rSh}H3s9;2dhu5A9`RxEDe-0T4e>+qONmK_ zl$Od;7k{gX?q+N(Z7cmUe5dIY{!SBBDgOhils_yzE4?bcE&WUS8a2voxgfX6!{ssZ zRC!~0ro4+hOFmRSUOrR)jeNO$t$YjKV|rMAMt((pOa4gylE1~|;w`2jN{_O#GD%ra z*&OdM?W*jn9ENw8PFK!X=HU&dTa|m2hn1(5SCqGue=1+83f^8Ss-5Zxb*wrqxc3oX z=<}WCPpj}koTku5*SzsXaJUnflnXBQJA;{D@pXD|WzE-JjxL+|Z$G+LrUSS%r>TN|Baoa!2E2oLfH59wj>VQ+n*~2AfSS(n<}n;DFOi~CoMh0LPZeEcmrq-c z#H1dPc&+*f34ujWB(=XW0%-Bi6;c|pjqMPAj}#p@4CfJsvj=0agEbF+Dz%^sl*%=t z3}+poa?l{uMM#8eE^gK26#n$$Joyyv7R)iP7L^A*(R>jjL`#deSea7|9V&1JZl!RS zyC7dCd!Q`{XJE5_Mv3$mo{I^`t;w*lQlr+fg7{ACrY-)^(kU?2A^{R>BIw0+#2dAk zsGmY;ws@puSY_-O5~OJZ-i@Rr4Yh&}G{FrKQHTX1Y#c}vWaL?-%8(s33Y-AP`b!&3 zVGqMJU`zbrq5UI;fT6%(XUr_v;cdA=qP;+)0XHH(fM!UXw+he&MkVq%7wLx}1R)t} zv(+7Nh_~ZChX!+3<4n;)1WHD`COR%dD}WaB5Ho@scq~_T$T?2Bq{XpBF2DlBTzO*# zQ0Z@pSYOSc=W>NGf;-!>nW#kQMIUuLdK~JJ@t-S=iZ(;~Q$spjk4<%xX~VOLf<0XKQuVznX(x@Ty&KiLJ3DuC9AZT0 zS4kz?#B|DaK-$je88@|Zy_03I(kWKWDiLotl^W;iopsk?>lV@|l301sOAc4uwraak zP|}`%WM^l4*C>0qY1@(r>Grl-r@w}4wbyNLo|gn*H?^0Y z?hwsVD#ea1b=GTRJ+rIRb^Jp;y_=YIWRqliVCRf_) zwY{rdo%NLi8_chFw|DtRrqXgomXpO~5=B$oHuU!oq^7HcYOdHB*Qw154CUFDw~Cz_ zlC@LG#*P|lOkl}XH*K)IlN{o@uJd|zSZC*aHyO#PJ9-s$EDZnmo}R+p2OB^4JgvK| zC6lYSceQu1sco)hr`q;QrAxBFQu$=kKd=U!fq$|N8Im5$Q$t_n8jxX>m0c6AJ^wK3O$`aVoK-9|=DrToJ@eL0j71(|g{eW;yvol9M>vrTuBP%Wvk zZ9izOJDI%JPLZwrDez2KYaEvAVO1I0thTpTSGJQ~?Q(g(>vYxOS4PDp$cTrX$ZCCvd>qbUTx32;% zr5%zMVTW8o(a_itNfWw5(o{2)FH&wsr@(_xl37#9p+jKDg)lFLHl*aad}r4j+JQ(t zF-WZG&dxToq@>c~-|Y6PeY9S$+y3UZP7~x-Yu85T5453z_(pD5yL+13QFr~*X%`cY zoD8N=JmPiMZDHe1Td8`DTe`X`m$+l$0@rp`ZCP;-rVby~<>82Lbi!0WxGS2ws0-t6 z*okRA{+XaY7sRrHQ7LwJ zrY*_B{hnG|`_@Uy^LAqoTOMxPxbr9BUY`GQy}g~ycH7$Blif~~c01D^fwE`2b#>Qe z58&8LcZ4LP{@bbUa*Ar%Y-hKgoVwyy5d`>vEkp()QFYJ(`-7o!e8_peT4xc#Dy{H43l z;0m529B9{FTlep?hpDdpDG2Syacw_}~-3yDO|?vgayJ`OIom)%vd9>tXb>Cv?x^g7En8|HS_?4yC%KfR+{ z*6g<-t@SU|10ice#q-IA_7_|;V*&DclHfy|OSYW@b>`d^T+6?x-f3j_f;Q}h9bFaJ ztgE8^+3iSL?v(a=r~h!LKEf6bZXYTeZbNVHuD=d@dR%(B=KjKi_NeZIv#TnTh>bZ(at+}o2xVl4r`W&cG(7WsrntvR;O!ptKOgH7a?D{&aX8GrI z5^uI6tuW?yK#6R4dk3_!8ziAnMbHRa4M$==2NFx9g)^Z;+y9e024}8uhf4~89ckC< z2$;GkXS=AU=kHkuM)pS=OP3)IY`DhH?e4nwh`YQ2<~!gu5-bhNs$_2KM6%(T=$E1eT2SgCpGfV95S?i34Fs94z;naw{4$`_)cTRK_Kcj zvK|`=_O9Pf5p@>HAROQhFT4KMt|QkmXQ~2vvW?><=9x>o&}{55J5Ihbu!N^~Ta zPpp_&Iq|c^8i{oh8)0?9pYu6Kha`?koSZl#aem@5%uu>9aeLxE%sYBK@jO--d^_<` z;@^pHnaYsiSsi!mhO-{5GPpWhi>;6OM>E+k*HdgzYHc6YVZK7?X?Wpap?WY~49jDF4x`Y>K zbG2)x zY5IBkrC6Wv2K_eu9{tby6Z#AK-}QH}LgAN2!qAKq)+lT57>{PqS0Tmdg1%_Kkd((wTpsZ+T-(d2bJFs9Usr5 zitZc4+u%1Znqp0f?`RhNR*tseZ|3ml@AzouP)s&zx1`&c9>2#zKj6E60Gc1fCD03Q z8~tdoOUf>47wdS;s6aBhwGy5DiMMqjK(nk={A0z59iSuj0Dd>+$I@HY{W#uL8IQ65 zx>0|$Gc`SPJXJGT1|hes?XWodk!0O!C;3s9Z1g|vP(Kh~i&)DdQ~p3SKiUC9KCv`E zWDNR=F@B$nu?+vW9IXZR{{cse(W>J!-)E5j*7+DCJrUxML;goRwFTJ!fT>&1{5KMF z3;XV$(nu|QM=ksDwuRfWP;v|T?(s|SqBbVG6o!MC){jfeE!}@W%!Iv`=r>i|c5r|# zr&|EvCwo4)un}LOBdU1Lr9cq4b$V$%X)?QEALi6CjJu!_nij;0q z%o#pkIAmah{xtd7;fjNrcsxXE{ z&c4~}C(!-(2t_b1$myz^{ho%)4k|(TvzHYA8vww&uVdMXHW+1Mxj{}<(y5;Y521n#K(P|R~qx_a~N|d{D%20744owRGHy1IUZLAuZ;gDz;Tl>{eF&p5{^4jWn#VvX$g1GJDfdD@)ib>P_3t zB)IBkiY*CKa_Owpdg_PntM()zXQ{&JIo7SN^dqngWH>F!m13yE2TOrkEAflx^ zt199_IjhcEPc6;;$aiExl5$l+Jn3=?;vrSsop*ohG!p=mMnakPL>?XXObsu{eb!J{-ud#R8$EY;J`1@H! zp%;U> z`pWtm`a1eX`d0eS^!;NE%lZ`Ws^Nq`l`NoaL?Z&;vL&lTF zi^gllyT-@HS7z(_R4efHsn#(!GPg2+ZtiN%G7mA2F;6znFwZwHGv}K(nzx(xntwJQ zH(xYgGv75oHovkMRswddqSbBl~KEc*g`u6>Pt zvwfSr(7w-p*nY}>$$riL2iC0$=Xk8fM&~h4Cwi)&^0yvnq6bdIN29ah_Ipmp&q|2c zlD3UlED?a1L)2@)mLAZ42mbHt9-k*LON&+nQ4Ma*E^V?A`Ea|8$@kMx@UGv|(Dwi# zVlD%ZtKkffpGwMs{C{F4FNS@ro*-ua%gTt+L}();@#zvjrFTRCmUOF*S^81Fq`ZG< zyZ=p7FQF9wYaY6Uuw&0&7Q?|0#jv#6|DSfG*dmM3M&xMSn5(Mtw^tX_@cRh;&zT``!G(98adGj130$0&?rFYo1LB^GJ7to=V4>{)jX ztCs)7L8sy(eHlhXQ^!lu1MoI^S-hyFtYkMo8*s3tPC4K~521s{(aVSd1qWwknSEC+GcjT=oYfG#0j~DV{E4_VjYZQVmbDt2 z+?spor1;He{~gvGM7NvG>EHZR)@{l?*d9$38ZlB;dK?eahX!l$lN~F#O75E*neB}9 zJj|;4$@p?c!)fYR&golTN@YgogcPQg{S*ND=4&42%8kVA6B|?KmI=$MXHZVGJWT!@ ziTPMa=1YkW%}>mw8{1fOSyQOU5bxj-Tq%j|LK%=2vI;S5h*vXM;4^vtBS^3|1*xQyw zt;}3*g>K-PjPI=vP-hMJPS3S^Dx#Ena*z{ra`aHZ`*JZSsR8}7uJ36;jYf7VYK9%N z1TCrcxK5D0b_p9(2l{6({=g2@X=FFbI|`$JL{IAdvkJpA;O&28?+Cas=RYJsgnGMG zD<{0Y6etn3DJTyNQg~S2&w(PuKX$u9o{2VQsw`cqgl1GXGMae7GN2sED*kyH5+^1j z+c0fQ8oG?R5T~(2ST-kZ@Dp%~lqVeyX1z&eyn`9@(ZOZ89odDfD1I&r6?wI^I8<3y zyjHFw1BiR!)&OPsr`zs!QN8jc4-LDLc4JPAluZxT zvZpGGsd=uth*$D)FE3&;Wb8bswYzI#B9M_ z)^V-y2jOnve&I39s|U>z55wv~r-|o@my6ek zw_x?42gFB%S_r(%VK<&T@*Q5Da*#tPl7M1hokQvEnxWleb9wwznaXA-dUGl!!z)no zb5v#_*x@A#2dgPLK3ckDbWl^1+BB=QM%5EW^PPZHCt$?n;-anj7C<4_4gf)s#r{Y_ ziv5}3J|b@wlWl6EDFQw7=dH5MW4J?y>WO2Zmq^kk(82d2A}y@YmA`pL#Jb0>$Zy1Q zvO#If06#xDu2pivL;Z*n?@tDxohIX^B7>Dn#*c1lE>y($R=wlKT4#SAkytIp;k8~{ z*`U-`)U3JJ(jh*ZSEF{#v&|k&oe$R1SYryT|8a12>s8d-p>ctBC6}UR8wt|v`X$zGBvVwUx&qKry7YZi^%*o^AG zVI*x+OF8CMv>5xV8CA*~ZpviGWQ}~%DvwLqx@mx(e@jZ!QHjnpugd7fvYBFQ8g>pV zx9+GV%VxXsDly5*7J8~lE9uy#IoCAvMpaqWG3}J68vB+ECEv)So|1{mR4I0h;g&(i z|A63T6(##>#zI$HZ1dkvD@nt2inAPBNf}rIcf96eU56x_h6Ta#r({>mS!PPl_zP0H zmdc~9%&TRRxja{Mon+F{Q?KTvykqBPdAenwN2+m|QN_{;t7dc~Xj!2 zfbhj!HDw#gly0Qwf>hclLSoQ1O)38>6j4r@{*6Y_5mR#UDx;XG6<;K>S;aIPe?`?a zEN8(oCd5wajyacf$&NucSO6+4VzY~3DcPiDn*M@_^;Km@lRFHSNofu^>dEnHD%52l z)Qibd#!=ZPk}X4){4;{t(S^sEATP$rTKZU>{LU<}eH z0o$WuCK=O{m2nZ~aX7-Anef5`$hiR&&R))Gwz;aQKEz3Eyp>0e|P)ttjFPF74)UWhesbi@BSSU4!SRJIIx{cJMpTx@jag*gr=B>i6+ znOgE2YN&siMmvY8IdC{9nJnq@rpaQ}@h?o`fWB7Is5z|WB*FgODnLKzIN4)aZVz>&bx&MSUkGS?=~S}@TV2g0tMXm=bc+7h z2ACS`ItNQFBPJd<4B$Q+Li<}_MOCMotmK@NbiI@`*a%Mhf=a5x@Sk!()!EP~bCC(( z4oRo(sEx0=h*fCJaW+i?vhr^d=tM5(hNQ^kru^i|Tq^&mB$Q(WhwkC0H{`J2&Oy?3 zNFzFvYp9$1IiXfg<*3t1DYXY#!@r-DfFfAL?hB_{bUr1(s9Okhlgh~sV-p>^_Mhjd zh`!_8_y4(j5BR2ztbJH>ucWKqrE5u6Z?hLA!M zda@yf6jBK3J)2G2YLzWgC-_cQ^08VgJ9+vaW8OJ9EyNbDlYK zW=2f5?Lbb1M6KNGD~v!XB}eiu^4=~&rz8oS6vsI#JAfA276s&9(##Pokzt=$DHJ=e z=E&pI2$PJWCWXs;2F)&nlHKQg2Wv zVQq&qu(pE$;)QiIOl(VM(s?i=Ts(I?n(MZz?wqR za~JC~m~7&>zx5-N@W;ZszEc;#LVq*dYZ`xQXfHxNzCKjYYiIircw{WGssF{#>N4Ven`zX>&q<#>do3;It&4d2TzmTg-@9DU5{Tv7Pq)~|aBir7& z(=W_L-~UyYYUcoTddb^I3&LlPA$7RZGzGYM z`uio<`z|hpK2hpHjJ+2*rjUy;S3Jxp=`+~4Y>-a(#8m8kg5578ByU`TeLI3pU>n7i zNlKVrJShW=rg*smAe2-_v(v$%Dy<=6Ux}R!5sOPKZwOE%U=$7(%9O<5=Yw?y8+{P0 zx>2rr7qE(y7;yk6Dyd3p?o_CZ$ueaYL0|+oWr;P($x>B}02l%aW-}UvQYBYNqXaMz z;Bb&2PmLH-26O=!<0OD9v!aYZK7v3_5{yDnQ4e%@7Z3{I6#O-Lo?w7eN?9@sSfWNL zP~rCp(gV-~xELT$R3S?SAcVUTnVqf|a+y+12iU74z%fct6v5IbNoph$Ckfyqs2Kmf zH_IV{WeKLuC%}xrrWk>01hPd5@YTvh%GrSC0Mp^}i;73GhmLAgjPe0OP?GEifVu&D z!)(|D5CKZn!AXK7k%}w#9`X(XHBTmxQk4A2%xIMnR#g8T+$bg4MJhn9N?rU5LO}Ra zow7oCbq9J%kMBcud zTmXVkvV3w2G*G^R1fd0hRuSPK$g&#?S;lk+G(n&t64Efxe1Vq8JA__DP@sv^LrHu; z6axw~JwZ`iEtMIdaf8l~<_@q^i|;07CQYGyprBr+Cyf`ClrS)#;qbOxdXSLykV2@7 zB}t8vm{6-U3QC~4r87c1h|dy^<&$;!NM5G{kTR&1c?vN!5Tx|iVEh3BBpCro#EeFf zMkCa6&|$9A2!KIPAg81mP>4j?$YIQNfHWkMN((?rt-{PIzg0+_5`~WdoN|I`05$!2y{T0s{%Y1E~2p;4ZPG!U{;K-6@eJw{l2}gHj2I`#k|SpK&<%2PG`xHAy8< z-6b#pkhV73@nDkTI)e+`&a0aaidN3GAe{5~UqR=N@uaQN>>E@NmsN5MvD$|xS;a^J{3 z{{)xxW(mn&fh0)`D;!FwN)AImLa5oO0OT%yj>}%R#LP-43DBFMQJ^=zndD})L}*be zw{j)y=I|quSfS8(B!?WSt6i+&Q2_ZaiAG`75!L~?#ACT6Q2~g6_DY!)l0Y{>8^I!t ze?e}5iJu9$lne!ai1AnnlvSL}5oR}(on__PMuVD`<{M>prXE@*R-qDrIV22HV^kxC4K% zsq4+Bzd%)k_JB9PB@-DnIx^gU$lCN!Ey^G2Rm z2+s;`=Sg`i_-eV5!YiSeb{@@bd-lm%w?2m&!uw!{KvcCOu|vFY4mF&C9k|M<9b`v% z7Ax@q_$XoI-DvoH(|`-{lkh2oMbnDl^VFu6f~Fw;w63L~V0b zFC?`6b){hwln5t&gwEcC6FE=3{HHm8yO#hBy#=P06%4P#pY-K5xvr<6{qtJTTi#w$ z@et%aN%)1}Ajco5qmcI?a;RCLcFzG&zZj_<40nY);6Rc??YnTm-K};I#~cW-@C)_R zuy}~}5PtqDmFj6&CQ#e;3m{{88zw*CRXzkWS(zI^4?r@tSeu-Red8A>bg zeQ?(shjEu4%-P{L4t(hqYG`4+q3`)orLCZqpG#eRTd}H_S*I!0S zk>=ge#=wnwQS!cq(Rgg=nNaB25FR_a>UU;X;*fj3t?go()bK7r6R7-LF?%3Cl$|4j zU7bzH7Ew8Rh(wqUgbVi&fd>@2hz|X!%P;Sx33?Nsyj0Nv0qAj8U(x%K3%S>?$7#LK zU!W=d2}kAD*6vqc#-CkOdbBT5dbBT5`Wq6o!k-daeVt%VFDYAF2~Em*JjNodg!$n! zVPx>_ASZz73A0II!3WP#0agu$RigB|u-@wmF%g3+6j5jUyiCLaBtl*nP$m*$A%Z&= zji^D8)H)Czy%+jC;5-ac^!mt|7(9K^op8aAB8D)ClRhDXdNqh08-~}$$P0dUm862; z0?C~Pg+qcr3_iG_u69bGy}%b8crs;=aTlDb{f+g}!G?yXA4*L$j9VNuCq2+LBh4OFI~_KZrg zN4!)k`s>W)PRhP&_DPX?4Y@GE4;Lg$G$N7ao_I9FQf&~)Di#WswPxozo#{m>)3+B4 zjF#aW%QMmzr{(hbxhNeKI~f|~IDF>@35A8ot+G(#$IaS`agJJC2xpo;yLRK~__Y?5 z8<9igR@mr|Yzk+QP*_C4-T0gF^Vh!l>V}1*kinwrJKb$1Pw-tOdbxl}-UD@?g5E!# zph56FXLER<$@)HY#G!Vn9eRg4tQIuj`Q(E(lh1fO{~5CX40UgOAayUC+JqP2x1T|q z;Q~1WfAFK++#vs66$b{Lbz~zH^^Yl@W9mZu~BZB1X%kbZK;jahm z*)ssCcOg~T_4s97N1@xPZF=3kExl#17B#dqX`SvZahG;*i+?*^h5ufLW$3#yq~h-1 zQ;yFRO;ZmiH>sOi0$be9oo<(=X+&VT#^v4;90B#=j`QydR|x(FmRruN<_(A3f~$mU z;KoRehbAwl4WW4sGDz$(KnS0ghK@J590geyLg0CXTqN=5uj(56nnSt|=P1s&&{VeE!Jxq#XCGD_Z&^zr!1t?zplFOKKkx8iVf{)*Zw zO77UVad5-8uYh;|)0N{LDt7-fk^W;6*v|Vq?*}M96p{NtQy;1&*-z|6W0^!d&~OIEBqT`Dry+q1KqsiDeOsbJ zIYmlLN6*LW1C85vA#s^g7jTkLlzfQ6;Rr^aAu1VO59yLD5r+UFIj69E`h;;ZkbB5O znF;+3LPheN_>f$3iLeaUy-D`D%n*x40{_X2!5|U^&usJRT{^$3z@QI1vt%nw^;)wn zxxzNBHE1zN^dGdcr8;)<%tP3sQkt{$I+aSoYV^tJB1u>kWF=&MgXB?FC2g|Vd7g5o z*d$mr#!>9%Z&2T)v9N3wYMZ=e%kL*`<2Tf}R4TnYFtjS%8Zl;DGul$Dmh=fb1=`Bb z@3=EoI9HE^G=HaBBH$Mq?fg5QV`|C@$|j8+C(#bmDm7_pkpfAwG%<(QXWisR~s^wfhG+zB|~RV4*0BbSkulO)lQhV=GN6) zhEJJ%K&REfnsg)BHi1=@s}i|vPPbf3+Y5awN;DCBnOG`^1<)B?dYaTLRc88Bc`6;N zR;Ax2Vj@bBNER&Jq0Cb*Syx#x*c&dKW;9f!%2+&FEB|%G&|Iu8fl-Ewy|^0L3YF|R@u10UayyT z{yeW1Z|83mbn}GP3f_Nw3~Qq_o%afN3MO&-(!z6rmMVeSGwLDcq6Lss2dreg0O~=1 zwBB!@*vptfo7iSUt%susC=EvMVtlTMFQ#_ISeH8H^AODds^q6zfiMiNx)>NX#;cF$ zVyrNc7|SIo+=5)lZ}&M&wv=y+(A*rTOu?LKn~Jy55~H^{qV26>TALwA@{Y-T$?qo-0Ry};>= z-&u(ufid|SU6K52TZ-9drz-ouoMeW3XI~!ZG)S*Vhkt~Gd}e$bZGdzH1{y7Vls!EW zX4J3@N6#NQf*)VZ{)uEz*L^QZ)=UNMW_UsOZt^O_LGoIPQV4WZDoFvq2${8+KZH!? z!$c>S;!zP`ms(yU%yBXXR-2x|oA)bulDQjE&`mzjk0+=&rIxJH6zvj+w!yhGzxb&_FfP@5p!ja3$pQA^X*& z-1$EK*=1&qt~pR$-GFWb&NK(m{{KB=ev5ho6~+gAftZ&BU)W3NwBNGcJjy=OFwo~E zocV-}e{z{w^Mf>Hy1yl(Opmq#cPiGVQ2GCR_FPi0g?KrDJR5jJd82rfAg*uDuheV( zYl#4Ob-@N*%&Ff*t95Vd&kuZhZ%S)k!USzfi4Xnljm}5?nXzLkd&9)x7BmGom2;Y< zs9#}mF0IoDZw7GO8O|Haapza!f_~Ot!1#JJ+eIAvEzrPExH1N+4yis^c$pdEK5~Tm z`;jAY6*c7FXT_y-*#Bi6K?JF>OpNWp0sV2><)|a$LwT(!djYQfS6G6ohEKeKoeEfu zLuuE(`0q0Yd=0U2tHNqWl{Lh!U#voNji+_5G z6wq1%sOjJTH4OT#`Qzabn%)=F_ky(k+`AmLXK{7I_eYL=Pq=*!`$k>I&#%gB}^ zM_QKkhtI#tLv!gm6XE5h3K>E81n`p{5>bK%A3_qoz8 zYSmB$#~hF0q9aGpJb3*W^+x+eo-}m#ukfM$|CK*QTV)(1$kR16d@PFxFDHM{tQF}4 za6Ry6ud+@*xS%loy8c@2zt10-ZQGZqKj6cG`g5^c;Qz!6{jcgz(L=J2N&RWip`m@%XUWms5dyeVrlm&waq@#@gxA;RGZ2x8c96RRNNcdA0lQleMkNYks zf2s@Y8}XIEpC{q%>M@Tw&{O{*f2w!`VT9~7-fS4T@NfBR{%8Bs9}570({rW>I)NgF z7#r4S+K}gRn4pV+!FAq2gkN%nIVp)sPRfdp{f&*#MK8hS_+z`Li!3OCY<)h<@Fu9uxZ2{22M93TpoYO~iN-!D5BwgGs_ggoI-X_3p z#SWrSk9N4q7`&Ti{zJU|f9&r;KDwtllmKwPnBcOr=;rhqQf**#S8_0Y1*|4{85^wV z2O0hbhk;KWjH|5UsBG(+e}_ScxAy!&daa-dqHuZ0fz-%Buf=adAlX|e6*c1q!BISr zix+M@e-PF>BKIkK??em*LlIb^S|!NseWp85`_fCbCwd?4{(Te~Q2<7HCq>WUFYwpg zxP!*?PT@C#*SWNe5KGtd<_qa*85sV8Sdu*1;f{pg{Nx?l8jKND^K}h=54mgb3n=Fo z--;KXIE}nwp-BgL-&54)F5}6-J)ceY3kVYVQc-_ zZfl{wAvI6ISMg;zYLP`GbqF*?-o+o$Uu=r$^J1&!H*R_xpTabwcaCaHm*q#MuYGA! z>-2Pd!#ypJu7By_yXTCoN^7p4eA0;c64Ue|zf~B>_Ky<|^LS#~6jxvX57rqApJ$nG z1c-~5bb>yf1krb0yenWv0BBt^iHKZ?+=Uroe!g!-^yMZv^UblAs$qv;m_Fr!?UlI| zYxlM^AD)*B!P8xvj`gv^YtIH&BxOz|te6AzBdpkXbZ?1iNG~gL^|OO~t0SexOIQ)k zlvmHHx)NA1^+&=AR+eCempY2y>VEjk_fLG%T(WP^52s(){qUXFJWw89wfql{?O(im z^WvSc)EDss{{z1~OM3W~vvS^G;MWIO(4Suu+j{u5;Sa#CQI-FKUo>ym`S&2c^=~{M zjLmB1@jN;Kgiib1WKa_XKSL-xC)E)0tmh)GEeOK7VGI+B#QH&#@Q*0(wI`o>73Kb8Z(U|) z-QI9vXn9Wi%<7iu^UC%ah7B|9E1NgHrFv$2&hk*QG z%c+F9NyVz}o$bxT=5=3rqWY`j+lEfh9f9(0Jzf6v9pkg!zxKhg^|ftPD;`2=V?REE z_tyI81xvHKPvy0a$nAd5Gm{=Np?Og2OZecu&wsQQq4?x>x>MEBc+<^qkEPzT8wW%p z0|YaqTZ-(do%a>3mY$o#r%#;g7VvX3>kD>tw>2ai@Fx#teJKk*CP-oipIaNs$_nw9 zRSD02Qyh){g+7Sb(76{=Gx?%p=l+&)Wi&PLNM0($|37p7J?ay|r!ZC{1bt~WL|Po& zuqYVu!-+|R=r|%d5O`0*>50tfVQd4D5Hbz`MnPz^N$+#dkyZ_I0^@(eA?g$S-MW@k zF`pI(idPH@<&+xB`1p?PX@$#fl9U*tnd!L$Mio4eb-cAC__m^9`_{&jC$}BTG}siy z6f;ETH#%j-g0x_L?O4zF0rI5nAKaW-tT3mpKyP2YGc?W9mJxG1M&TFz%5Yeb0Yh-( zuToi|Q2doOL}#soaZXF=^W1n-2hRgB-eKsQDh4^=rJ@M1Sj(~5z-mASP&RN7@=po_ zy|iHud|Bvq0>`WpCHic81__WcEaVPm>5r1hL!QZXtm)df|GYErnIV(o&ponk-NO&B zTla`!^=kaK$@IqzW`k_A_*QL>%u=D~w85X&WO`)v>VJwerXlI|;s<@Rf3%5 zMgjuE;XW9c!zl_f28N8yV2JsHB)D-JKr>&@c|Khtwv8r`&z%_}T7IapeVMz;s79tSPDa@G~|RoM>zqz2uDw&lO;2)QEZl3-x+ z-2DZ=li26EQW<}yzG39;_M&0p)cf&wO~Zx`y~E^0YK_SQBlD%6WrK$e8OncR_AIG! zXjxb;50?!!mqq4mYpSbjia$C&QdATfFBU7J4!Js4sE+3aR5_zX`nmZ7r_CojG^I1$-a1Gc-8`PjEFOOFQJ)rfVYnov+!DwP3$=KfuBY>R{-sFQZl`!x*27Z-j zVnk&j04o^W5>u1GEXe253w(maHzGi47iU5vF13%;G7={ZeWEbPfCyq3JMnGsal+I( z&G0$72G7JFo_}Ih+nTG;4rDuhVnOTjoAHu6mn}bc)5RH?LNp+Xus7>c5z9 z1f9VObS6c?R(AX&RD=HVk=kjw(X-_qYC`{1$y<;O?Kr$@!rBvG;}7x7UGpa_d!lUF zop&t1i>k=VDyPu#k`a$1Dzm1#z*`f`i4|n$(t;p3;?d;b(Zj;c<*|K2H7)qOtx zqLA)7Mbjwxo@v)ML?R8>a$9_VczJPXkxwnBD1L|)m{oSZ&?rmN*z${CE6OT;YEan!lBI;z7HCzKRudKS3K@So zr9c+5kfK!xA-T|P64LaoKmOQRQ(j)vDVWJptU@i3F%pT)sEVXmtcdbzpT$8HmY{#C z&}(_=$DXoSo;nsh_ko%17&>%vk`;*B&i&CR#&GRlu8(1LBY&T zJVq(d0o7qVek#EQFzYF>Z6 z2s!V%>xb@BB@_HdCU+=N^^}h4w7ICQxELRvYwH|51wW{K4L!ch%;V8$EBabEn*I}L z;S62`=+789^#fffKz4=<*8(NujU{G{AuJ$YftN$iQBTjWaI^)PO1C{w0wacPp^!}@ z^p-rZt<;1pw|8``jRpeIwH+O|<3m|tpV1M2ocp260osbupxrPV~$t-9~$TqQm zEY-WO?a{xUSmG8{j7k_tP^|s;LFq#INKyu(nIqY>L4EN)d7kC72H~v}n%nn_G;8#) z8~h%vx<=YkIAB202uY1v>oNFWH>}Z!4~%b~ph!lq3VuIjfXcHiGhLmXmR5K$>QuTj zs+yfCrKPFP=IV5h(iuBgn3k5UP7iMLs!FH4C_t|!E70#&ym8-Z^kutEVfXkwpW(Yk z96Quemu&Qw)IYj+=FEMM)R%aT$#v8Bx892eeGa$SRhEf3Y4v@7>hfvaizFJc{xE8I z72mt^I;UJ%Fb)lU2fumiqXvmAYk5UZNlC17d6rCKc=Q&O{tmuR zWDsj4i`*Kb2UO?dc!7u#dUz(Dlb6P6QnI3PEsV(;1}(R-+?vMAcx#FDP&8;zK&If! ziBUA@P#yx`8V|)79!xe39ASVFKG^dxz$1ohx~a)N3v5IY9^!uChzva?XIU7-3}zm< zLRJDI$PeHg9C-i^lk|GdxXBp;kzqm=YToCag98QlG_=&u;L`w=#%%YtC@3nck7au(8<@!%ggj#eR$5}FD)6nA3d^n-|*_{SwG}^(fL_ZCQq3%bL~SXaGQU`vAk%ZjvlgR z!>6BZSdEy^zld+tmz9^l{`xrD=EXzeCuTaE!r><8OsWFi;f=bH3r+0o#Mk4K?tH{U z4JSu$TUVNtw`h9Xi7m6nlrMelrR_&4A+onk!e4df?|J87*F(2Zi%;Tv@%ggSb=xrA z`07#g_=&dZi}H$Qy^C~{+VITx-c$V0IQuC6`Z|N*I^C1+U6()SmWR6V+sDl2WB$js zzx3MDa@-L=%hRB-=Z^_*0$)P}+9IVef~y|JIkZCyash8C%qq7IT9I3MySSOlaZ;FbM`=jTq=9uRa^b1_KP`nkrCtxEcf_g$a5~z!KKyVuOfbdk=elVSpn^ zQUlKbb_x4Hp~1jUc#@oj=V7v2KzTL<8+aTxAPVqJ?C4=6azaQTHxa&oA-Rf@Mv{*a z-t+=qiQDHDyUdwUddc$5GqX&rfify&h@u9>*reQW7PO($^rO}{b;YmBNy|yI>eGy! zYMq8P!JVwZz;-J9GL1r&!>IMIF!?GaD%7NCA|soIX!D}>maomjY3pX^V49s^Zl;X* z2UV>FJ#U#voADC;P!Ias@{iiKm=?|~_$Pi9Z&Rs~#y)*2enMq8%Y?W7qlVEN4W`l? zhKoSWv5S=Vh8yRy4x^vl=W+GbnAS zP3y>zWX?<~^-L60MJzj1hC4d-q0*{G{Eo)!^br>n%xLX6KZAKpa6OOV<{T{L<{6yN zTh7}E4X3#^VS7J-dIMgh|`81&o=Ky$GG>Jww7$pJh87dRBdB}57dW(Uk!!v6RS z9+FEq;_?Q+AoH;0qYM#~EKO#!Y?frN#bygSr7dQ+jefE)n(1D-Lz@wc{1b+`KINXeO9w6<))Q6HoQ%4v?(+WBfp@e zqPoynnq)B66epF#AHF6pR9anJkrOJdDXH-3{V+p7Sp#|}J(?Y`M6$CZcvLbh3!a=M zH!;f0Yaoib$>s$)qxeT$#05EGf=4d&|rc#>8l%G(*Xz z2&_Xh{b5>zay2Zi(-^odZg4qdDwcm#uC&G^`qWG$P41>LT()&xfqX}OlEyC+&D~to z5%OoDkN%2=H!Jbf(NDj{PfhnK1@`FR-ABPc;U2f+jpC=)wJ%H8`S{I$i!ajI9eUgD zWR1=1P_{xo5d$K%5zN9vV|d+$!Ty8!T`LIj zlEAAXWT1ZaxC{&|O==ve4J>u7t7_r&A$p@{`a*XlyE`ZoW*T-F_3r3j(3V|Ke>O3S zlz#l@an*IcC7bii;Gm&-SDn9;zZlY$b6yD^QXr6hH7Bewn6&YyZ{pqq+2ZPW;x_(b z!*gTb9Y4Np>-=&4jQELiFXTa&O?E6$BnY;`AY&L4vCcdfEXwj>fcrs~qqp`ckir5EYbAanR=RauAHu6R}9P z!)`&qAeuwWG&E2hq>&0Nv7p}Ph^`Spixpf&oC`(U^Gn<*&?Mu|k^SEDMYz$x?z8aeBaXB&-%@^4R~l#^!$sdf8PDt9j(S23){Y!h2z z_!b<&F?@H9F*|R;Rp<;wT{l1fMxA`bS4;8yrJoN`8}C@Oc5rCj{Mvk4yafLK*zX@5 z>URJamMoz^9_MlXsko}x6kszp7QAC|wFa(w@yaV7z3$vUpIh8eGYzf$^7!#D@rtf+ z;U=h9nzDi_mr<8=)sC6#)~#HrsZ{;(kE+UU+11-}UE9#o$B!R>9&cS6C||pq{^An@4%`N?sCi}keRTS09;s7Ji&hQ4Dl|o@b$r$?33SL+9&q` zi&7@yceWlHJ-B7q&i%LuXI{U1L`(7zv=}{tUPf~V-*>ig0-^|;kSIr^J2wWu-;v^< z*mV7N>TMux%Mw%%o0cV%mHXk2fa0%?b6MZcs5ho-2kLk2(zn_V?A)?tF7hh9KzC)o8~ zB=AeW!s`^y(~ae&9ZgxOI^DU5PM4B3q;vJ4(@sUk%P^%Jx{ z>jv`3PyTp32j#*rn}#q8{2}$wn==u5#g+mJzm|7|cNfg<{CnP?c<=K*fmKAlgV~+= zNCvYzCnGn^Xq1f#P&uq5G8BzO6Hq6D85jg0Z4B4FKp?T#M|(kSc%rc|__oLifD}T; zMu%B55j4(mCMvqg~?+R8lQtP z@O%uG1_ABFsa*uK?huKG96*mo%oAd@#O(&lHZXiZQ-vr2xyTGO1`p$7B4nZ;0r7!) z0QM#L*^AS9e|!1*ua0}~>rJQkxcB$peg2p36Le>4EAVqZ$H-`MZjHn&@8H{H*(fDq zV(l`KOi3YA5+#ILQDtsT+T`05MisP3l8#Px%(j%Qea1tfsdAIJI$#SmrJ^-95ALvg zb56yia^%VLiRpH&ULsEw%R@i;eOD5j(OzzqF~XqAfTSXgK#nWIBB|C$wFt@%u5{+9 z1R9AM34>^*PZ(K2>G)d*y6`_n%Zt2j`hOe_l*g`4U zsL1AsIcmv%knG(-_8zmR+tZJlVwUU!snOIZ8f{CrrQd0eSt5tiBB{|2UFr7VYvjuN z&U9OFHn}<~Et(dcLY`Yh4mD)&Z<$&~nklRbPhM**?V#s*6at|`7|WZJw1rYCG>mXd z(ww}Z-2wbht=HuDB&oo&Out^7EtDnkt;+73rWP9349%~|mCE@ambfWRicXkm5qbS` z=|I^E_!N zOm>+Zsa0+fBgv4~Rx@U^!HoAysWO=imC=W^7G18+sx5}^JqC;JZ8$ywzn^H0+K1uy zxY=pO*J+HJ!v>4?3A4-m7F>7$exHJK17W`tZdj}}X_{a^2*05B1e_gdhxxf^=ueQt zZ13Q8O@*lrX|)(a28jL_BU15#NKC0k?LX8q_lM%Msp&tQp(iNxdIdc`KKpKKN~-m) z_$+FAe3sz(vsVi2uzzp&4GKjZQ`_&da@X#qwx9hoyo2D9#QPZVkt<WTHsd-~MJI7(T4XwkspaX|tcKW&H@vb>@=550d&`-yoLnfGv=YBLB zZ#(-a)ea7}_#^!L@pv3U%Yep0$P14-DAR_o#=I_fH2`~jF}Ux%$aLFHNKd>nQ4sH;a`J?b;(v)u31 zqwx3qd+}!|2^;I`ZmFyLU0of4l24w$ftfE9a6C)qdBGK(Q zsqwre<@ocwdCg0QB88eUE2Wm&Zml;o+Ec=XcLs0aEPDA)Pvf`x+7(97UWU{i+X z91%Xc*Igdd0$qsB7x?Hzn^CaPEzKD-`OCp=_sMa}E)b@rvr?#wwddbszJqoVkz_UJ zUFPZ{XbA&ICBr$35g=f%k8o7akR9ThC)S#Tv-E9g))QsEJ9}gNII0zl`O59ubN(97 z2TF7Ii2!xRVefuIElol6!!kwpvmUwGY^f^nvsJ~$jPRYgC|1tjckc5$(K$X_^|uGh z9&fx;=`h7tOEanWjf(gtzE^^7_S@qdD7(T8eJ{CQuQQrz@Zr7%a7cn&aozJCu9Zm&0Wix;Bn;$^cq$R})WbxJWGXTa6mi6cL*~1evDXc2 zHshoCW&H6`wIbWmd=Naun}ylvwLP20cSXk6&Od<1zU4%Ro{Nvo+>E8SZ5>gdUUlkI z`fJmsQ%qrLr9^rEwaEhI_M7moWIc|5Ij)e&(PphU^E3)76v;j`cK)()byJq%CrAAq z6<>pk?rOwqS09@l$d8P?o30)(=}`WFGG^_J>6~pM<@_`7%FD}wzWS!bEVezNC_Vz* zz~@R7hzA75LmXUWB4=*yTCT*?&F6oTSg&=3FRFYc`4l=(9E4h6$5f6XD!E*=l{{S5*>*j&fM|B z^*7Cmp6tT)+GKniEVfg1HOkHoGm2{_PGeZXROgCAqWtnQsczwRw?I&T^TJ`*g%Q%N z_{ew0-{!mVjn!U5?&;+kX|kD8?m_IZru@({{KAM~KeVGt+;QK)>la*Aw`<$jJM5-C z+8W*TS)wqw<7T@6*zxo0$1KYoFhDqb>U^-`gl4Y_PJ<7|4^-n?e+;4+0p%c)OSm4* zAVR_Th-wz_6S9Ed0+9_O|E~`5x8NVXJBHJP_w9l z@OQYaOS;;veF<6KA2v{M?w^)X&sZ42!>OY~jz_ePwkTWyB0rC9Y5D_ciG18>GwzN#qDrg+Q6JFFnF-wz zg#6GvfqSDQh)6)LGh?n|L%~6=rp$rhPDziXFP|{E@Wv5zP36}3wp}f!=r4_Sn?dIk}_FZd{#9MbwgTeUd2&1R-6$Mrv2l9sa%OaRx+9Us-!V}bJLazI{k_?=h`({ zOi(pgooR%CQoxw!9~3Ht<$!$hpj}-B{XNjL1Fm)Q2@+uhl0_k|h>#g3N+jgv0w)t8 zIi!bO%bkSldN7E@`1WqaFxZZbf({^yhk%O>=xbmzNuN+usF-&3gfq8ISn?GpC)2uTXD$ls*`bTQ~TRrIc47C z&TAZ2)uyzh4NlM2@6${LyhY~6|5P{+XjYu)!BN znH?YIdKJ#w&Sq)TmZn|THD|#LOCFNPlEu=;{Mo*ooI9rJ+J|};&6+7)9%~$_S|(xa zxlIcr?o9u}3#N$GD`3u0*N$QG;*f+Iv>g12n)NmBq*+ot&&#|iMq6P^``}3@ zY_n7;MYQ4yU8XVjP|nnC+1WE3Wt3^|EfIPVs;|rN<&4B1qigFeGgsnK=;RHDCD?)H z9U2ub!d7RMMz^Uor7O0>+L}|9kKU@Y=1;~=(C}Q4CmxPv3iRUAVqGaVy3n}t3~MpI zbwm34D{P*c;ZEoJ9cjCh!g&|by^GVHv>}UgERfooAU+oonGjn--d@U6gaLYWFXhQE z7+#<--A8ht7LHl1tC!xuQeY$80;GmvqkZ&_k?N2Mj|u1bACrobV?vQ7f5w72UDu^9 z)ubCj+dHERn{w=U@;*~w`z&Tw?poUw>(e)&;iX{XLC$$!^B)A= z9|X@6u~u9d1c)yA1@8|bxz|V5*^GsND#a9tCAq?YPy=}#gi_f)QZh@YYy%A%=_s*WSY?oEG<0mi!Uc=xCJ$^? zK68@w1cpaeHjQ*=j_lgKqA_!{^Z1)=eXCkNrhQ1;>}rZ;R7rLE!@w-*P=26{j}$#ofk`DMB!I62&cYt4x$p@? z`F~#8pHn3KvjU^`iwHs&{Jf;?mn6xwOOmAMt&HtzdJnAp9p?4^SS6f8zXg zz`7n%LA2@lUIDOY6 zN_rjmWDG>n5sJeHx;>(NpIi$)VRaoFXRHsiDFFqmu_aqH8eJr9aL|($*4ZlD6Xq5d zu%W! zrDl=O)1pbUT8!;2>Fu%rM{^PVieM!~Cobe@4uYcNDpjA3txl8PQbrBP%gSFJzh3Q}MO913W{Lf>Oj&6xI29e7 zS{-z|I=%*IY2&35kwHh4&A>Hg9?4x>d{8Pf;dUrTL}1O+iDB zue4~hi59|4-R%*drYe6?`n15n(em^Wf`xg*S{=!`$$DQ1#U^JJdV`t6a>Z2X1)#gIaYOcV^32Q$r#b&$p=t{!wvC^Zr*-{A1qT^)3!oRv3NPA50NS#>$FS$*$_y_&A_8xi)2G z=7k3COpT3zW&mKXC+P=ae(^N$)C~u;Is@v-D$Y8wfChjOgc;ly7{MtN+6N(l+>(Ha zArvH{2qMY!Aqa){0$>Bq>Y?8w;oN~xQKGD3Y|lTPxS2Ene9$r=dYkJ%BEm#k7QkwV zIR$&BqaW0(=!r6!YK%TPX;7|}&*#%q>XXE@#AA%r&R#WV&h%`d2%75yE#~|>A-{a? zs1c(_1se_9eIs&(Aw;WZTlJ%pp|#Ddq=rVM0hFXEz7`EEwFgQMSdb(+pv@GkI>dtf zT)rWDfG4t+nk8)wskQjp&&PTfqU%zT_R(D*Ml!FTFjk^TIxX-WGWgezLt%+=Uh7Vq z>xo&P#BWT`8P+_ZgJNZBLtAd;fLKwEad{ZOBxrro)ih~|vs_B{RY^5j` z$q&5;u>^SMQ)duakK}grnDDRs!O*K&!p-DGFoBQAcOT7(b|GUqw1Wm0Y=wWd9~(I}qai;#m}a()@@O^3?>D&9_4wuEWtH^x z)M{%;8{gZ#Pu`xg5LHD-&6ue_GCwc2rmGC?@`B3b*lXA!U;My+d%!XtyLGY z3l!mis+C?bk2We%O4{OrXXqC6rCZG;1PHPL^QZk5orMX2G_VlvU&mHTA18M_}43r zuO-m0C?t>fRUMt5xrrJmIT{A_ZM*VtMnA=x5Ft z6-8AGQ`+O>brV=a_WDi}>*wniHzB2wp0|Q-RRzKdfjy*aZJSa5%(UDSh0Uc!>Oy@+ zj;_93lV!_Pruh6~JwC)Y8#Q)l_o05g{5QDxuX*#!1n>7Q`@ccSe?gyLEOeqw2S7eQ z;YK#XvYA{c3SkdX`sC{-;z^99CuR_Y4Z^<$_Euiobs(HWRVAtORU&+5@rfzH#X2T!zi7%Wc<`7)(A^4iZbkVhJ4E~!IZ`%sc2#D%E?^0`n}KP$(RZ%(N16|iv?hQmgM8ap^MI&^JgHz};Qv|~-`Gz`shDa`p z8ri0)-i4vo@9P&a;FX_^*GE?HYjn+x$tex{KLDk)!lh4s>P7ln>r(cMXp zC3O}bzeJtY(ln{AtOsf?44dg!MhAEn)4{t>q?6DSz8v?23|a8V#kHbYC>E3jbPN+E z8#W5|or_b4%V3XTbQo6&p^#jQBT5(jOda$VIi$1)Ek;lPe4-4Xct6t;bkQ#-j+!&PWd&g=&-KBK9`iW1|xzO2gSMA>-n>LU;k4oh&>K14>9Li1EQcM@vqX zkU%fE9D|r`ZikEhB1>2kTTfPkfQ*w%3kvXXSa| zVR=jX#E~PZWqN%)L+X*M($oF)cRpWdQ)=pC&CRKmmAB2Eo9~CS^PEOwc-}m{$>A^w zR?1`$r;+%N*)5L6;9W?P2^ETS*DIAw?>~R3PWR71@+!Z7RdRrTQ%1(QHls0(Km6RS zQ|P~(d#sGs@7^8npp@}%=-h&W@5;)WuD&{6Nezx4-R||$Kctbr5ke6{e1?KmXoIv~ zo`MuwN~ZUzk=o=`GDwaeaojrvQT6pTaktGzU86S1(*1r$G~0G(W-vI$c4u>*Z53qS zZ)25~BHI0@j5+u+l7+FLKiv~jx$aW0`9;kUM@gn|i zp$^b?A`0NrvQFaJAdZqm50aP!=ujq-3f$}&eN0>d2Bu%vGU;OOm0lvjy+ z*pZcmpRBEAntphl(f;r^>I3@Ib0;k;5{db@+V^lDLGyd>-LZZ9!jU7NJaFLqci*M; zZk53hn`VWmOd0-&`HoLk9V&;YvwDa-8w!zUWR%MU=!NKn-sgFJ(VN>~l>IeaMEqgi zt+2Y<-MssF$9a$Np5SW!YrHpj@9@5adjCD|9I5+=fwr*w4T5@3R+h|I!t)bD?r20 zW4DL&1abNuE`h2y&|sJW;=`bgi+(S8PLQ~VT*GLI(UWQEnVa z&qF_Zxc5BQ3^zdTe2L8TE>;M+Col-Eke~qKSMRxl%W|yeZjuVgUbHtk^4l-Ti}K5z z2SwNWD!7+Rtl#;I?(ezYOCy%_XcI-*?|H6R{mx%hOcR;xE`NM^$BvXb_zV=I?U8CaW(XLcW3t6Fpd2BT!aU|`D| zM&sm)n$h_dk@CSwo=HR7T&)vQy}mULw_{hTFIDIDdWP7X)(K9RU14+Ews})iHdtLY zBu|~-Q+hlumBV9~+1>UlyguK`WRHbv;xqD8fm9;USn)2W*C}`S9Ma?zYf`c|nX+he zz0oxMf+yWGz?otfTYVOx#h0u%yN!Q$``r?Ex{GN{8yL3uEV+D{o>pjmX0PdUchF5O zl-1O_LsETKR$)WwuvfY#(sDg5GXzXN!xn3`ahZLY1p;VH|8VWMx3PW$VjWdZcBR>G zG8;3J7&cX}rNu1#-){+8RHmTm8Fy`pz#gzXL(6q4?RZ0mVTL7;JjUSHEi(l4(`P3f8p)!oLBLC9voVst@u zjz+Ic`qCUuG8(e=6Ep$kc1>8zzsrO7?81M*PanWvL*zlgd)op071AyjRRkbLW!~A3 zC01GTD0N7En<0nQu@U`fH8dlXCY5o!Hd`gpgj9!hxrXQDX1Up?$dWy#i)ztzSy=CV zW}+sd5-TI}8dxme^0_uwqtwK}bY;tmP?jytkxY>n%0~&K!il1oV35=$b-kx3mL74ov(}BG0^w9yp~x-FrBnDhR2f|? zm?xM{LHy|iNlH|_ng5#T_ku-|X#x*Zi~`~MR8JPQ&W7=HjoxTZ$*#}M%?yUa1rk2e zjjM=`&5fYC%fWNxOOB#{Xwu7P&whToAg^fRkeg{`N;UdAs*VoIRAyG| z)%yJ^g?g+(tq7CIrK=U{NvtaAR<%-fJL@;i(J9$Xol=*sk?E$eYW7Z* zOcQ@46BeV-=A&C#l_8{6Y16d|Z4@4a0poOuoI*jf&NRxXNy;{8^kKN31J|EV)+860 zG|72+>il7Pm9AYZ6I)?#E#AxoDb zC8^e0VSQDnG(2gwd*qvq8k3(@Cza_{`jAK}y22!BGO%h0eutV5n7nCJzf+DMIBDf;TBH{wLi@PZ9I^r%0I-=q-ZZqOM?#_(P zjE+jum-l~eCxF}Yyzlcq-}n7~-*3{n`@L1C&N+4JRMk1BT)z4uNAZ$quzFO$75vm- zF|`#r@R8GZx#DoQd7Z^u+ue8WqX@Ks)?cb;rB z`n~qz6+u_Hm(S%-6gzwiO?JbZ5hc&K}lcea|KF+p3oY}Vf=fnsN&49C#*y~6}JHb z6(!kNU0iimSrJU_3S;-+z4C}BvfSX7zpwVj2hXdVXZkc+sG^ouomJ|I_Ql7UXi?Oz zR>p3bRXN%8U{zDxUOTR?`K0O|;;fOq2ii}cvb2KYW88W4uslv20c}jd*jpv+iuz!T zdm^mC^I*D%i1?&;xs{)shaoVbSSy(_i0N>e{NtT6G;z|<(?5CBQHPa(-3S5_O0pBq z%T72Ky)^8v_D#JLFbXZKlrqi!`D3dj0F4{w1-A{Qq?3HL-0qdgZ z+G~oG84OTjBq53;^p;RPDYT@ZLc4X7VoTS0SA`T@Y$}vlx%<59C>@?TBYEVenwM{G z=l?mfsfTxN|IU#umkLd1N=Md+=W0)M-u;!hDBHyC^JW)t(*ps=mH2DY%h(h3qS5d((Oy~b03oK`*h^L2JDwj zM}*p2+S}VJ+y9BJvYnl)ALydJT?ieSKK;wKw&nW&H{B=N)!k>uZehqLXWt_&ft|Ae z-x(LIqe?KsRSwNl2HthYPN-+lYTyG7T7VAJVaRRNxpbtYCGAJ95%*``oY&SikG3qo zQm|#Gv(tO_%w9ZtG=EB2|LUvS+wn?C+x+=$*toNH?dtHd2edZsx}IF9Z-;2Nv%xg} z1l}Q7tcXTLT!a3(6b`8l^kza>GMKV=rNktRIVzch9>G%70cFjhq;masM<|Kf=#Z8) zRCJuWudzbpD;l(SI@c#)t?+$fTVqA%mlX}$lDFTV;6^4{c_Lf#{fvsneZq|u4Gk69 zkGPT9Jqea=6NN-}Peo&61vfI$vG{hj7yRFk?bZ6703%VCB!W&$@Nx?Ha-4`TxOjz2 zF>8y_^(9Aoi2J8c*Oqmb@q^DAHG1*l(WA~gN5D=?1cVNVQ|2P;-n#}DHXKnPjR!tBovAJ?u6sIj7- z>1Kajge)VY$F6g-BNv*dW0`AKp8UfMEi=8-xli1m1VvL@X3g5tK0N#K*f}q6-u&{* zo1HQ4FH_Gudtfp-khab*yU)b^`}Q3D>h8d#ja^RIvLmRVc2%sS~j&!Ea%XVABs zUlylYHk_LKvirM%C?n!efeAm??HpS27GpkX6(Xjchlo8n+7p2>QW8MS7aGNaEeI*t z`p5_h2#XV%8uT&Z4j#+VgCj8F3VsbG>v&OGQj1H8pZXAE|mH|Vm#`bxnPcTq3dch6#XQihErZzVUU)?(>nb~yYfz6rBX0dH^ z{l3+!R_XuPtyn?lT{l*){J!%BekxnBX2sbn&tCEUUBgD-!rr>IqFUgbTj!kau@>FX zRylOa*~J$3NyDal2HvYxu{SqmGMlt2q|Hjn$1eAW6uVDXu3WWRdusIyE4u#3=Mo$w zzXE&5B+iBtHlew9btY+iwu!uM;Io^%1uoGM+rkP$K?hwaP6%XpDWTJZ5MC1I^YmVt zKA{3mmtPrIyD0m>Sye;LGdzi!9W(#<#o3On+86Vu&#noCdS1GETx@9BF6LxC+i#7< z3ujqV=Gl%?|7z{NRe@5+Y;%vmcy8f@Kn9BHCbsCpi9Wl-H@$8cclVX$(XX_7YqVt} z$DWoLzGXq?*3oRfc7Les`s~>8A>S}=-&x+mBJZ+n(=guvx5eycN7-H)yB>1%b?FOf z09xo|UIT2?X%v*|1B3_4N`1fIEG?Xktl7O1<%8BGwax)C?yBtEXEt2&3>$v^pZ;_` z_v5r)YnxiNd#kmjqsGonj@aD4hV8GJ023dd;6cF;m501?OVP2g;lHmZ^+0c*amG`ZUY`<9S`3MFTf+Dm%iR~ zJ4SopHKMl&`YqUE zv%6w7!*4jn5vrWF8T;SYO1w zxO>&=yLYczwL7t8_UtXR4Q(GZXy(j81845r*rV~1Ti1;nwR+N+F>9JyCk$|u_l&Ds z&+I#){p=niGrbO7K5FJk=V{OVIdSp1(V1(trEJp9vj=WEdGzY%wOeObm+=MVYoFfr z)~eliuU@r#_o`g-TV_-0*z(|s4Y@15gSM7OYwN(6dL?G`bDpt_QFloS()>(6EM2_jmWa^z((z3Rue>IRDGfpxn(;$mA( zuMT5Nxmc2(*|~3Kx^5QVG^?&)6$ws=Pl&%&`pHT<4XFJ)_xF!P`tv;oMBmll;3WRp zBRv+)n7?h?{2A;8{?yJJvp<%#w_kA4xb#%+)%H}XogJK+O3myPYPyZstTT zcm_4eT}Hg~Gpe8H@`Q+Bp;9s|)3GKkP0Z++IwMgvXB)p9#n*1@{8DK4_wSh6-=9N} zHaYue&fmR#KcsX0kdhjHc}>Z-8HvOULKg4t{0iT5A7@LlAF)gN`~CfOtO;up-zUFM zWM3IFq`ao2q~GJd1jz3>lAvwIWT z>DpoZPG^_1Abyu?mFuQVSw|ZJSDx@9eW*V_;r-lu>mYCLJ{lD77d5ohvMzBb-lz}y za~XVf@5@m%>Sopo=Ar9Wx&7#ptLf8JYXy8E7!q;knZXaGC5No{oos-k=C!BnG~LbOL1YSBa` zW)w4sz*t9)>T(83VHj#R&G?7$OR6#g3WcL+RuP{L!0XW&)eQW_5z~WAi_o5u0iWbf zW|BCicM!7|BR2Y=e+xp4wlL(OG^2%~^4Dk7(hM3NBr7E_mx_QO83p6bxk-;W!!%|M zQ(=orM>>1@1&*)La9mG&b^HkCHb4W=xZ?dkWVgVqOO5P;H2{pLq10?##7(N1KCAk)xO3DlXqwqy23c-edI^ca>(b4G( zOyMR%He$XPiRf0rWP?GFrX-!P5(V?ZEDHKhKtVSQIFfBKfQ#lB5LqIcWVkdFmXH*^ zCdo)Ss$#N<3Yc=aQ<&2RyCLKQhP1Fl(bL3Rnc7O-Zv}#1mSn(!JwaCwVyS5|cabyD zwq%+^APYcG8jS9N{}0MZgoNobfIxXuWWeP~0sfRHg|YxE*rzkVRvaz;pyk zLbjc`J?vS2As~eOAAZoT$bQW^*t~9$Ku7H?t&+WBD{_V0&SH;&A^wur#LE(o79TXOoo>jrJ)mXrq3jBsZq=7{|`HGbngg`7|Y^=2TK1OiP3yn6;Y-f^H5JZ|% z7bK43@sH#MM3>;1glvsC=NJwg(Rn9EinOQU;aS^#l zl&pj>PE4RG6Jq;k(mo@Hr{4)2zKU?Y=De6 zS>2UJlS>gq(H5|ZqTMMmg9GRUPE9~33c~|c9P7gdPiv4YfD=L}Vvv9}(Jt|m*9jD_ z!Av9*MZwty4guWESO5s|E~v?~X2Haal9!X6$-)BdLLPo)WxOC8ID;VboV~<}Vjw*; z;*kQ82Hu1ac|rwea*8GfH|c|Q1HGJ?F`Lb47X$-`nJsvrRWZTkTWc3;0$c^pE23nS z?IzJ|<$l@p@sVVbJJdP6tM%h9HcqX_#@%x;ITLg_7+ znE-`sjjiW63(uFLwj*D}nUy>QfPk>G#9cTQ4cN1rK}(){7hHjYivp7XuVgI%e+Ukv zg?AfK0d4pK+{c+1Z;&M3=#s$p@W_xLCGt`6%ys}SLadrv;1LCc#6ZOmEW91>VwlEYlO;)zB~&vD=A;1w zN(PZ;0wI7K2nEP1;2bqqwnBKB%&4EB4=+OAXip=aNwtX=3kpFhqgUuPXcr>4^UN(8 zP}fCE5J==WgADdWMdUF4K{OW(Q~C_q3$En_1B3#ICQ3y-XEm4$m}q6Pm1kzjVCSre zC~~O)h5{lWO0*XTha^G5+=0TuW{4RJZ4gD~Ql44!3pu#XI|^KaR|1HDRCI`NMHeh6 zy$ianKkrg)u{234IzgX2Kkt#er}JKbR<@fx!1f`e(g*Al_Bs0-Y$>*ZX%_LT`3v}s z{O$aM{Ga%b1O|;5dgXDwldQe;zAgO$$8a!&d^HtoX zbP7!ksv)UrjK(uO(A4OsQbeYV+QLPlMbS8iid^M7w3}hPAC)sIUdiXxuw1G@O``T! zSK3fgoRWe8=Q=dxq`V>16hb2()8F!$TUX_f4>_?w`66ur4K)fu#efzE?G(C>dR&#G zMqVwAVsH(LC-9fgbaf86Q!+V)irVyO99~_d(&3y+5d{`VtHTe;lUm0}t%CvrodsGC zN&;0&CjsFW@Fbz$rJ!KwBmxFVy(^VbD5!U^u7mCZ{SG+Nb-J{!wUPF8j98?4oT%g} zo{ZA1<|#FZR)->^C_oXNLfIn>K-=r$jT}Y0=nSnY9mNZHTSpZTo69HN{X$MdOeHDg z6YjaC1QNm-lcC+v%UxWA4^e*7`%oZK{O|}bcWHiv7<`6e&r&k&vqp5rGcm*98w<{7n4=m#PROODZ7J&h2yWQxb8AuN=le_6&y6Nfk^XIdl`C zZsRmX-gU&#$R!Gtb*Y58D8s-5l))3U!kk{HBbeCQ6DG_cX*U#1!0fC?!HGTyBM!$B`qV zlnO&5uywy_VitvB371l(nBX0hD4h^KiZsruHQOYk? z6e*OlM+!>$C6PuYVlPjJ>sdd~G%xfvsbzFUvuWX2e@5#A?GD-%@A5LvK+`jd9?>cn zm|(ZYn|X_b*3~3JTq6+ya@Qi60#d%SSrkNwc!_5PMq?@3X~^XQs{x_h4KB3la)}r) zA}?w_(UL&R2Urx~pvbV0NtoY^H+0FOpA2)m#%n4uqN{~=nS6rou+3J6qV62yEcD+UL20@3C2 z%Jv}2!9yj&+8S17DRdQZ-dMiN5aa|^P{cyN!J06kkz^h-X$vMvuo=W6PKG{ef~t@Y z9TRGqXfPH6i=0O=S)CRj(&#dXvQdT(Di=srv%@Hv4ZsK*XNwC_p%80?hYKHw&7hcHM2{roNBYj5(pv;RhWEogz7ZCTc*r+XOYi%C^@}O4g)! z4=!wiv)LhXP!;@#DH1q0E;;tUl%Is($m&sr;7L8%39fjzY2>tSnfJ(AZ-&YiZvO(Z1h$KPEIwzUzq|$3oQAZB7 z_;zyv^nZiV#FV0PPO0o=zhn2e5ufJ(p@m@NqS1{*uGnUgKd zX2~xWN<`FYcff=Wgka~yVss7iA!Q}A!aKbd)MHr^Ws}V-hm0_2;!6eD%if$~M<}n-ctxgYbFu9E-kP1G@UShMDWs9Z2&k6Ee1RKHwH78eYu}HV`711iUmQiG;cOJ zN=#O^u-Ewc2Svmu=E~7$2Z_%-Rg0Z&)y)*;03tTx=Wa!+Yz}shR-iaP8 zZ`Di}?*sF*MSS5B8Wr>&NWHj@iN+FU3K@Z}ug!FVtPE=C=M?5<&zg?+5D znU}1lNG(K#xr(uZ8kPa=3j2zjwE4TW->WFRxfW1na$9v4TVy^QHAP^ zQP)egH^qO6kLq(i6chCz)OZuK>z2z|H1CC6l#6po*ebuv{fQsL@8w_MU*-S6|AW_r za-mWn&!8|`VvGsVP9K(Z=#4K1YoHV46a#8z9l8!fe$5#N?b2Zhx>RoGCUw|BJ9nxc zt+c*_LBqdwaOjZ#*1`X+ga7|t2N(Z!>7-rjSBzP)e%GW++wk|Z%Ou?!H0j~1R@AS! z>fuR)etOxfQ{X$3opbp0|JK+4t*`%EU;qDHUw@P8r(T8G!Jk%XElJmt^s3DE{Io7> zBadBQATB$yS1dU4w|}em|5oq+t=|7P)O!PT`#0oT@j=A6q*V@%Th#tUW7m~+47`!f z?l?hb*VT28f}ywLdOHnh>Vu5X-D&VQr@cqju&%#TSeKjzuMgYmIy@{0y0mzGG#yqB zFs#%!x%T6hJFi~;#q#ZUwtPGx-_|r?0&Z-_jjQz=)}BpP`-J2Ko3&SyEq}s}z=Zz& zZ(Z^7irf14pAgtFVM1d*Zu%zz4IF^68@Q1lpO~9liRp+vxvBzT|@mU z@fWzKNO>pplm6erdYOzkp+<%X9Ys>vvJy;{oyd%)=#_he+Kbg z)Hnh09Vx^soq1OyyHs1!2cY;AufVl&&6{1)!M z0d<|tF00c~uU*#5;j_9W!;l{@8zo${x^H=Fz7e6RE7KN3dcdk-2`dI>5+gd2!bwAh zbim9`x8X8*U~3mZ)TLqIC#>)pa{L@DOw<4>vV)fiDzac;^<^-qA@gpUFzJRBH5hg; zu#u%w? zYUI>5(b8N)1+~U&8uHD)c*kLWz$AMc8*E6h@Qr_*JFdwM#qbXo4ID)uBR z@474Q^A`JR?xGMckWr(LUTc(v&rnmy*C&R!zE~+zO)IL~$Q)&&TBcz6k1`l_U`UIV zxkZ-d%S0IFu`*G?F^z$)3zrWX-T6hwY1}Eoz>AJt`#|8}6!EX@ajoV^bD21kWwlJF ziSu$Dzw6kRJs^zfc$+H_#s;(dvU{}W*(+W6->zvMm1Y#aALwvGKwdxw?Jz+cxfv2Wi#I4Y&N9obpgI&Non zrqH}k+my`S`+~M9!7raNBb%Nv19-%mR&Y9iZEDy2v!3_ynPd!6Kg&IEY;q}kpU~W8 zf|%XF^ne8rAIPu~j7$~{p8hIwx%+4jX{9LX(b>tPEUygS zEp8auA^-@DnBi3J-aDj~`}cP|yMMo)4&M)n>AU@O2Tzdfm7RO{ckhvf9_RUl@;LPM z;Pn-6Pn;n?(K3^)F@I4`I7$71RnW#R$qwTlr0o}FhYiXx^Go1C_jA(oKGA3H7(Tl5 zr2M+`%#~|kcMjdhZjAjj1H&(Hcid|GKf&S8^ZgB+^1p!MH?jOvu)2BZm`&_|#Y3Xj z#X}u0VY2GVBeRb45YqT{9ul=9b>a^FRpKG-Oz@C)oQFdHN%?=Hy!-cy+W!5N>Xk=2 z_jm6p2V;((kCmsJheELN{aM+%aoc@7k+wgnH^0VD-PHaCK7@~t^Hq+);9sWKu`c{{ zud6~4gnpC1PK4z*`0O|YIqd#Q#-I&so_~h#ZoZ?HPV)XU-2WUe-7x(IO@7IP-4Om3 zwSEm^A#eB5_l5QF#UpQ!H2guxPgjz$=CXw4X5mT&Jwgv*L<@VlRahBd^q)EkG~QqD zPSab6up8tN^9;fWJGf$^!+=9nb*QxKdRJH?FKt-y&buobgo9N+N$PB! z8=Np9IG2Ayl6+Mwn@ffcEonBSgNhQY&y*Atl&Jo3(vVq4>jq}+F7z+@}PYz#VYlApa$HgNMWK$iW3hZa%n;5hTI&; z3K@m{`7!K}{YN5GzvVsN@=?Y=@P&(uI?#D~W2kxhE!;|6v5^{W=a>!~~$^l!T z|7IZsA$#YcU4xlp)1m*P^00B6x!O}!U7sa$FSHS8_YE_C*6!v~sTF8WY10pP&%npq(9+}YNLD!1Q6us*X5=w0?`TlU%L{_)x)*|!*9k-( zhHY3L$M8(f6K=@KRXdyxR3e2!1&9owl}P zEn6$BUE8^qqa6!EY_H|=vQPz%;-}%LQNCC&PFf}|fJb%+G^9GHh)!6y*bzGsYbJCV z{lLbij8`SMU0T++|2Ye^ouT%f+S_X$J#AK2So83_*{%K8EMPNnlY8gpjoYS-pUP&8 zxcFPvu;;spzq>Cx_i=;~p_$3mFP*0KJ?#Lypkug{yW zHQ#tMl4WmX?YUgC7D{F)D~f zIBHmuHLzX`=D=(eQ0IZ9%;z8kay_m}tg()8To^Jz^a|op2e};6ND91}fA!G)4!O_K z6e(WSMGid2Xk3LXmuUC}Y99jDp*!kB#|7qBwTKCYa~K2aj*xf?d0g+r&<;j&C~5#p z%OTkF!H!Cz$^xkknT^-TgdUwFsF3&ouczSSkB5-xxW@XHDgvK{9imza!+d&17JLK& zEcDbUPxfoDxk`rt7nw@BX&~sQ2f_qmEOIy5t4c#qcdhlT{%69bEa0m=HJ#VEthN!#8~-ZS|8fzot&!;~4(s-kbXx-r_f zJsl2o1dW4&&d4e0-~BMPST3~p2wDcU)*k9Cyf4_ZyrH2yUCK7ZKeMpZBl-E}OJ!Ec znP!Wk#RM~CSP&Q;2qYBXW|+T+K>+M-9kA8VHzNWPbM|kw16AAzhuAhF`}f@UVpZ=) z91hbaNv!(J!hKxTaG2>lz z{P4Dx9_8f?>FllzwsSTzQR{eejM>m9`)Gfk2s0?_lBI=wkxs=_dSL<@!TmeMltmM-L;OZYsOgQKARS}SE5g5 z(0<_VF*t3NvCkt?!CDh!qciVW=}Z0sj0`L#*@#*OLs;6tX6Wak>YzVF{1bMU>b!|_ z^yj;Hi^eKb;9n(Ya)3dT?hsvMTdErx;*BWPkgiC=U7u4DI&-3GNMB}#`~CjR#GXY( zMcJXwLd90n!yTE{`f4*2oL5?>mAP1fsl;b3EOhfb-GPo#v(G>+;jLJ5(rz_bmCDsq z^WjqA^Y`<5`}uu5@3wPlL*=LvtWdqAWK?AYe|`G5&UmS+2bz{25h z?5?&6eU-j8uiq&83-fDTMX5Pc>Wci;Eut$~=N4P4{aC3G>lI#l^dosWpM>mcHcW>SUu$z87?*k(c%gyB8hd+>?~`G6~Wjjj=&S!VUH>5(O>;aC{x zxYkHnQ9`(5Cp{9aLxx5m;H{M@>pqvo7ADe*v}913m`N!jC8EEjcE9PwwTca;K23XX z6eqXVr&*1|l`i#*+Qvd}EL$_N9V@L2?8UK`e#`iChBx$q9n~anX{~Ji*sEqthq-E4 ze8DZ>Y;k>1RqWCxa-8+aY~i%Ja)I+NhtJA6+1-YDT>FUZnRhzknc%sMRdAi$%p%vo zh>sU)dd#;M&2OyFmX$pv1a9%{7<_<=Luu)XYbYF77m+6`DOyg!>1 zY;tAq(B7-~c%Zh$$i}F*7XjU}eDq8!H?YqFZAY!l zeO~3P7+vA7TGEhAx7$O8SV-*dIEQA1JMUN$2|3b-&wmnL+~PRCB7mUHlbv)WJGl#3LF8lBfA&BaZy}js|$c zUG>lrV`cnWA({Ov=hU8l;|AX|@``_^#*L>0V$=h$< zdV@3jCFhneUa{@)wZ1F=c=@ztySClJlxG9acP`Kdvd8>d1>!+Er%qhix9J{%Ti3Bj z_pF$W6m|YR;*jZeUcU%n7$iJVl>v>yZz{NV&Fp>bjdRS{?AQmd_Se6>8J@Ms0PC zwtNALYi}$p)YkAlwCOmo*n|mx!$NG=27J6W4odj(|`**~R%3l-drh4@NbV~x(J&0vjg72;}L&Ha%T z4Q<+np!

QiCNnch1$#+Mveb1N*AQxpjT|*QNUQZ)iyrh-z!&@V3Ur5rQ{(dfV_> z^EC-xd1A)-KCA#4t1UDK!$EshqhvR*{JCYRqJp!F`kpUIg|cx(ZE;~o`>+dp*AGSn z-jFvmz7!^%@+Ti_yR@VHtx{ZDrd^R6hx{(@I@ko?k5)s~+km`K5Xx8=R)8hoCa(*V zB(2FDA6^88i3`wyzh8St%g#Uf^r@LMCN>Z1V;_0J>4VwIYaiNQG{@^oHxylZu;0Zu ztbc{O>8g2HfX#5mj@H!N!%`I6zM5rtT0eVncw?IDHetU<9e2q>SP~Z;-)1d8+2Fafd%i6ZIpw?bZB)jusZPC#P&63KJd(ymtG1P7;g3D*Mwz*WoQYkyo)RB^~F|q zqi8|R<=Hvf2huupHS^)~4sUmg#X~ACflqt~GjKidbP_R~NWJb-gHbAJ-Q3Et`Neg) zeRg*ef7(^4lKjfCbLxs|e}#9?z)jwyzSj_0i9L%qnv>pvoA%%?_Im#O25FtRr#t_j z=OP}mjo-@OK`|hp zT!oS})N~?d)NAWRKVkf^CtPHQ^RuX9rCfd6IpzHI3orI>+J5l5*S9?L9P_YU z>>cL3?60OnKT0JB=V|}a%9mYm@Q(K{V@CGS6E|`f%)em3nl*L37YC!s>F3_N=iJBM zU$XPTt3OE9y;B5nvG}evlRk3#rk#EF=F^_3Sl$n?{Tx<(?13QFsiH>oDyPGX007|A za8O@*L$80jYdHLCQbDZ$y7QSWuU~g?`zHUz3)i1Nh1HqqIc?InSRSFo;i(V26wc#tcim#W|=`uY>Hh2OwyR7B87uGmN{AmRTuxd zpF8oFeqR?N-E|PdD!M}3^{tL^!n;nBdU}@AQoEmnUJx)Stu7^H?V!+VTk7#@`zDR3 z8a``^_Nwu~9e@1bwtbzSoO;s5%XZG0T=&?Fbsw`GXH4Bb{qi^Nc$)k2;q5Oxd)?FG z*^8D1>Shcb*mPlK!$Rpm=O?o#Y?`!e*~CrbXO zo}NlF#VGSoZvx_6)`Ke_Cx=dGsyw+2yUFqPi$ZVnVt0}D`naK$ZBr*{9~hsy@trqs zcyj06>u;Z=Jrt{7p^oA9ZrrO*Z+~gyHvb1ZU(a5r9a^+)+T_%plh*I3bxYpb!E+~X zJ7wd`H$BSz{@%-alSRIb#PH`mN!Wr-Gd zs`Twf7Fy9WyM4yk_2U*kv+dq;N00IgVwIPa35IEF77yMyVU{rOg$v?RTVKn`!U407 z*@n3SFD;oiZBfTdm$i>@eaR=hjbjU1#$4u@zwr6~Q(ifmcW%P_;KbS0;e10;dg3{o z=bu{Ro4106@0&Glbo*|b;+ryksoT-JzR70hhO7yepOfu<%}FgSaqTtf%9vm@L}RnO zwpWs8HL>^3ojSV0J8|wq6I+UVl>4u4E!b!eMU<*>5KxfQc{Nze{E+Z!-lDv<%%5wg zNLHbabkp#}V@`(A9eN|z%f<;V>d|xj&o(GmNj!&&MU*>nBe9ZG->G8h3;?Fm)jV(* zxQizH9N?e#lS3P8|za2}+-JJKW{O&aHta|f`e&MUfbNR=Xdgg(fnkn*Qj_WCfm zl`>7$>W3VIVj!*izHXAATgpUdrIN2bL9u$`Yp_+<5Of>j< zWXz&4rYhz!!owQD6cUjP6D__S{nNe942&-jOiL=#Vx3=6d^tj5rL14 zC{Zzsb0U93smDwYS_&{qrOt&?mypUebjPl`?h=pEJ!15qZLkg^ch#IG_n&dS&gXiw znPXyNYjj?y-ux;LD^WZp?gisxuXC@?^2EsaOlRn>mX7)`y0Y8F!lgM*rm-2E)hD`H zJ9nR2tu*bBFC5ot=r>AkxhJ-O(C-gTE|`UJk3hV>uxNS@)f_LcYE=CLYf=^c`uhB_ zNO5L&k&$mnWttMr4_5SO;+HAmGX#DkxR_@)S95qqVZYu@p5C>mD1-YZmB|xI3nRUX zGxCIDyD`<*JuY4*42-vyG)j&>-eHnKtWbI}gE@adgVW8kVfAVL)X70Jzp_j<3Bu@! z80q3e!Sa$wdVfLveUD(8P1?9nlwn$1TQ86(zKO^R8;zm>yM1H$Uqdf75K?QM>hhHFb4p_svH%TGjHWt?bD_HI^7 zMnrfaQqXMXCT04n;gxk&y@Le}`H>+-iAH;CI2iA-jvtULaWz|_1!2S%H#xFfN??fP z@cQg#lHXjOa&&|Ig?K$Yyqdt>u-}nY`iU8lriw(Tm{BrH8IP5r5ep!LYkG`pC*6?C z@DM+dN7U*sv~QT4op&(wY0ZZf+U*0hFRtFqgb&$h3v0aoy>-{I3n#L`#{0L9yl<|i zP1NqWXvIg{wJ(j@N6#Hyv$V56YbZTj`AO;RobOF$Ud1N$fgh*;<}0qg`^E!9-VJ=U zb0b4|o#b7ccRl{*2<^xIU!Q*H#n}(_W%hm#-F?T#tFjUZ&vbOJ{4cRDtP@&5 zKLG9QDxv5^`S8n?kZ6b^(G9(XC?%DUemVtFPCS$U^^dKujn!T_fA@X&-FA`o!r0d~ zfAh^1Z;fG%7u|OMeRo{M8ppnU#nyMve{%5Ayj8pQ+`DUS$KWT=d-vUSdk1%}yXoFN zyVhg}KfaDT|LRYi+P4?pxNhs#bvItftOcK6zV!oy={fJlbz8QqyYW2jpM~#kUH6Rp zlhd}Z+Pr!BmGeJyKXd*?FXw+e_sUgUx30Q!?tj=Zpu^|NCIv8~*_uZ)(*X9jO2_z2 zclqQTkN$cId9rd<{)=)pv72An(_PXJuhX)b-z@9HSwv6&hVzX0FA6=FrL|i|9WOYu z{%*i;mYsX6^NN3Jt^ATVsE)F{o3$hIDVSFjX>@}(GN*h>*8F-F5d+>3Z#!}o+mx*l z)7q_gm(K(9$P2~2h{xSixBWz17g<-ab4oVaD*ULE0*h;kppl^;T}4z6y-07DA-;oz zTQHh*l;Kz=Lm1R&M0ug6T{CNSBvd(h_|8xNx#*Pjm18cRe$KM8#N3v)={<(t{9sf) z_2kRG+cJCQSnbnC_@PsV8!y;DW)1A`{m2(CyUh~}K`RCNI=Wjdb ztVPDMl*j+rqK39zTv4Y-dz|&>25uH2<9aF=mlRah_adBaV}pb%g#YLookH7(VNL9* zmw`ZW)F4Bn%qeUXw~pF8;fk22s&)16<3&%k4KBN1KGgL2uNAC^{iX z6#i>CaXt-VY2y|f^{MX7jYb+4#wz3Tax|KXk0;(o;5 z#u7#Bvhl^o0sHHeeska2Lx7nb{r*6J>AbX!MTK?3%Vb|gGc>;mO_a0+!i%u(lvxw+ ztI5A({Ne@q@&(ryhcCZTS>!LgWy5J1yWBW!WZdt&i7R^YrkMLLkF))y(HrJYTyfo& zXyC0IxsiQ)SCm|%^W}*+sXh@W|2r_`Fmh!_yU=gS&w$x>(=lKSjnmo^0sn2l$3fwm zj&^q5aiDITa}20az5D1u5sz5Jx1}Ii8Xz7=9zs^hxp{bs*Arl94&T=P{Qc3q#Z^tJ z98?sd}_FCM8lT)^9@5j9LZhFrVyTWJ5A{yNZSC5 zAetk?usJ3hct;-m<*BzzLH3f)0@!>=|LD~R!QQVP*zfP!lHU(l=jfM;w6x8iG;-x% z*xHV##J|<_JhEEcpHPo16UJ%7wb9k>E!Ql~Oeo}+;rem|xuM($?j&wJH;HTK=3v#Ti?~Y=U+Hr0DsCrtJ$EyA8=_&}!+p;E zo%;?^F%duvQ9x|Gi!bC$c@^<7<9v$m!T01_`H}D}pU8j8e}iBgl|o!d2^pb}aFQ@y zI9WJVm?fMhoFOa{)(TsND}^1xb;3=;t-@~Me&J!^ap5W9IpGJPLpX{?UKUNFPYj7M zu|`aa^?#VO)6@dk01_`LY41RdQN&#dRaOo zy)AtreJ=e~`c~#;SvJf0vQsXR5hq7(l$+&NdA@w6yjVUnztQ*Ez0pT^G47aoyy))pd{SVb||mPr06Rz2JJub~0DGC-vipsr(-mq8oR(fl_b>1G{p5ETxR_{>naPMgEIPWCy zDcAcx1>VKpv%C*^AM-xpea5@bd%*jO_jT`E-amOi@_yp|%KLS3y0~xgrNvu{ zFE8F+d|&ZHzG`2>m-aRL2Kk2imiSiq&h~BdUG2NkcZ+Yg?>^t7zP-L@eEWO{e6RT4 z_Py`>(Dxs{&;0p*r@zSW^N0Kq|7re3{$>7^{_Xx7{15y0`Ckesf#N_QP#&lX)CTGT zje#oy+XL4Ib_MPTJQ;W-XW;vQ7UY7apbe8L(O@i? z2xfv!!IofaaA0s~aB^^Just{@I6ru1a7l1^aCLB9@ciKV;Ktx(!7GAS2cHk_4;~C2 z3cekDFZgxvpTX~g9l@iRu#`jQP(EfJl~8@CF?42VNoaX!UFd?)#i5O%t)ZJkw}tKr zJra66^i=4%ijONktN5zo>xzF?d|%NK%Zu?bQ_LO<#wudzSVQcz*y*u_v8Az9v2$YQ z#V(3n7P}(0J$7yE#@MddU9o#(55yjg?TtMX+ZWp(`+e-S*qgC;Vjsi~$3BjI9{ak| zP-&^OSC&^+Rn}J4RranNS2?Njl*;=mAF8UYs;lZz)w8OlsWBHTs5_7 zR<%@Zsao=mtEW^?tDadsxBB$zRn?oSw^rX%eSh`C)sIy_ zQTg_fytoiI#clC|xF_z7`{SkYXuJwBwo~y;yeZxi$H+x|XnaKcr1<#w$?;R-)8n(^ z3*t-S%j4(9*T*l7Z;9`W-yFX!epme7_yh5W<4?x-$A2GxE&e8CG^Y6=lwl%(B{JQ~ zaF=NS4ZX`MInO9=HH}!ZSVIo+MfII-P5^x=tsvwrMGHf7sz8~dd1gtbAX%kqB23n6 zuus6Z7(+%sJSY95Dwg=cpeNKTWDI+VoRMB81w$t{rX`VvDkG+@o|Y0;p_hfRVGf%<#e$wGrHouPWQzQ%Vg+G<;=|$|NDyu< zax{&TsEqFb14@b#WYQ8szLCupE<7zLkwP(5Ge{ZlAO@=*g|(g_01OD_k@6rRk4sT&kfb)P(*q4381|m9T&f$fq)Z zCxdP3w!OQtV_bzEmFu#t=u6)?tde(;ij-4(NoMD200wU3F-%Ad^BZIFSvv z4l(n8} zR~m#C0FS_Zx%)`pjSs`bN?<&hES10=I!tcpwJ9X2q?L?|4E!W4>x(tp5Md2L-asZs z^ZWFwo&)0DMcpaz522iO6^5Xs6oET66$WXLzgx)=qILY@c817K?4P1qLB*g70;Z8& zy-<X0%Mb4O~;Qr7AcAV`wxag&R^B;p@T_)L72oQ{Xk4kyScS-NGXZ zmRJufYGOF>D+QCrXGA~hykI1)9%F4T6qqcnL1K`sUIAC)2;k8~($Fm?gF#DFh1&hOsqDS4q{m>svU=G=&&(fR3stn33?K7e8F501!e43{QY( zq=Sgr_>d|MiGZ$EdMPwEvaQQdZDDE}Dk$t;90hSH7$aqYS_%Av zH*(og&h!Aq*E^eT8ElPk=&+Whn40uh7szS6gX{qUYC<{%Y3a%!N;R;8B9Mz=7zM^1 z0uzNND9NgYYNw)0ELisvJ%An^XhJ$5!+R>eAoTcKB*@~fA6oUa{&5&b_ zK&r!=Xg_I}i>yz~hf*b#I-~%A0XFSC?zBQN=Q9fA2P!a>=ON~RXL*Ci&UhV~fj0kTl-(Q9Ky zhM)oYAQ>PmfqnX6c^3*pOXvl1J&Gs5A?vhGqp;#p639-G-JX<;+d!i$0}+e_bE*Q> z7PPb}C^aN}Fx-G&0s>YgQb;Mp$j_ic5Tkq0^5ig#6f+=uAMdd{d|}PCOyzl2Qmc3(mw!29Q9gj1c7{m!OX5p?SfB zRCjd22l=FP6wnMQh)?jA1ZDs=NXdg$6P?g)N*sumWHhd%m!)8{kEP^M6d($#L8K6q z7AErm4P1(?6zvQMO=1ak3doTNA^=D)>xmJFWbO|biDH-}2b2Ubl2l7m&|5%fu#V0g zkh0JwAa?-;$!Yu}tFQ!^DNCdn&BQs77vIvGX!MmZZl^PGo}SWMU}vfl$Wx+^)j*rBTrdSYQ|rp}^1q6$f~xEa->aLR_1l|GUKw%U(pms#3GT0{URy_&O8Kptq5XlKDmrOg985^zi0feM& znASuC2pqdIo-}aiQYu-_08-Vl9L1qtl}V0)PHHXW2+%~c<+A5Ftee2}D4PF3I3S>=dlYY?KAb)THbRhj&J$1-3VnSe6uOmQq?%$2d1M1MED>5RnN^|sB^s8$%bfgdd zfU64r(^NPKZJ90sWxAr^!zyXhp0o?gS*2)E3%o<{=y;_9p?H7<#=}UQ#0CA(VxU%{ zLgs!j2he#PFoRDxf}LJhAt=B-M01^@XmxbDxsfU{81i<57LY8oyo(%#xRUj}@eEb3 z`!UrCCS0V4nfhLE`ESjgp~8LII*k5MwA^A;O`Vp&}D$Qyw5alWVUD>oQ%W(0U=6C~_yb zfj{sE)GQoOSiPS>^re#GpP;Qne+f-|ns7yxh%zO4CD)<)60P-KklrxSgIpefbv>bwlFFV2 zfE4oFL*D?h6p;;TMMkN`UECu&0VWUyq#<9d45TdewqylM=-?)4*T8o(Vp*eqgb%1i zs7oPBFbHv4#*;{@lm%c#wM9XQBS^uaiVkgsLrHV|=Y~Ke0iP2?3A9rvvu@Uf`}i0O z(uNf`-asNAAb?b#9J-*cQ03I|T#BAHX>k;ZTg{+e(?Q9ElQPJGvQvTZZZxcqHUQi( zY6hA#s28;v0IAnqusFSzg3JSvQ8K6l^cD3oWx|n;9bz_09cfY)rAS0YVWCpgt3VD> zA2`7oEwoIL?}4rqeS#JRub}i9Hx?H{`YKqNlEqU6SkTi?LHhuriF~*XH5&ZjNdX)* zJ=B@cp!vqGURQgN3mJ$a1Uwo}A`Qu2dr7kgERWz0Ko#x)8aiq6Rt4M zA**0`Rgr6(&>kyf5QdZ$Bu(^yaSEts^6p(@0W z$O|80W|LIvL>MFn(?A={=a8E|7^JI)U@;;VonzAp3R+<(Dh-tb8{KqcIHw+sXQrNd z{%OTc`hdqRyHOahl+G=nk)Axn3^aM_(?f5e5hY3;wFG?ZuH=A56qwXZ*@Jd8lRzz^ z;T1HGv|2+wD@{OO2GR&pg>>gG^)+|YL8Mcul0(NFupnFLw`ej+aYa`8a6(w2aZE@a zAWFYWsdXiV`x1%+K?L@!B^Ll-Ua3c33X}>kvV)MFWVhl~b}P_d|Qj{~T# zWWXabi2`!^!c){aaCVB`Q=!E`^TRp#5qz9PKNKGT0WwtsU@igfA#y4zmJB0SN+sbL zO1b5v2}Ve%=AyphD>}{9WWWSuqjqJ|L~0-jA*A*Vd`jIi3^$_8C^bk65OJH-WD?boFUU$CbfUWwNgJwCVXUp8z+3l!QS}~h zk{;!q|5VkRQ|IonfHBwvn{a#x z26GrpI)cyObHF5H%pZ<)fH~V>q?u{|zrX60!}d;x_pP_;$~B%K=k>0s?JP04CNHn1GRc-V)Cpw{qB=8d~z9`$34kvcD_5+Zq(h*%kc z2QUtL6R*cF!Yls-<`&e3K0`qbM{!L$*#*_WWTFCaiudjYe5bh$G43dhFrT%zMz?J( z#&J+nN6ktRP%FM}U^tak1($(@S2mUoFIE-QIFt=(ULba-E<{Sa+wj&8)=3nVYB<`8 z=PY2y$`2#+NAcf2MN9ewGX=8_WAT((#DsZMf&mzRLU_K*tVuP7@YK^&l7K)+K-7m> z26V~nSakZxsbpeMld*-&@CLfaO702@)K%|t*2?{{1NiW$jymV_NCdGqAp$SH#o_?0 z18Zg)VzObEe3CpR|M`FxtFdUJD2@Bl9T?{?U~Tz?b|kA%Hi}|B@Z&vH1*wxrK`eZW zVj;~3k^J~;AOnr#qhNtB2^yU0DUtxRU_O=jrMn~g9K)#54z?K?Vidwt3^I(z1SsK6 zF{3U0`$??FAg8AX&+@dO2X}$IEI~vOaB&iAVQ_@|C?smhA4Y?W7uN0m+Qv3(%q&6b z0bGtxrNB7=M}|rXH1&>gc$gy48gmI4jw0NH2(nRt5X@tY|HU+5;K%CkqY_#ruosmO z6|^6X9TN>esF27P+o%AT`sJX;!5@mgd4$S+K!n_*XtMDAjbR5S&?jO{MctiEWThiN zG#tdhiQ7R$1n)W~k$8r&pZ-wZ1ko4KaXgq5?`@DaVguO%RgMAz9Tq?ahXR~4NxW6# zfQzLOVIdvh zts;?LSQtd2dY!pL`>Si%KsX6e@h4-+^=jIoF`u_k%tmlRtuh^h?g^ziu>+gEO%7-T z10}8@jrh)Gi~%lg=#wIHXFl}-wPfdsGmm!gu_rMoG`b0{Jjs7-0iOh2{*BsEUhhi> zeeA&ITGZ={Ho&`v)!1Oh?@$UreIixV1AhdQ+J+SK;fi7%aY)0Vps#NKCO3&NDn?qc zLelSLGS&SKhdL5*qclGBQQ~rlSwK;S$SF_B=SgjW58a2dAV~=XY=bNtj*+A<#t9%G zj0}S0J6=7*@=l%_`S_2a1uy!lX@E^c{-Jw+9F%cqu*?lPOE8guh+7*7l=`u<5&%WJ z0*LImfEj9}L+aGyD;F^_9!78MPem{A)i)!BMQghQ)ML0trW4UrPk<+(WGoIKx_qLO z;2^P4#e5=SqE(CxfjczD#Ig5Bj5VRStRpw0HEshmP|)S1AeBnPPzgEGUKbBb358?C zk)Gwec`nf8*wi9mJnoIKYVE5VN+D#6s`x_NU9nv?cX&sqJ!RnpRbUSIG7d34nPrb1 zw-63>Aj#M&un`&5lS4RYBLdX5E}aYi3p@l0aLT*UCW%xUMKTytmvqWSMxS5(Z|f24=0o({-X3?|AWsUQKxpFd0%nZg|PA(l6B4HrAMiU<8o{bs(ge zjUj{@4{LiFL5w?n_!Ofvz6K97JqK9G!M+$0;RPA)$Ax_+$lCco;6#3v^Yn>1pUdkp zeiRRmAP0T&k(A@*S&ZRRG*4et6arx$#pQ4xlZNw~hsF{*f&_2VRr$CRfs&CKh7L@o zhDh^R$O3K?!t3*CUhvdj=gNjj|}tgF-w&iz%! zm|;1&g#ortsVI_kv_K^klM`O`HxMpZx0;XB?uaX5~ImPA+fJmgc&ngPDU>uaKR2mmsB{E zVDuC-0m2ZWr#Jxu{GnDT>w6dkEy}@d;3h#qrVC2I3K5tMm86v3>tO|{irfsQK=o27 z6w>Ef2dg4WNC{9@`UW?-PJ{$ENvsJ*sLiG{`l+yp7=0Oe~EK;y|v@mC_g+B#MVXDyhUaQL>{@ zZ%B8UVhUt^bM3&^9P zltfODKKTG*Xw^XDl%wAo6Kqp?hnMf&BBGlFrvjG%rlTslzGFiRJk-XKlPsco3PGTg zPGMaPEIwvVQEa60SVkI7|`2+IE)U8I{Zhd z#vUN1sFLoI8%im@i94baZiMW*8ppI_QuQ2H0g=Ynne0otm;5GDLEdLP86?6mG1$_M zNWF`{G%^Gj;seRQ#0k_oL&kln5I08lLCOUeP)yN-m;a7NY1F_+Wz;8H`rawz?``1B z)vU}X#t(zfK$|#D?L-E#vI4ji1hz|CG8CjRh=d1RQ4&ujyL6Zdab=EV2XLGlo-&eH zZfed%e~3V<2-iAqx$H${7@?X2q*g+Y*fZQQ>=Co#NlryY z#2t{>#~w<8ss~Mw0k?c)i`0`}gW<~LQ2}N7!ChL44_Z2@8(z=3M+|~8-~Xa4ew#*# zt`G#Ch!~RfR2Sx0C`u~Y(!43!zyS{wm}1?zLC2=YmEPu%P(W#xA+gZrhRSPBAp$$- zZDK$uyD_9Bx3Q=^3}7UTQ4M_`S4M$x#Y3E;&roRZJWxgHd*KF#2lv^QwUPV{8AKXl zG+GipdV(4|mY%Bbjs+u60xpJ~=92PSUiG6R^odC8(ds5Q`LFG`q;W`2w}-q$8e{GDZ9c7y<~~;AsgA@V5ux>vfbUXNa5)FqrDF_6Kc$6fr63u{siR zf-Xb;J(#dCPs+*7js;V;J=?owX^^45#j&VkQbJ@$=GPy0Z^#0~gfzVUU z6c=b>fsd?+V#uD$%0z=6Y(JGXg+g2+YmB}i*PdCVg{VnM1Mv!+eRoDT$4-$x#TvOO z0THjlq1CuUz83m!O8Aw~z&~K7W3-bU1BdH`IAawfFGzb*58@p$U-x|sL#RI*qrR6l&F#lF~8Ed*HSl1y>_Dkq_S*_nf!1L|~8EJuOrtWXYCQA(-;H_yq-@y>fV0d>wr98b(St(-8-naNYC+VG58;Iz@0 zPaOpfWHG>*CigGm?=ok0zQ7Zl2z`aMC%JMue>?BYsQf}|7=6P;)_xbdazbqsn2?=9 z@B8q4kVWjnLiJ(rRp)ko+t?>sdqJ!trOmn4ZcWTI0?vyLYn0+xV@|b>cw%pu=Mg6- zv*%}N!~MW^xhd@FY^oTUC`_IU#jW{YobbHVGBW}{IR?c7c4&oc&j{?Nqj2jLQOYsa zUj`eyha&ggm!`8c`#_+0y$uSskGRd4Etu=h1=y&HLr4-;(1~B*@1m`{MLze3*1pZ! zzc=PJFk%kOwq}wf_%_Uc544RrdRXM=6lZuwc}_Ei%G}`+#9+@g4!mX;S0u)=5hV4N zX?y1z#%u&pnme=o4rI=`i>-ONweK}%j?-dIumEyw4Xb+W_B#ZcJDp>qAvsj;Csg=4 z_X*1}!8Y&d5N6IBHsSVfL4+k*iavxM6sgYhE;1X(+VPF15id^Xh=MK~cR-eiBaQhK zpe%;dF}Ce)Kxxjjg(@6htn$bK#NjvRf`gW2>t)BD380w(KG@__t}(?5^@=0BT~%_V zaB4?yhlCJvzr;ua$+J)e;e|-j7ic01!Pr1A%Q?kR;(?h--Dixs)!JtmRuDolo(+T1 z_X5K~*#4*F%ew84+GhDy5PKdJS)?u#UuuGFq~~26in|U8O3R_d5b+u8O~UOcEd)BK+2wQB)6tTRQtV44FfCqlh9VK|qoe z{fQl~P$8(_CSX50lVN<@?aZR<5r6ucZU;DB*EL}9{Pu?E1)bp#-Kvx})EjN2^}a)@%# zqzV`Y(e&o^m=949_KTS4Nsx?|Kyd2=n8S=CjDwm^8V2w<;&kd9NdW)+5!eqJ;_P1= zydqCCSA&~rnOL0(Z!l(@BF-+{A}gRkJE}x3!43u^lIS6VBB^rIIouA@t(#$glH3{x z*SaJMj$@l-%c$THW3vSa(w!7jqQ7J%V-%Oof%bG40b3xpuy=As@JqPmq z3Pk?cMe!62!+Ss!ObfO*_%q1)RBP{n?ud~|T1XkjN_0kTB&B$g_fhB)Yq$5H|DOW7 z(4GOAmL&0U$(cD?LOIGZ+^+oCs~oyGT|LaVR@NbC(H_T$gP9PLx}GL{Qk=eTK?7Svn70b0Mk{@y@|Y zwu5W|D{FTHbl7|<>Q~*o9krqoodFRjObdl6G359*&NYu{2eAX10)D$iOa!b!Cjj`3cV0@2{Qk6RsYat zhzC)*h&aJY8jRTbz?(jUr;u`TE;iB#2_X>o0Usz*i)G5Dxy%jTL0L9b){H8=Y&a|- zlHqHY!9$*fQ@-<6uNy#Q8#Ate$=JCFk5`mHZo^boi^fqI3?W~+CKVwXaX|@P!f5L= z*rV?|S0WVb8Em$GgzteI$SP2VNf1r3&Y2Uq(>8*KC&UV4jN~r7CSe&vj)<4Qpn9PM z>1wLku8eym-ybPgRe1VY`<%o^_udX_);^P1-tXd5@Fak}{b4BS ztuPJT+Txpyn)dNhB@w{gw+q?)-N41b!{0~ z*eQ;gpt3pii8@I^aSB6v_-buOx=kIj6$*_^;nKDzd=qI1Qp_ri&`^ACgstTp=nyWL zS`asQ4l^LO3d#_<^?a7D%WNP;l1=Usb>PTjTwN7TNw&f&Y9JpGB}8^aZx=$1&?J?s zW6h}#!IN`xL9@9eS&=HEfclgi!VNEUBDg@5n80_;HmVbsT*K;!iU1XbuEFI9jz=k4 zU^%WpMiv5^EQ~TXeV3V0NE##{##kSIR0U|t1YXefOHg6N5JwLK_29v<6$OSBVtP6N zi+>OZK@i{J4JDxIhBOYhZ;PD6x7b6Rv(F^4ToseT9I|0ne0WLFBMt$KY9hXrbF?Op z12T8m3f;__iOD41JON=cnB~PmG!UPt84-|HN)1$q)>2UBE;oS1lT+pVJ(Lce04rj> z8PbD@jMPH56H_Lpn50It008+wIK~WEOWz0FX&cj2Nmx`FM3-3AT|6tk1zDI>SyGRq zatfm1DQH9-kVc0^MTxjbCuzYrg47C$Ay&t@*E^G0!v(Whj(ss4rV49Z)(uQA^`cY2 zW$Vg$XPPwJHbE(ik$0gQvX{lRw7@QeX)}e}Fo5l(W{i9V zmKUP1F~=`)B`tO{1iPf z6w-cBL*+RXAyYsmcN2#--p9RNh)V$gr^|-{RY%j{EYKyh070S{#Id=ys(=E^6ICts zLW!1Kt*(43tD1`UvQFQwq}sKafu(k+$I* zO)0J%>#$4`Y>kiukilDlV2B=}6QB<%Ae`Fs{X}RET%ZF7xeP2=DA7bfU{Ac_qco?& zXfYOc`3|QnAe_PCz-H=`oQmuqf-EGVI--gjz(aNwouGQ`ltf1n1X_p6#R`OEKBW(m zG_lzxxj;e)$%^rY5g2c4Su8=i4mWJBvdQiMubdeY^#OtCqUnYR46zccd{CA z3-qhBz_&KoBdP@`ums-%5oH}rn02HZM6L8);BOoh^+M`uyYpZL%WPx8HIW`$(lrSS z`3TNFadl{%5W~TNZq$a-E-s0M;tIXNUe+7PKZ+ZK2cl{Q*-bF1F0LV}0dat6xsU4S z(wTKh>V`3u78IQR)}U#ilRf5Vz})Z-BBqy+~}A#wOYMb{U(ma0Pb*<;>0}sdt4&R)S#k89s;B_Neh@+3aBS zZtFIwWpobe1=#|&+i_;JoMj|1BC;grFQQxmI(jeHcaZPDqwpXq@n?78!|_1q1BQ0= zTas?1H4Yv`0E(;XDCG6Y8Ts+9xAq`_yO2wh3M!=K5!54;f&i4KjL?-5A^lP^tR|Oj zP!I8Tjze1LQjooIwqOGvgpIGr=t~JL=-yx~oP*o+5YTF@Lajy(z~jP_r>U0jR4<(z zyD+Lin*oM0;3;ks9lC$XbF&-Db_l5;;C`@%4|fY1bi@80hFaZoX_b%k&^1|4EC4PT zlLK)<0r#!u&>wa`Gmn$&cIXY&aq~q`81>hq;8;abjGlZoar$zbNJ#cR%#vV*$4O*SKo!xq zwfp$l1;rxl!g7vGC|w7_X0GUFID9fDz)E4VWb}B}*QTxj{RFe`ZjjK{f~A7u!4%9& ztEB*1(F+Lw6tVO611ofbpEq91|qrGs@|(84|U^4ckg; zByB^vffNR&F0RLgBu0XRTfnLVfm3%^iVVY+qoUD<>(ld zRe=V*_e^rpMU@JaN{XStf#8HDo`=+JJv|JMpxz&Y5uZiYo{c@`>Z8MOGVkCDg0!*U z+(zPSN%|Tt5&K*kWLP|TTAGIR*3N`AqEYM<^e0VE!c0fj)nYHP6hJ7*CqgP5_Piw1 zT!V*4PjH6;yuDot0!Mcdjl>1QqhB0B28$@o57bV^7c6BpvG7P8-|zbe_?U)ln6T9gh_kX#uBsa}TPH%RMH znA_9}JC%a4{VZZYLx4dg1#^HvoG3bkIjl}w^y(CK0u+%BRPnMPl2MrNxQ?Jnc;m_* zIRk&0D9g4wgS>(C85 z;?yWWXRLHFy+n}?Q6V0Wle#JSkfjKTUdmcd_673N4&VZ)oH^8yjvzQPq>4J#(Zh&B z4Ew_@yQM5TQI^_<4X>pq1_-tAb1Y6@atzl3L9^hK9nOhXlb1 z^z0^Uckaf7##NNGzbM%M7>(Q=1YdLRZ?W03X+V-Vc1wm7WUADt!aae9OCXT@L-@P> zE-!eC?w%lcj&tXSU8!-iUD;|1^(+KF3;~WLX%duhyc{)_viI11Fy!EMID*i_YNXCZ zP5S&KFcETDXLqAIgTV}(g(5*3l2XThfGEy}s$r#xev90!=#>z|Fd7nN0hTepAi$VI zG(d%$4{StX`4zeX@JcRIekD=g5wz&R#Dv3C%ky=lkWoFsLc)kho8Dp+jMCWjsB6CjOnN zwWLPm5ZY?aq#fWZB6fc_qZt^6Oh}c&P*&uKaW97NU!;GYjlO252?DQhE!>ekOF9f? zfYk21-KQL5dlN%>ZjXf|Pxd9$>=ZU<*spl+C6K3`|Ou*qv9>$``mD?ff=S{0iL+c5vQ` zPQVl^rGMP{H{r}cE2$9kXVfubc$ehzqzy8XK{Z28IdN zQ^Td^Z!pUA*&;GCNEq^>uvES@O4}e8Bu%LSSEf*JB-=zEVbl>STutDFVTtmK5Xx7h z^E*F}<7==(!Bt8vNJ)rh5G-fD4+(bugj5ne__9Q=;6_QArvTK5flPY?0SEuHA(iDK)Ii^G z_4Ov+)G)50PCT&&=9Tmr@L@4LW2hSW z$zCy#JOzUY5ZqD~$dt{=Jdw}uhm6uQO{wvMi)iR&7H4w$f@050q_U8`i< zkhBTWu=Na;koSn&h2u0dI(}p$NW@B4ARKhWdo!-Y$UeG4xT@Zh`UAOq86eVnPMWAj zcx_0hW-aBy=|qxOtEr0sHwbGKxoctu^SJodSSB~nR45y!bK(;wo&a5>Nt;u>pfytw znnN2O_7SHN!79N7OidzOcmkD($*47`Md>=BqA8Lr?fI}5hWKu%%{vU7CMM}XV4O~^ zH=b=lO*9GVpbj0{7Gf;cz*8`SmQcy34&etqL0G9`g%~U|LrBUiavXfakOXWD39f^b zVQlz9su130*cYJpx(+)Ce1aKu!4WFHk})G;Ofs2Rgb59xzz|5~d)!Mj&o}@_s?yJ5 zlmHDt6wy{BQdHuNp_ss(mSJ+GiV_XtBa}q44jHh4bPzF5bp(Pag%%k%L(ni2qKhBr zKy9SI7!|1Q@XkPs+$sg*T|6Qu!2?(bCz!)5uS@M_sfiovj-jx;6>ZyT)u2i{Rr<-4 z)7|}n>FjQ`dL8so(gaLO+W{OJsXh?NdU9dl!iZ8p{~NVuAOTb*R+3PRoCFy20nOl? zhQ)C6)JK!>gfU?F#qB&G^DDOl7BC`VAV+jZqogN#NIFW5x(?*v>os@}KjbX9L@DwH zy1^wLP+=M+4It7W`w&Iq0brO7l|n?eDu6E#)1$$! zs74>w0zUN;MNP+ak~m94dd5>^kL56G&y}@mB|MiSw zG?cgSN+;g?;R%>SmIrSEL||>*TxQ=a6c7laHiF=Lpy)j&e3Wsw?Xf*e>2Cy9zN3?}V~n-cz*q;b}fSs*h2x^;6eBg|f+ZtWBByQ`PRdpnPeNUTM+_(dEWru0 zXBg$HCJ|Ki5j$Dh8okAw7L0z*5SL>B(gvenMqw&TW6j&`+mVXjvtJ*CuKX0#3(X~D zYUryH^^wA1EC>slo=4|kJuO{V9TJQZ^d$x$*H*NafJn|g4TIG@P1CLv+a)9cI%cW4 zJZI`@eThzg2dXmzp_mEW>;gu_`>e=hkO6tav$fJ@oY%_9Miu3qXqJS@Ts}{-8iZ$d zqv?m-=r`O+2zxfFh2Q#|`?84qTND5$_yEw7a4D1&3py!g^0JD--TD(*7>padCWY~X zpzqv+6(ste4MN?4IZ|OHfM-dQCtGhsx8I~1eZ7PNGBYSAWD2(~b`LPb{^mlW(vRRs zta~YD@_)MRdsNDqOPQ^P`0ZS-DnDSGf!q0rdxUY{sNGSdchpJb*luBF$O;c$v%<)dWe@l=GIxfVNk>2K6zS)ZQLFm5Uf;@PIbtHZZM$ z>$<%rK4NDmLGs#ufOIVWDa}^h9$ae3@>N_sM!`=O#LW@Fq?!Gm`v0);$Gk=M*P!m{ zc2ncpVw|`xVc?A{VpdDjt#5(>y=)+*KzQ#viGsYDaHPvwUjomFdcxy++Oqw=h84L% zqs&2rkKw=Ytt$}#w?75)mlK&iU1mTd7ED!Ch-n6H^d|M6t+~UDK2PbhU>(8-B;*?Q zlV`)iL4dqd&0sJ>&NDOSX~3g~CRG^$;ponS!`}IUWRRXgRcSMBF)Bb_(Y$3W(UkXg zJKb--iKPECW$G|$Kj4oJg{IHbax`*^AS`=`LJ(z;X3-DHCK|xd7E(@8r<}GNeoShP z;c$6JHA~)>5uL1MeqnchzO3x4UPPXGDPfi$K) zM(LeDbjR%joPDqhwm%F2{lM<*lkOYS6x&jg!KyD+z!ap4YmUV4x|j!6;mtGTm=6+xvj>NtE5Xm$whf6#t>> zHCu0zoWu2-fGhYE)0kGVm+%1?_%DF<0ox_H3dktF^SA&M)yR9b>N>QsK zKFYJDH8`NaNnBQPHTnSfCl-n~hXc>n=X-I>N6!WA-n zya`ICs4F?k1>zDCf22v20b~H1XtCvRcm&vl8l(VFN=4)9$U_D_8Za-NC+`5Ztv4eF zrvVZ2j$MBQi4;1gOb-u(*Lyo8i>zKZeO+QRTAW6paZs|xa7vR*HRK|1t9jVUaSC1> zAzGkx6H^2T96=iCP%&XfhFoF)!Nl-9GH@VS;xDhNO=@p_S z8J9nycr^MazTvJ_Jp|-yw4&bRPwm!We%&6t2u2cou@pd%szqstl;mWZUKP0iZMV)) zPmHrLOs3?VjhPSNx#Fcjh@|;4&RM3wWl8dOKJEstfFNDnp0nv4TB3N|Gwg zrlC_=NgnA-@xkN>tneiAtnf@?!G8_S2n{cP5?X0UKpGO8gZv6XnL7p8pvZrvgQ(0$ zA&mmoSM0r4Qo%h^ zSnLzUz5a1e9ZVG68?v7&?qd*3ok~$lRsw<})DYgUBj7;^jGVlN?Ud>9%16nVU_@Xc zXJD19-$TkzULs_Qq&=HF8EkNPADl5Im>Y_#gp2a5^c__x9Hs*yRE4QNxemEK?--q6 zG=`A_GIzR3(9bv(B4&zWHk`><0ZLPIz>JalW^ot^6{BRLXhidoFlq>Zgbj{^fns0T zJAM$_BKuIo8O9cU=2oDgj@%t{g~(k?^lxcB9hNd|XpIjNH` zNq-4wz!Mb(Ea0I_mT_?aLz_iNCgC!C!~{QyIlt7^nXxWarT$VqK->hO)xV#e3z zh;q>>s@K$f+yzqFQS2_h8MB~4MDjk^2OVo!b2ajQ1)X|)0P8=x3v@e4rKO!|*m01j zDid~?)tQHR)$0d=Qq#uHk$9=if}qJbVO5sUG?ei3WTIyrFlQnzmSzvromAo>&osFM zXj5B~F2sfn&f6lIm@ zkF^*PTPG9C92_4Lx;!JAksc%kBYc_i9LOppmXx4j9$wVV>x(m;X~x&k5@r?^7!jxf zedNcyTq2f=QK=n8)4TowB@&{|qq+*wB*X}dtPUf)R7QA+WtC1M9vB=fgJK3vA0Qj5 z^enBwaRyifjnavkWpIuOvYJT7d>s-bq*QfF<_=gxJW@)(yw}!*R{^0pRxw@Iy0@N8 zXJFkPJb{4Zb(wDqrvlamc|#{L729YxoS{a9iVnXnNDEX(c;I^|C^VQ?BSr`xtSg3s zl5(jy2l1LG)Qa+Z3@%8&d5k5t3@jldNTN6*WupQnv+FC?0m}wd6~y$NLDfSkk`urN z2#5KV{MpFfP;hm{BrjdYr4e z>-9;u_0m;}$rlR={f#|?D)tNo2ri|oFWe9?JR}0X3N!jr3_^N8Q^%#)C7Sez)()| zKoZ#l?|o6z~rVNeLm<@PuZM zsAg5DNn3Cm)9;f%ML}?g1XDnZBNZTr9C&EW&9~Fz?YL#^O=x$17=|wh%r_|T6>9lA zyYmxQi!;ov{Wz?-jK62uHAH9+CCH?NUkph8!AKHBo{r8QwdUjI(_#1}wPfrM#dpb; zB40|P5kyClelo&ZN7ze?2wF<#L)W1G6;sng6;y%8-YEN zS{Q~1Fh9);t%4jZ7mVXF)iKi z6}$^Or#X1QDGEzue3b%@=Y^u013k$yfSfNFXxYmRQ;2+Ne(KT~9_}jc5v2TapBlwP z-W9+I8Ombtd_59Y{^SQdMZg2^E#w4>Zwx@B8pttU_}`-c>QYofVk^3R|t438+<6)YWB`h!<-1GIT4q&Cd zF(?9++y0-3<=gaC`}XvcdkBP}qFDhdLrQI`MQs5YBCnnuQI#i#C@NqCiy#3!CT;Pd zW|cPvC~i=Lx2O^vssbNhR0cP%w9$fC$)3Oo-Op6;yJiz zvV8gus)gw@=DpUw+y2mOUlx8-a`a%HWsZrd$%+#^jM?DDjR$>w)WlcyZU9|^vvn0_ z*{7innyquF_9fq8AU*s z48<~#?7$RimYT4`l&TJap+6r<5}Q#rAgb|D`fDfR}Hw_W*bt;iJI2ga0l=mJhdY8bsG3+5bU-8 zz~RFX4dVI`S^a-+DM4BAY_AGSQW61s4g}A(FShO}ME1Y{wI#Qpsi%1p=>@IFg6jQO z6%-Ar&C%aN64(6oi^OQB@RRIJ;Yowf2|Egk+=r2Kb#WBPh=sS(fMgG;Mt(0LMfy2~ zq#}?~)v%X16^SK8!As~C|DZZ@BZp@yEp%dpK^|Apy63fbNB2E}mcHb64gihj^_cLL zRD|!pcaIIf#E=^y^%x;>ljw)yXd$hM2gr@*7=1)<`c;Nf01l>1jwEjmFO4uMo&Vx&FFPNhE75c zf>0ChyezPfP&^xsE*5=1L5<)|EgDIJ4AAUxL9kQ0GqJ+PE>b&VYj)>(j#2y6?!23L ziuTEAh?LfyPP9f7=HqsB4M}11{wNyJ_chF{H0Bn!)8*kG@O5+p1aRgZN+Q79QClRE z4iRY3>4rSso`{Z=W5FYVHI%y4>>QPF*@wBE32IeOi9t+kq^yr9I(Acb`&Yyt_6N3Y zN9#2AWhVNLo?zb@+II;-%~Ah3YO)370OE8H za-5OYW`rr$%w&_3!T|;H7*LyM6z0?zl0pCIdZFAbv5Ila*aLFhKujYLR2BO43ZQ_q z;N=6^=Z1b`uH={~O*aNH<1!r7Wp!l64^au#(G*oeG*u@>l#XzPhzFsj1`rZ~u~#q@ ziB}yNUE!?TBn6(fNd8HokMICB(g|Xv^1(36c4?VPRGtAdvy=@s$Q{X^AWf`5f=ev( zQuVM6NTYlqh~|C9z|V6fDZ)}d@C4YDE;}(ISVyU*(kUlpvSq|GWE%-kV?q@LNpIG= zGOLsT4fVnx0&3Qo0_dogLsh1c$yCp%`$57yV1f}zR2EVZ84FcphS9rXH(>}2NJv4I%zt_4mt>$DlzMC{Nk0wobxL<;JJbCO0+eJ_Zjt&EX`h#UT$`e|8m;w44T04ikH zyD*cgsd_$<3jB}Eiu@b5P(9z*@RcDQ1cNX}!XpN&5tXBIXdw>|Le$3`6OkFxA%Kht zK?y|B=T_kwx+^JH4^osCwnzkDNxdl@M(tye1Sr(=)g%1$Sbz+4)r&@Od5Q}30FcOB zOFGGzse=V%h?2-5*hCdF%w*WHGh;$ZP`L*O^~F?fPs_#$?_vz0+FFZc!+5D zsu2Z>dLtmR1BR+ii10iVzEv7m(?Ey_2?fZB5KFqeil7_}=aQ>o84>?fRDE~h;wxd8 zK|L&fs5;b$ubNgUK7k!kkW8;W^%Ee+Gm-jGrC>HYqC3vhkrHFh2vb1-Sj>!qlDui0 zE>am;32+hxfs=t*(L{g%tdb6zc?y!0p+AqK)8LUL4?rZ)^szmmct}Xepy;bK+_M#7 z;TNO=G*(*jT_EV1s=%^pmIt;*7BO#UID@2B7IHQ4;uKIk1t78}tVUxL5XnZKG-px_ zkb28?3Lt1KC}g1c#lAtbfl>C^7g{5k2jm&)aZ|G`=#C`38(A^9_PC#xWki1u{TF{FS2@ZG{B|h&+69 z8+=uS?XLJ%c9Af`8juHLCD7&2yQc3!Cn|Aka6)cgm60O6_eDWFC) zMfFVWf$Oi5;D{seND-1gkzM&E{v&%3!bWYDLns`68N&5EXI=qSe+`n{#*@O3t6EiY zk!58NKKe>7!Wi{Zm4Ld0+va>~n}j}&Z7t}MX-$=3?XGN>J~iB>HU80?xJJAR=&xoi zvLph(PTC#ymhj3Hk1kf~JutU;3Ic)BiNqe{vx)V-%IqWR{wfQbn5u?B1HUPt_jyCw zKvOl)PM8M5ms$J8Fk%%SJzM;vGR3ffy_z31c+(g7t-8Vf^;fV&e(+7J_KX zL25V~jY2Bnb7Hg$S3+=7%2+@k#d0z?*oq)(fB;gcjk1WMj z*g+a+ELI1fM2lE~1ro{z10y;_<)gP5^AqDGVv}p!*kcT<)c+jBx1a6(E004M*42-v z2!Re{0y5|#)9>8BiT3`FnIGR0g|WyhYQkPZZ&e1&Z2j+wc`>Z_(&FZf(71<9d=!su zT?+VK=!x75780;zD+{#KKp6aqVX^=m3hYBE$q<~@y+iU>L$MtUin|rXIEND3|I8Kp z2eh+u%$QyJfe?U+`D=MnCY5qUY*6SXW?=#dFPFJ+wPIAf4bi0xylya&Ruh!OTmL@# zBk6*6IlvCt=kh}-BBD-guV;T6wVxC+NF~jb6oC=jz`2saU+?WOHzGbS{gWmq48-OO zVTZlk@aBNXnv!u>YTh_@M?yE$NXYJeJQdzZe9W|XtRGX&4qJOZO+THg@Gr8YnlLPX zp%K!<@Nlna&z*w-*&F@i`~C06?t?O8tHN~+Z7_)mPl0gkJX!{w?>>b;x`Ux?<(z__ zXh#&s#2<9x5b`S92sR{GYKK@WuH~9Qazi;`!Ce3Pwl+wj~d{842GWaRSTw} znrB;gm0_c7=V7E(wk=he-Y}W?)x_fFt{ZQBe`D9BZ{Gi)VqZ2tRlj65URp?2uDJfU zum0ts8#X`s!AmZ=c4O&^^o+#JcAAX?)2%(j?(RLeUwiU@{9`&itG0S6KfZih4HPG{*|FFkQ?K2=ikj`h>#=1Zm^kIr`=oo$|e>>1VSHSbxy zvUV{M))Sud``5i|X876*AN-*UFTCd56OWFjTg;uD+`Y0ZSU<0}wEO9|ufOpb zK{dBBJ6u@UJJadR9J9gnEm{5Okz;e|>`i&2-an^%xOeujZ_l1SeA%0#v)>W@x_R95 zV|&fn-NoIle0q>x+-=_QK=wUO(p4UG?TcFV`3}+l;;rYN7u6mSp5I#AJM+TnVy$Y| zKHoG4)?YEXyR`ohUVdPIddd1kIC16Z4Z-)qA5W}JJZR#oiHA2kJnZ=TLbpk)!!<#bUFW;cE&VfL;2Og0XFV-A%CqQ5{rddag-e6$1dRQH6+rLa+Tu|H-|c; zTU%=1-_{t)HFl-;2#Ab48}%@SUZ6wdSM6d#X zQnSl9yVgr`_ZjUp&!GusLl}C~&#|r%mY%b(v;#K01~QK@6>`8Dd_mC8H2+2LDMABB zpgl;506d^$8tx|s)q$qyCV~RWf4n?$W5#eE$R7~oXRY@16jQO|bYEV#kDgI>lUzz* zk7J;-i<`A(cn&+_mAm&e^D$pe&Y8t<_Y}JYEY|Z@U}jk1@X*G=E7>I2EDzoOuB+FWoYW1}Gm9s+@#8tW z8=btmv^P1Ml)I*9%F4BFYMU~iELuUgH}@ncruz~K@3)~ zc;m67o!WvM%$!?IvyolL)Jrx!*xT;e6DMkoFg#Ekq-!-_?=|UC)RWpn>MXW#6`L%_ zc2}4u^GUv%cW#`0SU4So=j@K^)6+A%u3Wn*nVRn0w#$ruW~OUF`M7nVsfT)S3_Xg~fH9a9D;l z_DmvLT5`38s917~y|`J{2kjNxpnG1gcapr8ba(z&l4N_c!_Q5E#bnQ9eKA>1_OJG` zej3-8i;lap8;mZG%-*rOu6>Xr8Ho-7#~RU5nZ-Kd_%=uEi>| z=>q2ThwCiSNM>gT51n0atY$Y%ZHBGvK(Ddu@R{|y4y6S>@n#vPS!aG&OouJzeY~T$ z7L^0eUQ6;OIl{^1OWC?;BP&+Bv#V9FI|ZHx8cjB3N$V`nDcMXcFQ@VYC40$4z3ru| z-*x2XsJB00o?3qHG4fzVkC=O&S)lCp*jNr{<8~Dmoghyu#x$yHiX~-bmSzty24~|| zs|Jm$4jcQh=I(<*uNCcl=z+xft+Q*j7U|Dovzk1#y!5CGcfMnueA*M@joHD}vaPWl zxLrRhURb;8Dd(4)cUQIg?A|NsPF2n2dY##IF2D4K@?9@^>Y0x?=dCB6JcH49Grf?l z(RQ7;|Ix19b(eqW;5}}$s#=}uNPRi!HtJm#sx{_1Z%rN$_S!5-tR@e~3pQCzs^d)- zI_W#?RUL2%B7X@8ybfSxycr8XOV_~<$H&V8dVtX|)X ztFW5Q+O=e=X!lU(sJ;{(eX9cJf|#?ouM?dLH?+=Z7Foy{O#U2ZHL zC}X-AFYjlq-E`mw&Et)#GaGyK zR9BpXAC8mJg;Dib`;GeIp}DlXH_rOy@3;Ep)C#M)W_wk!QtQ_1iB?ai^USkl3#V+U z*UHZf<`&mT=$ApK7Hf{|ZLE28 z&bZihqvY^SXT4y{@n8(SwKz!8?F!m9BHdo1tB`6Lq3o5t0K;0qk2x4 zqaB5Mw9BzZ3WzxOfyHnGfiUowhQOioJ(Ivc0h2|K;Y8T;Tm%F zn@0|Faup=gK@>W?M-}lLi1kGjitCt)Hl)+BD}bnzmrdN?hQnigP!n&3~Rd{G|q*EsMc9;oIXyzYhccsM({w;4T`L&$$qaa)F9Vg zH5%D$M^oRKN*HyDWU-S}^+uEVsbLvRb(r5C&!jC@u{GywnP$xuD|u9u_;+?YnO)88 z^x@zz>rR6rZ}m?WaV&$!p0#29ID_ZAl12*3s5DbY*}t>XYX`lo5miOip0zcGF>}^O zv+k$CeBlhhV$)>4c+9>FL3H>_8j}dj8`2Kz4{LvwM{J8W`Sh51+V_zH$uN|tUi4f|Tx zV#x#xEt2p$c+67I@>aIPA_*VgLvrjo60_kU*1fRXl13*Pnat8Un}XVz@*D*Yollap zaz7&Z1KMqd&gRMaq$k~O4n!!Jo5Lt#(0CL%iauuFy`II3>BHD)*|ygpRA!GM1rLHG z>0i`bIeN1eMVd}@4ynq1RDEZG^-KE(Q?}M$sZUOkn%$k&Lha~OQ%rsi&Ro!OA zbpNEex>oE-^Dbkg=CrfoY%(uxeU3RXr*+w-ii~S~L*BxnonLj@`P^Oo6ZL$mI8Zbm zP_{aIUAjBqK(l69c3C69&d=?cywOk)*^ISYPJ_wcdT;?2SN>zy^ZI-D4+p2+TR#Ve?C^4-`Eu9UE_!#-wbo*naD}lW-d7G5v#O)K8kFJZZj*d<^bA~zF zTwpHdAesl8hngGA!x_=I&D?1oYo2JHVxD7OVD2$5H?K0UHLo{sV%_rF$?d<_e9(M^ zskDD;K4U&_{*v6v*Uh)culyhLBl9!!Pv)2AJ~JXRXfeZn-p2*|nBaRlM|quZFJ&{W zYwQig1h?2b?XMFTe3w}uKV$9lzuNm4P0C!|br>sIbbH((cfy@?=evvCW$sFMoqL$O z#ogxaa!+OR3h!`Ix;l?UV0U}YFMddMG_t6pooq&&z# zeN|;P2GKa)=*74$&L8yY1iq8S(AlIU1mu8v3NTJ3PZ6kLy$2JDY(S1ac*r@9q{FNnQnPU&&#JS%L)62c)$NkgItII#RuN` z{+HbIFygSQao)jq%!L;2d2>jMl+#a+F{2f#$gff zWJ*}7k1r-V&}n-dp)BtzkGsMbo#xl$lM>w2X@1<)b%HF#Zk&C(tlylc-W%W3b)_c$ zr8YDTG7&uT#y}BDnp0b2usVENd|I_;^E_$YQ zC0>-G98$BYzRhvv#+sSlTj!wjl zBAPZ2AmPJoaScUvs(Q4?9AUhkJ;T#x5hqEl=4 zrsD?b5hkRw5qLpAO!I@P-4z?w5qvbc?P52xkhy+1$=VM_%)(ZgPp)H=d%Zo5gC-YS zUG`hc!dk6c6wTcae?@fqYVS;9y0pPYWWDs5%UDf z%h|KL;FyQ0+Mrym;#F7cG^cBE?{PQoK3GlyV%j=mxxf8IX6TImHdtZo`=wE|%y^$k zvyij1m_a)FCBf6en=MPDWG+h@ z9N@Fkh|hcC_18}xjjAaUkhS)%TC*Qz?ZXc-r`PRFyFL1(>D)|+>Fj2sT(8&F`ve8v+f6UUl%UO{hMrDJ|tkTh2{H89kc^^|k_BGPccj8O643Z_5oE-MM1%dY_ z50AD9*O#-h8BQ}@C!Ob1u5P1jW&2r5TM`#AKvp92cM>OY-U$3=);WRjA%tMn2-#a*WQ7|*eUE}Kb?$;GF^U=BSl(vs4*J?%5s-GSHzxckNpLwS1 zwMKv6YS!AxT++_!izrVznKOln<3w0)O_sH1ASZi9Ywm#dOIuBY8V3?KqQk5e46@zq zJngDvoz3{0$O3ByyS5coS#!Av%d*Id$*h$uB*}y8{bat+bQV_U#l2+4vEMEmDC=-M z5|UYW@VLjl=-NrMymYix?Tt77YNK~;uXjT)-;=X3{Yq<3^Sowr_i=OXx!2B|eQhw` zoYr&`LOXWegFa0*Y-b8nvtqG)oUk)huE|(*xe7CBi_&&j<#KH^Aw#^>2-7>S-FM`i zVkzG|+^sgNnagYSOQ6}P9p%%kIb}Y^>#B5V^mTTj>&MKT7;${zgPI=%+WE$E{2Tnb zlE3RZonNqnl37CQ_OXip`&>J|wDix+dd^e(mgbMynTG-OG}t|Tl%kr~^e9y959qON zRKLkiccXtyEwkR)aTPGnV1_G_qwQWvHW6#i@HmqwiTsFR!krxrP+!hmznxcSNj%8d zgEdV~?_?{CWOLF{F?wcBDEvtlm+t(O(+TXZO~>}SO)6wH6%)e|$_Ddcy4U1+kL5|p z`x0W_^xct-Kg2Af;I&MEj{Yvo7+GI6NrHLE)^pCSOcM6l-rt}nFIjd)zi|jmH4>?SQrHo9`Ihmx)nc7oK z<>oO}wWnPtjW&8pO>>>hi|Nss(c9R&R|ky*W;V=f=59sUqiaihTDqKmv8rCifg)i@ z)}9rQkM5c(%I2B$b466JX(or@G~=+jKaOvOVZ(yX?;>6Yl9Hg^CLU)ud%*^x-^n%kae?VTQb@pmlNNRaGkutXX zGkWuHp2!)$>`xq;*qk^%adP6^i3bwf)+d%0CmR0U{ipAoAdSZ)g2YYIL-_aarajSL zp4bTcoz1w>Z}_(^9=03XQ8s!ruZ&>*5xjnR%jmq(=Xsq+Tz`z$$3`Ez@tkvR)Zfm} z?*C?=Ir_pkzd8DX`|w>?e)ug{fAlREzwfRYd;Wi}NA>#0|GheU?YNrzE4guWEmfG) zzIn^%ul_yL9{n-vwI4Y8$=pofa`8yoYB`r2pBYVRBL86O*FdT0U)Kh^?%7->l~53QV5 zO{)hl?PS_?+SRmWv|DJ~X*4Ur0Z>cHJE*u6K7e5m>j~lv*Z^=C)G-B7D5Y+q2g1h? zMiDJdX#~ZLyu1UrV}%=l-Plu1Z`U?IahM~0-j6>aTzm0kV_fcs2#&qx>2%^-P`MXV*}GE097~Bx`u%t_A;nA2%tOL2uLl&{j9`pr6`m&;#pBl znw;p1i0~x+Z~?u%HuO8aJ;()_`_jc?MTQUmInrsGJA1C9qEn;os^(k<_rpAKQCy2b zpQy;+atWN#(`+<5aKy_>3B<8_tl;|)fQbt`7EnSwC>=*U6ZjPm{szfa`d9GX_J&4S6o&nKH28>r zMxe5WlmZ_91x>)e|BlgwDR}SEci;OMKZ`#{QY8H%fM-3h@45TmI!6_utj{!b0wV#E=5CC#sa|+Lf56}SIOJRixP=fePi1Q&dCj&~-QPjGA z^XB!a_2|WF(qnB!{uYOrd%SYx%D`_e{-U;(D=Uw4#SVJ>0O0830ho(_MStMm+-{ic zh+i?$wVn?PHJHU?MXjxVe^Qj>%gVL-#s1dTqHFbQE5DRPB?aCILQLR2uOI4ZiNj(% zo1nas69y4b=92J*MefDWy(HJ;?~vU6627ywu%H7LppEVtfa^*;AKj7S*xGqd^IS(^ zTYEuadq?2?!RvM&4#MvTts7aZ!7DZ*Zhwh&yDVH+;`Dz5#LKC1=TVfx(J-tofVArJ zoZaaoV30rJKMX2p1TAAAs*U5N9F;)b(h+d{E6DYu&jmD-?+v+CVKk3J$vR& zj~*k-)VVpIVbS{qcJ}^&QbV zW??LBGWb~-`+Zd^ccx1L4zI>~xzb@xsbG#A*uIuoJwAU5r_+;DSk#=g^7gdyiVB6u z(_O5zmjr6VBu^U*vyA4XWetUyKnT(c(zb}BI<$}kWI_$u;MbQ^OdR4xE@IH(1^sc- zmTi0YZrd`6)mgqlQv76BRTEcHUD~s~DeC6(0V#F(vY^%8($L)8a0{+_^o~_h(+az% zxz%OAQORF-$D=_>Bn$&Hln-lZdXUzaUqPeC$bvt>MUT^W15H55YCe*arCvhR6vR??^`aEC~8G%1!W1i{IbUQdrzU z&+A{un0=)Y)AI^C+K9T4>u+!I7q&MADyCdGb~3N#Va6Vw*Ab5OX?y_X1imHjbZh^5 zM&Fgjh;~kzG%2w6qH!ev7tg)?xEPfEP3`2FJw|G)jhb5ERIm>jJcLFz=AS$LOZ14f z4fU`^0#!-i>)wJzCd7UKwWTH}pacDnFdD81#OMCD)zFqanLj0x#ZPW3=px_jyeU3U z;M++T`COub>w3WFB%_^R(9flyZi;6WAci+0;f-^-6yNYfG*fslsA^HBy(`UmzJi|Uuh=jZ>v2g zMA?D0vuE2z&yM6ztG=qZt+ODnyB+16P^X;1sf8V#puP44KAZG`r(%M-I0>fb0(v4c zY1p+7GOS@`(#Y2SlOf{gLTRLgN#*xRG6l9*(|fjR@b!9|m_}7nucrkTXLG97@7a z!p9sGtBT-GE2ImI0H){4PnF?=C(2IH=k>)U8}zBd)Uv9SsFWD9J$6>c_0=i-)EJ9F zE)-@?T6HBD(S4OCD&c-#1!lFlM~U4YVZEp2HE&dd*Ax>o{USKYdQ}et=VjK5#7CG( zQ~|XEef|R|oFI4q=|ZBe%KUVN!4hj!DGXMNL7A0XQCxl{h%a&v_wNVsUxtJdsSLvB z{SZjN@#S6IT}XZF+vLI zuzX$ij}d5CUXKpG(%jM3#^)qlSEN#_u7oz1w?6u3k4i2RLmVt%OB}CEkWlP1NdQ|e zq$$EzvWBzB2b0ZUNr24ZX#y>W1F1?BCmjhFy@X^yJ7)$Z;7t1JBVPo!V6Fr^`tJq1 zO@X~ZQ*6o<%H#x4FW?_Bv;>-OcxiF569qzOD52q_zzlDtj0Dbo9{ep*cn;wEJMuws z&MW9dyCySJv&Z%3r?V%~mmT|1Z?UBsHCF_5Ve5UZTUzJJ^V?es^E%rDC;B?)%o#s< z$`o5tZfP@kQ!awjda=zl*vmrsM~Qnh=pFs%ARZvRQ0_edUeX`j2M)NwZ@Bv(fw-9h zu`l(Wju~@X?+(0p0ffX?8uqIwX_iE;dV@3z2FcRRO@6Ic1cZefDQG3Amd!{G9p!Jp&C1x> z=1NebPx8ie6=wT{k}sv6_4=jxJ>3P@#H}ekVT@#y1`a11+ANM;r9J7s3u!uzmJX2t zb;GQCNCON(4IAU(0}%NN`@F>89a?asfk7p}fCGjK8Xd_D?4f2r#Qjv^TN}BQnu4~4 zOx6m1)|Zf;m!M93{NTaeWiKHp1y@v}cAE?atyYxP-PJs@8OilVNlu7;YdN}QWJ+eF zAofa0<_TR<;4yvNu3aVXz8~!rrIzN6$|fD2QOvf>(}gd5>VazARGdbF^ChvW{=g@ z+08NZNr9zYi_YELQjj@OTW>eT&?nQaF_y<)ec{=X{RqunI7cB7iF|I)m8Olp*?6y9 zY)nZ>v-kC-c#@O3+Jd*0N2~HZ{Kz!6er7_&g!WG3(dq&ZkJJBqyk+OklJ_!wj~cM+bUc~b<$-Gc8m0KEYnRT47&o2RkrAU(GtAFToe{S0 zANItnV)W+hHmHN4(x${{(sTxwOUj6lYf=pchd~*UYj9TU>@nK@-=g*QOdTV+BD0jK z)yDaBF)11@TVrvXG9pz5yU`_um@KgzO6*9T3XxEc)LKatqb|HR*4}cbUt3<%=8^No za%Q?J6@t!`7Pc;~CRwfKiy;|SotmK*M#ft-24!uz)_-S9J6>9;<<}YVoxPr%;y7a^ zbH=nebMWVlJb|<%*+<{^W#!2-`~u1kd{c6&>`Tfic<{t4`)7}5tCh7{nK4OOZ?TSI z%6P>R{bcpjIs0BY5exu1r-{!N<|f!{MPgB+Ewx<}X%>#omd2GBl2Z-hG?6OXn_>~f zB*!gu*pl4zy7o+AR$OYFJ%;r8aA@7x>d3-KlQUNAi&aac8CsQ6rDsOyOghG6;r+mu z9=dAuQ!<~{lPQ5PwRZN z0YMbXcQT+SoDV7(0T0XxM-$-R%1@NxLtm7ALGSZF`SQU>%U(YF6S_GVJ8(tXPag;w z$g4V04tF{kC@$Zd3qlXkj<8-dD4g!{k#jG7b`Xj1e-3{3 z6a)oq=)H^ajlTE%P*ISJlDl9B&N#SFQboEUtAfH%1rxH%m35RM-FgC#x)>UfMbX7V0#vEmHD0L2%)*&{DGRqrt98#%Td8WuDc4$=&ozh`D zkG$t5YSd!X9KIu6d;u=|)8Jp=1bM%ZQm3I-nHV2379o2SAHT)sqatnuet@k+3m}7_ zS@C#qke#2S2bpZVDoT&qBe-}k8+rIq_&ou>anYP#(b&W|T#kO#sRKt_6OB>!OhIje z-JXDcfl~F6^#4JzHptRAm9S^mYP`9nJJh87y=$|Hr1@)X1N>v^vi z#T7xHpmYy#pHk}0px+_Ah^iKKDYPBf4;Y4bAk~mvkN?&eF^+5jPcCdJ%0knJ{*cy&_z{g9U5azc1kR;<7WroP!8<) z4G$T`(I_qm{EHHjq{h(YoPk$@HY7Z>b-fi0y$u!gdqScz@J5}MQSlGuWnaVVNS46G zdr&Di0e|0n7oxr1&_~~X3HeFIQb*hYvD7ArwDZCqLOZR8Hl8+xHiNc+wvx7vb}P&W zF_>+14%=uTre4U0Fc3*i)NBqh0x7NC3;Cn)5oCysP6aVRAuNdAAumXH3+WhOSU|>~ z0_rq`MatmGWWdRk81jXpso`#*!iOTcf`|mQEh6qHv$ZET9{&=5jlcWi(`ILDZ0X0s zuwpJ?~HPi63T`d&dZC-*r=m}hn-x9~lndXWHtxvLl zT~PnI{zYe^Y;guu3%c~WqH`jlCRu99O?iZ2kUQlunW<=kJ8nzs{Vnqx_qbx`&XiVe zA-r&?uZZ}!GcS$nWZ5o<(1VW;gWLmwCYSPQ7cOaST|)kb;aR~njN=!eY~X|7g-ZxL z7yCYm?pHVrOjpqK25Y+`fo&Mi-$!}L$$8}ON+8mQ^Y#@4?~yl@Uj_ZVF7WdfK~Bgp zds@V>y?k`Sg?`^b8>L{*jNGMzpQ-w?3LTw1IWd#T%1rp*0Mq*VMAZqkI~);%ik3Ar zE?rvRxB}fK6N|lG?-i%!&FYhtft536*lMTo_>;>QL$pIdL3=yOJz4#!6j%A%Tm6M? z&4D8g%U3kkFI##_6B`}VqX7g6)MX*oCs%}69GFCuuYvd;C?*IcZOGl>B>_Lf z70?cefV)zj7El=cQIUBWz3~={DZ?#hN_h>ny$|kvWp{5$gIpXDDT&KUG?^^DP@ck3 z#udoI%uc-o<^vzW@8b%wII7&Fh=MX1RYlOm`q4M`?qG7us<>>X?luvAxBN``m)%9M zSyGTYE^z8p)tRa;2wv*U&+9>~+bwFBR(j9vsHd*Rea)iO z{z|QCNPpATGAU(DT3XFr*N-j8FZYj+RLc3KcG>8qPdPG5&5|&mlV)Fw;?bSB2Y*QS zCr_LjW34LkBo~ZniK$Yg75H`HWaLD>Ri~=3wWy;jub^iPs{6L;3^oJF7v*=44cv_b zk&pHML%g#4DN_SFLPnTJa&65*@8Y{*J)Oj>6*h=3;**dM4B3$qam!o|bh*w)02T4z~`)tT7D+dnJ0JGQ)6*1-x<(wqBUCDws4!jxV(paN`FU8x5TD3#A&(KL#^~i374VL1a0~@Mdf;U8k&@=tLG0#YUW)@t(f2N7kOJjd7OCKf9IBWw<|MbR*{3I4F?3>wA&% z3+AM=(Dd~*95O%&nRnRd?sLBjDZ;bQ7D3hdt*mpi@JUt#YwOu%qxZk`{r4~J$IN`Y zJ)itt$d{%?OHz7_QujM%sTbY+^2@dGZ%j%`kJ~*_3snmzdcEx;J(T0yD~ZObA`x4y zu2kst=tH;E82C&t7Nc2SsTo&(uzc03<)YvtATTH7yWs9*$3e!Q6e9OY%o(vw#=$xm zJ!D%|&T&D^WayKX{iCk9=q(WRSKXUjD`+~3tWbU4P|CAYbPo>_sZzuov#|&fxg!0M4UcX?B=`h>( z3kGE3-_vI}HekaxpAyg)e0Kw%2hYdFcz7|5KUi8Zs?_f%@5MMi^kq~U-Kx|>>6-WPBVMj|*35j=wM3lU)HX3&bkI{f1D(FwWln=oJJ|717 z;*F5qpfobXkW_92eqa^bplwXh{T}}R65~I1Oz8gid-y;22i%eR8{>zyBB4p+dZG%FHt;^F91; z`m0qZssm?xQNziq&jNq-Qn|R{+!`}QpVhF}*aTKm_jztPILF2&4myR!P{WI?&dB15 zu9%}dDE;Q>>5UIOu<`WKu-LgmOwlDXbBD>saUVzZj~5g?j{kKWza7dwx?F-sI4A9r zY0Olf?lR6=$V;+;WnD#U1YNa@HVd?|1+*2k^|URt$H6F}Y)eqdC>FPe7=` zg<&jI_TrEXli{Xe*v!QPd;T8a!>2BitdyV+<~+m#r*iey?bMl5B>hVQ|`=j*o&oUZQY%JZ^AA>rQ)_`|Dw1R(u^-- zHJX^fCyACPcBxYSjo(zK78eWCAd6urPt6C*xEta=Ml@F>s`tVWAdf3#rui;`W#JGP zlGSsm;Gbcp?vq4!hgNHtHo>6NjqxS-B9+1CGpNvoi5(mD<^xZ^@Lb6Y2+dnKTO}2V z(mdY3H-+@CC$~%!fWOv0YnCI;krFYzZQ8{dm;J}$ExUG=zL%Nyw%!~QQ4!=Wq#GWZhS;XyHz7i;eqSc#B67nZlw|NTEu;gKOeJ2<{01)>B8sA0sg5T(>d z+!g;AmdmDDUT74ORKOvy1ZITtEdTn8R*r9Cu4eVq*f9{(eBpP<`mg&dfn#MoPTN4c zllCm_1=<_5PibG$exUuAiusZu9kQZSl!4%CmN}?Oz`L1LPNW=`P+pP^%EkG9Cqd_B z&^byJa}p3T@Jb}*yrGg#(8Wn@2!;HjaE!P@;ojlRAt=NMM}j#d@J{LZgxkVng9nug zM$iQd_XK^9IGLboDe)1(bYP^ssM`UtVN%inQT47aMa&h79- zsQ;@mC0fk+d1(he;x13UucN9435>CPjh)SHZeJ!9CPiAc8V85RMy1emd=e_v(LJgh zR+0cp?#^rXlOAsV7=3(oeq~OMpQ(vi1WWDE&37aeHi`?y;BQv1oR%Uf zlxUOP(v+v@9##}@oXh2xYrSJ87X%J`wVhR0IhLt={GL(57`e>*h}6bY_Xx}xPN&Ev zciZt}W^v)z#KWp(cN7WKU1mSX2igXfpm77FWPy zMsuZ!fzMJ2 zt`yrdlBIeJk6$O0CtIyKsflYgJI18DWF?VoK|~}+pUY4fvJylBhES?a5L-%<$mA5` z7xCuUTVt8xVv!hn1K5-r3v_epjEIO*7O0Z#vDRdIx->?mWbh^EMdVn!eC74{olTn} zq?6dbBxqc`3eV*U#li^^iCS*5+mO9d867LlDb6w|mD#aSDQ>sk~$u`gQ@#7~7rcJBSrT#u)!h~8`q*P>wDtbaua_lH+q&U(BmC9LadTIiR z!~9DG?FjDxi+2m{VX%1j(q5sxMLR+}PCG;U33w6^#rfR`5$uSD$U_OWaVcyB#Fn#R z&o$T&fb1_&v;&8L%);9YK#xG9aEL0DOVAj;z_0KDhyiv}CFCJ8xI*NU1nGe4l@{E% zV2KE!zzdwUp;t5tC9W{YExhEsFqKf{R))|Gs8jGbn-#)+NV^~?DjV#H<7JUyhYvxx zsmsgZ=S%CLW~*{t+WhrB7Prgo(5I$r4OgaU-6W=gix3gL_O*so67j^8VS=8|)U-D6=J{Vfxe; zri{m{@E>tCaS>c@K3gob8VrjXyRX0Tl~*^cyIVV|Mk{Q~RtTA$9UYyxOv92RiEsG+ePtU&V(Gg-SMlge_-tq#TK(iO=V=R2;PR>_Q9U_s66a z52(AxBR5jbSa7375G75LNF-1-QyndYB8(alPp&dE8yBr#_3I;#Kl#Xi{RK_4$7hS< zq$+6wD_SnsM9P%uf*hmu@jI{k>(@2-RngvWSsm+MLY$uw?Y^EQQ**N^sbgE%hhYNbR{dG)I0+SfMUeb?=%x~*f8QL(YPp^@HDm!*t(yP=^G@2YYnKl}yM z8I{M$YN6j46x0R|8W&y47eaeTkdb`A&6Vt1S#O5?&xMqarkl2g_8{#;+V_Y}VJC%S zBoGTQ13m-ag?@aYpj?Wf8%@v)BILgT90H_+9e+TN5SB5iXc(vu?1Nx0!b!nn1KS0F z7ldyk5yTZxyqD^5#(_&To-w?!bjqi%{DS{B2}CmPw-->BCTLm zf5}eE&2!*cYL&w8FTrndzVftJ3YmNZY;fW+j|zDjZCtZ|OUe2%v8Fif>Iz1T@6JW{ z9=?7%RFcQH$zmM_SyGZ8kJpkj@tfR4r&(H@#7zB+^^iGgespA%Gd0^OtC3B2v$7m) zc3hlG;42mK63eumXnjp8K7*67)1-FgrLd%|DknYOz-1?C86-e&Txz`O%6f zH{Y;aRx5L6JDpr!%z{{UWT#D~oSE&enT&cTvJ=ZHG!G+86P0%&2y7so&q%6LthnXW>2;|X!~by<0%SQcc{n_`(l4p(5f z7C)+ql0b6Q^9JD&{T88(s@ihO}d-!3s?iup5=i~ zDTFuEsH+FAfvEXx1Y8{`fTAJl)4=X>kWyen8tRq1l?tgs&Y;E$H>D6z3#IXHLeuPfj^IVifr=70hWM=F06$+VdsfttX^FcXb@3?jc z{;(bj;qt4D(PDbEDkVF&UTTSqiik{|J88+2MwAmpL(XcF9cIr>03LH-XW z0H7MAt`KUY6b)ia1o0n^5i|$H^gfBZDZ39E0IfMXTWCAW>1nAh#x3nk{68 zfd9pgpsk}z0hCAxl_E^)Ay(=X!U71jk(tOugUJrSBxQl%{?O&r%yCh|FKD!o&3mdh zA$;|+U)ylK!>BKTZg+P=m&IJYh{u%~vW-sYLldP|>tkb>>SA+ElF3|Yh#pm3XG>^_ z5DFvOCymXE@KoAt_C84kon=joiI$q_3C3jt7C*xwZ9<#V5)&#D;?py8IqVhY!f27g zn6FRs$B#~Wre$MOy;f_?bH|Ls3l(bUtYY%ErzW@}E%F9^d}*0QpfxKs(F~bPrHhW> zSm)2|DM=e$SW7P~vMI!cbC%3s@SIW%I2X&3MCc4`Wp=!6oW{M`Dpi^EeHGv5 zAUta3r?Lc1O6uE<1>=%3OQi}vn%`_o>=WpHt8CSUdwuwJ~pamf}tfv z<)$-55-~TgIL@N2t;nJy7KzP-313o#7Kfqs@Za6Qii!XX8OGQsN?(==vZNDJjTy4RRUSfUbx- zMZ^|-CNJn#8ji3El5vPus9%X2f!GTs5VIZ;CGS8$5_OK!+b9AE%Gi+9lgs2lQiQhQ z_6peQ16m2*kQghVMUqDYRR*2k)GwhkLVN=rD~GlgFeDfaJTUl9#v6R9lJt}%Plu<# ze^hdtk`jgFInXbHI2Z_3L$A{yp_0!aDXC$EEhYjfa4zbZ-eCA$FpmMiBpD4s9|JU< zCY?ir#A=i4skU9jwZO)bLXk>Thxe#QWfWG7TF3J0bouCJjW_q|#Y?pbP@R2co|^A7 z8u>P+eX2k%lnSnoVz0YJ$7#_;a#R)uM|&c1+|`QfzFSQ&c}Sof(;!3VC$Unv2aEZA?v$VB*(X z>f>D#TT6ANQPE=;*QdKAY^hwq;51b55(?9JB8iU)t*awMyyR4yy}D74;>Aj(O(o*< z^Qz2(9Q+_#-BM{Sjg$9&W7KeBqI}T`=t{@V)!>`?(zrC2BiUWAhBk&ML6;>H2#oZN zOO`HO68LVBC(gQL37XI6D%gUXy&|QVmlEi+>aTT(mC-!MF&0CFI<$SGlbm*=QDTZN zZh0pua%D(xxKniTo7iWmWc8t13uMOz+{skyw{cowcMo2RHcl{C8dmc~!!S*c6@h)3}gZ+tf0K{@RSk8IdI_Z+dQ#*DTdN zl;w;pD~OZ*vR)JA{MXE~)^_tMo%e~lvZn4VZ9GrUV5ZETGao4wk*y{_JxiaVlt|@J zHC`@GW|t~uHf{yI*xV5zh~`X0W@rT<=Ae~R7sHG4`3<5aLQ<5_=CFfmuh(oK+xkR(HNw4#%P%M; zDPn@_hj<%E3%lSUie|$y5J;68wgT!wLI)M664(jQ5a_@}_zn0T*o6FIRDvi;{1I81yEUD6u{P+P!Dy#2;s6L^+;*Tr86E zuG*BtV>lghy)IK|NZA<|mz-ct{g>CQRDQ{)=g;2M^~6GauCsQ&RJ&qI=U2Gg3Ai)u}jgfA_zL_|r{cq)UT zW=Ax$pp~tJqn6^IvvMm@x7xBYBZCveLA9uHLR_asuTisDg6P?9l`W!xEzqsdDmJsl z+*vU)i@&M0Ep_aq-oObgZPt%N?Q|}3>U`O%-)+#H))%jcEHR}TTETNCPO$4#>28+< zS08z-27P{}F++V8&n{0XOfWrs*Y@hnG0#+&)T$ct=`2(FV-4~8TD;k)l$BJ)t&fS9 zqD=xR;I7y(4f=%8^&E+wPxL$RMdJ@xkF$OR@4}C?0CXl3A|pzI4(R!)42Iu=#zPOy zKC}=)2sfDFV1Ix*XK8@hHw4^0Mi$|lEw*DAo!;t>7{ClMqK>S#f}4j4mv zSQ1Vfk_&(xfPD-K1u5SbnDm70Qa2+E8ZejKjGX78SUD(t1oJoy=r_)R06#g^>03l_ zIQR-GdvFeXr?5JR?!dVL>&PiYa)BC21OlO-;8*vBSHm+{)bPQv5gerz1`v%D43K8f z;+hN`WETYti8zLi(r^S+R6?6_S;zqbVMp=x-e2|=h4*>Li;uPROtM} z7V&wE5~Wg`A`zQP@*9|F^^z5*zqoE`9IK64l%ABtF-OW$q7!8T3*EsoLVLbc{?+a% zV`Ku#6qs44fbGpkiHi7mxrHGY8zf?ZnVtp>u6WRQQ5=(317+d`MtPFO!eIzCR%XS@ zhZjYb8|6M|n_OOQkBZ^39MDfjE0;o>#~6-8VsM}PQK3-LxiYCKM#oq$(FtRDoEQTq zqJNW7!j3>phK7!+r4d{{5;2~`^|)rz%=h28de&Z9jz^6WO?5JVNntrYq)yL~^GYit zO2DUsST$CSU8793TF?Y7G-wt`m6>w(2jU2xSYj^FFg}p0d2Du;gR6)f<(gz?8r0%* zo6)CpP&J}usl9h?(I|_=`9hUk;N?b%c;C>?(K3Noa46au8yA_{JzDkyFM-EoPYQf< zoR5;D@^iAehA1nl6t+mCd{NIt@*C#~^ie!7%%b*RQSy1JREKJLLSz)5 z-!ESa?G?v@6I7vfESVomRcZ^*9hGaAsIyOqUd;uS>jpk}I{?uw>Vz^ue!@||ZnT2CdvhxK8Qv!#EJH7ZZY~xHN2wR3%1ON?umx#+_Ny#D>|Pf_rHW44 zRN5TcwY1fcb#x2uF34Yf6#6(o&kn$AtDD0xd&MFfsaZgwwnYpi44vW$*8mze)4{VH zB0BPau;e5mZE!LM??G5cSXm=fPbev7Y!TjnCIK$R7LRuaGQz8`O!kAF2VSoQuisob1p$dDyD_V53jv-q0zpM17%(Fd_*W+`+BDonN* zQB6ff4gQyaUXqoK1lf)uC;0L>u9 ze3T_t%;evWPj5g>dV+^h`}qIf`l9VE^mgKENXnkxG_8+XfVPBo(uZ)KH{VBAC zwB=N$*_~j2JVbkn^1;c143+SFqL|p2YFI|X$YFKKE`}HU!9--h`pOZkKEV=&9Q;$E z-4t+C1Mh@Yq*!Wrt=V#l`I2+PywVCS^hn@8C&{baZbd9_VtD}%aDX_f`*uP zwl(9^*&>Nh62(7vMqJ1fs!WWxu9|Z$Fzc!XYrgno{gR`ed_^Ku{EM-hwfvUO_BMPs z>@X@y;~6m~y9shYdKw#h`nVG4x+Z5U^g5F$mZ3A~ua8tn+Bhb5w@go&MO_nbRgtJ@@SsZ@m7*(V5B6-O8ZSIpgNEcXmdbSS*EmdTL^- zn*UIHdp9;hqc<_H#jY1J(MgFufy-tYz-=d*z=jU=90rRYnT)JNPk?w8+BEj3tSIQ= z;)jU$m9(2-?Wx@`vw_k^DMb;)mm6#|SZ_kl#OF#`UO^8hr4|H{gUH^{LW7Tgz$6P( zc~D5h`VlmsoLJ}y4ah)!rOu`Lgqn$>E!&&~H}q&VKeNW7qiT zr5#fpi4OGqvP2CMj+UB@oa7j_9GV{Erz}xwokIg{$08McT|#Um8uPG2ThI{c(#v8~ z(rzf(eGI~?(9L5e{!qH|mJQdeo}c&GEh4T4#Y4c~$ z@|AIDET)x)LNv>sfM0%nQNzSp&C7p#Z4%O=w6|8>iYEMY9RJ*pzrx42-qiI}lB02M zo~Hm^1KQ;T{2YdwC!V>>zB*3-7=O2OWnyJV-&L6@i)TGIcE-6aueBe+|Ni22=yVO; z8xiCAmW=$Vt=FvBkITM47X_V)zumv}hb<749E9O&&c6W$O&A7}{%U0sUKAQGO)8Np z*$ikb2yoZJevUoZ0K>RMe{=|WS2coBcIQJxs2BikNhm7$RB&W~W zh0kIIH56pN1d#M7Y66h!qN(Y>?fAW+2^a!HcpZr3G%$QYG$!lelaQ@2fQbe@>TF)A zMNBbPmW8Ya)kuS^1dW|AcE&41rxR@(m^lK-h11&q2{ry*FsZMRHOoFfR{Rxx99c2E z9Ph%n2Y&hKI1={5+M0u_`6jh`_o4?VJh~e2ND*FxP$3~Q|1_(`3ZyB4h93&Ch#|2u zVH*Y1AZzYcjOW&$o996Cxghu{#50xj`88Ag-yt9E`# z-vPveMLUma=qW&<;0g|`0ilHu9|8 zT(*D3;+Cm-87+IkUBZE=9{X#b<9Ch(_U*#oy)u35vwcfaGOwQ1S(!kud~(Z=_q>R{ zL#*Am{{)TPCIEpfF7V{eYjh+%)pgTWd>nt(kNtO(flpaJIsl`Wv3C#vr8iM+i@#13!UF-ypIEMqj z;@e@_mkk;R^a$7XBhjZI{&)!iZR z2ai8Y2SLd}CRxcLdL$666?9@TG#fP<7))SMU<8E8ocJh0w9I<%{NO^<#!wEL%TF(y z=bwYKNMK+*Gq5x;JUNW_y}dX9T;bpNz1KcRjw9`4ebFo9PB!zmbyl=K)Yc?V<3u zuqdEJJJh=y#B#m42u`HT{qWgP!fSwAQAOx>AK`7@@b1FynK<}QBaRh<|b7*?aYoWU&Xx9HNND>+p|)jVx7;iGq183O*YsH>fBPE z%MjgJ(&!&Q`?``@Spa7U?p=f629T`8FbNS!h?Gdq@nB$ysuBX091fiwYc^4P(&1|f zby0Bdf?;pM{bkLQ*VVgiiHx=W^pcnH27g7z!;g0Ot1AlH#`X1Vax9xRzh`1%N?Fq= z6~8JgKR0PM{$W)2j;#yc-Ecea{j*8U8S5L`8Rn0!n?1gyp`NV*PDPr?6pBF z3Zo|s8-N2fZ$ONOc_Yk7=mcV-k?DX9Y9%!*9O8V0%Q(9$3fsob8ndsYspaZ1LCBN> z3bL6MU2wsDP(pM7;B3&N)DhI{;D=IJ2g`p+Gn<8tVd^> z-6>h^k0<+TMgwqJ9Zb8kA}JR|2Z1}B92a}bQJ5KjV{m4q?z#e-0pD6&nYYv7o0B!m zc)9f^{nR1Li&7p2*n2Jt>k|Wqd^R{M{B7_=L15!hxOY_(4DP7#;|(vDr2E%05(x%R zZZ5<9n@+!a`hDK*8{S>8bw~Fo{KIUD3izrZ74*!Xw#>1qr*B+aLB*8y8O<}=8|a0t zUdPUY@?w0e!Iod=mISf5p#-q_qfOShIcK+$Dpf)re27~C6axqk0EXFYkhHQl)5#`3W@ zdTv?%%>MtC_K$7z+SB!kCDSS#%zEpUX8`)MY z(;B2z@28fIU(h)4YZ1UZQ-c1RKw5y@Vj)04&?3i1CdT z?J#)!ztd}aCr_%FRx)Vt&n&;ibK}_MC-)tD_Mq$2r5(bT_8mn!XJ6+V1n3(J-17h` zbf$fNdJ+Dqu6b2O-)3Qq$=iS!F#Jiox^f*kOAam=Uz+-UmDHeJwgMlc04}*cW2$Zt zOeCkBL=XT>L6QT$K>?FHNRosJ%tohxA*%xy46qoO1TZv1{N;_iXFYnbtIvr~9o=_8 z)UoO#*K5xm+jnYt?|RQIE1nJ_q$dRs(m%ao(v;rSr%@yzWXJLwCuNlY?$HZotRc9C zk1b!WF-WT4cb1M@`1+DuM_$*iiGYoW(cm-1h&IovT-jWYe=15}kXNIdN@PBrRu1&^ zG|*Ey_(_8F1nZD8pihxuQ-wQW;IQXG{o-*Mq+|^Vi4g?>Rx1Q7MT#~L`3-bUU?(7e zl$@vUz3t<5+wWZ+f9Ew--t>x+?rWO8*L|{X{0tP|6l=6fiz{zIFV7vlc6vd!EQ?c@ zU(&PV)*X9)n>qOz>32IGJD1JD_Iy{Avp#zj-SOddOZ^3N%qx-|m0fw+GZJ1H)wt$Q zizz9#Gxf0?{MJnk)qR=y(ilZS&%DwtvnQS1_vDmuf}FKCe~WgjTyqS4wb#AlEAv*&GR$>C&eQoduYkG?Gz5$g z227e8Qd0B0UQJl!AW52uNcbcrN5h6TS$0mCyGo2M4pXWGjRGc#^K@mg)M|`vLh&<# zuwBzl!FJ7^@vHCMzV74O?tN^>chYCb+`ww5I7{;DIMmdv9X%Jle9LFp&OxiP3Fr|2 zn%WtgWU~ATV7-tqBRj7Pz*=FRQ{Z2E-G^sxCUY|7$$e)h&E8U)k=0Y6h>_-J_Q8}O zPp%4&%77*BGt3zbH-+mgFjENyli?FG+uw|xu&J~8o|mRHTFDCt@p zq=T7F)hn9-5v2Z#&nQICS&1UJ$OFhcD=SZ;mlur5PA|K6&cr|WJvEtN^Tw|~yzbg_ zmgOCloq0Jk;$H+BSW;OiG$mWQ9giXBT*IsiZNLDJGP$2zu=FupB|T1pXMoPZKzuQpIax) zC@-3_$RkoJO}X!UI&*tL%k{G=OS4)PbF->$Tzbons~7IyYV3b--#KK!%SzM4*V6M& z-G0lrjvMRJ{0@6t{^7djjT6iA3%>e44XnFX0K(yzAeIEU6P5vP@c7wOwySI-~Iee3@1Gp99=U7t02iOrp`zNc?= z^XmIEY-8hfCC+UgSwZQfjm>q3^IMZ0{`9(=9N%ub{Xg1c(cRi0{|c{b8B|vR8V+(C zV7G&)m@F2d;h^6FR9m26%Bvhgb@*{G{Q}`;B9?(ck?+^JgTeXF@~Vc`l4t0i=q8Qf1tr=(>t<@=6!SpqQ_Aao6f}d?c9Lo{rq2O;{zq^U7guU z-T2qf|A;NEUJvf4EqFWr9rurlvBvfy?yFb5G#> z`RLJ&%W-iAa`hivhRd>1+_87?2N~}m8}_3vxD&I+XMa90A*Flbz8_H1$4Bs11~c-W z-sxkWlH&Z|_BeOHh1N0!_z-?rhz|ewIO;}`a7|Ly1pMo<{#w)laioQKYv7wQt2shB z8ATlbGanopf8fy7Wg)>hYua5e72?jeY`-+>HOqPE+7*fm4Mk zzNv`yDMDSi{4=)VCfvOE+%mL(>HGLi#+&Gwl}GSLf!}lRhyTt&@nruZj1LUjVyG^5 z9qk6FFGfQ~sAvKy4OWp-!cr(LG%+kD4OS8Q6ElEO5j5~HNgx2n>9atn48am`2wG)u zKJW*)z$}tV05RyG&;eSA2^Lsrp)=(KNtkdkyx?X&i%~+{2+Huu3_44KVre#Txxrf) zDgFS&n0qGh>xM^B508l-#f5KOe+SZ5m015ehJWvkwZ@Es_2;5i+>QTSUtJpe$LC1U zos`{)5B){MAISduGhVx4C+cFe@k6*ebb={yqfqMxriA7x-jeQMN;GGd7S&kg?+Xm;GzYPsxGxJSJ*B^3m=a@aXyI)pzls z4D@{ef+P57HhSi|9DMAZ43tQy?GGAae1@Lx!hd~=&rS8E6w-C5O_7$3(9LTPZhQhi z8o^|shNH(*H9s!B6^`siEqoT9_3ln|HJ}3{|Ig$2kI8zowT!Mrop>K$!~M1W$Bz4cOLl|ANgV5#O@UO?a$kN zR0Wz;*MAj@;$K| zob*ra(mrcNTWml{cRqI4t44GeldbRn<;Iq~g_i`r$)eG6PhVFn_g;&0%i3>=;wCXGQ& z50yg%`=Az|mmm{amjf7|>sT=MH*~0X!6#UY^7|3HP5Ic<_%J*1^{bcmzo6Ou1b&kp zi?*9n1XkQ-eO9;gDVB?^XGGv$!)tdvhHIe>xMEu4nyF7dd%AmZ`|EEULH^(VAn5w- zv!Xrw@rSH9v`fy3$1TRa@~8Hny&9GNdTzpuzL`(Fc#KIyl|TJ5bLRAquxiPe!{|r+ z)PK&MyP)nL2e@9jmFP?9i-7HDf=;CX} zKh<5@9XX-%*1#W9oCV!H-joJ@WAdwnzNW?bZVn1W;W{o0Jrsqv#nNBaMyIyfE9+9D zU8(mc$g-tsX^W?ZdDUEpE81CCnbPji)#S@{(i~Z*FE2Vf$`z~6N=ztWpmv^2Ac^cm zOfTY>6(%f5u7%%^=ZejWF0liDY|!QTY7>RF`~-6>DvyKRxa)MTRJAHSmCY5P2x+0~!8-b=x;w=C17Bd}fF7;EAIXXn zgaCvxlFyW854VKiomhf~pbk<2bPzUUVky89hg-ru039HqV*pu+rH72+n?TH(obv+y zR{G6-Sj)02WDXYkYWpcEQk>H`H5zA>Pc*e=?Mq`bE63F1K&5@w14@D;9rgm$jrV?$ zhfXQxb@!HdyZ$?_U=qHi(B4kr*0#RnDwe*`7NChTQs!7Y7IT6p$JkY zhVZi@qbVGrgZoCv@I>6@%yk|sEUo{j?(LDa_&6M`n50G`G|%VBE!^IP~UW2}}c(U`PlI(m61YK13(@%7Fk$lpeCvDj5)GKM2I z%RHr5o!NvS{w%vXAk7^gud+GE@q6=?jww#PS1HR~lMN395EjusqcHJVg-UcWlWWk1 z7y!{zTBPT{(tdeE>HvT#bR+p>`naMgKh3TlR<7W8OwN;Mi}XhU3ainr{9~U~p;J6P zyRd0y=V}bk{C77AU@VY2>QJom!rp||82}-LMK8!OsPdN%42h>U0zhugvYErmNlQJ_ zEUAky;KN zyAg_UWU9T&MGocEH0sr5tr;j+diD2&Ew)J5 zXz~LP$q`LyiYS3pn~lCg6@61)b!+a@^i$<`O(52E=WBX(I%OLZPV z#TegHt?rx+R-*EVTplqW;H`(g)RsBW49CB_a{m3( z8mEeex_|r&UxE0gUf^x+_NE6=P|I&!vg?Zg@;Y0Yj7X zJ2NxE$A9vym)lS6g4&HSkS#_n=p+m3D@M3<#9c%OSc;8mnD7HV5KtE+S$Hn6E<+=f z$^cXbd29d2TUuw{`qr9*kG=oS6YDm<@CstyS$E<1dk0?aTT#9(kcwKD_D#6x053tS zhp$MY8zZS(Hy@hSs(xnU4OGVFzZjDD_7bxnS+Z&VlE;zg(=Wf;QsZe`Qyy4X$3HDE zn$G{(suk@XUyqg`>Dn8f+y97S{A{>~8{i&JQTIZ}E-Y`4SJSIa;LVhKkiLj$3M6Jn!kQ~>aHcL-uoE&=F~SUmu#DO*Wz3IXDq(IGWnrr z@vtMi>4oE8l3N%5?Z@wPQ}?ah&{d*7xO59Sa@)L_T=M%~V&&s&w@jOL9A$p@b2L6< zs4k~^V5<1GHhzPqO#aNw2`=^G?TOUTR$JzH8DO{5q>c``2autli2lhbxm#c!rCgBQ&iDjhx5BxjN{`AyE zJJ8b2?L9Yae*V7W2d^2ZYPn^?2gIV(pH_T2*?i`*(ypzg&=)(oe|9~P_**bbJ zdSswA@@#2NwC~~yC(n2z;Qui zmj;xARvQE!mJcZzSYn0Qi);Mk=)5sI^o>4~xAxGaNMP8`(=8`o`QZAy(Un^-U316n z7hcC-ciX-NjVPofOet#3`W2hdTlXxPJ@>MD;xk10Ozl_gSmiXc#M-_MOD=pJWnF*g z?!%MY>n2?H^&I}+f7rUIj700u@&j8ZJTWJ^kw@9x8}}}Oy30@-a0h>%=nQ=d>P%s) zA>^q8Z)I>m(C95-DIIPCVjc84C1`}00pnmr0TVHU4I%<7ildftz)sAj@lAQbnhx^; z5iKO8!T>HhbLtiT@1MT^!r}LSy#IoWuAcX12yr(rx}0ydcP+na+i6txW8MS9d#3*U z?1wGa@e6Kv`t1+yU%K+pjr-43UOuHbT8O-aWCef8p@Cu4#M3Wc!Tv zHOkx2&eSJ(Np(BgNz-r49+s|s2JPfOdvjKLDSci16XcI*CsY!E@j!(c8|43DyhZK^6cwL%u#(lAs_o1?!*`b%2bM&t9i!%7g4v z{+($J^$InMcC1^AGSOUqJ^v2MY_6-{NgcR!nWWg;diNg1o*BgQsWzKug&JuxPw76V74ZU;ruw#&WX=2_?FUv)WG1u_f`;vQ-k*bPOXD;7vEGd!Qp+z z$6U02-Nt9o6n@Jy&)l(1a}Bls>Z^;}itFYqh+oi2JgbV`6p&6GOq}U{hJ1BZ;UK>c z2Un7~78m))(epXZJD+gB>GS>OR{wZY%|v^Ee@7pgHD!1*+~h$BVuqWnnXX+)?cZ~t zqAOlM+-WIpCH`W~`OG07o>F|K>)+)3`9=KD{tR@Utsz4M=}25g65bS8bFoq2x7%T} zYiv7K>V@b1tE~b;*fGt+AG{YeIucP&fq?-s+==tfb>6;sKT6n}$~d<#?$LM~djMu(vC!2-~qqEkSruc;W6QWSb<`~bcACQQPfEqbUub{WZq=@>4vvG1xc4Ncp zAG-(51$}{Pkh~>fFhJ`hl!{dK-J3U2l~35wirPAJ&W!B68&@uJ6#ClB%I1lYY4-RD zsDzVs9x9)y(zwS-Sw;46Z|c6ea|qO0??Z_Ar1^j$tj=PHpTM4ZnqTInWt-ZzSovY+ zW>ZUtFjAfujJj*{h}6~A!pmkA`iNnA>ViMpkVIYD zR9MuwCo>S{C-O&>Tys2O8Afk1i@z45*Jw_5e`-SGCAoH5YSMYjhYk30`x-rpFHS^iAd* zoS5bR7`AgFS|Mf0>)Wq2X332FE$^a5v`nenH}P6CIVER;(r6?!AF$o~H?2pyGYgh2 z-?Um>y)xffHQowZmxj}6i0Q;EnK61<$HLUrxvSP8BCCX9n38C;>;i|~$AfM2mad$R zM4@9?s5PE(A7g-6{JxAif;|Z+fWXw@L4!{UI=}(fWIRH2DlS0)3Lun@6XGQ>Wa-yrk*R&X8Z7d|0DWzv^sxtO_jc+1lccOG*25UsGt2%3ZxxIBs6Muz!QRF2n^Pp@RT z+ZIi(o!nfKBN8v`-I>fZ8OF6v&ePlZ&sVJiRPW5lU^Y=*P&2#=>MBjdnM~;^1LFwv z#|z-fnSd;i-2fGcaLOW-+$5udS`Aqa(6cS!(m}R~@FZYIJa>ZSx$*ZrXt_M1i0GDcxzGNUoylt&&}*ly5rst1h!psC_HR+GDd$uqOaY@e3h&3_aM#lp546renFK1v-6 zl$84YkU}-~?Jq6P^g*~k^yLAE*#p!h;E#Hc6aCO#9{1M5loRel$m9_E$^Pf9=s{Y9 z-hsb<=m*XmsJBzso4kSjRXI5gb;0cVQrzs&ayjxc#4kG^p35&sPM+YbW0#r4~9kE>-Fs|1hU#ZWu(Dk0}A z1G70H85P4WbX;%={%7G~d42GF@Ecc*f*@$HO~)Y=9s6zpRUjrhfghj`OJ+K-?=viz zxiIb1>7hav4P@Mf2N#kv(*_j$lm6WYLcRe&qHdi1>4{(h4^$W@UxU>&kd{}$%J#Pv zD^Q5c(Ho4WU*@Bl?CpKAmJJ6FARQXs@ME-p-Hvw;m9OJV_&gSh%)}gB}iSyxX|)^$R_{?xJzo)x_6gRb=X-xASsr2~^)G zE|ygALr{c5qtZy}1oQNRh$qY*$dC+VMv_nUjlJkR1w$#@ zSf#&7CeLe6N{thyOVpFdxroTL1+18tD*y)m$bLvK0LHHXX)6=B?rgA_E`*x&*pIg@ z;}Xb|zZPIskflZ#mvz(n%$*B!hS)oW{ z7tx*CqR!3Kd3(l{O{v#I4k`F8AiA6cO~C;2Wfka9-GJlxxo!bl_+G){iEAI+ z5A{)>2I=aZQFvn2Nzs)~Bdq7VUJ~sg$W^fzB&j-ghGH&FXc7MzvIhD6Xn5qEP|T^0 zP-4{x zN+cHPd@G8R#f|(0w4D;sBF4y=)cj4TAAb~9_$i_(kwpc@){KshMZ^%9;dW)JjL9B} z+~XmiPL}a^Z!{WrD@AB2c`}n!T8ops)XU$r+i2Wsr0x!dG%mL`5B`5XDfJ1uAQcL! z-6L~6tTQB+XHmU*c^c2>laf?PnK2t(gDyxOD=V>NWmZB3MQ5Hu39#18?`Q9$Q&8zM zlu-&+r*`O{nD)wT0$OqXa_Xt% zo3ThFh8m177|-x(j-D%*%myxURHd6gzP4M2s>B|C3jc9tV{z9^hsP;KwZwDT*;b|8 zyx5S0{gN)x8g&8q#Q%fbstG@Bh6VUAIJ|nX5%C@jxsq zp38DtsVy@vKe^e;xTR`|RKtbB8h1g_k#H!^Z>p@E_&Q57KBG+bDKTU*J2mo@S|qVr zNg~P1h@Yf#oiR6cwb)7=^!pVStJ3Swez1{mLwPUw{c(>J%mC`x$sb~NK=?`_ zSb1@*bSLE7?*fhUM8TfCeHEd;r+6 zcr*Gg5a{L@mjj^%1YHCY{g})W0D~0v?-&X|lK`6nK&&um6f7~LKnA20q$N-_aH?+< zdjX?(1-5hf1lkIf+n`JbtjAhtnj(XfzyoCv(_=%YKG*>tC=hR96rq^N*hQewD4m1~ zhCU&$w;&!hz-@pQ>w>nfAj?JYvL`aS>>E8{0c_E0z;W$@Ex5dgz~SNE$3`BzJ!Z%K z?nM5ERtw>f4{7#S)!dFQaKOWeFe23ul(}qaJ#q#WUMM+5oIr}9=s!L0vmq?Y&PJYAsNM%x5 zR$N?0enL|$FEjlt<(sWW_dJu!U>gLH^$m%R|C?BCm7NuN`DTgkb<*n=KLX1OWV}=) z{aNZDjST+}I@>N*=SuUX>m)J*s`mPP-gzFk+ruCF;Rl`-v-<3gi5_(z;UTBkv)VH4 z$nVcKF}7l)w9FBEvn0ur!6Jn}YkZGSF4rOYA1;S3$ba_bm#O^)i5L`lh#%W)n<_IB z6O`k`e!XNQMUk1dW;2tzNur-&yHcr=DF_{Hqh!=V;)|4-|7kwq)v}UIFo|g>C8buD z%||!J3gY}0B4&}ujEosz)Lm&cvi2}~8jK&rX9Wbq+5OU}RNAaUggkYtNX;ox%q}V&JGC^nU{h z!K?%=e?breT_!w+CMfn_5m3OtF`WBv_y=qZoYENi1l)@P|2rS~fIAArg&Rm6zU7_d zm(O;_<{+PeRS~2Z@Q+dK8rm+>Q#oR^)vJ~mFE3k?fRuc_jG{315jTUi=#dSiDV0}C zT-vD8XqDFt4-Y3-FmnDvR!QG5oNVAv67Q72YgbWOMdBg;Mb0MGp+cFt#MqxFy@;Q- zwr$opz{{AOAq)!sMPDH#=PJ-vK+8k`Y_ccNksL%ycY*B-W94>vR=l*Vq@0}cq9WC= zL@&$O2uFTGhE+*JSy4#|`4-@0Ql$TvlAZ1XWrE>ohHWNQ99(rb~WL>|6Ftb3L8 zx+D+5@={q+DjSj6jU4|y;SrnEK|^k?A+D6^QH9&@_0CnPJRaq}sUN=kZa6$0sl=+R zj)`uyKb%8$h}eZOKXR0C8k4I;ta5aDvy%4(WAZ>&M>pW4hB!!MQ0&sBoz?9lX9#Gp zh$sk!yAeu{yidGk_3DBn+tED!N^)X9}B?=iv(g_=Sn zAS<#t>`I%`VFz6h^TK+j31WIHp#}x!gp`Bg@s9TPJAT6( zzxxeuy!#w)#AtwdLqT z4rOGNH*$2EH=>U*YkYK+HS%o&OO#r@p8=CpgQcBB^3*FB+i0(M7iNx`oWj7*1m>9h zPu__8AY84jj0GeFFVFC#qKQ>Ou9*4hOwh;4&D5u!n;1m$Hkg6N#)0>#P;KsQd? zP_gj!>lSP@B%%JFX4G(q1B2*?Mnok>l;r;fv8M_C7l@25y{x=8+g$!=O-;7R8bH^b zX`~-a-V?M~va>DboX6_wf)EKv&id%)qsNYY_s5>BAA)X( zt-y8Q*-c9Z;4}R7KESFAwN`;<0tdqe9vlw|iPbg1-ex8>|4o9tEa_-@i%b zL|;`^cVBt=BoqtDUZ7UDx31?>5^7~zcToW+w*bB4d~$zTRWI%N zvH$CyAE*8}>BXTdD<^bURrF6Tm-#ubxP8U)R+B~HZd+MW*rV3zQKtx*^YcnQ%H%() zdV9;uru3l2NX-BI`w!eZwzVE-z5%`1FZ55sUhS#iU04ELhPMjVm;)I%f|VH8sbj&I z>hbG4W~5j%Tkd9z2j>-)l@(p#H5q+XMd$g!a+5EYw8`ZDMMDNMa^&@Xl zkEfOsb3~~LspXbhRlSIoujdQ_a_u_OPa5fUw4AF~&=1L**zC+#KKPeMXFE2Ve3eD8p|Z$PQGxDrILL)2ty-luojIWN zOPpe(TtQuX;zVjY5lh`gbfn%8n@8>WEY#KqjKw{-d!Y*(mTWVSI}B_{4>IZRAUN?` z5Eg)2u$=-V1E0i3i1T3?pkU0Iq))>&$fEFORUVS1e@IqSUGhkl=u>L_`0n*AUrZCL zdV5O}oFb5)O+wC%r8JZqxQO`I$e)?L{LNEpY9>QJ^J&SO`)aEOXOz|UlfRsv&hrCj zr@pn4x`qEGAWKC=nE>G9*RJZeSXhOw_ri*jKCOD9qDY}AQ+SQC!V4G7NxVETa!t*o zNi|i2)5~fnPp>*$?%}IsTWi4}k$6+&lp5HnGo;b(K5`}u&O7jCEhqh9YBlX&Bvt?$v%UQnnfj6$Z=Iupu zuerI8u#%})NRkMV<`mz3{8+8@K`AozapJ~0F{3wxsf~MPPd5~U5njWukeQYvIis{5 zy+x+YL{gboD%L(wwiLjdTqZT5%T-216>DGEd;R+#S&tmqq&7R;HYg+M?mLot2UW{t z{Nt(nWJs>m>7><7`|x}LQ2mKo2Xrwnqgb#*)Z;jcU!j0@;X<6F^l%iK7=xf5L8>#j zVZf7e-tHJ-S@;B?6A*LxP)p17IpZ3Jf$a12W&P83(y7mBa{J({ODKu6&{m5IAp1!a z7Ly}qz8z{AH+NBO!+ffhe|Qmp)gu1vPj|P>n%>ehckb3UW&g#OOf#8St!{AVHM3}u z!c@HO^B?}yB2N~y%$hTC6MbNmpSUD(dcvmkU-OQOjThR6u?4X0>UctkbxCgK% zIAGHi4_)BZ6SONB0s^PtAPjCQa@@xuK3$DCy$P zGo3b(I_MFS4flY`b3M-dJn;CCJ0@%kW_4}tP5x5?8p)wvvB}rK7C?QxWinJ+7t@7l zvECaS8Y=hsNmgbEe^cYl-LN><7*jerV@`&Wa0Ed}ID_kypZ^}c13j=*R!9KL*OXq0@Nb}BrDR;w>XelC(IWJAl2Fe<{Ou&XmC-y@gGIS#6( zN_1Url2B$3x|*i0Y#(1(T2#<3_eXZx3kgOlH_N5u_nugR(-jL7l~bpXE*D?178GYjUyRH@O0$fscTF@b-*5 zGoFOrRnI|hp!YI91>NXhpdGPLD?S%kb`5GqosdWc-ILIKsPDTTU4kx0SE0jzAtw=J zAowuN!|*QrgYSaGD4;+jX&TzVfdbY(A&MB_3#(ZP7ZwM=6ONfoGyy~smjM9ksDo#K z>qzUMhPv=c6H|swfWd(c;9zng5-tMU1L;))V+VT#i{Ll@0TSaF(qNoP?}d*?a9$ml zy>Te9fM5Y#lqrDXATYWPWX-ezBpqo-!ud4;sQ(M(Jx~xDHI+ji1jr-0F>C>;10$H; z6D{y#k8fIXEkQUx3CkoxK)ucY#T;}3{=mh%J-|}kAho0uEp!lF5ikSC>lw2DN6L@kgEInFCYewA=t-ZPH%% zY{!H4%FKc3zqtBLzNV!k1kucvL9U;jDC^Vpu(2QES8V#hrM-K*_jzE3$ zr>}`sHtt1&=!KSA9j*Nq4zV*zqkf5$6>)00IxAiU;sp(V6a*$oNK!#j<~%1@5G0gL zM9bvzb|s0lF-9Vyb>kgotL-*UtS*L>PT?q-$WBls6wxPGMpB-a7s{b~d$(FBN=i~D zP9~+~6qRcbLr)IFOam(wi47Mb#UglF=PTb8U$mbhwOXx6rm)$i3Om>=IT0D2&R8fT zvykv)+WC)7BF(>o1e+xpn4~gw)@5al%gsHgR&h$DCv%psjGR4N4SL%1M=o(!!ZLp_ z9_JT@{StDbyE66o(xpVj?Aa-;9q3$BF1c9PXBKP`L)OVW^b-GPq%b=n!SW;%FDJIn zo;_q{#OtfNY zTT}N`k(dz|m*#ooYF0__b4aULE7T0*eZaW-JK;1$L2vD3*v~V`Z&M361Y#W>tHa@DG1OCvuDU%;<>x@`J>>rbuVgIHW0eChZzE_x zL)ab&5Q2FGP*iL$cLNv+UR(T7L5)p+ohR6xZ^%yv!hs75Ac+*f2s1PcF(BPW3}d`Q z*nIq{YKN_sSh%>^6%o`RZ(9?CxFV$t*wAzYEO_5kD zgeuleP%1U{>wfw6l~r1Y4WV`SNC{@IqiEBtS(>$7(dO1zyuJ}RI@+g}1OnEzD{?g=5g%<6 zR>M5un%)`gXS5OI`g*YJbP5v1W#9+L`Kc!%^5T5~6Bz+F;y5I3R3d;Wz*U_gCln)K z1@>D*HsKiB!IB+8wS1U0z?!sT0Cob1R>dqGn!`dRaA6YDRsuYgdV{MRk>?4l5WCET z;dCH@3#jD6^Be`^7Y#l}SIh^P3&G_P2=Ez`3-ILoJYY$PLL(P!K-J<46fR1L`WB>X z;d%iI;K&H@%FjrOHaWAo{+=85PfQ)_yy5n`HDZ1!^uFWX5-Pc5(`3w`)f4SsAmH z=9>9uEBpJZVV@^Eh{Qy6FjEb8@u@{3ZcZ$9-Oq}p60S2hr-Ff4yf zdt+ivJ2XHDR~=PDU`}KHltchXpc)N7DV08-`tz!2+qlA2)GP15Ut61(_x{`S=T%kB zt-1GP=E$*fv-2`XxWK<-pF|rj_gvVC9C4*n72dnP(y3EgIYy#u=HHe=fW`H-waGt6 z+Q*0DRcKmA#~SGJ!BJw?QJt5+m{M@uFB{vUg%zXo&N0-)(HPe);61qx^n^#!7%tGV z{~5#2O)D0p)5s0@hk0-ml^%)zfBFRSbS6VjNs&H-|QrLBQM4ZeFL#-+M9puYk9*zM@9f zNnAH?-T{&*C$5?|_aJJMDD|gT)0NRoxd!aB*=XX_s@lm@VH|Rcj=xk5Y}A@3m_@7ztj4c44-5O+6MfB`@W z{CLi1jF>Niyrc&kHxP1xc8>i&2N4>udg#vMkLRJ;IV1~*gun}|i$x<$H$m0-UA9P8 zWAc#HR_klG7MLjz8r2$wSj5>Vqe;JJppozmT$Hc!DnenS(J;_b5bbU$+1LecqIlgy z96vX{Xk(5PCIoGK^7+)w7sk6Z{U)+)6f$ltwpC-Z715s zZ`{=0O7dH1lJN6inTk5|gQT+3rX?ggQXb&kA)kEvK(@&1Y~sdq{Ft5WM-m0Z*x!I#0i^enM5Sx_0I7vlWC(%KZP~3 zR+WPZ^~;TJDWy{cM1_eVQGrx7xvb0};@`dLrfa5vuBLijLFo5qW|d?`gF&A!OP=X8 zA*rp^f+%jDTC6BEYqZ;+pSbw>xlb0hwj>fQ&FBM_&1B*qOdIjPQ#={1q$?0Stq}vrhQ*1*7)Y1jL4cRVI>vj0I3|0L;LrqH-V-8$f>d5gc{r ztver#d@dTtco7Av^Vi}d&XH#fOzh*z6;i4udfm{n#yWzZA>BWJ-o8BkRh3(27aRM- z%g~{EF<8-pX6@!=3wdv{jl4(r#>*{~w9xtMFOsbfMQW<*BN(>6Jxn=0;@vSSyO(o{d?xS=%r=Lu3EYB!WlF8v!S}0NVu-y z*&^MgqI7_;zxAOe9$4j)wzt3Wt2 z2GcHx0>lAQu%rj69Fv++<{`uaV!Pld-O@wq1ZWq+#DJdePGG`$PLTkGA_P8iCS5yB>nl*>&Er%Ag^`nFN0DXO0-?)Gh|8RtPAq)Da}N$3g|4-$SNe6 zluIj-ni(?Rqt(-KOHq}{!zNg}+QI2$7Fxw=3@jp`h9zTR-&a9A(`3}G)1cc1_YlDa|3xTctGSCY9W&pVr(F`4RZx-ztw=#4_iyq zLC5KDh8!VXb{kb^sJs63JxtqA?+-jR>Cb&{JVxxd7_>os@|HeA^w-fBKF8S_c9?n& zv`iIb-kL$y_W&D(AbfcA>4MQZ4GM@*0bC$_Ab|!ifESKgdS*_{6rgq%D6AIyzfY48 zh{QiVGV`NFul#MW^AP%!-%32}_Nk$;r(C5qC$Hjt1L$M)@ksU0#_tP%vKIeT_LJ#n zb^L1#@AzIzm>($#=o>iO0B7yOb>OrOoYv$5xJ~Cd0R#U14gYw0fH{1$KsC~$h?kqG zOZ7GVUr&C$|DFC%$-DZK%T>|1g1EpG&e!q({>SJ`xbNMpf+oQV;e`C)%#0kc-NSwR z1JFKB;Hz}Hj(9p|5Q+z4EP<1!r{UZzu!_@@ITdpo*JRc!xzru0TdW3y*={V%%STS4 z@)J%U8vJVdYlCl3Z@!W`%9q+p(Vra2M!Cx>Wo|gERO^XFR-YZhliRK-aq9U`zpMDp z`mf^etl!1IwSA|_`3mL+|OmFbPX=o+~bWt`0*Qz;UE3o&2Uus1`!fS)o>XQZJ2 z6;yo@;xTcoP%$cp(slKy33|HCK*MMeT)ju9k6=SR2~IG;{3Bu$UI&00i)Wq|V#bg$nH zFoyNusm1$11qQr3oD(01z)^)wFu<-t?9BzNUBv3%SlxseT{3)5lNBDHI$R1)ZuBDP(!Cq@*Z>J>?W6%znU^6q80xpjV6@VjpthJ0{Y8tn&+=OL; zQA`tDVi{?&8s1|4*OIZ*kk1Dkl8dVV=>s(j)J837s02(KvgFo zbViXfhku|BjQmv zkcY8%6gVnYVFSRz^+1GmLP3Hk9@~aMu8XlyDi{w6r^BP+H`r-0DZ-OKDu#lBf}Jnm z^A*Mw9t@`7aG`iFAyNWMj1VrNXW3(c!bmNxG6k-%K-gDvL2}Qj1+4YQ5>43F>5u^!hM923bZH!B~?tNRV|Uo zRlyEs@L?49YaZX27qb|0MLJvRIP2*lGJ_IF*F>`%Wh*(I(HjtZWO|j!T{fAckVs`C zl@Mu8P%Ml1AzijfGlL?@GuMV|3Kp%;75PQrVc}vQw}^vMl2m&d_hfY$@>Y)AyBf?` zArd0WTv{_3bQ3z0iKLst2nFeSCsh1(cr|94W>Bl8Hm~hMlI^~&&E^iYk`lkoCeeft z3Qb>Za9e4c&un&!WkLF%Yxpl-{pOA(3>~IrQk_piJZY*?xkOP}e!Nah_1)U%=+?Vr zN>^S?FVzrwy`2i!2q3DA-b9ODZtXngBFh zP}MsN;u69T>Qe*}1XZXGx(~NP1FQ)`H~T>}3%L6Ns2;TfT>!BP8_`yDG1`sxqAMZE z?|O72x(VHej-$KKz34&oD0&Xl4q%(i64L*Gov}igPMT0)*5-p` z`!sN3bpx*v+>Oj`v-lW%UVNU> z@3C_U->`1%J5a!mT`nHpmj}c>9TdWzh!^*bDB>H7TchE1eFKpl+oSE7dv=7{E7$CZ z3=EVNM<$rm>lCEOy+5Ai<4+S@U~7rLSS^y}u3H*W@Fya)yipT2pq%i;@zIbXYs0<# z9XYTnqRS0;m(P$hr0P&>TnbK=yZs`P5wFhcV634q-H)!G<}_vo>-@&ae6hwpd!3n> zP~$iD@ns6@vO&8>q8OhS?E>HS%5kM-tp`H2JXWEN48gEdnOWrgK0pqj28J{DFaY^B&`YIi z)DwjI@)>it?3y*WclVs(t=orYTz=V%S-Z9m&DwJfSE^Q&P?mz|H^6S0xs=&(`Y=;> z`VqQd#$^}Jn{~;a)UG)fZyO%ky(hJ4=DvNihj#C!rl>N5axq-H0j~Wxdnx@j=;vmj z-!Z6V)&kMOhcoVi8njP<@Ao-~gM1mH$3BGku`e>df`~{=!GX47;R{<4F@;iT@iJ%; z9-v-08D2151Kk3eI4Y#!-LL~Tn%?%?BQQC{nid3d;ke}Vl)yTeKTuTC3wXjnM~7JC zC^V5C_2NSp-ze1kfHh-5xNt^T1w%n!;oqG5Jo7gT^aTtKP$nQsj()}rm_T50I5UFP zSZ|`w?E(?zpypnx+(U63!BCgbCWCGV7@R1_YFX-Gm2I0;3M)k-*#@ye#_gn3JT1Ci z#xa-5Oa{k>u^k^0vG#2esdSr!*`Za!sc^2iXn3OA9Y1w z_ogEBquN5XG?$=nm4hitFJ-8_d&G2vGZp;0%Sj3B66TWoS!41TxE~N@B>R%Ly9nAq zPSUaHYt}SC>T_q8_w<#_3>gL{Q#xgLsCZIe$zrczs!8;boFYQP(1~DWMNV!>$p@hj z@A>jew3lBr_94E&+vXIVejPGhzo%K)^4CzPWo(CMNB)4<3pGKWVBer~0B%iyadD^) zGXyo1F9)gPc*aK=-wTnB(3}Tk0I;(Fv|#B{uK}AOw)Nl?Wt^^ps(4Pt4z+^b-1m&x>Y!fp#X`WzyZC2}i^)FM}o%Vjp}^mYeZT4dKj zH35SWIK;ju^hUdi|EMCOlLsL}4>=&yfTf_o4<%QUA%#2BT}soeEP?RqRY1-Q6#iKyX>k^Uqk)71-4MAAQ}!MN4dKs z^;dKS;S?L>{4A)2Hys_!ruaSNXAcyQ%M#K0KQfLWk)2(%)_a9Wtq~3MXdp&F*HT#I z%klejrR0RN&4q4HrB(Yp`-QovY23i0uFXXXt5>N$td?~$VnS5*bT<1jKdhk8Q`G5fctW)=n9HgdqBr8ZRb)4u*y&tsMf{l&nHNK0#iS7O6H1pu; zM)FpoFZql;7_>Ef1GRFR@cocrr&KcU(Kmt@%pzECwHY8cJ2O-0hO z_Cf695%3vn%z#}OR{{0X(~Nl$lsd+Oy^aJ$#1n#@1f@VAIIu6)lR-1k3u>;QBnV4j zfX9)?_ycxo#@Vg26ed<`G=c0qR=1$rP-wB{P1t%OSg2p`lRwx+peu40w08wh%wJj6 zu)?X=n|5Eh1PZPd$B)$Q63eq6?CyT3tLxE`Td2PI#QPe%f3Z&^Dyh_0G;|Lc{Dqk} zY>CWQUXUwF*-$4DtE`*XT_hfub=!q=m)T=MTGsODlIx@~)w0Op<&eruzlC4eAI@LL z-cO%}=dOXLQVF((<=}zD9e4h-UJBG36d?vbE+-Vni~*HOdz|rPjm?!HGYCpPo-J(t z{OxRE`uac2*RRtRh~msc_WsoCkj1?z^#T!rp0*bf1xNTO{{;Whi&V=A{-cq*j-yvm zB{CzjxH+>I;M8W*ZPx`EtG=PDqQS(uxXEV8#u}1nsc0xD(k-lMQ!=wmjGZjg8u}W< znc^(p;>b*CU}I6y#>&d=Yu4~@r4FEzL>s>@^_pI3ZM5dN|{8cv|Plq#6*5kVk`OA7Ip%w!+Xls5%3&2biJYXM*AO z98c1)P;w~%;p{GO|6$_|7?tsV0g&--8c_9E_<(H)zIB2s3KEuq9$hA38PrSz81J!K zJGv~WxDLDyj7qQ#3duqwB^)QL6Vy`J*8|(=UDNBEX3VK;82qeTa|Qph;WENx%dh24 z@3+>CI~BM!qX@m|u2djA^BaONh3=(;}JO z)b-3V*Me{ic2-3sUf1f0(oS)Qv}MXwmvEa_tZ0!o@IUXDq09x-7B@(%zS}ITll3Uk z{)sK?7s~3T9SZbrg{y&?}m0lC_JSHnw+!T^Uq{S*a zQa^J>Q{C{~Or!eo(Fou@ZH+MZ1zJXr71%?^o z90hh}K+|o3=8}F)l(krv7ep^Cc=>U7Cz$^N06%#IKvlw}*I*GT06npR1VT+kppXK9 z35o>(7f32veLmz#q#+5LV(_{+^TaQ2+;=}Tt2Uvp1h>yOLno55r;rqS*xYsYHo5; zL$*Og-zhWNDv-n%nPJOOWwRDWXJAZOO{@r!PHbGmzPY)~TKa0hZ6n|{j?u#8Q{Z_p zHULc!Gh$AtW0+AyOrwrjXU3efGdhmh8SSpaxAv(<(Yeq2-g}?t`~LVSs`}JP zwa?ybueJ6Hzm>qfn#QglkV#pWE?!^rPKN&}@Ko_OuqpNr z@Jga*pr;$r(|`%Ze!>E9GoV6Qkp1yLLM^GUY*M=^C<)dzrz8zm+yjOTUEPfei6~-6 zJB?nCWSp8IVR*ut*NGh>JzdeNuo1ly)dno`RwnJ z35~N$;b%Tzmp=34kz1v!olCKAl)UzOK#SvKwTyR&o(=t%3y7YJAXDl$J?KN&zy`1nu#P;V|A2Mb!OaDv z%d5=y_?NNF9Hd5 zpci{yVTZepyZJ&s`oV+}nx{v+ueJlr;~9s@y~YOcNh^i?gG? z$_Cgwk?3W%enpc!h%9*m@Y7y}yfY|e550tS98hoYN()O8=yXtwTpVqJF9JFiarRNX8$%ysMu7LG z(y++E>XR;^;=Tic!iAj9gh!6s2E=7J5g5v8FA&}f*KjURD7x~A4ji)+XO)9frY_uVh#pm z0d3Ceam+2GfKd|s*AA>c?h|a)D=0_7mxyU2gm4>`N_3FsFwXg8f`I1sD=d?v<{widSx-MwY$5ww9;5tJxjdf+b? zEGLZi5DE3{wE~&kLIiUIQCL=1Q39r-+R!>yY9OnEWzDZ#v~Og#4zeEQN;&e`>P;!a zA``1+GKPS}YJrreDh~yrF2ww;O#-c2YNsfqR_oOYs!1SgfU+nufx0kNoSP?!+?Zdz z7|{m(k=l6$)<$cwL`%D!gGB|uL&scd_SrSZ_`;}Kem_czb?i0BV7wJ7ff%Ts4GROU zo|*{Hj1(gE=hlie`>{wz3Mq}yLK~hmTf7(bY`FuJR0z`o+70s_pf3k1UN(g;djnX$ ze#vW+r-j;ajh=?|ypU$L_hVfKVh&NR@K4Sd@g)j8uz9BG~|Y zRC2X7EELVEt{pjixl^gs&nha}Fr&@7h@b#WQmQ4jeJ+Yl_P81?c1LZw-HIN)E_3XK zqp!s1*g%Yq5>ggPTs$FJD$**ALc|k2EpIzCI{(0-k@gh8kFX!V0y(BuM6l&4rBTo? z2n2Xap2241*CxByuI`<=mY54owxADD7dU_3VV&%8WP9%E3%>{!X%&zyYb9htehqCz zA-Pm8)iNU5ilp-bhes}Jlsov~Ets*vzYUpX0j17G(6lPlWtj_M+H*S>)Ux5P(JeP8 zlVq|N-kA@;#}*;^WQkC%5NSm(xdyw=Z{nY#3^w}E*~F+Lbd%sMdhz}yK_z|`oT zW>%n?o_Xq95erB;Q$G!W1(9GmQm3r*qxqTM7T*N+PRAippb??b-J05sw>(JJ1gM-_+_w0eK+hE>dyZQ4xH+_hc z%_$CtVb-tvPL;I=XFDcq{Ke7Kr+wicwCz^Kw#msXw< z=}YYuW!A6Q2kd%n%8L%`YrZ_bZS(Paw{5*|^2Ud@Y`gd2jayC<|JpP#YsZdR{pU>H zu(_{y$GN?;&!JTXt?j9FV|~W2Or6T1b@6-~8nG7M>##a}g>l`)m)nk?*u3q56X=yK z51iPx@xcc&!Tt@KX3g5Qow%!i+s@wJbJu6>Gux<_Ag)OSsMf!x83@C~f8pjIPAMb|Nk&kT{uE};QQ^XE%ErUK+VcaBUKVYZ!vQClIM)kbTs)$2@RN^X=f z3Ii3fn7u0V=$f5&n};!2XdO=`(W~?{k~I_Ue1@K%>X@D`Xm0s2&J&dHz8j4&W5Oc# zwp1S}6&Z9w-d$Tz4poC_t?SZQ9aEU*6R1ogqqQrg5`~tj9!pwFG^9)|-zP%F44=a6kh%u|MI;{qx3w}liOP*f%nGabDsL9S3pWQn#`89hVC3u zM&0SoOSs(Wbmkv_XD&gSaGu+9Dd~xMv~EkaL>0@NC%2=ELSnl;zjqDf-%8D!R|g^` zd5J`RX@21llsn~gX7*XBe{J)1W;)-{_aFUYg@NWBG$U( zM&uYEM2uQ!YAO`j4awYGDQWW;EJHNt9Ea4o6XoiVV$%w#P%I^tkRGm5`utIU zKttEjfEq6ji{*ZgSgkSgArC+&a=PS1q1sRD)Qr2>pp`4Ylr05YxsG06&hUkPfr=3F zGhB^$+?xNz(9`?<`X-&!ej<(Dun}hu>;((~48MnIid-hy+Ayqc_vQrS? zZ29LkV|gtvOG3A)9dfBiq%k7l)eU1_%b|;mioyGX<3j0AsUW4oJUFf};axVJEqYZ&RDF z3lAW(y0h@d?+QCR3wh$g&dJZK^0Kk@kB$V`y9*apmRoxTQARA{HLK#*kWvJX`-H%u%hN%-xzz&qQ1ArsH{~PK9JxYH>8~H>quO|^t}Yg-|8lX! z?f3rRZZtC*~+b1 z0cb#r)%9#z*e@y|tRJ)xo|HAYW~B_?g&_v8!&%rk@<^+pNA}F>RY)0#p{C+0woPtu0Wi1eL6_53E_7=h_fYp!CFKIS zL7;4273kV87KQ!(=c3UjRgXm}-Qi~zMw@v;pE7r@#h`B%SPIlNg?ejdi@R04U=!h} z5)8R~Vp2NLwV3?OzNfcW9nt#o#6iDAIj|sTKj{Q?lsXl8oz%gro@UN3uTP6~BZs>3 z^vQTE;4h3s>Z0z6KYC+=#iYXkFk@#eoU{d4u&a7(=k7#o^PT&^d6t0EhX+nHTVw z!KgtPJ&XY8Yp{3&Fdg6^G!7`6(*0eK@&e6)vBcPSSxHC0Rd5YW!C*t61GG*JOz)o~|FR zVESrYb!1waluE{per@TbQ=%gu&o$vTs)bq@(g_O+ zWCnfRy?lP#B4fVBt5)Z!OnG8qL?e*PR0zN+0B>3d{<^nG!!kYM**%6qi%Mabct|`iV4Agsye>l(?rSI*+quj?!tBfMAUcZl~t0L7}bc6tnZUT zMQw7rAgbpT=h4B*9R#0d)T3%^til*0=fxRv0g<7^6?~DD_5?=s0kuaU;z1&lKmrN5 z?`wbhWJUL!q3IiYrq5{`ZYQ6%qukA{1Gah2rb1&d6o^;b?hL9jANSlUxA@xzn_MYD zZn6YB`ty~YMq12h3_Q7At~WL+LPgHXYQXbyRjY>OG^tZ)6?*=PjqK}fi_!Otw3Npq zoP1uLO2TFyLWkHzL?t_hF2Qfy?@H+RLz6>@h%5UErF_`f}%<1YrAF0R{vb8&CT zxhLl&RBhm}V>qP*Rz_H8W3dgOXW1#n!LnrIKeEP@pDQEa(j1r@U{1<~gy2nX>-64i zsSkWp9L<#VU;gHlpD)Z7`uO#k_#nP%_CBB}Wb;ulvxeK8z5;@%@Xhf`m)p;IwyECS z$rhQ(Cnyy0+_UG-k<6Bsb+$J<7>Shbd^FFhmb;W@mHfU~GM4-%&!Sc&py~iSJE?LO zf!6;@+$=CAtO70jk4S>zI}_}&(gx_ROtud8jy| zNxt6H8x$FTbb2ERk1JxI+?j~^oNOYc7-#2<%>%Hy0~h- zOgNpdN!a``D|>QX!)&YC0h=mOyFg#T;8{Z&nk%nPCJ=sBUWaHhlM2D%AWB8cqPu&e155IiDH_5&@lQ&2c9bAH6 z;OW7-0Zx(xPLnnLK|?UlIDO4&A6s@O*BC~NYcSy3z)o;pWI>WJ@&ZO-z-`A<2WK+j zP1v110qojU+Li^PL2f|w=lL^uNrKWvJ}2Gi^Y>|{Vv(0QMWKTx*;grT$$_vtb8U?~(nXsl&u6BxL`96zLXXhh4p+aDk$wcai*x*0QC<&X*(`qNbcSXG+^h3=kU!H1B7eEPWRj|xWsH8rd z0aQSNI-o+3cxs4r>NFy!JYUT>@w7anC=eoO;vGdeppk3UWzuP8Bn|y&H`#m?eX$m@Dkoq5(=KL)L?TuwW0AxPek<0+F@qXcTG*Rqk zk|rBCKkVh?HB$6d+`LpqcJehzlE_@#z;kaZwxa=WYh&zavecX zCcR!(B12-IxLl{AL}8CyDiMeXnZ2y|>OIYb(;6y+U;`rQ6bMy?`G;Go%l)c)t)Fq5 zv{oV1eB_xxf1rh8ZGFoIv#8E&7gH*pKr1PL3YopDNFmCdDJzgDCC0SXnqO$Jq4Rxq zu|O|E0c+Q$%?Ten$PW~I+&U*SH>U4Mhn?h65_GFLWpX+q5?4o5Rvgm{wX^{0%b8Rjkx@sRDQQ0?q7ltR4nfGa ze&Qm1uF}gFsMHQhX!4HeG_*aUkzVD4U^2DDz`S1;HOM%80vrqW1M>lo0=c{Z zD^F|S96!Nx8z$)#zjJW>ienrwTeFpA&fs^3Qv_T97`9tU zo6M$`&Xx9fwPC57FaOb@(JLg!id>VQ@c2q1s23RLC>nmM^@$W|S5&1Dl6;RVsw~h2 zUG7DTw!V%e3W>{>@ln&$5*4YGfSklR+w19Lpl4B_b2%WowgiySa}X%35R8o%D^73P z%cRm!`V7}k$O<4B3V>+xL2ePkb?<%_a@F+mTr z*A=0|u1H(mbmWaf+1%#)GWSA@t~@pn>EX*Pk(bzAO^5B%yatdv)Ut1_DLtFk6cMAD z3;N6fpJ6sNHlKal&(N&cCm(8f9XZde(~C2ksBHIdio(J8ut4WD4}5 zxOyR-XF*RHv-y6fwnLoA9Eix%fNqoEaNE}dZhH;_hzSh(3-T2Y9z@sUX#??@Alj4p zoJ9c)5-?xVoV%TS7>LeuL8vBt;&lh7>?B~efdrlU;LgW-2j0j1(L%gDr~^3C8P7sk z3%fLF_%+zXXOXuCD5_dzX|)jot3a+_v&NWYPh}p9qy@c)(kd@QBC}bq&z!$epBD=+ zpca35EF(Jhg^(t~ipDxct8!YYu2a-nrft(!bs(`pZ&XOt{t8_iL1{}W3|fC?@y=RN zB-bVOL^^p;E)n{WFQRpM@gat2G)(Rhh8YpDCEu8NfjEZ{r|Wp4fHp;unN8&e^o*lq zatHejEJMFV;(ds0pWcH1)l(=}s%j>MMRf%6ZLxz8>W+{{jy&35RkO3dwSl~3$BxOdhNhBL z#L=TiGqYD0cf;?IInSL^K$htm@L%AV)Zh4kazMr8;!rgZJe9{Jz`1-YyqxGA$TaLm z?`*@7N2eYkpT2?pakA(jBpBNMNz|Nq2EGE>(EjTuQ;)D8kWZZW5*)-!fm=RzN;&nr zI*3p9{pT;Aj@vrZtqa5L_|I1Cgz|eIz-t*Ahoy-X?aNHet*M!d-!}FOq~coS0-rwD zX0An62%1{PU9=qSBOb#r`0$>%n-t?Qn0tyM4$xNu(nkc^#qm45km1OSTXn*02f3X5 z%^#fGpg~_)0q5FjEr)Nm>yt@iWu>#S(wI!{N0M<`l?o>k;Z(9a?4KO3twn#HI9gjv zT%1`@TT9Jmqp+>nx|O2?+=j#SdT0Z%tlzfbH$RUHVsY)^T5!5)=qsxuk?-JIV!dH| zRi&eHvJb2@_%v?BeZYUY#SoVdf|V8+0Q`sJ4VW>&sVazN z2N|Tq^PbN7AUQ^$qk&a01X$I$gb%DvB_S*pLl>&D_z{>9dm!}$dyN?tgeu{`03MG& z@Tv)0obaBXS4((FiW>y{AMoQLfC;aca2vFk=|d$0?oN=D1vkOq^`JRnR)kYo99pPh z260^2kgXB4JZkkky8B-CPq&7SE_GUhr}d0;Q7?s~d@*QbeO#%s7>TmSjOyN%Ng6(J8ChY(=M5 z-q~DI^;6r?(5*hJzXpE6;-voMpJoX3Hx`Wh+wCy`ja~UTy?Zxpj%fg-82)QwP&Zf> zv$y-tq8rkA#Y0W*;>;INejNU3q?s>@-AzNqdFfbgIb&jY@;pUMPZRWdg4V|rd2$}? zEYFSoRMsCbO!Hq*Ko!vR#Qijlz7=W!M_Qs068wpcVjWc`w6cYg1VtqzY$3HR^LMQT zeTNz+Z#i@&+HWH4`pL$2bd^ZQmXqV`Z1kDk#%dttKq(L)0)4(Xa}zqc(9Rxio=wzi ze3i}}jv09xF`qBi^+Yt@+>jSxANTuFaU}1lD-YG`?S!efUB>>2FT427 zI%UDjTS+52-qOO>&`2ysG-)KaB8jq&-8;R&?^&51H>u#CX*|8s<1Z+2T1fwfPWJ&% z+%BheI$Cazdk(leH~2}5Q!C@6LRtITi`j1~eZESwQl(Ow*^>gB>@&4pEVg5KE6_6j ze5#d+Qn?Tl?1G5kHpqm)c@XnJ>(4=qFNrkp;eihYAf#gr(Sx1ox@4Lr6&{9GkhuK3 z3{4>r09BP|wR|`!YeVacNoR zfuP?XWP}x4C}r zHP&ZtVP{z*L`_+#Bo>dCXYO&D%}ys>T8KalAojt=sMGc(cF**scfuQe+yVY!KttLDr<$3Uv^0htL` zN5(amFv{C7^l`Qd`XHR|Cwmnqi zThvR$alJtvE}Vp1t)*Joz}Y`!_P@>^kAhLzbadPp7HRZbZ!qZRZR&9^OgoD*7ohpi z4A*L9Xo;-F$qTwO(VaU9?GOM5%=a#?y&B+e!Z@nJf z)ZE`a**=dL%Use|P26e7Idv+hksYUYL%tKwTATA9-*ZIBbLt-6a_U}?x-^U)t|V0e z*6J3(xE^}~{ z-~U+6^QzFJ1d(~;vbqjWIlrfo>iPyL+2-+z|9S2?Zic`~=VR}zaFeeIp7PKZFC>IQyr#ApU0MqqGR-LsNC#V7Y!frQZ_MlYnsB|5`R-%U-UTk#gC`yoj*q!qpR>n~ zp*cSY_AYR{9=!iS;ZK=c9k&vl<<+AV?D@XEU+xW|vzvPlQPQz}qOUXGzd^V@@pu;O z6TF}p27K+lFZTxF+8hFvpX%W~LNgF48H6X1lLQT* z?;HRcRyepfs3Jhh*_DzHC-Nz2w<^VZ3+3(mlJ30VRM2uGK-#J#+*W24yHnwyBo0m7&*Ee7O zCVS%~`+0ji(oA4k#wTK@g!GH_c@WRyfR%GCTl#yE=@t6JG_r*CTDg5^(tqhEY>=Q-!>d^Y>}YJAO_@uzn0zxUq#yLTV_{qGO%zI@M3ql+&I1}|AM@5DN_WA9$) zn#)-BGUU8`{p>mGE_Yt{-S^jy?Y!ldonyCu_Sx+Vw%&Hz)&RZNe& zT=D5>XLjf0;}wasHOm|Lz326b{b0U6yP z#H*@ee@r+G1_!$t2|GI2A54j=ss!7Gw*4`* z;1YI0$M;0@W4ZTFcDRYg_uwBok`MoW8YJ%nMD=Ti(QS0V%f$XypuXCt}1`hQQV*tiL78Jrft^(AYCa@HA0j&*k6^EAs`uPT+ zxm{2J;~=H>i`Y$MI|&W}wEcdsRU3AXmDvq%HvKEJCG;I2PR}^VsJ9FsyjYOSHHu(-&lMxfa zaH~VCVL#~F7*?7xA3Xn3mnVw!lMl2L-?8fFr*A}uptc5|Bx`A0s+?NI=L-Nf?+um2 zkS~)FG}P%?LVPv(qmC$}s3AC&CO_iwu7Z@X0YSHq7Z;L;0;UIC|FSwHo^f)hX<&E`Ko_+U-lmhCQKh#CqR-#L0y!?ar#I-^y;t%iyE^%)bGvo(Ei^IHwxsOe0k3 zhV_LPqF`WE>dFgqtWuk`|AV#)(hmb^Qovw=02vw<>P`@Yg(AZ( zhyjvsz_4eWG>ORDt1TAx+RVnoD<2%__1Jt>0yCnA&zgyPXL^pw_5LIp3DCvEz|W%EQE=q2GKWz z426C`B;?)FX^+YSZ+LD_TO=7&mbvTP-H{BtCW7>vGb_r72R7yQMNkjFiLD0#PSww5Wsn`VFVrti(tGnid3`@c4Gw@j=Ur~!Z_c#-TQ)c97M#bvr0<;SW4?B^0i3k!4YO97SlTA&_kZ+BDk1})P z;}Q$hqf#hjeR-AWeVHw@ez8(4YB->Q}k8^$%qJRNr5f9P!_SLY0;Jo|b{;sDNMegyk9bfswO@+e*56Mx#W_BRi1$ z?aZTE!ie5;2h{Fh#~e1ue-2Hk!Is&n0nBv-MZBd-_KM7Kk)_h@t|@O!Eczeo);T7W zI`tm!X~+#ez0Q$wNE29&M`6a|RZj`v3E?>W1rVi!>&W62>kdx7U4`ivbl0>BRzZx9 z6WmNPja?2258mJ;KPUAu`T$br^R7hvy;ums{83seBoeNY8ZBHxQlfKZAF_cWAu_K`}(y57rwUh6l?ekGk#(o6A8$s}_ z<*rzPUcp4Z$^F;(#vz ziVr^>MP3=Vl!ky@Sax8OE$3*4`eYiQO0aTpGzJSSuv5`^8;A?RHn*DcB_T)81#qI} z2rDfpK<}w*vXXr?AG?k5p@D0QWdmVC|AY`re3_r8Z z849>bUj$%iw-cG=4UNdM7EJV$T~YW)=CNIMw)?eZBU%9@{sxW|HzHEWetV%&ejhDDaR+~2N_IV;djH)p_lt-a8{R^WVs!*vd$56s@@PMy5n7Fd z(n2=ym9sIQpXyFl7D?x_V~a|k;1w6-Nh6lOLE`6T};uw!U`H-iTy${C6; zY8KM8g+~a_7Xh{bPtJakk5G@%UO{fsh;`>^1lo0aQuB?5)E>~F937!qt3{dv5URk+ z**~Hpc|rvWI0PhM`ULzN8nkc&U}J>2n88&LmvAmr%G?hXu5fe$sLM$mFqR~67ED_z z9_}ws-&q!wm*`ARo#BDdAw}_hH(F7hshFnWbS16E#i<1`6}~u+b)^ zgVK#0kpsOYL5lfwnDPKdnX|N==0v~wi;rRU2RG31T<50`M4L};uf0VfbI$B3V8{Qm zzg}H5XFB?1U3bYsRF(ISBkYl9+3%6-o|911a~7dv_ptY{KZTBM2*|sSf3ow5@7wO5 zn6Gafo?c><@hX8?YQKlX9<9WDE1DrlKW#ry{g*f;lH(Jk|72cW`oSV11QBC>As z1)tYch%DcCdC>v(xwp1ByVVFeGK2Ff@1W!xh|Yif$nVWR=L-KIGi}wS9o>%0Zk{ty zM&8GMo@RL3e27N2sVLOM6Ly|`jg$z4NWx)pr4Wi1g9<~O-`dI^^7(voa&v>rV4@&X zYip|>>J{QV^#7^8^8fYupcT!{Ig1w{Uk1rIKW8VWMe}^P&M(jgW>y$55C{Y-FyJZ< zatZO6D6xWs&*8;2kRfhlj0M$JKh z{gNr4{mKiNEahJIX&J;XS)d4~Qk|Ij{vWS2jv4o>WpaNqR8kTQI)n0Hr>moBl#D9H z88sBfZ9R%hL~DID@6YeMpjBc#Ds~mhwHiYsWperCygjK<{-qsd4udu~kPkq%HCvog z>;iK1Uuk4yq!z-t^FuBieszquL}OC+PZMd&jVfBM4LVd3-q39tu`CdQ{&$~ksmnyU_8DQNu5=iA+0t5m5ed+-3 zYntXX6C32cfTh66B(+&Z5|+SF1O;ZS3nQw4Ap!Be{&6LG>MK>kTXWy`!adqNG=xIN zAgwdX*ni#f*Vjokdz_W94=o`k1~Q`;m4D~y$UHjCvKnuw7^r;ckxMP_puJDBwi&*WvOH?nON5bz_s%;bHOchLJM z))F<;8$X>xZ@pyVQD`gnBVWz?o+beYrW$xB4+1=Z&VZ=_js8N5nDiLvR$!6@_9z0y z##3Qfvw>@j^C`g7z)K0qtSR2No6Udo73R7G{FO1(Y4%Y0rHSR8Z(1=Ypf^_AN@ zJI4bq>k}huz+@=(`AnJXCTBvvkFBChS6P$UC6lSCqh`rj?Wi7~1$oB%10cL#O8wH+PRJ8$-%-GbgnOWf`R*Z)89UZ?JaC+YzNfE;?N z@-A-q>F`@0H=Xb#1@|g^a4!hePeUv@R09Cia6Cad{Q;h=7#rlL<|Wq`FraSGQ(!{J z7+Q%%!kI7L>mn$`w|QxSKQ1X)b3xc>a9fp%WaVhs6*QXevLy&c*g{mrDz}AaU5vu( zz|M}0*KfK>pYFLi5~=k}XP+$151O1%o5?KDD$P1-2vO`8yan$a*~xx?Gm@5d&3B8m zP|U;ttFM5Y2Ir$!!xu_AR-Xrj8AG(*ziHjWji4fSx~Iu3_KjpmvC+wZgHxcCm0iDg zs9x_b>b@>uttymfod{8 z)=6a7phn^`Qlj=z?8&pQHc+D2(dY6u66E@;Yb#LZA)Ptecq<{ze8bI;3f@z6Gpv03 zV18towin7sq^I2OoV!1}=*4Ur7OOuy+O!^*7gGyKkl^>{v=1*{rNA!8*jB0%+H5d1 z&X-L(s6DB8Rdp~z@FGH|EiilTQn|RRveoXD+vu@@{F<72qJ&>unX(kEI%l#bG?RTk zI@{t2E+uwWRJ6UZeLKM;WS0J}&JDMtC&>3J{2s5r8Vcvwbbf=bB^Ay0Sge&Du3RYR zDlp7w$u-+-!Q04+RK;%g8}_5jlXLz^+`aHGrFIXKAK@|bG8d#lzsX4_E+ef*qi9P4&r{lY@J{sZa!N7Qqh4zUE>hfPHXtEn7Vea~UiN zv+RTW%+dp&rVw5(a>- z@iqo}_Gm{?{elY}>cBC%A=lY0ry?&R^<;1Pk2zaDgq0Nf@hq0*dC2#e0c>w72|JJ zp)OrfTFUb|m4P1glqxr2b2jtnNngI(n=W*_^Mxr7M7+k`&O-79e{rSTSyr4m>aD8q zc#4Zqt97ldT5U*1wNiuD5(~%Kpuo^Q>DS2lXO>pxMvHO^%jmOgZc}?e|oa`P@)y6?Qg8D5(uE#( zQV6B`VsVeFkbD3-&*LmB$z1BIs_^=X3fV>Sk-0KkpO%_uYXL+Hw^vaa2^d8}esf^r zQlX)Re8y+9m-{@>6Gyz&RX%T7B`2S(^g;Rx)1~P1POM;F{AIv=X=_h~v z@Po`J#3A$)n`X;U&$kuq1R^TFqh?Mz$mx@}W1SW2fhqbe=+8dD0>oJ7STn**fbap8 zYVq1NyJCSOK)VV+2F!lP*+EnMB9-QN0(aSIE`ifwfyHpFonsqXL_}frm`A@Ao1Loa z7gBl;dFNFEu_y)^8%rcfNzVqFy`y(sUkQI$SlY^0HY`uhD#=|sH@T%yJNoF=^V3Y| z{;m0mh8FhSh$hlscY#)G(M2OE_KA0Xr(+irb*jtkBDq-w%W5*58%r@=Ni z^Rs=EWu)2sDK0~p+nxQM<;j>rIkA^z2poN8qX6-cKz372Pw$2Ovn`wYk~4cYUewsW zrhBUy)z$VjNXKMS%Ch9_VawtOKW;6CswAc*W; zYTm_V)hQ{}E=ftOxdXMe0C{HXVT2WOo=_IAr%||X#9FH{R5d)%lNa3_sE_2{Q4sLd zrdv|kHPXGz#q{sM4^$3uP*9}~iz?_RkVTw}7zmgnttl0=6ys-s@JVC2Hbsme;8PAe zRyo0z%&8T4<(yRyn2Xsvd4tv6Ka!ch-TAvaR$umtL}AsY(?!M0&fc@=_jXljP5Wqh zWlPgabYTKYjdjEyp4dcfn<(MSW(>?}2)cWQ)?Ttkt*CYCcS&UrpG;*;kFEd9YCgr6 z`R9&SDz~+?UobW}bB-n4+rMb_@PKFHy6e9yBTiV8qqFBvD{0%fVHciPuwG?9pf}Mj zSPQm;-5h2p_ni1i;Xz{X2#|2Wv3)R!<7dO{eoAS=bD1-OC#Hll?h817>Jd4y%RTrn zj}4miCUyi-@}9D~%5nfOWoIIN5>>4q-mOL|_6v1aOH0ivC`%-s-aK;kkv)eG{kx=~ zf32=f&i)PE#Otf<>aOUe0nfUiu61dn&tB26wm#sb+Kr4(95(=RSh$*(ceORQ_jrpN z>elU5|CxK|?ZNM7{d1(dJ?avBYx7jfYKKnmtd%P=53HKIq&(TSd1QHA zG4u(QGw0MI<{Rob_{#TyXZ%{|6};BMFVGUz*%(61ezFuXb%?`6!`cd-SzznUG93`X zSbxN`Y-+k>zn(sd&BKfn6cuiIa)pmMe#OnsR2*xR*;&fn2Cj`^+X_dAKyA7+v`Xe1 zLSfTr%=rpPT<`FH;43WCE8@u_iOwWg=&}oiN~%J{P84*_cU4IvCPX+Bq$aM5NW;cR z$65CH%W}r;r7}gv8*gw<|V}5+`{rP zYh+Ge(KQxHI;?Ohy>es7uh2xuDy zO-uNMP$P8bR??+wVoHg8%pm69)x3CUV4K|`r9?r>=bU^wpm6b}Gdi^59YO))2`CK$ zoy`zUFXLG$rN1~YHBc7u6*MewVJLL1L=&|bUy_@hM!6P@8d;fJ-Px7`PZtSEb6Hju&PygK!f#(g5EwPetqH5q$g}FSEi>D_t)dd|I!0)jF?d01RkH_B^wk<`^*}lwHC|Evw!OH* zjFY;eZ?0*sZ3;S*ZlO^XySqdaE_}amW-IR-@8!OLgDEdA(9h9VMC&Pa)Z^}|LRT3^ z46EJhpmCw;wqD;=KI?jG*h$2yP#ZuPl*@@-!CQ=!F%bG)sJ2283#pJpH=P$uN=&7? zK3$Z3PF!A4+N2X3^(_^l_DqFd??5OKLPw=i-=*Y*_7b%(5RgGp^``0;hLpIX3fG?Q zes8$J5HTuMnu?MksHaTx9PWn2jOL(pOO~j3;2YAkWd<)-4{10X|_1+vTNnG4ozKd9}l`o;r-Zv zKvBVVyc_5r=xWg4wAe;=CJHW|;8QFO*m|~*8!)yX*gp1ESd$JxeW)P3u02(L;FdpM zeAYZU`6tz6Ut;`*SFTySkXQjH4WOHl8->vIY~RGYM^Bu){<7L0_Fw%Sf{$)^Xg%N@ z|DS)K^Eq)vd%-Sox+U8G{QWmKocr1|<#me}X5KAUU%YVMl6AlRahCV5*FT;+F-N-Y z?5C(J#L$j!U*+nT;&t@t=T|`Vh40rrfQwA|z{8mjscb-o*go=qXb1a)W9_E%(F+>3 zuGoC-;<3zo#Tw|ArR#s&oKG*g?3zU8NA^p@V14FZ(fZZTp4q4~+oXjyIe*=zGkOI< zYwQYezQR=fFS=#jmX{07Fcg{h(gp}q`vVNez6*cb7MA}0%}?h}42ssR28eZ=DDz5Y zD-qvw;y9;^?xc$7E~tkMg#tLsx67Gxnr)xKu+I>LAT55L_}p&HMj-U?=WfHjNEMCG z+_LRBSWZG$_#lW|6Dugygyt-qW^Rldx8l#A=2Xo79rC+ZLDQxgv8a&oR{5i*KA=<;`^{6!8N7 zXgb>aRD0#<*uES3+RuUnGSIQ1zCkhhDfq1bWeZ2Tc)>2jwGc}u7;<=Vj|rj->a%C{ zWgQNH(a~A63F3U4*#lU_@ronu`q{eN>o&JJw255@!Ukh>dHx*D*tB}Lt3dCM56o*& z8UVRL#}lPullP>+(=x>VfILx31W3yi&6AeRIvc&_mLVuy7d-KdHgHSL1$JY6Q%8Fw zTr;}kK)DQ7>5a%fY_AN3OXsu4VY$s%Q?42)&5Vi{fXf5V<@4wpsSMCeh>L0E7(N!; zQyMX@!FF08GcF#ubvZpJh0VpkRosBqZ*(>0FQ{6-qI3Mg3*Ma*zw0{G;`@iIn)Ewq z=UvjB?6+kbe6HbJbkp}sRtVX=I$NQ+Fo)s*==_szvw7+~Ka)M09YvK`W3dx73R~L8w!lC-=xQDzw>9k$J}j#wn#uVnKg3 z>y+K)eP4EVEL+h#dtlb+vKf7uHCCfCk!w_Y(2VY6=_X4-x1+40x~!vfkQpkU{=1OP z-(Fa))rgEe72!Xfr)*Ly#WrF>XA}Wrf_|m5OY0XRLc6Btj9gs`KxdxX% zJI?c%!*q({SD?vp>un#Y09a*p4mU${fKojUOt9Ekclz;uJ;Yh#9dmej^PcD@?AvqL z7hZdveGw&IdF?9XV?QVS^4l7hPwU8=RTs-Gom|<~b8cnzS>**awM*MN)>M~M7d8%E zmiY-8zuR%kYwQas@%k$$cGbTgxOI4DV)|L}?#jtcmmRsL%|9@G+4zBryGo`vV_gN) z=uX~y^nQp;jX(qo_+%7QE7-iB^-QmZTgfKuIs}=X*(o`tl3-5q3opq&0`EQcLbh_= zpoXtpbk?5nPj6o79_;iDx{zfTdYo-r*fVS6rrw^r)^C_KW3@_MF|DG)We!Cfdx(68 ziQYeX0eYKVvj6?NE_3OZzWw*Zm(H6fGUj?{$vx=k?b{yb#?7! zd37^7d+nZSg&ZGYKcm`te2B&B!lQr{EX+Pguq{pLKq=69Fr{)|!H^2arx*)Is&F=! zC^og)oMM=a*9AdXPy|Ayq}tidN|i$va2Vcv?N#$KvnasVGW>X~wi^H|BB;y+dZ3}G zq_bL*uvGCLtOBq^w^Bau=>=9Fx z$QdS!Hs+bF<&nrazRgehc%gc2x5g_Ag=neM9OX%w0mnQxd2rkxX5r5a)dl1SI(K#nt>X+L9DjvA$}Z8Tj&Nt-Xp++d z%wz|eyPgJXJuJJk;|-k2wP4A;4FSI3;Su;_+OIxk#Q$t=J${6TOyjS-LRcbOJnltgVIDJ+iQt zQcnEcl-hazZAZ6nDi2WZXO7+3Y9p!ZyzJ2vubb0ObyamoS4rJ-&yCGLw@}`PX8Nw6 z2#c>972P&?>5bPVQ&lzT^pLuSeal)b3^bHs=7+j&8e23xaOqrb z9_XnrX*XBf6XrqIvIs>yxKJwvUUI`E&H--5W3X=~iJ?_6OZ$cTu_Qgy+)jPDrZKWc z^Yx$p{K7?#AmM$FBJEjYx4cdh%0-Rsg{AD^(1NRG7bbc~Z&;KHp&6|Oq5S5&aB*G3 zSslS2zDuEA|4)}4M{4%RM~ z@La}vijKDyVkX5fmy2N*WI53kGuF~1271r>%i$SLuc5hT!(`%dokm;6IR41#@sb zcucZml!p3Gj$fhyvZP8$*`q%NOh1hNq>X&fUXS{|uX%-}J@wu5zPRF+HS7ClT=rT- z`xBb|Tvz{j?a6q1-}pex_x~{W-r;SPXXCKX)ZTkqdsxGgB}=wE=3_U*-8^_-yerSU-)69q|VyuKCl7>Dzv^c%g^6{dv3oQ~a-& zt+}Wn-F4-L{jF)1w=&-lWz-Ac;aG^`t!$Si){_I2gC6Kk5rfL=Hpp}FALd=gE5bR| zGnD=R*s!m#X^e!e~~r7GHKwNWSUcxrKJ5zo*<*(EeTWL|F< ziNfm@)e4GxQo#WcUH#5-(DO{SpP z2!3FRIPdP5+Tx;QUCj=I=O<0IOMQ;b#iX3(@3d|9<1NlI3e!b*2lE1*D;A%=Vx(}t zM;Xm+Np*>FEg@Ip__Z!~!srM|R5EC?_3egEi?Z3CnhZfk6N}3^Z%|*7gDfu}VXMg? zQ3Ua#Y|ADVa_4s)rPV=HHH!eO$&D(<08kv5AtntIm=W07h$GGBm%t=eXl)4C4*tV) zuvAiCHY*mc>gl0xl?gnH3N)HYL_b1(uA~in!uut z#~Ne`qbMZ$DUNSly&9kWvoKYZ6b16NVOyPGRnj+~c~7g9I9BB44=S+0fYq^PdcE4) z-&9ktH@ZU)r%(KQpntne=xxE2c-W;g*)#`QWeP%0r%ie@#Kg8#=jY3yK%*d^zcQaZ z;*{Srb7m~5EIKv6qCtqcI6C<*kE{WF3xb6J*oNeQ4iaOsln&{m8B_xU3VFhz&ICjR z0tsgkWbB3nS+jBSdI}@Ye){(3pPgK`d*8+rB=yI?zW(t?f?X@Ny|{MzhVcy>XRaLG zj_*4@(PO1@4bMfMeL6B{=^DS}@Zu36Y1aG_eZb5KG(8L7zJBTA4dcg`OhEH*q;L4h z66!&?$3ix<;{VfKq5uWDN$9*=sDWZ`xO3P$vSj0mV{p44o&D_}KD}yc$G(k6N$L+@ zy!O!tg6+$(TAyZ~{y^*e^l#y(Nxo(~to!{6BmFJS&rC#M! z*FZgTL9)93aq^c`4&)K}V2w37t*}Np#66&RlU)%f_Ylqi)&Tjz#}OyZHdaaKJUl4> z(6KfR7BBQ@oCOF6p_IQM34IPwxC7F#$X_yl>Ue~C>c?J_KDXx2FJCn>HCB|%SK2nq zRCg|r7=02-T3Hu-AXMgO&WhKsTqCFE7%a$7E^6=nO5aI+(d<Rrzo8 zH!g0Q?tktsr*~;tM3Pvjp10tXkfe&gNC^a!LPB}h;x&>5<1e--imbt*9?1f1Jp9Pl2m6;k5tMISbHkCb#YelJXuTSH>pJL=c6V#4tf?)r!0t*w zi_oTc^ax+aynv-%`z7Z6QQw}K(Q6lswDw$j!!s-Ht-t)0ry9O91_qhkuyP9+M&MQ-qEqS zytJdIw1RoCaxt27^cE(12g9~5YpasH4;D!1J?xK++1b=Ri7Do~iYJ|(;z%WVynSkU zdwUV!_?&m^hG$OSLX7<4Z~y-NnuY7}tIM8!A;Acj)VE^pRR45IUKpeyci((!24Zq< zs1E}jD-%L;d)g4KDwx;^gVB;>185XT1&L+<)4ytZs%&^&*>HL``NEZVFYDQI)wYXMhWVXn9VjNKB73R3 zq52KX4$KaAJFEd^u7QAdIsop_Cj-dd4R8koKSTD^54DkAW-li3na&DMjV}7`(L2A( zdF;|ppm7w=T!O7b>a(y-atup%Uzy9^D$u~E9?ee;wW4lfd)ixj4!s3htWW#Mh*DkQ* zGq4Be(RpZdy8!pi@+L&K-($1jCaSsY$j{zj-ulCRfBExUpM5Gg_2L`3151uOl@;+Q zK7`oov;Lu}OBR>LG1-g9uEgxGKY-~h*zz>Y1z^(55rLoi*EQEoZ6!qQP1PqiDryv@ zL~?ZD%z{pquYOEusowxZ8zBC1E`C@jce6GMD!%ff5C>Rr97uJLpAMQJL>Qq9T9TDy z98*Hkkt~1BW!C^n^ykeLLOVQu;C?SafOtg?Q2J{W`1%wa_7=;tg zMOF!=;AzR}V^_ZRJLcs-J^l4p?|=Dsn)J1Ay7<+}wa=_eg(r5s^wM6jCNP>DEmZUO zKKI;Sp)N8XGUoi&WfckL=tX5;{_>h@vGBXkVn!Rbtp<}bU)C@?__)kd_ovyHuX$ia z-;O7aJlFD;O_AP$>6nkVS6NhVw*11XsocqYCK5^}dXHn8M;kaBIX}mi69sOI zY!nU7LpA-LY(_AWABeH);Q7B8pePuYLDBy-Lk|&8{|suP-~Y*jM4)Q^z{sS-SrAKx zb8Qm~HXo2{@i9xhCY4UOT$HiAK2c!HrS0K#QE_=(NiO~N3SIJwlg~VU{L*p@eoDjq z_08XX@;2s@@OQ7c_K}iQ^SqMMpE1wdDn-Gjnt|@RTDttiU`=gHMPFY-&7~FPzSbu; zZreEXNFT@NhDjc^6LRtWpydFqab6&f)PNHst&7D~&OTui1lf%O?*r=^gq3Sa9`nz~ zf5!art=r!J{Y&rsmLy#be|T(Q@g1++5q3o@7ZgQrniq&xRE0wgSmX(4M<9FQP7FGU z^p^eW%QEIx8kaiuF_%Ah$@R?pU+r@#bb~Dq1Zpdy;Zi8B=kD<&^)6Whci4&ic@z(_ zL7`6|jc5lYgRnjl*aUX=CE5^Bt#e8+g&b()j7A{7M7 ziY+F!Ivj%iIcBd>=2leHcqm+fPv3ashzk08g){;YhTS|ey91ZwM{mH=xS*84aavB> zcsE>Sz&Ap4Xn2vPGF=zbmb7kLpg6bKc<$GH-MaldA-?t%>0va{UDtH=>sgGX{qIl%gMsJ z`W8*+^S*Rf>7t%BHLiiBi;gm*q?#GJY;99nIM4LJQQqjNac4`z=s%vSzUjC4nZdrf z$a@`SGaalSYLj!S8|4QTk)yeegt@kj06TbV~ zXWx306l`n0ANYySg7@7W{4<3+0%O?X7na@o^b=)e&8-#Xzhv&WR|!L% zwIhA?^|iG_|NQG;50{nNnt#6M;#E`kfP)Rm|83Ms3S};g0Vc3C3;E%I0USYOa01~4 zJh<6r@EKqPYY`yz7^Swt$r&#y>#<-N0wTEcJ|&infPJ6Lmuq{qcf}?IPQ%zz9bMLv z>zi*@i=gefSl6u5Mr;u4l$JeqEhC`If|yEhvSi2oLcHXX!L8H0v5P-5PAV5py^0@)@Tw?cDg?*UD*3 z6cXEZ+IFhcixmE%a}F1VI#Y$t$^`;tF|T~FkGR69 zRSGrjiMau>1>bEt6@5O+tdp0?h0s!K#>9)~a_Z?j$)ABY zt_8YAWh`6`~w_R`}kQqEH zvWWS)eBH3_yQEGS=v7^|ViX!mmQ*W=0$!d#5|ow5ETO_=8ILA~e7%45W4y7pjgY-7 zO-ad%Jo6+*kvzV}w*8i4u86u*Eos&Gr9PcKqK2k81}e46{E$Fa>}D?0D@w}9kQgfT zzme(Jq(3o2Q#OppFLyZP+J;?`h}wc}q@>P;y>_10F2n3K*K`|0i4Gn!p(lA_r5LkH z3q>+1l%JW6Nsla_M@x0hN%%#+OJINTEUooM477pP>dbcv9DIdbRH{|e^48aHT&vnu z^2ZVnk50l&B_*VG%aqVdStn_ljQ%VtjtaE}k20UrPP3tamWyz{OsDcIEcbo#I~aeV ztxqnyT2mDQk*vjK%DyP}p)lf;Ko19ka>L8LK!)C)-N?mK+Dl9l_G(jT)L&!grVd-nUM$S{x9=w zt`H@Gf=WcY+v$3I4d|$?5b*@s&Fo|r4G}f|M|KWtP;n|Vi6@<+Oec49eDW89ZLMF57w%Ui&wYSbFeMYCv8d|EFr=0fi3~DjdkQM9IDo6Xm zV;l4qQm6G8bUHprfVhbI_PZ@pAzyqL8yMQIloy6V5*nJH1`SYnUNSgyvsqc5lIfu6 zm(SDXdA)f@*Ft-Cq15a28S`+7R7~fu=_{~9=@{bSr^szo4ao5!v~rwXD2KzG)XI_v zkX1H4D66p}I^hA`z#$+@^x)Qyz6cMl@`GDCSd`nY+9Ez77v>3tUSVPrkrk(w@r#p+9NK{@xH)R$|!i(?n9 zz2>Tk`Pf^>nBTYYq2Y+JbkF{qo;$c5Ah^1sREjGjB{qGYZg>K+?;|do-Sx57WzDa= zsC=@*Zg3W2axEc^VVJ-%JvnjZ!oisptj_liT@U@C(d>=Q=lJ)zKHcoCBI=TP={OXuOZv_T0v^qArP4 z=xLBUEyWwxiyKR9vN~UHV)@>gsp*F3yrS}fiqb{1-RtL7w=bVp9muB)ttpKQ=LzaO zowqw(I;Y@R-D7n(14z_rU6zyKsWohn37Pfj$fh z=^(V$5lC^7vy84N2sro01tw4myM%IPoIbM@kplk2w~tnlYg z{w9!KwOpXVg3(a**j1&&gO%02gMbeUndfOK^xKt!bq+p?3{ODv2w{IFUkZ1|< zE9_vqvy^}e^3f@*px{!M6n4M{?yD>wWw)DUB4o~{p7xUR@{;!Mk_udGsHtxqOC_)e z=2i&R>ge2J?6E}2f)hjd{E^Mu8`CEP|Hdt9gU*P%o*TWYdfxV?BR)Cgm!9s6hlCIMEyZPx)f4|>${5Ih#=gXU^4-F!x}OR+_I1zi-Tm-$$*&10 z2%7!Z{aeo5v%7ymQ@J4={W!j$AzU1aASDm@1M?5aLs|`e#8dzUXyXj_ESp;oZ71xg z-7}eD_MiRe%}+jNHV|(up8Xp7<^8J?N~ftxOiBi4>xq`x2Us0oFa0?AA#_l`G1aIVgyd$ezY2wJCpyPx) z3K+t5xZeEm3!q0N0k=RcfXi#?$CFZ{P$1STbaGl$!93e_>xxdHSubI}D6m?scqOHx z=zNdYtjVP@+`Z6^t!{Px$d0O1fL~)U;Tg7bsMO)-}_sLQWSh#-Uu-Y+N3W zioV!wfll$((l%@CjJ-2AaBpz8yvd?4V!5u(ngF!sgn@=K129F6gb!tM(0575x7clD zH7)Q8%a?U@N?|0aOe|Bk49|rM8b_hDRwS^y(hGT*$+pive~)Vqg_+m#yY%vaaf!jc%QgUgQ3Y}< zUu&|ghRP+QN^6qV#mlS3q)EPeizgQKS}o#&Zeq=qS4ilzL5X41-N)8W3%yNR;?2?y z%9HD&`Qz7hYojuK&}8zFgN@>f#WY_g!N1E<;<}hu!WZdkBNAwTrF1qC_X!nzY0%>G z%f%)^dySMIDb_SMtQ;F7QetVUN#emoGTB|s+`b)G%4kWhu*k~6R!#R%A*hf*yh8^y zQ3MUh$T9+i(eU8F%m&2}z*$bnIb1S3kdZ8zLs{E^RbW|_7?9ox#SMvZ`|jUmSi zXqr7;Fb$5Wlw+FqoxWE7b&k?n6{MWhmF43&Wi58K%iJozQllqBQLon=0!7UzF^Bu8 zLf=qjvN+LPR)cE}-m^kqWOsyMX5HOid0X{#ZzB2o@<&K|Ab(e$3o zqu>?8@KBXoER)P5%pzWJxc*SM+acc8fS2Vql$MxFBzm#QT9n>L!gMUVQY_VYO?&}v zc~CS0Ln@$)3u4Y8bS5Dd@3gaaFTX7%mNTOA$a zLdJ0~j-d?t4Ci1WjiAjvI8z}5Lc~j026PUg*-$$x<^gBfL3U~#7f5EmpFr&7KOdmi z%|_iGp^^4RbkYhKVxy&{Ffzw?u&cAYa)FqP2e1@vf`S8q%uvhxLn5MZr^Tv~NURB3 zCDBT{1W?i_wHgcxxy|O|Nwf_To(NhCsOG8KZj_mSy`c&^c|bv+Rw`PLsiiVXDA)7k z0vbk{38AV|st<@QI-j*q=Jczq#D}Sg<`#dOtg5rXcG_4VHY#lTk}s~fqI%^=TUQ$WQkUFfj(I$VE1k76hxJ2iim!6igzOHgs+Z4Gk1jIzTFb3@ko{Dl z=;_uF1Wnjmby1Hq=gtbWsY8*V_^7vs855rp?X9s^@t7 zpkAmH@|KXN+rxuV>m0^&wjGDP7wk=z>+^6P0z9V%Xf@DMj0bUHd)7Equ^bDogi7{N zftEYL+gFfVZ(;J8U)G$tZQ{*!lsr&h=DWd{FsN)EQQKAZSJc!j_QOcA`7kc8a^IB9 zdz}}GFX?3hLP^cN3zOWWBEjvdEng)zn`0G&e->1eFaTO7|8(61^h1Y&0)btdm-@7L zeml%O;kko?_{!wgl9Dci&Z7Gx^SO}EY7tuKi%uZH1yy*!f-}GZfIwOj zf=eM@sMdT(E3qbgL;v&SNC->DavwbdqW7N=Xs1AYl)6_UhJr(6OJ{&djkxq|prn!wKHw~mNpF1$D-X4(`BR0&L%EGLaLa&XNP5H{?RDZwmU{ z!5jlF3YZZTNR7%E&75?AL~73R;@*OD3<(y_et;AuM3L|gAp@&Gp*NfcHMVeg)0Tme zk%29nM#iw+3x+mr9-2QoxD}pfKYC>I=0S95^COsTYfp85s;r}SK6YSdPhH5rsk3o( z_M;8MH9>z#X?Oh~QM$gfwWWR2=C1aRp1I36z?;sETRPj?yVh^Iv9)94=FavTu!X$` zmezFDHBK?@z55ac4PE=j>qmAa3Tk_*YGLVYZq`!%2l&O%`C?wq=^Q97WPQXaLq(^# zKyX5ki(RRWRW1=H$|yDLI3Oe*v!7-B324i+iH=@R#^1n7Q3M(mIGj?1Xbb+(8R!?# z10f8EU*rh^2*M}lg8Nx37PVqVc3iB0|G{$KRSFE#<~>82a!Cv@qn-#a!h%eCs-Xlj z{j`xhHSQKFO^=pY7UrpKN`0zZpJHCYlzP93rU}c`CUK39aA1+5F=@I?;U!H(thc^C zVkHcEhfAR)D5cy&Bel&0YT8%{?M-c0-V-Fk3YN8 zEOb>^g<7LPBvFvg(T@DM8T0W3Hs2mE@c2~ zZs^$@jDjjkf*K)~ENbY=wMfifo`ok1iD}AAV1yWJsw=SNm&xrFZlzEtm8keCe_MKZ zr>?S}4+%Wpzt>58Z6wl}kiGmAeKGke*f6Dl&l)GNBgnLqQvf*hNNQmEEW%WUItg`c zK%xrB`art_p?Nju$Ai6rMs7CxVwp1=o;dz z-CLF_!zefN#!Ou+1*0d?t+O_mmO4!SBWDqdm5-dKM=z&qpHrPVx-}qYjUbZ!gVPq(z{^r)hT*)8{6w-3rIlMFtTj6B9ft zEH9~0hV6PB91e2%5}0W~QPx~aEU$9KqUZ`^C&MVzmS6#H zBMS{MG}f&b2%6Sym72xQk){1t=36FIc}_wyzQE|fcjn5AY*wSFhFJ~s$2CFh(5{(H z9!Z0=SXR-}6;o0&15Z?5P#!lHHgzxER&Lf)LLr^6QP@;zP^#1V&3Ydxm33lygKLcX zdhL*2Bm(|7ph|Q_fNHOTj#BquYuV57@ zR^Vum0fipU2p1THJ=USIzNmH#K4#4)R{zg#3+zY6d;-4Bn!Xu+3>6ubk|85At5n;i zuDH9O3b!JI72{JCo2iE>B?J0qf!~<1{9Cg;n!Kro>IHR zOiOUFL}XJ}VLB{2-(dkZOxMXiq47Yb|vzC1RPs-EcF6&A}OD9XVr zhgeFT0Q!LXD8#cl7R%u+V0=bRWRq=ZmbC(aGHIObNk~+4bEg1Q8K%vW1LD2kdoP9J zEkI@RKeJYerCQJM{K>nv?r2NjEpP`UQOP2Vs?c<4y5#-)Bn5^=hB{H-J+)q$mM)Go zxA9sa>ob2?)vOB2v}@Jv>Tt1fsnMA)b{9RN!kUNrI@a%OA6^Q1&-LkDBSmAi^($xY zIIw2EX7Kt^DHV+oR;{empp#RSm@bw`_^O9(ktv=+s;Q!-Mv5=-6;Mi#$XI0Wc)X*Y z`PJI`s$|8Mqb=1#JxD*#36g5^FKi_b3$61I`<_%nnP31Z9r7P?Km=#Wd9lPYff5)9 z1U7)CqDrUAEi|d+lEuxHiGl7`pVj65*I3ca3K_n;mTwct)ABRS3)MnpaNk9H+iEDM zm9{o`{TNL?8;j+2^g_Od)u7e7cN@bFOL=im#o8PChwcmI;kCO&I;`-_CD&=g>)Yn# z;#$=)8eE`kuZvZ*p1Kk$aZdneyesF&oJOX}@+@wa4PXPXBk)aRXB%WJf%EK(TT=G@ zc{K-EBkLedWL?FG(g0UDR(XM0jo_E1FCNe<`#+qAK|(8%%}|Vs`_ z`~a;dh=-?{55fJgW2_)e?k_Fvr#%fYRq6d0-Y_Codrd}LZpc@_NI-|^klhw=1wyVu1MXHW3mQmtnr&J(#Z?!@( zI(mgqU{E*sMS_rAEmX{lL*u@3i`HZpTH@tJ@pPR_CfACsu++jX%Akt7RZ^`fPZlQ& zT1rZty5qbV6;1Ppq1BcMlwKDdv#!`6RX75INZ3`sa}yaNFNQpNBgD`%Id+i4fp!m70h~|1LA%8! zZLo?O=&FFsT;>GeKKnoHFBxLqe(9Y(TQKYwFJkdMBp8I zXYMQef@C~LLS-Q1+3zB~6{!*zE(30ur6%@AvWr7!kQzd7jXQGny{fg8Fi%v3V}U?G zudgs+LID~Tr1D$Lxq{WIa;e2(^?L+LOlxrlD>ZJ1BkCB?xRf?&PrV^1S8077*H|Dw zM&T-7wLmU0loBeH$5S3q%8aELt`6qm6)Fv3(G|c@BZJ;)P6dpXKmk!wzEw>$gu9|H z7lh4>WYVeX)%QcJNgxY&6F^t)`8MsKR<<=J42a}v6ZC~#B2z3=$d}7ClS5-=7M{kH(iY^oey;GUhEz_fjwkWSI+W8&UO}OdRON1kq)>6bS55FBD^HX!(r>my zoijOO z8C^@Y1$rv-$@zr~a?K`puD^v}l^4H zI3?^Gc$5pZu6m51D3s~=6#vlS6}x{ zJ_HC~v6t26Q5dEuSuHF}TeP~*S8pQjyCG24hTV&4DIG!JYV8$AG)A)-YbYyAnB&Ej z0!j(pkXGZ#QiYx-2)#bIk0AR>N>BD1?+pW-=hZMa!uyp!k@;|d?ANmUHwPPK5&~egg_zK5t8?n}4>h@v{ zU&50rUG@7e-NdIzf=9eAj=sUXfrZ~t`F`E^TS@pgSP^sPHyY==ay%)lIF9kbKQ9X~ z&oq+O2lh0$d1T@LB=|fGi?lJngFGZQj<=nzBtL_CgEo|h!CKzgL;?g6#694_N>;?H zI8M)ra!_?qIWFg0K^w_E*px2BU_bzT-}69M&THPXx~d{%9ait3oV1lHbJd%-CM)Q? zd!{d))YZl{VZVs1tN75@?Fowo+O8h0WbtsmISh4hyXF-od%F`wEwjrS%4#ZW3PNQK zOHXa>>}hUTGg#~?UH{cX4`IuczTA)g0Pbg)DA7Ls*rm3X^Z_4Ca~6}!#<7LfI|})o z+xOH4uDUqobOdCvlf`3;iV7PVHL5_DK;RfN`7zWrMl{Y4RZ_o(Dl6@1EiH{Ktym)x%O&om>szkuytuq? zb#C4OPZc1dqba2cKPaf30}#2g}E|ZMi%s3LYJ2h#FFLVaB5}2a)m;-`-;Jb z7V*nhUgnH+QFzbJi#tXh%d6|Xe5NSP?&sswyHIb7dhbI7ipoTtE^wJ>sdv9QKyA3_ z+im#$4YBCF=KO-jI%?}TUy(ohb`tN4RX0S#^C0;Y)y(yRPwJ7JL6{`V_3e)%Tws+_ z4lN)L1?_o8SHgn5g~Ad7Un!H?Wp8q;(;^jSX^Ta0+rP zQTIL%T!%v}>MZnTint)z(UWHm+HJD?p&E0ZOHgC5@3RLaszjAQ!81pa`T6Q`wO((v zi^8I6pCcUWD9tyzEs`(j#O+nIq(D+IQ`ns-7}q8-#yR=;oX;ducFebaxQXORGIGupMPZd3lQ0UOpC=O09VX8X;fo3&PCri#_gR z9-Z1*7BAGK)fS6GSXorxlWuUUB5qpAquR<#I_x0PYZNdXy)0i3?N$lO?w^*`XNhS1uM9d#ql}S)5SeFD_6#xxPSiOMN zOF$9MY?vDQY9W#Ym}mA2$Xdb1_0DetbzjQ3WbTT}yf6jXZObXW&`?7(W4O?d>tbJ_Ju zr`k(cCD3+VP{aJSmbtTmCwu#yZyx69VIY;Bv1NS|LmD7+;OvEPDw;oRR22jGq`ojPLFFeMkFkbipd;GtA6Lq0vuTu`=h0qTnV-H=6Hd|Dl zYnd}jJM&Rs{H*C|N~tnBakCr5t-2D$#!lgr0D~gJ3P7K1L>g!9nK?>McTaPXNBaybT`LDkqJ{_{;Sfv z*S=b@T4GXd-9SkFS7U+l%|hpP$Y?vXZo>w9eOX*sNQeh&(H!fE@4lre{5hy@tArUl z^C7cm8_d8xc1|mBaLzD0a(Mxnuvh|AL_v!+wC@Tv41{Ib5apnBYy^hG9LQtlyg9rq z*=c!dG`%nYkw@eMf{JqBQyG#($2gV+&*-ol`a!Y(05QUKvZv9MNFrBx+^V9{6)=_X z+Vx*pVlcp|^wbjkmi*2YB}5=?IxG^-{?5rfKvLTGf#DRqRPfoauTzwYJu+`?eoW{C=t_84u-^ zELZAHkRk|1qZE%?!jsO+oTn@G7%t&?nAN6bo=?;*YMm6<^ELh2?puXItfUsF8c8tv zW$L$81tcES)_YEh%Bm=HP^SJ^r8f(yRL|DtWT)QpY-g=ctB@$!dc$)1E22CnnR6p} zSsu@M8E6&ZJ_k2&GrACCW1o=6JOf-5wLm1vP6aE-#4Whq6dsNd0$e%G4kWo3y@5-z z202H#9M@yFjx$eLLPN(8al;>MkPeYCD{XY#=Nu=7quz7AP2_I@uQ#VWg7k)8M>j9S zv`%ze^j9XS-r%)qgd(4p`9P>_RLyES*UCZMu4ayO}%&(T3W?Dx_mhJ0k9)_xMr$ws~NPA4~ z$<6l0xexDO-&|9#)*0Pmkw{w}$uI0}YwO)OSeTB*( zX>%Qrn{OJfPgVD{wf7WQy)9KG4H5gG!xC9l<%2K;_SaPlmo`NlRa@M^5wz6;dfVc7 zELJEhBRizgWJ`$JZHcu8?6T)k^>h0RlHEML}? z7q(aiUMTBq(J8};4u>l*T%`=V^Q!A=QzcEE-YKoc>Mm^>@|yE2Jw{h6XmdQ^vCZ`F zsQ^0(X)DYi*$;B~N+g3}FIa}k5=kj!Ab|ib0KywlD$hm#ege`K zHC{(?*{$)&t9;Qt@yPqyU&bTMx34g-t+;Gz{r+5&&J=bfk5n^X#Uq##=P{qbYlzSM z0lj#N3MN(+8zgpV()!De{&au3p-?1}SgbDdE5-RMF9`+0bANtFbZ6)U$-^&w`5Byi z%y4duQaJFW{&*A-z_@=@1BP!bZ!LQVJZ@OT6lXia?dDvS!yi-=kF zN@G>im^R>6t@kg-cp~(vSnL*~SMUb0FCVO4JZWg`WS-|^uCB7CL~pFReWPIez^e{7 zQ^Jq(CwWp67|4(F@=sN?I`Qp^i?6Z!tY!8dqUonDfxL^>6+5f9NH6E{FM!Zz4F zEekHRKk$c~&p>y`2Fe8HSoX?sKX#XsKv}3eIZBDoQb-KysbQ;f0Ta;a?Dr9Al1>M3 zcyxVE^q~L~==@q947lUIO}~xt)n2JgtI$G1v*){|&nTI<&nMXS}#bjo^UGL*5 z1U8vQW8vZW5a__apd(IQE`CI*u$Gxj-UK1G%c0OCy>yQ}qAY~=ePY^ei&!64LAtmA zh97S3nCeO2sG&nH^{n6#xm69?DxVbb#8yE(;8Hgzas_^kQEe6o$UH8;I>*nG6B?+) z-Ivu&A%*38fQUfHPecSr{BU9iG?1(b1D&=rdx5sVi;C>D06FkV_1GQ9TUA?CzjH*;V2>LO3XPJ3-O+QGMp-X{Fs zYdz9pX{bOVDw7*jDw$UtgjAE|QHH@!?${kxrh(SP`C`{GSBr<|&Q)l|iIPOFrGWR? zRb~NBQsP)J;tj-wSY_^(T+@{49&$kHz~7;AVWGLgpav=oBxbY77;Y#k!X!qaTL4AK z8qop|^N!YKG6k!}DuXCbM2c|1&Z~loUFK>^W2T}$tvb~?P)LiCifBUVH)s`VE77}6 zD1_p805ITjlKzy~3vvT|KL}9B{sHi0GfWZMv8vvA=8pISdbmNu07Rxgtv6ESa|&g6jXWw}>jz|~e9GMaD`nr9)G>yrNYi;J*j1vXd2RuNY7 zByx&u-W(&fvVPo?kCQsD#DNn*O@dOA%5cE$s#EiMJXNm0YidDqihOPqU#YKk)bpgG zMU8%4Bp!Erf~i)eIMGR{LSP2i$nLnFAms+7DzB{|Rc>#ujmJ`fTuq9C&L4DT11;e@ zrsaf$5SPJJ9zM_2oIiqN+j%uYM@f-FU=*65Y&yMp=8E17P5_+OQSqFE=O_?dnh3n- z9vLHIN)(AZ< zIFvbCPHvkmTGrg$Ur1z}cqX3aI4?F4$xB*eN#5W=CP3a7=z@ldxh_d=#ge7Y z8{K@5&Y@kdbvBEPCaDTJfROLw*HklQgIbG>t$uDFGQ^ny7Gi8{9`8Lh4egw;g>z4Fw|fqCgX zkV+@J<~Qxu&XZ^fT5fh1msJ*&_lM^V?H$2FF5aSGA@LK{wxShvg;P^|t90HnI(KYv z>%!A3R~~AsS?czdYdbaR()`$(yB7^y)_Lo;i!Kgb?K1z~J*99+jlQl!^Qz{x)W(YD z>+;8&#_rRoIvM~w5iAbU%OJ;fJqrtP3!s}vfe{uaXy_IAW6`)2ki%>dB{E3Q<0%`R zV8y^WM!>ofSUgR}5^Qxhq`CuQqJ|)umcrmd;^2l3(90B5C6sW9mM-13I@ThTg)zth z9n$($8j3#^ZmjE6V0>ZNpIZzyMgfs;!-}9uj`KRU6;4lA@Ocgh+M5-Ut$S9rVmP_m z?TbYhDEpgC09kU~Gu7%42E#}5LK1TJ?eBGmyF2Mjm@CpW55FMx51keAIBFXfOcg@uvm ze&&-P%xf%j62#uCclK=R^h6Vrw%dDd#+oqg{L7E$Gd%?(mSAc%=A~kF4dvypFsn+; z&CF-k(m+06BBwP+H(&nRtD}#;(y$-80MmT=2C?|B$A5Yw#`Z-)KIr>sEAci=Z196O zp6%_*!|j}yg1PaqA#BrSxHZ=91T4Tg#}INCvq~@26>56x4-o=_BW+8cu(-bholc!WRyw$9>kP)cegR43(Pa-(d|wn0fB{5=5IT9 zi1p#L(Y@u+!&<`TTs!B*g)65fFcPyqBQjxzrxFStF3z9(VtrxD;DdKPT`cylXC4_c z4wiZ47Iew)WORZGgQpIn)G$#JiW&&JN`R>d0Zu38TAS~^ z@3mX7z>C-_tmVmfn75dRuo5c#KObV3UP=LT@DNLXUOh&8n&Mlrm~O`dd-1ZFXC zaRfDW4YdS17MDPE&{9OXI3ibYsUk9E$&o`gSU8ZYE(W@73`T7Ly4kX^Yi5 zq5hdOP1$a+Ah5H@3a@~~Tpg(nxf!Ty+NxC!SKEZ#RRyjERii2&M6ys+wq$U?ae~5b z#nHTbT=~F14l_^vBfn?2AR4XqMbgnIbxGe4GhlE^tO|=cblg$qnfsa#j=Dm>|9bhN z9?7o5e3QxUkK<|$<*a9(|5efS0jQI_O{iCh9EP^y;(ua8m>ct~;g``$tdo#M3OjjT zZ$V)oK(-Y)m{0x1({nwA^TdiPuy?24x{|4oMyIx@EN-)TgQz}FC>1eFnM&j0C7WCM zk}RIw&)ZKv4>KeVLu3a)2L=9!F|m}20E$#00H~KG=d4ZyaTGWKofu_#f7UwZV3u`q zvvQg}ju7GeJ61!6>p=+$n}5hE+*lm2TcV zD~?vxTpCH6V!EidCDBYvn7^qOh>5}ubA33BPcLxVg))P&Bp8foq{@~?5h;hJ^)q`* zG+~9YUXSs~fV*BP5UQ7?on64BS5j?zK zi$zJ^_1mpfew;2^<~3swya!**cUyRT@+z1wvy9VKLByc#$?DRqEKvb>0!JFk@$!OW zmE8@1GK4gca>}_wxcn?-CIsDR+|>EN4?&yV_7aoY;l1{wjP zP9}JKt+8iFxwmPi>JJuDUWG!O%QWkfv>Nh=Ss35Pt0KP! z-)J3IgN#}!1Armf3^9=mas$${eoQ!oy414pL#3t}`wmnE*aaXNgx?5OkbDg6h}$bj zudxC2s{Z)i-(G)*dA-p0{D$>LQ$S9&C6@6IK^H8Uw1=S2z|kA0N5zvO7yF*}dM(YoNA4JYo;z8^Rh9EukAnHw@dw zvMaRv9D#Y!in(QRZQj_kxDVL$C{PCgE#NuJ3ehoOd+3kFqVt(mFnpdv34j!bCI~hz z2xq~^Zumg}7RuJVz@p)R$7|STQD`7MQCq`n#Q)7J9#+8eWbz3)CAt}`rpgem0$&-=5k7lk|JzZBhPjgtVzI5|maJHy4 zR%TURenYZiIx>rORp2)&ljI)}%6-Nqu^v+G_(H4AStiD!F<+w5=JFWR|YWr~iL zC=_K1mD@$f4_AO=fzxqXsA|dwSendYDJ%Ljw8n1Td0bSp|H2++wK|O)RqIgI#g$9O z3H6XVRP6KJhb^e{cuV|-@>QLkWgCvPEt%SV#oyLdRxeC<3}N27!U*xmn(^f(qoXEX z_!_o$QE_ogt+8rHUtiUg51EN)i}$Wx_rc8*t(^r$Wy~A(NZ~~KW-atP+zYuAUg%F% zh4e9wu>gnW&_oMEzY(W#pz(|-fW_ht-01}f!j<13H_#|2ii*t!-g89cb8b)bIU za##-q{v96qF8LJH)&!xmU||j%i8{h2CIpUpT%t${fhz(IxbC)M>E)_Gj=2s9&R|SUC!@ewLH5EF5Q1 z3pJn0nsKl$*87lU0*L%!)6iBTxr+9W%4{8dk}=aZV5zR z&AH5XmZL6{-Fx-gLmT=W^!%T$E9mFR$MRvQHEkF(R8-BgiSq_i&GA6X`tG)agW+u| zwXgcRGf^mlqnTohQi8ckBlq4GTwbW<+n8V1Hyrlx=;GCqPXcSF+GCL`ttMr0Z8#i? zEezK*k*_x|8Zr6n+A41Uu{tPK>LUIHYYuI*)3-6VKAOH*AC2hKEf8ihTEfb4MXC#? zy%a27xN+#p3d`z)_ZE{_W5f-W*B&Ur<4el|21x<)ox{<(UaJ^=T#NM=?5Qrd%H)#% zn%cBOCC@W;4j^94yh;yJzsk7^Vv={WJHWypVN;eqvV8SC+eO)_?4INhh#nC90p{Sf z(?BCE4*@OXfSM=Zm zlta_pHe9|!qA-{eW}i_HzFjC+k2qbfsv(`*kCie{#lfLbEbCl1Zc!!d7eZ7cA3Agrz+$hgZYH z1$?#6l-HV06M4>XtU@a$359grUrza}J3jsL^NHD;oK6SxCzE!2`?22Rd;WhvEB$|) z%?@_%2~dJIQ)j@6&an$HV)L9CKZ_oKnmH%%v-Bu;42|_3{if)GW9PpIa~-(v&6(k3 z?wa%{Tmr5M2KeZl8C?|p!Lhq=GhRyE1-3fULs+B-eAeQn>$l5GGYiJp9;e4tK zcbko~0JB7R^FwHzU~c*6Kbc#w!GHb}8)Q!XzyCBkoIN#r8`OW?16Q9R&#~Kb6zubb z_u)N1fd$GoK>8um0Cw=gPMiPB{hi1n2*RKf*=;z{nM!q{zaPTu!ka#adT^1^E_$!oryK-W1>pa13DGvA(}&U~9g7JbY9=6^XCE}gk9^XBXk zIC+AYo`sGr|LwXLoI5?&59gl2Z<~YeS^vwq<#SKMx!>S5bC9X`znm*(Y}A?AAoc-c zgLBX0BU&5qt1KiCyv{)b|C+fA>(0UiJB`73nE%6f-4}kBI5pRg-Z#7 zZxVa%;K76V*+Yj8vBy++EAdeF7~cB&>#yTy;RzkX(!@W={pc9PqyNE-z+|zT059Pg zy9vSQyX$xfIuHJ1VI<(G;Oe}@>=Uz35ViQ~xx;gZ@zroCxZv#LL>*B#`#3%`ciG%! z_ze014p#qh4bgvoAKS@nXSQQIe|Qb_DYg^rj_=&Jd0CV>1`PY-W6X`~sL^Z=Q!4_U5r;$1Z>wKAVLZKFj=;`7P%AKFp}*@4-xj zsi@|;`{wTZf7rVYz$l9Dzi;*mDG1?64vs()k`O{Cg@6c1jX;1#!+F7doA1rEk8(EoMC3}sbvaHNm>~^h z`!m>nwqH$1=w(7{z;~TncS*Ohjl0-Jwoy$;w-#1sZ4OOh4x35y$rI9AZ*_3hD*v!= z&&pp)&$1y9#fGpUT1t90U*Gg~j>+4kV=N9bSR9MfQqr*k>-;LGNx!msu#44W^|X}q zYe9A7YvfS*8u$}(@b6D8C0`=|^cP+*K4G-bGa%aR2Qhw-#;W+<*<9G-b_e08~`GY3H3gao`_4(R3 zwL|VL_uc`o@(*|w4>rskFlM#Lb~ZX@9kVC?SMPx(tXW^JER?L*|=;rPF#9ea*SjK{&9Hi5w=iTdIa0K zR~TyQ<-MI=(pxZLyZn&+5R!pNZ*^l`j<7D`)K_KeY+8D=;m21Gy~4&wkG+EJEW&Z^ z@4cP=(zh_^J$b*p|2-HaeLH|P{)aUdhwhW(H^K*U!bbRT-_QG4C+X-uZ08Ok(KOVf z9gC56AJb6T0N4I0ACZsz3D?SovEYCf;1E0SmQ(k^bMl~lux~enKE^_%^N;blzFBBs zn&@l`BbP=)wA$80T&h9x>+-Mo?{!S|UI4GaT6jea+#oMM4|np94KQyV{Xo`Xzs}%u zuRgX#k=MsCan?PW;D))F{U-(qQyzE8cn@6%A@5k<gWcwTHHm!}iOoN(zH^2yO*2y^%lGKT(eeXVaF%3w zRh;Xbg+;UFCA;J$vtf~RmNnstT|ARDVH>^YOG>R`TnG1ozB}ZXa^#nGKwmsK&J#I2 z6OLnOSFibMEg#p3z+VfYR~k1=W6VXX95u!FqFT;y&9XPmgBfCNFCx3~j*bN&=X1-p&WS(yP6yFH)wQt7Ir4iP) z*s&n9dAihX-)`wz_SW9rG4t4)(#>~$u|WEky)~arRI}MpsS8FmkS4d9zij?|EV^|8 zAD^{+5AZ|m0A%L@MjX-l(!YPp1LOgJOaHQdbLNQe%BQ5?V7YuJ3xXE?SwHDTWvujd zqm34brn>U>VN`dhyaT@f{Bx}PgdF1`V`w3 z_US2k*r`+S^r=tb=}%#%yp}4{KY1-xHq*SRb+5taD;g9aheTudzF3Sje`o{K9y^D# zh%47i?+(jL=h#`M{LfEvAk>2NIrz2ETbCjH#`oFv@@l-fa0r*reDHzvA3Q!oFS)LD zjc;2t7y;miYugW3w;!%=xi;A3Q5lnP2Wm)Y8pDX}$;f~`^7kw!LmuUkd5%NwhVrO< z?OJH0Ev-SMu@tv2_c~+{$uXIWxCl4*t)JP3;p?&mWUhV5%Gk$1tkN^N&GH|9;SXH@qO@>uo>z^d7k%Kl_oK4KMD2 z=KcCZ%wzC8mOX}brphUg$)D4hYtI>ii1%_wy@O zoR|Mte*XM&s6%O}yMpE9%R0}C;?v62F0K7=Arhmi#-eVntq_OWxsGTd<@0*z?+=j> z5rflXwm>klQ?r_Yi5N}tR@ z0ni(EyR`6qcuD%?C)7E-@xIUg!!E2tMeKIo4z`FD?a=*wX&hDUi)}1qOR0J2j%^nv zzpptj^pn>cRu~O-U{&ywTb`97x3c&N;FjyZU;Pe}&;yVJ_ z57B$R`kK9Bz{rSb%@U-XAb7- z4tX*%CRm+=tllS|IQe_lpZE!9cvAXIORE`wnKWc@kU8 zIC)ZjmlE)xl2VS?iL5M2X@Bfi*D)k1X%r)ud~C!-b5f)^9uhIQjyc|_BtcE`!$|ac zK_d#~q?$utx+J=2ImhOSlTUyx>reb*{z_WsUsEUrUL#^4$J(#9j}WCq><_8o7Ee`69yKs=u%wV`bMA7^or@|}TcS`l&= ze)s%Kx`=6bP|4#5`~w$8-U=L)7x1hrSN=XL3l?fwbd-z-^j)goPh_w)(Htx)Uq(!V zE2$pR8o?8EM1NRbJH#X|GRjfL}Y68>z`Qw@IEUDDx&17WtR-Qq)QgDgk1@Li0 zYlsf;e_VJxgZ}_uP%|-Kc`kW5r>~&2qBfbFg^L?U+BNp1vmzav6)}AnV#yec1K$?M zJc)3mrgtOVsS*D$5Fh`eV=b+H>+`6r`rE_3vTII`e0xsLJN$pg87<{`Ol6!q+Uvb~ z^^(ui|8SF<@Hp(%t7P{<0Z+~9AN5&FYv1}jD(kurhJEUFg8vV@w3O#@uU^i37@Z?! z<%HtDJO}^MCGiA43mO%19=aj7Rx+;pLC7;U0=Z?!u7Dc&nJ$<(wv+VIIDr$C`e!M49vs-9k*!N%HT+~bSI^2wUhGGN+VzChV0gy zY?|$^IdVVxAL_d19?q(n>Z!B3Q+3r-T`4b{hSp$%qD z;6(iIKu*r~Lx(JslpXZ>C4E5aoSffta$x*XGr;Jij)U(ehpM z7mT-@XyHGLHz;|+`62h^x$4u#@xJqfs|Zgy9@CeTZ*wpA9Y4vJhBkACP%I*6=7b)i z@s^L$$8Y%27jy90B)7_8=<&w*X2TuA!6opS(`{UCa>t94-B=VTzS)R*NRLWTfwV_%){Ekp-;&`gLl%pJ}V<7+Ky34(e`$ogd z*w4{>S#9br9~u^<+zH;YnnS74dub$iU0#w-kr^_~AIX<1h>2ua=0r zh(~h_u7_DDL0OG^(N6t7A52q-0}_mQ%$2tINaGuVv%Ie|zVeGwSKkNM@2qQTuT=bB zzFql#$L-5;#_iDkqcBG2aJ8Y(U=|0j2QzXS(m-@m}Fo;izy@_*(c$xCA0vI5a|SbUa2A zQDtOg+o&-A#0Qh>frUIGIw)lUl$5JmPUpv;SYsa4FedQNc&-1)??7i2{pT~-XsHpga z$S65iO+4%~qq%1ZEra#Y>S#I6MzoClMP%QnicmXW5od> zM{d&9!Y1KC+&iBV4ru!)52Hz;H2FUbMyARr&-P=EUT1pwG(Z|kbm((Y#Cl+ z!bQ4VUK_Q{CDS;=aiu>&eyGYYjdMiH7WhT{A6p{Z;TQNtwqsGHUxwS&esP;*Fx)QN zk5D1;e~xJJfAEWEo75m$E~5(CLIu!R#R992z$(x7{1}-xV{;azz%NP<9MS4^xh*sw zGqsP3(-HbBrJ_+a`ZGyrJeR*L+9;v=TiPd|R!gCilIr_}c5LMPgl$qE@gJ7sj!fK@ zDHRR6Q$5!LOAb+H!BTZbEFvIE(N45q z46e0dVd2>mvJV?(=B+i%gyFo5t}UawHsmMiJj*$Zg+1E|0KPWD@gft@td?IhkIY&4 zIy;2xBT(&^AMcl=6PndGV;D6BY&cw){Ztm-H_` zog<&d(#jfRYCC?6ck6qyum38WfpSp?Irh`~ABFw8P3f1mZgZqz>}fF+*X?Oo4Xb6< zW)Xi+;?r*HR(x7MeS`{$p^hA^fEFa~Z93PjG>jL>k>^13BhXwa=W0(`x7Zw76Jr7P zw9*5I;$J6Z;~GnF>!aK$?_cx-KFU(%UM!V9u}S5=jUAkQq;+fTAos#s$5L=q?gU2- zpp0GyY|I&H-4ZtCs5VWeq@j*Sd+Mcp*jUCAUfC?Bu>4MzJ{hrZskebBj(c5@4 zs|{V)0raz?aop|fWBzg6J%I`ty5zlW=mM*idvVQ;a~$P4Q~-bfb71rY7_Hs2)}Grq zVu9645Axpjn3w#0Ec#p*r;kOL>jL_SYyv7M|L_Tq1&Y%@ ze8OXE9_{J-hXsn>Klmk^`lmg&@{M1%Tn`Hrr+?Y-tLu5HwWseN7I5$1)3~N*EJp^%gJAyF{DjCHUncZQ2)=wl>2|!|jIQ%6<`y zA|~9kFUs|>2+O>LWvNe_1!r5h)=1za&XX;dF41m%5q`y%u#Br694C}gDSI`Z7RU3; zy4E9m)431e&p)2Md5|pm4wAth?Y?B|NbP-u`(3WOuOLRieOg{Ch4L~h(5QE&+JD3_ zYJ1oi_AQ9LDX%3XSt%57KXaCIwTI6V?4PooQxUN{zrNxNfX_t{{T%7K(dxK$yd>WU zPhFz>MexM?wh8x^MBSK~#$9qWqw}k9%$`!l%-N1MW*y}lsSPRglK6%4TL))5%9tsA z!qZ|`<&w^O)Ub&2`KDnJ{ivze)s>}vLN{(IAn_9Q3)Xg*O)gk$xyxh%n8`8w#V2lULtyd5_^4wpHFkZj16BWn2#< zVMzeaHP+#42NM0j5Fqc#R*H$kU{u~v!!z=p<5&lS`_Q=Qu7g&#+zBDxGzVP(a zkA+d$fTpZiUVjai$lVq2668fmMW|i1bJSI8U)W{%$M74!4>MTMmfjj+_$Slx9AvZ9 zY`Fo{&J+j94d_7WkG{Nx%=?qDd^R|q)5@_&vf&3h9GH#mKP{X#Trx&c`_U0G+!MfR zxFqd!mN}g*4x-EbptXP6@Q+d+pGRi2<_`kHKm0sa5(gSybv&2N24l~}LHhBjO=F7V zqfP~AgXFl?H6!9i99m_#w29$kpp6-|L1RYq5{zHkz_|)L$B#EfM>r33i3+d-EPtrTM;*w)UCUe?t3ZpxLaAaHJfeaYeIhwb@rG5?%-QqaWQ1vn5B^61s2QHP8Wp{L|DqpaQI!t8dg-ZEgH! zoMm|5eI90IIc6U=SPwhq%+C^6JLViQgdFDW>&j~LFzc{mc9xjsn1dBwI6|ed3jUhh z%Nw2ZFe~rJ!&r*y91g-1))WcmxtDj%!z{;aY>z5s8M@I`LXJ=kZ62n3&cpP)oA3>0 zEWg*C(mum>{o6Q=5$?jqpVfIl;jc0e&bM)x#8UHaGHl1!5_CDIUxP9a>UH=$;070g zjwGS-SogB{R>a@Xm3whrhvovWq|OB|1eaYMqz*W2Ymiz=e7y_|W1?wqw(0Syj=iD64 zdkeh_PtdKiHqtkSuHeJ zh*VCvmt|qFiiKgOC#rf&O$AGVB{@X$ESUsiGtzw5W76oN-w9i$Gc^Als*YHaB~KU?LUQnFkR=jRtGd6~SE z9h8#c7o4AZo^^0amHF8!*TX8#l29M-hH8yv2Z8(Y|LeStbAGns{OC%34!>gIu~ITS zsE(Vf4vv8`KU-xB&W~CUg0)U!73^|pv1w`R(;Nt2v0CC=$X+5u`vI#(uPa}XV;G;G zKH|K8U#4^T1R)+Kd?V;XZ#{1Ha7?KlK8^7mi=Q)mBF@A0!#SGpbq-z3OnsS};)CyhI|UPNhZCgOYj zWL`EBy_2}0CHvAPEQ7M@6_+lFbMYa7u&oCV#N649e>j#2`DjB}`tdwV1&KnEv9 z(1NGoSG5P194q*>C$cbh0A;x%^%J>w4iN7LJruDWJcrV9=Q$Ft)5FqvZnf?l3NUe# zbDe9hp2N3bXny!GKSP{1n+0Y%Y8;EdNA3X^5sY*PoJt09b)xBLrew>Mmb0_spoxy> zsH<=&^M_1!Cp#U$b0-*YBG`0PT7HYvFjGv$KF@JHCk|rs zrRCI6Dh!sEqxcA=L^MyH{h=1D!4Xze|0?})?32RSowu-anOc8_%6r*ab|*GgP=By5 zNfC)i&7t+D3BL8P?=#^ZwLdvh6Bx`=u^CLb^=GQ-P3QQa%njcjUE}knr3q8K8E&XkT1aXhz695k5SjeY5cFW(R-eSpsjbx|{6 zA{-Luq8>z4o<0gwlQ`G$lNdaK#OnCuMa>pr1YVXM@GPr51t#L0y2_Sz@2II?vHpQI z<6Se}73q&!-PaphxrED;&1X!_P^VH0y{PIUD?$T7@x~;t@ODB1_r>giEcgA;b7}}i z?;VXEBoi=(Zzl4g&p_L?J2A$r?RS7{(W0#<@(lHdK`;zP zLK<>WO@y0a8f3!*unitT5%eB-3iiSQcp3GrZ@^n{1m1^_;3S-aFW@UU3*W#W()}8fcec1p6;lof`IELNCGT1F_8oQm%Mo_YVEoJwzRcsA% zxou`!*~9Enwwpc4o<%;mmk@876O-a2&5>xTnV1yAzax`^@jHf2;9nhxOiIM#_~6JS zqnbx$;{h}AFOfd@AJyW`dDOx@YKZ=nqS`msr8?NKz8czYYk5AZ6`_`{ht8{cR)a|5 z>*rj?k;FQkNQd#nOij_4lj4c4I~WhC)4ERa8?j=ZGAh(r{L}7$oF>qDRT($+gmN30 zA6<+qy4BV0LHl+aIcM`URRvem4S};(Q9EUE-6_>AWQ3i~>pJDO1YGNfx=eo-S|=W( zr>#O7Z%QlQSjc?Fo>@CO-Im_XZXbbPGm>rT!M3)qMhB#f=<-^)?b;!>^nhBmz!F=x z|Ck;L_SsBcfW_dU+st;kKcznEVjB@)i zs9QHLHnvX6nC@>5w56LvZ5<2-q`c|dw{5aLJvcWVOBxT_?YV6!@l$HU%q9(!jK<6F zw+u=d+taw?DMLc*MqhQ}uQn0ek zmcW>4b%Z%(Xs0fB*fu<2dpV%DZM?fW*b%879)Mf*9iQD#pIjp zx0zuDr8drH_8tw#)NL61XRT@J0Ye&G8@^pxA);>}j@6ds>Iro)X?~P)u^;47=U`LR^^Twy@OD_2F4?6H<62FSo9P zt(frdmzh?(HM6u0t2-@hfL2_3nz3$S;dh0nvHu`{h;@DVI`$qezAxtauOHiG?AUN| zu~H#8-99+FS1+?;P@Os{;jLDNXBxtB$vwF)Y`viaCZ z?ZcY(=wZzLBQ$g*22ooVW;bHjbGu*#<4#OK`r@>xo;}T`Q3+weGs1>kexOOl$k=A1 zCx(Y*Eo)|IJ#ki((A2)+O_K*UX*}bWD6!?;S*BKF?Zd;nbz_&an}_*L3hOgy!@efR z&SVXnm1a#cuS^QJ&I%iLrrxoAVH>vgnUv<&{PL~*?(7Z6o-MR-`LiK2(t;CAt<2`0 zVNr|2(sM&_iM@sck{gAI#dg!Wv`!;OhUR`@H1-H@YPXJ$;uQ=ZSS+bw?bn1)&$HtS zOT`L#8!%zXTsgK?N=h9^vR1wbefVV1ZDZ@jiMNJ_j}7nQzdn4P;}ou~Z*j~V_()*8 z)9y;6`9fr8F6r&EmT21VkNG1IGkG2=dD|MoD5c#5(az zS0|nsg4~*8;C7e|b74L#g1Z3)JFt!;n+M@xcvM9;`{708aeSR4oA=-t9EVTfH2fdO zG#BAANDQA`%%5Gu>ah^k5INz)S+t6B5?LqKmGxlBtUnusJh6mv#7dEOV^i-43Nmdpo15>9O}nlSY_13pGDv>Aqup$d+1~u~ zDQmv1WUL_`yF0qEv99S!>Agt_O^jCm4Usz6BrfJ zIAR*ynQDxi0tZL4&>n*g04CDC+;>IcjAk(<(4_gswC^D31G0dMHX?zGD zBhvUBE23#%K?WF`q4B%h+17sN(PX z)m3Iv?kK}!k0$_AVF*K!g*1yHA&`QkDAi2lP^zk;jp~Ro?r_H#AC?Yd9MbRhFt;KA zM(?Gj1%3V7gkTI6SW>Ij7Q>8r7GvPu<_ndLHQug)7$p>JxNrC`lsCRO8}>qGQ1W$S z)|{~Jer)&3u)VLh&xY6q_PKU>TxEid#hx%DyNX~8Kez_!q1|{xF3)I&F)9@OOlMU; z(+>v1P#A&ojBzjlCc_lC6>X{rZ7jr?LieC)g`%Z#M;I=c;X~%&Ra8+NNI>m+sJOgqTvQrJ6OtBbUv^P&50SYkGZ zuWI_tj$BqM9PvT1frC8B2MqY6*m@JG5s6&PtVtyU2;&zsCe{yQwQNnsC&XRN;)&d! zHotA+FZg>6OG+%4P&60CP<0fr?WY%43$ka|uGK5{?2(67B3^(?6K5D!%jb<<$WOnj z*l(CHEJ7Vb3#9#Mf^KVM&CwQJ2s^@ca6Rj>v$XOI^Km3;RND@zu*#=NoY91!mP~38ly}?!wDVOwX7TKi8vtz zal%j!oG_csWech|QZPqwO+k29NLy=lo(!<1>WCK?`q6U9ai zB`~VE%LmSQt&-8gRSggVX06;bZrNSPb!j|XVt@d{XA{VnZSFkWc$;xxn!Ki(3KoQ_ zB1fprae*R5h;~X5Tvna~VF;HZjCV>AvJeww!xnf5F#+i*o`!w!JZPBUsMFT-bF_#! z%LHa%wYcn{K5M`&AxKNn(kVM2OhC2}Bs&lJNBz0R-;g6tl;QI0CsVQHy}03{5&vmgbw> zD58LCx@k`;TfopP#$>K8m|^x#Xz^)q$b*I(+O==c=nXcqRrkvulnOm~l`qJ{R{<4zF&qGmp-l` zovTdI!^t6gVn41fxB}%3q?aH&OVUe_yrB{L9XI86mZX;;d4pzWspuu#eM#n`o#kT0 z7Rbd}gDb9nTu}r$NDZ9et|JxV2y(T-iNO4lkli&vqTD?@u6!WjDGymy`3R!w=q(y> z+lDA4b8Q9fkO`p^bb;>B8_2eSd^JYFSd>bTx5iyMZ;ef=AL^s9TlGWL+fW`ueZ{Bf zt??y%!@W-hZrc#Z>M~6}5y^EHZCO0GZP0WUgV~KJpGZUb#3T>-#J$xUK@=h-C@XJM zK+yxafT#`|P0idkp#s$yUQI=-mK9}n5k}nVR)Ke68IxHf&nDC}fg(rekrr>oPoDNaP8X z2p6gjPVh(T28(Llpm0@?bwiSB-Ef1-RiW5G&VV^^CoE8HAlJeM)MY$?x{Mw07(A}( zGKjb0Kk#2T3gq2+(#ckF8NDuCo}Iy5pAn(+>?DbUqRkk{y)N86JLgt!oL~yBi>8ny z+fO2sgtD}8s6hrQS4Oobn5bvE(5kgxRK$SB_072lON9pHb~-e`aw`H2+~bA@p07az zjD>yuDr>>KN0WU5B!P1zKPdqL4R5cfhaxB*fim2)qo!7a#(eLKwJybB7SBzaG4 z;&?$}%6<~uS)SfSyzntvC}<4XrPMi8cm4&`I-nN=Ixi57BswmXgZ9DQZ?gtExM;0i z9Fo-qEp#!;7w_*HZ_GB=Ycgzj;~-P+ni|MZ3Sw$_ts0;NN4;0G}aJxEDZM)Vw><8{Ex@fQ23gNhat}kH)JG>K|Mt~jIoi#u2cD%h=)PpYf5KR ztF>H#93Tsfi4m>PCnAE-2$2-hC6D+HsM>Mn`*Nx*#BGujG}Yl|j)++_YG|t`IkXqf z25;mG9-XLUg+sN218*0w_e-xU3`czn4`|`lQ?kH774p0-okOF#M;q3g&CRyOoL$hl zW8GgAkwY*lknvd2Rp1R)b+0|Zbzy$^aT z41mGttx$451%-c+;z?+JjRbjHk5{2Z6D6>Lql-s4fkPj-hG zz#yqZd|YsSb6K)16>8T|fl`5jNE@n_W}&(W1?mRKD+7)#h)D2nHSE~QX}K>I01FC7 z1JVONydPj&MJN>}__+GVl?)cHW{i;QHzRYyi_`rk1-$m(EynMBA%;SORr#VVIA7k5 z3%)K~nS2RVM@E2gjfj7VumgEIws(3u5_TX@#~abpaU7QhEK?&=5hvq=Dkmdp5Dswu zC09hM6Fk=D|G^o^fghdR%^{p4fv`hM))qMuv{+Px9R{kgsFZk{Q+d2i7k0?Ph*bAg zZ~RanP5NS@5J4m%A(9J5G=VboWT?RrYJ3b!P4vwC(K7?Hre>pP=v2V|ne96G$K3MT zv~B})+t+}Jns}JSiHDh+zNBAAzcKaJOdmP=hJcLPD>7ngk1_VC0TpEv>$0lwIu^|z zf~**qqK<)>o;SdK$m&Q@E)`Em#fnk!gnWlvB~X-0P1{gbF{n0Fb5v2#>v|a?3o}_x zq8S9rJ~)Y^8Fd+G3_(|@K-q+w`DWD;M!1@j zJla$WMz-{fHZ>a=qwlWXc!C=$m}8RSRa=Du%^K95Kgnsd5Q)|a9ySB!pqz@a> zCt?eaGo|=YQcMYrhl!*QA0cn!DU?3^4i}KOk+`2Ju7t+h*od<+D0&Trw~=B}_GJUu zU}szjJ#XW}>dwSap4JdGU_pM0|kTRkR{FQF2@sThtw%c>N ztP5Lj+=&TDUz`@zv!~fKDj_U*M%a+DGJ&YU40YEzF+&yckwDAI#t`9@DU?0WbB+CE za3qosVe~BZ{az;(psYgt0(iB;BQxn5`d0MS%sQW zRy^@@js2wXj_`r-k#IsdCHznLTKHBtC;TM*Cj2Q}6mrq~f+AZJh9K|CHV~(JSN7zQ ztq1W~5o3V(n-mUcl0B?Ni34dR9_Gx?3JZh6+VmzI=5ei$!zV!Am1k<=L?o2~en8Cx z2A|d(DdUNd0mC_zoryy}y@eK^lD>UgKVS#SFxquNSJEj;3ISYBeT?p&6cDDNC>l0b z&+))gV=$TDU^3Z_Px-P`D!Aa&3)2wc&D!BZe5cQ~rw7~H+WK0p#%l~6I)tXAn+KL4 z+;ul^?RTkx4CTi7c=-X(KnuoKO01>u>7ALk%+tov)@kI((A+PK#vb8K z?bh*13x*FYmejEJYr?1J+3j{iDu%Pn+kgp6=E||HQc~(TlC|>rjVIPsqCErJFl-dU z<;mtVre=acs3imnb%pvu10hrh7ovn%p_R~1NDw*+U4$M&AEBQxP#7W%7e))?g$cqW zAyb$x%n;@XcM1!IrNTYJN?{GQw^`UCY!kK%yM)Jur-gmO^TNx*tHK+?+XdkS9Tx+| zk?hJ%6)ZU*9ZRJfYRD)L_Bb}R}?xCFVJ)6vApLo-){%8# z-C1u{A3>as<2g4paXQXocQAz;dO2Io*0JnrZNESpo~Il^bfZ&tJJ4|}JCn3E7GLb3 z+i8{ESC1a_do34Zc-x?TR8!0=BPoQolN1^g!I25wpkAW0*YWi&A$ae4Nr*?6YA{1Z zM5fF~*)SBkwrphySp{J>TbO?Ueg*`rhAu5yTC6)EII6vWSi^>af!Sb<>R?W24bb!s z+lD7>F9-CtjW67n(*(iyeMfjZ z+T^$t7$`pL1SK_KqTIlQC&2^zv*Z4G^Ac}vH(@|Z+VwX~9zHy(ZxZGtWX2Ai^<(nQ z!-vP-7&Cg-`Q$zKk8-?GWTAvln2{S*a#Z2?dDNr(`elC7b567D4{l3&cIU{tV-JG0 z%b*Rrx^{l@{yw+L?81ZRev z4R^qNXY9)L7>nwD&Lq7P_MoMtJ2NC%N`8zoiOceQ(;7L+(|1LUI4+P>c=i!_HnSKEgr1T z@L)w~HbQ)8HXyW;p@s3~uy%eo$j?;+9?8oOlvzCNd^V29%iH~;Dylf(Gr|Vy?U9;O>}W(1B&6ZiQjUzx$|)2 zZN`CV@~TQyg194zs^Y6rG`mZ(mYApW)KH>bJ;d3klxSD(o*Exx#Ozb>1$?bWx*{(P z(uy=>jTuGDZqC`KNGqZ-QInU366q?PN4mO|&17~qk1b?N*}bS0d9Zq;h(cfE%T!>2 zBoV}rsfa>qWEEr`8<|8-9LhI&!=f?={XCuVM5>D&=4c=9_?N#em0^YS$M7+0?!9s7 z2>KiXJu5<75#-}mAfl4dg`q)gyCDNwH*e8)NJ^XLHFlZBvCCvF)=j*5+?eI-Cf+iB zjMTDPN-Qo6@0xr=x550g%J5?wzz=F8dqjQCk*!#1=8u7)*k;avIZnS&vcK4XI*|wR z#lRqZ@fDoKxSBs;T+KgtTulcPcwEieD%uETVJwoz=cc$9gf_?qLt(nSQ5RQJLmP{# zH_Ff~Gt1BHUK`7I;Mj#f&FeA8+V?cAti*6@Tg9}tc0$n_)Qu%$B2QDadw=NI4 zgKr-Yx>^k`z&(vgcDv&zOo(kWDnV~iM!4V_U)y%Gvcm?3UN}nfR4)ibdZ7jvj2#;; zR-BTe3~<3luY0#twt+G7p%3#RXN*PeX~a9R`sQgOM@Xxy92OjWIE_c$p+M zATH}AD(B==uoq)uya=y=J|@Pe$Y1>>e1lShA5m)XJC_$iGd65mx+r9ld8Rn5&!jZJ=9h0}tXo*Pz2VqmyH5DB zRaD?Y(H%7_b+fNR+|tS}-vpXMGxU~d3-OQyouM1_0%Da;g`wyzk;eD;lEtc^nArbv zTgCvs%UgLItft(Su?@z-(qd?mEu#_>dkjR9!6)GQ7NR=SG%Fiy*!3YrnUbv9!RO!a&}mw|!V$$;Jn)ZnZH! z2=U-vFrF*9QlUbG2VQs{-0dBjSEhNRo7q8Cu{+T5J$T9yhJz+OAkK%GI-7%)ob%y6 zv^m(unW3J5r-8Vr-{o;CK1J_KimLf7oZ}LN3*?K5b_XslYAa`d&|+*77d2TqD%=mL z>_#?f%!IKk;o%8hJd$<|hDyikx$VOdEbDx0_=IzKN( zRg*txajuNS+fYr+7LB94i67dOPW=T<+aBE$|)?SvMe28TRoxS?J9294feBU^P} zRmlj#;HM%8={aI-xSDkrxn(GQsCcG^v+gVt^3h5ZJg6ulfp{7O;r?>unS4PwD7+@T zDI6BwMJDQxg-?Xfh5r-Ia3<=Xh2Mn>!asro1Q5Xt0o>O?iIjOATo1jWFATuwm^X5% z!vtiZp3mcMFNf8zjz_-Q%HwYD=Fu_t1MyHRb_<%+;V+f*Nn|GG$7-{B7#Y*X{V5fe zNkxaz1tkqy)GI~OK(-1~Im@Kojb(BZyPrMCwzDVMi|jvF3Z5XVK_VQW$dAGG&77;r z`@42&3?99iHV}~m{R^>%s0`MWY9=}sv#*K?jl2A;B2Oyhv1;@zvch z#%|ABLy0w`ZL^!(dep6(7aLnAWlZ-s2inrjp|%bNgE7L|w{P2I^Wnill+ZxiAtim;?stu2Nb^DM@|yUm6+1(;BP zBET@-!g7tL#Y(rDf=ViRshVq_s~? zwHSVh3$J%u_#o?e`>>`xdKh#62n`(>*2%Okj98}&h`r@0_7KN~y^tA{eBGEeC#<_4 z+r2Vu@9XWeA$Ea%u08LSLI^AKPPmIGq~0aA!tj)S5G^+J@M_4(p7qU^U711<>FVeT4EBa$%N@J z17m)ZTqGN#c@jqiFW1nE-Fs@fB>%&4!kzif%z*>R{np?KdtIm;AT zW+>W|43^2Jvl(m-#`|7?EK~PX1F1+vVua$@;ceIEa05&X_eJim(JaPEEKQZlMlRw_ z1%g-e5!6Em%*rypMj?tYYb_5!hpaXve4+GHGmlemK= zcC1yaV;tlTE0tu#({$62=@!icwqk#Bdm*=R>8P^x?wisj9|#3HSF&*A%9e(R0juDr zf)IwIUX=Xi^;4#2%V^+9kaLwN9zh$=&E+T)agV)mO8A0D=K5avQTRoP%!TNIfr+y}=wo#Cz}Or8VGy_L z90NB&2Hb*d*qZOg2GpsL^~HAB#dRvrp*-Yecop7&|AG<;{3MUdMf{ZceK*MRq7~B^ zAFfC2&<8mm2C<<|hRR#mG!;7#LnUE{HEaXBk8NQOu^nvpl_U{Sg$-UjKGD^JNQz>d z28<*yAxN&8%%Vu0oC~VybF47@4Y8 zS4E+SA>5}NByX>2X;`E}7Bwzy`G+?J_Gu%YtC5a)#uBSc>4@PAh0N;4Zb)e*-LFVS z${WwTEgTizS0jxU70(cs83rTKM}@GAA_bX)(Zkjtd(~zh&tnHX1`1c^3*0C5O^#(g zgyW$2q@IBs9oKd+mxB;jW-P}tiL8?|f>;X2G9y`<(?f;iAPQIJJ!}{bB8CsZis`yh4z9}ib*{{bp2dXr_Y2*#el#lACaJyDV+Zr8ETIy|SmN+@b z-``#@BRM>#Rlg}?YqvhoDa>XM8!^Rh@3Ss^-DJDne{tP)UQtd(#2WcfI4*oDoEE-B zE0*t2X7e+~Q~yh~VlhB12!uLd0V{-}?uYm{TB0ROFQ+Aort_JC(aR`SDp|5@Qqj(% zup6FK88{BYYw#8v0g7HmXh(})CNeX|OC_#OvSew(nZYSus^*Q`9W7aIV8jfr`OHja zTD;VGY!SPgDe+PjOO{92F81sdhI06ue_;X?56>76^w|b}J{`BZB08UjtN% z0aRGHW}8xxK07}OzoIVbZ;ndj?c`Y255QBIOkK<0ByqYaaKaNY>*uXH3 z`&^88wit2A3YNvzvuySN+lCglyV&FG8TQhZh)wc~T8i#=TSf||qHu~86ojnC;I_ny zr7H-eK z4mv<56|?jMiU?1fB;#Qs+>F>|G29Ky(Tpl}O*o8llw&AI`2?9v|Bo}7 zQv8$O;ezTB)PxbMS##7H5qoJT9ruVLM@eJj*+fPbFt@YW9I=oEjG{HVPp36{mhDG7 zm{+Qz?x@5VgoGu&Ej3D`N;1|LnKdRc!BQ{A8WN4LNr!%TyM@CTr*Umzh=qvB%rQ}k z36V*0_|eo%!P?NcrwM4PG1dCj%k37+5VsIZTWu`$>NvWjH$SFIHpF!~4^_UK5c^MI z$i%UeE4qQt;gO8oDPl^C9u==?JbnoI%{fn9jJdQVE@c^9sFZ%d2L#^ zfd+Hgcr{;{K15Xk*%S$>^eyj*vLAPsUz7jarB1B@a2>>7e~q}mm?plyk&R))l71ci z#?)IgedOpH0y1i^$cU*uCNH2YqQG5YUPVs4Q`Y{_<&SrWM`aJkJo{DlcH&V{bVo|e zw{JLm`!CGJ#Q<~2ys^eLrZ$G~8n{!}^rWMC-JV@)H&|$>ME9kuANTw=YuJiaL&nz&e{_C> z2M^``QGF4Q_JNpx7 zfC*y3tRY6LamBdRxMs<2CIxxyhcePok-X<-l>>$}REoz_md@kpG4=#%sGcLgC-!~~ z_9@7nhYNEmR@$RPt*aYtHJMS+!#QurCa6ZpLx_ibyz?WU1hgGD*N?9OKRT|Mas)qJ z7u+egr>E*IMcS@{ z{E6hT12ZKJqws z<7Dxs9xAH%rZ7G`j|*vcr+w?kOBvDpjC;EADrz-8ILbKUN>K;2T3X%sq_AUq4fn1v zb=!Dvf5SSn*|4L?gmwiP*cg|2@YUtcFFg~#^olPAn7In7xq_nqRRyh6aM>u7y7A(w1ubIqiMMh!O9l|9lW0?{G_*OQP*;UW$;`-nCS1id=VRqkML}tggo%FSRXav)vk0Q3&meAy{=PI$!0Ti}G3P%Bk*KKJ+L* z%iJ1x;mz6EIGp1>9fy$Zz#Bwy!Sk)=+< z7xy}uT^?kQU5Pj&(kD?Y30ZuL9_U5ABuE4K?;=f&L6b$GnJkGrYGfGRgAG($83sG! zPAdC+Svxg5h8xC=0^G&{OX9hr@%XPU>?+C5{# zrlpHQCYfjEHlGyMr$)??6}rASzRb640HpGCB?`N~H-6k$r>3MUYD$t-UODm$x*cZ2 zT#O#Hi2DZ-=L-2YKggp8?cth|4?Q#`Kf`YvhvdP(jG_nmBhS8tSy>})InoRn=2|;B zSIBO*Kk~~F3L#IS3^z}q#cUaJLTqgxp?>5K_#6HKhmIAcJ|YKVYa>>a{1JKva<;b7Y@Aa=GK<~8Sy7fD zTbm~<%F}3b`s&qzCb+YO$*hvOk>`c;z!``KJy$4bU?}AW z;f59ze9(tJCj$G?AqnLo5oTu2?@*K9G=i?CnK`&yIq0lW$qc3t$6>_`!?!U^l1m^& zm-J>ZQiwpvTeWH{;mD^`5ubprEn8VaRzaA}7Umy-p8)}@p-YRF7VAz3j%x28*05n< zU^ZBzI+zn$gQIyxt6Urx4069(-G*k?p0Sz1W9IJ~PL|u%*mmg2_pe0T4*8#s`{&I| zyt&wK;qmfLl-|9 z7chIO{8olapmO=v5{D(cs;odN)|RxSnC3QB9PC22< zLr5<}mZSdc8npYM$b)3}q32HN!n(8G=u6|0h}^^_A{2R0(aS7hF1?J#xc^iQqA61J zz0$}{%pTyy6kHcW9VKBL;3SFIz5qFi=ZdD1E_=!&@UU9s|k{Z^2 zP55*Qv1~}Knz5A8?`2bk#X5W&IcZBKe<4=dJ769xR5dtjxuxn>RfF@C2Ua1ze1+%j zM=p=KKt3-u5tH=>BUM`V;)zsBflR;? zvDqBUV``_2>Q;Ou&XoX0N-8}O|ImRL$3s@D@ft&i4xuUO=7B04xq{qbYEVaUJ!ITb zN6923(vy0u0&-~X7e-@`@TPX_cm;MCKDaW#Md@`rcL|GyWx`5fjj$d)bRQ5N5_Sl? zggwGj!d~Hk@RIN+Mbrs4iX>Rqn7kNxlWl#FxT`nWz9JM zeS4O`Iy$2eQd}MvyNDK-XTB~jPd0nFawH)!Ns&R3LGdx%;M0qu!kgeh(HIo;`tGY% zA*u*P?GRbisDe5d8(y<;dsR(9Q3kROF5^IVD|FvQAqsi#Dlwxio}i_madPTj0K*HB z7jS%i(Nnur$e1~s(A}Fdj*3j@3UsoKniJ9W(YD9CM!>+bLmoceZH)(g*^3xg7REk% z`GpdY!J4MAgalhkx-sR0Vsn4UQ@3;ujp`n4SZ_8r+ZJgtQ;u$=Q3jw!WC>zkY0&v17x<#cjjtP751QT#1JdgOc1XzRX81KTtRYzNuv~ zXr;~yg7rr=j?oZ*J^Rw-1fn z;;rG~W5c`nuMeN+IE72;TO1AtzDBU!X?LZCck5P8rX}{##_Q%Y;xj8f{+J`&DJ-l+ z{6P_rpLRyyAv=?!YV@7Y;D5+%c9t`{{(7b34{diurGpWXh}9f}ZYSJEvS9O5+V(u` zD|Bz{R~!Dw2M@|Zn&AtjHRRU$0SsJQ$sh#AR}cu1ta{|pnKkMhF>7|jwbG{Qg+cOObOHwPLZ^`zTE)23%xQFAAjlyPOi?B`Dj&hL4g{Osm!t)qWN0EcPBYYry#3SnbPxxB+mUDwp zd}76GMnrB9#p;zJ6Sv|L5sek3FARWG7=~WEBoWDgTU3Uzxttwj8OGIF4eQ|<9#x0p z0RBgnhY-WqXPh78TR7*&Fh;S81Gt@tyG+EzxSGrvR~5e*#Y$uvT8YeO%PU6)q9F;y zATDc4Ul5`+z#}3tqIj4^d66d*QN56X+DODdMgF0^=4;lUWW}nJ1$dJWD0$j#Yu|3S z@2pmcEr*Bgh}M?&t(;b%oU=)f-c=cZVI}sD;QH2(Zcqh?;ES(Z@rEy?Hyy8wJsjKd zUEa5#<84nVhWwWNc1OF}9J9Uo=Tp|e{KA6@mqw@|z2d`40~Qrqv~jGGp@cDfQbH4> z)qg|ej>c9){W=Xcm$zWU9aEIGG(!wn1wWyH%%?!ZlR^wS{a56|g!NORY|@27Vg{E+ za^cegLryQI03)U{0mI@{W84%tIGTm_7;FGAm6`0K__*OGfiQz&sX?B$jUXJN5HYlb zwh+&G#1x*70WcVd=OYbn;yRS+s;BK;7>SQ~J|2cg;V~d?b|n^{J8C$M@{6xfesPW& zIX8PZ9C>d3JN#-jckjB!(hy&2lRTR{7n#9c_9~LR7Vgo3|FzqVi|wX$X{D1;_y~t5Csiis2v-R` z$~wkxVKNHeyroeP3$61>CI<63zrJ`&31^Tut`hV274%zqOJ(&q4w@}!4wp{+j`E0l zEQI3>%|;`Rb?_4Nm%MS62rx6z8&_|mLGkalvE6LnRfaaay1Yg^H4KGpqBXF?8d6nZ zhbz9_l?*`GK@Th;B^wOJ2y5TIZIf}AFC=uYu?C5hD-DP!sYnEJu2e`OFLMVM-x_oO z2n`(>*2%Okj37V((vKQkQl{h}8sTYt<@1ecIustG1q$L-cWF>&a7$8>f+(yZ>$x;! z8&I5HB~sl1?qB+Q)Sv<$?Ebt5oB zi+jYnrB@j?acK^U1Vhk@5{)qN?y@i`omW}kIhz1j0BpG_el2epXLIFsPrKqhu zJX3s%JAA86jQ#V;9&%@vO3Wd>;Ke%P`C?m%7T?`OZlTF^;OI?E0347BshU$ zu;_Ir%Xkcy^_-1k8~UB>(s7Kv3WOGpU{tqn(BiWOC!j?E7fo=v18t$Yy`8q!Du5I6 zS!*gL8p_6>Ps>qyY~UN0)DVJ|xd&_2zzL_F+x2JVi4Np%yx@^ls!wYr;{sfE5EucI zVG71mQ6vjWyf)(P+Q6C2AA%jKoy9(Q9yIIBqsT{k3{GO)*Pk(F+h53mq30yEpccf& z+02QPv@P0NbY$0Y?ykOQl{uJ^tp&wYnZz=g!rgT@TT{)Y3OaFu60DUB6?C|RW08`1 zpF(}I*U+px^T&TJ2e{xAKzLRBR5e`&MW+w3aI&)KD>^z`Nr1x$eI(et1*MZM{Bh{M z8O;j5ZHvjcjTCu~qzFXa9nikowl3>gd!XH2Xg#%kG`j8BM@c3r9ZiXKJRPdMti zhk_M9EwP+|C2oG(#4S7bO0CKdKPXUvJ@2lPaU82eYYDhCafV^FeBRil)90#UqOAN& zON$}=Q8Qstxy+k7Ej5!c;;Uk**&ha>Z^uZq)Eo~KJ$|anqeUDS_XF{0DSYP7!hU!W z6blOCGgsoGe9nDL^^spSi%p7&63W6c@@sR}3M0QJq9sLFMiEi^vVlyA{Ho_Qul5+C zKDWzkmY9&_jPqVL0K$hBp&*%nVrE&UR+&{;DG@^m!bENzM0i^LFvQ)%$E>;c#-StV zbI9daN`)c35?06y@(T&_94KerRd#lmflhhHj!MQ5rij>fLk6^N-lFZ0ls3(!5!FEm zac14bo5zh=zHZ_zEN6;Qq;}KWT#GBk(^urn)Q3TJ@B55wl4M$Y8(!wc) z@P$;WnjoSEN0c3okTz=jIcr=If`~c!5z3!c3Pc8rN}C=i(5qQ1(!wSJMaO!y2|0*cLXOr&f>%657qPq93LZyo6MFzXH@34~ z>~Z!q+sB?~FSFO!QFfC3Uscm=aQ{Y49YBnd9;yZ(Mg&EM7X?S=P%JA{`9L9U7FX$^ zAQyMfREsXaIuzD5w;&~@(~A@mbWLmgie;~;N{%1wl%7k%F||wrze?9GH7)4t-zLOQ z6k$oNT3ZY==2?t^cbla)#bdfCf)}ds9#1uf#^0GY!$&W~_sRy<$S?ZvKXv?Cl_Qqa z_2j^iKd5|Ni_}d=Ou?F`+XqMY>ScBes#7N=yw%F^OhdTcp7$g=pc*i|X;C7_g6xxl zg8f*K(}*W!hVO9niVa8J33p|P)LRR;Ccfjd3wiU)LPz7nd6hkjBAUDnxCSkmE627< zNvY#V)`-e0)5^m**@H|&ZlEY^%35D@0GYQAAp`kaDg*fm;S@5Ee}xR>-w8i*2J*j! ze*_0-AlDF50|-Tg6pena8Ut4s=&mB9AsDA#@f+C!WC2R-pU;5as^eX*lR1f;TVKK% zP`p}ygTF8uTd>NW5yhj-w&Tp>omn^53!|~6uv8wOehlZ&Q2bgc%Itim#HU}wHn42A zg+0V}u*cXF>=}$Q`vN=2UT5!AIb>84UhvYwCB<@6C8p5B0dMA~MLkLk-N{t=CZ_Bdz59V$_WZ;0eo zW0c#gxZ0sB69`p>xU-Ihg%gg8eM^sq3ifv?BIGGjXUFXe+fW!V@}_Dkwgb!+27Z`I z>anqmWkH2;dgSLFl}6`TUgalju(#>!Z3(kEo}XM{ z7$tO|v65SnX_PQRGibq?MwMu7z2FAq7bQk=vN)NoB7?g*Be@a_Z8v~GrCAp2eOAn zJ(nq{u5vLqEl>X4nmWvPUh_8w)*-b1E<>?I%|C__XA6kIqE z6%Y^<2W}iFD6}_x?@4YaWmM}Q^y9~m-rU^W+>?`&oF~uwzR&YSa5+I8I!w z%#wYOF&l2tL&jH>fx29VNc@ZFp0k=<=9JPNb;_%zv2aOlPRm@hpnyNUl?nTtS($qX zy$Z^tEW;&Vne;ML=rYv8c#PZ%T^-^%tUlKd2il!vnMx_kbz!wN%^tB8MGRVsDY}(W zn2h3ODrh^48ybvM*8i5P$dcCj?CipA25*r3stoDhCzz}O0LNDpp8ua-L@qqAQXxa2B}fK{vyiqwl{$h0V)n zA-965Y<-8WnC|Yk#}|C_=H)5{=H;gLn%7Q`=I49Q&!sRY+qnvO(g&xm__(ST6#!5D zCWY{5z7BV6)~Q}>)(C7o1`o?<&0sOhXvUV_ujSoN^$xLp6Q(D3sC^{ByLzhkziqz$ zbKu{Yn~m{RtEDTdgRki5<~$)hp?-&s_1Z_3&%Rk2ZXu7R?7x#v`PZjxarR%Ho^kmx zW2V*>%Q`5MgRAT8RRJC9*Xz)#KEC<)eLo)Pto`Vj`q4A>Js4>7(YR;^0DCOH{h2z@ zDcA|TOPykzz`wK<=I=+mJ97C?&(X$g+l4u{3%J}IT<*qKe`CHb9UHGl6Z3$Fmw%oUJbtmh9n?-(=LOQnGzz5<{|F55< zQ823jjRDaj7V0h?ov1s>EU;fF6m!o_GR%F=O>Dc*82PqkEQ!;u7)Z;=d&bWklVstbnSOQt@M4u1JIp%IRnWATYAe zq=yg) zh^Xg60dC2|k@tq~j}sVxhCmMfD9~@3cn=Nf_wsVwE}3iqbD{X1u>qJXP^;%*X1N6y zsMV_pwR#QBTD_FpTqs83v5y#mQf359si}BKk_WEAOvZ=!IXGtqF{$KYa`AH~@!Z$k zC++*>1&VrTRA!L``!oBaboz%RRjzcvfbHu$s1~6Xe+e7hh60SJg1#8n9%6Ffznn!^ z8k_)H{HjM**&0!yb(MtleNI{43E}19T&mf=FAeb`l3v*S;`fJ>8-VZtSK9hSf3ar& zKCwV&lz}p#F3-XQtYUw%$qKOi_oZkBC>Sxv>#b-9+HLATzl%GgK zBpT8Bhc#L-t)K}Jpe7FP+i?N=1fV{zX+!gLu z?izOklnuGNVg=?n)y;IAx_{n)W#2PpLsk{{6V&os`2!dWSj7&QIZpY2Z)Fe;!QnU( z=hwwG!p-tj4z2uw0eA==fk)%bi@&>_~}ZK!|heM$vFA>NHYizN^EGWSzxf2f4z^Zzn2zz3RhXzBkM2qWIi zH*^Mv%Hn;l8IRD{TT|0KJ5cpkoCp^a@55 z7)HqTiD0gj6-|r~kC_s3eVmICEN|W4HLxw6mB5=CRE|HoBJx-II4=L&k@|dQeAxD5s1jJVPG-7 z1|(&RP4@2P?H!9TP7x9k{E{=|l#{i+JLukFw#y-Ea=TjSH`vVRmNi&Jv)Iz&5jd-! zS0_iW@T<~*3^moWdcbxT_1PAw%`$>NFSdbP`fs^?GwcY{vlaz8R5+bq&rr|P7wimU;m~CI9s5- z3;buA3t98ZE=*4uobD2Be5EK^&OI9igjH(Vud^Ppx0=6qmVdi`Sy@R70v7bj%2Fmd zE}#cfw}zj5ps|Xg{DY+`9EqaM`i0u4K4Ka@xsKPl{DYORFvoPMT$bl~z1_@S%yp@J z9Wj4}Ty37*yoKEAg)({U1It&afFp3>>VM`y)gH6zg&w#MF33Ji0|%=4c=7)SWRYL8 za7RFKZ#JQHY8?=yF}S-$$Ge3F=lV_MCS~3^H?c&tM6sYLFQt(sM;3uutf;a;nZ+Yu zVG0nGUV`I22?@T{9iI4a{P?#*8n%-Ka}jWM=>;|JSn*&Sz8yr3dcby;=)M06s<g`AV6k^Vqa?ws$ixG;A5uI1p)&e3F0KtSh!TFSzJu{mb|j(!P% zD#r#3TmDI0fu`DV#j*#M4_TD2sEDG#!O~J8u5W4zS-O8#-a{^5!Kxq@q9u0c>s+2< zFJhR2@f2^Ox6ujH&+y6_s!lxLPu$zg)H=7gJ>5 zOkgVp;Gwu6Tfuyrmf=-+{r?AKaoc2i7tZ1l#DJtqlh1ePGCF&9sdI=!+7Pt z0zC>(%6BF-9wCr_fZ51-`+tN(j&R4gH@SDX6C87m{Dk|A`y$UZ@;Y~uyFG4VX){>d z2GcfVxfQGua|W7?=GzsA*Psn{*U0Bg1ab&5ZHD8frlG}WFsHm%_aRx#Gz{)nG* z6&QRvzoYkv^4|3v9kav39g;iM{o8`bIbH5#VtwuIzD)e?J1{CYQ~rL|hT%{kQxpYT ztjfQr7L?v%pu`wkAlvid47uzp3_3{a{h42vK&_Ee1b{@&6*%CMyP$^HYzZbguC|U#l8~W4M2oH(@^4uW+w%ZvkR?pZkbA%Uv)L z%h%iw+|OLDmlHOf9vzSiWO^{a$9y$r#+-COo$Ym_GteBU5n-IkO0*VjM3zUwUUUFB z6Xucd2B?TRDK>P^GEQ<`IVz_xEiiy`Xl7&FypScrx}SEoRqiySU>~AWn4-?7!e+024x2~4s zdk4@$!$x^8dfNL1wV`)c7w?E7d8UsLi>d!zY+eXIIy@@1c|`dNl~a==%iA&@X5?af zV?mGJT{_KN(4$Y+PPWbvr=XD9kUenV{PZd*DK7L%bb#~VfR-Lzv)TmJtHJEPsUzpp5*szH-OBuH^DBT}5I6JIw=|T` z=BmSt>`36j)3Wa~t@|LQfZYd0Ome*m5v(#N!aULt}Sm75D~R)(6G$<8|#I3 zGYsQv2mgv;q9gsp(<3&FFXtqx*xAv+p+Szvz9|P8*2-^h^8K~f@>Hyii?-VVg@9iH zm=yB&a{%H-7umPmao+;RQ5B70>x`~@@8^L0YKXxudXwQrj_ae@Z1oCTRd#rY+jQ$k zWhK9kW9plx$AZYYxteFf!|tpIi8jZ0axTt!XV5&mVw?+yphuLI!8IDUi7}q?jT_goc3Ioh%fI zOaJ^5eu!D}x+-^|h}wt>jZV@dKz*?lmyXhkwkqO6$iK_p?>#?LVzsM<-)< zi+ZiDqwz1Gem~nP&+1<>rC~&DkKa(%^C;^TBf)sv_-u??wpBvS z%jZ@E)E4H9Uin9i*JA^pe|~M}l#Ur2jnjtLyU;aS!-K=TJX8h1K?J6K*5&r05AUD{tE_|uBx>LI z-lLWeN^e#xG1|{pc5^0jx$vY~bsir+ZO4KZjn?nDk`xn9Dmb}Tu3==Kd+(F4kM3O3 zt@-%jnQpD!bTy>ygsIC@l8(Rh&UangFaGV#Q(+a%u`X~N-+~%kWsVDkrioSEgQKfD z<)RZOfF~@)CT~5n@`ST%uIF1!2n?Q(=+JoG?7jPEtu5!!!2bTg`ZH(NAAt9i)(5ed zm!Iy{u3gU^wgw3rkLz3Oj=nQ)z<_b@*b><~)=vf6fkI<~;1}3s1zo_}0CEU6MYFcu_anRiI3(t!`8rR8h+Wnj$Qwl+ioQB^ZBEkOYT_qxt#al8`;v$A>Nwq;Svd!?d1f zi0wjnxb3sBFdS(84G+iVLSQZYMa{wqF0Xrf>bN`!_f~C&%}{MC!h45>^$rg|A0FN} zB&07a6xT-4etpWUrErSwzl}cGgIVinz3juD&|bR8=WcBz!#s7{S=KsuTEnV$II*48 zvxgVo#)w-!{1SmeKe9VN8{tLz(Z#$2vD0j!VY@qRB4UHgI?rst71xo18qu@&@TL9R zw&}Ydvq?ndP~An1cxU+1q3zrCo7}5uL}ZBWisl#7p~gA~pMg!9&6+rIRzh%6LRomX zl)b4IlvK?;_apc%`E9{M$R$t3&$AgwGPzrZot0 za`&wA>c;r9@vB=j2y=G#iX!`p=~&y@)fqhl`nK*KHCc6w=rm~4F`urfJz}PcZjl{1 zVvSQFiL1dSa&UcIZd~;_d_|&@Xgt);Iy%Uc@oS@OR zk6?WM#6|?JVtb#B2<&Y8(8mWy!bo*u>uo1-6kBim8AtfodKq=d2S(jxp1N@Z=*m+! z+1P-JkgG^$qvPi1NMs`#iMFt?Gv>)vw;!B&RP12j`0Z0JJ2(>JM4WhY@YsHVqxt}jqO$FZd2G?P6XvnGz)@B5@v)u4 zj^?p_fGc~>HtMAswT;2y zp0gHhJH_rN$U0AS9-Jq36$IMxg8kkRpLe6TZXEW9!WziMy4?_KwaD%#A-2Q8PCgYR zPlLi8#5*PU&le6Ke&J8t0$TFI*^S$_Z9H4!DJSm=(kk?PSeQ|%B@PKOY~fuihdQ{| zhdalX9oMey*b*K-Z^`M?OXi_BB10V9jWp|)a?f^J_qg0vS%V!eTWd9&6yUX$=+|xO!>cOu-~)KP3)+P zPE3LME6f=wB>QSu{;!ee?aOQ~%HA6mMw{pVVD_gpC~pQLT+>^_`JZ?%PUSq_34yRjEjoC0XuN$+W084^@ zquPcT!QtUXIXEpaAEApOILX}pX>ez+gti*(jni-qkA|;ZhcC`#Ukf*aLqgC+*!ltt zt#a&IE!fWZJGWD0cYe9Z1SRLsruWg_A1XR1#%^P`;#fgJt>CqSgNj6%^M)s3EUi^}fSWc{YsU*EW{Xj>EZ3>b1@&u^(MTc*PQ z4bKf6GGrjMC;wjP!Ub|wp*6+KpzQpcv#Nd0zkR;q=Z6V$_8>qZiv=;#Qg{jccqg!9o{f#XM#C)H4#@B=`iY_3lFCqvQLJ?ix_s> zcS6jskdt?`!-hKb8EzQ7`gIdg)T_-P#f`vXAQHpC zn~f|%;k&|BU}86TLWd^b1E-O^6Ppi11;qkt1#y`P)CwZE$8N_;v`ijMW5~=m7p5`H zmb1DTtYl)hKKy*TjPrtC1~g>9GIIOQ4$MttT;Q510xomh2;ARt%8?%!KFIFl8m>{g z!r8xYHyLn(jWE?{534K6Ug6kwT4LjZJv$U=13Y2pj&y5K+3^@_L*6HF+Vj97`5_1H z$>c(g8~b&@;;z|!0GBw^6;unyNx6rO&cXOPXGh;gM=#lSnuPmEP!J1ku;UH>1+IyC z&nSvFtd`tA>|jqbcJ#5#KC4%PdE;t|?J!K?-CFj!9fVBk&p=298VWPTuoQF&PzXuE z&5O+OMd3)O2}iD*k2)~Z-|;vYwylBU?Z;ug+y^YlKaQNm)^VH+3;QX>I0^@o-qL6b zFUPHRm%kmNG)uu>g@okXN+GR^9tE5Vd&`S}6+5n4SIRlhPjYLyjoee*Hf|^PEVqx# zjoz_*qxT`#=od@9g}a3aO!XRaL_sJN=JiPMfT@bA*&WU;_tacnHwRZ zO&Gpl*)qWpFJfu0VdkqMdD12 z*Mi4aK%1TwO9@p0v;>>+kOrSfR^e+saO#b*hW+(LxQ&9TK^( z*6~?gXPrjaRS5KmS!HH*bqwopd$$zWS>aOyN63zneO_d5Y`odOmOBj02xzIe+c46E z`P{(BU{7c+4@Yt~dLEx6q^;1>_Ew3@!60+-Ec04(_Eb`Xl*)}0+wa0nN~o}x|5YP6sdLNbDM>W2ENMV|B5BxN0-ChhkZRku zcWKh6R^NVYQc(M1q;+!MYDg25)=}-6G_EaIrVWXIk&-o9+qsi}oqBUxcWB?xHO;S9 z?HP>{YQ|^#6d&rm*|K>r!WxJ>@k2q6XJrxH9WuOWpKeJ_`)1?>rw;weuST^1pKfsj zyj(nMBqp{s7P-X=l|-?=f4NEi88_XtviRa9dGPV#+LUvtUO-TmM^{w2a2FZRmN1>` zyV_05W%f#HmRi4B)kg8HLpvDHKFDIY%$}&;G>jYct{v7p(9fvpUt4GoxP5IYoU?MKN=s$pic!udL)4_afV&agz z#4^}*G04eE(_-xm33dg|8ju)@L}7wkaBOXe*qd;XNe;z8#E`YEYF_(b!8|7>t_Cy} z3=0J?P#(%M=`Hrd(ecq{pv|3uyx@E(BRfE}W2ZaxSn&yD#U2qf?C$$24!srA%EJ4( z{Vdo&|6jsDH;CeT01OlX^GDSH@eGCoL)Z%Uq8~l@Bzcrm43@DqDLGPfVsM4pqVEO^ zO({dXKQX*{&%Q0ohpJV)(yLa~WF)3xl5i)1!+92-ife}JRE$W(^=*eBRdsHl2w7^z zd+lV+M|Vg1Gl$i5ww`MI{ zwn%A?kK6?mGKIyQ(~j+$x6F{6>D?o0qTuFXl>&2Y#fmQ4nk02@(IO>@1p0txo=+qQ z=-yab-k&Au|3W{m)F_~i`x9Zu9LiMgyxg-w&2&lZQaiNXJI==P;_+cIkdTh=gOf75 z*F-I%++A}v`Xu_+^z9Niz|+;Wc30aEB~?8@>yy~d^4e?EDIxenuM}vG?cxIje)LQb za*sgW!;s`%(YD?{QEQb_U=8DsSCujbyqibF-ShlI3NVHp(O@(jF|N?kZe(2H6QJF= z8nhdqg1mmF*?1K4`g64qJ^_#DFMv1v4*g_$L#y^GL~rb8uR@FfEreLe>2HRa20|L{ z2-*BS?DdDkah9psI0etZb3n6kv8jTv4sXWW@J`?m_u&`t%O)ax3%`p`nuw6`hgY%j zu%W*^NL6s|&!w7jUo8}3ZDA2Y`L%fr37K%}o=~q4$gp-}LeD!AdIk1qZhk+gt{7Md zzxx-U-Xmbgkf#e{n~NagTrQi5NwH^#@_m+nXt2V2d zjL#RL=tjD@z%Jl^ze5iTa^IXc)>u zWAhw39|vuS<-o=rHW8SmaLMr3m*^WaYWo|yj&4G2r4x1o6^MdbRIxY#l(Q2dhRc+* z87G&9I~BlT!%Q`*2{<2zEoW*}CJx(ypS=x-orXB>4-XpxyGxw#HvWt;N{qT5|GyEHa1b+c@70ZD^{Mb@~$m85#=S5kuLI+)-ckaNo6&GtR zy30FuvqkFx-YG&6-rl+Ph8Bd@g}-K@VEZqXN_6!Rcjlc@iriVP65*>qi@-D6yn?h8 zxlx20Bm3Gy*qGpEcZ{LN*`uY$aJe`$4jdDXaaM`xu@es)ANGj&D$Z@>F2q;M`-e~) z3ZpOlSpjk>yIc`+D|=|;9^GqJ@0n?Iy<_Op3UT7i4N1HiwQW>Ks!ST%5=zK&g*`01 z7RN0wW&Bh+999dI3aVP2P}c&EWur~SifN_`$p(8=(^3mR3d)}EfU+l33qNnqezUyF z2o~*LWd&8WimHV-H{HrCClaRZIS>y6R*S_srvj^$tE#mMud`>yJ&Rv_*pSn|iMuL3 zVhJ;UX~85r)&T5d;S&Iek3dlYO6tJ}5g%&aDSJy1>{3E%sVMY8)BnGMoqRIs0iv9T zlQkk&3uBX#FhfOPjZypmDUz{RA&y&J${42fIG}>uPp%Vtu7lcP@L)d$YM{CN56j46 zS^L?@fMRXY?r@SDgR_)C8SB%*^fj??3d_jKcTAfPYFd{5r^Wm11m0&qK8O$FqmaRW zJTHU)Q~U+~8h?*}f((8e5sAyghGzbYJP^yE4;5KbKTDc|yn3j>Exp{UVrvWTPUGBx z53-65a_c1SzKeJ>zbYOQ)!>-m@XR_ms9p$SdLxXKyEENWJOyV*Zg>9LKf@AP(Yi-` zQK|Ap#)OXknqx)W29l&wTt>wOqu)xxAQj24YM)mhfPOCmr|yz?pGz8@&#g*$;@*T2 zj$TkD(lIi$dZl=$pb1sNweXP2ja%AIl=Dv1G_s4@_xYfSB;F_1sSI{N^>c99DdUXmRZr@bQ4_bR?&D!pzi*1EQ2LbZn}P}dwpvAC*nhC=%gc3MWlHS;|miSvuaBj z>kz$T3{xy-S@d;q1Kik**tM}c(lH&>{&)~@Orz`^6H{)tbWqoTa{FfdG=2s@XCgON zd-=MF+|J@J9yXNr@8_IK5t2OuU}hlF<*y}4x#T6gKjNnDniF*!H$?*f7Rs_Md4#JV zgi`Sq&U0lQ*P>|hXE>L zo_a|*R~^11W_~tfptylW+$>f2TplYQ2fc>h#P66Hmycp{PRQNIjBF(jGSC^kDg|VpEGsGx>?7Dcyk-0$M1)!0<1oM%|tT zbz6eEoqYm2sbCP$dYhXqRy_X&Ws=2_bob!F%#VTDD^7Q!KpP5YJQb$EK#wmhSMr0= zgCWJ{wOIkp!u$D$I5C#DZW3d;Rf%~R&0d-a)ea9Ht^M!I5%~^9^crkS{$70|aa<4` z=@c1Kqf&xn@Wdz}oXSPHRje3s^O?N5#S-OS6=BX!7pGhiT4D|j#Gd{9fX$=Sqm|33 z_+V7~-c%Y;X1IDGWeVHzdvj<;*{YFsAQ_B!ws9S4d<}NDUjsz5#U^|Iquzyim5O*j zld7<-wihg-p;aACqRsYF%`!ScwB-W?g#Yte#ha;xp*>K?_>P^0%k^^p-c+=(m^chB zimZMy5QpG!lZ~rtdJ?t4?Vx(Gi@ka=mxHrhh*p4a;ySz$Z^_d>dkG%_C5yLAC5zMe z>}^UG40US6iTDtvH4F3g!=q&JKjr3bFEnJxj$xvLb&`y1yR%}MnVo;PaAG0kSehwh zkHDiH5ySYk7gE@vF`U4^$mbCT9>X3=!1%vNJu8Y3j~9`uxK{}z-};`2@HQf_WJzj< z<0DjfRT_|?rg~NnSYPYTCQSKs;C6-ze|w0q;6Iw!Rs{C7C?ZdBkLt*q8}5bmigJi0 z$$v|Gg!jTKHSO0~kJwwy-#g2{sJWA!MSPOsz2pKoZ^=K5^WL^QXrJRQa-VZwbKi4U zK;QOv?gnQ=2=Sm%uY3oxW0iLn%jVr7*L`tc_oljR_lYUx=KR&KBp}2gz$24F4gd`((sNn{;YCf?ARJTLdT39yFa>Ir;%5Z`mS`T z)ZynM;mrG|or;zW7Ru;ad|+B?tAP0Fm%4VQj#$WnsXA>_xEP(swp6N)Jo!mg!4SAH3$e^R>BFFb~FxmJuYg%nA#wh=K%> zIUN4!1Rh=XSDN+^OD5eUT7{P~=K;!93?n*#RopBMtzLCZy z_d;tt!)(3$r7-FmOsTt98Cq5^Pr)C>m-hfW9Pld$HQMrstm4YT8|Dcj3J!MD3H!0S zFe6K7D(Y!F5fhWB)n zkZ2#Fdd&E>Zmy|lx=;R!#5rDrJpFuRwM@0k)uRqq_VHBWgB$)jrHoG?dBcbIF#34& zsFHhI_c0OWsWCA~fE9xMy=^o`-~{F9>M00el@*G3I)F<4i9t-`3~?FYuNMpb1P+AE zgVO9N2nof3P^D!e1wAK{GRRafjkkB2J0I)oA8BYA9eUNOR_jcxt9!uN&Y{j;EtEEq zVRi9_3bU6UMHd4qkcLsA;qi4k)vM-SE704wzW-?BiAwdWg}KT2&o^c+t_r`u8q9v` zKwpAo4GMGut3D_AN9)*@;aaw1#v5caZEIZm-nJh$G21)Oc!qoc?R8+=L)*aP&-{*K zI0EmpVeNwbQGoHiaTeq`KEWRb`*$39#I}R1LapJqs=#?u?7t-j5^&NWfrwY)Y|HE8 znpJJD%`)CVaeVFX^M4TC`q^kg2f^=^f!`Bh%)=;RUvqH|q=O=jVeMPF`k)Gxj7uAg zvp=>#{m8204coy_HX^s+C&7ax?ba!>ot))Fv&D{q0Z#CruL*PPS z!_*Wch3G4+iVHM{D=&c82#izmL|jfb_CjgXYIN(=YUEpWn>A@(rWp#~IcS#g(a?+N zY#pyMWss}!qc`$)zS_BN|Di+bButf(nxuvXzg(x~`ghk<8yD))%shW-MiSXZJ~OW& z)4k8CD=>X`KvXu*$}Gr(wT<0bpmESNL1ag2ZyxjGadYHhd$MiX#9iyg&g#>vv!ioZ z&rZE2*NLs&V8Y}obt}bXwvGrnmy+BnM0D)drQ6v4Gv^N&Z=6}yqhI*Wkwe;NJUOse zKhiF?^6<`c*LLcTiK{b@-2(fy@BL#)`MS7Um!6YT8Z~M)!?@hmr+YtWJLVFM{^WJ? z8|TCM!I=nVWe_o7$O*%cod__XtZEu*ImHAzA@cf19==Oz)-g^c)?Du6W;>5ZI(hhh zWNb3{>$RNRYEoL$%`x$MEwaWdI%hoo+~#kM?_SV9%gLu)9n(V)?i6O(h1orRV8v+l zhk3G07a(vxWB8nX0G$#Cmn^$f!<^VVcd~rKj zR4ONVImOp&kuh(Y8^OrQr^c%t`t`_sYS-XQ_ro*iURvEVy_3*ye%q#F!ZNeFBvkN; ztq_d|M!I--Bq#{EY5@&91{f^|FPvuf3mfCx_<>w77YC!tI;-WJ%(G{nDf6twumL96 z8)hGGFq`ChOOkEF$Gn(a&-fy$)~MOL1~zKdKCN%utjRqdZ~f}N5&d^msXcjmqZ(08 zHwgamw%;*{%O}G;8V39Nl>*+8C@uVHGj2Z+7gyTqVm*%JOEa8XIChJ+U!t z^?^BBt;@_jY=0Ez5*ro*XVDx-a01D;DdTr;8#@EVL_{Qbw;a-c`NDo9jayq{yFK2n z^|1b_o$II`w@yb+GOi46*sN!_8IN`Ak2-B1I-pChP1hdx^AGdyJm!h+T~pf6J+P=> zd@tO5XtPEMwR@!|s4iPa+ZIi3vo9vS=kRImS|>GU_a*yvXq_`hXmtRq?|}gn6l@MB zxb9%|v8&TO0!qvpAa)MHZo?XJWZSx>?;BsVZ`)9HPgpZCy;WJKw8MKw4#*mRxM>6A zx?A%|s?~gQqgquGCr@Zv2L&20efZkBj%oFsQ-=23)ceH?i)S8qb>=+(3C5gdO{O-e z(Jy`0ntACX$MoU2C;nkB!}98Ri95m_$r40!idHr3c`qB^L7nK9K0wMFewI>fUwQQrdj^q1~hvV&IBnKSf2`EMQMuc#!EzTiAZxwQV(}Wx`Hmdy_v`f4(KKr?EL$Q z3p&w1N^Ts@{ydx<28}C*tjL)VHaBrZrGw+f*6I;-ecS<3qon$iUPV|6(q-%B&2wjM z-I~4ozN^#j%vU^LxOqoG@o3V&o3o$?Q@4hn%z2yr1=Jb0-aQ@ps;Somgj?K&XEnSSjZw5SI9JoWQ zCi}>L2Pizk2&IM*%4KDtdd0?P$fy4Wtne?#2$q)gDnJSwz}I8DnH9Sq9Rw#}R)u9D zg;VHb&=YH(`2mhuTL1 zysM{rXTVo*GLDV)PVSX#YXqBN8(1^_01KpYPv@*??__W9oSD`)O73p`cuM;cmGSI!6PhCT3EmqHB9U(Z5g^~$&`uinc}dV-~TIw0gI_E`yX-zZ*lK( z?{gp8V+vn#-*7*0KU*;c2<|!{7l>`!pwL=42nlqJfSgahFYRFW+Y)C8iFjP z8s_me8_h=xO}|&>@wM5kkzo-9%j@eHczrQ6@FBQ-eT}|HSJ1Df%LEG|3*h^zn~VX= zkj$-?iN!#j+bu%wjl(KW@zF0Agdc2PR@C2kOW z%ymn32RGZ00wGft<^DI)2(Okrs=zl8eynh%ySv1B_qEtvD$~cygC5mC| z%b)8vAJMyJMwSjjFt(<3nm?m$>vrsK>f8tH%0S~YWBqs!Wl``3Uk~c);JM89e0Wr9 z^N8{lDyJq#mj4$a36GKn8giVMoisjEM>xfVq<%4?4rghr(h! zoKOt1{#S)p>%SNb3-I41IIJq2m3@>ZR?mqehgYUHHlk9|gq)kHcwbHnvM2Zd&Qx16 zI+`dXcLR`$6_k;s7OD%ZL*Z zwl8B?_O~xX59Y0>1(tbEL!tI&azu0kF5hux11|9F}{*@-TR<3u}77R+;7}0bFZ%Hw@knF}JG$TQq{t z*tWgReKdgOk??LX?1gmVDKLXydH3Q-M!(i`y z;N2i-5!)h@i{w(_Z*SNq``$3PuGv<@;ZxSu04^T3h~nbf4(i)uaL>$uq``wm3=ilv zcvwK)K|T6r4jK{Ay2r4-Lq-g*5zr`e@UY&Q0SyL^95xu?xROC+q#gnd{?7zsx^3_hO#uT{8ea6hX8 zy-^wZC&S!k1RQzwLZ8(s=KBTDrP;awPp)YD3T|^>=R3g5JXfp_0-zPW;2%31nb1Bq zVywQ&A3N+kj)70CBW0su1oT0sxsDwT`>eaUFV@20@M#A0!2olAmEf~XbHuQ{v+>yz zvi#Vu4uR!CdGFc!zUJ{;pAUpB*qUDOKleMVU2Jr+Zw-UrV7+Z^Jp{I9znlL)14dwf z*oJM-j>;N~0rsP0V{!y6_l0(kw0|!Wu6k_UU5q5o)qbBT^x~HUZxL)oILh%bSBabi zbC&{lYK_z3UgZF@mlNj4w&$iGx^ms1Cw6k1xM|#U z?hriJf6L9_9_QwQ!o}0vX1M>&L4=#iErI9l-#Eaz+$_X%pK`x)Yq{;*HK z#r4qN-*Yc;8<4<#j707^ZVQqi@mfJDXjSN_3_Pbh!ldL3PwTG84W8INpr+9ap4)v; zS;z$R109P1$OjC9xvCrrL7^xNl}F*=(OnT$LJ=qu@&u!x1~M9^xLBCc;@}xS0ab&F z$QtmhUkfFI21XsIjjRVs7!9C8G6^+8jUk_~DKG%Zpu^Szcz_ht3aTbs10T>9YA4%4 zmSG2|pzH*>hMl2~vMcHaIfvb$p0X$K1-(Gqwh!bV_5<~{0caq&QVs_GU?@~s4hI%t zB-C1t0@d3w;8QscT*Dtj6QJ^P5@>HsK~sTUn2u(kncP|Kb2N)P4_w0>G#3=$=0jEH z0$?2$fi}kyv=ki1mqC`~1*rVI#GT_l1DDGc;MBAdt%5AaH4vj%2h79<$adTW{KQj` z^SBjlLr+80Vh7Z8J_E6f-B8*29O!!N1zfTpG9C_~7a*4LBDj^m3=xgPQ1AH)#5ImW z)#qyv-FO3PKi>jY<84p@c^9~i6QBih68xV&1YO=!kU4n<;vQ!qOX564KQ5q)=u`06 zyac(FUqH^pSCCQpHTZ3Q3wf2_LsaBPU_^cb?T}x97rBal1LeAFz>oX^P7F5yC1s-= zWJ3mca&n;Wi@_nCg37M|{tOaSmnz^cr2&Hi`ar;Dw1~NR- zK{hMyKLwcslSvGeNI!HaNe}#q;od z@PA(bO2&)81%3%$ik|>4_~m#7eiE+)FVfX`4PFZhE9*hycq85fI>%3e*2-4!iGLbz z2hEk8pnALu9OIt_?c+UoFF2O&$Is&f;2(bwzldJ~7x_crWN`$%^;6?l?xSn3ZpM(F! zm!Kbb8C)>F0WbRRzzgFC{3E^sju=1VU+}NsPX8PJ9bW@&!9Vby_y#BpX5$=e!v?-Z zID$a;g%C=3&>R$rL}XANR6z+w2mL_@;s}Z`&cubd5;xEy^dO$Z3ls@`NLk_wx`h5D zfCQ2t5=_dG5E2S1h2=>&sX!`{N+g0rlFB3sbPJ&PI;lZwl3FB@ z)FyRET~IZwPa2ShB#AU4jY$*Ilr#gK!{(#~X-QH@E0RiDlQtlsl}6f;_M`*pNIH>p z(wTH2T}d~RLAsM3q$kNFy-07;hx8@=NPjYb3?zfdU^0XZCBw*YGJ=dGS!5I$O~#P1 zWE>e!9wQUTL^6p?CR4~%GL1|pGssLbi_9i-$Xqgy%qNeN1!N&vL>7}JWGPgUEQ3mg z734{>lB^=D$r`ejtRw5m2C|WCBAdxmWDD5}wH{AH{mTxrlRQIqk=^83@*LSi_L6;M zKY5-UATN-E@;&*1{79~l zpUBVT7xF8)N`521lWXKU`GfpPZjhTKo8%B1F~}{-QA9B%lv17wROI$>d#OZas&LP9 z2e{X$3iy6M_d3*f>cH)wj?{@dQy1z=-KabDpq|_t)QfskA6l0BQa|cX z1E7xQ2o0n`G?=6JTAwzc4QUc>L>tp4v?*-{X6wyq3)+&V&{i~+wx(@pTbf4O(e|_h z?MOS(blRDApSL7@45quq>AIn$e2U{rLX;0Dd4ph#$-k;fM0W_~HBrek7m8kK#x3WB9TB zIDS0;7(aoZ$WP)Y^Hcb#{4{<#KZBpi&*EqEbNIRZJbpg^IKO~j$S>j-^Go=p{1f~# zemTE_f0AFxui{tpYxuSNI(|LBf#1k);y3e8@mu(<{5Jk+emlQ|-^oA2@8Wm!&+^al zd-%QlK7K#{Jb!?Hfj`K<$iKwD%pc+p^GEns_*eO({4xGD{&oHh{!RWZ{y6_O{|^5y z{~mvWf1f|ef53mpf5e~SPxEK^kNLCwIsQEV34ejV$bZUz#$Vz;=fB{;EBFe2g1-Kp(fkcMLK~s2kS4Sf+6x_ojzT9PUFa-y5xNT9gbbm(&_n1cWD326-a;Rtuh38E zFANX{3WJ2f!VqDoFiaROj1Wc&S;8n`v@k{(D~uDy3y%pCgo(l=VX`nqm?}&YrVBHK znZhh#wlGJSE6fw-3y%v6goVN)VX?48SSmarEEARsD}*P7mBK1vwXjB5E36aN3mb%u z!X{y}@RYDc*eYxjo))$XJA|FWGr}%mxA3g+oUljOE9?{Y3(pG&gcpQ^!i&O7!pp)T z;jnN-ctvx%Wn`eFmIp_n8#5*v$6#HM01 zFMy#Npxyaio|fjuJliJQfz#4X}hahv$GxLw>K?i8O9cZs{jXT|5lJ>p(*pSWLqUOXVaARZK7 z6kifw77vMs#UtV?;;Z6O@tF9U_`3Lp_@?-lcwBs2d`Em&d`~KM+3@KN3%g zr^Pek$KqM>oOoXRM7$tg6h9R|6EBIMi(iOeieHJB#jnM0#Bas##P7u)#2>{g;!onw z;xFQ_;#KiC@pti>cwPKM{8PLk-W0RN9ML8k;w?suNmwEhm3T>zL`jllNs&}ZlXR(! zX$zKYP0;M1+SSlxlNTE`gR9*^~Do7Qj zN>YRrDOHxDq$*Oh6eGn-Ri!v7UP_RvN!6tqQcbCrlql7f>PU5^dQyFdr8KFX)L!Z!b(A_u=~8E@i_}%>CS^$7r5;jG zDO2ht^_KcbeWiXTKS|L3tt&~S1 zK9oL^PD!VwGt$S>S?Qc~Uiw73AYGI`l|GX$NuNt!NMA}{NtdOsrEjEfrSGKgr5~gp zr7O};($CT_(y!80={M6&z1`a}9tx*^?^vZWl!CK=K#pk5EkNX9aesm#lQEXtBB z%ZjYZnykxZWCz(%c9NZC7ui*Ilig(x*;DqCy=5P{tn4fM$^LSH94H6L!E!k{L=Kh1 zjd>wcJK-E2qir^_p!}lzlKirKNIondkzbKtm5<8D6K%h%-V@*nb_@(uZ>oGs_bHrbGGDI926V1+1D z;T1s<6-kj5MNt(^(UmfagW{+-Db9+E;;OhQ?uv)vsdy>gijPuO@m2g3eUDG^GfQdx;oswmM)j1sFWYQR$?l zE1i`tN>`y2?Wsovh8KMkThAG395z0smk}m2t{=-Wy*48h4Q4bQdy;}R@NwMm37K`WrMO&*`#b%o>I0bTa|6f)5>;bhq6<7M%kt8 zR-RR!Q}!r(m3_*7<$2|R@`7?uc~N;ud09E699E7fuPCo7N0npBYs%}&8_Ju?Tgq|e zZRH*1UFALHgz~;}Qu#pnQ29tXrJPpIC?6|lm2=8@5e)hM-!8m-2tv1(N{PK{R+)M{#VwT4<# zt)(WawbeRmUA3NCUu~c^RFl+3YGbvD+Ei_(CacZW7HUg1MQx>~s;$*FYFjl;ZKt+Z zJE$GiPHMW^S?!{BRlBJfYIn7V+EdL`d#SzEK5AdJpW0s?pbk_Ase{!a>QHr~BmPpT``RqASWjk;D{r><8ws2kNy>SpyRb&I-H-KIXRZdZ4x zJJn~@UFvT2S@k(}kGfagr|wsuR}ZK!s0Y;-)tA(l)kErG^@#e4`l@KE#l>R0Mz^=tJT^;`8j^?UUP^+)xJ`jh&z`iuIjdR6^R{awALURVE6|5R_NH`Q!4 zN42SjdQ0Opq+yL{RO2;46E#VbHAPc3P1Ch9nuF%3Icd(Ci{`4iY3`bb=BasU-kOhA zR`b>TG=D8X3)F(NV6B`MqJ?TS^`023kWcNo%Av)|zNdwPsqf)?90$wbW9yR$8joT5F@V z)zY+fT6?X7)=}%ErE8tFE?QTuo0g$<*Lr9@wM?y-)?4eN_0{@m{j~wwKy8pVSR0}Z z)rM)qwGrA#ElV4vjn>9!W3_SGcy z+SA&0ZHKl~dq&%(?be>vp40Ydd$oPqe(ibffcAoRP9mYDcwW z+H2bD+8f%N+FROj?QQKH?Op9X?S%Hec2fI5`%wExJEfi0&S)QNXSH+MdF>PJf_72+ zRQpW3qb3PcdR@JqUSDsZH`J5#MtWntiQZIirYGyo^%id{S*E{GP^-g-a-dXRWch$S;8G3iUhu%}q)O+c@^*(xEy`SD+AD|D^ z2kC?LA^K2#m_A$|p^wzF^ild~eT+U2`_pVtrQFX#vL7xkC)m-R#XVf~2y zivFs8R6q8AbR7kFTSsqez;SFpX7HG)p*9_t(su3IuI->5bawobxN&UPc9N!JW@ct) zW@ct)W@i2+-FweYw}0R2C+Y5VI-QPmdM}9w6AvXGPCSx$H1SyC@x&8}ClgO4o=!ZI zcsB7|;`zi2i5C+uC0bQEYfotR72otoWzpTZdbhTaR0x+ko4U+lbqk+k_j-wQ#Lm8`sWtaO1e~Tqiey+mzdk z+nn2i+mhRg+nSrmP2whVQ@E*I7dMTY&duPq;bwBPxNW)F+#GH$w;eZ+o6jxaw&!-> zcI0;A7IKTYow;4OUAf)3#oX>(ic53dT!!F4&V;t4&n~x4&e^v4&x5zj^K{uj^d8y zj^U2wj^mE!PT)@DPU24HPT@}FPUBAJ&fw1E&f?DI&f(7G&g0JKF5oWYF5)icF5xca zF5@oeuHdfZuHvrduHmlbuH&xfZs2a@ZsKm{ZsBg_ZsTs}?%?j^?&9v|?&0p`?&I#~ z9^fA29^xM69^oG49^)S8p5UJ3p5mV7p5dP5p5vb9Uf^EjUgBQnUg2KlUgKWp-r(Nk z-s0Zo-r?Tm-s9fqKHxs&KH@&+KH)y)KI1;;zTm#(zT&>-zTv**zT>{84j-r{ZE;axt-ufng&ug0&=ufea$uf?y;ufwm)ug9;?Z@_QJZ^UoRZ^Dn| zTliMKjc?~W_;LJrzLTH8Z_01RZ_aN4A5zD_v82H58w~v z58@Bz58)5x591H#kKm8wkK&K!kKvEykK>Q$PvB4FPvTGJPvKAHPvcML&*0DG&*IPK z&*9JI&*RVMFW@iaFXAueFX1ocFXJ!gui&rbui~%fui>xduj8-hZ{Tm_Z{ly}Z{cs{ zZ{u(0@8Iv`@8a*~@8R#|@8j?1AK)M4AL1Y8AK@S6ALAeApWvV5pW>h9pW&b7pW~nB zU*KQlU*ccpU*TWnU*lir-{9Zm-{Rlq-{Ifo-{arsKj1&)KjJ^;KjA;+KjS~=zu>>* zzv92f8c-Qf8u}Uf8l@Sf8&4W|KR`R|Kk7V{}EOaRu;wxbwa(+AT$aQ zp-G4e%|c9w3kiV}ctH?EK@wy^5mZ4Fbioiz!4ho25nLfDtRk!`tR}23tRbu^tR<{1 ztRt)|tS785Y#?kXY$R+fY$A*mT7*`iO=uT7gmJ=np;MS3Y$|LfY%XjeY$;DZ*5tOPD517iI|C2s4FQ!nVR}VU93Y*iM)y%oi32+Y37gI|@4q3x!3(&cZIj zuEK7@Vqte7C8ULJAtQJ~kI*ah30Yx@&@beK0U<9GgrcxiC<$euA`A*c!mzMR7!j5W zdkA|9dkK3B`w06A`w9CC2M7lW2MGrYhX{uXhY5!ZM+ip>M+rv@#|Xy?#|g&^CkQ7B zCkZDDrwFGCrwOMEX9#BsX9;Hu=LqKt=LzQv7YG*$7YP>&mk5^%mkE~(R|r=MR|!`O z*9g}N*9q4PHwZThHwiZjw+Ociw+XikcL;Y1cL{e3_Xzh2_X+n44+swm4+#$oj|h(n zj|qC-Y4EKJ|I3QJ|sRYJ|aFUJ|;dcJ|R9SJ|#XaJ|jLWJ|{jez97CRz9haZz9POV zz9zmdz9GITz9qgbz9YUXz9+sfejt7*ek6V@ejekXn} z{viG+{v`e^{v!S={wDq|{vrM;{w4k`{v)jZE$9L28sDQj-*wnx&W&ml6^u z@sc2kk|fEJBB_!l>5?Itk|o)aBe_yiT18q_T1{GAT0>e>T1#46T1Q$}T2ESE+CbV+ z+DO`1+C&;FwMeZ}o766KNaLjOQl~UQ+Em(1+FaT~+EUs|+FF_@O_C-{Q>3Xq-~|y(i~~7w4F3hnlCMowwHF0c9eFK7D|hxouyr*U8UWm#nSFlN=i%J zQbzKm9;sLAld{qhsb9)T15#cpNJVL>RFcY4MH-Zbq+w~9G$JjR_K^0J_LBCN_L26L z_LKIP4v-F%4w4R*4v`L(4wDX-j*yO&j*^a+j**U)j+2g;PLNKNPLfWRPLWQPPLocT z&XCTO&XUfS&XLZQ&XdlUE|4yiE|M;mE|D&kE|V^ou8^*ju9B{nu92>lu9L2pZjf%2 zZjx@6Zjo-4Zj)}8?vU=3?vn17?vd`5?vw799*`cC9+DoG9+4iE9+MuIo{*lDo|2xH zo{^rFo|B%JUXWgtUXosxUXfmvUXxyz-jLpu-jd#y-jUvw-jm*!K9D|?K9W9`K9N3^ zK9fF|zL36@zLLI{zLCC_zLUO}evp2Yev*Ecevy8aev^Ke{*eBZ{*wNd{*hObSC+@f zb#lGjAUDbpxk--7&2mhR%L$p2d0CJ}S(0U0kyTlfb=iUPv=kK8Nw$ys@c+%MRZ z$H~XbC&(wtC&?$vr^u(ur^%B5cgT0jcgc6l_sI9k_sRFm56BP7 z56KV9kI0Y8kI9eAPsmToPsvZq&&bcp&&kirFUT*-FUc>`V z@5t}U@5%4WAIKldAITrfpU9uepUI!gU&vp|U&&v~-^ky}-^t(0Kgd7IKgmDKzsSGJ zzsbMLf5?Bzf60H#|0pXdD=TA^I;CD|P#Tqp(xgO{W+kS?m4w16ydo%~A}O+>D5|0< zx?(7%Vkx%bD6W!JR#8?}R#R42)=<_|)>771)=}0~)>GD3Hc&QHHc~cLHc`eZElR7> zrnD;^$~a}b(y2^PHdQuLHdnS#wp6xKwpJ!8la$HI6lJQ?rA$+%D>IaBl$pvbWm{#o zGDn%KY^Tgq<|_-7?Ufyr9hIGwg~}pjXJr>N#=l$5ekQ3jPEWms9Jj3~>MJ(N9_y_CI`eUyEb{gnNc1C#@mgOr1n zLzF|6!<567Ba|bRqm-kSW0Yf+y+!28yOg_?dz5>X`;_~Y2b2euhm?nvN0djE$CSsFCzL0Zr%VFO)BpuavKq zZ(5YC`2yUKLbPl~h?(R8`efT{TowwNzVmR98)^tEj80tEsE2Yp83gYpH9i>!|Ch z>#6Ij8>kzq8>t(so2X;e7PVDvQ`^-Jb(}h0?NleIo2r|so2y%>TdG^BTdNb*N$O;E ziaJ&8Qm3iY)fwtG>P&T(x~)1}oukfGw^Qe-^VJ3F_UaDmj_OY8LUob4v$~7AtGb)I zSlwMsscE%a&8VK*qxPzOYF1sM_NzH{K+UTKwWuytOKMrIsDtW|I;<{JN7Uu&9_pUz zUh3ZJKI*>ee(L_}0qTM3LF&QkA?l&(Vd~-P5$ciZQR>m^G3v4Eaq98v3F?XJN$Sb! zDe9@}Y3k|f8S0tpS?by9IqJFUdFuJ<1?q+BMe4=sCF-T>W$NYX73!7hRqEC1HR`qM zb?Wu%4eE{RP3q0+E$Xf6ZR+jn9qOIxUFzNHJ?g#ced_({1L}k7L+ZooBkH5-W9sAT z6Y7)dQ|i;|GwQSIbL#Wz3+jvNOX|z&E9$H2YwGLj8|s_tTk6~DJLtWHEB_;S&M0LEunE5uL+u{Nt&!FnyP8=-Bv?0HA}NKM{~8L zwu-i@wwkuOwuZK*wwAWGwvM*0ww|`Wwt=>xwvo26wuv@YYtdS@HmzOj(8g)wwN7n< zwyCz6wz;;2wxza}wzW1{cZ98qAHeXu+ z--_Nr+fmy|Tc|D4cGh;$cGY&%7Hhj}DJ`vaYZ=YcdbD1xPs?gcw0H zT1hKw6>U%((uTEV+K9GX+e6z^+e_P9+eh11+fUnHJ3u>7J4icNJ48EFJ4`!VJ3>2B zJ4!oRJ4QQJJ5D=ZJ3%{9J4riPJ4HKHJ54)XJ3~8DJ4-uTJ4ZWLJ5M`byFj~8yGXlO zyF|NGyG*-WyF$BCyGpxSyGFZKyH2}ayFt5AyGgrQyG6TIyG^@YyF>`$GFt`%3#-`$qd#`%e2_`$79r z`$_v*`$hXz`%U{@`$PLv`%C*<`$u0%Us)fc*Xi|ogWjk|^d>#3H|sGyt|xR(=XF6B zbxD_XMOWd&x4LfVrf%uB?&z+b)K}40)mPJ3*VoY3)YsD2*4NS3)z{P4*Ei5N)Hl*M z);H0|>MeS!-ln(f9r`$Zyxyr#&^OgL(>K?*(6`jL(zn(p>XY=z`V@Vt-lb2|r|UEH zZS^d0q`^o9B&eP?|aeOG-qeX+i~p3>8Lx1P~G zy+`lW`}C~7MDN#g`hcF-3wlvss+aV#UeO2jA$?e1rjO{$^*!`G^}Y1H^?mex_5Jky z^#k++^@H?-^+WVS^~3bT^&|8n^`rEo^<(s7_2cy8^%L|H^^^3I^;7gy_0#mz^)vJ{ z^|SP|^>g%d_4D-e^$YY1^^5e2^-J_i^~?0j^(*u%^{e!&^=tHN_3QNO^&9jX^_%pY z^;`5?_1pB@^*i)C^}F=D^?USt_51Yu^#}9^^@sF_^+)ta^~dzb^(XWv^{4cw^=I^F z_2=~G^%wLP^_TRQ^;h&)_1E;*^*8i4^|$o5^>_4l_4oAm^$+w9^^f$A^-uIq_0ROr z^)K`<^{@1=^>6fV_3!lW^&j*f^`G>g^#wo_B#%ads#u>($##zSM#yQ5h#(Bp1#s$WO#zn@(#wEt3#%0Fk#udhu z##P4E#x=&Z#&yQ^#tp`e#!be}#x2IJ#%;#!#vR6;#$CqU#y!Tp#(l>9#skKK#zV%# z#v{g~#$(3g#uLVq##6@A#xusV#&gE=#tX)a#!JS_#w*6F#%spw#v8_)##_eQ#yiHl z#(T#5#s|iS#z)4-#wW(7#%IRo#uvty##hGI#y7^d#&^c|#t+7i#!tr2#xKUN#&5>& z#vjI?#$U$Y#y{pt=E~+6v(BtH8_Y&CVm6skv)PQ9aWi3ZCT|L+XiBDRDyC{`rfwRh zXA&5g{B%}va)W{cTswwdi_ zhdIt1Z+4m!%uUVB%+1X$%q`8W%&pCd<|K2nImMi6cA3-6>E;Y`8*`>P%iPwSZO$?0 zn%kN4%=zX5b9-|Kb4PP0bD_D&+}Yg4+|}I8Tx{-crp&b2ZDvf*>@j=IJ~L}BG5gJ& zIbi0^f>|_|nkBPrR?I z^8)ii^CI(N^Aht?^D^^t^9u7y^D6Ud^BVJ7^E&f-^9J)q^Ct6V^A__~^EUH#^A7V) z^Dgsl^B(hF^FH%_^8xcg^C9zL^AYn=^D*;r^9l1w^C|Ob^BMD5^EvZ*^9A!o^Ck0T z^A+<|^ELBz^9}P&^DXmj^BwbD^F8x@^8@ok^CRl<^9S=s^C$CX^B411^EdN%^AGb+^Dpyn^B-#^_yYbItIn#o8mvYuVl`P&tJ#WK zaVueQ7H}hc(U`Z*^J|tWB-Wtj(=0tSzmrtgWqy)+B4PHN~20 zby?G_>DCNu8*3(f>}FeQwl&9^Yi(!Ev*ue1tnIBGtR1bLtcBJhYiDa0YgcPGYq7Pv zm9o-Sx0SIxtHt)r}?tz)cXt>diYtrM&ht&^;ity8R1 zt<$X2tuw4Mt+TANt#hn%t@Et&tqZIRt&6OStxK#+t;?*-tt+f6t*fl7t!u1nt?R7o ztsATxt(&Zyty`>Ht=p{Itvjqct-Gwdt$VC{t^2I|tp}_Jt%t0Ktw*d!t;ej#ttYG} zt*5M~t!J!ft>>)gtrx5pt(UBqtyip9t=FvAtv9SUt+%YVt#_<3KQtv{?kt-q|lt$*y5 z?3L{?cAZ^sH`tAK#BQ>qcC#I`<95R4Y~B`Z(Uxr4R&3SQY~40&)3$8ec5K&9+N;>B z+N;^C+iTcs+H2Ws+w0it+Uwct+Z)&$+8fy$+nd;9?H0S$ZnN9%4ttzE-tM#~*qhp$ z*_+#2*jw6L*<0Ha?Me1zdx|~P?y{%Z)9o4dHug+=mc6Y#+n!_3wYRh9+4JoM_V)G; z_Kx;W_CkA+y|cZGy{o;Oz1ZH}PT6U@+s@dY-DCIKeRkGfV)xrQd%(`y1-oc3wM%x{ zuGoY2kUeZKvq$XZ_8#`0_Fneh_CEH$_I~#M_5t>R_CfZ+_96D6_F?wn_7V1x_EGlH z_A&Oc_Hp*{_6hch_DS~1_9^zM_G$L%_8In>_F4AX_Br;s_IdXC_67EZ_C@x^_9gbE z_GR|v_7(P(_Eq-P_BHmk_I394_6_!p_D%N9_AU0U_HFj<_8s<}_FeYf_C5B!_I>vK z_5=2V_Cxl=_9OPA_G9+r_7nD#_EYxL_A~ag_H*|0_6zol_DlB5_ABCOyi8)v37 z%h}eM?aXoJI@>w(ocYcIXM1M{XGdozXQ8vm+1c5}+11(2S?uiYq@1+V?PMI!>2Z3U zJ}2uear&K{GvMT%f>U&sIwhy7R=LqLW=P2iB=NRW$=Q!th=LF|O=OpK3=M?8u=QQVZ=M3je=Pc)J z=N#u;=RD_p=K|+K=OX7~=Mv{q=Q8JV=L+Xa=PKuF=Nji)=Q`(l=LY9S=O*W7=N9Ky z=Qihd=MLvi=Pu`N=N{)?=RW6t=K<$I=OO1|=Mm>o=P~DT=LzRY=PBoD=Nac&=Q-zj z=LP3Q=OyQ5=N0Ew=QZbb=MCpg=Pl=L=N;!==RN0r=L6?M=OgE1=M(2s=QHPX=L_dc z=PT!H=Nso+=R49*9oKb}?keu8?rQGp?i%iz?pp5J z?mF(e?t1R}?gs9L?nds$?k4V7x5aIB+uU}y!yV_2cRSq)?xyZ$?&j_m?w0OW?$+)^ zcal5Vo#IY)yWDB+ba#fkjXTqw$dyIRmdz^c`dxCqS zdy;#ydy0FidzyQ?dxm?adzO2)dyadqd!Bo~dx3kQdy#vwdx?9gdzpK=dxd+YdzE{& zdyRXod!2i|dxLwUdy{*!dy9Lkdz*W^dxv|cdzX8+dyjjsd!Kv1`+)nP`;hyv`-uCf z``-S_Z`<45(`;Ggp`s!1)WCyk_; zw32qxNxI2oa+Tz&$<>mpC)Y@>nOrNmc5nArzZkXICxp8un;WCFdpQCl@5QPwtT1F}YK6VRBJ&=j1NQU6Z>d7bka5rjqGocQTXol0C`Z zWM49yT$1ch=8^-+e6o-%CYL5l$#Sxi983-+hm*^aBgy5-J(7DS_e$=a+$Xtja=+yM z$pexHCJ#y;oIE6XX!5Y+;mISCM<$O-9-TZUd2I5yX&lIAGKETgUpiH)^YXpXTxuYlNdZ=0%oe=}{$$d*X8#HFn76DOGUZa0 zY`zJK=Dc!w$(T%f%+g|{yId(1`n~4m<>6Ghuae5<8d8A#UPCVJ+Ln&(Un@K|BM>rJtSH5L1^BymFtdB^A%ln$&J%$PNm{Q4p# zpL?k%Tc$?ELkKh)oflLR520*+C{kvn>b!DaYzayUc0%@1?ko2dN);#?fi&#Yh6)N2 zsjw3DgODvgSksB|p&I*W7$WTs)9(oWMi&MWM3yra4a<>jowvNN36+RQtT$Jvfbz?g zLQ$-NK@5 zpgJqC^!0ok*o@ zzPFU^?W^>qay`UML{iR!K@d59P~@2uNlQ* zpgc-w7-AK##IGQAv;u++7GV~MA(SZ$=K+osbAx3Nr)eOYC!o31SEyvW(SBlNU#V{7 z$7Ud=;v9RF*<%?!_^KudPgDwd&s$b0rTRdZO^6{7K>(}8C+H>~W&@;oB%9B8MI^;W zQeb)vjtmvD-OvNE!F;M*%$8E16;E|c>}=NyBfsufV`h$bjO^J$EAb$0<4gGAcv&E~PC)C!pE0ys`7SO%Kc z3<*BiQ10_`J<&qZ%M%m_dMIm@D$WJst=luNVG52?e!BmFi}MK0P(ZMNm?J_ zyWwLtC72%anL#Q^LcpYlh(Ke|AG=5ptDWgf!c!JNKz7Oz;;3BWNY%l3AS4(Zi129O zs6;A0T!xW% zK!E8UhBXkHp)35%2>?NB0Z;6LfT!PR5+&B{WwNA5;ny z+=Me0)+>-uI4cK)aM<`_v-ufKg5)F{qskE#hf_l%VF{$j%d@@9Q@x{TVldQT+!xq* z!`+!LS_C$CSTgQ`z=42L&A9UONi-#((Zb#h><^2;cca3w&-E1s3Y9(&W^PR5Q?TBZ zE5sCWeHJuf9uAy|I7LnhcyRtC87OKRF7@7kw@m?-s}e^|r704b2*J<@<_Opylm=22 zGDuV^^@Ru@uJUK$fKpnKBA03==P(zFhf7+(J`TeoR5qW2=9IE!n5dXtLl4yqlxC)R zYI~+Imh7N{J4c66+ z^NbH>t6-rD4pzbLDwwH)Y==b52C7uHJt8U^uwMlXfdFJHGiIot?p0FtU>>RX{M0}( zi<3es+Z`|0AhC?MESu{0U^Pp@tdS*sGgO?Cr4vUHviFVTvZ*{+^$L`R!Le=QJLz{q z#JBKhDqqQ#v%Lc;g?<-!7)2!BYyp3=4R{W^%YR4iLDLuQGay{QiBm+mb$rp*}BQ_Z*DmoM{a=} zyq_V!n_(O7t0Fk8G6jGb1kgE=AjLli1x1P2K;`SxkiCJOI5Ti?Ohx?DN&Rw2sKZ2@ zcvAJKl7@b27(2d?$q$ZMmW>pcR_kD6*+^#4(m;>83be_uw+;@Ab=~j})ZIXb$at-W z`4z;A`#ed^;0#AdGZiMVZe}XmjKbr&3=Y~PB|G88d`;mhE!4nNPOc#Y`iO#jtSB@G zjG&mU>rZ9lGYim-!C>mIK^o_yk*6BT)>9FG{6zdw(?I1Ks6Yb^$OamT_4E6@Y&~oP zvvpnYuLqEsNa@F)>4j3Z9=0mk#%ZuO&ZZiB>CrI14@L^?BH_1g3Y5xt*%ox{*R9M)p{y4-p0@PL>*aDkv{bq$N1Z)XncJ)WNbGBa8I;%unU( z%Bg%4)KW|hS`Gq z)YURJXiv-7pgk>PC&aS<8Xqk!VSN+Y*xE>W*c41)-NIC*ZX{KS!ZL*pkBo;)jt|Ys zR={mLGFXo00!R$$c3UKaWt!E(H zFJvpZg1;;wIA+d*F@;JqEdfklvOs5%eruF8d70eGuz_di?$W$)79QH(o zJd(srs+@(xgExp>%1Z#~Xbh7Wkk>@x}te030WQ9aV;e$c*e_Tq`13 z_KeR5Uro6H=V*{7UamnJrO=s*V`oIZ_EMUS$ z;P`?38ny?wA?!%;w~1h=yopc*X7(|0oBDmAVS%@x>@`%pO4)0g9JIXK2bzK6H>(+F zKG-;&tf8@wJ!UX@v-F5FjGh1EjK+`%Tf$mUzjQu9{SwePGe!FEr$=OJj`gy~o{dxU zl{L`$386`M!`Q=PF?73LT{*i3OODL`Yh;4A^Y zATO2mzy%t@uq7Z)F!j;1c|Kmi5Z7k9g&{CO)PPrl5&|p+nh0S~MgTW2s)EZyFfnDh zw>XuCj)Q@fPh@JbIMXdVFvi&w!Vr$71gtrh7NT=V$Pg`zLL-yl)aYdj5wIM5@;)A9 zM@I?L1Du;WsyOG3LgU*L>dQD-gK#V*WW&+|RP-%9*jiGM5cZ|xFO=z#5B3_e)+T@I&eVH5>ih@%OW;es?O zN2Raid866%z*o#ypuok?Xg=laveA6X=ztzg^3dNino%CSPBFiJxYsHv-m=A`#KF4% zO@!*@6?1|FvFUJE0EeX1;@JfWuB8gJSTCNL0w+Yp%Qt#?@VUW9?*{Mz%S5>dUharD zKu?}p4*m)s=dkK3ngIS)EY_3lh53sL3dO-ZTqM&vO@wHrFUxp?8$DZMH0%q4ni0wu zmVm>p2|)y6ILTJvqz4L$(Ql=Iq!_z8CqHw7!TADAjj8@-CID;+`e-eN^V8VQ2%_Mg zN{sTxCYBC@QzSUk#Rx+mmN&$Kw+)Vz;5q|esaI(R>i`d24z5$0!7h9-%IXCyfnLh8 z2e&NXOenz)1(c1up^#JuOzYs}U02NX09*jLAhA0dUu@C<2YQ6=2zDnB3Xq2zvc|I4 zU4WZny1oO!iaC$n>4Bi(ogNBZlL63%Zdm&(k&@RlkSg^@S&#rUFP6nCu@YQYLvTR} zJSN>KxIYORlg`yuVC|u@&{rT&lkaXEh_m)Gl~~vd%(a{@!Igqn8O~PvmJY%;%BFt$ z?=;_SxO5O*UxhqMrUwX0BiXW&+)VJ29^!LsRKYUd-meV>OIa1#ZOH zt;cYxlqoZbRU(pXHPjfmkOP0J7_h?a9o=C?=-PR(=t8dtxyrEjgo-n`K|$T+M(BP9 z?tS6k-r|};rr^k2k%+!ykYF+0U^YRWRF@Qpzc?sU)(2oM z8w7V9c!$v82yJ8Ia=1{+;9&Ghau1GZ=s0j~3qShZ;ZrKV{C3ANwZg?9>R=G4PGg#d($gaE`l7?y#f zeQ<~(g9&7Y6UYoFkQu@u4e79zfM3{3z%Ohi;1{+M@C#cB_=T+m{C34X_}eAmNCmBT zk0fX`1z1yeX>hp*^AlToIw!QZ)Z@vrArH%4su8RWeZ(-tJ+E%KkdNlQVQ_IS^>Prm z1vi~AuhdTk=8^s^9AJC%&6Pp8;DbYZZyutsQr&$6DIRv01F1Y*k>^K{-UK`g2*i5f znlF{dJBEBLg@-U0z6ke~MuuRzq|A7bLjV@6Ay^#1g!6@L8JjhU)G(KN57jZh^VIyMGu$Q|P{mSj+!G<8ZK5vp_5f)LzBoxSYajpUV{rMX7rjmTJ^1 zQ1MDR=gHmwrg1djU|ud$tqGhh1Uc1O%yU1R<$X>h1Uc1O%@#F>^$X>h1Uc1O%yU1R< zx*$BI8@ykYLJyb9fU~KLQ4veL?n>R{bXv%Ot$5(r0mXvRWV|txXVF|SuBElT6RyBB zDY$58m^zsA;5)-Gn}EJ}R;CB1dAR+kM0(l87MaeT@#+3{2bTF#-Sl+2u?Ue7-Tevn zKxMWTvymArchiiXQVL__BC{AFsJ?RoL_@+UyKZ(m?bF&iT4N>He3mj~MX_NIVr6h< zDVOW!rqgxXrPGmlKHGV~7NbV%=B3kP<}GW&GXVJ0ycp~uhqB$UqbT*)!4+f^hy#vC z*b6U8ryD>~-Co_CzJWRjv5YUOX-E^eFIlK6Ykt3%gRsFS*tDXB4MZmSjh|do23%Ei zR|>&q;IzWOI28dm7CpPzv!M$_%tyBMsRj0o!Vb6ylWV1~2`p02<~J zeLh}{0optbrGhS@H?F??lS&o626ZR6ITiQ4wRE`3Tb`gDXD#YM2 zoF|8TdKuiVaCG();*dW-2!ARJk6cZ2U~^i4b+KsyY*rCyUVt?d80~_JeF&JbeDkx* zSibqllYvulW@i~^gTh$G1%7I5YA(zfTQCgP$TBo{L6b))FAq}q4raoIE~su40Wt)K zJH{Ov!2nPh0nOBS0;8xf9}49LwXuAp3kH%#SVr7a64V5}L_iGultBw)l^VIRD}1>@ zicw;s&PNd-!zj6>8bWu5>JhQfs7yl5QI@jkfjzHKADUYy&b%$1IP_F9i8F6Y zC(gVrFgM{Z&b%$1IP_F9i8F6YCmC!f%)A(GgNt5-puu7@J!$e{i5RfPpfp%5 zg9eM4JVbdw(L4l6_YK1&QiFPM?qev7csLo2Mlo|dtQKM{64e?*41%M`SwS>W+M#Wen?s=+-h}9%wLs82D@xd(`VxSf9YXM^xro>=e=6ZZlAj}cv zVillJ)d~=!M5ajsk*4DhF-0c?tXD7yuoQUNpdvWUSGRk9S9$|%rw364175t6g43(N zRpO~kwEz>4<@Q?wSs|nyb#!%S?p zDMiVdhzutw8GG1vXM4dHh*^A#@+p+5v6$-h28&JjKp}m@1@8|QVCI9qpur-uJ%p)X zH6s>d4fQRNB>_^C5yPUZ91#mRBD_LIn=9Z2IB~+Y7rf2jP)+1PqY{)I0{#bv;RvLKGboWOaAS*OQ46QeQDlLc zYL$&iyeSV3WcCUNouV9U5L61|2X#>B0r}9iM--K9td4tLgx@T7_u zypjgz7YJ)51Or;3ZESbfJ(z}F4MYmyjtDv%K-${Ea!ua6W?Z-N<~Ieex1rlUF#zi{ zTtj3CbypyhuVHe-y9r7&D3;4L~pq#=*B)Y$4oC;ZfGFoVX0ZDHK{n zPp=_0VU~fx?!K6xhAUMZKb&)ilCm zz?pJ*8EUwn?4P&M*X&h*1x{e(lLwTiB8-B`VhxVjyhJ11@1A{q;K=&#F0ma-%Kxn3!jIbDUG15@r7>swXcs-I}{L4#;Js+_5 zaSms(U}`KcjS$Q7(q`t7#A!dqK$<-0y)9T&P$Cc{&XU-)9Q6^H?HPna%r6kE5I!%G zB*AjwQjC*16PhYyAgj=a{R*QDg~>93P7xSsYhQ%2! zOKB*B0}S^Q;K8qyaHPT*i*2S40u|`NW^%6;U0nykRIO#7)}{US4}}@Hc$^UlNd0eLZV1u3#jkJ#zh}@2(HActI(8>;j8R;xnWOb8)ARXfx(~86ngwLzubSNseW3a2TwO(6m;#OjH2S19_BHV zw$lHVGMWk9r9l2bTyP_5O>f;XN9U_TGX&|(vgeh*d-kyHpb3;8mH*_L5uZNTtfFIMw*9K0J^^IkLV zdhu2TjypWAfW_(ttO?&nggrKdv3L*$jC+1?F8MH-NEE^_aLWKL5Q2!v!$G)G7$6ve zC5jxwF&Conem3(=Arb>5NJzkJ;?I20$OKzka)sp>U|R;{ji_i07$d zAMEYe)e1Bo-oMY{YC^$j=+EYcvfgk8f|(gJJj;O(D+5<_v|xGg?kEK!Hw>rXlL=8! zRjC)=6oo%as%lrPmV!W>XE zmiF?XP~e;Ijdx?`!j)7v+$;)kD1gNR#sSzv53J)&ew@e%bP%Y_x5~;mRbXfg@*_X=U`+xxfHR5k<0uqV< zRRk!ioaro}Fi9X{!Gml}8Ek>gpyC2UsdhgLDUi6e}M`3eL@9sU@gb9JvNUjA+my4 z5PuiwCNOH4_GrKbcyLTcX+lFHHkiZjZNejfp+y(w%dz1ta7h1&4n z>I_K83(E#LmZ8D{0l5(q+`dCdcsKa4O8vf*5tp9~GbwiE!F+o-AF{9r*gw_=fx>&5 z@P0nMiWs9+k%i^K{?k8murw2wUx*KdRg%QO^^T=D5aaWI6FG4BVN`#aEktwPv{##Zy?$;BWSpl$3Xz$Bru^D;VP~&QuO{!&LLSX!eR)r z6(M{V?ShpsYp8=oMq}KqOcoa73Jc@H7{qiT2i-CN+bQr}(-i0hp^q#T?FpwKGvjr` z7C9FNJBI22X8?TY2)YL^2AcA41VliDJw(0&VF%z%VVp!-B5Nt2J@8)PaH|xnu(zxV zr@{Y;d1xZ86l)M~Sq+k|Bx)AgO0gF6mepeE3g_qaS&l-zWuwq^C5D+{wMPl#Aq>0h zYC^gap#%_!o<3iylx+_ndreZh67D#l2#pc8Wnbp9+d zQJfWK!!1R+unb3wLhW6FDA(-G;hQj+ujM~zZT~?V{~xpo7Jgs~T>C*autf~EeD1%K zn6M-lSna5SxKn2SrS|CA<_L+(?(RW1k;8g`gTB4W9 zpVINr;=^R+SRCT->AkMSa2SFQGQrgcP|KkH3Q-6`5+)%<8kMI^B+A5s^88!^1#PpB z%TS&es1(*#5A!Errw)N!0S2=xoHl$c27C5OUoUN|>w91($CCt2IIy*cDcL_b)KK87 zRy35n7*hcac^!x_Fe?yZ3SUx#Rjp=t!9nZ4k~q2y1i^~la)?D&YqtGW8;!$JJB7D> zu;P`QdhoMC=puo*I||CJXfQK%LsMZi);et(7L2zhVNWi5G2^{Qx!Jh&l z#AK08bQ28gV1$5dp2H(2=&YYD)9~)u5Nsq`{Aa8GZ1bP(Tpl)1Re2i9Bl+&WL?Ch+ zubvxWnuCQR3PiSzX-1b5yv&R5wXj+ecxnrmPY$iF7@|BoBZoM=zyopn!J9U5YB;f@SencCjjoPk|n9$5+eX7wx1SUoC@Q zw3BvxwG4jIPTKL+GWbP1X>Ub4X>Y@T()KnCC~a@UfYSCh3@B}H!?33IHVkWOZ^N*r z_BP_*M*Q1|e;e^{BmQl~zm52}5&yQXNTC~ctne{Rc;dHeN=N{S`+0Z zqzCckmndT7Dzy;;*Ge~hQ#9XCUnPY1&e_`=0;It)mEu)t=ZefRM8SY3e8~{TDJYjk zv_iNY_-!Q2z`iSlriUM>!gjTj{Ou%vJIPORgzfF5pAOPb2kEDS^wUB5=^*`dkbXKy zKOLl>4$@Bt>8FGA(?R?@h<^w1?;!njbT!TIg7^L5zgXW8jREXUBoei`ZwQA0(&StP zTLv=&xL?2Utsk@(P(47|YYw{C13HkrfRxZbe*fc6a`%1Xqs1foHiRxA^T{ZzGv!Q!YI zU^f-!Zl@YBcTEkLe^d=@cNWypNoBC1)jHtQT382)irGj=_ec1oZ+BMhI%=Sj|`@XzMtv z8+`Yu{c7{z%bcTY=aDy=2x|l2zM=XGV7dw_B8I5EfRMmm3{4CTW&Eg$!$t)a2L$kP zkFFRSM~qm-An6K?W(uilAF75j!C1knJFsdgXfx|))Q1#QUL}bPtZBK30{CrVB8b>X zzY3qix~4`lZ-7iN+?jqE1&T4X zFiEI&fnus8p4mgF9DkU@g;13QjfMH9mL#&N1xUyVS&Lz&fC6fU^#uL{pq0iT0PylP zqjb<121*;5KIRE1twEkv>Lo0Ng^*8skQqK6#we{JK-PqO$esac3xOc1J*c83;6ntG zFc7sp%p7oT59DbNHO;sJ*41w>#22bT^Y zPji4kC}RMIMJN{*F@y401kW#6oU&;_3Ok4(Jtz>?0R^g}U;#>@0z}6G@I5iwf+aG3 z$UI>%y~45sCyo-KQU-$h!56`T>WLJA;9uOj!BDBj-V;UkGq1p)CMut@HPEjFUkt8> z>$CFs@ocE9w!E0@S)rClt|wryqG(*Mr?zY&2cHFl4(X%(5eNW4xg$Azu@k=SO}~*$ zKRpxh&RsQc0u)fi;LUIFm*cJ)u8Dk@x}q5oW@UC2TfH^cyhe=_48=4{=;=D{0KsY7g_kz(}X#T^y zBQ#x_)DXcW8W8ZQyzV}@FIt8w!J$F~xDZRc&7}&Sq2cX*INEyn{d9mcd7_~-up5_06$JuRI$B7e z`LBMns1uYbjOsvzw3EgAW{6DN-%M z>>+~RBlkwUM&{%3qi%5F;u$40k0yMPzKmJ1pWE8}&>LSqKSn1|p&ZV+MKy z#1G&B0m6j*Fo{pDe+u~xn~j$NJ_SBco6A6`>JWRSA0d_m-tnPo(ZS+qJd=;+hjHY< zk`kq8JAx?Wf~u`50u=CILp-~Uf^;ujR~6Nu5M1f5m%?;8AG`&SJ$^ihnA8b+fMV2|cY zAGBPmiV=|TL*}e0A%&bt%|OZ!-yA6HbRttXjH0v7{8x5`Bms*lfIAR$#&{6%|M9>L)Tr!6xgSO|G@qKD zhUg7=y%jzPmxoWK4C4I)zDmjCn zTu%K|-%M*VKqPwxrzSrGgru_%j9Y5$>K0yy!HL5~*9@eUf1u z4Dd27#GK&Uva%*v|F%BU*C>>`B}5vLTAqI9Jgvdy3uK)2Dw23W9W0}B=n7!51-u)x3!V`%1a z!CLG$#BH+Zo_9%#KTPdIU* zAqaK@UF?&Lg9ztCu7tiCaw~QIBA7eIRUw$QCkgvITQfeF@AAAbibe+rc}!`V^Zqw= z=o+U!An|8!7kC?vpu2`d9RXt9Wf^&^)lvpH( z2XDD0DisTcLOe6{=HnHP3-AU=LyZg+1cw5-JsQU+c#a+29j*jbs~xPjrj6EAw5GB( zRjny3TjDi=W(wA`=~kef!Vy6 zcCP5H74=}+)rvj4=+tD#v>Z2mk38JXL9!2{ImGhSExgC|;)te2_rU{{%>Z3I_A1}t zJUn*zNkUmvyj^Lyh|^Mo)0cxibn5_U^c457QvxgpzsFr7Xet+2w#1ce!~k4lcNYkO zfye;ER9yK2kJGQvwGkX%zGO7q&wV(Y!&buMf$Q=%ju!B4sKdb;e~E%KfHy5IRIKL1TK5b zHc)~GuGmbI5G2|y98|$D0=F_QU<(ev&JI%n+`;BNZpBa5r3+p@hW`Bk;(LY##Ixaz z7pItuIGMvn53VN-2n)DV7H#MHHn*bO_!>=NZ#exkY$?3{9S1`%P;6Lg(U*yd_X z*x_nS*irmDT#X4kihqZzF=0pX?{GCH>?r;nuEvBNuEvBNuEvBNuEvBNuEvBNuEvBN zuEvBN#ot%_eZ}8b{C&mWSNwg&-&g#7#jjP_pjFwRRoS3b*`QU~pjFwRRoS3b*`QU~ zpjFwRRoS3b*`QU~pjFwRRoS3b*`QU~pjFwRRoS3b*`QU~pjFwRRoSr1^kX8^-xrW9 zjGW(kFFDILe+i6xaBE856;E})9e!hKO8ZdMHFDo6Hn6@soWXJ)y6%%htn}iN z0AQoSv5ezdZw?oy;4|POyVg0(HF5AtGaqqEpCJI#7kD_#8Wt_kE33COVMa+hY4&H7 zco=SB7~t(`cR1kt*jjynqP^Aa!#z3c+{B28+gbV1@Zq)`lVvIQCg>0kkBq!>@7M|Y z-clxaM?OL1aT}gO1#)8sb`L{vrG7+h8I4G{(Fx&dxI=}~S~>=jdpO>?s-vRl6!l&5 z7Q6N_qd^!P9zCLy(vDI4n9Hh?eaV>}Ienn+EBouLT?jgI|AdOb}V48}&nM zT>y^c60^i0$X$17qYim_R5+G9#w(MHu?^Yw<*l~|%0*_;l5gW`JPoy(#Dz`)(~jO6 z!jMa7X~aB}mNj2Gp85NtrHr?HR=U(KPwazNSBURDd?68k_ReaB7IP-!vQr!F1K(XT z$xVAE_Hh;8`GfN-Yx}X&+~%nD1$K|cxTTEA!U_hQZ*f~2r!aeHbI?gv_% zDk9q+Ym4J$2P0A>1IwCtj7Z1*J^wLQZb(Y3^i1 z=1rq{8U?KzHVI(wCK^*0=8AHA0NMis%AqJ*H?=0kC~^W4$kdpy%%1vj?Io-ZAp1OwtBY zG?l~iZi>6~IqrPoEDz>^S~EU0<}+O@SGTi`P%yF}SQ`eNOdCeaWvxxUXd4LQ@lhb0 zH%pW4xB%k>b5Ms}E0U4Xgsw_Snv9osCT7fz^mM}`N!{>DRhOWIbt7Qfx)C6G3pwX0 zePebcaIx#I6yEJpn8a}c(l{0e5;+!!QaMIZGRGoeI>#bGLM>*zh!8TE@7-Wy)fJ&p zSA@pRn7UE4L`+O!pF6RVM$-vouqb48I} z;qZtnF?g}!a*!tq(sk~{H>;jN>>jCrwQH4aBqf4=SG>%jCUJOB?8rMEJb~0&-5I*u z;>@U%OQvm{XLV&v@xY zf>Z&%kGiF$Ye<(>W-V2rCwwMxbLPgqr${VJ<4&Dik2|F3mh*rB(7B(I=z7l%C_U^9 zwFuvR&mE||YAokQRXRysmXe^BgrsGNlxS6B1B!Uy<>LAZ3-et;zu z0pA=W!`uMxKbTKu&Q%?rOI!xu3~;s-GaS0>C>E z7GqPa4q@^`Y*zAl=n);mFWi0lkfR8clorx?+!g1{cr=*V)3%OCg(^}_W z!gp(%(*mFmhRw^&X3N8I_l=&u&{NyeIXj^}XGn(Pq_^AjrjI|&;mmWldB+JhI@6z4 zJoet`6cOhF=dk#MyTCaO^6|Q!dB$Pfp$v2Hu^m9B{li-z?!9@x_i=ceR2%mXeG?Mz zq4H2M0sP=N-Gp?7i?)4rVSjLpw`(Vc0)u14Z0Q>J?3k}|Sv?+nF?c@sHf>=4h8x&> zJ}m;LUwy)f0-&ji*x$wHxaN7dgG9oQ+wb4&r3Ku=mq_<;Juu$T12nkPkiX?CXclKV zr|yN9T&QY9WR2jh=aW~msR%}n=;vQ!(jYlv_MEb{T zRsT{qYS+Ikg)P=LiaOQ5+)BGyuJ*$(nT3f97xZGPx%m^`H6M0kxg^+rav7 z`8$p(#gTN>e~Kd!P}?bvWMKX0IFcV!t^H&J>p%I)B-Xk~tx5G?kLq9L5nUeEHexCd zTk#OGsy6B91yWjJps19|J?ZEPl6xYc?WepX15$toERz5_jw;2Gbo2-*jzmBokm5)N z_6j+U4Jdm&oZ!e$ePs zda@r!u1sPNk>biG^%^;E*&jqA`D;z;Ig-DY zNQp@a85t!#vBn|cgdVYe#KXHA{N~h1oU+! zxZNLT#Jfx}j?tms98;!sV@R}Bj_I6?$&Y~*Y{=$E^7BatY(~Z>PaXo|X?2XvM|KUy z!I@w73V%1TZ3#-7LyTzjG(lTwb2i~{j}A^7K0x?Ejmb!y3lixZPeYyEX|pA(s>uQP z(KlI59Ty~gR87lm0!BW@>h<|VY)`uZ>^O?>NMArsBN8#+W`dFAQfr-askH=s1K7r! zV({gfzQj~aS2;Z8kXH_=vhiVtfGL>L`bk&cEsl+yhsks}e7`(?Juc+p^vE>sR8dr> zjo+8sp>c=H$luCW&t<`vn__NbS^27;9mb_b~GON{ehT zzr>OkXso@=4y>8Ij*&X3SXm@8vy zwE-K8q>3S>(x)o2OUqQQtF09wu>Z631^hs9Tp~YIIBdR07o+X)vcEZh(l%6GQ>F7e zZSU}~>ysf~oE|1pb;W!t@a5a~a z%OsbJw+Ro_KD%5-F5_I7mlOu?CABr)<|eyMa-!et)~S^?uQ?s#+!#v^HOZ~xrn>!! z;sW&Zem6RraBu>7vk|AZ_OU{EfJ^R8U_u0bV_`{c!ycSWgv|tn9kEG#M`7{S;>Z=( zg)mhkSEOoWxs+yv9l55k-N+t|EIBNu#5jWLxZv~~_Tjwe43=C*F;0dVxlDw)TykT% z&z398Rb!Dn?0l}3qeC7JJXq1iS9+hkEfjTBk1>IZ7hN$E&YJ@#+?Zqe5`E0)W2XQA zpPMh_RszmXA8;ciuaQ%fErZVJ%DrUv_9*R>Y=g9X?|G7aJjsYYB{}uB_Vggn#E)~; zJT(t6aR_*uF=xvxnqsD_6(!56hr%4Ari}vaiUDu$(nFH zrQipe$Gk+=l7y%jROdBz&*4r|S2A1XT-U9pdGANrK`gp1T!B*J7$iMGl>$A^P6{;c zrlvJEwa#^ie2ba7Ww@q@o@ctyu0uz;VbeNB1l-xK(flPxj56fN%*gR|DOqp1<|FahzAxutB(8?@pS2(W1F$bN9QevPbw6P5YE^aP( zcFA-8yn4yqZ|#$-p8w_ssFksI3b>|)(IgX<-jbl@9S#m)pu_?|X+fBJ4)h*Q4=A5IVdbUg>gyJ5IH`MWK1eDVN&(pn|XLB%drJkH*})F85FO z-(b7zp`uA#FWx@9g34C<@OX=P-a0$p;+HeNlW|fNa`NCZoyGKMoXi+ffR(FU7-YgB zl_5^~POz3}oPfSM9#alLUK8w75W3vW<&odlSk4BP4KWSlp(kBhXOyTe?s3=AOj#mw zTkX1uYwMH_wnX#OZ-;IRm+Y z<^Y|x{=`uYI;GqBqO;>h%7&+%c^5a-8^egk%{F_`NkBRfdSI8k*bbBK>5|XkJphy%3+oWwhiZI`m>V75cl$~4n%miUVws@S^k&(wTqgL&rlF6PmhK+cuK?M{lPawruLYws@6eX8$yjgW z;0^#>aexb@J}%%wc{a*yf1C~4m4q__ogzuElJY3SL0%zG!onKk&70W1gr}f<#sV+I z;IcSGYXjQ4jWiC?vIQH-v{Bvcq1c%X^-+yW~GPT#DamxE#Of zb7y#L6=T4?kB0{j#{0fJs9s9DLzuzTcW1y$F6u(ufz0kVuM%|;#_3!HCGyY6p>Cn{##~k#a zL8he6=Mh6(a$uZK=;9jcUb5%#N`M{50^dhxH+m!@^SU>p;t|aBA+yN%#}auPf_#C~ z2k-IB_woJqE>EVEDZoD3H;>x=7MYTxTT(;k#c?P+d&c|mHaM@`dE^>w9WWWllgxBi z$1gd@10X!_o3DdiY4MCtNvA03VU+{CpW=8Nx4XZ^@$hs_`RSX()=BeXJibQv!P|}# zM)Bx4-du1m5*jg`?&b74qCHJf@}3dw2;y5***RzVVJ4`t3tw?u>-6Y;rZZnEVeUR| zGo8ybzvhBRZ%4(X+Fb5ZQhR6<$KV;DrU`71wEu|xP40Yh0^9E!ywHyGx!OeJi}3l- zgTKV&@)jq^PhPd(N%o%a|35u>LV08!R8cq)^2SXB>Z|uWe4v$6-ZSQWEd+#8dXme+p2T!o{c>K^0(~FMZmti9H=>Fp=C#uKZ4HGxJmlACG_}SL~B<2b|2*hC*jHp_Fdv=b)1r zTN)KjuBGL++#%)(E+^t;$dM!N8sWhroc}hg`x}+#v?d&|_F$>bI~vo*Im`S*?C*br zm!c*2sFD1Fo?2UOj1*YZ1x_y_1GKb>z1xyfi&XRPhD-ESrHXfoq$oxm@+jIwJ3V`# zXeFlIa1Xi`xys+;k#FF;=s#uQklW+dBzksNh^JCL#zeV!Jk0Eg{-g~#a%f5SEnxD< z5FYzJF}2CeQ&#P`VyUD3VqERS&Y@OEiXV*1E!B$hb-yjTF7>Ws9tFXo zFIlyoAEE0Qr54}7?fZi(SG(W{G2gA=d;u?eImMB#jumNr*v8F@@5DDUGKFZed@BO$ zzoP)-^e5v1MxT|OAAQ_%VW6wskQkQ*bDX4bqV#efGQrD*lpTF75}pHRY?-(^mH-Dx zJjT;D9#`8I5Aa$z-Z#T&n)jRVF+Ir2leVQ|Jcg-@F~DL6czlSUF7gJ4F(+9@j*rIXYP&Ix&-c=01OdzGai!EN;I53lv-|iWd4*TXJcX1y z@+D`2!Sko;}BixF5sCZzXC|xG4Z}j5I$K%eF!lWD44u(S#^J5fz`$0@sQm9J~m_jt4RE8S#A7t;S5iDUV z19lJxoIutGBJ+;~J6%r_hbtZNRILs!`@2%{<=W5rnFyy;V?tmQEOC>A#txt0=o``T zh0mb*3C%b8dC3mxw!NTz9sc1>e*TdUV9>5|*}vcu(m4*~HkZpK2Q1d6r!H~SEtSM_ z($Ufop`V4sT>KDIQK@aDqJ5Y=PSUl!(GoA-CT|ZWy>kcmkdF*A>edl#IqX+q=R&qm zymj1hQz3(kpXp2ywDzZpueIg~lJC1CL2&+-yM&aKM_roAsg;?oOY+?c)KWK*j{W{P zDTR2LsNKlOh7;#3fi67-nQtqA9&w?Ix~I10?k7Udt;%qSW4Q9xDPud_bAJv_m^5L8 zY&LiZo)}|dVoN%nj~>yp=N3VdN5LfIPE+uXue)~T(Mb;6HenAC_CM+~J&P)Njyb3; zj#1j$b!Fq8BJF`l5w)&!nm7bzAVwUJ2hz)ED73llh?ht1Ev>U`$UbWS;`r@HwPwE$ zi0chhoH#{~2R>imrOJc!Y^zVa;6Slo+`)UIcFlx)_Hf8K-nLK1ik^LSiFoqF@2(;! zqyxiMreQOLH(L#967)x54QN-Y-7mwPAQb_9PkSwdF~ZELefGjdAmg)|}jY7;Fj21m|?L zj;w~7;>Xw&V_!g;%Dp`o#$KLdQaCGaEC}kQuGK_zs~U59oPsnS?vA_VT@|GI6-Zpy zVHPV&Wll3wmPYXpJIN=x?Y28~be9-nYv&VloSJuz?6#BX5=hhcp6P>(@>~9KUahmo zF*giIdD()Ns_-5LE{$N`IrUDMV}d-pAbI$No0>kb$@MV`BRXF>Z726n!2r)xc?p0X z$J*p$*HJ2btnFipG|weG9djFfh&eOMcGa*tx3py}5#W$JUnOW?rhPC$OVIcTl{7+i z!EI_wT19X1{vboC8(>OrnhhUM?*oC=DA8#%#{Eo1~Fz zht{TUk~ZP5P2I>JP8*W*h~VWor4onF>9(K@Wy;0dyNo7V>ETY7aPjuOducB24mblh zP~_<%SYAHH`^82M&(e%PF80He9d`_KS(NSymz=q|3T!VqucYN0Nwsbt_ruzmNl~dU|;SpKxcON*ZIIY=R=T%m{bzWuFTjy0)y>(t?)mz`i&6GHb zitZA(pPioEmhJW72U(P(WO*=ZZCx@W+2D;=y$#-Y)!X2WS3SKi)6@GhJ-si})B7?# zy)V<#`!YSfFVoZeGQEx6(atL7r?ZfJPanW6D~X^ga;S|*GP++n;Fx7}NHgs{K^X0M z8|_r>Zs})~9hcNYyC=cGx9ga;87hqm;ucNFQzAymdG3lw8)$&6=~bSht;dMf74%Q9Ic+d4Ld#^GvU_y5`Ao( zFFh&o?hbV z=_Q_?UgGKLC7zyM;_2y@ot|#l=~aqfFY)yB5>HPr@$~c(Pp?w^dWol}mw0-5iKnNR zczPA@x9J7m{niV-`>hvv_ggRU?zdi0O9+ZTDE&d{4@!Sf`h(&RYLGzKPvvH_@m;Fia#p;sQ9DekBUDk{;2q);*W|yD*mYWYsFtH{#xqDt=u%(%V%0n~Hx^@oy^r zO~t>d_%{{5Zf@*tD*i3Szoq!M6#tgu-%|WrihoP#-%|WrihoP-Zz=vQ#lNNaw-o=D z(!Ztndy2oO_F&dx?mq14?!%t$KJ4l4!=COw?CI{qp6*}h>HdYD?qBHX{)L|IKJ4l4 z!=COw?CI{qp6)*E>F&dx?mq14?!%t$KJ4l4!=COw?CI{qp6)*E>F&dx?mq14?!%t$ zKJ4l4!(LzM*WHIb-F?{8-G@Ehec038hdteW*wfvIJ>7lS)7^(X-F?{8-G@Ehec025 z0zKV**wfvIJ>7lS)7^(X-F?{8-G@Ehec038hdteW*wfvIJ>7lS)7^(X-F?{8-G@Eh zec038hrQih?`6ehrPxBki#7(F$~?raY{c_RWG)J71R<|!&w>XXU5d7H(yw3_ktUyB zCcDC65jR!gGjD)To|J%9rX-eg5EW66({#ZD`WnOaHHPbJ z4A<8fuCF%&`+6g=uQvkwdLyu}Hv;>5Be1VG0{aDf&c5CV?CXudzTODz>y5y^-U#gL zjljO%2<+>Pz<$A=xnHX6O7=Ycl09?3WY63$*)#Vwa_DR1(AUVJuaQGvBZt054tImTRI@7-RIA=hz;#gK_>77yj30&GF$c^Zkim0y(hr>D|hw z93Ovi`uOR#kAujH6w0i^D#=u_Bn917QapJTHc zceb)=<&gqi&){;|_2|Xn`F*&KKEQEFQ-hVhA+H1F%MLoyMig1hgfn(5q$IG^4BH#D z8`9FMl4z~RyV#q?Ysu+J(;bV6ARne+8Je3@0F@Yq(D(I=-9Eqdp`zrWqU52XUr6>KeNhP+PvyL`$!UO zVaUXV6ipVFZZw(ZXj+@*nex^UZ4NyH*S!GY9NO2JpIml>Uu;d` zImN}(eLjSKhW*bFJKlLW*D>Eh6MoYS_CJ0tMcxQTY)!)(jU~ z(;x*r!)8?kT*M{r!_zMRg~JbH_8YwYz1h2U#4Zgy_GYnZm(yr3PltC$M#p;-&u1UL zJKnpFWS#FVU;-RpA_JV%$CJ-^W8f7Q$~*QOETL1pDTD_mXt@3k+4(rn7m3<1cN5>1 zu+%1`CCv=?J}7B3=o4^k;Pm7!mH=><^l*R#;;p3yNntrRZIHVz#t{Jp0iP(u*2@ei z*tLATcjE{zCLm832^{Y&yv1iu$Jb5lV%d9jymuRCNil86_c0Ix)eY?~N`r1~l=m_L zFKF!zoW_f#(~tOwq5sw&iVu9R;~vG+=Gwu>(`m%KcM~@XV(%Yn0*7Rk-T72`sIZg6 z(*^YY_`qr-xrI#!CgH`S(__k3>$U*F*?YH#uSq-1;QDNSy`4~KapV-H8TdbEju-jV z2MulLn?O;f_a2IS?}#sabR12z0FFYSVDP5X$ut_@-c8;sjv(`y!vO10r+9lVCla>X zTqt?l`QoFo}4;Wck}2Y-cvzQ<=B!PPXneJLAcpNu3h0}DfCcTib1}vj^}nOA|TCR zwE;Ukj`x5WjF#!W{XuV{xFO-aF2&pCXd#*T?DwQ$f{HS3f3kzzK=g1MN7JcTp{lh8VyhEEshl3kTPwv7p z92~L3Q71CIfH zyCtC6%w-G99IV}=!7`0>HP;o@4Xti8Gv|0^hSa$<5kz>x>O_N~@c<$<#9KcQl+z2$ zMTv%fD3MMu3n3C>f+*SF3FgR5L^p-g9W5Q3(L_ggG&~$d>-spMbTFGw6E>hi^Gpz; zKzGhFh9m8UjnT&TIE99l*EEzR-*u;~;@7hhV z%fo$qew=?q1Ox2WKSz-g^MRZWo5@ zW*POyZR*5eNVWQidt)>`U&4zVrZ15(VsBLVum(~B8mIr|I>pU9^tPbcsmw??yW zFU0X;Ik`eY(c57#h<0)R5{+=Yn5ZXvxv(#XJ!n>wuOY^kY}}4lhRfcu%z25`_opkD zXcz;t`+Inm1N($T2iEN!x${Balq+b=Rh`iBU{s@zU%ti&9fPctUUpIl{B958@Fc}M z;YOf%*~}+L+yspz%rV^F;QNmN3!og$99&~|z!tnpf`Lg+N;5!5p5zS;p*hA(`{~K! z6eFt^38YLDX(f3}IRGC^MfGdzqy6mHc6^f&8%#AFy*iKzC1=K}RSD76v9f zjtN+0>x#Zku6_|tVD{mXBfGp5vThw$Qd%!FOb(x5m|U-BILiNJhVyu9jgspWXPZM{ z<$%LFcDT$x$4?E4X^e*VE#5T1&qNgZ-EFOeXyDOZY|h0K6YL~R;BMV90{DY;dhzIz z1Byv5k1xBh!;#xU>xNfO!SCUOJ;y#`YkwG;5$Lqs z%Y+F(Y~f>mNSI3l9GdfIA;Z&t<6?bhZ8unp)@o~;*0!wmtZiG{vDUY?dj}T_X!-=( z{xH*!w$tHyeOYn#8{2xa?LNM5xZ!j#M!l0J9C8qC&&xr)XovwZ-b2t+k!jJeL*Zlq zT`^}eymbI>!$UlEeDh#$fEOk)a;9zi#p%J`qCH}YWOO%aEl;S3y8|2r~ ze9{M6fWp0`e4#<>h&Ny0DMmaBi>r+>KY?3RHS=`m6!R{ce8FJz<;y#qsT)}_a>ap^ z4q<_(OUCRt!P2p#oIiA|_h`kJ0w)n);;pIuQ>^{nR~(bn8?Oeq>gMH=wE@<<_(_Ug z+}FoklA^`yc26|{{jXa(Ze9)6CkY#qgkq9VP7$+T=pV#-@8`XIiDX{ zaZaJ*_!8@VotTHfAv~_!=4>Bj(#cl>BOu7Di^C2b{Sx+@5LrN<<2^v9XW!%8^63q1 zgTgn<_3zneu47ISZ~q=2e*gXHb@)KL!QDQ1&>bG<4)6$RGUI7z3>wrV2RH~fe2r6y zE#c(Uw9n7arg_j}KJU*N&^AlO9&XBb@pci*Q&>O3ZYYcbuniVNoJq>YB}#FLQeL7| zmnh*9C0?S`mnfS{lj&JsyG&Z2d%cGv7#Lk2AM-6c)QrvZ6k9x6ZQJbw+~k5$l*+9m zweHSO-*==I9XW26>iEH!fgg!4@Y-10zntv79lUM6{~qTH&M_&Bo4MX-fH!X=;(!Dn zEeOp=uD4%dS{I$r0Y&r9$ih_I<)$bOchR?;U<>ka`e5()?F<#p#@{&Bipq7&F~8cw z69LrJk^u&uOKS+5StPw}m%_|{W=>nXnV6yJJ^Z#~7gp5j|i@ol8|Hd1^WDZY&q-$shB zO8%r{# z(#)?izsme7^Q+9SGQUdviZ$^o*2J$^6Tf0j{E9X4E7ruXSQEcuP5g>A@hjHEuUHem zVom&tHSsIf#IINrzhce&*3EC-{MOBH-Tct0FW42KJjdpZRThB zEG(ae<+HGS7M9N<$!Bo>g7X)gzu^1@=Px*a!Tj)~8FP!5t)!V>aCruoXK;B2muGN! z2A5|vzi58Z{G$0q^NZ#e%`ciCUTPx0XnxWBqWMMhi{=;2FYZon4fYSFdsMcm>`>`b z*`@MhDnFs}Qz}2B@^dO*Q2CO|S5$sMZj=52jyHc})fTqYkEjPvwXTCTkC-kE!4z^I-av z3dYU{(|@3Xoo@%zLn_#Ib})TG;@%3CUbpmIh9OO@v+1t?ew zJVz-&c~9j7m5)@urvgc6Cf=I32kwa;>^zWG&h{YBEhPWmsqzISeZ zlgQsD{nttVF6qyc{+p!#HtD}h`d-r06^=JwB>RDN<*&DO^JUk%ee-ql)g=A*Nk2;Z zo1`Bn{lvOr+b(auP2@i${VeIjq@O4KBI)mv{yym+lKwI2-&>#A8o+>dI@8OB?QGb| zhJH5eX2XxO;V0Sf(`@)zHvBvrzQ~3zv*D|3_(e8+oejUthF@jFH`(xQHvBppzRQN^ z+3=fe_-!`)E*r2s?VRps!;5Ud>25n=7QqHgF4%xcMH^mc19qL6^80K!$_A`D+37eN zFf(Hc=5TCyn+<=+hO=zI=b8Or;>L!HY3Rd0D(Ct8ZNrlT+=ysrB1I8J;9Vkas-cUKFazf>l%3CUb zpmIiKNadW$1r;2eJ43eviez}m-e7r!58^6s^t z!um7(evaQ4_J%30lo#q08S1}FI>m-|N)B}j4|U29b&3#mN)dGm z5_QTFb&3;pN)&Yp6?MuLb&3{sN*8qs79)95(>K4AsQqUbgM%&NGRw|hroX*=thTVj8M>h4$&B)pxYdxF+xFi zIYeWGf^KpM{D*?>afqe}1>NEhO%V#Z!y%d?6m)|_;6D^}e?v4xDCqVu14#wl-4G2C z3c9%=8X^>QZ$mUhDCpLPXoyhIoej|tp`aTZq9H;-_ccUAgo18sh=vFS-PI5c5emAg zAsQkSbWcMx#NiM!I^>`cGHRVAK|2eBI?IDPi-bB$g*pp{I?IMSi-$T(h&l_2I?IVV zi;6l+i#iL8I?IeYi;X%KI?Iwei<3G_lsXHQI?I(hicqk`Su+!`meLR#uP&uPAq=MTOPSM9hc}L|vl@C-tQo({J)-+Gg zaYALt59w^?_cRAzVN3HVVJpsTy}{K>>~eb8V+noc$JjV2!_FagB!M#9$DsqPK+)6h z?CD0|e!s<$0tNml4wf| zz2>CG9Yr?$c)WkgDUX?Na4Q01xbf{C1JC}tO~s9`Un|_UwXcyy`2WQ*wms5-x9#4@ zu$Qy8pR$Gv+MPAL7~-rQwvpcaK4mTW#jXx#tw~us%2|7pvv#aZok;zltl_vu&e~fg z@l09sraN3#XYSc>vJ1$e1^Z{UzFvy5Hd)Iev3aA;0Bdw}gG=eWTF8y>Os4Kw4s z&0_!HZpuVkba#~YkyR;gt+&BrWI+O3%N!0jwZ(6_KvyTZXwH*dz+ky(ℜFC&>k5 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 literal 0 HcmV?d00001 diff --git a/action.cpp b/action.cpp new file mode 100644 index 000000000..24d0057ee --- /dev/null +++ b/action.cpp @@ -0,0 +1,43 @@ +#include "stdafx.h" + +vector dirActions {ActionId::MOVE, ActionId::TRAVEL, ActionId::FIRE, ActionId::THROW_DIR}; + +Action::Action() { +} + +Action::Action(ActionId i) : id(i) { + CHECK(!contains(dirActions, id)) << "Id " << (int)id << " needs direction"; +} + +ActionId Action::getId() { + return id; +} + +Action::Action(ActionId i, Vec2 dir) : id(i), direction(dir) { + CHECK(contains(dirActions, id)) << "Id " << (int)id << " doesn't have direction"; +} + +Vec2 Action::getDirection() { + CHECK(contains(dirActions, id)) << "Id " << (int)id << " doesn't have direction"; + return direction; +} + +std::ostream& operator << (std::ostream& o, Action a) { + o << (int) a.getId(); + if (contains(dirActions, a.getId())) + o << " " << a.getDirection(); + return o; +} + +std::istream& operator >> (std::istream& in, Action& a) { + int id; + in >> id; + if (contains(dirActions, (ActionId) id)) { + Vec2 v; + in >> v; + a = Action((ActionId) id, v); + } else + a = Action((ActionId) id); + return in; +} + diff --git a/action.h b/action.h new file mode 100644 index 000000000..92c742045 --- /dev/null +++ b/action.h @@ -0,0 +1,44 @@ +#ifndef _ACTION_H +#define _ACTION_H + +#include + +enum class ActionId { + MOVE, + TRAVEL, + FIRE, + PICK_UP, + EXT_PICK_UP, + DROP, + EXT_DROP, + SHOW_INVENTORY, + APPLY_ITEM, + EQUIPMENT, + THROW, + THROW_DIR, + SHOW_HISTORY, + HIDE, + PAY_DEBT, + CHAT, + WAIT, + UNPOSSESS, + IDLE +}; + +class Action { + public: + Action(); + Action(ActionId); + Action(ActionId, Vec2 direction); + ActionId getId(); + Vec2 getDirection(); + + private: + ActionId id; + Vec2 direction; +}; + +std::ostream& operator << (std::ostream&, Action); +std::istream& operator >> (std::istream&, Action&); + +#endif diff --git a/artifacts.txt b/artifacts.txt new file mode 100644 index 000000000..cafd620bf --- /dev/null +++ b/artifacts.txt @@ -0,0 +1,233 @@ +Anglos +Angris +Angu Blade +Anguirit +Angul-blade +Aran Jing +Aranagicke +Aranajandir +Arandimor +Arandir +Bang Death +Bang Star +Bangerpear +Banglamdril +Bangu Bang +Bear Shard +Bear Star +Beargh +Bearonfirel +Bearsil +Beltach +Bladbolt +Bladhund +Bladhunt +Bladhus +Blightsteel +Bloodband +Bloodbang +Bloodbolt +Bloodlusher +Bloothuse +Bran Jinger +Branagmor +Brandimor +Brandimord +Branrúth +Bullblade +Bullcrusher +Bullcrust +Bullfist +Bullnir +Bully Blade +Burnblade +Burnbladhus +Burninguire +CalachBang +Caladbana +Calamdrit +Calare Bite +Calarefire +Calaze Star +Caudimordal +Caudimtooth +Changabang +Char Shard +Char Spirit +Char Stach +Char Star +Chargh +Clar Spiril +Clarendal +Clarendax +Clargh +Claronfist +Clarsil +Corpal Band +Deathunter +Drambolg +Durefist +Durewinë +Ebony Blace +Ebony Death +Fire Blade +Firefist +Firendir +Firewind +Firewinder +Firewinë +Flamboko +Frakebitch +Frakebite +Frost Blade +Glamboko +Glampirist +Graysword +Grimordax +Grimtopper +Gron's Bane +Gronfire +Grony Blade +Grony Death +Hellblade +Hellblazor +Hellcrusher +Hellcrust +Hellfist +Hellseye +Helly Blade +Ironfire +Irony Blade +Irony Death +Jianrúth +Jing Death +Jing Spiril +Lugh Razor +Lughtstooth +Meshersteel +Morakir +Moral Razor +Morgh Rede +Morgulsword +Mournir +Nehillblade +Nehirlwinë +Razorblash +Razorbolt +Redempir +Ring Death +Ring Shard +Ring Spirit +Ring Star +Ringersteel +Ringlaw +Ringrist +Serpal Band +Serpal Bang +Serpal Bite +Shar Spiril +Shar Stach +Shar Star +Shargh +Sharsil +Silent Bang +Silent Bite +Silent Blaw +Silencer +Skul-blach +Skul-blade +Skul-blare +Skul-blaw +Skullseye +Skullsword +Snagmor +Snagmord +Snagmordax +Snakebite +Snakebitch +Snakirite +Soul-blach +Soul-blade +Speedhunter +Spear Spel +Spear Spir +Speathwinë +Spellblach +Spellcrush +Spellfire +Spelth +Spelthwinë +Spirel +Spirellfire +Spirite +Starendal +Starendax +Stargh +Starond +Starondir +Starsil +Stormblade +Stordal +Stordax +Storlent +Stormlasil +Sure Bitch +Sure Bite +Sure Blade +Sure Brakir +Sure Bul +Surefist +Surewind +Surewinë +Thundempire +Thunderbolg +Thunte +Thunteel +Thunteind +Thunteinë +Umbral Bane +Umbralade +Umbralibur +Umbrindle +Umbringer +Umbrinn +Umbrinë +Undeadbolg +Undeadhunt +Undempir +Underblade +Underbolt +Uzun Brakk +Vampirel +Vampirite +Vampirlwing +Vargh Rede +Vargul-blaw +Vargulseye +Vargulswand +Vargulswane +Vargulswang +Vasilibur +Vasiligh +Vasilir +Vorpendal +Vorpendax +Vorpent +Werefire +Werefist +Werendinë +Werendúril +Werendúth +Werewind +Whire Brand +Whire Shard +Whirel +Whirelth +Whirit +Whiritch +Whirlwing +Whirlwinë +WitchBanaga +WitchBand +WitchBandir +WitchBang diff --git a/attack.cpp b/attack.cpp new file mode 100644 index 000000000..7da026f72 --- /dev/null +++ b/attack.cpp @@ -0,0 +1,29 @@ +#include "stdafx.h" + +using namespace std; + +Attack::Attack(const Creature* a, AttackLevel l, AttackType t, int h, int s, bool b) : attacker(a), level(l), type(t), toHit(h), strength(s), back(b) {} + +const Creature* Attack::getAttacker() const { + return attacker; +} + +int Attack::getStrength() const { + return strength; +} + +int Attack::getToHit() const { + return toHit; +} + +AttackType Attack::getType() const { + return type; +} + +AttackLevel Attack::getLevel() const { + return level; +} + +bool Attack::inTheBack() const { + return back; +} diff --git a/attack.h b/attack.h new file mode 100644 index 000000000..99eca10c2 --- /dev/null +++ b/attack.h @@ -0,0 +1,28 @@ +#ifndef _ATTACK_H +#define _ATTACK_H + +#include "enums.h" + +class Creature; + +class Attack { + public: + Attack(const Creature* attacker, AttackLevel level, AttackType type, int toHit, int strength, bool back = false); + + const Creature* getAttacker() const; + int getStrength() const; + int getToHit() const; + AttackType getType() const; + AttackLevel getLevel() const; + bool inTheBack() const; + + private: + const Creature* attacker; + AttackLevel level; + AttackType type; + int toHit; + int strength; + bool back; +}; + +#endif diff --git a/aztec_names.txt b/aztec_names.txt new file mode 100644 index 000000000..93c8de3b7 --- /dev/null +++ b/aztec_names.txt @@ -0,0 +1,382 @@ +Cama +Camaxoch +Camaxochtl +Camaxtl +Citl +Citlac +Citlaca +Citlacel +Citlal +Citli +Citlinteca +Citlintia +Citlintica +Coatl +Coatlaca +Coatlal +Coatlalli +Coatli +Coaxtl +Coaxtlal +Coaxtlalli +Coaxtli +Coyotia +Coyotica +Coyoticac +Coyotical +Coyoticatl +Cual +Cualxoch +Cualxochtl +Cuatl +Cuatlacatl +Cuatlacel +Cuatlal +Cuatlalli +Cuatli +Eztl +Eztlac +Eztlacalli +Eztlacatl +Eztlacel +Eztlacelel +Eztlal +Eztlalli +Ich +Ichitl +Ichitlalli +Ichitli +Ichtac +Ichtacel +Ichtacoatl +Ichtl +Ichtlacel +Ichtlalli +Ichtli +Icnoch +Icnochitl +Icnochitli +Icnochtac +Icnochtaca +Icnochtl +Icnochtli +Icnoyotia +Icnoyotica +Ihual +Ihualli +Ihualxoch +Ihuatl +Ihuatlac +Ihuatlal +Ihuatlalli +Ihuatli +Ihuica +Ihuicac +Ihuicaca +Ihuicacac +Ihuicacatl +Ihuicacel +Ihuical +Ihuicalli +Itotica +Itoticac +Itoticaca +Itoticacel +Itotical +Itoticalli +Itoticatl +Itoticatli +Itotl +Itotlacal +Itotlal +Itotlalli +Itotli +Itotlintia +Ixtl +Ixtlac +Ixtlaca +Ixtlacel +Ixtlacelel +Ixtlal +Ixtlalli +Mazal +Mazalli +Mazalxoch +Mezca +Mezcac +Mezcaca +Mezcacacel +Mezcacalli +Mezcacatl +Mezcacatli +Mezcacel +Mezcacelel +Mezcacoatl +Mezcal +Mezcalli +Mezcalxoch +Mezcatl +Mezcatli +Meztl +Meztlacatl +Meztlal +Meztlalli +Mezuma +Mezumaxoch +Mezumaxtl +Mezumaxtli +Mil +Mili +Milinteca +Milintia +Monteca +Montecac +Montecacel +Montecal +Montecalli +Montecatl +Montecatli +Montezca +Montezcac +Montezcal +Montezcatl +Monteztl +Monteztli +Montia +Montica +Monticac +Monticaca +Monticacel +Montical +Monticalli +Monticatl +Monticatli +Nah +Nahual +Nahualli +Nahualxoch +Nahuica +Nahuicac +Nahuicaca +Nahuicacel +Nahuical +Nahuicalli +Nahuicatl +Nahuicatli +Neca +Necac +Necaca +Necacac +Necacal +Necacatl +Necacatli +Necacel +Necacelel +Necacoatl +Necacoaxtl +Necal +Necalxoch +Necatl +Necatli +Nenetzal +Nenetzalli +Nenetzatl +Nenetzatli +Nenetzi +Nenoch +Nenochitl +Nenochitli +Nenochtac +Nenochtaca +Nenochtl +Nenochtli +Nenoyotia +Nenoyotica +Nenoyotl +Nenoyotli +Ohtac +Ohtaca +Ohtacac +Ohtacacel +Ohtacalli +Ohtacatl +Ohtacatli +Ohtacel +Ohtacelel +Ohtacoatl +Ohtacoatli +Ohtacoaxtl +Ohtl +Ohtlac +Ohtlacoatl +Ohtlal +Ohtlalli +Ohtlalxoch +Patl +Patlac +Patlacel +Patlalli +Quetl +Quetlac +Quetlacel +Quetlalli +Quetli +Quetzatl +Quetzatlac +Quetzatli +Quetzi +Tenetl +Tenetlac +Tenetlalli +Tenetli +Tenetzal +Tenetzalli +Tenetzatl +Tenetzatli +Tenetzi +Tenoyotia +Tenoyotica +Tenoyotl +Tenoyotlal +Tenoyotli +Tezca +Tezcac +Tezcaca +Tezcacatl +Tezcacatli +Tezcacel +Tezcal +Tezcalli +Tezcalxoch +Tezcatl +Tezcatlal +Tezcatli +Teztl +Teztlaca +Teztlacel +Teztlal +Teztlalli +Teztli +Tezuma +Tezumaxoch +Tezumaxtl +Tezumaxtli +Tlac +Tlaca +Tlacalli +Tlacatl +Tlacatli +Tlacel +Tlacoatl +Tlacoatli +Tlacoaxoch +Tlacoaxtl +Tlacoaxtli +Tlal +Tlalxoch +Tlalxochtl +Toch +Tochitl +Tochitlac +Tochitli +Tochtac +Tochtaca +Tochtacatl +Tochtacel +Tochtl +Tochtlalli +Tolotia +Tolotica +Toloticaca +Toloticatl +Tolotl +Tolotlalli +Tolotli +Tolteca +Toltecac +Toltecacac +Toltecacel +Toltecal +Toltecalli +Toltezca +Toltezcac +Toltezcatl +Tolteztl +Tolteztli +Toltezuma +Xiuhcoaxtl +Xoch +Xochtac +Xochtaca +Xochtacac +Xochtacal +Xochtacatl +Xochtacel +Xochtl +Xochtlacel +Xochtlal +Xochtlalli +Xochtli +Yaotia +Yaotica +Yaoticac +Yaoticacel +Yaoticalli +Yaoticatl +Yaoticatli +Yaretl +Yaretlal +Yaretli +Yaretzal +Yaretzalli +Yaretzatl +Yaretzatli +Yolotia +Yolotica +Yoloticac +Yoloticatl +Yolotl +Yolotlac +Yolotlal +Yolotlalli +Yolteca +Yoltecac +Yoltecacal +Yoltecacel +Yoltecal +Yoltecalli +Yoltecatl +Yoltecatli +Yoltezca +Yoltezcal +Yoltezcatl +Yolteztl +Yolteztli +Yoltezuma +Zaniya +Zaniyaniya +Zaniyanya +Zaniyanyah +Zanya +Zanyah +Zanyahual +Zanyahuatl +Zanyahuica +Zanyaniya +Zanyaniyah +Zanyanya +Zanyanyah +Zya +Zyah +Zyahual +Zyahualli +Zyahuatl +Zyahuatlal +Zyahuatli +Zyahuica +Zyahuicac +Zyahuical +Zyahuicatl +Zyaniya +Zyaniyah +Zyaniyanya diff --git a/collective.cpp b/collective.cpp new file mode 100644 index 000000000..43bcdb126 --- /dev/null +++ b/collective.cpp @@ -0,0 +1,810 @@ +#include "stdafx.h" + +enum Warning { NO_CHESTS, MORE_CHESTS, NO_BEDS, MORE_BEDS, NO_HATCHERY, NO_TRAINING }; +static const int numWarnings = 6; +static bool warning[numWarnings] = {0}; +static string warningText[] { + "You need to build a treasure room.", + "You need a larger treasure room.", + "You need a lair for your minions.", + "You need a larger lair for your minions.", + "Your minions are hungry!", + "You need training posts for your minions"}; + +vector Collective::buildInfo { + BuildInfo({SquareType::FLOOR, 0, "Dig"}), + BuildInfo({SquareType::TREASURE_CHEST, 0, "Treasure room"}), + BuildInfo({SquareType::TRIBE_DOOR, 20, "Door"}), + BuildInfo({SquareType::BRIDGE, 5, "Bridge"}), + BuildInfo({SquareType::BED, 50, "Lair"}), + BuildInfo({SquareType::HATCHERY, 10, "Hatchery"}), + BuildInfo({SquareType::TRAINING_DUMMY, 50, "Training room"}), + BuildInfo({SquareType::WORKSHOP, 50, "Workshop"}), + BuildInfo({SquareType::GRAVE, 50, "Graveyard"}), + BuildInfo({TrapType::BOULDER, "Boulder trap", ViewId::BOULDER}), + BuildInfo({TrapType::POISON_GAS, "Gas trap", ViewId::GAS_TRAP}), + BuildInfo(BuildInfo::IMP), + BuildInfo(BuildInfo::GUARD_POST), +}; + +Collective::Collective(CreatureFactory factory, CreatureFactory undead) + : minionFactory(factory), undeadFactory(undead), credit(50) { + EventListener::addListener(this); + // init the map so the values can be safely read with .at() + for (BuildInfo info : buildInfo) + if (info.buildType == BuildInfo::SQUARE) + mySquares[info.squareInfo.type].clear(); + else if (info.buildType == BuildInfo::TRAP) + trapMap[info.trapInfo.type].clear(); +} + + +const int basicImpCost = 20; +int startImpNum = -1; +const int minionLimit = 16; + + +void Collective::render(View* view) { + if (possessed && (!possessed->isPlayer() || possessed->isDead())) { + if (contains(team, possessed)) + removeElement(team, possessed); + if (possessed->isDead() && !team.empty()) { + possess(team.front(), view); + } else { + view->setTimeMilli(possessed->getTime() * 300); + view->clearMessages(); + ViewObject::setHallu(false); + possessed = nullptr; + team.clear(); + gatheringTeam = false; + teamLevelChanges.clear(); + view->resetCenter(); + } + } + if (!possessed) { + view->refreshView(this); + } else + view->stopClock(); +} + +bool Collective::isTurnBased() { + return possessed != nullptr; +} + +vector> Collective::getTrapItems(TrapType type, set squares) const { + vector> ret; + if (squares.empty()) + squares = mySquares.at(SquareType::WORKSHOP); + for (Vec2 pos : squares) { + vector v = level->getSquare(pos)->getItems([type, this](Item* it) { + return it->getTrapType() == type && !markedItems.count(it); }); + for (Item* it : v) + ret.emplace_back(it, pos); + } + return ret; +} + + +void Collective::refreshGameInfo(View::GameInfo& gameInfo) const { + gameInfo.infoType = View::GameInfo::InfoType::BAND; + View::GameInfo::BandInfo& info = gameInfo.bandInfo; + info.number = creatures.size(); + info.name = "KeeperRL"; + info.buttons.clear(); + int gold = numGold(); + for (BuildInfo button : buildInfo) + switch (button.buildType) { + case BuildInfo::SQUARE: { + BuildInfo::SquareInfo& elem = button.squareInfo; + info.buttons.emplace_back( + elem.name + (elem.cost > 0 ? (" $ " + convertToString(elem.cost)) : "") + + (elem.cost > 0 ? " [" + convertToString(mySquares.at(elem.type).size()) + "]" : ""), + SquareFactory::get(elem.type)->getViewObject(), + elem.cost <= gold); + } + break; + case BuildInfo::TRAP: { + BuildInfo::TrapInfo& elem = button.trapInfo; + int numTraps = getTrapItems(elem.type).size(); + info.buttons.emplace_back(elem.name + " (" + convertToString(numTraps) + " ready)", + ViewObject(elem.viewId, ViewLayer::LARGE_ITEM, ""), numTraps > 0); + } + break; + case BuildInfo::IMP: + info.buttons.emplace_back("Imp $ " + convertToString(getImpCost()), + ViewObject(ViewId::IMP, ViewLayer::CREATURE, ""), getImpCost() <= gold); + break; + case BuildInfo::GUARD_POST: + info.buttons.emplace_back("Guard post", + ViewObject(ViewId::GUARD_POST, ViewLayer::CREATURE, ""), true); + + } + info.activeButton = currentButton; + info.tasks = minionTaskStrings; + info.monsterHeader = "Monsters: " + convertToString(minions.size()) + " / " + convertToString(minionLimit); + info.creatures.clear(); + for (Creature* c : minions) + info.creatures.push_back(c); + info.enemies.clear(); + for (Vec2 v : myTiles) + if (Creature* c = level->getSquare(v)->getCreature()) + if (c->getTribe() != Tribe::player) + info.enemies.push_back(c); + info.numGold = numGold(); + info.warning = ""; + for (int i : Range(numWarnings)) + if (warning[i]) { + info.warning = warningText[i]; + break; + } + info.time = heart->getTime(); + info.gatheringTeam = gatheringTeam; + info.team.clear(); + for (Creature* c : team) + info.team.push_back(c); +} + +const MapMemory& Collective::getMemory(const Level* l) const { + return memory[l]; +} + +static ViewObject getTrapObject(TrapType type) { + switch (type) { + case TrapType::BOULDER: return ViewObject(ViewId::UNARMED_BOULDER_TRAP, ViewLayer::LARGE_ITEM, "Unarmed trap"); + case TrapType::POISON_GAS: return ViewObject(ViewId::UNARMED_GAS_TRAP, ViewLayer::LARGE_ITEM, "Unarmed trap"); + } + return ViewObject(ViewId::UNARMED_GAS_TRAP, ViewLayer::LARGE_ITEM, "Unarmed trap"); +} + +ViewIndex Collective::getViewIndex(Vec2 pos) const { + ViewIndex index = level->getSquare(pos)->getViewIndex(this); + if (marked.count(pos)) + index.setHighlight(HighlightType::BUILD); + if (!index.hasObject(ViewLayer::LARGE_ITEM)) { + if (traps.count(pos)) + index.insert(getTrapObject(traps.at(pos).type)); + if (guardPosts.count(pos)) + index.insert(ViewObject(ViewId::GUARD_POST, ViewLayer::LARGE_ITEM, "Guard post")); + } + return index; +} + +bool Collective::staticPosition() const { + return false; +} + +Vec2 Collective::getPosition() const { + return heart->getPosition(); +} + +enum Selection { SELECT, DESELECT, NONE } selection = NONE; + + + +void Collective::addTask(PTask task, Creature* c) { + taken[task.get()] = c; + taskMap[c] = task.get(); + addTask(std::move(task)); +} + +void Collective::addTask(PTask task) { + tasks.push_back(std::move(task)); +} + +void Collective::removeTask(Task* task) { + if (marked.count(task->getPosition())) + marked.erase(task->getPosition()); + for (int i : All(tasks)) + if (tasks[i].get() == task) { + removeIndex(tasks, i); + break; + } + if (taken.count(task)) { + taskMap.erase(taken.at(task)); + taken.erase(task); + } +} + +void Collective::markSquare(Vec2 pos, BuildInfo::SquareInfo info) { + tasks.push_back(Task::construction(this, pos, info.type)); + marked[pos] = tasks.back().get(); + if (info.cost) + completionCost[tasks.back().get()] = info.cost; +} + +void Collective::unmarkSquare(Vec2 pos) { + Task* t = marked.at(pos); + if (completionCost.count(t)) { + returnGold(completionCost.at(t)); + completionCost.erase(t); + } + removeTask(t); + marked.erase(pos); +} + +int Collective::numGold() const { + int ret = credit; + for (Vec2 pos : mySquares.at(SquareType::TREASURE_CHEST)) + ret += level->getSquare(pos)->getItems(Item::typePredicate(ItemType::GOLD)).size(); + return ret; +} + +void Collective::takeGold(int number) { + int num = number; + if (num == 0) + return; + CHECK(num > 0); + if (credit) { + if (credit >= num) { + credit -= num; + return; + } else { + num -= credit; + credit = 0; + } + } + for (Vec2 pos : randomPermutation(mySquares[SquareType::TREASURE_CHEST])) { + vector goldHere = level->getSquare(pos)->getItems(Item::typePredicate(ItemType::GOLD)); + for (Item* it : goldHere) { + level->getSquare(pos)->removeItem(it); + if (--num == 0) + return; + } + } + Debug(FATAL) << "Didn't have enough gold"; +} + +void Collective::returnGold(int num) { + if (num == 0) + return; + CHECK(num > 0); + if (mySquares[SquareType::TREASURE_CHEST].empty()) { + credit += num; + } else + level->getSquare(chooseRandom(mySquares[SquareType::TREASURE_CHEST]))-> + dropItems(ItemFactory::fromId(ItemId::GOLD_PIECE, num)); +} + +int Collective::getImpCost() const { + if (imps.size() < startImpNum) + return 0; + return basicImpCost * pow(2, double(imps.size() - startImpNum) / 5); +} + +void Collective::possess(const Creature* cr, View* view) { + CHECK(contains(creatures, cr)); + CHECK(!cr->isDead()); + Creature* c = const_cast(cr); + if (c->isSleeping()) + c->wakeUp(); + freeFromGuardPost(c); + c->pushController(new Player(c, view, false, &memory)); + possessed = c; + c->getLevel()->setPlayer(c); +} + +bool Collective::canBuildDoor(Vec2 pos) const { + Rectangle innerRect = level->getBounds().minusMargin(1); + auto wallFun = [=](Vec2 pos) { + return level->getSquare(pos)->canConstruct(SquareType::FLOOR) || + !pos.inRectangle(innerRect); }; + return pos.inRectangle(innerRect) && + ((wallFun(pos - Vec2(0, 1)) && wallFun(pos - Vec2(0, -1))) || + (wallFun(pos - Vec2(1, 0)) && wallFun(pos - Vec2(-1, 0)))); +} + +bool Collective::canPlacePost(Vec2 pos) const { + return !guardPosts.count(pos) && !traps.count(pos) && + level->getSquare(pos)->canEnterEmpty(Creature::getDefault()) && memory[level].hasViewIndex(pos); +} + +void Collective::freeFromGuardPost(const Creature* c) { + for (auto& elem : guardPosts) + if (elem.second.attender == c) + elem.second.attender = nullptr; +} + +void Collective::processInput(View* view) { + CollectiveAction action = view->getClick(); + switch (action.getType()) { + case CollectiveAction::GATHER_TEAM: + if (gatheringTeam && !team.empty()) { + possess(team[0], view); + gatheringTeam = false; + for (Creature* c : team) { + freeFromGuardPost(c); + if (c->isSleeping()) + c->wakeUp(); + } + } else + gatheringTeam = true; + break; + case CollectiveAction::CANCEL_TEAM: gatheringTeam = false; team.clear(); break; + case CollectiveAction::ROOM_BUTTON: currentButton = action.getNum(); break; + case CollectiveAction::CREATURE_BUTTON: + if (!gatheringTeam) + possess(action.getCreature(), view); + else { + if (contains(team, action.getCreature())) + removeElement(team, action.getCreature()); + else + team.push_back(const_cast(action.getCreature())); + } + break; + case CollectiveAction::CREATURE_DESCRIPTION: messageBuffer.addMessage(MessageBuffer::important( + action.getCreature()->getDescription())); break; + case CollectiveAction::GO_TO: { + Vec2 pos = action.getPosition(); + if (!pos.inRectangle(level->getBounds())) + return; + switch (buildInfo[currentButton].buildType) { + case BuildInfo::IMP: + if (numGold() >= getImpCost()) { + PCreature imp = CreatureFactory::fromId(CreatureId::IMP, Tribe::player, + MonsterAIFactory::collective(this)); + for (Vec2 v : pos.neighbors8(true)) + if (v.inRectangle(level->getBounds()) && level->getSquare(v)->canEnter(imp.get())) { + takeGold(getImpCost()); + addCreature(imp.get()); + level->addCreature(v, std::move(imp)); + break; + } + } + break; + case BuildInfo::TRAP: { + TrapType trapType = buildInfo[currentButton].trapInfo.type; + if (getTrapItems(trapType).size() > 0 && canPlacePost(pos)){ + traps[pos] = {trapType, false, false}; + trapMap[trapType].push_back(pos); + } + } + break; + case BuildInfo::GUARD_POST: + if (guardPosts.count(pos) && selection != SELECT) { + guardPosts.erase(pos); + selection = DESELECT; + } + else if (canPlacePost(pos) && guardPosts.size() < minions.size() && selection != DESELECT) { + guardPosts[pos] = {nullptr}; + selection = SELECT; + } + break; + case BuildInfo::SQUARE: { + BuildInfo::SquareInfo info = buildInfo[currentButton].squareInfo; + bool diggingSquare = !memory[level].hasViewIndex(pos) || + (level->getSquare(pos)->canConstruct(info.type)); + if (diggingSquare || selection != NONE) { + if (!marked.count(pos) && selection != DESELECT && diggingSquare && + numGold() >= info.cost && + (info.type != SquareType::TRIBE_DOOR || canBuildDoor(pos))) { + markSquare(pos, info); + selection = SELECT; + takeGold(info.cost); + } else + if (marked.count(pos) && selection != SELECT) { + unmarkSquare(pos); + selection = DESELECT; + } + } + } + break; + } + } + break; + case CollectiveAction::BUTTON_RELEASE: selection = NONE; break; + + default: break; + } +} + +void Collective::onConstructed(Vec2 pos, SquareType type) { + CHECK(!mySquares[type].count(pos)); + mySquares[type].insert(pos); + if (contains({SquareType::FLOOR, SquareType::BRIDGE}, type)) + locked.clear(); + if (marked.count(pos)) + marked.erase(pos); +} + +void Collective::onPickedUp(Vec2 pos, vector items) { + CHECK(!items.empty()); + for (Item* it : items) + markedItems.erase(it); +} + +void Collective::onBrought(Vec2 pos, vector items) { +} + +void Collective::onAppliedItem(Vec2 pos, Item* item) { + CHECK(item->getTrapType()); + traps[pos].marked = false; + traps[pos].armed = true; +} + +void Collective::onAppliedItemCancel(Vec2 pos) { + traps.at(pos).marked = false; +} + +Vec2 Collective::getHeartPos() const { + return heart->getPosition(); +} + +ItemPredicate Collective::unMarkedItems(ItemType type) const { + return [this, type](Item* it) { + return it->getType() == type && !markedItems.count(it); }; +} + +void Collective::update(Creature* c) { + if (!contains(creatures, c) || c->getLevel() != level) + return; + for (Vec2 pos : level->getVisibleTiles(c)) { + myTiles.insert(pos); + ViewIndex index = level->getSquare(pos)->getViewIndex(c); + memory[level].clearSquare(pos); + for (ViewLayer l : { ViewLayer::ITEM, ViewLayer::FLOOR, ViewLayer::LARGE_ITEM}) + if (index.hasObject(l)) + memory[level].addObject(pos, index.getObject(l)); + } +} + +bool Collective::isDownstairsVisible() const { + Vec2 pos = getOnlyElement(level->getLandingSquares(StairDirection::DOWN, StairKey::DWARF)); + return memory[level].hasViewIndex(pos); +} + +void Collective::tick() { + if (isDownstairsVisible() && (minions.size() < mySquares[SquareType::BED].size() || minions.empty()) && + Random.roll(40) && minions.size() < minionLimit) { + PCreature c = minionFactory.random(MonsterAIFactory::collective(this)); + addCreature(c.get()); + level->landCreature(StairDirection::DOWN, StairKey::DWARF, std::move(c)); + } + warning[NO_BEDS] = mySquares[SquareType::BED].size() == 0 && !minions.empty(); + warning[MORE_BEDS] = mySquares[SquareType::BED].size() < minions.size() - vampires.size(); + warning[NO_TRAINING] = mySquares[SquareType::TRAINING_DUMMY].empty() && !minions.empty(); + warning[NO_HATCHERY] = mySquares[SquareType::HATCHERY].empty() && !minions.empty(); + map>> trapItems { + {TrapType::BOULDER, getTrapItems(TrapType::BOULDER, myTiles)}, + {TrapType::POISON_GAS, getTrapItems(TrapType::POISON_GAS, myTiles)}}; + for (auto elem : traps) { + vector>& items = trapItems.at(elem.second.type); + if (!items.empty()) { + if (!elem.second.armed && !elem.second.marked) { + addTask(Task::applyItem(this, items.back().second, items.back().first, elem.first)); + markedItems.insert({items.back().first}); + items.pop_back(); + traps[elem.first].marked = true; + } + } + } + for (Vec2 pos : myTiles) { + vector gold = level->getSquare(pos)->getItems(unMarkedItems(ItemType::GOLD)); + if (gold.size() > 0 && !mySquares[SquareType::TREASURE_CHEST].count(pos)) { + if (!mySquares[SquareType::TREASURE_CHEST].empty()) { + warning[NO_CHESTS] = false; + Optional target; + for (Vec2 chest : mySquares[SquareType::TREASURE_CHEST]) + if ((!target || (chest - pos).length8() < (*target - pos).length8()) && + level->getSquare(chest)->getItems(Item::typePredicate(ItemType::GOLD)).size() <= 30) + target = chest; + if (!target) + warning[MORE_CHESTS] = true; + else { + warning[MORE_CHESTS] = false; + addTask(Task::bringItem(this, pos, gold, *target)); + markedItems.insert(gold.begin(), gold.end()); + } + } else { + warning[NO_CHESTS] = true; + } + } + vector corpses = level->getSquare(pos)->getItems(unMarkedItems(ItemType::CORPSE)); + if (corpses.size() > 0) { + if (!mySquares[SquareType::GRAVE].count(pos) && + !mySquares[SquareType::GRAVE].empty()) { + Vec2 target = chooseRandom(mySquares[SquareType::GRAVE]); + addTask(Task::bringItem(this, pos, {corpses[0]}, target)); + markedItems.insert({corpses[0]}); + } + if (mySquares[SquareType::GRAVE].count(pos) && Random.roll(200) && + vampires.size() < mySquares[SquareType::GRAVE].size() && minions.size() < minionLimit) { + PCreature vampire = undeadFactory.random(MonsterAIFactory::collective(this)); + for (Vec2 v : pos.neighbors8(true)) + if (level->getSquare(v)->canEnter(vampire.get())) { + level->getSquare(pos)->removeItems(corpses); + vampires.push_back(vampire.get()); + addCreature(vampire.get()); + level->addCreature(v, std::move(vampire)); + break; + } + } + } + vector equipment = level->getSquare(pos)->getItems([this](Item* it) { + return minionEquipment.isItemUseful(it) && !markedItems.count(it); }); + if (!equipment.empty() && !mySquares[SquareType::WORKSHOP].empty() && + !mySquares[SquareType::WORKSHOP].count(pos)) { + Vec2 target = chooseRandom(mySquares[SquareType::WORKSHOP]); + addTask(Task::bringItem(this, pos, equipment, target)); + markedItems.insert(equipment.begin(), equipment.end()); + } + if (marked.count(pos) && marked.at(pos)->isImpossible(level) && !taken.count(marked.at(pos))) + removeTask(marked.at(pos)); + } +} + +bool Collective::canSee(const Creature* c) const { + return canSee(c->getPosition()); +} + +bool Collective::canSee(Vec2 position) const { + return memory[level].hasViewIndex(position) + || contains(level->getLandingSquares(StairDirection::DOWN, StairKey::DWARF), position) + || contains(level->getLandingSquares(StairDirection::UP, StairKey::DWARF), position); + for (Creature* member : creatures) + if (member->canSee(position)) + return true; + return false; +} + +void Collective::setLevel(Level* l) { + for (Vec2 v : l->getBounds()) + if (/*contains({SquareApplyType::ASCEND, SquareApplyType::DESCEND}, + l->getSquare(v)->getApplyType(Creature::getDefault())) ||*/ + l->getSquare(v)->getName() == "gold ore") + memory[l].addObject(v, l->getSquare(v)->getViewObject()); + level = l; +} + +vector Collective::getUnknownAttacker() const { + return {}; +} + +void Collective::onChangeLevelEvent(const Creature* c, const Level* from, Vec2 pos, const Level* to, Vec2 toPos) { + if (c == possessed) { + teamLevelChanges[from] = pos; + if (!levelChangeHistory.count(to)) + levelChangeHistory[to] = toPos; + } +} + +MoveInfo Collective::getMinionMove(Creature* c) { + if (possessed && contains(team, c)) { + Optional v; + if (possessed->getLevel() != c->getLevel()) { + if (teamLevelChanges.count(c->getLevel())) { + v = teamLevelChanges.at(c->getLevel()); + if (v == c->getPosition()) + return {1.0, [=] { + c->applySquare(); + }}; + } + } else + v = possessed->getPosition(); + if (v) { + if (auto move = c->getMoveTowards(*v)) + return {1.0, [=] { + c->move(*move); + }}; + else + return NoMove; + } + } + if (c->getLevel() != level) { + if (!levelChangeHistory.count(c->getLevel())) + return NoMove; + Vec2 target = levelChangeHistory.at(c->getLevel()); + if (c->getPosition() == target) + return {1.0, [=] { + c->applySquare(); + }}; + else if (auto move = c->getMoveTowards(target)) + return {1.0, [=] { + c->move(*move); + }}; + else + return NoMove; + } + for (auto& elem : guardPosts) { + bool isTraining = contains({MinionTask::TRAIN, MinionTask::TRAIN_IDLE}, minionTasks.at(c).getState()); + if (elem.second.attender == c) { + if (isTraining) { + minionTasks.at(c).update(); + if (c->getPosition().dist8(elem.first) > 1) { + if (auto move = c->getMoveTowards(elem.first)) + return {1.0, [=] { + c->move(*move); + }}; + } else + return NoMove; + } else + elem.second.attender = nullptr; + } + } + for (auto& elem : guardPosts) { + bool isTraining = contains({MinionTask::TRAIN, MinionTask::TRAIN_IDLE}, minionTasks.at(c).getState()); + if (elem.second.attender == nullptr && isTraining) { + elem.second.attender = c; + if (taskMap.count(c)) + removeTask(taskMap.at(c)); + } + } + + if (taskMap.count(c)) { + Task* task = taskMap.at(c); + if (task->isDone()) { + removeTask(task); + } else + return task->getMove(c); + } + for (Vec2 v : mySquares[SquareType::WORKSHOP]) + for (Item* it : level->getSquare(v)->getItems([this, c] (const Item* it) { + return minionEquipment.needsItem(c, it); })) { + if (c->canEquip(it)) { + addTask(Task::equipItem(this, v, it), c); + } + else + addTask(Task::pickItem(this, v, {it}), c); + return taskMap.at(c)->getMove(c); + } + minionTasks.at(c).update(); + if (c->getHealth() < 1) + minionTasks.at(c).setState(MinionTask::SLEEP); + switch (minionTasks.at(c).getState()) { + case MinionTask::SLEEP: { + set& whatBeds = (contains(vampires, c) ? mySquares[SquareType::GRAVE] : mySquares[SquareType::BED]); + if (whatBeds.empty()) + return NoMove; + addTask(Task::applySquare(this, whatBeds), c); + minionTaskStrings[c] = "sleeping"; + break; } + case MinionTask::TRAIN: + if (mySquares[SquareType::TRAINING_DUMMY].empty()) + return NoMove; + addTask(Task::applySquare(this, mySquares[SquareType::TRAINING_DUMMY]), c); + minionTaskStrings[c] = "training"; + break; + case MinionTask::TRAIN_IDLE: + return NoMove; + case MinionTask::WORKSHOP: + if (mySquares[SquareType::WORKSHOP].empty()) + return NoMove; + addTask(Task::applySquare(this, mySquares[SquareType::WORKSHOP]), c); + minionTaskStrings[c] = "crafting"; + break; + case MinionTask::WORKSHOP_IDLE: + return NoMove; + case MinionTask::EAT: + if (mySquares[SquareType::HATCHERY].empty()) + return NoMove; + minionTaskStrings[c] = "eating"; + addTask(Task::eat(this, mySquares[SquareType::HATCHERY]), c); + break; + } + return taskMap.at(c)->getMove(c); +} + +MoveInfo Collective::getMove(Creature* c) { + if (!contains(imps, c)) { + CHECK(contains(minions, c)); + return getMinionMove(c); + } + if (c->getLevel() != level) + return NoMove; + if (startImpNum == -1) + startImpNum = imps.size(); + if (taskMap.count(c)) { + Task* task = taskMap.at(c); + if (task->isDone()) { + removeTask(task); + } else + return task->getMove(c); + } + Task* closest = nullptr; + for (PTask& task : tasks) { + double dist = (task->getPosition() - c->getPosition()).length8(); + if ((!taken.count(task.get()) || (task->canTransfer() + && (task->getPosition() - taken.at(task.get())->getPosition()).length8() > dist)) + && (!closest || + dist < (closest->getPosition() - c->getPosition()).length8()) && !locked.count(make_pair(c, task.get()))) { + bool valid = task->getMove(c).isValid(); + if (valid) + closest = task.get(); + else + locked.insert(make_pair(c, task.get())); + } + } + if (closest) { + if (taken.count(closest)) { + taskMap.erase(taken.at(closest)); + taken.erase(closest); + } + taskMap[c] = closest; + taken[closest] = c; + return closest->getMove(c); + } else + return NoMove; +} + +MarkovChain Collective::getTasksForMinion(Creature* c) { + MinionTask t1, t2; + if (c->getName() == "gnome") { + t1 = MinionTask::WORKSHOP; + t2 = MinionTask::WORKSHOP_IDLE; + } else { + t1 = MinionTask::TRAIN; + t2 = MinionTask::TRAIN_IDLE; + } + return MarkovChain(MinionTask::SLEEP, { + {MinionTask::SLEEP, {{ MinionTask::EAT, 0.5}, { t1, 0.5}}}, + {MinionTask::EAT, {{ t1, 0.4}, { MinionTask::SLEEP, 0.2}}}, + {t1, {{ MinionTask::EAT, 0.005}, { MinionTask::SLEEP, 0.005}, {t2, 0.99}}}, + {t2, {{ t1, 1}}}}); +} + +void Collective::addCreature(Creature* c) { + if (c->getName() == "dungeon heart") { + CHECK(heart == nullptr) << "Too many dungeon hearts"; + heart = c; + creatures.push_back(c); + return; + } + creatures.push_back(c); + if (!c->canConstruct(SquareType::FLOOR)) { + minions.push_back(c); + minionTasks.insert(make_pair(c, getTasksForMinion(c))); + } else + imps.push_back(c); +} + +void Collective::onSquareReplacedEvent(const Level* l, Vec2 pos) { + if (l == level) { + bool found = false; + for (auto& elem : mySquares) + if (elem.second.count(pos)) { + elem.second.erase(pos); + found = true; + } + CHECK(found); + } +} + +void Collective::onTriggerEvent(const Level* l, Vec2 pos) { + if (traps.count(pos) && l == level) + traps.at(pos).armed = false; +} + +void Collective::onKillEvent(const Creature* victim, const Creature* killer) { + if (victim == heart) { + messageBuffer.addMessage(MessageBuffer::important("Your dungeon heart was destroyed. " + "You've been playing KeeperRL alpha.")); + exit(0); + } + if (contains(creatures, victim)) { + Creature* c = const_cast(victim); + removeElement(creatures, c); + for (auto& elem : guardPosts) + if (elem.second.attender == c) + elem.second.attender = nullptr; + if (contains(team, c)) + removeElement(team, c); + if (taskMap.count(c)) { + if (!taskMap.at(c)->canTransfer()) { + taskMap.at(c)->cancel(); + removeTask(taskMap.at(c)); + } else { + taken.erase(taskMap.at(c)); + taskMap.erase(c); + } + } + if (contains(imps, c)) + removeElement(imps, c); + if (contains(minions, c)) + removeElement(minions, c); + if (contains(vampires, c)) + removeElement(vampires, c); + } +} + +const Level* Collective::getLevel() const { + return level; +} diff --git a/collective.h b/collective.h new file mode 100644 index 000000000..1e04a1a7b --- /dev/null +++ b/collective.h @@ -0,0 +1,134 @@ +#ifndef _COLLECTIVE_H +#define _COLLECTIVE_H + +#include "map_memory.h" +#include "view.h" +#include "monster_ai.h" +#include "creature_view.h" +#include "creature_factory.h" +#include "markov_chain.h" +#include "minion_equipment.h" + + +class Collective : public CreatureView, public EventListener { + public: + Collective(CreatureFactory minionFactory, CreatureFactory undeadFactory); + virtual const MapMemory& getMemory(const Level* l) const override; + virtual ViewIndex getViewIndex(Vec2 pos) const override; + virtual void refreshGameInfo(View::GameInfo&) const override; + virtual Vec2 getPosition() const override; + virtual bool canSee(const Creature*) const override; + virtual bool canSee(Vec2 position) const override; + virtual vector getUnknownAttacker() const override; + + virtual bool staticPosition() const override; + + virtual void onKillEvent(const Creature* victim, const Creature* killer) override; + virtual void onTriggerEvent(const Level*, Vec2 pos) override; + virtual void onSquareReplacedEvent(const Level*, Vec2 pos) override; + virtual void onChangeLevelEvent(const Creature*, const Level* from, Vec2 pos, const Level* to, Vec2 toPos) override; + + void processInput(View* view); + void tick(); + void update(Creature*); + MoveInfo getMove(Creature* c); + MoveInfo getMinionMove(Creature* c); + void addCreature(Creature* c); + void setLevel(Level* l); + + virtual const Level* getLevel() const; + + void onConstructed(Vec2 pos, SquareType); + void onBrought(Vec2 pos, vector items); + void onAppliedItem(Vec2 pos, Item* item); + void onAppliedItemCancel(Vec2 pos); + void onPickedUp(Vec2 pos, vector items); + + Vec2 getHeartPos() const; + void render(View*); + void possess(const Creature*, View*); + + bool isTurnBased(); + + private: + struct BuildInfo { + struct SquareInfo { + SquareType type; + int cost; + string name; + } squareInfo; + + struct TrapInfo { + TrapType type; + string name; + ViewId viewId; + } trapInfo; + + enum BuildType { SQUARE, IMP, TRAP, GUARD_POST} buildType; + + BuildInfo(SquareInfo info) : squareInfo(info), buildType(SQUARE) {} + BuildInfo(TrapInfo info) : trapInfo(info), buildType(TRAP) {} + BuildInfo(BuildType type) : buildType(type) { + CHECK(contains({IMP, GUARD_POST}, type)); + } + + }; + static vector buildInfo; + bool isDownstairsVisible() const; + void markSquare(Vec2 pos, BuildInfo::SquareInfo); + void unmarkSquare(Vec2 pos); + void removeTask(Task*); + void addTask(PTask, Creature*); + void addTask(PTask); + int numGold() const; + void takeGold(int); + void returnGold(int); + int getImpCost() const; + bool canBuildDoor(Vec2 pos) const; + bool canPlacePost(Vec2 pos) const; + void freeFromGuardPost(const Creature*); + vector> getTrapItems(TrapType, set = {}) const; + ItemPredicate unMarkedItems(ItemType) const; + MarkovChain getTasksForMinion(Creature* c); + CreatureFactory minionFactory; + CreatureFactory undeadFactory; + vector creatures; + vector minions; + vector imps; + vector vampires; + vector tasks; + set markedItems; + map marked; + map taken; + map taskMap; + map completionCost; + struct TrapInfo { + TrapType type; + bool armed; + bool marked; + }; + map traps; + map> trapMap; + map> minionTasks; + map minionTaskStrings; + set> locked; + map> mySquares; + set myTiles; + Level* level; + Creature* heart = nullptr; + mutable map memory; + int currentButton = 0; + bool gatheringTeam = false; + vector team; + map teamLevelChanges; + map levelChangeHistory; + int credit; + Creature* possessed = nullptr; + MinionEquipment minionEquipment; + struct GuardPostInfo { + const Creature* attender; + }; + map guardPosts; +}; + +#endif diff --git a/collective_action.cpp b/collective_action.cpp new file mode 100644 index 000000000..2b480bdc9 --- /dev/null +++ b/collective_action.cpp @@ -0,0 +1,41 @@ +#include "stdafx.h" + +vector vectorTypes { CollectiveAction::GO_TO }; +vector intTypes { CollectiveAction::ROOM_BUTTON }; +vector creatureTypes { CollectiveAction::CREATURE_BUTTON, + CollectiveAction::CREATURE_DESCRIPTION }; + +CollectiveAction::CollectiveAction(Type t, Vec2 p) : type(t), pos(p) { + CHECK(contains(vectorTypes, t)); +} + +CollectiveAction::CollectiveAction(Type t, int n) : type(t), num(n) { + CHECK(contains(intTypes, t)); +} + +CollectiveAction::CollectiveAction(Type t, const Creature* c) : type(t), creature(c) { + CHECK(contains(creatureTypes, t)); +} + +CollectiveAction::CollectiveAction(Type t) : type(t) { + CHECK(!contains(intTypes, t) && !contains(vectorTypes, t)); +} + +CollectiveAction::Type CollectiveAction::getType() { + return type; +} + +Vec2 CollectiveAction::getPosition() { + CHECK(contains(vectorTypes, type)); + return pos; +} + +int CollectiveAction::getNum() { + CHECK(contains(intTypes, type)); + return num; +} + +const Creature* CollectiveAction::getCreature() { + CHECK(contains(creatureTypes, type)); + return creature; +} diff --git a/collective_action.h b/collective_action.h new file mode 100644 index 000000000..623529a7f --- /dev/null +++ b/collective_action.h @@ -0,0 +1,28 @@ +#ifndef _COLLECTIVE_ACTION_H +#define _COLLECTIVE_ACTION_H + +#include "util.h" + +class CollectiveAction { + public: + enum Type { GO_TO, IDLE, BUTTON_RELEASE, ROOM_BUTTON, IMP_BUTTON, CREATURE_BUTTON, + CREATURE_DESCRIPTION, GATHER_TEAM, CANCEL_TEAM }; + + CollectiveAction(Type, Vec2 pos); + CollectiveAction(Type, int); + CollectiveAction(Type, const Creature*); + CollectiveAction(Type); + + Type getType(); + Vec2 getPosition(); + int getNum(); + const Creature* getCreature(); + + private: + Type type; + Vec2 pos; + int num; + const Creature* creature; +}; + +#endif diff --git a/controller.cpp b/controller.cpp new file mode 100644 index 000000000..264060ab1 --- /dev/null +++ b/controller.cpp @@ -0,0 +1,8 @@ +#include "stdafx.h" + +ControllerFactory::ControllerFactory(function f) : fun(f) {} + +PController ControllerFactory::get(Creature* c) { + return PController(fun(c)); +} + diff --git a/controller.h b/controller.h new file mode 100644 index 000000000..0c6eb3f4c --- /dev/null +++ b/controller.h @@ -0,0 +1,40 @@ +#ifndef _CONTROLLER_H +#define _CONTROLLER_H + +class Creature; + +class Controller { + public: + virtual void grantIdentify(int numItems) {}; + + virtual bool isPlayer() const = 0; + + virtual void you(MsgType type, const string& param) const = 0; + virtual void you(const string& param) const = 0; + virtual void privateMessage(const string& message) const {} + + virtual void onKilled(const Creature* attacker) {} + virtual void onItemsAppeared(vector items) {} + virtual const MapMemory& getMemory(const Level* l = nullptr) const = 0; + + virtual void makeMove() = 0; + + virtual bool wantsItems(const Creature* from, vector items) const { return false; } + virtual void takeItems(const Creature* from, vector items) {} + virtual int getDebt(const Creature* debtor) const { return 0; } + + virtual void onBump(Creature*) = 0; + + virtual ~Controller() {} +}; + +class ControllerFactory { + public: + ControllerFactory(function); + PController get(Creature*); + + private: + function fun; +}; + +#endif diff --git a/coolvetica rg.ttf b/coolvetica rg.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c8f4f14a3031994df50168fc6e865ce4c6d3b7c2 GIT binary patch literal 96312 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]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 ooGm~njm^71aGEAn)!ujPKlWV4$ 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 F{|{d0(u)89 literal 0 HcmV?d00001 diff --git a/creature.cpp b/creature.cpp new file mode 100644 index 000000000..56da350ad --- /dev/null +++ b/creature.cpp @@ -0,0 +1,1673 @@ +#include "stdafx.h" + +using namespace std; + +Creature* Creature::getDefault() { + static PCreature defaultCreature = CreatureFactory::fromId(CreatureId::GNOME, Tribe::monster, + MonsterAIFactory::idle()); + return defaultCreature.get(); +} + +Creature::Creature(ViewObject o, Tribe* t, const CreatureAttributes& attr, ControllerFactory f) : CreatureAttributes(attr), viewObject(o), time(0), tribe(t), dead(false), lastTick(0), controller(f.get(this)) { + static int cnt = 1; + uniqueId = ++cnt; + for (Skill* skill : skills) + skill->onTeach(this); +} + +ViewIndex Creature::getViewIndex(Vec2 pos) const { + return level->getSquare(pos)->getViewIndex(this); +} + +void Creature::pushController(Controller* ctrl) { + viewObject.setPlayer(true); + controllerStack.push(std::move(controller)); + controller.reset(ctrl); +} + +void Creature::popController() { + viewObject.setPlayer(false); + CHECK(canPopController()); + controller = std::move(controllerStack.top()); + controllerStack.pop(); +} + +bool Creature::canPopController() { + return !controllerStack.empty(); +} + +bool Creature::isDead() const { + return dead; +} + +void Creature::spendTime(double t) { + time += 100.0 * t / (double) getAttr(AttrType::SPEED); + hidden = false; +} + +bool Creature::canMove(Vec2 direction) const { + if (holding) { + privateMessage("You can't break free!"); + return false; + } + return (direction.length8() == 1 && level->canMoveCreature(this, direction)) || canSwapPosition(direction); +} + +void Creature::move(Vec2 direction) { + stationary = false; + Debug() << getTheName() << " moving " << direction; + CHECK(canMove(direction)); + if (level->canMoveCreature(this, direction)) + level->moveCreature(this, direction); + else + swapPosition(direction); + if (collapsed) { + you(MsgType::CRAWL, getConstSquare()->getName()); + spendTime(3); + } else + spendTime(1); +} + +int Creature::getDebt(const Creature* debtor) const { + return controller->getDebt(debtor); +} + +bool Creature::wantsItems(const Creature* from, vector items) const { + return controller->wantsItems(from, items); +} + +void Creature::takeItems(const Creature* from, vector items) { + return controller->takeItems(from, std::move(items)); +} + +void Creature::you(MsgType type, const string& param) const { + controller->you(type, param); +} + +void Creature::you(const string& param) const { + controller->you(param); +} + +void Creature::privateMessage(const string& message) const { + controller->privateMessage(message); +} + +void Creature::onItemsAppeared(vector items) { + controller->onItemsAppeared(items); +} + +void Creature::grantIdentify(int numItems) { + controller->grantIdentify(numItems); +} + +Controller* Creature::getController() { + return controller.get(); +} + +const MapMemory& Creature::getMemory(const Level* l) const { + return controller->getMemory(l); +} + +bool Creature::canSwapPosition(Vec2 direction) const { + const Creature* c = getConstSquare(direction)->getCreature(); + if (!c) + return false; + if (c->sleeping) { + privateMessage(c->getTheName() + " is sleeping."); + return false; + } + return (!swapPositionCooldown || isPlayer()) && !c->stationary && + direction.length8() == 1 && !c->isPlayer() && !c->isEnemy(this) && + getConstSquare(direction)->canEnterEmpty(this) && getConstSquare()->canEnterEmpty(c); +} + +void Creature::swapPosition(Vec2 direction) { + CHECK(canSwapPosition(direction)); + swapPositionCooldown = 4; + getConstSquare(direction)->getCreature()->privateMessage("Excuse me!"); + privateMessage("Excuse me!"); + level->swapCreatures(this, getSquare(direction)->getCreature()); +} + +void Creature::makeMove() { + CHECK(!isDead()); + if (holding && holding->isDead()) + holding = nullptr; + if (sleeping) { + spendTime(1); + return; + } + updateVisibleEnemies(); + if (swapPositionCooldown) + --swapPositionCooldown; + MEASURE(controller->makeMove(), "creature move time"); + CHECK(!inEquipChain) << "Someone forgot to finishEquipChain()"; + if (!hidden) + viewObject.setHidden(false); + unknownAttacker.clear(); + if (!getSquare()->isCovered()) + shineLight(); +} + +Square* Creature::getSquare() { + return level->getSquare(position); +} + +Square* Creature::getSquare(Vec2 direction) { + return level->getSquare(position + direction); +} + +const Square* Creature::getConstSquare() const { + return getLevel()->getSquare(position); +} + +const Square* Creature::getConstSquare(Vec2 direction) const { + return getLevel()->getSquare(position + direction); +} + +void Creature::wait() { + Debug() << getTheName() << " waiting"; + bool keepHiding = hidden; + spendTime(1); + hidden = keepHiding; +} + +int Creature::getUniqueId() const { + return uniqueId; +} + +const Equipment& Creature::getEquipment() const { + return equipment; +} + +vector Creature::steal(const vector items) { + return equipment.removeItems(items); +} + +Item* Creature::getAmmo() const { + for (Item* item : equipment.getItems()) + if (item->getType() == ItemType::AMMO) + return item; + return nullptr; +} + +const Level* Creature::getLevel() const { + return level; +} + +Level* Creature::getLevel() { + return level; +} + +Vec2 Creature::getPosition() const { + return position; +} + +void Creature::globalMessage(const string& playerCanSee, const string& cant) const { + if (const Creature* player = level->getPlayer()) { + if (player->canSee(this)) + player->privateMessage(playerCanSee); + else + player->privateMessage(cant); + } +} + +const vector& Creature::getVisibleEnemies() const { + return visibleEnemies; +} + +void Creature::updateVisibleEnemies() { + visibleEnemies.clear(); + for (const Creature* c : level->getAllCreatures()) + if (isEnemy(c) && canSee(c)) + visibleEnemies.push_back(c); +} + +vector Creature::getVisibleCreatures() const { + vector res; + for (Creature* c : level->getAllCreatures()) + if (canSee(c)) + res.push_back(c); + for (const Creature* c : getUnknownAttacker()) + if (!contains(res, c)) + res.push_back(c); + return res; +} + +void Creature::addSkill(Skill* skill) { + skills.insert(skill); + skill->onTeach(this); + privateMessage(skill->getHelpText()); +} + +bool Creature::hasSkill(Skill* skill) const { + return skills.count(skill); +} + +bool Creature::hasSkillToUseWeapon(const Item* it) const { + return !it->isWieldedTwoHanded() || hasSkill(Skill::twoHandedWeapon); +} + +vector Creature::getPickUpOptions() const { + if (!isHumanoid()) + return vector(); + else + return level->getSquare(getPosition())->getItems(); +} + +bool Creature::canPickUp(const vector& items) const { + if (!isHumanoid()) + return false; + double weight = getInventoryWeight(); + for (Item* it : items) + weight += it->getWeight(); + if (weight > 2 * getAttr(AttrType::INV_LIMIT)) { + privateMessage("You are carrying too much to pick this up."); + return false; + } + return true; +} + +void Creature::pickUp(const vector& items) { + CHECK(canPickUp(items)); + Debug() << getTheName() << " pickup "; + for (auto item : items) { + equipment.addItem(level->getSquare(getPosition())->removeItem(item)); + } + if (getInventoryWeight() > getAttr(AttrType::INV_LIMIT)) + privateMessage("You are overloaded."); + EventListener::addPickupEvent(this, items); + spendTime(1); +} + +void Creature::drop(const vector& items) { + CHECK(isHumanoid()); + Debug() << getTheName() << " drop"; + for (auto item : items) { + level->getSquare(getPosition())->dropItem(equipment.removeItem(item)); + } + EventListener::addDropEvent(this, items); + spendTime(1); +} + +void Creature::drop(vector items) { + Debug() << getTheName() << " drop"; + getSquare()->dropItems(std::move(items)); +} + +void Creature::startEquipChain() { + inEquipChain = true; +} + +void Creature::finishEquipChain() { + inEquipChain = false; + if (numEquipActions > 0) + spendTime(1); + numEquipActions = 0; +} + +bool Creature::canEquip(const Item* item) const { + if (!isHumanoid()) + return false; + if (numGoodArms() == 0) { + privateMessage("You don't have hands!"); + return false; + } + if (!hasSkill(Skill::twoHandedWeapon) && item->isWieldedTwoHanded()) { + privateMessage("You don't have the skill to use two-handed weapons."); + return false; + } + if (!hasSkill(Skill::archery) && item->getType() == ItemType::RANGED_WEAPON) { + privateMessage("You don't have the skill to shoot a bow."); + return false; + } + if (numGoodArms() == 1 && item->isWieldedTwoHanded()) { + privateMessage("You need two hands to wield " + item->getAName() + "!"); + return false; + } + return item->canEquip() && equipment.getItem(item->getEquipmentSlot()) == nullptr; +} + +bool Creature::canUnequip(const Item* item) const { + if (!isHumanoid()) + return false; + if (numGoodArms() == 0) { + privateMessage("You don't have hands!"); + return false; + } else + return true; +} + +void Creature::equip(Item* item) { + CHECK(canEquip(item)); + Debug() << getTheName() << " equip " << item->getName(); + EquipmentSlot slot = item->getEquipmentSlot(); + equipment.equip(item, slot); + item->onEquip(this); + if (!inEquipChain) + spendTime(1); + else + ++numEquipActions; +} + +void Creature::unequip(Item* item) { + CHECK(canUnequip(item)); + Debug() << getTheName() << " unequip"; + EquipmentSlot slot = item->getEquipmentSlot(); + CHECK(equipment.getItem(slot) == item) << "Item not equiped."; + equipment.unequip(slot); + item->onUnequip(this); + if (!inEquipChain) + spendTime(1); + else + ++numEquipActions; +} + +bool Creature::canHeal(Vec2 direction) const { + Creature* other = level->getSquare(position + direction)->getCreature(); + return healer && other && other->getHealth() < 1; +} + +void Creature::heal(Vec2 direction) { + CHECK(canHeal(direction)); + Creature* other = level->getSquare(position + direction)->getCreature(); + other->you(MsgType::ARE, "healed by " + getTheName()); + other->heal(); + spendTime(1); +} + +bool Creature::canBumpInto(Vec2 direction) const { + return level->getSquare(getPosition() + direction)->getCreature(); +} + +void Creature::bumpInto(Vec2 direction) { + CHECK(canBumpInto(direction)); + level->getSquare(getPosition() + direction)->getCreature()->controller->onBump(this); + spendTime(1); +} + +void Creature::applySquare() { + Debug() << getTheName() << " applying " << getSquare()->getName();; + getSquare()->onApply(this); + spendTime(1); +} + +bool Creature::canHide() const { + return skills.count(Skill::ambush) && getConstSquare()->canHide(); +} + +void Creature::hide() { + knownHiding.clear(); + viewObject.setHidden(true); + for (const Creature* c : getLevel()->getAllCreatures()) + if (c->canSee(this) && c->isEnemy(this)) { + knownHiding.insert(c); + if (!isBlind()) + you(MsgType::CAN_SEE_HIDING, c->getTheName()); + } + spendTime(1); + hidden = true; +} + +bool Creature::canChatTo(Vec2 direction) const { + return getConstSquare(direction)->getCreature(); +} + +void Creature::chatTo(Vec2 direction) { + CHECK(canChatTo(direction)); + Creature* c = getSquare(direction)->getCreature(); + c->onChat(this); + spendTime(1); +} + +void Creature::onChat(Creature* from) { + if (isEnemy(from) && chatReactionHostile) { + if (chatReactionHostile->front() == '\"') + from->privateMessage(*chatReactionHostile); + else + from->privateMessage(getTheName() + " " + *chatReactionHostile); + } + if (!isEnemy(from) && chatReactionFriendly) { + if (chatReactionFriendly->front() == '\"') + from->privateMessage(*chatReactionFriendly); + else + from->privateMessage(getTheName() + " " + *chatReactionFriendly); + } +} + +void Creature::stealFrom(Vec2 direction, const vector& items) { + Creature* c = NOTNULL(getSquare(direction)->getCreature()); + equipment.addItems(c->steal(items)); +} + +bool Creature::isHidden() const { + return hidden; +} + +bool Creature::knowsHiding(const Creature* c) const { + return knownHiding.count(c) == 1; +} + +void Creature::panic(double time) { + if (sleeping) + return; + enraged.unset(); + if (!panicking) + you(MsgType::PANIC, ""); + panicking.set(getTime() + time); +} + +void Creature::hallucinate(double time) { + if (!isBlind()) + privateMessage("The world explodes into colors!"); + hallucinating.set(getTime() + time); +} + +bool Creature::isHallucinating() const { + return hallucinating; +} + +void Creature::blind(double time) { + if (permanentlyBlind) + return; + if (!blinded) + you(MsgType::ARE, "blind!"); + viewObject.setBlind(true); + blinded.set(getTime() + time); +} + +bool Creature::isBlind() const { + return blinded || permanentlyBlind; +} + +void Creature::makeInvisible(double time) { + if (!isBlind()) + you(MsgType::TURN_INVISIBLE, ""); + viewObject.setInvisible(true); + invisible.set(getTime() + time); +} + +bool Creature::isInvisible() const { + return invisible; +} + +void Creature::rage(double time) { + if (sleeping) + return; + panicking.unset(); + if (!enraged) + you(MsgType::RAGE, ""); + enraged.set(getTime() + time); +} + +void Creature::giveStrBonus(double time) { + if (!strBonus) + you(MsgType::FEEL, "stronger"); + strBonus.set(getTime() + time); +} + +void Creature::giveDexBonus(double time) { + if (!dexBonus) + you(MsgType::FEEL, "more agile"); + dexBonus.set(getTime() + time); +} + +bool Creature::isPanicking() const { + return panicking; +} + +int Creature::getAttrVal(AttrType type) const { + switch (type) { + case AttrType::SPEED: return *speed + expLevel * 4; + case AttrType::DEXTERITY: return *dexterity + expLevel / 2; + case AttrType::STRENGTH: return *strength + (expLevel - 1) / 2; + default: return 0; + } +} + +int attrBonus = 3; + +int dexPenNoArm = 2; +int dexPenNoLeg = 10; +int dexPenNoWing = 5; + +int strPenNoArm = 1; +int strPenNoLeg = 3; +int strPenNoWing = 2; + +int Creature::getAttr(AttrType type) const { + int def = getAttrVal(type); + for (Item* item : equipment.getItems()) + if (equipment.isEquiped(item)) + def += item->getModifier(type); + switch (type) { + case AttrType::STRENGTH: + def *= 0.666 + health / 3; + if (sleeping) + def *= 0.66; + if (strBonus) + def += attrBonus; + def -= injuredArms * strPenNoArm + injuredLegs * strPenNoLeg + injuredWings * strPenNoWing; + break; + case AttrType::DEXTERITY: + def *= 0.666 + health / 3; + if (sleeping) + def = 0; + if (dexBonus) + def += attrBonus; + def -= injuredArms * dexPenNoArm + injuredLegs * dexPenNoLeg + injuredWings * dexPenNoWing; + break; + case AttrType::THROWN_DAMAGE: + case AttrType::DAMAGE: + def += getAttr(AttrType::STRENGTH); + if (!getWeapon()) + def += barehandedDamage; + if (panicking) + def -= attrBonus; + if (enraged) + def += attrBonus; + break; + case AttrType::DEFENSE: + def += getAttr(AttrType::STRENGTH); + if (panicking) + def += attrBonus; + if (enraged) + def -= attrBonus; + break; + case AttrType::THROWN_TO_HIT: + case AttrType::TO_HIT: + def += getAttr(AttrType::DEXTERITY); + break; + case AttrType::SPEED: { + double totWeight = getInventoryWeight(); + if (totWeight > getAttr(AttrType::STRENGTH)) + def -= 20.0 * totWeight / def; + if (slowed) + def /= 2; + if (speeding) + def *= 2; + break;} + case AttrType::INV_LIMIT: + return getAttr(AttrType::STRENGTH) * 2 * carryingMultiplier; + // default: + // break; + } + return max(0, def); +} + +double Creature::getInventoryWeight() const { + double ret = 0; + for (Item* item : getEquipment().getItems()) + ret += item->getWeight(); + return ret; +} + +Tribe* Creature::getTribe() const { + return tribe; +} + +bool Creature::isFriend(const Creature* c) const { + return !isEnemy(c); +} + +pair Creature::getStanding(const Creature* c) const { + double bestWeight = 0; + double standing = getTribe()->getStanding(c); + if (contains(privateEnemies, c)) { + standing = -1; + bestWeight = 1; + } + for (EnemyCheck* enemyCheck : enemyChecks) + if (enemyCheck->hasStanding(c) && enemyCheck->getWeight() > bestWeight) { + standing = enemyCheck->getStanding(c); + bestWeight = enemyCheck->getWeight(); + } + return make_pair(standing, bestWeight); +} + +void Creature::addEnemyCheck(EnemyCheck* c) { + enemyChecks.push_back(c); +} + +void Creature::removeEnemyCheck(EnemyCheck* c) { + removeElement(enemyChecks, c); +} + +bool Creature::isEnemy(const Creature* c) const { + pair myStanding = getStanding(c); + pair hisStanding = c->getStanding(this); + double standing = 0; + if (myStanding.second > hisStanding.second) + standing = myStanding.first; + if (myStanding.second < hisStanding.second) + standing = hisStanding.first; + if (myStanding.second == hisStanding.second) + standing = min(myStanding.first, hisStanding.first); + return c != this && standing < 0; +} + +vector Creature::getGold(int num) const { + vector ret; + for (Item* item : equipment.getItems([](Item* it) { return it->getType() == ItemType::GOLD; })) { + ret.push_back(item); + if (ret.size() == num) + return ret; + } + return ret; +} + +void Creature::setPosition(Vec2 pos) { + position = pos; +} + +void Creature::setLevel(Level* l) { + level = l; +} + +void Creature::slowDown(double duration) { + you(MsgType::ARE, "moving more slowly"); + speeding.unset(); + slowed.set(getTime() + duration); +} + +void Creature::speedUp(double duration) { + you(MsgType::ARE, "moving faster"); + slowed.unset(); + speeding.set(getTime() + duration); +} + +double Creature::getTime() const { + return time; +} + +void Creature::setTime(double t) { + time = t; +} + +void Creature::tick(double realTime) { + for (Item* item : equipment.getItems()) { + item->tick(time, level, position); + if (item->isDiscarded()) + equipment.removeItem(item); + } + if (slowed.isFinished(realTime)) + you(MsgType::ARE, "moving faster again"); + if (sleeping.isFinished(realTime)) + you(MsgType::WAKE_UP, ""); + if (speeding.isFinished(realTime)) + you(MsgType::ARE, "moving more slowly again"); + if (strBonus.isFinished(realTime)) + you(MsgType::ARE, "weaker again"); + if (dexBonus.isFinished(realTime)) + you(MsgType::FEEL, "less agile again"); + if (panicking.isFinished(realTime) || enraged.isFinished(realTime) || hallucinating.isFinished(realTime)) { + if (!hallucinating) + privateMessage("Your mind is clear again"); + else + privateMessage("Your brain is hurting a bit less."); + } + if (blinded.isFinished(realTime)) { + you("can see again"); + viewObject.setBlind(false); + } + if (invisible.isFinished(realTime)) { + you(MsgType::TURN_VISIBLE, ""); + viewObject.setInvisible(false); + } + double delta = realTime - lastTick; + lastTick = realTime; + updateViewObject(); + if (undead && numGoodArms() + numGoodLegs() + numGoodHeads() <= 2) { + you(MsgType::FALL_APART, ""); + die(lastAttacker); + return; + } + if (health < 0.5) + health -= delta / 40; + if (health <= 0) { + you(MsgType::DIE_OF_BLEEDING, ""); + die(lastAttacker); + } + +} + +BodyPart Creature::armOrWing() const { + if (arms == 0) + return BodyPart::WING; + if (wings == 0) + return BodyPart::ARM; + return chooseRandom({ BodyPart::WING, BodyPart::ARM }, {1, 1}); +} + +BodyPart Creature::getBodyPart(AttackLevel attack) const { + if (flyer) + return chooseRandom({BodyPart::TORSO, BodyPart::HEAD, BodyPart::LEG, BodyPart::WING, BodyPart::ARM}, {1, 1, 1, 2, 1}); + switch (attack) { + case AttackLevel::HIGH: + return BodyPart::HEAD; + case AttackLevel::MIDDLE: + if (size == CreatureSize::SMALL || size == CreatureSize::MEDIUM || collapsed) + return BodyPart::HEAD; + else + return chooseRandom({BodyPart::TORSO, armOrWing()}, {1, 1}); + case AttackLevel::LOW: + if (size == CreatureSize::SMALL || collapsed) + return chooseRandom({BodyPart::TORSO, armOrWing(), BodyPart::HEAD, BodyPart::LEG}, {1, 1, 1, 1}); + if (size == CreatureSize::MEDIUM) + return chooseRandom({BodyPart::TORSO, armOrWing(), BodyPart::LEG}, {1, 1, 3}); + else + return BodyPart::LEG; + } + return BodyPart::ARM; +} + +string getAttackParam(AttackType type) { + switch (type) { + case AttackType::CUT: return "cut"; + case AttackType::STAB: return "stab"; + case AttackType::CRUSH: return "crush"; + case AttackType::PUNCH: return "punch"; + case AttackType::BITE: return "bite"; + case AttackType::HIT: return "hit"; + case AttackType::SHOOT: return "shot"; + } + return ""; +} + +void Creature::injureLeg(bool drop) { + if (legs == 0) + return; + if (drop) { + --legs; + ++lostLegs; + if (injuredLegs > legs) + --injuredLegs; + } + else if (injuredLegs < legs) + ++injuredLegs; + if (!collapsed) + you(MsgType::COLLAPSE, ""); + collapsed = true; + if (drop) { + getSquare()->dropItem(ItemFactory::corpse(*name + " leg", "bone", *weight / 8, + isFood ? ItemType::FOOD : ItemType::CORPSE)); + } +} + +void Creature::injureArm(bool dropArm) { + if (dropArm) { + --arms; + ++lostArms; + if (injuredArms > arms) + --injuredArms; + } + else if (injuredArms < arms) + ++injuredArms; + string itemName = isPlayer() ? ("your arm") : (*name + " arm"); + if (getWeapon()) { + you(MsgType::DROP_WEAPON, getWeapon()->getName()); + level->getSquare(getPosition())->dropItem(equipment.removeItem(getWeapon())); + } + if (dropArm) + getSquare()->dropItem(ItemFactory::corpse(*name + " arm", "bone", *weight / 12, + isFood ? ItemType::FOOD : ItemType::CORPSE)); +} + +void Creature::injureWing(bool drop) { + if (drop) { + --wings; + ++lostWings; + if (injuredWings > wings) + --injuredWings; + } + else if (injuredWings < wings) + ++injuredWings; + if (flyer) { + you(MsgType::FALL, getSquare()->getName()); + flyer = false; + } + if ((legs < 2 || injuredLegs > 0) && !collapsed) { + collapsed = true; + } + string itemName = isPlayer() ? ("your wing") : (*name + " wing"); + if (drop) + getSquare()->dropItem(ItemFactory::corpse(*name + " wing", "bone", *weight / 12, + isFood ? ItemType::FOOD : ItemType::CORPSE)); +} + +void Creature::injureHead(bool drop) { + if (drop) { + --heads; + if (injuredHeads > heads) + --injuredHeads; + } + else if (injuredHeads < heads) + ++injuredHeads; + if (drop) + getSquare()->dropItem(ItemFactory::corpse(*name +" head", *name + " skull", *weight / 12, + isFood ? ItemType::FOOD : ItemType::CORPSE)); +} + +void Creature::attack(const Creature* c1) { + Creature* c = const_cast(c1); + int toHitVariance = 9; + int attackVariance = 6; + CHECK((c->getPosition() - getPosition()).length8() == 1) + << "Bad attack direction " << c->getPosition() - getPosition(); + CHECK(canAttack(c)); + Debug() << getTheName() << " attacking " << c->getName(); + int toHit = Random.getRandom(-toHitVariance, toHitVariance) + getAttr(AttrType::TO_HIT); + int damage = Random.getRandom(-attackVariance, attackVariance) + getAttr(AttrType::DAMAGE); + bool backstab = false; + string enemyName = getLevel()->playerCanSee(c) ? c->getTheName() : "something"; + if (c->isPlayer()) + enemyName = ""; + if (!c->canSee(this) && canSee(c)) { + if (getWeapon() && getWeapon()->getAttackType() == AttackType::STAB) { + damage += 15; + backstab = true; + } + you(MsgType::ATTACK_SURPRISE, enemyName); + } + Attack attack(this, getRandomAttackLevel(), getAttackType(), toHit, damage, backstab); + if (!c->dodgeAttack(attack)) { + if (getWeapon()) { + you(getWeapon()->getAttackType() == AttackType::STAB ? + MsgType::THRUST_WEAPON : MsgType::SWING_WEAPON, getWeapon()->getName()); + if (!canSee(c)) + privateMessage("You hit something."); + } + else { + if (isHumanoid()) { + you(attack.getLevel() == AttackLevel::LOW ? MsgType::KICK : MsgType::PUNCH, enemyName); + } + else + you(MsgType::BITE, enemyName); + } + c->takeDamage(attack); + } + else + you(MsgType::MISS_ATTACK, enemyName); + spendTime(1); +} + +bool Creature::dodgeAttack(Attack attack) { + Debug() << getTheName() << " dodging " << attack.getAttacker()->getName() << " to hit " << attack.getToHit() << " dodge " << getAttr(AttrType::TO_HIT); + if (const Creature* c = attack.getAttacker()) { + if (!canSee(c)) + unknownAttacker.push_back(c); + EventListener::addAttackEvent(this, c); + if (!contains(privateEnemies, c)) + privateEnemies.push_back(c); + } + return canSee(attack.getAttacker()) && attack.getToHit() <= getAttr(AttrType::TO_HIT); +} + +bool Creature::takeDamage(Attack attack) { + if (sleeping) + wakeUp(); + int defense = getAttr(AttrType::DEFENSE); + Debug() << getTheName() << " attacked by " << attack.getAttacker()->getName() << " damage " << attack.getStrength() << " defense " << defense; + if (attack.getStrength() > defense) { + lastAttacker = attack.getAttacker(); + double dam = (defense == 0) ? 1 : double(attack.getStrength() - defense) / defense; + dam *= damageMultiplier; + if (!undead) + bleed(dam); + if (!noBody) { + BodyPart part = attack.inTheBack() ? BodyPart::BACK : getBodyPart(attack.getLevel()); + switch (part) { + case BodyPart::BACK: + youHit(part, attack.getType()); + break; + case BodyPart::WING: + if (dam >= 0.3 && wings > injuredWings) { + youHit(BodyPart::WING, attack.getType()); + injureWing(attack.getType() == AttackType::CUT || attack.getType() == AttackType::BITE); + if (health <= 0) + health = 0.01; + return false; + } + case BodyPart::ARM: + if (dam >= 0.5 && arms > injuredArms) { + youHit(BodyPart::ARM, attack.getType()); + injureArm(attack.getType() == AttackType::CUT || attack.getType() == AttackType::BITE); + if (health <= 0) + health = 0.01; + return false; + } + case BodyPart::LEG: + if (dam >= 0.8 && legs > injuredLegs) { + youHit(BodyPart::LEG, attack.getType()); + injureLeg(attack.getType() == AttackType::CUT || attack.getType() == AttackType::BITE); + if (health <= 0) + health = 0.01; + return false; + } + case BodyPart::HEAD: + if (dam >= 0.8 && heads > injuredHeads) { + youHit(BodyPart::HEAD, attack.getType()); + injureHead(attack.getType() == AttackType::CUT || attack.getType() == AttackType::BITE); + if (!undead) { + you(MsgType::DIE, ""); + die(attack.getAttacker()); + } + return true; + } + case BodyPart::TORSO: + if (dam >= 1.5) { + youHit(BodyPart::TORSO, attack.getType()); + if (!undead) + you(MsgType::DIE, ""); + die(attack.getAttacker()); + return true; + } + break; + } + } + if (health <= 0) { + you(MsgType::ARE, "critically wounded"); + you(MsgType::DIE, ""); + die(attack.getAttacker()); + return true; + } else + if (health < 0.5) + you(MsgType::ARE, "critically wounded"); + else + you(MsgType::ARE, "wounded"); + } else + you(MsgType::GET_HIT_NODAMAGE, getAttackParam(attack.getType())); + const Creature* c = attack.getAttacker(); + return false; +} + +void Creature::updateViewObject() { + if (const Creature* c = getLevel()->getPlayer()) + if (isEnemy(c)) + viewObject.setHostile(true); + viewObject.setBleeding(1 - health); +} + +double Creature::getHealth() const { + return health; +} + +double Creature::getWeight() const { + return *weight; +} + +string sizeStr(CreatureSize s) { + switch (s) { + case CreatureSize::SMALL: return "small"; + case CreatureSize::MEDIUM: return "medium"; + case CreatureSize::LARGE: return "large"; + case CreatureSize::HUGE: return "huge"; + } + return 0; +} + + +string limbsStr(int arms, int legs, int wings) { + vector ret; + if (arms) + ret.push_back("arms"); + if (legs) + ret.push_back("legs"); + if (wings) + ret.push_back("wings"); + if (ret.size() > 0) + return " with " + combine(ret); + else + return ""; +} + +string attrStr(bool strong, bool agile, bool fast) { + vector good; + vector bad; + if (strong) + good.push_back("strong"); + else + bad.push_back("weak"); + if (agile) + good.push_back("agile"); + else + bad.push_back("clumsy"); + if (fast) + good.push_back("fast"); + else + bad.push_back("slow"); + string p1 = combine(good); + string p2 = combine(bad); + if (p1.size() > 0 && p2.size() > 0) + p1.append(", but "); + p1.append(p2); + return p1; +} + +bool Creature::isSpecialMonster() const { + return specialMonster; +} + +string Creature::getDescription() const { + string weapon; + /*if (Item* item = getEquipment().getItem(EquipmentSlot::WEAPON)) + weapon = " It's wielding " + item->getAName() + "."; + else + if (Item* item = getEquipment().getItem(EquipmentSlot::RANGED_WEAPON)) + weapon = " It's wielding " + item->getAName() + ".";*/ + return getTheName() + " is a " + sizeStr(*size) + (isHumanoid() ? " humanoid creature" : " beast") + + (!isHumanoid() ? limbsStr(arms, legs, wings) : (wings ? " with wings" : "")) + ". " + + "It is " + attrStr(*strength > 16, *dexterity > 16, *speed > 100) + "." + weapon; +} + +void Creature::setSpeed(double value) { + speed = value; +} + +double Creature::getSpeed() const { + return *speed; +} +void Creature::heal(double amount, bool replaceLimbs) { + Debug() << getTheName() << " heal"; + if (health < 1) { + health = min(1., health + amount); + if (health >= 0.5) { + if (injuredArms > 0) { + you(MsgType::YOUR, string(injuredArms > 1 ? "arms are" : "arm is") + " in better shape"); + injuredArms = 0; + } + if (lostArms > 0 && replaceLimbs) { + you(MsgType::YOUR, string(lostArms > 1 ? "arms grow back!" : "arm grows back!")); + arms += lostArms; + lostArms = 0; + } + if (injuredWings > 0) { + you(MsgType::YOUR, string(injuredArms > 1 ? "wings are" : "wing is") + " in better shape"); + injuredWings = 0; + } + if (lostWings > 0 && replaceLimbs) { + you(MsgType::YOUR, string(lostArms > 1 ? "wings grow back!" : "wing grows back!")); + wings += lostWings; + lostWings = 0; + flyer = true; + } + if (injuredLegs > 0) { + you(MsgType::YOUR, string(injuredLegs > 1 ? "legs are" : "leg is") + " in better shape"); + injuredLegs = 0; + if (legs == 2 && collapsed) { + collapsed = false; + you(MsgType::STAND_UP, ""); + } + } + if (lostLegs > 0 && replaceLimbs) { + you(MsgType::YOUR, string(lostLegs > 1 ? "legs grow back!" : "leg grows back!")); + legs += lostLegs; + lostLegs = 0; + } + } + if (health == 1) { + you(MsgType::BLEEDING_STOPS, ""); + health = 1; + lastAttacker = nullptr; + } + updateViewObject(); + } +} + +void Creature::bleed(double severity) { + updateViewObject(); + health -= severity; + updateViewObject(); + Debug() << getTheName() << " health " << health; +} + +void Creature::setOnFire(double amount) { + if (!fireResistant) { + you(MsgType::ARE, "burnt by the fire"); + bleed(6. * amount / double(getAttr(AttrType::STRENGTH))); + } +} + +void Creature::poisonWithGas(double amount) { + if (breathing && !undead) { + you(MsgType::ARE, "poisoned by the gas"); + bleed(amount / double(getAttr(AttrType::STRENGTH))); + } +} + +void Creature::shineLight() { + if (undead) { + if (Random.roll(10)) { + you(MsgType::YOUR, "body crumbles to dust"); + die(nullptr); + } else + you(MsgType::ARE, "burnt by the sun"); + } +} + +void Creature::setHeld(const Creature* c) { + holding = c; +} + +bool Creature::isHeld() const { + return holding != nullptr; +} + +void Creature::sleep(int time) { + if (!noSleep) + sleeping.set(getTime() + time); +} + +bool Creature::isSleeping() const { + return sleeping; +} + +void Creature::wakeUp() { + you(MsgType::WAKE_UP, ""); + sleeping.unset(); +} + +void Creature::take(vector items) { + for (PItem& elem : items) + take(std::move(elem)); +} + +void Creature::take(PItem item) { + /* item->identify(); + Debug() << (specialMonster ? "special monster " : "") + getTheName() << " takes " << item->getNameAndModifiers();*/ + if (item->isWieldedTwoHanded()) + addSkill(Skill::twoHandedWeapon); + if (item->getType() == ItemType::RANGED_WEAPON) + addSkill(Skill::archery); + Item* ref = item.get(); + equipment.addItem(std::move(item)); + if (canEquip(ref)) + equip(ref); +} + +void Creature::dropCorpse() { + getSquare()->dropItem(ItemFactory::corpse(*name + " corpse", *name + " skeleton", *weight, + isFood ? ItemType::FOOD : ItemType::CORPSE)); +} + +void Creature::die(const Creature* attacker, bool dropInventory) { + Debug() << getTheName() << " dies."; + controller->onKilled(attacker); + if (dropInventory) + for (PItem& item : equipment.removeAllItems()) { + level->getSquare(position)->dropItem(std::move(item)); + } + dead = true; + if (dropInventory && !noBody) + dropCorpse(); + level->killCreature(this); + EventListener::addKillEvent(this, attacker); +} + +bool Creature::canFlyAway() const { + return canFly() && !getConstSquare()->isCovered(); +} + +void Creature::flyAway() { + Debug() << getTheName() << " fly away"; + CHECK(canFlyAway()); + globalMessage(getTheName() + " flies away."); + dead = true; + level->killCreature(this); +} + +void Creature::give(const Creature* whom, vector items) { + CHECK(whom->wantsItems(this, items)); + getLevel()->getSquare(whom->getPosition())->getCreature()->takeItems(this, equipment.removeItems(items)); +} + +bool Creature::canFire(Vec2 direction) const { + CHECK(direction.length8() == 1); + if (!getEquipment().getItem(EquipmentSlot::RANGED_WEAPON)) + return false; + if (!hasSkill(Skill::archery)) { + privateMessage("You don't have the skill to shoot a bow."); + return false; + } + if (numGoodArms() < 2) { + privateMessage("You need two hands to shoot a bow."); + return false; + } + if (!getAmmo()) { + privateMessage("Out of ammunition"); + return false; + } + return true; +} + +void Creature::fire(Vec2 direction) { + CHECK(canFire(direction)); + PItem ammo = equipment.removeItem(NOTNULL(getAmmo())); + RangedWeapon* weapon = NOTNULL(dynamic_cast(getEquipment().getItem(EquipmentSlot::RANGED_WEAPON))); + weapon->fire(this, level, std::move(ammo), direction); + spendTime(1); +} + +void Creature::squash(Vec2 direction) { + if (canDestroy(direction)) + destroy(direction); + Creature* c = getSquare(direction)->getCreature(); + if (c) { + c->you(MsgType::KILLED_BY, getTheName()); + c->die(); + } +} + +void Creature::construct(Vec2 direction, SquareType type) { + getSquare(direction)->construct(type); + spendTime(1); +} + +bool Creature::canConstruct(Vec2 direction, SquareType type) const { + return getConstSquare(direction)->canConstruct(type) && canConstruct(type); +} + +bool Creature::canConstruct(SquareType type) const { + return hasSkill(Skill::construction); +} + +void Creature::eat(Item* item) { + getSquare()->removeItem(item); + spendTime(3); +} + +bool Creature::canDestroy(Vec2 direction) const { + return getConstSquare(direction)->canDestroy(); +} + +void Creature::destroy(Vec2 direction) { + getSquare(direction)->destroy(getAttr(AttrType::STRENGTH)); + spendTime(1); +} + +bool Creature::canAttack(const Creature* c) const { + Vec2 direction = c->getPosition() - getPosition(); + return direction.length8() == 1; +} + +AttackLevel Creature::getRandomAttackLevel() const { + if (isHumanoid() && injuredArms == arms) + return AttackLevel::LOW; + switch (*size) { + case CreatureSize::SMALL: return AttackLevel::LOW; + case CreatureSize::MEDIUM: return chooseRandom({AttackLevel::LOW, AttackLevel::MIDDLE}, {1,1}); + case CreatureSize::LARGE: return chooseRandom({AttackLevel::LOW, AttackLevel::MIDDLE, AttackLevel::HIGH},{1,2,2}); + case CreatureSize::HUGE: return chooseRandom({AttackLevel::MIDDLE, AttackLevel::HIGH}, {1,3}); + } + return AttackLevel::LOW; +} + +Item* Creature::getWeapon() const { + return equipment.getItem(EquipmentSlot::WEAPON); +} + +AttackType Creature::getAttackType() const { + if (getWeapon()) + return getWeapon()->getAttackType(); + else + return isHumanoid() ? AttackType::PUNCH : AttackType::BITE; +} + +void Creature::applyItem(Item* item) { + Debug() << getTheName() << " applying " << item->getAName(); + CHECK(canApplyItem(item)); + double time = item->getApplyTime(); + item->apply(this, level); + if (item->isDiscarded()) { + equipment.removeItem(item); + } + spendTime(time); +} + +bool Creature::canApplyItem(Item* item) const { + if (!isHumanoid()) + return false; + if (!numGoodArms()) { + privateMessage("You don't have hands!"); + return false; + } else + return true; +} + +bool Creature::canThrowItem(Item* item) { + if (injuredArms == arms || !isHumanoid()) { + privateMessage("You can't throw anything!"); + return false; + } else if (item->getWeight() > 20) { + privateMessage(item->getTheName() + " is too heavy!"); + return false; + } + return true; +} + +void Creature::throwItem(Item* item, Vec2 direction) { + Debug() << getTheName() << " throwing " << item->getAName(); + CHECK(canThrowItem(item)); + int dist = 0; + int toHitVariance = 10; + int attackVariance = 7; + int str = getAttr(AttrType::STRENGTH); + if (item->getWeight() <= 0.5) + dist = 10 * str / 15; + else if (item->getWeight() <= 5) + dist = 5 * str / 15; + else if (item->getWeight() <= 20) + dist = 2 * str / 15; + else + Debug(FATAL) << "Item too heavy."; + int toHit = Random.getRandom(-toHitVariance, toHitVariance) + + getAttr(AttrType::THROWN_TO_HIT) + item->getModifier(AttrType::THROWN_TO_HIT); + int damage = Random.getRandom(-attackVariance, attackVariance) + + getAttr(AttrType::THROWN_DAMAGE) + item->getModifier(AttrType::THROWN_DAMAGE); + if (hasSkill(Skill::knifeThrowing) && item->getAttackType() == AttackType::STAB) { + damage += 7; + toHit += 4; + } + Attack attack(this, getRandomAttackLevel(), item->getAttackType(), toHit, damage); + level->throwItem(equipment.removeItem(item), attack, dist, getPosition(), direction); + spendTime(1); +} + +const ViewObject& Creature::getViewObject() const { + return viewObject; +} + +void Creature::setViewObject(const ViewObject& obj) { + viewObject = obj; +} + +bool Creature::canSee(const Creature* c) const { + return !isBlind() && !c->isInvisible() && + (!c->isHidden() || c->knowsHiding(this)) && + getLevel()->canSee(position, c->getPosition()); +} + +bool Creature::canSee(Vec2 pos) const { + return !isBlind() && + getLevel()->canSee(position, pos); +} + +bool Creature::isPlayer() const { + return controller->isPlayer(); +} + +string Creature::getTheName() const { + if (islower((*name)[0])) + return "the " + *name; + return *name; +} + +string Creature::getAName() const { + if (islower((*name)[0])) + return "a " + *name; + return *name; +} + +Optional Creature::getFirstName() const { + return firstName; +} + +string Creature::getName() const { + return *name; +} + +bool Creature::isHumanoid() const { + return *humanoid; +} + +bool Creature::isAnimal() const { + return animal; +} + +bool Creature::isStationary() const { + return stationary; +} + +void Creature::setStationary() { + stationary = true; +} + +bool Creature::isInvincible() const { + return invincible; +} + +bool Creature::isUndead() const { + return undead; +} + +bool Creature::canSwim() const { + return contains(skills, Skill::swimming); +} + +bool Creature::canFly() const { + return flyer; +} + +bool Creature::canWalk() const { + return walker; +} + +int Creature::numArms() const { + return arms; +} + +int Creature::numLegs() const { + return legs; +} + +int Creature::numWings() const { + return wings; +} + +bool Creature::lostLimbs() const { + return lostWings > 0 || lostArms > 0 || lostLegs > 0; +} + +int Creature::numGoodArms() const { + return arms - injuredArms; +} + +int Creature::numGoodLegs() const { + return legs - injuredLegs; +} + +int Creature::numGoodHeads() const { + return heads - injuredHeads; +} + +double Creature::getCourage() const { + return courage; +} + +void Creature::increaseExpLevel() { + if (expLevel < maxLevel) { + ++expLevel; + viewObject.setSizeIncrease(0.3); + if (skillGain.count(expLevel)) + addSkill(skillGain.at(expLevel)); + } +} + +int Creature::getExpLevel() const { + return expLevel; +} + +Optional Creature::getMoveTowards(Vec2 pos, bool away) { + Debug() << "" << getPosition() << (away ? "Moving away from" : " Moving toward ") << pos; + bool newPath = false; + if (!shortestPath || shortestPath->getTarget() != pos || shortestPath->isReversed() != away) { + newPath = true; + if (!away) + shortestPath = ShortestPath(getLevel(), this, pos, getPosition()); + else + shortestPath = ShortestPath(getLevel(), this, pos, getPosition(), -1.5); + } + CHECK(shortestPath); + if (shortestPath->isReachable(getPosition())) { + Vec2 pos2 = shortestPath->getNextMove(getPosition()); + if (canMove(pos2 - getPosition())) { + return pos2 - getPosition(); + } + } + if (newPath) + return Nothing(); + Debug() << "Reconstructing shortest path."; + if (!away) + shortestPath = ShortestPath(getLevel(), this, pos, getPosition()); + else + shortestPath = ShortestPath(getLevel(), this, pos, getPosition(), -1.5); + if (shortestPath->isReachable(getPosition())) { + Vec2 pos2 = shortestPath->getNextMove(getPosition()); + if (canMove(pos2 - getPosition())) { + return pos2 - getPosition(); + } else + return Nothing(); + } else { + Debug() << "Cannot move toward " << pos; + return Nothing(); + } +} + +Optional Creature::getMoveAway(Vec2 pos, bool pathfinding) { + if ((pos - getPosition()).length8() <= 5 && pathfinding) { + Optional move = getMoveTowards(pos, true); + if (move) + return move; + } + pair dirs = (getPosition() - pos).approxL1(); + vector moves; + if (canMove(dirs.first)) + moves.push_back(dirs.first); + if (canMove(dirs.second)) + moves.push_back(dirs.second); + if (moves.size() > 0) + return moves[Random.getRandom(moves.size())]; + return Nothing(); +} + +bool Creature::atTarget() const { + return shortestPath && getPosition() == shortestPath->getTarget(); +} + +void Creature::youHit(BodyPart part, AttackType type) const { + switch (part) { + case BodyPart::BACK: + switch (type) { + case AttackType::SHOOT: you(MsgType::ARE, "shot in the spine!"); break; + case AttackType::BITE: you(MsgType::YOUR, "head is bitten off!"); break; + case AttackType::CUT: you(MsgType::YOUR, "head is choped off!"); break; + case AttackType::CRUSH: you(MsgType::YOUR, "skull is shattered!"); break; + case AttackType::PUNCH: you(MsgType::YOUR, "neck is broken!"); break; + case AttackType::HIT: you(MsgType::ARE, "hit in the back of the head!"); break; + case AttackType::STAB: you(MsgType::ARE, "stabbed in the " + + chooseRandom({"back", "neck"})); break; + } + break; + case BodyPart::HEAD: + switch (type) { + case AttackType::SHOOT: you(MsgType::YOUR, "shot in the " + + chooseRandom({"eye", "neck", "forehead"}) + "!"); break; + case AttackType::BITE: you(MsgType::YOUR, "head is bitten off!"); break; + case AttackType::CUT: you(MsgType::YOUR, "head is choped off!"); break; + case AttackType::CRUSH: you(MsgType::YOUR, "skull is shattered!"); break; + case AttackType::PUNCH: you(MsgType::YOUR, "neck is broken!"); break; + case AttackType::HIT: you(MsgType::ARE, "hit in the head!"); break; + case AttackType::STAB: you(MsgType::ARE, "stabbed in the eye!"); break; + } + break; + case BodyPart::TORSO: + switch (type) { + case AttackType::SHOOT: you(MsgType::YOUR, "shot in the heart!"); break; + case AttackType::BITE: you(MsgType::YOUR, "internal organs are ripped out!"); break; + case AttackType::CUT: you(MsgType::ARE, "cut in half!"); break; + case AttackType::STAB: you(MsgType::ARE, "stabbed in the " + + chooseRandom({"stomach", "heart"}, {1, 1}) + "!"); break; + case AttackType::CRUSH: you(MsgType::YOUR, "ribs and internal organs are crushed!"); break; + case AttackType::HIT: you(MsgType::ARE, "hit in the chest!"); break; + case AttackType::PUNCH: you(MsgType::YOUR, "stomach receives a deadly blow!"); break; + } + break; + case BodyPart::ARM: + switch (type) { + case AttackType::SHOOT: you(MsgType::YOUR, "shot in the arm!"); break; + case AttackType::BITE: you(MsgType::YOUR, "arm is bitten off!"); break; + case AttackType::CUT: you(MsgType::YOUR, "arm is choped off!"); break; + case AttackType::STAB: you(MsgType::ARE, "stabbed in the arm!"); break; + case AttackType::CRUSH: you(MsgType::YOUR, "arm is smashed!"); break; + case AttackType::HIT: you(MsgType::ARE, "hit in the arm!"); break; + case AttackType::PUNCH: you(MsgType::YOUR, "arm is broken!"); break; + } + break; + case BodyPart::WING: + switch (type) { + case AttackType::SHOOT: you(MsgType::YOUR, "shot in the wing!"); break; + case AttackType::BITE: you(MsgType::YOUR, "wing is bitten off!"); break; + case AttackType::CUT: you(MsgType::YOUR, "wing is choped off!"); break; + case AttackType::STAB: you(MsgType::ARE, "stabbed in the wing!"); break; + case AttackType::CRUSH: you(MsgType::YOUR, "wing is smashed!"); break; + case AttackType::HIT: you(MsgType::ARE, "hit in the wing!"); break; + case AttackType::PUNCH: you(MsgType::YOUR, "wing is broken!"); break; + } + break; + case BodyPart::LEG: + switch (type) { + case AttackType::SHOOT: you(MsgType::YOUR, "shot in the leg!"); break; + case AttackType::BITE: you(MsgType::YOUR, "leg is bitten off!"); break; + case AttackType::CUT: you(MsgType::YOUR, "leg is cut off!"); break; + case AttackType::STAB: you(MsgType::YOUR, "stabbed in the leg!"); break; + case AttackType::CRUSH: you(MsgType::YOUR, "knee is crushed!"); break; + case AttackType::HIT: you(MsgType::ARE, "hit in the leg!"); break; + case AttackType::PUNCH: you(MsgType::YOUR, "leg is broken!"); break; + } + break; + } +} + +vector Creature::getUnknownAttacker() const { + return unknownAttacker; +} + +void Creature::refreshGameInfo(View::GameInfo& gameInfo) const { + gameInfo.infoType = View::GameInfo::InfoType::PLAYER; + View::GameInfo::PlayerInfo& info = gameInfo.playerInfo; + info.speed = getAttr(AttrType::SPEED); + if (firstName) + info.playerName = *firstName; + info.title = *name; + info.adjectives.clear(); + if (isBlind()) + info.adjectives.push_back("blind"); + if (isInvisible()) + info.adjectives.push_back("invisible"); + if (numArms() == 1) + info.adjectives.push_back("one-armed"); + if (numArms() == 0) + info.adjectives.push_back("armless"); + if (numLegs() == 1) + info.adjectives.push_back("one-legged"); + if (numLegs() == 0) + info.adjectives.push_back("legless"); + if (isHallucinating()) + info.adjectives.push_back("tripped"); + Item* weapon = getEquipment().getItem(EquipmentSlot::WEAPON); + info.weaponName = weapon ? weapon->getAName() : ""; + const Location* location = getLevel()->getLocation(getPosition()); + info.levelName = location && location->hasName() + ? capitalFirst(location->getName()) : getLevel()->getName(); + info.defense = getAttr(AttrType::DEFENSE); + info.bleeding = getHealth() < 1; + info.attack = getAttr(AttrType::DAMAGE); + info.strength = getAttr(AttrType::STRENGTH); + info.dexterity = getAttr(AttrType::DEXTERITY); + info.time = getTime(); + info.numGold = getGold(100000000).size(); + info.elfStanding = Tribe::elven->getStanding(this); + info.dwarfStanding = Tribe::dwarven->getStanding(this); + info.goblinStanding = Tribe::goblin->getStanding(this); + } + diff --git a/creature.h b/creature.h new file mode 100644 index 000000000..8014402cb --- /dev/null +++ b/creature.h @@ -0,0 +1,279 @@ +#ifndef _CREATURE_H +#define _CREATURE_H + +#include "creature_attributes.h" +#include "view_object.h" +#include "equipment.h" +#include "enums.h" +#include "attack.h" +#include "shortest_path.h" +#include "tribe.h" +#include "timer_var.h" +#include "skill.h" +#include "map_memory.h" +#include "creature_view.h" +#include "controller.h" + +class Level; +class Tribe; + +class Creature : private CreatureAttributes, public CreatureView { + public: + typedef CreatureAttributes CreatureAttributes; + Creature(ViewObject o, Tribe* tribe, const CreatureAttributes& attr, ControllerFactory); + virtual ~Creature() {} + + static Creature* getDefault(); + + const ViewObject& getViewObject() const; + virtual ViewIndex getViewIndex(Vec2 pos) const override; + void makeMove(); + double getTime() const; + void setTime(double t); + void setLevel(Level* l); + virtual const Level* getLevel() const; + Level* getLevel(); + const Square* getConstSquare() const; + const Square* getConstSquare(Vec2 direction) const; + Square* getSquare(); + Square* getSquare(Vec2 direction); + void setPosition(Vec2 pos); + virtual Vec2 getPosition() const override; + bool dodgeAttack(Attack); + bool takeDamage(Attack); + void heal(double amount = 1, bool replaceLimgs = false); + double getHealth() const; + double getWeight() const; + void sleep(int time); + bool isSleeping() const; + void wakeUp(); + void take(PItem item); + void take(vector item); + const Equipment& getEquipment() const; + vector steal(const vector items); + int getUniqueId() const; + virtual bool canSee(const Creature*) const override; + virtual bool canSee(Vec2 pos) const override; + void slowDown(double duration); + void speedUp(double duration); + + void tick(double realTime); + + string getTheName() const; + string getAName() const; + string getName() const; + Optional getFirstName() const; + int getAttr(AttrType) const; + + Tribe* getTribe() const; + bool isFriend(const Creature*) const; + bool isEnemy(const Creature*) const; + void addEnemyCheck(EnemyCheck*); + void removeEnemyCheck(EnemyCheck*); + int getDebt(const Creature* debtor) const; + vector getGold(int num) const; + + bool wantsItems(const Creature* from, vector items) const; + void takeItems(const Creature* from, vector items); + + void youHit(BodyPart part, AttackType type) const; + + virtual void dropCorpse(); + + void globalMessage(const string& playerCanSee, const string& cant = "") const; + const vector& getVisibleEnemies() const; + vector getVisibleCreatures() const; + + bool isDead() const; + bool isHumanoid() const; + bool isAnimal() const; + bool isStationary() const; + void setStationary(); + bool isInvincible() const; + bool isUndead() const; + bool canSwim() const; + bool canFly() const; + bool canWalk() const; + int numArms() const; + int numLegs() const; + int numWings() const; + bool lostLimbs() const; + int numGoodArms() const; + int numGoodLegs() const; + int numGoodHeads() const; + double getCourage() const; + + void increaseExpLevel(); + int getExpLevel() const; + + string getDescription() const; + bool isSpecialMonster() const; + + void addSkill(Skill* skill); + bool hasSkill(Skill*) const; + bool hasSkillToUseWeapon(const Item*) const; + + bool canMove(Vec2 direction) const; + void move(Vec2 direction); + bool canSwapPosition(Vec2 direction) const; + void swapPosition(Vec2 direction); + void wait(); + vector getPickUpOptions() const; + bool canPickUp(const vector& item) const; + void pickUp(const vector& item); + void drop(const vector& item); + void drop(vector item); + bool canAttack(const Creature*) const; + void attack(const Creature*); + bool canBumpInto(Vec2 direction) const; + void bumpInto(Vec2 direction); + void applyItem(Item* item); + bool canApplyItem(Item* item) const; + void startEquipChain(); + void finishEquipChain(); + void equip(Item* item); + void unequip(Item* item); + bool canEquip(const Item* item) const; + bool canUnequip(const Item* item) const; + bool canThrowItem(Item*); + void throwItem(Item*, Vec2 direction); + bool canHeal(Vec2 direction) const; + void heal(Vec2 direction); + void applySquare(); + bool canHide() const; + void hide(); + bool isHidden() const; + bool knowsHiding(const Creature*) const; + void panic(double time); + void rage(double time); + void hallucinate(double time); + bool isHallucinating() const; + void blind(double time); + bool isBlind() const; + void makeInvisible(double time); + bool isInvisible() const; + void giveStrBonus(double time); + void giveDexBonus(double time); + bool canFlyAway() const; + void flyAway(); + bool canChatTo(Vec2 direction) const; + void chatTo(Vec2 direction); + void stealFrom(Vec2 direction, const vector&); + void give(const Creature* whom, vector items); + bool canFire(Vec2 direction) const; + void fire(Vec2 direction); + void squash(Vec2 direction); + void construct(Vec2 direction, SquareType); + bool canConstruct(Vec2 direction, SquareType) const; + bool canConstruct(SquareType) const; + void eat(Item*); + bool canDestroy(Vec2 direction) const; + void destroy(Vec2 direction); + + virtual void onChat(Creature*); + + bool isPanicking() const; + Item* getWeapon() const; + + Optional getMoveTowards(Vec2 pos, bool away = false); + Optional getMoveAway(Vec2 pos, bool pathfinding = true); + bool atTarget() const; + void die(const Creature* attacker = nullptr, bool dropInventory = true); + void bleed(double severity); + void setOnFire(double amount); + void poisonWithGas(double amount); + void shineLight(); + void setHeld(const Creature* holding); + bool isHeld() const; + + virtual vector getUnknownAttacker() const override; + virtual void refreshGameInfo(View::GameInfo&) const override; + + void you(MsgType type, const string& param) const; + void you(const string& param) const; + void privateMessage(const string& message) const; + bool isPlayer() const; + void onItemsAppeared(vector items); + const MapMemory& getMemory(const Level* l = nullptr) const; + void grantIdentify(int numItems); + + Controller* getController(); + void pushController(Controller*); + void popController(); + bool canPopController(); + void setSpeed(double); + double getSpeed() const; + + protected: + void setViewObject(const ViewObject&); + + private: + double getInventoryWeight() const; + Item* getAmmo() const; + void updateViewObject(); + int getStrengthAttackBonus() const; + int getAttrVal(AttrType type) const; + int getToHit() const; + BodyPart getBodyPart(AttackLevel attack) const; + void injureLeg(bool drop); + void injureArm(bool drop); + void injureWing(bool drop); + void injureHead(bool drop); + AttackLevel getRandomAttackLevel() const; + AttackType getAttackType() const; + void spendTime(double time); + BodyPart armOrWing() const; + void updateVisibleEnemies(); + pair getStanding(const Creature* c) const; + + ViewObject viewObject; + Level* level = nullptr; + Vec2 position; + double time; + Equipment equipment; + int uniqueId; + Optional shortestPath; + unordered_set knownHiding; + Tribe* tribe; + unordered_map standingOverride; + vector enemyChecks; + double health = 1; + bool dead; + double lastTick; + bool collapsed = false; + int injuredArms = 0; + int injuredLegs = 0; + int injuredWings = 0; + int injuredHeads = 0; + int lostArms = 0; + int lostLegs = 0; + int lostWings = 0; + int lostHeads = 0; + bool hidden = false; + bool inEquipChain = false; + int numEquipActions = 0; + Optional homePos; + const Creature* leader = nullptr; + const Creature* lastAttacker = nullptr; + int swapPositionCooldown = 0; + TimerVar sleeping; + TimerVar panicking; + TimerVar enraged; + TimerVar slowed; + TimerVar speeding; + TimerVar strBonus; + TimerVar dexBonus; + TimerVar hallucinating; + TimerVar blinded; + TimerVar invisible; + int expLevel = 1; + vector unknownAttacker; + vector visibleEnemies; + vector privateEnemies; + const Creature* holding = nullptr; + PController controller; + stack controllerStack; +}; + + +#endif diff --git a/creature_attributes.h b/creature_attributes.h new file mode 100644 index 000000000..81342ecf5 --- /dev/null +++ b/creature_attributes.h @@ -0,0 +1,60 @@ +#ifndef _CREATURE_ATTRIBUTES_H +#define _CREATURE_ATTRIBUTES_H + +#include +#include + +#include "util.h" +#include "skill.h" + +// WTF is this defined +#undef HUGE + +enum class CreatureSize { SMALL, MEDIUM, LARGE, HUGE }; + +#define CATTR(X) CreatureAttributes([&](CreatureAttributes& c) { X }) + +class CreatureAttributes { + public: + CreatureAttributes(function fun) { + fun(*this); + } + + MustInitialize name; + MustInitialize speed; + MustInitialize size; + MustInitialize strength; + MustInitialize dexterity; + MustInitialize weight; + Optional chatReactionFriendly; + Optional chatReactionHostile; + Optional firstName; + bool specialMonster = false; + int barehandedDamage = 0; + int legs = 2; + int arms = 2; + int wings = 0; + int heads = 1; + bool noBody = false; + bool fireResistant = false; + bool breathing = true; + MustInitialize humanoid; + bool animal = false; + bool healer = false; + bool flyer = false; + bool undead = false; + bool walker = true; + bool isFood = false; + bool stationary = false; + bool noSleep = false; + double courage = 1; + int maxLevel = 10; + double carryingMultiplier = 1; + bool permanentlyBlind = false; + bool invincible = false; + double damageMultiplier = 1; + unordered_set skills; + map skillGain {{4, Skill::twoHandedWeapon}, {6, Skill::knifeThrowing}, {10, Skill::archery}}; +}; + +#endif diff --git a/creature_factory.cpp b/creature_factory.cpp new file mode 100644 index 000000000..8ab6832be --- /dev/null +++ b/creature_factory.cpp @@ -0,0 +1,1439 @@ +#include "stdafx.h" + +using namespace std; + +static map > creatureMap; +static map > inventoryMap; +static vector keys; +static map > levelRange; + +class BoulderController : public Monster { + public: + BoulderController(Creature* c, Vec2 dir) : Monster(c, MonsterAIFactory::idle()), direction(dir) {} + + BoulderController(Creature* c, Tribe* _myTribe) : Monster(c, MonsterAIFactory::idle()), + stopped(true), myTribe(_myTribe) {} + + virtual void makeMove() override { + if (myTribe != nullptr && stopped) { + for (Vec2 v : Vec2::directions8(true)) { + int radius = 6; + bool found = false; + for (int i = 1; i <= radius; ++i) { + if (!(creature->getPosition() + (v * i)).inRectangle(creature->getLevel()->getBounds())) + break; + if (Creature* other = creature->getSquare(v * i)->getCreature()) + if (other->getTribe() != myTribe) { + direction = v; + stopped = false; + found = true; + EventListener::addTriggerEvent(creature->getLevel(), creature->getPosition()); + break; + } + if (!creature->getSquare(v * i)->canEnter(creature)) + break; + } + if (found) + break; + } + } + if (stopped) { + creature->wait(); + return; + } + if (creature->getConstSquare(direction)->getStrength() < 300) + creature->squash(direction); + if (creature->canMove(direction)) + creature->move(direction); + else { + creature->getLevel()->globalMessage(creature->getPosition() + direction, + creature->getTheName() + " crashes on the " + creature->getConstSquare(direction)->getName(), + "You hear a crash"); + creature->die(); + } + if (creature->isDead()) + return; + double speed = creature->getSpeed(); + double deceleration = 0.1; + speed -= deceleration * 100 * 100 / speed; + if (speed < 30) { + if (myTribe) { + creature->die(); + return; + } + speed = 100; + stopped = true; + creature->setStationary(); + myTribe = nullptr; + } + creature->setSpeed(speed); + } + + virtual void you(MsgType type, const string& param) const override { + string msg, msgNoSee; + switch (type) { + case MsgType::BURN: msg = creature->getTheName() + " burns in the " + param; break; + case MsgType::DROWN: msg = creature->getTheName() + " falls into the " + param; + msgNoSee = "You hear a loud splash"; break; + case MsgType::KILLED_BY: msg = creature->getTheName() + " is destroyed by " + param; break; + case MsgType::HIT_THROWN_ITEM: msg = param + " hits " + creature->getTheName(); break; + case MsgType::CRASH_THROWN_ITEM: msg = param + " crashes on " + creature->getTheName(); break; + case MsgType::ENTER_PORTAL: msg = creature->getTheName() + " disappears in the portal."; break; + default: break; + } + if (!msg.empty()) + creature->globalMessage(msg, msgNoSee); + } + + virtual void onBump(Creature* c) override { + Vec2 dir = creature->getPosition() - c->getPosition(); + string it = c->canSee(creature) ? creature->getTheName() : "it"; + string something = c->canSee(creature) ? creature->getTheName() : "something"; + if (!creature->canMove(dir)) { + c->privateMessage(it + " won't move in this direction"); + return; + } + c->privateMessage("You push " + something); + if (stopped || dir == direction) { + direction = dir; + creature->setSpeed(100 * c->getAttr(AttrType::STRENGTH) / 30); + stopped = false; + } + } + + private: + Vec2 direction; + bool stopped = false; + Tribe* myTribe = nullptr; +}; + +class Boulder : public Creature { + public: + Boulder(const ViewObject& obj, const CreatureAttributes& attr, Vec2 dir) : + Creature(obj, Tribe::killEveryone, attr, ControllerFactory([dir](Creature* c) { + return new BoulderController(c, dir); })) {} + + Boulder(const ViewObject& obj, const CreatureAttributes& attr, Tribe* myTribe) : + Creature(obj, myTribe, attr, ControllerFactory([myTribe](Creature* c) { + return new BoulderController(c, myTribe); })) {} + + virtual void dropCorpse() override { + drop(ItemFactory::fromId(ItemId::ROCK, Random.getRandom(100, 200))); + } +}; + +PCreature CreatureFactory::getRollingBoulder(Vec2 direction) { + return PCreature(new Boulder( + ViewObject(ViewId::BOULDER, ViewLayer::CREATURE, "Boulder"), CATTR( + c.dexterity = 1; + c.strength = 1000; + c.weight = 1000; + c.humanoid = false; + c.size = CreatureSize::LARGE; + c.speed = 200; + c.permanentlyBlind = true; + c.stationary = true; + c.noSleep = true; + c.invincible = true; + c.breathing = false; + c.name = "boulder";), direction)); +} + +PCreature CreatureFactory::getGuardingBoulder(Tribe* tribe) { + return PCreature(new Boulder( + ViewObject(ViewId::BOULDER, ViewLayer::CREATURE, "Boulder"), CATTR( + c.dexterity = 1; + c.strength = 1000; + c.weight = 1000; + c.humanoid = false; + c.size = CreatureSize::LARGE; + c.speed = 200; + c.permanentlyBlind = true; + c.noSleep = true; + c.stationary = true; + c.invincible = true; + c.breathing = false; + c.name = "boulder";), tribe)); +} + +class KrakenController : public Monster { + public: + KrakenController(Creature* c) : Monster(c, MonsterAIFactory::monster()) { + numSpawns = chooseRandom({1, 2}, {4, 1}); + } + + void makeReady() { + ready = true; + } + + void unReady() { + ready = false; + } + + virtual void onKilled(const Creature* attacker) override { + if (attacker) + attacker->privateMessage("You cut the kraken's tentacle"); + for (Creature* c : spawns) + if (!c->isDead()) + c->die(nullptr); + } + + virtual void you(MsgType type, const string& param) const override { + string msg, msgNoSee; + switch (type) { + case MsgType::KILLED_BY: msg = "The kraken's tentacle is cut by " + param; break; + case MsgType::DIE: + case MsgType::DIE_OF_BLEEDING: return; + default: Monster::you(type, param); break; + } + if (!msg.empty()) + creature->globalMessage(msg, msgNoSee); + } + + virtual void makeMove() override { + int radius = 10; + if (waitNow) { + creature->wait(); + waitNow = false; + return; + } + for (Creature* c : spawns) + if (c->isDead()) { + ++numSpawns; + removeElement(spawns, c); + break; + } + if (held && ((held->getPosition() - creature->getPosition()).length8() != 1 || held->isDead())) + held = nullptr; + if (held) { + held->you(MsgType::HAPPENS_TO, creature->getTheName() + " pulls"); + if (father) { + held->setHeld(father->creature); + father->held = held; + creature->die(nullptr, false); + creature->getLevel()->moveCreature(held, creature->getPosition() - held->getPosition()); + } else { + held->you(MsgType::ARE, "eaten by " + creature->getTheName()); + held->die(); + } + } + if (numSpawns > 0) + for (Vec2 v: Rectangle(Vec2(-radius, -radius), Vec2(radius + 1, radius + 1))) + if (creature->getLevel()->inBounds(creature->getPosition() + v)) + if (Creature * c = creature->getSquare(v)->getCreature()) + if (creature->canSee(c) && creature->isEnemy(c) && !creature->isStationary()) { + if (v.length8() == 1) { + if (ready) { + c->you(MsgType::HAPPENS_TO, creature->getTheName() + " swings itself around"); + c->setHeld(creature); + held = c; + unReady(); + } else + makeReady(); + break; + } + PCreature spawn = CreatureFactory::fromId(CreatureId::KRAKEN, creature->getTribe()); + pair dirs = v.approxL1(); + vector moves; + if (creature->getSquare(dirs.first)->canEnter(spawn.get())) + moves.push_back(dirs.first); + if (creature->getSquare(dirs.second)->canEnter(spawn.get())) + moves.push_back(dirs.second); + if (!moves.empty()) { + if (!ready) { + makeReady(); + } else { + Vec2 move = chooseRandom(moves); + spawns.push_back(spawn.get()); + dynamic_cast(spawn->getController())->father = this; + creature->getLevel()->addCreature(creature->getPosition() + move, std::move(spawn)); + --numSpawns; + unReady(); + } + } else + unReady(); + break; + } + creature->wait(); + } + private: + int numSpawns; + bool waitNow = true; + bool ready = false; + Creature* held = nullptr; + vector spawns; + KrakenController* father = nullptr; +}; + +/*class Shapechanger : public Monster { + public: + Shapechanger(const ViewObject& obj, Tribe* tribe, const CreatureAttributes& attr, vector _creatures) + : Monster(obj, tribe, attr, MonsterAIFactory::monster()), creatures(_creatures) {} + + virtual void makeMoveSpecial() override { + int radius = 3; + for (Vec2 v: Rectangle(Vec2(-radius, -radius), Vec2(radius + 1, radius + 1))) + if (getLevel()->inBounds(getPosition() + v)) + if (Creature* enemy = getSquare(v)->getCreature()) + if (canSee(enemy) && isEnemy(enemy) && enemy->isPlayer()) { + PCreature c = CreatureFactory::fromId(chooseRandom(creatures), getTribe()); + enemy->you(MsgType::ARE, "frozen in place by " + getTheName() + "!"); + enemy->setHeld(c.get()); + globalMessage(getTheName() + " turns into " + c->getAName()); + Vec2 pos = getPosition(); + die(nullptr, false); + getLevel()->addCreature(pos, std::move(c)); + return; + } + Monster::makeMoveSpecial(); + } + + private: + vector creatures; +};*/ + +class KamikazeController : public Monster { + public: + KamikazeController(Creature* c, MonsterAIFactory f) : Monster(c, f) {} + + virtual void makeMove() override { + for (Vec2 v : Vec2::directions8()) + if (creature->getLevel()->inBounds(creature->getPosition() + v)) + if (Creature* c = creature->getSquare(v)->getCreature()) + if (creature->isEnemy(c) && creature->canSee(c)) { + creature->globalMessage(creature->getTheName() + " explodes!"); + c->getSquare()->setOnFire(1); + creature->die(nullptr, false); + return; + } + Monster::makeMove(); + } +}; + +class ShopkeeperController : public Monster, public EventListener { + public: + + ShopkeeperController(Creature* c, Location* area) : Monster(c, MonsterAIFactory::stayInLocation(area)), shopArea(area) { + EventListener::addListener(this); + } + + virtual void makeMove() override { + if (creature->getLevel() != shopArea->getLevel()) { + Monster::makeMove(); + return; + } + if (firstMove) { + for (Vec2 v : shopArea->getBounds()) + for (Item* item : creature->getLevel()->getSquare(v)->getItems()) { + myItems.push_back(item); + item->setUnpaid(true); + } + firstMove = false; + } + vector creatures; + for (Vec2 v : shopArea->getBounds()) + if (const Creature* c = creature->getLevel()->getSquare(v)->getCreature()) { + creatures.push_back(c); + if (!prevCreatures.count(c) && !thieves.count(c) && !creature->isEnemy(c)) { + if (!debt.count(c)) + c->privateMessage("\"Welcome to " + creature->getName() + "'s shop!\""); + else { + c->privateMessage("\"Pay your debt or... !\""); + thiefCount.erase(c); + } + } + } + for (auto elem : debt) { + const Creature* c = elem.first; + if (!contains(creatures, c)) { + c->privateMessage("\"Come back, you owe me " + convertToString(elem.second) + " zorkmids!\""); + if (++thiefCount[c] == 4) { + c->privateMessage("\"Thief! Thief!\""); + creature->getTribe()->onItemsStolen(c); + thiefCount.erase(c); + debt.erase(c); + thieves.insert(c); + for (Item* item : c->getEquipment().getItems()) + if (contains(unpaidItems[c], item)) + item->setUnpaid(false); + break; + } + } + } + prevCreatures.clear(); + prevCreatures.insert(creatures.begin(), creatures.end()); + Monster::makeMove(); + } + + virtual bool wantsItems(const Creature* from, vector items) const override { + for (Item* it : items) + if (it->getType() != ItemType::GOLD) + return false; + return true; + } + + virtual void takeItems(const Creature* from, vector items) { + for (PItem& item : items) { + CHECK(wantsItems(from, {item.get()})); + --debt[from]; + creature->take(std::move(item)); + } + CHECK(debt[from] == 0) << "Bad debt " << debt[from]; + debt.erase(from); + for (Item* it : from->getEquipment().getItems()) + if (contains(unpaidItems[from], it)) { + it->setUnpaid(false); + removeElement(myItems, it); + } + unpaidItems.erase(from); + } + + virtual void onItemsAppeared(Vec2 position, const vector& items) override { + if (position.inRectangle(shopArea->getBounds())) { + myItems.insert(myItems.end(), items.begin(), items.end()); + for (Item* it : items) + it->setUnpaid(true); + } + } + + virtual void onPickupEvent(const Creature* c, const vector& items) override { + if (c->getPosition().inRectangle(shopArea->getBounds())) { + for (const Item* it1 : items) + if (Optional elem = findElement(myItems, it1)) { + Item* item = myItems[*elem]; + debt[c] += item->getPrice(); + unpaidItems[c].push_back(item); + } + } + } + + virtual void onDropEvent(const Creature* c, const vector& items) override { + if (c->getPosition().inRectangle(shopArea->getBounds())) { + for (const Item* it1 : items) + if (Optional elem = findElement(myItems, it1)) { + Item* item = myItems[*elem]; + if ((debt[c] -= item->getPrice()) == 0) + debt.erase(c); + removeElement(unpaidItems[c], item); + } + } + } + + virtual const Level* getListenerLevel() const override { + return creature->getLevel(); + } + + virtual void onKilled(const Creature* attacker) override { + EventListener::removeListener(this); + for (Item* item : myItems) + item->setUnpaid(false); + } + + virtual int getDebt(const Creature* debtor) const override { + if (debt.count(debtor)) { + return debt.at(debtor); + } + else { + return 0; + } + } + + private: + unordered_set prevCreatures; + unordered_map debt; + unordered_map thiefCount; + unordered_set thieves; + unordered_map> unpaidItems; + Location* shopArea; + vector myItems; + bool firstMove = true; +}; + +class VillageElder : public Creature { + public: + VillageElder(vector> _teachSkills, vector tribeQuest, + const ViewObject& object, Tribe* t, const CreatureAttributes& attr, ControllerFactory factory) : + Creature(object, t, attr, factory), teachSkills(_teachSkills), tribeQuestOrder(tribeQuest) { + getTribe()->addImportantMember(this); + } + + bool teach(Creature* who) { + for (auto elem : teachSkills) + if (!who->hasSkill(elem.first) && getTribe()->getStanding(who) >= elem.second) { + Skill* teachSkill = elem.first; + who->addSkill(teachSkill); + who->privateMessage("\"You are a friend of our tribe. I will share my knowledge with you.\""); + who->privateMessage(getName() + " teaches you the " + teachSkill->getName()); + if (teachSkill == Skill::archery) { + who->privateMessage(getName() + " hands you a bow and a quiver of arrows."); + who->take(std::move(ItemFactory::fromId(ItemId::BOW))); + who->take(ItemFactory::fromId(ItemId::ARROW, Random.getRandom(20, 36))); + } + return true; + } + return false; + } + + bool tribeQuest(Creature* who) { + for (Tribe* tribe : tribeQuestOrder) { + vector elders = tribe->getImportantMembers(); + CHECKEQ((int)elders.size(), 1); + if ((killCreature == elders[0] && killCreature->isDead()) || + (bringItem && who->getEquipment().hasItem(bringItem))) { + who->privateMessage("\"" + who->getName() + ", you have fulfilled your quest.\""); + teach(who); + killCreature = nullptr; + bringItem = nullptr; + return true; + } + if (elders[0]->isDead()) + continue; + Item* weapon = nullptr; + for (Item* it : elders[0]->getEquipment().getItems(Item::typePredicate(ItemType::WEAPON))) + if (weapon == nullptr || it->getModifier(AttrType::DAMAGE) > weapon->getModifier(AttrType::DAMAGE)) + weapon = it; + who->privateMessage("\"The " + tribe->getName() + " have long been a nuisance for us."); + who->privateMessage( + "Go kill their leader, " + elders[0]->getTheName()); + if (weapon) { + who->privateMessage("As a proof, bring me his weapon, " + weapon->getArtifactName() + ".\""); + bringItem = weapon; + } else + killCreature = elders[0]; + + return true; + } + return false; + } + + virtual void onChat(Creature* who) override { + if (isEnemy(who)) { + Creature::onChat(who); + return; + } + if (tribeQuest(who)) + return; + // if (teach(who)) + // return; + const vector locations = getLevel()->getAllLocations(); + if (locations.size() == 0) + Creature::onChat(who); + else + while (1) { + Location* l = locations[Random.getRandom(locations.size())]; + if (l->hasName() && l != getLevel()->getLocation(getPosition())) { + Vec2 dir = l->getBounds().middle() - getPosition(); + string dist = dir.lengthD() > 150 ? "far" : "close"; + string bearing = dir.getBearing(); + who->privateMessage("\"There is a " + l->getName() + " " + dist + " in the " + bearing + "\""); + who->privateMessage("\"" + l->getDescription() + "\""); + return; + } + } + } + + private: + vector> teachSkills; + vector tribeQuestOrder; + const Item* bringItem = nullptr; + const Creature* killCreature = nullptr; +}; + +PCreature CreatureFactory::addInventory(PCreature c, const vector& items) { + for (ItemId item : items) { + PItem it = ItemFactory::fromId(item); + Item* ref = it.get(); + c->take(std::move(it)); + } + return c; +} + +PCreature CreatureFactory::getShopkeeper(Location* shopArea, Tribe* tribe) { + PCreature ret(new Creature( + ViewObject(tribe == Tribe::dwarven ? ViewId::DWARVEN_SHOPKEEPER : ViewId::ELVEN_SHOPKEEPER, + ViewLayer::CREATURE, "Shopkeeper"), tribe, + CATTR( + c.speed = 100; + c.size = CreatureSize::LARGE; + c.strength = 15; + c.dexterity = 13; + c.barehandedDamage = 13; + c.humanoid = true; + c.weight = 100; + c.chatReactionFriendly = "complains about high import tax"; + c.chatReactionHostile = "\"Die!\""; + c.name = NameGenerator::firstNames.getNext();), + ControllerFactory([shopArea](Creature* c) { + return new ShopkeeperController(c, shopArea); }))); + return addInventory(std::move(ret), vector(Random.getRandom(100, 300), ItemId::GOLD_PIECE)); +} + + +PCreature CreatureFactory::random(MonsterAIFactory actorFactory) { + if (unique.size() > 0) { + CreatureId id = unique.back(); + unique.pop_back(); + return fromId(id, tribe, actorFactory); + } + return fromId(chooseRandom(creatures, weights), tribe, actorFactory); +} + +PCreature get(ViewId viewId, + CreatureAttributes attr, + Tribe* tribe, + ControllerFactory factory) { + return PCreature(new Creature(ViewObject(viewId, ViewLayer::CREATURE, *attr.name), tribe, attr, factory)); +} + +CreatureFactory::CreatureFactory(Tribe* t, const vector& c, const vector& w, + const vector& u) + : tribe(t), creatures(c), weights(w), unique(u) { +} + +CreatureFactory CreatureFactory::humanVillage() { + return CreatureFactory(Tribe::elven, { CreatureId::PESEANT, + CreatureId::CHILD, CreatureId::HORSE, CreatureId::COW }, + { 2, 1, 1, 1}, {}); +} + +CreatureFactory CreatureFactory::elvenVillage() { + return CreatureFactory(Tribe::elven, { CreatureId::ELF, CreatureId::ELF_CHILD, CreatureId::HORSE, CreatureId::COW }, + { 2, 2, 1, 1}, { CreatureId::ELF_LORD}); +} + +CreatureFactory CreatureFactory::forrest() { + return CreatureFactory(Tribe::wildlife, + { CreatureId::DEER, CreatureId::FOX, CreatureId::BOAR, CreatureId::LEPRECHAUN }, + { 2, 1, 1, 3}, {}); +} + +CreatureFactory CreatureFactory::crypt() { + return CreatureFactory(Tribe::monster, { CreatureId::ZOMBIE}, { 1}, {}); +} + +CreatureFactory CreatureFactory::collectiveUndead() { + return CreatureFactory(Tribe::player, { CreatureId::ZOMBIE, CreatureId::VAMPIRE, CreatureId::MUMMY}, + {1, 1, 1}, {}); +} + +CreatureFactory CreatureFactory::collectiveStart() { + return CreatureFactory(Tribe::player, { CreatureId::IMP}, { 1}, {CreatureId::DUNGEON_HEART} ); +} + +CreatureFactory CreatureFactory::collectiveMinions() { + return CreatureFactory(Tribe::player, { CreatureId::GNOME, CreatureId::BILE_DEMON, CreatureId::HELL_HOUND, + CreatureId::SPECIAL_MONSTER}, { 3, 4, 5, 1}, {CreatureId::SPECIAL_MONSTER_HUMANOID}); +} + +CreatureFactory CreatureFactory::collectiveEnemies() { + return CreatureFactory(Tribe::monster, { CreatureId::KNIGHT, CreatureId::ARCHER}, { 1, 1}, {}); +} + +CreatureFactory CreatureFactory::collectiveFinalAttack() { + return CreatureFactory(Tribe::monster, { CreatureId::KNIGHT, CreatureId::ARCHER}, { 1, 1}, {CreatureId::AVATAR}); +} + +CreatureFactory CreatureFactory::dwarfTown(int num) { + int maxLevel = 3; + CHECK(num <= maxLevel && num > 0); + map> frequencies { + { CreatureId::GNOME, { 0, 1, 1}}, + { CreatureId::JACKAL, { 0, 1, 1 }}, + { CreatureId::RAT, { 2, 1, 1}}, + { CreatureId::BAT, { 0, 1, 1 }}, + { CreatureId::DWARF, { 6, 1, 1 }}, + { CreatureId::GOBLIN, { 2, 1, 1 }}}; + vector> uniqueMonsters(maxLevel); + uniqueMonsters[0].push_back(CreatureId::DWARF_BARON); + vector ids; + vector freq; + for (auto elem : frequencies) { + ids.push_back(elem.first); + freq.push_back(elem.second[num - 1]); + } + return CreatureFactory(Tribe::monster, ids, freq, uniqueMonsters[num - 1]); +} + +CreatureFactory CreatureFactory::goblinTown(int num) { + int maxLevel = 3; + CHECK(num <= maxLevel && num > 0); + map> frequencies { + { CreatureId::GNOME, { 0, 1, 1}}, + { CreatureId::JACKAL, { 0, 1, 1 }}, + { CreatureId::RAT, { 1, 1, 1}}, + { CreatureId::BAT, { 0, 1, 1 }}, + { CreatureId::GOBLIN, { 2, 1, 1 }}}; + vector> uniqueMonsters(maxLevel); + uniqueMonsters[0].push_back(CreatureId::GREAT_GOBLIN); + vector ids; + vector freq; + for (auto elem : frequencies) { + ids.push_back(elem.first); + freq.push_back(elem.second[num - 1]); + } + return CreatureFactory(Tribe::monster, ids, freq, uniqueMonsters[num - 1]); +} + +CreatureFactory CreatureFactory::pyramid(int level) { + if (level == 2) + return CreatureFactory(Tribe::monster, { CreatureId::MUMMY }, {1}, { CreatureId::MUMMY_LORD }); + else + return CreatureFactory(Tribe::monster, { CreatureId::MUMMY }, {1}, { }); +} + +CreatureFactory CreatureFactory::level(int num) { + int maxLevel = 8; + CHECK(num <= maxLevel && num > 0); + map> frequencies { + { CreatureId::SPECIAL_MONSTER, { 5, 8, 10, 12, 15, 18, 20, 22}}, + { CreatureId::GNOME, { 400, 200, 100, 100, 100, 100, 100, 100, 100, 100}}, + { CreatureId::LEPRECHAUN, { 20, 20, 20, 20, 20, 20, 20, 20}}, + { CreatureId::GOBLIN, { 20, 20, 30, 50, 50, 100, 200, 400 }}, + { CreatureId::BILE_DEMON, { 0, 0, 100, 100, 200, 200, 200, 200, 200, 200 }}, + { CreatureId::JACKAL, { 400, 100, 100, 100, 100, 100, 100, 100, 100, 100 }}, + { CreatureId::RAT, { 200, 200, 200, 200, 200, 200, 200, 200, 200, 200 }}, + { CreatureId::BAT, { 100, 100, 200, 200, 200, 200, 200, 200, 200, 200 }}, + { CreatureId::ZOMBIE, { 0, 0, 0, 30, 50, 100, 100, 100, 100, 100 }}, + { CreatureId::VAMPIRE_BAT, { 0, 0, 0, 10, 30, 50, 100, 100, 100, 100 }}, + { CreatureId::NIGHTMARE, { 5, 5, 10, 10, 20, 30, 30, 40, 40, 40 }}, + { CreatureId::DWARF, { 400, 200, 100, 50, 50, 30, 20, 20 }}}; + vector> uniqueMonsters(maxLevel); + uniqueMonsters[Random.getRandom(5, maxLevel)].push_back(CreatureId::SPECIAL_MONSTER); + vector ids; + vector freq; + for (auto elem : frequencies) { + ids.push_back(elem.first); + freq.push_back(elem.second[num - 1]); + } + + return CreatureFactory(Tribe::monster, ids, freq, uniqueMonsters[num - 1]); +} + +CreatureFactory CreatureFactory::singleType(Tribe* tribe, CreatureId id) { + return CreatureFactory(tribe, { id}, {1}, {}); +} + +vector CreatureFactory::getFlock(int size, CreatureId id, Creature* leader) { + vector ret; + for (int i : Range(size)) { + PCreature c = fromId(id, leader->getTribe(), MonsterAIFactory::follower(leader, 5)); + ret.push_back(std::move(c)); + } + return ret; +} + +PCreature getSpecial(const string& name, Tribe* tribe, bool humanoid, ControllerFactory factory) { + RandomGen r; + r.init(hash()(name)); + PCreature c = get(humanoid ? ViewId::SPECIAL_HUMANOID : ViewId::SPECIAL_BEAST, CATTR( + c.speed = r.getRandom(70, 150); + c.size = chooseRandom({CreatureSize::SMALL, CreatureSize::MEDIUM, CreatureSize::LARGE}, {1, 1, 1}); + c.strength = r.getRandom(14, 21); + c.dexterity = r.getRandom(14, 21); + c.barehandedDamage = r.getRandom(10); + c.humanoid = humanoid; + c.weight = c.size == CreatureSize::LARGE ? r.getRandom(80,120) : + c.size == CreatureSize::MEDIUM ? r.getRandom(40, 60) : + r.getRandom(5, 20); + if (*c.humanoid) { + c.chatReactionFriendly = "\"I am the mighty " + name + "\""; + c.chatReactionHostile = "\"I am the mighty " + name + ". Die!\""; + } else { + c.chatReactionFriendly = c.chatReactionHostile = "The " + name + " snarls."; + } + c.name = name; + c.wings = r.roll(4) ? 2 : 0; + if (c.wings) + c.flyer = true; + if (*c.humanoid == false) { + c.arms = r.roll(2) ? 2 : 0; + c.legs = r.getRandom(3) * 2; + *c.strength += 5; + *c.dexterity += 5; + c.barehandedDamage += 5; + } + if (r.roll(3)) + c.skills.insert(Skill::swimming); + c.specialMonster = true; + ), tribe, factory); + if (c->isHumanoid()) { + if (Random.roll(400)) { + c->take(ItemFactory::fromId(ItemId::BOW)); + c->take(ItemFactory::fromId(ItemId::ARROW, Random.getRandom(20, 36))); + } else + c->take(ItemFactory::fromId(chooseRandom( + {ItemId::SWORD, ItemId::BATTLE_AXE, ItemId::WAR_HAMMER}))); + } else { + switch (Random.getRandom(3)) { + case 0: + c->take(ItemFactory::fromId( + chooseRandom({ItemId::WARNING_AMULET, ItemId::HEALING_AMULET, ItemId::DEFENSE_AMULET}))); + break; + case 1: + c->take(ItemFactory::fromId(ItemId::INVISIBLE_POTION, Random.getRandom(3, 6))); + break; + case 2: + c->take(ItemFactory::fromId( + chooseRandom({ItemId::STRENGTH_MUSHROOM, ItemId::DEXTERITY_MUSHROOM}), Random.getRandom(3, 6))); + break; + default: + Debug(FATAL) << "Unhandled case value"; + } + + } + Debug() << c->getDescription(); + return c; +} + +PCreature get(CreatureId id, Tribe* tribe, MonsterAIFactory actorFactory) { + ControllerFactory factory = Monster::getFactory(actorFactory); + switch (id) { + case CreatureId::GOBLIN: return get(ViewId::GOBLIN, CATTR( + c.speed = 100; + c.size = CreatureSize::LARGE; + c.strength = 16; + c.dexterity = 14; + c.barehandedDamage = 3; + c.humanoid = true; + c.weight = 100; + c.skills.insert(Skill::twoHandedWeapon); + c.chatReactionFriendly = "curses all elves"; + c.chatReactionHostile = "\"Die!\""; + c.name = "goblin";), Tribe::goblin, factory); + case CreatureId::BANDIT: return get(ViewId::BANDIT, CATTR( + c.speed = 80; + c.size = CreatureSize::LARGE; + c.strength = 15; + c.dexterity = 13; + c.barehandedDamage = 3; + c.humanoid = true; + c.weight = 100; + c.chatReactionFriendly = "curses all law enforcement"; + c.chatReactionHostile = "\"Die!\""; + c.name = "bandit";), tribe, factory); + case CreatureId::KNIGHT: return get(ViewId::KNIGHT, CATTR( + c.speed = 100; + c.size = CreatureSize::LARGE; + c.strength = 19; + c.dexterity = 16; + c.barehandedDamage = 3; + c.humanoid = true; + c.weight = 100; + c.chatReactionFriendly = "curses all dungeons"; + c.chatReactionHostile = "\"Die!\""; + c.name = "knight";), tribe, factory); + case CreatureId::AVATAR: return get(ViewId::AVATAR, CATTR( + c.speed = 100; + c.size = CreatureSize::LARGE; + c.strength = 23; + c.dexterity = 18; + c.barehandedDamage = 8; + c.humanoid = true; + c.weight = 120; + c.chatReactionFriendly = "curses all dungeons"; + c.chatReactionHostile = "\"Die!\""; + c.name = "Avatar";), tribe, factory); + case CreatureId::ARCHER: return get(ViewId::ARCHER, CATTR( + c.speed = 100; + c.size = CreatureSize::LARGE; + c.strength = 16; + c.dexterity = 20; + c.barehandedDamage = 3; + c.humanoid = true; + c.weight = 100; + c.chatReactionFriendly = "curses all dungeons"; + c.chatReactionHostile = "\"Die!\""; + c.name = "archer";), tribe, factory); + case CreatureId::PESEANT: return get(ViewId::PESEANT, CATTR( + c.speed = 80; + c.size = CreatureSize::LARGE; + c.strength = 14; + c.dexterity = 12; + c.barehandedDamage = 3; + c.humanoid = true; + c.weight = 100; + c.chatReactionFriendly = "curses all dungeons"; + c.chatReactionHostile = "\"Heeelp!\""; + c.name = "peseant";), tribe, factory); + case CreatureId::CHILD: return get(ViewId::CHILD, CATTR( + c.speed = 140; + c.size = CreatureSize::LARGE; + c.strength = 8; + c.dexterity = 16; + c.barehandedDamage = 3; + c.humanoid = true; + c.weight = 40; + c.chatReactionFriendly = "plaaaaay!"; + c.chatReactionHostile = "\"Heeelp!\""; + c.name = "child";), tribe, factory); + case CreatureId::ZOMBIE: return get(ViewId::ZOMBIE, CATTR( + c.speed = 60; + c.size = CreatureSize::LARGE; + c.strength = 12; + c.dexterity = 13; + c.barehandedDamage = 13; + c.humanoid = true; + c.weight = 100; + c.undead = true; + c.name = "zombie";), tribe, factory); + case CreatureId::VAMPIRE_BAT: + case CreatureId::VAMPIRE: return get(ViewId::VAMPIRE, CATTR( + c.speed = 120; + c.size = CreatureSize::LARGE; + c.strength = 15; + c.dexterity = 15; + c.barehandedDamage = 2; + c.humanoid = true; + c.weight = 100; + c.undead = true; + c.flyer = true; + c.chatReactionFriendly = "curses all humans"; + c.chatReactionHostile = "\"Die!\""; + c.name = "vampire";), tribe, factory); + /* case CreatureId::VAMPIRE_BAT: return PCreature(new Shapechanger( + ViewObject(ViewId::BAT, ViewLayer::CREATURE, "Bat"), + tribe, + CATTR( + c.speed = 150; + c.size = CreatureSize::SMALL; + c.strength = 3; + c.dexterity = 16; + c.barehandedDamage = 12; + c.humanoid = false; + c.legs = 0; + c.arms = 0; + c.wings = 2; + c.weight = 1; + c.flyer = true; + c.name = "bat";), { + CreatureId::VAMPIRE} + ));*/ + case CreatureId::MUMMY: return get(ViewId::MUMMY, CATTR( + c.speed = 60; + c.size = CreatureSize::LARGE; + c.strength = 12; + c.dexterity = 13; + c.barehandedDamage = 13; + c.humanoid = true; + c.weight = 100; + c.undead = true; + c.skills.insert(Skill::twoHandedWeapon); + c.name = "mummy";), tribe, factory); + case CreatureId::MUMMY_LORD: return get(ViewId::MUMMY_LORD, CATTR( + c.speed = 60; + c.size = CreatureSize::LARGE; + c.strength = 15; + c.dexterity = 13; + c.barehandedDamage = 13; + c.humanoid = true; + c.weight = 120; + c.undead = true; + c.skills.insert(Skill::twoHandedWeapon); + c.chatReactionFriendly = "curses all gravediggers"; + c.chatReactionHostile = "\"Die!\""; + c.name = NameGenerator::aztecNames.getNext();), tribe, factory); + case CreatureId::GREAT_GOBLIN: return PCreature(new VillageElder( + {{Skill::mushrooms, 0.1}, {Skill::knifeThrowing, 0.6}}, + {Tribe::dwarven, Tribe::elven}, + ViewObject(ViewId::GREAT_GOBLIN, ViewLayer::CREATURE, "Great goblin"), Tribe::goblin, + CATTR( + c.speed = 100; + c.size = CreatureSize::LARGE; + c.strength = 20; + c.dexterity = 13; + c.barehandedDamage = 5; + c.humanoid = true; + c.weight = 180; + c.skills.insert(Skill::twoHandedWeapon); + c.chatReactionFriendly = "curses all elves"; + c.chatReactionHostile = "\"Die!\""; + c.name = "great goblin";), factory)); + case CreatureId::GNOME: return get(ViewId::GNOME, CATTR( + c.speed = 80; + c.size = CreatureSize::MEDIUM; + c.strength = 12; + c.dexterity = 13; + c.barehandedDamage = 3; + c.humanoid = true; + c.weight = 45; + c.chatReactionFriendly = "talks about digging"; + c.chatReactionHostile = "\"Die!\""; + c.name = "gnome";), tribe, factory); + case CreatureId::IMP: return get(ViewId::IMP, CATTR( + c.speed = 200; + c.size = CreatureSize::SMALL; + c.strength = 8; + c.dexterity = 15; + c.barehandedDamage = 3; + c.humanoid = true; + c.weight = 30; + c.courage = 0.1; + c.carryingMultiplier = 10; + c.skills.insert(Skill::construction); + c.chatReactionFriendly = "talks about digging"; + c.chatReactionHostile = "\"Die!\""; + c.name = "imp";), tribe, factory); + case CreatureId::BILE_DEMON: return get(ViewId::BILE_DEMON, CATTR( + c.speed = 80; + c.size = CreatureSize::LARGE; + c.strength = 24; + c.dexterity = 14; + c.barehandedDamage = 10; + c.humanoid = false; + c.weight = 140; + c.courage = 1; + c.firstName = NameGenerator::demonNames.getNext(); + c.name = "bile demon";), tribe, factory); + case CreatureId::HELL_HOUND: return get(ViewId::HELL_HOUND, CATTR( + c.speed = 160; + c.size = CreatureSize::MEDIUM; + c.strength = 16; + c.dexterity = 17; + c.barehandedDamage = 5; + c.humanoid = false; + c.weight = 50; + c.courage = 1; + c.firstName = NameGenerator::dogNames.getNext(); + c.name = "hell hound";), tribe, factory); + case CreatureId::CHICKEN: return get(ViewId::CHICKEN, CATTR( + c.speed = 50; + c.size = CreatureSize::SMALL; + c.strength = 2; + c.dexterity = 2; + c.barehandedDamage = 5; + c.humanoid = false; + c.weight = 3; + c.courage = 1; + c.walker = false; + c.isFood = true; + c.name = "chicken";), tribe, factory); + case CreatureId::DUNGEON_HEART: return get(ViewId::DUNGEON_HEART, CATTR( + c.speed = 100; + c.size = CreatureSize::LARGE; + c.strength = 23; + c.dexterity = 14; + c.barehandedDamage = 5; + c.humanoid = false; + c.legs = c.arms = c.heads = 0; + c.weight = 100; + c.walker = true; + c.stationary = true; + c.breathing = false; + c.damageMultiplier = 0.1; + c.name = "dungeon heart";), tribe, Monster::getFactory(MonsterAIFactory::idle())); + case CreatureId::LEPRECHAUN: return get(ViewId::LEPRECHAUN, CATTR( + c.speed = 160; + c.size = CreatureSize::MEDIUM; + c.strength = 10; + c.dexterity = 16; + c.barehandedDamage = 3; + c.humanoid = true; + c.weight = 35; + c.courage = 20; + c.skills.insert(Skill::stealing); + c.chatReactionFriendly = "discusses the weather"; + c.chatReactionHostile = "discusses the weather"; + c.name = "leprechaun";), tribe, factory); + case CreatureId::DWARF: return get(ViewId::DWARF, CATTR( + c.speed = 80; + c.size = CreatureSize::MEDIUM; + // c.firstName = NameGenerator::dwarfNames.getNext(); + c.strength = 18; + c.dexterity = 13; + c.barehandedDamage = 3; + c.humanoid = true; + c.weight = 90; + c.skills.insert(Skill::twoHandedWeapon); + c.chatReactionFriendly = "curses all goblins"; + c.chatReactionHostile = "\"Die!\""; + c.name = "dwarf";), Tribe::dwarven, factory); + case CreatureId::DWARF_BARON: return PCreature(new VillageElder( + {{Skill::twoHandedWeapon, 0.1}, {Skill::twoHandedWeapon, 0.6}}, + {Tribe::goblin, Tribe::elven}, + ViewObject(ViewId::DWARF_BARON, ViewLayer::CREATURE, "Dwarf baron"), Tribe::dwarven, + CATTR( + c.speed = 80; + c.size = CreatureSize::MEDIUM; + // c.firstName = NameGenerator::dwarfNames.getNext(); + c.strength = 22; + c.dexterity = 13; + c.barehandedDamage = 5; + c.humanoid = true; + c.weight = 120; + c.skills.insert(Skill::twoHandedWeapon); + c.chatReactionFriendly = "curses all goblins"; + c.chatReactionHostile = "\"Die!\""; + c.name = "dwarf baron";), factory)); + case CreatureId::ELF: return get(ViewId::ELF, CATTR( + c.speed = 120; + c.size = CreatureSize::MEDIUM; + c.strength = 13; + c.dexterity = 15; + c.barehandedDamage = 3; + c.humanoid = true; + c.weight = 50; + c.skills.insert(Skill::archery); + c.chatReactionFriendly = "curses all dwarves"; + c.chatReactionHostile = "\"Die!\""; + c.name = "elf";), Tribe::elven, factory); + case CreatureId::ELF_CHILD: return get(ViewId::ELF_CHILD, CATTR( + c.speed = 150; + c.size = CreatureSize::MEDIUM; + c.strength = 7; + c.dexterity = 17; + c.barehandedDamage = 0; + c.humanoid = true; + c.weight = 25; + c.skills.insert(Skill::archery); + c.chatReactionFriendly = "curses all dwarves"; + c.chatReactionHostile = "\"Help!\""; + c.name = "elf child";), Tribe::elven, factory); + case CreatureId::ELF_LORD: return PCreature(new VillageElder( + {{Skill::ambush, 0.1}, {Skill::archery, 0.6}}, + {Tribe::dwarven, Tribe::goblin}, + ViewObject(ViewId::ELF_LORD, ViewLayer::CREATURE, "Elf lord"), Tribe::elven, CATTR( + c.speed = 140; + c.size = CreatureSize::MEDIUM; + c.strength = 13; + c.dexterity = 18; + c.barehandedDamage = 3; + c.humanoid = true; + c.healer = true; + c.weight = 50; + c.skills.insert(Skill::archery); + c.chatReactionFriendly = "curses all dwarves"; + c.chatReactionHostile = "\"Die!\""; + c.name = "elf lord";), factory)); + case CreatureId::HORSE: return get(ViewId::HORSE, CATTR( + c.speed = 100; + c.size = CreatureSize::LARGE; + c.strength = 10; + c.dexterity = 17; + c.humanoid = false; + c.weight = 500; + c.animal = true; + c.name = "horse";), tribe, factory); + case CreatureId::COW: return get(ViewId::COW, CATTR( + c.speed = 40; + c.size = CreatureSize::LARGE; + c.strength = 10; + c.dexterity = 12; + c.humanoid = false; + c.weight = 400; + c.animal = true; + c.name = "cow";), tribe, factory); + case CreatureId::SHEEP: return get(ViewId::SHEEP, CATTR( + c.speed = 80; + c.size = CreatureSize::MEDIUM; + c.strength = 5; + c.dexterity = 12; + c.humanoid = false; + c.weight = 40; + c.animal = true; + c.name = "sheep";), tribe, factory); + case CreatureId::PIG: return get(ViewId::PIG, CATTR( + c.speed = 60; + c.size = CreatureSize::MEDIUM; + c.strength = 12; + c.dexterity = 8; + c.humanoid = false; + c.weight = 150; + c.animal = true; + c.name = "pig";), tribe, factory); + case CreatureId::JACKAL: return get(ViewId::JACKAL, CATTR( + c.speed = 120; + c.size = CreatureSize::SMALL; + c.strength = 10; + c.dexterity = 15; + c.barehandedDamage = 2; + c.humanoid = false; + c.weight = 10; + c.animal = true; + c.name = "jackal";), tribe, factory); + case CreatureId::DEER: return get(ViewId::DEER, CATTR( + c.speed = 200; + c.size = CreatureSize::LARGE; + c.strength = 10; + c.dexterity = 17; + c.humanoid = false; + c.weight = 400; + c.animal = true; + c.name = "deer";), tribe, factory); + case CreatureId::BOAR: return get(ViewId::BOAR, CATTR( + c.speed = 180; + c.size = CreatureSize::MEDIUM; + c.strength = 18; + c.dexterity = 15; + c.humanoid = false; + c.weight = 200; + c.animal = true; + c.name = "boar";), tribe, factory); + case CreatureId::FOX: return get(ViewId::FOX, CATTR( + c.speed = 140; + c.size = CreatureSize::SMALL; + c.strength = 10; + c.dexterity = 15; + c.barehandedDamage = 2; + c.humanoid = false; + c.weight = 10; + c.animal = true; + c.name = "fox";), tribe, factory); + case CreatureId::CAVE_BEAR: return get(ViewId::BEAR, CATTR( + c.speed = 120; + c.size = CreatureSize::MEDIUM; + c.strength = 18; + c.dexterity = 15; + c.barehandedDamage = 5; + c.weight = 250; + c.humanoid = false; + c.animal = true; + c.name = "cave bear";), tribe, factory); + case CreatureId::RAT: return get(ViewId::RAT, CATTR( + c.speed = 180; + c.size = CreatureSize::SMALL; + c.strength = 2; + c.dexterity = 12; + c.barehandedDamage = 2; + c.humanoid = false; + c.weight = 1; + c.animal = true; + c.skills.insert(Skill::swimming); + c.name = "rat";), Tribe::pest, factory); + case CreatureId::SNAKE: return get(ViewId::SNAKE, CATTR( + c.speed = 100; + c.size = CreatureSize::SMALL; + c.strength = 2; + c.dexterity = 14; + c.barehandedDamage = 15; + c.humanoid = false; + c.weight = 2; + c.animal = true; + c.skills.insert(Skill::swimming); + c.name = "snake";), Tribe::pest, factory); + case CreatureId::VULTURE: return get(ViewId::VULTURE, CATTR( + c.speed = 80; + c.size = CreatureSize::SMALL; + c.strength = 2; + c.dexterity = 12; + c.barehandedDamage = 2; + c.humanoid = false; + c.weight = 5; + c.arms = 0; + c.legs = 0; + c.wings = 2; + c.animal = true; + c.flyer = true; + c.name = "vulture";), Tribe::pest, factory); + case CreatureId::WOLF: return get(ViewId::WOLF, CATTR( + c.speed = 160; + c.size = CreatureSize::MEDIUM; + c.strength = 10; + c.dexterity = 15; + c.barehandedDamage = 10; + c.humanoid = false; + c.animal = true; + c.weight = 35; + c.name = "wolf";), tribe, factory); + case CreatureId::FIRE_SPHERE: return get(ViewId::FIRE_SPHERE, CATTR( + c.speed = 100; + c.size = CreatureSize::LARGE; + c.strength = 5; + c.dexterity = 15; + c.barehandedDamage = 10; + c.humanoid = false; + c.arms = 0; + c.legs = 0; + c.heads = 0; + c.noBody = true; + c.breathing = false; + c.fireResistant = true; + c.flyer = true; + c.weight = 10; + c.courage = 100; + c.name = "fire sphere";), tribe, ControllerFactory([=](Creature* c) { + return new KamikazeController(c, actorFactory); + })); + case CreatureId::KRAKEN: return get(ViewId::KRAKEN, CATTR( + c.speed = 40; + c.size = CreatureSize::LARGE; + c.strength = 15; + c.dexterity = 15; + c.barehandedDamage = 10; + c.humanoid = false; + c.arms = 0; + c.legs = 0; + c.heads = 0; + c.skills.insert(Skill::swimming); + c.weight = 100; + c.name = "kraken";), tribe, ControllerFactory([=](Creature* c) { + return new KrakenController(c); + })); + case CreatureId::NIGHTMARE: /*return PCreature(new Shapechanger( + ViewObject(ViewId::NIGHTMARE, ViewLayer::CREATURE, "nightmare"), + Tribe::monster, + CATTR( + c.speed = 100; + c.size = CreatureSize::LARGE; + c.strength = 5; + c.dexterity = 25; + c.barehandedDamage = 10; + c.humanoid = false; + c.arms = 0; + c.legs = 0; + c.flyer = true; + c.weight = 100; + c.name = "nightmare";), { + CreatureId::CAVE_BEAR, + CreatureId::WOLF, + CreatureId::ZOMBIE, + CreatureId::VAMPIRE, + CreatureId::MUMMY, + CreatureId::FIRE_SPHERE, + CreatureId::SPECIAL_MONSTER, + }));*/ + case CreatureId::BAT: return get(ViewId::BAT, CATTR( + c.speed = 150; + c.size = CreatureSize::SMALL; + c.strength = 3; + c.dexterity = 16; + c.barehandedDamage = 12; + c.humanoid = false; + c.legs = 0; + c.arms = 0; + c.wings = 2; + c.weight = 1; + c.flyer = true; + c.animal = true; + c.name = "bat";), tribe, factory); + case CreatureId::DEATH: return get(ViewId::DEATH, CATTR( + c.speed = 120; + c.size = CreatureSize::LARGE; + c.strength = 100; + c.dexterity = 35; + c.barehandedDamage = 10; + c.chatReactionFriendly = c.chatReactionHostile = "\"IN ORDER TO HAVE A CHANGE OF FORTUNE AT THE LAST MINUTE YOU HAVE TO TAKE YOUR FORTUNE TO THE LAST MINUTE.\""; + c.humanoid = true; + c.weight = 30; + c.breathing = false; + c.name = "Death";), Tribe::killEveryone, factory); + case CreatureId::SPECIAL_MONSTER: return getSpecial(NameGenerator::creatureNames.getNext(), + tribe, Random.roll(2), factory); + case CreatureId::SPECIAL_MONSTER_HUMANOID: return getSpecial(NameGenerator::creatureNames.getNext(), + tribe, true, factory); + } + Debug(FATAL) << "unhandled case"; + return PCreature(nullptr); +} + +ItemId randomHealing() { + return chooseRandom({ItemId::HEALING_POTION, ItemId::FIRST_AID_KIT}); +} + +ItemId randomBackup() { + return chooseRandom({ItemId::TELE_SCROLL, randomHealing()}, {1, 4}); +} + +ItemId randomArmor() { + return chooseRandom({ItemId::LEATHER_ARMOR, ItemId::CHAIN_ARMOR}, {4, 1}); +} + +class ItemList { + public: + ItemList& maybe(double chance, ItemId id, int num = 1) { + if (Random.getDouble() <= chance) + add(id, num); + return *this; + } + + ItemList& maybe(double chance, const vector& ids) { + if (Random.getDouble() <= chance) + for (ItemId id : ids) + add(id); + return *this; + } + + ItemList& add(ItemId id, int num = 1) { + for (int i : Range(num)) + ret.push_back(id); + return *this; + } + + operator vector() { + return ret; + } + + private: + vector ret; +}; + +vector getInventory(CreatureId id) { + switch (id) { + case CreatureId::DEATH: return ItemList() + .add(ItemId::SCYTHE); + case CreatureId::LEPRECHAUN: return ItemList() + .add(ItemId::TELE_SCROLL, Random.getRandom(1, 4)); + case CreatureId::GNOME: return ItemList() + .add(chooseRandom({ItemId::KNIFE})) + .maybe(0.05, ItemList().add(ItemId::BOW).add(ItemId::ARROW, Random.getRandom(20, 36))); + case CreatureId::ARCHER: return ItemList() + .add(ItemId::BOW).add(ItemId::ARROW, Random.getRandom(20, 36)) + .add(ItemId::KNIFE) + .add(ItemId::LEATHER_ARMOR) + .add(randomHealing()) + .add(ItemId::GOLD_PIECE, Random.getRandom(20, 50)); + case CreatureId::KNIGHT: return ItemList() + .add(ItemId::SWORD) + .add(ItemId::CHAIN_ARMOR) + .add(randomHealing()) + .add(ItemId::GOLD_PIECE, Random.getRandom(30, 80)); + case CreatureId::AVATAR: return ItemList() + .add(ItemId::SPECIAL_BATTLE_AXE) + .add(ItemId::CHAIN_ARMOR) + .add(ItemId::IRON_HELM) + .add(ItemId::HEALING_POTION, Random.getRandom(3, 7)) + .add(ItemId::GOLD_PIECE, Random.getRandom(30, 80)); + case CreatureId::BANDIT: + case CreatureId::GOBLIN: return ItemList() + .add(chooseRandom({ItemId::SWORD}, {3})) + .add(ItemId::LEATHER_ARMOR) + .maybe(0.3, randomBackup()) + .maybe(0.2, ItemId::GOLD_PIECE, Random.getRandom(10, 30)); + case CreatureId::GREAT_GOBLIN: return ItemList() + .add(chooseRandom({ItemId::SPECIAL_BATTLE_AXE, ItemId::SPECIAL_WAR_HAMMER}, {1, 1})) + .add(ItemId::IRON_HELM).add(ItemId::CHAIN_ARMOR) + .add(randomBackup()).add(ItemId::KNIFE, Random.getRandom(2, 5)) + .add(ItemId::GOLD_PIECE, Random.getRandom(100, 200)); + case CreatureId::DWARF: return ItemList() + .add(chooseRandom({ItemId::BATTLE_AXE, ItemId::WAR_HAMMER}, {1, 1})) + .maybe(0.6, randomBackup()) + .add(ItemId::CHAIN_ARMOR) + .maybe(0.5, ItemId::IRON_HELM) + .maybe(0.2, ItemId::GOLD_PIECE, Random.getRandom(10, 30)); + case CreatureId::DWARF_BARON: return ItemList() + .add(chooseRandom({ItemId::SPECIAL_BATTLE_AXE, ItemId::SPECIAL_WAR_HAMMER}, {1, 1})) + .add(randomBackup()) + .add(ItemId::CHAIN_ARMOR) + .add(ItemId::IRON_HELM); + case CreatureId::ELF_LORD: return ItemList() + .add(ItemId::SPECIAL_ELVEN_SWORD) + .add(ItemId::LEATHER_ARMOR) + .add(ItemId::BOW) + .add(ItemId::ARROW, Random.getRandom(20, 36)) + .add(randomBackup()); + case CreatureId::ELF: return ItemList() + .add(ItemId::ELVEN_SWORD) + .add(ItemId::LEATHER_ARMOR) + .add(ItemId::BOW) + .add(ItemId::ARROW, Random.getRandom(20, 36)) + .add(randomBackup()); + case CreatureId::MUMMY_LORD: return ItemList() + .add(ItemId::GOLD_PIECE, Random.getRandom(100, 200)).add( + chooseRandom({ItemId::SPECIAL_BATTLE_AXE, ItemId::SPECIAL_WAR_HAMMER, ItemId::SPECIAL_SWORD}, {1, 1, 1})); + default: return {}; + } +} + +PCreature CreatureFactory::fromId(CreatureId id, Tribe* t, MonsterAIFactory factory) { + return addInventory(get(id, t, factory), getInventory(id)); +} + diff --git a/creature_factory.h b/creature_factory.h new file mode 100644 index 000000000..d3805d4db --- /dev/null +++ b/creature_factory.h @@ -0,0 +1,56 @@ +#ifndef _CREATURE_FACTORY +#define _CREATURE_FACTORY + +#include +#include +#include + +#include "util.h" +#include "creature_attributes.h" +#include "tribe.h" +#include "view_object.h" +#include "item_factory.h" + +class Creature; +class ItemFactory; + + +class CreatureFactory { + public: + static PCreature fromId(CreatureId, Tribe*, MonsterAIFactory = MonsterAIFactory::monster()); + static vector getFlock(int size, CreatureId, Creature* leader); + static CreatureFactory humanVillage(); + static CreatureFactory elvenVillage(); + static CreatureFactory forrest(); + static CreatureFactory crypt(); + static CreatureFactory dwarfTown(int num); + static CreatureFactory collectiveStart(); + static CreatureFactory collectiveMinions(); + static CreatureFactory collectiveUndead(); + static CreatureFactory collectiveEnemies(); + static CreatureFactory collectiveFinalAttack(); + static CreatureFactory goblinTown(int num); + static CreatureFactory level(int num); + static CreatureFactory bottomLevel(); + static CreatureFactory singleType(Tribe*, CreatureId); + static CreatureFactory pyramid(int level); + PCreature random(MonsterAIFactory = MonsterAIFactory::monster()); + + static PCreature getShopkeeper(Location* shopArea, Tribe*); + static PCreature getRollingBoulder(Vec2 direction); + static PCreature getGuardingBoulder(Tribe* tribe); + + static PCreature addInventory(PCreature c, const vector& items); + + static void init(); + + private: + CreatureFactory(Tribe* tribe, const vector& creatures, const vector& weights, + const vector& unique); + Tribe* tribe; + vector creatures; + vector weights; + vector unique; +}; + +#endif diff --git a/creature_view.h b/creature_view.h new file mode 100644 index 000000000..afdb62378 --- /dev/null +++ b/creature_view.h @@ -0,0 +1,20 @@ +#ifndef _CREATURE_VIEW_H +#define _CREATURE_VIEW_H + +#include "map_memory.h" +#include "view.h" + +class CreatureView { + public: + virtual const MapMemory& getMemory(const Level* l) const = 0; + virtual ViewIndex getViewIndex(Vec2 pos) const = 0; + virtual void refreshGameInfo(View::GameInfo&) const = 0; + virtual Vec2 getPosition() const = 0; + virtual bool staticPosition() const { return true; } + virtual bool canSee(const Creature*) const = 0; + virtual bool canSee(Vec2 position) const = 0; + virtual const Level* getLevel() const = 0; + virtual vector getUnknownAttacker() const = 0; +}; + +#endif diff --git a/creatures.txt b/creatures.txt new file mode 100644 index 000000000..68a2f03f0 --- /dev/null +++ b/creatures.txt @@ -0,0 +1,347 @@ +aasilisk +aasilith +aasilithid +aasimal +abold +abolder +abolem +aboleton +abolette +aboletter +achan +achant +achantle +allith +allithid +allithzer +amonstrou +anger +araneton +arro +arror +bargon +bargon tur +bargonne +bargouill +bargoyle +basilith +basilithid +basimal +basimar +basimare +basimaroid +blacer dra +bling +bling mon +bugbeast +bugbeaster +buleth +buleton +carrasque +celest +celester +celestiff +celestrou +celeth +celeton +celette +celetter +cental +centalker +chasa +chase stal +chromatin +chrope +chroper +chroperibo +chroperin +chropering +cloaken +cocker +cocker dra +darkman +darkmander +darkmant +demorhaz +demorian +demoriant +dester +destercap +desterkin +destiff +destiffon +destrou +devitable +devitablex +devitan +digestiff +digestrou +dinotaur +dire +dire anida +dire spawn +dire stal +dopper +dopperibo +dopperin +doppering +drachan +drachant +drachantle +eladrice +eladrick +elementaur +ette +etter +etter hulk +etterkin +fiend +fiendead +fiender +fiendrice +fiendrick +fiendrin +fiendring +fomorhaz +formia +frost mon +gammar +gammare +gammast +gammastiff +gammasu +gammasus +garghest +garghester +gargon +gargonne +gargouill +gargouille +gelaticore +gelaticorn +gelatin +gem dra +ghound +gian +gibber dra +gibberibo +gibberin +gibbering +gith +githid +githzer +goleth +goleton +golette +goletter +gorg +gorgouill +gorgouille +gray rend +grice +griculos +griculus +griff +guarding +half-dra +halfeshnee +halflin +hell horro +hell houl +hellar dra +hook horro +hook houl +hook hound +illip +illith +illithzer +inevil +inevitan +juible +karnov +kobolem +koboleth +koboleton +kobolette +koboletter +kraker +krend +krendead +krender +krendrice +krendrick +krendrin +krendring +krenshade +krenshadow +krenshasa +krenshasm +krenshasme +lammar +lammare +lammaroid +lammast +lammastiff +lill +lille +lizarding +locat +locathak +lycant +lycantle +mant +mant eatur +manthrope +manthroper +mantic dra +manticorn +mantle +marilisk +mast +masterkin +mastiff +mastiffon +mephinx +minosaur +monstrou +nalf-dra +nalflin +nalfling +nightmar +nightshar +nightshasa +nightshasm +nupper +nupperin +nuppering +oreant +oreantle +oreater +oreaterkin +oreatur +oreaturtle +oreaturtur +owlbeast +owlbeaster +phan +phant +phanthrope +phanticore +phantle +phasa +phase stal +planea +planeton +pseudodra +rakshade +rakshadow +rakshar +rakshasm +rakshasme +remogorg +remogorgon +remon +remonster +remonstrou +remorian +remoriant +retrice +retrick +retriculos +retriculus +retrieker +rutte +rutter +ruttercap +salaman +salamant +salamantle +sato +scorn +shamander +shamant +shamantle +shamblin +shambling +shocker +shri-kreen +shriever +shrievern +skelest +skelester +skelestiff +skelestrou +skeleth +skelette +skeletter +spect +sphit +stell houl +surtle +surture +surturtle +surturture +tend +tendead +tender +tendrice +tendrick +tendrin +tendring +thoth +thoth houl +thrieker +thriever +thrievern +titable +titablex +tojanimal +tojanimar +tojanimare +tread +treater +treaterkin +treatur +treature +treaturtle +treaturtur +umber kaen +umberibo +umberin +umbering +under kaen +under hulk +unic cread +unic dra +unicore +unicorpius +varghest +varghester +vargon +vargon tur +vargonne +vargouill +vargoyle +violem +violeth +violeton +violette +violetter +water kaen +water hulk +waterkin +wille +willend +willendead +willender +willendrin +winter dra +winterkin +wrai +wyver +yeen +yeth +yeth amon +yeth horro +yeth houl +yrthah diff --git a/debug.cpp b/debug.cpp new file mode 100644 index 000000000..360e3caa2 --- /dev/null +++ b/debug.cpp @@ -0,0 +1,78 @@ +#include "stdafx.h" + +using namespace std; + +Debug::Debug(DebugType t) : out((string[]) { "INFO ", "FATAL "}[t]), type(t) { +} + +static ofstream output; + +void Debug::init() { + output.open("log.out"); +} + +void Debug::add(const string& a) { + out += a; +} +Debug::~Debug() { + if (type == FATAL) { + output << out << endl; + output.flush(); + throw out; + } else { +#ifndef RELEASE + output << out << endl; + output.flush(); +#endif + } +} +Debug& Debug::operator <<(const string& msg) { + add(msg); + return *this; +} +Debug& Debug::operator <<(const int msg) { + add(convertToString(msg)); + return *this; +} +Debug& Debug::operator <<(const char msg) { + add(convertToString(msg)); + return *this; +} +Debug& Debug::operator <<(const double msg) { + add(convertToString(msg)); + return *this; +} +template +Debug& Debug::operator<<(const vector& container){ + (*this) << "{"; + for (const T& elem : container) { + (*this) << elem << ","; + } + (*this) << "}"; + return *this; +} + +template +Debug& Debug::operator<<(const vector >& container){ + (*this) << "{"; + for (int i : Range(container[0].size())) { + for (int j : Range(container.size())) { + (*this) << container[j][i] << ","; + } + (*this) << '\n'; + } + (*this) << "}"; + return *this; +} + +template Debug& Debug::operator <<(const vector&); +template Debug& Debug::operator <<(const vector&); +template Debug& Debug::operator <<(const vector&); +template Debug& Debug::operator <<(const vector&); +template Debug& Debug::operator <<(const vector >&); + +template NoDebug& NoDebug::operator <<(const vector&); +template NoDebug& NoDebug::operator <<(const vector&); +template NoDebug& NoDebug::operator <<(const vector&); +template NoDebug& NoDebug::operator <<(const vector&); +template NoDebug& NoDebug::operator <<(const vector >&); diff --git a/debug.h b/debug.h new file mode 100644 index 000000000..41d8914d8 --- /dev/null +++ b/debug.h @@ -0,0 +1,93 @@ +#ifndef _DEBUG_H +#define _DEBUG_H + +#include + +#define DEBUG + +#ifdef DEBUG + +#define CHECK(exp) if (!(exp)) Debug(FATAL) << __FILE__ << ":" << __LINE__ << ": " << #exp << " is false. " +//#define CHECKEQ(exp, exp2) if ((exp) != (exp2)) Debug(FATAL) << __FILE__ << ":" << __LINE__ << ": " << #exp << " = " << #exp2 << " is false. " << exp << " " << exp2 +#define TRY(exp, msg) do { try { exp; } catch (...) { Debug(FATAL) << __FILE__ << ":" << __LINE__ << ": " << #exp << " failed. " << msg; exp; } } while(0) + +#else + +#define CHECK(exp) if (!(exp)) NoDebug() << 1 +#define TRY(exp, msg) exp +#endif + +#ifndef WINDOWS + +#define MEASURE(exp, text) do { \ + timeval time1; \ + gettimeofday(&time1, nullptr); \ + suseconds_t m1 = time1.tv_usec + time1.tv_sec * 1000000; \ + exp; \ + gettimeofday(&time1, nullptr); \ + suseconds_t m2 = time1.tv_usec + time1.tv_sec * 1000000; \ + Debug() << text << " " << int(m2 - m1);} while(0); + +#else + +#define MEASURE(exp, text) exp; + +#endif + +enum DebugType { INFO, FATAL }; + +class NoDebug { + public: + NoDebug& operator <<(const string& msg) { return *this;} + NoDebug& operator <<(const int msg) {return *this;} + NoDebug& operator <<(const char msg) {return *this;} + NoDebug& operator <<(const double msg) {return *this;} + template + NoDebug& operator<<(const vector& container) {return *this;} + template + NoDebug& operator<<(const vector >& container) {return *this;} +}; + +class Debug { + public: + Debug(DebugType t = INFO); + static void init(); + Debug& operator <<(const string& msg); + Debug& operator <<(const int msg); + Debug& operator <<(const char msg); + Debug& operator <<(const double msg); + template + Debug& operator<<(const vector& container); + template + Debug& operator<<(const vector >& container); + ~Debug(); + + private: + string out; + DebugType type; + void add(const string& a); +}; + +template +const T& valueCheck(const T& e, const V& v, const string& msg) { + if (e != v) Debug(FATAL) << msg << " (" << e << " != " << v << ")"; + return e; +} + +template +T* notNullCheck(T* e, const string& msg) { + if (e == nullptr) Debug(FATAL) << msg; + return e; +} + +template +unique_ptr notNullCheck(unique_ptr e, const string& msg) { + if (e.get() == nullptr) Debug(FATAL) << msg; + return e; +} + +#define NOTNULL(e) notNullCheck(e, string(__FILE__) + ":" + convertToString(__LINE__) + ": " + #e + " is null.") +#define CHECKEQ(e, v) valueCheck(e, v, string(__FILE__) + ":" + convertToString(__LINE__) + ": " + #e + " != " + #v + " ") +#define CHECKEQ2(e, v, msg) valueCheck(e, v, string(__FILE__) + ":" + convertToString(__LINE__) + ": " + #e + " != " + #v + " " + msg) + +#endif diff --git a/demons.txt b/demons.txt new file mode 100644 index 000000000..7e5489797 --- /dev/null +++ b/demons.txt @@ -0,0 +1,664 @@ +Abadon +Abalacoda +Abbaddon +Abrand +Abrandyman +Abraxxus +Agrim +Agrimel +Agrit +Agrith +Agrithazae +Akira +Akira Fung +Akirahim +Akirahimon +Alastar +Alastaron +Alastaroth +Alasters +Alastery +Alastie +Alasto +Alasts +Alastur +Alastus +Algalial +Algaliante +Algalianty +Algalice +Algalichim +Algalichin +Alice +Alichim +Alichimon +Alichin +Alichina +Amain +Anafeloth +Anafeloz +Andariccia +Andarietta +Andarish +Andariska +Anyankou +Archim +Archimon +Archin +Archina +Archino +Arters +Ash +Asmoda +Asmodan +Asmodemon +Asta Burra +Astai +Astair +Astar +Astaro +Astarog +Astaronos +Aurok +Aurok-Han +Auron +Auronos +Auronove +Auronover +Azmoda +Azmodemon +Azmodeus +Bacarbas +Bacarbia +Bacarr +Bahuma +Bahumaimon +Bahumain +Bai Gui +Bai Tengu +Bai Terumi +Baltha +Balthan +Balthang +Balthant +Balthazor +Baphomero +Baphomeron +Baphrim +Baphrimel +Bara +Baraxas +Baraxxus +Barbaricco +Barbarilin +Barbarish +Barbariska +Barbia +Bart +Bartimael +Beastai +Beastair +Beastar +Beastaro +Beastarod +Beastarog +Beastaron +Beastaroth +Beasters +Beastery +Beasto +Beastor +Beastore +Beasts +Beastur +Beastus +Bebilina +Bebilleach +Bebilly +Bebiro +Bebiroth +Belfago +Belfagon +Beliarept +Belin +Belinazzo +Beltha +Belthan +Belthazae +Belthazar +Beth +Beth Shan +Beth Shaw +Blackhead +Blacoda +Blacodan +Blacodemon +Blacodeus +Briel +Briel Phan +Brietta +Burra +Cacoda +Cacodan +Cacodeus +Cadaven +Cailly +Calcabrezu +Camero +Cameron +Cameronos +Cameronove +Cand +Candaricco +Candariel +Candarish +Candariska +Castar +Castarog +Castaroth +Casters +Castery +Castie +Casto +Casts +Castur +Castus +Chernabor +Chernal +Cherno +Chtho +Ciel +Ciel Phan +Ciel Phant +Ciriatha +Ciriathan +Ciriathang +Ciriathant +Clor +Cloripus +Clortho +Clorthon +Cost +Costai +Costair +Costar +Costaro +Costarod +Costarog +Costaron +Costaronos +Costaroth +Crawcia +Dago +Dagon +Dagor +Dai Tengu +Dai Terumi +Dai Tza +Daimon +Daimonde +Daimonita +Dami +Damia +Damiel +Damon +Damonde +Damonita +Dant +Dantomhive +Danty +Deach +Deacoda +Deacodan +Deacodemon +Deacodeus +Decarbas +Decarr +Decarra +Delrit +Demon +Demonde +Devi +Deviatha +Deviathan +Deviathant +Deviatto +Dovicula +Draculus +Draga +Draghin +Draghina +Draghino +Drawly +Duma +Dumaimon +Dumaimonde +Dumat +Durietta +Elbub +Etrigon +Evilin +Evilith +Farfarept +Fausizz +Faustur +Faustus +Flagg +Frost +Frostai +Frostair +Frostar +Frostaro +Frostarod +Frostarog +Frostaron +Frostaroth +Fudo +Fung +Ghastai +Ghastaro +Ghastarod +Ghastarog +Ghastaroth +Ghasters +Ghastery +Ghastie +Ghasto +Ghastor +Ghastore +Ghasts +Ghastur +Ghastus +Ghira +Ghira Fudo +Ghira Fung +Ghiro +Ghiroth +Ghirothmog +Glabilin +Glabilina +Glabilith +Glabilly +Glabrina +Goth +Gregmory +Griselial +Griselin +Griselina +Grish +Griska +Gui +Haderas +Halfegor +Halfesh +Halfeshnee +Han +Hann +Hannon +Hannoroth +Hastar +Hastaro +Hastarod +Hastarog +Hasters +Hastery +Hastie +Hasto +Hastor +Hastore +Hasts +Hastus +Hello +Hellor +Helloripus +Hellortho +Hellorthon +Hellstrom +Henriel +Henrietta +Hessiant +Hessiante +Hessianty +Horseman +Infer +Infernabog +Infernabor +InuYash +InuYashin +InuYashina +InuYashino +InuYashira +InuYashiro +Jabog +Jadia Mor +Janes Dago +Janesh +Janeshnee +Japhomero +Japhomeron +Japhomet +Japhrim +Jara +Jarakiel +Jaraxas +Jinn +Kagur +Kahn +Khorn +Killabrezu +Killabrina +Killeach +Killeacoda +Killy +Knee +Kneesock +Knowby +Koakumur +Koakumura +Koakuta +Kong +Kron +Kron Briel +Kron Frost +Kron Hello +Kronove +Kronover +Lami +Lamiel +Lan +Levi +Levi Devi +Leviatha +Leviatto +Libicant +Libicante +Libicanty +Lilin +Lilina +Lilinazzo +Loc-Naar +Lorn +Maden +Makuma +Makumaimon +Makumain +Makumat +Makumur +Makumura +Malackhead +Malacodeus +Malam +Malfesh +Malfeshnee +Malfrek +Malial +Maliant +Maliarept +Malichimon +Malichin +Malichino +Mammael +Mammaeus +Mammaro +Mammaroth +Mann +Mannon +Mariccia +Maricco +Mariccolo +Mariel +Marietta +Marilin +Marilina +Mariselin +Marish +Mary +Mary Shang +Mary Sheba +Masselial +Mastai +Mastair +Mastaro +Mastarog +Mastaroth +Masters +Mastery +Mastie +Masto +Mastor +Masts +Mastur +Mastus +Meg Mastar +Meg Mastie +Meg Masto +Meg Mastor +Meg Masts +Meg Mastur +Meg Mastus +Mehrunesh +Mephileena +Mileentch +Miles +Molatoo +Molatoon +Molator +Molatore +Moore +Mor +Mundu +Naar +Nadia Mor +Nadis +Nalfegor +Nalfesh +Nalfrek +Nanas +Nanator +Nanatore +Nar +Narvaro +Narvarod +Narvaron +Narvaroth +Naustur +Naustus +Nebilin +Nebilina +Nebilith +Nebilitha +Nebilleach +Nebilly +Nebiro +Necrod +Necrodemon +Neurok +Neurok-Han +Neuron +Neuronos +Neuronove +Neurora +Nōgami +Nōgamia +Nōgamiel +Okuma +Okumaimon +Okumain +Okumat +Okumur +Okumura +Oyash +Oyasha +Oyashin +Oyashina +Oyashino +Oyashira +Phan +Phang +Phang Zu +Phant +Phante +Phanty +Piccia +Picco +Po Kahn +Quitoo +Ram +Ramuthy +Rand +Randariel +Randarilin +Randyman +Raver +Reno +Rin Okuma +Rin Okumat +Rin Okumur +Rofocal +Romero +Romeron +Romeronos +Romeronove +Romet +Ronos +Rubicant +Rubicanty +Rubicocco +Ruxpin +Ruxpine +Saeki +Salvatoo +Salvatoon +Salvator +Salvatore +Sammaeus +Sammaro +Sammarod +Sammarog +Sammaron +Sammaroth +Sammon +Sammonde +Sammonita +Sarda +Sargatan +Saurok +Saurok-Han +Saurora +Savant +Savante +Savanty +Scant +Scante +Scarbariel +Scarbas +Scarbia +Scarr +Scarra +Seloz +Sergil +Serguthra +Shan +Shang +Shang Zu +Shant +Shante +Shanty +Shao Fudo +Shao Fung +Shao Kong +Shaw +Sheba +Silin +Silina +Silinazzo +Silith +Silith-Nar +Slaanemba +Spar +Spardius +Spin +Stra +Straghin +Straghina +Strago +Stragon +Stragor +Tang +Tang Tsung +Tang Zu +Tchan +Tchang +Tchant +Tchante +Tchanty +Tchernabor +Tchernal +Tcherno +Teddy Reno +Tengu +Terumi +Thammael +Thammaeus +Thammaro +Thammarod +Thammarog +Thammaroth +Thammon +Thammonde +Thorn +Thorne +Tiama +Trigan +Triselin +Triselina +Triska +Tsung +Turok +Turon +Turonos +Turonove +Turora +Tza +Tzeena +Ungolial +Verguthra +Verguthy +Viola Ram +Violatoo +Violatoon +Vrina +Vrinazzo +Vrinz Clor +Vulgrit +Vulgrith +Vulgritha +Wormwoo +Xiao Fudo +Xiao Kahn +Xiao Kong +Yarn +Yash +Yasha +Yashin +Yashina +Yashinazzo +Yashino +Yashira +Yashiro +Yashiroth +Yuuki Tza +Zaldove +Zami +Zamia +Zanka +Zanshira +Zanshiro +Zanshiroth +Zellboy +Zello +Zellor +Zellortho +Zellorthon +Zellstrom +Zennoroth diff --git a/dogs.txt b/dogs.txt new file mode 100644 index 000000000..d6442db61 --- /dev/null +++ b/dogs.txt @@ -0,0 +1,56 @@ +Balei +Bandicò +Bandy +Bang +Beethover +Bendit +Binger +Bington +Bustein +Chifford +Cliffon +Dinger +Dington +Eins +Einson +Einster +Fergean +Fergeant +Fluffert +Flufferto +Garry +Genes +Gnashtank +Gnashtanka +Howar +Inher +Kasher +Kasherent +Kashtank +Kashtankee +Kree +Lock +Locket +Luck +Luckles +Marl +Marm +Pomper +Robins +Robinstein +Robinster +Rock +Rockjaw +Roven +Ruffert +Ruffy +Sandicò +Sandit +Satche +Scampey +Sergean +Sergus +Wellinger +Wellingo +Yank +Yanka diff --git a/dwarfs.txt b/dwarfs.txt new file mode 100644 index 000000000..c807ebdd4 --- /dev/null +++ b/dwarfs.txt @@ -0,0 +1,82 @@ +Bombul +Bori +Breck +Caled +Dadrik +Daleb +Dimrong +Drak +Drond +Drum +Drumdi +Duregan +Farik +Faril +Figgs +Fráin +Frói +Fróin +Fund +Fundi +Fundrik +Fundrin +Fundurim +Fundurimli +Fundurin +Gadrik +Ghar +Glói +Gomrun +Gomrung +Gomrunni +Gora +Gori +Gorri +Grodrin +Grogrim +Grogrimbul +Grogrimbur +Grogrimdal +Grogrimli +Grogrimnir +Grogrin +Grong +Grói +Gund +Gundi +Gundin +Gundrin +Gundurim +Gundurimli +Gundurin +Regar +Rhund +Rhundi +Rhundin +Rhundrik +Rhundrin +Rhundurim +Thingril +Thingrin +Thorem +Thorgril +Thorgrin +Thrun +Thrund +Thrundi +Thrundin +Thrundrik +Thrundrin +Thrundurin +Thrunni +Thrár +Thrói +Thróin +Zigril +Zigrim +Zigrimbul +Zigrimbur +Zigrimdal +Zigrimli +Zigrimnir +Zigrimwold diff --git a/effect.cpp b/effect.cpp new file mode 100644 index 000000000..ff8949d92 --- /dev/null +++ b/effect.cpp @@ -0,0 +1,340 @@ +#include "stdafx.h" + +using namespace std; + +map healingPoints { + {EffectStrength::WEAK, 5}, + {EffectStrength::NORMAL, 15}, + {EffectStrength::STRONG, 40}}; + +map sleepTime { + {EffectStrength::WEAK, 15}, + {EffectStrength::NORMAL, 80}, + {EffectStrength::STRONG, 200}}; + +map panicTime { + {EffectStrength::WEAK, 5}, + {EffectStrength::NORMAL, 15}, + {EffectStrength::STRONG, 40}}; + +map halluTime { + {EffectStrength::WEAK, 30}, + {EffectStrength::NORMAL, 100}, + {EffectStrength::STRONG, 250}}; + +map blindTime { + {EffectStrength::WEAK, 5}, + {EffectStrength::NORMAL, 15}, + {EffectStrength::STRONG, 45}}; + +map invisibleTime { + {EffectStrength::WEAK, 5}, + {EffectStrength::NORMAL, 15}, + {EffectStrength::STRONG, 45}}; + +map fireAmount { + {EffectStrength::WEAK, 0.5}, + {EffectStrength::NORMAL, 1}, + {EffectStrength::STRONG, 1}}; + +map attrBonusTime { + {EffectStrength::WEAK, 30}, + {EffectStrength::NORMAL, 100}, + {EffectStrength::STRONG, 450}}; + +map identifyNum { + {EffectStrength::WEAK, 1}, + {EffectStrength::NORMAL, 1}, + {EffectStrength::STRONG, 400}}; + +Effect::Effect(EffectType t) : type(t) {} + +EffectType Effect::getType() { + return type; +} + +PEffect Effect::getEffect(EffectType type) { + switch (type) { + case EffectType::HEAL: return PEffect(new HealingEffect()); + case EffectType::IDENTIFY: return PEffect(new IdentifyEffect()); + case EffectType::TELEPORT: return PEffect(new TeleportEffect()); + case EffectType::PORTAL: return PEffect(new PortalEffect()); + case EffectType::SLEEP: return PEffect(new SleepEffect()); + case EffectType::PANIC: return PEffect(new PanicEffect()); + case EffectType::RAGE: return PEffect(new RageEffect()); + case EffectType::ROLLING_BOULDER: return PEffect(new RollingBoulderEffect()); + case EffectType::FIRE: return PEffect(new FireEffect()); + case EffectType::SLOW: return PEffect(new SlowEffect()); + case EffectType::SPEED: return PEffect(new SpeedEffect()); + case EffectType::HALLU: return PEffect(new HalluEffect()); + case EffectType::BLINDNESS: return PEffect(new BlindnessEffect()); + case EffectType::INVISIBLE: return PEffect(new InvisibleEffect()); + case EffectType::STR_BONUS: return PEffect(new StrBonusEffect()); + case EffectType::DEX_BONUS: return PEffect(new DexBonusEffect()); + case EffectType::DESTROY_EQUIPMENT: return PEffect(new DestroyEquipmemntEffect()); + case EffectType::ENHANCE_ARMOR: return PEffect(new EnhanceArmorEffect()); + case EffectType::ENHANCE_WEAPON: return PEffect(new EnhanceWeaponEffect()); + case EffectType::FIRE_SPHERE_PET: return PEffect(new FireSpherePetEffect()); + case EffectType::GUARDING_BOULDER: return PEffect(new GuardingBuilderEffect()); + case EffectType::EMIT_POISON_GAS: return PEffect(new EmitPoisonGasEffect()); + default: Debug(FATAL) << "Can't construct effect " << (int)type; + } + return PEffect(nullptr); +} + +PEffect Effect::giveItemEffect(ItemId id, int num) { + return PEffect(new GiveItemEffect(id, num)); +} + +EmitPoisonGasEffect::EmitPoisonGasEffect() : Effect(EffectType::EMIT_POISON_GAS) {} + +void EmitPoisonGasEffect::applyToCreature(Creature* c, EffectStrength strength) { + for (Vec2 v : Vec2::directions8()) + c->getSquare(v)->addPoisonGas(1); + c->getSquare()->addPoisonGas(2); +} + +GuardingBuilderEffect::GuardingBuilderEffect() : Effect(EffectType::GUARDING_BOULDER) {} + +void GuardingBuilderEffect::applyToCreature(Creature* c, EffectStrength strength) { + Optional dest; + for (Vec2 v : Vec2::directions8(true)) + if (c->canMove(v) && !c->getSquare(v)->getCreature()) { + dest = v; + break; + } + Vec2 pos = c->getPosition(); + if (dest) + c->move(*dest); + else { + Effect::getEffect(EffectType::TELEPORT)->applyToCreature(c, EffectStrength::NORMAL); + } + if (c->getPosition() != pos) { + PCreature boulder = CreatureFactory::getGuardingBoulder(c->getTribe()); + c->getLevel()->addCreature(pos, std::move(boulder)); + } +} + +FireSpherePetEffect::FireSpherePetEffect() : Effect(EffectType::FIRE_SPHERE_PET) {} + +void FireSpherePetEffect::applyToCreature(Creature* c, EffectStrength strength) { + PCreature sphere = CreatureFactory::fromId( + CreatureId::FIRE_SPHERE, c->getTribe(), MonsterAIFactory::follower(c, 1)); + for (Vec2 v : Vec2::directions8(true)) + if (c->getSquare(v)->canEnter(sphere.get())) { + c->getLevel()->addCreature(c->getPosition() + v, std::move(sphere)); + c->globalMessage("A fire sphere appears."); + break; + } +} + +EnhanceArmorEffect::EnhanceArmorEffect() : Effect(EffectType::ENHANCE_ARMOR) {} + +void EnhanceArmorEffect::applyToCreature(Creature* c, EffectStrength strength) { + for (EquipmentSlot slot : randomPermutation({ EquipmentSlot::BODY_ARMOR, EquipmentSlot::HELMET})) + if (Item* item = c->getEquipment().getItem(slot)) { + c->you(MsgType::YOUR, item->getName() + " seems improved"); + item->addModifier(AttrType::DEFENSE, 1); + return; + } +} + +EnhanceWeaponEffect::EnhanceWeaponEffect() : Effect(EffectType::ENHANCE_WEAPON) {} + +void EnhanceWeaponEffect::applyToCreature(Creature* c, EffectStrength strength) { + if (Item* item = c->getEquipment().getItem(EquipmentSlot::WEAPON)) { + c->you(MsgType::YOUR, item->getName() + " seems improved"); + item->addModifier(chooseRandom({AttrType::TO_HIT, AttrType::DAMAGE}), 1); + } +} + +DestroyEquipmemntEffect::DestroyEquipmemntEffect() : Effect(EffectType::DESTROY_EQUIPMENT) {} + +void DestroyEquipmemntEffect::applyToCreature(Creature* c, EffectStrength strength) { + vector equiped; + for (Item* item : c->getEquipment().getItems()) + if (c->getEquipment().isEquiped(item)) + equiped.push_back(item); + Item* dest = chooseRandom(equiped); + c->you(MsgType::YOUR, dest->getName() + " crumbles to dust."); + c->steal({dest}); + return; +} + +HealingEffect::HealingEffect() : Effect(EffectType::HEAL) {} + +void HealingEffect::applyToCreature(Creature* c, EffectStrength strength) { + if (c->getHealth() < 1 || (strength == EffectStrength::STRONG && c->lostLimbs())) + c->heal(1, strength == EffectStrength::STRONG); + else + c->privateMessage("You feel refreshed."); +} + +SleepEffect::SleepEffect() : Effect(EffectType::SLEEP) {} + +void SleepEffect::applyToCreature(Creature* c, EffectStrength strength) { + Square *square = c->getLevel()->getSquare(c->getPosition()); + c->you(MsgType::FALL_ASLEEP, square->getName()); + c->sleep(Random.getRandom(sleepTime[strength])); +} + +GiveItemEffect::GiveItemEffect(ItemId i, int n) : Effect(EffectType::GIVE_ITEM), id(i), num(n) {} + +void GiveItemEffect::applyToCreature(Creature* c, EffectStrength strength) { + vector item = ItemFactory::fromId(id, num); + vector ref(item.size()); + transform(item.begin(), item.end(), ref.begin(), [](PItem& it) { return it.get();}); + c->getLevel()->getSquare(c->getPosition())->dropItems(std::move(item)); + c->onItemsAppeared(ref); +} + +IdentifyEffect::IdentifyEffect() : Effect(EffectType::IDENTIFY) {} + +void IdentifyEffect::applyToCreature(Creature* c, EffectStrength strength) { + c->grantIdentify(identifyNum[strength]); +} + +PanicEffect::PanicEffect() : Effect(EffectType::PANIC) {} + +void PanicEffect::applyToCreature(Creature* c, EffectStrength strength) { + c->panic(panicTime[strength]); +} + +RageEffect::RageEffect() : Effect(EffectType::RAGE) {} + +void RageEffect::applyToCreature(Creature* c, EffectStrength strength) { + c->rage(panicTime[strength]); +} + +HalluEffect::HalluEffect() : Effect(EffectType::RAGE) {} + +void HalluEffect::applyToCreature(Creature* c, EffectStrength strength) { + c->hallucinate(halluTime[strength]); +} + +StrBonusEffect::StrBonusEffect() : Effect(EffectType::STR_BONUS) {} + +void StrBonusEffect::applyToCreature(Creature* c, EffectStrength strength) { + c->giveStrBonus(attrBonusTime[strength]); +} + +DexBonusEffect::DexBonusEffect() : Effect(EffectType::STR_BONUS) {} + +void DexBonusEffect::applyToCreature(Creature* c, EffectStrength strength) { + c->giveDexBonus(attrBonusTime[strength]); +} + +SlowEffect::SlowEffect() : Effect(EffectType::SLOW) {} + +void SlowEffect::applyToCreature(Creature* c, EffectStrength strength) { + c->slowDown(panicTime[strength]); +} + +SpeedEffect::SpeedEffect() : Effect(EffectType::SPEED) {} + +void SpeedEffect::applyToCreature(Creature* c, EffectStrength strength) { + c->speedUp(panicTime[strength]); +} + +BlindnessEffect::BlindnessEffect() : Effect(EffectType::BLINDNESS) {} + +void BlindnessEffect::applyToCreature(Creature* c, EffectStrength strength) { + c->blind(blindTime[strength]); +} + +InvisibleEffect::InvisibleEffect() : Effect(EffectType::INVISIBLE) {} + +void InvisibleEffect::applyToCreature(Creature* c, EffectStrength strength) { + c->makeInvisible(invisibleTime[strength]); +} + +FireEffect::FireEffect() : Effect(EffectType::FIRE) {} + +void FireEffect::applyToCreature(Creature* c, EffectStrength strength) { + c->setOnFire(fireAmount[strength]); +} + +PortalEffect::PortalEffect() : Effect(EffectType::PORTAL) { +} + +void PortalEffect::applyToCreature(Creature* c, EffectStrength) { + Level* l = c->getLevel(); + for (Vec2 v : c->getPosition().neighbors8(true)) + if (l->getSquare(v)->canEnter(c)) { + l->globalMessage(v, "A magic portal appears."); + l->getSquare(v)->addTrigger(Trigger::getPortal( + ViewObject(ViewId::PORTAL, ViewLayer::LARGE_ITEM, "Portal"), l, v)); + return; + } +} + +TeleportEffect::TeleportEffect() : Effect(EffectType::TELEPORT) { +} + +void TeleportEffect::applyToCreature(Creature* c, EffectStrength) { + Vec2 pos; + int cnt = 1000; + int maxRadius = 8; + int minRadius = 4; + Level* l = c->getLevel(); + vector> dest; + for (Vec2 v : Rectangle(-maxRadius, -maxRadius, maxRadius, maxRadius)) + if (int(v.lengthD()) <= maxRadius) + dest.emplace_back(v.lengthD(), v); + sort(dest.begin(), dest.end(), + [] (const pair& e1, const pair& e2) { return e1.first > e2.first; }); + CHECK(dest.front().first > dest.back().first) << dest.front().first << " " << dest.front().second; + vector goodDest; + c->setHeld(nullptr); + for (int i : All(dest)) { + if (l->canMoveCreature(c, dest[i].second)) + goodDest.push_back(dest[i].second); + if (i > 0 && dest[i].first < dest[i - 1].first && goodDest.size() > 0) { + pos = chooseRandom(goodDest); + break; + } + if (dest[i].first < minRadius) + c->privateMessage("The spell didn't work."); + } + c->you(MsgType::TELE_DISAPPEAR, ""); + l->moveCreature(c, pos); + c->you(MsgType::TELE_APPEAR, ""); +} + +RollingBoulderEffect::RollingBoulderEffect() : Effect(EffectType::ROLLING_BOULDER) {} + +void RollingBoulderEffect::applyToCreature(Creature* c, EffectStrength strength) { + int maxDist = 7; + int minDist = 5; + Level* l = c->getLevel(); + for (int dist = maxDist; dist >= minDist; --dist) { + Vec2 pos = c->getPosition(); + vector possibleDirs; + for (Vec2 dir : Vec2::directions8()) { + bool good = true; + for (int i : Range(1, dist + 1)) + if (!l->getSquare(pos + dir * i)->canEnterEmpty(Creature::getDefault())) { + good = false; + break; + } + if (good) + possibleDirs.push_back(dir); + } + if (possibleDirs.empty()) + continue; + Vec2 dir = chooseRandom(possibleDirs); + l->globalMessage(pos + dir * dist, + MessageBuffer::important("A huge rolling boulder appears!"), + MessageBuffer::important("You hear a heavy boulder rolling.")); + Square* target = l->getSquare(pos + dir * dist); + if (target->canDestroy()) + target->destroy(1000); + if (Creature *c = target->getCreature()) { + c->you(MsgType::ARE, "killed by the boulder"); + c->die(); + } + l->addCreature(pos + dir * dist, CreatureFactory::getRollingBoulder(dir * (-1))); + return; + } +} + diff --git a/effect.h b/effect.h new file mode 100644 index 000000000..f77b4fadc --- /dev/null +++ b/effect.h @@ -0,0 +1,195 @@ +#ifndef _EFFECT_H +#define _EFFECT_H + +#include "util.h" +#include "enums.h" + +class Level; +class Creature; +class Item; + +enum class EffectStrength { WEAK, NORMAL, STRONG }; +enum class EffectType { + TELEPORT, + HEAL, + SLEEP, + IDENTIFY, + PANIC, + RAGE, + ROLLING_BOULDER, + FIRE, + SLOW, + SPEED, + HALLU, + STR_BONUS, + DEX_BONUS, + BLINDNESS, + INVISIBLE, + PORTAL, + GIVE_ITEM, + DESTROY_EQUIPMENT, + ENHANCE_ARMOR, + ENHANCE_WEAPON, + FIRE_SPHERE_PET, + GUARDING_BOULDER, + EMIT_POISON_GAS, +}; + +class Effect { + public: + virtual ~Effect() {} + static PEffect getEffect(EffectType type); + static PEffect giveItemEffect(ItemId, int num = 1); + virtual void applyToCreature(Creature*, EffectStrength) {} + EffectType getType(); + + protected: + Effect(EffectType); + + private: + EffectType type; +}; + +class EmitPoisonGasEffect : public Effect { + public: + EmitPoisonGasEffect(); + virtual void applyToCreature(Creature*, EffectStrength); +}; + +class GuardingBuilderEffect : public Effect { + public: + GuardingBuilderEffect(); + virtual void applyToCreature(Creature*, EffectStrength); +}; + +class FireSpherePetEffect : public Effect { + public: + FireSpherePetEffect(); + virtual void applyToCreature(Creature*, EffectStrength); +}; + +class EnhanceArmorEffect : public Effect { + public: + EnhanceArmorEffect(); + virtual void applyToCreature(Creature*, EffectStrength); +}; + +class EnhanceWeaponEffect : public Effect { + public: + EnhanceWeaponEffect(); + virtual void applyToCreature(Creature*, EffectStrength); +}; + +class DestroyEquipmemntEffect : public Effect { + public: + DestroyEquipmemntEffect(); + virtual void applyToCreature(Creature*, EffectStrength); +}; + +class GiveItemEffect : public Effect { + public: + GiveItemEffect(ItemId, int num); + virtual void applyToCreature(Creature*, EffectStrength); + + private: + ItemId id; + int num; +}; + +class TeleportEffect : public Effect { + public: + TeleportEffect(); + virtual void applyToCreature(Creature*, EffectStrength); +}; + +class PortalEffect : public Effect { + public: + PortalEffect(); + virtual void applyToCreature(Creature*, EffectStrength); +}; + +class HealingEffect : public Effect { + public: + HealingEffect(); + virtual void applyToCreature(Creature*, EffectStrength); +}; + +class SleepEffect : public Effect { + public: + SleepEffect(); + virtual void applyToCreature(Creature*, EffectStrength); +}; + +class PanicEffect : public Effect { + public: + PanicEffect(); + virtual void applyToCreature(Creature*, EffectStrength); +}; + +class RageEffect : public Effect { + public: + RageEffect(); + virtual void applyToCreature(Creature*, EffectStrength); +}; + +class HalluEffect : public Effect { + public: + HalluEffect(); + virtual void applyToCreature(Creature*, EffectStrength); +}; + +class StrBonusEffect : public Effect { + public: + StrBonusEffect(); + virtual void applyToCreature(Creature*, EffectStrength); +}; + +class DexBonusEffect : public Effect { + public: + DexBonusEffect(); + virtual void applyToCreature(Creature*, EffectStrength); +}; + +class IdentifyEffect : public Effect { + public: + IdentifyEffect(); + virtual void applyToCreature(Creature*, EffectStrength); +}; + +class RollingBoulderEffect : public Effect { + public: + RollingBoulderEffect(); + virtual void applyToCreature(Creature*, EffectStrength); +}; + +class FireEffect : public Effect { + public: + FireEffect(); + virtual void applyToCreature(Creature*, EffectStrength); +}; + +class SlowEffect : public Effect { + public: + SlowEffect(); + virtual void applyToCreature(Creature*, EffectStrength); +}; + +class SpeedEffect : public Effect { + public: + SpeedEffect(); + virtual void applyToCreature(Creature*, EffectStrength); +}; + +class BlindnessEffect : public Effect { + public: + BlindnessEffect(); + virtual void applyToCreature(Creature*, EffectStrength); +}; + +class InvisibleEffect : public Effect { + public: + InvisibleEffect(); + virtual void applyToCreature(Creature*, EffectStrength); +}; + +#endif diff --git a/enemy_check.cpp b/enemy_check.cpp new file mode 100644 index 000000000..6596206e1 --- /dev/null +++ b/enemy_check.cpp @@ -0,0 +1,43 @@ +#include "stdafx.h" + + +EnemyCheck::EnemyCheck(double w) : weight(w){} + +double EnemyCheck::getWeight() const { + return weight; +} + +class AllEnemies : public EnemyCheck { + public: + AllEnemies(double weight) : EnemyCheck(weight) {} + + virtual bool hasStanding(const Creature*) const override { + return true; + } + + virtual double getStanding(const Creature*) const override { + return -1; + } +}; + +EnemyCheck* EnemyCheck::allEnemies(double weight) { + return new AllEnemies(weight); +} + +class FriendlyAnimals : public EnemyCheck { + public: + FriendlyAnimals(double weight) : EnemyCheck(weight) {} + + virtual bool hasStanding(const Creature* c) const override { + return c->isAnimal(); + } + + virtual double getStanding(const Creature* c) const override { + CHECK(c->isAnimal()); + return 1; + } +}; + +EnemyCheck* EnemyCheck::friendlyAnimals(double weight) { + return new FriendlyAnimals(weight); +} diff --git a/enemy_check.h b/enemy_check.h new file mode 100644 index 000000000..1d28c7f35 --- /dev/null +++ b/enemy_check.h @@ -0,0 +1,20 @@ +#ifndef _ENEMY_CHECK +#define _ENEMY_CHECK + +#include "creature.h" + +class EnemyCheck { + public: + EnemyCheck(double weight); + double getWeight() const; + virtual bool hasStanding(const Creature*) const = 0; + virtual double getStanding(const Creature*) const = 0; + + static EnemyCheck* allEnemies(double weight); + static EnemyCheck* friendlyAnimals(double weight); + + private: + double weight; +}; + +#endif diff --git a/entity.h b/entity.h new file mode 100644 index 000000000..1b99d1467 --- /dev/null +++ b/entity.h @@ -0,0 +1,10 @@ +#ifndef _ENTITY_H +#define _ENTITY_H + +class Entity { + public: + virtual void tick(double time) = 0; + +}; + +#endif diff --git a/enums.h b/enums.h new file mode 100644 index 000000000..fff9aab4b --- /dev/null +++ b/enums.h @@ -0,0 +1,398 @@ +#ifndef _ENUMS_H +#define _ENUMS_H + +#define ENUM_HASH(name) \ +namespace std { \ + template <> struct hash { \ + size_t operator()(const name& l) const { \ + return (size_t)l; \ + } \ + }; \ +} + +enum class MsgType { + FEEL, // better + BLEEDING_STOPS, + COLLAPSE, + FALL, + PANIC, + RAGE, + DIE_OF_BLEEDING, + ARE, // bleeding + YOUR, // your head is cut off + FALL_ASLEEP, // + WAKE_UP, + DIE, // + FALL_APART, + TELE_APPEAR, + TELE_DISAPPEAR, + ATTACK_SURPRISE, + CAN_SEE_HIDING, + SWING_WEAPON, + THRUST_WEAPON, + KICK, + PUNCH, + BITE, + CRAWL, + TRIGGER_TRAP, + DROP_WEAPON, + GET_HIT_NODAMAGE, // body part + HIT_THROWN_ITEM, + CRASH_THROWN_ITEM, + MISS_THROWN_ATTACK, + STAND_UP, + TURN_INVISIBLE, + TURN_VISIBLE, + ITEM_CRASHES, + ENTER_PORTAL, + HAPPENS_TO, + BURN, + DROWN, + SET_UP_TRAP, + KILLED_BY, + MISS_ATTACK}; // +enum class BodyPart { HEAD, TORSO, ARM, WING, LEG, BACK}; +enum class AttackType { CUT, STAB, CRUSH, PUNCH, BITE, HIT, SHOOT}; +enum class AttackLevel { LOW, MIDDLE, HIGH }; +enum class AttrType { STRENGTH, DAMAGE, TO_HIT, THROWN_DAMAGE, THROWN_TO_HIT, DEXTERITY, DEFENSE, SPEED, INV_LIMIT}; +enum class ItemType { WEAPON, RANGED_WEAPON, AMMO, ARMOR, SCROLL, POTION, BOOK, AMULET, TOOL, OTHER, GOLD, FOOD, + CORPSE }; +enum class EquipmentSlot { WEAPON, RANGED_WEAPON, BODY_ARMOR, HELMET, AMULET }; +enum class ArmorType { BODY_ARMOR, HELMET }; + +enum class SquareApplyType { DRINK, USE_CHEST, ASCEND, DESCEND, PRAY, SLEEP, TRAIN, WORKSHOP }; + +enum class MinionTask { EAT, SLEEP, TRAIN, TRAIN_IDLE, WORKSHOP, WORKSHOP_IDLE }; +enum class TrapType { BOULDER, POISON_GAS }; + +enum class SquareAttrib { + NO_DIG, + MOUNTAIN, + HILL, + LOWLAND, + CONNECT, + LAKE, + RIVER, + ROAD_CUT_THRU, + ROOM, +}; + +ENUM_HASH(SquareAttrib); + +enum class StairKey { DWARF, CRYPT, GOBLIN, PLAYER_SPAWN, PYRAMID, TOWER }; +enum class StairDirection { UP, DOWN }; + +enum class CreatureId { + GOBLIN, + GREAT_GOBLIN, + BANDIT, + + SPECIAL_MONSTER, + SPECIAL_MONSTER_HUMANOID, + + ZOMBIE, + VAMPIRE, + VAMPIRE_BAT, + MUMMY, + MUMMY_LORD, + + DWARF, + DWARF_BARON, + + IMP, + BILE_DEMON, + HELL_HOUND, + CHICKEN, + DUNGEON_HEART, + + KNIGHT, + AVATAR, + ARCHER, + PESEANT, + CHILD, + + ELF, + ELF_CHILD, + ELF_LORD, + HORSE, + COW, + SHEEP, + PIG, + + GNOME, + LEPRECHAUN, + + JACKAL, + DEER, + BOAR, + FOX, + VULTURE, + WOLF, + + DEATH, + NIGHTMARE, + FIRE_SPHERE, + KRAKEN, + BAT, + SNAKE, + CAVE_BEAR, + RAT}; + + +enum class ItemId { KNIFE, + SWORD, + SPECIAL_SWORD, + ELVEN_SWORD, + SPECIAL_ELVEN_SWORD, + BATTLE_AXE, + SPECIAL_BATTLE_AXE, + WAR_HAMMER, + SPECIAL_WAR_HAMMER, + SCYTHE, + BOW, + ARROW, + LEATHER_ARMOR, + LEATHER_HELM, + CHAIN_ARMOR, + IRON_HELM, + TELE_SCROLL, + PORTAL_SCROLL, + IDENTIFY_SCROLL, + BOULDER_SCROLL, + FIRE_SCROLL, + POISON_GAS_SCROLL, + DESTROY_EQ_SCROLL, + ENHANCE_A_SCROLL, + ENHANCE_W_SCROLL, + FIRE_SPHERE_SCROLL, + HEALING_POTION, + SLEEP_POTION, + BLINDNESS_POTION, + INVISIBLE_POTION, + PANIC_MUSHROOM, + RAGE_MUSHROOM, + STRENGTH_MUSHROOM, + DEXTERITY_MUSHROOM, + HALLU_MUSHROOM, + SLOW_POTION, + SPEED_POTION, + WARNING_AMULET, + HEALING_AMULET, + DEFENSE_AMULET, + FRIENDLY_ANIMALS_AMULET, + FIRST_AID_KIT, + ROCK, + GOLD_PIECE, + MUSHROOM_BOOK, + POTION_BOOK, + AMULET_BOOK, + BOULDER_TRAP_ITEM, + GAS_TRAP_ITEM, +}; + +enum class ViewLayer { + CREATURE, + LARGE_ITEM, + ITEM, + FLOOR, +}; + +enum class HighlightType { + BUILD, + POISON_GAS, +}; + +const static vector allLayers = + {ViewLayer::FLOOR, ViewLayer::ITEM, ViewLayer::LARGE_ITEM, ViewLayer::CREATURE}; + +ENUM_HASH(ViewLayer); + +enum class ViewId { + PLAYER, + ELF, + ELF_CHILD, + ELF_LORD, + ELVEN_SHOPKEEPER, + DWARF, + DWARF_BARON, + DWARVEN_SHOPKEEPER, + IMP, + BILE_DEMON, + HELL_HOUND, + CHICKEN, + KNIGHT, + AVATAR, + ARCHER, + PESEANT, + CHILD, + GREAT_GOBLIN, + GOBLIN, + BANDIT, + ZOMBIE, + VAMPIRE, + MUMMY, + MUMMY_LORD, + HORSE, + COW, + PIG, + SHEEP, + JACKAL, + DEER, + BOAR, + FOX, + BEAR, + WOLF, + BAT, + RAT, + SNAKE, + VULTURE, + GNOME, + VODNIK, + LEPRECHAUN, + KRAKEN, + KRAKEN2, + FIRE_SPHERE, + NIGHTMARE, + DEATH, + SPECIAL_BEAST, + SPECIAL_HUMANOID, + UNKNOWN_MONSTER, + + FLOOR, + SAND, + BRIDGE, + PATH, + GRASS, + WALL, + HILL, + MOUNTAIN, + SNOW, + GOLD_ORE, + WOOD_WALL, + BLACK_WALL, + YELLOW_WALL, + SECRETPASS, + DOWN_STAIRCASE, + UP_STAIRCASE, + CANIF_TREE, + DECID_TREE, + BUSH, + WATER, + MAGMA, + ABYSS, + DOOR, + FOUNTAIN, + CHEST, + COFFIN, + BED, + TORTURE_TABLE, + TRAINING_DUMMY, + WORKSHOP, + DUNGEON_HEART, + ALTAR, + GRAVE, + BARS, + BORDER_GUARD, + DESTROYED_FURNITURE, + BURNT_FURNITURE, + FALLEN_TREE, + BURNT_TREE, + + BODY_PART, + BONE, + SWORD, + ELVEN_SWORD, + KNIFE, + WAR_HAMMER, + BATTLE_AXE, + BOW, + ARROW, + SCROLL, + STEEL_AMULET, + COPPER_AMULET, + CRYSTAL_AMULET, + WOODEN_AMULET, + AMBER_AMULET, + BOOK, + FIRST_AID, + EFFERVESCENT_POTION, + MURKY_POTION, + SWIRLY_POTION, + VIOLET_POTION, + PUCE_POTION, + SMOKY_POTION, + FIZZY_POTION, + MILKY_POTION, + GOLD, + LEATHER_ARMOR, + LEATHER_HELM, + CHAIN_ARMOR, + IRON_HELM, + BOULDER, + UNARMED_BOULDER_TRAP, + PORTAL, + TRAP, + GAS_TRAP, + UNARMED_GAS_TRAP, + ROCK, + SLIMY_MUSHROOM, + PINK_MUSHROOM, + DOTTED_MUSHROOM, + GLOWING_MUSHROOM, + GREEN_MUSHROOM, + BLACK_MUSHROOM, + + TRAP_ITEM, + GUARD_POST, +}; + +enum class Gender { + MALE, + FEMALE, +}; + +enum class SquareType { + FLOOR, + BRIDGE, + PATH, + GRASS, + ROCK_WALL, + LOW_ROCK_WALL, + WOOD_WALL, + BLACK_WALL, + YELLOW_WALL, + MOUNTAIN, + GLACIER, + HILL, + SECRET_PASS, + WATER, + MAGMA, + GOLD_ORE, + ABYSS, + SAND, + DECID_TREE, + CANIF_TREE, + BUSH, + BED, + TORTURE_TABLE, + TRAINING_DUMMY, + WORKSHOP, + HATCHERY, + DUNGEON_HEART, + GRAVE, + ROLLING_BOULDER, + FOUNTAIN, + CHEST, + TREASURE_CHEST, + COFFIN, + IRON_BARS, + DOOR, + TRIBE_DOOR, + DOWN_STAIRS, + UP_STAIRS, + BORDER_GUARD, + ALTAR, +}; + + +#endif diff --git a/equipment.cpp b/equipment.cpp new file mode 100644 index 000000000..ed26b60d6 --- /dev/null +++ b/equipment.cpp @@ -0,0 +1,56 @@ +#include "stdafx.h" + +using namespace std; + +Item* Equipment::getItem(EquipmentSlot slot) const { + if (items.count(slot) > 0) + return items.at(slot); + else + return nullptr; +} + +bool Equipment::isEquiped(const Item* item) const { + for (auto elem : items) + if (elem.second == item) { + return true; + } + return false; +} + +EquipmentSlot Equipment::getSlot(const Item* item) const { + for (auto elem : items) + if (elem.second == item) { + return elem.first; + } + Debug(FATAL) << "Item not in any slot " << item->getAName(); + return EquipmentSlot::WEAPON; +} + +void Equipment::equip(Item* item, EquipmentSlot slot) { + items[slot] = item; + CHECK(hasItem(item)); +} + +void Equipment::unequip(EquipmentSlot slot) { + CHECK(items.count(slot) > 0); + items.erase(slot); +} + +PItem Equipment::removeItem(Item* item) { + if (isEquiped(item)) + unequip(getSlot(item)); + return Inventory::removeItem(item); +} + +vector Equipment::removeItems(const vector& items) { + vector ret; + for (Item* it : items) + ret.push_back(removeItem(it)); + return ret; +} + +vector Equipment::removeAllItems() { + items.clear(); + return Inventory::removeAllItems(); +} + diff --git a/equipment.h b/equipment.h new file mode 100644 index 000000000..4882c42ae --- /dev/null +++ b/equipment.h @@ -0,0 +1,23 @@ +#ifndef _EQUIPMENT_H +#define _EQUIPMENT_H + +#include "inventory.h" +#include "enums.h" + + +class Equipment : public Inventory { + public: + Item* getItem(EquipmentSlot slot) const; + bool isEquiped(const Item*) const; + EquipmentSlot getSlot(const Item*) const; + void equip(Item*, EquipmentSlot); + void unequip(EquipmentSlot slot); + PItem removeItem(Item*); + vector removeItems(const vector&); + vector removeAllItems(); + + private: + map items; +}; + +#endif diff --git a/event.cpp b/event.cpp new file mode 100644 index 000000000..2fbba42a9 --- /dev/null +++ b/event.cpp @@ -0,0 +1,67 @@ +#include "stdafx.h" + +vector EventListener::listeners; + +void EventListener::addListener(EventListener* l) { + listeners.push_back(l); +} + +void EventListener::removeListener(EventListener* l) { + removeElement(listeners, l); +} + +void EventListener::addPickupEvent(const Creature* c, const vector& items) { + for (EventListener* l : listeners) + if (l->getListenerLevel() == c->getLevel() || l->getListenerLevel() == nullptr) + l->onPickupEvent(c, items); +} + +void EventListener::addDropEvent(const Creature* c, const vector& items) { + for (EventListener* l : listeners) + if (l->getListenerLevel() == c->getLevel() || l->getListenerLevel() == nullptr) + l->onDropEvent(c, items); +} + +void EventListener::addItemsAppeared(const Level* level, Vec2 position, const vector& items) { + for (EventListener* l : listeners) + if (l->getListenerLevel() == level) + l->onItemsAppeared(position, items); +} + +void EventListener::addKillEvent(const Creature* victim, const Creature* killer) { + for (EventListener* l : listeners) + if (l->getListenerLevel() == victim->getLevel() || l->getListenerLevel() == nullptr) + l->onKillEvent(victim, killer); +} + +void EventListener::addAttackEvent(const Creature* victim, const Creature* attacker) { + for (EventListener* l : listeners) + if (l->getListenerLevel() == victim->getLevel() || l->getListenerLevel() == nullptr) + l->onAttackEvent(victim, attacker); +} + +void EventListener::addThrowEvent(const Level* level, const Creature* thrower, + const Item* item, const vector& trajectory) { + for (EventListener* l : listeners) + if (l->getListenerLevel() == level || l->getListenerLevel() == nullptr) + l->onThrowEvent(thrower, item, trajectory); +} + +void EventListener::addTriggerEvent(const Level* level, Vec2 pos) { + for (EventListener* l : listeners) + if (l->getListenerLevel() == level || l->getListenerLevel() == nullptr) + l->onTriggerEvent(level, pos); +} + +void EventListener::addSquareReplacedEvent(const Level* level, Vec2 pos) { + for (EventListener* l : listeners) + if (l->getListenerLevel() == level || l->getListenerLevel() == nullptr) + l->onSquareReplacedEvent(level, pos); +} + +void EventListener::addChangeLevelEvent(const Creature* c, const Level* level, Vec2 pos, + const Level* to, Vec2 toPos) { + for (EventListener* l : listeners) + if (l->getListenerLevel() == level || l->getListenerLevel() == nullptr) + l->onChangeLevelEvent(c, level, pos, to, toPos); +} diff --git a/event.h b/event.h new file mode 100644 index 000000000..81056fedb --- /dev/null +++ b/event.h @@ -0,0 +1,36 @@ +#ifndef _EVENT_H +#define _EVENT_H + + +class EventListener { + public: + virtual void onPickupEvent(const Creature*, const vector& items) {} + virtual void onDropEvent(const Creature*, const vector& items) {} + virtual void onItemsAppeared(Vec2 position, const vector& items) {} + virtual void onKillEvent(const Creature* victim, const Creature* killer) {} + virtual void onAttackEvent(const Creature* victim, const Creature* attacker) {} + virtual void onThrowEvent(const Creature* thrower, const Item* item, const vector& trajectory) {} + virtual void onTriggerEvent(const Level*, Vec2 pos) {} + virtual void onSquareReplacedEvent(const Level*, Vec2 pos) {} + virtual void onChangeLevelEvent(const Creature*, const Level* from, Vec2 pos, const Level* to, Vec2 toPos) {} + + static void addPickupEvent(const Creature*, const vector& items); + static void addDropEvent(const Creature*, const vector& items); + static void addItemsAppeared(const Level*, Vec2 position, const vector& items); + static void addKillEvent(const Creature* victim, const Creature* killer); + static void addAttackEvent(const Creature* victim, const Creature* attacker); + static void addThrowEvent(const Level*, const Creature* thrower, const Item* item, const vector& trajectory); + static void addTriggerEvent(const Level*, Vec2 pos); + static void addSquareReplacedEvent(const Level*, Vec2 pos); + static void addChangeLevelEvent(const Creature*, const Level* from, Vec2 pos, const Level* to, Vec2 toPos); + + static void addListener(EventListener*); + static void removeListener(EventListener*); + + virtual const Level* getListenerLevel() const { return nullptr; } + + private: + static vector listeners; +}; + +#endif diff --git a/field_of_view.cpp b/field_of_view.cpp new file mode 100644 index 000000000..69be5be49 --- /dev/null +++ b/field_of_view.cpp @@ -0,0 +1,114 @@ +#include "stdafx.h" + +using namespace std; + + +FieldOfView::FieldOfView(const Table& s) : squares(s), visibility(squares.getWidth(), squares.getHeight()) { +} + +bool FieldOfView::canSee(Vec2 from, Vec2 to) { + if ((from - to).lengthD() > sightRange) + return false; + if (!visibility[from]) + visibility[from] = Visibility(squares, from.x, from.y); + return visibility[from]->checkVisible(to.x - from.x, to.y - from.y); +} + +void FieldOfView::squareChanged(Vec2 pos) { + vector updateList; + if (!visibility[pos]) + visibility[pos] = Visibility(squares, pos.x, pos.y); + for (Vec2 v : visibility[pos]->getVisibleTiles()) + if (visibility[v] && visibility[v]->checkVisible(pos.x - v.x, pos.y - v.y)) { + visibility[v] = Nothing(); + } +} + +void FieldOfView::Visibility::setVisible(int x, int y) { + if (!visible[x + sightRange][y + sightRange] && x * x + y * y <= sightRange * sightRange) { + visible[x + sightRange][y + sightRange] = 1; + visibleTiles.push_back(Vec2(px + x, py + y)); + } +} + +static int totalIter = 0; +static int numSamples = 0; + +FieldOfView::Visibility::Visibility(const Table& squares, int x, int y) : px(x), py(y) { + memset(visible, 0, (2 * sightRange + 1) * (2 * sightRange + 1)); + calculate(2 * sightRange, 2 * sightRange,2 * sightRange, 2,-1,1,1,1, + [&](int px, int py) { return !squares[x + px][y + py]->canSeeThru(); }, + [&](int px, int py) { setVisible(px ,py); }); + calculate(2 * sightRange, 2 * sightRange,2 * sightRange, 2,-1,1,1,1, + [&](int px, int py) { return !squares[x + py][y - px]->canSeeThru(); }, + [&](int px, int py) { setVisible(py, -px); }); + calculate(2 * sightRange, 2 * sightRange,2 * sightRange,2,-1,1,1,1, + [&](int px, int py) { return !squares[x - px][y - py]->canSeeThru(); }, + [&](int px, int py) { setVisible(-px, -py); }); + calculate(2 * sightRange, 2 * sightRange,2 * sightRange,2,-1,1,1,1, + [&](int px, int py) { return !squares[x - py][y + px]->canSeeThru(); }, + [&](int px, int py) { setVisible(-py, px); }); + setVisible(0, 0); + ++numSamples; + totalIter += visibleTiles.size(); + if (numSamples%100 == 0) + Debug() << numSamples << " iterations " << totalIter / numSamples << " avg"; +} + +const vector& FieldOfView::Visibility::getVisibleTiles() const { + return visibleTiles; +} + +const vector& FieldOfView::getVisibleTiles(Vec2 from) { + if (!visibility[from]) { + visibility[from] = Visibility(squares, from.x, from.y); + } + return visibility[from]->getVisibleTiles(); +} + + +void FieldOfView::Visibility::calculate(int left, int right, int up, int h, int x1, int y1, int x2, int y2, + function isBlocking, function setVisible){ + if (y2*x1>=y1*x2) return; + if (h>up) return; + int leftx=x1, lefty=y1, rightx=x2, righty=y2; + int left_v=(int)floor((double)x1/y1*(h)), + right_v=(int)ceil((double)x2/y2*(h)), + left_b=(int)floor((double)x1/y1*(h-1)), + right_b=(int)ceil((double)x2/y2*(h+1)); + if (left_v % 2) + ++left_v; + if (right_v % 2) + --right_v; + if(left_b % 2) + ++left_b; + if(right_b % 2) + --right_b; + + if(left_b>=-left && left_b<=right && isBlocking(left_b/2,h/2)){ + leftx=left_b+1; + lefty=h+(left_b>=0?-1:1); + } + if(left_v<-left) left_v=-left; + if(right_v>right) right_v=right; + bool prevBlocking = false; + for (int i=left_v/2;i<=right_v/2;++i){ + setVisible(i, h / 2); + bool blocking = isBlocking(i, h / 2); + if(i > left_v / 2 && blocking && !prevBlocking) + calculate(left, right, up, h + 2, leftx, lefty, i * 2 - 1, h + (i<=0 ? -1:1), isBlocking, setVisible); + if(blocking){ + leftx=i*2+1; + lefty=h+(i>=0?-1:1); + } + prevBlocking = blocking; + } + calculate(left, right, up, h + 2, leftx, lefty, rightx, righty, isBlocking, setVisible); +} + +bool FieldOfView::Visibility::checkVisible(int x, int y) const { + return x >= -sightRange && y >= -sightRange && x <= sightRange && y <= sightRange && + visible[sightRange + x][sightRange + y] == 1; +} + + diff --git a/field_of_view.h b/field_of_view.h new file mode 100644 index 000000000..1790cc82b --- /dev/null +++ b/field_of_view.h @@ -0,0 +1,42 @@ +#ifndef _FIELD_OF_VIEW_H +#define _FIELD_OF_VIEW_H + +#include "util.h" +#include "square.h" + +class FieldOfView { + public: + FieldOfView(const Table& squares); + bool canSee(Vec2 from, Vec2 to); + const vector& getVisibleTiles(Vec2 from); + void squareChanged(Vec2 pos); + + private: + + const static int sightRange = 30; + + class Visibility { + char visible[sightRange * 2 + 1][sightRange * 2 + 1]; + vector visibleTiles; + void calculate(int,int,int,int, int, int, int, int, + function isBlocking, + function setVisible); + void setVisible(int, int); + + int px, py; + + public: + + bool checkVisible(int x,int y) const; + const vector& getVisibleTiles() const; + + Visibility(const Table& squares, int x, int y); + Visibility(Visibility&&) = default; + Visibility& operator = (Visibility&&) = default; + }; + + const Table& squares; + Table> visibility; +}; + +#endif diff --git a/fire.cpp b/fire.cpp new file mode 100644 index 000000000..ef94535cc --- /dev/null +++ b/fire.cpp @@ -0,0 +1,33 @@ +#include "stdafx.h" + +Fire::Fire(double objectWeight, double objectFlamability) : weight(objectWeight), flamability(objectFlamability) {} + +double epsilon = 0.001; + +void Fire::tick(Level* level, Vec2 position) { + burnt = min(1., burnt + size / weight); + size += (burnt * weight - size) / 10; + size *= (1 - burnt); + if (size < epsilon && burnt > 1 - epsilon) { + size = 0; + burnt = 1; + } +} + +void Fire::set(double amount) { + if (!isBurntOut() && amount > epsilon) + size = max(size, amount * flamability); +} + +bool Fire::isBurning() const { + return size > 0; +} + +double Fire::getSize() const { + return size; +} + +bool Fire::isBurntOut() const { + return burnt > 0.999 && size == 0; +} + diff --git a/fire.h b/fire.h new file mode 100644 index 000000000..2391ce40d --- /dev/null +++ b/fire.h @@ -0,0 +1,22 @@ +#ifndef _FIRE_H +#define _FIRE_H + +#include "util.h" + +class Fire { + public: + Fire(double objectWeight, double objectFlamability); + void tick(Level* level, Vec2 position); + void set(double amount); + bool isBurning() const; + double getSize() const; + bool isBurntOut() const; + + private: + double burnt = 0; + double size = 0; + double weight; + double flamability; +}; + +#endif diff --git a/first_names.txt b/first_names.txt new file mode 100644 index 000000000..242d7e335 --- /dev/null +++ b/first_names.txt @@ -0,0 +1,1758 @@ +Achar +Acharian +Achariard +Acharles +Acharraz +Achilbert +Achilip +Achilippe +Achillefer +Achilm +Adalarian +Adalarias +Adalariasz +Adalarin +Adalario +Adalariusz +Adalbor +Adriasz +Adriaume +Adrie +Adried +Adriel +Adriet +Aelfram +Aelfred +Aelfrid +Aelfried +Aelfriel +Aelfrien +Aelfriet +Agapin +Agatol +Agniec +Agniel +Agnier +Agnieu +Agniew +Agniewomir +Agobald +Agobaldem +Agobaldo +Agobaldric +Agobaldwin +Aigne +Alargomir +Alargost +Alarik +Alarin +Alario +Alarius +Alariusz +Alazar +Alazarz +Albercik +Albero +Albrech +Albrechier +Alche +Alchel +Aldebert +Aldebran +Aldebras +Aldem +Aldemar +Alder +Alderic +Alderice +Alderich +Aldericio +Alderyk +Aleaumir +Aleaumił +Aleaux +Alebranck +Alebras +Alejand +Alejander +Alejando +Aleksan +Alero +Alerome +Aleron +Alexand +Alexando +Alexandro +Alfon +Alfrem +Alfres +Aliau +Alodebert +Alodem +Aloderick +Alons +Alonstafa +Alonstan +Alonstavo +Alonstaw +Alureli +Alurelin +Alurent +Alurentier +Alurentin +Alurentule +Alurenty +Amadero +Amaderome +Amaderon +Amaderot +Amalvador +Amaniel +Amanielise +Amanimir +Amanio +Ambrond +Ambrosław +Ambrożan +Ami +Amiga +Amigan +Ammian +Ammianuel +Anastazar +Anastiagot +Anastian +Anastias +Anastiau +Anastien +Anastier +Anastor +Anaton +Ander +Anderanck +Anderand +Anderic +Anderich +Anderick +Anderyk +Andre +Annas +Annastaf +Annastan +Ansel +Anselin +Ansell +Anter +Antoigne +Antoignen +Antoigniel +Anton +Anzel +Apollivet +Apollivier +Apolo +Apolon +Apolonim +Apolonio +Apolonius +Apolonizy +Araimbe +Araimbert +Araimberto +Araime +Arbercik +Arbero +Archiel +Archier +Archierz +Archille +Archillot +Archim +Arman +Armaniec +Armaniel +Armanier +Armanieu +Armann +Armanuel +Arnald +Arnall +Arnolit +Arnolito +Arnolo +Arthuel +Arthuellen +Arvid +Aría +Augebero +Augusz +Augusłan +Augusław +Aurel +Aureliam +Aureliasz +Aureliaume +Auré +Aurégory +Avenebald +Aveneban +Avenebaut +Avenedykt +Aveneus +Aveneusz +Bader +Baderand +Baderic +Baderice +Baderich +Baderick +Baders +Baderyk +Baltazaïs +Balther +Bangier +Bangierd +Bangierre +Bangierry +Baptist +Baptistan +Baptistand +Baptistian +Baptistiau +Baptistof +Barabastin +Bardian +Barto +Bartolf +Bartolt +Bartunat +Bartur +Bartus +Bartłomir +Bartłorad +Bartłowit +Beniamian +Beniamir +Benian +Beniau +Benjamian +Benjamien +Benjamir +Benjamián +Bercin +Bereneusz +Berent +Berenville +Bernand +Bernaud +Bernaude +Bernaudien +Bernays +Bille +Billefer +Billemal +Billemar +Billen +Billerman +Billermann +Billermes +Billermo +Billermon +Billermond +Billermont +Billes +Billet +Blasil +Bochael +Bochal +Bochar +Bocharie +Bochart +Bochartain +Bochartwig +Bochaël +Bochał +Boemund +Boemundulf +Bogust +Bogustian +Bogustyn +Bohemon +Bohemont +Bolebaut +Bolebraham +Bolebran +Bolebrand +Bolebras +Boles +Bolesfor +Boleslaus +Bolestyn +Boryspyn +Boryst +Borystian +Borystien +Borystine +Borystiner +Borystyn +Borzy +Borzynian +Borzyniano +Borzyniec +Borzyniech +Borzyszar +Bouchar +Boucharles +Bouche +Bouchier +Bouchieu +Bouchwał +Bożamian +Bożamien +Bożamil +Bożamin +Bożamián +Boży +Bożymilip +Bożymir +Bożymitr +Bromiej +Brominiau +Brominique +Bromiłosz +Broni +Bronifacy +Bronim +Bronio +Bronius +Broniusz +Bronizy +Burchart +Burchibal +Burchibald +Burchiel +Burchier +Burchieu +Burner +Burnest +Burnester +Burnestero +Burnesto +Burnestor +Burnestyn +Busel +Busell +Buselm +Buthram +Błażesz +Carmes +Caspan +Caspazjan +Celes +Celesfor +Celeslaus +Celeslav +Celesław +Charl +Charlan +Charland +Charlando +Charlos +Chart +Chartin +Chartuś +Chartwig +Chocisław +Chris +Chriset +Chryspyn +Chryst +Chrystin +Chwalbert +Chwald +Chwaldo +Chwaldon +Chwalibor +Chwalise +Cicho +Cichosłaj +Claud +Claudier +Claudiusz +Clémeno +Clémens +Clémi +Clémy +Colbero +Colberome +Cosmar +Czesładyn +Czesłaj +Czesłan +Daimbero +Dalmar +Damiej +Damierz +Damierzy +Dargomiej +Dargosłan +Delio +Deliodolph +Deliodor +Derwin +Didien +Didietric +Didietrick +Didietron +Didietrond +Didietrus +Dietric +Dietron +Dietrond +Dietruche +Dietruchel +Dietrus +Dioni +Dionifacy +Dionim +Dionin +Dionio +Dionisław +Dionius +Dioniusz +Dobien +Dobrond +Dobrosłan +Dobrożan +Dobroży +Domin +Donall +Doriasz +Doriaume +Dortmunt +Duszard +Duszardin +Duszardo +Eckehar +Eckeharles +Eckeharraz +Eckehart +Eckhard +Eckhardo +Edgar +Edgart +Edmunt +Eduard +Eduart +Eduary +Edwaryspyn +Edwaryst +Edwarystyn +Egbercik +Egbero +Elias +Eligibert +Eligiberto +Eligismund +Eligismunt +Eligius +Emambard +Emanuardo +Emanuart +Emanuary +Emanus +Emanusz +Emman +Emmando +Emmaniel +Emmanier +Emmanieu +Emmaniew +Emmann +Engel +Engelarich +Engelarik +Engelio +Engelion +Engelmas +Engen +Engenius +Engenouet +Eorpwalis +Erengar +Erengard +Erengart +Ernes +Esdelard +Esdelarice +Esdelarico +Esdelarik +Esdelart +Esdelary +Esdelin +Esdelinard +Esdelind +Esdelino +Esdelint +Esdelinus +Esdelon +Esdelonso +Estouyn +Ethel +Ethelm +Eusebercik +Eusebert +Euseberto +Eusebertur +Ewary +Ewaryn +Ezech +Ezechar +Ezechard +Ezechardt +Ezecharles +Ezechier +Ezechierre +Ezechieu +Ezecht +Fabias +Fabiasz +Fabiesłaj +Fabiesław +Fabrician +Fabriel +Fangel +Fangelard +Fangelardo +Fangelardt +Fangelbert +Fangelm +Fangenon +Fangenot +Fangerus +Faust +Faustaf +Faustafa +Faustavo +Faustawian +Fauste +Faustin +Faustine +Feder +Federanck +Federic +Federich +Federick +Federond +Federonim +Federonius +Feders +Federyk +Felikar +Felikarp +Felikary +Felip +Felippe +Ferdynard +Fernabé +Fernald +Fernaldo +Fernand +Fernard +Fernardin +Fernardo +Fernardt +Fernaude +Fernays +Fiebran +Fiebranc +Fiebrancin +Fiebrancis +Fiebrand +Fiebrank +Fiebranz +Flambe +Flambero +Flambert +Flore +Florenzel +Florenzo +Florin +Floris +Fluel +Fluelle +Fluellefer +Fluellermo +Fluelles +Fortur +Fortus +Fortuś +Fourcaud +Fourchard +Fourchardo +Fourcharic +Fourchario +Fourchaël +Frederic +Frederico +Frederiet +Frederiete +Frederigo +Fremigius +Fremigiusz +Fremir +Fried +Friedhart +Friedrien +Frydery +Fryderyn +Frédrian +Frédric +Frédrien +Gabrice +Gabrician +Gabricio +Gabricion +Gamal +Gamalric +Gamalrich +Gamalvis +Ganel +Gardo +Gardomiej +Garsi +Garsieu +Gascouf +Gascoufil +Gaubercik +Gauchart +Gauche +Gaugust +Gaugustavo +Gaugustin +Gaugustyn +Gaétout +Gaétouyn +Gembe +Gentiago +Gentier +Gentierd +Gentierre +Gentin +Gerhard +Gerhardo +Gerwacy +Gesebius +Gesebiusz +Gilbero +Gildo +Gille +Gilleban +Gillefer +Gillet +Girian +Giriano +Girianolon +Giriard +Giriardin +Giriardo +Giriasz +Gniew +Gobel +Gobelard +Gobelarge +Gobelargen +Gobelarich +Gobelarik +Gobelart +Gobelary +Godebraham +Godebran +Godebrand +Godebras +Goder +Goderic +Goderich +Goderyk +Godfriel +Godic +Godichael +Godichar +Godichard +Godrian +Godriennes +Goliam +Golian +Goliano +Goliaume +Gonfred +Gonfreder +Gonfrie +Gonfriel +Gontiago +Gontian +Gontien +Gontiennet +Gontin +Gotelin +Gotelinard +Gotelinart +Gotelint +Gottfric +Gottfrid +Gotthew +Gotthewin +Gotthias +Gotthier +Gotthieu +Gotthilip +Gotthilipe +Gotthille +Goume +Goumel +Graciej +Gracint +Gracio +Gracy +Grefiryn +Grego +Gringer +Gringerus +Grzegor +Grzegory +Grégis +Grégor +Grégorz +Guent +Guentiau +Guentier +Guentin +Guentule +Guenty +Guentyn +Guerman +Guermanuel +Guermes +Guermo +Guermon +Guermond +Guillard +Guille +Guilles +Guilleslav +Guillet +Guillias +Guillibor +Guillot +Guine +Guinebor +Guiner +Gundechiel +Gundelino +Gunder +Gunders +Gundersz +Gunther +Gunthere +Gustan +Gustanc +Gustanck +Gustando +Gustantian +Gustantiau +Gustantin +Gustantine +Gustanto +Gustanty +Gustantyn +Gustazy +Gustazyli +Gwalbercik +Gwalbercin +Gwalbor +Gwalborad +Habrech +Habrechard +Habrechart +Habrechier +Habrechieu +Habrecht +Habrehard +Habrehardo +Habrehaue +Hadric +Hadrich +Hadrichard +Hadricho +Hadrien +Hadriennet +Haiet +Haietrice +Haietrich +Haietriche +Haietricho +Haietrick +Halebaut +Halebor +Haleborad +Halebraham +Halebras +Halin +Halind +Halino +Halint +Halinus +Halinusz +Hammon +Hanus +Harchibald +Harchiel +Harol +Hascot +Hasjürge +Hasjürges +Hebercik +Hebero +Hecel +Heceli +Hecelo +Hedwik +Hedwin +Heinric +Heinrice +Heinricio +Heinrick +Helio +Helion +Hensel +Henselm +Henselmar +Henselmuth +Herbrancis +Herchibald +Heribert +Hermelon +Hernold +Hernouen +Hernán +Herraz +Hersche +Herscher +Hewalbert +Hewalibor +Hewalibóg +Hewalise +Hiacy +Hiacyen +Hiero +Hierome +Hieron +Hieronin +Hieronio +Hieroniusz +Hieronizy +Hierot +Hilard +Hilargen +Hilaric +Hilarich +Hilarik +Hilart +Hildebranc +Hildefons +Hildemach +Hildemal +Hildemar +Hildemund +Hildemus +Hilderard +Hilderardo +Hilderian +Hipold +Hipolio +Hipoliodor +Hipolion +Hipollo +Hipollot +Hipolon +Hipolonso +Horaciej +Horacien +Horacjan +Hubercin +Hubero +Hueban +Huebastazy +Huebastian +Huebastias +Huebastiau +Huebastier +Huebastor +Huebaut +Huide +Huidelo +Huidelot +Humbe +Hunouet +Hunouf +Huroi +Ilbero +Ildefon +Inocelian +Inocelin +Inocelino +Inocelinus +Inocelio +Inocelion +Inocelipe +Inocent +Inocenther +Inocenthew +Inocentian +Inocentien +Inocentin +Inocequin +Irenebald +Irenebaldo +Ireneban +Irenebaut +Irenedykt +Irenel +Ireneus +Jacin +Jadwig +Jadwik +Jadwin +Japhe +Japher +Jarome +Jehar +Jehard +Jehardt +Jeharles +Jehart +Jehartain +Jeromir +Jerón +Jessart +Jessartain +Jessartin +Jessartine +Jessartuś +Jimens +Jiment +Joach +Joachar +Joachard +Joachardt +Joache +Johan +Johane +Johanne +Johannet +Jolliam +Jolliamin +Jollibron +Jollibrond +Jollivelet +Jose +Josepe +Julias +Juseph +Justian +Justiano +Justianus +Justien +Justyn +Justyniec +Justyniech +Jędrzego +Jędrzegor +Kanim +Kanimo +Kaspan +Kaspazjan +Kasto +Kastof +Kastophe +Kastopher +Kastout +Kazimiej +Kazimien +Kerrick +Kiliam +Kilias +Kiliasz +Kiliaume +Kiliaumin +Klaud +Klaude +Klaudien +Konst +Konstan +Konstand +Konstaniel +Konstanien +Konstanis +Kordin +Korner +Kornest +Kornester +Kornesto +Kornestyn +Krist +Kristan +Kristand +Kriste +Kristian +Kristias +Kristiau +Kristophe +Kristopher +Kristophet +Kryst +Krystiagot +Krystias +Krystiau +Krzesłan +Krzesław +Krzysłan +Krzysław +Ksaweł +Ksawełk +Lambe +Laured +Laureli +Laureliks +Laurelin +Laurelino +Leand +Leanderic +Leanderich +Leanderyk +Leando +Leandre +Leandres +Leavo +Lenard +Lenardo +Lenardomir +Letarwin +Letarwit +Lionet +Liudgar +Liudgart +Longier +Longierd +Longieron +Longierre +Longierz +Lorencjusz +Loreneusz +Lorengar +Lorengier +Lorengin +Lorent +Lorentiago +Lorentien +Lorentin +Lorenty +Lorentyn +Lothan +Lothas +Lothazar +Lothazarz +Lothazaïs +Lubero +Lubor +Ludolph +Ludwin +Luis Filio +Luthelbert +Luthew +Lämmer +Lämmerus +Maciech +Maciechard +Maciechier +Maciecht +Maciemin +Maciemir +Macien +Maillard +Maillaus +Maille +Maillebaut +Maillefer +Mailles +Maillesfor +Mailleslav +Maillian +Maillibor +Mainne +Makar +Makarp +Maksy +Maksymilip +Maksymir +Maleksand +Maleksando +Maleksy +Maleksymir +Malis +Malisław +Manfriel +Manfriet +Manfroi +Manfroin +Manold +Manolit +Mariard +Mariaumin +Mariel +María +Marían +Mathias +Mathiasz +Matthier +Matthilip +Matthilipe +Matthille +Matthilm +Maynand +Maynando +Maynandro +Medar +Medart +Meinhar +Meinhold +Meried +Meriel +Merien +Mervide +Mervidelo +Mervidelon +Mervidelot +Michal +Michar +Michard +Michardo +Michart +Michartwig +Miche +Micher +Migue +Miguein +Migueinall +Migueiner +Migueinri +Miguenel +Migueneusz +Miguet +Mikołady +Mikołan +Mikoław +Mittain +Mittainte +Mittainulf +Miłomir +Moham +Mustaf +Mustan +Mustanc +Mustancis +Mustanck +Mustand +Mustantiau +Mustantin +Mustanto +Mustanty +Mustavo +Mustavold +Mustaw +Mustazy +Mustazyli +Narcik +Narcin +Natan +Natancjusz +Natand +Nataniec +Natanien +Natanieu +Natanis +Natanty +Natantyn +Nesto +Nestof +Nestophe +Nestopher +Nestophere +Nestout +Niedhar +Niedhard +Niedhardt +Niedharian +Niedharles +Néapold +Néapolio +Néapolito +Néapollot +Néapolon +Névelest +Névelesto +Oktaw +Olgier +Olivis +Ondar +Ondard +Order +Orderand +Orderanz +Orderon +Orders +Orderyk +Orlan +Orric +Orrice +Orrich +Orricio +Orricion +Ortol +Ortold +Ortolt +Oswalbert +Oswalibor +Oswalibóg +Oswalise +Owidier +Owidierd +Owidierre +Owidierz +Owidius +Pabias +Pabiasz +Parcik +Parciso +Paris +Parist +Paristafa +Paristan +Paristanto +Paristian +Paristiano +Paristin +Paristo +Paristophe +Paristor +Paristout +Patrich +Patrichael +Patrichar +Patrichał +Patriche +Patrichel +Patrichelm +Petronim +Petronio +Petrou +Petruchard +Petruchiel +Philian +Philiano +Philianus +Philio +Philius +Philiusz +Pierran +Pierranc +Pierrancin +Pierrand +Pierranz +Pierric +Pierrice +Pierrich +Pierrick +Pierry +Plati +Platias +Platiasz +Platier +Platierry +Platierz +Polikar +Polikary +Poliks +Porchar +Porchard +Porchardt +Porcharles +Porchart +Porchibal +Porchibald +Porchieu +Poufier +Poufierond +Poufierre +Poufierry +Poufierz +Poufillaus +Poufillot +Poufin +Prician +Pricianus +Pricio +Quabian +Quabiano +Quabien +Quabienne +Quenancis +Quenanck +Quenard +Quenardo +Quenart +Quenartain +Quent +Quenther +Quentian +Quentiau +Quentien +Quentule +Quenty +Radosłan +Rague +Ragueinald +Ragueiner +Ragueneban +Raher +Rahew +Rahiel +Rahieu +Rainfrem +Rainfres +Rainus +Raphane +Raphanelo +Raphanelon +Ratien +Ratienne +Raymon +Raymotelin +Raymotelix +Raymoteus +Raymoteusz +Redward +Redwardin +Redwardo +Redwardt +Reinald +Reinard +Reinardo +Reine +Reinebor +Reinhard +Reinhardt +Remigar +Remigard +Remigart +Renon +Renouet +Renout +Ribal +Ricard +Richael +Richal +Richar +Richaric +Richart +Richaël +Ringeaumin +Ringeaumir +Ringeaux +Ringel +Ringelard +Ringelardo +Ringelbert +Ringelm +Ringelmar +Ringelmuth +Ringeno +Ringenon +Ringenot +Ringenoît +Rionel +Robercin +Robero +Rocel +Roceli +Rocelo +Roder +Roderancis +Roderic +Roderich +Rodericio +Roderico +Roders +Rodolf +Rogel +Rogelary +Rogelbert +Rogelberto +Rogelmas +Rolan +Ronall +Roncis +Rosceliks +Roscelion +Roscelipe +Rosse +Rossel +Rossell +Rostaf +Rostafa +Rostan +Rostanto +Rostaw +Rostazy +Rosław +Rotroni +Rotronim +Rotronin +Rotronius +Rotroniusz +Rotronizy +Roucas +Rudolph +Ruper +Russe +Russel +Russer +Ryszan +Saille +Saillefer +Saillestyn +Saillet +Saillian +Sailliaume +Saint +Sainto +Salvain +Salvainne +Salvainnes +Salvainnet +Salvainte +Salvainter +Sandelian +Sandelin +Sandelion +Sandre +Sandreas +Sandreskin +Santian +Santiano +Santianus +Santien +Santiennet +Santier +Sebastien +Sebastin +Sebastine +Sebastiner +Sebasz +Sehiel +Sehieu +Seifrie +Seifriel +Seifrien +Seifriet +Seneboud +Sergilio +Sergilip +Sergilippe +Sergius +Sernabé +Sernaldo +Sernando +Sernandro +Sernard +Sernaude +Serwazy +Serwazyli +Siegfric +Siegfrid +Sieghar +Siegharles +Siemond +Sigis +Sigmunt +Silvest +Silvester +Silvestero +Silvesto +Silvestor +Silvestyn +Sirio +Sobien +Sobiesłaj +Sobiesłan +Sofroi +Sofronim +Sofronin +Sofronio +Sofronius +Sofronizy +Sohal +Sohiel +Sohieu +Sonne +Sonnes +Soolebor +Sooleboud +Sooleslav +Soolesław +Staniel +Stanieu +Stanilo +Stanio +Stoignien +Stois +Strzego +Strzej +Stéphael +Stéphaël +Sulibrond +Sulibroży +Sulibóg +Sulis +Sulise +Syhiel +Syhieu +Sylvador +Sylvest +Sylvesto +Sylvestor +Sylvestre +Sylwest +Sylwesto +Sylwestor +Sylwestre +Sylwestyn +Syrius +Szymoteli +Szymotelin +Szymotelio +Szymoteus +Szymoteusz +Sébastazy +Sébastian +Sébastias +Sébastier +Sébastor +Sędomiej +Sław +Tadeus +Taillard +Taillargen +Taillaus +Taille +Taillemeno +Taillement +Tailler +Taillery +Tailles +Taillet +Taillian +Taillibor +Taillot +Tassamy +Teles +Teleslaus +Teleslav +Telestyn +Telesłan +Telesław +Teobard +Teobardzik +Teodolph +Teodosłaj +Teodosław +Tevenel +Tevenelon +Theodor +Theodrian +Theodrien +Thier +Thierd +Thierond +Thierre +Thierz +Thomain +Thomainnes +Thomainulf +Thoman +Thoucaud +Thoucaut +Thouchal +Thouchar +Thouchard +Thouchardt +Tiessamy +Tiesse +Tobian +Tomas +Tomisłan +Trist +Triste +Tristiago +Tristian +Tristias +Tristof +Tristophe +Tristopher +Tristophet +Turbert +Turbertram +Tęgomiej +Tęgominik +Ulric +Ulrice +Ulricio +Ulrick +Ulrico +Ursmas +Valen +Valentiago +Valentian +Valentien +Valentier +Valentierz +Valenty +Valentyn +Vanne +Vannet +Walard +Walart +Waldebras +Waldemach +Waldemund +Walderan +Walderiete +Walentin +Waler +Waleriasz +Walermo +Walerot +Wandech +Wandechier +Wandecht +Wandeli +Wandelian +Wandeliks +Wander +Wanders +Wandersz +Warnel +Warnest +Warnester +Warnesto +Warnestor +Warnestre +Warnestyn +Wawrzyniel +Wawrzynien +Wawrzynier +Wawrzynieu +Wawrzyniew +Wenan +Wenando +Wendecht +Wender +Wenders +Wendersz +Wernel +Wernester +Wernesto +Wernestor +Wespan +Wespar +Wibal +Wieli +Wieliks +Wielin +Wielind +Wielino +Wielinus +Wielio +Wieliodor +Wielion +Wielipe +Wiesłaj +Wilfram +Wilfred +Wilfric +Wilfrich +Wilfriel +Willibron +Willivelet +Wincent +Wincenther +Wincenthew +Wincentian +Wincentias +Wincentien +Wincentier +Wincentin +Wincentule +Wirgilian +Wirgiliano +Wirgilio +Wirgilip +Wirgilipe +Wirgilius +Wirgius +Wirgiusz +Wojciec +Wrociemir +Wrocisłan +Włodzik +Włodzimir +Ydeveno +Ydevenon +Ydevenonys +Ydevenost +Ydevenot +Ydevenouf +Ydevenoît +Zachael +Zachal +Zachar +Zachard +Zachardo +Zacharias +Zacharie +Zacharin +Zachart +Zachartain +Zachaël +Zachał +Zbigne +Zbignen +Zbigniec +Zbigniel +Zbignien +Zbignier +Zbignieu +Zdzisłan +Zenobius +Ziemond +Zwiniau +Zwiniaume +Zwiniaumel +Zwinik +Zwinique +Zygfrie +Zygfried +Zygfriel +Zygfriet +Zygmund +Zygmundulf diff --git a/gods.txt b/gods.txt new file mode 100644 index 000000000..43edb241b --- /dev/null +++ b/gods.txt @@ -0,0 +1,411 @@ +Adeka +Adekaga +Adekagagwa +Adekagaš +Adekavac +Aires +Airesna +Airesnik +Amot +Angwa +Angwaa +Angwusna +Angwuti +Apistotook +Asdzą +Ata Killa +Ata Killaa +Bagi +Bagiena +Bagienniyo +Bagiewit +Bagiewitha +Bagiewona +Baldak +Banna +Banniyo +Bast +Berstus +Buri +Cachi +Cachimines +Canook +Canooki +Canookii +Canoy +Catel +Cavilla +Cavillaa +Cavillapa +Cereplut +Chac +Conia +Coniaš +Coniašši +Coniaššu +Conir +Conirawa +Conirawals +Copaca +Copacari +Copacarilo +Coylla +Coyllaa +Coyllaca +Coyllapa +Coyllur +Coyllus +Coylluskab +Coylluskam +Della +Dellaa +Dellaca +Dellacati +Dellapa +Delli +Dellini +Delliniez +Dellinilii +Dellins +Dellur +Dellus +Delluskab +Delluskam +Dreka +Drekaga +Drekagagwa +Drekagaš +Dunia +Duzaga +Duzagagwa +Duzagagwaa +Dziewit +Dziewitha +Epuna +Epunamulla +Epunatel +Epunatha +Epunathor +Feronir +Feronirawa +Feroniraya +Fling +Flinga +Flingast +Flingwaa +Flingwusna +Flingwuti +Flini +Fliniez +Flinilii +Fliniling +Flinilinga +Flinilini +Flinilins +Fors +Friglav +Gendenwit +Germes +Germóðr +Gitch +Gitchei +Glus +Gluskam +Gohona +Gohonapa +Guaca +Guacari +Guacarilo +Guacati +Guachi +Guama +Guamac +Guaman +Guamanus +Hagone +Hashchʼí +Hatha +Hawennik +Hephaesta +Hephaestia +Hephaestuk +Hephthys +Herman +Hermansuri +Hermanus +Hesta +Hestuk +Hestus +Hora +Horakhty +Horana +Horanaco +Horanai +Horanaku +Horanakuru +Horun +Horunda +Horundaš +Huachi +Hózhǫ́ +Igalus +Igaluskab +Igaluskam +Illa +Illaa +Illaca +Illacari +Illacarilo +Illacati +Inda +Iosh +Jari +Jaricia +Jóhona +Jóhonapa +Jóhone +Jóhones +Jör +Kamun +Kamuna +Kamunamun +Kamunamuna +Kamunatel +Kamunatha +Kamunathor +Kares +Karesekui +Karesna +Karesnik +Karet +Katoyllur +Katoyllus +Kaš +Kašši +Kella +Kellaca +Kellacari +Kellacati +Kellapa +Kelli +Kelling +Kellingast +Kellini +Kelliniez +Kellinilii +Kellins +Kellur +Kellus +Kelluskab +Kelluskam +Killa +Killaa +Killaca +Killacari +Killacati +Killapa +Kokope +Kokopella +Kokopellur +Kokopellus +Kokosh +Kokosheka +Koli +Kolia +Koyana +Koyanaco +Koyanai +Koyanaku +Koyanakuru +Koyangwa +Koyangwaa +Koyanook +Koyanooki +Koyanookii +Koyanopus +Koyanoy +Kres +Kresekui +Kresna +Kresnasoak +Kupay +Laret +Larewit +Larun +Laruttaš +Leshat +Magn +Mals +Manitou +Manitra +Manitsa +Marog +Marun +Marunda +Marundaš +Marzyangwa +Marzyanoy +Mirinus +Miris +Mokope +Mokopella +Mokopellaa +Mokopelli +Mokopellur +Mokopellus +Mora +Morakhty +Muying +Muyinga +Muyingast +Muyingwuti +Nana +Nanaco +Nanaku +Nanakuru +Nanki +Nannik +Nanniyo +Nanopus +Nanoy +Neini +Neiniez +Neinilii +Neinilinga +Neinilini +Neinilins +Nephaesta +Nephaestia +Nephaestus +Neptis +Niskab +Njöfn +Njör +Njörð +Nádleehé +Olorus +Onatel +Onatequil +Onathor +Oołti'í +Orcuna +Orcunamun +Orcunamuna +Orcunatel +Orcunatha +Orcunathor +Osir +Osiriaš +Osirinus +Oźwie +Oźwiennik +Paca +Pacati +Pari +Parilo +Percuna +Percunamun +Percus +Peres +Peresekui +Peresnik +Piguer +Ping +Pingwa +Pingwaa +Pingwusna +Pingwuti +Poda +Poluno +Quil +Quiriaš +Quiris +Rugiena +Rugiennik +Rugienniyo +Rugiewona +Saluk +Seshy +Shaku +Silii +Siling +Silinga +Silingast +Silingwaa +Silingwuti +Silini +Silinilii +Siliniling +Silinilini +Silins +Sjör +Sjörð +Sjörðr +Summa +Summan +Summansuri +Supala +Svarowit +Svarowitha +Svetovis +Tabaldr +Tawa +Tawares +Tawaresna +Tawarewit +Taš +Taššu +Tella +Tellaa +Tellaca +Tellacati +Tellapa +Telli +Telling +Tellinga +Tellingast +Tellini +Telliniez +Tellinilii +Tellins +Tellur +Thona +Thonaaʼí +Thone +Thones +Tiraqutra +Tiraya +Tiwana +Tiwanaco +Tiwanai +Topieles +Tornga +Torngast +Torngastet +Trigg +Tó Neini +Urpihuana +Urpihuanai +Vediovid +Velec +Vesnik +Vestia +Vestuk +Vestus +Vodyana +Vodyanaco +Vodyanai +Vodyangwa +Vodyangwaa +Vodyanook +Vodyanooki +Vodyanopus +Vortum +Wirawa +Wirawals +Wirawares +Wirawaret +Wiraya +Zirnitou +Zirnitsa +Zorya diff --git a/inventory.cpp b/inventory.cpp new file mode 100644 index 000000000..4ffc4a2af --- /dev/null +++ b/inventory.cpp @@ -0,0 +1,67 @@ +#include "stdafx.h" + +using namespace std; + +void Inventory::addItem(PItem item) { + itemsCache.push_back(item.get()); + items.push_back(move(item)); +} + +void Inventory::addItems(vector v) { + for (PItem& it : v) + addItem(std::move(it)); +} + +PItem Inventory::removeItem(Item* itemRef) { + int ind = -1; + for (int i : All(items)) + if (items[i].get() == itemRef) { + ind = i; + break; + } + CHECK(ind > -1) << "Tried to remove unknown item."; + PItem item = std::move(items[ind]); + items.erase(items.begin() + ind); + removeElement(itemsCache, itemRef); + return item; +} + +vector Inventory::removeItems(vector items) { + vector ret; + for (Item* item : items) + ret.push_back(removeItem(item)); + return ret; +} + +vector Inventory::removeAllItems() { + itemsCache.clear(); + return move(items); +} + +vector Inventory::getItems(function predicate) const { + vector ret; + for (const PItem& item : items) + if (predicate(item.get())) + ret.push_back(item.get()); + return ret; +} + +vector Inventory::getItems() const { + return itemsCache; +} + +bool Inventory::hasItem(const Item* itemRef) const { + for (const PItem& item : items) + if (item.get() == itemRef) + return true; + return false; +} + +int Inventory::size() const { + return items.size(); +} + +bool Inventory::isEmpty() const { + return items.empty(); +} + diff --git a/inventory.h b/inventory.h new file mode 100644 index 000000000..54cbef668 --- /dev/null +++ b/inventory.h @@ -0,0 +1,30 @@ +#ifndef _INVENTORY_H +#define _INVENTORY_H + +#include + +#include "util.h" +#include "item.h" + +class Inventory { + public: + void addItem(PItem); + void addItems(vector); + PItem removeItem(Item* item); + vector removeItems(vector items); + vector removeAllItems(); + + vector getItems() const; + vector getItems(function predicate) const; + + bool hasItem(const Item*) const; + int size() const; + + bool isEmpty() const; + + private: + vector items; + vector itemsCache; +}; + +#endif diff --git a/item.cpp b/item.cpp new file mode 100644 index 000000000..a1997d2fa --- /dev/null +++ b/item.cpp @@ -0,0 +1,392 @@ +#include "stdafx.h" + +using namespace std; + +Item::Item(ViewObject o, const ItemAttributes& attr) + : ItemAttributes(attr), viewObject(o), inspected(everythingIdentified), fire(*weight, flamability) { +} + +void Item::identifyEverything() { + everythingIdentified = true; +} + +bool Item::isEverythingIdentified() { + return everythingIdentified; +} + +bool Item::everythingIdentified = false; + +static set ident; +bool Item::isIdentified(const string& name) { + return everythingIdentified || ident.count(name); +} + +ItemPredicate Item::effectPredicate(EffectType type) { + return [type](Item* item) { return item->getEffectType() == type; }; +} + +ItemPredicate Item::typePredicate(ItemType type) { + return [type](Item* item) { return item->getType() == type; }; +} + +ItemPredicate Item::typePredicate(vector type) { + return [&type](Item* item) { return contains(type, item->getType()); }; +} + +map> Item::stackItems(vector items) { + map> stacks = groupBy(items, [](const Item* item) { + return item->getAName(); + }); + map> ret; + for (auto elem : stacks) + if (elem.second.size() > 1) + ret.insert(make_pair( + convertToString(elem.second.size()) + " " + elem.second[0]->getAName(true), elem.second)); + else + ret.insert(elem); + return ret; +} + +void Item::identify(const string& name) { + Debug() << "Identify " << name; + ident.insert(name); +} + +void Item::identify() { + identify(*name); + inspected = true; +} + +bool Item::canIdentify() { + return identifiable; +} + +bool Item::isIdentified() { + return isIdentified(*name); +} + +void Item::onEquip(Creature* c) { + if (identifyOnEquip && c->isPlayer()) + identify(); + onEquipSpecial(c); +} + +void Item::onUnequip(Creature* c) { + onUnequipSpecial(c); +} + +void Item::setOnFire(double amount, const Level* level, Vec2 position) { + bool burning = fire.isBurning(); + string noBurningName = getTheName(); + fire.set(amount); + if (!burning && fire.isBurning()) { + level->globalMessage(position, noBurningName + " catches fire."); + viewObject.setBurning(fire.getSize()); + } +} + +double Item::getFireSize() const { + return fire.getSize(); +} + +void Item::tick(double time, Level* level, Vec2 position) { + if (fire.isBurning()) { + Debug() << getName() << " burning " << fire.getSize(); + level->getSquare(position)->setOnFire(fire.getSize()); + viewObject.setBurning(fire.getSize()); + fire.tick(level, position); + if (!fire.isBurning()) { + level->globalMessage(position, getTheName() + " burns out"); + discarded = true; + } + } + specialTick(time, level, position); +} + +void Item::onHitSquare(Vec2 position, Square* s) { + if (fragile) { + s->getConstLevel()->globalMessage(position, + getTheName() + " crashes on the " + s->getName(), "You hear a crash"); + discarded = true; + } else + s->getConstLevel()->globalMessage(position, getTheName() + " hits the " + s->getName()); +} + +void Item::onHitCreature(Creature* c, Attack attack) { + if (fragile) { + c->you(MsgType::ITEM_CRASHES, getTheName()); + discarded = true; + } else + c->you(MsgType::HIT_THROWN_ITEM, getTheName()); + if (c->takeDamage(attack)) + return; + if (effect && getType() == ItemType::POTION) { + Effect::getEffect(*effect)->applyToCreature(c, EffectStrength::NORMAL); + if (c->getLevel()->playerCanSee(c->getPosition())) + identify(); + } +} + +double Item::getApplyTime() const { + return applyTime; +} + +double Item::getWeight() const { + return *weight; +} + +string Item::getDescription() const { + return description; +} + +const ViewObject& Item::getViewObject() const { + return viewObject; +} + +string Item::getText(ItemType type) { + map m { + { ItemType::WEAPON,"Weapons" }, + { ItemType::RANGED_WEAPON,"Ranged weapons" }, + { ItemType::AMMO,"Projectiles" }, + { ItemType::AMULET,"Amulets" }, + { ItemType::ARMOR,"Armor" }, + { ItemType::SCROLL,"Scrolls" }, + { ItemType::POTION,"Potions" }, + { ItemType::FOOD,"Comestibles" }, + { ItemType::BOOK,"Books" }, + { ItemType::TOOL,"Tools" }, + { ItemType::CORPSE,"Corpses" }, + { ItemType::OTHER,"Other" }, + { ItemType::GOLD,"Gold" }}; + TRY(return m.at(type), "Unknown type"); +} + +ItemType Item::getType() const { + return *type; +} + +int Item::getPrice() const { + return price; +} + +void Item::setUnpaid(bool p) { + unpaid = p; +} + +bool Item::isUnpaid() const { + return unpaid; +} + +Optional Item::getTrapType() const { + return trapType; +} + +void Item::apply(Creature* c, Level* l) { + if (identifyOnApply && l->playerCanSee(c->getPosition())) + identify(*name); + if (effect) + Effect::getEffect(*effect)->applyToCreature(c, EffectStrength::NORMAL); + if (uses && (-- *uses) == 0) { + discarded = true; + if (usedUpMsg) + c->privateMessage(getTheName() + " is used up."); + } +} + +string Item::getApplyMsgThirdPerson() const { + switch (getType()) { + case ItemType::SCROLL: return "reads " + getAName(); + case ItemType::POTION: return "drinks " + getAName(); + case ItemType::BOOK: return "reads " + getAName(); + case ItemType::TOOL: return "applies " + getAName(); + case ItemType::FOOD: return "eats " + getAName(); + default: Debug(FATAL) << "Bad type for applying " << (int)getType(); + } + return ""; +} + +string Item::getApplyMsgFirstPerson() const { + switch (getType()) { + case ItemType::SCROLL: return "read " + getAName(); + case ItemType::POTION: return "drink " + getAName(); + case ItemType::BOOK: return "read " + getAName(); + case ItemType::TOOL: return "apply " + getAName(); + case ItemType::FOOD: return "eat " + getAName(); + default: Debug(FATAL) << "Bad type for applying " << (int)getType(); + } + return ""; +} + +string Item::getNoSeeApplyMsg() const { + switch (getType()) { + case ItemType::SCROLL: return "You hear someone reading"; + case ItemType::POTION: return ""; + case ItemType::BOOK: return "You hear someone reading "; + case ItemType::TOOL: return ""; + case ItemType::FOOD: return ""; + default: Debug(FATAL) << "Bad type for applying " << (int)getType(); + } + return ""; +} + +void Item::setName(const string& n) { + name = n; +} + +string Item::getName(bool plural, bool blind) const { + string suff = uses && displayUses && inspected ? string(" (") + convertToString(*uses) + ")" : ""; + if (fire.isBurning()) + suff.append(" (burning)"); + if (unpaid) + suff += " (" + convertToString(getPrice()) + (plural ? " zorkmids each)" : " zorkmids)"); + if (blind) + return getBlindName(plural); + if (isIdentified(*name)) + return getRealName(plural) + suff; + else + return getVisibleName(plural) + suff; +} + +string Item::getAName(bool getPlural, bool blind) const { + if (noArticle || getPlural) + return getName(getPlural, blind); + else + return addAParticle(getName(getPlural, blind)); +} + +string Item::getTheName(bool getPlural, bool blind) const { + string the = (noArticle || getPlural) ? "" : "the "; + return the + getName(getPlural, blind); +} + +string Item::getVisibleName(bool getPlural) const { + if (!getPlural) + return *name; + else { + if (plural) + return *plural; + else + return *name + "s"; + } +} + +static string withSign(int a) { + if (a >= 0) + return "+" + convertToString(a); + else + return convertToString(a); +} + +string Item::getArtifactName() const { + CHECK(artifactName); + return *artifactName; +} + +string Item::getNameAndModifiers(bool getPlural, bool blind) const { + if (inspected) { + string artStr = artifactName ? " named " + *artifactName : ""; + if (getType() == ItemType::WEAPON) + return getName(getPlural, blind) + artStr + + " (" + withSign(toHit) + " accuracy, " + withSign(damage) + " damage)"; + if (getType() == ItemType::RANGED_WEAPON) + return getName(getPlural, blind) + artStr + + " (" + withSign(rangedWeaponAccuracy) + " accuracy)"; + if (getType() == ItemType::ARMOR) + return getName(getPlural, blind) + artStr + " (" + withSign(defense) + " defense)"; + } + return getName(getPlural, blind); +} + +string Item::getRealName(bool getPlural) const { + if (!realName) + return getVisibleName(getPlural); + if (!getPlural) + return *realName; + else { + if (realPlural) + return *realPlural; + else + return *realName + "s"; + } +} + +string Item::getBlindName(bool plural) const { + if (blindName) + return *blindName + (plural ? "s" : ""); + else + return getName(plural, false); +} + +bool Item::isDiscarded() { + return discarded; +} + +Optional Item::getEffectType() const { + return effect; +} + +bool Item::canEquip() const { + return getType() == ItemType::WEAPON + || getType() == ItemType::RANGED_WEAPON + || getType() == ItemType::ARMOR + || getType() == ItemType::AMULET; +} + +EquipmentSlot Item::getEquipmentSlot() const { + CHECK(canEquip()); + if (getType() == ItemType::WEAPON) + return EquipmentSlot::WEAPON; + if (getType() == ItemType::RANGED_WEAPON) + return EquipmentSlot::RANGED_WEAPON; + if (getType() == ItemType::AMULET) + return EquipmentSlot::AMULET; + if (armorType == ArmorType::BODY_ARMOR) + return EquipmentSlot::BODY_ARMOR; + if (armorType == ArmorType::HELMET) + return EquipmentSlot::HELMET; + Debug(FATAL) << "other equipment slot"; + return EquipmentSlot::HELMET; +} + +int Item::getAccuracy() const { + return rangedWeaponAccuracy; +} + +void Item::addModifier(AttrType attributeType, int value) { + switch (attributeType) { + case AttrType::TO_HIT: toHit += value; break; + case AttrType::THROWN_TO_HIT: thrownToHit += value; break; + case AttrType::DEFENSE: defense += value; break; + case AttrType::DAMAGE: damage += value; break; + case AttrType::THROWN_DAMAGE: thrownDamage += value; break; + case AttrType::STRENGTH: strength += value; break; + case AttrType::DEXTERITY: dexterity += value; break; + case AttrType::SPEED: speed += value; break; + case AttrType::INV_LIMIT: break; + default: Debug(FATAL) << "Attribute not handled"; + } +} + +int Item::getModifier(AttrType attributeType) const { + switch (attributeType) { + case AttrType::TO_HIT: return toHit; + case AttrType::THROWN_TO_HIT: return thrownToHit; + case AttrType::DEFENSE: return defense; + case AttrType::DAMAGE: return damage; + case AttrType::THROWN_DAMAGE: return thrownDamage; + case AttrType::STRENGTH: return strength; + case AttrType::DEXTERITY: return dexterity; + case AttrType::SPEED: return speed; + case AttrType::INV_LIMIT: return 0; + default: Debug(FATAL) << "Attribute not handled"; + } + return 0; +} + +AttackType Item::getAttackType() const { + return attackType; +} + +bool Item::isWieldedTwoHanded() const { + return twoHanded; +} diff --git a/item.h b/item.h new file mode 100644 index 000000000..a26e8d4f6 --- /dev/null +++ b/item.h @@ -0,0 +1,104 @@ +#ifndef _ITEM_H +#define _ITEM_H + +#include "util.h" +#include "view_object.h" +#include "item_attributes.h" +#include "effect.h" +#include "enums.h" +#include "attack.h" +#include "fire.h" + +class Level; + +class Item; +typedef function ItemPredicate; + +class Item : private ItemAttributes { + public: + typedef ItemAttributes ItemAttributes; + Item(ViewObject o, const ItemAttributes&); + virtual ~Item() {} + + static void identifyEverything(); + static bool isEverythingIdentified(); + + virtual void apply(Creature*, Level*); + + bool isDiscarded(); + + const ViewObject& getViewObject() const; + + string getName(bool plural = false, bool blind = false) const; + string getTheName(bool plural = false, bool blind = false) const; + string getAName(bool plural = false, bool blind = false) const; + string getNameAndModifiers(bool plural = false, bool blind = false) const; + string getArtifactName() const; + + virtual Optional getEffectType() const; + ItemType getType() const; + + int getPrice() const; + void setUnpaid(bool); + bool isUnpaid() const; + + Optional getTrapType() const; + + bool canEquip() const; + EquipmentSlot getEquipmentSlot() const; + static string getText(ItemType type); + void addModifier(AttrType attributeType, int value); + int getModifier(AttrType attributeType) const; + + void tick(double time, Level*, Vec2 position); + + string getApplyMsgThirdPerson() const; + string getApplyMsgFirstPerson() const; + string getNoSeeApplyMsg() const; + + static void identify(const string& name); + void identify(); + bool isIdentified(); + bool canIdentify(); + void onEquip(Creature*); + void onUnequip(Creature*); + virtual void onEquipSpecial(Creature*) {} + virtual void onUnequipSpecial(Creature*) {} + virtual void setOnFire(double amount, const Level* level, Vec2 position); + double getFireSize() const; + + void onHitSquare(Vec2 position, Square*); + void onHitCreature(Creature* c, Attack attack); + + int getAccuracy() const; + double getApplyTime() const; + double getWeight() const; + string getDescription() const; + + AttackType getAttackType() const; + bool isWieldedTwoHanded() const; + + static ItemPredicate effectPredicate(EffectType); + static ItemPredicate typePredicate(ItemType); + static ItemPredicate typePredicate(vector); + + static map> stackItems(vector); + + protected: + virtual void specialTick(double time, Level*, Vec2 position) {} + void setName(const string& name); + ViewObject viewObject; + bool discarded = false; + bool inspected; + static bool everythingIdentified; + + private: + static bool isIdentified(const string& name); + string getVisibleName(bool plural) const; + string getRealName(bool plural) const; + string getBlindName(bool plural) const; + bool unpaid = false; + Fire fire; +}; + +#endif diff --git a/item_attributes.h b/item_attributes.h new file mode 100644 index 000000000..93c86e366 --- /dev/null +++ b/item_attributes.h @@ -0,0 +1,59 @@ +#ifndef _ITEM_ATTRIBUTES_H +#define _ITEM_ATTRIBUTES_H + +#include +#include + +#include "util.h" +#include "effect.h" +#include "enums.h" + +#define ITATTR(X) ItemAttributes([&](ItemAttributes& i) { X }) + +class EnemyCheck; + +class ItemAttributes { + public: + ItemAttributes(function fun) { + fun(*this); + } + + MustInitialize name; + string description; + MustInitialize weight; + MustInitialize type; + Optional realName; + Optional realPlural; + Optional plural; + Optional blindName; + Optional firingWeapon; + Optional artifactName; + Optional trapType; + double flamability = 0; + int price = 0; + bool noArticle = false; + int damage = 0; + int toHit = 0; + int thrownDamage = 0; + int thrownToHit = 0; + int rangedWeaponAccuracy = 0; + int defense = 0; + int strength = 0; + int dexterity = 0; + int speed = 0; + bool twoHanded = false; + AttackType attackType = AttackType::HIT; + double attackTime = 1; + Optional armorType; + double applyTime = 1; + bool fragile = false; + Optional effect; + Optional uses; + bool usedUpMsg = false; + bool displayUses = false; + bool identifyOnApply = true; + bool identifiable = false; + bool identifyOnEquip = true; +}; + +#endif diff --git a/item_factory.cpp b/item_factory.cpp new file mode 100644 index 000000000..d143b2640 --- /dev/null +++ b/item_factory.cpp @@ -0,0 +1,771 @@ +#include "stdafx.h" + +using namespace std; + +class FireScroll : public Item { + public: + FireScroll(const ViewObject& obj, const ItemAttributes& attr) : Item(obj, attr) {} + + virtual void apply(Creature* c, Level* l) override { + if (l->playerCanSee(c->getPosition())) + identify(); + set = true; + } + + virtual void specialTick(double time, Level* level, Vec2 position) override { + if (set) { + setOnFire(0.03, level, position); + set = false; + } + } + + private: + bool set = false; +}; + +class AmuletOfWarning : public Item { + public: + AmuletOfWarning(const ViewObject& obj, const ItemAttributes& attr, int r) : Item(obj, attr), radius(r) {} + + virtual void specialTick(double time, Level* level, Vec2 position) override { + Creature* owner = level->getSquare(position)->getCreature(); + if (owner && owner->getEquipment().isEquiped(this)) { + Rectangle rect = Rectangle(position.x - radius, position.y - radius, + position.x + radius + 1, position.y + radius + 1); + bool isDanger = false; + bool isBigDanger = false; + for (Vec2 v : rect) { + if (!level->inBounds(v)) + continue; + if (Creature* c = level->getSquare(v)->getCreature()) { + if (!owner->canSee(c) && c->isEnemy(owner)) { + int diff = c->getAttr(AttrType::DAMAGE) - owner->getAttr(AttrType::DAMAGE); + if (diff > 5) + isBigDanger = true; + else + if (diff > 0) + isDanger = true; + } + } + } + if (isBigDanger) + owner->privateMessage(getTheName() + " vibrates vigorously"); + else + if (isDanger) + owner->privateMessage(getTheName() + " vibrates"); + } + } + + private: + int radius; +}; + +class AmuletOfHealing : public Item { + public: + AmuletOfHealing(const ViewObject& obj, const ItemAttributes& attr) : Item(obj, attr) {} + + virtual void specialTick(double time, Level* level, Vec2 position) override { + Creature* owner = level->getSquare(position)->getCreature(); + if (owner && owner->getEquipment().isEquiped(this)) { + if (lastTick == -1) + lastTick = time; + else { + owner->heal((time - lastTick) / 20); + } + lastTick = time; + } else + lastTick = -1; + } + + private: + double lastTick = -1; +}; + +class AmuletOfEnemyCheck : public Item { + public: + AmuletOfEnemyCheck(const ViewObject& obj, const ItemAttributes& attr, EnemyCheck* c) : Item(obj, attr), check(c) {} + + virtual void onEquipSpecial(Creature* c) { + c->addEnemyCheck(check); + } + + virtual void onUnequipSpecial(Creature* c) { + c->removeEnemyCheck(check); + } + + private: + EnemyCheck* check; +}; + +class Corpse : public Item { + public: + Corpse(const ViewObject& obj, const ViewObject& obj2, const ItemAttributes& attr, const string& rottenN, double rottingT) : + Item(obj, attr), + object2(obj2), + rottingTime(rottingT), + rottenName(rottenN) { + } + + virtual void specialTick(double time, Level* level, Vec2 position) override { + if (rottenTime == -1) + rottenTime = time + rottingTime; + if (time >= rottenTime && !rotten) { + setName(rottenName); + viewObject = object2; + rotten = true; + } else if (getWeight() > 10 && !rotten && !level->getSquare(position)->isCovered() && Random.roll(35)) { + for (Vec2 v : position.neighbors8(true)) + if (level->inBounds(v)) { + PCreature vulture = CreatureFactory::fromId( + CreatureId::VULTURE, Tribe::pest, MonsterAIFactory::scavengerBird(v)); + if (level->getSquare(v)->canEnter(vulture.get())) { + level->addCreature(v, std::move(vulture)); + level->globalMessage(v, "A vulture lands near " + getTheName()); + rottenTime -= 40; + break; + } + } + } + } + + private: + ViewObject object2; + bool rotten = false; + double rottenTime = -1; + double rottingTime; + string rottenName; +}; + +PItem ItemFactory::corpse(CreatureId id, ItemType type) { + PCreature c = CreatureFactory::fromId(id, Tribe::monster); + return corpse(c->getName() + " corpse", c->getName() + " skeleton", c->getWeight()); +} + +PItem ItemFactory::corpse(const string& name, const string& rottenName, double weight, ItemType type) { + const double rotTime = 300; + return PItem(new Corpse( + ViewObject(ViewId::BODY_PART, ViewLayer::ITEM, name), + ViewObject(ViewId::BONE, ViewLayer::ITEM, rottenName), + ITATTR( + i.name = name; + i.type = type; + i.weight = weight;), + rottenName, + rotTime)); +} + +class Potion : public Item { + public: + Potion(ViewObject object, const ItemAttributes& attr) : Item(object, attr) {} + + virtual void setOnFire(double amount, const Level* level, Vec2 position) override { + heat += amount; + Debug() << getName() << " heat " << heat; + if (heat > 0.1) { + level->globalMessage(position, getAName() + " boils and explodes!"); + discarded = true; + } + } + + virtual void specialTick(double time, Level* level, Vec2 position) override { + heat = max(0., heat - 0.005); + } + + private: + double heat = 0; +}; + +class SkillBook : public Item { + public: + SkillBook(ViewObject object, const ItemAttributes& attr, Skill* s) : Item(object, attr), skill(s) {} + + virtual void apply(Creature* c, Level* l) override { + c->addSkill(skill); + } + + private: + Skill* skill; +}; + +class TrapItem : public Item { + public: + TrapItem(ViewObject object, ViewObject _trapObject, const ItemAttributes& attr, PEffect _effect) + : Item(object, attr), effect(std::move(_effect)), trapObject(_trapObject) { + } + + virtual void apply(Creature* c, Level* l) override { + CHECK(effect); + c->you(MsgType::SET_UP_TRAP, ""); + c->getSquare()->addTrigger(Trigger::getTrap(trapObject, + l, c->getPosition(), std::move(effect), c->getTribe())); + discarded = true; + } + + private: + PEffect effect; + ViewObject trapObject; +}; + +static vector amulet_looks = { "steel", "copper", "crystal", "wooden", "amber"}; +static vector amulet_ids = { ViewId::STEEL_AMULET, ViewId::COPPER_AMULET, ViewId::CRYSTAL_AMULET, ViewId::WOODEN_AMULET, ViewId::AMBER_AMULET}; + +static vector mushroom_looks = { "slimy", "pink", "dotted", "glowing", "green", "black"}; +static vector mushroom_ids = {ViewId::PINK_MUSHROOM, ViewId::DOTTED_MUSHROOM, ViewId::GLOWING_MUSHROOM, ViewId::GREEN_MUSHROOM, ViewId::BLACK_MUSHROOM, ViewId::SLIMY_MUSHROOM}; + +static vector potion_looks = { "effervescent", "murky", "swirly", "violet", "puce", "smoky", "fizzy", "milky" }; +static vector potion_ids = { ViewId::EFFERVESCENT_POTION, ViewId::MURKY_POTION, ViewId::SWIRLY_POTION, ViewId::VIOLET_POTION, ViewId::PUCE_POTION, ViewId::SMOKY_POTION, ViewId::FIZZY_POTION, ViewId::MILKY_POTION}; +static vector scroll_looks; + +ItemFactory::ItemFactory(const vector>& _items, + const vector& _unique) : unique(_unique) { + for (auto elem : _items) { + items.push_back(elem.first); + weights.push_back(elem.second); + } +} + +PItem ItemFactory::random(Optional seed) { + if (unique.size() > 0) { + ItemId id = unique.back(); + unique.pop_back(); + return fromId(id); + } + if (seed) { + RandomGen gen; + gen.init(*seed); + return fromId(items[gen.getRandom(items.size())]); + } + return fromId(chooseRandom(items, weights)); +} + +vector ItemFactory::getAll() { + vector ret; + for (ItemId id : unique) + ret.push_back(fromId(id)); + for (ItemId id : items) + ret.push_back(fromId(id)); + return ret; +} + +ItemFactory ItemFactory::villageShop() { + return ItemFactory({ + {ItemId::TELE_SCROLL, 5 }, + {ItemId::PORTAL_SCROLL, 5 }, + {ItemId::IDENTIFY_SCROLL, 5 }, + {ItemId::FIRE_SCROLL, 5 }, + {ItemId::FIRE_SPHERE_SCROLL, 5 }, + {ItemId::HEALING_POTION, 7 }, + {ItemId::SLEEP_POTION, 5 }, + {ItemId::SLOW_POTION, 5 }, + {ItemId::SPEED_POTION,5 }, + {ItemId::BLINDNESS_POTION, 5 }, + {ItemId::INVISIBLE_POTION, 2 }, + {ItemId::WARNING_AMULET, 1 }, + {ItemId::HEALING_AMULET, 1 }, + {ItemId::DEFENSE_AMULET, 1 }, + {ItemId::FIRST_AID_KIT, 5} }); +} + +ItemFactory ItemFactory::dwarfShop() { + return ItemFactory({ + {ItemId::KNIFE, 5 }, + {ItemId::SWORD, 2 }, + {ItemId::BATTLE_AXE, 2 }, + {ItemId::WAR_HAMMER, 2 }, + {ItemId::LEATHER_ARMOR, 2 }, + {ItemId::CHAIN_ARMOR, 1 }, + {ItemId::LEATHER_HELM, 2 }, + {ItemId::IRON_HELM, 1} }, + {ItemId::PORTAL_SCROLL}); +} + +ItemFactory ItemFactory::goblinShop() { + return ItemFactory({ + {ItemId::KNIFE, 5 }, + {ItemId::SWORD, 2 }, + {ItemId::BATTLE_AXE, 1 }, + {ItemId::WAR_HAMMER, 2 }, + {ItemId::LEATHER_ARMOR, 2 }, + {ItemId::CHAIN_ARMOR, 1 }, + {ItemId::LEATHER_HELM, 2 }, + {ItemId::IRON_HELM, 1 }, + {ItemId::PANIC_MUSHROOM, 1 }, + {ItemId::RAGE_MUSHROOM, 1 }, + {ItemId::STRENGTH_MUSHROOM, 1 }, + {ItemId::DEXTERITY_MUSHROOM, 1} }); +} + +ItemFactory ItemFactory::workshop() { + return ItemFactory({ + {ItemId::FIRST_AID_KIT, 5 }, + {ItemId::BOULDER_TRAP_ITEM, 5 }, + {ItemId::GAS_TRAP_ITEM, 5 }, + {ItemId::SWORD, 2 }, + {ItemId::BATTLE_AXE, 1 }, + {ItemId::WAR_HAMMER, 1 }, + {ItemId::LEATHER_ARMOR, 2 }, + {ItemId::CHAIN_ARMOR, 1 }, + {ItemId::LEATHER_HELM, 2 }, + {ItemId::IRON_HELM, 1 }, + {ItemId::SPECIAL_SWORD, 0.1}, + {ItemId::SPECIAL_BATTLE_AXE, 0.1}, + {ItemId::SPECIAL_WAR_HAMMER, 0.1}}); +} + +ItemFactory ItemFactory::potions() { + return ItemFactory({ + {ItemId::HEALING_POTION, 1 }, + {ItemId::SLEEP_POTION, 1 }, + {ItemId::SLOW_POTION, 1 }, + {ItemId::BLINDNESS_POTION, 1 }, + {ItemId::INVISIBLE_POTION, 1 }, + {ItemId::SPEED_POTION, 1 }}); +} + +ItemFactory ItemFactory::scrolls() { + return ItemFactory({ + {ItemId::TELE_SCROLL, 1 }, + {ItemId::IDENTIFY_SCROLL, 1 }, + {ItemId::FIRE_SCROLL, 1 }, + {ItemId::FIRE_SPHERE_SCROLL, 1 }, + {ItemId::PORTAL_SCROLL, 1 }}); +} + +ItemFactory ItemFactory::mushrooms() { + return ItemFactory({ + {ItemId::STRENGTH_MUSHROOM, 1 }, + {ItemId::DEXTERITY_MUSHROOM, 1 }, + {ItemId::PANIC_MUSHROOM, 1 }, + {ItemId::HALLU_MUSHROOM, 8 }, + {ItemId::RAGE_MUSHROOM, 1 }}); +} + +ItemFactory ItemFactory::amulets() { + return ItemFactory({ + {ItemId::WARNING_AMULET, 1}, + {ItemId::HEALING_AMULET, 1}, + {ItemId::DEFENSE_AMULET, 1}, + {ItemId::FRIENDLY_ANIMALS_AMULET, 1},} + ); +} + +ItemFactory ItemFactory::dungeon() { + return ItemFactory({ + {ItemId::KNIFE, 50 }, + {ItemId::SWORD, 50 }, + {ItemId::SPECIAL_SWORD, 1 }, + {ItemId::BATTLE_AXE, 10 }, + {ItemId::SPECIAL_BATTLE_AXE, 1 }, + {ItemId::WAR_HAMMER, 20 }, + {ItemId::SPECIAL_WAR_HAMMER, 1 }, + {ItemId::LEATHER_ARMOR, 20 }, + {ItemId::CHAIN_ARMOR, 0 }, + {ItemId::LEATHER_HELM, 20 }, + {ItemId::IRON_HELM, 0 }, + {ItemId::TELE_SCROLL, 30 }, + {ItemId::PORTAL_SCROLL, 10 }, + {ItemId::IDENTIFY_SCROLL, 30 }, + {ItemId::FIRE_SCROLL, 30 }, + {ItemId::FIRE_SPHERE_SCROLL, 30 }, + {ItemId::HEALING_POTION, 50 }, + {ItemId::SLEEP_POTION, 50 }, + {ItemId::SLOW_POTION, 50 }, + {ItemId::SPEED_POTION, 50 }, + {ItemId::BLINDNESS_POTION, 30 }, + {ItemId::INVISIBLE_POTION, 10 }, + {ItemId::FIRST_AID_KIT, 30 }}); +} + +ItemFactory ItemFactory::singleType(ItemId id) { + return ItemFactory({{id, 1}}); +} + +void ItemFactory::init() { + for (int i : Range(100)) + scroll_looks.push_back(toUpper(NameGenerator::scrolls.getNext())); + random_shuffle(potion_looks.begin(), potion_looks.end(),[](int a) { return Random.getRandom(a);}); + random_shuffle(amulet_looks.begin(), amulet_looks.end(),[](int a) { return Random.getRandom(a);}); +} + +PItem getPotion(int numLooks, string name, EffectType effect, int price, string description) { + return PItem(new Potion( + ViewObject(potion_ids[numLooks], ViewLayer::ITEM, "Potion"), ITATTR( + i.name = potion_looks[numLooks] + " potion"; + i.realName = "potion of " + name; + i.realPlural = "potions of " + name; + i.description = description; + i.blindName = "potion"; + i.type = ItemType::POTION; + i.fragile = true; + i.thrownToHit = 6; + i.weight = 0.3; + i.effect = effect; + i.price = price; + i.flamability = 0.3; + i.identifiable = true; + i.uses = 1;))); +} + +PItem getScroll(string name, EffectType effect, int price, string description) { + return PItem(new Item( + ViewObject(ViewId::SCROLL, ViewLayer::ITEM, "Scroll"), ITATTR( + i.name = "scroll labelled " + name; + i.plural= "scrolls labelled " + name; + i.description = description; + /* i.realName = "scroll of " + name; + i.realPlural = "scrolls of " + name;*/ + i.blindName = "scroll"; + i.type= ItemType::SCROLL; + i.weight = 0.1; + i.thrownDamage = -10; + i.effect = effect; + i.price = price; + i.flamability = 1; +// i.identifiable = true; + i.uses = 1;))); +} + +PItem getMushroom(string name, EffectType effect, string description) { + return PItem(new Item( + ViewObject(mushroom_ids[0], ViewLayer::ITEM, "Mushroom"), ITATTR( + i.name = "mushroom"; + i.realName = name + " mushroom"; + i.description = description; + i.type= ItemType::FOOD; + i.weight = 0.1; + i.thrownDamage = -15; + i.effect = effect; + i.price = 80; + i.identifyOnApply = false; + i.uses = 1;))); +} + +static int maybePlusMinusOne(int prob) { + if (Random.roll(prob)) + return Random.getRandom(2) * 2 - 1; + return 0; +} + +vector>> badArtifactNames { + {"sword", { "bang", "crush", "fist"}}, + {"battle axe", {"crush", "tooth", "razor", "fist", "bite", "bolt", "sword"}}, + {"war hammer", {"blade", "tooth", "bite", "bolt", "sword", "steel"}}}; + +void makeArtifact(ItemAttributes& i) { + bool good; + do { + good = true; + i.artifactName = NameGenerator::weaponNames.getNext(); + for (auto elem : badArtifactNames) + for (auto pattern : elem.second) + if (contains(toLower(*i.artifactName), pattern) && contains(*i.name, elem.first)) { + Debug() << "Rejected artifact " << *i.name << " " << *i.artifactName; + good = false; + } + } while (!good); + Debug() << "Making artifact " << *i.name << " " << *i.artifactName; + i.damage += Random.getRandom(1, 4); + i.toHit += Random.getRandom(1, 4); + i.name = "antique " + *i.name; + i.price *= 15; +} + +PItem ItemFactory::fromId(ItemId id) { + bool artifact = false; + switch (id) { + case ItemId::KNIFE: return PItem(new Item( + ViewObject(ViewId::KNIFE, ViewLayer::ITEM, "Knife"), ITATTR( + i.name = "knife"; + i.plural = "knives"; + i.type = ItemType::WEAPON; + i.weight = 0.3; + i.damage = 5 + maybePlusMinusOne(4); + i.toHit = maybePlusMinusOne(4); + i.attackTime = 0.7; + i.thrownDamage = 3; + i.thrownToHit = 3; + i.price = 5; + i.attackType = AttackType::STAB;))); + case ItemId::SPECIAL_SWORD: artifact = true; + case ItemId::SWORD: return PItem(new Item( + ViewObject(ViewId::SWORD, ViewLayer::ITEM, "Sword"), ITATTR( + i.name = "sword"; + i.type = ItemType::WEAPON; + i.weight = 1.5; + i.damage = 8 + maybePlusMinusOne(4); + i.toHit = 3 + maybePlusMinusOne(4); + i.price = 20; + if (artifact) { + makeArtifact(i); + } + i.attackType = AttackType::CUT;))); + case ItemId::SPECIAL_ELVEN_SWORD: artifact = true; + case ItemId::ELVEN_SWORD: return PItem(new Item( + ViewObject(ViewId::ELVEN_SWORD, ViewLayer::ITEM, "Elven sword"), ITATTR( + i.name = "elven sword"; + i.type = ItemType::WEAPON; + i.weight = 1; + i.damage = 9 + maybePlusMinusOne(4); + i.toHit = 5 + maybePlusMinusOne(4); + i.price = 120; + if (artifact) { + makeArtifact(i); + } + i.attackType = AttackType::CUT;))); + case ItemId::SPECIAL_BATTLE_AXE: artifact = true; + case ItemId::BATTLE_AXE: return PItem(new Item( + ViewObject(ViewId::BATTLE_AXE, ViewLayer::ITEM, "Battle axe"), ITATTR( + i.name = "battle axe"; + i.type = ItemType::WEAPON; + i.weight = 8; + i.damage = 14 + maybePlusMinusOne(4); + i.toHit = 0 + maybePlusMinusOne(4); + i.attackTime = 1.2; + i.twoHanded = true; + i.price = 140; + if (artifact) { + makeArtifact(i); + } + i.attackType = AttackType::CUT;))); + case ItemId::SPECIAL_WAR_HAMMER: artifact = true; + case ItemId::WAR_HAMMER: return PItem(new Item( + ViewObject(ViewId::WAR_HAMMER, ViewLayer::ITEM, "War hammer"), ITATTR( + i.name = "war hammer"; + i.type = ItemType::WEAPON; + i.weight = 8; + i.damage = 12 + maybePlusMinusOne(4); + i.toHit = 0 + maybePlusMinusOne(4); + i.attackTime = 1.2; + i.twoHanded = true; + i.price = 100; + if (artifact) { + makeArtifact(i); + } + i.attackType = AttackType::CRUSH;))); + case ItemId::SCYTHE: return PItem(new Item( + ViewObject(ViewId::SWORD, ViewLayer::ITEM, "Scythe"), ITATTR( + i.name = "scythe"; + i.type = ItemType::WEAPON; + i.weight = 5; + i.damage = 12 + maybePlusMinusOne(4); + i.toHit = 0 + maybePlusMinusOne(4); + i.attackTime = 1; + i.twoHanded = true; + i.price = 100; + i.attackType = AttackType::CUT;))); + case ItemId::BOW: return PItem(new RangedWeapon( + ViewObject(ViewId::BOW, ViewLayer::ITEM, "Short bow"), ITATTR( + i.name = "short bow"; + i.type = ItemType::RANGED_WEAPON; + i.weight = 1; + i.rangedWeaponAccuracy = 10; + i.price = 60;))); + case ItemId::ARROW: return PItem(new Item( + ViewObject(ViewId::ARROW, ViewLayer::ITEM, "Arrow"), ITATTR( + i.name = "arrow"; + i.type = ItemType::AMMO; + i.weight = 0.1; + i.thrownDamage = 5; + i.thrownToHit = -5; + i.price = 60;))); + case ItemId::LEATHER_ARMOR: return PItem(new Item( + ViewObject(ViewId::LEATHER_ARMOR, ViewLayer::ITEM, "Armor"), ITATTR( + i.name = "leather armor"; + i.type = ItemType::ARMOR; + i.weight = 7; + i.armorType = ArmorType::BODY_ARMOR; + i.price = 20; + i.defense = 3 + maybePlusMinusOne(4);))); + case ItemId::LEATHER_HELM: return PItem(new Item( + ViewObject(ViewId::LEATHER_HELM, ViewLayer::ITEM, "Helmet"), ITATTR( + i.name = "leather helm"; + i.type = ItemType::ARMOR; + i.weight = 1.5; + i.armorType = ArmorType::HELMET; + i.price = 5; + i.defense = 1 + maybePlusMinusOne(4);))); + case ItemId::CHAIN_ARMOR: return PItem(new Item( + ViewObject(ViewId::CHAIN_ARMOR, ViewLayer::ITEM, "Armor"), ITATTR( + i.name = "chain armor"; + i.type = ItemType::ARMOR; + i.weight = 15; + i.armorType = ArmorType::BODY_ARMOR; + i.price = 170; + i.defense = 5 + maybePlusMinusOne(4);))); + case ItemId::IRON_HELM: return PItem(new Item( + ViewObject(ViewId::IRON_HELM, ViewLayer::ITEM, "Helmet"), ITATTR( + i.name = "iron helm"; + i.type = ItemType::ARMOR; + i.weight = 4; + i.armorType = ArmorType::HELMET; + i.price = 70; + i.defense=2 + maybePlusMinusOne(4);))); + case ItemId::WARNING_AMULET: return PItem( + new AmuletOfWarning(ViewObject(amulet_ids[0], ViewLayer::ITEM, "Amulet"), + ITATTR( + i.name = amulet_looks[0] + " amulet"; + i.realName = "amulet of warning"; + i.description = "Warns about dangerous beasts and enemies."; + i.type = ItemType::AMULET; + i.price = 300; + i.identifiable = true; + i.weight = 0.3;), 5)); + case ItemId::HEALING_AMULET: return PItem( + new AmuletOfHealing(ViewObject(amulet_ids[1], ViewLayer::ITEM, "Amulet"), + ITATTR( + i.name = amulet_looks[1] + " amulet"; + i.realName = "amulet of healing"; + i.description = "Slowly heals all wounds."; + i.type = ItemType::AMULET; + i.price = 300; + i.identifiable = true; + i.weight = 0.3;))); + case ItemId::DEFENSE_AMULET: return PItem( + new Item(ViewObject(amulet_ids[2], ViewLayer::ITEM, "Amulet"), + ITATTR( + i.name = amulet_looks[2] + " amulet"; + i.realName = "amulet of defense"; + i.description = "Increases the toughness of your skin and flesh, making you harder to wound."; + i.type = ItemType::AMULET; + i.price = 300; + i.identifiable = true; + i.defense = 5 + maybePlusMinusOne(4); + i.weight = 0.3;))); + case ItemId::FRIENDLY_ANIMALS_AMULET: return PItem( + new AmuletOfEnemyCheck(ViewObject(amulet_ids[3], ViewLayer::ITEM, "Amulet"), + ITATTR( + i.name = amulet_looks[3] + " amulet"; + i.realName = "amulet of nature affinity"; + i.description = "Makes all animals peaceful."; + i.type = ItemType::AMULET; + i.price = 300; + i.identifiable = true; + i.weight = 0.3;), EnemyCheck::friendlyAnimals(0.5))); + case ItemId::FIRST_AID_KIT: return PItem(new Item( + ViewObject(ViewId::FIRST_AID, ViewLayer::ITEM, "First aid kit"), ITATTR( + i.name = "first aid kit"; + i.weight = 0.5; + i.type = ItemType::TOOL; + i.applyTime = 3; + i.uses = Random.getRandom(3, 6); + i.usedUpMsg = true; + i.displayUses = true; + i.price = 10; + i.effect = EffectType::HEAL;))); + case ItemId::BOULDER_TRAP_ITEM: return PItem(new Item( + ViewObject(ViewId::TRAP_ITEM, ViewLayer::ITEM, "Unarmed trap"), ITATTR( + i.name = "boulder trap"; + i.weight = 0.5; + i.type = ItemType::TOOL; + i.applyTime = 3; + i.uses = 1; + i.usedUpMsg = true; + i.effect = EffectType::GUARDING_BOULDER; + i.trapType = TrapType::BOULDER; + i.price = 10;))); + case ItemId::GAS_TRAP_ITEM: return PItem(new TrapItem( + ViewObject(ViewId::TRAP_ITEM, ViewLayer::ITEM, "Unarmed trap"), + ViewObject(ViewId::GAS_TRAP, ViewLayer::LARGE_ITEM, "Trap"),ITATTR( + i.name = "gas trap"; + i.weight = 0.5; + i.type = ItemType::TOOL; + i.applyTime = 3; + i.uses = 1; + i.usedUpMsg = true; + i.trapType = TrapType::POISON_GAS; + i.price = 10;), Effect::getEffect(EffectType::EMIT_POISON_GAS))); + case ItemId::HEALING_POTION: return getPotion(0, "healing", EffectType::HEAL, 40, "Heals all your wounds."); + case ItemId::SLEEP_POTION: return getPotion(1, "sleep", EffectType::SLEEP, 40, + "Puts anyone to sleep immediately."); + case ItemId::SLOW_POTION: return getPotion(2, "slowness", EffectType::SLOW, 40, + "Makes all your moves very sluggish"); + case ItemId::SPEED_POTION: return getPotion(3, "speed", EffectType::SPEED, 60, + "Makes all your moves very swift"); + case ItemId::BLINDNESS_POTION: return getPotion(4, "blindness", EffectType::BLINDNESS, 60, + "Makes you blind for some time."); + case ItemId::INVISIBLE_POTION: return getPotion(5, "invisibility", EffectType::INVISIBLE, 60, + "Makes you and your belongings invisible for a short time."); + case ItemId::PANIC_MUSHROOM: return getMushroom("panic", EffectType::PANIC, + "Makes the one who ate it favor defensive actions over offensive."); + case ItemId::RAGE_MUSHROOM: return getMushroom("rage", EffectType::RAGE, + "Makes the one who ate it favor offensive actions over deffensive."); + case ItemId::HALLU_MUSHROOM: return getMushroom("magic", EffectType::HALLU, + "Has a strong hallucinogenic effect."); + case ItemId::STRENGTH_MUSHROOM: return getMushroom("strength", EffectType::STR_BONUS, + "Gives you extra strength for a while."); + case ItemId::DEXTERITY_MUSHROOM: return getMushroom("dexterity", EffectType::DEX_BONUS, + "Gives you extra dexterity for a while."); + case ItemId::TELE_SCROLL: return getScroll("effugium", EffectType::TELEPORT, 50, + "Teleports the reader away by a short distance"); + case ItemId::PORTAL_SCROLL: return getScroll("ianuae magicae", EffectType::PORTAL, 50, "Creates a magical portal. Two of such portals allow instant travel between them."); + case ItemId::IDENTIFY_SCROLL: if (!Item::isEverythingIdentified()) + return getScroll("rium propositum", EffectType::IDENTIFY, 15, + "Identifies a hidden or magical use of a chosen item."); + else + return fromId(chooseRandom({ItemId::ENHANCE_W_SCROLL, ItemId::ENHANCE_A_SCROLL})); + case ItemId::BOULDER_SCROLL: return getScroll("rolling boulder", EffectType::ROLLING_BOULDER, 100, ""); + case ItemId::POISON_GAS_SCROLL: return getScroll("poison gas", EffectType::EMIT_POISON_GAS, 100, ""); + case ItemId::DESTROY_EQ_SCROLL: return getScroll("destruction", EffectType::DESTROY_EQUIPMENT, 100, + "Destroys a piece of equipment of the reader."); + case ItemId::ENHANCE_W_SCROLL: return getScroll("melius telum", EffectType::ENHANCE_WEAPON, 100, + "Increases the damage or accuracy of a weapon."); + case ItemId::ENHANCE_A_SCROLL: return getScroll("melius armatus", EffectType::ENHANCE_ARMOR, 100, + "Increases the defense value of a piece of armor."); + case ItemId::FIRE_SPHERE_SCROLL: return getScroll("sphaera ignis", EffectType::FIRE_SPHERE_PET, 100, + "Creates a sphere of fire."); + case ItemId::FIRE_SCROLL: return PItem(new FireScroll( + ViewObject(ViewId::SCROLL, ViewLayer::ITEM, "Scroll"), ITATTR( + i.name = "scroll labelled combustio"; + i.plural= "scrolls labelled combustio"; + i.description = "Sets itself on fire."; + i.blindName = "scroll"; + i.type= ItemType::SCROLL; + i.weight = 0.1; + i.thrownDamage = -10; + i.price = 15; + i.flamability = 1; + i.uses = 1;))); + case ItemId::MUSHROOM_BOOK: return PItem(new SkillBook( + ViewObject(ViewId::BOOK, ViewLayer::ITEM, "Book"), ITATTR( + i.name = "book of mushrooms"; + i.weight = 0.5; + i.type = ItemType::BOOK; + i.applyTime = 3; + i.price = 100;), Skill::mushrooms)); + case ItemId::POTION_BOOK: return PItem(new SkillBook( + ViewObject(ViewId::BOOK, ViewLayer::ITEM, "Book"), ITATTR( + i.name = "book of potions"; + i.weight = 0.5; + i.type = ItemType::BOOK; + i.applyTime = 3; + i.price = 100;), Skill::potions)); + case ItemId::AMULET_BOOK: return PItem(new SkillBook( + ViewObject(ViewId::BOOK, ViewLayer::ITEM, "Book"), ITATTR( + i.name = "book of amulets"; + i.weight = 0.5; + i.type = ItemType::BOOK; + i.applyTime = 3; + i.price = 100;), Skill::amulets)); + case ItemId::ROCK: return PItem(new Item( + ViewObject(ViewId::ROCK, ViewLayer::ITEM, "Rock"), ITATTR( + i.name = "rock"; + i.type = ItemType::OTHER; + i.price = 0; + i.weight = 0.3;))); + case ItemId::GOLD_PIECE: return PItem(new Item( + ViewObject(ViewId::GOLD, ViewLayer::ITEM, "Gold"), ITATTR( + i.name = "gold piece"; + i.type = ItemType::GOLD; + i.price = 1; + i.weight = 0.01;))); + } + Debug(FATAL) << "unhandled item " << (int) id; + return PItem(nullptr); +} + +vector ItemFactory::fromId(ItemId id, int num) { + vector ret; + for (int i : Range(num)) + ret.push_back(fromId(id)); + return ret; +} diff --git a/item_factory.h b/item_factory.h new file mode 100644 index 000000000..aec70f342 --- /dev/null +++ b/item_factory.h @@ -0,0 +1,46 @@ +#ifndef _ITEM_FACTORY +#define _ITEM_FACTORY + +#include +#include +#include + +#include "util.h" +#include "name_generator.h" + +class Item; + + +class ItemFactory { + public: + ItemFactory(const vector>&, + const vector& unique = vector()); + PItem random(Optional seed = Nothing()); + vector getAll(); + + static ItemFactory dungeon(); + static ItemFactory potions(); + static ItemFactory scrolls(); + static ItemFactory mushrooms(); + static ItemFactory amulets(); + static ItemFactory villageShop(); + static ItemFactory dwarfShop(); + static ItemFactory goblinShop(); + static ItemFactory workshop(); + static ItemFactory singleType(ItemId); + + static PItem fromId(ItemId); + static vector fromId(ItemId, int num); + static PItem corpse(const string& name, const string& rottenName, double weight, ItemType = ItemType::CORPSE); + static PItem corpse(CreatureId, ItemType type = ItemType::CORPSE); + static PItem trapItem(PTrigger trigger, string trapName); + + static void init(); + + private: + vector items; + vector weights; + vector unique; +}; + +#endif diff --git a/level.cpp b/level.cpp new file mode 100644 index 000000000..fcd6b1ed3 --- /dev/null +++ b/level.cpp @@ -0,0 +1,401 @@ +#include "stdafx.h" + +using namespace std; + + +Level::Level(Table s, Model* m, vector l, const string& message, const string& n) + : squares(std::move(s)), locations(l), model(m), fieldOfView(squares), entryMessage(message), + name(n), player(nullptr) { + for (Vec2 pos : squares.getBounds()) { + squares[pos]->setLevel(this); + Optional> link = squares[pos]->getLandingLink(); + if (link) + landingSquares[*link].push_back(pos); + } + for (Location *l : locations) + l->setLevel(this); +} + +void Level::addCreature(Vec2 position, PCreature c) { + putCreature(position, c.get()); + model->addCreature(std::move(c)); +} + +void Level::putCreature(Vec2 position, Creature* c) { + creatures.push_back(c); + CHECK(getSquare(position)->getCreature() == nullptr); + c->setLevel(this); + c->setPosition(position); + //getSquare(position)->putCreatureSilently(c); + getSquare(position)->putCreature(c); + notifyLocations(c); +} + +void Level::notifyLocations(Creature* c) { + for (Location* l : locations) + if (c->getPosition().inRectangle(l->getBounds())) + l->onCreature(c); +} + +void Level::replaceSquare(Vec2 pos, PSquare square) { + if (contains(tickingSquares, getSquare(pos))) + removeElement(tickingSquares, getSquare(pos)); + Creature* c = squares[pos]->getCreature(); + for (Item* it : squares[pos]->getItems()) + square->dropItem(squares[pos]->removeItem(it)); + square->setCovered(squares[pos]->isCovered()); + squares[pos] = std::move(square); + squares[pos]->setPosition(pos); + squares[pos]->setLevel(this); + if (c) { + squares[pos]->putCreatureSilently(c); + } + updateVisibility(pos); +} + +const Creature* Level::getPlayer() const { + return player; +} + +const Location* Level::getLocation(Vec2 pos) const { + for (Location* l : locations) + if (pos.inRectangle(l->getBounds())) + return l; + return nullptr; +} + +const vector Level::getAllLocations() const { + return locations; +} + +vector Level::getLandingSquares(StairDirection dir, StairKey key) const { + if (landingSquares.count({dir, key})) + return landingSquares.at({dir, key}); + else + return {}; +} + +Vec2 Level::landCreature(StairDirection direction, StairKey key, Creature* creature) { + vector landing = landingSquares.at({direction, key}); + return landCreature(landing, creature); +} + +Vec2 Level::landCreature(StairDirection direction, StairKey key, PCreature creature) { + Vec2 pos = landCreature(direction, key, creature.get()); + model->addCreature(std::move(creature)); + return pos; +} + +Vec2 Level::landCreature(vector landing, Creature* creature) { + CHECK(creature); + if (entryMessage != "") { + creature->privateMessage(entryMessage); + entryMessage = ""; + } + queue> q; + for (Vec2 pos : randomPermutation(landing)) + q.push(make_pair(pos, pos)); + while (!q.empty()) { + pair v = q.front(); + q.pop(); + if (squares[v.first]->canEnter(creature)) { + putCreature(v.first, creature); + return v.second; + } else + for (Vec2 next : v.first.neighbors8(true)) + if (squares[next]->canEnterEmpty(creature)) + q.push(make_pair(next, v.second)); + } + Debug(FATAL) << "Failed to find any square to put creature"; + return Vec2(0, 0); +} + +void Level::throwItem(PItem item, Attack attack, int maxDist, Vec2 position, Vec2 direction) { + int cnt = 1; + vector trajectory; + for (Vec2 v = position + direction;; v += direction) { + trajectory.push_back(v); + if (getSquare(v)->itemBounces(item.get())) { + item->onHitSquare(v, getSquare(v)); + trajectory.pop_back(); + EventListener::addThrowEvent(this, attack.getAttacker(), item.get(), trajectory); + if (!item->isDiscarded()) + getSquare(v - direction)->dropItem(std::move(item)); + return; + } + if (++cnt > maxDist || getSquare(v)->itemLands(item.get(), attack)) { + EventListener::addThrowEvent(this, attack.getAttacker(), item.get(), trajectory); + getSquare(v)->onItemLands(std::move(item), attack, maxDist - cnt - 1, direction); + return; + } + } +} + +void Level::killCreature(Creature* creature) { + removeElement(creatures, creature); + getSquare(creature->getPosition())->removeCreature(); + model->removeCreature(creature); + if (creature->isPlayer()) + setPlayer(nullptr); +} + +void Level::updateVisibility(Vec2 changedSquare) { + fieldOfView.squareChanged(changedSquare); +} + +void Level::globalMessage(Vec2 position, const string& ifPlayerCanSee, const string& cannot) const { + if (player) { + if (playerCanSee(position)) + player->privateMessage(ifPlayerCanSee); + else + player->privateMessage(cannot); + } +} + +void Level::changeLevel(StairDirection dir, StairKey key, Creature* c) { + Vec2 fromPosition = c->getPosition(); + removeElement(creatures, c); + getSquare(c->getPosition())->removeCreature(); + Vec2 toPosition = model->changeLevel(dir, key, c); + EventListener::addChangeLevelEvent(c, this, fromPosition, c->getLevel(), toPosition); +} + +void Level::changeLevel(Level* destination, Vec2 landing, Creature* c) { + Vec2 fromPosition = c->getPosition(); + removeElement(creatures, c); + getSquare(c->getPosition())->removeCreature(); + model->changeLevel(destination, landing, c); + EventListener::addChangeLevelEvent(c, this, fromPosition, destination, landing); +} + +void Level::setPlayer(Creature* player) { + this->player = player; +} + +const vector& Level::getAllCreatures() const { + return creatures; +} + +vector& Level::getAllCreatures() { + return creatures; +} + +bool Level::canSee(Vec2 from, Vec2 to) const { + return fieldOfView.canSee(from, to); +} + +bool Level::playerCanSee(Vec2 pos) const { + return player != nullptr && player->canSee(pos); +} + +bool Level::playerCanSee(const Creature* c) const { + return player != nullptr && player->canSee(c); +} + +bool Level::canMoveCreature(const Creature* creature, Vec2 direction) const { + Vec2 position = creature->getPosition(); + Vec2 destination = position + direction; + if (!inBounds(destination)) + return false; + return getSquare(destination)->canEnter(creature); +} + +void Level::moveCreature(Creature* creature, Vec2 direction) { + CHECK(canMoveCreature(creature, direction)); + Vec2 position = creature->getPosition(); + Square* nextSquare = getSquare(position + direction); + Square* thisSquare = getSquare(position); + thisSquare->removeCreature(); + creature->setPosition(position + direction); + nextSquare->putCreature(creature); + notifyLocations(creature); +} + +void Level::swapCreatures(Creature* c1, Creature* c2) { + Vec2 position1 = c1->getPosition(); + Vec2 position2 = c2->getPosition(); + Square* square1 = getSquare(position1); + Square* square2 = getSquare(position2); + square1->removeCreature(); + square2->removeCreature(); + c1->setPosition(position2); + c2->setPosition(position1); + square1->putCreature(c2); + square2->putCreature(c1); + notifyLocations(c1); + notifyLocations(c2); +} + + +vector Level::getVisibleTiles(const Creature* c) const { + static vector emptyVec; + if (!c->isBlind()) + return fieldOfView.getVisibleTiles(c->getPosition()); + else + return emptyVec; +} + +unordered_map objectList; + +void Level::setBackgroundLevel(const Level* l, Vec2 offs) { + backgroundLevel = l; + backgroundOffset = offs; +} + +static unordered_map background; + + +const Square* Level::getSquare(Vec2 pos) const { + return squares[pos].get(); +} + +Square* Level::getSquare(Vec2 pos) { + return squares[pos].get(); +} + +void Level::addTickingSquare(Vec2 pos) { + Square* s = squares[pos].get(); + if (!contains(tickingSquares, s)) + tickingSquares.push_back(s); +} + +vector Level::getTickingSquares() const { + return tickingSquares; +} + +Level::Builder::Builder(int width, int height, const string& n) : squares(width, height), heightMap(width, height), attrib(width, height), type(width, height), name(n) { +} + +Level::Builder::Builder(Builder&& other) : + squares(std::move(other.squares)), + heightMap(std::move(other.heightMap)), + attrib(std::move(other.attrib)), + type(std::move(other.type)), + creatures(std::move(other.creatures)), + entryMessage(other.entryMessage), + name(other.name) { +} + +bool Level::Builder::hasAttrib(Vec2 pos, SquareAttrib attr) { + CHECK(squares[pos] != nullptr); + return attrib[pos].count(attr); +} + +void Level::Builder::addAttrib(Vec2 pos, SquareAttrib attr) { + attrib[pos].insert(attr); +} + +void Level::Builder::removeAttrib(Vec2 pos, SquareAttrib attr) { + attrib[pos].erase(attr); +} + +Square* Level::Builder::getSquare(Vec2 pos) { + return squares[pos].get(); +} + +SquareType Level::Builder::getType(Vec2 pos) { + return type[pos]; +} + +void Level::Builder::putSquare(Vec2 pos, SquareType t, Optional at) { + squares[pos].reset(SquareFactory::get(t)); + squares[pos]->setPosition(pos); + if (at) + attrib[pos].insert(*at); + type[pos] = t; +} + +void Level::Builder::putSquare(Vec2 pos, SquareType t, vector attribs) { + squares[pos].reset(SquareFactory::get(t)); + squares[pos]->setPosition(pos); + for (auto at : attribs) + attrib[pos].insert(at); + type[pos] = t; +} + +void Level::Builder::putSquare(Vec2 pos, Square* square, SquareType t, Optional attr) { + square->setPosition(pos); + squares[pos].reset(std::move(square)); + if (attr) + attrib[pos].insert(*attr); + type[pos] = t; +} + +void Level::Builder::addLocation(Location* l) { + locations.push_back(l); +} + +void Level::Builder::setHeightMap(Vec2 pos, double h) { + heightMap[pos] = h; +} + +double Level::Builder::getHeightMap(Vec2 pos) { + return heightMap[pos]; +} + +void Level::Builder::setCovered(Vec2 pos) { + covered.insert(pos); +} + +void Level::Builder::putCreature(Vec2 pos, PCreature creature) { + creature->setPosition(pos); + creatures.push_back(NOTNULL(std::move(creature))); +} + +bool Level::Builder::canPutCreature(Vec2 pos, Creature* c) { + if (!squares[pos]->canEnter(c)) + return false; + for (PCreature& c : creatures) { + if (c->getPosition() == pos) + return false; + } + return true; +} + +void Level::Builder::setMessage(const string& message) { + entryMessage = message; +} + +Level* Level::Builder::build(Model* m, bool surface) { + for (Vec2 v : heightMap.getBounds()) { + squares[v]->setHeight(heightMap[v]); + if (covered.count(v) || !surface) { + Debug() << "Covered " << v; + squares[v]->setCovered(true); + } + } + Level* l = new Level(std::move(squares), m, locations, entryMessage, name); + for (PCreature& c : creatures) { + Vec2 pos = c->getPosition(); + l->addCreature(pos, std::move(c)); + } + return l; +} + +int Level::Builder::getWidth() { + return squares.getWidth(); +} + +int Level::Builder::getHeight() { + return squares.getHeight(); +} + +bool Level::inBounds(Vec2 pos) const { + return pos.inRectangle(getBounds()); +} + +Rectangle Level::getBounds() const { + return Rectangle(0, 0, getWidth(), getHeight()); +} + +int Level::getWidth() const { + return squares.getWidth(); +} + +int Level::getHeight() const { + return squares.getHeight(); +} + +const string& Level::getName() const { + return name; +} diff --git a/level.h b/level.h new file mode 100644 index 000000000..acaf085b5 --- /dev/null +++ b/level.h @@ -0,0 +1,232 @@ +#ifndef _LEVEL_H +#define _LEVEL_H + +#include +#include +#include +#include "util.h" +#include "time_queue.h" +#include "debug.h" +#include "view.h" +#include "field_of_view.h" +#include "square_factory.h" + +class Model; +class Square; +class View; +class Player; + + +/** A class representing a single level of the dungeon or the overworld. All events occuring on the level are performed by this class.*/ +class Level { + public: + + /** Checks if the creature can move to \paramname{direction}. This ensures + * that a subsequent call to #moveCreature will not fail.*/ + bool canMoveCreature(const Creature*, Vec2 direction) const; + + /** Moves the creature. Updates the creature's position.*/ + void moveCreature(Creature*, Vec2 direction); + + /** Swaps positions of two creatures. */ + void swapCreatures(Creature*, Creature*); + + /** Puts \paramname{creature} on \paramname{position}. \paramname{creature} ownership is assumed by the model.*/ + void addCreature(Vec2 position, PCreature creature); + + /** Puts the \paramname{creature} on \paramname{position}. */ + void putCreature(Vec2 position, Creature* creature); + + //@{ + /** Finds an appropriate square for the \paramname{creature} changing level from \paramname{direction}. + The square's method Square::isLandingSquare must return true for \paramname{direction}. + Returns the position of the stairs that were used. */ + Vec2 landCreature(StairDirection direction, StairKey key, Creature* creature); + Vec2 landCreature(StairDirection direction, StairKey key, PCreature creature); + //@} + + /** Lands the creature on the level randomly choosing one of the given squares. + Returns the position of the stairs that were used.*/ + Vec2 landCreature(vector landing, Creature* creature); + + /** Returns the landing squares for given direction and stair key. See Square::getLandingLink() */ + vector getLandingSquares(StairDirection, StairKey) const; + + /** Removes the creature from \paramname{position} from the level and model. The creature object is deleted.*/ + void killCreature(Creature*); + + /** Recalculates visibility data assuming that \paramname{changedSquare} has changed + its obstructing/non-obstructing attribute. */ + void updateVisibility(Vec2 changedSquare); + + /** Returns width of the level.*/ + int getWidth() const; + + /** Returns height of the level.*/ + int getHeight() const; + + /** Checks \paramname{pos} lies within the level's boundaries.*/ + bool inBounds(Vec2 pos) const; + + /** Returns the level's boundaries.*/ + Rectangle getBounds() const; + + /** Returns the name of the level. */ + const string& getName() const; + + //@{ + /** Returns the given square. \paramname{pos} must lie within the boundaries. */ + const Square* getSquare(Vec2 pos) const; + Square* getSquare(Vec2 pos); + //@} + + void replaceSquare(Vec2 pos, PSquare square); + + /** The given square's method Square::tick() will be called every turn. */ + void addTickingSquare(Vec2 pos); + + /** Returns all squares that must be ticked. */ + vector getTickingSquares() const; + + /** Moves the creature to a different level according to \paramname{direction}. */ + void changeLevel(StairDirection direction, StairKey key, Creature* c); + + /** Moves the creature to a given level. */ + void changeLevel(Level* destination, Vec2 landing, Creature* c); + + /** Performs a throw of the item, with all consequences of the event.*/ + void throwItem(PItem item, Attack attack, int maxDist, Vec2 position, Vec2 direction); + + /** Sets the creature that is assumed to be the player.*/ + void setPlayer(Creature* player); + + /** Sets the level to be rendered in the background with given offset.*/ + void setBackgroundLevel(const Level*, Vec2 offset); + + //@{ + /** Returns all creatures on this level. */ + const vector& getAllCreatures() const; + vector& getAllCreatures(); + //@} + + /** Checks whether one square is visible from the other. This function is not guaranteed to be simmetrical.*/ + bool canSee(Vec2 from, Vec2 to) const; + + /** Returns all tiles visible by a creature.*/ + vector getVisibleTiles(const Creature*) const; + + /** Checks if the player can see a given square.*/ + bool playerCanSee(Vec2 pos) const; + + /** Checks if the player can see a given creature.*/ + bool playerCanSee(const Creature*) const; + + /** Displays \paramname{playerCanSee} message if the player can see position \paramname{pos}, and \paramname{cannot} otherwise.*/ + void globalMessage(Vec2 position, const string& playerCanSee, const string& cannot = "") const; + + /** Returns the player creature.*/ + const Creature* getPlayer() const; + + /** Returns name of the given location. Returns empty string if none. **/ + const Location* getLocation(Vec2) const; + + const vector getAllLocations() const; + + /** Class used to initialize a level object.*/ + class Builder { + public: + /** Constructs a builder with given size and name. */ + Builder(int width, int height, const string& name); + + /** Move constructor.*/ + Builder(Builder&&); + + /** Returns a given square.*/ + Square* getSquare(Vec2); + + /** Checks if it's possible to put a creature on given square.*/ + bool canPutCreature(Vec2, Creature*); + + /** Puts a creatue on a given square. If the square is later changed to something else, the creature remains.*/ + void putCreature(Vec2, PCreature); + + /** Sets the message displayed when the player first enters the level.*/ + void setMessage(const string& message); + + /** Builds the level. The level will keep reference to the model. + \paramname{surface} tells if this level is on the Earth surface.*/ + Level* build(Model*, bool surface); + + /** Returns the width of the level.*/ + int getWidth(); + + /** Returns the height of the level.*/ + int getHeight(); + + //@{ + /** Puts a square on given position. Sets optional attributes of the square. The attributes remain if the square is changed.*/ + void putSquare(Vec2, SquareType, Optional = Nothing()); + void putSquare(Vec2, SquareType, vector attribs); + void putSquare(Vec2, Square*, SquareType, Optional = Nothing()); + //@} + + /** Returns the square type.*/ + SquareType getType(Vec2); + + /** Checks if the given square has an attribute.*/ + bool hasAttrib(Vec2 pos, SquareAttrib attr); + + /** Adds attribute to given square. The attribute will remain if the square is changed.*/ + void addAttrib(Vec2 pos, SquareAttrib attr); + + /** Removes attribute from given square.*/ + void removeAttrib(Vec2 pos, SquareAttrib attr); + + /** Sets the height of the given square.*/ + void setHeightMap(Vec2 pos, double h); + + /** Returns the height of the given square.*/ + double getHeightMap(Vec2 pos); + + /** Sets the location name for the given square. The name will remain if the square is changed.*/ + void addLocation(Location*); + + /** Marks given square as covered. The value will remain if square is changed.*/ + void setCovered(Vec2); + + private: + Table squares; + Table heightMap; + vector locations; + unordered_set covered; + Table> attrib; + Table type; + vector creatures; + string entryMessage; + string name; + }; + + typedef unique_ptr PBuilder; + + private: + Table squares; + map, vector> landingSquares; + vector locations; + vector tickingSquares; + vector creatures; + Model* model; + mutable FieldOfView fieldOfView; + string entryMessage; + string name; + Creature* player; + const Level* backgroundLevel = nullptr; + Vec2 backgroundOffset; + View* view; + + Level(Table s, Model*, vector, const string& message, const string& name); + + /** Notify relevant locations about creature position. */ + void notifyLocations(Creature*); +}; + +#endif diff --git a/level_generator.h b/level_generator.h new file mode 100644 index 000000000..26cc3d661 --- /dev/null +++ b/level_generator.h @@ -0,0 +1,21 @@ +#ifndef _LEVEL_GENERATOR +#define _LEVEL_GENERATOR + +#include +#include "util.h" +#include "level.h" +#include "square_factory.h" +#include "item_factory.h" +#include "creature_factory.h" + +class StaticLevelGenerator { + public: + + Level* createLevel(const char* filename, + SquareFactory* squareFactory, + ItemFactory* itemFactory, + CreatureFactory* createFactory); +}; + + +#endif diff --git a/level_maker.cpp b/level_maker.cpp new file mode 100644 index 000000000..df89ca8bd --- /dev/null +++ b/level_maker.cpp @@ -0,0 +1,1452 @@ +#include "stdafx.h" + +using namespace std; + + +class SquarePredicate { + public: + virtual bool apply(Level::Builder* builder, Vec2 pos) = 0; +}; + +class AttribPredicate : public SquarePredicate { + public: + AttribPredicate(SquareAttrib attr) : onAttr(attr) {} + + virtual bool apply(Level::Builder* builder, Vec2 pos) override { + return builder->hasAttrib(pos, onAttr); + } + + private: + SquareAttrib onAttr; +}; + +class TypePredicate : public SquarePredicate { + public: + TypePredicate(SquareType type) : onType(1, type) {} + + TypePredicate(vector types) : onType(types) {} + + virtual bool apply(Level::Builder* builder, Vec2 pos) override { + return contains(onType, builder->getType(pos)); + } + + private: + vector onType; +}; + +class AlwaysTrue : public SquarePredicate { + public: + virtual bool apply(Level::Builder* builder, Vec2 pos) override { + return true; + } +}; + +class RoomMaker : public LevelMaker { + public: + RoomMaker(int _minRooms,int _maxRooms, + int _minSize, int _maxSize, + SquareType _wallType, + Optional _onType, + LevelMaker* _shopMaker = nullptr, + bool _diggableCorners = false) : + minRooms(_minRooms), + maxRooms(_maxRooms), + minSize(_minSize), + maxSize(_maxSize), + wallType(_wallType), + squareType(_onType), + shopMaker(_shopMaker), + diggableCorners(_diggableCorners) {} + + virtual void make(Level::Builder* builder, Rectangle area) override { + int spaceBetween = 0; + Table taken(area.getKX(), area.getKY()); + for (Vec2 v : area) + taken[v] = squareType && squareType != builder->getType(v); + int rooms = Random.getRandom(minRooms, maxRooms); + int numShop = shopMaker ? Random.getRandom(rooms) : -1; + for (int i : Range(rooms)) { + Vec2 p, k; + bool good; + int cnt = 100; + do { + k = Vec2(Random.getRandom(minSize, maxSize), Random.getRandom(minSize, maxSize)); + p = Vec2(area.getPX() + spaceBetween + Random.getRandom(area.getW() - k.x - 2 * spaceBetween), + area.getPY() + spaceBetween + Random.getRandom(area.getH() - k.y - 2 * spaceBetween)); + good = true; + for (Vec2 v : Rectangle(k.x + 2 * spaceBetween, k.y + 2 * spaceBetween)) + if (taken[p + v - Vec2(spaceBetween,spaceBetween)]) { + good = false; + break; + } + } while (!good && --cnt > 0); + if (cnt == 0) { + Debug() << "Placed only " << i << " rooms out of " << rooms; + break; + } + for (Vec2 v : Rectangle(k)) + taken[v + p] = 1; + for (Vec2 v : Rectangle(k - Vec2(2, 2))) + builder->putSquare(p + v + Vec2(1, 1), SquareType::FLOOR, SquareAttrib::ROOM); + for (int i : Range(p.x, p.x + k.x)) { + if (i == p.x || i == p.x + k.x - 1) { + builder->putSquare(Vec2(i, p.y), wallType, + !diggableCorners ? Optional(SquareAttrib::NO_DIG) : Nothing()); + builder->putSquare(Vec2(i, p.y + k.y - 1), wallType, + !diggableCorners ? Optional(SquareAttrib::NO_DIG) : Nothing()); + } else { + builder->putSquare(Vec2(i, p.y), wallType); + builder->putSquare(Vec2(i, p.y + k.y - 1), wallType); + } + } + for (int i : Range(p.y, p.y + k.y)) { + if (i > p.y && i < p.y + k.y - 1) { + builder->putSquare(Vec2(p.x, i), wallType); + builder->putSquare(Vec2(p.x + k.x - 1, i), wallType); + } + } + if (i == numShop) + shopMaker->make(builder, Rectangle(p.x, p.y, p.x + k.x, p.y + k.y)); + } + } + + private: + int minRooms; + int maxRooms; + int minSize; + int maxSize; + SquareType wallType; + Optional squareType; + LevelMaker* shopMaker; + bool diggableCorners; +}; + +class Connector : public LevelMaker { + public: + Connector(initializer_list door) : doorProb(door) { + CHECKEQ((int) door.size(), 3); + } + double getValue(Level::Builder* builder, Vec2 pos, Rectangle area) { + if (builder->getSquare(pos)->canEnter(Creature::getDefault())) + return 1; + if (builder->hasAttrib(pos, SquareAttrib::LAKE)) + return 15; + if (builder->hasAttrib(pos, SquareAttrib::RIVER)) + return 5; + if (builder->hasAttrib(pos, SquareAttrib::NO_DIG)) + return ShortestPath::infinity; + int numCorners = 0; + int numTotal = 0; + for (Vec2 v : Vec2::directions8()) + if ((pos + v).inRectangle(area) && builder->getSquare(pos + v)->canEnter(Creature::getDefault())) { + if (abs(v.x) == abs(v.y)) + ++numCorners; + ++numTotal; + } + if (numCorners == 1) + return 1000; + if (numTotal - numCorners > 1) + return 5; + return 3; + } + + void connect(Level::Builder* builder, Vec2 p1, Vec2 p2, Rectangle area) { + ShortestPath path(area, + [builder, this, &area](Vec2 pos) { return getValue(builder, pos, area); }, + [] (Vec2 v) { return v.length4(); }, + Vec2::directions4(true), p1 ,p2); + Vec2 prev(-100, -100); + for (Vec2 v = p2; v != p1; v = path.getNextMove(v)) { + if (!builder->getSquare(v)->canEnter(Creature::getDefault())) { + char sym; + SquareType newType = SquareType(0); + switch (builder->getType(v)) { + case SquareType::ROCK_WALL: + newType = chooseRandom({ + SquareType::PATH, + SquareType::DOOR, + SquareType::SECRET_PASS}, doorProb); + break; + case SquareType::ABYSS: + case SquareType::WATER: + case SquareType::MAGMA: + newType = SquareType::BRIDGE; + break; + case SquareType::YELLOW_WALL: + case SquareType::BLACK_WALL: + newType = SquareType::PATH; + break; + default: + Debug(FATAL) << "Unhandled square type " << (int)builder->getType(v); + } + builder->putSquare(v, newType); + } + if (builder->getType(v) == SquareType::PATH || + builder->getType(v) == SquareType::BRIDGE || + builder->getType(v) == SquareType::DOOR || + builder->getType(v) == SquareType::SECRET_PASS) { + builder->getSquare(v)->addTravelDir(path.getNextMove(v) - v); + if (prev.x > -100) + builder->getSquare(v)->addTravelDir(prev - v); + } + prev = v; + } + } + + virtual void make(Level::Builder* builder, Rectangle area) override { + int dead_end = 1000000; + Vec2 p1, p2; + for (int i : Range(30)) { + do { + p1 = Vec2(Random.getRandom(area.getPX(), area.getKX()), Random.getRandom(area.getPY(), area.getKY())); + } while (!builder->getSquare(p1)->canEnter(Creature::getDefault()) && !Random.roll(dead_end)); + do { + p2 = Vec2(Random.getRandom(area.getPX(), area.getKX()), Random.getRandom(area.getPY(), area.getKY())); + } while (!builder->getSquare(p2)->canEnter(Creature::getDefault()) && !Random.roll(dead_end)); + connect(builder, p1, p2, area); + } + ShortestPath connections(area, + [builder](Vec2 pos)->double { + if (builder->getSquare(pos)->canEnter(Creature::getDefault())) + return 1; + else + return ShortestPath::infinity;}, + [] (Vec2 v) { return v.length4(); }, + Vec2::directions8(), p1, p2); + for (Vec2 v : area) + if (builder->getSquare(v)->canEnter(Creature::getDefault()) && !connections.isReachable(v)) { + connect(builder, p1, v, area); + } + } + + private: + initializer_list doorProb; +}; + +class DungeonFeatures : public LevelMaker { + public: + DungeonFeatures(SquareType _onType, map > _squareTypes, + Optional setAttr = Nothing()): + squareTypes(_squareTypes), onType(_onType), attr(setAttr) { + } + + virtual void make(Level::Builder* builder, Rectangle area) override { + vector available; + for (Vec2 v : area) + if (builder->getType(v) == onType) + available.push_back(v); + int maxTotal = 0; + for (auto iter : squareTypes) { + maxTotal += iter.second.second - 1; + } + CHECK(maxTotal <= available.size()) << "Not enough available squares " << (int)available.size() + << " for " << maxTotal << " features."; + for (auto iter : squareTypes) { + int num = Random.getRandom(iter.second.first, iter.second.second); + for (int i : Range(num)) { + int vInd = Random.getRandom(available.size()); + builder->putSquare(available[vInd], iter.first); + if (attr) + builder->addAttrib(available[vInd], *attr); + removeIndex(available, vInd); + } + } + } + + private: + map > squareTypes; + SquareType onType; + Optional attr; +}; + +class Creatures : public LevelMaker { + public: + Creatures(CreatureFactory cf, int minc, int maxc, MonsterAIFactory actorF, Optional type = Nothing()) : + cfactory(cf), minCreature(minc), maxCreature(maxc), actorFactory(actorF), squareType(type) {} + + virtual void make(Level::Builder* builder, Rectangle area) override { + int numCreature = Random.getRandom(minCreature, maxCreature); + Table taken(area.getKX(), area.getKY()); + for (int i : Range(numCreature)) { + PCreature creature = cfactory.random(actorFactory); + Vec2 pos; + do { + pos = Vec2(Random.getRandom(area.getPX(), area.getKX()), Random.getRandom(area.getPY(), area.getKY())); + } while (!builder->canPutCreature(pos, creature.get()) + || (squareType && builder->getType(pos) != *squareType)); + builder->putCreature(pos, std::move(creature)); + taken[pos] = 1; + } + } + + private: + CreatureFactory cfactory; + int minCreature; + int maxCreature; + MonsterAIFactory actorFactory; + Optional squareType; +}; + +class Items : public LevelMaker { + public: + Items(ItemFactory _factory, SquareType _onType, int minc, int maxc) : + factory(_factory), onType(_onType), minItem(minc), maxItem(maxc) {} + + virtual void make(Level::Builder* builder, Rectangle area) override { + int numItem = Random.getRandom(minItem, maxItem); + for (int i : Range(numItem)) { + Vec2 pos; + do { + pos = Vec2(Random.getRandom(area.getPX(), area.getKX()), Random.getRandom(area.getPY(), area.getKY())); + } while (builder->getType(pos) != onType); + builder->getSquare(pos)->dropItem(factory.random()); + } + } + + private: + ItemFactory factory; + SquareType onType; + int minItem; + int maxItem; +}; + +class River : public LevelMaker { + public: + River(int _width, SquareType _squareType) : width(_width), squareType(_squareType){} + + virtual void make(Level::Builder* builder, Rectangle area) override { + int wind = 5; + int middle = (area.getPX() + area.getKX()) / 2; + int px = Random.getRandom(middle - wind, middle + width); + int kx = px + Random.getRandom(-wind, wind); // Random.getRandom(area.getPX(), area.getKX()) - width; + if (kx < 0) + kx = 0; + if (kx >= area.getKX() - width) + kx = area.getKX() - width - 1; + int tot = 5; + for (int h : Range(tot)) { + int height = area.getPY() * (tot - h) / tot + area.getKY() * h / tot; + int height2 = area.getPY() * (tot - h - 1) / tot + area.getKY() * (h + 1) / tot; + vector line = straightLine(px, height, kx, (h == tot - 1) ? area.getKY() : height2); + for (Vec2 v : line) + for (int i : Range(width)) + builder->putSquare(v + Vec2(i, 0), squareType, SquareAttrib::RIVER); + px = kx; + kx = px + Random.getRandom(-wind, wind); + if (kx < 0) + kx = 0; + if (kx >= area.getKX() - width) + kx = area.getKX() - width - 1; + } + } + + private: + + vector straightLine(int x0, int y0, int x1, int y1){ + Debug() << "Line " << x1 << " " << y0 << " " << x1 << " " << y1; + int dx = x1 - x0; + int dy = y1 - y0; + vector ret{ Vec2(x0, y0)}; + if (abs(dx) > abs(dy)) { // slope < 1 + double m = (double) dy / (double) dx; // compute slope + double b = y0 - m*x0; + dx = (dx < 0) ? -1 : 1; + while (x0+dx != x1) { + x0 += dx; + ret.push_back(Vec2(x0,(int)roundf(m*x0+b))); + } + } else + if (dy != 0) { // slope >= 1 + double m = (double) dx / (double) dy; // compute slope + double b = x0 - m*y0; + dy = (dy < 0) ? -1 : 1; + while (y0+dy != y1) { + y0 += dy; + ret.push_back(Vec2((int)round(m*y0+b),y0)); + } + } + return ret; + } + + int width; + SquareType squareType; +}; + +/*class MountainRiver : public LevelMaker { + public: + MountainRiver(int num, char w) : number(num), water(w) {} + virtual void make(Level::Builder* builder, Rectangle area) override { + for (int i : Range(number)) { + Vec2 pos(Random.getRandom(area.getPX(), area.getKX()), + Random.getRandom(area.getPY(), area.getKY())); + while (1) { + builder->putSquare(pos, SquareFactory::fromSymbol(water), SquareType::RIVER); + double h = builder->getHeightMap(pos); + double lowest = 10000000; + Vec2 dir; + for (Vec2 v : Vec2::neighbors8(true)) { + double d; + if ((pos + v).inRectangle(area) && (d = builder->getHeightMap(pos + v)) < lowest && builder->getType(pos + v) != SquareType::RIVER) { + lowest = d; + dir = v; + } + } + if (lowest > 100000) + break;; + // if (lowest < h) { + pos = pos + dir; + // } else + // break; + } + } + } + + private: + int number; + char water; +};*/ + +class Blob : public LevelMaker { + public: + Blob(SquareType insideSquare, Optional borderSquare = Nothing(), + Optional _attrib = Nothing()) : + inside(insideSquare), border(borderSquare), attrib(_attrib) {} + + void addSquare(Level::Builder* builder, Vec2 pos) { + builder->putSquare(pos, inside, attrib); + if (border) + for (Vec2 dir : pos.neighbors8()) + if (builder->getType(dir) != inside) + builder->putSquare(dir, *border, attrib); + } + + virtual void make(Level::Builder* builder, Rectangle area) override { + vector squares; + Table isInside(area, 0); + Vec2 center((area.getKX() + area.getPX()) / 2, (area.getKY() + area.getPY()) / 2); + squares.push_back(center); + addSquare(builder, center); + int maxSquares = area.getW() * area.getH() / 3; + int numSquares = 0; + isInside[center] = 1; + while (1) { + Vec2 pos = squares[Random.getRandom(squares.size())]; + for (Vec2 next : pos.neighbors4(true)) { + if (next.inRectangle(Rectangle(area.getPX() + 1, area.getPY() + 1, area.getKX() - 1, area.getKY() - 1)) + && !isInside[next]) { + Vec2 proj = next - center; + proj.y *= area.getW(); + proj.y /= area.getH(); + if (Random.getDouble() <= 1. - proj.lengthD() / (area.getW() / 2)) { + addSquare(builder, next); + squares.push_back(next); + isInside[next] = 1; + if (++numSquares >= maxSquares) + return; + } + break; + } + } + } + } + + private: + SquareType inside; + Optional border; + Optional attrib; +}; + +class Empty : public LevelMaker { + public: + Empty(SquareType s) : square(s) {} + + virtual void make(Level::Builder* builder, Rectangle area) override { + for (Vec2 v : area) + builder->putSquare(v, square); + } + + private: + SquareType square; +}; + +Vec2 LevelMaker::getRandomExit(Rectangle rect) { + CHECK(rect.getW() > 2 && rect.getH() > 2); + int w1 = Random.getRandom(2); + int w2 = Random.getRandom(2); + int d1 = Random.getRandom(1, rect.getW() - 1); + int d2 = Random.getRandom(1, rect.getH() - 1); + return Vec2( + rect.getPX() + d1 * w1 + (1 - w1) * w2 * (rect.getW() - 1), + rect.getPY() + d2 * (1 - w1) + w1 * w2 * (rect.getH() - 1)); +} + +class Buildings : public LevelMaker { + public: + Buildings(int buildings, + int _minSize, int _maxSize, + SquareType _wall, SquareType _floor, SquareType _door, + bool _align, + vector _insideMakers, + bool _roadConnection = true) : + numBuildings(buildings), + minSize(_minSize), maxSize(_maxSize), + align(_align), + wall(_wall), door(_door), floor(_floor), + insideMakers(_insideMakers), + roadConnection(_roadConnection) {} + + virtual void make(Level::Builder* builder, Rectangle area) override { + Table filled(area); + int width = area.getW(); + int height = area.getH(); + for (Vec2 v : area) + filled[v] = 0; + int sizeVar = 1; + int spaceBetween = 1; + int alignHeight = 0; + if (align) { + alignHeight = height / 2 - 2 + Random.getRandom(5); + } + int nextw = -1; + for (int i = 0; i < numBuildings; ++i) { + bool spaceOk = true; + int w, h, px, py; + int cnt = 10000; + bool buildingRow; + do { + buildingRow = Random.getRandom(2); + spaceOk = true; + w = Random.getRandom(minSize, maxSize); + h = Random.getRandom(minSize, maxSize); + if (nextw > -1 && nextw + w < area.getKX()) { + px = nextw; + nextw = -1; + } else + px = area.getPX() + Random.getRandom(width - w - 2 * spaceBetween + 1) + spaceBetween; + if (!align) + py = area.getPY() + Random.getRandom(height - h - 2 * spaceBetween + 1) + spaceBetween; + else { + py = area.getPY() + (buildingRow == 1 ? alignHeight - h - 1 : alignHeight + 2); + if (py + h >= area.getKY() || py < area.getPY()) { + spaceOk = false; + continue; + } + } + Vec2 tmp(px - spaceBetween, py - spaceBetween); + for (Vec2 v : Rectangle(w + spaceBetween * 2 + 1, h + spaceBetween * 2 + 1)) + if (!(tmp + v).inRectangle(area) || filled[px + v.x - spaceBetween][py + v.y - spaceBetween]) { + spaceOk = false; + break; + } + } while (!spaceOk && --cnt > 0); + CHECK(cnt > 0) << "Failed to add " << numBuildings - i << " buildings out of " << numBuildings; + if (Random.roll(1)) + nextw = px + w; + for (Vec2 v : Rectangle(w + 1, h + 1)) { + filled[Vec2(px, py) + v] = true; + builder->putSquare(Vec2(px, py) + v, wall); + builder->setCovered(Vec2(px, py) + v); + } + for (Vec2 v : Rectangle(w - 1, h - 1)) { + builder->putSquare(Vec2(px + 1, py + 1) + v, floor, SquareAttrib::ROOM); + } + Vec2 doorLoc = align ? + Vec2(px + Random.getRandom(1, w), + py + (buildingRow * h)) : + getRandomExit(Rectangle(px, py, px + w + 1, py + h + 1)); + builder->putSquare(doorLoc, door); + if (i < insideMakers.size()) + insideMakers[i]->make(builder, Rectangle(px, py, px + w + 1, py + h + 1)); + } + if (roadConnection) + builder->putSquare(Vec2((area.getPX() + area.getKX()) / 2, area.getPY() + alignHeight), + SquareType::PATH, SquareAttrib::CONNECT); + } + + private: + int numBuildings; + int minSize; + int maxSize; + bool align; + SquareType wall, door, floor; + vector insideMakers; + bool roadConnection; +}; + +class BorderGuard : public LevelMaker { + public: + + BorderGuard(LevelMaker* inside, SquareType _type = SquareType::BORDER_GUARD) : type(_type), insideMaker(inside) {} + + virtual void make(Level::Builder* builder, Rectangle area) override { + for (int i : Range(area.getPX(), area.getKX())) { + builder->putSquare(Vec2(i, area.getPY()), type); + builder->putSquare(Vec2(i, area.getKY() - 1), type); + } + for (int i : Range(area.getPY(), area.getKY())) { + builder->putSquare(Vec2(area.getPX(), i), type); + builder->putSquare(Vec2(area.getKX() - 1, i), type); + } + insideMaker->make(builder, Rectangle(area.getPX() + 1, area.getPY() + 1, area.getKX() - 1, area.getKY() - 1)); + } + + private: + SquareType type; + LevelMaker* insideMaker; + +}; + +class MakerQueue : public LevelMaker { + public: + MakerQueue() = default; + MakerQueue(vector _makers) : makers(_makers) {} + + void addMaker(LevelMaker* maker) { + makers.push_back(maker); + } + + virtual void make(Level::Builder* builder, Rectangle area) override { + for (LevelMaker* maker : makers) + maker->make(builder, area); + } + + private: + vector makers; +}; + +class RandomLocations : public LevelMaker { + public: + RandomLocations(const vector& _insideMakers, + const vector>& _sizes, SquarePredicate* pred, bool _separate = true) + : insideMakers(_insideMakers), sizes(_sizes), predicate(pred), separate(_separate) { + CHECK(insideMakers.size() == sizes.size()); + } + + virtual void make(Level::Builder* builder, Rectangle area) override { + /* if (onAttr) { + string out; + for (int i : Range(area.getPX(), area.getKX())) { + for (int j : Range(area.getPY(), area.getKY())) + out.append(!builder->hasAttrib(Vec2(i, j), *onAttr) ? "0" : "1"); + Debug() << out; + out = ""; + } + }*/ + makeCnt(builder, area, 100); + } + + void makeCnt(Level::Builder* builder, Rectangle area, int tries) const { + vector occupied; + for (int i : All(insideMakers)) { + LevelMaker* maker = insideMakers[i]; + int width = sizes[i].first; + int height = sizes[i].second; + CHECK(width <= area.getW() && height <= area.getH()); + int px; + int py; + int cnt = 10000; + bool ok; + do { + ok = true; + px = area.getPX() + Random.getRandom(area.getW() - width); + py = area.getPY() + Random.getRandom(area.getH() - height); + if (!predicate->apply(builder, Vec2(px, py)) || + !predicate->apply(builder, Vec2(px + width - 1, py)) || + !predicate->apply(builder, Vec2(px + width - 1, py + height - 1)) || + !predicate->apply(builder, Vec2(px, py + height - 1))) + ok = false; + else + if (separate) + for (Rectangle r : occupied) + if (r.intersects(Rectangle(px, py, px + width, py + height))) { + ok = false; + break; + } + } while (!ok && --cnt > 0); + if (cnt == 0) { + if (tries > 0) { + makeCnt(builder, area, tries - 1); + return; + } + else { + Debug(FATAL) << "Failed to find free space for " << (int)sizes.size() << " areas"; + } + } + Rectangle bounds(px, py, px + width, py + height); + occupied.push_back(bounds); + } + CHECK(insideMakers.size() == occupied.size()); + for (int i : All(insideMakers)) + insideMakers[i]->make(builder, occupied[i]); + } + + private: + vector insideMakers; + vector> sizes; + SquarePredicate* predicate; + bool separate; +}; + +class Margin : public LevelMaker { + public: + Margin(int s, LevelMaker* in) : size(s), inside(in) {} + + virtual void make(Level::Builder* builder, Rectangle area) override { + CHECK(area.getW() > 2 * size && area.getH() > 2 * size); + inside->make(builder, Rectangle( + area.getPX() + size, + area.getPY() + size, + area.getKX() - size, + area.getKY() - size)); + } + + private: + int size; + LevelMaker* inside; +}; + +class Shrine : public LevelMaker { + public: + Shrine(Deity* _deity, SquareType _floorType, SquarePredicate* wallPred, + SquareType _newWall, LevelMaker* _locationMaker) : deity(_deity), floorType(_floorType), + wallPredicate(wallPred), newWall(_newWall), locationMaker(_locationMaker) {} + + virtual void make(Level::Builder* builder, Rectangle area) override { + for (int i : Range(10009)) { + Vec2 pos = area.randomVec2(); + if (!wallPredicate->apply(builder, pos)) + continue; + int numFloor = 0; + int numWall = 0; + for (Vec2 fl : pos.neighbors8()) { + if (builder->getType(fl) == floorType) + ++numFloor; + if (wallPredicate->apply(builder, fl)) + ++numWall; + } + if (numFloor < 3 || numWall < 5) { + Debug() << "Numbers " << numFloor << " " << numWall; + continue; + } + builder->putSquare(pos, SquareFactory::getAltar(deity), SquareType::ALTAR); + for (Vec2 fl : pos.neighbors8()) + if (wallPredicate->apply(builder, fl)) + builder->putSquare(fl, newWall); + if (locationMaker) + locationMaker->make(builder, Rectangle(pos - Vec2(1, 1), pos + Vec2(2, 2))); + Debug() << "Created a shrine of " << deity->getHabitatString(); + return; + } + Debug() << "Didn't find a good place for the shrine of " << deity->getHabitatString(); + } + + private: + Deity* deity; + SquareType floorType; + SquarePredicate* wallPredicate; + SquareType newWall; + LevelMaker* locationMaker; +}; + +void addAvg(int x, int y, const Table& wys, double& avg, int& num) { + Vec2 pos(x, y); + if (pos.inRectangle(wys.getBounds())) { + avg += wys[pos]; + ++num; + } +} + +Table genNoiseMap(Rectangle area, bool lowMiddle, double varianceMult) { + int width = 1; + while (width < area.getW() - 1 || width < area.getH() - 1) + width *= 2; + ++width; + Table wys(width, width); + wys[0][0] = 1; + wys[0][width - 1] = 1; + wys[width - 1][0] = 1; + wys[width - 1][width - 1] = 1; + wys[(width - 1) / 2][(width - 1) / 2] = lowMiddle ? 0 : 1; + + double variance = 0.5; + double heightDiff = 0.1; + for (int a = width - 1; a >= 2; a /= 2) { + if (a < width - 1) + for (Vec2 pos1 : Rectangle((width - 1) / a, (width - 1) / a)) { + Vec2 pos = pos1 * a; + double avg = (wys[pos] + wys[pos.x + a][pos.y] + wys[pos.x][pos.y + a] + wys[pos.x + a][pos.y + a]) / 4; + wys[pos.x + a / 2][pos.y + a / 2] = + avg + variance * (Random.getDouble() * 2 - 1); + } + for (Vec2 pos1 : Rectangle((width - 1) / a, (width - 1) / a + 1)) { + Vec2 pos = pos1 * a; + double avg = 0; + int num = 0; + addAvg(pos.x + a / 2, pos.y - a / 2, wys, avg, num); + addAvg(pos.x, pos.y, wys, avg, num); + addAvg(pos.x + a, pos.y, wys, avg, num); + addAvg(pos.x + a / 2, pos.y + a / 2, wys, avg, num); + wys[pos.x + a / 2][pos.y] = + avg / num + variance * (Random.getDouble() * 2 - 1); + } + for (Vec2 pos1 : Rectangle((width - 1) / a + 1, (width - 1) / a)) { + Vec2 pos = pos1 * a; + double avg = 0; + int num = 0; + addAvg(pos.x - a / 2, pos.y + a / 2, wys, avg, num); + addAvg(pos.x, pos.y, wys, avg, num); + addAvg(pos.x, pos.y + a , wys, avg, num); + addAvg(pos.x + a / 2, pos.y + a / 2, wys, avg, num); + wys[pos.x][pos.y + a / 2] = + avg / num + variance * (Random.getDouble() * 2 - 1); + } + variance *= varianceMult; + } + Table ret(area); + Vec2 offset(area.getPX(), area.getPY()); + for (Vec2 v : area) { + Vec2 lv((v.x - offset.x) * width / area.getW(), (v.y - offset.y) * width / area.getH()); + ret[v] = wys[lv]; + } + return ret; +} + +vector sortedValues(const Table& t) { + vector values; + for (Vec2 v : t.getBounds()) { + values.push_back(t[v]); + } + sort(values.begin(), values.end()); +/* vector tmp(values); + unique(tmp.begin(), tmp.end()); + string out; + for (double d : values) + out.append(convertToString(d) + " "); + Debug() << (int)tmp.size() << " unique values out of " << (int)values.size() << " " << out;*/ + return values; +} + +class Mountains : public LevelMaker { + public: + Mountains(double r) : ratio(r) {} + + + virtual void make(Level::Builder* builder, Rectangle area) override { + Table wys = genNoiseMap(area, true, 0.7); + vector values = sortedValues(wys); + double cutOffValHill = values[(int)(ratio * double(values.size()))]; + double cutOffVal = values[(int)((0.5 + ratio) / 1.5 * double(values.size()))]; + double cutOffValSnow = values[(int)((3. + ratio) / 4. * double(values.size()))]; + int gCnt = 0, mCnt = 0, hCnt = 0, lCnt = 0; + for (Vec2 v : area) { + builder->setHeightMap(v, wys[v]); + if (wys[v] > cutOffValSnow) { + builder->putSquare(v, SquareType::GLACIER, SquareAttrib::ROAD_CUT_THRU); + ++gCnt; + } + else if (wys[v] > cutOffVal) { + builder->putSquare(v, SquareType::MOUNTAIN, {SquareAttrib::MOUNTAIN, SquareAttrib::ROAD_CUT_THRU}); + ++mCnt; + } + else if (wys[v] > cutOffValHill) { + builder->putSquare(v, SquareType::HILL, SquareAttrib::HILL); + ++hCnt; + } + else { + builder->addAttrib(v, SquareAttrib::LOWLAND); + ++lCnt; + } + } + Debug() << "Terrain distribution " << gCnt << " glacier, " << mCnt << " mountain, " << hCnt << " hill, " << lCnt << " lowland"; + } + + private: + double ratio; +}; + +class Roads : public LevelMaker { + public: + Roads(SquareType roadSquare) : square(roadSquare) {} + + double getValue(Level::Builder* builder, Vec2 pos) { + if (!builder->getSquare(pos)->canEnter(Creature::getDefault()) && + !builder->hasAttrib(pos, SquareAttrib::ROAD_CUT_THRU)) + return ShortestPath::infinity; + SquareType type = builder->getType(pos); + if (type == SquareType::PATH) + return 0.1; + return pow(1 + builder->getHeightMap(pos), 2); + } + + virtual void make(Level::Builder* builder, Rectangle area) override { + vector points; + for (Vec2 v : area) + if (builder->hasAttrib(v, SquareAttrib::CONNECT)) { + points.push_back(v); + Debug() << "Connecting point " << v; + } + for (int ind : Range(1, points.size())) { + Vec2 p1 = points[ind]; + Vec2 p2 = points[ind - 1]; + ShortestPath path(area, + [builder, this, &area](Vec2 pos) { return getValue(builder, pos); }, + [] (Vec2 v) { return v.length4(); }, + Vec2::directions4(true), p1 ,p2); + Vec2 prev(-1, -1); + for (Vec2 v = p2; v != p1; v = path.getNextMove(v)) { + if (v != p2 && v != p1 && builder->getType(v) != SquareType::PATH) + builder->putSquare(v, SquareType::PATH); + if (prev.x > -1) + builder->getSquare(v)->addTravelDir(prev - v); + builder->getSquare(v)->addTravelDir(path.getNextMove(v) - v); + prev = v; + } + builder->getSquare(p1)->addTravelDir(prev - p1); + } + } + + private: + SquareType square; +}; + +class StartingPos : public LevelMaker { + public: + + StartingPos(SquareType type) : squareType(type) {} + + virtual void make(Level::Builder* builder, Rectangle area) override { + for (Vec2 pos : area) + if (builder->getType(pos) == squareType) + builder->getSquare(pos)->setLandingLink(StairDirection::UP, StairKey::PLAYER_SPAWN); + } + + private: + SquareType squareType; +}; + +class Vegetation : public LevelMaker { + public: + Vegetation(double _ratio, double _density, SquareType _onType, vector _types, vector _probs) + : ratio(_ratio), density(_density), types(_types), probs(_probs), onType(_onType) {} + + virtual void make(Level::Builder* builder, Rectangle area) override { + Table wys = genNoiseMap(area, false, 0.9); + vector values = sortedValues(wys); + double cutoff = values[values.size() * ratio]; + for (Vec2 v : area) + if (builder->getType(v) == onType && wys[v] < cutoff && Random.getDouble() <= density) + builder->putSquare(v, chooseRandom(types, probs)); + } + + private: + double ratio; + double density; + vector types; + vector probs; + SquareType onType; +}; + +class LocationMaker : public LevelMaker { + public: + LocationMaker(Location* l) : location(l) {} + + virtual void make(Level::Builder* builder, Rectangle area) override { + location->setBounds(area); + builder->addLocation(location); + } + + private: + Location* location; +}; + +class AddAttrib : public LevelMaker { + public: + AddAttrib(SquareAttrib attr, bool _remove = false) : attrib(attr), remove(_remove) {} + + virtual void make(Level::Builder* builder, Rectangle area) override { + for (Vec2 v : area) + if (!remove) + builder->addAttrib(v, attrib); + else + builder->removeAttrib(v, attrib); + } + + private: + SquareAttrib attrib; + bool remove; +}; + +class FlockAndLeader : public LevelMaker { + public: + FlockAndLeader(CreatureId _leader, CreatureId _flock, Tribe* _tribe, int _minFlock, int _maxFlock) : + leaderId(_leader), flockId(_flock), tribe(_tribe), minFlock(_minFlock), maxFlock(_maxFlock) { + } + + virtual void make(Level::Builder* builder, Rectangle area) override { + int num = Random.getRandom(minFlock, maxFlock); + PCreature leader = CreatureFactory::fromId(leaderId, tribe); + vector creatures = CreatureFactory::getFlock(num, flockId, leader.get()); + creatures.push_back(std::move(leader)); + for (PCreature& creature : creatures) { + Vec2 pos; + int cnt = 100; + do { + pos = area.randomVec2(); + } while (!builder->canPutCreature(pos, creature.get()) && --cnt > 0); + CHECK(cnt > 0) << "Can't find square for flock"; + builder->putCreature(pos, std::move(creature)); + } + } + + private: + CreatureId leaderId, flockId; + Tribe* tribe; + int minFlock, maxFlock; +}; + +class Stairs : public LevelMaker { + public: + Stairs(StairDirection dir, StairKey k, SquareType _onType, Optional _setAttr = Nothing()) : + direction(dir), key(k), onType(_onType), setAttr(_setAttr) {} + + virtual void make(Level::Builder* builder, Rectangle area) override { + vector pos; + for (Vec2 v : area) + if (builder->getType(v) == onType) + pos.push_back(v); + CHECK(pos.size() > 0) << "Couldn't find position for stairs " << area; + SquareType type = direction == StairDirection::DOWN ? SquareType::DOWN_STAIRS : SquareType::UP_STAIRS; + builder->putSquare(pos[Random.getRandom(pos.size())], SquareFactory::getStairs(direction, key), type, setAttr); + } + + private: + StairDirection direction; + StairKey key; + SquareType onType; + Optional setAttr; +}; + +class ShopMaker : public LevelMaker { + public: + ShopMaker(ItemFactory _factory, Tribe* _tribe, int _numItems) + : factory(_factory), tribe(_tribe), numItems(_numItems) {} + + virtual void make(Level::Builder* builder, Rectangle area) override { + Location *loc = new Location(); + builder->addLocation(loc); + loc->setBounds(area); + PCreature shopkeeper = CreatureFactory::getShopkeeper(loc, tribe); + vector pos; + for (Vec2 v : area) + if (builder->getSquare(v)->canEnter(shopkeeper.get()) && builder->getType(v) == SquareType::FLOOR) + pos.push_back(v); + builder->putCreature(pos[Random.getRandom(pos.size())], std::move(shopkeeper)); + for (int i : Range(numItems)) { + Vec2 v = pos[Random.getRandom(pos.size())]; + builder->getSquare(v)->dropItem(factory.random()); + } + } + + private: + ItemFactory factory; + Tribe* tribe; + int numItems; +}; + +class LevelExit : public LevelMaker { + public: + LevelExit(SquareType _exitType, Optional _attrib = Nothing()) + : exitType(_exitType), attrib(_attrib) {} + + virtual void make(Level::Builder* builder, Rectangle area) override { + builder->putSquare(getRandomExit(area), exitType, attrib); + } + + private: + SquareType exitType; + Optional attrib; +}; + +class Division : public LevelMaker { + public: + Division(double _vRatio, double _hRatio, + LevelMaker* _upperLeft, LevelMaker* _upperRight, LevelMaker* _lowerLeft, LevelMaker* _lowerRight) : + vRatio(_vRatio), hRatio(_hRatio), + upperLeft(_upperLeft), upperRight(_upperRight), lowerLeft(_lowerLeft), lowerRight(_lowerRight) {} + + virtual void make(Level::Builder* builder, Rectangle area) override { + int vDiv = area.getPY() + min(area.getH() - 1, max(1, (int) (vRatio * area.getH()))); + int hDiv = area.getPX() + min(area.getW() - 1, max(1, (int) (vRatio * area.getW()))); + if (upperLeft) + upperLeft->make(builder, Rectangle(area.getPX(), area.getPY(), hDiv, vDiv)); + if (upperRight) + upperRight->make(builder, Rectangle(hDiv, area.getPY(), area.getKX(), vDiv)); + if (lowerLeft) + lowerLeft->make(builder, Rectangle(area.getPX(), vDiv, hDiv, area.getKY())); + if (lowerRight) + lowerRight->make(builder, Rectangle(hDiv, vDiv, area.getKX(), area.getKY())); + } + + private: + double vRatio, hRatio; + LevelMaker *upperLeft, *upperRight, *lowerLeft, *lowerRight; +}; + +class Circle : public LevelMaker { + public: + Circle(ItemId _item) : item(_item) {} + + virtual void make(Level::Builder* builder, Rectangle area) override { + Vec2 center = area.middle(); + double r = min(area.getH(), area.getW()) / 2 - 1; + Vec2 lastPos; + for (double a = 0; a < 3.1415 * 2; a += Random.getDouble() * r / 10) { + Vec2 pos = center + Vec2(sin(a) * r, cos(a) * r); + if (pos != lastPos) { + builder->getSquare(pos)->dropItem(ItemFactory::fromId(item)); + lastPos = pos; + } + } + } + + private: + ItemId item; +}; + +LevelMaker* underground() { + MakerQueue* queue = new MakerQueue(); + if (Random.roll(1)) { + LevelMaker* cavern = new Blob(SquareType::PATH); + vector vCavern; + vector> sizes; + int minSize = Random.getRandom(5, 15); + int maxSize = minSize + Random.getRandom(3, 10); + for (int i : Range(sqrt(Random.getRandom(4, 100)))) { + int size = Random.getRandom(minSize, maxSize); + sizes.push_back(make_pair(size, size)); + vCavern.push_back(cavern); + } + queue->addMaker(new RandomLocations(vCavern, sizes, new AlwaysTrue(), false)); + } + switch (Random.getRandom(3)) { + case 1: queue->addMaker(new River(3, chooseRandom({SquareType::WATER, SquareType::MAGMA}))); + break; + case 2:{ + int numLakes = sqrt(Random.getRandom(1, 100)); + SquareType lakeType = chooseRandom({SquareType::WATER, SquareType::MAGMA}, {1, 1}); + vector> sizes; + for (int i : Range(numLakes)) { + int size = Random.getRandom(6, 20); + sizes.emplace_back(size, size); + } + queue->addMaker(new RandomLocations( + vector(numLakes, new Blob(lakeType, Nothing(), SquareAttrib::LAKE)), + sizes, new AlwaysTrue(), false)); + /* Deity* deity = Deity::getDeity( + (lakeType == SquareType::MAGMA) ? DeityHabitat::FIRE : DeityHabitat::WATER); + queue->addMaker(new Shrine(deity, lakeType, + new TypePredicate(lakeType), SquareType::ROCK_WALL, nullptr)); + if (lakeType == SquareType::WATER) { + queue->addMaker(new Creatures(CreatureFactory::singleType(Tribe::monster, CreatureId::KRAKEN), 1, 2, + MonsterAIFactory::monster(), SquareType::WATER)); + } + if (lakeType == SquareType::MAGMA) { + queue->addMaker(new Creatures(CreatureFactory::singleType(Tribe::monster, CreatureId::FIRE_SPHERE), 1, 4, + MonsterAIFactory::monster(), SquareType::MAGMA)); + }*/ + break; + } + default: break; + } + return queue; +} + +LevelMaker* LevelMaker::roomLevel(CreatureFactory cfactory, vector up, vector down) { + map > featureCount { + { SquareType::FOUNTAIN, make_pair(0, 3) }, + { SquareType::CHEST, make_pair(3, 7)}, + { SquareType::TORTURE_TABLE, make_pair(2, 3)}}; + MakerQueue* queue = new MakerQueue(); + queue->addMaker(new Empty(SquareType::BLACK_WALL)); + queue->addMaker(underground()); + queue->addMaker(new RoomMaker(8, 15, 4, 7, SquareType::ROCK_WALL, SquareType::BLACK_WALL)); + queue->addMaker(new Connector({5, 3, 0})); + if (Random.roll(2)) { + Deity* deity = Deity::getDeity(chooseRandom({DeityHabitat::STONE, DeityHabitat::EARTH})); + queue->addMaker(new Shrine(deity, SquareType::FLOOR, + new TypePredicate({SquareType::ROCK_WALL, SquareType::BLACK_WALL}), SquareType::ROCK_WALL, nullptr)); + } + queue->addMaker(new DungeonFeatures(SquareType::FLOOR,featureCount)); + queue->addMaker(new DungeonFeatures(SquareType::PATH, {{ SquareType::ROLLING_BOULDER, make_pair(0, 3) }})); + for (StairKey key : down) + queue->addMaker(new Stairs(StairDirection::DOWN, key, SquareType::FLOOR)); + for (StairKey key : up) + queue->addMaker(new Stairs(StairDirection::UP, key, SquareType::FLOOR)); + queue->addMaker(new Creatures(cfactory, 10, 15, MonsterAIFactory::monster())); + queue->addMaker(new Items(ItemFactory::dungeon(), SquareType::FLOOR, 5, 10)); + return new BorderGuard(queue, SquareType::BLACK_WALL); +} + +LevelMaker* LevelMaker::cryptLevel(CreatureFactory cfactory, vector up, vector down) { + MakerQueue* queue = new MakerQueue(); + map > featureCount { + { SquareType::COFFIN, make_pair(3, 7)}}; + queue->addMaker(new Empty(SquareType::BLACK_WALL)); + queue->addMaker(new RoomMaker(8, 15, 3, 5, SquareType::ROCK_WALL, SquareType::BLACK_WALL)); + queue->addMaker(new Connector({1, 3, 1})); + queue->addMaker(new DungeonFeatures(SquareType::FLOOR,featureCount)); + for (StairKey key : down) + queue->addMaker(new Stairs(StairDirection::DOWN, key, SquareType::FLOOR)); + for (StairKey key : up) + queue->addMaker(new Stairs(StairDirection::UP, key, SquareType::FLOOR)); + queue->addMaker(new Creatures(cfactory, 10, 15, MonsterAIFactory::monster())); + queue->addMaker(new Items(ItemFactory::dungeon(), SquareType::FLOOR, 5, 10)); + return new BorderGuard(queue, SquareType::BLACK_WALL); +} + +MakerQueue* village(CreatureFactory factory, Location* loc) { + MakerQueue* queue = new MakerQueue(); + map > featureCount { + { SquareType::CHEST, make_pair(0, 3) }, + { SquareType::BED, make_pair(0, 3) }}; + queue->addMaker(new LocationMaker(loc)); + queue->addMaker(new Empty(SquareType::GRASS)); + vector insideMakers { + new ShopMaker(ItemFactory::villageShop(), Tribe::elven, 10), + new Creatures(CreatureFactory::singleType(Tribe::elven, CreatureId::PIG), 3, 5, MonsterAIFactory::monster()), + new DungeonFeatures(SquareType::FLOOR, featureCount)}; + queue->addMaker(new Buildings(6, 3, 7, + SquareType::WOOD_WALL, SquareType::FLOOR, SquareType::DOOR, + true, insideMakers)); + queue->addMaker(new Creatures(factory, 10, 20, MonsterAIFactory::stayInLocation(loc), SquareType::GRASS)); + return queue; +} + +MakerQueue* banditCamp() { + MakerQueue* queue = new MakerQueue(); + map > featureCount { + { SquareType::CHEST, make_pair(4, 9) }, + { SquareType::BED, make_pair(2, 4) }}; + queue->addMaker(new Empty(SquareType::GRASS)); + vector insideMakers { + new DungeonFeatures(SquareType::FLOOR, featureCount)}; + queue->addMaker(new Buildings(1, 5, 7, + SquareType::WOOD_WALL, SquareType::FLOOR, SquareType::DOOR, + false, insideMakers, false)); + Location* loc = new Location("bandit hideout", "The bandits have robbed many travelers and townsfolk."); + queue->addMaker(new LocationMaker(loc)); + queue->addMaker(new Creatures(CreatureFactory::singleType(Tribe::goblin, CreatureId::BANDIT), 3, 7, + MonsterAIFactory::stayInLocation(loc), SquareType::GRASS)); + return queue; +} + +LevelMaker* dungeonEntrance(StairKey key, SquareType onType, const string& dungeonDesc) { + MakerQueue* queue = new MakerQueue(); + queue->addMaker(new Stairs(StairDirection::DOWN, key, onType, SquareAttrib::CONNECT)); + queue->addMaker(new LocationMaker(new Location("dungeon entrance", dungeonDesc))); + return new RandomLocations({queue}, {make_pair(1, 1)}, new TypePredicate(SquareType::MOUNTAIN)); +} + +LevelMaker* makeLake() { + MakerQueue* queue = new MakerQueue(); + Location* loc = new Location(); + queue->addMaker(new LocationMaker(loc)); + queue->addMaker(new Blob(SquareType::WATER, SquareType::SAND, SquareAttrib::LAKE)); + // queue->addMaker(new Creatures(CreatureFactory::singleType(CreatureId::VODNIK), 2, 5, MonsterAIFactory::stayInLocation(loc))); + return queue; +} + +LevelMaker* LevelMaker::towerLevel(Optional down, Optional up) { + MakerQueue* queue = new MakerQueue(); + queue->addMaker(new Empty(up ? SquareType::ROCK_WALL : SquareType::LOW_ROCK_WALL)); + queue->addMaker(new Margin(1, new Empty(SquareType::FLOOR))); + queue->addMaker(new Margin(1, new AddAttrib(SquareAttrib::ROOM))); + queue->addMaker(new AddAttrib(SquareAttrib::ROAD_CUT_THRU, true)); + LevelMaker* downStairs = (down) ? new Stairs(StairDirection::DOWN, *down, SquareType::FLOOR) : nullptr; + LevelMaker* upStairs = (up) ? new Stairs(StairDirection::UP, *up, SquareType::FLOOR) : nullptr; + queue->addMaker(new Division(0.5, 0.5, upStairs, nullptr, nullptr, downStairs)); + return queue; +} + + +LevelMaker* LevelMaker::topLevel( + CreatureFactory forrestCreatures, + CreatureFactory villageCreatures, + Location* villageLocation, + CreatureFactory cementaryCreatures, + CreatureFactory goblins, + CreatureFactory pyramidCreatures) { + MakerQueue* queue = new MakerQueue(); + vector vegetationLow { SquareType::CANIF_TREE, SquareType::BUSH }; + vector vegetationHigh { SquareType::DECID_TREE, SquareType::BUSH }; + vector probs { 2, 1 }; + LevelMaker* lake = makeLake(); + int numLakes = 1;//Random.getRandom(1, 2); + vector> subSizes; + vector subMakers; + for (int i : Range(numLakes)) { + subSizes.emplace_back(Random.getRandom(60, 120), Random.getRandom(60, 120)); + subMakers.push_back(lake); + } + MakerQueue* elvenVillage = village(villageCreatures, villageLocation); + elvenVillage->addMaker(new StartingPos(SquareType::GRASS)); + subMakers.push_back(elvenVillage); + subSizes.emplace_back(30, 20); + for (int i : Range(Random.getRandom(3))) { + subMakers.push_back(banditCamp()); + subSizes.emplace_back(12,8); + } + int numCementeries = 1; + for (int i : Range(numCementeries)) { + Location* loc = new Location("old cemetery", "Terrible evil is said to be lurking there."); + subMakers.push_back(new MakerQueue({ + new LocationMaker(loc), + new Margin(1, new Buildings(1, 2, 3, SquareType::ROCK_WALL, SquareType::FLOOR, SquareType::DOOR, false, {}, false)), + new DungeonFeatures(SquareType::GRASS, {{ SquareType::GRAVE, make_pair(5, 15) }}), + new Stairs(StairDirection::DOWN, StairKey::CRYPT, SquareType::FLOOR), +// new Creatures(cementaryCreatures, 2, 5, MonsterAIFactory::stayInLocation(loc)), + })); + subSizes.emplace_back(10, 10); + } + int numSheepFlocks = 0; + for (int i : Range(numSheepFlocks)) { + subMakers.push_back(new FlockAndLeader(CreatureId::ELF, CreatureId::SHEEP, Tribe::elven, 5, 10)); + subSizes.emplace_back(15, 15); + } + int numStoneCircles = Random.getRandom(2, 7); + /* for (int i : Range(numStoneCircles)) { + subMakers.push_back(new Circle(ItemId::BOULDER)); + int size = Random.getRandom(14, 32); + subSizes.emplace_back(size, size); + }*/ + MakerQueue* pyramid = new MakerQueue(); + pyramid->addMaker(new LocationMaker(new Location("ancient pyramid", "Terrible evil is said to be lurking there."))); + pyramid->addMaker(new Margin(1, pyramidLevel(pyramidCreatures, {StairKey::PYRAMID}, {}))); + subMakers.push_back(pyramid); + subSizes.emplace_back(17, 17); + queue->addMaker(new Empty(SquareType::GRASS)); + queue->addMaker(new Mountains(0.5)); + // queue->addMaker(new MountainRiver(30, '=')); + queue->addMaker(new Vegetation(0.7, 0.5, SquareType::GRASS, vegetationLow, probs)); + queue->addMaker(new Vegetation(0.4, 0.5, SquareType::HILL, vegetationHigh, probs)); + queue->addMaker(new Vegetation(0.2, 0.3, SquareType::MOUNTAIN, vegetationHigh, probs)); + queue->addMaker(new Margin(100, + new RandomLocations(subMakers, subSizes, new AttribPredicate(SquareAttrib::LOWLAND)))); + MakerQueue* tower = new MakerQueue(); + tower->addMaker(towerLevel(StairKey::TOWER, Nothing())); + tower->addMaker(new LocationMaker(Location::towerTopLocation())); +// queue->addMaker(new Margin(100, +// new RandomLocations({tower}, {make_pair(4, 4)}, new AttribPredicate(SquareAttrib::MOUNTAIN)))); + queue->addMaker(new Margin(100, dungeonEntrance(StairKey::DWARF, SquareType::MOUNTAIN, "Our enemies the dwarves are living there."))); + // queue->addMaker(new Margin(100, dungeonEntrance(StairKey::GOBLIN, SquareType::MOUNTAIN, "Our enemies the goblins are living there."))); + queue->addMaker(new Roads(SquareType::PATH)); + /*Deity* deity = Deity::getDeity(chooseRandom({DeityHabitat::STARS, DeityHabitat::TREES})); + queue->addMaker(new Shrine(deity, SquareType::PATH, + new TypePredicate({SquareType::GRASS, SquareType::DECID_TREE, SquareType::BUSH}), SquareType::WOOD_WALL, new LocationMaker(new Location("shrine", "It is dedicated to the god " + deity->getName()))));*/ + queue->addMaker(new Creatures(forrestCreatures, 30, 50, MonsterAIFactory::wildlifeNonPredator())); + queue->addMaker(new Items(ItemFactory::mushrooms(), SquareType::GRASS, 30, 60)); + return new BorderGuard(queue); +} + +LevelMaker* LevelMaker::goblinTownLevel(CreatureFactory cfactory, vector up, vector down) { + MakerQueue* queue = new MakerQueue(); + map > featureCount { + { SquareType::CHEST, make_pair(4, 8) }, + { SquareType::TORTURE_TABLE, make_pair(4, 8) }}; + queue->addMaker(new Empty(SquareType::ROCK_WALL)); + LevelMaker* cavern = new Blob(SquareType::PATH); + vector vCavern; + vector> sizes; + for (int i : Range(40)) { + sizes.push_back(make_pair(Random.getRandom(5, 10), Random.getRandom(5, 10))); + vCavern.push_back(cavern); + } + queue->addMaker(new RandomLocations(vCavern, sizes, new AlwaysTrue(), false)); + queue->addMaker(new RoomMaker(5, 8, 4, 7, SquareType::ROCK_WALL, Nothing(), + new ShopMaker(ItemFactory::goblinShop(), Tribe::goblin, 10), false)); + queue->addMaker(new Connector({1, 0, 0})); + for (StairKey key : down) + queue->addMaker(new Stairs(StairDirection::DOWN, key, SquareType::FLOOR)); + for (StairKey key : up) + queue->addMaker(new Stairs(StairDirection::UP, key, SquareType::FLOOR)); + queue->addMaker(new DungeonFeatures(SquareType::FLOOR, featureCount)); + queue->addMaker(new Creatures(cfactory, 10, 15, MonsterAIFactory::monster())); + return new BorderGuard(queue, SquareType::BLACK_WALL); +} + +LevelMaker* LevelMaker::mineTownLevel(CreatureFactory cfactory, vector up, vector down) { + MakerQueue* queue = new MakerQueue(); + map > featureCount { + { SquareType::CHEST, make_pair(4, 8) }, + { SquareType::BED, make_pair(4, 8) }}; + queue->addMaker(new Empty(SquareType::ROCK_WALL)); + LevelMaker* cavern = new Blob(SquareType::PATH); + vector vCavern; + vector> sizes; + for (int i : Range(20)) { + sizes.push_back(make_pair(Random.getRandom(5, 25), Random.getRandom(5, 25))); + vCavern.push_back(cavern); + } + queue->addMaker(new RandomLocations(vCavern, sizes, new AlwaysTrue(), false)); + queue->addMaker(new RoomMaker(6, 12, 4, 7, SquareType::ROCK_WALL, Nothing(), + new ShopMaker(ItemFactory::dwarfShop(), Tribe::dwarven, 10), false)); + queue->addMaker(new Connector({1, 0, 0})); + for (StairKey key : down) + queue->addMaker(new Stairs(StairDirection::DOWN, key, SquareType::FLOOR)); + for (StairKey key : up) + queue->addMaker(new Stairs(StairDirection::UP, key, SquareType::FLOOR)); + queue->addMaker(new DungeonFeatures(SquareType::FLOOR, featureCount)); + queue->addMaker(new Creatures(cfactory, 10, 15, MonsterAIFactory::monster())); + return new BorderGuard(queue, SquareType::BLACK_WALL); +} + +LevelMaker* LevelMaker::pyramidLevel(CreatureFactory cfactory, vector up, vector down) { + MakerQueue* queue = new MakerQueue(); + queue->addMaker(new Empty(SquareType::YELLOW_WALL)); + queue->addMaker(new AddAttrib(SquareAttrib::NO_DIG)); + queue->addMaker(new Margin(1, new AddAttrib(SquareAttrib::NO_DIG, true))); + queue->addMaker(new RoomMaker(2, 5, 4, 6, SquareType::YELLOW_WALL, SquareType::YELLOW_WALL, nullptr, true)); + for (StairKey key : down) + queue->addMaker(new Stairs(StairDirection::DOWN, key, SquareType::FLOOR)); + for (StairKey key : up) + queue->addMaker(new Stairs(StairDirection::UP, key, SquareType::FLOOR)); + if (down.size() == 0) + queue->addMaker(new LevelExit(SquareType::PATH)); + else + queue->addMaker(new Creatures(cfactory, 3, 5, MonsterAIFactory::monster())); + queue->addMaker(new Connector({5, 3, 0})); + return queue; +} + +LevelMaker* LevelMaker::collectiveLevel(vector up, vector down) { + MakerQueue* queue = new MakerQueue(); + queue->addMaker(new Empty(SquareType::ROCK_WALL)); + queue->addMaker(underground()); + vector makers; + vector> sizes; + for (StairKey key : up) { + MakerQueue* area = new MakerQueue(); + area->addMaker(new Blob(SquareType::PATH)); + area->addMaker(new Stairs(StairDirection::UP, key, SquareType::PATH)); + makers.push_back(area); + sizes.emplace_back(10, 10); + } + for (StairKey key : down) { + MakerQueue* area = new MakerQueue(); + area->addMaker(new Blob(SquareType::PATH)); + area->addMaker(new Stairs(StairDirection::DOWN, key, SquareType::PATH)); + makers.push_back(area); + sizes.emplace_back(10, 10); + } + MakerQueue* startPos = new MakerQueue(); + startPos->addMaker(new Blob(SquareType::PATH)); + startPos->addMaker(new StartingPos(SquareType::PATH)); + makers.push_back(startPos); + sizes.emplace_back(10, 10); + for (int i : Range(Random.getRandom(4, 7))) { + makers.push_back(new Blob(SquareType::GOLD_ORE)); + sizes.emplace_back(Random.getRandom(5, 10), Random.getRandom(5, 10)); + } + queue->addMaker(new RandomLocations(makers, sizes, new AlwaysTrue())); + return new BorderGuard(queue, SquareType::BLACK_WALL); +} diff --git a/level_maker.h b/level_maker.h new file mode 100644 index 000000000..d7c62ac6e --- /dev/null +++ b/level_maker.h @@ -0,0 +1,32 @@ +#ifndef _LEVEL_MAKER_H +#define _LEVEL_MAKER_H + +#include "util.h" +#include "level.h" +#include "creature_factory.h" + + +class LevelMaker { + public: + virtual void make(Level::Builder* builder, Rectangle area) = 0; + + static LevelMaker* roomLevel(CreatureFactory cfactory, vector up, vector down); + static LevelMaker* cryptLevel(CreatureFactory cfactory, vector up, vector down); + static LevelMaker* topLevel( + CreatureFactory forrest, + CreatureFactory village, + Location* villageLocation, + CreatureFactory cementaryCreatures, + CreatureFactory goblins, + CreatureFactory pyramid); + static LevelMaker* mineTownLevel(CreatureFactory cfactory, vector up, vector down); + static LevelMaker* goblinTownLevel(CreatureFactory cfactory, vector up, vector down); + + static LevelMaker* pyramidLevel(CreatureFactory, vector up, vector down); + static LevelMaker* towerLevel(Optional down, Optional up); + static Vec2 getRandomExit(Rectangle rect); + + static LevelMaker* collectiveLevel(vector up, vector down); +}; + +#endif diff --git a/location.cpp b/location.cpp new file mode 100644 index 000000000..904f6e3e2 --- /dev/null +++ b/location.cpp @@ -0,0 +1,61 @@ +#include "stdafx.h" + +Location::Location(const string& _name, const string& desc) : name(_name), description(desc), bounds(-1, -1, 1, 1) { +} + +Location::Location() : bounds(-1, -1, 1, 1) {} + +string Location::getName() const { + return *name; +} + +string Location::getDescription() const { + return *description; +} + +bool Location::hasName() const { + return name; +} + +Rectangle Location::getBounds() const { + CHECK(bounds.getPX() > -1) << "Location bounds not initialized"; + return bounds; +} + +void Location::setBounds(Rectangle b) { + bounds = b; +} + +void Location::setLevel(const Level* l) { + level = l; +} + +const Level* Location::getLevel() const { + return level; +} + +class TowerTopLocation : public Location { + public: + +/* virtual void onCreature(Creature* cr) override { + if (!cr->isPlayer()) + return; + Player* c = dynamic_cast(cr); + if (!entered.count(c) && !c->isBlind()) { + for (Vec2 v : c->getLevel()->getBounds()) + if ((v - c->getPosition()).lengthD() < 300 && !c->getLevel()->getSquare(v)->isCovered()) + c->remember(v, c->getLevel()->getSquare(v)->getViewObject()); + c->privateMessage("You stand at the top of a very tall stone tower."); + c->privateMessage("You see distant land in all directions."); + entered.insert(c); + } + }*/ + + private: + unordered_set entered; +}; + +Location* Location::towerTopLocation() { + return new TowerTopLocation(); +} + diff --git a/location.h b/location.h new file mode 100644 index 000000000..fea5acb36 --- /dev/null +++ b/location.h @@ -0,0 +1,29 @@ +#ifndef _LOCATION_H +#define _LOCATION_H + +#include "util.h" + +class Location { + public: + Location(const string& name, const string& description); + Location(); + string getName() const; + string getDescription() const; + bool hasName() const; + Rectangle getBounds() const; + void setBounds(Rectangle); + void setLevel(const Level*); + const Level* getLevel() const; + + virtual void onCreature(Creature* c) {} + + static Location* towerTopLocation(); + + private: + Optional name; + Optional description; + Rectangle bounds; + const Level* level; +}; + +#endif diff --git a/logging_view.h b/logging_view.h new file mode 100644 index 000000000..a0235b962 --- /dev/null +++ b/logging_view.h @@ -0,0 +1,66 @@ +#ifndef _LOGGING_VIEW +#define _LOGGING_VIEW + + +template +class LoggingView : public T { + public: + LoggingView(ofstream& of) : output(of) { + } + + virtual void close() override { + output.close(); + T::close(); + } + + virtual Action getAction() override { + Action res = T::getAction(); + output << "getAction " << res << endl; + output.flush(); + return res; + } + + virtual Optional chooseFromList(const string& title, const vector& options, int index) override { + auto res = T::chooseFromList(title, options, index); + output << "chooseFromList "; + if (res) + output << *res << endl; + else + output << "nothing" << endl; + output.flush(); + return res; + } + + virtual Optional chooseDirection(const string& message) override { + auto res = T::chooseDirection(message); + output << "chooseDirection "; + if (res) + output << res->x << "," << res->y << endl; + else + output << "nothing" << endl; + output.flush(); + return res; + } + + virtual bool yesOrNoPrompt(const string& message) override { + auto res = T::yesOrNoPrompt(message); + output << "yesOrNoPrompt " << res << endl; + output.flush(); + return res; + } + + virtual Optional getNumber(const string& title, int max) override { + auto res = T::getNumber(title, max); + output << "getNumber "; + if (res) + output << *res << endl; + else + output << "nothing" << endl; + output.flush(); + return res; + } + private: + ofstream& output; +}; + +#endif diff --git a/main.cpp b/main.cpp new file mode 100644 index 000000000..56cafd132 --- /dev/null +++ b/main.cpp @@ -0,0 +1,71 @@ +#include "stdafx.h" + +using namespace std; + +int main(int argc, char* argv[]) { + View* view; + ifstream input; + ofstream output; + string lognamePref = "log"; + Debug::init(); + int seed = time(0); + bool dwarf = false; + if (argc == 2 && argv[1][0] == 'd') + dwarf = true; + else + if (argc == 2 && argv[1][0] != 'l') { + seed = convertFromString(argv[1]); + argc = 1; + } + if (argc == 1 || dwarf) { + Random.init(seed); + string fname(lognamePref); + fname += convertToString(seed); + output.open(fname); + CHECK(output.is_open()); + Debug() << "Writing to " << fname; + view = View::createLoggingView(output); + } else { + string fname = argv[1]; + Debug() << "Reading from " << fname; + seed = convertFromString(fname.substr(lognamePref.size())); + Random.init(seed); + input.open(fname); + CHECK(input.is_open()); + view = View::createReplayView(input); + } + Quest::initialize(); + Tribe::init(); + Item::identifyEverything(); + NameGenerator::init("first_names.txt", "aztec_names.txt", "creatures.txt", + "artifacts.txt", "world.txt", "town_names.txt", "dwarfs.txt", "gods.txt", "demons.txt", "dogs.txt"); + ItemFactory::init(); + bool modelReady = false; + messageBuffer.initialize(view); + string heroName = NameGenerator::firstNames.getNext(); + view->initialize(); + auto choice = view->chooseFromList("Welcome to KeeperRL.", { "Keeper mode", "Adventure mode"}); + if (!choice) + exit(0); + dwarf = (choice == 1); + Model* model; +#ifndef WINDOWS + thread t = !dwarf ? (thread([&] { model = Model::collectiveModel(view, 5); modelReady = true; })) : + (thread([&] { model = Model::heroModel(view, heroName); modelReady = true; })); + view->displaySplash(modelReady); +#else + modelReady = true; + view->displaySplash(modelReady); + model = (!dwarf ? Model::collectiveModel(view, 5) : Model::heroModel(view, heroName)); +#endif + int var = 0; + view->setTimeMilli(0); + while (1) { + if (model->isTurnBased()) + model->update(var++); + else + model->update(double(view->getTimeMilli()) / 300); + } + return 0; +} + diff --git a/map_layout.cpp b/map_layout.cpp new file mode 100644 index 000000000..6f51fa85e --- /dev/null +++ b/map_layout.cpp @@ -0,0 +1,243 @@ +#include "stdafx.h" +#include "map_layout.h" + +MapLayout::MapLayout( + int screenW, int screenH, + int leftM, int topM, int rightM, int bottomM, + vector l) :screenWidth(screenW), screenHeight(screenH), + leftMargin(leftM), topMargin(topM), rightMargin(rightM), bottomMargin(bottomM), layers(l) {} + +Rectangle MapLayout::getBounds() { + return Rectangle(leftMargin, topMargin, screenWidth - rightMargin, screenHeight - bottomMargin); +} + +void MapLayout::updateScreenSize(int width, int height) { + screenWidth = width; + screenHeight = height; +} + +vector MapLayout::getLayers() const { + return layers; +} + +class GridLayout : public MapLayout { + public: + GridLayout( + int screenW, int screenH, + int sW, int sH, + int leftM, int topM, + int rightM, int bottomM, + int marg, vector layers) : MapLayout(screenW, screenH, leftM, topM, rightM, bottomM, layers) + , squareW(sW), squareH(sH), boxMargin(marg) {} + + virtual double squareHeight(Vec2 mapPos) override { + return squareH; + } + + virtual double squareWidth(Vec2 mapPos) override { + return squareW; + } + + virtual Vec2 projectOnScreen(Vec2 mapPos, double height) override { + return getBounds().middle() + (mapPos).mult(Vec2(squareW, squareH)) - center; + } + + virtual Vec2 projectOnMap(Vec2 screenPos) override { + Vec2 pos = (screenPos + center - getBounds().middle()).div(Vec2(squareW, squareH)); + return pos; + } + + virtual void updatePlayerPos(Vec2 pos) override { + center = pos; + } + + virtual vector getAllTiles() override { + vector ret; + Rectangle grid(getBounds().getW() / squareW, getBounds().getH() / squareH); + for (Vec2 v : grid) + ret.push_back(v + center.div(Vec2(squareW, squareH)) - grid.middle()); + return ret; + } + + private: + Vec2 center; + int squareW; + int squareH; + int boxMargin; +}; + +MapLayout* MapLayout::gridLayout(int screenW, int screenH, + int squareWidth, int squareHeight, + int leftMargin, int topMargin, + int rightMargin, int bottomMargin, + int boxMargin, vector layers) { + return new GridLayout( + screenW, screenH, squareWidth, squareHeight, leftMargin, topMargin, rightMargin, bottomMargin, boxMargin, + layers); +} + +class WorldLayout : public GridLayout { + public: + WorldLayout(int screenW, int screenH, int leftM, int topM, int rightM, int bottomM) + : GridLayout(screenW, screenH, 1, 1, leftM, topM, rightM, bottomM, 1, + {ViewLayer::FLOOR, ViewLayer::CREATURE}) {} + + virtual Vec2 projectOnScreen(Vec2 mapPos, double height) override { + return mapPos; + } +}; + +MapLayout* MapLayout::worldLayout(int screenW, int screenH, + int leftMargin, int topMargin, + int rightMargin, int bottomMargin) { + return new WorldLayout( + screenW, screenH, leftMargin, topMargin, rightMargin, bottomMargin); +} + +double multY = 75; +double multX = 36; +double offsetY = 1750; +double offsetX = 0; +double camOffset = 30; +double camHeight = 15; + +using sf::Keyboard; + +class TppLayout : public MapLayout { + public: + TppLayout(int screenW, int screenH, + int leftM, int topM, int rightM, int bottomM, int sW, int sH) : MapLayout(screenW, screenH, + leftM, topM, rightM, bottomM, allLayers), squareW(sW), squareH(sH) {} + + virtual double squareWidth(Vec2 mapPos) override { + VecD dir = translateToScreen(mapPos - center); + return max(5., min(20., 160. * (atan2(camOffset - dir.y, camHeight) - atan2(camOffset - dir.y - 10, camHeight)))); + } + + virtual double squareHeight(Vec2 mapPos) override { + return squareWidth(mapPos); + } + + virtual Vec2 projectOnMap(Vec2 screenPos) override { + return screenPos; + } + + virtual Vec2 projectOnScreen(Vec2 mapPos, double height) override { + VecD dir = translateToScreen(mapPos - center); + return getBounds().middle() + Vec2(offsetX + multX * atan2(dir.x, camOffset - dir.y) * squareW, + offsetY - multY * atan2(camOffset - dir.y, camHeight - height * 0) * squareH); + } + + virtual vector getAllTiles() override { + int horizon = 50; + vector ret; + for (Vec2 v : Rectangle(center.x - horizon, center.y - horizon, center.x + horizon, center.y + horizon)) + if (projectOnScreen(v, 0).inRectangle(getBounds())) + ret.push_back(v); + return ret; + } + + struct VecD { + VecD(double a, double b) : x(a), y(b) {} + VecD(Vec2 v) : x(v.x), y(v.y) {} + double x, y; + }; + + VecD translateToScreen(Vec2 dir) { + CHECK(contains(Vec2::directions8(), facing)) << facing; + double diagDist = 1 / sqrt(2); + if (facing == Vec2(0, -1)) + return dir; + if (facing == Vec2(0, 1)) + return VecD(-dir.x, -dir.y); + if (facing == Vec2(1, 0)) + return VecD(dir.y, -dir.x); + if (facing == Vec2(-1, 0)) + return VecD(-dir.y, dir.x); + if (facing == Vec2(-1, -1)) + return VecD((-dir.y + dir.x) * diagDist, (dir.y + dir.x) * diagDist); + if (facing == Vec2(1, -1)) + return VecD((dir.y + dir.x) * diagDist, (dir.y - dir.x) * diagDist); + if (facing == Vec2(1, 1)) + return VecD((dir.y - dir.x) * diagDist, (-dir.y - dir.x) * diagDist); + return VecD((-dir.y - dir.x) * diagDist, (-dir.y + dir.x) * diagDist); + } + + void printTrans() { + Debug() << "xMult = " << multX << " yMult = " << multY << " xOffset = " << offsetX << " yOffset = " << offsetY << " camOffset = " << camOffset << " camHeight = " << camHeight; + } + + vector dirs { + Vec2(0, -1), Vec2(1, -1), Vec2(1, 0), Vec2(1, 1), Vec2(0, 1), Vec2(-1, 1), Vec2(-1, 0), Vec2(-1, -1)}; + + Vec2 facingMove(Vec2 f, int dir) { + auto elem = findElement(dirs, f); + CHECK(elem); + return dirs[(*elem + dir + dirs.size()) % dirs.size()]; + } + + + virtual Optional overrideAction(const sf::Event::KeyEvent& key) override { + switch (key.code) { + case Keyboard::Up: + case Keyboard::Numpad8: return Action( + key.control ? ActionId::TRAVEL : key.alt ? ActionId::FIRE : ActionId::MOVE, facing); + case Keyboard::Right: + case Keyboard::Numpad6: facing = facingMove(facing, 1); return Action(ActionId::IDLE); + case Keyboard::Down: + case Keyboard::Numpad2: facing = facingMove(facing, 4); return Action(ActionId::IDLE); + case Keyboard::Left: + case Keyboard::Numpad4: facing = facingMove(facing, -1); return Action(ActionId::IDLE); + case Keyboard::Numpad9: + case Keyboard::Numpad7: + case Keyboard::Numpad3: + case Keyboard::Numpad1: return Action(ActionId::IDLE); + case Keyboard::T: return Action(ActionId::THROW_DIR, facing); + /* case Keyboard::F1: multX *= 1.1; printTrans(); return Action(ActionId::IDLE); + case Keyboard::F2: multX *= 0.9; printTrans(); return Action(ActionId::IDLE); + case Keyboard::F3: multY *= 1.1; printTrans(); return Action(ActionId::IDLE); + case Keyboard::F4: multY *= 0.9; printTrans(); return Action(ActionId::IDLE); + case Keyboard::F5: offsetX *= 1.1; printTrans(); return Action(ActionId::IDLE); + case Keyboard::F6: offsetX *= 0.9; printTrans(); return Action(ActionId::IDLE); + case Keyboard::F7: offsetY *= 1.1; printTrans(); return Action(ActionId::IDLE); + case Keyboard::F8: offsetY *= 0.9; printTrans(); return Action(ActionId::IDLE); + case Keyboard::F9: camOffset *= 1.1; printTrans(); return Action(ActionId::IDLE); + case Keyboard::F10: camOffset *= 0.9; printTrans(); return Action(ActionId::IDLE); + case Keyboard::F11: camHeight *= 1.1; printTrans(); return Action(ActionId::IDLE); + case Keyboard::F12: camHeight *= 0.9; printTrans(); return Action(ActionId::IDLE);*/ + default: return Nothing(); + } +} + + virtual void updatePlayerPos(Vec2 pos) override { + if (contains(Vec2::directions8(), pos - center)) { + Vec2 movement = pos - center; + if (movement == lastMovement) { + ++cnt; + if (cnt > 10) { + facing = movement; + cnt = 0; + } + } else { + lastMovement = movement; + cnt = 0; + } + } + center = pos; + } + + private: + int squareW; + int squareH; + Vec2 center; + Vec2 facing = Vec2(0, -1); + int cnt = 0; + Vec2 lastMovement; +}; + +MapLayout* MapLayout::tppLayout(int screenW, int screenH, + int squareWidth, int squareHeight, + int leftMargin, int topMargin, + int rightMargin, int bottomMargin) { + return new TppLayout(screenW, screenH, leftMargin, topMargin, rightMargin, bottomMargin, squareWidth, squareHeight); +} diff --git a/map_layout.h b/map_layout.h new file mode 100644 index 000000000..8eb4edf23 --- /dev/null +++ b/map_layout.h @@ -0,0 +1,55 @@ +#ifndef _MAP_LAYOUT +#define _MAP_LAYOUT + +#include + +#include "util.h" +#include "enums.h" + +class MapLayout { + public: + MapLayout(int screenWidth, int screenHeight, int leftMargin, int topMargin, int rightMargin, int bottomMargin, + vector layers); + Rectangle getBounds(); + void updateScreenSize(int width, int height); + + vector getLayers() const; + + virtual double squareWidth(Vec2 mapPos) = 0; + virtual double squareHeight(Vec2 mapPos) = 0; + virtual Vec2 projectOnScreen(Vec2 mapPos, double height) = 0; + virtual Vec2 projectOnMap(Vec2 screenPos) = 0; + virtual vector getAllTiles() = 0; + virtual void updatePlayerPos(Vec2) = 0; + virtual Optional overrideAction(const sf::Event::KeyEvent&) { return Nothing(); }; + + static MapLayout* gridLayout( + int screenW, int screenH, + int squareWidth, int squareHeight, + int leftMargin, int topMargin, + int rightMargin, int bottomMargin, + int boxMargin, vector layers); + + static MapLayout* tppLayout( + int screenW, int screenH, + int squareWidth, int squareHeight, + int leftMargin, int topMargin, + int rightMargin, int bottomMargin); + + static MapLayout* worldLayout(int screenW, int screenH, + int leftMargin, int topMargin, + int rightMargin, int bottomMargin); + + protected: + int screenWidth; + int screenHeight; + int leftMargin; + int topMargin; + int rightMargin; + int bottomMargin; + + vector layers; +}; + + +#endif diff --git a/map_memory.cpp b/map_memory.cpp new file mode 100644 index 000000000..50c19cdac --- /dev/null +++ b/map_memory.cpp @@ -0,0 +1,22 @@ +#include "stdafx.h" + +void MapMemory::addObject(Vec2 pos, const ViewObject& obj) { + table[pos].insert(obj); +} + +void MapMemory::clearSquare(Vec2 pos) { + table.erase(pos); +} + +bool MapMemory::hasViewIndex(Vec2 pos) const { + return table.count(pos); +} + +ViewIndex MapMemory::getViewIndex(Vec2 pos) const { + TRY(return table.at(pos), "No view index at " << pos); +} + +const MapMemory& MapMemory::empty() { + static MapMemory mem; + return mem; +} diff --git a/map_memory.h b/map_memory.h new file mode 100644 index 000000000..b276b7d6d --- /dev/null +++ b/map_memory.h @@ -0,0 +1,20 @@ +#ifndef _MEMORY_H +#define _MEMORY_H + +#include "view_object.h" +#include "view_index.h" +#include "util.h" + +class MapMemory { + public: + void addObject(Vec2 pos, const ViewObject& obj); + void clearSquare(Vec2 pos); + bool hasViewIndex(Vec2 pos) const; + ViewIndex getViewIndex(Vec2 pos) const; + static const MapMemory& empty(); + + private: + unordered_map table; +}; + +#endif diff --git a/markov_chain.cpp b/markov_chain.cpp new file mode 100644 index 000000000..3131bfa01 --- /dev/null +++ b/markov_chain.cpp @@ -0,0 +1,30 @@ +#include "stdafx.h" + +template +MarkovChain::MarkovChain(T s, map>> t) : state(s), transitions(t) { + for (auto elem : transitions) { + double sum = 0; + for (auto trans : elem.second) + sum += trans.second; + CHECK(sum <= 1); + if (sum < 1) + transitions[elem.first].emplace_back(elem.first, 1 - sum); + } +} + +template +T MarkovChain::getState() const { + return state; +} + +template +void MarkovChain::setState(T s) { + state = s; +} + +template +void MarkovChain::update() { + state = chooseRandom(transitions.at(state)); +} + +template class MarkovChain; diff --git a/markov_chain.h b/markov_chain.h new file mode 100644 index 000000000..4fc6b815f --- /dev/null +++ b/markov_chain.h @@ -0,0 +1,19 @@ +#ifndef _MARKOV_CHAIN +#define _MARKOV_CHAIN + + +template +class MarkovChain { + public: + MarkovChain(T initialState, map>>); + + T getState() const; + void setState(T); + void update(); + + private: + T state; + map>> transitions; +}; + +#endif diff --git a/message_buffer.cpp b/message_buffer.cpp new file mode 100644 index 000000000..c0f608fa6 --- /dev/null +++ b/message_buffer.cpp @@ -0,0 +1,54 @@ +#include "stdafx.h" + +using namespace std; + +MessageBuffer messageBuffer; + +void correct(string& msg) { + if (islower(msg[0])) + msg[0] = toupper(msg[0]); + if (msg.size() > 1 && msg[0] == '\"' && islower(msg[1])) + msg[1] = toupper(msg[1]); + if (msg.back() != '.' && msg.back() != '?' && msg.back() != '!' && msg.back() != '\"') + msg.append("."); +} + +void MessageBuffer::addMessage(string msg) { + Debug() << "MSG " << msg; + CHECK(view != nullptr) << "Message buffer not initialized."; + if (msg == "") + return; + bool imp = isImportant(msg); + if (imp) + removeImportant(msg); + correct(msg); + if (imp) + view->addImportantMessage(msg); + else { + view->addMessage(msg); + } + messages.push_back(msg); +} + +void MessageBuffer::initialize(View* view) { + this->view = view; +} + +void MessageBuffer::showHistory() { + view->presentList("Messages:", messages, true); +} + +const static string importantPref = "IMPORTANT"; + +string MessageBuffer::important(const string& msg) { + return importantPref + msg; +} + +bool MessageBuffer::isImportant(const string& msg) { + return msg.size() > importantPref.size() && msg.substr(0, importantPref.size()) == importantPref; +} + +void MessageBuffer::removeImportant(string& msg) { + CHECK(isImportant(msg)); + msg = msg.substr(importantPref.size()); +} diff --git a/message_buffer.h b/message_buffer.h new file mode 100644 index 000000000..0a3bc78c8 --- /dev/null +++ b/message_buffer.h @@ -0,0 +1,27 @@ +#ifndef _MESSAGE_BUFFER_H +#define _MESSAGE_BUFFER_H + +#include +#include + +#include "util.h" +#include "view.h" + +class MessageBuffer { + public: + void addMessage(string msg); + void initialize(View* view); + void showHistory(); + + static string important(const string& msg); + + private: + static bool isImportant(const string& msg); + static void removeImportant(string& msg); + vector messages; + View* view; +}; + +extern MessageBuffer messageBuffer; + +#endif diff --git a/minion_equipment.cpp b/minion_equipment.cpp new file mode 100644 index 000000000..b27b2c1e1 --- /dev/null +++ b/minion_equipment.cpp @@ -0,0 +1,46 @@ +#include "stdafx.h" + +Optional MinionEquipment::getEquipmentType(const Item* it) { + if (it->getType() == ItemType::WEAPON) + return MinionEquipment::WEAPON; + if (it->getType() == ItemType::ARMOR) { + if (it->getEquipmentSlot() == EquipmentSlot::BODY_ARMOR) + return MinionEquipment::BODY_ARMOR; + if (it->getEquipmentSlot() == EquipmentSlot::HELMET) + return MinionEquipment::HELMET; + } + if (it->getType() == ItemType::TOOL && it->getEffectType() == EffectType::HEAL) + return MinionEquipment::FIRST_AID_KIT; + return Nothing(); +} + +bool MinionEquipment::isItemUseful(const Item* it) { + return getEquipmentType(it); +} + +bool MinionEquipment::needs(const Creature* c, const Item* it) { + EquipmentType type = *getEquipmentType(it); + return (!equipmentMap.count(make_pair(c, type)) && + (c->canEquip(it) || (type == MinionEquipment::FIRST_AID_KIT && !c->isUndead() && + c->getEquipment().getItems(Item::effectPredicate(EffectType::HEAL)).empty()))); +} + +bool MinionEquipment::needsItem(const Creature* c, const Item* it) { + if (owners.count(it)) { + if (owners.at(it) == c) + return true; + if (owners.at(it)->isDead()) + owners.erase(it); + else + return false; + } + if (!getEquipmentType(it) || !c->isHumanoid()) + return false; + if (needs(c, it)) { + owners[it] = c; + equipmentMap[make_pair(c, *getEquipmentType(it))] = it; + return true; + } else + return false; +} + diff --git a/minion_equipment.h b/minion_equipment.h new file mode 100644 index 000000000..d1aad337a --- /dev/null +++ b/minion_equipment.h @@ -0,0 +1,20 @@ +#ifndef _MINION_EQUIPMENT_H +#define _MINION_EQUIPMENT_H + +class MinionEquipment { + public: + bool needsItem(const Creature*, const Item*); + + bool isItemUseful(const Item*); + + private: + enum EquipmentType { WEAPON, BODY_ARMOR, HELMET, FIRST_AID_KIT }; + + bool needs(const Creature* c, const Item* it); + static Optional getEquipmentType(const Item* it); + + map, const Item*> equipmentMap; + map owners; +}; + +#endif diff --git a/model.cpp b/model.cpp new file mode 100644 index 000000000..49f779b7b --- /dev/null +++ b/model.cpp @@ -0,0 +1,248 @@ +#include "stdafx.h" + +using namespace std; + +bool Model::isTurnBased() { + return !collective || collective->isTurnBased(); +} + +void Model::update(double totalTime) { + if (collective) + collective->render(view); + do { + if (collective) { + // process a few times so events don't stack up when game is paused + for (int i : Range(5)) + collective->processInput(view); + } + Creature* creature = timeQueue.getNextCreature(); + CHECK(creature) << "No more creatures"; + Debug() << creature->getTheName() << " moving now"; + double time = creature->getTime(); + if (time > totalTime) + return; + if (time >= lastTick + 1) { + MEASURE({ + Debug() << "Turn " << time; + for (Creature* c : timeQueue.getAllCreatures()) { + c->tick(time); + } + for (Level* l : levels) + for (Square* square : l->getTickingSquares()) + square->tick(time); + lastTick = time; + if (collective) + collective->tick(); + }, "ticking time"); + } + bool unpossessed = false; + if (!creature->isDead()) { + bool wasPlayer = creature->isPlayer(); + creature->makeMove(); + if (wasPlayer && !creature->isPlayer()) + unpossessed = true; + } + if (collective) + collective->update(creature); + if (!creature->isDead()) { + Level* level = creature->getLevel(); + CHECK(level->getSquare(creature->getPosition())->getCreature() == creature); + } + if (unpossessed) + break; + } while (1); +} + +void Model::addCreature(PCreature c) { + c->setTime(timeQueue.getCurrentTime()); + CHECK(c->getLevel() != nullptr) << "Creature must already be located on a level."; + timeQueue.addCreature(std::move(c)); +} + +void Model::removeCreature(Creature* c) { + deadCreatures.push_back(timeQueue.removeCreature(c)); +} + +Level* Model::buildLevel(Level::Builder&& b, LevelMaker* maker, bool surface) { + Level::Builder builder(std::move(b)); + maker->make(&builder, Rectangle(builder.getWidth(), builder.getHeight())); + levels.push_back(builder.build(this, surface)); + return levels.back(); +} + +Model::Model(View* v) : view(v) { +} + +Level* Model::prepareTopLevel(Location* villageLocation) { + Level* top = buildLevel( + Level::Builder(600, 600, "Wilderness"), + LevelMaker::topLevel( + CreatureFactory::forrest(), + CreatureFactory::humanVillage(), + villageLocation, + CreatureFactory::crypt(), + CreatureFactory::goblinTown(1), + CreatureFactory::pyramid(0)), + true); + Level* c1 = buildLevel( + Level::Builder(30, 20, "Crypt"), + LevelMaker::cryptLevel(CreatureFactory::crypt(),{StairKey::CRYPT}, {})); + Level* p1 = buildLevel( + Level::Builder(13, 13, "Pyramid Level 2"), + LevelMaker::pyramidLevel(CreatureFactory::pyramid(1), {StairKey::PYRAMID}, {StairKey::PYRAMID})); + Level* p2 = buildLevel( + Level::Builder(11, 11, "Pyramid Level 3"), + LevelMaker::pyramidLevel(CreatureFactory::pyramid(2), {}, {StairKey::PYRAMID})); + addLink(StairDirection::DOWN, StairKey::CRYPT, top, c1); + addLink(StairDirection::UP, StairKey::PYRAMID, top, p1); + addLink(StairDirection::UP, StairKey::PYRAMID, p1, p2); + return top; +} + +Model* Model::heroModel(View* view, const string& heroName) { + Model* m = new Model(view); + Level* top = m->prepareTopLevel(new Location("village of " + NameGenerator::townNames.getNext(), "")); + Level* d1 = m->buildLevel( + Level::Builder(60, 35, "Dwarven Halls"), + LevelMaker::mineTownLevel(CreatureFactory::dwarfTown(1), {StairKey::DWARF}, {StairKey::DWARF})); + Level* g1 = m->buildLevel( + Level::Builder(60, 35, "Goblin Den"), + LevelMaker::goblinTownLevel(CreatureFactory::goblinTown(1), {StairKey::DWARF}, {})); + vector gnomish; + int numGnomLevels = 8; + // int towerLinkIndex = Random.getRandom(1, numGnomLevels - 1); + for (int i = 0; i < numGnomLevels; ++i) { + vector upKeys {StairKey::DWARF}; + /* if (i == towerLinkIndex) + upKeys.push_back(StairKey::TOWER);*/ + gnomish.push_back(m->buildLevel( + Level::Builder(60, 35, "Gnomish Mines Level " + convertToString(i + 1)), + LevelMaker::roomLevel(CreatureFactory::level(i + 1), upKeys, {StairKey::DWARF}))); + } + /* vector tower; + int numTowerLevels = 5; + for (int i = 0; i < numTowerLevels; ++i) + tower.push_back(m->buildLevel( + Level::Builder(4, 4, "Stone Tower " + convertToString(i + 2)), + LevelMaker::towerLevel(StairKey::TOWER, StairKey::TOWER))); + + for (int i = 0; i < numTowerLevels - 1; ++i) + m->addLink(StairDirection::DOWN, StairKey::TOWER, tower[i + 1], tower[i]);*/ + + // m->addLink(StairDirection::DOWN, StairKey::TOWER, tower[0], gnomish[towerLinkIndex]); + // m->addLink(StairDirection::DOWN, StairKey::TOWER, top, tower.back()); + + for (int i = 0; i < numGnomLevels - 1; ++i) + m->addLink(StairDirection::DOWN, StairKey::DWARF, gnomish[i], gnomish[i + 1]); + + m->addLink(StairDirection::DOWN, StairKey::DWARF, top, d1); + m->addLink(StairDirection::DOWN, StairKey::DWARF, d1, gnomish[0]); + m->addLink(StairDirection::UP, StairKey::DWARF, g1, gnomish.back()); + map* levelMemory = new map(); + PCreature player = CreatureFactory::addInventory( + PCreature(new Creature(ViewObject(ViewId::PLAYER, ViewLayer::CREATURE, "Player"), Tribe::player, + CATTR( + c.speed = 100; + c.weight = 90; + c.size = CreatureSize::LARGE; + c.strength = 15; + c.dexterity = 15; + c.barehandedDamage = 5; + c.humanoid = true; + c.name = "adventurer"; + c.firstName = heroName; + c.skills.insert(Skill::archery); + c.skills.insert(Skill::twoHandedWeapon);), Player::getFactory(view, levelMemory))), { + ItemId::FIRST_AID_KIT, + ItemId::SWORD, + ItemId::KNIFE, + ItemId::LEATHER_ARMOR, ItemId::LEATHER_HELM}); + for (int i : Range(Random.getRandom(70, 131))) + player->take(ItemFactory::fromId(ItemId::GOLD_PIECE)); + Tribe::goblin->makeSlightEnemy(player.get()); + Level* start = d1; + start->setPlayer(player.get()); + start->landCreature(StairDirection::UP, StairKey::DWARF, std::move(player)); + return m; +} + +Model* Model::collectiveModel(View* view, int numCreatures) { + Model* m = new Model(view); + CreatureFactory factory = CreatureFactory::collectiveStart(); + Location* villageLocation = new Location("village of " + NameGenerator::townNames.getNext(), ""); + Level* top = m->prepareTopLevel(villageLocation); + Level* second = m->buildLevel( + Level::Builder(60, 35, "Dungeons of doom "), + LevelMaker::roomLevel(CreatureFactory::level(3), {StairKey::DWARF}, {StairKey::DWARF})); + Level* l = m->buildLevel(Level::Builder(60, 35, "A Cave"), + LevelMaker::collectiveLevel({StairKey::DWARF}, {StairKey::DWARF})); + Level* dwarf = m->buildLevel( + Level::Builder(60, 35, NameGenerator::townNames.getNext()), + LevelMaker::mineTownLevel(CreatureFactory::dwarfTown(1), {StairKey::DWARF}, {})); + m->addLink(StairDirection::DOWN, StairKey::DWARF, top, l); + m->addLink(StairDirection::DOWN, StairKey::DWARF, l, second); + m->addLink(StairDirection::DOWN, StairKey::DWARF, second, dwarf); + m->collective = new Collective(CreatureFactory::collectiveMinions(), CreatureFactory::collectiveUndead()); + m->collective->setLevel(l); + Tribe::elven->addEnemy(Tribe::player); + Tribe::dwarven->addEnemy(Tribe::player); + Tribe::goblin->addEnemy(Tribe::player); + for (int i : Range(numCreatures)) { + PCreature c = factory.random(MonsterAIFactory::collective(m->collective)); + l->landCreature(StairDirection::UP, StairKey::PLAYER_SPAWN, c.get()); + m->collective->addCreature(c.get()); + m->addCreature(std::move(c)); + } + VillageControl* control = VillageControl::humanVillage(m->collective, villageLocation, + StairDirection::DOWN, StairKey::DWARF); + CreatureFactory firstAttack = CreatureFactory::collectiveEnemies(); + CreatureFactory lastAttack = CreatureFactory::collectiveFinalAttack(); + vector> heroAttackTime { + { 100, Random.getRandom(2, 5) }, + { 200, Random.getRandom(4, 8) }, + { 300, Random.getRandom(12, 18) }}; + for (int i : All(heroAttackTime)) { + CreatureFactory& factory = (i == heroAttackTime.size() - 1 ? lastAttack : firstAttack); + for (int k : Range(heroAttackTime[i].second)) { + PCreature c = factory.random(MonsterAIFactory::villageControl(control, villageLocation)); + control->addCreature(c.get(), heroAttackTime[i].first); + top->landCreature(StairDirection::UP, StairKey::PLAYER_SPAWN, std::move(c)); + } + } + VillageControl* dwarfControl = VillageControl::dwarfVillage(m->collective, l, StairDirection::UP, StairKey::DWARF); + for (int i : All(heroAttackTime)) { + CreatureFactory factory = CreatureFactory::singleType(Tribe::dwarven, CreatureId::DWARF); + for (int k : Range(heroAttackTime[i].second)) { + PCreature c = factory.random(MonsterAIFactory::villageControl(dwarfControl, nullptr)); + dwarfControl->addCreature(c.get(), heroAttackTime[i].first); + dwarf->landCreature(StairDirection::UP, StairKey::DWARF, std::move(c)); + } + } + Tribe::player->addEnemy(Tribe::dwarven); + return m; +} + +void Model::addLink(StairDirection dir, StairKey key, Level* l1, Level* l2) { + levelLinks[make_tuple(dir, key, l1)] = l2; + levelLinks[make_tuple(opposite(dir), key, l2)] = l1; +} + +Vec2 Model::changeLevel(StairDirection dir, StairKey key, Creature* c) { + Level* current = c->getLevel(); + Level* target = levelLinks[make_tuple(dir, key, current)]; + Vec2 newPos = target->landCreature(opposite(dir), key, c); + if (c->isPlayer()) { + current->setPlayer(nullptr); + target->setPlayer(c); + } + return newPos; +} + +void Model::changeLevel(Level* target, Vec2 position, Creature* c) { + Level* current = c->getLevel(); + target->landCreature({position}, c); + if (c->isPlayer()) { + current->setPlayer(nullptr); + target->setPlayer(c); + } +} diff --git a/model.h b/model.h new file mode 100644 index 000000000..16a89a417 --- /dev/null +++ b/model.h @@ -0,0 +1,60 @@ +#ifndef _MODEL_H +#define _MODEL_H + +#include +#include +#include "util.h" +#include "level.h" +#include "action.h" +#include "level_generator.h" +#include "square_factory.h" +#include "monster.h" + +class Collective; + +/** + * Main class that holds all game logic. + */ +class Model { + public: + + /** Generates levels and all game entities for a single player game. */ + static Model* heroModel(View* view, const string& heroName); + + /** Generates levels and all game entities for a collective game. */ + static Model* collectiveModel(View* view, int numCreatures); + + /** Makes an update to the game. This method is repeatedly called to make the game run. + Returns the total logical time elapsed.*/ + void update(double totalTime); + + /** Removes creature from current level and puts into the next, according to direction. */ + Vec2 changeLevel(StairDirection direction, StairKey key, Creature*); + + /** Removes creature from current level and puts into the given level */ + void changeLevel(Level*, Vec2 position, Creature*); + + /** Adds new creature to the queue. Assumes this creature has already been added to a level. */ + void addCreature(PCreature); + + /** Removes creature from the queue. Assumes it has already been removed from its level. */ + void removeCreature(Creature*); + + bool isTurnBased(); + + private: + Model(View* view); + Level* buildLevel(Level::Builder&& b, LevelMaker*, bool surface = false); + void addLink(StairDirection, StairKey, Level*, Level*); + Level* prepareTopLevel(Location*); + + vector levels; + View* view; + TimeQueue timeQueue; + vector deadCreatures; + double lastTick = -1000; + map, Level*> levelLinks; + Collective* collective = nullptr; +}; + +#endif diff --git a/monkey_test.cpp b/monkey_test.cpp new file mode 100644 index 000000000..53ae914e3 --- /dev/null +++ b/monkey_test.cpp @@ -0,0 +1,60 @@ +#include "stdafx.h" + +using namespace std; + +class MonkeyView : public View { + public: + MonkeyView() : View(100, 80) {} + virtual void initialize() { + } + virtual void close() override {} + virtual void addMessage(const string& message) override {} + virtual void addImportantMessage(const string& message) override {} + virtual Action getAction() override { + static int cnt = 0; + Debug() << ++cnt << " moves."; + return (Action)Random.getRandom(24); + } + virtual Optional chooseFromList(const string& title, const vector& options) override { + if (options.size() == 0) + return Nothing(); + int ind; + do { + ind = Random.getRandom(options.size()); + } while (View::hasTitlePrefix(options[ind])); + int titles = 0; + for (int i = 0; i < ind; ++i) + if (View::hasTitlePrefix(options[i])) + ++titles; + return ind - titles; + } + virtual Optional getNumber(const string&, int max) override { + return Random.getRandom(1, max + 1); + } + virtual void presentList(const string& title, const vector& options, bool) override { + } + virtual Optional chooseDirection(const string&) override { + return Vec2::neighbors8()[Random.getRandom(8)]; + } + virtual bool yesOrNoPrompt(const string&) override { + return Random.roll(2); + } + virtual void onRefreshView(const vector >& objects) override {} + virtual void onPlaceObject(Vec2 pos, const ViewObject& object) override {} + virtual void onMoveObject(Vec2 from, Vec2 to, const ViewObject& object) override {} + virtual void onEraseObject(Vec2 pos, const ViewObject& object) override {} +}; + +int main() { + Quest::initialize(); + ItemFactory::init(); + Tribe::init(); + View* view = new MonkeyView(); + view->initialize(); + messageBuffer.initialize(view); + Model model(view); + while (1) { + model.update(); + } + return 0; +} diff --git a/monster.cpp b/monster.cpp new file mode 100644 index 000000000..1e5d01ad3 --- /dev/null +++ b/monster.cpp @@ -0,0 +1,85 @@ +#include "stdafx.h" + +using namespace std; + +Monster::Monster(Creature* c, MonsterAIFactory f) : + creature(c), actor(f.getMonsterAI(c)) {} + +ControllerFactory Monster::getFactory(MonsterAIFactory f) { + return ControllerFactory([=](Creature* c) { return new Monster(c, f);}); +} + +void Monster::makeMove() { + actor->makeMove(); +} + +static string addName(const string& s, const string& n) { + if (n.size() > 0) + return s + " " + n; + else + return s; +} + +bool Monster::isPlayer() const { + return false; +} + +const MapMemory& Monster::getMemory(const Level* l) const { + return MapMemory::empty(); +} + +void Monster::onBump(Creature* c) { + c->attack(creature); +} + +void Monster::you(MsgType type, const string& param) const { + string msg, msgNoSee; + switch (type) { + case MsgType::ARE: msg = creature->getTheName() + " is " + param; break; + case MsgType::YOUR: msg = creature->getTheName() + "'s " + param; break; + case MsgType::FEEL: msg = creature->getTheName() + " looks " + param; break; + case MsgType::FALL_ASLEEP: msg = (creature->getTheName() + " falls asleep") + (param.size() > 0 ? " on the " + param : "."); + msgNoSee = "You hear snorring."; break; + case MsgType::WAKE_UP: msg = creature->getTheName() + " wakes up."; break; + case MsgType::DIE: msg = creature->getTheName() + " is killed!"; break; + case MsgType::TELE_APPEAR: msg = creature->getTheName() + " appears out of nowhere!"; break; + case MsgType::TELE_DISAPPEAR: msg = creature->getTheName() + " suddenly disappears!"; break; + case MsgType::BLEEDING_STOPS: msg = creature->getTheName() + "'s bleeding stops."; break; + case MsgType::DIE_OF_BLEEDING: msg = creature->getTheName() + " dies."; break; + case MsgType::FALL_APART: msg = creature->getTheName() + " falls apart."; break; + case MsgType::MISS_ATTACK: msg = creature->getTheName() + addName(" misses", param); break; + case MsgType::MISS_THROWN_ATTACK: msg = param + " misses " + creature->getTheName(); break; + case MsgType::HIT_THROWN_ITEM: msg = param + " hits " + creature->getTheName(); break; + case MsgType::CRASH_THROWN_ITEM: msg = param + " crashes on " + creature->getTheName() + "'s head"; break; + case MsgType::GET_HIT_NODAMAGE: msg = "The " + param + " is harmless."; break; + case MsgType::COLLAPSE: msg = creature->getTheName() + " collapses."; break; + case MsgType::FALL: msg = creature->getTheName() + " falls on the " + param; break; + case MsgType::TRIGGER_TRAP: msg = creature->getTheName() + " triggers something."; break; + case MsgType::PANIC: msg = creature->getTheName() + " panics."; break; + case MsgType::RAGE: msg = creature->getTheName() + " is enraged."; break; + case MsgType::SWING_WEAPON: msg = creature->getTheName() + " swings his " + param; break; + case MsgType::THRUST_WEAPON: msg = creature->getTheName() + " thrusts his " + param; break; + case MsgType::KICK: msg = creature->getTheName() + addName(" kicks", param); break; + case MsgType::BITE: msg = creature->getTheName() + addName(" bites", param); break; + case MsgType::PUNCH: msg = creature->getTheName() + addName(" punches", param); break; + case MsgType::CRAWL: msg = creature->getTheName() + " is crawling"; break; + case MsgType::STAND_UP: msg = creature->getTheName() + " is back on his feet"; break; + case MsgType::TURN_INVISIBLE: msg = creature->getTheName() + " disappears!"; break; + case MsgType::TURN_VISIBLE: msg = creature->getTheName() + " appears out of nowhere!"; break; + case MsgType::DROP_WEAPON: msg = creature->getTheName() + " drops his " + param; break; + case MsgType::ITEM_CRASHES: msg = param + " crashes on " + creature->getTheName(); break; + case MsgType::ENTER_PORTAL: msg = creature->getTheName() + " disappears in the portal."; break; + case MsgType::HAPPENS_TO: msg = param + " " + creature->getTheName(); break; + case MsgType::BURN: msg = creature->getTheName() + " burns in the " + param; msgNoSee = "You hear a horrible shriek"; break; + case MsgType::DROWN: msg = creature->getTheName() + " drowns in the " + param; msgNoSee = "You hear a loud splash" ;break; + case MsgType::SET_UP_TRAP: msg = "You set up the trap"; break; + case MsgType::KILLED_BY: msg = creature->getTheName() + " is killed by " + param; break; + default: break; + } + if (!msg.empty()) + creature->globalMessage(msg, msgNoSee); +} + +void Monster::you(const string& param) const { + creature->globalMessage(creature->getTheName() + " " + param); +} diff --git a/monster.h b/monster.h new file mode 100644 index 000000000..655b762fd --- /dev/null +++ b/monster.h @@ -0,0 +1,31 @@ +#ifndef _MONSTER_H +#define _MONSTER_H + +#include "creature.h" +#include "shortest_path.h" +#include "enums.h" + +class Monster : public Controller { + public: + Monster(Creature* creature, MonsterAIFactory); + + virtual void you(MsgType type, const string& param) const override; + virtual void you(const string& param) const override; + + virtual void makeMove() override; + virtual bool isPlayer() const; + virtual const MapMemory& getMemory(const Level* l = nullptr) const; + + virtual void onBump(Creature*); + + static ControllerFactory getFactory(MonsterAIFactory); + + protected: + Creature* creature; + + private: + PMonsterAI actor; + vector enemies; +}; + +#endif diff --git a/monster_ai.cpp b/monster_ai.cpp new file mode 100644 index 000000000..4d445fb7b --- /dev/null +++ b/monster_ai.cpp @@ -0,0 +1,776 @@ +#include "stdafx.h" + +using namespace std; + +Behaviour::Behaviour(Creature* c) : creature(c) { +} + +const Creature* Behaviour::getClosestEnemy() { + int dist = 1000000000; + const Creature* result = nullptr; + for (const Creature* other : creature->getVisibleEnemies()) { + if ((other->getPosition() - creature->getPosition()).length8() < dist && other->getTribe() != Tribe::pest) { + result = other; + dist = (other->getPosition() - creature->getPosition()).length8(); + } + } + return result; +} + +Item* Behaviour::getBestWeapon() { + Item* best = nullptr; + int damage = -1; + for (Item* item : creature->getEquipment().getItems(Item::typePredicate(ItemType::WEAPON))) + if (item->getModifier(AttrType::DAMAGE) > damage) { + damage = item->getModifier(AttrType::DAMAGE); + best = item; + } + return best; +} + +MoveInfo Behaviour::tryToApplyItem(EffectType type, double maxTurns) { + auto teleItems = creature->getEquipment().getItems(Item::effectPredicate(type)); + for (Item* item : teleItems) + if (creature->canApplyItem(item) && item->getApplyTime() <= maxTurns) + return { 1, [=]() { + creature->globalMessage(creature->getTheName() + " " + item->getApplyMsgThirdPerson(), + item->getNoSeeApplyMsg()); + creature->applyItem(item); + }}; + return {0, nullptr}; +} + +class Heal : public Behaviour { + public: + Heal(Creature* c) : Behaviour(c) {} + + virtual double itemValue(const Item* item) { + if (item->getEffectType() == EffectType::HEAL) { + return 0.5; + } + else + return 0; + } + + virtual MoveInfo getMove() { + if (!creature->isHumanoid() || creature->getHealth() == 1) + return {0, nullptr}; + for (Vec2 v : Vec2::directions8()) + if (creature->canHeal(v) && creature->isFriend(creature->getConstSquare(v)->getCreature())) { + creature->getConstSquare(v)->getCreature()->privateMessage("\"Let me help you my friend.\""); + creature->heal(v); + } + MoveInfo move = tryToApplyItem(EffectType::HEAL, 1); + if (move.move) + return { min(1.0, 1.5 - creature->getHealth()), move.move }; + move = tryToApplyItem(EffectType::HEAL, 3); + if (move.move) + return { 0.3 * min(1.0, 1.5 - creature->getHealth()), move.move }; + if (creature->getConstSquare()->getApplyType(creature) == SquareApplyType::SLEEP) + return { 0.4 * min(1.0, 1.5 - creature->getHealth()), [this] { + creature->applySquare(); + }}; + Vec2 bedRadius(10, 10); + Level* l = creature->getLevel(); + if (!hasBed || hasBed->level != creature->getLevel()) { + for (Vec2 v : Rectangle(creature->getPosition() - bedRadius, creature->getPosition() + bedRadius)) + if (l->inBounds(v) && l->getSquare(v)->getApplyType(creature) == SquareApplyType::SLEEP) + if (Optional move = creature->getMoveTowards(v)) + return { 0.4 * min(1.0, 1.5 - creature->getHealth()), [=] { + creature->move(*move); + hasBed = {v, creature->getLevel() }; + }}; + } else + if (Optional move = creature->getMoveTowards(hasBed->pos)) + return { 0.4 * min(1.0, 1.5 - creature->getHealth()), [=] { + creature->move(*move); + }}; + + return {0, nullptr}; + } + + private: + struct BedInfo { + Vec2 pos; + const Level* level; + }; + Optional hasBed; +}; + +class Rest : public Behaviour { + public: + Rest(Creature* c) : Behaviour(c) {} + + virtual MoveInfo getMove() { + return {0.1, [=] { creature->wait(); }}; + } +}; + +class MoveRandomly : public Behaviour { + public: + MoveRandomly(Creature* c, int _memSize) + : Behaviour(c), memSize(_memSize) {} + + virtual MoveInfo getMove() { + if (!visited(creature->getPosition())) + updateMem(creature->getPosition()); + Vec2 direction(0, 0); + double val = 0.0001; + Vec2 pos = creature->getPosition(); + for (Vec2 dir : Vec2::directions8(true)) + if (!visited(pos + dir) && creature->canMove(dir)) { + direction = dir; + break; + } + if (direction == Vec2(0, 0)) + for (Vec2 dir : Vec2::directions8(true)) + if (creature->canMove(dir)) { + direction = dir; + break; + } + if (direction == Vec2(0, 0)) + return {val, [this]() { creature->wait(); }}; + else + return {val, [this, direction]() { creature->move(direction); updateMem(creature->getPosition());}}; + } + + void updateMem(Vec2 pos) { + memory.push_back(pos); + if (memory.size() > memSize) + memory.pop_front(); + } + + bool visited(Vec2 pos) { + return contains(memory, pos); + } + + private: + deque memory; + int memSize; +}; + +class AttackPest : public Behaviour { + public: + AttackPest(Creature* c) : Behaviour(c) {} + + virtual MoveInfo getMove() override { + if (creature->getTribe() == Tribe::pest) + return NoMove; + const Creature* other = nullptr; + for (Vec2 v : Vec2::directions8(true)) + if (const Creature* c = creature->getConstSquare(v)->getCreature()) + if (c->getTribe() == Tribe::pest) { + other = c; + break; + } + if (!other) + return NoMove; + if (creature->canAttack(other)) + return {1.0, [this, other]() { + creature->attack(other); + }}; + else + return NoMove; + } +}; + +class BirdFlyAway : public Behaviour { + public: + BirdFlyAway(Creature* c, double _maxDist) : Behaviour(c), maxDist(_maxDist) {} + + virtual MoveInfo getMove() override { + const Creature* enemy = getClosestEnemy(); + bool fly = Random.roll(15) || ( enemy && (enemy->getPosition() - creature->getPosition()).lengthD() < maxDist); + if (creature->canFlyAway() && fly) + return {1.0, [this] () { + creature->flyAway(); + }}; + else + return NoMove; + } + + private: + double maxDist; +}; + +class GoldLust : public Behaviour { + public: + GoldLust(Creature* c) : Behaviour(c) {} + + virtual double itemValue(const Item* item) { + if (item->getType() == ItemType::GOLD) + return 1; + else + return 0; + } +}; + +class Fighter : public Behaviour, public EventListener { + public: + Fighter(Creature* c, double powerR, bool _chase) : Behaviour(c), maxPowerRatio(powerR), chase(_chase) { + EventListener::addListener(this); + courage = c->getCourage(); + } + + virtual ~Fighter() override { + EventListener::removeListener(this); + } + + virtual void onKillEvent(const Creature* victim, const Creature* killer) override { + if (victim != creature && victim->getName() == creature->getName() && creature->canSee(victim)) { + courage -= 0.1; + } + if (lastSeen && victim->getPosition() == lastSeen->pos) + lastSeen = Nothing(); + } + + virtual void onThrowEvent(const Creature* thrower, const Item* item, const vector& trajectory) override { + if (!creature->isHumanoid()) + return; + string name = creature->getName(); + if (contains(trajectory, creature->getPosition()) + && item->getName().size() > name.size() && item->getName().substr(0, name.size()) == name) { + creature->globalMessage(creature->getTheName() + " screams in terror!", "You hear a scream of terror."); + if (Random.roll(2)) + creature->rage(30); + else + courage -= 0.5; + } + } + + virtual const Level* getListenerLevel() const override { + return creature->getLevel(); + } + + virtual MoveInfo getMove() override { + const Creature* other = getClosestEnemy(); + if (other != nullptr) { + double myDamage = creature->getAttr(AttrType::DAMAGE); + Item* weapon = getBestWeapon(); + if (!creature->getWeapon() && weapon) + myDamage += weapon->getModifier(AttrType::DAMAGE); + double powerRatio = courage * myDamage / other->getAttr(AttrType::DAMAGE); + double weight = 1. - creature->getHealth() * 0.9; + if (powerRatio < maxPowerRatio) + weight += 2 - powerRatio * 2; + weight = min(1.0, max(0.0, weight)); + if (creature->isPanicking()) + weight = 1; + if (other->isSleeping() || other->isStationary()) + weight = 0; + Debug() << creature->getName() << " panic weight " << weight; + if (weight >= 0.5) { + if ((creature->getPosition() - other->getPosition()).length8() < 7) { + MoveInfo move = getPanicMove(other, weight); + if (move.isValid()) + return move; + else + return getAttackMove(other); + } + return NoMove; + } else + return getAttackMove(other); + } else + return getAttackMove(nullptr); + } + + MoveInfo getPanicMove(const Creature* other, double weight) { + MoveInfo teleMove = tryToApplyItem(EffectType::TELEPORT, 1); + if (teleMove.move != nullptr) + return {weight, teleMove.move}; + Optional move = creature->getMoveAway(other->getPosition(), chase); + if (move) + return {weight, [this, move] () { + creature->move(*move); + }}; + else + return NoMove; + } + + virtual double itemValue(const Item* item) { + if (item->getEffectType() && + contains({EffectType::INVISIBLE, EffectType::SLOW, EffectType::BLINDNESS, EffectType::SLEEP, + EffectType::TELEPORT}, *item->getEffectType())) + return 1; + if (item->getType() == ItemType::AMMO && creature->hasSkill(Skill::archery)) + return 0.1; + if (item->getType() != ItemType::WEAPON || !creature->hasSkillToUseWeapon(item)) + return 0; + if (item->getModifier(AttrType::THROWN_DAMAGE) > 0) + return (double)item->getModifier(AttrType::THROWN_DAMAGE) / 50; + int damage = item->getModifier(AttrType::DAMAGE); + Item* best = getBestWeapon(); + if (best && best != item && best->getModifier(AttrType::DAMAGE) >= damage) + return 0; + return (double)damage / 50; + } + + bool checkFriendlyFire(Vec2 enemyDir) { + Vec2 dir = enemyDir.shorten(); + for (Vec2 v = dir; v != enemyDir; v += dir) { + const Creature* c = creature->getConstSquare(v)->getCreature(); + if (c && !creature->isEnemy(c)) + return true; + } + return false; + } + + double getThrowValue(Item* it) { + if (it->getEffectType() && + contains({EffectType::SLOW, EffectType::BLINDNESS, EffectType::SLEEP}, *it->getEffectType())) + return 100; + return it->getModifier(AttrType::THROWN_DAMAGE); + } + + MoveInfo getThrowMove(Vec2 enemyDir) { + if (enemyDir.x != 0 && enemyDir.y != 0 && abs(enemyDir.x) != abs(enemyDir.y)) + return {0, nullptr}; + if (checkFriendlyFire(enemyDir)) + return {0, nullptr}; + Vec2 dir = enemyDir.shorten(); + Item* best = nullptr; + int damage = 0; + auto items = creature->getEquipment().getItems([this](Item* item) { + return !creature->getEquipment().isEquiped(item);}); + for (Item* item : items) + if (getThrowValue(item) > damage) { + damage = getThrowValue(item); + best = item; + } + if (best && creature->canThrowItem(best)) + return {1.0, [this, dir, best]() { + creature->globalMessage(creature->getTheName() + " throws " + best->getAName()); + creature->throwItem(best, dir); + }}; + else + return NoMove; + } + + MoveInfo getFireMove(Vec2 dir) { + if (dir.x != 0 && dir.y != 0 && abs(dir.x) != abs(dir.y)) + return {0, nullptr}; + if (checkFriendlyFire(dir)) + return {0, nullptr}; + if (creature->canFire(dir.shorten())) + return {1.0, [this, dir]() { + creature->globalMessage(creature->getTheName() + " fires an arrow "); + creature->fire(dir.shorten()); + }}; + return NoMove; + } + + MoveInfo getAttackMove(const Creature* other) { + int radius = 4; + int distance = 10000; + double lastSeenTimeout = 20; + if (other == nullptr) { + if (!lastSeen) { + return NoMove; + } + if (lastSeen->level != creature->getLevel() || + lastSeen->time < creature->getTime() - lastSeenTimeout || + lastSeen->pos == creature->getPosition()) { + lastSeen = Nothing(); + return NoMove; + } + if (chase) { + Optional move = creature->getMoveTowards(lastSeen->pos); + if (move) + return {0.5, [this, move]() { + Debug() << creature->getTheName() << " moving to last seen " << (lastSeen->pos - creature->getPosition()); + creature->move(*move); + }}; + else + return NoMove; + } + } + if (other->isInvincible()) + return NoMove; + Debug() << creature->getName() << " enemy " << other->getName(); + Vec2 enemyDir = (other->getPosition() - creature->getPosition()); + distance = enemyDir.length8(); + if (creature->isHumanoid() && !creature->getEquipment().getItem(EquipmentSlot::WEAPON)) { + Item* weapon = getBestWeapon(); + if (weapon != nullptr && creature->canEquip(weapon)) + return {3.0 / (2.0 + distance), [this, weapon]() { + creature->globalMessage(creature->getTheName() + " draws " + weapon->getAName()); + creature->equip(weapon); + }}; + } + if (distance <= 3) { + MoveInfo move = tryToApplyItem(EffectType::INVISIBLE, 1); + if (move.isValid()) + return move; + } + if (distance > 1) { + MoveInfo move = getFireMove(enemyDir); + if (move.isValid()) + return move; + move = getThrowMove(enemyDir); + if (move.isValid()) + return move; + if (chase && other->getTribe() != Tribe::wildlife) { + Optional move = creature->getMoveTowards(creature->getPosition() + enemyDir); + lastSeen = Nothing(); + if (move) + return {0.7, [this, enemyDir, move]() { + lastSeen = {creature->getPosition() + enemyDir, creature->getTime(), creature->getLevel()}; + creature->move(*move); + }}; + } + } + if (distance == 1) { + if (creature->canAttack(other)) + return {1.0, [this, other]() { + creature->attack(other); + }}; + } + return NoMove; + } + + private: + double maxPowerRatio; + double courage; + bool chase; + struct LastSeen { + Vec2 pos; + double time; + const Level* level; + }; + Optional lastSeen; +}; + +class GuardTarget : public Behaviour { + public: + GuardTarget(Creature* c, double minD, double maxD) : Behaviour(c), minDist(minD), maxDist(maxD) {} + + protected: + MoveInfo getMoveTowards(Vec2 target) { + double dist = (creature->getPosition() - target).lengthD(); + if (dist <= minDist) + return NoMove; + double exp = 1.5; + double weight = pow((dist - minDist) / (maxDist - minDist), exp); + Optional move = creature->getMoveTowards(target); + if (move) + return {weight, [this, move] () { + creature->move(*move); + }}; + else + return NoMove; + } + + private: + double minDist; + double maxDist; +}; + +class GuardArea : public Behaviour { + public: + GuardArea(Creature* c, const Location* l) : Behaviour(c), location(l), area(l->getBounds()) {} + + virtual MoveInfo getMove() override { + if (creature->getLevel() != location->getLevel()) + return NoMove; + if (!creature->getPosition().inRectangle(area)) { + for (Vec2 v : Vec2::directions8()) + if ((creature->getPosition() + v).inRectangle(area) && creature->canMove(v)) + return {1.0, [this, v] () { + creature->move(v); + }}; + Optional move = creature->getMoveTowards( + Vec2((area.getPX() + area.getKX()) / 2, (area.getPY() + area.getKY()) / 2)); + if (move) + return {1.0, [this, move] () { + creature->move(*move); + }}; + } + return NoMove; + } + + private: + const Location* location; + Rectangle area; +}; + +class GuardSquare : public GuardTarget { + public: + GuardSquare(Creature* c, Vec2 _pos, double minDist, double maxDist) : GuardTarget(c, minDist, maxDist), pos(_pos) {} + + virtual MoveInfo getMove() override { + return getMoveTowards(pos); + } + + private: + Vec2 pos; +}; + +class GuardCreature : public GuardTarget { + public: + GuardCreature(Creature* c, Creature* _target, double minDist, double maxDist) : GuardTarget(c, minDist, maxDist), target(_target) {} + + virtual MoveInfo getMove() override { + return getMoveTowards(target->getPosition()); + } + + private: + Creature* target; +}; + +class Thief : public Behaviour { + public: + Thief(Creature* c) : Behaviour(c) {} + + virtual MoveInfo getMove() override { + if (!creature->hasSkill(Skill::stealing)) + return {0, nullptr}; + for (const Creature* other : robbed) { + if (creature->canSee(other)) { + MoveInfo teleMove = tryToApplyItem(EffectType::TELEPORT, 1); + Debug() << "Gotta get out"; + if (teleMove.move != nullptr) + return teleMove; + Optional move = creature->getMoveAway(other->getPosition()); + if (move) + return {1.0, [this, move] () { + creature->move(*move); + }}; + } + } + for (Vec2 dir : Vec2::directions8(true)) { + const Creature* other = creature->getConstSquare(dir)->getCreature(); + if (other && !contains(robbed, other)) { + vector allGold; + for (Item* it : other->getEquipment().getItems()) + if (it->getType() == ItemType::GOLD) + allGold.push_back(it); + if (allGold.size() > 0) + return {1.0, [=]() { + creature->stealFrom(dir, allGold); + other->privateMessage(creature->getTheName() + " steals all your gold!"); + robbed.push_back(other); + }}; + } + } + return {0, nullptr}; + } + + private: + vector robbed; +}; + +class ByCollective : public Behaviour { + public: + ByCollective(Creature* c, Collective* col) : Behaviour(c), collective(col) {} + + virtual MoveInfo getMove() override { + return collective->getMove(creature); + } + + private: + Collective* collective; +}; + +class ChooseRandom : public Behaviour { + public: + ChooseRandom(Creature* c, vector beh, vector w) : Behaviour(c), behaviours(beh), weights(w) {} + + virtual MoveInfo getMove() override { + return chooseRandom(behaviours, weights)->getMove(); + } + + private: + vector behaviours; + vector weights; +}; + +class GoToHeart : public Behaviour { + public: + GoToHeart(Creature* c, Vec2 _heartPos) : Behaviour(c), heartPos(_heartPos) {} + + virtual MoveInfo getMove() override { + if (Optional move = creature->getMoveTowards(heartPos)) + return {1.0, [this, move] () { + creature->move(*move); + }}; + else + return NoMove; + }; + + private: + Vec2 heartPos; +}; + +class ByVillageControl : public Behaviour { + public: + ByVillageControl(Creature* c, VillageControl* control, Location* l) : + Behaviour(c), villageControl(control) { + if (l) + guardArea.reset(new GuardArea(c, l)); + } + + virtual MoveInfo getMove() override { + if (villageControl->startedAttack(creature)) + return villageControl->getMove(creature); + else if (guardArea) + return guardArea->getMove(); + else + return NoMove; + } + + private: + VillageControl* villageControl; + PBehaviour guardArea; +}; + +MonsterAI::MonsterAI(Creature* c, const vector& beh, const vector& w, bool pick) : + weights(w), creature(c), pickItems(pick) { + CHECK(beh.size() == w.size()); + for (auto b : beh) + behaviours.push_back(PBehaviour(b)); +} + +void MonsterAI::makeMove() { + vector> moves; + for (int i : All(behaviours)) { + MoveInfo move = behaviours[i]->getMove(); + move.value *= weights[i]; + moves.emplace_back(move, weights[i]); + if (pickItems) { + map> stacks = Item::stackItems(creature->getPickUpOptions()); + for (auto elem : stacks) { + Item* item = elem.second[0]; + if (!item->isUnpaid() && creature->canPickUp(elem.second)) { + MoveInfo pickupMove { behaviours[i]->itemValue(item) * weights[i], [=]() { + creature->globalMessage(creature->getTheName() + " picks up " + elem.first, ""); + creature->pickUp(elem.second); + }}; + moves.emplace_back(pickupMove, weights[i]); + } + } + } + } + /*vector inventory = creature->getEquipment().getItems([this](Item* item) { return !creature->getEquipment().isEquiped(item);}); + for (Item* item : inventory) { + bool useless = true; + for (PBehaviour& behaviour : behaviours) + if (behaviour->itemValue(item) > 0) + useless = false; + if (useless) + moves.push_back({ 0.01, [=]() { + creature->globalMessage(creature->getTheName() + " drops " + item->getAName(), ""); + creature->drop({item}); + }}); + }*/ + MoveInfo winner {0, nullptr}; + for (int i : All(moves)) { + MoveInfo& move = moves[i].first; + if (move.value > winner.value) + winner = move; + if (i < moves.size() - 1 && move.value > moves[i + 1].second) + break; + } + CHECK(winner.value > 0); + winner.move(); +} + +PMonsterAI MonsterAIFactory::getMonsterAI(Creature* c) { + return PMonsterAI(maker(c)); +} + +MonsterAIFactory::MonsterAIFactory(MakerFun _maker) : maker(_maker) { +} + +MonsterAIFactory MonsterAIFactory::monster() { + return stayInLocation(nullptr); +} + +MonsterAIFactory MonsterAIFactory::collective(Collective* col) { + return MonsterAIFactory([=](Creature* c) { + return new MonsterAI(c, { + new Heal(c), + new Fighter(c, 0.6, true), + new ByCollective(c, col), + new ChooseRandom(c, {new Rest(c), new MoveRandomly(c, 3)}, {3, 1}), + new AttackPest(c)}, + { 6, 5, 2, 1, 1}, false); + }); +} + +MonsterAIFactory MonsterAIFactory::villageControl(VillageControl* col, Location* l) { + return MonsterAIFactory([=](Creature* c) { + return new MonsterAI(c, { + new Heal(c), + new Fighter(c, 0.6, true), + new GoldLust(c), + new ByVillageControl(c, col, l), + new MoveRandomly(c, 3)}, + { 6, 5, 3, 2, 1 }); + }); +} + +MonsterAIFactory MonsterAIFactory::stayInLocation(Location* l) { + return MonsterAIFactory([l](Creature* c) { + vector actors { + new Heal(c), + new Thief(c), + new Fighter(c, 0.6, true), + new MoveRandomly(c, 3), + new AttackPest(c), + new GoldLust(c)}; + vector weights { 5, 4, 3, 1, 1, 1 }; + if (l != nullptr) { + actors.push_back(new GuardArea(c, l)); + weights.push_back(1); + } + return new MonsterAI(c, actors, weights); + }); +} + +MonsterAIFactory MonsterAIFactory::wildlifeNonPredator() { + return MonsterAIFactory([](Creature* c) { + return new MonsterAI(c, { + new Fighter(c, 1.2, false), + new MoveRandomly(c, 3)}, + {5, 1}); + }); +} + +MonsterAIFactory MonsterAIFactory::moveRandomly() { + return MonsterAIFactory([](Creature* c) { + return new MonsterAI(c, { + new MoveRandomly(c, 3)}, + {1}); + }); +} + +MonsterAIFactory MonsterAIFactory::idle() { + return MonsterAIFactory([](Creature* c) { + return new MonsterAI(c, { + new Rest(c)}, + {1}); + }); +} + +MonsterAIFactory MonsterAIFactory::scavengerBird(Vec2 corpsePos) { + return MonsterAIFactory([=](Creature* c) { + return new MonsterAI(c, { + new BirdFlyAway(c, 3), + new MoveRandomly(c, 3), + new GuardSquare(c, corpsePos, 1, 2)}, + {1, 1, 2}); + }); +} + +MonsterAIFactory MonsterAIFactory::follower(Creature* leader, int radius) { + return MonsterAIFactory([=](Creature* c) { + return new MonsterAI(c, { + new Heal(c), + new Fighter(c, 0.6, true), + new GuardCreature(c, leader, radius, 3 * radius), + new MoveRandomly(c, 3), + new GoldLust(c)}, + { 4, 3, 2, 1, 1 }); + }); +} + diff --git a/monster_ai.h b/monster_ai.h new file mode 100644 index 000000000..fcaf615ed --- /dev/null +++ b/monster_ai.h @@ -0,0 +1,77 @@ +#ifndef _ACTOR_H +#define _ACTOR_H + +#include "creature.h" +#include "location.h" + +struct MoveInfo { + double value; + function move; + + bool isValid() const { + return move != nullptr; + } +}; + +const MoveInfo NoMove = {0.0, nullptr}; + +enum MonsterAIType { + MONSTER, + WILDLIFE_NON_PREDATOR, + BIRD_FLY_AWAY, + FOLLOWER, +}; + +class Behaviour { + public: + Behaviour(Creature*); + virtual MoveInfo getMove() { return {0, nullptr}; } + virtual void onAttacked(const Creature* attacker) {} + virtual double itemValue(const Item*) { return 0; } + Item* getBestWeapon(); + const Creature* getClosestEnemy(); + MoveInfo tryToApplyItem(EffectType, double maxTurns); + + virtual ~Behaviour() {} + + protected: + Creature* creature; +}; + +class MonsterAI { + public: + void makeMove(); + + private: + friend class MonsterAIFactory; + MonsterAI(Creature*, const vector& behaviours, const vector& weights, bool pickItems = true); + vector behaviours; + vector weights; + Creature* creature; + bool pickItems; +}; + +class Collective; +class VillageControl; + +class MonsterAIFactory { + public: + PMonsterAI getMonsterAI(Creature* c); + + static MonsterAIFactory collective(Collective*); + static MonsterAIFactory villageControl(VillageControl*, Location*); + static MonsterAIFactory monster(); + static MonsterAIFactory stayInLocation(Location*); + static MonsterAIFactory wildlifeNonPredator(); + static MonsterAIFactory scavengerBird(Vec2 corpsePos); + static MonsterAIFactory follower(Creature*, int radius); + static MonsterAIFactory moveRandomly(); + static MonsterAIFactory idle(); + + private: + typedef function MakerFun; + MonsterAIFactory(MakerFun); + MakerFun maker; +}; + +#endif diff --git a/name_generator.cpp b/name_generator.cpp new file mode 100644 index 000000000..92f59da2f --- /dev/null +++ b/name_generator.cpp @@ -0,0 +1,85 @@ +#include "stdafx.h" + +NameGenerator NameGenerator::scrolls; +NameGenerator NameGenerator::firstNames; +NameGenerator NameGenerator::aztecNames; +NameGenerator NameGenerator::creatureNames; +NameGenerator NameGenerator::weaponNames; +NameGenerator NameGenerator::worldNames; +NameGenerator NameGenerator::townNames; +NameGenerator NameGenerator::dwarfNames; +NameGenerator NameGenerator::deityNames; +NameGenerator NameGenerator::demonNames; +NameGenerator NameGenerator::dogNames; + +string getSyllable() { + string vowels = "aeyuio"; + string consonants = "qwrtplkjhgfdszxcvbnm"; + string ret; + if (Random.roll(3)) + ret += consonants[Random.getRandom(consonants.size())]; + ret += vowels[Random.getRandom(vowels.size())]; + if (Random.roll(3)) + ret += consonants[Random.getRandom(consonants.size())]; + return ret; +} + +string getWord() { + int syllables = chooseRandom({1, 2, 3, 4}, {1, 4, 3, 1}); + string ret; + for (int i : Range(syllables)) + ret += getSyllable(); + return ret; +} + +vector readLines(const string& path) { + vector input; + ifstream in(path); + CHECK(in.is_open()) << "Unable to open " << path; + char buf[100]; + while (in.getline(buf, 100)) + input.push_back(buf); + return input; +} + +void NameGenerator::init(const string& firstNamesPath, const string& aztecNamesPath, + const string& creatureNamesPath, const string& weaponNamesPath, const string& worldsPath, + const string& townsPath, const string& dwarfsPath, const string& deitiesPath, const string& demonsPath, + const string& dogsPath) { + vector input; + for (int i : Range(1000)) { + string ret; + int parts = chooseRandom({1, 2}, {3, 1}); + for (int k : Range(parts)) + ret += getWord() + " "; + trim(ret); + input.push_back(ret); + } + scrolls = NameGenerator(input); + + firstNames = NameGenerator(readLines(firstNamesPath)); + aztecNames = NameGenerator(readLines(aztecNamesPath)); + creatureNames = NameGenerator(readLines(creatureNamesPath)); + weaponNames = NameGenerator(readLines(weaponNamesPath)); + worldNames = NameGenerator(readLines(worldsPath)); + townNames = NameGenerator(readLines(townsPath)); + deityNames = NameGenerator(readLines(deitiesPath)); + dwarfNames = NameGenerator(readLines(dwarfsPath)); + demonNames = NameGenerator(readLines(demonsPath)); + dogNames = NameGenerator(readLines(dogsPath)); +} + + +string NameGenerator::getNext() { + CHECK(!names.empty()) << "Out of names!"; + string ret = names.front(); + names.pop(); + return ret; +} + + +NameGenerator::NameGenerator(vector list) { + random_shuffle(list.begin(), list.end(),[](int a) { return Random.getRandom(a);}); + for (string name : list) + names.push(name); +} diff --git a/name_generator.h b/name_generator.h new file mode 100644 index 000000000..0c0ee733b --- /dev/null +++ b/name_generator.h @@ -0,0 +1,37 @@ +#ifndef _NAME_GENERATOR +#define _NAME_GENERATOR + +class NameGenerator { + public: + NameGenerator() = default; + string getNext(); + + static NameGenerator firstNames; + static NameGenerator scrolls; + static NameGenerator aztecNames; + static NameGenerator creatureNames; + static NameGenerator weaponNames; + static NameGenerator worldNames; + static NameGenerator townNames; + static NameGenerator dwarfNames; + static NameGenerator deityNames; + static NameGenerator demonNames; + static NameGenerator dogNames; + + static void init( + const string& firstNamesPath, + const string& aztecNamesPath, + const string& specialCreaturesPath, + const string& specialWeaponsPath, + const string& worldsPath, + const string& townsPath, + const string& dwarfPath, + const string& deitiesPath, + const string& demonsPath, + const string& dogsPath); + private: + NameGenerator(vector names); + queue names; +}; + +#endif diff --git a/pantheon.cpp b/pantheon.cpp new file mode 100644 index 000000000..3b0df4f2c --- /dev/null +++ b/pantheon.cpp @@ -0,0 +1,269 @@ +#include "stdafx.h" + +static map> epithetsMap { + { DeityHabitat::FIRE, + { Epithet::WAR, Epithet::DEATH, Epithet::DESTRUCTION, Epithet::WEALTH, + Epithet::FEAR, Epithet::CRAFTS, Epithet::LIGHT, Epithet::DARKNESS }}, + { DeityHabitat::EARTH, + { Epithet::HEALTH, Epithet::NATURE, Epithet::WINTER, Epithet::LOVE, + Epithet::WEALTH, Epithet::MIND, Epithet::CHANGE, Epithet::DEFENSE, Epithet::DARKNESS }}, + { DeityHabitat::TREES, + { Epithet::HEALTH, Epithet::NATURE, Epithet::LOVE, Epithet::LIGHT, + Epithet::CHANGE, Epithet::CRAFTS, Epithet::HUNTING, Epithet::FORTUNE, Epithet::SECRETS, }}, + { DeityHabitat::STONE, + { Epithet::WISDOM, Epithet::WEALTH, Epithet::DEFENSE, Epithet::SECRETS, Epithet::DEATH, + Epithet::WINTER, }}, + { DeityHabitat::WATER, + { Epithet::NATURE, Epithet::WISDOM, Epithet::WEALTH, Epithet::MIND, Epithet::DESTRUCTION, + Epithet::CHANGE, Epithet::DEFENSE, Epithet::FEAR, Epithet::COURAGE, Epithet::HEALTH, }}, + { DeityHabitat::AIR, + { Epithet::MIND, Epithet::LIGHTNING, Epithet::LIGHT, Epithet::CHANGE, + Epithet::FORTUNE, Epithet::FEAR, Epithet::COURAGE, }}, + { DeityHabitat::STARS, + { Epithet::DEATH, Epithet::WAR, Epithet::WINTER, Epithet::WISDOM, Epithet::LOVE, + Epithet::DARKNESS, Epithet::FORTUNE, Epithet::SECRETS, }} + +}; + +/* + CHANGE earth, water, trees, earth + COURAGE air, water + CRAFTS trees, fire + DARKNESS stars, earth, fire + DEATH stars, fire, stone + DEFENSE water, stone, earth + DESTRUCTION water, fire + FEAR air, water, fire + FORTUNE stars, air, trees + HEALTH water, trees, earth + HUNTING trees + LIGHT air, trees, fire + LIGHTNING air + LOVE stars, air, trees + MIND air, water, earth + NATURE water, trees, earth + SECRETS stars, stone, trees + WAR stars, fire + WEALTH water, stone, earth, fire + WINTER stars, stone, earth + WISDOM stars, water, stone +*/ + +static string getEpithetString(Epithet epithet) { + switch (epithet) { + case Epithet::CHANGE: return "change"; + case Epithet::COURAGE: return "courage"; // ? + case Epithet::CRAFTS: return "crafts"; + case Epithet::DARKNESS: return "darkness"; + case Epithet::DEATH: return "death"; + case Epithet::DEFENSE: return "defense"; + case Epithet::DESTRUCTION: return "destruction"; + case Epithet::FEAR: return "fear"; + case Epithet::FORTUNE: return "fortune"; // ? + case Epithet::HEALTH: return "health"; + case Epithet::HUNTING: return "hunting"; // cos do polowania + case Epithet::LIGHT: return "light"; // ? + case Epithet::LIGHTNING: return "lightning"; + case Epithet::LOVE: return "love"; // potion of love + case Epithet::MIND: return "mind"; + case Epithet::NATURE: return "nature"; + case Epithet::SECRETS: return "secrets"; + case Epithet::WAR: return "war"; + case Epithet::WEALTH: return "wealth"; + case Epithet::WINTER: return "winter"; // zamarza level + case Epithet::WISDOM: return "wisdom"; + } + return ""; +} + +string Deity::getName() const { + return name; +} + +Gender Deity::getGender() const { + return gender; +} + +string Deity::getEpithets() const { + vector v; + for (Epithet e : epithets) + v.push_back(getEpithetString(e)); + return combine(v); +} + +static string toString(DeityHabitat h) { + switch (h) { + case DeityHabitat::EARTH: return "the earth"; + case DeityHabitat::STONE: return "stone"; + case DeityHabitat::FIRE: return "fire"; + case DeityHabitat::AIR: return "the air"; + case DeityHabitat::TREES: return "the trees"; + case DeityHabitat::WATER: return "water"; + case DeityHabitat::STARS: return "the stars"; + } + return ""; +} + +DeityHabitat Deity::getHabitat() const { + return habitat; +} + +string Deity::getHabitatString() const { + return toString(habitat); +} + +static void grantGift(Creature* c, ItemId id, string deity, int num = 1) { + c->privateMessage(deity + " grants you a gift."); + Effect::giveItemEffect(id, num)->applyToCreature(c, EffectStrength::NORMAL); +} + +static void applyEffect(Creature* c, EffectType effect, string msg) { + c->privateMessage(msg); + Effect::getEffect(effect)->applyToCreature(c, EffectStrength::STRONG); +} + +void Deity::onPrayer(Creature* c) { + bool prayerAnswered = false; + for (Epithet epithet : randomPermutation(epithets)) { + if (contains(usedEpithets, epithet)) + continue; + bool noEffect = false; + switch (epithet) { + case Epithet::DEATH: { + PCreature death = CreatureFactory::fromId(CreatureId::DEATH, Tribe::killEveryone); + for (Vec2 v : c->getPosition().neighbors8(true)) + if (c->getLevel()->inBounds(v) && c->getLevel()->getSquare(v)->canEnter(death.get())) { + c->privateMessage("Death appears before you."); + c->getLevel()->addCreature(v, std::move(death)); + break; + } + if (death) + noEffect = true; + break; } + case Epithet::WAR: + grantGift(c, chooseRandom( + {ItemId::SPECIAL_SWORD, ItemId::SPECIAL_BATTLE_AXE, ItemId::SPECIAL_WAR_HAMMER}), name); break; + case Epithet::WISDOM: grantGift(c, + chooseRandom({ItemId::MUSHROOM_BOOK, ItemId::POTION_BOOK, ItemId::AMULET_BOOK}), name); break; + case Epithet::DESTRUCTION: applyEffect(c, EffectType::DESTROY_EQUIPMENT, ""); break; + case Epithet::SECRETS: grantGift(c, ItemId::INVISIBLE_POTION, name); break; + case Epithet::LIGHTNING: + c->bleed(0.9); + c->you(MsgType::ARE, "struck by a lightning bolt!"); + break; + case Epithet::FEAR: applyEffect(c, EffectType::PANIC, name + " puts fear in your heart"); break; + case Epithet::MIND: + if (Random.roll(2)) + applyEffect(c, EffectType::RAGE, name + " fills your head with anger"); + else + applyEffect(c, EffectType::HALLU, ""); + break; + case Epithet::CHANGE: + if (Random.roll(2) && c->getEquipment().getItem(EquipmentSlot::WEAPON)) { + PCreature snake = CreatureFactory::fromId(CreatureId::SNAKE, Tribe::pest); + for (Vec2 v : c->getPosition().neighbors8(true)) + if (c->getLevel()->inBounds(v) && c->getLevel()->getSquare(v)->canEnter(snake.get())) { + c->getLevel()->addCreature(v, std::move(snake)); + c->steal({c->getEquipment().getItem(EquipmentSlot::WEAPON)}); + c->privateMessage("Ouch!"); + c->you(MsgType::YOUR, "weapon turns into a snake!"); + break; + } + if (!snake) + break; + } + for (Item* it : randomPermutation(c->getEquipment().getItems())) { + if (it->getType() == ItemType::POTION) { + c->privateMessage("Your " + it->getName() + " changes color!"); + c->steal({it}); + c->take(ItemFactory::potions().random()); + break; + } + if (it->getType() == ItemType::SCROLL) { + c->privateMessage("Your " + it->getName() + " changes label!"); + c->steal({it}); + c->take(ItemFactory::scrolls().random()); + break; + } + if (it->getType() == ItemType::AMULET) { + c->privateMessage("Your " + it->getName() + " changes shape!"); + c->steal({it}); + c->take(ItemFactory::amulets().random()); + break; + } + } + break; + case Epithet::HEALTH: + if (c->getHealth() < 1 || c->lostLimbs()) + applyEffect(c, EffectType::HEAL, "You feel a healing power overcoming you"); + else { + if (Random.roll(4)) + grantGift(c, ItemId::HEALING_AMULET, name); + else + grantGift(c, ItemId::HEALING_POTION, name, Random.getRandom(1, 4)); + } + break; + case Epithet::NATURE: grantGift(c, ItemId::FRIENDLY_ANIMALS_AMULET, name); break; +// case Epithet::LOVE: grantGift(c, ItemId::PANIC_MUSHROOM, name); break; + case Epithet::WEALTH: grantGift(c, ItemId::GOLD_PIECE, name, Random.getRandom(100, 200)); break; + case Epithet::DEFENSE: grantGift(c, ItemId::DEFENSE_AMULET, name); break; + case Epithet::DARKNESS: applyEffect(c, EffectType::BLINDNESS, ""); break; + case Epithet::CRAFTS: applyEffect(c, + chooseRandom({EffectType::ENHANCE_ARMOR, EffectType::ENHANCE_WEAPON}), ""); break; +// case Epithet::HUNTING: grantGift(c, ItemId::PANIC_MUSHROOM, name); break; + default: noEffect = true; + } + usedEpithets.push_back(epithet); + if (!noEffect) { + prayerAnswered = true; + break; + } + } + if (!prayerAnswered) + c->privateMessage("Your prayer is not answered."); +} + +vector generateDeities() { + set used; + vector ret; + for (auto elem : epithetsMap) { + string deity = NameGenerator::deityNames.getNext(); + Gender gend = Gender::MALE; + if ((deity.back() == 'a' || deity.back() == 'i') && !Random.roll(4)) + gend = Gender::FEMALE; + vector ep; + for (int i : Range(Random.getRandom(1, 4))) { + Epithet epithet; + int cnt = 100; + do { + epithet = chooseRandom(elem.second); + } while (used.count(epithet) && --cnt > 0); + if (cnt == 0) + break; + used.insert(epithet); + ep.push_back(epithet); + } + if (ep.empty()) + return generateDeities(); + ret.push_back(new Deity(deity, gend, ep, elem.first)); + } + return ret; +} + +vector Deity::getDeities() { + static vector deities = generateDeities(); + return deities; +} + +Deity* Deity::getDeity(DeityHabitat h) { + for (Deity* d : getDeities()) + if (d->getHabitat() == h) + return d; + Debug(FATAL) << "Didn't find deity for habitat " << (int)h; + return getDeities()[0]; +} + +Deity::Deity(const string& n, Gender g, const vector& e, DeityHabitat h) : + name(n), gender(g), epithets(e), habitat(h) { +} + diff --git a/pantheon.h b/pantheon.h new file mode 100644 index 000000000..46f69a2d4 --- /dev/null +++ b/pantheon.h @@ -0,0 +1,61 @@ +#ifndef _PANTHEON_H +#define _PANTHEON_H + +#include "util.h" + +enum class DeityHabitat { + EARTH, + STONE, + FIRE, + AIR, + TREES, + WATER, + STARS }; + +enum class Epithet { + CHANGE, + COURAGE, + CRAFTS, + DARKNESS, + DEATH, + DEFENSE, + DESTRUCTION, + FEAR, + FORTUNE, + HEALTH, + HUNTING, + LIGHT, + LIGHTNING, + LOVE, + MIND, + NATURE, + SECRETS, + WAR, + WEALTH, + WINTER, + WISDOM, +}; + +class Deity { + public: + Deity(const string& name, Gender gender, const vector& epithets, DeityHabitat habitat); + string getName() const; + Gender getGender() const; + string getEpithets() const; + string getHabitatString() const; + DeityHabitat getHabitat() const; + void onPrayer(Creature* c); + + static vector getDeities(); + static Deity* getDeity(DeityHabitat); + + private: + Deity(Deity&) {} + string name; + Gender gender; + vector epithets; + vector usedEpithets; + DeityHabitat habitat; +}; + +#endif diff --git a/player.cpp b/player.cpp new file mode 100644 index 000000000..1839718f3 --- /dev/null +++ b/player.cpp @@ -0,0 +1,563 @@ +#include "stdafx.h" + +using namespace std; + +Player::Player(Creature* c, View* v, bool greet, map* memory) : + creature(c), view(v), displayGreeting(greet), levelMemory(memory) { + EventListener::addListener(this); +} + +Player::~Player() { + EventListener::removeListener(this); +} + +const Level* Player::getListenerLevel() const { + return creature->getLevel(); +} + +void Player::onThrowEvent(const Creature* thrower, const Item* item, const vector& trajectory) { + for (Vec2 v : trajectory) + if (creature->canSee(v)) { + view->animateObject(trajectory, item->getViewObject()); + return; + } +} +ControllerFactory Player::getFactory(View* f, map* levelMemory) { + return ControllerFactory([=](Creature* c) { return new Player(c, f, true, levelMemory);}); +} + +map slotSuffixes = { + {EquipmentSlot::WEAPON, "(weapon ready)"}, + {EquipmentSlot::RANGED_WEAPON, "(ranged weapon ready)"}, + {EquipmentSlot::BODY_ARMOR, "(being worn)"}, + {EquipmentSlot::HELMET, "(being worn)"}, + {EquipmentSlot::AMULET, "(being worn)"}}; + +map slotTitles = { + {EquipmentSlot::WEAPON, "Weapon"}, + {EquipmentSlot::RANGED_WEAPON, "Ranged weapon"}, + {EquipmentSlot::BODY_ARMOR, "Body armor"}, + {EquipmentSlot::HELMET, "Helmet"}, + {EquipmentSlot::AMULET, "Amulet"}}; + +View* Player::getView() { + MEASURE( + view->refreshView(creature), + "level render time"); + return view; +} + +void Player::onBump(Creature*) { + Debug(FATAL) << "Shouldn't call onBump on a player"; +} + +void Player::getItemNames(vector items, vector& names, vector >& groups) { + map > ret = groupBy(items, + [this] (Item* const& item) { + if (creature->getEquipment().isEquiped(item)) + return item->getNameAndModifiers(false, creature->isBlind()) + " " + + slotSuffixes[creature->getEquipment().getSlot(item)]; + else + return item->getNameAndModifiers(false, creature->isBlind());}); + for (auto elem : ret) { + if (elem.second.size() == 1) + names.push_back(elem.first); + else + names.push_back(convertToString(elem.second.size()) + " " + + elem.second[0]->getNameAndModifiers(true, creature->isBlind())); + groups.push_back(elem.second); + } +} + +string Player::getPluralName(Item* item, int num) { + if (num == 1) + return item->getTheName(false, creature->isBlind()); + else + return convertToString(num) + " " + item->getTheName(true, creature->isBlind()); +} + +static string getSquareQuestion(SquareApplyType type, string name) { + switch (type) { + case SquareApplyType::DESCEND: return "Descend the " + name; + case SquareApplyType::ASCEND: return "Ascend the " + name; + case SquareApplyType::USE_CHEST: return "Open the " + name; + case SquareApplyType::DRINK: return "Drink from the " + name; + case SquareApplyType::PRAY: return "Pray at the " + name; + case SquareApplyType::SLEEP: return "Go to sleep on the " + name; + default: Debug(FATAL) << "Unhandled"; + } + return ""; +} + +static bool canUseSquare(SquareApplyType type) { + return !contains({SquareApplyType::TRAIN, SquareApplyType::WORKSHOP}, type); +} + +void Player::pickUpAction(bool extended) { + auto items = creature->getPickUpOptions(); + const Square* square = creature->getConstSquare(); + if (square->getApplyType(creature) && canUseSquare(*square->getApplyType(creature)) && + (items.empty() || + view->yesOrNoPrompt(getSquareQuestion(*square->getApplyType(creature), square->getName())))) { + creature->applySquare(); + return; + } + vector names; + vector > groups; + getItemNames(creature->getPickUpOptions(), names, groups); + if (names.empty()) + return; + int index = 0; + if (names.size() > 1) { + Optional res = view->chooseFromList("Choose an item to pick up:", names); + if (!res) + return; + else + index = *res; + } + int num = groups[index].size(); + if (num < 1) + return; + if (extended && num > 1) { + Optional res = view->getNumber("Pick up how many " + groups[index][0]->getName(true) + "?", num); + if (!res) + return; + num = *res; + } + vector pickUpItems = getPrefix(groups[index], 0, num); + if (creature->canPickUp(pickUpItems)) { + messageBuffer.addMessage("You pick up " + getPluralName(groups[index][0], num)); + creature->pickUp(pickUpItems); + } +} + +void Player::itemsMessage() { + vector names; + vector > groups; + getItemNames(creature->getPickUpOptions(), names, groups); + if (names.size() > 1) + privateMessage(creature->isBlind() ? "You feel here some items" : "You see here some items."); + else if (names.size() == 1) + privateMessage((creature->isBlind() ? string("You feel here ") : ("You see here ")) + + (groups[0].size() == 1 ? "a " + groups[0][0]->getNameAndModifiers(false, creature->isBlind()) : names[0])); +} + +ItemType typeDisplayOrder[] { ItemType::WEAPON, ItemType::RANGED_WEAPON, ItemType::AMMO, ItemType::ARMOR, ItemType::POTION, ItemType::SCROLL, ItemType::FOOD, ItemType::BOOK, ItemType::AMULET, ItemType::TOOL, ItemType::CORPSE, ItemType::OTHER, ItemType::GOLD }; + +vector Player::chooseItem(const string& text, function predicate, bool onlyDisplay, Optional otherOption) { + map > typeGroups = groupBy( + creature->getEquipment().getItems(predicate), [](Item* const& item) { return item->getType();}); + vector names; + vector > groups; + for (auto elem : typeDisplayOrder) + if (typeGroups[elem].size() > 0) { + names.push_back(View::getTitlePrefix(Item::getText(elem))); + getItemNames(typeGroups[elem], names, groups); + } + if (onlyDisplay) { + view->presentList(text, names); + return vector(); + } + Optional index = view->chooseFromList(text, names); + if (index) + return groups[*index]; + return vector(); +} + +void Player::dropAction(bool extended) { + vector items = chooseItem("Choose an item to drop:", [this](Item* item) { + return !creature->getEquipment().isEquiped(item);}); + int num = items.size(); + if (num < 1) + return; + if (extended && num > 1) { + Optional res = view->getNumber("Drop how many " + items[0]->getName(true, creature->isBlind()) + "?", num); + if (!res) + return; + num = *res; + } + messageBuffer.addMessage("You drop " + getPluralName(items[0], num)); + creature->drop(getPrefix(items, 0, num)); +} + +void Player::onItemsAppeared(vector items) { + vector names; + vector > groups; + getItemNames(items, names, groups); + CHECK(!names.empty()); + Optional index = view->chooseFromList("Do you want to take it?", names); + if (!index) { + return; + } + int num = groups[*index].size(); //groups[index].size() == 1 ? 1 : howMany(view, groups[index].size()); + if (num < 1) + return; + messageBuffer.addMessage("You take " + getPluralName(groups[*index][0], num)); + creature->pickUp(getPrefix(groups[*index], 0, num)); +} + +void Player::applyAction() { + vector items = chooseItem("Choose an item to apply:", [this](Item* item) { + return ( + item->getType() == ItemType::TOOL || + item->getType() == ItemType::POTION || + item->getType() == ItemType::FOOD || + item->getType() == ItemType::BOOK || + item->getType() == ItemType::SCROLL) + && creature->canApplyItem(item);}); + if (items.size() == 0) + return; + if (creature->isBlind() && contains({ItemType::SCROLL, ItemType::BOOK}, items[0]->getType())) { + privateMessage("You can't read while blind!"); + return; + } + if (items[0]->getApplyTime() > 1) { + for (const Creature* c : creature->getVisibleEnemies()) + if ((c->getPosition() - creature->getPosition()).length8() < 3 && + !view->yesOrNoPrompt("Applying " + items[0]->getAName() + " takes " + + convertToString(items[0]->getApplyTime()) + " turns. Are you sure you want to continue?")) + return; + } + if (creature->canApplyItem(items[0])) { + privateMessage("You " + items[0]->getApplyMsgFirstPerson()); + creature->applyItem(items[0]); + } +} + +void Player::throwAction(Optional dir) { + vector items = chooseItem("Choose an item to throw:", [this](Item* item) { + return !creature->getEquipment().isEquiped(item);}); + if (items.size() == 0) + return; + if (!dir) { + auto cDir = view->chooseDirection("Which direction do you want to throw?"); + if (!cDir) + return; + dir = *cDir; + } + if (creature->canThrowItem(items[0])) { + messageBuffer.addMessage("You throw " + items[0]->getAName(false, creature->isBlind())); + creature->throwItem(items[0], *dir); + } +} + +void Player::equipmentAction() { + vector slots; + for (auto slot : slotTitles) + slots.push_back(slot.first); + int index = 0; + creature->startEquipChain(); + while (1) { + vector list; + for (auto slot : slots) { + list.push_back(View::getTitlePrefix(slotTitles.at(slot))); + Item* item = creature->getEquipment().getItem(slot); + if (item) + list.push_back(item->getNameAndModifiers()); + else + list.push_back("[Nothing]"); + } + Optional newIndex = view->chooseFromList("Equipment", list, index); + if (!newIndex) { + creature->finishEquipChain(); + return; + } + index = *newIndex; + EquipmentSlot slot = slots[index]; + if (Item* item = creature->getEquipment().getItem(slot)) { + if (creature->canUnequip(item)) + creature->unequip(item); + } else { + vector items = chooseItem("Choose an item to equip:", [=](Item* item) { + return item->canEquip() + && !creature->getEquipment().isEquiped(item) + && item->getEquipmentSlot() == slot;}); + if (items.size() == 0) { + continue; + // finishEquipChain(); + // return; + } + // messageBuffer.addMessage("You equip " + items[0]->getTheName()); + if (creature->canEquip(items[0])) { + creature->equip(items[0]); + } + } + } +} + +void Player::grantIdentify(int numItems) { + auto unidentFun = [this](Item* item) { return item->canIdentify() && !item->isIdentified();}; + vector unIded = creature->getEquipment().getItems(unidentFun); + if (unIded.empty()) { + privateMessage("All your posessions are already identified"); + return; + } + if (numItems > unIded.size()) { + privateMessage("You identify all your posessions"); + for (Item* it : unIded) + it->identify(); + } else + for (int i : Range(numItems)) { + vector items = chooseItem("Choose an item to identify:", unidentFun); + if (items.size() == 0) + return; + items[0]->identify(); + privateMessage("You identify " + items[0]->getTheName()); + } +} + +void Player::displayInventory() { + chooseItem("Inventory:", [](Item* item) { return true; }, true); +} + +void Player::hideAction() { + if (creature->canHide()) { + privateMessage("You hide behind the " + creature->getConstSquare()->getName()); + creature->hide(); + } else { + if (!creature->hasSkill(Skill::ambush)) + privateMessage("You don't have this skill."); + else + privateMessage("You can't hide here."); + } +} + +void Player::travelAction() { + if (!creature->canMove(travelDir) || view->travelInterrupt()) { + travelling = false; + return; + } + creature->move(travelDir); + itemsMessage(); + vector enemies = creature->getVisibleEnemies(); + vector ignoreCreatures { "a boar" ,"a deer", "a fox", "a vulture", "a rat", "a jackal", "a boulder" }; + if (enemies.size() > 0) { + for (const Creature* c : enemies) + if (!contains(ignoreCreatures, c->getAName())) { + view->refreshView(creature); + privateMessage("You notice " + c->getAName()); + travelling = false; + return; + } + } + const Location* currentLocation = creature->getLevel()->getLocation(creature->getPosition()); + if (lastLocation != currentLocation && currentLocation != nullptr && currentLocation->hasName()) { + privateMessage("You arrive at " + addAParticle(currentLocation->getName())); + travelling = false; + return; + } + vector squareDirs = creature->getConstSquare()->getTravelDir(); + if (squareDirs.size() != 2) { + travelling = false; + Debug() << "Stopped by multiple routes"; + return; + } + Optional myIndex = findElement(squareDirs, -travelDir); + CHECK(myIndex) << "Bad travel data in square"; + travelDir = squareDirs[(*myIndex + 1) % 2]; +} + +void Player::payDebtAction() { + for (Vec2 v : Vec2::directions8()) + if (const Creature* c = creature->getConstSquare(v)->getCreature()) { + if (int debt = c->getDebt(creature)) { + vector gold = creature->getGold(debt); + if (gold.size() < debt) { + privateMessage("You don't have enough gold to pay."); + } else if (view->yesOrNoPrompt("Buy items for " + convertToString(debt) + " zorkmids?")) { + privateMessage("You pay " + c->getName() + " " + convertToString(debt) + " zorkmids."); + creature->give(c, gold); + } + } else { + Debug() << "No debt " << c->getName(); + } + } +} + +void Player::chatAction() { + vector creatures; + for (Vec2 v : Vec2::directions8()) + if (const Creature* c = creature->getConstSquare(v)->getCreature()) + creatures.push_back(c); + if (creatures.size() == 1) { + privateMessage("You chat with " + creatures[0]->getTheName()); + creature->chatTo(creatures[0]->getPosition() - creature->getPosition()); + } else + if (creatures.size() > 1) { + Optional dir = view->chooseDirection("Which direction?"); + if (!dir) + return; + if (const Creature* c = creature->getConstSquare(*dir)->getCreature()) { + privateMessage("You chat with " + c->getTheName()); + creature->chatTo(*dir); + } + } +} + +void Player::fireAction(Vec2 dir) { + if (creature->canFire(dir)) + creature->fire(dir); +} + +const MapMemory& Player::getMemory(const Level* l) const { + if (l == nullptr) + l = creature->getLevel(); + return (*levelMemory)[l]; +} + +void Player::remember(Vec2 pos, const ViewObject& object) { + (*levelMemory)[creature->getLevel()].addObject(pos, object); +} + + +void Player::makeMove() { + vector squareDirs = creature->getConstSquare()->getTravelDir(); + const vector& creatures = creature->getLevel()->getAllCreatures(); + if (creature->isHallucinating()) + ViewObject::setHallu(true); + else + ViewObject::setHallu(false); + MEASURE( + view->refreshView(creature), + "level render time"); + static bool greeting = false; + if (displayGreeting) { + CHECK(creature->getFirstName()); + view->presentText("", "Dear " + *creature->getFirstName() + ",\n \n \tIf you are reading this letter, then you have arrived in the valley of " + NameGenerator::worldNames.getNext() + ". There is a band of dwarves dwelling in caves under a mountain. Find them, talk to them, they will help you. Let your sword guide you.\n \n \nYours, " + NameGenerator::firstNames.getNext() + "\n \nPS.: Beware the goblins!"); + displayGreeting = false; + } + for (const Creature* c : creature->getVisibleEnemies()) { + if (c->isSpecialMonster() && !contains(specialCreatures, c)) { + privateMessage(MessageBuffer::important(c->getDescription())); + specialCreatures.push_back(c); + } + } + if (travelling) + travelAction(); + else { + Action action = view->getAction(); + Vec2 direction(-100, -100); + bool travel = false; + switch (action.getId()) { + case ActionId::FIRE: fireAction(action.getDirection()); break; + case ActionId::TRAVEL: travel = true; + case ActionId::MOVE: direction = action.getDirection(); break; + case ActionId::SHOW_INVENTORY: displayInventory(); break; + case ActionId::PICK_UP: pickUpAction(false); break; + case ActionId::EXT_PICK_UP: pickUpAction(true); break; + case ActionId::DROP: dropAction(false); break; + case ActionId::EXT_DROP: dropAction(true); break; + case ActionId::WAIT: creature->wait(); break; + case ActionId::APPLY_ITEM: applyAction(); break; + case ActionId::THROW: throwAction(); break; + case ActionId::THROW_DIR: throwAction(action.getDirection()); break; + case ActionId::EQUIPMENT: equipmentAction(); break; + case ActionId::HIDE: hideAction(); break; + case ActionId::PAY_DEBT: payDebtAction(); break; + case ActionId::CHAT: chatAction(); break; + case ActionId::SHOW_HISTORY: messageBuffer.showHistory(); break; + case ActionId::UNPOSSESS: creature->popController(); return; break; + case ActionId::IDLE: break; + } + if (creature->isSleeping() && creature->canPopController()) { + creature->popController(); + return; + } + if (direction.x > -100) { + if (travel) { + vector squareDirs = creature->getConstSquare()->getTravelDir(); + if (findElement(squareDirs, direction)) { + travelDir = direction; + lastLocation = creature->getLevel()->getLocation(creature->getPosition()); + travelling = true; + travelAction(); + } + } else + if (creature->canMove(direction)) { + creature->move(direction); + itemsMessage(); + } else { + const Creature *c = creature->getConstSquare(direction)->getCreature(); + if (creature->canBumpInto(direction) && creature->isEnemy(c)) + creature->bumpInto(direction); + } + } + } + for (Vec2 pos : creature->getLevel()->getVisibleTiles(creature)) { + ViewIndex index = creature->getLevel()->getSquare(pos)->getViewIndex(creature); + (*levelMemory)[creature->getLevel()].clearSquare(pos); + for (ViewLayer l : { ViewLayer::ITEM, ViewLayer::FLOOR, ViewLayer::LARGE_ITEM}) + if (index.hasObject(l)) + remember(pos, index.getObject(l)); + } +} + +bool Player::isPlayer() const { + return true; +} + +void Player::privateMessage(const string& message) const { + messageBuffer.addMessage(message); +} + +void Player::you(const string& param) const { + privateMessage("You " + param); +} + +void Player::you(MsgType type, const string& param) const { + string msg; + switch (type) { + case MsgType::ARE: msg = "You are " + param; break; + case MsgType::YOUR: msg = "Your " + param; break; + case MsgType::FEEL: msg = "You feel " + param; break; + case MsgType::FALL_ASLEEP: msg = "You fall asleep" + (param.size() > 0 ? " on the " + param : "."); break; + case MsgType::WAKE_UP: msg = "You wake up."; break; + case MsgType::FALL_APART: msg = "You fall apart."; break; + case MsgType::FALL: msg = "You fall on the " + param; break; + case MsgType::DIE: messageBuffer.addMessage("You die!!"); break; + case MsgType::TELE_DISAPPEAR: msg = "You are standing somewhere else!"; break; + case MsgType::BLEEDING_STOPS: msg = "Your bleeding stops."; break; + case MsgType::DIE_OF_BLEEDING: msg = "You die of wounds."; break; + case MsgType::MISS_ATTACK: msg = "You miss " + param; break; + case MsgType::MISS_THROWN_ATTACK: msg = param + " misses you"; break; + case MsgType::HIT_THROWN_ITEM: msg = param + " hits you"; break; + case MsgType::CRASH_THROWN_ITEM: msg = param + " crashes on your head"; break; + case MsgType::GET_HIT_NODAMAGE: msg = "The " + param + " is harmless."; break; + case MsgType::COLLAPSE: msg = "You collapse."; break; + case MsgType::TRIGGER_TRAP: msg = "You trigger something."; break; + case MsgType::SWING_WEAPON: msg = "You swing your " + param; break; + case MsgType::THRUST_WEAPON: msg = "You thrust your " + param; break; + case MsgType::ATTACK_SURPRISE: msg = "You sneak attack " + param; break; + case MsgType::KICK: msg = "You kick " + param; break; + case MsgType::BITE: msg = "You bite " + param; break; + case MsgType::PUNCH: msg = "You punch " + param; break; + case MsgType::PANIC: + msg = !creature->isHallucinating() ? "You are suddenly very afraid" : "You freak out completely"; break; + case MsgType::RAGE: + msg = !creature->isHallucinating() ?"You are suddenly very angry" : "This will be a very long trip."; break; + case MsgType::CRAWL: msg = "You are crawling"; break; + case MsgType::STAND_UP: msg = "You are back on your feet"; break; + case MsgType::CAN_SEE_HIDING: msg = param + " can see you hiding"; break; + case MsgType::TURN_INVISIBLE: msg = "You can see through yourself!"; break; + case MsgType::TURN_VISIBLE: msg = "You are no longer invisible"; break; + case MsgType::DROP_WEAPON: msg = "You drop your " + param; break; + case MsgType::ITEM_CRASHES: msg = param + " crashes on you."; break; + case MsgType::ENTER_PORTAL: msg = "You enter the portal"; break; + case MsgType::HAPPENS_TO: msg = param + " you."; break; + case MsgType::BURN: msg = "You burn in the " + param; break; + case MsgType::DROWN: msg = "You drown in the " + param; break; + case MsgType::SET_UP_TRAP: msg = "You set up the trap"; break; + case MsgType::KILLED_BY: msg = "You are killed by " + param; break; + default: break; + } + messageBuffer.addMessage(msg); +} + + +void Player::onKilled(const Creature* attacker) { + messageBuffer.showHistory(); + if (!creature->canPopController()) { + exit(0); + } else + creature->popController(); +} diff --git a/player.h b/player.h new file mode 100644 index 000000000..cdac4f048 --- /dev/null +++ b/player.h @@ -0,0 +1,65 @@ +#ifndef _PLAYER_H +#define _PLAYER_H + +#include "creature.h" + +class View; + +class Player : public Controller, public EventListener { + public: + Player(Creature*, View*, bool displayGreeting, map* levelMemory); + virtual ~Player(); + virtual void grantIdentify(int numItems) override; + + virtual bool isPlayer() const override; + + virtual void you(MsgType type, const string& param) const override; + virtual void you(const string& param) const override; + virtual void privateMessage(const string& message) const override; + + virtual void onKilled(const Creature* attacker) override; + virtual void onItemsAppeared(vector items) override; + + View* getView(); + + const MapMemory& getMemory(const Level* l = nullptr) const; + virtual void makeMove() override; + + virtual void onBump(Creature*); + + static ControllerFactory getFactory(View*, map* levelMemory); + + virtual const Level* getListenerLevel() const override; + virtual void onThrowEvent(const Creature* thrower, const Item* item, const vector& trajectory) override; + + + private: + void remember(Vec2 pos, const ViewObject& object); + void pickUpAction(bool extended); + void itemsMessage(); + void dropAction(bool extended); + void equipmentAction(); + void applyAction(); + void throwAction(Optional dir = Nothing()); + void takeOffAction(); + void hideAction(); + void displayInventory(); + void travelAction(); + void payDebtAction(); + void chatAction(); + void fireAction(Vec2 dir); + vector chooseItem(const string& text, function predicate, bool displayOnly = false, + Optional otherOption = Nothing()); + void getItemNames(vector items, vector& names, vector >& groups); + string getPluralName(Item* item, int num); + Creature* creature; + View* view = nullptr; + bool travelling = false; + Vec2 travelDir; + const Location* lastLocation; + vector specialCreatures; + bool displayGreeting; + map* levelMemory; +}; + +#endif diff --git a/poison_gas.cpp b/poison_gas.cpp new file mode 100644 index 000000000..8d0d46410 --- /dev/null +++ b/poison_gas.cpp @@ -0,0 +1,32 @@ +#include "stdafx.h" + +void PoisonGas::addAmount(double a) { + CHECK(a > 0); + amount = min(3., a + amount); +} + +const double decrease = 0.002; +const double spread = 0.15; + +void PoisonGas::tick(Level* level, Vec2 pos) { + if (amount < 0.00001) { + amount = 0; + return; + } + for (Vec2 v : Vec2::directions8(true)) { + Square* square = level->getSquare(pos + v); + if (square->canSeeThru() && amount > 0 && square->getPoisonGasAmount() < amount) { + double transfer = v.isCardinal4() ? spread : spread / 2; + transfer = min(amount, transfer); + transfer = min((amount - square->getPoisonGasAmount()) / 2, transfer); + amount -= transfer; + level->getSquare(v + pos)->addPoisonGas(transfer); + } + } + amount = max(0.0, amount - decrease); +} + +double PoisonGas::getAmount() const { + return amount; +} + diff --git a/poison_gas.h b/poison_gas.h new file mode 100644 index 000000000..633210261 --- /dev/null +++ b/poison_gas.h @@ -0,0 +1,17 @@ +#ifndef _POISON_GAS_H +#define _POISON_GAS_H + +#include "util.h" + +class PoisonGas { + public: + void addAmount(double amount); + void tick(Level*, Vec2 pos); + double getAmount() const; + + private: + double amount = 0; +}; + +#endif + diff --git a/quest.cpp b/quest.cpp new file mode 100644 index 000000000..454defd93 --- /dev/null +++ b/quest.cpp @@ -0,0 +1,36 @@ +#include "stdafx.h" + +using namespace std; + +Quest::Quest() : state(State::CLOSED) {} + +bool Quest::isClosed() const { + return state == State::CLOSED; +} + +bool Quest::isOpen() const { + return state == State::OPEN; +} + +bool Quest::isFinished() const { + return state == State::FINISHED; +} + +void Quest::open() { + state = State::OPEN; +} + +void Quest::finish() { + Debug() << "Quest finished"; + state = State::FINISHED; +} + +void Quest::initialize() { + quests.insert(make_pair(QuestName::GOLD, Quest())); +} + +Quest& Quest::get(QuestName name) { + TRY(return quests.at(name), "Unknown quest."); +} + +map Quest::quests; diff --git a/quest.h b/quest.h new file mode 100644 index 000000000..da2d4b55d --- /dev/null +++ b/quest.h @@ -0,0 +1,27 @@ +#ifndef _QUEST_H +#define _QUEST_H + +#include +#include + +#include "util.h" + +enum class QuestName { GOLD }; + +class Quest { + public: + Quest(); + void open(); + void finish(); + bool isOpen() const; + bool isFinished() const; + bool isClosed() const; + static void initialize(); + static Quest& get(QuestName); + + private: + enum class State { CLOSED, OPEN, FINISHED } state; + static map quests; +}; + +#endif diff --git a/ranged_weapon.cpp b/ranged_weapon.cpp new file mode 100644 index 000000000..3d7e7b943 --- /dev/null +++ b/ranged_weapon.cpp @@ -0,0 +1,20 @@ +#include "stdafx.h" + + +RangedWeapon::RangedWeapon(ViewObject o, const ItemAttributes& attr) : Item(o, attr) {} + +void RangedWeapon::fire(Creature* c, Level* l, PItem ammo, Vec2 dir) { + int toHitVariance = 10; + int attackVariance = 15; + int toHit = Random.getRandom(-toHitVariance, toHitVariance) + + c->getAttr(AttrType::THROWN_TO_HIT) + + ammo->getModifier(AttrType::THROWN_TO_HIT) + + getAccuracy(); + int damage = Random.getRandom(-attackVariance, attackVariance) + + c->getAttr(AttrType::THROWN_DAMAGE) + + ammo->getModifier(AttrType::THROWN_DAMAGE); + l->throwItem(std::move(ammo), Attack(c, chooseRandom({AttackLevel::LOW, AttackLevel::MIDDLE, AttackLevel::HIGH}), + AttackType::SHOOT, toHit, damage), + 20, c->getPosition(), dir); +} + diff --git a/ranged_weapon.h b/ranged_weapon.h new file mode 100644 index 000000000..97a4b799e --- /dev/null +++ b/ranged_weapon.h @@ -0,0 +1,13 @@ +#ifndef _RANGED_WEAPON +#define _RANGED_WEAPON + +#include "item.h" + +class RangedWeapon : public Item { + public: + RangedWeapon(ViewObject, const ItemAttributes&); + + virtual void fire(Creature*, Level*, PItem ammo, Vec2 dir); +}; + +#endif diff --git a/replay_view.h b/replay_view.h new file mode 100644 index 000000000..910bc332b --- /dev/null +++ b/replay_view.h @@ -0,0 +1,84 @@ +#ifndef _REPLAY_VIEW +#define _REPLAY_VIEW + + +template +class ReplayView : public T { + public: + ReplayView(ifstream& iff) : input(iff) { + } + + virtual void close() override { + input.close(); + T::close(); + } + + virtual void addMessage(const string&) override { + } + + virtual void presentList(const string& title, const vector& options, bool scrollDown) override { + } + + virtual void addImportantMessage(const string&) override { + } + + virtual Action getAction() override { + T::getAction(); + // usleep(300000); + string method; + Action action; + input >> method >> action; + if (method == "exit") + exit(0); + CHECKEQ(method, "getAction"); + return action; + } + + virtual Optional chooseFromList(const string& title, const vector& options, int index) override { + string method; + string action; + input >> method >> action; + CHECKEQ(method, "chooseFromList"); + if (action == "nothing") + return Nothing(); + else + return convertFromString(action); + } + + virtual Optional chooseDirection(const string& message) override { + string method; + string action; + input >> method >> action; + CHECKEQ(method, "chooseDirection"); + if (action == "nothing") + return Nothing(); + else { + vector s = split(action, ','); + CHECKEQ((int)s.size(), 2); + return Vec2(convertFromString(s[0]), convertFromString(s[1])); + } + } + + virtual bool yesOrNoPrompt(const string& message) override { + string method; + bool action; + input >> method >> action; + CHECKEQ(method, "yesOrNoPrompt"); + return action; + } + + virtual Optional getNumber(const string& title, int max) { + string method; + string action; + input >> method >> action; + CHECKEQ(method, "getNumber"); + if (action == "nothing") + return Nothing(); + else + return convertFromString(action); + } + private: + ifstream& input; +}; + +#endif diff --git a/shortest_path.cpp b/shortest_path.cpp new file mode 100644 index 000000000..a3bdf6c02 --- /dev/null +++ b/shortest_path.cpp @@ -0,0 +1,167 @@ +#include "stdafx.h" + +using namespace std; + +const double ShortestPath::infinity = 1000000000; + +const int revShortestLimit = 15; + +static Table initDistTable(Vec2 to, Vec2 from, int levelWidth, int levelHeight) { + int margin = 20; + Vec2 p(max(0, min(to.x, from.x) - margin), + max(0, min(to.y, from.y) - margin)); + Vec2 k(min(levelWidth - p.x, abs(to.x - from.x) + 2 * margin), + min(levelHeight - p.y, abs(to.y - from.y) + 2 * margin)); + return Table(Rectangle(p, p + k), ShortestPath::infinity); +} + +ShortestPath::ShortestPath(const Level* level, const Creature* creature, Vec2 to, Vec2 from, double mult) : + distance(initDistTable(to, from, level->getWidth(), level->getHeight())), + target(to), + directions(Vec2::directions8()) { + auto entryFun = [level, creature](Vec2 pos) { + if (level->getSquare(pos)->canEnter(creature) || creature->getPosition() == pos) + return 1.0; + if (level->getSquare(pos)->canEnterEmpty(creature) || level->getSquare(pos)->canDestroy()) + return 5.0; + return infinity;}; + auto lengthFun = [](Vec2 v) { return v.length8(); }; + if (mult == 0) + init(entryFun, lengthFun, target, from); + else { + init(entryFun, lengthFun, target, Nothing(), revShortestLimit); + setDistance(target, infinity); + reverse(entryFun, lengthFun, mult, from, revShortestLimit); + } +} + + +ShortestPath::ShortestPath(Rectangle a, function entryFun, function lengthFun, vector dir, Vec2 to, Optional from, double mult) : + distance(a.getPX(), a.getPY(), a.getW(), a.getH(), infinity), + target(to), directions(dir) { + if (mult == 0) + init(entryFun, lengthFun, target, from); + else { + init(entryFun, lengthFun, target, Nothing(), revShortestLimit); + setDistance(target, infinity); + reverse(entryFun, lengthFun, mult, from, revShortestLimit); + } +} + +double ShortestPath::getDistance(Vec2 v) const { + return distance[v]; +} +void ShortestPath::setDistance(Vec2 v, double d) { + distance[v] = d; +} + +void ShortestPath::init(function entryFun, function lengthFun, Vec2 target, Optional from, Optional limit) { + reversed = false; + function comparator; + if (from) + comparator = [=](Vec2 pos1, Vec2 pos2) { return this->getDistance(pos1) + lengthFun(*from - pos1) > this->getDistance(pos2) + lengthFun(*from - pos2); }; + else + comparator = [this](Vec2 pos1, Vec2 pos2) { return this->getDistance(pos1) > this->getDistance(pos2); }; + priority_queue, decltype(comparator)> q(comparator) ; + setDistance(target, 0); + q.push(target); + int numPopped = 0; + while (!q.empty()) { + ++numPopped; + Vec2 pos = q.top(); + // Debug() << "Popping " << pos << " " << distance[pos] << " " << (from ? (*from - pos).length4() : 0); + if (from == pos || (limit && getDistance(pos) >= *limit)) { + Debug() << "Shortest path from " << (from ? *from : Vec2(-1,-1)) << " to " << target << " " << numPopped << " visited"; + return; + } + q.pop(); + for (Vec2 dir : directions) { + Vec2 next = pos + dir; + if (next.inRectangle(distance.getBounds())) { + double cdist = getDistance(pos); + double ndist = getDistance(next); + if (cdist < ndist) { + double dist = cdist + entryFun(next); + CHECK(dist > cdist) << "Entry fun non positive " << dist - cdist; + if (dist < ndist) { + setDistance(next, dist); + q.push(next); + } + } + } + } + } +// if (from) + Debug() << "Shortest path exhausted, " << numPopped << " visited"; +} + +void ShortestPath::reverse(function entryFun, function lengthFun, double mult, Optional from, int limit) { + reversed = true; + function comparator; + if (from) + comparator = [=](Vec2 pos1, Vec2 pos2) { return this->getDistance(pos1) + lengthFun(*from - pos1) > this->getDistance(pos2) + lengthFun(*from - pos2); }; + else + comparator = [this](Vec2 pos1, Vec2 pos2) { return this->getDistance(pos1) > this->getDistance(pos2); }; + + priority_queue, decltype(comparator)> q(comparator) ; + for (Vec2 v : distance.getBounds()) { + double dist = distance[v]; + if (dist <= limit) { + setDistance(v, mult * dist); + q.push(v); + } + } + int numPopped = 0; + while (!q.empty()) { + ++numPopped; + Vec2 pos = q.top(); + if (from == pos) { + Debug() << "Rev shortest path from " << " from " << target << " " << numPopped << " visited"; + return; + } + q.pop(); + for (Vec2 dir : directions) + if ((pos + dir).inRectangle(distance.getBounds())) { + if (getDistance(pos + dir) > distance[pos] + entryFun(pos + dir) && distance[pos + dir] < 0) { + distance[pos + dir] = distance[pos] + entryFun(pos + dir); + q.push(pos + dir); + } + } + } + Debug() << "Rev shortest path from " << " from " << target << " " << numPopped << " visited"; +} + +bool ShortestPath::isReversed() const { + return reversed; +} + +bool ShortestPath::isReachable(Vec2 pos) const { + if (!pos.inRectangle(distance.getBounds())) + return false; + if (getDistance(pos) == infinity) + return false; + for (Vec2 dir : directions) + if ((pos + dir).inRectangle(distance.getBounds()) && getDistance(pos + dir) < getDistance(pos)) + return true; + return false; +} + +Vec2 ShortestPath::getNextMove(Vec2 pos) const { + CHECK(isReachable(pos)); + CHECK(pos != target) << "Already arrived at target."; + double lowest = getDistance(pos); + Vec2 next; + for (Vec2 dir : directions) { + double dist; + if ((pos + dir).inRectangle(distance.getBounds()) && (dist = getDistance(pos + dir)) < lowest) { + lowest = dist; + next = pos + dir; + } + } + CHECK(lowest < getDistance(pos)) << "Unable to continue shortest path."; + return next; +} + +Vec2 ShortestPath::getTarget() const { + return target; +} diff --git a/shortest_path.h b/shortest_path.h new file mode 100644 index 000000000..a25b8912a --- /dev/null +++ b/shortest_path.h @@ -0,0 +1,42 @@ +#ifndef _SHORTEST_PATH_H +#define _SHORTEST_PATH_H + +#include + +#include "util.h" + +class Creature; +class Level; + +class ShortestPath { + public: + ShortestPath(const Level* level, const Creature* creature, Vec2 target, Vec2 from, double mult = 0); + ShortestPath( + Rectangle area, + function entryFun, + function lengthFun, + vector directions, + Vec2 target, + Optional from = Nothing(), + double mult = 0); + ShortestPath(ShortestPath&&) = default; + ShortestPath& operator=(ShortestPath&&) = default; + bool isReachable(Vec2 pos) const; + double getDistance(Vec2 pos) const; + Vec2 getNextMove(Vec2 pos) const; + Vec2 getTarget() const; + bool isReversed() const; + + static const double infinity; + + private: + void init(function entryFun, function lengthFun, Vec2 target, Optional from, Optional limit = Nothing()); + void reverse(function entryFun, function lengthFun, double mult, Optional from, int limit); + void setDistance(Vec2, double); + Table distance; + Vec2 target; + vector directions; + bool reversed; +}; + +#endif diff --git a/skill.cpp b/skill.cpp new file mode 100644 index 000000000..f8f4d3f05 --- /dev/null +++ b/skill.cpp @@ -0,0 +1,46 @@ +#include "stdafx.h" + +string Skill::getName() const { + return name; +} + +string Skill::getHelpText() const { + return helpText; +} + +class IdentifySkill : public Skill { + public: + IdentifySkill(string name, string helpText, ItemFactory f) : Skill(name, helpText), factory(f) {} + + virtual void onTeach(Creature* c) override { + string message; + for (PItem& it : factory.getAll()) { + Item::identify(it->getName()); + message.append(it->getName() + ": " + it->getDescription() + "\n"); + } + // c->privateMessage(MessageBuffer::important(message)); + } + + private: + ItemFactory factory; +}; + +Skill* const Skill::ambush = new Skill("skill of ambush" ,"Press \'h\' to hide and attack unsuspecting enemies."); +Skill* const Skill::twoHandedWeapon = new Skill("skill of fighting with two-handed weapons", + "You can now fight with warhammers and battle axes."); +Skill* const Skill::knifeThrowing = new Skill("skill of knife throwing", + "You can now throw knives with deadly precision."); +Skill* const Skill::stealing = new Skill("skill of stealing", "Not available"); +Skill* const Skill::mushrooms = new IdentifySkill("knowledge of mushrooms", + "You now know the types of mushrooms and their use.", ItemFactory::mushrooms()); +Skill* const Skill::potions = new IdentifySkill("knowledge of potions", + "You now know the types of potions and their use.", ItemFactory::potions()); +Skill* const Skill::amulets = new IdentifySkill("knowledge of amulets", + "You now know the types of amulets and their use.", ItemFactory::amulets()); +Skill* const Skill::swimming = new Skill("skill of swimming", ""); +Skill* const Skill::archery = new Skill("skill of archery", + "You can now equip a bow and use \'alt + arrow\' to fire"); +Skill* const Skill::construction = new Skill("skill of construction", ""); + +Skill::Skill(string _name, string _helpText) : name(_name), helpText(_helpText) {} + diff --git a/skill.h b/skill.h new file mode 100644 index 000000000..98cef6980 --- /dev/null +++ b/skill.h @@ -0,0 +1,33 @@ +#ifndef _SKILL_H +#define _SKILL_H + +#include + +class Skill { + public: + string getName() const; + string getHelpText() const; + + virtual void onTeach(Creature* c) {} + + static Skill* const ambush; + static Skill* const twoHandedWeapon; + static Skill* const knifeThrowing; + static Skill* const stealing; + static Skill* const mushrooms; + static Skill* const potions; + static Skill* const amulets; + static Skill* const swimming; + static Skill* const archery; + static Skill* const construction; + + protected: + Skill(string name, string helpText); + + private: + string name; + string helpText; +}; + + +#endif diff --git a/square.cpp b/square.cpp new file mode 100644 index 000000000..545064a5a --- /dev/null +++ b/square.cpp @@ -0,0 +1,339 @@ +#include "stdafx.h" + +using namespace std; + +Square::Square(const ViewObject& vo, const string& n, bool see, bool canHide, int s, double f, + map construct, bool tick) + : name(n), viewObject(vo), seeThru(see), hide(canHide), strength(s), fire(strength, f), + constructions(construct), ticking(tick) { +} + +void Square::putCreature(Creature* c) { + CHECK(canEnter(c)); + creature = c; + onEnter(c); +} + +void Square::setPosition(Vec2 v) { + position = v; +} + +Vec2 Square::getPosition() const { + return position; +} + +string Square::getName() const { + return name; +} + +void Square::setName(const string& s) { + name = s; +} + +void Square::setLandingLink(StairDirection direction, StairKey key) { + landingLink = make_pair(direction, key); +} + +bool Square::isLandingSquare(StairDirection direction, StairKey key) { + return landingLink == make_pair(direction, key); +} + +Optional> Square::getLandingLink() const { + return landingLink; +} + +void Square::setCovered(bool c) { + covered = c; +} + +bool Square::isCovered() const { + return covered; +} + +void Square::setHeight(double h) { + viewObject.setHeight(h); + height = h; +} + +void Square::addTravelDir(Vec2 dir) { + if (!findElement(travelDir, dir)) + travelDir.push_back(dir); +} + +bool Square::canConstruct(SquareType type) const { + return constructions.count(type); +} + +void Square::construct(SquareType type) { + CHECK(canConstruct(type)); + if (--constructions[type] == 0) { + PSquare newSquare = PSquare(SquareFactory::get(type)); + onConstructNewSquare(newSquare.get()); + level->replaceSquare(position, std::move(newSquare)); + } +} + +const vector& Square::getTravelDir() const { + return travelDir; +} + +void Square::putCreatureSilently(Creature* c) { + CHECK(canEnter(c)); + creature = c; +} + +void Square::setLevel(Level* l) { + level = l; + if (ticking || !inventory.isEmpty()) + level->addTickingSquare(position); +} + +const Level* Square::getConstLevel() const { + return level; +} + +Level* Square::getLevel() { + return level; +} + +void Square::setViewObject(const ViewObject& o) { + viewObject = o; +} + +void Square::tick(double time) { + if (!inventory.isEmpty()) + for (Item* item : inventory.getItems()) { + item->tick(time, level, position); + if (item->isDiscarded()) + inventory.removeItem(item); + } + poisonGas.tick(level, position); + if (creature && poisonGas.getAmount() > 0.2) { + creature->poisonWithGas(min(1.0, poisonGas.getAmount())); + } + if (fire.isBurning()) { + viewObject.setBurning(fire.getSize()); + Debug() << getName() << " burning " << fire.getSize(); + for (Vec2 v : position.neighbors8(true)) + if (fire.getSize() > Random.getDouble() * 60) + level->getSquare(v)->setOnFire(fire.getSize() / 20); + fire.tick(level, position); + if (fire.isBurntOut()) { + level->globalMessage(position, "The " + getName() + " burns out"); + burnOut(); + } + if (creature) + creature->setOnFire(fire.getSize()); + for (Item* it : getItems()) + it->setOnFire(fire.getSize(), level, position); + } + for (PTrigger& t : triggers) + t->tick(time); + tickSpecial(time); +} + +bool Square::itemLands(Item* item, Attack attack) { + if (creature) { + if (!creature->dodgeAttack(attack)) + return true; + else { + creature->you(MsgType::MISS_THROWN_ATTACK, item->getTheName()); + return false; + } + } + for (PTrigger& t : triggers) + if (t->interceptsFlyingItem(item)) + return true; + return false; +} + +bool Square::itemBounces(Item* item) const { + return !canEnterEmpty(Creature::getDefault()); +} + +void Square::onItemLands(PItem item, Attack attack, int remainingDist, Vec2 dir) { + if (creature) { + item->onHitCreature(creature, attack); + if (!item->isDiscarded()) + dropItem(std::move(item)); + return; + } + for (PTrigger& t : triggers) + if (t->interceptsFlyingItem(item.get())) { + t->onInterceptFlyingItem(std::move(item), attack, remainingDist, dir); + return; + } + + item->onHitSquare(position, this); + if (!item->isDiscarded()) + dropItem(std::move(item)); +} + +bool Square::canEnter(const Creature* c) const { + return creature == nullptr && canEnterSpecial(c); +} + +bool Square::canEnterEmpty(const Creature* c) const { + return canEnterSpecial(c); +} + +bool Square::canEnterSpecial(const Creature* c) const { + return c->canWalk(); +} + +void Square::setOnFire(double amount) { + bool burning = fire.isBurning(); + fire.set(amount); + if (!burning && fire.isBurning()) { + level->addTickingSquare(position); + level->globalMessage(position, "The " + getName() + " catches fire."); + viewObject.setBurning(fire.getSize()); + } + if (creature) + creature->setOnFire(amount); + for (Item* it : getItems()) + it->setOnFire(amount, level, position); +} + +void Square::addPoisonGas(double amount) { + if (canSeeThru()) { + poisonGas.addAmount(amount); + level->addTickingSquare(position); + } +} + +double Square::getPoisonGasAmount() const { + return poisonGas.getAmount(); +} + +bool Square::isBurnt() const { + return fire.isBurntOut(); +} + +ViewObject Square::getViewObject() const { + return viewObject; +} + +static ViewObject addFire(const ViewObject& obj, double fire) { + ViewObject r(obj); + r.setBurning(fire); + return r; +} + +ViewIndex Square::getViewIndex(const CreatureView* c) const { + double fireSize = 0; + for (Item* it : inventory.getItems()) + fireSize = max(fireSize, it->getFireSize()); + fireSize = max(fireSize, fire.getSize()); + ViewIndex ret; + if (creature && (c->canSee(creature) || creature->isPlayer())) { + ret.insert(addFire(creature->getViewObject(), fireSize)); + } + else if (creature && contains(c->getUnknownAttacker(), creature)) + ret.insert(addFire(ViewObject::unknownMonster(), fireSize)); + + if (c->canSee(position)) { + ret.insert(getViewObject()); + for (const PTrigger& t : triggers) + if (auto obj = t->getViewObject()) + ret.insert(addFire(*obj, fireSize)); + if (Item* it = getTopItem()) + ret.insert(addFire(it->getViewObject(), fireSize)); + } + if (poisonGas.getAmount() > 0) + ret.setHighlight(HighlightType::POISON_GAS, min(1.0, poisonGas.getAmount())); + return ret; +} + +void Square::onEnter(Creature* c) { + for (PTrigger& t : triggers) + t->onCreatureEnter(c); + onEnterSpecial(c); +} + +void Square::dropItem(PItem item) { + if (level) // if level == null, then it's being constructed, square will be added later + level->addTickingSquare(getPosition()); + inventory.addItem(std::move(item)); +} + +void Square::dropItems(vector items) { + for (PItem& it : items) + dropItem(std::move(it)); +} + +bool Square::hasItem(Item* it) const { + return inventory.hasItem(it); +} + +Creature* Square::getCreature() { + return creature; +} + +void Square::addTrigger(PTrigger t) { + level->addTickingSquare(position); + triggers.push_back(std::move(t)); +} + +PTrigger Square::removeTrigger(Trigger* trigger) { + PTrigger ret; + for (PTrigger& t : triggers) + if (t.get() == trigger) { + ret = std::move(t); + removeElement(triggers, t); + } + return ret; +} + +const Creature* Square::getCreature() const { + return creature; +} + +void Square::removeCreature() { + CHECK(creature); + creature = 0; +} + +bool SolidSquare::canEnterSpecial(const Creature*) const { + return false; +} + +bool Square::canSeeThru() const { + return seeThru; +} + +void Square::setCanSeeThru(bool f) { + seeThru = f; +} + +bool Square::canHide() const { + return hide; +} + +int Square::getStrength() const { + return strength; +} + +Item* Square::getTopItem() const { + Item* last = nullptr; + if (!inventory.isEmpty()) + for (Item* it : inventory.getItems()) { + last = it; + if (it->getViewObject().layer() == ViewLayer::LARGE_ITEM) + return it; + } + return last; +} + +vector Square::getItems(function predicate) { + return inventory.getItems(predicate); +} + +PItem Square::removeItem(Item* it) { + return inventory.removeItem(it); +} + +vector Square::removeItems(vector it) { + return inventory.removeItems(it); +} + diff --git a/square.h b/square.h new file mode 100644 index 000000000..425323629 --- /dev/null +++ b/square.h @@ -0,0 +1,214 @@ +#ifndef _SQUARE_H +#define _SQUARE_H + +#include +#include +#include "util.h" +#include "item.h" +#include "creature.h" +#include "debug.h" +#include "inventory.h" +#include "trigger.h" +#include "view_index.h" +#include "poison_gas.h" + +class Level; + +class Square { + public: + /** Constructs a square objects. + * \param obstructing true if the square doesn't obstruct view + * \param canHide true if the player can hide at this square + * \param strength square resistance to demolition + */ + Square(const ViewObject& vo, const string& name, bool obstructing, bool canHide = false, + int strength = 0, double flamability = 0, map constructions = {}, bool ticking = false); + + /** Returns the square name. */ + string getName() const; + + /** Sets the square name.*/ + void setName(const string&); + + /** Links this square as point of entry from another level. + * \param direction direction where the creature is coming from + * \param key id specific to a dungeon branch*/ + void setLandingLink(StairDirection direction, StairKey key); + + /** Checks if this square is a point of entry from another level. See setLandingLink().*/ + bool isLandingSquare(StairDirection, StairKey); + + /** Returns the entry point details. Returns nothing if square is not entry point. See setLandingLink().*/ + Optional> getLandingLink() const; + + /** Marks this square as covered, i.e. having a roof.*/ + void setCovered(bool); + + /** Checks if this square is covered, i.e. having a roof.*/ + bool isCovered() const; + + /** Sets the height of the square.*/ + void setHeight(double height); + + /** Adds direction for auto-traveling. \paramname{dir} must point to next square on path.*/ + void addTravelDir(Vec2 dir); + + /** Returns auto-travel directions pointing to the next squares on the path.*/ + const vector& getTravelDir() const; + + /** Sets the square's position on the level.*/ + void setPosition(Vec2 v); + + /** Returns the square's position on the level.*/ + Vec2 getPosition() const; + + /** Checks if this creature can enter the square at the moment. Takes account other creatures on the square.*/ + bool canEnter(const Creature*) const; + + /** Checks if this square is can be entered by the creature. Doesn't take into account other + * creatures on the square.*/ + bool canEnterEmpty(const Creature*) const; + + /** Checks if this square obstructs view.*/ + bool canSeeThru() const; + + /** Sets if this square obstructs view.*/ + void setCanSeeThru(bool); + + /** Checks if the player can hide behind this square.*/ + bool canHide() const; + + /** Returns the strength, i.e. resistance to demolition.*/ + int getStrength() const; + + /** Checks if this square can be destroyed.*/ + virtual bool canDestroy() const { return false; } + + /** Called when something destroyed this square.*/ + virtual void destroy(int strength) { Debug(FATAL) << "Can't destroy " << name; } + + /** Called when this square is burned completely.*/ + virtual void burnOut() {} + + /** Exposes the square and objects on it to fire.*/ + void setOnFire(double amount); + + bool isBurnt() const; + + /** Adds some poison gas to the square.*/ + void addPoisonGas(double amount); + + /** Returns the amount of poison gas on this square.*/ + double getPoisonGasAmount() const; + + /** Sets the level this square is on.*/ + void setLevel(Level*); + + /** Puts a creature on the square.*/ + void putCreature(Creature*); + + /** Puts a creature on the square without triggering any mechanisms that happen when a creature enters.*/ + void putCreatureSilently(Creature*); + + /** Removes the creature from the square.*/ + void removeCreature(); + + //@{ + /** Returns the creature from the square.*/ + Creature* getCreature(); + const Creature* getCreature() const; + //@} + + /** Adds a trigger to the square.*/ + void addTrigger(PTrigger); + + /** Removes the trigger from the square.*/ + PTrigger removeTrigger(Trigger*); + + //@{ + /** Drops item or items on the square. The square assumes ownership.*/ + virtual void dropItem(PItem); + void dropItems(vector); + //@} + + /** Checks if a given item is present on the square.*/ + bool hasItem(Item*) const; + + /** Checks if another square can be constructed from this one.*/ + bool canConstruct(SquareType) const; + + /** Constructs another square. The construction might finish after several attempts.*/ + void construct(SquareType); + + /** Called just before swapping the old square for the new constructed one.*/ + virtual void onConstructNewSquare(Square* newSquare) {} + + /** Triggers all time-dependent processes like burning. Calls tick() for creature and items if present. + For this method to be called, the square coordinates must be added with Level::addTickingSquare().*/ + void tick(double time); + + ViewObject getViewObject() const; + ViewIndex getViewIndex(const CreatureView* c) const; + + bool itemLands(Item* item, Attack attack); + virtual bool itemBounces(Item* item) const; + void onItemLands(PItem item, Attack attack, int remainingDist, Vec2 dir); + vector getItems(function predicate = alwaysTrue()); + PItem removeItem(Item*); + vector removeItems(vector); + + virtual Optional getApplyType(const Creature*) const { return Nothing(); } + virtual void onApply(Creature* c) { Debug(FATAL) << "Bad square applied"; } + + const Level* getConstLevel() const; + + virtual ~Square() {}; + + protected: + void onEnter(Creature*); + virtual bool canEnterSpecial(const Creature*) const; + virtual void onEnterSpecial(Creature*) {} + virtual void tickSpecial(double time) {} + Level* getLevel(); + void setViewObject(const ViewObject&); + vector face; + Inventory inventory; + string name; + + private: + Item* getTopItem() const; + + Level* level = nullptr; + Vec2 position; + Creature* creature = nullptr; + vector triggers; + ViewObject viewObject; + bool seeThru; + bool hide; + int strength; + double height; + vector travelDir; + bool covered = false; + Optional> landingLink; + Fire fire; + PoisonGas poisonGas; + map constructions; + bool ticking; +}; + +class SolidSquare : public Square { + public: + SolidSquare(const ViewObject& vo, const string& name, bool canSee, map constructions = {}, + bool alwaysVisible = false) : + Square(vo, name, canSee, false, 0, 0, constructions) { + } + + protected: + virtual bool canEnterSpecial(const Creature*) const; + + virtual void onEnterSpecial(Creature* c) { + Debug(FATAL) << "Creature entered solid square"; + } +}; + +#endif diff --git a/square_factory.cpp b/square_factory.cpp new file mode 100644 index 000000000..1edf25fc3 --- /dev/null +++ b/square_factory.cpp @@ -0,0 +1,653 @@ +#include "stdafx.h" + +using namespace std; + +class MessageSquare : public Square { + public: + MessageSquare(const ViewObject& obj, const string& name, bool see, bool once, bool hide, const string& msg) : Square(obj, name, see, hide), message(msg) { + state = once ? State::ONCE : State::ALWAYS; + } + + protected: + virtual void onEnterSpecial(Creature* c) override { + if (c->isPlayer() && state != State::NEVER) { + messageBuffer.addMessage(message); + if (state == State::ONCE) + state = State::NEVER; + } + } + + private: + enum class State { ALWAYS, ONCE, NEVER } state; + string message; +}; + +class Staircase : public Square { + public: + Staircase(const ViewObject& obj, const string& name, StairDirection dir, StairKey key) + : Square(obj, name, true, true, 10000) { + setLandingLink(dir, key); + } + + virtual void onEnterSpecial(Creature* c) override { + c->privateMessage("There are " + getName() + " here."); + } + + virtual Optional getApplyType(const Creature*) const override { + switch (getLandingLink()->first) { + case StairDirection::DOWN: return SquareApplyType::DESCEND; + case StairDirection::UP: return SquareApplyType::ASCEND; + } + return Nothing(); + } + + virtual void onApply(Creature* c) override { + auto link = getLandingLink(); + getLevel()->changeLevel(link->first, link->second, c); + } +}; + +class SecretPassage : public Square { + public: + SecretPassage(const ViewObject& obj, const ViewObject& sec) : Square(obj, "secret door", false), secondary(sec), uncovered(false) { + } + + void uncover(Vec2 pos) { + uncovered = true; + setName("floor"); + setViewObject(secondary); + face.clear(); + setCanSeeThru(true); + getLevel()->updateVisibility(pos); + } + + virtual bool canDestroy() const override { + return true; + } + + virtual void destroy(int strength) override { + if (uncovered) + return; + if (getLevel()->playerCanSee(getPosition())) { + messageBuffer.addMessage("A secret passage is destroyed!"); + uncover(getPosition()); + } + } + + virtual void onEnterSpecial(Creature* c) override { + if (uncovered) + return; + if (c->isPlayer()) { + messageBuffer.addMessage("You found a secret passage!"); + uncover(c->getPosition()); + } else + if (getLevel()->playerCanSee(c->getPosition())) { + messageBuffer.addMessage(c->getTheName() + " uncovers a secret passage!"); + uncover(c->getPosition()); + } + } + + private: + ViewObject secondary; + bool uncovered; +}; + +class Water : public Square { + public: + Water(const ViewObject& object, const string& name, const string& itemMsg, const string& noSee, + MsgType _msgType, bool swimming = true) + : Square(object, name, true, false, 0, 0, {{SquareType::BRIDGE, 20}}), itemMessage(itemMsg), noSeeMsg(noSee), + msgType(_msgType), swimmingAllowed(swimming) {} + + virtual bool canEnterSpecial(const Creature* c) const override { + return (c->canSwim() && swimmingAllowed) || c->canFly() || c->isBlind() || c->isHeld(); + } + + virtual void onEnterSpecial(Creature* c) override { + if (!c->canFly() && (!c->canSwim() || !swimmingAllowed)) { + c->you(msgType, getName()); + c->die(nullptr, false); + } + } + + virtual void dropItem(PItem item) override { + getLevel()->globalMessage(getPosition(), item->getTheName() + " " + itemMessage, noSeeMsg); + } + + virtual bool itemBounces(Item*) const override { + return false; + } + + private: + string itemMessage; + string noSeeMsg; + MsgType msgType; + bool swimmingAllowed; +}; + +class Chest : public Square { + public: + Chest(const ViewObject& object, const string& name, CreatureId id, int minC, int maxC, + const string& _msgItem, const string& _msgMonster, const string& _msgGold, + ItemFactory _itemFactory) : + Square(object, name, true, true, 30, 0.5), creatureId(id), minCreatures(minC), maxCreatures(maxC), msgItem(_msgItem), msgMonster(_msgMonster), msgGold(_msgGold), itemFactory(_itemFactory) {} + + virtual void onEnterSpecial(Creature* c) override { + c->privateMessage("There is a " + string(isBurnt() ? "burnt " : destroyed ? "destroyed " : opened ? " opened " : "") + getName() + " here"); + } + + virtual bool canDestroy() const override { + return true; + } + + virtual void destroy(int strength) override { + if (destroyed) + return; + destroyed = true; + setViewObject(ViewObject(ViewId::DESTROYED_FURNITURE, ViewLayer::FLOOR, string("Destroyed ") + getName())); + getLevel()->globalMessage(getPosition(), "The " + getName() + " is destroyed."); + if (opened) + return; + vector item; + if (!Random.roll(10)) + item.push_back(itemFactory.random()); + else { + for (int i : Range(Random.getRandom(minCreatures, maxCreatures))) + item.push_back(ItemFactory::corpse(creatureId)); + } + dropItems(std::move(item)); + } + + virtual void burnOut() override { + setViewObject(ViewObject(ViewId::BURNT_FURNITURE, ViewLayer::FLOOR, string("Burnt ") + getName())); + destroyed = true; + if (opened) + return; + vector item; + if (!Random.roll(10)) + item.push_back(itemFactory.random()); + else { + for (int i : Range(Random.getRandom(minCreatures, maxCreatures))) + item.push_back(ItemFactory::corpse(creatureId)); + } + dropItems(std::move(item)); + } + + virtual Optional getApplyType(const Creature*) const override { + if (opened || destroyed) + return Nothing(); + else + return SquareApplyType::USE_CHEST; + } + + virtual void onApply(Creature* c) override { + CHECK(!opened); + c->privateMessage("You open the " + getName()); + opened = true; + int r = Random.getRandom(10); + if (r < 5) { + c->privateMessage(msgItem); + PItem item = itemFactory.random(); + Item* it = item.get(); + dropItem(std::move(item)); + EventListener::addItemsAppeared(getLevel(), getPosition(), {it}); + c->onItemsAppeared({it}); + } else if (r < 9) { + c->privateMessage(msgGold); + vector items = ItemFactory::fromId(ItemId::GOLD_PIECE, Random.getRandom(5, 16)); + vector it; + for (PItem& e : items) + it.push_back(e.get()); + dropItems(std::move(items)); + EventListener::addItemsAppeared(getLevel(),getPosition(), it); + c->onItemsAppeared(it); + } else{ + c->privateMessage(msgMonster); + int numR = Random.getRandom(minCreatures, maxCreatures); + for (Vec2 v : getPosition().neighbors8(true)) { + PCreature rat = CreatureFactory::fromId(creatureId, Tribe::pest); + if (getLevel()->getSquare(v)->canEnter(rat.get())) { + getLevel()->addCreature(v, std::move(rat)); + if (--numR == 0) + break; + } + } + } + } + private: + CreatureId creatureId; + int minCreatures, maxCreatures; + string msgItem, msgMonster, msgGold; + bool opened = false; + bool destroyed = false; + ItemFactory itemFactory; +}; + +class Fountain : public Square { + public: + Fountain(const ViewObject& object) : Square(object, "fountain", true, true, 100) {} + + virtual Optional getApplyType(const Creature*) const override { + return SquareApplyType::DRINK; + } + + virtual bool canDestroy() const override { + return true; + } + + virtual void destroy(int strength) override { + if (destroyed) + return; + getLevel()->globalMessage(getPosition(), "The fountain is destroyed."); + destroyed = true; + setViewObject(ViewObject(ViewId::FLOOR, ViewLayer::FLOOR, "Floor")); + } + + virtual void onEnterSpecial(Creature* c) override { + c->privateMessage("There is a " + string(destroyed ? "destroyed founain" : "fountain") + " here"); + } + + virtual void onApply(Creature* c) override { + c->privateMessage("You drink from the fountain."); + PItem potion = ItemFactory::potions().random(seed); + potion->apply(c, getLevel()); + } + + private: + int seed = Random.getRandom(123456); + bool destroyed = false; +}; + +class Tree : public Square { + public: + Tree(const ViewObject& object) : Square(object, "tree", false, true, 100, 0.5) {} + + virtual bool canDestroy() const override { + return true; + } + + virtual void destroy(int strength) override { + if (destroyed) + return; + getLevel()->globalMessage(getPosition(), "The tree falls."); + destroyed = true; + setCanSeeThru(true); + getLevel()->updateVisibility(getPosition()); + setViewObject(ViewObject(ViewId::FALLEN_TREE, ViewLayer::FLOOR, "Fallen tree")); + } + + virtual void burnOut() override { + setCanSeeThru(true); + getLevel()->updateVisibility(getPosition()); + setViewObject(ViewObject(ViewId::BURNT_TREE, ViewLayer::FLOOR, "Burnt tree")); + } + + virtual bool itemBounces(Item* item) const { + return true; + } + + virtual void onEnterSpecial(Creature* c) override { + c->privateMessage(isBurnt() ? "There is a burnt tree here." : + destroyed ? "There is fallen tree here." : "You pass beneath a tree"); + } + + private: + bool destroyed = false; +}; + +class TrapSquare : public Square { + public: + TrapSquare(const ViewObject& object, PEffect e) : Square(object, "floor", true), effect(std::move(e)) { + } + + virtual void onEnterSpecial(Creature* c) override { + if (effect) { + c->you(MsgType::TRIGGER_TRAP, ""); + effect->applyToCreature(c, EffectStrength::NORMAL); + effect = nullptr; + } + } + + private: + PEffect effect; + Tribe* tribe; +}; + +class Door : public Square { + public: + Door(const ViewObject& object) : Square(object, "door", false, true, 100, 1) {} + + virtual bool canDestroy() const override { + return true; + } + + virtual void destroy(int strength) override { + if (destroyed) + return; + getLevel()->globalMessage(getPosition(), "The door is destroyed."); + destroyed = true; + setCanSeeThru(true); + getLevel()->updateVisibility(getPosition()); + setViewObject(ViewObject(ViewId::DESTROYED_FURNITURE, ViewLayer::FLOOR, "Destroyed door")); + } + + virtual void burnOut() override { + setCanSeeThru(true); + getLevel()->updateVisibility(getPosition()); + setViewObject(ViewObject(ViewId::BURNT_FURNITURE, ViewLayer::FLOOR, "Burnt door")); + destroyed = true; + } + + virtual bool canEnterSpecial(const Creature* c) const override { + return true; + return c->isHumanoid() || destroyed; + } + + virtual void onEnterSpecial(Creature* c) override { + c->privateMessage(isBurnt() ? "There is a burnt door here." : + destroyed ? "There is a destroyed door here." : "You open the door."); + } + + protected: + bool destroyed = false; +}; + +class TribeDoor : public Door { + public: + TribeDoor(const ViewObject& object, int destStrength) : Door(object), destructionStrength(destStrength) {} + + virtual void destroy(int strength) override { + destructionStrength -= strength; + if (destructionStrength <= 0) { + EventListener::addSquareReplacedEvent(getLevel(), getPosition()); + getLevel()->replaceSquare(getPosition(), PSquare(SquareFactory::get(SquareType::FLOOR))); + } + } + + virtual bool canEnterSpecial(const Creature* c) const override { + return (c->canWalk() && c->getTribe() == Tribe::player) || destroyed; + } + + private: + int destructionStrength; +}; + +class Furniture : public Square { + public: + Furniture(const ViewObject& object, const string& name, double flamability) + : Square(object, name, true , true, 100, flamability) {} + + virtual bool canDestroy() const override { + return true; + } + + virtual void destroy(int strength) override { + if (destroyed) + return; + getLevel()->globalMessage(getPosition(), "The " + name + " is destroyed."); + destroyed = true; + setName("destroyed " + getName()); + setViewObject(ViewObject(ViewId::DESTROYED_FURNITURE, ViewLayer::FLOOR, getName())); + } + + virtual void burnOut() override { + setName("burnt " + getName()); + setViewObject(ViewObject(ViewId::BURNT_FURNITURE, ViewLayer::FLOOR, getName())); + } + + virtual void onEnterSpecial(Creature* c) override { + c->privateMessage("There is a " + getName() + " here."); + } + + private: + bool destroyed = false; +}; + +class Bed : public Furniture { + public: + Bed(const ViewObject& object, const string& name) : Furniture(object, name, 1) {} + + virtual Optional getApplyType(const Creature*) const override { + return SquareApplyType::SLEEP; + } + + virtual void onApply(Creature* c) override { + Effect::getEffect(EffectType::SLEEP)->applyToCreature(c, EffectStrength::STRONG); + getLevel()->addTickingSquare(getPosition()); + } + + virtual void tickSpecial(double time) override { + if (getCreature() && getCreature()->isSleeping()) + getCreature()->heal(0.005); + } +}; + +class Grave : public Bed { + public: + Grave(const ViewObject& object, const string& name) : Bed(object, name) {} + + virtual Optional getApplyType(const Creature* c) const override { + if (c->isUndead()) + return SquareApplyType::SLEEP; + else + return Nothing(); + } + + virtual void onApply(Creature* c) override { + if (c->getName() != "vampire") + return; + Bed::onApply(c); + } +}; + +class Altar : public Square { + public: + Altar(const ViewObject& object, Deity* d) + : Square(object, "shrine to " + d->getName(), true , true, 100, 0), deity(d) { + } + + virtual bool canDestroy() const override { + return true; + } + + virtual void destroy(int strength) override { + if (destroyed) + return; + getLevel()->globalMessage(getPosition(), "The shrine is destroyed."); + destroyed = true; + setName("destroyed shrine"); + setViewObject(ViewObject(ViewId::DESTROYED_FURNITURE, ViewLayer::FLOOR, getName())); + } + + virtual void onEnterSpecial(Creature* c) override { + c->privateMessage("This is a shrine to " + deity->getName()); + c->privateMessage((deity->getGender() == Gender::MALE ? "He lives in " : "She lives in ") + + deity->getHabitatString()); + c->privateMessage((deity->getGender() == Gender::MALE ? "He is the god of " : "She is the goddess of ") + + deity->getEpithets()); + } + + virtual Optional getApplyType(const Creature*) const override { + return SquareApplyType::PRAY; + } + + virtual void onApply(Creature* c) override { + c->privateMessage("You pray to " + deity->getName()); + deity->onPrayer(c); + } + + private: + Deity* deity; + bool destroyed = false; +}; + +class ConstructionDropItems : public SolidSquare { + public: + ConstructionDropItems(const ViewObject& object, const string& name, + map constructions, vector _items) + : SolidSquare(object, name, false, constructions), items(std::move(_items)) {} + + virtual void onConstructNewSquare(Square* s) override { + s->dropItems(std::move(items)); + } + + private: + vector items; +}; + +class TrainingDummy : public Furniture { + public: + TrainingDummy(const ViewObject& object, const string& name) : Furniture(object, name, 1) {} + + virtual Optional getApplyType(const Creature*) const override { + return SquareApplyType::TRAIN; + } + + virtual void onApply(Creature* c) override { + if (Random.roll(50)) + c->increaseExpLevel(); + } +}; + +class Workshop : public Furniture { + public: + Workshop(const ViewObject& object, const string& name, ItemFactory f) : Furniture(object, name, 1), factory(f) {} + + virtual Optional getApplyType(const Creature*) const override { + return SquareApplyType::WORKSHOP; + } + + virtual void onApply(Creature* c) override { + if (Random.roll(40)) + dropItem(factory.random()); + } + + private: + ItemFactory factory; +}; + +class Hatchery : public Square { + public: + Hatchery(const ViewObject& object, const string& name) : Square(object, name, true, false, 0, 0, {}, true) {} + + virtual void tickSpecial(double time) override { + if (getCreature() || !Random.roll(10)) + return; + for (Vec2 v : getPosition().neighbors8()) + if (Creature* c = getLevel()->getSquare(v)->getCreature()) + if (c->getName() == "chicken") + return; + getLevel()->addCreature(getPosition(), CreatureFactory::fromId(CreatureId::CHICKEN, Tribe::player, + MonsterAIFactory::moveRandomly())); + } + + virtual bool canEnterSpecial(const Creature* c) const override { + return c->canWalk() || c->getName() == "chicken"; + } + +}; + +Square* SquareFactory::getAltar(Deity* deity) { + return new Altar(ViewObject(ViewId::ALTAR, ViewLayer::FLOOR, "Shrine"), deity); +} + +Square* SquareFactory::get(SquareType s) { + switch (s) { + case SquareType::PATH: + case SquareType::FLOOR: + return new Square(ViewObject(ViewId::PATH, ViewLayer::FLOOR, "Floor"), "floor", true, false, 0, 0, + {{SquareType::TREASURE_CHEST, 10}, {SquareType::BED, 10}, {SquareType::TRIBE_DOOR, 10}, + {SquareType::ROCK_WALL, 20}, {SquareType::TRAINING_DUMMY, 10}, {SquareType::HATCHERY, 3}, + {SquareType::GRAVE, 10}, {SquareType::ROLLING_BOULDER, 10}, {SquareType::WORKSHOP, 10}}); + case SquareType::BRIDGE: + return new Square(ViewObject(ViewId::BRIDGE, ViewLayer::FLOOR, "Rope bridge"), "rope bridge", true); + case SquareType::GRASS: + return new Square(ViewObject(ViewId::GRASS, ViewLayer::FLOOR, "Grass"), "grass", true); + case SquareType::ROCK_WALL: + return new SolidSquare(ViewObject(ViewId::WALL, ViewLayer::FLOOR, "Wall"), "wall", false, + {{SquareType::FLOOR, Random.getRandom(3, 8)}}); + case SquareType::GOLD_ORE: + return new ConstructionDropItems(ViewObject(ViewId::GOLD_ORE, ViewLayer::FLOOR, "Gold ore"), "gold ore", + {{SquareType::FLOOR, Random.getRandom(30, 80)}}, + ItemFactory::fromId(ItemId::GOLD_PIECE, Random.getRandom(30, 60))); + case SquareType::LOW_ROCK_WALL: + return new SolidSquare(ViewObject(ViewId::WALL, ViewLayer::FLOOR, "Wall"), "wall", true); + case SquareType::WOOD_WALL: + return new SolidSquare(ViewObject(ViewId::WOOD_WALL, ViewLayer::FLOOR, "Wooden wall"), "wall", false); + case SquareType::BLACK_WALL: + return new SolidSquare(ViewObject(ViewId::BLACK_WALL, ViewLayer::FLOOR, "Wall"), "wall", false); + case SquareType::YELLOW_WALL: + return new SolidSquare(ViewObject(ViewId::YELLOW_WALL, ViewLayer::FLOOR, "Wall"), "wall", false); + case SquareType::MOUNTAIN: + return new SolidSquare(ViewObject(ViewId::MOUNTAIN, ViewLayer::FLOOR, "Mountain"), "mountain", true); + case SquareType::GLACIER: + return new SolidSquare(ViewObject(ViewId::SNOW, ViewLayer::FLOOR, "Mountain"), "mountain", true); + case SquareType::HILL: + return new Square(ViewObject(ViewId::HILL, ViewLayer::FLOOR, "Hill"), "hill", true); + case SquareType::SECRET_PASS: + return new SecretPassage(ViewObject(ViewId::SECRETPASS, ViewLayer::FLOOR, "Wall"), + ViewObject(ViewId::FLOOR, ViewLayer::FLOOR, "Floor")); + case SquareType::WATER: + return new Water(ViewObject(ViewId::WATER, ViewLayer::FLOOR, "Water"), "water", + "sinks in the water", "You hear a splash", MsgType::DROWN); + case SquareType::MAGMA: + return new Water(ViewObject(ViewId::MAGMA, ViewLayer::FLOOR, "Magma"), + "magma", "burns in the magma", "", MsgType::BURN, false); + case SquareType::ABYSS: + Debug(FATAL) << "Unimplemented"; + case SquareType::SAND: return new Square(ViewObject(ViewId::SAND, ViewLayer::FLOOR, "Sand"), "sand", true); + case SquareType::CANIF_TREE: return new Tree(ViewObject(ViewId::CANIF_TREE, ViewLayer::FLOOR, "Tree")); + case SquareType::DECID_TREE: return new Tree(ViewObject(ViewId::DECID_TREE, ViewLayer::FLOOR, "Tree")); + case SquareType::BUSH: return new Furniture(ViewObject(ViewId::BUSH, ViewLayer::FLOOR, "Bush"), "bush", 1); + case SquareType::BED: return new Bed(ViewObject(ViewId::BED, ViewLayer::FLOOR, "Bed"), "bed"); + case SquareType::TORTURE_TABLE: + return new Furniture(ViewObject(ViewId::TORTURE_TABLE, ViewLayer::FLOOR, "Torture table"), + "torture table", 0.3); + case SquareType::TRAINING_DUMMY: + return new TrainingDummy(ViewObject(ViewId::TRAINING_DUMMY, ViewLayer::FLOOR, "Training post"), + "training post"); + case SquareType::WORKSHOP: + return new Workshop(ViewObject(ViewId::WORKSHOP, ViewLayer::FLOOR, "Workshop stand"), + "workshop stand", ItemFactory::workshop()); + case SquareType::HATCHERY: + return new Hatchery(ViewObject(ViewId::GRASS, ViewLayer::FLOOR, "Hatchery"), "hatchery"); + case SquareType::DUNGEON_HEART: + return new SolidSquare(ViewObject(ViewId::DUNGEON_HEART, ViewLayer::FLOOR, "Dungeon heart"), + "dungeon heart", true); + case SquareType::ALTAR: + Debug(FATAL) << "Altars are not handled by this method."; + case SquareType::ROLLING_BOULDER: return new TrapSquare(ViewObject(ViewId::FLOOR, ViewLayer::FLOOR, "floor"), + Effect::getEffect(EffectType::ROLLING_BOULDER)); + case SquareType::FOUNTAIN: + return new Fountain(ViewObject(ViewId::FOUNTAIN, ViewLayer::FLOOR, "Fountain")); + case SquareType::CHEST: + return new Chest(ViewObject(ViewId::CHEST, ViewLayer::FLOOR, "Chest"), "chest", CreatureId::RAT, 3, 6, "There is an item inside", "It's full of rats!", "There is gold inside", ItemFactory::dungeon()); + case SquareType::TREASURE_CHEST: + return new Furniture(ViewObject(ViewId::CHEST, ViewLayer::FLOOR, "Chest"), "chest", 1); + case SquareType::COFFIN: + return new Chest(ViewObject(ViewId::COFFIN, ViewLayer::FLOOR, "Coffin"), "coffin", CreatureId::VAMPIRE, 1, 2, "There is a rotting corpse inside. You find an item.", "There is a rotting corpse inside. The corpse is alive!", "There is a rotting corpse inside. You find some gold.", ItemFactory::dungeon()); + case SquareType::GRAVE: + return new Grave(ViewObject(ViewId::GRAVE, ViewLayer::FLOOR, "Grave"), "grave"); + case SquareType::IRON_BARS: + Debug(FATAL) << "Unimplemented"; + case SquareType::DOOR: return new Door(ViewObject(ViewId::DOOR, ViewLayer::FLOOR, "Door")); + case SquareType::TRIBE_DOOR: return new TribeDoor(ViewObject(ViewId::DOOR, ViewLayer::LARGE_ITEM, "Door"), 100); + case SquareType::BORDER_GUARD: + return new SolidSquare(ViewObject(ViewId::BORDER_GUARD, ViewLayer::FLOOR, "Wall"), "wall", false); + case SquareType::DOWN_STAIRS: + case SquareType::UP_STAIRS: Debug(FATAL) << "Stairs are not handled by this method."; + } + return 0; +} + +Square* SquareFactory::getStairs(StairDirection direction, StairKey key) { + switch(direction) { + case StairDirection::UP: + return new Staircase(ViewObject(ViewId::UP_STAIRCASE, ViewLayer::FLOOR, "Stairs leading up"), + "stairs leading up", direction, key); + case StairDirection::DOWN: + return new Staircase(ViewObject(ViewId::DOWN_STAIRCASE, ViewLayer::FLOOR, "Stairs leading down"), + "stairs leading down", direction, key); + } + return nullptr; +} diff --git a/square_factory.h b/square_factory.h new file mode 100644 index 000000000..ad1457cf7 --- /dev/null +++ b/square_factory.h @@ -0,0 +1,26 @@ +#ifndef _SQUARE_FACTORY +#define _SQUARE_FACTORY + +#include "pantheon.h" + +class Square; + + +inline StairDirection opposite(StairDirection d) { + switch (d) { + case StairDirection::DOWN: return StairDirection::UP; + case StairDirection::UP: return StairDirection::DOWN; + } + return StairDirection::DOWN; +} + +class SquareFactory { + public: + static Square* get(SquareType); + static Square* getStairs(StairDirection, StairKey); + static Square* getAltar(Deity*); + + private: +}; + +#endif diff --git a/stdafx.h b/stdafx.h new file mode 100644 index 000000000..1b3071a0d --- /dev/null +++ b/stdafx.h @@ -0,0 +1,110 @@ +#ifndef _STDAFX_H +#define _STDAFX_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ctype.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using std::string; +using std::vector; +using std::map; +using std::queue; +using std::unique_ptr; +using std::default_random_engine; +using std::function; +using std::initializer_list; +using std::unordered_set; +using std::pair; +using std::tuple; +using std::set; +using std::out_of_range; +using std::unordered_map; +using std::min; +using std::max; +using std::ofstream; +using std::ifstream; +using std::endl; +using std::priority_queue; +using std::make_pair; +using std::stack; + +#include "window_view.h" +#include "action.h" +#include "attack.h" +#include "collective.h" +#include "collective_action.h" +#include "controller.h" +#include "creature_attributes.h" +#include "creature_factory.h" +#include "creature_view.h" +#include "creature.h" +#include "debug.h" +#include "effect.h" +#include "enemy_check.h" +#include "enums.h" +#include "equipment.h" +#include "event.h" +#include "field_of_view.h" +#include "fire.h" +#include "inventory.h" +#include "item_attributes.h" +#include "item_factory.h" +#include "item.h" +#include "level_generator.h" +#include "level.h" +#include "level_maker.h" +#include "location.h" +#include "logging_view.h" +#include "map_layout.h" +#include "map_memory.h" +#include "markov_chain.h" +#include "message_buffer.h" +#include "minion_equipment.h" +#include "model.h" +#include "monster.h" +#include "monster_ai.h" +#include "name_generator.h" +#include "pantheon.h" +#include "player.h" +#include "poison_gas.h" +#include "quest.h" +#include "ranged_weapon.h" +#include "replay_view.h" +#include "shortest_path.h" +#include "skill.h" +#include "square_factory.h" +#include "square.h" +#include "task.h" +#include "time_queue.h" +#include "timer_var.h" +#include "tribe.h" +#include "trigger.h" +#include "util.h" +#include "view.h" +#include "view_index.h" +#include "view_object.h" +#include "village_control.h" + +#endif diff --git a/task.cpp b/task.cpp new file mode 100644 index 000000000..df5df24f0 --- /dev/null +++ b/task.cpp @@ -0,0 +1,340 @@ +#include "stdafx.h" + + +Task::Task(Collective* col, Vec2 pos) : position(pos), collective(col) {} + +Vec2 Task::getPosition() { + return position; +} + +Collective* Task::getCollective() { + return collective; +} + +bool Task::isDone() { + return done; +} + +void Task::setDone() { + done = true; +} + +void Task::setPosition(Vec2 pos) { + position = pos; +} + +class Construction : public Task { + public: + Construction(Collective* col, Vec2 position, SquareType _type) : Task(col, position), type(_type) {} + + virtual bool isImpossible(const Level* level) { + return !level->getSquare(getPosition())->canConstruct(type); + } + + virtual MoveInfo getMove(Creature* c) override { + if (!c->hasSkill(Skill::construction)) + return NoMove; + Vec2 dir = getPosition() - c->getPosition(); + if (dir.length8() == 1) { + if (c->canConstruct(dir, type)) + return {1.0, [this, c, dir] { + c->construct(dir, type); + if (!c->canConstruct(dir, type)) { + setDone(); + getCollective()->onConstructed(getPosition(), type); + } + }}; + else { + setDone(); + return NoMove; + } + } else + return getMoveToPosition(c); + } + + private: + SquareType type; +}; + + +PTask Task::construction(Collective* col, Vec2 target, SquareType type) { + return PTask(new Construction(col, target, type)); +} + +MoveInfo Task::getMoveToPosition(Creature *c) { + Optional move = c->getMoveTowards(position); + if (move) + return {1.0, [=] { + c->move(*move); + }}; + else + return NoMove; +} + +class PickItem : public Task { + public: + PickItem(Collective* col, Vec2 position, vector _items) + : Task(col, position), items(_items.begin(), _items.end()) { + } + + virtual void onPickedUp() { + setDone(); + } + + virtual bool canTransfer() override { + return false; + } + + virtual MoveInfo getMove(Creature* c) override { + CHECK(!pickedUp); + if (c->getPosition() == getPosition()) { + vector hereItems; + for (Item* it : c->getPickUpOptions()) + if (items.count(it)) + hereItems.push_back(it); + if (hereItems.empty()) { + setDone(); + return NoMove; + } + items = set(hereItems.begin(), hereItems.end()); + if (c->canPickUp(hereItems)) + return {1.0, [=] { + c->pickUp(hereItems); + pickedUp = true; + onPickedUp(); + getCollective()->onPickedUp(getPosition(), hereItems); + }}; + else + return NoMove; + } + else + return getMoveToPosition(c); + } + + protected: + set items; + bool pickedUp = false; +}; + +PTask Task::pickItem(Collective* col, Vec2 position, vector items) { + return PTask(new PickItem(col, position, items)); +} + +class EquipItem : public PickItem { + public: + EquipItem(Collective* col, Vec2 position, vector _items) : PickItem(col, position, _items) { + } + + virtual void onPickedUp() override { + } + + virtual MoveInfo getMove(Creature* c) override { + if (!pickedUp) + return PickItem::getMove(c); + CHECK(items.size() <= 1); + for (Item* it : items) + if (c->canEquip(it)) + return {1.0, [=] { + c->equip(it); + setDone(); + }}; + return NoMove; + } +}; + +PTask Task::equipItem(Collective* col, Vec2 position, Item* items) { + return PTask(new EquipItem(col, position, {items})); +} + +class BringItem : public PickItem { + public: + BringItem(Collective* col, Vec2 position, vector items, Vec2 _target) + : PickItem(col, position, items), target(_target) {} + + virtual void onBroughtItem(Creature* c, vector it) { + //getCollective()->onBrought(c->getPosition(), it); + c->drop(it); + } + + virtual void onPickedUp() override { + } + + virtual MoveInfo getMove(Creature* c) override { + if (!pickedUp) + return PickItem::getMove(c); + setPosition(target); + if (c->getPosition() == target) { + vector myItems(items.begin(), items.end()); + return {1.0, [=] { + onBroughtItem(c, myItems); + setDone(); + }}; + } else { + if (c->getPosition().dist8(target) == 1) + if (Creature* other = c->getLevel()->getSquare(target)->getCreature()) + if (other->isSleeping()) + other->wakeUp(); + return getMoveToPosition(c); + } + } + + virtual bool canTransfer() override { + return !pickedUp; + } + + protected: + Vec2 target; + +}; + +PTask Task::bringItem(Collective* col, Vec2 position, vector items, Vec2 target) { + return PTask(new BringItem(col, position, items, target)); +} + +class ApplyItem : public BringItem { + public: + ApplyItem(Collective* col, Vec2 position, vector items, Vec2 _target) + : BringItem(col, position, items, _target) {} + + virtual void cancel() override { + getCollective()->onAppliedItemCancel(target); + } + + virtual void onBroughtItem(Creature* c, vector it) override { + CHECK(it.size() == 1); + getCollective()->onAppliedItem(c->getPosition(), it[0]); + c->applyItem(it[0]); + } +}; + +PTask Task::applyItem(Collective* col, Vec2 position, Item* item, Vec2 target) { + return PTask(new ApplyItem(col, position, {item}, target)); +} + +class ApplySquare : public Task { + public: + ApplySquare(Collective* col, set pos) : Task(col, Vec2(-1, 1)), positions(pos) {} + + virtual bool canTransfer() override { + return false; + } + + virtual MoveInfo getMove(Creature* c) override { + Vec2 pos = getPosition(); + if (pos.x == -1) { + pos = Vec2(-10000, -10000); + for (Vec2 v : randomPermutation(positions)) + if (!rejectedPosition.count(v) && + (pos - c->getPosition()).length8() > (v - c->getPosition()).length8() && + !c->getLevel()->getSquare(v)->getCreature()) + pos = v; + if (pos.x == -10000) { + setDone(); + return NoMove; + } + setPosition(pos); + } + if (c->getPosition() == getPosition()) { + CHECK(c->getSquare()->getApplyType(c)); + return {1.0, [this, c] { + c->applySquare(); + setDone(); + }}; + } else { + MoveInfo move = getMoveToPosition(c); + if (!move.isValid() || ((getPosition() - c->getPosition()).length8() == 1 && c->getLevel()->getSquare(getPosition())->getCreature())) { + rejectedPosition.insert(getPosition()); + setPosition(Vec2(-1, -1)); + if (--invalidCount == 0) { + setDone(); + } + return NoMove; + } + else + return move; + } + } + + private: + set positions; + set rejectedPosition; + int invalidCount = 5; +}; + +PTask Task::applySquare(Collective* col, set position) { + CHECK(position.size() > 0); + return PTask(new ApplySquare(col, position)); +} + +class Eat : public Task { + public: + Eat(Collective* col, set pos) : Task(col, Vec2(-1, 1)), positions(pos) {} + + virtual bool canTransfer() override { + return false; + } + + Item* getDeadChicken(Square* s) { + vector chickens = s->getItems(Item::typePredicate(ItemType::FOOD)); + if (chickens.empty()) + return nullptr; + else + return chickens[0]; + } + + virtual MoveInfo getMove(Creature* c) override { + Vec2 pos = getPosition(); + if (pos.x == -1) { + pos = Vec2(-10000, -10000); + for (Vec2 v : positions) + if (!rejectedPosition.count(v) && (pos - c->getPosition()).length8() > (v - c->getPosition()).length8()) + pos = v; + if (pos.x == -10000) { + setDone(); + return NoMove; + } + setPosition(pos); + } + Item* chicken = getDeadChicken(c->getSquare()); + if (chicken) { + return {1.0, [this, c, chicken] { + c->globalMessage(c->getTheName() + " eats " + chicken->getAName()); + c->eat(chicken); + setDone(); + }}; + } + for (Vec2 v : Vec2::directions8(true)) { + Item* chicken = getDeadChicken(c->getSquare(v)); + if (chicken && c->canMove(v)) + return {1.0, [this, c, v] { + c->move(v); + }}; + if (Creature* ch = c->getSquare(v)->getCreature()) + if (ch->getName() == "chicken" && c->canAttack(ch)) { + return {1.0, [this, c, ch] { + c->attack(ch); + }}; + } + } + MoveInfo move = getMoveToPosition(c); + if (!move.isValid() || ((getPosition() - c->getPosition()).length8() == 1 && c->getLevel()->getSquare(getPosition())->getCreature())) { + rejectedPosition.insert(getPosition()); + setPosition(Vec2(-1, -1)); + if (--invalidCount == 0) { + setDone(); + } + return NoMove; + } + else + return move; + } + + private: + set positions; + set rejectedPosition; + int invalidCount = 5; +}; + +PTask Task::eat(Collective* col, set hatcherySquares) { + return PTask(new Eat(col, hatcherySquares)); +} diff --git a/task.h b/task.h new file mode 100644 index 000000000..db6922464 --- /dev/null +++ b/task.h @@ -0,0 +1,38 @@ +#ifndef _TASK_H +#define _TASK_H + +#include "monster_ai.h" + +class Task { + public: + Task(Collective*, Vec2 position); + + virtual MoveInfo getMove(Creature*) = 0; + virtual bool isImpossible(const Level*) { return false; } + virtual bool canTransfer() { return true; } + virtual void cancel() {} + bool isDone(); + + Vec2 getPosition(); + + static PTask construction(Collective*, Vec2 target, SquareType); + static PTask bringItem(Collective*, Vec2 position, vector, Vec2 target); + static PTask applyItem(Collective* col, Vec2 position, Item* item, Vec2 target); + static PTask applySquare(Collective*, set squares); + static PTask eat(Collective*, set hatcherySquares); + static PTask equipItem(Collective* col, Vec2 position, Item* item); + static PTask pickItem(Collective* col, Vec2 position, vector items); + + protected: + void setDone(); + void setPosition(Vec2); + MoveInfo getMoveToPosition(Creature*); + Collective* getCollective(); + + private: + Vec2 position; + bool done = false; + Collective* collective; +}; + +#endif diff --git a/test.cpp b/test.cpp new file mode 100644 index 000000000..fc14068d6 --- /dev/null +++ b/test.cpp @@ -0,0 +1,356 @@ +#include "stdafx.h" + +using namespace std; + +void testStringConvertion() { + CHECK(convertToString(1234) == "1234"); + CHECK(convertFromString("1234") == 1234); +} + +void testTimeQueue() { + /* CreatureAttributes attr = CATTR(c.name = ""; c.speed = 5; c.size = CreatureSize::SMALL; c.strength = 1; c.dexterity = 3; c.humanoid = false; c.weight = 0.1;); + PCreature b(new Creature(ViewObject(ViewId::JACKAL, ViewLayer::CREATURE, ""), nullptr, attr)); + PCreature a(new Creature(ViewObject(ViewId::PLAYER, ViewLayer::CREATURE, ""), nullptr, attr)); + PCreature c(new Creature(ViewObject(ViewId::JACKAL, ViewLayer::CREATURE, ""), nullptr, attr)); + Creature* rb = b.get(), *ra = a.get(), *rc = c.get(); + a->setTime(1); + b->setTime(1.33); + c->setTime(1.66); + TimeQueue q; + q.addCreature(move(a)); + q.addCreature(move(b)); + q.addCreature(move(c)); + CHECK(q.getNextCreature() == ra); + ra->setTime(2); + CHECK(q.getNextCreature() == rb); + rb->setTime(2); + CHECK(q.getNextCreature() == rc); + rc->setTime(3); + CHECK(q.getNextCreature() == rb); + rb->setTime(3); + CHECK(q.getNextCreature() == ra);*/ +} + +void testRectangleIterator() { + vector v1, v2; + for (Vec2 v : Rectangle(10, 10)) { + v1.push_back(v); + } + for (int i = 0; i < 10; ++i) + for (int j = 0; j < 10; ++j) + v2.push_back(Vec2(i, j)); + CHECK(v1 == v2); + v1.clear(); v2.clear(); + for (Vec2 v : Rectangle(10, 15, 20, 25)) { + v1.push_back(v); + } + for (int i = 10; i < 20; ++i) + for (int j = 15; j < 25; ++j) + v2.push_back(Vec2(i, j)); + CHECK(v1 == v2); +} + +void testRectangle() { + CHECK(Rectangle(2, 2, 4, 4).intersects(Rectangle(3, 3, 5, 5))); + CHECK(!Rectangle(2, 2, 4, 4).intersects(Rectangle(3, 4, 5, 5))); + CHECK(!Rectangle(2, 2, 4, 4).intersects(Rectangle(4, 3, 5, 5))); +} + +void testValueCheck() { + CHECK(3 == CHECKEQ(1 + 2, 3)); + string* s = new string("wefpok"); + CHECK(s == NOTNULL(s)); +} + +void testSplit() { + vector v = { "pok", "pokpok", "pok" }; + vector w = { "po", ";po", "po", ";;po", ";" }; + CHECK(split("pok;pokpok;;pok;", ';') == v) << split("pok;pokpok;;pok;", ';'); + CHECK(split("pok;pokpok;;pok;", 'k') == w) << split("pok;pokpok;;pok;", 'k'); +} + +void testShortestPath() { + vector > table { { 2, 1, 2, 18, 1}, { 1, 1, 18, 1, 2}, {2, 6, 10, 1,1}, {1, 2, 1, 8, 1}, {5, 3, 1, 1, 2}}; + ShortestPath path(Rectangle(5, 5), + [table](Vec2 pos) { return table[pos.y][pos.x];}, + [] (Vec2 v) { return v.length4(); }, + Vec2::directions4(), Vec2(4, 0)); + vector res {Vec2(1, 0)}; + while (res.back() != Vec2(4, 0)) { + res.push_back(path.getNextMove(res.back())); + } + vector expected {Vec2(1, 0), Vec2(1, 1), Vec2(0, 1), Vec2(0, 2), Vec2(0, 3), Vec2(1, 3), Vec2(2, 3), Vec2(2, 4), Vec2(3, 4), Vec2(4, 4), Vec2(4, 3), Vec2(4, 2), Vec2(4, 1), Vec2(4, 0)}; + CHECK(res == expected); +} + +void testAStar() { + vector > table { { 1, 1, 6, 1, 1}, { 1, 1, 6, 1, 1}, {1, 1, 1, 1,1}, {1, 1, 6, 1, 1}, {1, 1, 6, 1, 1}}; + ShortestPath path(Rectangle(5, 5), + [table](Vec2 pos) { return table[pos.y][pos.x];}, + [] (Vec2 v) { return v.length4(); }, + Vec2::directions4(), Vec2(4, 0), Vec2(0, 0)); +} + +void testShortestPath2() { + vector > table { { 2, 1, 2, ShortestPath::infinity, 1}, { 1, 1, 18, 1, ShortestPath::infinity}, {2, 6, 10, 1,1}, {1, 2, 1, 8, 1}, {5, 3, 1, 1, 2}}; + ShortestPath path(Rectangle(5, 5), + [table](Vec2 pos) { return table[pos.y][pos.x];}, + [] (Vec2 v) { return v.length4(); }, + Vec2::directions4(), Vec2(4, 0)); + CHECK(!path.isReachable(Vec2(1, 0))); +} + +void testShortestPathReverse() { + vector > table { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, { 1, 1, 1, ShortestPath::infinity, ShortestPath::infinity, 1, 1, 1, 1, 1, 1}, { 1, 1, 1, ShortestPath::infinity, ShortestPath::infinity, 1, 1, 1, 1, 1, 1}}; + ShortestPath path(Rectangle(11, 3), + [table](Vec2 pos) { return table[pos.y][pos.x];}, + [] (Vec2 v) { return v.length4(); }, + Vec2::directions4(), Vec2(1, 1), Nothing(), -1.3); +/* vector res {Vec2(1, 0)}; + while (res.back() != Vec2(4, 0)) { + res.push_back(path.getNextMove(res.back())); + } + vector expected {Vec2(1, 0), Vec2(1, 1), Vec2(0, 1), Vec2(0, 2), Vec2(0, 3), Vec2(1, 3), Vec2(2, 3), Vec2(2, 4), Vec2(3, 4), Vec2(4, 4), Vec2(4, 3), Vec2(4, 2), Vec2(4, 1), Vec2(4, 0)}; + CHECK(res == expected);*/ +} + +void testRandom() { + CHECK(chooseRandom({"pokpok", "kwakwa", "pikpik"}, { 1, 2, 3}, 1) == "pokpok"); + CHECK(chooseRandom({"pokpok", "kwakwa", "pikpik"}, { 1, 2, 3}, 2) == "kwakwa"); + CHECK(chooseRandom({"pokpok", "kwakwa", "pikpik"}, { 1, 2, 3}, 3) == "kwakwa"); + CHECK(chooseRandom({"pokpok", "kwakwa", "pikpik"}, { 1, 2, 3}, 4) == "pikpik"); + CHECK(chooseRandom({"pokpok", "kwakwa", "pikpik"}, { 1, 2, 3}, 5) == "pikpik"); + CHECK(chooseRandom({"pokpok", "kwakwa", "pikpik"}, { 1, 2, 3}, 6) == "pikpik"); + CHECK(chooseRandom({"pokpok", "kwakwa", "pikpik"}, { 1, 0, 3}, 1) == "pokpok"); + CHECK(chooseRandom({"pokpok", "kwakwa", "pikpik"}, { 1, 0, 3}, 2) == "pikpik"); +} + +void testViewTitlePrefix() { + string a = "pokpok"; + CHECK(!View::hasTitlePrefix(a)); + CHECK(View::hasTitlePrefix(View::getTitlePrefix(a))); + CHECK(View::removeTitlePrefix(View::getTitlePrefix(a)) == a); +} + +void testRange() { + vector a; + vector b {0,1,2,3,4,5,6}; + for (int x : Range(7)) + a.push_back(x); + CHECKEQ(a, b); + a.clear(); + for (int x : Range(2, 6)) + a.push_back(x); + CHECKEQ(getPrefix(b, 2, 4), a); + a.clear(); + for (int x : All(b)) + a.push_back(x); + CHECKEQ(a, b); +} + +void testContains() { + CHECK(contains({0, 1, 2, 3}, 2)); + CHECK(!contains({0, 1, 2, 3}, 4)); + CHECK(contains({Vec2(0, 0), Vec2(0, 1)}, Vec2(0, 0))); + CHECK(!contains({Vec2(1, 0), Vec2(0, 1)}, Vec2(0, 0))); + CHECK(contains(string("pokpokpokpikpik"), string("kpok"))); + CHECK(contains(string("pokpokpokpikpik"), string("kpik"))); + CHECK(!contains(string("pokpokpokpikpik"), string("pikpok"))); + CHECK(contains(string("pokpokpokpikpik"), string("pokpokpokpikpik"))); +} + +void testPredicates() { + function pred1 = [](int x) { return x % 2 == 0; }; + function pred2 = [](int x) { return x % 3 == 0; }; + for (int i : Range(20)) { + bool x = andFun(pred1, pred2)(i); + CHECK(x == (i % 6 == 0)); + } +} + +Optional getInt(bool yes) { + if (yes) + return 1; + else + return Nothing(); +} + +void testOptional() { + Optional r = getInt(true); + CHECK(r); + CHECK(r == 1); + CHECK(!getInt(false)); +} + +void testMustInitialize() { + MustInitialize x; + x = 5; + int y = *x; + MustInitialize z(x); + int v = *z; +} + +template +void checkEqual(pair p1, pair p2) { + CHECK(p1 == p2 || (p1.first == p2.second && p1.second == p2.first)) + << p1.first << "," << p1.second << " " << p2.first << "," << p2.second; +} + +void testVec2() { + CHECK(Vec2(5, 0).shorten() == Vec2(1, 0)); + CHECK(Vec2(-7, 0).shorten() == Vec2(-1, 0)); + CHECK(Vec2(0, 4).shorten() == Vec2(0, 1)); + CHECK(Vec2(0, -3).shorten() == Vec2(0, -1)); + CHECK(Vec2(5, 5).shorten() == Vec2(1, 1)); + CHECK(Vec2(-7, -7).shorten() == Vec2(-1, -1)); + CHECK(Vec2(-3, 3).shorten() == Vec2(-1, 1)); + CHECK(Vec2(4, -4).shorten() == Vec2(1, -1)); + + checkEqual(Vec2(3, 0).approxL1(), make_pair(Vec2(1, 0), Vec2(1, 0))); + checkEqual(Vec2(3, -1).approxL1(), make_pair(Vec2(1, 0), Vec2(1, -1))); + checkEqual(Vec2(3, -3).approxL1(), make_pair(Vec2(1, -1), Vec2(1, -1))); + checkEqual(Vec2(1, -3).approxL1(), make_pair(Vec2(0, -1), Vec2(1, -1))); + checkEqual(Vec2(0, -3).approxL1(), make_pair(Vec2(0, -1), Vec2(0, -1))); + checkEqual(Vec2(-1, -3).approxL1(), make_pair(Vec2(0, -1), Vec2(-1, -1))); + checkEqual(Vec2(-3, -3).approxL1(), make_pair(Vec2(-1, -1), Vec2(-1, -1))); + checkEqual(Vec2(-3, -1).approxL1(), make_pair(Vec2(-1, 0), Vec2(-1, -1))); + checkEqual(Vec2(-3, 0).approxL1(), make_pair(Vec2(-1, 0), Vec2(-1, 0))); + checkEqual(Vec2(-3, 1).approxL1(), make_pair(Vec2(-1, 0), Vec2(-1, 1))); + checkEqual(Vec2(-3, 3).approxL1(), make_pair(Vec2(-1, 1), Vec2(-1, 1))); + checkEqual(Vec2(-1, 3).approxL1(), make_pair(Vec2(0, 1), Vec2(-1, 1))); + checkEqual(Vec2(0, 3).approxL1(), make_pair(Vec2(0, 1), Vec2(0, 1))); + checkEqual(Vec2(1, 3).approxL1(), make_pair(Vec2(0, 1), Vec2(1, 1))); + checkEqual(Vec2(3, 3).approxL1(), make_pair(Vec2(1, 1), Vec2(1, 1))); + checkEqual(Vec2(3, 1).approxL1(), make_pair(Vec2(1, 1), Vec2(1, 0))); + + CHECKEQ(Vec2(1, 0).getBearing(), "east"); + CHECKEQ(Vec2(3, 1).getBearing(), "east"); + CHECKEQ(Vec2(1, 1).getBearing(), "south-east"); + CHECKEQ(Vec2(2, 1).getBearing(), "south-east"); + CHECKEQ(Vec2(0, 1).getBearing(), "south"); + CHECKEQ(Vec2(-1, 3).getBearing(), "south"); + CHECKEQ(Vec2(-1, 1).getBearing(), "south-west"); + CHECKEQ(Vec2(-1, 0).getBearing(), "west"); + CHECKEQ(Vec2(-1, -1).getBearing(), "north-west"); + CHECKEQ(Vec2(0, -1).getBearing(), "north"); + CHECKEQ(Vec2(1, -1).getBearing(), "north-east"); +} + +void testConcat() { + vector v = concat({{1, 2}, {3,4,5}, {}, {7,8,9}}); + vector r = {1,2,3,4,5,7,8,9}; + CHECK(v == r) << v << " != " < t(10, 10); + for (Vec2 v : Rectangle(10, 10)) + t[v] = v.x * v.y; + CHECK(t[9][9] = 81); + Table t2(15, 20, 25, 30); + for (int i = 15; i < 40; ++i) + for (int j = 20; j < 50; ++j) + t2[i][j] = i * j; + CHECK(t2[39][49] == 39 * 49); +} + +void testProjection() { +/* Vec2 proj = AllegroView::projectOnBorders(Rectangle(5, 5), Vec2(6, 0)); + CHECKEQ(proj, Vec2(4, 1)); + proj = AllegroView::projectOnBorders(Rectangle(5, 5), Vec2(4, -2)); + CHECKEQ(proj, Vec2(3, 0)); + proj = AllegroView::projectOnBorders(Rectangle(5, 5), Vec2(0, -2)); + CHECKEQ(proj, Vec2(1, 0)); + proj = AllegroView::projectOnBorders(Rectangle(5, 5), Vec2(-2, 0)); + CHECKEQ(proj, Vec2(0, 1)); + proj = AllegroView::projectOnBorders(Rectangle(5, 5), Vec2(-2, 4)); + CHECKEQ(proj, Vec2(0, 3)); + proj = AllegroView::projectOnBorders(Rectangle(5, 5), Vec2(0, 6)); + CHECKEQ(proj, Vec2(1, 4)); + proj = AllegroView::projectOnBorders(Rectangle(5, 5), Vec2(4, 6)); + CHECKEQ(proj, Vec2(3, 4)); + proj = AllegroView::projectOnBorders(Rectangle(5, 5), Vec2(6, 4)); + CHECKEQ(proj, Vec2(4, 3)); + proj = AllegroView::projectOnBorders(Rectangle(5, 5), Vec2(-2, 2)); + CHECKEQ(proj, Vec2(0, 2)); + proj = AllegroView::projectOnBorders(Rectangle(5, 5), Vec2(6, 2)); + CHECKEQ(proj, Vec2(4, 2)); + proj = AllegroView::projectOnBorders(Rectangle(5, 5), Vec2(2, -2)); + CHECKEQ(proj, Vec2(2, 0)); + proj = AllegroView::projectOnBorders(Rectangle(5, 5), Vec2(2, 6)); + CHECKEQ(proj, Vec2(2, 4));*/ +} + +void testVec2Box0() { + vector v = Vec2(-2, -3).box(0, false); + vector res { Vec2(-2, -3) }; + CHECKEQ(v, res); +} + +void testVec2Box1() { + vector v = Vec2(-2, -3).box(1, false); + vector res { Vec2(-3, -4), Vec2(-2, -4), Vec2(-1, -4), + Vec2(-1, -3), Vec2(-1, -2), Vec2(-2, -2), + Vec2(-3, -2), Vec2(-3, -3) }; + CHECKEQ(v, res); +} + +void testVec2Box2() { + vector v = Vec2(-2, -3).box(2, false); + vector res { Vec2(-4, -5), + Vec2(-3, -5), Vec2(-2, -5), Vec2(-1, -5), + Vec2(0, -5), Vec2(0, -4), Vec2(0, -3), + Vec2(0, -2), Vec2(0, -1), Vec2(-1, -1), + Vec2(-2, -1), Vec2(-3, -1), Vec2(-4, -1), + Vec2(-4, -2), Vec2(-4, -3), Vec2(-4, -4)}; + CHECKEQ(v, res); +} + +void testRandomExit() { + Rectangle r(5, 10, 15, 20); + for (int i : Range(1000)) { + Vec2 v = LevelMaker::getRandomExit(r); + CHECK((v.x == 5) ^ (v.x == 14) ^ (v.y == 10) ^ (v.y == 19)); + } +} + +void testCombine() { + vector words { "pok", "pak", "pik", "puk" }; + CHECKEQ(combine(words), "pok, pak, pik and puk"); + words = { "pok" }; + CHECKEQ(combine(words), "pok"); + words = { "pok", "pik" }; + CHECKEQ(combine(words), "pok and pik"); +} + +int main() { + Debug::init(); + testStringConvertion(); + testTimeQueue(); + testRectangleIterator(); + testValueCheck(); + testSplit(); + testShortestPath(); + testAStar(); + testShortestPath2(); + testShortestPathReverse(); + testRandom(); + testViewTitlePrefix(); + testRange(); + testContains(); + testPredicates(); + testOptional(); + testMustInitialize(); + testVec2(); + testConcat(); + testTable(); + testVec2(); + testRectangle(); + testProjection(); + testRandomExit(); + testCombine(); + testVec2Box0(); + testVec2Box1(); + testVec2Box2(); + Debug() << "-----===== OK =====-----"; +} diff --git a/time_queue.cpp b/time_queue.cpp new file mode 100644 index 000000000..2ef80ce90 --- /dev/null +++ b/time_queue.cpp @@ -0,0 +1,69 @@ +#include "stdafx.h" + +using namespace std; + +TimeQueue::TimeQueue() : queue([](QElem e1, QElem e2) { + return e1.time > e2.time || (e1.time == e2.time && e1.creature->getUniqueId() > e2.creature->getUniqueId()); +}) {} + +void TimeQueue::addCreature(PCreature c) { + queue.push({c.get(), c->getTime()}); + creatures.push_back(std::move(c)); +} + +PCreature TimeQueue::removeCreature(Creature* cRef) { + int ind = -1; + for (int i : All(creatures)) + if (creatures[i].get() == cRef) { + ind = i; + break; + } + CHECK(ind > -1) << "Creature not found"; + PCreature ret = std::move(creatures[ind]); + creatures.erase(creatures.begin() + ind); + dead.insert(ret.get()); + return ret; +} + +vector TimeQueue::getAllCreatures() const { + vector ret; + for (const PCreature& c : creatures) + ret.push_back(c.get()); + return ret; +} + +void TimeQueue::removeDead() { + while (!queue.empty() && dead.count(queue.top().creature)) + queue.pop(); +} + +Creature* TimeQueue::getMinCreature() { + CHECK(creatures.size() > 0); + removeDead(); + QElem elem = queue.top(); + if (elem.time == elem.creature->getTime()) + return elem.creature; + else { + queue.pop(); + removeDead(); + queue.push({elem.creature, elem.creature->getTime()}); + return queue.top().creature; + } + /*for (PCreature& c : creatures) + if (c->getTime() < min || (c->getTime() == min && c->getUniqueId() < res->getUniqueId())) { + res = c.get(); + min = c->getTime(); + }*/ +} + +Creature* TimeQueue::getNextCreature() { + Creature* c = getMinCreature(); + return c; +} + +double TimeQueue::getCurrentTime() { + if (creatures.size() > 0) + return getMinCreature()->getTime(); + else + return 0; +} diff --git a/time_queue.h b/time_queue.h new file mode 100644 index 000000000..5a2e58a01 --- /dev/null +++ b/time_queue.h @@ -0,0 +1,29 @@ +#ifndef _TIME_QUEUE_H +#define _TIME_QUEUE_H + +#include +#include "util.h" +#include "creature.h" + +class TimeQueue { + public: + TimeQueue(); + Creature* getNextCreature(); + vector getAllCreatures() const; + void addCreature(PCreature c); + PCreature removeCreature(Creature* c); + double getCurrentTime(); + + private: + vector creatures; + struct QElem { + Creature* creature; + double time; + }; + priority_queue, function> queue; + unordered_set dead; + void removeDead(); + Creature* getMinCreature(); +}; + +#endif diff --git a/timer_var.h b/timer_var.h new file mode 100644 index 000000000..f2a0f38ef --- /dev/null +++ b/timer_var.h @@ -0,0 +1,31 @@ +#ifndef _TIMER_H +#define _TIMER_H + + +class TimerVar { + public: + void set(double t) { + timeout = t; + } + + void unset() { + timeout = -1; + } + + bool isFinished(double currentTime) { + if (timeout >= 0 && currentTime >= timeout) { + timeout = -1; + return true; + } + return false; + } + + operator bool() const { + return timeout >= 0; + } + + private: + double timeout = -1; +}; + +#endif diff --git a/town_names.txt b/town_names.txt new file mode 100644 index 000000000..c50b196eb --- /dev/null +++ b/town_names.txt @@ -0,0 +1,5629 @@ +Abymin +Abymina lui +Abyminarë +Abymine +Abyminești +Abyminge +Abyminis +Abyminja +Abyminnë +Abyminë +Adjud Odorj +Adjud Saing +Adjungavnik +Adjunge +Adjungjin +Adjungs +Adjungue +Adjura +Adjurad +Adjurahor +Adjurahovda +Adjuraine +Adjurance +Adjuravec +Adjuraș +Adjusford +Adjusforos +Adjusforra +Adjusfors +Adjusna +Adjusne +Adjusniçan +Adjutällmo +Adjutë +Adjutów +Adjuviken +Adjuvița +Aignan +Aignance +Aignandre +Aignandë +Aignantines +Aigne +Aignolan +Aignon +Aigny-son +Aigny-sunda +Aisna +Aisniçan +Aisnysa +Aisnärnon +Aisnärp +Aisnäs +Ajac +Ajacce +Ajaccie +Ajaccineux +Ajace +Ajacka +Ajackamëz +Ajackekil +Ajacken +Ajacker +Ajackås +Ajacków +Ajacov +Ajacova +Ajacovalș +Ajacoven +Ajacovence +Ajacovensht +Ajacovikka +Ajacovës +Ajacz +Ajaczów +Ajaczówek +Alek +Alliczyn +Allin +Allishë +Alpe +Alpenicë +Alper +Alpers +Alpersek +Alperski +Alpes +Alpes-Cova +Alpes-Côte +Alpes-Roșu +Alsa +Alunioas +Amar +Amara +Amarance +Amarbergiu +Amarbeș +Amarby +Amarca +Amardy +Amare +Amaredzice +Amargorz +Amariana +Amarianne +Amaritoupes +Amark +Amarka +Amarmorbyn +Amarnan +Amarne +Amarne-Sais +Amarnes +Amaron +Amarp +Amarrenja +Amarsrumiei +Amarwo +Amarzeźnov +Amarzycea +Amarzyn +Amarzyń +Amarë +Amarön +Amaröpi +Amarörne +Anin +Anin Tult +Anin-Jiu +Anin-Vallin +Anine +Aningebro +Aninte +Anintea +Aninë +Anka +Ankalba +Ankalberz +Ankamë +Ankarsek +Ankarstorp +Ankarö +Anne +Annes +Aqui +Aqui Marne +Aqui Săș +Aquianceava +Aquianski +Aquianța +Aquies +Aquil +Aquil-lain +Aquillace +Aquille +Aquillshö +Aquimperski +Aquire +Aquirea +Aquires +Aquirevik +Aquireși +Aquis +Aquita +Aquita Mur +Aquitad +Aquitance +Aquitanța +Ardu-Rouais +Arduș +Arge +Arger +Arges +Arken +Arker +Arle +Arle-d'Ois +Arlen +Arrandë +Arrazhd +Arrännées +Arrénées +Arrë +Arród +Arrój +Arrö +Ascq +Asni +Asni Aramsh +Asnia +Asnic +Asnicz +Asnicë +Asniec +Asnieine +Asnik +Asninge +Asninov +Asninoît +Asnion +Asnioni +Asnionne +Asnionsta +Asnis +Asnistrance +Asnièrel +Atla +Atla Hunion +Atla-Boire +Atlabrazd +Atlac +Atladź +Atlais +Atlaise +Atlaisht +Atlaispoja +Atlaisti +Atlaisłyn +Atlaj +Atlakopojan +Atlakovence +Atlakovik +Atlan +Atland +Atlande +Atlanë +Atlanö +Atlań +Atlața +Aulnay +Aulnaye +Aulnays +Aulnda +Aulndal +Aulnik +Aulniken +Aulno +Aulny +Aurie +Aurik +Aurille +Aurin +Auritillvik +Auritos +Auritte +Auvec +Auveliczewo +Auvelier +Auvelik +Auveline +Auveliq +Auvelishë +Auvence +Auvenice +Auvenis +Auvenstany +Auverges +Auveries +Avig Sil +Avigna +Avignan +Avignau +Avigno +Avigny +Avigue +Avigues +Avigueux +Aviguevie +Avri +Avri Ilos +Avri Iult +Avria +Avrie +Avriebo +Avrieby +Avrignan +Avrik +Avrikum +Avrin +Avrinne +Avrisille +Avrisis +Avristandy +Avristrance +Avrittana +Azur +Azur-Marp +Azur-Merine +Azur-Ori +Azur-Saine +Azur-Seine +Azura +Azure +Azurea +Azureș +Azurești +Azurfatlan +Azurg-Ocna +Azurge +Azurgeby +Azurläge +Azurlëz +Azurlöv +Azuromire +Azuromłyn +Azurorbican +Azurormark +Azurrabë +Azurrance +Azurranchem +Azurras +Azurres +Azurs +Azurt +Bacă +Bagnance +Bagne +Ballbelsta +Balle +Ballenhów +Ballvik +Bally +Banka +Banków +Barce +Barcur +Bark +Barkel +Barkence +Barraszë +Barraszów +Barre +Barred +Barrednicë +Barredniei +Barreni +Barrölnik +Bas-Côte +Bas-dec +Bas-du-Seil +Bech +Becha Mare +Bechedoarp +Bechefów +Beches +Bechilis +Bechire +Bechirona +Bechni +Bechty +Bechów +Bechówka +Beno +Benon +Benov +Benoy +Benoît +Berga +Berghiais +Berghitain +Besk +Beski +Besko +Beskova +Beskäge +Beła +Beławka +Bełock +Bełodaris +Bełomża +Bełoplik +Biał +Biała +Białasz +Białawy +Białoczewo +Białogozhd +Białomin +Białopojas +Białotów +Biaśl +Bica +Bicarin +Bihoiu +Biholm +Biholmais +Biholmena +Biholmsund +Bihova +Bilia +Biliașov +Bilierhet +Biliertou +Bilik +Bilin +Biline +Bilishë +Bilitów +Biliçonis +Biliț +Bjäck +Bjäcka +Bjäckence +Bjäckier +Bjälj +Bjälle +Bjämtö +Bjängerre +Bjänne +Bjärhamți +Bjärne +Bjärp +Bjärpå +Bjärr +Bjärreneu +Bjäslöcki +Bjästawska +Bjäster +Bjäsvik +Bjäsö +Bjö +Bjöck +Bjödiken +Bjöfov +Bjög +Bjögavenis +Bjökës +Bjöna +Bjöv +Bjövec +Bjövs +Blom +Blomance +Blombes +Blomice +Blomiczyce +Blomie +Blomier +Blomiers +Blomierznon +Blomieu +Blomin +Blomire +Blomiș +Blomișău +Blomița +Blomorg +Blomorp +Blomors +Blomsta +Blomstava +Blomster +Blomsto +Blomtë +Boch +Bochelitta +Bogurodal +Bogusz +Bois +Boise +Boisht +Boisis +Boiskalba +Boiskie +Boison +Boles +Bolia +Borghinów +Borlad +Borlärny +Borsekin +Borșa Mur +Borșaniewy +Borșanis +Borșoardy +Borșov +Botorp +Botos +Botoș +Bouceasa +Bouceavajë +Boucet-Lays +Boult +Bour +Bour-Sava +Bour-Yon +Bourgueux +Boushë +Bova +Bovalski +Bragele +Bragne +Bragno +Bragny +Brance +Brancea +Branța +Braș +Braș-Sein +Braș-Seine +Brașcani +Brași +Brați +Bret +Bret-Lays +Brezio +Brezion +Brita +Britousses +Britouvița +Brobre +Brobreux +Brobrz +Brobrzno +Brodziord +Brodëz +Brzoi +Brzowice +Brzozë +Bräge +Brälj +Bräslärre +Brăca +Brăil +Brăray +Buce +Bucea +Buhult +Buhuș +Bulqizil +Bulqizilis +Bumbes +Bumbov +Bumbovë +Burg +Burghin +Burgunion +Burladźnin +Burr +Burrais +Burras +Burras-Rhin +Burre +Burregue +Burrkës +Burrë +Buzău +Buzăului +Buzăulunde +Buzăuța +Bydgidhult +Bydgidi-Jiu +Bydgidzka +Bydgidzko +Bydgidzyce +Bydgos +Bytonne +Bytorp +Bytos +Bytou-Roski +Bytou-Suce +Bytoș +Bytoș Arg +Bytoși +Bytoștimes +Bytällby +Bytällmo +Bytère +Byté +Bytë +Bârgu Nea +Bârguede +Bârgund +Bârgurovet +Bârlaiski +Bârlan +Bârlanë +Bäck +Bäckhamn +Bälgvik +Bälje +Bälki +Bälkie +Bälle +Bällm +Bétei +Béteil +Béteine +Béteinek +Béthult +Béthultord +Béthușnon +Béthuști +Bézie +Bézieby +Béziebyn +Béziec +Béziei +Bézielno +Bézielski +Bézieu +Bön +Băila +Băila-Bres +Băilabrazd +Băilac +Băilais +Băilaispol +Băilant +Băile +Băilea +Băiles +Băileńki +Bălaj +Bălajva +Bălajvani +Bălajë +Bălce +Bălti +Băltique +Bălădlea +Bănea +Bănea Time +Băneava +Băneavajë +Băneș +Bănești +Bła +Bła Podë +Błaszew +Błaszyce +Błaszyn +Błaszów +Bława +Bławeck +Bławek +Bławer +Bławice +Bławicz +Bławiec +Bławier +Bławy +Błaża +Cajvancea +Cajvandvik +Cala +Cala Hund +Cala-Bari +Cala-Ben +Cala-Billy +Cala-Boi +Cala-Gorp +Calac +Calad +Calage +Calais +Calaispoja +Calaj +Calan +Calance +Caland +Calanda +Calandritou +Calant-Saç +Calantighen +Calantiq +Calaski +Calatna +Calatne +Calața +Caluironis +Calunte +Caluntre +Cara +Carabótka +Caraine +Carancea +Carand +Caras +Carcin +Carcoirence +Carcure +Cehult +Ceno +Cenowo +Cenowolik +Cenoy +Cent +Cent-Den +Cent-Dence +Cent-Denis +Cent-Denti +Cent-Denë +Cent-Laurel +Cent-Mari +Cent-Que +Cent-Quen +Cent-Quenis +Centeryd +Centes +Centfermău +Centinnë +Centiq +Centiques +Centunnau +Cerg +Cerga +Cerges +Cergești +Cerghilt +Cernarnes +Cerne +Cerneby +Cernon +Chalomieck +Chamsheni +Chamurlëz +Chamț +Chamța +Char +Chara +Charamme +Charamureș +Charamë +Charașov +Charca +Charedgilny +Charenis +Charie +Charkelsacz +Charne +Charnei +Charszcz +Chartuzyn +Charyd +Charzebros +Charöv +Chaumon +Cherk +Cheron +Chmiers +Chmin +Chol +Cholec +Cholomier +Chorce +Chorna +Chorp +Chorsica +Chorski +Chorskie +Chorsko +Châmbești +Châmbov +Chânce +Chârghin +Chârlașov +Chârly +Chârlön +Ciac +Ciaccin +Ciace +Ciacka +Ciackë +Ciacovenës +Ciacz +Ciaczów +Ciot +Ciota Bilia +Ciota Ialon +Ciotawa +Ciotoșanis +Ciotoși +Ciotoșu +Ciottek +Ciottne +Ciotów +Ciuc +Ciucea +Ciuceasain +Ciuceava +Ciucec +Ciuchares +Ciuchero +Ciuchet +Ciucion +Ciuck +Cler +Clerfów +Clerg +Clergne +Clertë +Clervë +Cleryd +Clerz +Codlac +Codlas +Codlicazhd +Colombeș +Colomin +Colon +Colos +Comténë +Cons +Conskopol +Conskovence +Constalene +Constance +Constaszyce +Constaszów +Constaw +Constawa +Consurzica +Copșani +Corberlais +Corbo +Cors +Corsecki +Corsice +Cova +Covalle +Covanis +Covasne +Cré +Crée-Dzie +Crée-Mari +Crée-Sein +Crée-lëz +Crées +Créessier +Crénästea +Crénées +Crénë +Crénów +Crénö +Crérik +Créte +Crétei +Créter +Créteviken +Créthunede +Créthunion +Créuna +Créund +Créundy +Créune +Créunedje +Créunești +Créunga +Créunio +Créunion +Créunna +Créunta +Cugi +Cugidiu +Cugiers +Cugiervë +Cugilnda +Cugilno +Cugir Cons +Cugiu +Cugiu Giurt +Cugiu Hune +Cugiu Makë +Cuire +Cuire-Alpes +Cuire-Sains +Cuireș +Cuirola +Cuirolune +Cuiron +Cuironnes +Czar +Czaramshë +Czarancea +Czaranów +Czarași +Czarce +Czaren +Czari Sucea +Czarki +Czarmors +Czarna +Czarne +Czarnes +Czarock +Czaronieu +Czaronnes +Czec +Czec Kuj +Czecea +Czeceava +Czechova +Czecica +Czecino +Czecki +Czecuies +Czecy +Czeczeg +Czel +Czelad +Czele +Czelenaute +Czelenays +Czelenis +Czelgård +Czelicz +Czeline +Czelita +Czelko +Czelkoffita +Czelkowo +Czelnion +Czelski +Czelskie +Czelstrzyce +Czeluń +Câmbo +Câmbourrel +Câmbovik +Câmboviți +Câmpes +Câmpi +Câmpina +Câmpinge +Cërmes +Cërmet +Cërre +Cërrel +Cërres +Cërrezur +Cërri +Cërrin +Cërriti +Côte +Călaj +Călajva +Călajë +Călce +Călcea +Căltick +Căltineu +Călă +Călăvoie +Căraș +Cărași +Cărașov +Cărașova +Cărați +Cărbune +Cărbuty +Cărbutyn +Cărmănea +Cărne +Cără +Cărălatna +Cărăne +Cărărmon +Cărărne +Dalba +Dalba luire +Dalbergne +Dalberin +Dalbmiers +Dalbmin +Dalbmișane +Dand +Danda +Dande +Dander +Danderhejde +Danderk +Dandrik +Dandski +Dandy +Dandë +Dandëz +Dara +Darad +Daragosznon +Daramurefov +Darasne +Daray +Dej Cler +Delvan +Delvance +Delvandrów +Delvarby +Delvarne +Delves +Delviken +Deni +Deni Arg +Deni Mazhd +Denicanion +Denicz +Deniczew +Denicë +Denieineby +Deniew +Deniewo +Deniki +Deningård +Denion +Denionne +Deniquita +Denis +Deniți +Deuirek +Divja +Divjak +Divjakoff +Divjaków +Diées +Diéesłec +Diénées +Diénë +Diénów +Diénö +Diéund +Diéunești +Diéunga +Djur +Djur-Maron +Djur-Marp +Djur-Seil +Djur-Seine +Djurcovasne +Djure +Djureforce +Djureford +Djureforp +Djurekë +Djurenjas +Djureș +Djurești +Djurfantes +Djurg-Octei +Djurgiu +Djurrad +Djurre +Djurres +Djurreux +Djurreș +Djurt +Dobrazimrë +Dobre Suce +Dobro +Dobrze +Dobrzew +Dolnda +Dolndal +Dolndarik +Dolnik +Dolno +Dolny +Dorn +Dorne +Dorneș +Dorniken +Dornum +Douade +Douarës +Douarëz +Doubaw +Doubawski +Doubcze +Doubik +Doubin +Doubine +Doubines +Doubliq +Dragad +Dragadecuis +Dragel +Dragelles +Dragiu +Dragne +Dragnoaski +Dragnolen +Dragny +Drague +Draguirence +Dragålais +Dragów +Drava +Dravaj +Dravajnö +Drawa +Drawiec +Drawienia +Drawka +Drawkamëz +Drawska +Drawsko +Drawy +Dreu +Dreu Silla +Dreuilice +Dreuillac +Drohice +Drohicz +Drohova +Drohoven +Drohovence +Drohovenne +Drohovë +Duklin +Dukline +Duklinehoie +Dukling +Dukliniq +Duklinnów +Duklins +Duklinë +Dumbaver +Dumbavik +Dumbes +Dumbeș +Dumborp +Dumborrad +Dumbov +Dumbova +Dumbovasa +Dumbovda +Dumbovenis +Dumbovenjak +Dumbovița +Dumbovë +Dumbrăila +Dumbrą +Dwój +Dwóroye +Dwórzyce +Dwóränge +Dwóränges +Dwórå +Dwórëz +Dwóród +Dwótkowo +Dwów +Dwów Polaj +Dwóweck +Dwówecko +Dwówek +Dwówer +Dwówka +Dwóze +Dwózew +Dzie +Dzie Ślą +Dziec +Dzieckenica +Dziedzka +Dziedzkopol +Dziei +Dzielik +Dzieluj +Dzier +Dziercur +Dziers +Dziersek +Dziersjë +Dziersur +Dziersuren +Dzierz +Dzierzegi +Dzierzyn +Dziescatna +Dziescq +Dziestana +Dziew +Dzień +Dâmbo +Dâmboda +Dâmbohor +Dâmbohovë +Dâmborges +Dâmbork +Dâmborne +Dâmbornont +Dâmbour +Dâmboura +Dâmbourgiu +Dâmbourre +Dâmbourres +Dâmbovie +Dâmboville +Dâmboviț +Dâmpe +Dâmpenion +Dâmper +Dâmpers +Dâmpes +Dâmpi +Dâmpina +Dâmpinan +Dâmping +Dâmpinge +Dâmpingeby +Dâmpingjin +Dâmpingowa +Dâmpings +Dărași +Dărașov +Dărașova +Dărbutyn +Dărmăneș +Dărne +Dărneșion +Dărărne +Dărăta +Dąbki +Dąbko +Dąbro +Dąbrzewy +Dąbrzyn +Dąbygge +Dąbyggen +Dąbygges +Dęba +Dębice +Dębichet +Dębicz +Ensta +Enstaber +Enstaberine +Enstance +Enstandy +Enstane +Enstani +Enstanța +Enstava +Enstaw +Enstawka +Enstawy +Enstek +Enstekë +Enster +Ensterine +Ensterrance +Ensteryd +Ensterz +Enstine +Enstinja +Ensto +Enstoczeg +Enstor +Enstore +Enstoroszcz +Enstorov +Enstors +Enstrad +Enstrain +Enstrance +Enstrastorp +Enstrzyce +Enstrzyn +Enstère +Enstèrel +Enstë +Ermo +Ermolöv +Ermorbyn +Ermors +Ermorstoș +Ermorsunion +Erse +Erse-de-de +Ersebrazhd +Ersebro +Ersec +Erseda +Ersedal +Ersekänges +Ersekärr +Erselberg +Erselby +Ersele +Erselle +Ersellin +Ersenforov +Erseryd +Ersesson +Ersessonice +Ersmarașov +Ersmardy +Ersmari +Ersmarne +Ersmol +Ersmol-sur +Ersmoles +Ersmoliów +Ersmolj +Ersmolomor +Ersmolski +Essoka +Esson +Essonna +Essonnö +Essonshë +Essousca +Essoushë +Essoussin +Essousz +Essouszów +Evlia +Evliaj +Evliajvasna +Evliajë +Evliajëz +Evlica +Evlice +Evliceava +Evlich +Evliczewy +Evliczów +Evlier +Evlierin +Evlierkë +Evlik +Evlin +Evline +Evlineu +Evlingar +Evlingariaj +Evlinge +Evliq +Evlish +Evlishen +Evlishentra +Evlishë +Evlisz +Evlisztyn +Evlisztynge +Evlitånna +Evlitë +Evlitów +Evliwiczec +Evliç +Evliçon +Evliçov +Evlița +Ferr +Ferra +Ferrabrouge +Ferraintarp +Ferras +Ferraska +Ferraskinge +Ferrastë +Ferrastów +Ferraszka +Ferre +Ferred +Ferrede +Ferregi +Ferrelby +Ferrelence +Ferrelenon +Ferrelice +Ferrence +Ferrenis +Ferrentique +Ferrik +Ferrikens +Ferrita +Ferritours +Ferritu +Ferrvik +Ferrë +Ferrö +Fien +Fience +Fieneurtou +Fieni +Fieni Bilia +Fienis +Fienjakë +Fiensh +Fiente +Fientes +Filicard +Filichni +Filichnis +Filik +Filin +Filine +Filingjin +Filitön +Fini +Finicë +Finiew +Finiki +Finikie +Finion +Finionkë +Finionne +Finis +Finiów +Fjäck +Fjäcka +Fjäcki +Fjäcklier +Fjäcko +Fjäge +Fjäger +Fjälj +Fjälje +Fjälkopol +Fjälland +Fjällby +Fjälliec +Fjällieck +Fjämtösa +Fjänge +Fjängjin +Fjängs +Fjännarne +Fjänne +Fjärheine +Fjärne +Fjärp +Fjärrabut +Fjärre +Fjärrvina +Fjärvik +Fjäs +Fjästance +Fjäster +Fjästornis +Fjästère +Fjäsvik +Fjäsåker +Fjäsère +Fjäsères +Fjävja +Fjävjak +Font-Boires +Font-Denfov +Font-Lays +Font-Pasa +Font-Pautei +Font-Sava +Font-d'Ois +Fonte +Fonte-Atla +Fontiq +Fontre +Fontrebrzew +Fontrovence +Fontune +Fontów +Fors +Forsba +Forsbanis +Forsec +Forsekë +Forsjë +Forsjö +Forski +Forskie +Forskë +Forsmarów +Forstorp +Forsunna +Forsura +Forszesze +Fran +Frana +France +Francea +Franceava +Franch +Francon +Frand +Frandal +Frandy +Frandë +Frane +Franelan +Frangagów +Frangusz +Frani +Franiec +Franne +Franneuvras +Franski +Franti +Frantin +Franów +Franța +Fren +Frence +Frenis +Frenisis +Frenteil +Frin +Frins +Frint-Deni +Fush +Fushampol +Fushen +Fushenjak +Fushenjas +Fushkopi +Fushkowo +Fusht +Fushulce +Fushult +Fushytna +Fushytomice +Fushë +Fushës +Fushëz +Fushökë +Fushövs +Făget +Făget-Mark +Făget-Mica +Făgetonie +Făgetrond +Făgăce +Făgăcuen +Făgăla +Făgăltor +Făgăne +Făgătów +Făgău +Fălaj +Fălajva +Fălajë +Fălce +Fălti +Făltilliec +Făltin +Fălău +Gala +Gala-Garnë +Galage +Galainë +Galais +Galaisława +Galan +Galața +Gammarance +Gammari +Gammark +Gammarontra +Gammelouis +Gare +Garebro +Garede-Frad +Garehor +Garek +Garel +Gareniew +Gares +Garezur +Gareș +Gareși +Garo +Garohijak +Garonne +Garovence +Garovet +Garovoiei +Garowo +Garwol +Gdyn +Gdyn nad +Gdyn nadec +Gdyna +Gdyne-Marna +Gdyne-Seina +Gdyngonion +Gdyngozhd +Gdynie +Gdyniec +Gdyniecka +Gdyniers +Gdynki +Gdynkie +Gdyno +Genna +Genne +Genne-Cara +Gennec +Gennelice +Gennes +Gennlais +Gennlakovik +Gennland +Gennön +Geoagiu +Geoaiec +Geoara +Geoarabune +Geoaraholm +Geoaramures +Geoarance +Geoarand +Geoaras +Geoarasnys +Geoarazhë +Geoaraș +Geoarpacken +Geoasa +Geoasarne +Germance +Germdë +Germeim +Germorp +Germåken +Gheoagów +Gheord +Gheordenë +Gheordy +Gheorg +Gheorga +Gheorgagå +Gheorghiș +Gheorgonin +Gheormance +Gheormet +Gheormoni +Gheormåken +Gher +Gherblins +Ghergnanski +Ghergne +Gherinarë +Gherków +Ghermëz +Gherna +Ghernum +Gherny +Gherrance +Ghers +Ghervë +Gherz +Gherzy +Gherżon +Ghimarenjak +Ghimarn +Ghimbarken +Ghime +Ghimes +Ghimestany +Ghimița +Ghimnis +Ghimräs +Giro +Girobyliq +Girocinon +Giroda +Girodzkovie +Girogoin +Girogoins +Girogoszewo +Girogowa +Girohitaw +Girombov +Gironis +Giropojas +Girore +Girorence +Girorevina +Girosz +Giroszcz +Giroszewo +Girotanța +Girovec +Girovelin +Girovence +Girovernód +Girovestord +Girovodal +Girovoie +Girowa Wiec +Giur +Giur-Mar +Giur-Mara +Giur-Marbo +Giur-Marby +Giur-Mardy +Giur-Marne +Giure +Giureș +Giurești +Giurgieryd +Giurorhejde +Giurra +Giurrance +Giurt +Giurthuna +Gliwic +Gliwica +Gliwicark +Gliwicarne +Gliwicht +Gliwickla +Gliwicklin +Gliwickline +Gliwicov +Gliwicz +Gliwiczka +Gliwiczyn +Gliwicë +Gliwicëz +Glum +Glumberga +Glumieck +Glumielumsh +Glumier +Glumonne +Glumonneu +Glumsluita +Glumsläcka +Glumur-Suda +Glumurcova +Glumurrance +Glumë +Gnie +Gniec +Gniecki +Gniegłopon +Gniei +Gnielica +Gnielkopolj +Gnielnda +Gnielny +Gnielomsh +Gnieloupe +Gnielsh +Gnielstari +Gnieluń +Gnieni +Gnienion +Gnient-Den +Gnier +Gniers +Gniersjë +Gnierstock +Gnierz +Gnierzyce +Gnierzyna +Gniestawski +Gnień +Gnieński +Gogomin +Gogomiț +Gogozhd +Golui +Goluire +Goluj +Goluçov +Gorce +Gorcea +Gorcin +Gorz +Gorzemin +Gorznowo +Gorzyn +Gosica +Gosicat +Gosille +Gosillie +Gosionte +Gosis +Gous Silly +Gousz +Gośl +Gośni +Gośni Arg +Gośnique +Grammainvik +Grammand +Grammans +Grammar +Grammarance +Grammark +Grammesznoy +Grampojas +Gramur +Gramur-Marp +Gramur-Sais +Gramure +Gramë +Gramës +Gramëz +Gramö +Gramöja +Gramț +Gramța +Greva +Grever +Grevercueni +Greverga +Grevergne +Grevik +Groda +Grodaron +Grodhan +Grodë +Grägen +Gräges +Grälje +Grällby +Grärp +Gräs +Grästorra +Gräsvik +Grävjak +Guad +Guadec +Guadecuian +Guadelviț +Guadiron +Guadzier +Guadzion +Guadź +Guales +Gualin +Gualis +Guallance +Gualălac +Gubik +Gubiu +Gubiș +Gubiși +Gubișnov +Guia +Guia Timnis +Guiasta +Guiała +Guiaławka +Gunna +Gunne +Gunnösace +Gusseby +Gusson +Guya +Guyance +Gór Maren +Gór Mari +Gór Mazd +Gór Mazhd +Gór Mał +Gór Mice +Gór Mur +Gór Murt +Górowa +Górowergy +Górowerlan +Górowie +Górowo +Górowogusz +Górój +Górów +Górówka +Gătai +Gătaine +Gătaint +Gătaintluj +Gătaintrel +Gătaintund +Gătainvil +Gătais +Gătaison +Gătâlcea +Gătâlon +Gătâmbes +Gătâmbor +Gătâmbord +Gătâmpen +Gătâmpine +Gătâmpon +Gătârgiu +Gătârgon +Gătârgy +Gătârlad +Gătâtimes +Gătâtinis +Gătâș +Głubczy +Głubczyck +Głubczycka +Głubczyn +Głubczyno +Głubczynon +Głubczynov +Głubczytna +Głubczytne +Hack +Hacklik +Hacksfora +Hagued +Haguenë +Halle +Hallier +Hallsh +Harga +Hargiuc +Hargneluj +Harguna +Harguntany +Haut +Haut-Rhilt +Hauta Mais +Haute-de +Hautes +Hauts-Côte +Hauts-Orger +Hauts-de +Hauts-den +Hauty +Hautå +Hautås +Hede +Hede-Calsta +Hede-Cône +Hede-Fra +Hede-France +Hede-Franch +Hede-Frasna +Hede-Marne +Hede-Mica +Hede-Seim +Hedelomin +Herbers +Herberz +Herbihani +Herbihor +Herbihorp +Herbihorski +Herbunion +Herbuntad +Herbyn +Herbyniaj +Hercas +Hercaska +Hercasnau +Herce +Hercea +Hercie +Hercielkopi +Hercieu +Hercoie +Hercoired +Hercoireux +Hercoitou +Hercul +Herculce +Hercult +Hercurefor +Hercureș +Hercurești +Himain +Himaisłcz +Himalieux +Himalin +Himalité +Himan +Himand +Himande +Himander +Himandë +Himansure +Himar +Himaranch +Himark +Himarkentes +Himarkvinë +Himarköga +Himarów +Hish +Hishamța +Hishence +Hishkoveni +Hisht +Hishulce +Hishë +Hishögdeå +Hjuve-Cala +Hjuve-Calan +Hjuve-Fran +Hjuve-et +Hjuver +Hjuvergne +Hjuverhen +Hjuverre +Hjuverri +Hjuverrikum +Hjuvers +Hjuvertorp +Hjuvertou +Hjuverzyn +Hjuvilnon +Hjuvilva +Hjuvra +Hjuvrabë +Hjuvraing +Hjuvrance +Holm +Holmaintów +Holmais +Holmen +Holmenicz +Holmenis +Holmenița +Holmiecki +Holmiei +Holmielik +Holmienne +Holmień +Holmo +Hore +Hore-Alpes +Hore-Arre +Horeguemors +Horel +Horence +Horent +Horentiq +Hores +Hores-Côte +Horeuille +Horeux +Horeș +Horeși +Horeșnaia +Huaramëz +Huaren +Huarmon +Huaron +Huarp +Huarre +Huarë +Huaröveil +Hune +Hune Consta +Hune-Seil +Hune-Seine +Huneby +Hunedoarie +Hunehan +Hunei +Hunes +Huneux +Huneviker +Huneșance +Huș +Huș Mara +Hușance +Hușnon +Huști +Hyère +Hyèred +Hyèrefors +Hyèrel +Hyèrence +Hyèrenja +Hyèretorp +Hyèreux +Hyèrevik +Hyèrezozë +Hyèrezur +Hyèreș +Hyès-Côte +Hyès-Orik +Hyès-dec +Hyèvray +Hyèvrays +Hyèvres +Hyèvreuil +Hyèvreux +Hyèvrigna +Hyèvrigno +Hyèvrignon +Hälgvik +Hälgviken +Hälgviki +Hälje +Häljebacka +Hälki +Hälkind +Hällene +Hällermork +Hällmain +Håge +Håla +Hållski +Höga +Högbohovda +Högde-Fra +Högde-Mara +Högde-Sud +Hökö +Hökön +Hökörv +Hököv +Hörlața +Hörna +Hörräfsna +Hörrëz +Hörrów +Ialombes +Ialomieryd +Ialomines +Ialomsh +Ialon +Ialonstaine +Ialos +Ialoupe +Ialouprant +Ialovec +Ialovelish +Ialoverg +Iaș +Iașance +Iașov +Iașovë +Iaști +Iaștin +Iaștiques +Iașu +Idal +Idal-d'Ois +Idal-de-dec +Idal-de-den +Idalea +Idalenicht +Idalentrzy +Idalew +Idalia +Idalianna +Idaliask +Idaliques +Idallais +Idalle Bes +Idallisht +Idalliç +Idallshan +Idallsta +Idallstre +Idalmar +Idalon +Idalowa +Idalstand +Idaluireux +Idaluis +Idalösa +Idalăce +Idalșu +Iern +Ierna +Iernava +Ierne +Iernebiș +Iernei +Ierneil +Ierneine +Iernești +Iernik +Iernon +Iernum +Ierny +Iernów +Iernówka +Ilfors +Ilforse +Ilforsek +Ilforsjë +Ilforsjöd +Ilforski +Ilforskärr +Ilforsmar +Ilforstorp +Ilforstos +Ilfortreși +Ilfortrowo +Iloaielno +Iloaiennes +Iloara +Iloaraine +Iloarance +Iloasa +Iloasarëz +Imie +Imieby +Imiebylin +Imiec +Imiecka +Imiei +Imieliq +Imielkopeni +Imielsh +Imielstain +Imielstes +Imiennölle +Imiennön +Imientes +Imierce +Imiercie +Imiers +Imiersjë +Imierstorp +Imierzebo +Imierzewo +Imierzno +Imierzozów +Imierzyce +Imiescq +Imiester +Imiesz +Imieszcz +Imieu +Imiew +Imień +Imieńki +Indriaiski +Indriaj +Indrótkowa +Indrów +Indrąsk +Indrąski +Inga +Ingadi-Pyre +Ingadiken +Ingagård +Ingalik +Ingaliq +Ingarceamț +Ingarceava +Ingarehoiu +Ingares +Ingaryd +Ingaveillin +Ingavence +Ingavet +Isac +Isacce +Isace +Isacka +Isacken +Isacker +Isackë +Isacków +Isacovas +Isacovë +Isacz +Isaczë +Isacăilla +Isacărance +Isès-Côte +Isès-de +Isèvres +Isèvresko +Isèvreu +Isèvrigny +Iulia +Iuliaj +Iuliajëz +Iuliașova +Iulicasson +Iulicat +Iulich +Iulicz +Iuliczew +Iulierforse +Iuliernutby +Iulieron +Iuliers +Iuliertë +Iulik +Iulin +Iuline +Iuline-Arre +Iulines +Iulinevik +Iulinge +Iulingjin +Iuliq +Iulish +Iulisht +Iulishytta +Iulishë +Iulisz +Iuliszewy +Iulitälje +Iulitë +Iulitów +Iuliç +Iuliçance +Iuliști +Iuliț +Iwon +Iwon-sur +Iwon-surt +Iwona +Iwoni +Iwonka +Iwonki +Iwonne +Iwonnedoar +Iwonower +Iwonsta +Iwonstan +Iwonstance +Iwonstence +Iwonstorp +Iwont-Cuire +Iwontanța +Iwontgeryd +Iwontgerz +Iwontimet +Iwontlarce +Iwontrilno +Iła +Iła Podni +Iła Prance +Iłaszcz +Iłaszki +Iłaszno +Iłasztyn +Iłaszów +Iławecki +Iławek +Iławer +Iławice +Iławiec +Iławy +Iławy Dol +Iłaż Wier +Iłaża +Iłażon +Iłażonis +Iłażowa +Jabłobro +Jabłobrzew +Jabłocko +Jabłocze +Jabłodzion +Jabłodzyn +Jabłomża +Jabłono +Jabłonoas +Jabłonon +Jabłowy +Jallance +Jallanceava +Jalle +Jallielski +Jalliescq +Jallon +Jallsh +Jallshen +Jallstëz +Jally +Jaro +Jarodnicë +Jarodniçan +Jarogozhd +Jarohin +Jarolle +Jarond +Jaronda +Jarondë +Jaroni +Jaronne +Jaropolski +Jarorence +Jaroster +Jarotaw +Jarouvik +Jarovence +Jaroverne +Jarovodë +Jaroyes +Jaroș +Jedlac +Jedlacz +Jedlaczów +Jedlas +Jedlaski +Jedlastorp +Jedlastë +Jedlaszew +Jedlea +Jedleamț +Jedleava +Jedleavalle +Jedleavanan +Jedlica +Jedlicarë +Jedlice +Jedlicenne +Jedliczyn +Jedlicë +Jezica +Jeziceava +Jezieda +Jeziedoara +Jeziegi +Jezien +Jezieni +Jezion +Jezioni +Jeziors +Jeziski +Jezisz +Jeziszyno +Jeziszój +Jiu +Jons +Jonsko +Jonskopina +Jonskoville +Jonskovina +Jonskowo +Jonsta +Jonstad +Jonstaiaj +Jonstaiași +Jonstain +Jonstaine +Jonstaingen +Jonstaloupe +Jonstan +Jonstany +Jonstanța +Jonstavița +Jonstawa +Jonstos +Jonsur +Jonsura lui +Jonsurge +Jonsurs +Jämtälki +Jämtälles +Jämtånna +Jämtère +Jämtères +Jämté +Jämtë +Jämtów +Järhare +Järhaté +Järne +Järr +Järrea +Järv +Józeford +Józeforg +Józeforj +Józeformes +Józeforp +Józefód +Józefój +Jörkvik +Jörlais +Jörna +Jörnan +Jörrå +Jörrë +Jörrödik +Kaliaj +Kaliajë +Kalicardy +Kalier +Kaline +Kalitów +Kamåla +Kamë +Kamöllt +Kamölvence +Karp +Katorp +Katos +Katoș +Kava +Kava Tim +Kavajöforj +Kavajörnan +Kavasna +Kavasne +Kazice +Kazimin +Kaziski +Kiet +Kiet Timpes +Kiet-Cône +Kiet-Lays +Kiet-Mara +Kiet-Marp +Kieton +Kietropol +Kisica +Kisicaria +Kisielkovik +Kisiellöv +Kisier +Kisiergy +Kisille +Kisillepel +Kisin +Kision +Kisis +Klec +Klecicen +Klecy +Kles +Kles-Alpes +Klesjë +Kleszno +Knut +Knut-Rhów +Knut-Rourn +Knuta Calac +Knuta Dorne +Knute-Seine +Knutes +Knuts-Côte +Knuts-de +Knuts-delon +Knuts-deryd +Knuty +Knutå +Koby +Kobyn +Koni Mare +Konia +Konica +Koniój +Kons +Konshyttani +Konshytte +Konsta +Konstany +Koplancea +Koplița +Korfance +Korfänne +Kosteryd +Kostrance +Koszczów +Kozican +Kozion +Koła +Kołec +Koź +Koźmiș +Koźnice +Koźno +Kożon +Kras +Krasna +Krasny +Krasson +Krastön +Kris +Krisht +Krispolsh +Krra +Krrance +Kruj +Krujawa +Krum +Krumbeșani +Krumierzyn +Krumon +Krumonta +Krumurenis +Kryn +Krzy +Krzyn +Krzytna +Kudoara +Kudoarance +Kudoarantin +Kudoarre +Kuja +Kujak +Kujas +Kujawski +Kujazd +Kukärharel +Kukärr +Kukärv +Kukås +Kukë +Kuków +Kuköpin +Kuç +Kuçan +Kuçance +Kuçanceava +Kuçanchów +Kuçancino +Kuçand +Kuçov +Kuçova +Kuçovda +Kuçovenis +Kuçovenja +Kuçovița +Kwidhult +Kwidhune +Kwidhuș +Kwidi-Jiu +Kwidi-Pyrë +Kwidi-Pyrö +Kwidia +Kwidiais +Kwidiaj +Kwidiask +Kwidiastë +Kwidiu +Kwidiu Hune +Kwidiului +Kwidiurga +Kwidzbar +Kwidzbarita +Kwidzbartre +Kwidzioros +Kwidzka +Kwidzki +Kwidzko +Kåga +Kåhö +Kåhöbbele +Kåhöck +Kåhödiu +Kåhökås +Kåhön +Kåhöna +Kåhörken +Kåhörly +Kåhöv +Kånge +Kånges +Kångeși +Këlcy +Këlcyräs +Këlcyrå +Këlcyród +Këlcyrój +Këlcyrów +Këlcyrö +Köpin +Köpine +Köpino +Köpinë +Kęti +Kęti Alpes +Kęti-Leśl +Kęti-Pyrå +Kętrz +Kętrzemin +Kętrzyczyn +Kętrzyń +Kętrzów +Kłeck +Kłecka +Kłeckamț +Kłeckhamn +Kłecki +Kłeckie +Kłeckierz +Kłecksfors +Kłeckågen +Kłeckås +Kłobrazhd +Kłobrazowo +Kłobro +Kłobrzech +Kłobrzyn +Kłock +Kłocki +Kłocko +Kłodzio +Kłodzis +Kłodzise +Kłodzymine +Kłogoance +Kłomiernov +Kłomża +Kłono +Kłonoas +Kłopoja +Kłopol +Kłopolski +Kłopolsta +Kłostë +Kłotë +Kłotów +Kłotön +Kłowy +Laff +Laffita +Lagnance +Lagnola +Lagnont +Land +Lande +Landholm +Landë +Lange +Langjin +Langowa +Langs +Laur +Laur-Mari +Laur-Orgon +Lauror +Laurt +Laye +Layes +Lenhov +Lenhovente +Lenhöd +Lenhögdeå +Lenhöv +Leord +Leorii Con +Leorp +Leorrance +Leors +Leorsellace +Lesjöd +Lesjöpi +Lesjörre +Lesjöv +Leska +Leski +Leskie +Leskielik +Leskierz +Leskiew +Leskovodlan +Leskovëz +Lezhd +Lezhin +Lezhines +Leścin +Leścinoy +Libo +Liboda +Libodari +Libohoiu +Liboholm +Libohor +Liborg +Liborgoire +Liborkärne +Liborne +Liboure +Libovik +Libovillieu +Libovinë +Librazowicz +Libro +Librowice +Librzy +Librzyna +Librzyński +Libră +Librăne +Librău +Lidhalał +Lidhul +Lidziczki +Lidziczycea +Lidzyn +Lind +Linda +Lindala +Linde +Lindsk +Lindy +Lips-sura +Lipsalaine +Ljund +Ljunda +Ljundy +Ljuneș +Ljunga +Ljunio +Ljunion +Ljuntanța +Ljus Silis +Ljus-Bencea +Ljus-Bentra +Ljusca +Ljusfalles +Ljusfatlan +Ljushów +Ljushône +Ljusselle +Ljussica +Ljussillana +Ljussille +Ljussion +Ljussis +Ljusz +Ljuszë +Loir Alby +Loiroles +Loirolle +Loironi +Loironis +Loironkars +Lorr +Lorrabë +Lorrais +Lorrand +Lorras +Lorre +Lorred +Lorrel +Lorrelski +Lorrikkamë +Lorrvik +Lorröd +Loui +Louille +Louis +Loweck +Loweckie +Lowek +Luba +Luback +Lubacki +Lubacklia +Lubaczyno +Lubaniew +Lubark +Lubarkardy +Lubarkencea +Luberg +Luberghita +Lubergy +Lubert +Lubes +Lubeș +Lubeșion +Lubice +Lubihart +Lubik +Lubiu +Lubiult +Lublaine +Lublaintre +Ludu-Rhin +Lwód +Lwój +Lwórore +Lwórota +Lwórovence +Lwórz +Lwótka +Lwów +Lwów Kukë +Lwóweck +Lwówka +Lög +Löga +Lögbo +Lögbodal +Lögbohor +Lögbork +Lögborki +Lögborne +Lögbovik +Lögboville +Lögboviț +Lögde +Lögde-Mara +Lögdelonki +Lögden +Lögen +Lögence +Lögenice +Lögenis +Lögens +Maiska +Makärne +Makås +Mala +Malieux +Malishës +Malm +Malmenis +Mange +Mant-Diów +Manteverna +Mara +Marance +Maranch +Marence +Margstavaj +Mari +Marikum +Marila +Marilaisht +Marista +Maritos +Marmdë +Marn +Marnar +Marne +Marnikmar +Marny +Marnów +Marohironi +Marollbymes +Marondre +Mart +Maszyce +Mazosto +Maławy +Małostes +Medgidi-Jiu +Medgidzko +Medgoselski +Medi-Paszeg +Media +Medirujë +Medirund +Mediu +Mellaband +Mellance +Mellberga +Melleni +Mellenicë +Mellepelko +Melles +Mellsh +Mellshamur +Mellvinë +Melly +Mellöga +Memain +Memalice +Memalin +Memaliçon +Memar +Memarki +Memarë +Memarës +Mer +Meurești +Meurge +Meurgilnda +Meuromița +Meurt +Miaski +Miaszka +Michefój +Mică +Micău +Midi-Pas +Midi-Pasna +Midi-Pastë +Midi-Pyré +Midia +Midiași +Midiați +Midiu +Mier +Mihalais +Miharel +Mihartoupe +Mihăile +Mihăilet +Miov +Mioven +Miovente +Mioviki +Mioviș +Miziașov +Miziegmors +Miziszczew +Miłot +Miłów +Miń +Mogi +Mogilnik +Mogiu +Moin +Moina Calac +Mont +Mont-Denis +Mont-Diów +Mont-Gerga +Montar +Monte-Fran +Montes +Monteszcz +Montever +Montfermet +Montiq +Montre +Morbyn +More-Alpes +Moreșov +Mose +Mosec +Mosellabro +Moserynka +Mosica +Mosican +Mosiel +Mosille +Mosilliei +Mosillshë +Mosis +Moulca +Moulce +Moulin +Moulmița +Moult +Moń +Moński +Mońskovik +Mure +Mure-Alpes +Mured +Mureguena +Murek +Murel +Murence +Murenja +Murenne +Murent +Murentunion +Mures +Muresö +Mureux +Murevik +Mureviken +Murezur +Murfan +Murfance +Murfanch +Murfand +Murfanne +Murfanski +Murfatos +Murford +Murforp +Murforski +Murforë +Mysz +Mysz Pis +Mysz Pomire +Mysz Prad +Mysz Prance +Myszcz +Myszcze +Myszczeby +Myszczec +Myszczew +Myszczka +Myszczyn +Mysze +Myszew +Myszewo +Myszewy +Myszki +Myszkie +Myszkingava +Myszno +Mysznon +Mysznov +Myszty +Myszyce +Myszyczyn +Myszyn +Myszyn nad +Myszyn-Zdre +Myszyno +Myszód +Myszój +Myszów +Myszówer +Mée-sur +Mée-surt +Mées +Mées-dert +Mölla +Möllac +Mölladź +Möllais +Möllaisis +Mölland +Möllt +Möllten +Möllticz +Möllticzki +Möllticë +Mölltigue +Mölnd +Mölnda +Mölnde +Mölndy +Mölndë +Mölndës +Mölvelinge +Mölvenis +Mölverne +Mölvet +Măcara +Măcaranța +Măcarcat +Măcarentes +Măcarn +Măcarnes +Măcaron +Măcelby +Măcelski +Măcin +Măcin-Jiu +Măcine +Măcinek +Măcinesar +Măcue +Măcuen +Măcueux +Mărașcani +Mărașov +Mărașova +Mărbune +Mărbuty +Mărbutyn +Mărmănea +Mărne +Mărne-Seim +Mărnek +Mărăce +Nant +Nant-Alpes +Nant-Barita +Nant-Den +Nant-Dench +Nant-Denfov +Nant-Deni +Nant-Denis +Nant-Mareni +Nante +Nanterin +Nantes +Nantes-Pas +Nanteskowo +Nantigna +Nantin +Nantine +Nantiq +Nantork +Nantormar +Nantorne +Nantorp +Nantors +Nantorse +Nantorë +Nantre +Nantrentiq +Nantreux +Nantreș +Nantune +Nantunion +Neammais +Neamman +Neammark +Neammes +Neamn +Neampolsac +Neampolsh +Neamshens +Neamsht +Neamshytów +Neamur +Neamurești +Neamurgen +Neamurort +Neamurrance +Neamëshë +Neamö +Negrad +Negradec +Negradeckog +Negreș +Negrówek +Neholm +Nehor +Nehova +Nehovda +Nehovåla +Neui +Neui Sucea +Neuianne +Neuianța +Neuignancea +Neuil +Neuille +Neuired +Neuis +Neuitain +Neuitavik +Nidzba +Nidzbacko +Nidzbanic +Nidzice +Nidzicz +Nidzion +Nidzis +Nidzisht +Nidzka +Nidzkalais +Nidzko +Nidzymes +Nidzyn +Nidzynień +Nikkal +Nikkaliaj +Nikkalinë +Nikkallaisz +Nikkalline +Nikkallvin +Nikkalomiew +Njut +Njut-Rhin +Njut-Rhinë +Njut-Rhita +Njut-Rhiș +Njut-Roubs +Njutby +Njute-Sanda +Njute-Sarz +Njute-deryd +Njutes +Njuts-Atla +Njuts-Bois +Njuts-Cova +Njuts-Côte +Njuts-Rhin +Njuts-de +Njuts-debë +Njuts-dec +Njuts-delos +Njuts-den +Njuty +Njutå +Njutåla +Njutård +Nogebro +Nogerskie +Noges +Norberlais +Norboupe +Normais +Normance +Normanceava +Normdë +Normet +Normet-Marn +Normon +Normonine +Normonsterz +Norrville +Nossbäck +Nossbë +Nossilva +Nosson +Nossonowic +Nowa +Nowa Zdrój +Nowa Zdrów +Nowałoby +Nowałynki +Nowo +Nowy +Nowy Wie +Nuce +Nuce Śles +Nuce-Aigna +Nuce-Alpes +Nucea +Nuceava +Nuceavajva +Nuceavnion +Nuceavniona +Nucecea +Nuceni +Nuceș +Nybraz Nea +Nybrazd +Nybrazhd +Nybrazowica +Nybrzebnice +Nybrzeszty +Nybrzew +Nybrzyn +Nyki +Nykie +Näs +Näste +Nästre +Nästres +Nästron +Näsvie +Näsviker +Näsåkekie +Näsård +Näsås +Nöbbeileș +Nöbberges +Nöbbert +Nöbbes +Nădla +Nădla-Bena +Nădla-Bia +Nădladź +Nădlage +Nădlais +Nădlaisisz +Nădlako +Nădlan +Nădland +Nădlande +Nădlante +Nădlanë +Nădlatna +Nădlatne +Năven +Năvena +Năvence +Năveneu +Năvenhów +Năvenica +Năvenicău +Năvenis +Năvenjak +Năvoda +Năvodhan +Năvodlen +Năvodni +Năvodzka +Năvodë +Năvodăța +Obor +Obora +Obord +Obore +Oborgste +Oborhenion +Obormedjebo +Oboroventrz +Oborp +Oborra +Oborrașu +Obors +Oborsesson +Oborski +Oborskoviș +Obort +Oborzyn +Oborë +Obrz +Obrzebești +Obrzebro +Obrzeg +Obrzegue +Obrzes +Obrzewo +Obrzełczyn +Obrześna +Obrznoaski +Obrzos +Obrzozhilt +Obrzozów +Obrzyce +Obrzyczymin +Obrzyn +Obrzynki +Obrzyń +Ocna +Ocna Wie +Ocnad +Ocnad Odord +Ocnaiaj +Ocnan +Ocnane +Ocnarik +Ocnarp +Ocnarynka +Ocnau +Octe +Octea +Octei +Octek +Octenia +Octenice +Octerfäcko +Octerhamn +Octermet +Octerr +Octerres +Octers +Octerv +Octes +Octevidiu +Odor +Odora +Odorbergy +Odorbihan +Odorbyn +Odord +Odore +Odorezhône +Odorg +Odorj +Odorlöv +Odormen +Odormes +Odorna +Odoros +Odorov +Odorp +Odorraine +Odorrance +Odors +Odorë +Odrăile +Odrăveni +Odrăvenice +Odrăvenja +Odrăvodzka +Odrăvodë +Odrășeș +Odrășeși +Odrą +Oise +Oisebro +Oisebrzew +Oisebrăila +Oisec +Oiseda +Oisedal +Oisekännë +Oisekärv +Oisekås +Oisekë +Oisekës +Oiselba +Oiselby +Oiselbys +Oiselenehan +Oiseles +Oiselet +Oisellbeil +Oiselle +Oisellen +Oisellie +Oisellsh +Oiselly-son +Oisenforp +Oisenfors +Oisenforë +Oisenhova +Oisenhoven +Oisenhovik +Oiseryd +Oiserynki +Oisession +Oisesson +Olivja +Olivjak +Olivjan +Olivjas +Olsh +Olshen +Olshenis +Olsht +Olshë +Olshës +Opat +Opatna +Opatnad +Opatos +Opatosine +Opatoszcz +Opatowa +Opatowicë +Opatramur +Opatrance +Opatrazhd +Opatraș +Opatu Mares +Opatózeź +Opol +Opoles +Opolet +Opoletrore +Opoline +Opoliçan +Opolj +Opolm +Opolmsfov +Opolny +Opolomiș +Opolomord +Opolski +Opolskov +Opolszów +Orge +Orgen +Orger +Orie +Oriers +Orierskie +Orik +Orikence +Orikenișov +Orikenne +Oriki +Orrv +Orrvik +Orrvikum +Orrvåda +Orze +Orzebnice +Orzew +Orzewolik +Orș +Orști +Otopence +Otopeș +Otopești +Otopi +Otopliajë +Otoplich +Otoplik +Otoplingowa +Otopliszki +Otoplitère +Otopoja +Otopol +Otopola +Otopolance +Otopolec +Otopolle +Otopolm +Otopolmesto +Otopolny +Otopolovec +Otopolski +Otopolva +Otopș +Ovidi-Jiu +Ovidi-Lezhd +Ovidi-Pyrë +Ovidia +Ovidiaiski +Ovidzbara +Ovidzbarne +Ovidzbarp +Ovidzica +Ovidzienice +Ovidzimień +Ovidzka +Ovidzki +Ovidzyce +Ovidzycka +Ovidzynan +Ovidzytna +Ovidzyń +Oței Arger +Oței Miov +Oței Mure +Oței Suce +Oței Sud +Oței deryd +Oțelui +Oțeluire +Oțeluirolj +Oțeluj +Oțeluń +Pant-Denta +Pantevilti +Pantork +Pantrel +Pas-Atlais +Pas-Botopes +Pas-Botorp +Pas-Codlacz +Pas-Colomsh +Pas-Câmpi +Pas-Cërmet +Pas-Cërre +Pas-Côte +Pas-Marnei +Pas-Marnów +Pas-Orrv +Pas-Pyrë +Pas-Pyrój +Pas-de-Fra +Pas-den +Pas-deås +Pas-sunde +Pato +Patock +Patocki +Patorp +Paulce +Pault +Pecie +Pecin +Pecin na +Pecio +Peqizë +Peqizów +Pers +Pers-sure +Persunion +Pesh +Peshammandy +Peshammet +Peshenon +Peshkopol +Pesht +Peshulance +Peshuluire +Peshytnarp +Peshytów +Peshë +Peshëshë +Peshëz +Peti +Petimes +Petimesze +Petin +Petra +Petranța +Petres +Petreuilva +Petreux +Petroulos +Petroșani +Petrz +Petrörv +Pias +Piassonnec +Piaszë +Piatla +Piatlatne +Piatnan +Piatossec +Piatrance +Piatrașani +Piatów +Pica +Picani +Picardenis +Picasserg +Pies +Pies-Comana +Pies-Cône +Pieshkopi +Piesjë +Pieskovik +Piestat +Pień +Pieśna +Pieśnica +Pieźno +Piliașov +Pilin +Pilitë +Piliçoveni +Pion +Pionne +Pipeni +Piska +Piskiew +Piskień +Piskängjin +Podhemkås +Podholleneu +Podhult +Podlace +Podlacov +Podlichtyn +Pogoinë +Pogolin +Pogomielle +Pogozhd +Pograd +Pogradziont +Pogrów +Poita +Poitai +Poitaine +Poitais +Poitim +Poitimaran +Poitta Arg +Poitu +Poitë +Pol-Maraș +Pola +Polandy +Polandëz +Polań +Polia +Poliaj +Poliașov +Polin +Poline +Politère +Polité +Poliwiec +Pomo +Pomontesine +Pomorazhd +Pomorse-de +Pomorseksa +Pomorskärr +Pope +Popes +Prabana +Prabernut +Prabła +Prahov +Prahovda +Prahovenis +Prahulce +Prahule +Prahulqin +Predzicani +Prov +Prova +Provdal +Provdala +Provecki +Provecy +Proven +Provence +Proveneuil +Provenica +Provenis +Provens +Proventerv +Proventin +Proventre +Provița +Provodăult +Provë +Przemesztyn +Przesz +Pucin +Pucin nau +Pucine +Pucinecy +Pucino +Pucio +Pucioarance +Pucioaranch +Puków +Puköpin +Puköpine +Puköpinger +Puła +Pułał +Pułczów +Pułobyline +Pułochen +Pułodăța +Pułyn +Pułża +Pyrz +Pyrzno +Pyrznoy +Pyrzos +Pyrzyn +Pyräslöv +Pyrå +Pyréné +Pyrénénë +Pyrénéund +Pyrétei +Pyrë +Pyrës +Pyrëz +Pyród +Pyrój +Pyrów +Pyrö +Pyröd +Pâncoin +Pâncon +Pâncour +Pâncova +Périg Suc +Périghijas +Pérignan +Pérignars +Périgno +Pérignon +Périgtunan +Périgue +Périguenan +Përme +Përmeillia +Përmen +Përmes +Përre +Përrefort +Përrel +Përrence +Përreș +Përrik +Përrikum +Pătaieine +Pătain +Pătaine +Pătaineu +Pătaintrel +Pătaintów +Pătais +Pătâcoin +Pătâcon +Pătâcours +Pătâlon +Pătâmbava +Pătâmbes +Pătâmbeș +Pătâmbrą +Pătânce +Pătârga +Pătâtin +Pătâș +Pătâșca +Pătâști +Płobrazhd +Płobro +Płobrzyce +Płobrzyn +Płobrzyń +Płocz +Płoczów +Płodzkovik +Płodzyn +Płogolitë +Płogoszyn +Płomin +Płomine +Płomiș +Płomișna +Płomża +Płono +Płonole +Płonowo +Płonoît +Płopojakë +Płopolon +Płopon +Płostadec +Płostenjan +Płoster +Płostinna +Płotârlan +Płotères +Płotë +Płotów +Płowy +Płowy Wiec +Quen +Quenays +Quence +Quench +Quenfov +Queni +Queni Suce +Queni Sulm +Quenicë +Quenis +Quenisier +Quenja +Quenneș +Quenoît +Quens +Quensh +Quent-Cuire +Quentre +Queva +Quever +Queverg +Queveryd +Quevier +Quevik +Quevil +Quevileș +Quevilis +Quevilla +Queville +Quevillins +Quim +Quimaramsht +Quimarench +Quimarneș +Quimartre +Quimarë +Quime +Quimie +Quimiec +Quimița +Quimni +Radzba +Radzbaniewy +Radzbanis +Radzbark +Radzbawka +Radzic +Radzica +Radzice +Radzichtyn +Radziczyno +Radzion +Radziornój +Radziovec +Radzis +Radzise +Radzisht +Radziska +Radzispol +Radzka +Radzkalaj +Radzkars +Radzko +Radzkopi +Radzkoviț +Radzymes +Radzyn +Rejmyrzyn +Rejmyrées +Rejmyrë +Resa +Resa Carne +Resacceava +Resaceava +Resaines +Resalais +Resalaskov +Resandy +Resarny +Resarëz +Resk +Reska +Reski +Reskier +Rhin +Rhine +Rhinnë +Rhint-Layes +Rhintes +Rhinvilly +Rhôte +Rhôtea +Rhôtek +Rhôteniewo +Rhôteniki +Rhôteninon +Rhôter +Rhôtes +Rhôteviken +Rhôteville +Robeil +Robes +Robeșan +Roch +Rochermara +Rochœlchen +Rolfov +Romain +Romaline +Roman +Romandy +Romark +Ronne +Ronneuil +Rosec +Roselliecko +Rosk +Rosk Wiśna +Roski +Roskidzka +Roskieu +Roskogozhin +Roskov +Roskovenne +Rottance +Rottanța +Rottever +Rottjömarp +Rouen +Rouenis +Rousca +Roushône +Rousneux +Rousz +Rouszów +Rouvernole +Rovie +Rovignana +Rozno +Roș +Roșovodzka +Rrog +Rroger +Rrogerforse +Rrogilisne +Rrogille +Rrogne +Rrognebyn +Rrogneux +Rrogoarance +Rrogos +Rrogozhin +Rrogoziei +Rrogoznon +Rrograd +Rrogrance +Rrograș +Rrograșov +Rrogrå +Rrogrë +Rrë +Rrë Vaj +Rrërrabë +Rrërre +Rrërrikeni +Rrës +Rrësht +Rrëz +Rubica +Rubice +Rubiharence +Rubin +Rubiu +Rubișance +Ruda +Rudal +Rudalais +Ruei +Rueil-lais +Rueim +Rueine +Rueine-Sava +Rueinedomin +Rueini +Rupes +Rupes-delos +Rych +Rychatnaia +Ryched +Rycheforp +Rychelany +Rychileș +Rychiron +Rychower +Rychty +Rychwa +Rychów +Ryde-Côtei +Ryde-France +Ryde-Frași +Rzgåker +Rzgåkerg +Rzgåkerin +Rzgåkerny +Rzgåkerria +Rzgåkers +Rzgård +Rzgården +Rzgórzno +Rzgórów +Râșnad +Rängero +Ränni +Réuni +Réunia +Réunica +Réunice +Réuniceava +Réunicz +Réunicë +Réuniei +Réunieine +Réuniki +Réunin +Réunina +Réuningjin +Réunino +Réunis +Răcar +Răcara +Răcaramur +Răcaramța +Răcarance +Răcardy +Răcarne +Răcarnes +Răcarpatë +Răcarzeg +Răcel +Răcele +Răcelentra +Răceline +Răcellby +Răceluła +Răcelvinö +Răcin +Răcine +Răcinge +Răcingen +Răcue +Răcuedowa +Răcuen +Răcues +Răcueux +Sain +Sain Times +Sain-Jiu +Sainais +Sainark +Saine +Sainek +Saines +Sainesinë +Saing +Sainge +Sainja +Saint-Laye +Saint-Marny +Saintermais +Sainë +Sainësh +Salomier +Sand +Sandsdal +Sandy +Sandë +Saraderyd +Sarance +Sarandre +Sarazhd +Sarz +Sarzegława +Satu +Satureșnon +Savodalad +Savoielomin +Saône +Schiczyn +Schin +Schinées +Schinë +Schita +Schitabeș +Schitad +Schitain +Schitanța +Schița +Schœlch +Schœlchat +Schœlchet +Schœlchnia +Schœlchowa +Schœlchowy +Schœlchtyn +Sebiu +Secula +Segaryd +Sein +Sein Wodzko +Seine +Seine-Bran +Seines +Seinge +Seingers +Seingów +Seinjawskie +Seint-Mică +Seintes +Sele +Selesère +Selin +Seling +Selité +Sevence +Sevenion +Shë +Shë Ved +Shë Vede +Shë-Alpes +Shëlcance +Shëlchet +Shërr +Shërröge +Shësh +Shëz +Sibbel +Sibbeline +Sibbhuș +Sibice +Sibicea +Sibik +Sibin +Sibiș +Sibișești +Sibișău +Sighitais +Sighitu +Sighulcan +Sighult +Sigtund +Sigtuneș +Sigtunion +Silvance +Silvik +Silvindsdal +Sina +Sina Pra +Sina Wiec +Sinad +Sinaryd +Sjö +Sjöbbhuș +Sjöd +Sjög +Sjöga +Sjögdeå +Sjögebro +Sjögen +Sjölle +Sjölno +Sjömslöv +Sjön +Sjöna +Sjöping +Sjörk +Sjörles +Sjörne +Sjörny +Sjörv +Sjösace +Sjösala +Sjöv +Sjövs +Skala +Skalainte +Skalby +Skallais +Skalöge +Skalövs +Skar +Skarașov +Skarbeilva +Skarce +Skari +Skarienik +Skaritu +Skil +Skilisht +Skilly +Skre +Skred +Skrench +Skrevik +Skäfsnów +Skäfstom +Skälle +Skänne +Skärne +Skärp +Skäs +Skästa +Skästen +Skästines +Skästorj +Skäsö +Skå +Skådal +Skåken +Skåker +Skållöman +Skångalom +Skånnlais +Skård +Skås +Smed +Smeda +Smede +Smedeamț +Smedeava +Smedemorova +Smedenis +Smedenistë +Smedenjak +Smedgi +Smedgiu +Smedia +Smediatra +Smedje +Smedjeba +Smedlia +Smedliaj +Smedlice +Smedni +Smedni Iaș +Smednik +Smedoaie +Smedoane +Smedoarabë +Smedoarad +Smedoarance +Smedoaras +Smedoasa +Smedochen +Smedock +Smedocka +Smedzienise +Smedziert +Smedziski +Smedziskieu +Smedziszcz +Sobäck +Sobë +Soko +Soko Pomża +Sokoff +Sokopi +Sokopoja +Sokopol +Sokowice +Sole Giu +Sole-de-dec +Solea +Soles +Solle +Sollie +Sollonne +Solly +Solly-le +Solvand +Solvangare +Solves +Solveski +Solvik +Solvikeni +Solviki +Solvine +Solvino +Sors +Sorse-Alpes +Sorsjë +Sorski +Sorsków +Sorszecio +Sottana +Sottance +Sottancea +Sotte +Sottergare +Sottevie +Sottevier +Sottjö +Sottne +Spar +Spara +Sparani +Sparașov +Sparbo +Spare +Sparghittad +Sparghița +Sparghulin +Sparghult +Spari +Spariers +Spark +Sparkarz +Sparkelsh +Sparki +Sparn +Sparna +Sparne +Sparne-Saç +Sparonków +Sparre +Sparrk +Sparyd +Sparzyn +Sparöd +Stal +Stala +Stare +Starp +Stas +Stasa +Stastë +Staw +Stawa +Stawis +Stawka +Stawskovala +Stica +Sticaranța +Sticea +Stickla +Stock +Stromița +Strond +Strore +Stroszewo +Strovench +Strovoiecki +Strowa +Stroyes +Strujë +Strumëz +Sträs +Strë +Strëz +Strój +Stur +Stur-Marka +Suce +Suce-Alpes +Sucea +Suceavoire +Sucenicë +Such +Suched +Suchój +Sud +Sulm +Sulmena +Sulmo +Sulmsundred +Suprot +Suprotoșu +Sus Suce +Sus Such +Sus Sulmo +Suzalik +Suzanne +Suzarne +Svala +Svalałoté +Svalați +Svales +Svalia +Svalliq +Svalmark +Svalomiei +Svan +Svana Cala +Svance +Svanceș +Svanellet +Svanker +Svantorp +Svanța +Sven +Svenays +Svence +Svencea +Svenceava +Svench +Sveni +Svenis +Svenise +Svenjaccion +Svenjas +Svenne +Svenoît +Svenshen +Svenshë +Sventany +Sventervik +Sventes +Sventre +Szcz +Szcze +Szczec +Szczecicz +Szczew +Szczyce +Szczyn +Szczyna +Szczytta +Szczórz +Szczótka +Szczów +Szliajës +Szlier +Szlierz +Szlin +Szlinsta +Szliq +Szlitë +Szliveri +Szlița +Szprał +Szpraławy +Szprałotë +Szprot +Szprotaw +Szprottna +Szprottne +Sèvre +Sèvrehor +Söd +Söder +Söderine +Söders +Södert +Söderz +Södik +Södiken +Söllaise +Sölnda +Sölvec +Sölvence +Sösa +Sösda +Sösdal +Söv +Söves +Sövs +Sövsluies +Săcaramsh +Săcari +Săcarita +Săcarpacz +Săcarrkvik +Săcelicë +Săcelonde +Săcelvik +Săcin +Săcine +Săcinë +Săcue +Săcuemin +Săcuemiși +Săcueux +Săcuevie +Săcuevik +Sălce +Sălti +Sălti-Loie +Sălticki +Săltique +Sălăca +Sălăge +Sălăillet +Sălărne +Sędziași +Sędzica +Sędzice +Sędzier +Sędzionne +Sędzisz +Sędziszcz +Sędziszno +Tahu Sucion +Tahune +Tahuș +Tale +Tale Giu +Taleniczec +Talenion +Taleș +Tallance +Tallen +Tallenshëz +Tallepel +Talles +Tallon +Tally +Tampagele +Tamper +Tamperz +Tampia +Tamps-de +Tavec +Tavelingava +Tavence +Taveniów +Tavenstaia +Tavenstany +Tavesborëz +Tcze +Tczebnice +Tczebrazhd +Tczebro +Tczebrosko +Tczech +Tczechire +Tczecin +Tczecio +Tczeg +Tczegilndal +Tczegiu +Tczela +Tczemeil +Tczemes +Tczemestë +Tczemków +Tczeszno +Tczesznon +Tczeszów +Tczeź +Tczeźniów +Tczeźno +Tele +Teleni +Telenë +Tepe +Tepele +Tepelence +Tepelet +Tepeleń +Tepeni +Teper +Tepes +Tepes-Cors +Tepes-Côte +Tepeș +Tepești +Tepeșu +Terr +Terrai +Terrastë +Terre +Terredlier +Terredoasa +Terrik +Terrvik +Thia +Thia Tureș +Thiacoinge +Thiacon +Thiacota +Thiacova +Thiaj +Thiana +Thianarista +Thiaski +Thiaskie +Thiaskärp +Thiastan +Thiastance +Thiastorp +Thiastère +Thiatra +Thiatroubs +Thiała +Thiaławka +Thiaławy +Thiałczew +Thiałoda +Thiałubaw +Thiaș +Thiaș-Sais +Thiaș-Sei +Thiașan +Thiașeș +Thiași +Thiașu +Timice +Timier +Timiergne +Timierna +Timierno +Timieryd +Timiełczyn +Timin +Timine +Timines +Timirence +Timiț +Timița +Tjäck +Tjäfsnées +Tjäfsnów +Tjäge +Tjälgvik +Tjälgåker +Tjälkopi +Tjälle +Tjällstany +Tjänna +Tjänne +Tjännec +Tjännövs +Tjärmes +Tjärmon +Tjärne +Tjärp +Tjärres +Tjärvik +Tjäs +Tjäslö +Tjästabë +Tjästance +Tjö +Tjöd +Tjöde-Pas +Tjödirujö +Tjöforse +Tjöfov +Tjög +Tjöjan +Tjölnda +Tjölno +Tjön +Tjörla +Tjörlärne +Tjörnon +Tjörrik +Tjörv +Tjösa +Tjösdaliaj +Tjövence +Tjövs +Tjövslövs +Toardynis +Toarghița +Toaris +Toarit-Que +Toark +Toartuzyn +Toplandsda +Toplantenan +Toplik +Toplikence +Topliș +Toplișov +Topojak +Topol +Topolene +Topologne +Topolsh +Topolskie +Topon +Torman +Tormandë +Tormeil +Tormes +Tormeton +Tormormar +Tormorrance +Tossion +Tosson +Tossoni +Tossoniec +Tossontigne +Tour +Tour-Marken +Toura +Toureș +Tourguedgiu +Tourorj +Tourra +Tourrance +Tourre +Tropești +Tropi +Tropliașov +Troplice +Tropline +Tropliszewy +Tropolj +Tropolny +Tropolsk +Tropolski +Tropolsz +Tropș +Troy +Trze +Trzecinoît +Trzecioara +Trzeg +Trzela +Trzelați +Trzeszno +Trzew +Trzeźno +Trägeby +Trällöd +Tränne +Tulcand +Tulcanța +Tulceș +Tulcești +Tulcyréuna +Tulcyrë +Ture +Turebrowo +Tured +Turehovë +Turel +Turenja +Turent-Deni +Turent-Loie +Tures +Tureux +Tureși +Turz +Turzegre +Turzesin +Turzewo +Turzyce +Turzyna +Turzyngosze +Turzyno +Tuș +Tușanți +Tușion +Tușionki +Tycz +Tycz Zdrów +Tyczec +Tyczew +Tyczewy +Tyczka +Tyczyce +Tyczytów +Tyczój +Tyre +Tyre Mazhd +Tyrebros +Tyrebrzycea +Tyred +Tyrel +Tyrence +Tyrench +Tyrenja +Tyrent-Sais +Tyrentes +Tyrentiques +Tyrentore +Tyrentorska +Tyrentrence +Tyres +Tyreux +Târguede +Târguemes +Târguencea +Târgueux +Târguigue +Târgunda +Târgunde +Târguron +Târgurondy +Târguszew +Târla +Târlac +Târlages +Târlan +Târlanes +Târlatna +Târlați +Töcksance +Töcksanța +Töcksfort +Töcksfov +Uddhalaint +Uddhalbmieu +Uddhaliaș +Uddhaliq +Uddhallik +Uddhalomin +Uddhalăge +Uddhed +Uddheda +Uddhede +Uddhedgiu +Uddhedock +Uddhedzice +Uddhem +Uddhemala +Uddhemaluil +Uddhemes +Uddhemin +Uddhemine +Uddhemord +Uddhemork +Uddhemormar +Uddhemorp +Uddholec +Uddholin +Uddholines +Uddholj +Uddholm +Uddholskov +Uddholsz +Uddhul +Uddhulanț +Uddhule +Uddhulqin +Uddhult +Uddhului +Ujaz Nea +Ujazhd +Ujazime +Ujazimiș +Ujazimița +Ujazowerino +Ujazowerz +Ujazowice +Ujazowie +Ujazowo +Ulë +Ulë Vajva +Ulëlchem +Ulëng +Ulënge +Ulënger +Ulërres +Ulës +Unghei +Ungheil +Ungheil-la +Ungheim +Unghence +Unghenjak +Unghenta +Unghenti +Unghita +Unghitaia +Unghitaint +Unghitais +Unghitourg +Unghittain +Unghitte +Unghittes +Unghitu +Unghișău +Unghița +Unghul +Unghulany +Unghulca +Unghulce +Unghule +Unghulia +Unghulqizë +Unghult +Uppelentów +Uppenion +Uppeniont +Uppes +Uppes-Rhin +Upps-sur +Upps-sureș +Uppsal +Uppsalew +Uppsalstore +Uppsalșov +Uppsk +Urla +Urla Hunio +Urladź +Urlais +Urlakoverk +Urë +Urë-Alpes +Urë-Arrik +Urëlcance +Urëlcyrë +Urërmancea +Urërmet +Urërmeton +Urërrabron +Urërrais +Urërre +Urërred +Urërrë +Urëshkovie +Urëshö +Urëz +Vajgurești +Vajgurora +Vajgurthund +Val-Mais +Val-Marance +Val-Marne +Val-de +Val-de-Mos +Val-dec +Val-deryd +Val-la +Val-laj +Val-latna +Val-lań +Val-surance +Vale +Vaplik +Vaplikumë +Vaplița +Vaslärne +Vaslö +Vaslöjan +Vaslölno +Vaslörk +Vassbë +Vasserz +Vassmorse +Vasson +Vassontre +Vatrance +Vatre +Vatrours +Vatrzyn +Vede +Vede-France +Vede-Seine +Velac +Velais +Venja +Venjas +Venjasa +Vern +Verna +Vernarki +Verne +Vernebärre +Vernód +Vernów +Vert +Vertin +Vertro +Vicova +Vicovasne +Vika +Vikars +Vikmance +Vikmancea +Vikmanów +Villby +Ville +Villentek +Villie +Villmorbo +Villon +Villshësh +Villtorp +Vingarna +Vinge +Vingjin +Vinne +Vinneva +Vittan +Vittjöd +Vlă Con +Vlăca +Vlăcan +Vlăcin +Vlăcuence +Vlăcutany +Vlăge +Vlăgen +Vlăhinées +Vlăil +Vlăilești +Vlăilia +Vlăillos +Vlăla +Vlălac +Vlălt +Vlăląska +Vlăląski +Vlăne +Vlărbyna +Vlărmălan +Vlărne +Vlătë +Vlău +Vlău Sibik +Vlăulia +Vlăulna +Vlăvelia +Vlăveliq +Vlăvenicë +Vlăvestra +Vlăvodë +Vlășnaryd +Vlăț +Vlăț Nea +Vlăța +Volu Rud +Volui +Voluj +Volumsh +Volunde +Vorängs +Voräs +Voräste +Voräsås +Vorå +Vorénénë +Voréteine +Voréthult +Voród +Vorój +Vorö +Voröd +Voröder +Vosges +Vran +Vran Nea +Vrana +Vrance +Vrance-Den +Vrancece +Vranceceava +Vranceșand +Vrand +Vranda +Vrandhede +Vrandsda +Vrandy +Vrandë +Vrani +Vrani Alpes +Vranieu +Vraniew +Vrannes +Vranti +Vrantin-de +Vrantinia +Vrantos +Vrantë +Vrany +Vranów +Vranței +Vulcea +Vulceamț +Vulceasa +Vulceava +Vulceavarbo +Vulceavasna +Vulceș +Vulcești +Vulchen +Vulchenice +Vulchenikie +Vulcyresås +Vulcyrées +Vulcyrénë +Vulcyrë +Vâlce +Vâlon +Vâlonice +Vâlonkë +Vâlonków +Vâlonne +Vâlonnes +Värmdöpi +Värne +Värnes +Värnevik +Värnut +Värnutby +Värpås +Värr +Värre +Värv +Väs +Väslösa +Väster +Västevie +Västorp +Västorpå +Västos +Västou +Västreu +Väsvik +Väsville +Väsåken +Våxtocka +Våxtopes +Våxtos +Wejher +Wejherblin +Wejhercin +Wejherg +Wejherga +Wejhergne +Wejhergy +Wejherhenis +Wejherin +Wejherine +Wejherinna +Wejherk +Wejhermaine +Wejhermar +Wejhermes +Wejheron +Wejherrande +Wejherrigne +Wejhers +Wejherski +Wejhert +Wejhertorp +Wejhertoș +Wejhertë +Wejheryd +Wejherz +Wejherzyce +Wejherzyn +Wiel +Wiel-soulos +Wiel-sureș +Wieladecice +Wielance +Wielaniec +Wiele +Wielenis +Wielentevik +Wieleoagów +Wieleordy +Wielichtyn +Wielicov +Wielko +Wielkovence +Wielles +Wielniki +Wielont +Wielousson +Wielouviken +Wielski +Wielvidiu +Wielviken +Wielville +Witka +Wiąbkowiec +Wiąbkowy +Wiąbrazhd +Wiąbro +Wiąski +Wiąsko +Wiście +Wiśl +Wiśnicz +Wiśniew +Wiśnionne +Wlełchare +Wlełczyce +Wlełczyn +Wlełczyna +Wlełczynis +Wleśna +Wleśnic +Wleśnica +Wleśnice +Wleśnicz +Wleźnik +Wleźnikum +Wleźno +Woda +Wodal +Wodala +Wodalance +Wola +Wola-Garne +Wolaiski +Wolaiskie +Wolaț +Wolsac +Wolsace +Wolsacker +Wolsacz +Wolsh +Wolsk Poita +Wolski +Wolskie +Wolskingjin +Wolskovence +Wolstabelsh +Wolstany +Woź +Woźmița +Woźni Iaș +Woźno +Woźnon +Woźnov +Woźnoît +Wyson +Wysonne +Wysonnebiș +Wysonneby +Wysonnec +Wysonneu +Wysonnlac +Wysonnö +Wysonsta +Wysonstad +Wysonstain +Wysouscat +Wysoushög +Wysousseda +Wysoussin +Wąbki +Wąbkie +Wąbko +Wąbkopinge +Wąbkopolsh +Wąbkowonia +Wąbro +Wąbrondy +Wąbronnes +Wąbrovence +Wąbrzyn +Wąbrzyń +Wąbygge +Wąbyggen +Wąbygges +Wąbyggeși +Węgor +Węgora +Węgord +Węgore +Węgorj +Węgormaisz +Węgormar +Węgormark +Węgornis +Węgorp +Węgorrance +Węgorranch +Węgors +Węgorzów +Yerr +Yerra +Yerrabë +Yerrabëz +Yerraine +Yerraintrel +Yerrance +Yerras +Yerrasa +Yerrasny +Yerrastë +Yerraszew +Yerraszë +Yerre +Yerred +Yerredniec +Yerrelance +Yerrelonne +Yerrelvik +Yerren +Yerrenice +Yerreniș +Yerrik +Yerriki +Yerrë +Yerrërmet +Yerrësht +Yerrëz +Yerrökë +Yon +Ytte +Ytte-Garan +Ytte-Maria +Ytte-Sava +Ytte-Savaj +Ytte-Seine +Ytte-Sevik +Yttea +Yttei +Ytteilla +Ytteillik +Ytteillomin +Yttek +Yttenan +Yttenican +Ytterforden +Yttermåda +Ytterre +Ytters +Ytterv +Yttervik +Yttes +Ytteville +Yvel +Yvelad +Yveladeline +Yvele +Yvele Suce +Yvelen +Yvelena +Yvelenis +Yvelentance +Yvelentra +Yveleormdë +Yvelgård +Yvelicara +Yvelicht +Yveliczew +Yvelin +Yvelinais +Yveline +Yvelingeby +Yvelinges +Yvelinë +Yvelita +Yvelkopinte +Yvelkopol +Yvellëz +Yvelon +Yvelou +Yvelourne +Yvelskara +Yvelski +Yvelskie +Yvelskov +Yvelsta +Yvelstabë +Yvelstani +Yvelstors +Yvelunsta +Yveluławy +Yvelvik +Yvelvillacz +Yvelvița +Zagåkering +Zagåkers +Zagård +Zagów +Zagówek +Zale +Zale-Biała +Zalene-Sain +Zalenë +Zalăhița +Zalărașov +Zalărne +Zalău +Zaląsence +Zaląsenis +Zaląska +Zaląski +Zaląskie +Zaląskind +Zawice +Zawiec +Zawiec Kuj +Zawieceava +Zawiechor +Zawiecki +Zawiecko +Zawierg +Zawieryd +Zawiskovë +Zdräfsna +Zdrännë +Zdrännö +Zdräslöv +Zdrästena +Zdrénées +Zdrénénë +Zdrénénö +Zdrénéund +Zdrénéune +Zdrë +Zdrës +Zdrëshen +Zdrëz +Zdród +Zdrój +Zdrów +Zdrö +Zdröd +Zdröderlan +Zdrödervë +Zdrödik +Zgie +Zgieby +Zgiebyn +Zgiec +Zgiedzice +Zgiegłowy +Zgiei +Zgieliergy +Zgieline +Zgielitów +Zgieliçani +Zgielny +Zgielos +Zgielsztyna +Zgielui +Zgienion +Zgienne +Zgier +Zgiersicz +Zgierskie +Zgierskë +Zgierszeg +Zgiescq +Zgiestë +Zgieu +Zgiew +Zgień +Ziel +Zieladec +Ziele +Zielen +Zielenis +Zielin +Zielkopol +Zielou +Zieloupes +Zielundy +Zieluławer +Zielviț +Zimn +Zimnica +Zimnice +Zimnicz +Ziębihamn +Ziębihan +Ziębik +Ziębin +Ziębiu +Ziędzion +Ziędzise +Ziędzymes +Ziędzyn +Ziętre +Ziętrzyna +Zlat +Zlatla +Zlatlac +Zlatlais +Zlatlaj +Zlatos +Zlatosine +Zlatosines +Zlatostos +Zlatoszcz +Zlatower +Zlatrabune +Zlatrad +Zlatrahor +Zlatramsh +Zlatrance +Zlatrazhd +Zlatraśl +Zlatu Marne +Zlatu dec +Zlatój +Zlatórë +Zlatów +Zăraș +Zărași +Zărașov +Zărați +Zărbune +Zărbuty +Zărbutyn +Zărmănea +Zărmăneș +Zărne +Zărărne +Ząbko +Ząbkopina +Ząbkovence +Ząbkoviken +Ząbkowo +Ząbrombrą +Ząbrondy +Ząbrore +Ząbrores +Ząbrovence +Ząbroye +Ząbroyes +Ząbrz +Ząbrzewy +Ząbrzyce +Ząbygge +Ząbyggen +Ząbygger +Ząbyggeși +Złock +Złocki +Złocz +Złocz Zdre +Złoczka +Złoczyce +Złoczyn +Złodzica +Złodzion +Złodzis +Złogonicz +Złogorzebo +Złogoszcz +Złogosze +Złogozhine +Złomier +Złomiți +Złomłyn +Złomża +Złono +Złonov +Złonoît +Złopolon +Złopon +Złostance +Złostra +Złotë +Złowy +Złowy Dolm +Złowy Wola diff --git a/tribe.cpp b/tribe.cpp new file mode 100644 index 000000000..30ff2b68e --- /dev/null +++ b/tribe.cpp @@ -0,0 +1,120 @@ +#include "stdafx.h" + + +using namespace std; + +class KillEveryone : public Tribe { + public: + KillEveryone() : Tribe("", false) {} + virtual double getStanding(const Creature*) const override { + return -1; + } +}; + +Tribe* const Tribe::monster = new Tribe("", false); +Tribe* const Tribe::pest = new Tribe("", false); +Tribe* const Tribe::wildlife = new Tribe("", false); +Tribe* const Tribe::elven = new Tribe("elves", true); +Tribe* const Tribe::goblin = new Tribe("goblins", true); +Tribe* const Tribe::dwarven = new Tribe("dwarves", true); +Tribe* const Tribe::player = new Tribe("", false); +Tribe* const Tribe::killEveryone = new KillEveryone(); + +Tribe::Tribe(const string& n, bool d) : diplomatic(d), name(n) { +} + +const string& Tribe::getName() { + return name; +} + +double Tribe::getStanding(const Creature* c) const { + if (c->getTribe() == this) + return 1; + if (standing.count(c)) + return standing.at(c); + if (enemyTribes.count(c->getTribe())) + return -1; + return 0; +} + +void Tribe::initStanding(const Creature* c) { + standing[c] = getStanding(c); +} + +void Tribe::addEnemy(Tribe* t) { + enemyTribes.insert(t); + t->enemyTribes.insert(this); +} + +void Tribe::makeSlightEnemy(const Creature* c) { + standing[c] = -0.001; +} + +static const double killBonus = 0.1; +static const double killPenalty = 0.5; +static const double attackPenalty = 0.2; +static const double thiefPenalty = 0.5; +static const double importantMemberMult = 0.5 / killBonus; + +double Tribe::getMultiplier(const Creature* member) { + if (contains(importantMembers, member)) + return importantMemberMult; + else + return 1; +} + + +void Tribe::onKillEvent(const Creature* member, const Creature* attacker) { + if (member->getTribe() != this || attacker == nullptr) + return; + initStanding(attacker); + standing[attacker] -= killPenalty * getMultiplier(member); + for (Tribe* t : enemyTribes) + if (t->diplomatic) { + t->initStanding(attacker); + t->standing[attacker] += killBonus * getMultiplier(member); + } +} + +void Tribe::onAttackEvent(const Creature* member, const Creature* attacker) { + if (member->getTribe() != this) + return; + if (contains(attacks, make_pair(member, attacker))) + return; + attacks.emplace_back(member, attacker); + initStanding(attacker); + standing[attacker] -= attackPenalty * getMultiplier(member); +} + +void Tribe::addImportantMember(const Creature* c) { + importantMembers.push_back(c); +} + +vector Tribe::getImportantMembers() { + return importantMembers; +} + +void Tribe::onItemsStolen(const Creature* attacker) { + if (diplomatic) { + initStanding(attacker); + standing[attacker] -= thiefPenalty; + } +} + +void Tribe::init() { + EventListener::addListener(goblin); + EventListener::addListener(dwarven); + EventListener::addListener(elven); + elven->addEnemy(goblin); + elven->addEnemy(dwarven); + goblin->addEnemy(dwarven); + goblin->addEnemy(wildlife); + player->addEnemy(monster); + player->addEnemy(goblin); + player->addEnemy(pest); + monster->addEnemy(wildlife); + wildlife->addEnemy(player); + wildlife->addEnemy(goblin); + wildlife->addEnemy(monster); +} + diff --git a/tribe.h b/tribe.h new file mode 100644 index 000000000..5c21a3821 --- /dev/null +++ b/tribe.h @@ -0,0 +1,53 @@ +#ifndef _TRIBE_H +#define _TRIBE_H + +#include +#include + +#include "enums.h" +#include "creature.h" +#include "event.h" + +class Tribe : public EventListener { + public: + virtual double getStanding(const Creature*) const; + + Tribe(const string& name, bool diplomatic); + + virtual void onKillEvent(const Creature* victim, const Creature* killer) override; + virtual void onAttackEvent(const Creature* victim, const Creature* attacker) override; + + void onItemsStolen(const Creature* thief); + void makeSlightEnemy(const Creature*); + void addImportantMember(const Creature*); + vector getImportantMembers(); + const string& getName(); + void addEnemy(Tribe*); + + static void init(); + + static Tribe* const monster; + static Tribe* const pest; + static Tribe* const wildlife; + static Tribe* const elven; + static Tribe* const dwarven; + static Tribe* const goblin; + static Tribe* const player; + static Tribe* const vulture; + static Tribe* const killEveryone; + + private: + + bool diplomatic; + + void initStanding(const Creature*); + double getMultiplier(const Creature* member); + + unordered_map standing; + vector> attacks; + vector importantMembers; + unordered_set enemyTribes; + string name; +}; + +#endif diff --git a/trigger.cpp b/trigger.cpp new file mode 100644 index 000000000..18b49b1c7 --- /dev/null +++ b/trigger.cpp @@ -0,0 +1,102 @@ +#include "stdafx.h" + +Trigger::Trigger(Level* l, Vec2 p) : level(l), position(p) { +} + +Trigger::Trigger(const ViewObject& obj, Level* l, Vec2 p): viewObject(obj), level(l), position(p) { +} + +Optional Trigger::getViewObject() const { + return viewObject; +} + +class Portal : public Trigger { + public: + Portal(const ViewObject& obj, Level* l, Vec2 position) : Trigger(obj, l, position) { + if (previous) { + other = previous; + other->other = this; + previous = nullptr; + startTime = other->startTime = -1; + } else + previous = this; + } + + virtual void onCreatureEnter(Creature* c) override { + if (!active) { + active = true; + return; + } + if (other) { + other->active = false; + c->you(MsgType::ENTER_PORTAL, ""); + if (other->level == level) { + if (level->canMoveCreature(c, other->position - c->getPosition())) { + level->moveCreature(c, other->position - c->getPosition()); + return; + } + for (Vec2 v : other->position.neighbors8()) + if (level->canMoveCreature(c, v - c->getPosition())) { + level->moveCreature(c, v - c->getPosition()); + return; + } + } else + level->changeLevel(other->level, other->position, c); + } else + c->privateMessage("The portal is not working."); + } + + virtual bool interceptsFlyingItem(Item* it) const override { + return other && !Random.roll(5); + } + + virtual void onInterceptFlyingItem(PItem it, Attack a, int remainingDist, Vec2 dir) { + level->globalMessage(position, it->getTheName() + " disappears in the portal."); + other->level->throwItem(std::move(it), a, remainingDist, other->position, dir); + } + + virtual void tick(double time) override { + if (startTime == -1) + startTime = time; + if (time - startTime >= 100) { + level->getSquare(position)->removeTrigger(this); + level->globalMessage(position, "The portal disappears."); + } + } + + private: + double startTime = 1000000; + bool active = true; + Portal* other = nullptr; + static Portal* previous; +}; + +Portal* Portal::previous = nullptr; + +PTrigger Trigger::getPortal(const ViewObject& obj, Level* l, Vec2 position) { + return PTrigger(new Portal(obj, l, position)); +} + +class Trap : public Trigger { + public: + Trap(const ViewObject& obj, Level* l, Vec2 position, PEffect _effect, Tribe* _tribe) + : Trigger(obj, l, position), effect(std::move(_effect)), tribe(_tribe) { + } + + virtual void onCreatureEnter(Creature* c) override { + if (c->getTribe() != tribe) { + c->you(MsgType::TRIGGER_TRAP, ""); + effect->applyToCreature(c, EffectStrength::NORMAL); + EventListener::addTriggerEvent(c->getLevel(), c->getPosition()); + c->getSquare()->removeTrigger(this); + } + } + + private: + PEffect effect; + Tribe* tribe; +}; + +PTrigger Trigger::getTrap(const ViewObject& obj, Level* l, Vec2 position, PEffect effect, Tribe* tribe) { + return PTrigger(new Trap(obj, l, position, std::move(effect), tribe)); +} diff --git a/trigger.h b/trigger.h new file mode 100644 index 000000000..9af587ca5 --- /dev/null +++ b/trigger.h @@ -0,0 +1,31 @@ +#ifndef _TRIGGER_H +#define _TRIGGER_H + +#include "view_object.h" +#include "util.h" +#include "creature.h" + +class Trigger { + public: + + Optional getViewObject() const; + + virtual void onCreatureEnter(Creature* c) {} + virtual bool interceptsFlyingItem(Item* it) const { return false; } + virtual void onInterceptFlyingItem(PItem it, Attack a, int remainingDist, Vec2 dir) {} + + virtual void tick(double time) {} + + static PTrigger getPortal(const ViewObject& obj, Level*, Vec2 position); + static PTrigger getTrap(const ViewObject& obj, Level* l, Vec2 position, PEffect _effect, Tribe* _tribe); + + protected: + Trigger(Level*, Vec2 position); + Trigger(const ViewObject& obj, Level* l, Vec2 p); + + Optional viewObject; + Level* level; + Vec2 position; +}; + +#endif diff --git a/typodermic license agreement.pdf b/typodermic license agreement.pdf new file mode 100644 index 0000000000000000000000000000000000000000..15004859e893214d33652f7c76c07545237939c4 GIT binary patch literal 90693 zcmafaW0Yo1mt|#UrES}`ZQC}Vv~5({wry70w(UyW&Z)QioBn#%^sKo*Vx2e4x;`gXnR4*+gU2YdaiZ(o558Ywztt)WW>1-ndI`l8@U zpX#ChKsh`vSPj`iBb_XN@84UQPVc%lS70~<&6z)mi7uD-qZ|E!8u~!&f|9~U&eDItisL;!Fm@)4fd0WyJ35~KNk}6*4CTq z*&{{Rnf`b}icmC$X?*krwZqSi#3`%h{d%pUmN*r%wHC6?Iu2Z>;pP|x+SA!5=>;aR z2cBx9bOTv12(-w$y1~k8cq`VSji|?5=@*Ea=OHakfe~+YukV?8Tmq)i5E5{JG%$&o z^=G*uFJdNEZ9bW}g$a~ib4gum&n#6((_^c;(e)X5Z7b$zIWOD~61Ax4pZ*Gmzsae& z-*(2MT0IT4w+gaH0=?E0b`vI-qjAM4FT}ybyMwbOjhSUVhF#HWN@wCjtGtBupZtUC z&qa914UIy^?%+7B+86X;3=;|w4UAC(6xWwqYtmfqhnDluyL5}W5fyq5Q!}gYw7?GU zI-&yc>Z~%!%=S1HPHMDLZF^J1fInbU6Bs;0a3+=Hyf<7KxV&eBBRzjU8kfQyGExfi zcJR#qMa;vmT5dk{!ed0wfnAyH-@E~Q5FvYk1_$E14|z-1Pe~J88LX&#zRkbG3k_c% z;0(Ig=1d z`L}h7{({wlYX2MiAt6!+4W`7y~M!vX4X7m(W2OG zL_lNp*vWH9@uTq%t=mze2qM7g1+nKO$&6G#3evJRmDcTagG`#wpvZ9TJ?JPqxDrezvVk#20lFm|% z0yP7EluK{LMJecjE`DJs&*GemH6m~lufM-m(0#Z)K!5?%Vc<_15g_TT(;VqK#!|8) zW^1#|mg1+xx-pdoar%yx>(W$hnn1tl-RO}kt%%N-BXhVEId|2Kq8gNq%zC4`+l?*X zrszRD7t&=>mC?Ez1x;I0ol#&YBP+BO&0>8y0=VChC=p{2It`CBg=~(&Cea!XwONJjcuIC8{LzO(f}pIKo+4?^njVD#vSK|99bjLZ4L znGGw6I=;)cDJiWcJkG`g}Y6igoy= zEMZ7~(+RjfT@0Gr?Cz|eQTm+@ipP)RV!o`-NSj)q@}=7`l6^mfQsM3m#S3oJUV

&}Nq^+%BjRh5jkG zeyne>J0fsyv4n%?lh&MEu~@ZRdtCjCB0Nke27@A)Dp@RC3T!5>v&1zn6qO~=5yFE6 z`1&w{>FmBlWL{~lTcdz4RDs?}1wXOuhBcdMzDEF*VS#O&?uu$6akj-?whmgdC}Fy@|2iWvhl0mMs;C1 z$e2~NYU@e=NleR06CZpwEth6;no^|E*_*u;v>@fG$7sl|ZE#-WWPlW3E9$Y?lwhb? zHdrY{M|f#|HN+54F0=*zKEnyw#?iTng=tu&FA>)pR%Cg@30rj_!H|42&Wp11_2tOy zQnqWDSsMwdqx3Tt1z{ZeDc9|aDHbdYu?p&}juVkSa93glNP>H&Whrs^j9SlI6(`xH z@X{buJBImJ99vjBjfvSt+n@;gv9LB;zl#6l#I7hs(&>*}Cs!l6MnP0jHP!wa`q zgQz67t3?gvK!ag}yOl1c!ZWr)S=43XhS$LXciI6}@z7%nmClj7*`apDtRI=B*w8j9 zg|Sc5M9xG};gXu2NiBiJ8V=ZOXjI!R34kQL(vR{fLBX`hO2|G-WjF_}p^Y42NHrD-IuMj9!XA-ghK+#QlRv2+8- zyM17rtq6bW_6}d^hAs#IM4nf&e8B8H2fK0q+--bl_RShJB>TxgKkZ-B`aUVs=3~ar zr)_BKmc22fVpBika=DcIoZO;9T?c7OdS)d2NgUWdWMho&K;}!X+zxn4b3PykPP4rV zH3>vldl|i0DhNBcuaa&O8tSS-biz{1Q}T_}Qj%WvuHC3>s1F$lcyO@eGZ0@x*fl^1ecG zBKK(g6GIO>e2osHa&7;Y;s3#4zyC_?%1;!G4o6^9YqJuNOZv^%(nrQt3CiL>% zxNgaXkDbvBGM;aBohx_ZZYXzf*kv?V4BD~TF4lZR*eC{Bx}{U}%yq7!(WLHIM$mK- zqh+RG&1KV3GngqudYz`$o?|HyOFLE0MS!#ZTRAg~v*=_>4Ud%@a#rw5 z(&)ku^}*ldK~8D|_nY?%kE|8(JSpaieX98RmjXZx%H60a%Gco#5s`An+(B{)cz4nl zBTL17O zsDJ3tKL#@sC&NF@|KVg~{J&@u+doX||HqrEwWT9Tej|22*HYX}G4OgGB1Z&PRY}zu z!bf6zGw@Y)bqw=WT^ja1^|(>sDN&G`KJj3joK7oA<^Q55>V_zvtnB(Y{&R45y3+Ig zF`)0)wb`Ss|K-Do4l?up+wU>8ys`HF&w_j^|JT#q!~`QiPf2#{f*ev*vu{sCy)16dG+IJ*5^!Sbz{2)d)9#|{VDhN zA3bvH&^i3;P;b-5 z;d9V(=U_t7V~x!^h9xaWO}r3rkDxO9IAhsROfwH)EQP0c91Xi=NHFkodhsmXu;KNe z&jdbq7n-m>*oo+vEG-{63?Z{a%k_zmXT) zu&mlWd~vDk0$%OxzAbiVT5pdx0qVQ-X%K7|Q%il_M+Db{X6w{gOQdB3xc&IVS~!bH zdPmWTQq*Y;*ijlH)P^bVzo*wS{8tF@YQPV!3bw*}qrZ19aL^G=ECbBMXeR)uWm#CJ zURb+=bp&K`@3t6Znw$Poj)Ibg!(|lfeqm?Y1t2mcKlyig1FuW7uWvnNsk$01Eh3y2 zT~w>ufC6nGQ-l{EZ5GqJe|cKV*8@=*iyTr~mv@O6t3E?gtx=rh2MklMCw+M@ZX(k( z-*f`61}A~S?8ICNJLL|X2-tLxEQF98c#cvdq!Btiq{$B7EaWlsDo%G`|1cRoD8-E$ zP6`U5q_+VlinfXOq$cu79vC@+G~S(p+{Q_2EoCU>^??eF!=P{3L&z&MlLF~e)&Y;< z{d23+HM#u;H*jW=gvsu~QcN0x8!^FyU-|Yz)Fu zd>q-I;s71A`WT4Af-yKa(&n1u^pWMY_Ip(YoD#eZv&~Nvy)8Js-RzL3mOM%sBEFD} zJPuiTWbwYH>7$S{LXHT`QARZwJxUT0;}&AmD9gt-awSM+_ls4Y>2YW(Uj&6Z0)5dR zlO&Hhwc%qZ)~YO~77R2XWAGcf3<$edOwUycL>ZIH`G~Cfl>D)g6NSoTU%`9MQ8JE; zle2#m(N70CuPQ`3T9r|0N7?|)m%cZm8UTvzklu4zKJ5aZASY8cF=SOKaw#3|1?i7o znvU#{OkKkl(xmWuHNp~Nb62Sms2xO^M~!bi22duAr25Hr*6fuWwZI(yt5JS)G&axe zZ2o+bfEFX!5dwV$FhQqZ5yxd!$PU*+*M+_Fj8q#ko!7%mSX3%oYpwu1u!;~*s1&7) zQz%oQkoX$se74&KhA@}#D)TZ0+Gyf?5t|zN0RdabRe^B;>Qnmv9+U{!VdA0Q4W4`T@g?qwB2V*Rq&zc-+N)V4B|z z6mxJA4+q5=GQ9ZoO8e}7C=-Z8wMo2jsrB-6=$SsFn< zY>|;;gH(cj4Qs8C_UBYw<~q%a>(Lo6k6U|wF8en`x+vNf5@f11G2y;}qRA-)My0W; zL3Auen2Mz~Z2|h${?0QD=cdZY%fWC~Wul{sEq}62YwABiiNO0GrRtuVF!0XnHVxOkwmj!Os_nnjcQ{-+;1N*e|#u zyI=Idw)r9&`>JNcVH`e5L80K5^~&SifmNmqfAt(9(?3(FAsTgcL%fA{bG4Oz{a)O< zy9zl7e7QA_Pewl8+3KWP!b$@f$J1)GVeJlq;}uQ&^^MJ5-@3<8=FExk^NpSbQi|5@ z`(70W4%dIVCVdQSkV2OiH*bQYre9)Iad}{0pRFNEAiZ4J@R{PhZ{g`+XcRg|7$fS> z>ms3Rn6@1FT&?s_@`Kx$Xd?PPPlga}kOWmTVO@w6_U)e^ ziZlU>6Tom*FPSh7NEIeq1kuR;4VX&)`4uv|%|YcUi_b&8Dl8B}KZ7;b`iX1h z{PWg0op;atS%IF#kmI=X8P;eL^BffLkU^0#h{fDSedP6O)u|NpV^It7`$t-@8=TGP z?%$|3!tn;;nVo*2W-~>CcTVImPx6Q`KM0pR<;@$&LeV(?e3}gaP0jO0l*#MQX*)1% zc(lp5EM3Qpuds}LA8ViKd8wHv`OJeOU22jq+fxBCOdzUXb|WisR;PvBAKpBhl2I_MZ9%TtOBEP8DbRjfCe-HFVKSuXhSb z$dHmpp|o|U#J*QH5p|>D9;>I78JLA^u4Cp~#Y;ho#%ILT=>F7n7s*+VmGBWmOy^dY z>Xaau8R;2FJeyp1u5}u!7|B^QTgH2z;Pzg%unmMtjGvbBfbJNRG+Si05 zP{q%vc!rc{>`HT!>D5XpLR3ob@?wQQHpBiNzCq1;?7L$gmS4sMOQ&SOmJOyRV{bU7 zuh`W=(OsLd75O9=8Y6D)_*&JnE|0Qux%A6*(ZTVw&>=<&$wCmr73#l-qvy=2b-8q0 zJg3~~H3yoJjh$;Lh4hjVjyJ8}oFo>1^9`ot8;u%EG->zRp8VCMe=adTqgRv-`IoaI zc4f}{$cRyTDHE%?c@5cD#5zI^cdW9(Uyq}JyH5zk#!KzAFIrfd<)FmCY3i>Wjr8(J z?+Ax4`LMpWi*q^Y+B&@@2tL*MA|cq7%C17^)w&iH>Z{)DCUb4xbQ{~drba^FXpEgm zSx?iqE&%lvj*UE zS8z|xLIR;%Z=@%2Iy~OFBAtXao$A`zT@uP*n2vU!I2+6^t*iZWHWAD8I4RpX!TFZW zrVRujVmdO9+&V403rMoPM$r#>{K)CveRW1w#xBot#EF{domS@}Afo9)dh*s; z>bz5}i_~-bG%5(=b_kscH?!>}J2dBTvtiPo3O?hYV6L8uu90p)8+0SodON@;Fn?wCO z$i&FV^8cVq{|ZAf5->6{aI*dPpwp$6m%GYRv%Xg@b8P1*0wE-c$ut9r5E&stu|S~7 zod~uE${`|{zx0`wM7q3$R^l3xAha71^P3?V zhFD=1p{X=hR+08A+{IuRU2mu{{~UgJqMZ_XYMi^)+i7;$8tc^sn+v`+mT@qj#dmM; zyZiYNTku^h$B+?PTaReEK9@W9o3TA)RcLn->ETj$5ANF}112r}b+mo1r})^!vpeF8 z=%Ly6d)T1wo?bWT3yVlxPo4v5OLD00c$4Umx2rE_Lak^0*B7pcB|lJXyfZ#Eky-NR z_i?Hzzbue!^QO4+BGEW0(>8Dy?fPEaZA)Ba$~WdXWa6)8ofQ)vW!nkm|H+gS`&85D`bGDY218?Lv#!MbCU{ao`Pm7YEyw3*il#+{%zj6BALE&wT%uMxr3wh(#Z4-snD)Obv>$BI^LFkr%Rh6DxOi_v}d< zOYcj^HojGFM(Yyn3qcP+6GqS)$nQ|+ChB$Pt1D~S7n-g~T~n1F&^^KU>Ridv$>fVz zNy%0spA~a$H_0iBo%L>e; zMOGW77Frv#H+rq%x$cCAx9)1JD}&r>>qV`Gxucsh2aZwj(_*d zQ*n+v4;4--qfzpa!qnC%+lqRqc<5$V;3>im{@!d@XxL~Nxy$<_IROc1zr^BR%Y8lZ z!bkV}IAeg-=kIjl;Oks*#}%JOIaJ}}v_$NDF0}6b+zyZO3ih3vN9-uCN~1M9CT0Sx zfw@v{1WNcuUmEepb@NZ+i6{9^#0(t6sXo!aGd8(|)z_ruU2gR<5VC zlqzA;q*P0xK&KQWt*};grE0&6x&!|M`{#OGoFX)%f@|s2D*j9{wG6Pt_el3h`$#*1 zHL;Mwuc=&(UA>}(y!>pf-$2_^UB|jc*Kk>P+1O=ZC+vz>AbvVx{LI5$qEo#{9Xn6^ zLE{4D7sDUsttSm+N-17)$9v)FOS&;(uF;}F?Ln$7M!rZi_(s{C`JJs!C9O%UEs6cI zd1$>Xc?M#ERvvbu`{+=0$vN3Mlri0Md$8;r!MqP`cz-;OvsB0#6ZONmnxV&a+?<{*s+AHnkqyp026R@dGtt~7ENJgfz}zVBXGL_-$;G3!C5=9I&rPmUE=cCysm3->Ak)^#2QSQ zCh-JtL1dcx$l(|McJeDjs+NjB@LBw2U|i`jxH#R#2wX>UWxjZLscC7xf^TLyv7ata z=n+G%l{(3BDddSNiwa<0ayf9d9qW{*r3ocR$8_v{I7F3&(4lbE%b8CUB(!>fzK`M+ z^Q5Ki9=NPc#*oD&a<(uq)wKRXxMf*YYJ0#&HRNHR?Eq@FDePB(+Z1Ml-<{=I_JjLa z)wR1g0Kc9EqqsA-XHfkv`{0_sKzG#fbcO=HuyOSc>)>+;02?8OP{ z(TJ!TI6ydP2wt!&+Vp1swYgiZyQFkkt>rykFdh*CeKf=UUUm1|Y1}L|#XZ7&il?#6 zKGdsS+6hf&VkVP|l%3q`u86sTjEjlfq^PvGWYtD3vcg`B^zkZ`O_ttjVTtJZ_i;)@ z_Xd2ZA55X_O0N}0Z6Ux$Nfx{IG~}pV-oi66V_Q-7Xcld*U>>P@yZUry`FHbA?X5*9 zZ>Q{y($j0HPL+La(&-?M&S5jT-p@DA7`6notg1WM(zLXMK*}xs zEd@MdI?Vn5(3m0JWW7ZI$vwev6wAA;ES)QFy7YtSQdT{KKcLE1Ke~9(rPelym^b5I zxn^&&dX|V+C{(i)Y6Dy{Sqei2txm*j@(vBYWg)?vTRrAMuKfLED{EeS`iDi}FP2X^ zQ$HD>RnQa7ms<4L)iO#SR*pki<}R;$z)Ko@uFe^|A7!xTRJxRQ{NFSj{&Q-SElsMUtTwXOd45dv%5 z`J8Z%**VmJ#=TDTCz2OahP^|q^5XGysFy(0roE!{)}eX7my%{9ZQIy7n4Kl?ZUU}< ze5V>m@J*H8+{H%Lvl17NWo;&V$7((v8q+?yJ?)g0fQykJt3^s!{bl0po{62_sosqu zzkDfL$e$i_!FGTZ>Ol7-$09nsc>ncq(q!`QFb9b`Xk6m?}3c$@B~{ z_wI4j@yqf${e;39E^Mebb@B5%1u5JMt2 zyy#(+w`&^<({O2kvWAjl1+jJYS@2KQ?QwKDj|16}UukU`<~(S&VeJmUjBAFo6ww>| z6G)v_P#6x!%0$C7eW}E6H!6*isHDnd(nH)Qad$z?BZdo^bI2*?j>E$`b}yCFHi)Ub zG0(;3b(r#yOoYvuNWY5KkImgpri-kL46Vq>CeE>CG&eAp4QihtLrYO!kq zF3HJxQ(_O4^TglZS|;j9-S$GITI3y6g~~~%`h>!11uQCCwcGW9g4NdP3bW(E1{}OwyjLj5E(Vprm9!H zqfb~RdnF9NM6yff5FMO#4GKpT-tbGuU~KZSHX5AGG5cHKF)~DRLCXq}1m>|s|xOG9|4z@epiF<+Bt$Oex$sut8 zBh8^X<|J@vImC~5kHC4481zs&#tko(%uYn&2A!^x;1NDCmq}{VFe)7^CPHSG0&S80 zmZh;Vr9t7~9ji^%s39#3zaozww~YC?TPy?J853-hzV+FFjhI*Ktc8-J_3Y{`cnZQ# zz-lBcFQG$;&gj#Qy;Y1D)kCmBSkF`d&(nm(>0hOz)Q)YPqH?1^^DtUt3g1X>g zG#_lLo#UD0LH`1{{5JdVrmNH5-S>`aYO|7F=jHL^)upKz#EFuyIK7x9`1fc0h zAMZeBJ3p*QXoK&<(*(?K$QG_;WrBql>bqW4hm-5qh`{8Tpgic5C z9P-{2{Z*}{Pf{kzy|>hE@1_zN+AKgZzW^H0!=3l|5ZZg;Px5OSf6g3f+4Tj zZm2GA88mat2nu2lrz>G&0UPeYMTGUG{x@<=RJ}jj;?~>}xJzNVJF zG4~N(;nwHxINwrMdzJnf$BBrw7qy0sBMiD#=YSI=3fwf{73V8}}0pW4qKjQj4zk1ve{B8-p_60xu&INg{oOwb%nat(Ly?nCt z(2p>^Y{wJtnU5|4rmv3xErV3#xG_5fo!lz^ub^k&%qEkn-1X z;x3s}DKn^fN1IV`I^&r5qc|4OfzX0igI@l)1k)_e*$oy{4}kNRlL%KI3*T`?^PUOc zp~&om)&0|OF7LXcL(&n1{+4h#Ut*%|rl(X*RL=H%LE_~q+rZmMvSx;wG9r?hq3B!3 zr9C!GG-PfIZ#C>EmL3(Kc%?>`2)7@xbm*R3)rTqirvsjXiZO&5=6Tf;M@56j*vP|$ ziv7i5oQV9J+K-)b?;1`nO{2TxZQ=vg^QZHVq8oMvz2n*i)sM7aoM%+CwzEL9h_eoH z$@sz^uzys)s7&wp6)?-7n$ViCoqzoOu>(JW%iSLI9`X3*UR8o=zu5IY{k{f0!R#@8 zFwgWJm=#~#+@3mb31Inj$gB{u(J^L0HCK;7etdpTXiU{$?&v5_nRL0xQyNpxPWu|> z{KH}NkSxfrqr4-BZC&259s#aj1BvJcub}e+)B-kncyXvFqIu|)VC|^R>=NLF6AIh{ zSo|=aU=Ku7KpukB0;#c zJYr#&Kc_glh&S-(yIk*V?L8x{;{7wqBB-W;gqpQCbO*acxvxdkRYY4i!AL3!YPWv= zEhlQgkW>{{$OsfsLD_zUS6Do1{WWRrfP|8F-9Fui)2Cl2=nb`8$abPAY{Zh-h@~?DU@zA8q7=h9p znbwc20tXWfcY2MupnE!LUNA)R4jLh%Q5)3@p=I_NVP#&++N*zbHkv5YXZBgupU&nq zVwB30xe*r79d<&S_X9183xr;HG(o`!0)l)6s!nP z+0GIc%@N8tLLi$I)Bsn5;{L=1$0VR`Djm4RZI~9(1*`b$)CJ{&Ymjn_3E~KmMaPei zNlureN9Xm05dByPi0tTGzJ)f_=nLZlYy@F!~EkG;Dr;LW^y z4YHUxcttnRFzYNE{GBU{Q24|tfAl@~D(4#r(w+UCcHgQcWa@Bi*Xv=Qdmr+Foz+7n zz1ru|NzpfZu~KxV@CAG<99Dd`gm4kT-5PF|dq4g`IxT%yOpu16gCjVTd1_6kb;*N% zzx1b-y9;sh_l#z;U%iu}5+DboafTC|&OMXCV_Y2s!qPHbVK>lwPUGf{de|7BGNEpt@sC=XTlO8Rwb2{su4Ik ztNfQ|HZylAeWGvZ{3y2ia-GLBciqmj=?n&UME{W*I;oz!yweaW(L_08kcC8%(jP9zKOYY=i*+`_Nk;|v!ZGU z8J%r0yTpnaFjG$LhLclrZLPCb!Ot*NnhI?obI*FVgWyMlYvgB4es&(Z>Q!*t3`ZHc zwsV#Vs;{YYe9ua@3aS*#@`U#g$9OHt%Z)cF6wBfzsAQ+EREuzs&o0a|D=nEXRIZ+u zK=i0W_5eo2e0C0IHW|moi6vSjMC}e66%wLE&Mg*JJiT|3Hamwdo&4clhH@y4 z%9earEX9{erAo(9tYlWP$xz`K)KpZb%=Idn9c4_+g*lRU@Ty*G5Ir&gM(u+O7{t%m z*nAXJ$n-rZnbzT5uCWBc<-4b!6}7p<%`SKZcgf|}D0OQ)ZweS^Ek&$F+?R6O`cYkO zXNjwE0J}Uy-Ie@k>z8e3KNit=9NXwJP*&Zjo@Lg6YShpeQcZd>n=+P~~= z2ncrzZxUr1QE!4OdCwI`=@o%d=DP)Y4mUaLh zVB!#x)l$`<5ucI}WD&k)4I&&{Rom~L8hJ}bfu2O%U_ATGAKvX$E4)@=40g9#52hgKUM301a4M# z7S{hJaI^mVI*^Koy(ztzovpKosgtpzrMe;#T% z(kslJ2w46ae|rcC*|}@evazuc&@wZz5HK+?Fc2^@FtF*;OFA1`TN(@6np>L^FhJ1@ zIvJbVIumd*utL%Q^Ob)pOpJ_B^umVr5~h~s7S8{S``f7OY-*!M!0~s;KkxsW(qYQ< zS62Uz1dqSM`v1Pn#K_3@@9F<5351D>@&A(oq8leDKS+QOa{Up(d4p`y-`|w58X$9;|GiDACd(sm=YAc;egb%2RUCZ_DLiK!z!+twb1)5K*hP_0WqsMb z%OAfo%S=LR*-43V5;wNSD%Ky;X0o&Qym9DloOgQ~4Ity_()XJC%$O&imcWd%(!Svs z=apyU-N1Cor^`m?KD;Cv)!(&|hH#l%azjPur5ocikw&fZv4_^aCoiP5wkqFK)LKm>Q>-Op{&38Jjc`IT#!Ubr9{c|U9%Lg7 z7Qk{k@=r)|1YIYgEf$c}&q59>#Mqu~MNyh>O#-&FobRR#L2LEcNSa5I?lBj0h4Asa zzP|r@U+^?HGdFiLH_thE=b5QmdD?L&ozDjvB=mT7k@hMLp@s0ZBMP4S%M_9?u8(;Y z_`>7PJ}W)d^;*^5j(~#~>4}Q0wLC7T)OBk=w}gVDN)g+?pH$W9bRFK?nZ<&;yU?!Y z8lb3JRP5CHZuK}~s@iQY-^8u;zj0z>2Y5pOD>V9VL6$8;5WHV>Sv~LV#phlt_tzAN zZ*uTB(kt{`SK~V$6(s=&K*59G7rIUZ>!=h;!Y8v(p53kAsq-GuV&_c8yFPo4fR;5x70;0TkZmn(I-fuDtERqL8VRwy-k%G_gfmfv5i zF$yTW!LEf6T+x}cl@=INLOY_$3h16cWX0|B&EtW#qILv$pbE=RC{c!hL}pnId!d?; zyTa(iKTlduNTl-CPSjUno=-)(Mq{L!V+pgPTNYyksA10pz5{bcR`#V8(Z-o2uu6Bw zHUI;o0Z7fp&2D=qnJ29rN*iHj0;j?zLJm!kKCtO?tS2MQjk607TA?|Et^2Wx2#B_w!5!Px*qb6A0UW*+D@Z1}(TGk^8+(*N2}x-#@rw z%nxjNqV)H26b>u?WHg&qe%7c7!&)Fd*t2_r<~V>I=fUy>Ksx|D__M!1$n*&_t)Kz&OTN%PhzdWN3nJ%?n!u`s+4JoNs=6a$3cmYu zky)F(BmHFS1s&R5`J-%Lbbt8dLRZs=c z_`>&yCy_|Jjb8s2yn?+-^^O!$1O#!f#pD0IO9VYfl@?IjYq0}={f^=Z+ZAKO5z2fc zcHR4!n-Fe7WgVN?I$GP-(RTTvIkdHuxWuo*Uuz>wmDg~}0LNZ%-AC~OxseYq=?&Wr z^iBTY4bC}=$q^6jBx(!A9(#V&Vh?Z6zwg`sd_Qw@O>IV%LY1RPTdk-6X=&pMO9DCy zLHa-)GhgOU_Ty6rbg>ERZ3SAJza4cev?c%DU++rXYnJ(Do4#;mZe|Yr1UU^TIB52` za_@8nXlX0tI>?56J5s-|c5mgj_O{fSm~a)TC?rV|JY7sJp~Jw-ABX%pE|!D7HEUxK zwznmcd$MbUIOiA;VYX^Uaiz#p?k$|GFr`3?yv@VSw9c^3`&LO+(O#LVieJ&K^r>qj zcxiUxhhnNg{NT*|;7C5Zi(KaePjSoeMmTz6-x zeSi(WCB&W4TKbl$6RJhl{l`wsb+6lg?LPS06GZ0*@{6T6M$7TdecdNcZZH1+&H+C% zfl)sYtGHyAi6rE9Q;-a~(->)8H3`7rob=NKcXBrI@CT>R_8yH+(uBSAZ$4Y{XZp>` z&5g|+kN(nEnw@F-UG+P+8@pTnKRbW;)qkR7N2o^VMyMy_nF@01dqm$M{%IVKO)^)N zQcbl=KT})UsK`J7wS2U@*$(R_xoa42y@7?I?#ape(QWV86*1+`7nPPUc~JA`>flS) z0hMn`^2Mh!x+6nd*DEVijPGE17xd5+XCF9%?TX5ozGBaOv~~>hj(a=wI6l@P@EglF zrfQGtSHjp*?k(FF+>kg#ynY^A10sClN*i|@w-tRp+Yp_%P<`YFisXl+ks!H$C3|An zUO{eLAa+~ptL{mwPTB`(?l647B1fqCEuteR<(|2~ zevA=6R-aE9I{z<|58$sK@Ptvh`#FQ?NVt>B1ak+Fd2cZef*)+9f?G|o9AegOky&K- zztNLNeiIE7kbdFX^x{kdT}FLZoOtf~gG=C;Xpu`K=I)stiogeT@+3>PqUCoeGJE1#*h7!Ui_ca!19bu)e&NLB{)F8FD4+oZwYc)^ zG6nQkB_T}qklfGA3BLVcl>FGfh}$8hdo>3r`WBd<@3INfJq5nDK{lXN0t)T&-jl;n z_=TP7K?wCKu7Ih&N!x*)r~Ufxx5{weS}}Yg<%MfW<0gIVhuABa<6t(nPGDtb#ZK-` zcJJwY!6dfBtX6ul^Y#d(pGMZSAx=3I~BSyY6a2&`G5~y^^I7q zSu;^~%{+-)(75{AgTlPnFOVG&M=vl>{6j?)?zwBjcl48QlObpe>~H9}>_6*W&AG(b zQQ{C{7MK=u$|qb8;ux)%n+)UX^hEDg3vGI{3gojx&Ex=}D#1#tmB2$EMBaQQ{|ih3 z-yvjyj^`Woc$^3J@Cy#;=2U7|ViJ7@zZ{($o^l@}?Q$0(>H0W3+i_ED=2I16Cd61# z;yncgs23l-*o{BVtJP?Yk}OycT-9QLkQF69zo+sR2Qnn}Z7GE(D!&otcZ4qBe!`pSZNr+5%Dz&5Tp-R*1vy9SS zmdr2|@BUT>$HkW8?BNK`%;ZM1;rp%%+gLvB)G7$uXt7BFd)DbZ`Dhf(aCIBt1(S5v znrX4T+4VAnFxRK*YaG?xiUhmWy%7lS2KOm_+t9_lDq`hbkqA1w0o_yGs5uP?cd)}2 zN!`TRymp-sw<3@4P+n)VQ{>>#cna=Fm3zEuEU-!4^zJ2QUCv4|(|5GhVZ2myCyN`%YtjkKp@ACUZk|6JS8KBIpk@iuXAi9eQ}6ZG z;Vrv5StDx^?2@R(R}mSiYr3q3IO6BI8%qVG#4J%1?&~AcDp7HYTiE+{@}x<@vau)t zE4uVX3E`7B9vG2z+5UnF^%8|-!r)s3HSTEYpoI>?hnYX^GM5mW*fp@<-4}f{hNQi} z5O-u-;+60`N#DC=Zh3u}?0rdhN_`Fvh=FI~9%7>yoc_cV?I?Cq-5_ZB=9kmgrqDb+fGsJ|{Qm1%IW8TAXBv+a`@fpM!c)7AXzkuDwbJ zssi)DX>z97=PByYBf^W>f;xG=b8;&Ik92;}^Hv!<@f(Vh`T=als*%A)@ibXhx|LyY zvbs3=L7)IU@7|yK2|1wo87CeQ%fQ@2 ztuH1O-f-|N_?9aw1wP(0n?p}LFQ#^7tSaWKtmq`I^~4*?AZjT)e?7;5J`cSXIAEw& z$mt331Naqa*AUgigJ0=J_z)bNvq*8SpD;=%Q0bN_i~QGsWYKWtE$V1G62A?;O^*c6 z0-t#kZgM_NPDl|YIt!?*qC{P)xH+lqOI4LXE(jD>==4nGG*N3HtCgUQ;|t+JBAH{W zZDqIxo?_-Kv4J^Zks`k-gbQW8V=vb=)LY#6sD)PtgggdiEDO+8FRFFqkZ}=30VG>- z!fF*9KVd7M_n#QM-6MIsH5bKMUVyQS>_dNLcW7%@w6^`_TWEQ%3clxMws|Y>D@Er( z)w=kmQ-rF-&&u1^PiasE?(t8kkZ3c{E-wgd)5i5^Bgd%G`kd9A)iDfw<~geYB!*13 zfch42$~fvbo+pqr#}We=Dkm{IBx;}BX-v#>^O32$5Dui6U?Kx#phY4n)y4B$j}JUK z%W%xX^|XaQ_K2o&?6kr_#a@^#Sa~KZf|P;9rmMsPMrbw@anc}?P`+tou-0}KZBt4N z@)l$4+!tijilM@{t3T%qXV_b1EErMu83gv?q$JI@I$RxQ*lm5RCuUN*JU3j#xutz* z0iV&oB`DX}nmGyuTz!I%^_Wbb0ZZom<#@g~t+gN3Z*$$?sZZBK#j$uDgy>n$mXFvB zMv(@CPkp~Qfd;aYv29gq7dB1WbU*bT4$73q_M$hze1ksez<20KlA!1=q}r0QnnZg0 z5w19BhU{s~e!kySf@etx{x1MIK*qlZ`+!l8!Qz)um=3kpjT+}fdJz&E&_ z$CHtVohl3xt@*~*;JQ)6R(hEYfRh`E%ljP#owC2WFZpOP}b zK`j^$1Xa4(oTR-`wb|$Odx_E%)yJah@G=|_Jj+)J<~>V) za6dMFwtDnU^Ym%?nG3gW*%(`>SQXXJ{r10YU4C-#d-s0t@&nj+7|*CK8lAfN(w<*m zkp0dh&-_CIe&K4T$YkIb4qYOvk>ZWO$`(NULtI?e6V6Hq$5CF^0>%!=R*B1TJzOuh zhdaqBxfk&F$s7C-UbF86WuuWZ6`;-ba{FdQV``&#v?-UuU=otaRa+PSgW|q_EKq!p z+QexP3D3Y>`|&FIc9m0GayY${3Qidk7fpuEH$9v9`(%<>NJ8U-W<6R1m&1H8vd`^|xp>=9~1=n=f zR>yWp<#Z9^aJzIarJi#Ug%W@&46%jR4?#E7YT2qQ52&$vh|9}5QQ_Y1!nwFCQNlBsDFK#BL>wc*jjpe{C(oUn-&sHn+4);GS7>_9OroY1j2DcE_Tww;p@qgWRm|{(UlDcJ0DxZmg(&9>o{n zN1ndzyEpb7`Qh6;R<8W^q3Y>Yu_*(uej4Ue3G-=356f2B+2h>fJn7_-Q+ASdU=$I< z6brr@PXVdE2kaA$l?5n=ffznRMtn8c8dISBXW4*_MxrKIp%!$60|x#ZG@mJ(4F;oZ zD&~xvj5~~bjJ(n1c%DS?sj&e}wa*bpPEq*{w8uuKg#J2m7XLMsV$!^?Vu|KWR=eF{ z3l=AnA{Aa#cAdtvf|mBntE8vZu2DtZ(F^#0`_|{1`&<1a8YRA_4dj;(G)VpcrP)T% zDhrraDanx}-yqCTaG*|1pjIrvE@};^6iJy=%1TZ-U|aN^|E^YW#Zm+gHrqs`Dz>zk zi-mY2X?*0$?cb=r^|xDg&k4F_->O*AF#D?et2h0;`r|6TKHB*Qy!y4D4{rPJqtJuN zV2=(`4=egFxot6COcwhV`&Z-DWVLU#U&sc_!MVXl6c2lzQhe8=BG~7*2Rvdhqz-tD z!LZ61Mgbxkh2RhwmMvh+L@9QHuU zKU5o*4fG1+7yV28d;Glrd6Gc(+9$GB6v=$Mn>Mz?-494BD)jABsWX+1MMsdoHoRY3 zq&L{FH5O7SpkT3m6sWSDo(GX5Ym2atpZbu^;%Ga_Me%jt1{L3gQSHPx?IVoYrpxqAP;{vF=^;88(ZW#etZb&m0(;2< z8=Zm$8psw}ZNVWO%|mR!LPNEWK!S+$m^KW#r-{-|wkq%Nd>}A;7x!=gz zNhlI&oJ1PE8iLB%Y#H>-F>z$%lTTQJvs6V4A4}2vgVZocR*&4*JAKdeMdZX6r~6X9ae z#wOH8XZcI>9Q_Pf|(G{&=Ifn_0j2}tjCzFJ_|IB{tx3iJ`-g9KMfrWDjU*heQd7% zVw}!Cz{+%l25P_N6^hlUl`NE9<_FW*h>b+cAtRqaNkwWdo=eoGwjn%CKHk#W;^sX3 z66X@v68931QlVEEP{VK=zgD|ezt*tM*z4~N^k#c=TZOx|oAsLwcN#aRp5mX%i)MXZ zU(gqQd0)X-%;GG`@RDB&B$Ju^WIUOa`J5}~&jkQz7A6&E=w~#{(=O026c;2Hqo@mXwniRNJ(As- zdn!Aec%|Woso}QMZPtr~Ru5W3JkR2{Fu|KJ#?PZ6Znms1KH3C$d`-aP_doBWH3iqB zRsh%SI)hcGGo*A420o@{nKFz=5mF|axNyR%CVR2$4;3&D0I(gxVOh+YUN(^vCM=nr zHJvbVrXjNVxxik3N~DMd8U%JX;+Gr$)L3ie8s+Ilx$!MH;83H~m}?wvP9%M@eHWk0TaHR5>`*WOR9?)umH$u_2F*hGaw39L^<IT77y;LC7 zlREyr?KTkf{Y)b)*IuPxDK1a(m2Obp{VCLkDqzXWI<3=K;&aAQ9(IbHyRj+UNC48< zD4F`fPGg9<4suL+KdHmzcq|f&6${Lgq1FrcOw?T2d-27ah8G`h_RIf9=h!4tG$aSY1tR-gCvKiznx2Z@lWd2QGf}gj!Md zXYo((|60$Ti<_@X`~P+Az4Pw>S;2%4=DzL^1YyRoprq;n{mKT{5}Mh0RqYc z`@s4Gkp2$XRj_M73pfPg^>aqSYxki*FCGAL!h(?qi0OmMvE#?GSvoVI6aEM~q5cy$ zZa#WcguN-}kv)RJXw-`uzdFzrRN9Od(QR^jJYJ_y8KfFGTBO;5+@b=@Q;jU&pR89) zv3j-JU$1ts>issB$q$Q`g5Icwo0p8UjMK!K{<*xX<4SRrf1NnMZ#HZ* zZWcG2xB9mP9y2~B?le8-KVm#0zT`gQf5Z4=@khQN`~SoEuJ{MzN8(5RzZ*Xj|L*&{ zKdm;-_K*NrUNA_==l6Tn28~B;_c}awfv7wJNFtAIz27KGqTlNcnMA9p*MzB?*)T+2 zmrcYEriwq{djg^QzzyL;vQ7|Ujn33&K-(!`5nzzv z|DJ9ZHy&+QwZk99IpcH>jbTW8s!^<=_OcCBBQ^g z5;zH%@j1{@5*m~}A`-ELBrJy(l9l8pvQ644JuMxPbT~AG@00U}6)p40<$eM>iVKG9 z6FjC#Aq~ZlVJRS?9FoDH`JLA!5^tDr0@{nOB}3$>oV7a`Xml{N<6s!b5mKu)3n8-=wPUh_*^=xz(GbbTo<^9tJ)-NQV%ExRNIB^YIP*w@dZNw zn^M8Bz%;!OG#CPEkD#KA5u`P$ARz&zN97eg1c!kOeR=dmsu5+x49N_UpUJ^=It3Ey z37_X9uh%E2_X>h?Z&|fTMUYBV%~f%5uMg!ecCU4fd(){vCJUEd>)tB?U!U-Bo=dxm zy~RC6u82f7;vySck&U<*ibmLgM_6Tq4R~Z%;p7p#8P(xJK^#7xMW>Zm+OZL2)<3r)z6&Ds~! z2GE^C3cMFLtc@3x(Wt>-zGQy&9Wl}R;SH;DlcywZ{QM6LvbiJka=gtLx8<7?S1QQp zN8!e`)x>gdI8mLlIPQ?LlQ&lP0{)VhbA7k@6Vd7~R(IKql+I_=ey#W($lC(0$n!M( zv_|5JyAwooiY_9x$SplB>xEutuWNn74(ATnpmWfr&1BbUH)}a(OQXB1rMKl?{`>sN z7GB5QtsQRRW(fX($N85KplL@iT=1YFtT;eCpxN;OFm`9l9Zip>9ZqLRnMiYnLNSm35$Y-)v)7}-s z##kUmVnemlvPf?e6Y2Tb%;Jh|V{B9Dp9AxjO;L1R=buwdZ__C|r={sMfo?8HDU~Qh z6Y*rcAAZTTfT5Qhy zQGZ|E4hu_EaG9AdH5GsW&Y?x6GAzYG)dC?<7eig$@*e{k%)9vq)zQs;5B+6e_PtXA zQ!XKT*F`?-4JWr&Z+dg*f~)pF_{OZ8*R)zJ9uAc4yge7+cHZ0dH&iH%M$ zFPw}!oin2=me;2cW{`S&KJD+DGjgU6m~XW2Oy$gn<&p8(qc$(ho@DbVb*iX4rj6O7 zN{>2&bT&u?mm-5T4t<8Y4(rINK1nb;%uJ@>hm6mTL&?`C#2l%EAD9^ar-8ua55Kkf z{f+BJ9=Y?!HwUh&o_?YF?2&DUarvdMZ*MSrtZpq#LjJA8TdQxM7^?nxN8eM{Lr?wV z`Ll1}c`wYcTRb_6aVXENhmqGI585X;J#2nT^|a<`k-rJwtlEsXsQ3;+pFo@~p;SBD z16-CPh!Z*LK$JNJH`7NYr@LH~e6o-DOzomtQWK*(peE{>-m$@=V>L(YOMOZUUwFNn zv4?uM-7!ndpfhEV2Rk#^s)CYT0VPqR&tMmU#4Ok{$idq(U--7!c;QL~G@(gEL7Glz zaRBj}m}}c?65}y4f(3j>bwl+J)sL!o{PN|$9ln0+eb*g$`R`k=hjCd`eY^Tbbrrr3 zx8sgC_s!h=RQ1K`!2?@x1D=8}e`X8FquOt4zXy4AA&TQyC?m%xaEM_@gslYBEV;PLxGX9IBl>XflCH7^KewVtRB4=;+#OCIziR{9Ned45vzKMzp&#E}XxD)F0t^Cxp zFO45@&vvFQYTzpBk6HzklRyPRnu#M(5lj3O*YobAx+=BzQ<{!7^y(<1JiEL12JKVB;V#kt&4jHb$v7 zR%v5^$F{4u^aysLFF@uPU~N`E#r3KcE@{+lVd z2MWgKk{bw^q4^Z^tvBVIAcVY`CVw~(&4jag+~kL(F_g}ua3m)+Q~P$zt_9KDUzg2{ zf}^#Q`*kG@T(#d?N&urCwlb20;^{+TDJN397T0O78-uwJ3}P^8WAT3?xG{Qcw%ftv zRZ+VEH=m0QsT8ZK4^@kKN$(fEu?vf%FN}j^{Kt2XZGZe3?CjaL=IkVkSN-a1yYFaQ zPBws@SzR{}0I1v=Sj$~YOXa6;+&C1g-g5UM9eDshb^E5>7K*gKRy&2)pjVL=rDQLX zm0C_#%WXxqTrMtA_wVDs%j#OuhWO3-N1J!% zpNM=f|E~Mp_`3-W-!?>kcfh!^rHu*)Z>T_X`9E!rLLPuOBrboUSq>*4@%Rc;BU7VW z-S6RdBJbya8&&ZU9Mw0AoK5L*TmANkJz>i=Hg`s56&B(}uEp_(2&f9NZ9ZNc>1pe2 z8))0pCIFu_cY#7vxg-9BE6Xbh=Xdz$=C?#1jl7pvNo{gl7mVz3u1C?M>{0dP)+ujr z-{9%>uZ`Rg-;lUddAH|o|MvVq+mEyFXa5lSN5s`F7^&P3fhMpA!}$o}_%te}0ue5h zY)$96#!#YIRNIpYhr>=96V#^NLES^ZKW#;pT|l#e1LY|NdU&8?8p~xX)L*#7i#7h7 zmw4y%sX%MGiRppPqFLtm@B~3}lIM6@snMGXh{qC-`62vMIhtmimu5_sW}KG>-C!^R z=NTn>Xxvq5dlCN>1<_LGUP@hbhB6+Y(9|d}U8Rq5T~nRwnkd%+Z?scex_^X8*?!7} z)czX*gCje_f?KfHeNbaic1pGoPB{Ho<@UHdM5zQQOQQK$!Wqlstg0!G!~R&FE8wO) z7xyIdIHzdLqo^;GNB(B6mr){Yo;-_V?HNt|5v9i9XRpZ(SiK@sKZCi(pleG{?M*lM{kKPDc%3|i(Y+x zMc3NCLqAyX>h{TtJmjGNg3Ir^^2q#XOSqrA_A9}3)ERm1rmMbXRH@3h&$;O-`{!#s zkFTG5|2$qnc~4iJ#+~6FK+PmH=2Nn&)u{#!t&iil&#bgMsXVj}albiiVnq`z5>_O% z*vyK}P~3-6dNFdFtUr*{@C^pVdS*G~;GuRw8A11AT_kYRw~5 z$kUlJm9nV(LFH(Usn{qJG%@Q0fJAyzpCPSgjUPsdPhw1`EWGEiS9yg3`@? zWY(Dc=9nP4-0ob1#tIG6sZ>NQSYhPgk_NY$*9d9IT^h9@ge_(>P>V9o;$6_&cs5+} z84C`F+cks**|S}PPiRhSNROsh^Cu0b*;rQ3RWDI<>W#t>HpsrzJ4Oi`rQH&dwl7KJ zY`UB#X;;4Rbnv^I7;gZSJyq#DH431=Qt2DLsPoFHAENS{(Nn3hAj!D*Rj7Mk&*>o; z-~Z9g1a@A#KwV4~+()goRCl+9q7~{GwOFV>scxkyl`2pd$}vei?hl=SW7O*(*WqVu znN0A+F_TINrEo(u;Z(b-_q05F@x%)!qWrTUyP=n@@y?ty6B7w@b#<9{R* zX0=uyjq=W*p?voGyS7YCH{|Wc$=$ojfk0zeC+Yy%w1d&0QrricBSdD_>GueVz%cum z5v&(zrVla_4Kmmhv^Y8SQ0BMS~+QR z+6oHq9HOn9(hzmA&JC^!ZVGb2&>G;V9wk=Fw3QO(`#E|8Wk_j3+44JpX^&Naut(~l zw`28GJo-a`0x23?PmQyRUNVcKa(50(@Dacw#q5G!~(po5ddXS!=HP6v=PG=-c8Ig7jc2+zF zegEKC`4|P}%$1f(d1Tj)2=0mWMs`H@L{3K(Qlu+FWST^%nrLn=u)MXco@a9PJRD`Y z+~{%_oJqfBR!E=pn`ecCan}^dADpUl=`1_oRZ0kjbSjHkvjdQ5iKB|BqewH^ST1s_ zbvnIEA92d5l9O3{Ep3GzPTb|hJ-N?so;Y&K{Es_R$ags6yy(UR1gf>l53Zbo`@DEu-uSg;|EbeXPRA zPWsr3(%R%WPe9?%&(RjiWU(;D3aqE+u?5Oz;k7cG< zPqDYSqo~O6SZ3t`I2tS}2aCsxWUz>Ppklbl`2>5?Zye%`vMH2I`XjSKLeg)T74{|l z;UUf-H-?+y4O4Rdrm0>OZqBnej)cQTqe0`aM^rlmJSbqJ&@1c~-V%6Wh`b~NRPjX` z0?DpqPqH`34H)1g=9~GY7X(!R6U|Dj($0^4#>$=Dvfc+7+f+t zU7V7Sx;TdyE0j)!+ly0}di3g$r_u*10vHXrr|zX2^QtrRqJ;q-25ru(EHXbI<)%EI z{jK|FUn|)S+NKMt6D@LH!%vxW(>kr8X?As@by|}#;P%Fi*qS0Eug+f3erxsSg#i~Z zRy<~$i*MT4cYD=WvHLuc$n+I>-V-z2bv|2BJ4JpDeAdJl#`r9rmnog+Wvv$A3ubx& zGrfR~9=8zJ(fWAMNCiDT2Zb|oGd*u?QVDTmkT<6k_+|yZR)H1KEXKG&<+{m_m;13l zD!FlwyVp(JW-TfotyD%Tl`Q0tQ6yBRWDg?$*xSd%x1mIde4NIcgT}bPH`x8=Mg?hT zQq^zcGS61v)rwmbL=kOJP4(jy{F>s7>-7cMt>20C-PqUL;l0?hmnudT5~yFNnfAYnBI=J zlkMDqZNNR?8Srk+Y;V-lD7}VL>y%zi`bVMH!-AKyTg_g(&z1C~cdB=49+SQv{(3}f zPU#crS?Rg?CHeKq_366}Plcb&f5d(0)g^@{KY9sZSO8~PC@!@hz0^2_-Lk2{>36;4 z@w)?VEV?BaIeOCdlAWFmna!XBwY)LTGKC-i8*0opG$BL>)%_Kh%Q?hNldbkF9a!=v zAT{$_!4tthfjS@Jtg^P(hv1orSh%4QtEST*3YZ!{uh&^?NS}9C7ojNZ_-mys50GCJf zTB}~K9S@mz*JI|D{x3z%p*Xf$uTfI#3t-|iZuKUT0ZB9|RRL4biii)fG&sS*k= zu6udw#tMy%f3Ese{M7V$g0FPreij&CB)fLw-DEenTl=Vfhi!*@hi8X(XXxSZ?u@R| zT}k0S)K6U>vNjveM(#;J7I`eKsC3hSx+x*KO6r8Ggk?>M!0w^iTT^l~%%UkZLRFgW z>XJ_Mo681?Ce(f5DY48|icp`Mr4+7bI_i3}l+sR1{a)t!y^Lmfgc%-TE~O{g*G(4!FcXX|1aR2L76O343Y+rw zF%vBkKOgjx9l_X5mrq+D1(w|Z#!ENOyEbTZ=z~G;u4SDImsWq3$vk#T%bdJPH0!u$ zt3UesHM26UiDcvS<=@`8)30&k>G$4uajEl)9c`tBeUCVd1}DfcYwf>CJO2vu;L$M| z7WK(ykYPR+Gt}ys`qtSjSYcsB3)AElx|)Z|Eepj1RDoOQSTJN^(F$p!-3q3-XFvVW zynJl*__6HB(J{UJ!Lazl?3d+}%fYm-ou#(($}k@vF|FwyFSzJRH7hOkYO&Vn!M3Zd zc%~Jz$H_p7@NBIIE13FKFjcHzYFS~agAXO^DMO`D_y_mjG~IsV~p$=PjAmz%>hv3mAk&XybNEtew%D|JQMY5QBY6ShCuINOz0&znd)gg=qfk`C({ zv%Wze@galhTJ+Lmq=wk(%M|517L6!lby zBXH^zHaSWNb~DIk)K_8aZTqQKHRWw#z@n7Q^32$Z6;0t{3ybp4dgq;dA~@L;4-ZUj zT-5Nj2{&XMN&c1U&!&z3OZVhtV%hTilI3Jo(0=ud*p)QSGP5?qZ3WHPj3#koc9SfX z*-EoA(~vfgsxc~1Z5U<#nJCibDFJCIiRJA~iH-xzJXMl5N^E)7HeXV)T$O30d@8Bo zlEysp^T~9spp(^bQ=RPd(bPm~cc}KZ?5B-%I)0NAJ6WxhwQ!12zp6dWqb!KYqhLSP zi2(HID8*iHr;Y*9*6pa&@G#KEQSt3M<;rWc-fekezO)6Kr9f$*{FM5zhBK$k8_~x6 z-RK_eJw>I@Y;P0G17%+Ay-;zXvQz2|UDzgHO{l&VJCs|k}~NL@~F_>n9LMjz#ahhy4vtzkZYhub<8qpD~h@<9g!jF z(Qy*X*6Da%yORbHlG@T-=Mv`{Czo|@auVlP0wShwoNJfc3A}c1W*|c{MHn}#qfETE zaX5oBJyDd`>vV+z4E$NfG5HtpN)$m+`b0wsMFY`+=#D5aM^8t|Komzs+9>)0=|C!E z0|^=^*@o~++3(4gnpCo(B&oVo11e5b;nOPIrNXL?$sN~^tFivn92)->M=4mO@%}mi zw*xr??VcGuRS`$}z@VazIa8@_BxdV^V?U?EAW13euR~?fOw)@Ky^qU1%bLP5gCg4XO6z1R?fq)plGMa&0J9pY@s zS1Q%eK;3V+A5>Exa1B*r`^#p!7POK={h*l+Ho=<$MV{O*vh1*-G(m!Qr%Fagvy*@d zOHN5!a=`AT)b7@nG%%GD5;WI9u7O+)x%$7U5UMevN>$xzoB(WDcjYN<4(oZI5eAFx z^_Z!x?u1v;m8O)h$@H&AS|%;I#h-lRlZBU-qcM_=MYDsuH(WH)Yt}f7qR!UddsR~# zemFgM>Vnn_@4U|By8W7trm5=}M7CZP3Z>f`n+ur*JCcD5Qg>Bfzhk0RrEhP2XzJH- zrQMb8Da}|y{e6>w{f&zIkPUxr++X6TeOmXISanLQ!pu0t%uvM4M8rVKe`cN#DE$5) zt13PYI<`URAkE^q?$p}jd?(rF$D&n z_(Qt*cud*EEzIj-WlF>Xmm#FWOhsU(G-%h9tW$M^O;@*gS)uO4(CHlZFIj74u+{2* zi|2MYh8?FJoP&BJ%F_xom)lAc3)rz=zoMnffn`URqsP(f*x}d%4OP0NUo|U)lYV79 zY>n%uSp3$h&?S{pgK$Kz8@o-N*^3hkJ9M~9hkJCrx*fVby3;y^ZomCJH$>gWDz|^( zcmN5HDdJ#$hcEjY#$64!xC+y&<#MCj5OBH^CTvpN_xY3stv=>g;N-`qyTx!Xjdx6{ zPUHRqr20fO6LoVB%eR~DT@S~0ws0sTUPjh6th%D9{ zzg=;M<4))H;G zFGsoP5Z-lYQEDKFgV0pg)3)Z_!DoXnQ~X`OhUIWc5ZcPl9kcK(`d!T|8LDQbsXm(3 z1^9w`QY~u)ya}+mY=YYeMdi*8+%d#8$vW38P1c3GTmvrRdWrlyQX(}s2erc~jZ)>h z7+;)D8|VCh%b^_dLs~*}xSSjib9hZ|dv14*%Q9tuA` zC|X(JSBxa*)kEAslk=j11WwSGwmaN~?Fl?L(VG}f98d5G18tcYch@ASm&QyvDRHB8 zS?)6VvOO^7ip%JwUahWhnPK}w)9^GV$)`0*c5Jlw+TXHsc4`Qkn4d>S1N3!VW~ZJ2 z%g!<`H|4l4j&yODE|ehDg?7N@E3h2y%8mOtY2i8gj@;FYFMA%ZM?tLF2bhIL;;G;V z`OXR>ss2-9s*eTe`%?9AOP_d(EhD0UhMG0~<uwS&$p3J7%(_t4zsRH8xo`FAE1xE? zt8m>KVYWv+hLz_Z!Etfk;$wU6=y^3|;FJo^n7XO;=o3??rvt&9xA!NLDr>I!#^Sx(p+lrSCK9esz`fGeq^6TAOj>-z9+TqqHlrwq< z4qIa-t4UJvoIg9o^K==x>dEJIx3oq#3uzT?ZXK%|dismAd zH_a&6?Yt7uW@qgbcLd~;5&4L23~hQr*)YAqf`B>(7H{}#W%|Ra6Pcb6nUdfco~1>e_v>^4|5yMj zB~rB^9!rfa4)VyI<^dai(tgcyG)s5Sjvdn9F0C$H!^f#rN>N{0@GQSMs0es6dl-yLCj@ z;qRz>5h(VmP|Y!WFmdVZ!LExJ@6-8b?hEiUFIl|kC5ko?4|||COrv2Pi(W)-t{L&j z$~Av1e(X8#5ID2@i`7mo*k_I!VkGK~X`;%Q$!L|354$C7S3}9Ef|5lqO4!3eV$(V# z)zV*)`pcE-@LTA`hwlJFa65Z)46ANZGQHa zvjb1u^Zl><{iZ49UAO+I`l~(vdgk69if{CQZ=M5MOW;Fel$K~<7L79CFvS_Fi8}+> z#88fj9h(@+F$Km&abVo%9iTFq$<~0C>X`sDtpoJaEiG$^Mb2q=y#QFpiDH0t40Gda z;+x`JJfU*xIH1yF0C>R88y)^{es3D}8S{0IQ*M~vE(X`GQEyTcHQd0dgq||eHStue z(?0%#xvK*diBV#vh3DwGK%gP{g^djN2iSA$Smm6T8Z07-NXBN;Y?O&?yq#Cc4R}cd z4kZ1~c*vCWJMIq0FRA*io_e3HQyBIcg;pKZKd8v!IPA}YF01vm2?PK)fYh|$*QDf3DBGEWm zkj3d93juyM9s)dBcc(ZRRXAfbRuiBVv0$MX&)^_W$tuY15zH{(OomP$t<8*+SZ18) zpzw)oq?c#d{W4hMjZ-v0TIPC81tnmQqXLkbvB(g0u?59VzBEszVU{B65f*0oGNn;M zYZi~D#_{%-Np4YrVeKMI;fe7A+?3wZ6xT4YtziKb4WmJglT|rcl~Y#_7q(8oK~^1P z)j?Jr%#4Hc3^g6-2`HRp;5?IQo$$X6t9ayWtK3l3w9=@GF=~trwC-r-2U~|*kGFCu zCGKkNY3-#|ax0buXVPz~hf*?0e|%O*lk|(T!oj3JRu82Vl*qYmZx<0Xw#ZgQx|6?SDtqeJ5Ell{5 zxiDwV?Ncu5^;is=oLrr3lbbbMU}~=Enpw8ev})U=u+?b{xNTVjHY@HMUACcf!R7Mz zsxK~-oGhLqUWBJUbVar>x9Yv3F%XGZG_4D`N#C4Nw=oF15On#a+#s?dAGdK_!U}dU z({vO*A_L0|OrINUIT>O4nFm2gr2kT@HhjDbZ5 zn1djxH}Y1Lv)gD_E#{JWiEWc@x9xDqbt8^$M;)HeBGzdQ}@>lbBT`eboWZw>^%^9n8fPS*NLm)X}yKq9_L_rqdO@u+=q@WbOXRz^TE2S$g zEt_)&`o$H845C3YaHkE}z`~s{mWFe9D%IEDKWDU$acTuJFj7)uCJVJ>`T_n?ztI{S z2K$6^G+j^AUt%AOx3*Gf57vqjVM6-4nWKxjo%`83Ock|k!zG=ZDd}MsXs9AlQq?oM zVq?Fje&ng28#~g}k2LioH9L|G>XJ=#m0Xgkq?cH{0;j&@aRTsUQ98!fWf9Dc*+t@S#BVzrOtsZ2$9S!j}_PG-Ie_0$(y<}tI*=J^sW^cJ@j{^uXMdMQAlE$mmy^SA7KTdoW z{VbuQ4fb1#tlf`1fkLpcF}b3}=W+!+VX=|d#C)-ItQ4E?c+&Bt^U0W?jZTP6h|fhA z;yJ3B!t}_r_?*O?;@s-m8r~A!5*uiAY*ydx*c{{Z z>TZ0Kc$0}&tA$uB9*t_SiukeUF!@C(9P~>lnf4>2#^5&wTz)?Yg}V<3iMTXW+bGM< zXhafJf?5?xCalS10_Y$b&k1U)AgG--r^^=6M6DW4G#rWKoGz===}N}JE&z0DL8XCt zcmaQcB;?1R90*{ei5`i_fIpEnMnEM1@+3rPB}Qpzf|1hs0=@=Ck$}G|8xt~gHWEo_ zrL)E>HFyZ`J2;H4OopjX#wL5RT`s)GgLR34hmnQb8s6X4& zmBa%{OxHR{NjW)~98Mljs**jKbJ3TPGpS0S%RMrB>I|^H^Nf4MMI97}x3-#E_J+>^5uG>?c zTgf+ejKdrbW1u`e9w-J)M_(&AL|Va)Zcl@jz&I%j7|ep(O5r(_F7$da2ibep}jop~IRo9o6AE1Y4=^URUw z>t93524_^Ml?+a$FKqy&PU(g&T@o}X`$6g$AT@xTWpQNepJLSiCq`=cgVgz8d7-MV zd^ka)m9$PnB)^DlB0)x<+x^J3!t0gz{RJ)n!=GHJzgjo<`5{r6DN?IXFF*Ak8 zw266qH6AT6tZX*NV`KQ3Iwoi$vXxRa8K&lZSv)2(ybN|GLl#9Gr(ju%)3phMalW9P z5NMNT1ZGGIw_uqIwq7_m*B_0Cg*cv~@(WWXZPX_W;ZE72LD8to#oouD(Q35XphUUK zfCe!(;$FNPzlC|sfU()-2BWCUvcp0KAQ`l9_5XQQ4|ysrJ+W6eecAq_|9oidKiAY( zW;0fzJwImw0y-8wUZcrtbbFC#@`ye!V#t{N7pqEY+(F(v!J!Bj$77&?dsW5YSY*^h zNts)24B7*6L-miDb+>lT=}UVj%)nE+%c<*TmlksmjQ)K0bgwDg_v*j}-S-aQol}}U zI6C^+Kv&C!M0L>w5(OHa3s&I<#l0v+gz>0*hQ-@6Y-MMLMM^!;IfD`lhU6IGnhn$j zG*hB9m>B?OUMqw0`TBomku^dj>USVyOd4tM-K?Zv;g1Z9!{uY=f+9e4!!#m7w=b=P zJA#bt8bm|WzN9h&cM_6gw8o6DvG@q>#=CXTmVwp7@%zk2U@&CTWArr4j4$RR7?-F;J1~Y0=321#u!;%#73WkGz z;rhBU<$50ZKkdDFU>n7~I6kwx(ys26WJ#-gC0U0p zTas_fG4VRFbJ-y#ryVf4>>QB9j*mcqH0}`sv?b}|rY#9jZrV7`ffIO;wp{Hiujv7$ z^a|gm6bgAwDbU9QJKxXDt`di)@4fHu_its-%xCA`**QKl^EoQ0tGEM^>OEFW5WN-F ze(Q1T39H`fEjz~QSzZ%Gp`vEo&hSP@jy>sj`WWN=wsUk;KRh1fL2<6uz=U1*O7k)SppT20~HzlbV z-m$UH!&^3VHdKc^RrA8(L`Dg`$F@&AJQ6K~6|-eEvwTkD&Cd?El-Gx9BAcAfigmBe zm_z2t&67{yyV1+YgBB^tE~d-#yqh(6R(el(Sp#6+9A^_8=!ioxo45v>E9@F^v957k zs+hvI6*k7^mA>&UO%~WhHzhW5sMJO3rIS+?2|&+S3ip%bMK-V7V&HjG+)-4~&{jKR z-R{XJ%A&hFoEAfop`of`*5HbD2Vfs~_7ifZtGgAsQ8E6hIz|qJbY!a}l5wIdG9!sH z`AO#Svu_n{4?itj8h%P=Y;tv{Skz-+$%8n?;3R0K{oIYAKW;EZx>PFC(@m6q)T5nl zkYS?IsTAht1Z2TN7LbmlA!$Q8T_TROvkLX}!c3M6dH_6r_CM&TFq;$c3pZ}BXyv_P z*J$Lni3$8I{Sp0P{!d{}mmpg+IWf#`fgwHwc9bLdj!BoZpSa2tHSn zim+~vj#;T2(e2ldL#$kv`e{7GU+&WiX~90XIauPg#T3Nlq*xp zPB}m(-XI~#fTv*CK{}V{R18*TiL(e+I|E-<#!}i6(zgH;DBMevm0zT^$*)X702VqR z6_QOXOOgiqgIEc!3^Kv639>P{X)klr)gEd{udii_0mzKH)Mqm#G!A_^{Sv)Co6+br z3zIUe>*Ry}rn?(vWkNJc?yU)DAxwX>XIE#*^fx1&sa~1AfxAI>3pbM8pFN)CmF!5C zL0NaHE4@UwL|B}@ljrB~SkBfNXB(Fq@8%vU-IwK$XV0V=z~kiz+4Y-X*WcPGFOaX4 z*BUp<*U5X)UioqUDF0%qDIqwM=4MC8+2RT&-OYheuq6!1OkA0ZwptkWYh_{96h@|q znIZ`e*Gl(@d%v3vyZ5*m_q!z>dU|w`sis^IvupG-Gc$K+ER^$4PYiSuYyf^lP6uqh zNe5QXg0&-I+L3*UG$$nE386$rX%4IuAD3~du1qd)suR?JZ~_r#^(|zwCdh7FV@81; zv8U#I-#w2z*olB2UL(7BY39hhJ5T=S_qQ#8KI}_du)Q4c2Yw(6sGC)YHLDPd_$Uz)YgY5@W*V=VUSc%U zON{1rdQs6{NY`FCXKpWK&`#+1y(DhCkz~`JrpePZdAg3?i4l)FDkh?i&}LCte03Dp zuA_(CBx)T)!>P2fx(n`62tkd8x97A``8_ocxm3gJ-%v~>s?2ENfalXu?Dl3WTj!8b zD$icLL?LmqOYnjveM@#MVV5k`&#sW-WhTC{OsB30S#s>%-JO0#oH$N?g>!Fmn*8^m zMr@L%oCay?zDW6Q&J#K|LiUimiP!Oqmn`L_irIF$YS?8utmQPtr_$6fUDr&Xn(0$> zyG(9k)PdevM;004U8inNDDXZFt*h&7CzOuFv%PRk4#0oX(DwGO&Z!tbwF$aU4ZH%P z@B9iN{(v#UQa);FTip2^nsxSV)CwjGCU^Gj!#>F?Nm9M~>+&msYW_smpWW;T;4xif zg8=<}PZyR2xg;cwGoK!c)|G@R08mWP_L9)-dGtnToV6Z`rAtD&an^Du)?5;r1%NU= zwj?>fd2wh-i%?QGU&)uG1jNT@FI`4HOuWo&H1T>)$IqTsk&`^eE|142+KVGO8TZSh zG6T~^jbf`S$)t zk0pxDkpQ;ZqSpA-Gx-5T2%ZTFSX-wa$zSAPUb~#4I3Uk^&QtQ7^X8|V*k8a)RE0Zw z9Odh)mfql6cWc|+EfKfHSbNE2qjOrsW90nFr8QT#GmNWY)?`I{-lU6^EvT(oRPH6L z5lxjo%6FvlM!eT!OO*DkxVEirNy813TbIi2aB;DRe7ysdEWxuUJhpAyHtyKAJ$G!| zwr$(C=Z%P$lVWY!z9$SO2j5){s4SH4R}Sg)GoFo$d^YA~&H%K%vkq1yOQZQB&sw(&*-{ zo2I*JqHn~~K{=a)@-ZL=$9d$>03SCHn9u!C4T}kZ?^h)!%@dwPdKZ4gqAAV&^LG{~ z#A(T+4br0^S&{7`9U^bTUZuUveYFeLOVN4pV}#$(caX0nZ-LYDp}!A`=M(xORwd0% z^eb5q+J@~b9b>&?9~i#S8u?uie9?P{dJnzDI8a{_KLAr6CV57gMpFm%Qp5~@8+Pf8 z%=B?l1VZNWa)tziA!r-}{MN$63}>Jq5;dlJs^f1UZ=h$wBAkbp6P*^OiEr-TS*yDw zWv2-iAbQECki#k7jt@;`5%ED`I{-c2G9Af6J)0VoT#S9nQ*gq`76#kz&l?5z)_Y*Y z{mG6J>V2?U#W9Vb%BN5Z<+XJ7Tl6=cNl(eu?=bDuD}P#KtqwWsdAKm;^XN1tR5#-!UBbTnZ$Hz%jAmL2tJ& zfQ+>|H$rkd0nJJ#%5BjyWGs7|PD?>o)6BWgHbe9PZg&Q@Ez{P8kvEg?epsypA+a;By&{a1SjTuKTeZG8#&C>gxTnL1|FdpzC@I%kC~pL&tG+%t9CoGB+sfPg1S}9qQVzLl>M%lgdYcxb2kFAX6a(*jZbbl z4_KJU?)J5B9d1pzU5zkvRF_$*t1s>vDlgQMVWBoIHvaUG@C@}5ds)>TmN=_AtJqc@ zCz*3l*OeoMB9pmYM=OxGAI0Vy8w)T6X<~?R4Le}gqa|iA@RTR2HK?ivMgIgJxeK%J zjc4tlW|sA+qME=pwu=>Jz(hI!H7laZ7DpQ{xmc5P10yf7RhkLmT6}`zN@_{k^%`9P zP+$dXi@3i8=}3fLyGL!3)$FHYQkHBVOiAo33V>K#5^yy(QmGwW-6DySOe0;aaz)vi z%jGOc_VKu$G@-9&_;dx@s$G9n@-=$0R6@o3+9I*0mFm^%>lQPNa zxMA4JXSdn9lFjGrq_nqZ(1beI>*P;`JWtG4Nd%sYvzlzfRhm~9{qn5)*?J-WmP7d= z!TSS*AkLh;T8tEYQNsa8(c-YD1#DJ7M~2C@EWT84+8612;{*35_lR7ZTvUjUPOlGm zuMoyu^r`E8C#XL=mLw*hAzSQ0kRjrSSDZLRV;q;YeOduGxcX)=sfG4T>5IU)zN9BKs!eEo5}ZobI_P#zz+4m?ET zGyzqr5CQHYMO&-Fe1hzqz(rY1s0U<^I61OAQ~NOz_3ZV6vm zOT}$6sG2_uv)!c8mr3#d5$jQ(Mgm>3NHO>y8wsFjFEHcFDZLs|4jMIv`)OpHXd@8s z=u(p_>z>Im>29snwhgBJT`!08luRzHoDGS!)u)p2*CwIKmn@##3F+4s?Alv-%p9NFo-!JvpbjupB!&I-7%+1XMa-xQDT_p<+q#mBBB43?d@#!sC~*>e zwM8@EmDY)$Q`AITTa;jG49e>KQj4?<47_>iMR*pqk){m z;PWI}Jh^-SCt)R%86y$~tZ?U~kO)QjQ5Gk;Ee}fe#$Cqm9u##HiWn_=c%*xTcqA9w zdE^p|KRs7iBzKD(2lY!wKll>tx-PcPaBK|Vv6-_17Hgc^ew4~G>^`X-3^N8BW01q= zDhy+oSfQDf0L?yjHERjc!Q>Ei!JNoBLt3l{@{E?Arfof2;n}aKf>eH{9&%-x?vgA_ z8vt?FaE0%|BQ(y{jD7S_ojZE`^VXp7qJ;&r&ea1-Tc|#~t|b@8@i;nYcII1KSK4u$ytGh;nivUP{EbTs@B*xmi$oN zMsY^{JWw@o3MJO@X|_u4J8)^qR3z}%v>DlnJ%s8x0m`eRb@3DFsd2nrd$|`0@3GK2 zWLxsZ=V^P?QYoI_0%l2{tR<;K{i#(UcL@_D1rh$@hG2}k_I#=nr*xN!4(ih1w0kR{ z(KC-Ky71A@V&nTmdeX|O+!(IhDRfP$hPEslYh%hag=vZ-;-ekOOX?Gc9_^y?Ccf@p z%3hMj0%uuHrPYHgsOMoc^g8iZ$ZGGZVsDbR2(2$JK`p{AMXql>8DAlnvODa8uA*0T z-SnSj?*==_{-I-+wI=FPloGY=ErI_6m zu2VGBSy>1<^WjdB6uM&i?j5Hw-_hK-6S;k963qj!DVUhlTifJcxwyl`7fVds8c%^e6& za$@m%LR}k(#Y4K!MgcRt?zJH`RaI^sY@L`qK3-S+# zLE&G1{VHZtdn72LM_6Z2VNni(2m(?{vCa|Dc2Q17Og7K4o0iYVG}ciM5=)aE2~=MM zdB@ojuPb#4g)6}?qnscT9l~`Z^=j~b0a-q<*Y?JUwu?+n%#e0U^sJ`YJ1AE1SHRR5 zIwj*X;Bk%5`h=+W4MHu=@z%o@I1W;%khMFaK%kod()1|Xq-1&&&Vr+YUsIWf`Xxm! z`*Sr<>nV^F(=ah-G1N)hS>1WriPTx4_wz`lJMpV%a({{h#zBeUy`TN+gDNS$+1P5z zPlh})oy1k+S~-^DyQTJ!_7c#2p!cfTO<~W9YE5(Xa~-T}GmK-`G?y^$i=UGNkL!)+ zaQD;C)Pqb|IZd{H(b7CT)rMH}I5%%x90@&v&G`8_R^hl+O#o=hNq6{p z#(70Xn^7yb<>(Vun&am2u8XZ0L}}(ZlI+T z7vI&<>wbotf{e`Og)Et)%5gyjm7|QaAX6Hz%6Qv~a;}WH=(6_I$|?{CLI{2QRNM@J zRMM90ayE=w%*2FHejcKHx(L`bv0VYl zdOlxI!tc9oc;I6IdUS%GS~BrIYy~Rhg%{SCjYhh{aU?PC@CI^WZ#INw3nHa&Lj1bN zfwVHo!e0h}?NLid*Ncc*F1kQeY5l|cno9d05O?06!D!i}NUlYl|7CL{?ilz?A%La+bA z@%>IiOwdE%M>hwGcE{ymUr;^UrIb8bZKIli9(GwnOx=!uO&>laeRbTzIR{cxO;MxX z@VU6p`8posP^;8_+mdp3H?9`>8Gba{%Y5A+rB4a(RwT*T;q!@=ON|lRsOYpCKYnYC zYGrR9zjScs^YuD$shB`Xw~Pu}%lUpb!i7OyIny&`6WA>U;zG;ZJ8U4PW+r47Y7^=s zc0;|X7U%`5gsd?@7oRFp1822l4Siu~bGwD)7U#WKNAJR9N}N#_rs{xh#SuXRGZAy( zXP8PX!Zb0Cn9JXHhg1r@(+zIIxz7{AFN*Y6S)at{SN*pfNdQNY#Z-p3TTp}(&L}>W zC}~LYswBqtmHo#pV*DC7Kwm)jpc-;2)^meM19kcx8Gjugg7j999lbo9uMrA#-D;qlw9Co*&TvuZwX ziO1hj1buXrIR0sYM14?4W=@=}$a1CNN_J{Ljl?=ur@<8zCMIPy>|5nRAY!6Gsel5mmt z$M#I{a>#0b*H3|1CLiO_KdB>slsH+6L*W>&8<9-e88$!VEX_Z8$vSO(KmpMSW(~)J z4G$@*2#7{7u@+Dsf|XsMR0MYnL1l2x3V4M@lv2bDcVF`N==JW)qCYhx)(P7`_sj4V zy&@A?R1v5%&goM}{T$8d>wS3jKx31|gC#*rk-;Gc(kJg_BId58=x+*YfTrvBv9f|$ zUOrzxNH4A=BO}YD5%(FMlJ=G}nZ$@qO-9w@TnoW(V?w65CwdHtVE$_(;(XzVMVIh2 zhufRF&NO^+xj3>2hCcvsK;{x4?w(i1pMJAI)hJ}mggk(GRX?549pEGMq3P3RxJcsJ3=pt zKo+5`8lCYW5RGX_Xe4b=(YVu^j>g@ zdyKnb{+^2~h)feIv**!H$v*)$mL@aCR9t|QioC|ND?xOPl)4+dZ2;h(YYh7ryxh&vqnCz z1ru@Gw0)nARfUl}?mfyw;jBq#m^LtXx8r;mJEfpN>>SiOpPc~r)^E&Gv@Yfu8eycD z<>1VW9dB1>7PX6PK2GL6Ihn7y%yje^8{vT~@p?Cu4Xx&y<*E{Wt0nA}F!R=vEUHgN?IXFH*fG@-tEUDk

@$Q>SqiO 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 LBrUCNq$Bh{?f#mO literal 0 HcmV?d00001 diff --git a/util.cpp b/util.cpp new file mode 100644 index 000000000..cd5e60a4e --- /dev/null +++ b/util.cpp @@ -0,0 +1,408 @@ +#include "stdafx.h" + +using namespace std; + +void RandomGen::init(int seed) { + generator.seed(seed); +} + +int RandomGen::getRandom(int max) { + return getRandom(0, max); +} + +int RandomGen::getRandom(int min, int max) { + CHECK(max > min); + return uniform_int_distribution(min, max - 1)(generator); +} + +bool RandomGen::roll(int chance) { + return getRandom(chance) == 0; +} + +double RandomGen::getDouble() { + return uniform_real_distribution()(generator); +} + +double RandomGen::getDouble(double a, double b) { + return uniform_real_distribution(a, b)(generator); +} + +RandomGen Random; + +template string convertToString(const int&); +template string convertToString(const size_t&); +template string convertToString(const char&); +template string convertToString(const double&); + +template int convertFromString(const string&); +template char convertFromString(const string&); +template double convertFromString(const string&); + +template +string convertToString(const T& t){ + std::stringstream ss; + ss << t; + return ss.str(); +} + +template +T convertFromString(const string& s){ + std::stringstream ss(s); + T t; + ss >> t; + CHECK(ss) << "Error parsing " << s << " to " << typeid(T).name(); + return t; +} + +void trim(string& s) { + CHECK(s.size() > 0); + while (isspace(s[0])) + s.erase(s.begin()); + while (isspace(*s.rbegin())) + s.erase(s.size() - 1); +} + +string toUpper(const string& s) { + string ret(s); + transform(ret.begin(), ret.end(), ret.begin(), ::toupper); + return ret; +} + +string toLower(const string& s) { + string ret(s); + transform(ret.begin(), ret.end(), ret.begin(), ::tolower); + return ret; +} + +vector split(const string& s, char delim) { + int begin = 0; + vector ret; + for (int i : Range(s.size() + 1)) + if (i == s.size() || s[i] == delim) { + string tmp = s.substr(begin, i - begin); + if (!tmp.empty()) + ret.push_back(tmp); + begin = i + 1; + } + return ret; +} + +template<> +bool contains(const string& s, const string& p) { + return s.find(p) != string::npos; +} + + +Vec2::Vec2(int _x, int _y) : x(_x), y(_y) { +} + +Vec2 Vec2::mult(const Vec2& v) const { + return Vec2(x * v.x, y * v.y); +} + +Vec2 Vec2::div(const Vec2& v) const { + return Vec2(x / v.x, y / v.y); +} + +int Vec2::dotProduct(Vec2 a, Vec2 b) { + return a.x * b.x + a.y * b.y; +} + +vector Vec2::box(int radius, bool shuffle) { + if (radius == 0) + return {*this}; + vector v; + for (int k = -radius; k < radius; ++k) + v.push_back(*this + Vec2(k, -radius)); + for (int k = -radius; k < radius; ++k) + v.push_back(*this + Vec2(radius, k)); + for (int k = -radius; k < radius; ++k) + v.push_back(*this + Vec2(-k, radius)); + for (int k = -radius; k < radius; ++k) + v.push_back(*this + Vec2(-radius, -k)); + if (shuffle) + random_shuffle(v.begin(), v.end(), [](int a) { return Random.getRandom(a);}); + return v; +} + +vector Vec2::directions8(bool shuffle) { + return Vec2(0, 0).neighbors8(shuffle); +} + +vector Vec2::neighbors8(bool shuffle) const { + vector res = {Vec2(x, y + 1), Vec2(x + 1, y), Vec2(x, y - 1), Vec2(x - 1, y), Vec2(x + 1, y + 1), Vec2(x + 1, y - 1), Vec2(x - 1, y - 1), Vec2(x - 1, y + 1)}; + if (shuffle) + random_shuffle(res.begin(), res.end(),[](int a) { return Random.getRandom(a);}); + return res; +} + +vector Vec2::directions4(bool shuffle) { + return Vec2(0, 0).neighbors4(shuffle); +} + +vector Vec2::neighbors4(bool shuffle) const { + vector res = { Vec2(x, y + 1), Vec2(x + 1, y), Vec2(x, y - 1), Vec2(x - 1, y)}; + if (shuffle) + random_shuffle(res.begin(), res.end(),[](int a) { return Random.getRandom(a);}); + return res; +} + +bool Vec2::isCardinal4() const { + return abs(x) + abs(y) == 1; +} + +vector Vec2::corners() { + return { Vec2(1, 1), Vec2(1, -1), Vec2(-1, -1), Vec2(-1, 1)}; +} + +bool Vec2::inRectangle(int px, int py, int kx, int ky) const { + return x >= px && x < kx && y >= py && y < ky; +} + +bool Vec2::inRectangle(const Rectangle& r) const { + return inRectangle(r.getPX(), r.getPY(), r.getKX(), r.getKY()); +} + +bool Vec2::operator== (const Vec2& v) const { + return v.x == x && v.y == y; +} + +bool Vec2::operator!= (const Vec2& v) const { + return v.x != x || v.y != y; +} + +Vec2& Vec2::operator +=(const Vec2& v) { + x += v.x; + y += v.y; + return *this; +} + +Vec2 Vec2::operator + (const Vec2& v) const { + return Vec2(x + v.x, y + v.y); +} + +Vec2 Vec2::operator * (int a) const { + return Vec2(x * a, y * a); +} + +Vec2 Vec2::operator / (int a) const { + return Vec2(x / a, y / a); +} + +Vec2& Vec2::operator -=(const Vec2& v) { + x -= v.x; + y -= v.y; + return *this; +} + +Vec2 Vec2::operator - (const Vec2& v) const { + return Vec2(x - v.x, y - v.y); +} + +Vec2 Vec2::operator - () const { + return Vec2(-x, -y); +} + +bool Vec2::operator < (Vec2 v) const { + return x < v.x || (x == v.x && y < v.y); +} + +int Vec2::length8() const { + return max(abs(x), abs(y)); +} + +int Vec2::dist8(Vec2 v) const { + return (v - *this).length8(); +} + +int Vec2::length4() const { + return abs(x) + abs(y); +} + +double Vec2::lengthD() const { + return sqrt(x * x + y * y); +} + +Vec2 Vec2::shorten() const { + CHECK(x == 0 || y == 0 || abs(x) == abs(y)); + int d = length8(); + return Vec2(x / d, y / d); +} + +static int sgn(int a) { + if (a == 0) + return 0; + if (a < 0) + return -1; + else + return 1; +} + +static int sgn(int a, int b) { + if (abs(a) >= abs(b)) + return sgn(a); + else + return 0; +} + +pair Vec2::approxL1() const { + return make_pair(Vec2(sgn(x, x), sgn(y,y)), Vec2(sgn(x, y), sgn(y, x))); +} + +string Vec2::getBearing() const { + double ang = atan2(y, x) / 3.14159265359 * 180 / 45; + if (ang < 0) + ang += 8; + if (ang < 0.5 || ang >= 7.5) + return "east"; + if (ang >= 0.5 && ang < 1.5) + return "south-east"; + if (ang >= 1.5 && ang < 2.5) + return "south"; + if (ang >= 2.5 && ang < 3.5) + return "south-west"; + if (ang >= 3.5 && ang < 4.5) + return "west"; + if (ang >= 4.5 && ang < 5.5) + return "north-west"; + if (ang >= 5.5 && ang < 6.5) + return "north"; + if (ang >= 6.5 && ang < 7.5) + return "north-east"; + Debug(FATAL) << ang; + return ""; +} + +Rectangle::Rectangle(int w, int h) : px(0), py(0), kx(w), ky(h) { + CHECK(w > 0 && h > 0); +} + +Rectangle::Rectangle(Vec2 d) : px(0), py(0), kx(d.x), ky(d.y) { + CHECK(d.x > 0 && d.y > 0); +} + +Rectangle::Rectangle(int px1, int py1, int kx1, int ky1) : px(px1), py(py1), kx(kx1), ky(ky1) { + CHECK(kx > px && ky > py); +} + +Rectangle::Rectangle(Vec2 p, Vec2 k) : px(p.x), py(p.y), kx(k.x), ky(k.y) { + CHECK(k.x > p.x); + CHECK(k.y > p.y); +} + +Rectangle::Iter::Iter(int x1, int y1, int px1, int py1, int kx1, int ky1) : pos(x1, y1), px(px1), py(py1), kx(kx1), ky(ky1) {} + +Vec2 Rectangle::randomVec2() const { + return Vec2(Random.getRandom(px, kx), Random.getRandom(py, ky)); +} + +Vec2 Rectangle::middle() const { + return Vec2((px + kx) / 2, (py + ky) / 2); +} + +int Rectangle::getPX() const { + return px; +} + +int Rectangle::getPY() const { + return py; +} + +int Rectangle::getKX() const { + return kx; +} + +int Rectangle::getKY() const { + return ky; +} + +int Rectangle::getW() const { + return kx - px; +} + +int Rectangle::getH() const { + return ky - py; +} + +bool Rectangle::intersects(const Rectangle& other) const { + bool a = Vec2(px, py).inRectangle(other); + bool b = Vec2(kx - 1, py).inRectangle(other); + bool c = Vec2(px, ky - 1).inRectangle(other); + bool d = Vec2(kx - 1, ky - 1).inRectangle(other); + bool e = Vec2(other.px, other.py).inRectangle(*this); + bool f = Vec2(other.kx - 1, other.py).inRectangle(*this); + bool g = Vec2(other.px, other.ky - 1).inRectangle(*this); + bool h = Vec2(other.kx - 1, other.ky - 1).inRectangle(*this); + return a || b || c || d || e || f || g || h; +} + +Rectangle Rectangle::minusMargin(int margin) const { + CHECK(px + margin < kx - margin && py + margin < ky - margin) << "Margin too big"; + return Rectangle(px + margin, py + margin, kx - margin, ky - margin); +} + +Vec2 Rectangle::Iter::operator* () const { + return pos; +} +bool Rectangle::Iter::operator != (const Iter& other) const { + return pos != other.pos; +} + +const Rectangle::Iter& Rectangle::Iter::operator++ () { + ++pos.y; + if (pos.y >= ky) { + pos.y = py; + ++pos.x; + } else + CHECK(pos.x < kx) << "Iterator out of range: " << **this << ", " << Vec2(px, py) << " " << Vec2(kx, ky); + return *this; +} + +Rectangle::Iter Rectangle::begin() { + return Iter(px, py, px, py, kx, ky); +} + +Rectangle::Iter Rectangle::end() { + return Iter(kx, py, px, py, kx, ky); +} + +Range::Range(int a, int b) : start(a), finish(b) { + CHECK(a <= b); +} +Range::Range(int a) : Range(0, a) {} + +Range::Iter Range::begin() { + return Iter(start, start, finish); +} + +Range::Iter Range::end() { + return Iter(finish, start, finish); +} + +Range::Iter::Iter(int i, int a, int b) : ind(i), min(a), max(b) {} + +int Range::Iter::operator* () const { + return ind; +} + +bool Range::Iter::operator != (const Iter& other) const { + return other.ind != ind; +} + +const Range::Iter& Range::Iter::operator++ () { + CHECK(++ind <= max); + return *this; +} + +string combine(const vector& adj) { + string res; + for (int i : All(adj)) { + if (i == adj.size() - 1 && i > 0) + res.append(" and "); + else if (i > 0) + res.append(", "); + res.append(adj[i]); + } + return res; +} + diff --git a/util.h b/util.h new file mode 100644 index 000000000..5aedbb052 --- /dev/null +++ b/util.h @@ -0,0 +1,655 @@ +#ifndef _UTIL_H +#define _UTIL_H + +#include + +#include "debug.h" + +template +string convertToString(const T& t); + +template +T convertFromString(const string& s); + +class Item; +typedef unique_ptr PItem; + +class Creature; +typedef unique_ptr PCreature; + +class Effect; +typedef unique_ptr PEffect; + +class Square; +typedef unique_ptr PSquare; + +class MonsterAI; +typedef unique_ptr PMonsterAI; + +class Behaviour; +typedef unique_ptr PBehaviour; + +class Obstacle; +typedef unique_ptr PObstacle; + +class Task; +typedef unique_ptr PTask; + +class Controller; +typedef unique_ptr PController; + +class Trigger; +typedef unique_ptr PTrigger; + +void trim(string& s); +string toUpper(const string& s); +string toLower(const string& s); + +vector split(const string& s, char delim); + +class Rectangle; + +class Vec2 { + public: + int x, y; + Vec2() : x(0), y(0) {} + Vec2(int x, int y); + bool inRectangle(int px, int py, int kx, int ky) const; + bool inRectangle(const Rectangle&) const; + bool operator == (const Vec2& v) const; + bool operator != (const Vec2& v) const; + Vec2 operator + (const Vec2& v) const; + Vec2 operator * (int) const; + Vec2 operator / (int) const; + Vec2& operator += (const Vec2& v); + Vec2 operator - (const Vec2& v) const; + Vec2& operator -= (const Vec2& v); + Vec2 operator - () const; + bool operator < (Vec2) const; + Vec2 mult(const Vec2& v) const; + Vec2 div(const Vec2& v) const; + static int dotProduct(Vec2 a, Vec2 b); + int length8() const; + int length4() const; + int dist8(Vec2) const; + double lengthD() const; + Vec2 shorten() const; + pair approxL1() const; + string getBearing() const; + bool isCardinal4() const; + + vector box(int radius, bool shuffle = false); + static vector directions8(bool shuffle = false); + vector neighbors8(bool shuffle = false) const; + static vector directions4(bool shuffle = false); + vector neighbors4(bool shuffle = false) const; + static vector corners(); +}; + +namespace std { + +template <> struct hash { + size_t operator()(const Vec2& obj) const { + return hash()(obj.x) * 10000 + hash()(obj.y); + } +}; + +} + + +class Rectangle { + public: + Rectangle(int width, int height); + Rectangle(Vec2 dim); + Rectangle(int px, int py, int kx, int ky); + Rectangle(Vec2 p, Vec2 k); + + int getPX() const; + int getPY() const; + int getKX() const; + int getKY() const; + int getW() const; + int getH() const; + + bool intersects(const Rectangle& other) const; + + Rectangle minusMargin(int margin) const; + + Vec2 randomVec2() const; + Vec2 middle() const; + + class Iter { + public: + Iter(int x, int y, int px, int py, int kx, int ky); + + Vec2 operator* () const; + bool operator != (const Iter& other) const; + + const Iter& operator++ (); + + private: + Vec2 pos; + int px, py, kx, ky; + }; + + Iter begin(); + Iter end(); + private: + int px, py, kx, ky; +}; + +class Range { + public: + Range(int start, int end); + Range(int end); + + class Iter { + public: + Iter(int ind, int min, int max); + + int operator* () const; + bool operator != (const Iter& other) const; + + const Iter& operator++ (); + + private: + int ind; + int min; + int max; + }; + + Iter begin(); + Iter end(); + + private: + int start; + int finish; +}; + +template +Range All(const T& container) { + return Range(container.size()); +} + +extern const vector neighbors; + +class RandomGen { + public: + void init(int seed); + int getRandom(int max); + int getRandom(int min, int max); + double getDouble(); + double getDouble(double a, double b); + bool roll(int chance); + + private: + default_random_engine generator; +}; + +extern RandomGen Random; + +template +class Table { + public: + Table(Table&& t) = default; + + Table(int x, int y, int w, int h) : width(w), height(h), px(x), py(y), mem(new T[width * height]()) { + } + + Table(const Rectangle& rect) : Table(rect.getPX(), rect.getPY(), rect.getW(), rect.getH()) { + } + + Table(const Rectangle& rect, const T& value) : Table(rect.getPX(), rect.getPY(), rect.getW(), rect.getH(), value) { + } + + Table(int w, int h) : Table(0, 0, w, h) { + } + + Table(int x, int y, int width, int height, const T& value) : Table(x, y, width, height) { + for (int i : Range(width * height)) + mem[i] = value; + } + + Table(int width, int height, const T& value) : Table(0, 0, width, height, value) { + } + + Rectangle getBounds() const { + return Rectangle(px, py, px + width, py + height); + } + + Table& operator = (Table&& other) = default; + + int getWidth() const { + return width; + } + int getHeight() const { + return height; + } + + class RowAccess { + public: + RowAccess(T* m, int p, int w) : px(p), width(w), mem(m) {}; + T& operator[](int ind) { + CHECK(ind >= px && ind < px + width); + return mem[ind - px]; + } + + const T& operator[](int ind) const { + CHECK(ind >= px && ind < px + width); + return mem[ind - px]; + } + + private: + int px; + int width; + T* mem; + }; + + RowAccess operator[](int ind) { + return RowAccess(mem.get() + (ind - px) * height, py, height); + } + + RowAccess operator[](int ind) const { + return RowAccess(mem.get() + (ind - px) * height, py, height); + } + + T& operator[](Vec2 vAbs) { + Vec2 v(vAbs.x - px, vAbs.y - py); + CHECK(v.x >= 0 && v.y >= 0 && v.x < width && v.y < height) << + "Table index out of bounds " << getBounds() << " " << vAbs; + return mem[v.x * height + v.y]; + } + + const T& operator[](Vec2 vAbs) const { + Vec2 v(vAbs.x - px, vAbs.y - py); + CHECK(v.x >= 0 && v.y >= 0 && v.x < width && v.y < height) << + "Table index out of bounds " << getBounds() << " " << vAbs; + return mem[v.x * height + v.y]; + } + + private: + int width; + int height; + int px = 0; + int py = 0; + unique_ptr mem; +}; + +template +T chooseRandom(const vector& vi, const vector& pi, double r = -1) { + vector v(vi); + vector p(pi); + CHECK(v.size() == p.size()); + double sum = 0; + for (double elem : p) + sum += elem; + if (r == -1) + r = Random.getDouble(0, sum); + sum = 0; + for (int i : All(p)) { + sum += p[i]; + if (sum >= r) + return v[i]; + } + return v.back(); +} + + +template +T chooseRandom(const vector& vi, double r = -1) { + vector v(vi); + vector pi(v.size(), 1); + return chooseRandom(v, pi, r); +} + +template +T chooseRandom(const set& vi, double r = -1) { + vector v(vi.size()); + std::copy(vi.begin(), vi.end(), v.begin()); + return chooseRandom(v, r); +} + +template +T chooseRandom(initializer_list vi, initializer_list pi, double r = -1) { + return chooseRandom(vector(vi), vector(pi), r); +} + +template +T chooseRandom(initializer_list vi, double r = -1) { + vector v(vi); + vector pi(v.size(), 1); + return chooseRandom(v, pi, r); +} + +template +T chooseRandom(vector> vi, double r = -1) { + vector v; + vector p; + for (auto elem : vi) { + v.push_back(elem.first); + p.push_back(elem.second); + } + return chooseRandom(v, p); +} + +template +T chooseRandom(initializer_list> vi, double r = -1) { + return chooseRandom(vector>(vi), r); +} + +template +vector randomPermutation(vector v) { + random_shuffle(v.begin(), v.end(), [](int a) { return Random.getRandom(a);}); + return v; +} + +template +vector randomPermutation(const set& vi) { + vector v(vi.size()); + std::copy(vi.begin(), vi.end(), v.begin()); + return randomPermutation(v); +} + +template +vector randomPermutation(initializer_list vi) { + vector v(vi); + random_shuffle(v.begin(), v.end(), [](int a) { return Random.getRandom(a);}); + return v; +} + +template +vector getKeys(const map& m) { + vector ret; + for (auto elem : m) + ret.push_back(elem.first); + return ret; +} + +template +map > groupBy(const vector& values, function getKey) { + map > ret; + for (const T& elem : values) + ret[getKey(elem)].push_back(elem); + return ret; +} + +template +vector getPrefix(const vector& v, int start, int length) { + CHECK(start >= 0 && length > 0 && start + length <= v.size()); + vector ret; + for (int i : Range(start, start + length)) + ret.push_back(v[i]); + return ret; +} + +template +bool contains(const T& v, const V& elem) { + return std::find(v.begin(), v.end(), elem) != v.end(); +} + +template<> +bool contains(const string& s, const string& pattern); + +template +bool contains(const initializer_list& v, const V& elem) { + return contains(vector(v), elem); +} + +template +vector concat(const vector& v, const vector& w) { + vector ret(v); + for (T elem : w) + ret.push_back(elem); + return ret; +} + +template +function alwaysTrue() { + return [](T) { return true; }; +} + +template +function alwaysFalse() { + return [](T) { return false; }; +} + +template +function andFun(function x, const function y) { + return [x, y](T t) { return x(t) && y(t); }; +} + +class Nothing { +}; + +template +class Optional { + public: + Optional(const T& t) : elem(new T(t)) {} + Optional(const Optional& t) { + if (t) + elem.reset(new T(*t)); + } + Optional(Optional&&) = default; + Optional(Nothing) {} + Optional() {} + + T& operator = (const T& t) { + elem.reset(new T(t)); + return *elem.get(); + } + + void operator = (Nothing) { + elem.reset(); + } + + T& operator = (T&& t) { + if (elem) + *elem = std::move(t); + else + elem.reset(new T(std::move(t))); + return *elem.get(); + } + + T* operator -> () { + CHECK(elem.get() != nullptr); + return elem.get(); + } + + const T* operator -> () const { + CHECK(elem.get() != nullptr); + return elem.get(); + } + + bool operator == (const T& t) const { + return elem.get() && *elem.get() == t; + } + + bool operator != (const T& t) const { + return !elem.get() || *elem.get() != t; + } + + operator bool() const { + return elem.get() != nullptr; + } + + T& operator * () { + CHECK(elem.get()); + return *elem.get(); + } + + const T& operator * () const { + CHECK(elem.get()); + return *elem.get(); + } + + private: + unique_ptr elem; +}; + +template +bool contains(const initializer_list& v, const Optional& elem) { + return elem && contains(vector(v), *elem); +} + + +template +class MustInitialize { + public: + MustInitialize(const MustInitialize& o) : elem(o.elem) { + CHECK(!elem.empty()) << "Element not initialized"; + } + + MustInitialize() {} + + T& operator = (const T& t) { + + if (!elem.empty()) + elem.pop(); + CHECK(elem.empty()); + elem.push(t); + return elem.front(); + } + + T* operator -> () { + CHECK(!elem.empty()); + return &elem.front(); + } + + const T* operator -> () const { + CHECK(!elem.empty()) << "Element not initialized"; + return &elem.front(); + } + + bool operator == (const T& t) const { + CHECK(!elem.empty()) << "Element not initialized"; + return elem.front() == t; + } + + bool operator != (const T& t) const { + CHECK(!elem.empty()) << "Element not initialized"; + return elem.front() != t; + } + + T& operator * () { + CHECK(!elem.empty()) << "Element not initialized"; + return elem.front(); + } + + const T& operator * () const { + CHECK(!elem.empty()) << "Element not initialized"; + return elem.front(); + } + + private: + queue elem; +}; + +template +vector concat(const vector>& vectors) { + vector ret; + for (const vector& v : vectors) + for (const T& t : v) + ret.push_back(t); + return ret; +} + +template +inline T& operator <<(T& d, Vec2 msg) { + return d << "(" << msg.x << "," << msg.y << ")"; +} + +inline std::istream& operator >>(std::istream& d, Vec2& msg) { + string in; + d >> in; + vector s = split(in.substr(1, in.size() - 2), ','); + CHECKEQ((int)s.size(), 2); + msg = Vec2(convertFromString(s[0]), convertFromString(s[1])); + return d; +} + +inline Debug& operator <<(Debug& d, Rectangle rect) { + return d << "(" << rect.getPX() << "," << rect.getPY() << ") (" << rect.getKX() << "," << rect.getKY() << ")"; +} + +template +Debug& operator<<(Debug& d, const Table& container){ + for (int i : Range(container.height())) { + d << i << ":"; + for (int j : Range(container.width())) + d << container[j][i] << ","; + d << '\n'; + } + return d; +} + +inline NoDebug& operator <<(NoDebug& d, Vec2 msg) { + return d; +} + +inline NoDebug& operator <<(NoDebug& d, Rectangle msg) { + return d; +} + +template +NoDebug& operator<<(NoDebug& d, const Table& container){ + return d; +} + +template +void removeIndex(vector& v, int index) { + v[index] = std::move(v.back()); + v.pop_back(); +} + +template +Optional findElement(vector& v, const T& element) { + for (int i : All(v)) + if (v[i] == element) + return i; + return Nothing(); +} + +template +Optional findElement(const vector& v, const T* element) { + for (int i : All(v)) + if (v[i] == element) + return i; + return Nothing(); +} + +template +void removeElement(vector& v, const T& element) { + auto ind = findElement(v, element); + CHECK(ind) << "Element not found"; + removeIndex(v, *ind); +} + +template +void removeElement(vector& v, const T* element) { + auto ind = findElement(v, element); + CHECK(ind) << "Element not found"; + removeIndex(v, *ind); +} + +template +T getOnlyElement(const vector& v) { + CHECK(v.size() == 1); + return v[0]; +} + +inline string addAParticle(const string& s) { + if (contains({'a', 'e', 'u', 'i', 'o'}, s[0])) + return string("an ") + s; + else + return string("a ") + s; +} + +inline string capitalFirst(string s) { + if (islower(s[0])) + s[0] = toupper(s[0]); + return s; +} + +string combine(const vector& adj); + +#endif diff --git a/view.cpp b/view.cpp new file mode 100644 index 000000000..23ec1ac94 --- /dev/null +++ b/view.cpp @@ -0,0 +1,21 @@ +#include "stdafx.h" + +using namespace std; + + +const static string prefix = "[title]"; + +string View::getTitlePrefix(const string& name) { + return prefix + name; +} + +bool View::hasTitlePrefix(const string& name) { + return name.size() >= prefix.size() && name.substr(0, prefix.size()) == prefix; +} + +string View::removeTitlePrefix(const string& name) { + CHECK(hasTitlePrefix(name)); + return name.substr(prefix.size()); +} + + diff --git a/view.h b/view.h new file mode 100644 index 000000000..7eea34034 --- /dev/null +++ b/view.h @@ -0,0 +1,151 @@ +#ifndef _VIEW_H +#define _VIEW_H + +#include +#include +#include + +#include "util.h" +#include "action.h" +#include "collective_action.h" +#include "debug.h" +#include "view_object.h" + +class CreatureView; +class Level; + +class View { + public: + + /** Does all the library specific init.*/ + virtual void initialize() = 0; + + /** Displays a splash screen in an active loop until \paramname{ready} is set to true in another thread.*/ + virtual void displaySplash(bool& ready) = 0; + + /** Shutdown routine.*/ + virtual void close() = 0; + + /** Reads the game state from \paramname{creatureView} and refreshes the display.*/ + virtual void refreshView(const CreatureView* creatureView) = 0; + + /** Scrolls back to the center of the view on next refresh.*/ + virtual void resetCenter() = 0; + + //@{ + /** Adds a new message to the box. The message is remembered between refreshes, + and is discarded when appropriate.*/ + virtual void addMessage(const string& message) = 0; + virtual void addImportantMessage(const string& message) = 0; + //@} + + /** Clears the message box.*/ + virtual void clearMessages() = 0; + + /** Reads the keyboard in a blocking manner. Used for turn-based game play.*/ + virtual Action getAction() = 0; + + /** Reads input in a non-blocking manner.*/ + virtual CollectiveAction getClick() = 0; + + /** Returns whether a travel interrupt key is pressed at a given moment.*/ + virtual bool travelInterrupt() = 0; + + /** Draws a window with some options for the player to choose. \paramname{index} indicates the highlighted item. + Returns Nothing() if the player cancelled the choice.*/ + virtual Optional chooseFromList(const string& title, const vector& options, int index = 0) = 0; + + /** Let's the player choose a direction from the main 8. Returns Nothing() if the player cancelled the choice.*/ + virtual Optional chooseDirection(const string& message) = 0; + + /** Asks the player a yer-or-no question.*/ + virtual bool yesOrNoPrompt(const string& message) = 0; + + /** Draws a window with some text. The text is formatted to fit the window.*/ + virtual void presentText(const string& title, const string& text) = 0; + + /** Draws a window with a list of items.*/ + virtual void presentList(const string& title, const vector& options, bool scrollDown = false) = 0; + + /** Let's the player choose a number. Returns Nothing() if the player cancelled the choice.*/ + virtual Optional getNumber(const string& title, int max) = 0; + + /** Draws an animation of an object between two locations on a map.*/ + virtual void animateObject(vector trajectory, ViewObject object) = 0; + + /** Returns the current real time in milliseconds. The clock is stopped on blocking keyboard input, + so it can be used to sync game time in real-time mode.*/ + virtual int getTimeMilli() = 0; + + /** Stops the real time clock.*/ + virtual void stopClock() = 0; + + /** Sets the real time clock.*/ + virtual void setTimeMilli(int) = 0; + + /** Continues the real time clock after it had been stopped.*/ + virtual void continueClock() = 0; + + /** Returns whether the real time clock is currently stopped.*/ + virtual bool isClockStopped() = 0; + + /** Returns a default View that additionally logs all player actions into a file.*/ + static View* createLoggingView(ofstream& of); + + /** Returns a default View that reads all player actions from a file instead of the keyboard.*/ + static View* createReplayView(ifstream& ifs); + + /** Marks a given menu item to be displayed as a title.*/ + static string getTitlePrefix(const string& name); + + /** Returns whether a menu item is marked as a title.*/ + static bool hasTitlePrefix(const string& name); + + /** Removes the title prefix from a menu item.*/ + static string removeTitlePrefix(const string& name); + + /** Represents all the game information displayed around the map window.*/ + class GameInfo { + public: + enum class InfoType { PLAYER, BAND} infoType; + + class BandInfo { + public: + int number; + string name; + string warning; + vector> buttons; + string monsterHeader; + vector creatures; + vector enemies; + map tasks; + int numGold = 0; + int activeButton = 0; + double time; + bool gatheringTeam = false; + vector team; + } bandInfo; + + class PlayerInfo { + public: + int speed; + int defense; + int attack; + int strength; + int dexterity; + bool bleeding; + double time; + int numGold; + string playerName; + vector adjectives; + string title; + string levelName; + string weaponName; + double elfStanding; + double dwarfStanding; + double goblinStanding; + } playerInfo; + } gameInfo; +}; + +#endif diff --git a/view_index.cpp b/view_index.cpp new file mode 100644 index 000000000..9529a9088 --- /dev/null +++ b/view_index.cpp @@ -0,0 +1,30 @@ +#include "stdafx.h" + +void ViewIndex::insert(const ViewObject& obj) { + objects.erase(obj.layer()); + objects.emplace(obj.layer(), obj); +} + +bool ViewIndex::hasObject(ViewLayer l) const { + return objects.count(l); +} + +ViewObject ViewIndex::getObject(ViewLayer l) { + TRY(return objects.at(l), "no object on layer " << (int)l); +} + +Optional ViewIndex::getTopObject(vector layers) { + for (auto it = allLayers.rbegin(); it != allLayers.rend(); ++it) + if (contains(layers, *it) && hasObject(*it)) + return getObject(*it); + return Nothing(); +} + +void ViewIndex::setHighlight(HighlightType h, double amount) { + highlight = {h, amount}; +} + +Optional ViewIndex::getHighlight() const { + return highlight; +} + diff --git a/view_index.h b/view_index.h new file mode 100644 index 000000000..ec306d080 --- /dev/null +++ b/view_index.h @@ -0,0 +1,27 @@ +#ifndef _VIEW_INDEX +#define _VIEW_INDEX + +#include "view_object.h" + +class ViewIndex { + public: + void insert(const ViewObject& obj); + bool hasObject(ViewLayer) const; + ViewObject getObject(ViewLayer); + Optional getTopObject(vector); + + void setHighlight(HighlightType, double amount = 1); + + struct HighlightInfo { + HighlightType type; + double amount; + }; + + Optional getHighlight() const; + + private: + unordered_map objects; + Optional highlight; +}; + +#endif diff --git a/view_object.cpp b/view_object.cpp new file mode 100644 index 000000000..ae6bd7c96 --- /dev/null +++ b/view_object.cpp @@ -0,0 +1,211 @@ +#include "stdafx.h" + +using namespace std; + +ViewObject::ViewObject(ViewId id, ViewLayer l, const string& d) : resource_id(id), viewLayer(l), description(d) { + if (islower(description[0])) + description[0] = toupper(description[0]); +} + +void ViewObject::setBleeding(double b) { + bleeding = b; +} + +void ViewObject::setHostile(bool s) { + hostile = s; +} + +void ViewObject::setBlind(bool s) { + blind = s; +} + +void ViewObject::setInvisible(bool s) { + invisible = s; +} + +bool ViewObject::isInvisible() const { + return invisible; +} + + +void ViewObject::setPlayer(bool s) { + player = s; +} + +bool ViewObject::isPlayer() const { + return player; +} + +void ViewObject::setHidden(bool s) { + hidden = s; +} + +bool ViewObject::isHidden() const { + return hidden; +} + +void ViewObject::setBurning(double s) { + burning = s; +} + +double ViewObject::getBurning() const { + return burning; +} + +double ViewObject::getBleeding() const { + return bleeding; +} + +void ViewObject::setHeight(double h) { + height = h; +} + +double ViewObject::getHeight() const { + return height; +} + +void ViewObject::setSizeIncrease(double s) { + sizeIncrease += s; +} + +double ViewObject::getSizeIncrease() const { + return sizeIncrease; +} + +string ViewObject::getBareDescription() const { + return description; +} + +string ViewObject::getDescription() const { + string mods = getBleeding() > 0 ? "wounded" : ""; + if (hostile) { + if (mods.size() > 0) + mods.append(", "); + mods.append("hostile"); + } + if (blind) { + if (mods.size() > 0) + mods.append(", "); + mods.append("blind"); + } + if (mods.size() > 0) + mods = " (" + mods + ")"; + return description + mods; +} + +ViewLayer ViewObject::layer() const { + return viewLayer; +} + + +static vector creatureIds { + ViewId::PLAYER, + ViewId::ELF, + ViewId::ELF_CHILD, + ViewId::ELF_LORD, + ViewId::ELVEN_SHOPKEEPER, + ViewId::DWARF, + ViewId::DWARF_BARON, + ViewId::DWARVEN_SHOPKEEPER, + ViewId::GREAT_GOBLIN, + ViewId::GOBLIN, + ViewId::BANDIT, + ViewId::ZOMBIE, + ViewId::VAMPIRE, + ViewId::MUMMY, + ViewId::MUMMY_LORD, + ViewId::HORSE, + ViewId::COW, + ViewId::PIG, + ViewId::SHEEP, + ViewId::JACKAL, + ViewId::DEER, + ViewId::BOAR, + ViewId::FOX, + ViewId::BEAR, + ViewId::WOLF, + ViewId::BAT, + ViewId::RAT, + ViewId::SNAKE, + ViewId::VULTURE, + ViewId::GNOME, + ViewId::VODNIK, + ViewId::LEPRECHAUN, + ViewId::KRAKEN, + ViewId::KRAKEN2, + ViewId::FIRE_SPHERE, + ViewId::NIGHTMARE, + ViewId::DEATH, + ViewId::SPECIAL_BEAST, + ViewId::SPECIAL_HUMANOID, + ViewId::CANIF_TREE, + ViewId::DECID_TREE, +}; + +static vector itemIds { + ViewId::BODY_PART, + ViewId::BONE, + ViewId::SWORD, + ViewId::ELVEN_SWORD, + ViewId::KNIFE, + ViewId::WAR_HAMMER, + ViewId::BATTLE_AXE, + ViewId::BOW, + ViewId::ARROW, + ViewId::SCROLL, + ViewId::STEEL_AMULET, + ViewId::COPPER_AMULET, + ViewId::CRYSTAL_AMULET, + ViewId::WOODEN_AMULET, + ViewId::AMBER_AMULET, + ViewId::BOOK, + ViewId::FIRST_AID, + ViewId::EFFERVESCENT_POTION, + ViewId::MURKY_POTION, + ViewId::SWIRLY_POTION, + ViewId::VIOLET_POTION, + ViewId::PUCE_POTION, + ViewId::SMOKY_POTION, + ViewId::FIZZY_POTION, + ViewId::MILKY_POTION, + ViewId::GOLD, + ViewId::LEATHER_ARMOR, + ViewId::LEATHER_HELM, + ViewId::CHAIN_ARMOR, + ViewId::IRON_HELM, + ViewId::BOULDER, + ViewId::ROCK, + ViewId::SLIMY_MUSHROOM, + ViewId::PINK_MUSHROOM, + ViewId::DOTTED_MUSHROOM, + ViewId::GLOWING_MUSHROOM, + ViewId::GREEN_MUSHROOM, + ViewId::BLACK_MUSHROOM +}; + +static bool hallu = false; + +void ViewObject::setHallu(bool b) { + hallu = b; +} + +ViewId ViewObject::id() const { + if (hallu) { + if (contains(creatureIds, resource_id)) + return creatureIds[Random.getRandom(creatureIds.size())]; + if (contains(itemIds, resource_id)) + return itemIds[Random.getRandom(itemIds.size())]; + } + return resource_id; +} + +const ViewObject& ViewObject::unknownMonster() { + static ViewObject ret(ViewId::UNKNOWN_MONSTER, ViewLayer::CREATURE, "Unknown creature"); + return ret; +} + +const ViewObject& ViewObject::empty() { + static ViewObject ret(ViewId::BORDER_GUARD, ViewLayer::FLOOR, ""); + return ret; +} + diff --git a/view_object.h b/view_object.h new file mode 100644 index 000000000..725681454 --- /dev/null +++ b/view_object.h @@ -0,0 +1,63 @@ +#ifndef _VIEW_OBJECT_H +#define _VIEW_OBJECT_H + +#include "debug.h" +#include "enums.h" + +class ViewObject { + public: + ViewObject(ViewId id, ViewLayer l, const string& description); + + ViewObject() { Debug(FATAL) << "Don't call this constructor"; } + + void setBleeding(double); + double getBleeding() const; + + void setHostile(bool); + void setBlind(bool); + void setInvisible(bool); + + void setPlayer(bool); + bool isPlayer() const; + + void setHidden(bool); + bool isHidden() const; + bool isInvisible() const; + + static void setHallu(bool); + + void setBurning(double); + double getBurning() const; + + void setHeight(double); + double getHeight() const; + + void setSizeIncrease(double); + double getSizeIncrease() const; + + string getDescription() const; + string getBareDescription() const; + + ViewLayer layer() const; + ViewId id() const; + + const static ViewObject& unknownMonster(); + const static ViewObject& empty(); + + private: + double bleeding = 0; + bool hostile = false; + bool blind = false; + bool invisible = false; + bool player = false; + ViewId resource_id; + ViewLayer viewLayer; + string description; + bool hidden = false; + double burning = false; + double height = 0; + double sizeIncrease = 0; +}; + + +#endif diff --git a/village_control.cpp b/village_control.cpp new file mode 100644 index 000000000..dc006350b --- /dev/null +++ b/village_control.cpp @@ -0,0 +1,184 @@ +#include "stdafx.h" + +VillageControl::VillageControl(const Collective* c, const Level* l, StairDirection dir, StairKey key) + : villain(c), level(l), direction(dir), stairKey(key){ + EventListener::addListener(this); +} + +VillageControl::~VillageControl() { + EventListener::removeListener(this); +} + +void VillageControl::addCreature(Creature* c, int attackTime) { + attackTimes.insert(make_pair(c, attackTime)); +} + +bool VillageControl::startedAttack(Creature* c) { + return attackTimes.count(c) && attackTimes.at(c) <= c->getTime(); +} + +void VillageControl::onKillEvent(const Creature* victim, const Creature* killer) { + if (attackTimes.count(victim)) { + attackTimes.erase(victim); + if (attackTimes.empty()) + messageBuffer.addMessage(MessageBuffer::important("You have conquered this land. " + "You've been playing KeeperRL alpha.")); + } +} + +class HumanVillageControl : public VillageControl { + public: + HumanVillageControl(const Collective* villain, const Location* location, StairDirection dir, StairKey key) + : VillageControl(villain, location->getLevel(), dir, key), villageLocation(location) {} + + virtual MoveInfo getMove(Creature* c) override { + CHECK(startedAttack(c)); + if (pathToDungeon.empty()) + genPathToDungeon(); + if (c->getLevel() == villain->getLevel()) { + if (Optional move = c->getMoveTowards(villain->getHeartPos())) + return {1.0, [this, move, c] () { + c->move(*move); + }}; + else { + for (Vec2 v : Vec2::directions8(true)) + if (c->canDestroy(v)) + return {1.0, [this, v, c] () { + c->destroy(v); + }}; + return NoMove; + } + } else { + Vec2 stairs = getOnlyElement(c->getLevel()->getLandingSquares(direction, stairKey)); + if (c->getPosition() == stairs) + return {1.0, [this, c] () { + c->applySquare(); + }}; + int& pathInd = lastPathLocation[c]; + CHECK(pathInd >= 0 && pathInd < pathToDungeon.size() - 1) + << "Wrong index " << pathInd << " " << (int)pathToDungeon.size(); + if (c->getPosition() == pathToDungeon[pathInd + 1]) + ++pathInd; + if (c->getPosition() == pathToDungeon[pathInd]) { + if (c->canMove(pathToDungeon[pathInd + 1] - pathToDungeon[pathInd])) + return {1.0, [=] () { + c->move(pathToDungeon[pathInd + 1] - pathToDungeon[pathInd]); + }}; + else + return NoMove; + } else + if (Optional move = c->getMoveTowards(pathToDungeon[pathInd])) + return {1.0, [=] () { + c->move(*move); + }}; + else + return NoMove; + } + } + + private: + + void genPathToDungeon() { + const Level* level = villageLocation->getLevel(); + for (Vec2 v : villageLocation->getBounds()) + if (level->getSquare(v)->getTravelDir().size() == 1) { + pathToDungeon.push_back(v); + } + CHECK(pathToDungeon.size() == 1) << "Couldn't find path beginning in village"; + pathToDungeon.push_back(pathToDungeon.back() + + getOnlyElement(level->getSquare(pathToDungeon.back())->getTravelDir())); + while (1) { + vector nextMove = level->getSquare(pathToDungeon.back())->getTravelDir(); + if (nextMove.size() == 1) + break; + CHECK(nextMove.size() == 2); + Vec2 next; + if (pathToDungeon.back() + nextMove[0] != pathToDungeon[pathToDungeon.size() - 2]) + next = nextMove[0]; + else + next = nextMove[1]; + pathToDungeon.push_back(pathToDungeon.back() + next); + } + } + + const Location* villageLocation; + vector pathToDungeon; + map lastPathLocation; +}; + +VillageControl* VillageControl::humanVillage(const Collective* villain, const Location* location, + StairDirection dir, StairKey key) { + return new HumanVillageControl(villain, location, dir, key); +} + + +class DwarfVillageControl : public VillageControl { + public: + DwarfVillageControl(const Collective* villain, const Level* level, StairDirection dir, StairKey key) + : VillageControl(villain, level, dir, key) {} + + virtual MoveInfo getMove(Creature* c) override { + CHECK(startedAttack(c)); + if (c->getLevel() == villain->getLevel()) { + if (Optional move = c->getMoveTowards(villain->getHeartPos())) + return {1.0, [this, move, c] () { + c->move(*move); + }}; + else { + for (Vec2 v : Vec2::directions8(true)) + if (c->canDestroy(v)) + return {1.0, [this, v, c] () { + c->destroy(v); + }}; + return NoMove; + } + } else { + Vec2 stairs = getOnlyElement(c->getLevel()->getLandingSquares(direction, stairKey)); + if (c->getPosition() == stairs) + return {1.0, [this, c] () { + c->applySquare(); + }}; + if (Optional move = c->getMoveTowards(stairs)) + return {1.0, [=] () { + c->move(*move); + }}; + else + return NoMove; + } + } + + private: + + void genPathToDungeon() { + const Level* level = villageLocation->getLevel(); + for (Vec2 v : villageLocation->getBounds()) + if (level->getSquare(v)->getTravelDir().size() == 1) { + pathToDungeon.push_back(v); + } + CHECK(pathToDungeon.size() == 1) << "Couldn't find path beginning in village"; + pathToDungeon.push_back(pathToDungeon.back() + + getOnlyElement(level->getSquare(pathToDungeon.back())->getTravelDir())); + while (1) { + vector nextMove = level->getSquare(pathToDungeon.back())->getTravelDir(); + if (nextMove.size() == 1) + break; + CHECK(nextMove.size() == 2); + Vec2 next; + if (pathToDungeon.back() + nextMove[0] != pathToDungeon[pathToDungeon.size() - 2]) + next = nextMove[0]; + else + next = nextMove[1]; + pathToDungeon.push_back(pathToDungeon.back() + next); + } + } + + const Location* villageLocation; + vector pathToDungeon; + map lastPathLocation; +}; + +VillageControl* VillageControl::dwarfVillage(const Collective* villain, const Level* level, + StairDirection dir, StairKey key) { + return new DwarfVillageControl(villain, level, dir, key); +} + diff --git a/village_control.h b/village_control.h new file mode 100644 index 000000000..1a7b32a13 --- /dev/null +++ b/village_control.h @@ -0,0 +1,27 @@ +#ifndef _VILLAGE_CONTROL_H +#define _VILLAGE_CONTROL_H + +class VillageControl : public EventListener { + public: + virtual ~VillageControl(); + void addCreature(Creature* c, int attackTime); + + virtual MoveInfo getMove(Creature* c) = 0; + bool startedAttack(Creature* c); + + virtual void onKillEvent(const Creature* victim, const Creature* killer) override; + + static VillageControl* humanVillage(const Collective* villain, const Location* villageLocation, + StairDirection dir, StairKey key); + static VillageControl* dwarfVillage(const Collective* villain, const Level*, + StairDirection dir, StairKey key); + protected: + VillageControl(const Collective* villain, const Level*, StairDirection, StairKey); + map attackTimes; + const Collective* villain; + const Level* level; + StairDirection direction; + StairKey stairKey; +}; + +#endif diff --git a/window_view.cpp b/window_view.cpp new file mode 100644 index 000000000..673e654df --- /dev/null +++ b/window_view.cpp @@ -0,0 +1,1364 @@ +#include "stdafx.h" + + +using sf::Color; +using sf::String; +using sf::RenderWindow; +using sf::VideoMode; +using sf::Text; +using sf::Font; +using sf::Event; +using sf::RectangleShape; +using sf::Vector2f; +using sf::Vector2u; +using sf::Image; +using sf::Sprite; +using sf::Texture; +using sf::Keyboard; + +using namespace std; + +Color white(255, 255, 255); +Color yellow(250, 255, 0); +Color lightBrown(210, 150, 0); +Color orangeBrown(250, 150, 0); +Color brown(240, 130, 0); +Color darkBrown(100, 60, 0); +Color lightGray(150, 150, 150); +Color gray(100, 100, 100); +Color almostGray(102, 102, 102); +Color darkGray(50, 50, 50); +Color almostDarkGray(60, 60, 60); +Color black(0, 0, 0); +Color almostWhite(200, 200, 200); +Color green(0, 255, 0); +Color lightGreen(100, 255, 100); +Color darkGreen(0, 150, 0); +Color red(255, 0, 0); +Color lightRed(255, 100, 100); +Color pink(255, 20, 147); +Color orange(255, 165, 0); +Color blue(0, 0, 255); +Color darkBlue(50, 50, 200); +Color lightBlue(100, 100, 255); +Color purple(160, 32, 240); +Color violet(120, 0, 255); +Color translucentBlack(0, 0, 0); + +View* View::createLoggingView(ofstream& of) { + return new LoggingView(of); +} + +View* View::createReplayView(ifstream& ifs) { + return new ReplayView(ifs); +} + +struct Tile { + Color color; + String text; + bool symFont = false; + int px = -1, py = -1; + Tile(sf::Uint32 ch, Color col, bool sym = false) : color(col), text(ch), symFont(sym) { + } + Tile(int x, int y) : px(x), py(y) {} +}; + +Tile getSpecialCreature(const ViewObject& obj, bool humanoid) { + RandomGen r; + r.init(std::hash()(obj.getBareDescription())); + string let = humanoid ? "WETYUIPLKJHFAXBM" : "qwetyupkjfaxbnm"; + char c; + if (contains(let, obj.getBareDescription()[0])) + c = obj.getBareDescription()[0]; + else + if (contains(let, tolower(obj.getBareDescription()[0]))) + c = tolower(obj.getBareDescription()[0]); + else + c = let[r.getRandom(let.size())]; + Color col(r.getRandom(80, 250), r.getRandom(80, 250), 0); + return Tile(c, col); +} + +Tile getTile(const ViewObject& obj) { + switch (obj.id()) { + case ViewId::PLAYER: return Tile('@', white); + case ViewId::UNKNOWN_MONSTER: return Tile('?', lightGreen); + case ViewId::SPECIAL_BEAST: return getSpecialCreature(obj, false); + case ViewId::SPECIAL_HUMANOID: return getSpecialCreature(obj, true); + case ViewId::ELF: return Tile('@', green); + case ViewId::ELF_CHILD: return Tile('@', lightGreen); + case ViewId::ELF_LORD: return Tile('@', darkGreen); + case ViewId::ELVEN_SHOPKEEPER: return Tile('@', lightBlue); + case ViewId::IMP: return Tile('i', lightBrown); + case ViewId::BILE_DEMON: return Tile('Q', orange); + case ViewId::HELL_HOUND: return Tile('d', purple); + case ViewId::CHICKEN: return Tile('c', yellow); + case ViewId::DWARF: return Tile('h', blue); + case ViewId::DWARF_BARON: return Tile('h', darkBlue); + case ViewId::DWARVEN_SHOPKEEPER: return Tile('h', lightBlue); + case ViewId::FLOOR: return Tile('.', white); + case ViewId::BRIDGE: return Tile('_', brown); + case ViewId::PATH: return Tile('.', lightGray); + case ViewId::SAND: return Tile('.', yellow); + case ViewId::GRASS: return Tile(0x1d0f0, green, true); + case ViewId::WALL: return Tile('#', lightGray); + case ViewId::MOUNTAIN: return Tile(0x25ee, darkGray, true); + case ViewId::GOLD_ORE: return Tile(L'⁂', yellow, true); + case ViewId::SNOW: return Tile(0x25ee, white, true); + case ViewId::HILL: return Tile(0x1d022, darkGreen, true); + case ViewId::WOOD_WALL: return Tile('#', darkBrown); + case ViewId::BLACK_WALL: return Tile('#', lightGray); + case ViewId::YELLOW_WALL: return Tile('#', yellow); + case ViewId::SECRETPASS: return Tile('#', lightGray); + case ViewId::DOWN_STAIRCASE: return Tile(0x2798, almostWhite, true); + case ViewId::UP_STAIRCASE: return Tile(0x279a, almostWhite, true); + case ViewId::GREAT_GOBLIN: return Tile('O', purple); + case ViewId::GOBLIN: return Tile('o', darkBlue); + case ViewId::BANDIT: return Tile('@', darkBlue); + case ViewId::KNIGHT: return Tile('@', white); + case ViewId::AVATAR: return Tile('@', blue); + case ViewId::ARCHER: return Tile('@', brown); + case ViewId::PESEANT: return Tile('@', green); + case ViewId::CHILD: return Tile('@', lightGreen); + case ViewId::ZOMBIE: return Tile('Z', green); + case ViewId::VAMPIRE: return Tile('V', darkGray); + case ViewId::MUMMY: return Tile('Z', yellow); + case ViewId::MUMMY_LORD: return Tile('Z', orange); + case ViewId::JACKAL: return Tile('d', lightBrown); + case ViewId::DEER: return Tile('R', darkBrown); + case ViewId::HORSE: return Tile('H', lightBrown); + case ViewId::COW: return Tile('C', white); + case ViewId::SHEEP: return Tile('s', white); + case ViewId::PIG: return Tile('p', yellow); + case ViewId::BOAR: return Tile('b', lightBrown); + case ViewId::FOX: return Tile('d', orangeBrown); + case ViewId::WOLF: return Tile('d', darkBlue); + case ViewId::VODNIK: return Tile('f', green); + case ViewId::KRAKEN: return Tile('S', darkGreen); + case ViewId::DEATH: return Tile('D', darkGray); + case ViewId::KRAKEN2: return Tile('S', green); + case ViewId::NIGHTMARE: return Tile('n', purple); + case ViewId::FIRE_SPHERE: return Tile('e', red); + case ViewId::BEAR: return Tile('N', brown); + case ViewId::BAT: return Tile('b', darkGray); + case ViewId::GNOME: return Tile('g', green); + case ViewId::LEPRECHAUN: return Tile('l', green); + case ViewId::RAT: return Tile('r', brown); + case ViewId::SNAKE: return Tile('s', yellow); + case ViewId::VULTURE: return Tile('v', darkGray); + case ViewId::BODY_PART: return Tile('%', red); + case ViewId::BONE: return Tile('%', white); + case ViewId::BUSH: return Tile('&', darkGreen); + case ViewId::DECID_TREE: return Tile(0x1f70d, darkGreen, true); + case ViewId::CANIF_TREE: return Tile(0x2663, darkGreen, true); + case ViewId::WATER: return Tile('~', lightBlue); + case ViewId::MAGMA: return Tile('~', red); + case ViewId::ABYSS: return Tile('~', darkGray); + case ViewId::DOOR: return Tile(0x1f062, brown, true); + case ViewId::SWORD: return Tile(')', lightGray); + case ViewId::ELVEN_SWORD: return Tile(')', gray); + case ViewId::KNIFE: return Tile(')', white); + case ViewId::WAR_HAMMER: return Tile(')', blue); + case ViewId::BATTLE_AXE: return Tile(')', green); + case ViewId::BOW: return Tile(')', brown); + case ViewId::ARROW: return Tile('\\', brown); + case ViewId::SCROLL: return Tile('?', white); + case ViewId::STEEL_AMULET: return Tile('\"', yellow); + case ViewId::COPPER_AMULET: return Tile('\"', yellow); + case ViewId::CRYSTAL_AMULET: return Tile('\"', yellow); + case ViewId::WOODEN_AMULET: return Tile('\"', yellow); + case ViewId::AMBER_AMULET: return Tile('\"', yellow); + case ViewId::BOOK: return Tile('+', yellow); + case ViewId::FIRST_AID: return Tile('+', red); + case ViewId::TRAP_ITEM: return Tile('+', yellow); + case ViewId::EFFERVESCENT_POTION: return Tile('!', lightRed); + case ViewId::MURKY_POTION: return Tile('!', blue); + case ViewId::SWIRLY_POTION: return Tile('!', yellow); + case ViewId::VIOLET_POTION: return Tile('!', violet); + case ViewId::PUCE_POTION: return Tile('!', darkBrown); + case ViewId::SMOKY_POTION: return Tile('!', lightGray); + case ViewId::FIZZY_POTION: return Tile('!', lightBlue); + case ViewId::MILKY_POTION: return Tile('!', white); + case ViewId::SLIMY_MUSHROOM: return Tile(0x22c6, darkGray, true); + case ViewId::PINK_MUSHROOM: return Tile(0x22c6, pink, true); + case ViewId::DOTTED_MUSHROOM: return Tile(0x22c6, green, true); + case ViewId::GLOWING_MUSHROOM: return Tile(0x22c6, lightBlue, true); + case ViewId::GREEN_MUSHROOM: return Tile(0x22c6, green, true); + case ViewId::BLACK_MUSHROOM: return Tile(0x22c6, darkGray, true); + case ViewId::FOUNTAIN: return Tile('0', lightBlue); + case ViewId::GOLD: return Tile('$', yellow); + case ViewId::CHEST: return Tile('=', brown); + case ViewId::COFFIN: return Tile(L'⚰', darkGray, true); + case ViewId::BOULDER: return Tile(L'●', lightGray, true); + case ViewId::UNARMED_BOULDER_TRAP: return Tile(L'○', lightGray, true); + case ViewId::PORTAL: return Tile(0x1d6af, lightGreen, true); + case ViewId::TRAP: return Tile(L'➹', yellow, true); + case ViewId::GAS_TRAP: return Tile(L'☠', green, true); + case ViewId::UNARMED_GAS_TRAP: return Tile(L'☠', lightGray, true); + case ViewId::ROCK: return Tile('*', lightGray); + case ViewId::BED: return Tile('=', white); + case ViewId::DUNGEON_HEART: return Tile(L'♥', white, true); + case ViewId::ALTAR: return Tile(L'Ω', white); + case ViewId::TORTURE_TABLE: return Tile('=', gray); + case ViewId::TRAINING_DUMMY: return Tile(L'‡', brown, true); + case ViewId::WORKSHOP: return Tile('&', lightBlue); + case ViewId::GRAVE: return Tile(0x2617, gray, true); + case ViewId::BARS: return Tile(L'⧻', lightBlue); + case ViewId::BORDER_GUARD: return Tile(' ', white); + case ViewId::LEATHER_ARMOR: return Tile('[', brown); + case ViewId::LEATHER_HELM: return Tile('[', brown); + case ViewId::CHAIN_ARMOR: return Tile('[', lightGray); + case ViewId::IRON_HELM: return Tile('[', lightGray); + case ViewId::DESTROYED_FURNITURE: return Tile('*', brown); + case ViewId::BURNT_FURNITURE: return Tile('*', darkGray); + case ViewId::FALLEN_TREE: return Tile('*', green); + case ViewId::BURNT_TREE: return Tile('*', darkGray); + case ViewId::GUARD_POST: return Tile(L'⚐', yellow, true); + } + Debug(FATAL) << "unhandled view id " << (int)obj.id(); + return Tile(' ', white); +} + +RenderWindow* display; +sf::View* sfView; + +int screenWidth; +int screenHeight; + +Font textFont; +int textSize = 20; +int smallTextSize = 12; + +Font tileFont; +Font symbolFont; + +Image mapBuffer; +Texture tiles; + +class Clock { + public: + + int getMillis() { + if (lastPause > -1) + return lastPause - pausedTime; + else + return clock.getElapsedTime().asMilliseconds() - pausedTime; + } + + void setMillis(int time) { + if (lastPause > -1) + pausedTime = lastPause - time; + else + pausedTime = clock.getElapsedTime().asMilliseconds() - time; + } + + void pause() { + if (lastPause == -1) + lastPause = clock.getElapsedTime().asMilliseconds(); + } + + void cont() { + if (lastPause > -1) { + pausedTime += clock.getElapsedTime().asMilliseconds() - lastPause; + lastPause = -1; + } + } + + bool isPaused() { + return lastPause > -1; + } + + private: + int pausedTime = 0; + int lastPause = -1; + sf::Clock clock; +}; + +static Clock myClock; + +int getTextWidth(const Font& font, int size, String s) { + Text t(s, font, size); + return t.getLocalBounds().width; +} + +void drawText(const Font& font, int size, Color color, int x, int y, String s, bool center = false) { + int ox = 0; + int oy = 0; + Text t(s, font, size); + if (center) { + sf::FloatRect bounds = t.getLocalBounds(); + ox -= bounds.left + bounds.width / 2; + //oy -= bounds.top + bounds.height / 2; + } + t.setPosition(x + ox, y + oy); + t.setColor(color); + display->draw(t); +} + +void drawText(Color color, int x, int y, string s, bool center = false, int size = textSize) { + std::basic_string utf32; + sf::Utf8::toUtf32(s.begin(), s.end(), std::back_inserter(utf32)); + drawText(textFont, size, color, x, y, utf32, center); +} + +void drawText(Color color, int x, int y, const char* c, bool center = false, int size = textSize) { + drawText(textFont, size, color, x, y, String(c), center); +} + +void drawImage(int px, int py, const Image& image) { + Texture t; + t.loadFromImage(image); + Sprite s(t); + s.setPosition(px, py); + display->draw(s); +} + +void drawSprite(int x, int y, int px, int py, int w, int h, const Texture& t) { + Sprite s(t, sf::IntRect(px, py, w, h)); + s.setPosition(x, y); + display->draw(s); +} + +void WindowView::initialize() { + display = new RenderWindow(VideoMode(1024, 600, 32), "KeeperRL"); + sfView = new sf::View(display->getDefaultView()); + screenHeight = display->getSize().y; + screenWidth = display->getSize().x; + + textFont.loadFromFile("coolvetica rg.ttf"); + tileFont.loadFromFile("coolvetica rg.ttf"); + symbolFont.loadFromFile("Symbola.ttf"); + + normalLayout = MapLayout::gridLayout(screenWidth, screenHeight, 16, 20, 0, 30, 255, 0, 1, allLayers); + tppLayout = MapLayout::tppLayout(screenWidth, screenHeight, 16, 20, 0, 30, 220, 85); + unzoomLayout = MapLayout::gridLayout(screenWidth, screenHeight, 8, 10, 0, 30, 220, 85, 1, + {ViewLayer::FLOOR, ViewLayer::CREATURE}); + worldLayout = MapLayout::worldLayout(screenWidth, screenHeight, 0, 80, 220, 75); + allLayouts.push_back(normalLayout); + allLayouts.push_back(tppLayout); + allLayouts.push_back(unzoomLayout); + allLayouts.push_back(worldLayout); + mapBuffer.create(600, 600); + mapLayout = normalLayout; + //Image tileImage; + //CHECK(tileImage.loadFromFile("tile_test.png")); + //tiles.loadFromImage(tileImage); +} + +void WindowView::displaySplash(bool& ready) { + Image splash; + CHECK(splash.loadFromFile("splash.png")); + drawImage((screenWidth - splash.getSize().x) / 2, (screenHeight - splash.getSize().y) / 2, splash); + drawText(white, screenWidth / 2, screenHeight - 60, "Loading...", true); + drawAndClearBuffer(); + while (!ready) { + sf::sleep(sf::milliseconds(30)); + Event event; + while (display->pollEvent(event)) { + if (event.type == Event::Resized) { + resize(event.size.width, event.size.height); + } + if (event.type == Event::GainedFocus || event.type == Event::Resized) { + drawImage((screenWidth - splash.getSize().x) / 2, (screenHeight - splash.getSize().y) / 2, splash); + drawText(white, screenWidth / 2, screenHeight - 60, "Loading...", true); + drawAndClearBuffer(); + } + } + } +} + +bool keypressed() { + Event event; + while (display->pollEvent(event)) + if (event.type == Event::KeyPressed) + return true; + return false; +} + +void WindowView::resize(int width, int height) { + screenWidth = width; + screenHeight = height; + for (MapLayout* layout : allLayouts) + layout->updateScreenSize(screenWidth, screenHeight); + display->setView(*(sfView = new sf::View(sf::FloatRect(0, 0, screenWidth, screenHeight)))); +} + +Optional WindowView::readkey() { + Event event; + while (1) { + bool wasPaused = false; + if (!myClock.isPaused()) { + myClock.pause(); + wasPaused = true; + } + display->waitEvent(event); + if (considerScrollEvent(event)) + return Nothing(); + if (wasPaused) + myClock.cont(); + Debug() << "Event " << event.type; + if (event.type == Event::KeyPressed) { + Event::KeyEvent ret(event.key); + while (display->pollEvent(event)); + return ret; + } + if (event.type == Event::Resized) { + resize(event.size.width, event.size.height); + return Nothing(); + } + if (event.type == Event::GainedFocus) + return Nothing(); + } +} + +void WindowView::close() { +} + +void drawFilledRectangle(const Rectangle& t, Color color, Optional outline = Nothing()) { + RectangleShape r(Vector2f(t.getW(), t.getH())); + r.setPosition(t.getPX(), t.getPY()); + r.setFillColor(color); + if (outline) { + r.setOutlineThickness(2); + r.setOutlineColor(*outline); + } + display->draw(r); +} + +void drawFilledRectangle(int px, int py, int kx, int ky, Color color, Optional outline = Nothing()) { + drawFilledRectangle(Rectangle(px, py, kx, ky), color, outline); +} + +static Color getColor(const ViewObject& object) { + if (object.isInvisible()) + return darkGray; + if (object.isHidden()) + return lightGray; + /* if (object.isBurning()) + return red;*/ + double bleeding = object.getBleeding(); + if (bleeding > 0) + bleeding = 0.5 + bleeding / 2; + bleeding = min(1., bleeding); + Color color = getTile(object).color; + return Color( + (1 - bleeding) * color.r + bleeding * 255, + (1 - bleeding) * color.g, + (1 - bleeding) * color.b); +} + +static Color getMemoryColor(const ViewObject& object) { + Color color = getTile(object).color; + float cf = 3.5; + float r = color.r, g = color.g, b = color.b; + return Color( + (cf * r + g + b) / (2 + cf), + (r + g * cf + b) / (2 + cf), + (r + g + b * cf) / (2 + cf)); +} + +int fireVar = 50; + +Color getFireColor() { + return Color(200 + Random.getRandom(-fireVar, fireVar), Random.getRandom(fireVar), Random.getRandom(fireVar), 150); +} + +void printStanding(int x, int y, double standing, const string& tribeName) { + standing = min(1., max(-1., standing)); + Color color = standing < 0 + ? Color(255, 255 * (1. + standing), 255 *(1. + standing)) + : Color(255 * (1. - standing), 255, 255 * (1. - standing)); + drawText(color, x, y, (standing >= 0 ? "friend of " : "enemy of ") + tribeName); +} + +Color getSpeedColor(int value) { + if (value > 100) + return Color(max(0, 255 - (value - 100) * 2), 255, max(0, 255 - (value - 100) * 2)); + else + return Color(255, max(0, 255 + (value - 100) * 4), max(0, 255 + (value - 100) * 4)); +} + +int topBarHeight = 50; +int rightBarWidth = 230; + +void WindowView::drawPlayerInfo() { + GameInfo::PlayerInfo& info = gameInfo.playerInfo; + string title = info.title; + if (!info.adjectives.empty() || !info.playerName.empty()) + title = " " + title; + for (int i : All(info.adjectives)) + title = string(i (info.time); + drawText(white, 10, line1, playerLine); + drawText(getSpeedColor(info.speed), 10, line2, speed); + drawText(white, 135, line2, attr + " " + turn); + drawText(white, 350, line1, info.levelName + " " + money); + drawText(white, 600, line1, wielding); + // printStanding(screenWidth - rightBarWidth, line0, info.elfStanding, "elves"); + // printStanding(screenWidth - rightBarWidth, line1, info.dwarfStanding, "dwarves"); + // printStanding(screenWidth - rightBarWidth, line2, info.goblinStanding, "goblins"); +} + +string getPlural(const string& a, const string&b, int num) { + if (num == 1) + return "1 " + a; + else + return convertToString(num) + " " + b; +} + +const int legendLineHeight = 30; +const int legendStartHeight = topBarHeight + 80; + +static map> getCreatureMap(vector creatures) { + map> creatureMap; + for (int i : All(creatures)) { + auto elem = creatures[i]; + if (!creatureMap.count(elem->getName())) { + creatureMap.insert(make_pair(elem->getName(), make_pair(elem->getViewObject(), 1))); + } else + ++creatureMap[elem->getName()].second; + } + return creatureMap; +} + +static void drawViewObject(const ViewObject& obj, int x, int y) { + Tile tile = getTile(obj); + drawText(tile.symFont ? symbolFont : textFont, 20, getColor(obj), x, y, tile.text, true); +} + +void WindowView::drawMinions(GameInfo::BandInfo& info) { + map> creatureMap = getCreatureMap(info.creatures); + map> enemyMap = getCreatureMap(info.enemies); + drawText(white, screenWidth - rightBarWidth, legendStartHeight, info.monsterHeader); + int cnt = 0; + int lineStart = legendStartHeight + 35; + for (auto elem : creatureMap){ + int height = lineStart + cnt * legendLineHeight; + drawViewObject(elem.second.first, screenWidth - rightBarWidth + 10, height); + Color col = (elem.first == chosenCreature) ? green : white; + drawText(col, screenWidth - rightBarWidth + 30, height, + convertToString(elem.second.second) + " " + elem.first); + creatureGroupButtons.emplace_back( + screenWidth - rightBarWidth, height, screenWidth - rightBarWidth + 150, height + legendLineHeight); + creatureNames.push_back(elem.first); + ++cnt; + } + + if (info.gatheringTeam && !info.team.empty()) { + drawText(white, screenWidth - rightBarWidth, lineStart + (cnt + 1) * legendLineHeight, + getPlural("monster", "monsters", info.team.size())); + ++cnt; + } + if (info.creatures.size() > 1 || info.gatheringTeam) { + int height = lineStart + (cnt + 1) * legendLineHeight; + drawText((info.gatheringTeam && info.team.empty()) ? green : white, screenWidth - rightBarWidth, height, + info.team.empty() ? "[gather team]" : "[command team]"); + int butWidth = 150; + teamButton = Rectangle(screenWidth - rightBarWidth, height, + screenWidth - rightBarWidth + butWidth, height + legendLineHeight); + if (info.gatheringTeam) { + drawText(white, screenWidth - rightBarWidth + butWidth, height, "[cancel]"); + cancelTeamButton = Rectangle(screenWidth - rightBarWidth + butWidth, height, + screenWidth - rightBarWidth + 230, height + legendLineHeight); + } + cnt += 2; + } + ++cnt; + if (!enemyMap.empty()) { + drawText(white, screenWidth - rightBarWidth, lineStart + (cnt + 1) * legendLineHeight, "Enemies:"); + for (auto elem : enemyMap){ + int height = lineStart + (cnt + 2) * legendLineHeight + 10; + drawViewObject(elem.second.first, screenWidth - rightBarWidth + 10, height); + drawText(white, screenWidth - rightBarWidth + 30, height, + convertToString(elem.second.second) + " " + elem.first); + ++cnt; + } + } + if (chosenCreature != "") { + if (!creatureMap.count(chosenCreature)) { + chosenCreature = ""; + } else { + int width = 220; + vector chosen; + for (const Creature* c : info.creatures) + if (c->getName() == chosenCreature) + chosen.push_back(c); + drawFilledRectangle(screenWidth - rightBarWidth - width - 20, lineStart, + screenWidth - rightBarWidth, legendStartHeight + 35 + (chosen.size() + 3) * legendLineHeight, black); + drawText(lightBlue, screenWidth - rightBarWidth - width - 10, lineStart, + info.gatheringTeam ? "Click to add to team:" : "Click to possess:"); + int cnt = 1; + for (const Creature* c : chosen) { + int height = lineStart + cnt * legendLineHeight; + drawViewObject(c->getViewObject(), screenWidth - rightBarWidth - width, height); + drawText(contains(info.team, c) ? green : white, screenWidth - rightBarWidth - width + 30, height, + "level: " + convertToString(c->getExpLevel()) + " " + info.tasks[c]); + creatureButtons.emplace_back(screenWidth - rightBarWidth - width, height, + screenWidth - rightBarWidth, height + legendLineHeight); + chosenCreatures.push_back(c); + ++cnt; + } + int height = lineStart + cnt * legendLineHeight + 10; + drawText(white, screenWidth - rightBarWidth - width, height, "[show description]"); + descriptionButton = Rectangle(screenWidth - rightBarWidth - width, height, + screenWidth - rightBarWidth, height + legendLineHeight); + } + } +} + +void WindowView::drawBuildings(GameInfo::BandInfo& info) { + for (int i : All(info.buttons)) { + string text = get<0>(info.buttons[i]); + int height = legendStartHeight + i * legendLineHeight; + drawViewObject(get<1>(info.buttons[i]), screenWidth - rightBarWidth, height); + drawText(i == info.activeButton ? green : (get<2>(info.buttons[i]) ? white : lightGray), + screenWidth - rightBarWidth + 30, height, text); + roomButtons.emplace_back(screenWidth - rightBarWidth, height, + screenWidth - rightBarWidth + 150, height + legendLineHeight); + } +} + +void WindowView::drawKeeperHelp() { + vector helpText { "use mouse to", "dig and build", "", "click on minion list", "to possess", + "", "heroes come from", "the up staircase", "", "[space] pause", "[z] zoom"}; + int cnt = 0; + for (string line : helpText) { + int height = legendStartHeight + cnt * legendLineHeight; + drawText(lightBlue, screenWidth - rightBarWidth, height, line); + cnt ++; + } +} + +void WindowView::drawBandInfo() { + GameInfo::BandInfo& info = gameInfo.bandInfo; + int line0 = screenHeight - 90; + int line1 = screenHeight - 65; + int line2 = screenHeight - 40; + drawFilledRectangle(0, line1 - 10, screenWidth - rightBarWidth, screenHeight, translucentBlack); + string playerLine = info.name; + drawText(white, 10, line1, playerLine); + if (!myClock.isPaused()) + drawText(red, 10, line2, info.warning); + else + drawText(red, 10, line2, "PAUSED"); + + drawText(white, 600, line2, "$ " + convertToString(info.numGold) + " T:" + convertToString(info.time)); + sf::Uint32 optionSyms[] = {L'⌂', 0x1f718, L'i', L'?'}; + optionButtons.clear(); + for (int i = 0; i < 4; ++i) { + int w = 45; + int line = topBarHeight - 20; + int h = 45; + int leftPos = screenWidth - rightBarWidth + 15; + drawText(i < 2 ? symbolFont : textFont, 35, i == int(collectiveOption) ? green : white, + leftPos + i * w, line, optionSyms[i], true); + optionButtons.emplace_back(leftPos + i * w - w / 2, line, + leftPos + (i + 1) * w - w / 2, line + h); + } + roomButtons.clear(); + int cnt = 0; + creatureGroupButtons.clear(); + creatureButtons.clear(); + creatureNames.clear(); + teamButton = Nothing(); + cancelTeamButton = Nothing(); + chosenCreatures.clear(); + descriptionButton = Nothing(); + if (collectiveOption != CollectiveOption::MINIONS) + chosenCreature = ""; + switch (collectiveOption) { + case CollectiveOption::MINIONS: drawMinions(info); break; + case CollectiveOption::BUILDINGS: drawBuildings(info); break; + case CollectiveOption::KEY_MAPPING: drawKeeperHelp(); break; + case CollectiveOption::LEGEND: break; + } +} + +void WindowView::refreshText() { + int lineHeight = 25; + int numMsg = 0; + for (int i : All(currentMessage)) + if (!currentMessage[i].empty()) + numMsg = i + 1; + drawFilledRectangle(0, 0, screenWidth, lineHeight * (numMsg + 1), translucentBlack); + for (int i : All(currentMessage)) + drawText(oldMessage ? gray : white, 10, 10 + lineHeight * i, currentMessage[i]); + switch (gameInfo.infoType) { + case GameInfo::InfoType::PLAYER: + drawPlayerInfo(); + break; + case GameInfo::InfoType::BAND: drawBandInfo(); break; + } +} + +static vector> keyMapping { + {"u", "leave minion"}, + {"i", "inventory"}, + {"e", "equipment"}, + {"pad 5 or enter", ""}, + {"", "pick up or"}, + {"", "interact"}, + {"", "with square"}, + {"d", "drop"}, + {"space", "wait"}, + {"a", "apply item"}, + {"t", "throw"}, + {"m", "history"}, + {"h", "hide"}, + {"c", "chat"}, + {"p", "pay"}, + {"ctrl + arrow", "travel"}, + {"alt + arrow", "fire"}, + {"z", "zoom"}, + {"shift + z", "world map"}, + {"F1", "legend"}, +}; + +/*Vec2 WindowView::projectOnBorders(Rectangle area, Vec2 pos) { + Vec2 center = Vec2((area.getPX() + area.getKX()) / 2, (area.getPY() + area.getKY()) / 2); + Vec2 d = pos - center; + if (d.x == 0) { + return Vec2(center.x, d.y > 0 ? area.getKY() - 1 : area.getPY()); + } + int cy = d.y * area.getW() / 2 / abs(d.x); + if (center.y + cy >= area.getPY() && center.y + cy < area.getKY()) + return Vec2(d.x > 0 ? area.getKX() - 1 : area.getPX(), center.y + cy); + int cx = d.x * area.getH() / 2 / abs(d.y); + CHECK(center.x + cx >= area.getPX() && center.x + cx < area.getKX()); + return Vec2(center.x + cx, d.y > 0 ? area.getKY() - 1: area.getPY()); +}*/ + +void WindowView::drawObjectAbs(int x, int y, const ViewObject& object, Color color, int sizeX, int sizeY) { + Tile tile = getTile(object); + if (tile.px >= 0) { + drawSprite(x, y, tile.px * 32, tile.py * 32, 32, 32, tiles); + } + else { + if (object.isPlayer()) { + drawFilledRectangle(x, y, x + sizeX, y + sizeY, gray); + int w = 1; + drawFilledRectangle(x + w, y + w, x + sizeX - w, y + sizeY - w, black); + } + drawText(tile.symFont ? symbolFont : tileFont, sizeY + object.getSizeIncrease(), color, + x + sizeX / 2, y - 3 - object.getSizeIncrease(), tile.text, true); + if (object.getBurning() > 0) { + drawText(symbolFont, sizeY, getFireColor(), + x + sizeX / 2, y + sizeY - 3, L'ѡ', true); + if (object.getBurning() > 0.5) + drawText(symbolFont, sizeY, getFireColor(), + x + sizeX / 2, y + sizeY - 3, L'Ѡ', true); + } + } +} + +unordered_map objects; +const MapMemory* lastMemory = nullptr; +unordered_map marked; + +Color getHighlightColor(ViewIndex::HighlightInfo info) { + switch (info.type) { + case HighlightType::BUILD: return yellow; + case HighlightType::POISON_GAS: return Color(0, info.amount * 255, 0); + } + Debug(FATAL) << "pokpok"; + return black; +} + +void WindowView::resetCenter() { + center = Vec2(0, 0); +} + +void WindowView::refreshView(const CreatureView* collective) { + const Level* level = collective->getLevel(); + collective->refreshGameInfo(gameInfo); + objects.clear(); + marked.clear(); + if (center == Vec2(0, 0) || collective->staticPosition()) + center = collective->getPosition().mult(Vec2(mapLayout->squareWidth(Vec2(0, 0)), + mapLayout->squareHeight(Vec2(0, 0)))); + Vec2 movePos = center - mouseOffset; + movePos.x = max(movePos.x, 0); + movePos.x = min(movePos.x, int(collective->getLevel()->getBounds().getKX() * mapLayout->squareWidth(Vec2(0, 0)))); + movePos.y = max(movePos.y, 0); + movePos.y = min(movePos.y, int(collective->getLevel()->getBounds().getKY() * mapLayout->squareHeight(Vec2(0, 0)))); + mapLayout->updatePlayerPos(movePos); + for (Vec2 pos : mapLayout->getAllTiles()) + if (level->inBounds(pos)) { + ViewIndex index = collective->getViewIndex(pos); + if (index.getHighlight()) + marked[pos] = getHighlightColor(*index.getHighlight()); + Optional obj = index.getTopObject(mapLayout->getLayers()); + if (obj) + objects.insert(std::make_pair(pos, *obj)); + } + // for (const Creature* c : player->getVisibleCreatures()) +// if (!projectOnScreen(c->getPosition()).inRectangle(mapWindowMargin)) +// objects.insert(std::make_pair(c->getPosition(), c->getViewObject())); + lastMemory = &collective->getMemory(level); + refreshScreen(); +} + +void WindowView::animateObject(vector trajectory, ViewObject object) { + for (Vec2 pos : trajectory) { + Optional prev; + if (objects.count(pos)) + prev = objects.at(pos); + objects.erase(pos); + objects.insert({pos, object}); + refreshScreen(); + // sf::sleep(sf::milliseconds(30)); + objects.erase(pos); + if (prev) + objects.insert({pos, *prev}); + } + objects.erase(trajectory.back()); + objects.insert({trajectory.back(), object}); +} + +void WindowView::drawMap() { + if (!lastMemory) + return; + + Rectangle mapWindow = mapLayout->getBounds(); + drawFilledRectangle(mapWindow, black); + bool pixelView = false; + for (Vec2 wpos : mapLayout->getAllTiles()) { + int sizeX = mapLayout->squareWidth(wpos); + int sizeY = mapLayout->squareHeight(wpos); + Vec2 pos = mapLayout->projectOnScreen(wpos, 0); + if (marked.count(wpos)) + drawFilledRectangle(pos.x, pos.y, pos.x + sizeX, pos.y + sizeY, marked.at(wpos)); + if (lastMemory->hasViewIndex(wpos) && !objects.count(wpos)) { + Optional object = lastMemory->getViewIndex(wpos).getTopObject(mapLayout->getLayers()); + if (object) { + if (sizeX > 1) + drawObjectAbs(pos.x, pos.y, *object, getMemoryColor(*object), sizeX, sizeY); + else { + mapBuffer.setPixel(pos.x, pos.y, getColor(*object)); + pixelView = true; + } + } + } + } + map objIndex; + for (auto elem : objects) { + objIndex.insert(std::make_pair(elem.second.getDescription(), elem.second)); + Vec2 wpos = elem.first; + int sizeX = mapLayout->squareWidth(wpos); + int sizeY = mapLayout->squareHeight(wpos); + Vec2 pos = mapLayout->projectOnScreen(wpos, elem.second.getHeight()); + if (sizeX > 1) + drawObjectAbs(pos.x, pos.y, + elem.second, getColor(elem.second), sizeX, sizeY); + else { + mapBuffer.setPixel(pos.x, pos.y, getColor(elem.second)); + pixelView = true; + } + // } + /* else if (elem.second.layer() == ViewLayer::CREATURE && mapView->font != nullptr) { + Vec2 proj = projectOnBorders(mapWindow, pos); + drawObjectAbs( + mapView->mapX + proj.x * mapView->squareWidth, + mapView->mapY + proj.y * mapView->squareHeight, + elem.second, getColor(elem.second), &smallFont, &smallSymbolFont); + }*/ + } + if (pixelView) + drawImage(mapLayout->getBounds().getPX(), mapLayout->getBounds().getPY(), mapBuffer); + int rightPos = screenWidth - rightBarWidth; + drawFilledRectangle(rightPos - 10, topBarHeight - 10, screenWidth, screenHeight, translucentBlack); + if (gameInfo.infoType == GameInfo::InfoType::PLAYER || collectiveOption == CollectiveOption::LEGEND) { + int cnt = 0; + if (legendOption == LegendOption::OBJECTS) { + for (auto elem : objIndex) { + drawViewObject(elem.second, rightPos, legendStartHeight + cnt * 25); + drawText(white, rightPos + 30, legendStartHeight + cnt * 25, elem.first); + ++cnt; + } + string f1text; + if (gameInfo.infoType == GameInfo::InfoType::PLAYER) + f1text = "F1 for help"; + drawText(lightBlue, rightPos, legendStartHeight + cnt * 25 + 25, f1text); + } else { + int i = 0; + for (auto elem : keyMapping) { + if (elem.first.size() > 0) + drawText(lightBlue, rightPos - 5, legendStartHeight + i * 21, "[" + elem.first + "]"); + drawText(lightBlue, rightPos + 110, legendStartHeight + i * 21, elem.second); + ++i; + } + } + } + refreshText(); + +//} +} + +void WindowView::refreshScreen(bool flipBuffer) { + drawMap(); + if (flipBuffer) + drawAndClearBuffer(); +} + +int indexHeight(const vector& options, int index) { + CHECK(index < options.size() && index >= 0); + int tmp = 0; + for (int i : All(options)) + if (!View::hasTitlePrefix(options[i]) && tmp++ == index) + return i; + Debug(FATAL) << "Bad index " << options << " " << index; + return -1; +} + +Optional WindowView::chooseDirection(const string& message) { + showMessage(message); + refreshScreen(); + do { + auto key = readkey(); + if (key) + switch (key->code) { + case Keyboard::Up: + case Keyboard::Numpad8: showMessage(""); refreshScreen(); return Vec2(0, -1); + case Keyboard::Numpad9: showMessage(""); refreshScreen(); return Vec2(1, -1); + case Keyboard::Right: + case Keyboard::Numpad6: showMessage(""); refreshScreen(); return Vec2(1, 0); + case Keyboard::Numpad3: showMessage(""); refreshScreen(); return Vec2(1, 1); + case Keyboard::Down: + case Keyboard::Numpad2: showMessage(""); refreshScreen(); return Vec2(0, 1); + case Keyboard::Numpad1: showMessage(""); refreshScreen(); return Vec2(-1, 1); + case Keyboard::Left: + case Keyboard::Numpad4: showMessage(""); refreshScreen(); return Vec2(-1, 0); + case Keyboard::Numpad7: showMessage(""); refreshScreen(); return Vec2(-1, -1); + case Keyboard::Escape: showMessage(""); refreshScreen(); return Nothing(); + default: break; + } + } while (1); +} + +void WindowView::clearMessageBox() { + messageInd = 0; + oldMessage = false; + for (int i : All(currentMessage)) + currentMessage[i].clear(); +} + + +void WindowView::showMessage(const string& message) { + messageInd = 0; + oldMessage = false; + for (int i : All(currentMessage)) + currentMessage[i].clear(); + currentMessage[0] = message; +} + +bool WindowView::yesOrNoPrompt(const string& message) { + showMessage(message + " (y/n)"); + refreshScreen(); + do { + auto key = readkey(); + if (key) + switch (key->code) { + case Keyboard::Y: showMessage(""); refreshScreen(); return true; + case Keyboard::Escape: + case Keyboard::Space: + case Keyboard::N: showMessage(""); refreshScreen(); return false; + default: break; + } + } while (1); +} + +Optional WindowView::getNumber(const string& title, int max) { + vector options; + for (int i : Range(1, max + 1)) + options.push_back(convertToString(i)); + Optional res = WindowView::chooseFromList(title, options); + if (!res) + return Nothing(); + else + return 1 + *res; +} + +int getMaxLines(); + +Optional WindowView::chooseFromList(const string& title, const vector& options, int index) { + if (options.size() == 0) + return Nothing(); + int numLines = min((int) options.size(), getMaxLines()); + int count = 0; + for (string s : options) + if (!hasTitlePrefix(s)) + ++count; + while (1) { + numLines = min((int) options.size(), getMaxLines()); + int height = indexHeight(options, index); + int cutoff = min(max(0, height - numLines / 2), (int) options.size() - numLines); + int itemsCutoff = 0; + for (int i : Range(cutoff)) + if (!hasTitlePrefix(options[i])) + ++itemsCutoff; + vector window = getPrefix(options, cutoff , numLines); + drawList(title, window, index - itemsCutoff); + auto key = readkey(); + if (key) + switch (key->code) { + case Keyboard::PageDown: index += 10; if (index >= count) index = count - 1; break; + case Keyboard::PageUp: index -= 10; if (index < 0) index = 0; break; + case Keyboard::Numpad8: + case Keyboard::Up: if (index > 0) --index; break; + case Keyboard::Numpad2: + case Keyboard::Down: if (index < count - 1) ++index; break; + case Keyboard::Numpad5: + case Keyboard::Return : clearMessageBox(); /*showMessage("");*/ return index; + case Keyboard::Escape : clearMessageBox();/* showMessage("");*/ return Nothing(); + default: break; + } + } + Debug(FATAL) << "Very bad"; + return 123; +} + +void WindowView::presentText(const string& title, const string& text) { + int maxWidth = 80; + vector rows; + for (string line : split(text, '\n')) { + rows.push_back(""); + for (string word : split(line, ' ')) + if (rows.back().size() + word.size() + 1 <= maxWidth) + rows.back().append((rows.back().size() > 0 ? " " : "") + word); + else + rows.push_back(word); + } + presentList(title, rows, false); +} + +void WindowView::presentList(const string& title, const vector& options, bool scrollDown) { + int numLines = min((int) options.size(), getMaxLines()); + if (numLines == 0) + return; + int index = scrollDown ? options.size() - numLines : 0; + while (1) { + numLines = min((int) options.size(), getMaxLines()); + vector window = getPrefix(options, index, numLines); + drawList(title, window, -1); + auto key = readkey(); + if (key) + switch (key->code) { + case Keyboard::Numpad8: + case Keyboard::Up: if (index > 0) --index; break; + case Keyboard::Numpad2: + case Keyboard::Down: if (index < options.size() - numLines) ++index; break; + case Keyboard::Return : refreshScreen(); return; + case Keyboard::Escape : refreshScreen(); return; + default: break; + } + } + refreshScreen(); +} + +static int yMargin = 10; +static int itemYMargin = 20; +static int itemSpacing = 25; +static int ySpacing = 100; + +int getMaxLines() { + return (screenHeight - ySpacing - ySpacing - 2 * yMargin - itemSpacing - itemYMargin) / itemSpacing; +} + +void WindowView::drawList(const string& title, const vector& options, int hightlight) { + int xMargin = 10; + int itemXMargin = 30; + int border = 2; + int h = 0; + int width = 800; + int xSpacing = (screenWidth - width) / 2; + refreshScreen(false); + if (hightlight > -1) + h = indexHeight(options, hightlight); + //drawFilledRectangle(xSpacing, ySpacing, screenWidth - xSpacing, screenHeight - ySpacing, white); + drawFilledRectangle(xSpacing, ySpacing, xSpacing + width, screenHeight - ySpacing, translucentBlack, white); + drawText(white, xSpacing + xMargin, ySpacing + yMargin, title); + if (hightlight > -1) + drawFilledRectangle(xSpacing + xMargin, ySpacing + yMargin + (h + 1) * itemSpacing + itemYMargin, + width + xSpacing - xMargin, ySpacing + yMargin + (h + 2) * itemSpacing + itemYMargin -1, darkGreen); + for (int i : All(options)) { + if (!hasTitlePrefix(options[i])) + drawText(white, xSpacing + xMargin + itemXMargin, ySpacing + yMargin + (i + 1) * itemSpacing + itemYMargin, options[i]); + else + drawText(yellow, xSpacing + xMargin, ySpacing + yMargin + (i + 1) * itemSpacing + itemYMargin, removeTitlePrefix(options[i])); + + } + drawAndClearBuffer(); +} + +void WindowView::drawAndClearBuffer() { + display->display(); + display->clear(black); +} + + + +void WindowView::addImportantMessage(const string& message) { + presentText("Important!", message); +} + +void WindowView::clearMessages() { + showMessage(""); +} + +void WindowView::addMessage(const string& message) { + if (oldMessage) + showMessage(""); + if (currentMessage[messageInd].size() + message.size() + 1 > maxMsgLength && + messageInd == currentMessage.size() - 1) { + currentMessage[messageInd] += " (more)"; + refreshScreen(); + while (1) { + auto key = readkey(); + if (key && (key->code == Keyboard::Space || key->code == Keyboard::Return)) + break; + } + showMessage(message); + } else { + if (currentMessage[messageInd].size() + message.size() + 1 > maxMsgLength) + ++messageInd; + currentMessage[messageInd] += (currentMessage[messageInd].size() > 0 ? " " : "") + message; + refreshScreen(); + } +} + +void WindowView::unzoom(bool pixel, bool tpp) { + if (pixel && mapLayout != worldLayout) + mapLayout = worldLayout; + /* else if (tpp && mapLayout != tppLayout) + mapLayout = tppLayout;*/ + else if (mapLayout != normalLayout) + mapLayout = normalLayout; + else + mapLayout = unzoomLayout; + refreshScreen(); +} + +bool WindowView::travelInterrupt() { + return keypressed(); +} + +ActionId getDirActionId(const Event::KeyEvent& key) { + if (key.control) + return ActionId::TRAVEL; + if (key.alt) + return ActionId::FIRE; + else + return ActionId::MOVE; +} + + +int WindowView::getTimeMilli() { + return myClock.getMillis(); +} + +void WindowView::setTimeMilli(int time) { + myClock.setMillis(time); +} + +void WindowView::stopClock() { + myClock.pause(); +} + +void WindowView::continueClock() { + myClock.cont(); +} + +bool WindowView::isClockStopped() { + return myClock.isPaused(); +} + +bool pressed = false; +bool rightPressed = false; + +bool WindowView::considerScrollEvent(sf::Event& event) { + switch (event.type) { + case Event::MouseButtonReleased : + if (event.mouseButton.button == sf::Mouse::Right) { + center -= mouseOffset; + mouseOffset = Vec2(0, 0); + rightPressed = false; + return true; + } + break; + case Event::MouseMoved: + if (rightPressed) { + mouseOffset = Vec2(event.mouseMove.x, event.mouseMove.y) - lastMousePos; + return true; + } + break; + case Event::MouseButtonPressed: + if (event.mouseButton.button == sf::Mouse::Right) { + rightPressed = true; + lastMousePos = Vec2(event.mouseButton.x, event.mouseButton.y); + return true; + } + break; + default: + break; + } + return false; +} + +Vec2 lastGoTo(-1, -1); +CollectiveAction WindowView::getClick() { + Event event; + while (display->pollEvent(event)) { + considerScrollEvent(event); + switch (event.type) { + case Event::KeyPressed: + switch (event.key.code) { + case Keyboard::Z: + unzoom(false, false); + center = Vec2(0, 0); + return CollectiveAction(CollectiveAction::IDLE); + case Keyboard::Space: + if (!myClock.isPaused()) + myClock.pause(); + else + myClock.cont(); + return CollectiveAction(CollectiveAction::IDLE); + case Keyboard::Escape: + if (yesOrNoPrompt("Are you sure you want to quit?")) + exit(0); + break; + /* case Keyboard::F1: + collectiveOption = CollectiveOption((1 + int(collectiveOption)) % 4); + break;*/ + default: + break; + } + break; + case Event::MouseButtonReleased : + if (event.mouseButton.button == sf::Mouse::Left) { + pressed = false; + return CollectiveAction(CollectiveAction::BUTTON_RELEASE); + } + break; + case Event::MouseMoved: + if (pressed) { + Vec2 goTo = mapLayout->projectOnMap(Vec2(event.mouseMove.x, event.mouseMove.y)); + if (goTo != lastGoTo ) { + return CollectiveAction(CollectiveAction::GO_TO, goTo); + lastGoTo = goTo; + } else + continue; + } + break; + case Event::MouseButtonPressed: { + CollectiveAction::Type t; + Vec2 clickPos(event.mouseButton.x, event.mouseButton.y); + if (event.mouseButton.button == sf::Mouse::Right) + chosenCreature = ""; + if (event.mouseButton.button == sf::Mouse::Left) { + if (teamButton && clickPos.inRectangle(*teamButton)) + return CollectiveAction(CollectiveAction::GATHER_TEAM); + if (cancelTeamButton && clickPos.inRectangle(*cancelTeamButton)) { + chosenCreature = ""; + return CollectiveAction(CollectiveAction::CANCEL_TEAM); + } + for (int i : All(optionButtons)) + if (clickPos.inRectangle(optionButtons[i])) + collectiveOption = (CollectiveOption) i; + for (int i : All(roomButtons)) + if (clickPos.inRectangle(roomButtons[i])) { + chosenCreature = ""; + return CollectiveAction(CollectiveAction::ROOM_BUTTON, i); + } + for (int i : All(creatureGroupButtons)) + if (clickPos.inRectangle(creatureGroupButtons[i])) { + if (chosenCreature == creatureNames[i]) + chosenCreature = ""; + else + chosenCreature = creatureNames[i]; + return CollectiveAction(CollectiveAction::IDLE); + } + for (int i : All(creatureButtons)) + if (clickPos.inRectangle(creatureButtons[i])) { + return CollectiveAction(CollectiveAction::CREATURE_BUTTON, chosenCreatures[i]); + } + if (descriptionButton && clickPos.inRectangle(*descriptionButton)) { + return CollectiveAction(CollectiveAction::CREATURE_DESCRIPTION, chosenCreatures[0]); + } + pressed = true; + chosenCreature = ""; + t = CollectiveAction::GO_TO; + return CollectiveAction(t, mapLayout->projectOnMap(clickPos)); + } + } + break; + case Event::Resized: + resize(event.size.width, event.size.height); + return CollectiveAction(CollectiveAction::IDLE); + default: break; + } + } + return CollectiveAction(CollectiveAction::IDLE); +} + +Action WindowView::getAction() { + while (1) { + auto key = readkey(); + oldMessage = true; + if (!key) + return Action(ActionId::IDLE); + auto optionalAction = mapLayout->overrideAction(*key); + if (optionalAction) + return *optionalAction; + switch (key->code) { + case Keyboard::Escape : if (yesOrNoPrompt("Are you sure you want to quit?")) exit(0); break; + case Keyboard::Z: unzoom(key->shift, key->control); return Action(ActionId::IDLE); + case Keyboard::F1: legendOption = (LegendOption)(1 - (int)legendOption); return Action(ActionId::IDLE); + case Keyboard::Up: + case Keyboard::Numpad8: return Action(getDirActionId(*key), Vec2(0, -1)); + case Keyboard::Numpad9: return Action(getDirActionId(*key), Vec2(1, -1)); + case Keyboard::Right: + case Keyboard::Numpad6: return Action(getDirActionId(*key), Vec2(1, 0)); + case Keyboard::Numpad3: return Action(getDirActionId(*key), Vec2(1, 1)); + case Keyboard::Down: + case Keyboard::Numpad2: return Action(getDirActionId(*key), Vec2(0, 1)); + case Keyboard::Numpad1: return Action(getDirActionId(*key), Vec2(-1, 1)); + case Keyboard::Left: + case Keyboard::Numpad4: return Action(getDirActionId(*key), Vec2(-1, 0)); + case Keyboard::Numpad7: return Action(getDirActionId(*key), Vec2(-1, -1)); + case Keyboard::Return: + case Keyboard::Numpad5: if (key->shift) return Action(ActionId::EXT_PICK_UP); + else return Action(ActionId::PICK_UP); + case Keyboard::I: return Action(ActionId::SHOW_INVENTORY); + case Keyboard::D: return Action(key->shift ? ActionId::EXT_DROP : ActionId::DROP); + case Keyboard::Space: + case Keyboard::Period: return Action(ActionId::WAIT); + case Keyboard::A: return Action(ActionId::APPLY_ITEM); + case Keyboard::E: return Action(ActionId::EQUIPMENT); + case Keyboard::T: return Action(ActionId::THROW); + case Keyboard::M: return Action(ActionId::SHOW_HISTORY); + case Keyboard::H: return Action(ActionId::HIDE); + case Keyboard::P: return Action(ActionId::PAY_DEBT); + case Keyboard::C: return Action(ActionId::CHAT); + case Keyboard::U: return Action(ActionId::UNPOSSESS); + default: break; + } + } +} + diff --git a/window_view.h b/window_view.h new file mode 100644 index 000000000..2f44f575e --- /dev/null +++ b/window_view.h @@ -0,0 +1,114 @@ +#ifndef _WINDOW_VIEW +#define _WINDOW_VIEW + +#include + +#include "util.h" +#include "view.h" +#include "action.h" +#include "map_layout.h" + + +/** See view.h for documentation.*/ +class WindowView: public View { + public: + + virtual void initialize() override; + virtual void displaySplash(bool& ready) override; + + virtual void close() override; + + virtual void addMessage(const string& message) override; + virtual void addImportantMessage(const string& message) override; + virtual void clearMessages() override; + virtual void refreshView(const CreatureView*) override; + virtual void resetCenter() override; + virtual Optional chooseFromList(const string& title, const vector& options, int index = 0) override; + virtual Optional chooseDirection(const string& message) override; + virtual bool yesOrNoPrompt(const string& message) override; + virtual void animateObject(vector trajectory, ViewObject object) override; + + virtual void presentText(const string& title, const string& text) override; + virtual void presentList(const string& title, const vector& options, bool scrollDown) override; + virtual Optional getNumber(const string& title, int max) override; + + virtual Action getAction() override; + virtual CollectiveAction getClick() override; + virtual bool travelInterrupt() override; + virtual int getTimeMilli() override; + virtual void setTimeMilli(int) override; + virtual void stopClock() override; + virtual bool isClockStopped() override; + virtual void continueClock() override; + + static Vec2 projectOnBorders(Rectangle area, Vec2 pos); + private: + + void drawMap(); + void drawPlayerInfo(); + void drawBandInfo(); + void drawBuildings(GameInfo::BandInfo& info); + void drawMinions(GameInfo::BandInfo& info); + void drawKeeperHelp(); + Optional readkey(); + + void showMessage(const string& message); + void drawList(const string& title, const vector& options, int hightlight); + void refreshScreen(bool flipBuffer = true); + void refreshText(); + void drawAndClearBuffer(); + void drawObjectAbs(int x, int y, const ViewObject& object, sf::Color color, int sizeX, int sizeY); + void darkenObjectAbs(int x, int y); + void clearMessageBox(); + void unzoom(bool, bool); + void resize(int, int); + + bool considerScrollEvent(sf::Event&); + + int messageInd = 0; + const static unsigned int maxMsgLength = 90; + vector currentMessage = vector(3, ""); + bool oldMessage = false; + + enum class CollectiveOption { + BUILDINGS, + MINIONS, + LEGEND, + KEY_MAPPING, + }; + + CollectiveOption collectiveOption = CollectiveOption::BUILDINGS; + + enum class LegendOption { + OBJECTS, + KEY_MAPPING, + }; + + LegendOption legendOption = LegendOption::OBJECTS; + + MapLayout* mapLayout; + MapLayout* normalLayout; + MapLayout* tppLayout; + MapLayout* unzoomLayout; + MapLayout* worldLayout; + vector allLayouts; + + vector optionButtons; + vector roomButtons; + vector creatureGroupButtons; + vector creatureButtons; + Optional descriptionButton; + Optional teamButton; + Optional cancelTeamButton; + Optional impButton; + vector creatureNames; + string chosenCreature; + vector chosenCreatures; + + Vec2 lastMousePos; + Vec2 mouseOffset; + Vec2 center; +}; + + +#endif diff --git a/world.txt b/world.txt new file mode 100644 index 000000000..32c8de112 --- /dev/null +++ b/world.txt @@ -0,0 +1,175 @@ +Abara +Abarah +Abaranjan +Abarant +Abarantika +Abarantis +Abarat +Aldran +Aldrazan +Andalar +Andalarion +Andalas +Andalaspia +Antall +Ard +Atlands +Atreis +Avant +Avantadia +Avantastia +Avanth +Avanthae +Avanthana +Avanthas +Avantika +Azeros +Bellene +Blashyrion +Caeles +Caelest +Caelewan +Calas +Calashyrkh +Calasia +Capringdom +Coron +Coronos +Crematoril +Cruz +Cyber +Cyberrodin +Cyberron +Demiplanem +Demonia +Eberra +Edolaria +Edolarion +Eidolas +Ellest +Ellestia +Encanis +Falthea +Fanta Cruz +Fantaloor +Fantasia +Far-Toril +Fionarah +Fionaranth +Fionata +Gielion +Glorantika +Glorantis +Gloril +Hyboria +Hyborianna +Inkwood +Ithan +Ithandalar +Ithanna +Ithannarat +Ivalia +Keles +Kelesméra +Kelest +Kelestica +Kultha +Lag +Land +Lando +Landood +Landoranth +Layonaria +Lumireia +Lumireis +Mirron +Moonara +Moonarah +Moonata +Moonavar +Mundood +Mundorant +Mundover +Myrth +Myrthania +Myrthlands +Myrthsea +Mystarcion +Naran +Naranth +Narantha +Norra +Ostenwelt +Pando +Pandood +Parthana +Parthania +Parthland +Parthsea +Planem +Prime +Prydaeles +Prydaelest +Prydaelyn +R Heaven +Randlan +Randlantis +Riverland +Riverlands +Runeternia +Runeteros +Santadia +Santaloor +Sartoria +Sartoril +Scythaeus +Shand +Shanda +Shandlands +Shands +Shannaria +Spidessos +Sylvara +Sylvarah +Sylvarant +Sylvaranth +Sylvarat +Tanda +Tandalar +Tandalasia +Tandalazar +Telle +Telley +Tellezza +Tercani +Tercania +Tercanis +Terrath +Tethe'all +Tethe'alla +Tethea +Tetheria +Abara +Abarah +Thyria +Toril +Valdea +Valderland +Vallene +Vallezza +Velgartor +Velgartora +Whand +Whanda +Whandora +Whands +Whovillys +Wildea +Wildemar +Zamonata +ZanZara +ZanZaranth +ZanZarat +Zarah +Zendika +Zimia