From 6572a8c908563ea62397394b7edd91846571d2d5 Mon Sep 17 00:00:00 2001 From: AFCMS Date: Tue, 8 Feb 2022 22:56:20 +0100 Subject: [PATCH] add lanterns, crafts, placement mechanism, doc entries --- mods/ITEMS/mcl_lanterns/init.lua | 94 +++++++++++----- mods/ITEMS/mcl_lanterns/mod.conf | 2 +- .../models/mcl_lanterns_lantern_ceiling.obj | 104 ++++++++++++++++++ .../models/mcl_lanterns_lantern_floor.obj | 30 +++-- mods/ITEMS/mcl_lanterns/register.lua | 18 +++ .../textures/mcl_lanterns_chain.png | Bin 224 -> 205 bytes .../textures/mcl_lanterns_chain_inv.png | Bin 217 -> 202 bytes .../textures/mcl_lanterns_lantern.png | Bin 8789 -> 8614 bytes .../textures/mcl_lanterns_lantern_inv.png | Bin 5736 -> 5669 bytes .../textures/mcl_lanterns_soul_lantern.png | Bin 0 -> 8642 bytes .../mcl_lanterns_soul_lantern_inv.png | Bin 0 -> 5677 bytes 11 files changed, 205 insertions(+), 43 deletions(-) create mode 100644 mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_ceiling.obj mode change 100755 => 100644 mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain.png mode change 100755 => 100644 mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain_inv.png mode change 100755 => 100644 mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_lantern.png mode change 100755 => 100644 mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_lantern_inv.png create mode 100644 mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_soul_lantern.png create mode 100644 mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_soul_lantern_inv.png diff --git a/mods/ITEMS/mcl_lanterns/init.lua b/mods/ITEMS/mcl_lanterns/init.lua index d59bb558e2..e6707b075d 100644 --- a/mods/ITEMS/mcl_lanterns/init.lua +++ b/mods/ITEMS/mcl_lanterns/init.lua @@ -3,27 +3,39 @@ local modpath = minetest.get_modpath("mcl_lanterns") mcl_lanterns = {} +--[[ +TODO: +- add lantern specific sounds +- remove the hack arround walmounted nodes +]] function mcl_lanterns.register_lantern(name, def) local itemstring_floor = "mcl_lanterns:"..name.."_floor" local itemstring_ceiling = "mcl_lanterns:"..name.."_ceiling" + local sounds = mcl_sounds.node_sound_metal_defaults() + minetest.register_node(itemstring_floor, { description = def.description, + _doc_items_longdesc = def.longdesc, drawtype = "mesh", mesh = "mcl_lanterns_lantern_floor.obj", inventory_image = def.texture_inv, wield_image = def.texture_inv, - tiles = {{ + tiles = { + { name = def.texture, animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} - }}, + } + }, use_texture_alpha = "clip", paramtype = "light", paramtype2 = "wallmounted", + place_param2 = 1, + node_placement_prediction = "", sunlight_propagates = true, light_source = def.light_level, - groups = {choppy=2, dig_immediate=3, flammable=1, attached_node=1, torch=1}, + groups = {pickaxey = 1, attached_node = 1, deco_block = 1, lantern = 1}, selection_box = { type = "fixed", fixed = { @@ -40,19 +52,16 @@ function mcl_lanterns.register_lantern(name, def) {-0.0625, -0.5, -0.0625, 0.0625, 0.1875, 0.0625}, }, }, - --sounds = default.node_sound_wood_defaults(), + sounds = sounds, on_place = function(itemstack, placer, pointed_thing) - local under = pointed_thing.under - local node = minetest.get_node(under) - local def = minetest.registered_nodes[node.name] - if def and def.on_rightclick and - not (placer and placer:is_player() and - placer:get_player_control().sneak) then - return def.on_rightclick(under, node, placer, itemstack, - pointed_thing) or itemstack + local new_stack = mcl_util.call_on_rightclick(itemstack, placer, pointed_thing) + if new_stack then + return new_stack end + local under = pointed_thing.under local above = pointed_thing.above + local wdir = minetest.dir_to_wallmounted(vector.subtract(under, above)) local fakestack = itemstack if wdir == 0 then @@ -61,38 +70,61 @@ function mcl_lanterns.register_lantern(name, def) fakestack:set_name(itemstring_floor) end - itemstack = minetest.item_place(fakestack, placer, pointed_thing, wdir) + local success + itemstack, success = minetest.item_place(fakestack, placer, pointed_thing, wdir) itemstack:set_name(itemstring_floor) + if success then + minetest.sound_play(sounds.place, {pos = under, gain = 1}, true) + end + return itemstack end, - --floodable = true, - --on_flood = on_flood, - on_rotate = false + on_rotate = false, + _mcl_hardness = 3.5, + _mcl_blast_resistance = 3.5, }) minetest.register_node(itemstring_ceiling, { + description = def.description, + _doc_items_create_entry = false, drawtype = "mesh", - mesh = "mcl_lanterns_lantern_floor.obj", - tiles = {{ + mesh = "mcl_lanterns_lantern_ceiling.obj", + tiles = { + { name = def.texture, animation = {type = "vertical_frames", aspect_w = 16, aspect_h = 16, length = 3.3} - }}, + } + }, use_texture_alpha = "clip", paramtype = "light", paramtype2 = "wallmounted", + place_param2 = 0, + node_placement_prediction = "", sunlight_propagates = true, light_source = def.light_level, - groups = {dig_immediate=3, not_in_creative_inventory=1}, + groups = {pickaxey = 1, attached_node = 1, deco_block = 1, lantern = 1, not_in_creative_inventory = 1}, drop = itemstring_floor, selection_box = { - type = "wallmounted", - wall_top = {-1/8, -1/16, -5/16, 1/8, 1/2, 1/8}, + type = "fixed", + fixed = { + {-0.1875, 0, -0.1875, 0.1875, 0.4375, 0.1875}, + {-0.125, -0.125, -0.125, 0.125, 0, 0.125}, + {-0.0625, -0.5, -0.0625, 0.0625, -0.125, 0.0625}, + }, }, - --sounds = default.node_sound_wood_defaults(), - --floodable = true, - --on_flood = on_flood, - on_rotate = false + collision_box = { + type = "fixed", + fixed = { + {-0.1875, 0, -0.1875, 0.1875, 0.4375, 0.1875}, + {-0.125, -0.125, -0.125, 0.125, 0, 0.125}, + {-0.0625, -0.5, -0.0625, 0.0625, -0.125, 0.0625}, + }, + }, + sounds = sounds, + on_rotate = false, + _mcl_hardness = 3.5, + _mcl_blast_resistance = 3.5, }) end @@ -121,6 +153,7 @@ minetest.register_node("mcl_lanterns:chain", { } }, groups = {pickaxey = 1, deco_block = 1}, + sounds = mcl_sounds.node_sound_metal_defaults(), on_place = function(itemstack, placer, pointed_thing) if pointed_thing.type ~= "node" then return itemstack @@ -158,4 +191,13 @@ minetest.register_node("mcl_lanterns:chain", { _mcl_hardness = 5, }) +minetest.register_craft({ + output = "mcl_lanterns:chain", + recipe = { + {"mcl_core:iron_nugget"}, + {"mcl_core:iron_ingot"}, + {"mcl_core:iron_nugget"}, + }, +}) + dofile(modpath.."/register.lua") \ No newline at end of file diff --git a/mods/ITEMS/mcl_lanterns/mod.conf b/mods/ITEMS/mcl_lanterns/mod.conf index 1047221234..746ffcb158 100644 --- a/mods/ITEMS/mcl_lanterns/mod.conf +++ b/mods/ITEMS/mcl_lanterns/mod.conf @@ -1,6 +1,6 @@ name = mcl_lanterns description = Add lanterns and chains to MineClone2 -depends = +depends = mcl_sounds optional_depends = author = AFCMS title = MineClone2 Lanterns \ No newline at end of file diff --git a/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_ceiling.obj b/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_ceiling.obj new file mode 100644 index 0000000000..7079aa7cb2 --- /dev/null +++ b/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_ceiling.obj @@ -0,0 +1,104 @@ +# Blender v3.0.1 OBJ File: 'lantern.blend' +# www.blender.org +o Lantern_Ceiling +v 0.187500 -0.000000 0.187500 +v 0.187500 0.437500 0.187500 +v 0.187500 0.000000 -0.187500 +v 0.187500 0.437500 -0.187500 +v -0.187500 -0.000000 0.187500 +v -0.187500 0.437500 0.187500 +v -0.187500 0.000000 -0.187500 +v -0.187500 0.437500 -0.187500 +v 0.125000 -0.125000 0.125000 +v 0.125000 -0.000000 0.125000 +v 0.125000 -0.125000 -0.125000 +v 0.125000 0.000000 -0.125000 +v -0.125000 -0.125000 0.125000 +v -0.125000 -0.000000 0.125000 +v -0.125000 -0.125000 -0.125000 +v -0.125000 0.000000 -0.125000 +v 0.066291 -0.500000 -0.066291 +v 0.066291 -0.125000 -0.066291 +v -0.066291 -0.500000 0.066291 +v -0.066291 -0.125000 0.066291 +v -0.066291 -0.500000 -0.066291 +v -0.066291 -0.125000 -0.066291 +v 0.066291 -0.500000 0.066291 +v 0.066291 -0.125000 0.066291 +vt 0.000000 0.062500 +vt 0.375000 0.062500 +vt 0.375000 0.437500 +vt 0.000000 0.437500 +vt 0.375000 0.437500 +vt 0.375000 0.875000 +vt -0.000000 0.875000 +vt -0.000000 0.437500 +vt 0.375000 0.437500 +vt 0.375000 0.875000 +vt -0.000000 0.875000 +vt 0.000000 0.437500 +vt 0.000000 0.062500 +vt 0.375000 0.062500 +vt 0.375000 0.437500 +vt 0.375000 0.875000 +vt -0.000000 0.875000 +vt 0.000000 0.437500 +vt 0.375000 0.437500 +vt 0.375000 0.875000 +vt -0.000000 0.875000 +vt -0.000000 0.437500 +vt 0.062500 0.125000 +vt 0.312500 0.125000 +vt 0.312500 0.375000 +vt 0.062500 0.375000 +vt 0.312500 0.875000 +vt 0.312500 1.000000 +vt 0.062500 1.000000 +vt 0.062500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 1.000000 +vt 0.062500 1.000000 +vt 0.062500 0.875000 +vt 0.500000 0.770833 +vt 0.500000 0.770833 +vt 0.500000 0.770833 +vt 0.500000 0.770833 +vt 0.312500 0.875000 +vt 0.312500 1.000000 +vt 0.062500 1.000000 +vt 0.062500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 1.000000 +vt 0.062500 1.000000 +vt 0.062500 0.875000 +vt 0.687500 0.625000 +vt 0.687500 0.250000 +vt 0.875000 0.250000 +vt 0.875000 0.625000 +vt 0.687500 1.000000 +vt 0.687500 0.625000 +vt 0.875000 0.625000 +vt 0.875000 1.000000 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.7071 -0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +s off +f 1/1/1 5/2/1 7/3/1 3/4/1 +f 4/5/2 3/6/2 7/7/2 8/8/2 +f 8/9/3 7/10/3 5/11/3 6/12/3 +f 6/13/4 2/14/4 4/5/4 8/8/4 +f 2/15/5 1/16/5 3/17/5 4/18/5 +f 6/19/6 5/20/6 1/21/6 2/22/6 +f 9/23/1 13/24/1 15/25/1 11/26/1 +f 12/27/2 11/28/2 15/29/2 16/30/2 +f 16/31/3 15/32/3 13/33/3 14/34/3 +f 14/35/4 10/36/4 12/37/4 16/38/4 +f 10/39/5 9/40/5 11/41/5 12/42/5 +f 14/43/6 13/44/6 9/45/6 10/46/6 +f 17/47/7 18/48/7 20/49/7 19/50/7 +f 21/51/8 22/52/8 24/53/8 23/54/8 diff --git a/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_floor.obj b/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_floor.obj index a6125886ad..c90ece6804 100644 --- a/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_floor.obj +++ b/mods/ITEMS/mcl_lanterns/models/mcl_lanterns_lantern_floor.obj @@ -1,6 +1,6 @@ # Blender v3.0.1 OBJ File: 'lantern.blend' # www.blender.org -o Cube +o Lantern_Floor v 0.187500 -0.062500 -0.187500 v 0.187500 -0.500000 -0.187500 v 0.187500 -0.062500 0.187500 @@ -37,10 +37,8 @@ vt 0.375000 0.437500 vt 0.375000 0.875000 vt -0.000000 0.875000 vt 0.000000 0.437500 -vt 0.562500 0.125000 -vt 0.937500 0.125000 -vt 0.937500 0.250000 -vt 0.562500 0.250000 +vt 0.000000 0.062500 +vt 0.375000 0.062500 vt 0.375000 0.437500 vt 0.375000 0.875000 vt -0.000000 0.875000 @@ -93,14 +91,14 @@ s off f 1/1/1 5/2/1 7/3/1 3/4/1 f 4/5/2 3/6/2 7/7/2 8/8/2 f 8/9/3 7/10/3 5/11/3 6/12/3 -f 6/13/4 2/14/4 4/15/4 8/16/4 -f 2/17/5 1/18/5 3/19/5 4/20/5 -f 6/21/6 5/22/6 1/23/6 2/24/6 -f 9/25/1 13/26/1 15/27/1 11/28/1 -f 12/29/2 11/30/2 15/31/2 16/32/2 -f 16/33/3 15/34/3 13/35/3 14/36/3 -f 14/37/4 10/38/4 12/39/4 16/40/4 -f 10/41/5 9/42/5 11/43/5 12/44/5 -f 14/45/6 13/46/6 9/47/6 10/48/6 -f 17/49/7 18/50/7 20/51/7 19/52/7 -f 21/53/8 22/54/8 24/55/8 23/56/8 +f 6/13/4 2/14/4 4/5/4 8/8/4 +f 2/15/5 1/16/5 3/17/5 4/18/5 +f 6/19/6 5/20/6 1/21/6 2/22/6 +f 9/23/1 13/24/1 15/25/1 11/26/1 +f 12/27/2 11/28/2 15/29/2 16/30/2 +f 16/31/3 15/32/3 13/33/3 14/34/3 +f 14/35/4 10/36/4 12/37/4 16/38/4 +f 10/39/5 9/40/5 11/41/5 12/42/5 +f 14/43/6 13/44/6 9/45/6 10/46/6 +f 17/47/7 18/48/7 20/49/7 19/50/7 +f 21/51/8 22/52/8 24/53/8 23/54/8 diff --git a/mods/ITEMS/mcl_lanterns/register.lua b/mods/ITEMS/mcl_lanterns/register.lua index a2c513eb2f..76d48f50d2 100644 --- a/mods/ITEMS/mcl_lanterns/register.lua +++ b/mods/ITEMS/mcl_lanterns/register.lua @@ -2,7 +2,25 @@ local S = minetest.get_translator("mcl_lanterns") mcl_lanterns.register_lantern("lantern", { description = S("Lantern"), + longdesc = S("Lanterns are light sources which can be placed on the top or the bottom of most blocks."), texture = "mcl_lanterns_lantern.png", texture_inv = "mcl_lanterns_lantern_inv.png", light_level = 15, +}) + +mcl_lanterns.register_lantern("soul_lantern", { + description = S("Soul Lantern"), + longdesc = S("Lanterns are light sources which can be placed on the top or the bottom of most blocks."), + texture = "mcl_lanterns_soul_lantern.png", + texture_inv = "mcl_lanterns_soul_lantern_inv.png", + light_level = 10, +}) + +minetest.register_craft({ + output = "mcl_lanterns:lantern_floor", + recipe = { + {"mcl_core:iron_nugget", "mcl_core:iron_nugget", "mcl_core:iron_nugget"}, + {"mcl_core:iron_nugget", "mcl_torches:torch" , "mcl_core:iron_nugget"}, + {"mcl_core:iron_nugget", "mcl_core:iron_nugget", "mcl_core:iron_nugget"}, + }, }) \ No newline at end of file diff --git a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain.png b/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain.png old mode 100755 new mode 100644 index ee523c9226d618aa4cb6c31a11a3130f5a464495..01725114a6c7eba66c7abf561e57563b46171c7f GIT binary patch delta 149 zcmaFBc$RU3gcu7m0|Ud`yN`l^6k~CayA#8@b22X{I%t>h2l#}z0!5XTm34GjA5L~c#`Q(Xu+NBAe zE{-7FVdQ&MBb@0R5{+yZ`_I diff --git a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain_inv.png b/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_chain_inv.png old mode 100755 new mode 100644 index 61a300fede1736bbafa7e07d7b106756b9c18edf..a8c89dab469bf26d5c6c0c06c3dab498bccad248 GIT binary patch delta 146 zcmcb~c#3g?gcu7m0|Ud`yN`l^6k~CayA#8@b22X{I%pU22l#}z0!5XTm34GgTe~DWM4fqiHM1 delta 161 zcmX@bc$0C0ga!v20|SHn=l_X7im^Dz-HBn{IhmJ04qKA9y9>jA5L~c#`Q(Xu+If+l zE{-7Dj7i?^F5L3hj~oDU zYCK&WLnJOIKZr4HWaP0(Ghyfy<>8rYoNi!HP-tLaBAE$f6d4(unRAhIQc8Nlj7je} z18tU`5z=4{x%?)naS1m|+PWy##4|76G2U? y<+WgEdeID3myb_Ed^<#ak4cpjpLb~CXJC5n>-PQeLm!|+7(8A5T-G@yGywqlF=bW& delta 428 zcmV;d0aN~_L)Ao(7zqdl0000OU;0y{D6tnII~E0cuG^ zK~zY`?UpZ3!$26uf9)E`D~dS741wjy47a%%1O~x(0Lz!)6YwR_sL2_!kW69bV1f`9 zXfVuFP;r5zDT1^#Tbt10ppUr|chCF0f9}aS0LGX^L;$eXGMmjDeh4qUlwZrBwN8{$ zgki{hK6e0It#uY%L=X|Q)=3e6fl`X;bn2`qxH|M>f72maeBC=3*;WxjsxS=*;E4!F z*HNqNz%qd`CdsGj0oZBDl*f6cLnCR30R2Eh2)owv?cMaFFr}Qj#)= z$jTtO`M#$lWk}yhzCLczq*Z~pte`GYZ8(3#4=%RX;;r3vULM~8IJvLr2dBYDi{PWa zAKV;o#QvUwPM>HrVgK^2h97kL@N}EmS~Wjd_%NC@e$e>AzxRXYf6)978bA0wJ^`#P Wd9>vG3V#3q002ovPDHK)LSTaYoy*(+ diff --git a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_lantern_inv.png b/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_lantern_inv.png old mode 100755 new mode 100644 index 1e81819ba95fb37c446bc5b37278432023322031..8bdc8095fc5de299ae0cbc348ff585c0b16bb0e0 GIT binary patch delta 182 zcmaE%vs7n-1SbnK0|Ud`yN`l4DmsWxE*90OmkaO-aRmxK&A0s2X7zum&;LtR|6eUo zR#w*0(J?hO{r~^}-^%}rKox8yL4Lsue?VY9U*`j$2xF4By9?*Xn@isSId+~djv*Y^ zlM@`+o(9aCE30;iL0GfFNbAy{D6tUKJ~UxJg7o zR5;6HV4yY7(b4&@qoebmY|Y3tS-{lP6t89`LN56J{X1R@81ZT5}dBqtSKEH&7q1~46%tU*ElarId zeeY*xWG|q*h@cBDS1SBv(A8s3V31H_VA#EeLAU(@Gs)4&Afd*<@ZuK3=ZEibDq+DD x1D_whW8mGr1|wF8_JY;2Ps|JqpBM%|001+GLyO0j;pqSX002ovPDHLkV1f}Ccvk=b diff --git a/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_soul_lantern.png b/mods/ITEMS/mcl_lanterns/textures/mcl_lanterns_soul_lantern.png new file mode 100644 index 0000000000000000000000000000000000000000..6e20058ea35d03bcdd7c225d2c372ee7be934f82 GIT binary patch literal 8642 zcmeHLc|4Ts+aJ5^+1DCm31emqgJH4^vXf-r#w^Ui3^T(ZWy{uPNw$PUL{wxciY$>O zi4qPuwsHt*5vksXI_GrW-+6z(_k2F@``>v!pP6~?`~F_v>$<=9b=}Y0Pl~@C>W(0fD%zI({YHRDAan>k+5i|x}u3+1Dj zfvFj9-NRS4>)m!2L+3lQcY7NwM%djvu(Dz>{jwL@h1tmOmR>WMi&{;FFr4V5qL zZ1@mVbZJHC(}+;*y{^3m?2&ekQKq@jm*~e){ElmjCXxI%yv9!+v~P++QkeA@B9R&1*IT-L(v}9d3*uSxz zsr16q#&C(+O=54G-y_T7t>?-ae$SX|4qyFZscn@zmuWPa`A+og{PnsLzsU{jG7{{K zg-5PXe8d&nYD4t&`v#VY#WcJ9XPxt7*cN;EjI(~peaonplU+C-JX`>Z_A-dpzn;KT zuhbXMTixi5S<0GxPL)2dG?>6GRd~I|oI1%OAU97|OXMow|H0Ai*Zr1{G6X}UXZ_%h zyG!S7xEumDZuEFu705u;4D_Qj3Ib@o*V}_dQ~Wd2)AC$JZ&Q6)3>-Mb-KuVlxh>j^ z`PWu?MZT_DSD$!Du}D|3xs%M3TVo~>dTTK0^zH}J0rRflF65_7-TC|g_=4|j=fo-Q zXJZlBo{aHhy?c%>m$n|PM7~x*#o2l)6;h{ChEnrG=3TRRlwIqH6CH^*?qcN=)Wx6% z@7ptvn(ozPwH*#yXc+lgQ1|Yk+i{IKu^#7VjYnn?CR7xu0HKi;AU88D0eU=26Fpd= z#bI~xrP?FwBe(igE-1a+Hy|!?EsNT;pvs6QEN3?-xP86eJZCo_SGHW(?Xf!i*=GLu z!1&&pFpnV3tW|t>@8ft$?m5Qgi}_{;{K}}QS(Rg(PqVTw7C#KTP`2XLd_Yku+ao(c zgGQ{-lDxkUx0r!VR>^vH*!xP#_+lgRjoZsFRh6EprK3*@UjB6G$QieQlg!037dxKK z$Jf=Hjr=^{GyH2JYSuCJklw>9bSZ{Kl^f%_;;C~Sk_(=PjdeLH!^SCCpmJPStcfF>kSI;bd6m+e6$4$0fe%swx zYW%uZMLFf1wX2QjR+w+yO6|#8jl!+ZEvzH>Tz;0j^Pt{nYUD}i!|pWG=ZnPRc7MGQ zsf+{bOltlz^_H~`GS+%s=}!lm`<7FN^Tuzgo>5_bg8MLiSjq?=#+z91OQSX6%1vj< zj!T|~QOh3E(vE(Kg5!5h#q=8VHVU%phn9$~e%Dy=EQtw8S99x3S%g~qabu@7Yk3o( z7Q($^x&gJW{myny_9`Ru%}s|OMh`~ah+M-xK7_sm{cf2cH<`ocvs-^1K#MY*E2OW*aC7rf-Y#O>$4E+= z4%z4x3_kyOk=KBSdi&&*Ps$tZ;1ey6jdD2aoWf2_-yeY~kLx7p3oBO{O2@>*%5HVW z?2~0$gidm{2qXo%n>^-f5E^O{Q!r*jv!sn-df4A_>OA6*4j9^9C0HaLmTIsd?p&kg z{f}12kjzo9>~{7ru|}0vZaxaGGaKc*CV+#OaC1?EfXBXoLTyCjr@UD&gr&E)1IlkDbV_Js&5V^r<(smFVM3Jcl-9qCnmCaS=^ z(ZDQUY*13IqccKX^R+)*5|j64s!g9Kc2@A`w*m_n`dSXOr?LdEE^u8UHi&bV!LdCA zZc(9ky11#`ec3(3^{ZL#0*bp{$?nS=o4nc<@?KPhe{?QDHUTuEJ=%$dT`1_U5h>qK zjxD(fmlA0!DSJ8$-EA#}=)s!5k*_pKEZ1+K1F2~2^^44d=3*bvg@nNgb zbJLfEE5lb)h0tjn%a7hMhucezb)=i0zA&FUe_w)4ds_Hb<-RoY0Xg>f?UL%1X=~Po z*UoZ;eKur&+J;U#>don;z z$GAiT+c%kl(9SNQrCHkJW$eO1A4UZnB2#+!bgJXk!qW0p;F;;3L1;Q!icA0V+Qyx& zqn*#kL>C?ug|9}ym-^p@vxmo{6_9~(t1)?IEskl56;H!djGUI-RkCE5%%P(wKnW=heX`1>Glngxb-~{tgoKh z9Zzqwq`VLj)zTCKI~%7$b4phdrYp9}&HNgRS3Ct?>%{-Ov{mDY-YdnmK!LH)S%xEy z7gzV_;`|-H%f`1WRW;3Dq~5&zo-Bjy7Z)|Tvpd#8L?}R5vY;niLR3iUHdXEsdkakb z1Bk}=)J5re+MD}u`|#20`Mf#zSKI|RI+cF$BIzhvDts(9>h#%n)2mTrv!vv5&b-lu zx`8AsRo-CCBuU@HTCSfhGQX+r%C-Bmv%1JV%7SNqN+ns$(%)O1uJG;e2&fDdH8H!* z^#p0+HZgn|+;H`+#@iQ^(_`j|bmwdL%vw2Fu1<$VFz;?K?XCeU%w-}Keu+(xcx?Z;oafABlZmhOsko8ea9_rA(?c4YYML(91|<56 z?1vwClad3YlVcDSAA`wlsckKj0@%5<`(3=`KrSM;!KT=!I9wj|olr41H>DAAz>Sxc zA92u8NO`N#Dw%;>*+Qq+jW-dHEOi{b5%sW0S zfc8w5H26^ofHTyP&eWsCIroQmZZefr`+~*~$>&-`5 zpCrN%6h>FUUTezAV~)A=oB10@h(&0s@q2x{=Tg=^ABU>il5Z7_-&sF82|t%mHnByF z(oST}ab{TgoUM0`l$(%6yO{jU>2=Qx49;Vu-ZeOmQ;^6xzACS&w(4~3ebQ`;Q(#Ah zq@(JkHa-kn4x)a7uc)JZ@QlA%s%O*F+vcG!m2Q3U;E!$hmW5B=pL$@d=)!11#Igj3 zJ}1i$xRMATljMaurthq@Chpr*u2<_PoF`EhD*adsi|e}VS~~*?-X59jVF~I&P^#V+ zb=ft;m0C%<=xc#1r@AW|AgiaV4aE-E2d_a ztEbiN3yRwXyh{72=WIF7qULEnfi9?_{ZpSe7)3S4>vve?PjP`$--7AJ*;w^C8d@bu zms`{8mZx|i&1eo^=KX%pjI6uAbmUCVcw&lUvF%4pCXqj?tdYew6BLxy7%3E5>66sk z9~qEoRLuBL7Tdn}f?*0-MTf1}<>(n2xAo1{{T&mf;H?TagOVwa)}9(3&Ox!)5!&MM z8;HBAe!CB~;=jCtwl*Amn2Y2oFsQXFkkS_&O=Pb&=q#F>mp1m3IaJgdh!Wx3yy0;p zw0v?`I7{Gbe7hlq(=Y+~v9CM$pcnM>EA%H0c3IfWv`5c`+j<)zGjVK3y8E!Ar) zzOgF`-^p54g418hivyBT2l@(~KF#QDRdAPF=i2%> z)Y1`i{m9+9%{l*ZBke)6%LvaS+qD#8=2P?Vn8P>{LcbijBoZcgaIX4{@9V|N1 z&x8yyXa-3iaeboj{BHZw5~re>JcA`sfKAgTQ7LGTv0Ei=pRDBmCv}9c1`P-Gi#R1= z*3KhS{DmHai#bxyn_{eD^^)|0qDwG)XTG{;bDLWBPgt6Vlpnkk7PGiGYbRbaYcy{8 z6_YCyUA?N=CGez7_W=777%-zg04`07&!?+H}8nW7_txA7Di*tQzGV9A0k5_)SnZcG=S72K%ui1bN2*i{?!eHzz zFqq#?*T9)N|5!TOyxmZ`)BCXLRS^!oWF36Dt*A+9@;S$woT8TQmyU3pvuY`_z+_BM zD>sTtZ@FAUHR>$>I;FxHw--z%+n!W+nEsk!d`g`E?58)&lQYXQU`-WkttLg#k=oOa z`iewarSE|1rhqZ%P@iSru+Ty$kABw(Ix6b!sa3TVTJ+iD3KWf2CBXss#EoR_N7?F=AG4+Gy{+D~_2Bla8?6Y8nWC1Rw4CTE88rq>RYK*BW{Arntsb!& zb=CX^oyzl)0Tbt1U^ydBPdv(W<8-pp3D#ROyLHXDLqW_4Te7budC`(hd96(Psj@p zM^dXxdd&!Wa$yCU9@Vdjr#u|mA1gT^36kmdRcu+9# zIs^pLHwX{L;sOYCurI-nL`KW4G_}ZqNqDrJvz86aCKyBTCz(f535O$X9dVHXI9cDWxUQ})6s7^y(0~942rYt4 z$A&}5H2H0cZyY8B8jeZ|rjsaS@HQvbml8@x%gF)b;P2$XD9$t-==| zTSh-pQ1Fh$Hu^^-9``#gIFuT=gTdpVgg`VX7 zA!rZ@NG%N*0;cWz1C<4tM#qwIgl#H-T%82)U^THC2qGK-!Q-$9h^8hM2GNBfH6dDf zI02@O_0=M1YyLoCMMaC-^&GMO~LIL?tlsS?TY(ebH-Rd z=uT4~`tQL1!gSc5!XW?ec>aL?&SFHRGbq#mJF1=UPXrwO-}C$x_;)4;V7H^usSy_c zVN(AMr~fTs%>i2qHR1>VhY2CyTHm&$K+=v>VDQd1fWqRw$xp+E5%4=p0OkJgv&N_pYzvtinKjRtxgze-4oIv1khz86Nu7N@zQ81+3x77ygL$`O> z-)5`7y$9LYpnlXte|wKYS!^fb;n3jVKoWuaXPth_oBsj#gZ=j${ZHmU!oFE!D8Ugx z75mfe803HJ{x5*v7_3P+0+~knccK3X`6kN`4 zXW##$2Y~t?Cx1)df8_c{uD_+g-va-WUH{1Sw-oqW;D55~|4c5fKaSi4GVs5T0UW4H z>Z2oo!}zXXb5|MWV_VFKmlivyh;bPF3(jyY~&?tSb?pv`$zTyeN4Vq2TeFc zvB`@-Bg(?W$WeRJ4%0Tixt~U+&NFvJj=rV{`M{2NrfEr?k~w=_tO$%MzdX(!$QGze}p> zX+!B3Pwa-(HLmJ#7T6wb(p8N8wMBU7hmzPrb@izwJb!~uKY%VwoBjy3Kh+f#{wUlL zd(gFd$BZ?pI{w=FT>kiR9Q%p~=@%5sci`iOTSClwS6wCFWU4~ z%f*H6iOC5WElh`8x?yxd-b|xExx>wMMBk;(eL~0lw4WcBdaSK~pZjxiT31ImuRBw{ z)8U3g#2Dql)W-4I*J2yK%393tlr8H#Sy*-U{+5!T&mNz>_7*RArEJxa=#8@{Oe`TywqH^nu-qL5Ms7MbFxEEa=php;WzP zp8LujImH>w#v8KSqaLEo!a@0Eo@?*lw4)wUY|8%#DIP3?18T>dljXihy`Q@SlAUp^ zHJ-3tbT2fp7^*nuyq~o6HN=AQc7-F(P~%pD_g-;U3b~d+{n{F zzj~$I9U@G16Itaa{y2JZRnU!yM@?HEk2gNN@aeWC{e~sm1e9~T3NttloyE-9izCPW z(t@Tt?_A;Dd|agUd-~D(Z?YrLj0pB&$V;|Bqi-Dx%J4k0bjR2YVqMTvarD9g)8ZJ+ z>iS|)Ir~E3C8t@j2ctqf;%gQ<%wEvC=T@rtW4QjVtG&zoUF&GEQs3WMH*Z(9>^ix! zDkpCkvt)15-tCDwofY=S{}`NpdrZpG=8DQ-UFJC+n-g##t!;UKo-8wQQPq+9 z&GNaOhM^CSHBY_qH115L=kE=}58rFSrX0C8)lR;qV{v$!f&0RyylW}zamJ!qv?eZ_ z|8h;jZNVHgLH*#${x$oa#57h+4;`=4s?PS!33&q1pWb@7Y1m_7tHXSHG`Zz^SrzTO z^W357o&zr${aI-)@x^m06ABtjN4Gtx^)-AyFWr0Qo(#v;{El-aHtzhr4Egev4ZpQs zh_pGcjOl0^3^!X#Ei38YpTsnL@*=w3fv3wGI->K~ zu&ZmPPdY3+n~+zXx%hOFo4e}HgRwtUM)`MStyXNkylLA{4X0l6Bgb^!68TlWw5ZIh zuakXaCnAw7mMH{+2$4YWsvUqPkh5?dZ({j`ktgOx1??GX?Vs)^%?o!D?oQ7V7uYyW znw2}vI%{(2c9CFxQ`5L&r;%MVzT*`8-TqgjhfUfjvRWOU;T_rZa(&>+;SQP4?zLaN z-tIzXc!V+!xsj&rUnS^PW!!1(K##PO7YO{PTo8_f!opIr;F)yIyzni!&FE z)xc$+4ml59`7xc9zVqu1zb0<;J3eWBU~)KD{hQ^AQ3t&bb)7ue@?)8gAlQvLWhBLE zrHhw=?m5Ea9%KHDsmwFO3cWpZiv04wa*n%_RZ7pUnSSx}Z`o;n8`e%3LXlQQ1Y0^$ zeu~|dJ@LY#%5r{dXV#7N71OL-PxaXwF`B*TF2D22zM0vZ@vJmx`?C{2^Mg~j&fY$= zsO=6~r`}3>A#a=%_bh+FyymP2Nwe%mS@f+dI}txC>v76imw7FsjrJAmx){p>EsXq~ znllzliYClE*S7D#noHJX!E9;+$$EL&jCF-IysKC0YU@hnpFMw0vTe}asL7ZdLLxcj zC_sOn5f;ipH7ajJs*zycMwJ%yZxV^iH);_y4#UY3Os-J#D0dE(QpgG^j}pxcqlak) zSd3y~k`9YX3KyeEaVT3#;g7fF8aV(!h2aR8SWp6{#$C;wYL)SNbD!~gj1ZaPR!U_w5R}QYxlM>DETY$j zpi!<+X-yV{wz;Mh?bXx9>y#!PDN4hXm&dV}6r4>9wXK!Cem{5P~; z@nwp|#4AUrLE{OhA|a1L#LJOtP=%CZdW0AZrjIX6LS;cPoyw5N*i;D%!l=GXR0>OA z2_1!)W>6xv9!JzDMnC~@Zw0_%%MdnG0%KGZ@ji-SrwQ4U)fDSik zba7L3QzWq%ioYA@ZOXk!k)Ye@ab2S5Zx;0*dfe`Wod|3-x0$`xz%a*$Md{vcGM7el*jKCN5d@mj4?f$84l=~dqR7d#C|vk`;Jmbd1Fsuq2LJ#7 literal 0 HcmV?d00001