From e7618c436e60254c25a4439d4eeca2ab18546dd8 Mon Sep 17 00:00:00 2001 From: Jordan Irwin Date: Sun, 23 May 2021 08:27:59 -0700 Subject: [PATCH] Add cmer_skeleton mod... Release: https://github.com/AntumMT/mod-skeleton/releases/tag/v1.0 --- README.md | 4 + minetest.conf.example | 18 ++++ mods/mobiles/skeleton/CHANGES.txt | 5 ++ mods/mobiles/skeleton/LICENSE.txt | 21 +++++ mods/mobiles/skeleton/README.md | 32 +++++++ mods/mobiles/skeleton/TODO.txt | 6 ++ mods/mobiles/skeleton/entity.lua | 81 ++++++++++++++++++ mods/mobiles/skeleton/init.lua | 29 +++++++ mods/mobiles/skeleton/mod.conf | 8 ++ mods/mobiles/skeleton/settings.lua | 24 ++++++ mods/mobiles/skeleton/settingtypes.txt | 18 ++++ .../skeleton/sounds/cmer_skeleton_bones.ogg | Bin 0 -> 11495 bytes .../skeleton/textures/cmer_skeleton_bone.png | Bin 0 -> 388 bytes .../skeleton/textures/cmer_skeleton_inv.png | Bin 0 -> 1911 bytes .../skeleton/textures/cmer_skeleton_mesh.png | Bin 0 -> 519 bytes settingtypes.txt | 21 +++++ 16 files changed, 267 insertions(+) create mode 100644 mods/mobiles/skeleton/CHANGES.txt create mode 100644 mods/mobiles/skeleton/LICENSE.txt create mode 100644 mods/mobiles/skeleton/README.md create mode 100644 mods/mobiles/skeleton/TODO.txt create mode 100644 mods/mobiles/skeleton/entity.lua create mode 100644 mods/mobiles/skeleton/init.lua create mode 100644 mods/mobiles/skeleton/mod.conf create mode 100644 mods/mobiles/skeleton/settings.lua create mode 100644 mods/mobiles/skeleton/settingtypes.txt create mode 100644 mods/mobiles/skeleton/sounds/cmer_skeleton_bones.ogg create mode 100644 mods/mobiles/skeleton/textures/cmer_skeleton_bone.png create mode 100644 mods/mobiles/skeleton/textures/cmer_skeleton_inv.png create mode 100644 mods/mobiles/skeleton/textures/cmer_skeleton_mesh.png diff --git a/README.md b/README.md index 91cbc6db..87048b69 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m * [sand_monster][mobs_monster] ([MIT][lic.sand_monster]) -- version: [3dd5954 Git][ver.sand_monster] *2021-05-20* * [shark][] ([CC0 / CC BY-SA][lic.shark]) -- version: [9e0e048 Git][ver.shark] *2021-05-19* * [sheep][creatures] ([Zlib][lic.creatures] / [CC BY-SA][lic.ccbysa3.0]) -- version: [ff39b4a Git][ver.sheep] *2021-05-13* + * [skeleton][cmer_skeleton] ([MIT][lic.cmer_skeleton]) -- version: [1.0][ver.cmer_skeleton] *2021-05-23* * [sneeker][] ([MIT][lic.sneeker]) -- version: [1.0][ver.sneeker] *2021-05-08* * [spider][cmer_spider] ([unilicense][lic.cmer_spider]) -- version: [d1a9a82 Git][ver.cmer_spider] *2021-05-19* * [stone_monster][mobs_monster] ([MIT][lic.stone_monster]) -- version: [fa52f6f Git][ver.stone_monster] *2021-05-20* @@ -277,6 +278,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m [chatlog]: https://forum.minetest.net/viewtopic.php?t=18287 [christmas]: https://forum.minetest.net/viewtopic.php?t=3950 [cleaner]: https://github.com/AntumMT/mod-cleaner/tree/2404594 +[cmer_skeleton]: https://github.com/AntumMT/mod-skeleton [cmer_spider]: https://github.com/AntumMT/mod-spider [coloredwood]: https://forum.minetest.net/viewtopic.php?t=2411 [compass]: https://forum.minetest.net/viewtopic.php?t=3785 @@ -402,6 +404,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m [lic.castle]: mods/modpacks/castle/LICENSE [lic.christmas]: mods/buildings/christmas/LICENSE.txt [lic.cleaner]: mods/admin/cleaner/LICENSE.txt +[lic.cmer_skeleton]: mods/mobiles/skeleton/LICENSE.txt [lic.cmer_spider]: mods/mobiles/spider/LICENSE [lic.craftguide]: mods/crafting/craftguide/license.txt [lic.creatures]: mods/mobiles/engine/creatures/LICENSE.txt @@ -519,6 +522,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m [ver.chicken]: http://github.com/AntumMT/mod-cmer/tree/b126cdb [ver.christmas]: https://github.com/TheZenKitteh/minetest-christmas/tree/d3bd872 [ver.cleaner]: https://github.com/AntumMT/mod-cleaner/tree/e8359d8 +[ver.cmer_skeleton]: https://github.com/AntumMT/mod-skeleton/releases/tag/v1.0 [ver.cmer_spider]: https://github.com/AntumMT/mod-spider/tree/d1a9a82 [ver.coloredwood]: https://gitlab.com/VanessaE/coloredwood/tags/2021-01-30 [ver.compassgps]: https://github.com/Kilarin/compassgps/tree/567b95f diff --git a/minetest.conf.example b/minetest.conf.example index 3ab1493e..6373deb8 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -2007,6 +2007,24 @@ coloredwood_enable_stairsplus = true #shark.spawn_time = any +# *** skeleton *** + +## Entity lifespan. +# type: int +# default: 900 +#skeleton.lifetime = 900 + +## Spawn interval in seconds. +# type: int +# default: 120 (2 minutes) +#skeleton.spawn_interval = 120 + +## Chance of spawn at interval. +# type: int +# default: 7000 +#skeleton.spawn_chance = 7000 + + # *** sneeker *** # Sets maximum number of spawns that can exist in world. diff --git a/mods/mobiles/skeleton/CHANGES.txt b/mods/mobiles/skeleton/CHANGES.txt new file mode 100644 index 00000000..6f3add77 --- /dev/null +++ b/mods/mobiles/skeleton/CHANGES.txt @@ -0,0 +1,5 @@ + +1.0 +- created cmer:skeleton entity +- created cmer:bone item +- created spawneggs:skeleton with asm_spawneggs diff --git a/mods/mobiles/skeleton/LICENSE.txt b/mods/mobiles/skeleton/LICENSE.txt new file mode 100644 index 00000000..357bcd0f --- /dev/null +++ b/mods/mobiles/skeleton/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright © 2021 Jordan Irwin (AntumDeluge) + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/mods/mobiles/skeleton/README.md b/mods/mobiles/skeleton/README.md new file mode 100644 index 00000000..838aba4b --- /dev/null +++ b/mods/mobiles/skeleton/README.md @@ -0,0 +1,32 @@ +## Skeleton for Minetest + +### Description: + +A skeleton mob using the [cmer][] (Creatures Revived) API. + +***Status:** currently not functional* + +### Licensing: + +- Code: [MIT](LICENSE.txt) +- Textures: + - [cmer_skeleton_mesh](http://minetest.fensta.bplaced.net/#id=1141): by I don't know (CC BY-SA 3.0) + - [cmer_skeleton_bone](https://opengameart.org/node/3755): by bart (CC0) +- Sounds: + - [cmer_skeleton_bones](https://opengameart.org/node/16324): by AntumDeluge (CC0) + +### Requirements: + +Depends: [cmer][], [cmer_zombie][] + +Optional depends: [asm_spawneggs][] + +### Links: + +- [Changelog](CHANGES.txt) +- [TODO](TODO.txt) + + +[cmer]: https://forum.minetest.net/viewtopic.php?t=26684 +[cmer_zombie]: https://github.com/AntumMT/mod-cmer/tree/zombie +[asm_spawneggs]: https://content.minetest.net/packages/AntumDeluge/asm_spawneggs/ diff --git a/mods/mobiles/skeleton/TODO.txt b/mods/mobiles/skeleton/TODO.txt new file mode 100644 index 00000000..8c484e33 --- /dev/null +++ b/mods/mobiles/skeleton/TODO.txt @@ -0,0 +1,6 @@ + +TODO: +- register skeleton entity with cmer +- register egg with asm_spawneggs +- add bone item +- add localization support diff --git a/mods/mobiles/skeleton/entity.lua b/mods/mobiles/skeleton/entity.lua new file mode 100644 index 00000000..bc2efdb6 --- /dev/null +++ b/mods/mobiles/skeleton/entity.lua @@ -0,0 +1,81 @@ + +cmer.register_mob({ + name = "cmer:skeleton", + stats = { + hp = 55, + hostile = true, + lifetime = cmer_skeleton.lifetime, + can_jump = 1, + can_swim = true, + has_kockback = true, + }, + modes = { + idle = {chance=0.3,}, + walk = {chance=0.7, moving_speed=1,}, + attack = {chance=0, moving_speed=3,}, + }, + model = { + mesh = "creatures_zombie.b3d", + textures = {"cmer_skeleton_mesh.png"}, + collisionbox = {-0.25, -0.01, -0.25, 0.25, 1.65, 0.25}, + rotation = -90.0, + animations = { + idle = {start=0, stop=80, speed=15}, + walk = {start=102, stop=122, speed=15.5}, + attack = {start=102, stop=122, speed=25}, + death = {start=81, stop=101, speed=28, loop=false, duration= 2.12}, + }, + }, + sounds = { + random = { + idle = {name="cmer_skeleton_bones", gain=1.0,}, + walk = {name="cmer_skeleton_bones", gain=1.0,}, + attack = {name="cmer_skeleton_bones", gain=1.0,}, + }, + }, + drops = { + {"cmer:bone", 1, chance=1}, + }, + combat = { + attack_damage = 13, + attack_radius = 2.0, + search_enemy = true, + search_type = "player", + search_radius = 20, + }, + spawning = { + abm_nodes = { + spawn_on = { + "default:sand", + "default:desert_sand", + "default:stone", + "default:desert_stone", + }, + }, + abm_interval = cmer_skeleton.spawn_interval, + abm_chance = cmer_skeleton.spawn_chance, + max_number = 1, + number = {min=1, max=2}, + time_range = {min=0, max=23999}, + light = {min=0, max=8}, + height_limit = {min=-31000, max=31000}, + }, +}) + + +if core.global_exists("asm") then + asm.addEgg({ + name = "skeleton", + title = "Skeleton", + inventory_image = "cmer_skeleton_inv.png", + spawn = "cmer:skeleton", + ingredients = "cmer:bone", + }) +end + + +core.register_craftitem(":cmer:bone", { + description = "Bone", + inventory_image = "cmer_skeleton_bone.png", + stack_max = default_stack_max, +}) diff --git a/mods/mobiles/skeleton/init.lua b/mods/mobiles/skeleton/init.lua new file mode 100644 index 00000000..468b887b --- /dev/null +++ b/mods/mobiles/skeleton/init.lua @@ -0,0 +1,29 @@ + +cmer_skeleton = {} +cmer_skeleton.modname = core.get_current_modname() +cmer_skeleton.modpath = core.get_modpath(cmer_skeleton.modname) + +function cmer_skeleton.log(lvl, msg) + if not msg then + msg = lvl + lvl = nil + end + + msg = "[" .. cmer_skeleton.modname .. "] " .. msg + + if not lvl then + core.log(msg) + else + core.log(lvl, msg) + end +end + + +local scripts = { + "settings", + "entity", +} + +for _, script in ipairs(scripts) do + dofile(cmer_skeleton.modpath .. "/" .. script .. ".lua") +end diff --git a/mods/mobiles/skeleton/mod.conf b/mods/mobiles/skeleton/mod.conf new file mode 100644 index 00000000..d8cd994a --- /dev/null +++ b/mods/mobiles/skeleton/mod.conf @@ -0,0 +1,8 @@ +name = cmer_skeleton +title = Skeleton +description = A skeleton mob using the cmer API. +version = 1.0 +author = Jordan Irwin (AntumDeluge) +license = MIT +depends = cmer, cmer_zombie +optional_depends = asm_spawneggs diff --git a/mods/mobiles/skeleton/settings.lua b/mods/mobiles/skeleton/settings.lua new file mode 100644 index 00000000..63470b7a --- /dev/null +++ b/mods/mobiles/skeleton/settings.lua @@ -0,0 +1,24 @@ + +--- Entity lifespan. +-- +-- @setting skeleton.lifetime +-- @settype int +-- @default 900 (15 minutes) +cmer_skeleton.lifetime = tonumber(core.settings:get("skeleton.lifetime")) or 900 + +--- Spawn rate frequency. +-- +-- +-- @setting skeleton.spawn_interval +-- @settype int +-- @default 120 (2 minutes) +-- @see [ABM definition](http://minetest.gitlab.io/minetest/definition-tables.html#abm-activeblockmodifier-definition) +cmer_skeleton.spawn_interval = tonumber(core.settings:get("skeleton.spawn_interval")) or 120 + +--- Chance of spawn at interval. +-- +-- @setting skeleton.spawn_chance +-- @settype int +-- @default 7000 +-- @see [ABM definition](http://minetest.gitlab.io/minetest/definition-tables.html#abm-activeblockmodifier-definition) +cmer_skeleton.spawn_chance = tonumber(core.settings:get("skeleton.spawn_chance")) or 7000 diff --git a/mods/mobiles/skeleton/settingtypes.txt b/mods/mobiles/skeleton/settingtypes.txt new file mode 100644 index 00000000..038cfcda --- /dev/null +++ b/mods/mobiles/skeleton/settingtypes.txt @@ -0,0 +1,18 @@ + +# Entity lifespan. +# +# type: int +# default: 900 +skeleton.lifetime (Lifespan) int 900 1 + +# Spawn interval in seconds. +# +# type: int +# default: 120 (2 minutes) +skeleton.spawn_interval (Spawn interval) int 120 1 + +# Chance of spawn at interval. +# +# type: int +# default: 7000 +skeleton.spawn_chance (Spawn chance) int 7000 1 diff --git a/mods/mobiles/skeleton/sounds/cmer_skeleton_bones.ogg b/mods/mobiles/skeleton/sounds/cmer_skeleton_bones.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c8687d49286c5e476a4eb649aabd6e3852d4d760 GIT binary patch literal 11495 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�njm->DCL6vltZ-bXq&iQ13&4S=EhY<=*han3 zJM`Y}0ih;M6FE25kvH;NEJxrdJHvGESkB^CCUWp;FudmW!*=xcTfmz7IBJt@*3mBQ z;Fl)d>-I@@OK*5u%PiZ%whK)sCyC97rs(s|y^GKGJc#U9o4n5+mWI#itn^!E956xO zQ@mx6X)v|+0QFJhd`+fqr+3bTG`+wvxH^{6< zx%p^XFXk(A26t7x{UCOsJ$SQ2vd?i+m?{OR5u7WRgk9-!_-?K*8Dx;^M*Z*=w-2|y zRjJjb&mX59<#JhM(<9VFocJ%!o2PQU^N;dppI~2&y%&QQRG@CzsIAUu$8` znmyRO+SthOK%9;>ACDa4+FrJoSmSGip*Lm}#^nnSv&D*g<|DFa>VG`L6#IOUc``{~ zZ6a-t`o$El-i_s1y>WD3xKaLc*CKV2@$Y?NH|ZD)CZb?HF+ICV%Asec&)h7gmv+}2 zBHx7?ULNFSZZOcxiZH0|SSG>=8UDF0d#js#B12VVisW$J<+^gTS#8k6M_+x;xfTY`PjV3e%a)w_wW)2Uub{h)hM0n*%QY#s|o(SOoig4& zj8B3~#%YoXr{Z>WAzBv}uP>9scduTUrD$RgsQ`VK_v-}_ptV8rGrX(4`A}X@>gh@o zzHO_@?RjB?WKFOsC1#{~F$I=^!>ctro;Av(Zp7T;@{JfzEzj*n$Atti0y5V?X@ z%Bs0bsx(g%;4iX-kQG#tw=x%ZCiK9TPN~cHx}~K%r*gyfKj=6e)34uHN3EL4vLRIR zWM9K$f3E5beo;P7nD$LixR19APj)D<$`^PrfZKGLA3oAVC^$@|8E1*MK6gF%ye#Ov zZUen44(1<7Cro_czUJVOzhc@43!FYr(11zef#Z` z4J#2-dSV*8k8cFrH6xXI>6uzX^rIrwqqMbt@qR&4?#YdG@}2y?)x(~9(9>sO->(Cz zh_-7l4wemZ*F4-D>vMFDU*(Q2Ka6>o5bdLTc$_a|&G7k#LA_o)RoeEoMb zc>*8SguY^}&?`A8}AUE{=8?gZvkn;h$=Fd&4 zVp{|RMDVKwg;tMM=pL(U5kY<^Vw=Xn&f|sD2brdZqKYty_LDZzS|qwTh%u&(D`t0; zH@2<&xH_hRLiC`p;`uvEKi{UL9)gD^^?T)BuIA(PZPtuTO)a8T8hJ{7w^nKnmbz~R z3*m@+hYN%%CwBGVbp!8R@42fy-Mqoc?|1EX;_?-y4nx_cZ*7|ls|)2grs>exX35nz zFOJ$A-S6$_wK>}`bLdJSI59(&5}tHTiAipBvoA!lhpro!zIUyah>FQR3cQ^@v(b~} v=3X}-var0=JSc9J+U6LM>Yf|Cd7jC+{Z>3b;*hYIIt5E&fF+M38U+6bcdjTF literal 0 HcmV?d00001 diff --git a/mods/mobiles/skeleton/textures/cmer_skeleton_bone.png b/mods/mobiles/skeleton/textures/cmer_skeleton_bone.png new file mode 100644 index 0000000000000000000000000000000000000000..9b074547ddad209e4004c38394584a06108f1d5f GIT binary patch literal 388 zcmV-~0ek+5P)SY^hUjAg2vAzd0hK&)^!1O&n^{thVKXBU=5K~V44eWK&8A92_p z6`d<`z`K4#*N*^z)8#se8_;kHrlKa4v;nH!cC$!_SPE=#JxABXB47)>O@;Ky&u+jL zewUhdK$&~@O*_oSWe&Ir)jHReQj*us1=etuTM!D@KvPQMx`o1%3~<0#8wi2>z^e^# z!lMmv!-EaDPI@ZbTZnv>EfsDxV1xQ<`&#%c1!fBsTGLbDUjzSwFP`JvZ~!P{x)%u* zE;wxyJ-g}oICsgP@d~b!T2o1v{fvJFl0v(yLXo2$MZIESG=gMm;xo?Ki`7b i#)35k<_A&=4gen!iTFL$m+A=s0000kFH z;ItXWaX^$yaN)v@GU{Gej#^x}=#_XWv@;AddIJKk9Ik}_2}-tx!=ZnAdWt)D?%@6V_oRrgk(32u)KXOyA3l5_GpG@3 zFc|ow(P*N_771>yFJfzJ%eQS?dL5+{lv3gEY}*EVj-r4idBY3?W02xN%HUE;(d+ec zgWJgS6Xn6#whhBDZVZ(DduwaUudPxiHG3IY{yDN%ZL`RcKME9s#jX*35OI&KJk%&S zNr3Z9(==$BmMhF$p|)DB0644z>aFbqTLI$YPSmr{9u83&dDlBHI0kZTkDllaa! z)7LaD5;CO}nx>)MZr2lPlAxq%8UO@oSJX9WQn5;zzw5eiUH2M*aO93N`LwxgEqp2u zF3#7c0r~y=cYOQy4FK@$*)zO)^{SpJRh-GEQ6mquwo093?d|PhZ*LC(u(7d$7cX91 zyXN`x=Xm+@WsnWjE~Sc6ZCIVVySv!m-xoec*LCQ+j`j6*eE$4dm=kYrZ~JfGz9qF) zs;o=J6sqewe*E|mo3rxIlO@C?y$$8}vy z8*bqnDk7l!`}^44-JMAJS-68z1S$sR;NSoU2M5Ay_yEOQ0iXMhMkA=IT1}tY>-9(y z7ZB%PqoRLYrKTuKChsrz{hTCllQdM=GEEaFCnv(+DT)GBRj2M(Ggs>N_O{<@wGtNr zH(hy@v(3C9#?|~~1eqCBnJPsM6_IKgY*80VwCNYMEX#sn7+79ju3n%LsVM0#01wgg zJTw{&G#U+QGp1HuDj95kW@=|=Co-s+rU~1&p(skM`FA>!r+NLQ#|eco-=Au$a0l+4_qzd($+fW*zpKtyZgWE?}xqUDt)h6(d-sl{`QR8Z{_pWWXQ}4QYkwI~89>Xj z>fNRK^yw3M^ypD!jXy1`$U74#)hOlp`8jl5$Kv85mX?;rV2U8-6~Hoss;cT(Kw_%8 zjV)=``V&=Hm4wO{0AUlIR7u@#7whZmV;MqiQYumHFUt@_pm%n5{JFU~07x`HB@2d| zo14`crR4KcSrg^UmoGju<0Kn?aeuS22Yy)r5Ct?zlumLl0L!w_Y&NA0naW51D40pw zgreYg@7}%Y`&7QEavRGuO&lK|=iZGfb)FjTGRbQDW;5TnHT8|Z&CN~1)RZ)TG))tS zhlkL0J#s^^s4C4&sVs$&-Pc6ceM$n-ahzOEPG_oAe)W1iLMg@K;v)L}KI!-Sq}^_h z6$5G2M=1p%1eRsNvaDS9rgHPCvYe4YiE6@#GJ+z2ELEUlJFt9hU-UqgJJe>g831EL zyN=_G^-YsZUeAm8^o1aQ@ryl^h@B8N-{cYRE@$s?HtI^&I*I`G>({To@B1(eBRK7B znkH6PSFyUfinX;htgWq)-@kwROw9oB;K2j@`t=JN8ykiCUadkX_05|%WH1=`e2&`b xbcB_ZWm$Or`gNhd@vYF`oW|}APzI3v`VU77m8g{zV+{ZR002ovPDHLkV1iI{pGp7# literal 0 HcmV?d00001 diff --git a/mods/mobiles/skeleton/textures/cmer_skeleton_mesh.png b/mods/mobiles/skeleton/textures/cmer_skeleton_mesh.png new file mode 100644 index 0000000000000000000000000000000000000000..7641f427ba4a85682111bea144680ec36c79be7c GIT binary patch literal 519 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQYryHA+A8WqoZTitXb>Ut@{rK zhYlSAvVkH%@$BquJ3G6GyJxNf)v=ZY`2_=M28Kh~Y#V_TXMsm#F#`kN5fEmas?8_O zz`$7H>Eak-(YtiAW8NVL9@otenD#mySyY|Z;Fk5mRw8KQ+NAc>?hR*!T<3DCXH+wo z#jGn6YFgE{Va3u4x5w(|w?ForBenW!R^9=j;sSn$rosls5AzS))&8Mp5Y)=5d0(;o zn>fQ0rVy3~1`M}Y-q$9sRx;pNZ^QQ*;R3z3 zO&Q;AZu`z~Jej|tMJytx`ak!Im2ul7SKU+2F|&0D`C;aKwR#6rX;0ARj#sx?)SlID z`MALQve31FEBoIrd-rndHOq8?~a$-1riNQr==Y?O(^)B<>_u~DHr?1eS>B