From d2a33d14990349c437471160d7f3e38c8e6749a2 Mon Sep 17 00:00:00 2001 From: chendian <-> Date: Wed, 7 Feb 2024 00:04:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E5=A4=84=E7=90=86=E7=89=B9=E6=95=88?= =?UTF-8?q?=20=E9=95=9C=E5=A4=B4=E6=8B=89=E8=BF=91=20=E6=91=87=E6=99=83=20?= =?UTF-8?q?=E6=A8=A1=E7=B3=8A=20=E8=89=B2=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/attack/heavy_hit_blow.tres | 6 +- render/material/effect_hit.tres | 5 +- render/material/effect_skew1.tres | 4 +- render/material/effect_slash.tres | 6 +- render/shader/effect_billboard.gdshader | 11 +-- render/shader/post_process.gdshader | 34 +++++++ render/texture/{shape => decal}/1.py | 0 .../texture/{shape => decal}/decal_dust.png | Bin .../{shape => decal}/decal_dust.png.import | 6 +- .../{shape => decal}/decal_explode.png | Bin .../{shape => decal}/decal_explode.png.import | 6 +- .../texture/{shape => decal}/decal_glow.png | Bin .../{shape => decal}/decal_glow.png.import | 6 +- .../{shape => decal}/decal_shockwave.png | Bin .../decal_shockwave.png.import | 6 +- .../texture/{shape => decal}/decal_sword.png | Bin .../{shape => decal}/decal_sword.png.import | 6 +- render/texture/{shape => decal}/lock.png | Bin .../texture/{shape => decal}/lock.png.import | 6 +- .../{shape => decal}/readiness_bullet.png | Bin .../readiness_bullet.png.import | 6 +- .../{shape => decal}/readiness_hero.png | Bin .../readiness_hero.png.import | 6 +- .../{shape => decal}/readiness_monster.png | Bin .../readiness_monster.png.import | 6 +- .../{ => particle}/mask/angle_mask.png | Bin .../{ => particle}/mask/angle_mask.png.import | 6 +- render/texture/{ => particle}/mask/mask1.png | Bin .../{ => particle}/mask/mask1.png.import | 6 +- render/texture/{ => particle}/mask/mask2.png | Bin .../{ => particle}/mask/mask2.png.import | 6 +- render/texture/{ => particle}/mask/mask3.png | Bin .../{ => particle}/mask/mask3.png.import | 6 +- render/texture/{ => particle}/mask/mask4.png | Bin .../{ => particle}/mask/mask4.png.import | 6 +- render/texture/{ => particle}/mask/mask5.png | Bin .../{ => particle}/mask/mask5.png.import | 6 +- render/texture/{ => particle}/mask/mask6.png | Bin .../{ => particle}/mask/mask6.png.import | 6 +- .../texture/{ => particle}/noise/noise1.png | Bin .../{ => particle}/noise/noise1.png.import | 6 +- .../texture/{ => particle}/noise/noise2.png | Bin .../{ => particle}/noise/noise2.png.import | 6 +- render/texture/{ => particle}/shape/flare.png | Bin .../{ => particle}/shape/flare.png.import | 6 +- render/texture/particle/shape/glow.png | Bin 0 -> 7396 bytes render/texture/particle/shape/glow.png.import | 34 +++++++ render/texture/particle/shape/smoke.png | Bin 0 -> 63791 bytes .../texture/particle/shape/smoke.png.import | 34 +++++++ .../hero01_fist_air_skill01.tres | 25 ++--- scene/character/player.tscn | 6 +- .../particle/particle_decal_normal.tscn | 8 +- .../effect/particle/particle_hit_normal.tscn | 15 ++- scene/effect/readiness/readiness_bullet.tscn | 2 +- scene/effect/readiness/readiness_hero.tscn | 2 +- scene/effect/readiness/readiness_monster.tscn | 2 +- scene/launcher.tscn | 24 ++++- scene/ui/hud_screen.tscn | 2 +- script/_global/enum.gd | 2 + script/_global/global.gd | 1 + script/_global/stage.gd | 5 + script/character/battle.gd | 14 +++ script/character/buff.gd | 2 +- script/character/effect.gd | 23 +++-- script/character/skill.gd | 8 ++ script/character/view.gd | 5 +- script/manager/camera_manager.gd | 91 ++++++++++++++++-- 67 files changed, 368 insertions(+), 117 deletions(-) create mode 100644 render/shader/post_process.gdshader rename render/texture/{shape => decal}/1.py (100%) rename render/texture/{shape => decal}/decal_dust.png (100%) rename render/texture/{shape => decal}/decal_dust.png.import (70%) rename render/texture/{shape => decal}/decal_explode.png (100%) rename render/texture/{shape => decal}/decal_explode.png.import (70%) rename render/texture/{shape => decal}/decal_glow.png (100%) rename render/texture/{shape => decal}/decal_glow.png.import (70%) rename render/texture/{shape => decal}/decal_shockwave.png (100%) rename render/texture/{shape => decal}/decal_shockwave.png.import (69%) rename render/texture/{shape => decal}/decal_sword.png (100%) rename render/texture/{shape => decal}/decal_sword.png.import (70%) rename render/texture/{shape => decal}/lock.png (100%) rename render/texture/{shape => decal}/lock.png.import (72%) rename render/texture/{shape => decal}/readiness_bullet.png (100%) rename render/texture/{shape => decal}/readiness_bullet.png.import (69%) rename render/texture/{shape => decal}/readiness_hero.png (100%) rename render/texture/{shape => decal}/readiness_hero.png.import (69%) rename render/texture/{shape => decal}/readiness_monster.png (100%) rename render/texture/{shape => decal}/readiness_monster.png.import (69%) rename render/texture/{ => particle}/mask/angle_mask.png (100%) rename render/texture/{ => particle}/mask/angle_mask.png.import (70%) rename render/texture/{ => particle}/mask/mask1.png (100%) rename render/texture/{ => particle}/mask/mask1.png.import (71%) rename render/texture/{ => particle}/mask/mask2.png (100%) rename render/texture/{ => particle}/mask/mask2.png.import (71%) rename render/texture/{ => particle}/mask/mask3.png (100%) rename render/texture/{ => particle}/mask/mask3.png.import (74%) rename render/texture/{ => particle}/mask/mask4.png (100%) rename render/texture/{ => particle}/mask/mask4.png.import (71%) rename render/texture/{ => particle}/mask/mask5.png (100%) rename render/texture/{ => particle}/mask/mask5.png.import (71%) rename render/texture/{ => particle}/mask/mask6.png (100%) rename render/texture/{ => particle}/mask/mask6.png.import (71%) rename render/texture/{ => particle}/noise/noise1.png (100%) rename render/texture/{ => particle}/noise/noise1.png.import (71%) rename render/texture/{ => particle}/noise/noise2.png (100%) rename render/texture/{ => particle}/noise/noise2.png.import (71%) rename render/texture/{ => particle}/shape/flare.png (100%) rename render/texture/{ => particle}/shape/flare.png.import (71%) create mode 100644 render/texture/particle/shape/glow.png create mode 100644 render/texture/particle/shape/glow.png.import create mode 100644 render/texture/particle/shape/smoke.png create mode 100644 render/texture/particle/shape/smoke.png.import diff --git a/config/attack/heavy_hit_blow.tres b/config/attack/heavy_hit_blow.tres index e0ee8aa..360f60c 100644 --- a/config/attack/heavy_hit_blow.tres +++ b/config/attack/heavy_hit_blow.tres @@ -7,11 +7,11 @@ script = ExtResource("1_j177j") damage_rate = 1.0 break_level = 3 stun_attack = 10.0 -hit_back_speed = 4.0 +hit_back_speed = 10.0 hit_back_duration = 0.05 -hit_up_speed = 4.0 +hit_up_speed = 2.0 hit_up_duration = 0.05 -pause_time = 0.15 +pause_time = 0.3 is_floating = true is_hit_down = false is_rebound = false diff --git a/render/material/effect_hit.tres b/render/material/effect_hit.tres index f78a2f9..c9971a0 100644 --- a/render/material/effect_hit.tres +++ b/render/material/effect_hit.tres @@ -1,9 +1,10 @@ [gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://tlhcll6fyp7q"] [ext_resource type="Shader" path="res://render/shader/effect_billboard.gdshader" id="1_jw6vt"] -[ext_resource type="Texture2D" uid="uid://bb0yfk0u4lqqn" path="res://render/texture/shape/flare.png" id="2_x6l5a"] +[ext_resource type="Texture2D" uid="uid://bb0yfk0u4lqqn" path="res://render/texture/particle/shape/flare.png" id="2_ax7mv"] [resource] render_priority = 0 shader = ExtResource("1_jw6vt") -shader_parameter/tex_main = ExtResource("2_x6l5a") +shader_parameter/sheet_size = Vector2(1, 1) +shader_parameter/tex_main = ExtResource("2_ax7mv") diff --git a/render/material/effect_skew1.tres b/render/material/effect_skew1.tres index 4cfb1f5..f246e9d 100644 --- a/render/material/effect_skew1.tres +++ b/render/material/effect_skew1.tres @@ -1,8 +1,8 @@ [gd_resource type="ShaderMaterial" load_steps=4 format=3 uid="uid://bkbuvtya3uk3x"] [ext_resource type="Shader" path="res://render/shader/effect_skew1.gdshader" id="1_dcuof"] -[ext_resource type="Texture2D" uid="uid://csjm7d1tg6b50" path="res://render/texture/mask/mask6.png" id="3_p44lv"] -[ext_resource type="Texture2D" uid="uid://c4byf37he3mjt" path="res://render/texture/noise/noise1.png" id="4_vjpnf"] +[ext_resource type="Texture2D" uid="uid://csjm7d1tg6b50" path="res://render/texture/particle/mask/mask6.png" id="3_p44lv"] +[ext_resource type="Texture2D" uid="uid://c4byf37he3mjt" path="res://render/texture/particle/noise/noise1.png" id="4_vjpnf"] [resource] render_priority = 0 diff --git a/render/material/effect_slash.tres b/render/material/effect_slash.tres index 8f371d2..f792e9a 100644 --- a/render/material/effect_slash.tres +++ b/render/material/effect_slash.tres @@ -1,9 +1,9 @@ [gd_resource type="ShaderMaterial" load_steps=5 format=3 uid="uid://dtyosukxpf33d"] [ext_resource type="Shader" path="res://render/shader/effect_slash.gdshader" id="1_s5fvm"] -[ext_resource type="Texture2D" uid="uid://dd3e7ol8qa5eq" path="res://render/texture/noise/noise2.png" id="2_gu3jv"] -[ext_resource type="Texture2D" uid="uid://c4byf37he3mjt" path="res://render/texture/noise/noise1.png" id="3_p66ui"] -[ext_resource type="Texture2D" uid="uid://cksxjvafx2skm" path="res://render/texture/mask/mask5.png" id="3_r0nln"] +[ext_resource type="Texture2D" uid="uid://dd3e7ol8qa5eq" path="res://render/texture/particle/noise/noise2.png" id="2_gu3jv"] +[ext_resource type="Texture2D" uid="uid://c4byf37he3mjt" path="res://render/texture/particle/noise/noise1.png" id="3_p66ui"] +[ext_resource type="Texture2D" uid="uid://cksxjvafx2skm" path="res://render/texture/particle/mask/mask5.png" id="3_r0nln"] [resource] render_priority = 0 diff --git a/render/shader/effect_billboard.gdshader b/render/shader/effect_billboard.gdshader index 8650669..77f87ae 100644 --- a/render/shader/effect_billboard.gdshader +++ b/render/shader/effect_billboard.gdshader @@ -2,15 +2,12 @@ shader_type spatial; render_mode blend_add,unshaded; uniform sampler2D tex_main : source_color; +uniform vec2 sheet_size = vec2(1,1); //void vertex() { - //mat4 modified_model_view = VIEW_MATRIX * mat4( - //INV_VIEW_MATRIX[0], - //INV_VIEW_MATRIX[1], - //INV_VIEW_MATRIX[2], - //MODEL_MATRIX[3] - //); - //MODELVIEW_MATRIX = modified_model_view; + //vec3 billboard_offset = VERTEX; + //VERTEX.xz = normalize(INV_VIEW_MATRIX[0].xz) * billboard_offset.x + normalize(INV_VIEW_MATRIX[2].xz) * billboard_offset.z; + //VERTEX.y = billboard_offset.y; //} void fragment() { diff --git a/render/shader/post_process.gdshader b/render/shader/post_process.gdshader new file mode 100644 index 0000000..23ce410 --- /dev/null +++ b/render/shader/post_process.gdshader @@ -0,0 +1,34 @@ +shader_type canvas_item; + +uniform float shift_strength : hint_range(0.0, 1.0); +uniform float blur_strength : hint_range(0.0, 1.0); +uniform float vignette_alpha : hint_range(0.0, 1.0); +uniform float vignette_inner : hint_range(0.0, 1.0) = 0.5; +uniform float vignette_outer : hint_range(0.0, 2.0) = 1.0; + +void fragment() { + vec3 color = vec3(0); + + //模糊+色移 + float shift = 0.01 * shift_strength; + float blur = 0.01 * blur_strength; + vec2 direction = UV - vec2(0.5); + float f = 0.1; + color *= f; + for(int i=1; i < 10; i++) { + vec2 target_uv = UV - blur * direction * float(i); + vec3 target_color = vec3(0); + target_color.r = texture(TEXTURE, vec2(target_uv.x + shift, target_uv.y)).r; + target_color.g = texture(TEXTURE, target_uv).g; + target_color.b = texture(TEXTURE, vec2(target_uv.x - shift, target_uv.y)).b; + color += target_color * f; + } + + //暗角 + float x = abs(UV.r-.5)*2.0; + float y = abs(UV.g-.5)*2.0; + float q = 1.0-(1.0-sqrt(x*x+y*y)/vignette_outer)/(1.0-vignette_inner); + q = clamp(q*vignette_alpha,0.0,1.1); + color *= (1.0-q); + COLOR.rgb = color; +} \ No newline at end of file diff --git a/render/texture/shape/1.py b/render/texture/decal/1.py similarity index 100% rename from render/texture/shape/1.py rename to render/texture/decal/1.py diff --git a/render/texture/shape/decal_dust.png b/render/texture/decal/decal_dust.png similarity index 100% rename from render/texture/shape/decal_dust.png rename to render/texture/decal/decal_dust.png diff --git a/render/texture/shape/decal_dust.png.import b/render/texture/decal/decal_dust.png.import similarity index 70% rename from render/texture/shape/decal_dust.png.import rename to render/texture/decal/decal_dust.png.import index 22b5107..28dab5e 100644 --- a/render/texture/shape/decal_dust.png.import +++ b/render/texture/decal/decal_dust.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://brgii0qi4s6kb" -path="res://.godot/imported/decal_dust.png-018d105ab63df278ad4deeb5e793a989.ctex" +path="res://.godot/imported/decal_dust.png-3cd05ebb11d27a55ddf628d9e58a4332.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://render/texture/shape/decal_dust.png" -dest_files=["res://.godot/imported/decal_dust.png-018d105ab63df278ad4deeb5e793a989.ctex"] +source_file="res://render/texture/decal/decal_dust.png" +dest_files=["res://.godot/imported/decal_dust.png-3cd05ebb11d27a55ddf628d9e58a4332.ctex"] [params] diff --git a/render/texture/shape/decal_explode.png b/render/texture/decal/decal_explode.png similarity index 100% rename from render/texture/shape/decal_explode.png rename to render/texture/decal/decal_explode.png diff --git a/render/texture/shape/decal_explode.png.import b/render/texture/decal/decal_explode.png.import similarity index 70% rename from render/texture/shape/decal_explode.png.import rename to render/texture/decal/decal_explode.png.import index 99ad2e5..c1c5777 100644 --- a/render/texture/shape/decal_explode.png.import +++ b/render/texture/decal/decal_explode.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://bjv7f83tdgq17" -path="res://.godot/imported/decal_explode.png-469403a7e0538c7d5588ac39ef569a1a.ctex" +path="res://.godot/imported/decal_explode.png-4176aa906657687b659f54564b3a1045.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://render/texture/shape/decal_explode.png" -dest_files=["res://.godot/imported/decal_explode.png-469403a7e0538c7d5588ac39ef569a1a.ctex"] +source_file="res://render/texture/decal/decal_explode.png" +dest_files=["res://.godot/imported/decal_explode.png-4176aa906657687b659f54564b3a1045.ctex"] [params] diff --git a/render/texture/shape/decal_glow.png b/render/texture/decal/decal_glow.png similarity index 100% rename from render/texture/shape/decal_glow.png rename to render/texture/decal/decal_glow.png diff --git a/render/texture/shape/decal_glow.png.import b/render/texture/decal/decal_glow.png.import similarity index 70% rename from render/texture/shape/decal_glow.png.import rename to render/texture/decal/decal_glow.png.import index be43738..5c4f9a2 100644 --- a/render/texture/shape/decal_glow.png.import +++ b/render/texture/decal/decal_glow.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://b6bfacouwy2hi" -path="res://.godot/imported/decal_glow.png-60e7c65c14d9ba83f9accaada44f46cd.ctex" +path="res://.godot/imported/decal_glow.png-1bf42d39e20f3ed89271df660623877e.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://render/texture/shape/decal_glow.png" -dest_files=["res://.godot/imported/decal_glow.png-60e7c65c14d9ba83f9accaada44f46cd.ctex"] +source_file="res://render/texture/decal/decal_glow.png" +dest_files=["res://.godot/imported/decal_glow.png-1bf42d39e20f3ed89271df660623877e.ctex"] [params] diff --git a/render/texture/shape/decal_shockwave.png b/render/texture/decal/decal_shockwave.png similarity index 100% rename from render/texture/shape/decal_shockwave.png rename to render/texture/decal/decal_shockwave.png diff --git a/render/texture/shape/decal_shockwave.png.import b/render/texture/decal/decal_shockwave.png.import similarity index 69% rename from render/texture/shape/decal_shockwave.png.import rename to render/texture/decal/decal_shockwave.png.import index 56fd8f2..d3eaa3b 100644 --- a/render/texture/shape/decal_shockwave.png.import +++ b/render/texture/decal/decal_shockwave.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://dkhmqgtc8tn1t" -path="res://.godot/imported/decal_shockwave.png-ff3f5745d48dd37c112ee6075801a729.ctex" +path="res://.godot/imported/decal_shockwave.png-260ea4c33b79d9ba58beff7b92e8ff3f.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://render/texture/shape/decal_shockwave.png" -dest_files=["res://.godot/imported/decal_shockwave.png-ff3f5745d48dd37c112ee6075801a729.ctex"] +source_file="res://render/texture/decal/decal_shockwave.png" +dest_files=["res://.godot/imported/decal_shockwave.png-260ea4c33b79d9ba58beff7b92e8ff3f.ctex"] [params] diff --git a/render/texture/shape/decal_sword.png b/render/texture/decal/decal_sword.png similarity index 100% rename from render/texture/shape/decal_sword.png rename to render/texture/decal/decal_sword.png diff --git a/render/texture/shape/decal_sword.png.import b/render/texture/decal/decal_sword.png.import similarity index 70% rename from render/texture/shape/decal_sword.png.import rename to render/texture/decal/decal_sword.png.import index c64de72..d8b85d1 100644 --- a/render/texture/shape/decal_sword.png.import +++ b/render/texture/decal/decal_sword.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://ceu7b4nuktlgy" -path="res://.godot/imported/decal_sword.png-ca0e8413a122e9ea54f5877a2e742f7f.ctex" +path="res://.godot/imported/decal_sword.png-b5eff293a7fb07264b2b4062598592ca.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://render/texture/shape/decal_sword.png" -dest_files=["res://.godot/imported/decal_sword.png-ca0e8413a122e9ea54f5877a2e742f7f.ctex"] +source_file="res://render/texture/decal/decal_sword.png" +dest_files=["res://.godot/imported/decal_sword.png-b5eff293a7fb07264b2b4062598592ca.ctex"] [params] diff --git a/render/texture/shape/lock.png b/render/texture/decal/lock.png similarity index 100% rename from render/texture/shape/lock.png rename to render/texture/decal/lock.png diff --git a/render/texture/shape/lock.png.import b/render/texture/decal/lock.png.import similarity index 72% rename from render/texture/shape/lock.png.import rename to render/texture/decal/lock.png.import index e29721f..d9b0274 100644 --- a/render/texture/shape/lock.png.import +++ b/render/texture/decal/lock.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://dx2vp753yvh4y" -path="res://.godot/imported/lock.png-c9af2b7e378d675c56581df22939f427.ctex" +path="res://.godot/imported/lock.png-32166d0b031590623c7496bf56c8f4a7.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://render/texture/shape/lock.png" -dest_files=["res://.godot/imported/lock.png-c9af2b7e378d675c56581df22939f427.ctex"] +source_file="res://render/texture/decal/lock.png" +dest_files=["res://.godot/imported/lock.png-32166d0b031590623c7496bf56c8f4a7.ctex"] [params] diff --git a/render/texture/shape/readiness_bullet.png b/render/texture/decal/readiness_bullet.png similarity index 100% rename from render/texture/shape/readiness_bullet.png rename to render/texture/decal/readiness_bullet.png diff --git a/render/texture/shape/readiness_bullet.png.import b/render/texture/decal/readiness_bullet.png.import similarity index 69% rename from render/texture/shape/readiness_bullet.png.import rename to render/texture/decal/readiness_bullet.png.import index 69322f6..1c63c52 100644 --- a/render/texture/shape/readiness_bullet.png.import +++ b/render/texture/decal/readiness_bullet.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://bd7kst3jrrma5" -path="res://.godot/imported/readiness_bullet.png-948274b2b501dfc9e3c74f03cb74d333.ctex" +path="res://.godot/imported/readiness_bullet.png-434339fa41cc310d076446d873fd9c8f.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://render/texture/shape/readiness_bullet.png" -dest_files=["res://.godot/imported/readiness_bullet.png-948274b2b501dfc9e3c74f03cb74d333.ctex"] +source_file="res://render/texture/decal/readiness_bullet.png" +dest_files=["res://.godot/imported/readiness_bullet.png-434339fa41cc310d076446d873fd9c8f.ctex"] [params] diff --git a/render/texture/shape/readiness_hero.png b/render/texture/decal/readiness_hero.png similarity index 100% rename from render/texture/shape/readiness_hero.png rename to render/texture/decal/readiness_hero.png diff --git a/render/texture/shape/readiness_hero.png.import b/render/texture/decal/readiness_hero.png.import similarity index 69% rename from render/texture/shape/readiness_hero.png.import rename to render/texture/decal/readiness_hero.png.import index 7bc6bd2..5af68fe 100644 --- a/render/texture/shape/readiness_hero.png.import +++ b/render/texture/decal/readiness_hero.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://dpsxejelj58f8" -path="res://.godot/imported/readiness_hero.png-79941e71d54e0f21f93bb8731b58c44c.ctex" +path="res://.godot/imported/readiness_hero.png-04f53279c7d7b463a907262c0dc43fcc.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://render/texture/shape/readiness_hero.png" -dest_files=["res://.godot/imported/readiness_hero.png-79941e71d54e0f21f93bb8731b58c44c.ctex"] +source_file="res://render/texture/decal/readiness_hero.png" +dest_files=["res://.godot/imported/readiness_hero.png-04f53279c7d7b463a907262c0dc43fcc.ctex"] [params] diff --git a/render/texture/shape/readiness_monster.png b/render/texture/decal/readiness_monster.png similarity index 100% rename from render/texture/shape/readiness_monster.png rename to render/texture/decal/readiness_monster.png diff --git a/render/texture/shape/readiness_monster.png.import b/render/texture/decal/readiness_monster.png.import similarity index 69% rename from render/texture/shape/readiness_monster.png.import rename to render/texture/decal/readiness_monster.png.import index a751647..b88da99 100644 --- a/render/texture/shape/readiness_monster.png.import +++ b/render/texture/decal/readiness_monster.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://xtipei54v35i" -path="res://.godot/imported/readiness_monster.png-7c27fc050064accb74fc75d7edb38639.ctex" +path="res://.godot/imported/readiness_monster.png-00a6eb3ae03b3f62149da59c65ec229f.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://render/texture/shape/readiness_monster.png" -dest_files=["res://.godot/imported/readiness_monster.png-7c27fc050064accb74fc75d7edb38639.ctex"] +source_file="res://render/texture/decal/readiness_monster.png" +dest_files=["res://.godot/imported/readiness_monster.png-00a6eb3ae03b3f62149da59c65ec229f.ctex"] [params] diff --git a/render/texture/mask/angle_mask.png b/render/texture/particle/mask/angle_mask.png similarity index 100% rename from render/texture/mask/angle_mask.png rename to render/texture/particle/mask/angle_mask.png diff --git a/render/texture/mask/angle_mask.png.import b/render/texture/particle/mask/angle_mask.png.import similarity index 70% rename from render/texture/mask/angle_mask.png.import rename to render/texture/particle/mask/angle_mask.png.import index 49a99d6..7e7c882 100644 --- a/render/texture/mask/angle_mask.png.import +++ b/render/texture/particle/mask/angle_mask.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://wlexfl17167" -path="res://.godot/imported/angle_mask.png-63d0ca414835f5e10cba70f60f51743e.ctex" +path="res://.godot/imported/angle_mask.png-e3dc120f638808da9bc6fb2f2aa58737.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://render/texture/mask/angle_mask.png" -dest_files=["res://.godot/imported/angle_mask.png-63d0ca414835f5e10cba70f60f51743e.ctex"] +source_file="res://render/texture/particle/mask/angle_mask.png" +dest_files=["res://.godot/imported/angle_mask.png-e3dc120f638808da9bc6fb2f2aa58737.ctex"] [params] diff --git a/render/texture/mask/mask1.png b/render/texture/particle/mask/mask1.png similarity index 100% rename from render/texture/mask/mask1.png rename to render/texture/particle/mask/mask1.png diff --git a/render/texture/mask/mask1.png.import b/render/texture/particle/mask/mask1.png.import similarity index 71% rename from render/texture/mask/mask1.png.import rename to render/texture/particle/mask/mask1.png.import index c9362c0..2442808 100644 --- a/render/texture/mask/mask1.png.import +++ b/render/texture/particle/mask/mask1.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://c1nrboeh88fwt" -path="res://.godot/imported/mask1.png-4f11c099a8e93c4a50e5b5109793ca51.ctex" +path="res://.godot/imported/mask1.png-64543d049979ee1409cfa09d885af493.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://render/texture/mask/mask1.png" -dest_files=["res://.godot/imported/mask1.png-4f11c099a8e93c4a50e5b5109793ca51.ctex"] +source_file="res://render/texture/particle/mask/mask1.png" +dest_files=["res://.godot/imported/mask1.png-64543d049979ee1409cfa09d885af493.ctex"] [params] diff --git a/render/texture/mask/mask2.png b/render/texture/particle/mask/mask2.png similarity index 100% rename from render/texture/mask/mask2.png rename to render/texture/particle/mask/mask2.png diff --git a/render/texture/mask/mask2.png.import b/render/texture/particle/mask/mask2.png.import similarity index 71% rename from render/texture/mask/mask2.png.import rename to render/texture/particle/mask/mask2.png.import index faf980f..2efb67d 100644 --- a/render/texture/mask/mask2.png.import +++ b/render/texture/particle/mask/mask2.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://cnnhlvmrbdhjf" -path="res://.godot/imported/mask2.png-add4f7f83d4a993f4cd8cd597517bf25.ctex" +path="res://.godot/imported/mask2.png-8a2ba3849d464090b4d132d45dd7d13e.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://render/texture/mask/mask2.png" -dest_files=["res://.godot/imported/mask2.png-add4f7f83d4a993f4cd8cd597517bf25.ctex"] +source_file="res://render/texture/particle/mask/mask2.png" +dest_files=["res://.godot/imported/mask2.png-8a2ba3849d464090b4d132d45dd7d13e.ctex"] [params] diff --git a/render/texture/mask/mask3.png b/render/texture/particle/mask/mask3.png similarity index 100% rename from render/texture/mask/mask3.png rename to render/texture/particle/mask/mask3.png diff --git a/render/texture/mask/mask3.png.import b/render/texture/particle/mask/mask3.png.import similarity index 74% rename from render/texture/mask/mask3.png.import rename to render/texture/particle/mask/mask3.png.import index fde5999..d9e679f 100644 --- a/render/texture/mask/mask3.png.import +++ b/render/texture/particle/mask/mask3.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://bgc7ni6f5e8si" -path="res://.godot/imported/mask3.png-03d81c5ec5ed19ed517e8bead41bdfae.ctex" +path="res://.godot/imported/mask3.png-21d0121b8efa44304bafb6439acf83f9.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://render/texture/mask/mask3.png" -dest_files=["res://.godot/imported/mask3.png-03d81c5ec5ed19ed517e8bead41bdfae.ctex"] +source_file="res://render/texture/particle/mask/mask3.png" +dest_files=["res://.godot/imported/mask3.png-21d0121b8efa44304bafb6439acf83f9.ctex"] [params] diff --git a/render/texture/mask/mask4.png b/render/texture/particle/mask/mask4.png similarity index 100% rename from render/texture/mask/mask4.png rename to render/texture/particle/mask/mask4.png diff --git a/render/texture/mask/mask4.png.import b/render/texture/particle/mask/mask4.png.import similarity index 71% rename from render/texture/mask/mask4.png.import rename to render/texture/particle/mask/mask4.png.import index ab5def5..76c62f8 100644 --- a/render/texture/mask/mask4.png.import +++ b/render/texture/particle/mask/mask4.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://b2s7805jh3khd" -path="res://.godot/imported/mask4.png-c62deed2b9e46b22194482ef8631e116.ctex" +path="res://.godot/imported/mask4.png-d8ec7f7cc4ad158b0a8f35672dda6d90.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://render/texture/mask/mask4.png" -dest_files=["res://.godot/imported/mask4.png-c62deed2b9e46b22194482ef8631e116.ctex"] +source_file="res://render/texture/particle/mask/mask4.png" +dest_files=["res://.godot/imported/mask4.png-d8ec7f7cc4ad158b0a8f35672dda6d90.ctex"] [params] diff --git a/render/texture/mask/mask5.png b/render/texture/particle/mask/mask5.png similarity index 100% rename from render/texture/mask/mask5.png rename to render/texture/particle/mask/mask5.png diff --git a/render/texture/mask/mask5.png.import b/render/texture/particle/mask/mask5.png.import similarity index 71% rename from render/texture/mask/mask5.png.import rename to render/texture/particle/mask/mask5.png.import index 7371724..63c0597 100644 --- a/render/texture/mask/mask5.png.import +++ b/render/texture/particle/mask/mask5.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://cksxjvafx2skm" -path="res://.godot/imported/mask5.png-01df40eb2cfeb741fda691b6a0a708d7.ctex" +path="res://.godot/imported/mask5.png-8765853061ca062277d768e2dd680970.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://render/texture/mask/mask5.png" -dest_files=["res://.godot/imported/mask5.png-01df40eb2cfeb741fda691b6a0a708d7.ctex"] +source_file="res://render/texture/particle/mask/mask5.png" +dest_files=["res://.godot/imported/mask5.png-8765853061ca062277d768e2dd680970.ctex"] [params] diff --git a/render/texture/mask/mask6.png b/render/texture/particle/mask/mask6.png similarity index 100% rename from render/texture/mask/mask6.png rename to render/texture/particle/mask/mask6.png diff --git a/render/texture/mask/mask6.png.import b/render/texture/particle/mask/mask6.png.import similarity index 71% rename from render/texture/mask/mask6.png.import rename to render/texture/particle/mask/mask6.png.import index 064bc25..e854d94 100644 --- a/render/texture/mask/mask6.png.import +++ b/render/texture/particle/mask/mask6.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://csjm7d1tg6b50" -path="res://.godot/imported/mask6.png-bfc308add2dfa12fcdf95a205d0d505a.ctex" +path="res://.godot/imported/mask6.png-c44f052796453975f97df43324008e41.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://render/texture/mask/mask6.png" -dest_files=["res://.godot/imported/mask6.png-bfc308add2dfa12fcdf95a205d0d505a.ctex"] +source_file="res://render/texture/particle/mask/mask6.png" +dest_files=["res://.godot/imported/mask6.png-c44f052796453975f97df43324008e41.ctex"] [params] diff --git a/render/texture/noise/noise1.png b/render/texture/particle/noise/noise1.png similarity index 100% rename from render/texture/noise/noise1.png rename to render/texture/particle/noise/noise1.png diff --git a/render/texture/noise/noise1.png.import b/render/texture/particle/noise/noise1.png.import similarity index 71% rename from render/texture/noise/noise1.png.import rename to render/texture/particle/noise/noise1.png.import index 6a3df85..1df5b5e 100644 --- a/render/texture/noise/noise1.png.import +++ b/render/texture/particle/noise/noise1.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://c4byf37he3mjt" -path="res://.godot/imported/noise1.png-f693e43e5a0783b64c9b218416eadc51.ctex" +path="res://.godot/imported/noise1.png-224d9020dcb85a6843564370cbfd661e.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://render/texture/noise/noise1.png" -dest_files=["res://.godot/imported/noise1.png-f693e43e5a0783b64c9b218416eadc51.ctex"] +source_file="res://render/texture/particle/noise/noise1.png" +dest_files=["res://.godot/imported/noise1.png-224d9020dcb85a6843564370cbfd661e.ctex"] [params] diff --git a/render/texture/noise/noise2.png b/render/texture/particle/noise/noise2.png similarity index 100% rename from render/texture/noise/noise2.png rename to render/texture/particle/noise/noise2.png diff --git a/render/texture/noise/noise2.png.import b/render/texture/particle/noise/noise2.png.import similarity index 71% rename from render/texture/noise/noise2.png.import rename to render/texture/particle/noise/noise2.png.import index 641d188..26c1c62 100644 --- a/render/texture/noise/noise2.png.import +++ b/render/texture/particle/noise/noise2.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://dd3e7ol8qa5eq" -path="res://.godot/imported/noise2.png-b12ecd0c48ee15f1133a07b5fcc330f0.ctex" +path="res://.godot/imported/noise2.png-8541980cae4d2e7f0c83830fe819d5c5.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://render/texture/noise/noise2.png" -dest_files=["res://.godot/imported/noise2.png-b12ecd0c48ee15f1133a07b5fcc330f0.ctex"] +source_file="res://render/texture/particle/noise/noise2.png" +dest_files=["res://.godot/imported/noise2.png-8541980cae4d2e7f0c83830fe819d5c5.ctex"] [params] diff --git a/render/texture/shape/flare.png b/render/texture/particle/shape/flare.png similarity index 100% rename from render/texture/shape/flare.png rename to render/texture/particle/shape/flare.png diff --git a/render/texture/shape/flare.png.import b/render/texture/particle/shape/flare.png.import similarity index 71% rename from render/texture/shape/flare.png.import rename to render/texture/particle/shape/flare.png.import index d2fa420..a20dc6f 100644 --- a/render/texture/shape/flare.png.import +++ b/render/texture/particle/shape/flare.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://bb0yfk0u4lqqn" -path="res://.godot/imported/flare.png-3c5c77b68c2b446923833d2d81d06ac1.ctex" +path="res://.godot/imported/flare.png-97e47c07f4cdcd90f4926e0bac2a678f.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://render/texture/shape/flare.png" -dest_files=["res://.godot/imported/flare.png-3c5c77b68c2b446923833d2d81d06ac1.ctex"] +source_file="res://render/texture/particle/shape/flare.png" +dest_files=["res://.godot/imported/flare.png-97e47c07f4cdcd90f4926e0bac2a678f.ctex"] [params] diff --git a/render/texture/particle/shape/glow.png b/render/texture/particle/shape/glow.png new file mode 100644 index 0000000000000000000000000000000000000000..d0fee86761f05294bac634dc086212acbe597047 GIT binary patch literal 7396 zcmVJ@GUqVQ{K?a}ymE`>0uXQx8YkFF?d#p6Qv;FQi_g>pq$+vd_k2K~-0dYjj zzq>{F=!s06V&TXW!41FC)Majn%de*3L1xZw0g89dickY+WMEcP7J^5a5VL@4A8% zjnCwAxzzP~eY5>o_Wb-j-H!xVS&7yBY}?P0Z%2St8s)_3wtaf~zY@m)c>qf}pU-u> z-ImumKpFdwV~zh=0Od-hm%LCSb>ZcW#m+ZNr9kz?~pmKc-h!;RxunW$!5;Mu3&MUjgLn<kQg;1IfSF0(fcsECvw3V>_xV31ta(tB@bv(e!B+pi9{Zy8d0;HBEp$9!Q}2v~MS&6>w8cEl(P+ zw2>O_)}Y`bbPOlLPTk-m2=J~JV5Q|=k#k?&nfZDJveR_^C*tVbDOMtqPc3iv8 zJ3!R&e*gXVpWDkicspqQ(ON})LN@Sj1lUROI{)wH+|9hS--ADq!Q%$E9DZECzSPLn z=m9L}bslNIjzN-XogaIUl$IcspF2q`HV*Q>UyfFIk-Qh1uk zbCkK9&P@9$&0Y!moF6cRdF7IzamrrbgyI7~H?ZfwINBzTAbyFGGcT3H5=0A2wv zpgkbuysxhi8>~vep0m@;Gd+}MD?p@W;59R7EW`(XPHj8(<@I?0?SMZ*g1cQn2fhb= z9?5H&YdwLaCeteX_SCt$Vj$gj06NicpQK$*Lc zg(12-h$ubCuTfqaAn z?^*{)d44kWoOW#{`22U^Iq&HpgGRZGv-La3eMlH=@yBRi=3dJ@;2Y=AJT+AoVw_K4 zk8KAb$_PTMplwqh1n;9Bumnp2bmqT{rjyV2h@3#m-!skAGX2K#L6oXC`y8Ol=d0b^9eA)Q61+z|aF+#OV{)0->|OH( z;@FRVUEsUP9}Oh1wGHRpB6O*w2cL-m6@0&!d3}KB090U+2n3xSMgmd9C?f&ggI6vq zWGn9x4@?QLTj@(#K+=4V&IPKpT%gJd$P)bV#~*Jp0Fi~RgO-49p-T&sIN+=Scmar@ ziwFZqo=e(Fb59XCB*8dl*E`ABC29UWR-h%oPNlCVwRVrn2_B<-_w$;U_7iB<1_mkU zPGtH?6q4=~#uR#^Iq>?)981G#`ZXF^;EM>-es?)?52;N_l9U!w(#RwoYbQon5+F&J z?{~R=O7&_g%u-tm(q zV6mwX3^FBDd#9|x=Vw+S5@6TNS2LKSOZ7acBdD5|*>@{Ia*#NlMUViV4!Rb}C3s&v z3qGFzv*4p+Yq{pfwtxTq_rJ#)fR5{y$ene;wMbB}#2wRWWA7sFNN{%@U{>v$$=ND# z1*>oly>=;z_b6ZBj|L-AoG=~ui3lf*Pe^`~R>1rF$B#juDuIm5b+3%}75$I@K?;F8 z8(b=jbGG6Yg@pCg&}9}Iydi*>M!SPa2x`GH&{s2PBWR511#)r$+D}1Y$_A7@cxK=P zESP^UZn^d(0w@EJ+1LFl4q)|9=aoyKZ+5Fd5t&3VS_HSYT~=@ogIl{;V7nAdznP-w zRN(PI%(qEF9;g5O^Ut5#hz!0@`Vj;V1pQt}fUXEsuR)ood;(p-Gvna>${jG6BMBH( zG8NSM+4;owuEmhHyVAg2H$dN7W(`tRj=)lL>HF#T1wNN^TPMOL^cuPwa&zih;VytF zAbmZF!1JA&L8?0TxTiq|S^|}n$NDkt7DpL~Vh>sY&kh(1yjvyE<&27zTLd?M7u55a z3XbJ&-l@r&AO9W$us-0Kf&bk4B<&{&9DI^M0C?3;{ykOuc+Mez{q@(s*Ge~|=wBid zDAUk&TrlFO;BGZP%L=v$;M$+kCf?lHs(vZzRt!M1&r&b7n}EB?cT14KKZl+}UWcb; z$uD{}(7{hNf1QJQzmCni0?W;+{4uuB@~78MA!Pubfq1Fdvlz#477H9I1f|CFJpY2h z9yH4|{Uid{Gq&N9D2Y7MGgTT%WNKy>oDIf=V$p4>0N7G7fHq?vPKw{ABcUB-_ z#PwS-z$)tZ^<8f58sR}0t9AsBS;DXY1e+GYwcn31i$N-wWHwT&2GRx48nF1|)@7J^ zmz#|z9QVZIE1gt4AWK$w!Ntl7NIW3yNTB6Uy09a`A7!TfU7>~~AgIaLCu^VvVh0lI z2+90YOS>S=O*H*K!S|Gpq#vR0Pux;XAhfgWoBa;Xgdx~QM`az=0Aj0AP0Gl&3p z+VAT;2=n~?68ZuNtXqW?{B;#UuK}bKaFqp6#PFzVT|FyXv+Qlp1E9rOH)0T*r_IVy@?kT#}xRf ze}V3R*2gmfVZkC%P5K48<sJ&owP&4>J9_C%J$#`bLr!AW<~! zfHNjx&*aMQZxg_!%LHnX`kk$t_F}~vYB!gAM&aP6sQ=Q81?-}KT7WJkcIVW3E%zh283akF&Hd|vYm_%5jYksu^4+lSUf+Y;224eZF>-N6O3@B7moI1!Ss z_F|652p1b$;Qw73nsWbHd{Y(=6g28)?*-7g3t1C=@eMDZN>+d!M=5h+Pi*LQ)Q6DxtA8nCktzJIc0PPlaKe*I}* zu46l;?RY&TAKRPPAj{KXBw3CLOb6(e>4pftHGOS@1`NOoXPaUzafvHV`B5vfSUvF!R-^ z!P0(7<5%Dxxv!2mt8=I8btOrz!Cfycs9V(|_tM>)G3js)F(_&s%?IryF~pI&2#4l^E`(^~{^pT7z$3QyxCGoIM*Bv_GQ zN9)t{OnZF&%2ga8th*8?hT8SX9&%0Bywm=(du(HXH_Winras?^vn@$y{!fd(`x)RX zlYfs3;QZ`bxLtC4es43^;m356%-XbqHD1Xy2;6D3mDyt8Q;iF$0OD-E8lWEmefR!m zRv|6x$Wmyd?mR1NB}ssHB$x()vlFtr(Q5$OuRE!m!CEl3YrI)Q?l#sVGP5{--RVB6 z3FO>uc$=)QKUw72z){LJ0VFJot|YmG4y+wh-)*~d{G+m~`Q7}C1UvWVV=|Hjy(bp< zkBjk>CgF)#bV$A_-B3rGBVcun<=cFf%q+oC@jm;N%!tqpKbM@j&^Mlq406%(m35e{ zU)>0QUnL(wvQ9aU%E~$j9`9dEjzHQq3OjHLO=;_QIm0iM>S>7?OFYdaFS zrn_70i0#L^XYgk=N^tlUF*kcpjcYdsC+pU zG8Ng=nYw_Ry~p0yxkg^_e7ZN1`%7&ntrto3HqLAK`ql{pCo1%~ z33O+D*L~X&V5a?yX*w-WpwG4|%Opr5DpO|(Bs}x`E`=Q}83u zFZSv+J~rjP^@>-thzQ-yc0F^a@P^QI{~h>+xP~B7)A_Gy-9JAz(H(=}r#M4IQ2YB^ z#b;ordu=Vii#;!=1G4ci;pK(=m{RiPzRo|sq*tV-!IT1VHahkNd9Usv4b$rGnIyP{ ztYZe8gRkGXAFbnbvLx<8Jce>Y7Ob($4hf!S8lRTY>|F72!|UraZUx`vS}g59<2`#9 ze01Ub`eB7L9-q>()W@EHyx@ZiuJwroZbnl&>GwkuKLeiIje8*YBnD%Els(WjFwkS5 zSa7}m_OLGXJ$3H~Scy*P&!u^w=FDZxK$9<*AX4z{n;J;z4^KL12}HLXWpP6~MzR8K zhLZ&t*F1g>^q3y6hfPFDfg#D^L|{AfT4$QxrMpEJF!PJa8o0}UfNL~?byuKuW1g0Qgh(czn*NM$7D;qWH~%|+gO`FW`X9Q5=J>e_fvq#3eW4Sv?rvHW_PXa$JbFxs=-J;OkmlcF~4KvWW zY!(MhV*sxTszJ`pD@o|XUhFmNZl+`*#<53`L~y#NVLbRDKzi)@YOh(-F)w(<{mccV z8h~qKm+I*^?uV9u*1$Et%N)jb`kz%IZ&qeMDo<>Hjs%PY91uTgX9cuQU(e9I(moO* zk&x?1G?FT5zy4=ggx`~c|AJ4(Q4pJ%7qu{p$Sj7X31y~&>q!nOIAXNcxO%cd_v|9j{c^UaT z;Hff5k}&;bVCZh34Dc>4SQdi19USNs046dpL*RaDP$z@7(?=Dl{k(a-SD5J~->5m( zJzIZ;#{(7m0^ABX3FwRIvq=DIJ&QRG_6&Ts52Jos2#IU|QO%be?hf{m*1wAd}B?s-Z;&X(RnVi#}%zRb$N25g?gcx*BR_Dhw${R}8@5*U97H>v;9rcB~1I z2%fIiBJ!Wf-2|u*sWTJca@Go@$xry|W+wt)4WLh{F$UnE5*B_^CQzXx$nVQt!PUO+ zlhQ&D3>ENRt;5J;hXg)r0IBk)YjLZ!!m5+4N?>+gM0b-Em!QeA$`<~C!LU>l;mgd<8g?1Rs@L9>-1Ykqa3cR2jxDdsw?k^2h zjexO(r;ECA9#>X{-y&ea$;SZvz!(IHrfJ;4#p8Nip<}>I^L17}mt~}%d$}9ncKX(I+2^24AUk>GF3^5u`E`cRp zH5e_=*~TaeXufZ^>ud1)D5O=SKv!#E@8*-Qw|ZJ^ZB#w zRjuPZO+QJ%2GQ5Xw4D<{Aiv<@kJS0&HHw)fNZ=PNforW7inRO(26cMu(E0lcefqBX zk4F4S4!HozQFluK=jShN7Fk;7eR?4GKWXb+D7E@Gku; zo*Z`2(*v&rn%C|cNdmYjzoC<+3-ro>=XsuOh@D%d_tgG+!~*<0z~oV_la1>2u466p z0UQMo>Ce+BpL(?d?BMa?YCJE?!mja>TT^ajWbUBzS2kK_ru7xT=Q(*zwGsUvm4^vX z6L;X1Hui!qO!>jZl!J95Mn*7Z*siCYwoiM|CrO&kV2{U5ZiUz2(?_d(JMw7+=$3cp`DD-Y-9wTJG03jCuctWh4th<1 z_ZmY2+U31Lr+gRzYNNrua_G~(KeL7k@q-_uOZ!-mO4Abe`xJs(VLq*^M(e)c>^!{aeFNb(ur*Jlx+?z9GyE_Gb(w>s}m zAeeyg6fFghoykxCN&epv;LS-lQ^sW0yJIACpO(#zv1;^Gyz%`z%WY`qhv^Z!SITv?BgtmZu;- z7)#leHT%BAj2X+A8;{Ivo^>|&6>pJIL*E#2Tmg^OL^@^$ZKS%!o0083V zW*4jg073p=L4fF9{tqLhj|BiI0L(8KUk?#j&Rlw0;l&iT)f27!a~0^{L&^(Gqs{rXs!kkQ=#4i@4+HVF7W zj&j(YZFdHd@Q(k?ttu#Tf&VBp%8;n}p9O({Orif;g}=PS3nL&vq;5gZ|9_U22N;O_ zXBtu20}=87iICoN)BjDWs-PhtP~v~-R^UI%uH`>!`JdSy1LkG_!@;qKM#7H)XU8p9 z6aR-T2B1s-zZm8Z84nj_03J3FMir0zhf+Sn0lTd4uJnHl|KAS(-;w@59sd7DtAQx> zL^N5^>F zRbJMRp)gzYwQfv9`>xf|2|ROxKPpR zQ_x93Aer-?-Q>h>ior}Kv3Xm~2<#LXu#j)Ohi~#Sb`5R$+Vz`!gXMYf?B*>TYqk}F z83V98dF)PeH~2Pzo!5&R<_~qaG)|(F)p%LQ{TCCzM5m4KxUt=F8}39rMI`){BcA)u zD|$==Q*B`2lIk-u!v zEbGjiD#ZZ}ZKd1eVi>LT*CiA2l!P|>wJi71|3zx#c@jo;z3cL!nf z3wBmeSuwfCi96%ub8Mny;F^N5TQX~vFD}b3^@5-rR=Vvz2RwJr0nyMU#Npc z6*NE|T$?J20N#i$s?FQwD~j(v`X_Fz2pvllYn#^mbGbqJL^82b83!7ReE37;@sKCp z{J=TTa=+P&4MUgHHVY3%V4Q&V$zjRnjWg6UE)Twl!qoY01h$m9QtflTAveENOb?&Y z3Xw|&M=w*jOOz{6oxABHw&n+(_SqgGbGB3VcRtDTmz;fv&yzO(00L_rw193Dzf;P> zC&W%x7pTZrs73ehBN6%3jl}S&t2$=;g>*pybW}+BYjO$_$<2H$FW9A%!)eB`McO-A zLz!t)-%XwxT*YU>kPJ&Xuv?cYLaQVh?q?SpWHloX@ESWGCR)Ac^U$FP;;yGfX{pWK z5uNVch5^z(g-Dtv{183?tTy{uH_IEQaE3vTv12$jyYw~N#DJDlUzJn}@1bRN6A3B2 zbp&s{oNYxZr!c;_5zgL4f&akvx7Tj9bGi0y^Bm`RWZRs;9q3uk{iTVgt|;TNDv1hPu|wPs zP23*1iy%Io@#~o;oGzIF`}9JD_A=VVJRQa{eB*!h&E|Z!Rt4qQLrr1U-f>5>-<@AB zHK>drJYOh9-ujj>T#&!*=*Ta9(oW9+;9#g8i1%;w%0kO@$=|jF%HdO5Mf)r{$i7z71mOqY z@+`F?j_GVu%pBnu9R(C-7^*pxJ`REe<>=(gbRst@bZF}RbI8|J3&dP9=Uo5HcZthF(fMZ-Z;dK1KPfKo3`cG?IaJ)F&?ETO?-(&@~t9pg_ z{n`S_%gYIomwE_dN;{}wnSEp~tAxi|SI6P!#@Ov+=yhM-hA+|OO>n5fC(S9-e!u&q zc#$_1wozv%OhCX%!X88C%{xhAN7A|7#?KMdOLCXPoOO2wdV@3cHw=RpLm=K3HJb?r z#RGhOtUesU-8*hG{a{n^z$wL=?k_YG%Lcmi0oGg$7@_O1^{Xn{DQswgkgFSn3>lgy z>WT#|_S%wfC}{CDgIhE^#@?aucIFHY1NUmrCHzG;#7EHPzM9l*$Uy46!T<_10^5=? zFZpt6&%T(}9xW}$<_6=vq45!0zWRV^%-JCJ_o%7YdQ6S>s7Cxiy;HmeCGX<6;qEC9 zt5c6#@DZ)f`O@9{S`P@QsM19zAD}Z#64S>$@PNJ?%WqQ)gOR4+y7m%v(zkQtP9Dc} zLxb_hy*XBM3W;I_;Wu0zyBuQE1s|_A`YC`fRfow@7X=E8r;EwLyg=u;vcNv!MaA)* zRSM$S+x9ae09HqcjLW2si&GrxCsblyvP9(Ql$7sE_F~4~o`hp-@qA1?F83$)xj#-A zDF_t=0(`i1?-Jd|Z;uJ&ObHlsWN0uzuDlp3Yy~ONV#Y1!A#V;8l+=qw>52emlyR5k z4@f_y6Thn_H^Xpij0K1RGfo9$P#Pkd?XxT^Sl#zbdsH^ycWFDfK!*$) z`AIX-@KUq>$SaJ}(3-=;TOGrk^Zp0{%s$uI@)2%G$)kL~KYIj{0p_h2Rxe4Mxj%R? zN{E3rQGhI7>fB58=j4A3Vx@`MrXRvVFA}+N2jy60zTU}`W7GN|$<|)s{Epb>$TK^B zvCgi;t`GL7Ka2+BsGT7x0jG}1+>!?M$3}&$0~&yGYUG0tWm)NcG$c7H88)7+G}|Xr z6eT`Xq&*dcre?TAM#&QA{!Y9n^4*BiuBZ;GRwa}?4+mF70q~$es9ti0*q;kupA!k2 z$W!YL+4VwMV%FqCHRkODiRoz-W0#S1=G||dk-7UR%BobC^Ta9RX2HGjDA?>4<6T_Z zQOeewfC4Q;?AP~18t4o2m*Slb#8i2Ef|8o`n4h8$4>`UDh3hy1Rp+f_38lw2<<-Kv zm)#F;vG^`(jk#*96yhRmc3xRf179oxkUS6FBY6|LM;ER4@cU`=#EhDrQDHAZ#+SQZ zy(Q#6k|i?z&Wk2t*ZmuA;2q?7s60FAY}_xCa4{MEi@d%#)L2D#YC^o&4S8COnm=1V zcxaH=DuN3X@sU;!t*S0Dsx^Wtm5l7sH^OlwnFpkFEe1M-~Vt zISlJ(#hT*CT$1JTV298@{;P69Z4AWJ5&Nk#t-~9dr=^vSh?Ff%<&m&b5zR_nIFWH$ zT2*t&3jo-_Jo@9ytV zru&m)!T5|RGYZrJ8`lX^rLlgX@mAE#$|3`?)R%tgTZPshb6YQhD&x*zz)CO%(-Z7v z-g9+L0V}z(3#f2#bRMNR3^Jj0g>AoeRG~BvI1?RBI~d05MOn@5b!nk|>x#N*+B%%KSqGTA07&Ph=W&_$1ES$*{0g3;q%L zsbX$eQ1Y$r)>=a@!ejF8A1(7=#EnIDR9$uRpq|0_5>U|FGc5kGv>9(+2ZH>oj0P&p z3pSYQv!J;9RK%({>*U4plLzN*0lv{b7>c^ES(eYVOqw}RAH0Pun}3sQ&Xtutp`+M< zNM*k&r*%$8%3)N9!pYt{ujs;WT#jwefizrxsI7b`AOoN#9stdE>yJe4$^Sj zJnmo?CuzU-T}#Bqlr_R1q>eSyX!CHtyI&qV9#E|%<2{%rn%4{Qo9drD>+yZF!4x9=mfww;rtm1@I>crRL#rzdf0I!>=i*eDwe(7(_?x z(+_<8t6vn#>N_s~(QX=)D%R6KV2$7;pF#^ZsYG`N%L~2;E6PO#B4ZXib047F;!qCv zz_9WHk8w?N3`vU$(IAdVqf>4;=V^BtPY%cQ2RSkq5Hngj?Dh^pM>`OaT!5=(-45T@^ci69&@I{+0(ZbJ@00fpna@t8b&O#)4-A+TN`!xw2bGR}}BM zrHed~eOaA@;LIy=WJou)_f85t0zzdF@LBxFXcW&HQEK8|`57Oh5X zD|_Qr9$$9O^xq!ZAqen#o=l?zjx1G#dX6g!fLD?}AByPTMRlGBi#cCR`E*A9fL?K? zxBiSYN}fEQaGv8p@9&6w8Q1FcPiOLDnFO(xI79q#%mB&?q)xW%g1WMAn*Id~fUZ&} zazqV(@FSmsBoM*xJwk0m+0W%CEt??rdIPy81MwfzJ_SA15|Y>%au1w&Vp7$Y3%yer z2f=uec#TKp@MnVByaFgQNnH!8{S+?qC7py?TZ@X26>c!W6o@XZ#6b3}xnKgm$Obbh?SX!5kor`F!*2v8b9TYC{I%v^Jq%ttJJ zGlf7ERSh;gPp}&IQWzKO95!CYY9*bJ7Aal({WKV=h3?R;JhX$k&tc#P;(qysWh+Sh z11~sth5GIz9Y09|PPUYO?f+|af_1=s7@rTxB3l!6Idk@aW-U(3qZ4RK=iNQHtH1-$ zK;YeY5!{_T_=*!}(Uv3x;Dgo`m}s}=5t03$QW7v02dky{i09+QVirVFAXy0veP-Ev z;q%e`;9}G#>-ZCTenUm)osBMiQ(So9B6yy9@tZm1cl4@5EW@1Mq-jnqZ8vFrE zReo@Yy?369lj4}js5BX*RLkOn2c>{+tRK4Or|@Ok9?*wFI-?6?v>Xd_iaa1$^P|cP z3Nq;#*5(eY(810LIJI^WMT9x+AtYJDWQ2&Y>dnWZ-KO^s4!q=t?qNyqN25%`+lL!x z@7%M8r?{rH{_951OJDmH;L?#h`~0Ka=^5oy_)={48r|H`4SG0)mFL6jTTu#{aChqC z7#L%r*FSwjL0Jq#w+c&-4PW~&44^OcI;%}N?uryGMUQh_eo;9ngI-ortS(~Rd z(rwP_gKVFTo^+$Z5OZyZ8nGhOHw$v@MqZXTC^_&IW6rv`vhflQdf255xIMq*^gbcl zl>9cUcB?Zo9=Ovp7IP(&ajy9iL<-m9L62OGxR_}ULM-=6{aGgHPGv?Tg6^RQuJ)w| zJXoA#)2;$$w}%1jP*H`i1a=NT*TiFQF9}EpM7wq9peqhVSnOtn#B$n*M+I~}oUC_F z-zQ8@?3Fl^uAoOV5B*|Ythfzs5FN-Q z-KIuesr(h;JMl1a^K7$)V298l-#sDDD&6?5oLC@yk5fP$qcDT^L@zpPOxkF>`RP`v zLgl;`s_U-A!-Muf!O;&r|4Y48#7J?cc(Sm^F|EOTEHrZ3TE*By=^5(Vl=eiINK>Q- z*m0=4BUyWq`ovc2WVPH@ulxY|g!!H6JHnxM;;*hZ@Oy$Bb=K zD#+XHOW~E|f*mP=6Jer&q}TsTBwxgC7Qbgc%#SdBwYnw+O+$4hQ(CWlF}FN_by<4? z`DgIA4ZIS@93qjCvX#G31{g(xSnw;4Mv(`%of_|sZT;XTxq-ne-Fa&jgl9tM<*oA3 zECT(PfYKC5Z$~++uF6iuacBrXptBtyYL*^^dAHgxpf=S?{AL{f9nbS=(8O*3=rnhN z#G+s}o0sZ)jsf_#Gf@6egpq>Y=pEe0+2;uSS7iKP{uOP#95cU+)^3t}Xv=~QNT$xt zD*mK-IDB4@Sgj+V{riR>a*TS{%J_BNvaJ_#h_QM$Zz1g2XR@{Ck_-YZp?6;g<9O7G zmH)9mux+7JOJ{T$e0yrWP@cVhz{qMt4T51Ney&Q=kB-wGzbF63MvV zzz9HV3kjp=kySTRm$cI;p|IBd?$fq9{*fem?d$U*NHUN$Xmi9~@;Et>aNSH59~Bn` zSguCGsBeKTRz71JU*4u?=-gFyItNs(v}6tF?{$?o$Olq_BT&UdxsJaLkpoWg&AEjq z3gP*f#j7Y>MUDHw(IZ-X2svx%EUdXNSf1>!k&7rb_Cara#q=UzL-Lmz-YgNh3&bnD z7YCvQUv6d&Y?msfVir+H!*N?fgqBZd{Mrp_7l#oB zTe=I~`MDXo{*s72Jb9xlv0DvCp3#PEUm$GjowQ+qfqcZrMsb|}y`Y>%rAzY%5h1N6 zDpLX`I7oObg5x5e+>lNfe2zN7CYeZKRa;j7sYoJvPu;M&CCsn#0g_Y=g$1|!Tr=DK zZ;VviYD|1=0Y&n0a^X-O$Y*IcqjV} zx!#ro3U(n|<~yDyMuY7asUJ02{gApwN4WxQms3-&hDbPac0H>bp#_c-i8x8Tvs_2Z zcBMxxLS*3C^5+djjV#CUN2_qqmb?5QdVQ4sszK@!>t90+zAR-oM@l!^`ha_SD;@3@J#6hYM9~uhgP&& zZCSC{?F9AM8q80)f#~h@@>F7;Z0OUGC}i0`jt1&3dIImohqg5t-B!bdijFtjk$a#e z&zibVoCHw}ezu~86nJw8-u7G-V4IZ0ePQL zi(FGlSG?=@GXkIV-@5n<=WYkaNYF>FcduW~hQoV-Ec$eq!YN(0s>u=kR)GhxUBxa> z>w}g5Wh?-*4jI1WOb*i&bZ8R^$>s@_+;NvwR)yMHj|7;ROa1rELFa@IkNdi>0r`0h z`F~@N*ikPMk~dh`q`LX1QDdz?P>Y6^Ss4y#U>%00R6@O%C+o{i#d9 z%v!I>`Fmw_v4f-k%A{A6Q|$C=+;AJf1ZRgK=XY|j#q_JcEFNg%^_buET(R}M#}Agz>{l^h3_D$HA0Tc+BPB(frL-j4w$w^D>n>k!W zI9+QUpCy*?7^=V+jAh25Z+xq2d7dw@iNNB_-y9m`RUnd67X+PE2J%9V-~UZ zf?y{<;?m1efBK}v7ck%aR$TgkHBjJKfY*>vL+L87Hz7-$*q(a9^6vL%bI^`UE!2HP z6Ty_1lQ~~ap6q5eMF?uBMl~Y1NbCwhO;2OysvUFGlE2~m=qnlXv zip-r)P;t;;MIEz_2Xb0_iP28vln~3FzJ>3)2ES>R_P7eQa!aJ$vaLM4v3-ZMKgNrN z+}4-D=wO39tX1|V^J4eN`>RexCbP}EeyVN%JeM^R8sN6vp&zI^ux%^s9Ik6feA}2RK$QAmT;YPRewW1{xwFW6JpK!yy)Qyyv zOVe`^X7)STmR?Y^A?hW}YuWP0_|%mO6^&IOdTE~YGxG0Qk2%F8zvQ}!^tGHrAUW`0DPl}IrW@#O~OF9`y)mcIRQ#F>-IY5h&7wbFQgMb0eoS$QKjlxSf4mB<1yGF9xj8zYm8jEy&3DRzHS=?lua&duGrVTx-^6$>2dx>6Ht#f-cC zJ~KMA@p*gfn9y@F-*FbyX{o6x)jd=LuJpdN zfg|L^??Oikadr`L8$;4ZSlrJ5R^5hsyngCdbA;La!1@qzTY`Dj+(}kG5u}4n|H3W2 z8(+wrQs4*5et(%0rfvE2z51>F+ISqDF8~#ycuJi9ORyenS|=j$PA?H$2VWxr-8Lq^ zD&wbZZsY7v?%!#RN8}bjN_U>P^}6=1FN`UEiRc&;N&7UI%~T8$>d+0smy=7|wTGb+ zL9^6^k=*c(J`}Fca)kc*)uf4xm>p*85D36gDCZo*Z1){ujDUqJtp9@J7;Y!57`;4M zMC*;)?Cc^k7W7UZ9+do^Si7aHzcf6(5~AJenSh$<`_-x+G1AY0x(CWx^Znt?Y;W1V z^ru@&6X&ALC;JSAv)zqxK?kmO46Pxg+OR39a0DL(z<7r6Y0*J8atLq=DDdQMd`jG) zG9~Y+&*B|CK{uH7Ls(!;**J4jeKYlU!i@4eq%KrkO}E@fvVSb*&2(ZqBb)JRBmGd% z-gC)c+~O78tov!wRo{esOY#-)G6~g5jC%Deq}wypk+1n7qhVn!Nu@I75oPzw zjFSttRY{io%FnW;*U%uM_O)!$)V0p)dtiH4)~{5SI#&Kl$}nW3 zv5jL4teNWCjLCP5KXTi3T|6#CLC@xIx}PhN-k`FoF74u(p&T5TJv2^C9w0w-ghxMJ z<$b;3l`}9k<_ud)(s4IbJs`x5Q*!AeGir7dXf>;=IhUHBXM!1dU*{A7w{=bQtcRh2 z62L>lLp`LX$izc6V1L%{d-R^MK1Dc{B*FPqI!t8sTcKarvyN%Gh81OT@+4f!>o2>u zEI+dN=*t;^n>Lv~kQ^y9MrAe%a#9w2efyArx;sJKY)@Iv2jV2YyzqU!~7gf@z9rMg6&viCv-i3fhPoYL@T?R9_VZ zmKo#u(=rjL0QPqkui7=$w!t;z__FHng50|@i6tklw2$hf5 zR2R*hs-3vOqsktVttv)=aZQl|K&M9WU%qYKtxtTX)%o~-e#+X=uRDR$bxCDqJo@wF zjpG-i-a7o_I|Jm_Xmhf9FH%EP2ka19*sU%|S*Wjdf=$-V{6uzn+@HA|xy1sK> zpY*9pwOKC+f5w0AlsTcwnhga|xZ|&I#}CN;Jx6g1|E6=#IcE$VaL1v;WJ(otMVO3^ z*v^<*Dv)>r0L%4PjbX!%(%810Xr=M|Xsh2KsGfI-9V)XvNcXx15HghBRpo4yl^VGQblt;(c&DImH6ExTLam>Ma%R2u;R zXWPDiC_1jzA>JXbrH90W2)>}>TyHw$_<(UWf7!;LF;?!ZX`chE#VcC;NH5ILDFDE&@lAE@VxasgwOn1Ksm7% z8i~g@H7~2&(ALES>K1T$K$HW;=2)AukKt5@fj_=#sGq3bm_|hRXf5(Xx+yqfMb+F)*-qDt zyyLEP+OBl)mY(0&^)XYCLqk3vl|!@AbOx2?E{83TJ%U}08xM;*$dgSm!gNU(WNu`yEapQb?NSgEP zR!>C~YPH!yE+?O|Yq3TBi|dhfTAaiu)9;5_*i&>y?a>Dbn>QSMY474(GRcxhf^rts zR0f^?{b?;(8MydmFWnnJ0gWGM$O$K51Fgt2o-Ci8DJ4E2X{JO)$wd%&`hbC-)vC%k z+*XQiTT+slSAg^#>kTo>m=AWm%`HT@RaL}oN)1=|Ib8izmT3?s8L+tYQp-~v#Y<;@STeaitY0$Q zFR~bNYQsBRMBuMs>zGOS^>ediCsViEp$h?uYcndvoo7DA&l-ukT6H=Zs|asT10i4y zd_CN22inkX^9Ekn>G~d>*Lf+c6*62=1>a^}k0<_mmKA;Y!R_1AECslRYk4BFzDKHl zuo6<}ucoV`4?a@1=^*|6q?=n+YAPq9w@o9c;GFx+xm0fg+xyFLT}?<$?4(F2=iXQ_PG6EAMwqZ@8D*A6(&ukf`X-^|l; z-65>E-h!8!lVL8Gs39-nWGoB{k z6Xls?_uGcsMWz3Kd3J@@8%6su=jeeiZTL}nHe|J;|8+3G=4&w1=nUJ+0nTdTcqn6P z#zY~c%}KTZCA;PFaRv;Sg<`iRPN09sYpp{8oL>Y|Y&kRGrO_AwJree4zU2=(ut-Z}(DLrL$UxYyH*O#l6AnPOam1(oa)is&zNa|J*QKc@bfe<;}i@dc*l@ ztGV6BR6$H7rkvu{ubR}iCB^Em-2JTw zunNLV5(CMKpW@^L!a968udrz0-{;z!A-1M#)1qG9#dFUM^)8U59-6q}U4(+ZKkaN1 zXjsbd_{+&4quv=WTI?MA%Z-2|QwEzQa{N=-xSw{aDQHZGKdA z29x%)iecr0Vcq;J^Fww$FRY5LY)}<%0XqTT=CQE>+`AuqiGZBTl_J=TRnX1R-aUExxq)SS#^@pK`&n}N? z5mG)!urdu?%06a3-m-?SO3pZT5jP>1W!GX8wlCZzOCr3v(+SLQc)$@dW#4$GV3M&N z>Z)^|CeL8p%Hb96e_b3)NKkq01e86!jT3BGH&>m3KE!m-YJWAZLH_kA*y@scFWZ)9 z`1p6;nkwrJ<09*rsjlV>K3`s}!L_0XZ>l|cYvE(aMh++D3XWPvkK#x{20bOuY?Kf5 z=UT5i*bfI7j0YC}oKE2WyS=*L`|HTMcZWX1K_sBQYvTjJ7g)zwL6h1IeM04T5q4Hs zXhG6+eq+O6W3@KT{ZIc}DB7!-q^XAjg+bwqiPt@}DRlOOur5loCm=$%?h zulry@n}Gh?E-qD5yRCFS$dbWIj}pKrRuzX>=f_{)&Q&9k|K(Tm%)1-YY8OPv-uTqh z-W}T(hD$}*SGP^{&2lxHQ|eCQ3JF1s&4H4KE#x{8`QX`J3jLKO{hr~ROxY`lH%xdS zxLx`4#}4#919t=eo~w9`@m_0G=dV#t4n3p#xP4E<3S=)2udZ~@tRZ>mlFo@&IL!v3GwX*i1*P4Z*qiEHf?!MaazE`A z7P*V6Tt=%*Oxt_Kc=7sy&2KOQq50!x*szn;NScjJv8Ouk;Ug;eIOt>r+5hRnOIMJ|_W zE<%aZUz_0;EPEOW&9WeDIv&A$PSv@R*pj;2`BBndq}v_lOFc4=hC*A;Y=4n(06{Sr z*Kyl6eA(3GJ02!wPGm%p0<8eU@*q1;elN|C+wXH&lJJn7SGFM@XR3j!3qt zoS&8*enVmn(R0u}{7Cm6eKU@L?QB9|syNt#{F61hT7Tb_k8**iOAfG!a>b-+^GOG^ zO4~$uoEBaQ1y}YYf4|T{ow4rfyQrzB%WAuTIy*?ssvbGS8T}R9CVQEcni>clV}Cr1 zTR-=ZxXjR6nHlzl##@Z}c@nPkSonO2AgwgE3@^ofn4IkX2b)I+X@*#T96gybfH4>= zb01kefZ&|d{B$k2)sdYKhpz~=)#VSQPBlr$r|AD+je9phxNA|Jo6l?TeBVjn**553 zA^hN7JK%JuL6**g3>-DxhWuBrne^sD*R?klx$37XNB0+;n+X*)YPLjShFagPE|2jG zZG$QGjHdkMJ*aK{_ba(xi~T8stFOHmKLo}ylSkV&Zpph$*Uo-==nbiw2jS0Vl$)yT zOS9{7PkgP^7{U{d?-RH)46JEpJbXJbj&z(2$zGO>6Es z2vZdFak#2`jxy#X{;EpQK`PLaK`&dGor6A*tcq(NxlsP0vyb!_N(AfI(m$UwC3!DC z7Cm(hYFUpws*W2-ztiLM+qQDPfmn(h_8ev@ZQE0RH!Crkrn9sb1K`X~S~kh2&ELnW z%JsHo_nK)01=@h^WVgcYaZbCoi~QI0otW^5!(fAUYlme_oH~eiIo=+`&wen} zKZgxD_`Ihkdh=Zk(A6u^XCUl8>yS`rWgb1xr{!u4<`zN=f$?z~%fRGrt{2w~ldlM8SC5#T-WeAa+|vH|_nXukt` z?AGgBU#!pBKL zQc}8Yu4JAcwrm%_6(fs){=0?lFY=vUt02`^c?dDjIeOcosMysHnYHD-S08GvsA%tl zPhVw<-L{)l(Oi)IUO}W+Ut_3&)89;%y4!aaPOwQg>x zs_j)rTKx81Wuvbg`1gZ0_Yc5ZAGW@_XYE3Q_}D6M3c;Py8^iH9g^=HpL0IV*hOGEO zoO^hhDwWssSf)Rwq>iz4tV<8zbcDBo6%Zg^&wW4F8x2#_o{>L*UhGde1lGM&;$`iw z)V@z%`dR7GR(G~Kqgb@=^U5thiF+0Jj*+gq%p$*zgdr3T$UVPBfUs}yC3Hw;hO zuRbzraP`*ipIO`lK(T=Z>%!jj)Q{|%`&Zt8rQzPza|aqgpo`?|StvV|JX>^{LZBA0 zqRc7C2IkgPFY=`R@xsn)Rvs3*w~9fN_pU~bps1W&~3WgJHl_l5(3+eKm4j*@Y$X=t8s_`$O3x@K1%-$CH0fj`_CYO2m}>T-ZfVV+k5Xg6`#|c zKItT~+pKC(UDdB6`pI}}dYO8j5cga~LRWQWzHE?oNQh_ve(5Wc_(jWn;f(?6oLA%g z)of)MJ=7u#p@wF)thz2lolPcbGLpV@4?nlEN~lCx^_@&#>myMDj_;WG`jlD2F}IUZ z9E+7fo<3%E;dRFuawQr`uD-&x2@4{2H32t0M(Yh0~WoWM8WHouHvu;B5#hHnasQFAeuT_5Gw zOF|Q@O%WYJZi_!q^~FUZohrVwJ{?Z3AB7fE`tl4x1|s)?y)A0wyH88teM=XYno^gf z9QikX2!4z27~Ti@v07DA)o95D1wAp)XTpo?sdcY2%*VvVNk5Zt_}J*quX zMP2V=(5v1oaJdK|D6dA*319u`2g#7LlA|m=Wlh|8&u_!WQj0mcj0x+hl=`5s!|V2& z+edlPn90|h16rX8`TNN*Rn+`XePZ7$8I^!k68|)*u1ni}jOx4i7hk>ff)o-H1(;Ep zB>|`MKllvIzL`0B`{PMgFy~a(vJ)@Q_hmx@#Co){C%M48_~doQ4Tk+qHMB zP2@PYd3`Z9uF>A^z4yJ{;vAzor8TOyRb|yd4$^-pd0*-?Zryl0*L}wdx4^$RMYP(% zinn7Or{?O1wBe<%A8Y1PKcXw~{4CEsd;2*kzYuTc!Q0tobfSbm$K(`vqCp~PHb8I?M)+R&%g6@?vs$Yh|~N)#P%bYn779^ei6bK zP!yJN$1_N1-^9$#irz6B`c=(Ba`uo#9D=#|J37IFHz1Shl1{#dvwz(C_xA<^v4cX| zU{1j?M(fdUbh$SETh2+C@r2MP`<>>soCM{vGvG9)yvDAW1Y3gQ7}c>i!t^|c6LP7^S~pWAJ1_hCW_S&hf3maA zRdZS(p;3P>B-KLH)RZ?sz@b*1!nvEabVhn@U*`9YZnZ~n63n~Hw7CYp67XSrHvH+C zRPFx!B^!8@uttopWY-NRoYmS{z27qS!zCvC+*|*I?UL=Wapy-$fi4XvgLL`zPa8k$ zYw(~y>_qoJ;-|LPtePJ$4gqOLbzs9aU*|4;{B!0sha{I4Jv{Bcr1 zbA6dn0>eFpym?)}X--XKR6x{O+u8v6T~bpx?QvwevN> zmfZVGibgWQi~MG<_>;8qgr1$v~4aR({AoBzV8+46l_{8XhKtz@PhZdRPWOX7e7c&^W> z>FZ5@m>qFrZs;fFL;%(?IS>20G$1o=#PVm01Kyfi8|eLJO$O~`2N!kO z()%@#UGLBNR9B>;g7XOp{M1D8oO={}>1X`++9`#ct;O!uoj)%;%4ND{ZNI@*c80E< z7`bUEJaDNa-+8#b1DgZ_arwN}L$fwW1 zmE7JEZ>Bf#-F!zRk!wrtL(FX+wPXDtPq?EezroDwi+fkSR4QB6M|;WF^AVGukTUG$ zge~hRgR%DSD8zyRGP9+w? zkG-pb@sHLg^Jl(&)!O&#*#}uT_)q`k3k=E)?Mux`E{Q5Zz2gfCAViQ9<(at2?M1T9 zb%`dC{+ja?$9b9NHfZzPkzA!$Je!oQkLH4#FTRJ)NV{v3O(DJ$-=}#}WM7*8)InQJ zdnJ1IPsNSbeKld`diVm}t?nx|B2Qq#+0AbzPa1thfe`*bGDv(-s~$Z%t=V)%CTJ(` zO8OECr`dxg?>447z8ue7xt(D(VyzcZcF_K&Y`|Bwom+i-)PrQ>?`k{*J%)PgrjK|G zC{&-Yi)y~7ZNVaxS$MnH_*OdM_v_>=;(&)KeS4-dfNBKhhYL?fQ)J#T&P-+c!D>05 zT^`A$dCYO%cr$)k7Tat>&7ia7NQ#1F8XWBf&h}`=- z&yDQ+b9@13Pp7eSIdc*Nvu>dFQcgKvad-vg|?l1&1d~u5%|DE7c=V+vLuT9 zQbK;8!V%a$-I@EF^9HoJC+&MOR372UQ?#ICV9_bPujR%CFXR0k55Hk-n?|H4ni9nu zU&3EJeJMD0Hu{X_^oFTiv0TFD4_&%xN~mwmn4Qh~@tK;h&@tBWo%Gm7;~joG4l`Lh z-@-4CJIZQPnNosIzRsuUXQf;tPSx1pSS_Ckm{8(^X3#Q3-nMPV__h;$IaPO0%!hST z3`o~oV{*-R-TW_g<`IYOiIobWPxz^RnpdJ(`Mizl!Buv52eY26hQvB$_6#4GcM=$R zKHP3|Li9*eF^aTkNjA6OKA5uJP<`W)g93fz5F&NH@-Ju>shs&*Wa3ZSnmV>9f2hFs zRqWGgN|kaxzl~RgccYkEmVEoi4=qQ}om&{t4~7t;M2%AEE%?gOlXn!u8tGk?lCsB? z%--#Inc^-d*Z*{>`)Qdsi&2>Q`AyJptIO?LUArG`*$&q6xc-&gmXP6W;E>(8J6p|@ zqr2OM?_FKr_U{q(_{yQRKeD;O%jN?c{kb~a8zdPk8!h#cRErB@A-_@l0OGwd#i#bXT$+ZcbUTC#I(?!;J90xg&8IQ6sN5QftAbV zH8%NuqOLO$OBpJ--(?8V#`wqBnLE6ef-fJVi6Kmc)+Ne}Hs7c?Q0Fy{`Z)Uhb2g}S z$XKJV&zdV==yyJv_{`&*Td9H1k&iA9g_3;zO*``MByT=U^v4)Y6ye#XzXH}fSoWKm ze~YlOCd;-4kff@)hVg3pxB{w8)-a0rxFoMAw_+|Ut?wT1V@YdOd)j<2<~Xy^x@+R| z4ovuy1jnG^^L@Hy3~+36n>F@%L7j^n2MKv;FYspdDBIV<syz*A_h{AVKVt_T-n>(< zbqOd~Y|roia!~g9U4W?tvKMVB28PVAfAWA3Y~MC+)6C4u(%h9PPmd;(5rb6CJb zB!Hse-&R?XSImWF)|C=k>RS1iwUg!^;sf!zhUE#h!J4>&Vy6VdiGvv?wf@BSLrzhi zJuV)ka2cZHVdk=C`yww4wi>1C;kO<8`g#twQsHnf^Y?M$PC87?J@x?qq7S-DKrf)P zAG}uFF-PrAkg&XbIOze)KP*zrZ)rlv|5Jq^buRoGdEG91@x=wx`7=;~l{!f6s^r&> z&w6(aj_>#UqCT0>lq)WI1zFNpKlCC3U9>)771eCo^wng#T+=9Z^4n+vtLz`0vE0ic zTSG>5g&}Qq*<}wtC+JMDo>40~L1H+RiAphb`^ZEZ+PaF8?Eb>W;AJNb+(fL@#?&e@ z0;57m>MK(hT)1;xwe%ZHDSrH~9>cB*`XF|!J z!&DP?H|qv&zP|n1hjH-uzV-7c`Pan=rJJ^upPWxd3x>U}1kS-G3~8TaqUHJD2P+@y zSa+p*NPQLUsEq!r%~0#t{bcu;lT`bt_S{oZiz%Cb9Or#B`-JBsT(~N0$=t>x=0(kK7<66k!X!6Gf&SHU?nPCoT>F``~le6CyL@9uxN{=v5b7vo57K)-I=3ei88 zm(>YSuiPmX=sUj?ps9Pmvx;mX<(FKcvb*IsHxqn0Ws3eoM(8bDem?RazLQs{(bDN@ zp@-LxJ!B>AzbtnUF=x3+5L~|V@k@ws!}_@|B@^v^uHr(0*nRFtYD6AE?LE&9+Wk^V z`7Dtl8lxxi3<==c{utLE%O16`J(s}0(6E`{)N%M#Q>)%Yr*y=;SK6r8Nnl7N^*{L! z;3US@KNpd#(OfXTJj}dz790eexg@B|@~;2e{z64`d=j&e3)cQ4u_h=G_cD0z=c?D; zDi;CWtOO|1cnKs3C~=Z~*!{*dTeleHcFmGum;U6fTvLv*{+cE}4+HWq#adZeZq{P= z{yM#oZE#HhIk74g_u^+vX}xI}m4|*q9pD*Vdp7->dH~&p21s_{mkTtEi|8$;mr!=B ztpcxb9!45u@9oJHAy_!qj!%ES1(bwVVbQQtRD{WZMqopznD!7_e}ebw`J0Hf*? zUa31{Vxq#jvUgOr3mhH4FJ{HKdrAg77?Q-=@!!(kSs%oH=$o)uy47f@t|C=>8rQa_ zipCxL*j>_CmL(n>x}s~-c23fU7h}9yooy2^DY{wXmz^t4>3TqxgDZfR_8=~y;?h)j zD}Jtc&SqsJYU63$Wzsg-)V*XI<-x9&A_Yef3Mf<}BET*^bz=F4YAeCG=nu70qW92N!Eas(ae|GAT*y9#K*o=-;A@O~q51FKMTlxD&emVAQU#d<^ z9m(5W-%$|S^oyJ_SqgXh-VyQLg_i3ED2N(h95ZGw)P0?;8(oJ^*?#nt>s(Sv<^2e4 zvcw&tIJ~>6kYJ$qr)=Ziw}#4c3!>>h)UYe$=W9h)gwfm$zNg=`i(@z>xHC(_k^Rtp z=M&NjI#v7#CirAi`jw%~5-BJroynVatc!$Z-G-i~e8_(@Eu6x4c%BwPo!Sl|)cRurH6_!=#~Uv7WUDkSj8FKGLnn7J_bwtU{B zmx5QTcEEkXgpu}8J!ZY>&1#d^ty_uT;B$|mieo*kUAN{w{u*DlLa-ua0K6CVTS3Mj zjbx_X0mO@*^>M+KB_+!ktBOEdg@^ACC`f7e);tR7kogY z18~XlF>#OeSmRy#r|ko{tJ7&PBM6pY6JQ zZSQp~kJ@TQ4k{CO2d?DW;#M3vq)_x#Pi~=CBxI))vWg$lG+UC;xKBp9U^MP|EJrrU z^uspq>KamW4YZ43!2*?a=Ln`kFrQ^*q1)#V9QTOl2^>7Ty6gd-AjawafIiClsp!6r zxh=H&L0F928+pAKps}SgKZqA@5*?uZ<11x8&W#+ zEMEICC(xZ!Dn4N}G}0EZI%y7@{gv11UuQZ6uVFOB!eNzmx7 zn3Y|b1Qq$O>~D(Gi#}&uSr&JkZ*{oibIadbDYAF)@)_7@&9yPb9YHR4Z2{_mMCeE5mxQpB%a(r!){N> zMyzS7%?J&P@{|U6KWh1RSL3`s=931cR19k4{4hb=CpuDyae?D6AAI7gZwMn3y?1lx z5>)YF0>tkL?ZijE+3yETIYFWmj?DeJq`auDBNe6P7~O?Us-3?V5gyOFUztz3pAQELfGqZMKBiWjc(DzX4S$!VWh@S^X z_9p^^SpTWD8K%en@yfdG zxOhnpzr0J2YX2{zq(2?`mqCv$rYHFOeUhki?p%aFa(sfiq_BCr?G4Hysbt2ta@HAl z2{u(F4XrFm*Y@R>8SL6uEIPZlq_=uQ)5jD;+K&0-dq$HZCCQZ@KYX~3Yp72=tLWvt z==8nczP5P>#E;FMR7BHWwgNaexApTS(uPwo4?X8(z};Bs;X0p1lewJyxOn~wRt?8Y;2gJQjDz>F+vj8GB z!B@cAqDLJAHI38Enlu$X1A3YGl`Bu@{qL({OV6Y;RMRgju&N*3zBC85V;2lmzKm2a zc}dx`fZvUkm)&?80`Jz0lcQk4>A03S@rix|aQR&wat)6@Ykw}W*p9ZNiOfh1eO&Zp zwSFnGG{EvLT7O0he&{I})3Ua2CYDku!JmBL@ICc&@BPOr?b827{R`tO>5RF=Z+{F! zw0(p7RZj->c8_q?P4<)wad$l@%M0CbB0+ebVSBiT(7HOcU|x5)px`82FhY2918Jf6VK;2+%D(Cvf)Kd@zcuWz_th zsXLKpadl-tn`)7}OwQg>o)&~l)-|bu%e8o}OS;z=Dma`^;7^4MbJ~av_L}+l_JY+JH83 z#jO%je3{NKNR7RQFI+%q;y#)|h|Va?KO?P*;|zgY>R`X>n~e6NQJGY2RpeeVw=Y+AW3U<0TD{%{UYNl8uoK2}_bydICM>{vE_{xk8p|rylJt-( z@KgNAMUVegbdOP594w3Fsre!_!Ca^!c~0~AKLG>$b#$c*tmQU3YWFFBIRk!-<$%q{ z#01GXw&mC{l#8Sj#N}IJ#oRuWYS|-ZEEENQ@EncfJCg&W##TgDFIKMux3h_DA30dy zx_M@P=L$5n;k7n{9$|o3<$%OyG8Fd+Leq`0F7a2xOuxQyYPtqmRMS&e0ZJi`iXN5y z(2;uRPBMPxzi35KhVAGp@u6IS$!IlnRS7yZrj44*iE99H0w2|05@bYw?W++9zTz#> z8z=VL^pJgJ-(sng-Sh{QfJ=efZcd-bEpB;Er!BSe7H%BN%Ht zr)sPUuV&jOd;9>oc5XhBGW=(rIZi9&J%}q*UhA--CgL(}+!oTrLWM&QgoeFsP+?wV zKb%(QaA0^35~$YjU*KN2ASDL-#d=ktd($*S{mo~b&0{qg7@_WYza+tarM>k_?P%H7 zps?Kh_c(<8>P)0)jkdX8DSVs`KbCLmyXsh$`*GQHSp|7Xpz}KEujM%+Df{m388I(n zU44m+nyim|leO$zjLlllA%`hhIKw~MblhdiYM~Dca#F==SM?9ED7uxw7(4h_`=Gbl zrgRPd)5?Jq)XPw17&?KIu@AR*vCF;q_<_|E0F9oYsM>;ph))PDwvmdH z@E!M{uC$kCXUe^T&|(H!RB?xz7n_;`IhJwYNU;fXe^;AzS?jh!E_Uz@u(irRK4f@9 z3d6S5O? zQ*SY8JcinT9mo!PV+&HLfVTtR65dLe4n6w}xJxV@Ddw0Xq|53-H&iVvBWoew>K<_M zhi+g)Pj1wZ8}(nYY1qXdMvP7uQlwZ=#sQL^WA<-iElGJ!+)jPxmz2)>3)|J7a9O+P`ExyLZMdN4 z0NB*$=4M5`)jl&4BX=)ryaUH`v1#zVwhPIPbk9z$msZqPRX}vsP_YROR(zHOa_J=1 z)@|1jI&qo&UPjk)LHUUpC@MkkFL5C=sU+7VHLHMHPabTQU48b*g_9X8-gdX3oP2gH zqWrcnZ1eK+(%If^2a4BT34b{f8S5XdfIuC1U8J|ETi&?e?g!5&rfr^eDphH4_wdZk zz~qk5qAS+LmrQKckACjx4sR9rmkI+f8qE?z+Gh6O#pnqj2YmWBphE_D{&t|}u`SQb z(xflqoNe=VlE~;6Pii8-E>Mf*0qBq9t|ooQC_XSIj01%S}&X zmfi9(CK)z*BQ)5WuV|933)z9jt98jLDqXOKbWAH7mr;d0DlRPAj!S9+j~s_1`i8n&xV5&;S)Y_Ho?Udr{f(c7>xvHw$W z+jMe#!QqbC_X_d7x~-*Kw_xc;J4A==@Id4K<~V@X1BHVvw2Q1+rGye>@_IJ!{fPv6 zqrv&7$a8^ZA9JBjBd7Ol9V0e}LB?oZ#Ub2d7;S(z{&lmEA~B;tXd@Uh-Ikr^h#ag{ z%YUkDIQuK7=6}E|#y#;hOyPolW6Z zOg$^tJ-iwhR(mx*&Lh}-Pqj+S6g#@ASc4KwIE6!h7{O9TyFyDiD*(o6u1nK3Y!;*f zWpjM{3i&(Lh*Zg}qJkyHDjF^-jEqlPkdQMnIN$a11i?h7)@;#uQNZ+LOH0u5BIWRv z<3<&^2Ei6>3eBiltj5|Zv=f^tR$BN58yOaSqSv!4fD!yT0DWNVaNu|=!1=!gl^dlF z<_TANZ<<|jjCYCGD5opI?{2@=SWKR=cwzfcGLo8cTTSk;EqCkVM2=Z_Ni5h=!=Ana z6qlz<18Z$1H$M3$*AD_D_XMoSqr`})vsdglcEp`yE^@L)o97K<+k~@&U>U4y_nZU> zH0!Hob5$2n(xeu^PT}nVOPav1oJSjbVY?Nhyf%JO%dE|C$~&jWV2x3=C{g44avGCZ z$b5nxA2+LYiJ5yRk5^G>`KY&o3t7#q`=IM#Ze~CM__rCNZC6i8A$DS2&HzIb=5t{F znumAa)K2$iri+U+iVHPvXsWC|M4UKKS^lj&PeRH^e6`>|p2W4F^>n!<>&(BdyuH_j zqf}i-&9=-wp#DJLJ>KDY=Xi6UM?_Crl!SCbFfB(+^mUU%m+Fq~`;Jt9$)h7be|`N2 zTmH>-v8RKF2Na|a zDI9{dG&);*T>Uenn(%5H`yqYc9V#!ug6^IBUN)p{16NEF9Mbex}qg z;jwQ^-eXSljsixm(h3H03f%240&&4d?&I+p!-)eu)eE@H8mR(0E%x^V`{`Wa58+Y zb=2JL2u)#nc9C_{FJ-3Jk4>*SMnelUr|AUez&NyNKW;RAyH2?-hmeTToo=~}97(z6 z-)~=YI&{r7ljM6ES)7PP0qj7xKGV&lzZ^z2$G7t@cd#ZKx_PAUJzpywrkk28l4vdWbO$+4*E@Hd zC!9QNf;o>41J~9?)(>%RV0RC0*gV*j9w*Br23{N|3DwVe*1cR>_=0geC7oc?nU!O9 zOUd<9kkOsd-ldAfsE-|a>7s8KPanOL=RD*-nC&A_Gl-XDbP=2i#odezR&VB62@fZR zDv3IQ2^qa$VWw}a;?3stRKnGsippSp+(+daQ^ejxTixGkIoC5&Eap!?n?xN@IZl^X zLRG8HExlMj`;FFHQE2P_=@HZ}DCt4luYOa$Dtlp!;B6K_y8A~u5w3oYg8d(4+y2oXF?xJUlI8^>pt;0Lm&c*>* zWE(|W5Aa#$2d3eiS|wHqZ<44QJj&!#QA`&eqzDEQfI3ZMD45Ec&E!Z>#JaiZ&%xY zrh6=!JN{Cn&vaN)`&iv~TvTU(4;#>bECx=_-MZB+eQ!)~3*f*&EIkaHFL}i?9+H&$k zOKpa0%<|G<0O?Sw#y<(Q%Nr1nUTgNy7mXfP%)}dyaOejE;U7aCq>G-4QH1)e<;=`< zzqYsCuhfDmJJB0z0|Aw}yv*@w;IhqUdMeU69c2L@LPd|}5T%8L`P<@A{Fwk+2sbb`hcH*e2)JZ0kXxTmU8S7kYqgQhA%&--;s&ijTF z-xL7;Js~RX5V3+}b_|w9LGn8mzc%r(C&EbMo&YOoR7LX$eQD&HQWg zj{?&0Rh9$bEe^i#W$_1=QWGd@b&We5C%pk-Wz>kMVvq*If7fO_}~_o(IfWz%7<6fkF!Erx)0l zgU(cqXILt^l=VdECy3##gqCYc2DD2wTo(s&qyF60oc~x%lwKRu(a!5Q7U~{lDLroi zZvPo~S{FH{i2o<<5WnqT@fwg6nqzF>cX`>t(0w^!5_$Cm@JI3Cya?40&!ckczgjUG zvV8XeU@g6C5iay=@u~uyesj;fqa;Ut{xF2Ar@lD%D%5}kMWuvWb|a}t}Hl49?zVj z&_6Z0nAyB^QxZQ)y1o@5#>?A1aS)@&C^B@&^dR-q3+1dkOZ?sQ(B+)jX`zJ$*wnh4 z%3FyKMoWp{Sq<-ok0q~5#fTU0O_k1_Z)VtjgNll}Ne0#RdS^E zIgn&2uP~#U6d#;!E}@;UX8eI*i^eNg;65t@M+n^h?IUtaVy|VddIdem-n?U`ix^i4 z8V`-;nL{KFAQLX`&B`Z?U2{@v8iLcJa1YZYo?~m?<%qMV*L-UQ z^OnlJ`z6TkY6c^H&vpB$;~-yYrNyhql#=h)srhu|eeIux#gPAyHEp(m1&atyQZag@ zcB6moWDrM3NbPUhOOcaY-Qe`Jyg&~Fz;3y7`~WaXVj5tqavho>eSrGu<0TOCs=_$_ z=2xC|Jsr|s09}{&ZF9XC@;91e2m)VpV> zC~dfgW3ZIMW|j`_aAf9P=9ccjT7TcszNAkbh+A+jwHbrWt@y5%Jf|D;RSf6HKG^8; ztlZVF(|00cDrJQ{C`JN;_MT7Uh>kzo-0xC(Uzw9U*25vWva>w>^q!gp+LM##mOg6f zyaq1tBT2xCUrD#?laFmm6Ah*Lul^=osksQn*=+0i|42xy>4lA%;CI{UjaB=){s+dPl6p_J#R|Jthau7ATVf5SWlM_k9UAgnmI?RDV_;SON4QXZvYC}+w5W>I+Yn|J!#5V{5hGY8+V$uR?lHC^Msb08g=@5=_YxBTi zvM3thrT#RiLxXUtn;&VO#frqDO(y83c z-dyy7D}ZY{AVBI4^Xkd>kqhnNnq%ew@IR@?9Xq`neZwA*4+aP%tDUXekcUBPX3ngK zBX2~ydA(Blh>y$PKu^l50JjbNb|SkR1x$S?yI*e8UaYJY~<<-d3pEu zpQ?XN{QGA}NkL#ByKoO-eyaU4E&;a(``|J@oteHjPt;hQC>g`w0UYj$Fb*hA8~`Fu z0tdbAR?%@xbGely{MRaLx{milLlCu$jDqqxHE#uxU^j7$s`q!(M>(4xa?(p245y6i z1Ty)=OyhwM9SWV!asq~ur@XHJQRLi+_Gj%iKQK4#*l~vUR~;es8vy5N7l0vc+HuNq zIqp#B{>p|kWfJnMtnAT{!u7uG2Q~FA>T8TBvB<*{gBvyn0HkFgaDdc(|`FNw~^0eVfIc__oGx>HEU4O6l zg}k-Nmr7vYP<^8CP6}#?RhsU<@wDF7=Hd?GyH1BA)L>%Ee5Cluj0;uqsPS~)TBNSf zmDw~u6j^0B zM_uxVlYVU}+Q~Cjl68?sHgd4YOSo%`j6h8Ayp;>ugY-_wm;UK1)&k z6kOFiR9&^S{DCMl&^{buVOaAyD9=R}8~T1HYu$8HLbGI-6r4$Tu)ZvaXbG(U0&BgQ zz;w+RyXkd-B28|PoT5#Xz{6S;mw)?mY(*1dT9#oZHsbW4bHcij?C z0LNgyl)*%M8ZsZD#VaiFpbi*rN>~%L@HQg`MpG^7-DjUhzWGde0lN<&nxh5v{`EZ5 zRg>|dtU7Xj)lk--yKg{J;-&RLGRg|t!l%Gde^~GBCJMTI>qk3p6L~wj8YgfuQ{9*R zscin(Zk4i;&w|Os9yHR)_udQ7pec>W_461@g7lsr@=!`}&_dBwRrw1FN0${|J$zDq z*Xao>KS!!ioDj~21}24Ze^t5H^nP?id(f1|JCg8T`Yp5;Ae6AH+OwkmV#9^B|JOkA z0h%SZDVn+(A=(xJu`XZak1dfEKm&EiG%kRY=^{Z1_Pu%6?%D;9AR5)HFjlk4SXU%DBd zSQDl6juwEnmVYb(k*%WuyB3a&CmG-1uFM;1H?c!6XgBdc%tP6SGj4mu9q*d*I#Rr_ z>4ZPcUrt?2-(+}IU{1jyT?3$JMg!#Xy888Zb(}lEj-IeU(cc}uMI-9`IbHuWkynbj zcwbm9Hi1OhtzzRq!-2I7)0_2mxs>29EOt2B`9fWn7>hYU>~O@99OJrT0{gPOljX z@X|nQx2IYsd^tTknj(lqcX}9gM&ILpfJn$Ky)A=;>r=mEL$`APf7<5$vTM5WH3qL) z8@WN)@*n}I`W@xg4VSH>RdmDc{IZKE%mT_U#g^T-XUoTSd|O1nu$QL>zvG`I5<}D% zRx%qJ3@0WL7@gWBOjY#nq3WOd4R@>SuG_A#&Um3aMSo94=%?~&HAh|>@5*d{co_RC z^-P0Sk%x&r-!RGPT(YkiH0Qg|rj9h}8T%wZ^F=-V^5auUu|p-*3u1(_+u{U0tzd4K z)bR!+s~p2{g3ZlY9_!e!w~>|Mwt;03zMK?vPf#&?T_KRCTZvDKF&6qdRh+1kzwJh8 zFB8J`p~*x;zk+lub;x%bWW@s}2Z}V5?kMX~oOIfYd~y(<%L4VlQpJ+#w4qc?{mJW# z=(jsK23!bK&pefX5F+k=^%UP%Vp;9Pij7TQmFuiHBdRJZ91h_g48%ltp?53A>jO_f zf@tZi_4Fvqf~G|s9v7~F-}?aIx&jbyyL6TZ_){*WR8{cvAgR~O-D9RC$ld^?mDZ6< z;4T7jOYG&~Yq_d5erLPcCkom9RI0wh_DgQY{DUuXiqhi}tO|s`=d%915-O0Mz+W)N zm$gz7_=7l*eeDgG!4%Im{jcDFVH9VE;*XzuZ1|J<{M<*6-B<#gLe*h9Uzm0entutI?VAaoYvlE#TG=?p{$JvR;O1}B z!W+*cUc!8C$UUnyo050vzLy!Llh$^ZVf;LDYI^&dK{_6k2~&F-;BVJQp%+cci^Hmf z)ZiLx7PBYZG!kcA5KJ2bJN5lev!sZ?&>3S|C{JOf3+6MU#FN_Sx^S+or-S^;cL`#M zBDR6~ORr8tAm8~726=~w%YVU0{iM|V+jhUvtxB+j-T2YMDHk&D{gyQk7DcHl)gL*(y4DP-(>6i^R2%ns>RAoCaYO?+}%8x)lT_4SvyGqQMc<976_D>aNYyme#{QXbu~Rc4DfE97S-A;F+Yp7# zzsa3g$O?6PxW``Je%64_VdFUax7H(8Z>%rBo|f-ltV>Bc=+a+M#5~SU>}jQ*u^rci z>|I~M3n)ym?)ALOpM2y~>@zS7xY} zV_vL-CX@fLB(YV~$EoARQ5z{{9k)knj$@>VBGI>N-GbD`0noJy9O0Ddt@NwZEQrPbG}f#Pp=F?}H~ z2^YAf|1u=*ttT%)#91mYL@L(uPrSVUk}RX(caA#rv8pi*+#boy>XU9M+YM_TL5ou6sV7B3?6l{8(iz#hS~TEag<`zy!+OxJG=7GkWWRrb!`2b9 ztVH=w0{3);QtNS{7GUv@7tnLX!{o~hlhf#5Rivlaa%CKG*`L~*RdBy0;OXGfjJEgW zqw2&b%{@Te!bDZWcJNLm0N1KREUxh06ybBS&b{OW{a$S7ujbWx85=e}*GzXmI|JWKLLe(0;+#~b>qQB4=-NOUb~#@s z#OK2ew+ItIMy87ww0u=Ua zV*PMC3!extDQxa#E)ocUrV^K|d<4i?QF5XEwmfF~h#JX_CmFW8$q>DJKmHJL;nQQ; zxC9s1rG;x{buYZ<3U6{G1A@0ih>}>R-QTJqGGf(S%aEo*MP;^T6l&;o!n|-@Bj$8? zVqHpcu_ax9GCj?BIFYn6ZnbW^4GRs_`$E>@SDySwaiJy2s#YHe`@U^3wu58}iCcPb z#^*QJJ>>#W&N#Hs>Id>sGH(5zCTWQ@DO2BHR$aHJMl8N6FenQh&$&|@vh^~kIH<^r zLJbx5QkE^s`gzkH>88?r@8K!!$abj$BiF~4^u>mhghON7?b>8ij}xG()=sh~`i1~z zVR>Bs@)R9c`_z-nHde3=@of!9X`A7Pjn__j*&qC(0GaA8Zo7nT-EP{eQSwUa3S?1E z#&##B<0?t|q`=_u;+3DGubT5lLS%V8&=B|`PK)o-xoOxLUc5jT`xLp?cQ2TRGn!#q zvx=rwK0iMGiXPM$|J|QJ`PsP1U;lo)NP5DNp*7cVKP$5We$0JSPhRWWsl=(W4uDjw z?Jsc@O3ehIOBLz=1m98}0XQlbkf=6h&Gq4PaEAB7K2G=`*c3d|EbY>3pA&S%lFWtE*ILJYs%I^fvFW; zceH${Y`Q(DgFiM4!d`--wJ=Vg89+=YGnxC2*E-&_EWXpQPBwSQGoLgZh^&#x?#s z^n=s(V=Tu__IcHmXU9#DR{C(P*QsaTLJ$q^Mx?|3xm@6G-!+iW^wsj=hsF;>ikvo6 z{NFwu*tz^#{tDsyhR!nmEn&cz@dm)JsahnD%=NGnxl>@Xu@TP1of#0B_-w^mubJ41 z5CaDb_mAm5o8%00K`tate-n_ph>^QaWkpaorQUk2nrs_praf_)%b&H}<({0uyH@vG z*s=od@}GDWiwe%$Zz=MR?pO7bGkTvp)YS3EcY~LkLl=SjDzD#(ginvYW4{YFzQbsC zu7f%P&vtJErw0h90)hKFmNY}>ytHjtehgO+?D5;BbEI2Ib|E+MPNcM==h^|bRJA?N z9-Kbs4A0l8h+gkSG|c#_f7{3dyUq=cMIR%l7t?m=4-9mvfon7e|8%K13(w%BfJm6a zc3F{uugK^U4$G7Q+W=X+N9xsu2$*&qSmHzF$irFxgryt^IquptlbFDhd=0`5NvP{j ztY1uh^W=F!gx5kuzLfmrQvL3Ow&~REA?5RO4H@sS-ST4}Bo(ph`hHE98+6XICDkEY zZ{{^aD*NB&2BT=v@@`yefjW2|^Mx|J3}gkLygt8t3_G6Iywz2gfON^5z5a zNt#yR(_SX%tqltF+~qoZQJ2{axk_pDlj-@na|^Ko?@>RC4;j*XkM_R?BvdB5SeW$p zxp=GMY+Yx_6BYwa9%*dB7pQX2<`Iw(RP072AF5R5N`3lJ|pWAo)R-+_R{P z*s1!$7Rv$Oe9tKWR*=Ie`0HwXf3(#8ew)H~k1{cg%VJ8giJMQO0EbC9UnHy94Y3MS zl7g;fSLJ4>4v4FRal^tOz=FPFCVZbgPoGPxUm~gOcah-AJOvRAb+>f`uzfC&=K*>V zPHe`b-HvRfh83GVzp2IRoT~8EiK>2n{_UeE5}>E8qO5w>OhS<0UEOUlm_ z-9joqHM`P=Z|Y3TNT)8p{NFbyOc@EMXgwCY4lc2gmU^91cNhm>_@badG{U^A(hb@6 zT`;`+2{O~ce7RTC%KFqJwc&WO+UlVMHW6I+BYfgSF2>SyuY7x& z^RHyCNwEKLdXS`)IJ#(ceAO07+cHRg^%|C#`u17ryDo{J#PGfeU;;2~a#`<4C&yXmLRk(bp)ER4G_n#xi) zhbJcIF@dQBmDu8ije(5(gF3Khr5mb~oq!2Fn?9N|vy=FohA=JqR475@$+pAs*2O$8 zS;}xOqIx67#Z~v*!ZhU&hx|#;Gy*k_IQylg%4qb$4nKY#NsQ z1ho7o8c{_hbKO1UIQKNp)1)PZqW!(2aMp6;(fcRV?USOGVzVcd?r(mcg%N35DDDw@ z8klT76oX%?9tezdsgv>2Dq8JM4khc^So-Aid!}i&-9y4Bh&A?Hc`>5MA}6Y98qW4= zWG;MRS|$^Ij_4rzQ#@1x@G4p_Pf%$0pX*7glX^Pdgl2_0rzEjDzI;ZWHZ?jLZ=>(! zXC>_Rwd2)~*%Tb7Nv9|JuPmbq*YT>;#ldg_YHoL$^HF3(4(3~qsNGi8?Ir{t0J7fg z?GcF{HwYuNXUL5sgU1xLNHU8`9K*f7pcMp>XShS6!m+gT)2#`Y(TfI?BI!Fb!Ieps zKC_FXbHti@5Vg>bMP#3$h%!+J?WJBb9qIqYomw|3H7!5&7qB>yF&m-(l-B|*WIx$< znpf8y2p&HMaE)+k)){Rmt*Lj>$Xh{e_WmkfU|#s8UHS52?wIN|o6kjzC3j#Z;t{7q+zkUWA=q*95r^6SveT@_c!oTUvUzAwKPjzI&LUh0%QH7fI;EsoI8U z8`|I;R~9R|>bP!ba=yP{M;SSs7j;fStB+&(rkJpg^$t39_l5)9QT@_`QZKD9DKBxy z8{YIkchg&{sq@?Rl~r~W2ntbe_$G6Rj<}YpHo?GoU)4ujL`P-MQ`DBLXi?4ClH3)V zX2|ZZr02XjxAejVBuy1NBrTqNRHTj`uk3q^yV5pM{~sEGYUVM+MW8Q6irGnbXJYp9 zx`U5xF4yQqN9!;rEz!QF2lpNTET%IKH9JETH}Z9HfrKsU4tiffunr(8acR-3)@>`L9{um~Sjz;M(=sqKlG_U8 z&hH$a(Fbugqx2A9`TlM3?cSclN_l2Ulr5^O`-GaYdTpZxnPxcAq90ty3_l=M-{jUb z=IUPhohr}$Ut1fvwgskQ5wi&2t*0{!q@ZggD`k=uR_8DLt)+%&@%!1}MnxsT<@Yzg zyAKmG7R-7&-#J1o@gLeUn{;(^3}-Hc5uzKDyAY98yzwo;Vp|BIvJ;YxA2~FmZ!m0{ zWAa4+N~tiu(QV#rTYGR~=|EC_iC=YDa`U{H=Y0QXYWmhA+VCGX9NN*`S5fX|*&Rad z8!6J#{fKhAdegUCkurYL!YjCkt%QvwUt&Jvmz=x~d_mUf!UU0zy|%2i#WospbjXTS zTH>D6QMRO9$EhCB``m*bc1lp;`W)qBg7Jh`hp<*h zHYLqN>K#K!3b%JT4uKz4B+RXun@^^YZ(sAff+(f-J?eYeLry`j(R;~F35e^Q?Yv-I z+c^6TYZpT=8NseJM+8)WU4!hmww1iv26eOgeBGxe@5&4(kn*9Cacd8hRy?eM z9lC0w-ax%u_kEzD_K(N0?-b4_bv>z9>wp-t0crVCSR7-FMJd%0EiO|!2sQWMhyzcQJqaGf!?Z94mgp0F?ByrMgt{JJ?({dk== zx)G|^?(6eYMu+Q_L?U_xC$qAHq zF&iTl)-!Kc#u=Ul``*JR!s(viCWCS2lR^>ZC+{lCmWyCTb(c3R+-$t4YjL}R2jg=_ zp!}iV5(J+m3OkHKJPwn3t+*f(cuv_&FMM|{esBJKDwa{E_qWk0g))x)zEQv9#tk~j z`lFmdW-DEb+?iG4p<|cf&4d(qtQ7=05m@qAw0?1N@>ysuc#U^2^(2IquyO6EjO4!)6&P@?LfuzpP%0@6`#^3&%g2x#^Z} z=f@aNxb>T)ew{k>HS;YT)8XX1H}bc6_YM>eo**X{vvb%9A}>Nm{NAiNz9Cg#B$t7f z8kdWy^LKyyjx8l7ZDB*nXFXRI(h}?Bv3|Pp_~4M`+JTb_5ZKdqJuFF5?PO`vaN8O6 z@#J>a>`m5s=!!ulfe!>8`X552x^tMa^DjS*ah58e=>D}85IE=$g5)iFiQ z6YbC_kQo)jKI<@l9`l!x-)zPUF7^X`ltaAMKv5c_wheH=P?Y3>~qvSmOjoyFgxBhyq zYv?vuepibo7`hPxKbRI7 zz{)1V20r`3PE~Z1m%xE~Ns7cd*1N;lkR&*n1(E8URb|T%mMA!`9d+-2tJKeM-iDqC z8z~l2I7l|Uuwx3FefarWlOf78UK=W06MsCe=lS(3yd^FAy=!lk5OnqZXWHp=qD#I} zvfvQLtAY+?34Cz%(n?&rP3+dovCaOESk^0=OoKlt1w7SwFQ7ja?8bqd=k+A;f@FhI zn=i|&bKJOcCzlJ>uj9UL3#7J>F=g;QHPA-<8mKRdOc%laZF-rn#EcV3&xlpCAdpAYuHZUaHXzICQhSL*Nk(O5})Q(2O z(y?fwb4W052fa~G9#|D%MlXXn#rl(KGMii^My2HB^&>bs5kLTI{W^|TQu9$DKkq;rp&A?t=u=LskAbs#+k@mXv$JUMRP+%NlmlN zG_9Ompt7>wF1RBukeUmbBAOB|ATA(@vMGXWKbptm^ZPy?`~mmHz4zSbInU>Lo{`Sm zxAelg2R)r-OfY^nu@AMlkz1=cFNy@BLu<%q)d>wUXT|JG;hqAktgc0Tx>=yY;rN76 z_wbd4(JgC635&Yy?Q5nI+OTR!uQ@sYMNk-Yc#}=-)}W_-?#6Z7D>OiP4a-w^ADF)T z;?8*WZu1`l&I#%{5ltHJ>jPRJ5o8Jhc5Fcjg}YK z`cKD&tt_IehP5;%fjT$sJ?dxSqE}6R=J%=}>lhv#MyW)4yRehS7+w40dm2@G23`Fs(7<>(6KI;p*chP`*<-kvMO-EIo#bw#$ClA5c?xDSowmKqbw# zG(;``{tEH-Z?Gg{aTemM&bUEyUW~Vqvo{~wqdn##J#@%Fqvk8;o*x(y40uiXW)15V zD_MqjH@%`O4gwUEk4(6z+b568?|20lk*{Jl08%!$uOfF!!GEA+$*~-#?v)hvjW@Qb zh2zWmo>|tLfH1>e#!lTV2tIN4);;0=1c+eFHIePrgk9>!dh?JG5XTZ;8uPJgbL{(h zNLQfEQ|D;J@z}@Yr zjTO8b2Fb3f^3tg@I!_uz%`5<8b;K9Blc=eqcpj=S#BPiVs}%lh?LnUPq_>ueOqPc6 zk&dH7i!jldRN`IbjNlqJYuIQaU%RC(bi@gYrpo8tCRb33rR8O!b<$~#{x5Ow?#31J z9_~Ra_7+M1{xi(#fX_etH!BYaiVk>fdV(%m^&vL;-<5_Ng`i>!dy1qYs=;megmH0&jSU!4D{2UaKT>zSZI4^Bj`SWt?CviwEBhGQf z2xvrZzx%*ZQ2q_uv+@h0fTB0~3yVbIHjSZ!h?MQvg^HF1i^?yTTvG;jKkc`|bD%zb zil-I04TdKQ+mPY{P?G~~j>E4&<~2GXYoxos*$LYaDdO9pc{dSat23zp%cY}d^7-&CY-&jIH|r$xS?>I?`!q=U=>;`c1hxaFCfxx8{S zK_N-!^Kp-89}iU;;zVbGaQRt9&~U2avvWK1}~8|ong z{R}-ZWE*8#pT5WOaaha#aD!y4*hL9Y3q_q<)LV=DcPPTrttYh% z10Jq$({4=nNV3$*R-%Jo53b*9=fd|g$=I#G;1!<(|AUwx4q0@+TDK&9N7hp8{>TxA z?we4Lzlif)*PdTh*u(69FzaS*@FY~Z5UQX_1Ptn0ORRNvqd z5fVn9%YNXXkbDnLKkjV=7SM>KSMs^#*>!;(tFrbMm2X;9*6 zAK>cnr)IbcdT-ODOn-dztxo4klSYfu>obHstJ@Z=EWB(wRT+5{xM{qsh9!6&ZhBe! z&us$-D)O@7YS7DlFkcvLQcTMoXL=Ib-{*rW@_HEvccnad!3VY4(Mi3%4|#!R=Hj<= zkmgp?HMWsmh!VNRNHn!nkC;4XR!ov^N?*$BmFbJMEUZG-od{yN4WUWrpFx$|rGr3yANYQzy$-eiov%SMMUj zyedh}mwh?f5RZs`!HEWWK`6064WE<2jZ;^cm(N!EKH~;Xh2A{oG1aJgYm=m zV+(#F)y`+(4UpLS8}p~FVZRYw?gxMg_x$`Zby1<76T@kSCkUZR8-`!A#$V0fu_5D} zEb+H%ev-1o3itczYJ{ldtH})YdDL?Gr%%&)BFFwQ_~FvF#pgIrLhl-ysOq6x9{;p` ze7Si{)Prfzsx3?u%JtjWZ)4P!`{y*=Lu=RKlI0lJJZD4zGR&6Hn~PiqWp5P@`+rwi ze~W~WZB<@`mVM?JPjtwe>Skv%ZLs8h#a6UaV-^vQTsP#?KR|4PHU3QgK*%C=5#<#& z!N-X)No+QI(gwNQ>9fY>Mxtzw8mxT#wM1u|3%Q(P_mf(=u)W_Twhp9oXS#`1kegXv zX6Wq>&4%T6S{CcMlh`0X&UNMXzVnuVf|X!^pGJErHtzB|TgwZnS;)sbL4Hh;%on3X z6CR(C`aN`-?P%@7n62yoQS0PLerP2vN3y}Sm%60!BiSnwVK;l}a5K$EhLF6c-O&OR zB2vOsO`RE^M>MBEbWYSeyykxT;NNt^ktBhIzpIq`5Bq`zGPP_gO z`V4*4qw1Ei-(g+NADqTtUEaJYi7{gnRnwO1RhwTWjU645q;iJjHVKZ*ijurEp9$n& z4`Ngj!08ias*II$vU(H#$A3@@Jw*-|RC|qG5Z&u_yUN;n3*VoE`_8%|1H?CX@N7r# zrfkt`aeTJO8o7ZmDcZ8;P#~vcOMDi5?-Lw&wQ^1{&MZ+}oK~+a72VJ^e;;aUOyyro zE&Ng&83f$Abw3w8}{@4cR9L9wM!OeYWC-t?D=Cj?+?eJ<<7UfEYb zlF^Fo(yWK=n3E()_#O)um(0!+mFnMgO-`1@wuKi@kxcl>g}vIoV=S>+vQi^XHwNxO z&Qm4z`>O)q6l0{(mE_vD-iy+v$CID5zz9I&2b%RhaMI?K9z zl$yPe7D0V}Xd|T@);P5$AI>7-JmC?Q>9@fhPs0L04s|oWhX1otNiixZ2fFhCx!YgV zoe34`VvO@2-8f17iSS!P5aofk4A?fXC{8(Tz`&Xd9|Onfu1P}Jk9jbo#WZzGa_>g9 z>&q%Y*CEHZkMRR8m!z=mP<0{Ydn0q`fs>0XyOjoHH9+rI()fS{?i-*L+J!4?g}5RIWNOj!R^#VgnkidsMCCc~;$ zE#HBwSj00TsBdJ_=UUq8t833>R&BqEcrG4V#rWE|h1J%BX@rwY8(PuOqPQ&e=b*Ly zhcsyy2^tsg!FaWHqrLCQZ0q{8s&>nWzY{NRXM3h@Jl7Lg|I)|^|dR1uBb>` z{+#FoPj!es>T%11+|OG|(oud-sN{UZB44O`*dY-4*d-kBFDq+0BA41zt7qwr*GLeVMbu6T zwph!BwJ&}4$+u>i7iN=k&2TV=QYFkMBKJ3I)P2S=ln~YK(#Ssg-W`@pa+io8qrgT3 zdG!7P{6{A8g4aNm?cJqh_XIc^$QCYD_?{08FRY1{#RWv(7Eb$$LIp_t+hJcDR39W# ziI3W$c>6jl?dwTcQ7c)Py}HSdffwKjNq#jL{+{76otR0 z!Qr+)OO%;gR7fQk+APJtV!{Spq|x9f<(1U-X3|#bX?hp3Gt~}3t;+Al@xl#Fj7Cf| zBu&^)rr_>3N_!sV--LklS?uy8mo7Z#=# z#38dnmGFNVNty$W$`^06X5cOJXXc?1>bHn7_X%#rxFbg6o#;;TPjKC3nth@XmV?f+ zb1@~_t*L-1xr6nx$E7J%O*L47o2uuU3%RHGoWNywLR>cQoO)qL))g@HLnFolDgy@c zH^fGN0Pk@K4~6#4a!KSnC;KY$c|Y69u6R$^2};m3=Y>-oqp@Q;G)dTTOex=sV#tkJ z#bAT@#@5e`8_O#ZhVvapEUH{xT|~~ZEodJnK12@k@8`a+htq>%2XO1{cm+YWHX%)t zYTLKR2ywvn=-oZp%kLjBHlTj`To=tDFMu6IS8B7v(4fZ?tCvqtQG+dC1!_(7s_0hU zbgH~N^Ax$xDq=YV+cLq5IR}d1v<_;={w$-sp}fD)KzEgtGt9y4U^{dkc8_C(cnA+i zqi2(EvA^lg8wTAQJMV)tO9(Nxc*PP}plrWftQ9xQ1MYH_ACJ?Q8oG>%fmw{}L%MKO zn^hP`@uFLeQC?t@v@Yca-5i-Lcme=?ROdLoyw{eCMNaauYhd&Ug|>C1h^)bMubLU% zfN7a|iy?TahOui~o@M0wi|4lZcZPCUFe4r0RV}4~JZ}H%N61IrLb0<7(u55c-U#l4 z0F09w{F9bmoX{erkc!x7W9K%fIA_R7rqEK+C;Q%GG`z0w<$koGR?6!%pR1Ti5$Ry{b*tz z*zKXeRcGz-QU9$!j!_J`8#w=1ZFDm$h*p*>`2{GH#!D;tx^6QL)D3K4fHytxNP%$8fo0GYT)yW zgg)rDL+gsQZ?VI-kh_dM@`9Ba=&)6iJ#K^(bPcoGLyTxud@-uPM}K#d3)I@-s1CTo z+XvEzip#?aU`iW~BArpDkbj~i^kq}eof2vJ9T|DbA~ROR89X&VsaCfje(r5F{D<^r zpW_3YFNTCKpVmB|*?ihs^tv}Wz(d!!atIJ`3%A4bOlM~0Zfr5alYor5^4feab0j}J zfTI&g7%<(h6l1bj9BA>)XXs8`m^$cEk%u?*WinqpweuiK!xSl?B#nM6BHL7LWxLpe z5BGda>UD7|{Z?u7S|YO#j4BqFB&cV-$I06^$V%l#%XXkKOU!BK$tjzQ_AwH;$A}{+ z_b_{Gy-TS|!mL=pvx-_6%djOwWc>7DaEHJO)wH#0j4%|uw>2&%Z=2n5bzSs7D64Wg z2-O^F@)+8PTVkSYR%EY0Xs`cGFw39l~hZ00rYo8xWJS>jSq6kcPdm!sc3QW@mja>G~b>IR@{LP?--t%dfqq zefORj(FQ-#FEDW`CCvPA{HJckH9rNZ)@9yVs8CA$HuDjCq3e0NlEDcaN*fr|pKjA= z@Gw*!a(@P@7L2M_NACVv7;!fRcB>)=nX!Otgzc`=en^p%Gq9;m4}%S|31xhk ztPBZKMim2tlxmUCjG1DPUFRa-90X{{$e0=a6)B_D_ zLr9X%kdA)-e8`@LHzghK-A->YC|<0Gfq187Z>Nv0k(ZXj4%r?U8_tKpVwJtVBa+9f-r)iJ{bFabRsZ2X+ zRRwmk7{eK!%Y(JH%tJ*$@zRqCb11q^-y{ajRK1AXF?92WPP!MeP&HS=_O}|{~u!6m^JwLl8LO=aW1lusJaW7 zD$^YgZwN%#~vG07Tbj1w8j}wMxKf~P7VORn4q|G3k>2{zYYCUDR|ja zppyP9_8>jBl>2X;!hV#DFC!? zY?qocr6u3VI0&aOeM*v<108J`kz}j(R?E1he$XiE+|qC+;K20Q$yUCk9qPAkAXQMl z$FFzD*CiNCsD8*eNFN>GH*cLOwOK9pB~v4eK5qb(xU1s2O|SuYXbwG=@eG|6{SXU-0pjpG{Bb zYt9%$;QsH6vY_)DG#v;_&!7A042VMWHll#Gyu7}Vfc6EPIEd5pkS{g>FbeJ7W?mR5 zy5x)~bYny}?p-h+o8cik4<|0H2RIkYtCf@$-MSs`edC$7H^|z<3LPr$!%Z%S`q$*pG(73o*O_@uRnR4bD6Zzr z_xE#S&?wpcF$G2lfe9hjjkAY!M&xZPR%c|wB4W3H!`vb=)G5DHp8a^m?~){DmNyjx zCoNIK&EkU_#a}G>7n2q!^+=}Y#E2R3gE2R5(Xn`JfHqf{ z1R!qbLl>K;^sxcd7oh@ihjRgGkfJsmFbO+a8wkp1_)>PHS~Q>^obR$-pmDFkXp$YiUB^ zfZrw51H@SOYQpeeFa4bb_iwgn$FLC!pOgc zMt{Ne5gmXCtfWny{r$%KnklnNsO&FJy3Mu$8vo*^rccPK9vp~hG<7+rZg%+oE+HD5 z~wHuwwZEpjuANj16?RQDp7&=Q28 zt?Q6|$<%d@T#u%|HoOvgf|#ntC9T4IYM>|^+lF?**_{lMjm&!dTo%F3O{!C;>(Au( z(K-!hbPm$Tc_Xk7HbEYExY7m%UvqH>5uSgDd0>0&RZuhMLTuH#9AhHXyt-t#g%-|v z?Uj4=x2ZnY#`L!@Rm>XB{sCu402b+EB$<2(+M}X?LHc$%m*TG(flPB;g z>~=>b=z=ZLBdx*ZU5&dWxo=rTwiOE}Xk78(B%?DezZA9Vm;|&81FL5X>mSo{WY)e~ zz_AN{>Uf|cOw*oOG(mKIky6SH+?RmTFH5L-*_S08V2<;9>Q3K1^c#Iii5a;4bK3`2 zpOAh&R^m<6bFr_>FtGW+XJb}5m)*w)A;^WAj?-QGC>o99bJ>g3GV;)$rEWZ}6n zmYSQq`P*5oJchLEzOQq7I<-kEjOwo_UWdXGszQ}Ame04Q&0D8=ytH{sVfe72c@9>&c-?p;NFeO?Dq7CRovh)PC`&f7lE zd&<+4~`c?3Q-rMtGAE(&tA@_6JnE9f^H&H+Dl(Kfngn5|BDOy&EGj zL?-#P+9Z)zpV*-dnHW+5frk&@3SymTELLv)^sx3f@>+j&4b6 z{qH+0U+UT%2AT$*Gr6`ue@&r=DdK`2cl&QgFWBH}PZe!yXzD4yMREUbu@?Cl4N_=1 zDLEJ=2XKLr_B$FV{p~w{noQh$Hf_ISt9Zv><&sw0u|oU%^DvQU@LB&%%)ss^^s3mH zj&l#~%#2!->GH2vC2$7`IbGsyP`X#G(8tUsS`+h}7T({AFk%erl0jr{fB#psDDXBv znd4A6wn~V!h1mMC|0%q3k~wG;(i%T77K^_C0F~4905Igpmf_U;QchR?QN_=c>x0I* zPRrBo1SwiIvLs_C5N>2#P>ReZ`UEpu3}qH)`SNJsmouRmWbeDi#&969OD%^~N0u5% z;>)NSU;l@b?pjkN!Rn89efuPMBqsDmm z_|KlT8cG(U_2Q#12s{1yKm~H2%YzW-hMr=WE$HsU@%(nK(7`X3{3G%<&$q*}WvITI zI31^Mx2<^uEgu_7IFXnhxKbN=V$7bu7Gtw3Nh)oU7rM{33(q#cg%vCvpl;l0)~C1k z2_0w)<@WkCTlEJ(%w&^;Q&5cE&Zy$cB50!cfH8eTQA=rM^RkpHf+adpJ2P}+9ifty zUs$0^y!Zcx!ynMJMuftGng^F-XXcCa;CW^nSJykpRs*WIr7wX z7~NOGLrOCjYNsFP)6G!>gO*8AGl216RCHWSW+sY?@N{YRS9XfD`VGfjCcS-;h?3qj z;i3>uK>)rUac?$RYL-q^-50rPA9I>Ln8-Fd0UR>FBfrniEI6fZDd_<6mO`KSuH&ab zY$b{w+tJaD?B1=bTax}$`;xOK4BTJt(ys~~Fhr4Vq4#ONl^!JTJcYPm9?=t460_}w z)+J&(!}NE+DoZ!^E2Vgkf*C`oL$<(v6YM6d5shZ{_}-T3R#D(|e5oj5(#5Nx{4`>~ z3ci=@wi01Lj#|Ft+05tG!V*{ZU67m-sq!N`Wnt7vS36AL1#anrDUO-Bu zU_}ZB@ar`e-CFU^O=y(uJc|F5wfvg3+vCr(mdQuf1+L@5+Kz=0Zkvr=E>8`4!7n8s zY*Jpo&4KncYs@_CU4ur3q9z7vDG$+6VW;7QBr~d^F75G_n{wv2)Mj#hnW#IhN*mi=7w&_nUubVlk8Ic!0`faaSS>EfrxcLyC~(GG!TtX*gir`=W!X9u2&yuI_`t^To#J+Fs| zt6yP+PRxSb5Af2M?7hWWZ7#a=Y2S!+y>6vH@BxfV>%q-*Ha3RJ83*V|m4HlCALzfN z?UrEm=AurNR)X83KT~-8ETV#BKAR}{^xU~6vpP!K3yIM#1 zoXTBvbjg;RL~4mRN26j}Vi9Q_bgX2G)Gu|eM1YGL)7U&KV7H#?E2gQ!1#9ka-6Ffh zOfesm?*>2!(%>zAA>dZ_Zem_(;J#w!;>;BOZ5+#7cB$mGd7~f&n%KwL`nY-gu&&`` zf5#(G5Z3 z64-5}B(-$mvOcTJYN68!pAz%J^{OQTDMp7 zYr8^=wG`pGlxf5+ACR{@YU$Q3uz=L2_bAYU#wV zSzw1gz`KGwEdTeieXLSJW!;wz|yE979+E`zHq~Qw6 zyxI637Z$SZw>y$tDS+7?yQUOh^uES z#hCGI>m6rg{)~ZB)-7gq>F3x%CRmceJJMAuuaq`42C~pAZnIK!k#scSL32qP>^W!5 zL2+;0Rye)vUOXRe@vwH}L1r?9JG_=!kYJDj&NEUOVP~%HyQ}qt;D-3xbNn z5c6D!MsAj;F&1tp_zS^zV>fHpv!IcfIZj_T_W_yEj;@reC0f~LE!Eahb+hjMKOB65 zIK2>Ov%SWu3lFuxNfL4zdg!pO?%T}lu87r0VP11;shnhH%xQJpGBZCHSlYxt zL=XfI_6_aZz!mCF_+N)gBc{qBII2A4b$!3FGjy^4G;r5cn8(4y=7&=e!rZvF|MzB8 zKYDh8WXW-u#Bl3lP6QdFTG$)0CoDr37Lak3tjE2hU9s#AllZi@bL*kUG5zhxG*t$# zjJWPz*K9xQYho|HwW|7@w)PYD(f`e$)5_*8MmT>W`lNp|{q}Oh&TNY9av1+wp$zI0 ze)el~0wRuki}Wh}>pDr@H^Wfj66fp@N=!v?3L<6cO)$SyEo&T;SB@}yHn?EGd38_|8Y{_?O93 z-v6Z2UIUA{VN%<}rsa2_DLiL=ZL(GNCQ| zzr%X1h2XeyFyJfsK{OvmFfCM>-G5t6suDT5k!NnA^eP|xjTrQL)+qA>IzcWZMW1kp z&I2h@bXg_s4U&L{f9eQRCd8;Ty)1g9w#xWYf6qfdo-%Iqp-nBIh0-mt^@F@3niT-6TEl4q%&So+&e)!O|AhN%-}S&;ZN{d&22 z#k8EVHY9Ync*>j{vsVW$auvF+_P5Lc&@+BDzFnTha(C9ddQ~Sy^WYiaApj(ue)r<4 zGtZ3N+sH+&7OF53f1<1WzfYR+lk~?yEdnM*<1iQzPghRn0p~Hy>@|c?#65( zd~I+Z=YJbt4p1&mSs0myKN@{s5{;y}qvXu#{O{77q$R%KaMfucDfj@Fe=Z`!3{zv& z5A4^{n;@h}1m2=s3xeduUlQ6(cTr@O0Xjr<>{=O&E#Nug_eK?^)iojroDAbHx|J59 zps9pEoO!1k1j|KPK{q$yl-xA__f%+J4Iy4!rUz)W7NtpXuzQoMm~2D|Os#iON{Wsl z+tAhQJzVD(T26D3>E-#|MK1GR)WM<1N@*@q`7AJxx1_b=lf)*UXN?2mB6bmp&S`NRxsN9PvQT(T5miWX7b;)k z;wtBb#G%cjN1tpkur?@*OnmQdvK^+~uc_&e9NgwP&bKUov}zVx02kid7e^30a)}>= zS{QQcJ;AGzolk-G$FBo-fE!;YrgFO(_S66o89miz(2BR$bnzjy1}7;4?=4Y66)i6f z0=FSr*Ge|^pT6+dz5M5Um76~&nS7LrwOii&dmmHVx}9cvV-`zaw**k}Q99pr;cHH% zy>n%>q`ZKOpR0NEb_RXN!+O~_-+dZ3+iMN%qctz`#rlEH+|u*ix~j zYPd)T_;@XS%9!jo-ZSBXaf0S1u#PUq^_VGzx>4RWI&^_WmP$~7)ltHHDUR5J>+=QU zz_RcS(vboiTIf>>v(WCUSX*Qi7B}SOKM268g=*Za{w!_ZdrRp)NNWcp0s`AQp&E{y zkSsX2cCBix9Bs+1X9q^NNRl#t0VbcLNpr6PzFpWf+H%%{f}9Sc+eKgSYkOJ8gxJQF zd};T&a`@ArU)u%rQ+||+p^~9MiOrA)x!6NX$B4aa)apxs$Wj^3nF7yuy_)3A_#CG_ z{!@9hPB(`r-a(K)MeNY63#U@( zv0rOz1zA`G*UFCP`;|28raS)0@|PRHuM|OgO~EWO?R}M_ub#-|w@zHR`eMkmbSC#> zg)C@e;kCzqG<@S!?2<352cWCuN7m388rQVUZ_xS;>nkbhP z!B@MO5#qg#K$lrv<;bjm5?;d^8ovsL`mE3r)m&tx+>E?hEt1<)L(YzEBe1=;x~K<( zj2lb-=uUtkEhWfbB~|vV<&N;MXNRA`qRon>58;XL;p&ja{_inwX;fVPQ-7oOin_@isuEO8{@k83t)G=U zclSKuSjgrZeXVC1j5BwrruTuGnP3@it^TGyg8O}&^KQz+VXU_0E%3{48jl?6jkST3 zW8<+BqHP!^O@guANtCO#;9f~oG8f0D{6>A@=2Ijk5y>61VY5!|%@1e6Y?H(g3uh_y zDsp6UREO%Y@vW20aAx$b1*_1D^8h3*jzh#;$ND+ETkDgM>PqN+Q?#}8L8*EQrdD$Z`NzV><+ATZwW|9``U9;zgR z+c3$C<&#ePlxa2qB%htcwE15iRNf$%1vopzdm=_7fr8>CwG*a^8+mcH4k@MXHt4|efAYmTU zbZ(tW<<;quiOV2AWCj@M*by@MW?B;jTBio3?C!;fIY--${INYW50Yo$?YHi3KjO&! z!q2frH%;&?&hp5<-JQQ1K{{~xbNa`L2ZPW&Ddjwh6bfpSdmZqcDCJ2eDCL-?EMB7@g{%;rrs3KUR1j#_Y8E-_kk7haqm}qKzK7SbQ+&( zZlpUV#${~@jaD~AuZ-^YHZlX@Z?HobqQiUw?Hn+*QnSLW&|Ib=SKzn)0cyHQNrL~D ze^9sS8}0+7KLCfvtx*#s7EdutMN5coO^eoxnbnus2M<#HaN;&-wDkzGv1x=~u zq_Sp?LE|I!u7~UWi`i6hI@K^K3-^F3Pc?0vqBu9b9YC8N-cwxQR#N~{Bv3Nws?MrR zSCqkkdGGs`tFM{c2at((TW@Vyhj}ZCjO#cCu2ai6qjHX-B?Q;xH}K`cR2#IpPcwGH z2|xMbDE$Qk&(4=m`DA({>d+Tb=`3b{x=~WM?T;vm2UO@9_)pw7fHd9~bMt&`Jmh6@ znwd*sqG6jCO0r}LEEMAf!Ptf1I2*x|Z`M$(^4S;*Yz&5}YPwBdTeU<5f}8{y5jFD( z^JV*NIgf~~ejF$*pr?%&&z{>t#THwVVan)V6cw`AUdg$|Qdd2#=5mFuXczoV@6fo+<8yK=ojJ{S{}{uB9A)t5JU zSz%{uQH|s@&Ywtq^6>jdMarYuQarEK-j{@tqvKWwxMT6bW6#@pqsZv4+FQ}sB<(|V zgrhrJFHZIbwPL6%layFivPpVlSpnd*8O&_yQ8_i9q#drj z8NRv}b4et&>+iut5=jqvv`4pPb&%tGS!VA*|5^&y`>w*2p}(q$$T5j>->CaQ zZta)K-@o605&ZRD=4?)zX}MQ-0OZ#BfkhvCKwzrKDk(_SHu!!TrQ)d+pO`D;b*(qE zAe0OT;-FV@uN~p9ty8eR7)`&tjFqoYVNk`wwr`a;hvZ?0=H`6Xh;CC6KSK8wKUK?7 zWr;Bl;75~|kHHa+g)0uT1H7oW28^kw)g6fob}L6ciz}SGoN^gBCl_+MyT9#Xk9S zXc>ZEi0X3R=5yGMurFB(mJZ}Z*!LWx?aM9(HGWqKKigU1LboyBadb*njz1 z@Ly3v(NR~*6e+MpEsWiDOrd|gE?nK7@(VPRs}nL_w(7-xMFu3^7JaFXouc+%fGvz? zEZhDY-bu3?iV6-Xi{;2O7RxD#%a`&|(J`*Z+KvJ)T^#aSE1$iMo^~UyKdxz!i^xKK z{T_wGkDY;23`a`GE7in#ZQTlsM&GqG9*@46I2eoSBW>WJeXNl@spu_A^@|H&fYeS+ zH`C5kFUwY+*z#h9vWv#pciGs0m|pnADadnc6n1Szg309eoFeEZYu^4U;)ahw)c_Zx zzDZQ&#oiB`i#{s>pK&NkCOe?K4HJBKo?^PE39T-F_d(Uy*^>=2Y5Hx zUM?NS;q46Ij-JrFhsNflYh#6M>S#C7zQJ=>b|R%v5%oFGL6L6O9ft7Osf&n~KFZfY zw%x3+_9?jbz-cTZ%ex<71+;{U=?{N+>mE=eItPVMQGuc{Fy{XPX#m1?>1KM6Z(o)+`iTF{+v@26Q zZ4dQN0%L`Su8bSS068K>*%x0oJC@#Ui%+y53G@_Sb*}TjKaBaA9E&bbHRBQ1{^&A- zD+j9^VvQLSbKhW1vCd4pI}+<#^Gh?$yLOg|q<810evHnmmJXCjhno3eP||JL)1EX0iOH8bRl6u<2+`HH6vEN*PQ&-o*F0=Jv*WSXbzXKem6JkulX3oZvG z!=YqL7%fj*AS(4flv3W7a{)CUWr_Z_yGl}0Z>=mLd56 zv;bV}QbMslTSIbwUXZTs>+*`xihtQNkV(=$UZ&9E=H!zGBf)!Qn;un5@1 zHDay#K{`P#i!Gk%u$$8D4it?T>E63>ZyqEs9I-1L>$kN$id#_JQkcdpM4 zpW2laSJK+0?pRl&>jip3vQsJv`kcZz1z_%IRX^#;A*!?3yb8t-I)5zI4thT|xtU-QM_1;V1%c;RAX^qSyy|O>fWL3y@ z2qGv!kEt{{=&(wrYnxh3-B5@Mj5AOZpdq?b6Gg?d4s0VvP$^*Hif;)|>0@Lb+gTfN zpq8w&sEOkKI=UdSNV=bQv8OiZ`8WSQ|HGC7)0J0}$GjIs>rlgTtOUT6l+PXe>t6}t zeQ6@B4zlFdC>{rPGM}{Vbg1j3XltPn^RHcw_3zRCLXL^JX6Ps_i?%vWX4mi zWB56nr1ja$cxX~s>X2lpFwu4>;_Fam;L0dcn%{-(_f(>@yvMm13|A8y?hfzQaR!`{ zq=^BZ^!vTkBHab3@q<7E7vEbL5133`K}0;uO8Ux})dt#pR@y2#FvQhTOZayx8F2U) z49Z@zCX`ri_U!zOEBgisFx;*jnqs*gHi*^<{;jK1Q0HpP{MJrLD+<(S8H*V!sJVM?di*7_u zjOxTzCVX(}7d4SV1S?xJqDwtkG|Myr(K9Dj#RdO=kVIv4Zoe{plw*EUf62dhC7$k+ zoEx_#C*`;2d?zqmu77WJa2w&xZvo9Wzn^=(A=}gJ-)}qLce?qEQ6%~O+=E-R4#w)l ztG#508BK|y$y;!##*O06N|(2OOmJKaX;F)AH8T`!5`Tis6E{>}a*IOM(MCnVNw%3I z@*z3xJ=IaVL8+F+reRT!FDgSM?08F5)X~Md{FcTphBD?F8xk2Pn_;ftv0PIFZU;1} z?x`m*!_25+MbFZxKYCi zBz*(Xq>zbf1DO4{aiXIHyqRgqP47X-jnA9w-0x52p2@{KsBNQPo3(71_CcwRR#8xU zJ~E*i8sGYCtSom*}ry%?q%$jKu!yci?U~%!Ckn(WNBuDuu&uFdKhbkFSnf^5uNP zMEWvcvY!ZQ>m)_l>bf|3Ui@BaAd1vs$DL&ap62a_OS1IGO?DCg^%qdI(1GOL=Xa7{ zpbZwge*shev~wo>=c7M#PhNdfe*dq3k63Ijz4Ms2?Eru*?M{+0)@D>n?d%%v|6L@~ z^gNy76W{n)2Qx%f?vRwFG^8D#n0oe2ALWSKm!nmJN$uBDeOvY9O+io+zuIaKD_?=H zFZt6OJo5TCU5Pl%7;j&JuH6^B4$W9CMy|$(al*TtJ0`mfUGT0aWuaES}69DsZNCS9-qyTcN;rK&%NW_?f8wBX)j4yYz_ovmk1T#Ysx%RK!RHn4%$-U>A*r#pnUR2q z@xUmm@8FBpS`s#EXfbYW&j)zJjJQ0Q5QMgL;omqxVtsv79GGp_*k|iVpS{4q>n`yF ztd%$4MzG*fNp3z#@t!@{CAcVd)3qPi%Z6yLdHVkjP#HAD2SHURh#mK+v|7+1bCoWX zy1dV$Gd>b$vjgj^n}+a0tQ7EH0VEr>0hOU;TDSl8zb|_9UmQE6-v`vs&2@Ygp#QK4 z+hfTcCZ-SBDFarC>qnxF_^Yk8RLbCqv9-h)$-7B7sHR$Z7K+LZ%+{5v6)g-LsPpGh z36pcj@;n(2ik~`xYN%p@8``?Yey)J>V^<96{(0Ac^DA=78t3_0?3-%|9z=n<+AF8e z&;PyZxjPGHD#>d_p8!E(*a4ld0}Csb%0tK?ykU7{a}7E*F?FfSd;`#| zpmV@rKKL};{JI?&g^^ze%=}Ze=jWa;UgeJi<9@4ilXe|!bnKuRH4+|cHU?%B^tyUo zbGRh6tI)r{ux8RXw$QJ|QLo|cCq(6X{gllfRVftt9?t(xN$+r0R1!Hm8N93YkE?I2 zgm0dKd>+)4z50Uc?^q5Ue!oB7QR1pHxwf|KwOQm-x6XyfsM-9=O~=C6r22Fx=1-gM zT5WgkmrZb(eHOzIeB8Ghv9#fav=DYEgc>CLbcbqI>|z$9(0c3X5)1QKdE74^bhaXY zH_UFV2eLD5b-jVp*tyPWXSwZ*KsOQg|n{;ANes`*|1Up7IMp)`Xw z8eX=IEeEMv9xJ7#C2-e-O+C0M{*|?*2IxNiO+C*J@A1QD#NLRnIRB#PTf**kzVemgR$@7aWR#fa<_pD^z!cq#6L}VTJ&N#wm$)wU|h?7l@cKQhkO*7 zQ!&-dz7=OHzWM*P_nlEqHQm1iB1J$tf=I_8BE7c+L`0+nx=ks>Il zR1**tD~JdPLK1or2?$E0B_I;21QH+#3Ayok*Z>Wpd(Ss7-Ooqk@eH@tmt4XB=01HR_hEP83EJMnQgB$ekJgZU?FmQGmxuUz28z zJ9VGuad^?Pop}Eq^#kBGpOs_NuV0DvUrqMoF9j~0Za#FaHG27W@EkJJJ#nsD2Dyp( zHj^|@fp22HqD~TBKJAPYS_J);LTdIa#^?0SdQRy~O8vEpaR5 z@tz;TT^Gx$9Ibn$p5+XAgbt@wAZfoSdxMKCEo(z|UCP=eYNFIyWAxXm^AaI7jW6n9 zncALPKe>xUFqwnkhEg2;s-bV<9Lu~azTU6yX2LQDcX)NIP(b!hI%lu8#csH-&u`RbHJ>7TZ?7QGvq64CW8>(V z@ZqGGWub3Bkx%;$YxlF=q8LxBny+J1*V@k$(DW>d|J45cs_d6X+YnFYlUMT<`EZvX zu-w@)I4zC>ne>_eHo=cVhEjVt|5&ejwFNFQGvZjZWB>kWTUfx_Ex!b8#$SvbjtY4u zS@UB6d?Ic$wEwHz{-MfdfYDMCW_ju>Lo~|nbrrqYSmcK#(|>&a=lIB4<_5gh8fC{Q z>cFs-Fs62f-aU`tlri?B@TBKDM=?#837c7ceDguRZr_seEv8b*Ckg0&Bd_qUb37hcup~>X!GP`@2hqk8e7WhI=k^#w)KIh^XCm-hkh6G zG?6@Ms9U!9$SKp|!Rz{GW9B{>?q~sicY{gDk?HwM$}_x*5V}I|qCe4YyC_;oZADI&@!!>X86Up?W7PQZ zn}SIFFU1uh<+bQh6gBSFT^>Xt;4HE|(D=`Kd4%4z>j>lIokIHA>fGdVH4Ey2vF0W^ zt~d@Z2%S|(``k<$o)gN7O4=5JmJTQWlAUG#WIbv1S@qTVi%9Brhjeax`@gi7k<#o5 z7jzfC875_YAa0YRrzLY1#k^y8wf z@I=j1AE!%MGMvH)BI-R)FUlv}7^{gG9TvRHdRr0fDl}x2c%$i0OX%d+4Q2;n|10GI z3+WcOs>y~PEhR5%mn9zBa!CKWZ%lNn*&f8EF84!q;Y>tAZHN4-qrSzZzIpm;ny8l5 z=Ei~CA>_|!qyy#ZH<;5b?AFd^i*8^sdsWk$kw-b%fg%2fE@mSB$Ht%7+}oK8-gRjQ z&)-WH^vism=3alz=f=5$Q*Jk$Nzy$(Sm4VxQ>Ubcd;B9cAJ3iOnDl|4f*UcXl5*$K zbJm1jq|T}cGIM!~x5_%4E3PglskI0iJhvsS2$pQ7et2*lcUQ>go^orvE~7SAs+3yx z>qct-kHMzvlE08PxRK^jlfkL-C!bBJ%}Uy;oL$UUHv2iJo(xSvSC{TBS~d7po5}YG z`hHxTZ={9BtrN_mmFs<4BK~-|6hyH%8|*@;yjMD?&uj2H=oY9U=~H}28%ew!-%LPG z40DRk5eo%I5E^Zuexkrvn>*+$d!u-2JG`q|>}AP6mrp2tmAZ7m^regj$kA=2|Dv^~ zXJuOT`(RbX^1D3CEAPSU^M~se>oz$?$f1y%NL+-j zf8uVazUn=Cp)LL1K~c}ugAb|(ywcHh7JJHK>i3!JS8``j^c%0YZmhJi1woG%g#Vn> z(44h7?$LCtwQut6wRE7h==2(3L@R!Xv=3525rr=-byhpe-+VB~7ZY!pS$KJ2l}D02 z2By>QE1wcw-b_WbVrIR7TD251x+yn5<7*&oaM2FG>?wHG}j~=WHXX9t9wj zQN)%^(Lc_E*>&byGUd>}32CQXf37 z!YG`?soG!jdz(D_hLIv4Khk|rHlQArDHyYUcCP;MJ^J8B93CvWw-lr(NA4(cEGJX# zy(vNuy8;M9ndUy{Cpgui54hI&7k}PR<3&ROWXllN;*%q~RlF8ycT)uwZ2GXaDNmuq z7tj$C?0`LQL5);;fsK%S+P9D8@Q9~8Ml{ul-e-(RvLSzGjZJ;c(bqWcUKy*%2Pdgx zKq5SrQiyqq&ngh!;RzZ_TC#1a&_w2KcHDfps*_+QVnsR?ww9T3Pd-lVS`pZC!H^ug zae;;(_w9Y#*Y=UGKuu)3(|z}ha(@Xga$2tca#5~calmodcr&ha@_o9n4t*)kjF6bB zml$wpFAbX9R8i-oAj!UrYS&jh`7s-8{X>7$H1Hh$lCw3jhgVnoi= zbI!TWDa6uWjqOj^5q~4rCuRa}?*M>8M@y8>FUTka_}b|27^xvpdB}nysus*6I1aL+Y8Bq?bClltsLn@-b}imwNMlfmXw`&=t|kVS`t2Ew2(Ucr(wI z1FuJ>>U{Y5@Czz{R;zjOww*^-`1gte-#R1ah%W>0L@<>jJ1B%Wr2X<@Hya-0s&BVT zex6<+L3yNLxf?*}?guZW7npww%eDG&`;Yt1u!8oS70G<(ofG;`-{RmQnp!XZ^5(}Y zp1{+U2U5;HMCWh~AahgBsLF@|ojXC-0)ddU;#O%uztjE&l4`ZAb(P`5WN&T2nnZ~k z;gro2p%P$^5OGHU$?GJc7*HlK+S$iVRAa7Y!HRA>Do#y~;bi+8tG$!Q8@L`6p!G@U ztg>mR6g)J!F+NNSCmFwzQjOWl5@vgU+_8l9t;xZyMCeh^v!TO5sQ$Qwn)u;Y4J)|? zySe7m8?&4<95Da1OC6|TUU-41kIj!ufSO+N@dRGycpQE9CCBfHM}Yj6KC%@{79g>) zvrJq$68n!%E0n65RSER06 zQht+iHp>3+yq2Fp)RUVOvWs)OgD0mb<0x03YOaCjjPCTJw0X?sutj|JIE6p6&+P<)TLLa_*l}>sJ55nPb|h#GzK17mISeZ0RG8syuitm{ zeK=PRKYn;MFg>gNVQFZ6L4j-8YCUK_++f?oKyH79kC6vMUJjGXyPtb3T<=AdW+q8y zZzv>csUi9JVR%Hg4n^Yj;!{4mK0$>9&T5EJqdKa+LA}p);)izlRYIewW8twTJP#sv zu7NiJAEfv;7fCA6>RlQc!3kOzBK*L@h#zSMXlF!k|EL7d@tEW2yCwmQt&de#n6`Z^ zo6*#m(c?KMy{oR?tpGD71GEs7{m~?(5rej2$uifXO^B?&F8Z*80duqSl6;dfGjlwm zN_XSL$SwSMW7Lj7%uZC*5_!DK5_LrV=DlY?J8cA6Sc&VsZ=PzXPM2*+af(t%MBX8xn2p;b*lc z#D${nY&k#JqkY&nS= zTCpuF7pC4f5OUp1EKWF8nyXIvANp5*Q6*tU1OHi7UTXM1rP+_@26PLTsU2r5_~JnE zN=?U%^&9ww?dOBr(3RFfc?%s0koneklM%2|0Q*(z_j;V-)Q%RR?NS_; z9;;Y?)?7jBZ-$`E;8|S|sjsFGm8(NmMA<}0e{t)fU)frg6AwG9-wjVC0_d+rOK4AT zYi;@#=}q*u+ZGLG4O4DmKuI{-;|0t&e_YFk_h(jJfi;Ai#t3OcWC1196d!V(Au30U zz2%Q_?ezu*|IQnAKb#|5uc%v_ox=-ayvbKUh|jRQ$xx;Emr+(N4mT z1msoBb0>d->t~=~PxvyS9HyN#3-h=BwtT2c#!K&<>5NRpKf-eO^sJ+h`f7}8#9ejM zYxY-)UZY$27N~RSSu*r@H@By=3@3i*7xXoVqSx2$WA3LZpdt;ws<8JKC1oWgW;H!yR{SjhsJ2 zNEv_^2_e#3Y$Ruv%K-|ABjJJiHrI(6R}~3WOW(W+f!GAzpvCE!DxBv?H}BrylImCp zgNBuH+Llr%ZY8%b1mv1A1W*Xw#TY0^jQW$$?&z&5Z}R(fy0QdhF)%<_uM-Tra=85@ z@8t=~)kCeW)GK3F8hyMmN0Oq0Y*ALZQu=ZD>Q^EKcdqQ^*Ncd}uBcDIR~85z4O{BW zYK{6alz14NDN5;9$PuQw1`gGW`YRIucrJ}?F`Oh^lL;d525=s;pQ{OS?gzFXG7dx zXvajZeBL1@I$Pw`8|f^z-ib9biC=lgbZ!qv6rMF6p7*rXuD!55gZU-ZL&`qPfkjD& ztykhH=eZ8AE>5bog~vf5XG@C9N_+~_4+~Tn-@w&prrdgH<__)|j!057pu1ylNv*GW-`R=SzzwZO{*g&3bCi&hAHb^dx!7T#$Zr97gws-M#5t$wMt{Q*9q*UfaRCPX`atn3lvj5%ph~J@mqpd=2pK8D z>*dj8RSuDZn!l?P;eH1S8c7ZVftO47Hfm0gKHo{uOmMJgm!{`;Ot%lm=V^T$xv0&- zY{6HHMT|<-bau;P)}G~=)rx%gWo$KmQLwblNl{E@ZmOx!-GB>p3(}EeH$Fq_p)AV) zsuOki#!$scZP^Cs2=%iKp6^#l@pI_p z7?n^{KT%fZxq!^7sO$Hhro@tS2-Wkq(|czP585lUcH+EUOIFm)OJI{VPc_xkwiaD zZlDbhI-5XrAgiZ{Ed{F*OOL)-n=GkZa#L&462Al^rvv>zC`ErW!K*YEXhq14jDERl zy*DWP*_SbS1A5i(LB=6xFw0wq-XEcfcCfj&Rc!8V7LcP}W}ffHm#iQE;nttsK;o20 ztkYYvQ|(}>y74}SixLHVDR^Z@k!)qMhg1yMTh@VlG1PTl?V?C8hPXSLg|@yIZM2;I zzQ_M{?_R_E-?H_-yUa<2C%z0z{*PR7$ObUgMK}+1It~Ba8h2(~-M?(y;R4XRSFM)$ z4R4f)*9XX+RJZFh3Q2MH3*nxq1&0*2QhSwnJ~s)I8I{9AE2Sx=MKQgTdi9?VYsi$X z>72j0{k8pf2{=6W*F(KCAca3)GQyO}7&dFe*Uck&R<5?X{b>55TkN1UIaR%LEpUWw zaHl&C7QJ?~Pm+5$Ymr{5+Ph-wP8+=KyHZmd@<#g~)^ah$5hcfo@i@dj>O*3hc&g;J zPBm+}XF_Cy%kyucmn07Y|KSGTS_mkvbV^fFx*!zFCma3=wDTT7=mtO`OK;xbfDvn@ z)*;+}E=>>JgmjH%M|anOFnsfBSQkQedQ;U4l(K*WE7puuY$!CYBBzT9gMIcBDSVd< zz{2ut!79q3A!E0;&ccVD&q4o~?e*7K#Wm2!!#>!%K>D_vwD*0IYV8%1v5w3| z2Fw!SzvlhEBMT0z-rvBm_md%PWm+)PAO%y`5n2@v>dE!U+#CN+oRa_VD<4Mq0k|N zPZA%6m&SMjqtA4M@}Hn=rUEk#A^Hq#LTxcJV<>?Fb@!WOuf!$JWokWRiCF%Ns?3wL zLt^0jgSVhQpd=L2?Rv~PWH{(dOY?a9k6mzdtz8PNJ8S;!A0ii*%u|QcHvh0iu)z8W{r5hXe-o&qv+)#k%t&`$j3KApYiIJ|ymcE4`5Y`iZYnDq9 zAeG1yyBfH90sB4LZ^qIm2xI7LMrYg~p7x8X@fUAhfXzrY0WZ z*T;fdZ~{VKb`OJMp^&Xi%Q5OnHFZhMd+>ZCPdy2?Z;8paM@mKUe@kLiUMWKB<4ks+ zISsO2TsbJdXeuHf>G;Im6A0oA7NjB%ISNQW-jVx7X=O|*b?S7=br3JNq5dM4B#;fn zl_-@AAoT{g68jMhBZv3rxo?5(ju_6#272JQ9LYV4QEeAKLa<#s3V^nmXsMkU*s*1ogL=b(~M_ONEjn3#s$tXU+qGjfHI2Z7s@#u$XKu7 zE+H!C6Uu$P@XF0GFhUoqkT9D*{NP0-?$}0A8()Q+C-4&gw8={CrQ>z{Cq;EfW$&NY zbJZDVyF^SJ%oNH4YivRKOGn`PYBWtuAP$>@0tqr>gyV~9;aSC*T&#%N1JFc`ny8o; z8%awzKUC9wQroKn`JH0(NuOhEM*)G)yAdtJsO0^4#zv|Zx6>zS00^P`J0ea6N#jt% zXkJ{z&!0K^&{2JsvOka}2>G}QUpEN87w?k?V-J@{9r{?Fjf!XReQo^68L2qOQ)Zvp zL#0{sj-KR?y`vV?VV%M`>cX)D$(5Z~b3y{Lv*0LDi7!jVW6L`5N<-e-WtPj?vJkkP zrlth2?YlX-5e3a`+X4YVA~O+q-vJiCKOSDxF7Fs`f zHehi4=Dp==<~J2xjt1z8Ez_#_MWY2efrIdQbC%8-dqmXK>aoWYzww<(zEX zzSvK2JNtoIzk@hv?xQWFJUi1boOmo+4lcabkaFJL%fMkEYra~bDz z)w}<&!+?Ig=!4>qTggj*uKU@1qZB}HJl;1~iUOKKnF}KPb0&w)X+vza{@MDupG3@V z#ojQh!Yx0%htbMhQVW@A;|UJKIES$2oi9jQDf0Xu3-ZK&mVXI8rLW zQ6j{Gp#<-^l9p9?8`E&kMef>VVyFaqKywfMI;(gfvDRXuRG^pj%KlVC!IkZrD?eCy zi}Y-fUGBPlEpGBa0e>Y!1l7GdD+80B^ml@x25>4$^revc0esp6aO7ZP@?-S0MSc~7 zKPcHuJ;INq_!Hh^C;_(s=m+j6=ENqE>8 z)$}`?rw8cVHjdlNysD40m)A%-K2ejcwPPi?`0gOr?+PgfZ75SKutK)D=h4=IGFK#8C;kt zePoI8(Sh(nk=H+>Ji1C+f2G{DKC^(~qA0gDKA{}||7IM(Fz|mF)p-iX8?~b8bv~jV zvUnF2`<(4zsoQP;o`TjppZ+tMy+;`H;u6Gkr?eQ8bfrUfEd;gcVY%_MC~61pRFR&r zVq||i!P{cPgxcm?@rwmQZBHBM;}kJ#FsM1y;<+7BnghhA(=OZu=cS|?@B|(?c3cPB>TZe|94{-CzqiRVREnKNyFW!0LF41tZ*@DyGt$PnAtL`L3{wsliS`Utt?dne2r zo_toajyB{vLUXFva=`buJ#>tB#JWAMyYL-`PB0b10ZTfJ_6BGC1{aQfB|ON&!6!2G zK?9y8*e@p1r6~@16~-XMtd0oToX>oSrSicZ8?o!B9VUj3aA@`q0PXd=jk`(j25`IQKWzofax$pEYy z>fU`*AuDiZyp6AMI9`GqB!3+6Kq*wI!VVx{An`hTCZle;9)Kq|2x~(ANooUr}V0PCqGF zON?5Z(cvpxYrzt9ct2pek@cpdHQCj1n#IGwB;?IKD7p7>5)n2VFl&+2a^A}Qy=h=x z9W7vVzWwR-FtIpIZWcfB-QA1q8GacjXID;?)acW;PEk$q6jehd@jCLf2%MiWOVR?Y zlv7BP{hJe5t)9byK5Loan5AjC9bqCUdBRY(E<;Md|i20BNq%$KM~-?dsE!e z_{Yb~rGS}uvNM`IU5y}ciS`T3mok^-h|6PmUq;xeVw2sC$s*JqEeC-+x1zw(ul(iI zDG5Mk#YB4@bH5>#yxmT?1RHl)Va(>{w>MwuGh==xzpa|~ZLWQO@0&`rKq?yWDZ_~_ zVuS4toJZvbMjH&gv5hfweH}9YB(=iqjT(f67%|Z<3e8+6O+UZ>sJQNU@F{f0ayMa* zUWmT+T>5@~eP4UfTvl?t4h$2&Gtz>-#j$|Izn*Zn@`st?8SH6C?AJ;sT|@pN_$VbT zJEK;J?|#Vp3=^JbnRl|iTZ~I>4f>y=qJ-D>thg7J8}>`44Mqbd5QR!7RfKkEhX_Dm z5Ew;YEs*qjo5}{s$NdapuHB=|C2b+EuKk2Ym}YfD;iZm>rMtPYleGSl#IC(?#*)>1 z>)1rW+o={iYaoNyTJ2o3inX7CnRtXS-gIvDX4V`+6Wu#x6jas_)*it0O|89&*AojQ$TiGvWNTrA;s2S3MacH#^d(K zZVyX{4%~Zo{22Ln(UE~~>ae3{TrS|$aNcR^HkRoxFZxGK)EBi}MYF!EKwl!|2Y^K{eb=;=E$$^L zxa=-{d@WnhOA??_jrB)b{)p1#wyWfymPk#y8wWKEU!CK>FGIO%BYy1gy=Ub;-5kUk zQ|s`9?)uwhbD1fAG3tUKfTo!oBOe*g-8#>fVqXsU^ubVygnfKxrq&L^s3X@QuHk_YEEty`|49 zwQf0oqxE`mCEF^kw@9xB96oo7lz4zz@2}To83=+e;D6lNe;Sn zyo#QWA8;O2`+Bh`xgc<*n0woQ`(4tHUxQcu7(Is%vOf6l)F(odNv-mS|F-?lnxevy z)Qe(%;x2v8XwdoP#sw7YLP2L|1}gkh?L!qT1|MQW_S}LdzDZ)#7Z$q%bF9T^$2sXJ zILD7fkVu#*GoOQe7Th55OCDS_J?^cGZc!Wt01<#WesN1f0cnRlL9f9r`CL=m z2eBQO9{O@*V)d^~vV$Yr+zZB#<0@%A~_ZZnE_>YuZYqN!HdQ7fi57 znOE;gV~cQEGEck9Pn;4#Z^6G82%$&O0PN+h7oy_oEInn=r=ba;-T`wy0Fj zOK{fh;XZc6##6+}K#2|eg8=X~VnZ^rUyJ*Fu5-{BUm>Q4tJOp8rK6bNR`H@2VEaF9 zE&i?^-m087n$6_O#I6|JzzCAHs{_ObCZGD>oi$S9NQre4g4);Pl=eDTSCd^sISTHl z&WRuICDv=VuLCa;#4gKzDG<3|Hw&cQ@gLLxI!#LRs=;QtX;*+439L7gR*x&&8Z$Nr zC8MYsJ|Bomn++g>RCMHGqtw45xc65Cs@{9IZBrJ?1`LGj#1Vt*UP^&agSBr(HCDX~ zH^fx?iQQ)m1gvumgafu+fwwp=$&YXF%CGDECC3rhT)N%>lQinx_=i-uyc)3NU%U_k zZksucx`|ka5*9>mqNBK&7bLo_CV52v1# z%TokqdH^doIGWRJECCKDrUw*apo|L*nIqO#D|f?68e#TpnmK;<8mAUO#(J8r!{5gx>N1F4>3uJMIQi z;*Dh{p$_qw?@BYjB^Lm5*zf6Wf!_X0@S8E(2)2?abT3J=QhR&>!QC$EIdaf5s`1WA271NMu}+YYoO@5+2iTx1l=%rJIbby;)wUb=p) z0~6njJuCbFv|Sw&Q=)HCAq1|al7XM~JzN1us)i)7lt{AY?ti2g0-`fb)6zOSd1n5n zPfxD3)1SlTxl>CQZl1{H7B?F3K-SUYb8yCy%D894a;f8+sz3}2)f&brN&X#XH77SG zhh~JcKU-tf)+Iip_KGT<_nRZSfpxWt0t@&Bk-7sZ{SP??`2KH&_OsYV0zr#g4MyPi zp3FFqaUk=6^)N+?`yZC$&Y;d;cW!x*^H{;Drdt>_ZnaxQ76avI2k+NMuK{#BLbp(N zW4$?@UgrdpwKHw2h+X~?B1{#;UKsUV?!-JRc>9iDlG77U>i!Ypp@*OUvZghj&YxBx z8qMekUNE`DX{#*8K^wLTj!#bf?Tzy^`7&@g`OJEK_;|wKY5VtHv@WNIqifbHF8^~& zo}+~L)R>9?KJgzB{Z}6U)sO#L!~d6e*jF4EcrJ;rh~=;tb8$J?xty*&<(Kxq0Bj0c A>i_@% literal 0 HcmV?d00001 diff --git a/render/texture/particle/shape/smoke.png.import b/render/texture/particle/shape/smoke.png.import new file mode 100644 index 0000000..77c948b --- /dev/null +++ b/render/texture/particle/shape/smoke.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://colhtjt8jon3v" +path="res://.godot/imported/smoke.png-34046474e6118af82d80752acc087514.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://render/texture/particle/shape/smoke.png" +dest_files=["res://.godot/imported/smoke.png-34046474e6118af82d80752acc087514.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=0 +compress/normal_map=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=false +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/resource/skill_animation/hero01_fist_air_skill01.tres b/resource/skill_animation/hero01_fist_air_skill01.tres index 4740902..5198d7a 100644 --- a/resource/skill_animation/hero01_fist_air_skill01.tres +++ b/resource/skill_animation/hero01_fist_air_skill01.tres @@ -60,7 +60,7 @@ tracks/4/path = NodePath("Status:speed_up_rate") tracks/4/interp = 1 tracks/4/loop_wrap = true tracks/4/keys = { -"times": PackedFloat32Array(0.3, 0.7), +"times": PackedFloat32Array(0.2, 0.7), "transitions": PackedFloat32Array(1, 1), "update": 1, "values": [-0.5, -1.0] @@ -72,10 +72,10 @@ tracks/5/path = NodePath("Status:skill_move_speed") tracks/5/interp = 1 tracks/5/loop_wrap = true tracks/5/keys = { -"times": PackedFloat32Array(0.2, 0.4), -"transitions": PackedFloat32Array(1, 1), +"times": PackedFloat32Array(0, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), "update": 1, -"values": [5.0, 0.0] +"values": [0.0, 7.0, 0.0] } tracks/6/type = "method" tracks/6/imported = false @@ -84,10 +84,13 @@ tracks/6/path = NodePath("Battle") tracks/6/interp = 1 tracks/6/loop_wrap = true tracks/6/keys = { -"times": PackedFloat32Array(0.6), -"transitions": PackedFloat32Array(1), +"times": PackedFloat32Array(0.3, 0.4), +"transitions": PackedFloat32Array(1, 1), "values": [{ "args": [], +"method": &"check_ground" +}, { +"args": [], "method": &"attack" }] } @@ -98,10 +101,10 @@ tracks/7/path = NodePath("Status:skill_float_speed") tracks/7/interp = 1 tracks/7/loop_wrap = true tracks/7/keys = { -"times": PackedFloat32Array(0.2, 0.2001, 0.4), -"transitions": PackedFloat32Array(1, 1, 1), +"times": PackedFloat32Array(0, 0.2, 0.2001, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), "update": 1, -"values": [-4.0, -4.0, 0.0] +"values": [0.1, -4.0, -7.0, 0.0] } tracks/8/type = "method" tracks/8/imported = false @@ -110,13 +113,13 @@ tracks/8/path = NodePath("Effect") tracks/8/interp = 1 tracks/8/loop_wrap = true tracks/8/keys = { -"times": PackedFloat32Array(0.2, 0.6), +"times": PackedFloat32Array(0.2, 0.4), "transitions": PackedFloat32Array(1, 1), "values": [{ "args": [], "method": &"cast_attack_particle" }, { "args": [], -"method": &"cast_attack_particle" +"method": &"cast_attack_particle_release" }] } diff --git a/scene/character/player.tscn b/scene/character/player.tscn index 34b5653..a16dbee 100644 --- a/scene/character/player.tscn +++ b/scene/character/player.tscn @@ -2,7 +2,7 @@ [ext_resource type="PackedScene" uid="uid://8rcvw1vnjcf7" path="res://scene/character/character.tscn" id="1_pot50"] [ext_resource type="Script" path="res://script/character/player/combo.gd" id="2_i44w8"] -[ext_resource type="SpriteFrames" uid="uid://cajgs8smbkjan" path="res://resource/animation/character/hero01_fist_skill01.aseprite" id="2_rubkv"] +[ext_resource type="SpriteFrames" uid="uid://ce83cuqwgwwi4" path="res://resource/animation/character/hero01_long_attack.aseprite" id="2_q1a6q"] [ext_resource type="Script" path="res://script/character/player/player_input.gd" id="3_n07go"] [ext_resource type="Script" path="res://script/character/player/core.gd" id="3_rxdse"] [ext_resource type="Script" path="res://script/character/player/player_info.gd" id="4_mi1lk"] @@ -12,8 +12,8 @@ [node name="View" parent="." index="2"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.693056, 0) -sprite_frames = ExtResource("2_rubkv") -animation = &"fist_air_skill01" +sprite_frames = ExtResource("2_q1a6q") +animation = &"long_attack01" [node name="Combo" type="Node3D" parent="." index="8"] unique_name_in_owner = true diff --git a/scene/effect/particle/particle_decal_normal.tscn b/scene/effect/particle/particle_decal_normal.tscn index 5576b5b..f448980 100644 --- a/scene/effect/particle/particle_decal_normal.tscn +++ b/scene/effect/particle/particle_decal_normal.tscn @@ -1,11 +1,11 @@ [gd_scene load_steps=10 format=3 uid="uid://5d1a3s6x77wd"] [ext_resource type="Script" path="res://script/effect/particle.gd" id="1_2t2j1"] -[ext_resource type="Texture2D" uid="uid://bjv7f83tdgq17" path="res://render/texture/shape/decal_explode.png" id="2_vkpca"] +[ext_resource type="Texture2D" uid="uid://bjv7f83tdgq17" path="res://render/texture/decal/decal_explode.png" id="2_vkpca"] [ext_resource type="Script" path="res://script/effect/particle_decal.gd" id="3_dwi0o"] -[ext_resource type="Texture2D" uid="uid://brgii0qi4s6kb" path="res://render/texture/shape/decal_dust.png" id="4_jxr0h"] -[ext_resource type="Texture2D" uid="uid://dkhmqgtc8tn1t" path="res://render/texture/shape/decal_shockwave.png" id="5_c3jkk"] -[ext_resource type="Texture2D" uid="uid://b6bfacouwy2hi" path="res://render/texture/shape/decal_glow.png" id="6_2la8o"] +[ext_resource type="Texture2D" uid="uid://brgii0qi4s6kb" path="res://render/texture/decal/decal_dust.png" id="4_jxr0h"] +[ext_resource type="Texture2D" uid="uid://dkhmqgtc8tn1t" path="res://render/texture/decal/decal_shockwave.png" id="5_c3jkk"] +[ext_resource type="Texture2D" uid="uid://b6bfacouwy2hi" path="res://render/texture/decal/decal_glow.png" id="6_2la8o"] [sub_resource type="Curve" id="Curve_w5jkx"] max_value = 0.6 diff --git a/scene/effect/particle/particle_hit_normal.tscn b/scene/effect/particle/particle_hit_normal.tscn index 1c16f3d..55198eb 100644 --- a/scene/effect/particle/particle_hit_normal.tscn +++ b/scene/effect/particle/particle_hit_normal.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=5 format=3 uid="uid://io1yfgjm480t"] +[gd_scene load_steps=6 format=3 uid="uid://io1yfgjm480t"] [ext_resource type="Script" path="res://script/effect/particle.gd" id="1_qxvm2"] [ext_resource type="Material" uid="uid://tlhcll6fyp7q" path="res://render/material/effect_hit.tres" id="2_54a52"] @@ -6,6 +6,8 @@ [sub_resource type="QuadMesh" id="QuadMesh_0j7av"] +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_pcbb8"] + [node name="Particle" type="Node3D"] script = ExtResource("1_qxvm2") @@ -20,3 +22,14 @@ fixed_fps = 60 local_coords = true process_material = ExtResource("3_1alqw") draw_pass_1 = SubResource("QuadMesh_0j7av") + +[node name="Smoke" type="GPUParticles3D" parent="."] +visible = false +cast_shadow = 0 +emitting = false +amount = 1 +lifetime = 0.25 +fixed_fps = 60 +local_coords = true +process_material = SubResource("ParticleProcessMaterial_pcbb8") +draw_pass_1 = SubResource("QuadMesh_0j7av") diff --git a/scene/effect/readiness/readiness_bullet.tscn b/scene/effect/readiness/readiness_bullet.tscn index 006328a..3251b86 100644 --- a/scene/effect/readiness/readiness_bullet.tscn +++ b/scene/effect/readiness/readiness_bullet.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://cxj65e7teugyw"] -[ext_resource type="Texture2D" uid="uid://bd7kst3jrrma5" path="res://render/texture/shape/readiness_bullet.png" id="1_30j48"] +[ext_resource type="Texture2D" uid="uid://bd7kst3jrrma5" path="res://render/texture/decal/readiness_bullet.png" id="1_30j48"] [node name="ReadinessHero" type="Decal"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.358925, 0) diff --git a/scene/effect/readiness/readiness_hero.tscn b/scene/effect/readiness/readiness_hero.tscn index 5c806c9..0a9786a 100644 --- a/scene/effect/readiness/readiness_hero.tscn +++ b/scene/effect/readiness/readiness_hero.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://7ej8d4b1lc0v"] -[ext_resource type="Texture2D" uid="uid://dpsxejelj58f8" path="res://render/texture/shape/readiness_hero.png" id="1_msawg"] +[ext_resource type="Texture2D" uid="uid://dpsxejelj58f8" path="res://render/texture/decal/readiness_hero.png" id="1_msawg"] [node name="ReadinessHero" type="Decal"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.358925, 0) diff --git a/scene/effect/readiness/readiness_monster.tscn b/scene/effect/readiness/readiness_monster.tscn index c8213e1..39dd012 100644 --- a/scene/effect/readiness/readiness_monster.tscn +++ b/scene/effect/readiness/readiness_monster.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://64e2u2uedpi1"] -[ext_resource type="Texture2D" uid="uid://xtipei54v35i" path="res://render/texture/shape/readiness_monster.png" id="1_2mpei"] +[ext_resource type="Texture2D" uid="uid://xtipei54v35i" path="res://render/texture/decal/readiness_monster.png" id="1_2mpei"] [node name="ReadinessHero" type="Decal"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.358925, 0) diff --git a/scene/launcher.tscn b/scene/launcher.tscn index c23d81c..a94fcbd 100644 --- a/scene/launcher.tscn +++ b/scene/launcher.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=14 format=3 uid="uid://eoydwrunmm5n"] +[gd_scene load_steps=17 format=3 uid="uid://eoydwrunmm5n"] [ext_resource type="Script" path="res://script/manager/game_manager.gd" id="1_q2t80"] [ext_resource type="Script" path="res://script/manager/level_manager.gd" id="2_ewhkj"] +[ext_resource type="Shader" path="res://render/shader/post_process.gdshader" id="2_iwyj8"] [ext_resource type="Script" path="res://script/_global/stage.gd" id="2_lxgiw"] [ext_resource type="Script" path="res://script/manager/character_manager.gd" id="4_oonkb"] [ext_resource type="Script" path="res://script/manager/camera_manager.gd" id="4_yqiun"] @@ -14,6 +15,18 @@ [ext_resource type="PackedScene" uid="uid://0uonhojhfgi" path="res://scene/ui/menu_screen.tscn" id="10_sky2n"] [ext_resource type="Script" path="res://script/manager/input_manager.gd" id="12_vfqm4"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_b4sw2"] +shader = ExtResource("2_iwyj8") +shader_parameter/shift_strength = 0.0 +shader_parameter/blur_strength = 0.0 +shader_parameter/vignette_alpha = 0.347 +shader_parameter/vignette_inner = 0.633 +shader_parameter/vignette_outer = 1.339 + +[sub_resource type="Curve" id="Curve_f8hvs"] +_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(0.501961, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] +point_count = 3 + [node name="Root" type="Node3D"] [node name="GameManager" type="Node3D" parent="."] @@ -21,6 +34,7 @@ script = ExtResource("1_q2t80") [node name="Stage" type="SubViewportContainer" parent="GameManager"] texture_filter = 2 +material = SubResource("ShaderMaterial_b4sw2") offset_right = 640.0 offset_bottom = 360.0 scale = Vector2(1, 1.414) @@ -45,6 +59,7 @@ size = 7.2 frustum_offset = Vector2(2, 0) far = 20.0 script = ExtResource("4_yqiun") +global_effect_curve = SubResource("Curve_f8hvs") [node name="CharacterManager" type="Node3D" parent="GameManager/Stage/SubViewport"] script = ExtResource("4_oonkb") @@ -52,17 +67,24 @@ script = ExtResource("4_oonkb") [node name="EffectManager" type="Node3D" parent="GameManager/Stage/SubViewport"] script = ExtResource("8_0jv87") +[node name="CSGBox3D" type="CSGBox3D" parent="GameManager/Stage/SubViewport"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.36529, 0) + [node name="UIManager" type="Node3D" parent="GameManager"] process_mode = 3 script = ExtResource("7_wa6ef") [node name="HudScreen" parent="GameManager/UIManager" instance=ExtResource("7_gx646")] +visible = false [node name="StatusScreen" parent="GameManager/UIManager" instance=ExtResource("9_bki0o")] +visible = false [node name="MenuScreen" parent="GameManager/UIManager" instance=ExtResource("10_sky2n")] +visible = false [node name="ProfileScreen" parent="GameManager/UIManager" instance=ExtResource("6_u1fxn")] +visible = false [node name="InputManager" type="Node3D" parent="GameManager"] process_mode = 3 diff --git a/scene/ui/hud_screen.tscn b/scene/ui/hud_screen.tscn index 8fe63f2..287d16e 100644 --- a/scene/ui/hud_screen.tscn +++ b/scene/ui/hud_screen.tscn @@ -11,7 +11,7 @@ [ext_resource type="Texture2D" uid="uid://0f3lam5c3k0y" path="res://resource/ui/hud/player_status_hp.png" id="5_b0cyb"] [ext_resource type="Script" path="res://script/ui/hud/lock_item.gd" id="5_usy8x"] [ext_resource type="Texture2D" uid="uid://g4b4cjfdaxsx" path="res://resource/ui/hud/player_status_mp_sub_empty.png" id="6_fqaaa"] -[ext_resource type="Texture2D" uid="uid://dx2vp753yvh4y" path="res://render/texture/shape/lock.png" id="6_hmslt"] +[ext_resource type="Texture2D" uid="uid://dx2vp753yvh4y" path="res://render/texture/decal/lock.png" id="6_hmslt"] [ext_resource type="Script" path="res://script/ui/hud/weapon_item.gd" id="7_3g1k3"] [ext_resource type="Texture2D" uid="uid://bvuv86ujfaqfx" path="res://resource/ui/hud/player_status_mp_sub.png" id="7_wiq06"] [ext_resource type="Texture2D" uid="uid://bp7cve5pxkvv0" path="res://resource/ui/hud/boss_status_hp_empty.png" id="9_3sg6t"] diff --git a/script/_global/enum.gd b/script/_global/enum.gd index abcd02b..b96dd5e 100644 --- a/script/_global/enum.gd +++ b/script/_global/enum.gd @@ -12,3 +12,5 @@ enum EStance { } enum EBreakLevel {None, Cancel, Jump, Break, Walk} #不可打断 取消技打断 跳跃打断 连招打断 行走打断 enum ECoreType {Free ,Lock, Passive} + +enum EGlobalEffect {CameraSize,CameraShake,ColorShift,Blur} diff --git a/script/_global/global.gd b/script/_global/global.gd index 6f1d03e..2d8a6d7 100644 --- a/script/_global/global.gd +++ b/script/_global/global.gd @@ -1,5 +1,6 @@ extends Node3D +var view_mgr : ViewManager var camera_mgr : CameraManager var character_mgr : CharacterManager var level_mgr : LevelManager diff --git a/script/_global/stage.gd b/script/_global/stage.gd index eb5f896..494a639 100644 --- a/script/_global/stage.gd +++ b/script/_global/stage.gd @@ -1,7 +1,12 @@ extends SubViewportContainer +class_name ViewManager func _ready(): + Global.view_mgr = self var camera = Global.camera_mgr as CameraManager size = camera.stage_size scale = camera.stage_scale position.y = - camera.stage_offset_y + +func set_post_processing(name:String,value:float): + material.set_shader_parameter(name,value) diff --git a/script/character/battle.gd b/script/character/battle.gd index 9044e83..dbf29e0 100644 --- a/script/character/battle.gd +++ b/script/character/battle.gd @@ -172,6 +172,17 @@ func settle(hit_info:HitInfo) -> bool: character_from.add_buff("pause",attack.pause_time) character_to.add_buff("pause",attack.pause_time) + #全局特效 + if is_kill: + Global.camera_mgr.effect_strong() + elif is_break_stun || is_break_stun: + Global.camera_mgr.effect_strong() + elif is_break_skill: + match break_level_sub: + 1:Global.camera_mgr.effect_normal() + 2:Global.camera_mgr.effect_mid() + 3:Global.camera_mgr.effect_strong() + #伤害跳字 character_to.show_hit_damage(damage) @@ -199,3 +210,6 @@ func add_mp(value:float): character.remove_buff("mp_recover") else: character.set_status("mp_sub",mp_sub+value) + +func check_ground(): + skill.on_check_ground() diff --git a/script/character/buff.gd b/script/character/buff.gd index 4c51b4a..c10821e 100644 --- a/script/character/buff.gd +++ b/script/character/buff.gd @@ -145,7 +145,7 @@ func on_start_flash_white(rate):status.flash_white_rate = 1 func on_update_flash_white(rate):status.flash_white_rate = 1 - rate func on_end_flash_white(rate):status.flash_white_rate = 0 -func on_update_shake_x(rate):status.shake_offset = Vector3((sin(rate * PI * 4) - 0.5)*0.02,0,0); +func on_update_shake_x(rate):status.shake_offset = Vector3((sin(rate * PI * 5) - 0.5)*0.06,0,0); func on_end_shake_x(rate):status.shake_offset = Vector3.ZERO func on_start_deformation(rate):status.deformation_rate = 1; diff --git a/script/character/effect.gd b/script/character/effect.gd index 02438ff..b070a34 100644 --- a/script/character/effect.gd +++ b/script/character/effect.gd @@ -15,7 +15,7 @@ var rediness : Decal var is_pause : bool var is_right : bool -func init(type:Enum.ECharacterType,body_scale:Vector3): +func init(type:Enum.ECharacterType ,body_scale:Vector3): match type: Enum.ECharacterType.Player:rediness = readiness_hero.instantiate() Enum.ECharacterType.Monster:rediness = readiness_monster.instantiate() @@ -55,7 +55,12 @@ func cast_image(res:Resource): func cast_after_image():cast_image(afterimage) func cast_corpse():cast_image(corpse) -func cast_attack_particle(): + +func cast_attack_particle():_cast_attack_particle(true) +func cast_attack_particle_release():_cast_attack_particle(false) +func cast_particle(resource:Resource):_cast_particle(resource,false) + +func _cast_attack_particle(is_attach:bool): if !status.skill_cfg: return var attack_particle = status.skill_cfg.get_attack_particle(status.skill_attack_effect_index) @@ -63,21 +68,25 @@ func cast_attack_particle(): if !attack_particle: print("未配置技能攻击特效:",status.skill_cfg.resource_path) return - cast_particle(attack_particle) - -func cast_particle(resource:Resource): + _cast_particle(attack_particle,is_attach) + +func _cast_particle(resource:Resource ,is_attach:bool): if !resource: print("未配置技能特效") return var new_particle = resource.instantiate() as Particle - new_particle.position = status.basic_offset new_particle.name = "particle" var dir = status.skill_dir as Vector2 dir.x = abs(dir.x) var angle = dir.angle_to(Vector2.RIGHT) new_particle.rotation.y = angle if is_right else -angle new_particle.scale.x = abs(new_particle.scale.x) * (1 if is_right else -1) - add_child(new_particle) + if is_attach: + new_particle.position = status.basic_offset + add_child(new_particle) + else: + new_particle.position = character.view_pos() + SignalManager.effect_create.emit(new_particle) func release_effect(): for child in get_children(): diff --git a/script/character/skill.gd b/script/character/skill.gd index 36f0e3d..0b1abc8 100644 --- a/script/character/skill.gd +++ b/script/character/skill.gd @@ -63,5 +63,13 @@ func on_attack_miss(): # 攻击未命中时跳帧 advance(Setting.animation_frame_rate) +func on_check_ground(): + if status.is_on_floor: + # 落地检测成功时跳帧 + advance(Setting.animation_frame_rate) + else: + # 落地检测失败时回退半帧 + seek(current_animation_position - Setting.animation_frame_rate / 2 ,true,true) + func _on_animation_finished(_anim_name): cancel_skill() diff --git a/script/character/view.gd b/script/character/view.gd index ef2c5e9..3fe1500 100644 --- a/script/character/view.gd +++ b/script/character/view.gd @@ -159,11 +159,12 @@ func _update_material(): var material = material_override as ShaderMaterial var material2 = material_override.next_pass as ShaderMaterial var tex = sprite_frames.get_frame_texture(animation,frame) + var deformation_rate = status.deformation_rate * (0.5 if status.is_floating else 0.4) material2.set_shader_parameter("flash_white",status.flash_white_rate) material.set_shader_parameter("deformation_dir",status.deformation_dir) material2.set_shader_parameter("deformation_dir",status.deformation_dir) - material.set_shader_parameter("deformation_rate",status.deformation_rate*0.4) - material2.set_shader_parameter("deformation_rate",status.deformation_rate*0.4) + material.set_shader_parameter("deformation_rate",deformation_rate) + material2.set_shader_parameter("deformation_rate",deformation_rate) material.set_shader_parameter("tex",tex) material2.set_shader_parameter("tex",tex) diff --git a/script/manager/camera_manager.gd b/script/manager/camera_manager.gd index e06f9e3..6b04a84 100644 --- a/script/manager/camera_manager.gd +++ b/script/manager/camera_manager.gd @@ -1,13 +1,17 @@ extends Camera3D class_name CameraManager +@export var global_effect_curve : Curve var target:int +var target_character_pos:Vector2 = Vector2.ZERO var target_pos:Vector2 = Vector2.ZERO var target_pos_y:float var target_pos_now:Vector2 = Vector2.ZERO var level_size:Vector2 var offset:float = 5 +var shake_offset_x:float var camera_limit = Vector3(6.4,1.04,3.6) #x,up,z-downd +var camera_size = 7.2 var basic_size = Vector2(640,360) var scale_y = cos(deg_to_rad(45.0)) * 2.0 #1.414 @@ -18,6 +22,14 @@ var stage_offset_y = (scale_y - 1.0) * 0.5 / sample_rate * stage_size.y var screen_pos_scale = Vector2(sample_rate,sample_rate/scale_y) var screen_pos_offset = Vector2(0,-stage_offset_y) +var global_effect_list = [] + +class GlobalEffect: + var effect_type : Enum.EGlobalEffect + var life_time : float + var life_time_now : float + var value : float + func _ready(): Global.camera_mgr = self SignalManager.character_create.connect(on_character_create) @@ -28,20 +40,42 @@ func _ready(): SignalManager.level_loading_end.connect(on_level_loading_end) func _process(delta): + update_global_effect(delta) + update_camera_pos(delta) + +func update_global_effect(delta): + var remove_list = [] + for global_effect : GlobalEffect in global_effect_list: + global_effect.life_time_now += delta + global_effect.life_time_now = min(global_effect.life_time_now,global_effect.life_time) + if global_effect.life_time_now == global_effect.life_time: + remove_list.append(global_effect) + var rate = global_effect.life_time_now/global_effect.life_time + var value = global_effect_curve.sample(rate)*global_effect.value + match global_effect.effect_type: + Enum.EGlobalEffect.CameraSize:size = camera_size * (1 - 0.2*value);refresh_target_pos() + Enum.EGlobalEffect.CameraShake: shake_offset_x = (sin(rate * PI * 10) - 0.5)*0.04*value + Enum.EGlobalEffect.ColorShift:Global.view_mgr.set_post_processing("shift_strength",value) + Enum.EGlobalEffect.Blur:Global.view_mgr.set_post_processing("blur_strength",value) + for global_effect : GlobalEffect in remove_list: + global_effect_list.erase(global_effect) + +func update_camera_pos(delta): target_pos_lerp(0,delta,5) target_pos_lerp(1,delta,5) - position.x = target_pos_now.x + position.x = target_pos_now.x + shake_offset_x position.z = target_pos_now.y + target_pos_y + offset position.y = target_pos_y + offset func target_pos_lerp(index:int,delta:float,delta_scale:float): - var diff = abs(target_pos_now[index] - target_pos[index]) + var target_pos_real = target_pos + var diff = abs(target_pos_now[index] - target_pos_real[index]) if diff < Setting.pixel_size: - target_pos_now[index] = Util.snap_float(target_pos[index]) + target_pos_now[index] = Util.snap_float(target_pos_real[index]) else: var weight_min = Setting.pixel_size / 2 / diff var weight = max(delta * delta_scale,weight_min) - target_pos_now[index] = lerp(target_pos_now[index], target_pos[index], weight) + target_pos_now[index] = lerp(target_pos_now[index], target_pos_real[index], weight) func on_character_create(id:int,type:int,pos:Vector3): if type == Enum.ECharacterType.Player: @@ -52,16 +86,24 @@ func on_character_create(id:int,type:int,pos:Vector3): func on_character_pos_changed(id:int,pos:Vector3): if id == target: - set_target_pos(pos) + target_character_pos.x = pos.x + target_character_pos.y = pos.z + refresh_target_pos() func on_character_hit_floor(id:int,pos:Vector3): if id == target: target_pos_y = pos.y - set_target_pos(pos) + refresh_target_pos() -func set_target_pos(pos:Vector3): - target_pos.x = clamp(pos.x,camera_limit.x,level_size.x-camera_limit.x) - target_pos.y = clamp(pos.z-target_pos_y,camera_limit.y-target_pos_y,level_size.y-camera_limit.z-target_pos_y) +func refresh_target_pos(): + var pos = target_character_pos + var camera_size_diff = (camera_size - size)/2.0 + var x_min = camera_limit.x - camera_size_diff + var x_max = level_size.x - camera_limit.x + camera_size_diff + var y_min = camera_limit.y - target_pos_y - camera_size_diff + var y_max = level_size.y - camera_limit.z - target_pos_y + camera_size_diff + target_pos.x = clamp(pos.x,x_min,x_max) + target_pos.y = clamp(pos.y-target_pos_y,y_min,y_max) func on_character_destroy(id:int):target = 0 func on_level_size_change(size:Vector2):level_size = size @@ -77,4 +119,35 @@ func get_screen_pos(pos:Vector3) -> Vector2: ret.x += screen_pos_offset.x ret.y += screen_pos_offset.y return ret + +func add_global_effect(effect_type:Enum.EGlobalEffect ,life_time:float ,value:float): + for global_effect : GlobalEffect in global_effect_list: + if global_effect.effect_type == effect_type: + global_effect.life_time = life_time + global_effect.life_time_now = 0 + global_effect.value = value + return + var global_effect = GlobalEffect.new() + global_effect.effect_type = effect_type + global_effect.life_time = life_time + global_effect.life_time_now = 0 + global_effect.value = value + global_effect_list.append(global_effect) + +func effect_normal(): + add_global_effect(Enum.EGlobalEffect.CameraShake,0.2,0.2) + add_global_effect(Enum.EGlobalEffect.CameraSize,0.2,0.02) + add_global_effect(Enum.EGlobalEffect.ColorShift,0.2,0.2) + add_global_effect(Enum.EGlobalEffect.Blur,0.2,0.1) + +func effect_mid(): + add_global_effect(Enum.EGlobalEffect.CameraShake,0.3,0.4) + add_global_effect(Enum.EGlobalEffect.CameraSize,0.3,0.2) + add_global_effect(Enum.EGlobalEffect.ColorShift,0.3,0.4) + add_global_effect(Enum.EGlobalEffect.Blur,0.3,0.4) +func effect_strong(): + add_global_effect(Enum.EGlobalEffect.CameraShake,0.4,0.8) + add_global_effect(Enum.EGlobalEffect.CameraSize,0.4,0.4) + add_global_effect(Enum.EGlobalEffect.ColorShift,0.4,0.8) + add_global_effect(Enum.EGlobalEffect.Blur,0.4,0.8)