From e573251707cae89fb2f386b86bdd6e5dc46674d2 Mon Sep 17 00:00:00 2001 From: "kaosat.dev" Date: Wed, 7 Aug 2024 01:36:06 +0200 Subject: [PATCH] feat(Blenvy:Bevy): more work done on save & load (heavy wip) * more coherent logic between save & load * added resources & boilerplate for loading side * experimenting with save & load logic, filtering of components etc * updated assets for more testing * added bevy-inspector-egui to some examples for testing --- crates/blenvy/old/README_save_load.md | 10 +- crates/blenvy/src/save_load/common.rs | 45 ++ crates/blenvy/src/save_load/loading.rs | 118 ++++ crates/blenvy/src/save_load/mod.rs | 50 +- crates/blenvy/src/save_load/old/loading.rs | 4 +- crates/blenvy/src/save_load/old/mod_old.rs | 4 +- crates/blenvy/src/save_load/old/saving.rs | 6 +- crates/blenvy/src/save_load/saving.rs | 69 ++- examples/save_load/Cargo.toml | 7 +- examples/save_load/art/save_load.blend | Bin 1016400 -> 1017452 bytes examples/save_load/assets/.save.ron | 1 + .../assets/blueprints/Dynamic_hierarchy.glb | Bin 0 -> 7092 bytes .../blueprints/Dynamic_hierarchy.meta.ron | 5 + .../blueprints/Dynamic_inside_static.glb | Bin 0 -> 472 bytes .../blueprints/Dynamic_inside_static.meta.ron | 7 + .../save_load/assets/blueprints/Mover.glb | Bin 33824 -> 33888 bytes .../save_load/assets/blueprints/Pillar.glb | Bin 1916 -> 1980 bytes examples/save_load/assets/levels/World.glb | Bin 3004 -> 3680 bytes .../save_load/assets/levels/World.meta.ron | 4 + .../save_load/assets/levels/World_dynamic.glb | Bin 700 -> 1360 bytes .../assets/materials/Dots Stroke.glb | Bin 0 -> 1764 bytes .../assets/materials/Material.001.glb | Bin 0 -> 1772 bytes examples/save_load/assets/materials/Stone.glb | Bin 0 -> 1752 bytes examples/save_load/assets/registry.json | 525 ++++++++++++++++++ examples/save_load/assets/scenes/save.scn.ron | 195 +++++-- .../assets/scenes/save.scn.ron.save.ron | 1 + examples/save_load/src/game/mod.rs | 6 +- examples/save_load/src/main.rs | 52 +- testing/bevy_example/Cargo.toml | 5 +- 29 files changed, 1001 insertions(+), 113 deletions(-) create mode 100644 crates/blenvy/src/save_load/common.rs create mode 100644 crates/blenvy/src/save_load/loading.rs create mode 100644 examples/save_load/assets/.save.ron create mode 100644 examples/save_load/assets/blueprints/Dynamic_hierarchy.glb create mode 100644 examples/save_load/assets/blueprints/Dynamic_hierarchy.meta.ron create mode 100644 examples/save_load/assets/blueprints/Dynamic_inside_static.glb create mode 100644 examples/save_load/assets/blueprints/Dynamic_inside_static.meta.ron create mode 100644 examples/save_load/assets/materials/Dots Stroke.glb create mode 100644 examples/save_load/assets/materials/Material.001.glb create mode 100644 examples/save_load/assets/materials/Stone.glb create mode 100644 examples/save_load/assets/scenes/save.scn.ron.save.ron diff --git a/crates/blenvy/old/README_save_load.md b/crates/blenvy/old/README_save_load.md index ec19e59..b4b9ff0 100644 --- a/crates/blenvy/old/README_save_load.md +++ b/crates/blenvy/old/README_save_load.md @@ -58,12 +58,12 @@ fn main() { // add a system to trigger saving pub fn request_save( - mut save_requests: EventWriter, + mut save_requests: EventWriter, keycode: Res>, ) { if keycode.just_pressed(KeyCode::S) { - save_requests.send(SaveRequest { + save_requests.send(SavingRequest { path: "save.scn.ron".into(), }) } @@ -225,16 +225,16 @@ fn main() { ## Events -- to trigger **saving** use the ```SaveRequest``` event +- to trigger **saving** use the ```SavingRequest``` event ```rust no_run // add a system to trigger saving pub fn request_save( - mut save_requests: EventWriter, + mut save_requests: EventWriter, keycode: Res>, ) { if keycode.just_pressed(KeyCode::S) { - save_requests.send(SaveRequest { + save_requests.send(SavingRequest { path: "save.scn.ron".into(), }) } diff --git a/crates/blenvy/src/save_load/common.rs b/crates/blenvy/src/save_load/common.rs new file mode 100644 index 0000000..1b5f4f4 --- /dev/null +++ b/crates/blenvy/src/save_load/common.rs @@ -0,0 +1,45 @@ +pub use bevy::prelude::*; + +use crate::{BlueprintInfo, GameWorldTag, HideUntilReady, SpawnBlueprint}; + +use super::{BlueprintWorld, Dynamic}; + +pub(crate) fn spawn_from_blueprintworld( + added_blueprint_worlds: Query<(Entity, &BlueprintWorld), Added >, + mut commands: Commands, +){ + for (entity, blueprint_world) in added_blueprint_worlds.iter(){ + println!("added blueprintWorld {:?}", blueprint_world); + + // here we spawn the static part our game world/level, which is also a blueprint ! + let static_world = commands.spawn(( + BlueprintInfo::from_path(blueprint_world.path.as_str()), // all we need is a Blueprint info... + SpawnBlueprint, // and spawnblueprint to tell blenvy to spawn the blueprint now + HideUntilReady, // only reveal the level once it is ready + GameWorldTag, + )).id(); + + // here we spawn the dynamic entities part of our game world/level, which is also a blueprint ! + let dynamic_world = commands.spawn(( + BlueprintInfo::from_path(blueprint_world.path.replace(".glb", "_dynamic.glb").replace(".gltf", "_dynamic.gltf").as_str()), // all we need is a Blueprint info... + SpawnBlueprint, // and spawnblueprint to tell blenvy to spawn the blueprint now + HideUntilReady, // only reveal the level once it is ready + GameWorldTag + )).id(); + + // commands.entity(entity).add_child(static_world); + // commands.entity(entity).add_child(dynamic_world); + } +} + +pub(crate) fn inject_dynamic_into_children( + added_dynamic: Query >, + all_children: Query<&Children>, + mut commands: Commands, +) { + for entity in added_dynamic.iter() { + for child in all_children.iter_descendants(entity) { + commands.entity(child).insert(Dynamic); + } + } +} \ No newline at end of file diff --git a/crates/blenvy/src/save_load/loading.rs b/crates/blenvy/src/save_load/loading.rs new file mode 100644 index 0000000..b98c09d --- /dev/null +++ b/crates/blenvy/src/save_load/loading.rs @@ -0,0 +1,118 @@ +use std::path::Path; + +use bevy::prelude::*; + +use crate::{BlenvyConfig, BlueprintInfo, DynamicEntitiesRoot, GameWorldTag, HideUntilReady, SpawnBlueprint}; + + +#[derive(Event)] +pub struct LoadingRequest { + pub path: String, +} + +#[derive(Event)] +pub struct LoadingFinished; // TODO: merge the two above + +/// resource that keeps track of the current load request +#[derive(Resource, Default)] +pub struct LoadingRequested { + pub path: String, +} + + +/* +- Loading + - load request recieved + - pause things ? + - unload everything + - load static data using blueprintInfo + - load dynamic data from save file + + +General: + * wrap loading a bevy scene as a blueprint ? + * meh, has no assets & co, different logic ? +*/ +pub fn process_load_requests( + mut load_requests: EventReader, + mut commands: Commands +) { + let mut save_path: String = "".into(); + for load_request in load_requests.read() { + if !load_request.path.is_empty() { + save_path.clone_from(&load_request.path); + } + } + if !save_path.is_empty() { + commands.insert_resource(LoadingRequested { path: save_path }); + } +} + +pub fn should_load(loading_requests: Option>) -> bool { + return resource_exists::(loading_requests) +} + +// TODO: replace with generic despawner ? +pub(crate) fn prepare_loading( + mut commands: Commands, + gameworlds: Query>, + +) { + for e in gameworlds.iter() { + info!("--loading: despawn old world/level"); + commands.entity(e).despawn_recursive(); + } +} + + + + +pub(crate) fn load_game( + mut commands: Commands, + asset_server: Res, + load_request: Res, +) { + info!("--loading: load dynamic data"); + + //let save_path = Path::new(load_request.path.clone().as_str()); + + info!("LOADING FROM {:?}", load_request.path.clone()); + + /*let world_root = commands + .spawn(( + bevy::prelude::Name::from("world"), + GameWorldTag, + TransformBundle::default(), + InheritedVisibility::default(), + )) + .id();*/ + + // and we fill it with dynamic data + // let input = std::fs::read(&path)?; + let dynamic_data = commands + .spawn(( + DynamicSceneBundle { + scene: asset_server.load(load_request.path.clone()), + ..default() + }, + bevy::prelude::Name::from("World_dynamic"), + DynamicEntitiesRoot, + GameWorldTag + )) + .id(); + + let static_data = commands.spawn(( + BlueprintInfo::from_path("levels/World.glb"), // all we need is a Blueprint info... + SpawnBlueprint, + HideUntilReady, + GameWorldTag, + )).id(); + + //commands.entity(world_root).add_child(static_data); + //commands.entity(world_root).add_child(dynamic_data); + + // commands.insert_resource(LoadFirstStageDone); + + info!("--loading: loaded dynamic data"); + commands.remove_resource::(); +} \ No newline at end of file diff --git a/crates/blenvy/src/save_load/mod.rs b/crates/blenvy/src/save_load/mod.rs index e88b968..ae982a4 100644 --- a/crates/blenvy/src/save_load/mod.rs +++ b/crates/blenvy/src/save_load/mod.rs @@ -1,5 +1,15 @@ +use std::path::Path; use bevy::prelude::*; +pub mod common; +pub use common::*; + +pub mod saving; +pub use saving::*; + +pub mod loading; +pub use loading::*; + #[derive(Component, Reflect, Debug, Default)] #[reflect(Component)] /// component used to mark any entity as Dynamic: aka add this to make sure your entity is going to be saved @@ -34,8 +44,22 @@ pub struct StaticEntitiesBlueprintInfo { } -pub mod saving; -pub use saving::*; + +#[derive(Component, Debug)] +pub struct BlueprintWorld{ + pub path: String, +} +impl BlueprintWorld { + pub fn from_path(path: &str) -> BlueprintWorld { + let p = Path::new(&path); + return BlueprintWorld { + // name: p.file_stem().unwrap().to_os_string().into_string().unwrap(), // seriously ? , also unwraps !! + path: path.into(), + }; + } +} + + #[derive(Debug, Clone, Default)] /// Plugin for saving & loading @@ -46,13 +70,33 @@ impl Plugin for SaveLoadPlugin { app.register_type::() .register_type::() - .add_event::() + .add_event::() .add_event::() + + // common + .add_systems(Update, (spawn_from_blueprintworld, )) // inject_dynamic_into_children + + // saving + .add_systems(Update, process_save_requests) .add_systems( Update, (prepare_save_game, apply_deferred, save_game, cleanup_save) .chain() .run_if(should_save), + + ) + + .add_event::() + .add_event::() + //loading + .add_systems(Update, process_load_requests) + .add_systems( + Update, + (prepare_loading, apply_deferred, load_game) + .chain() + .run_if(should_load), + //.run_if(not(resource_exists::)) + // .in_set(LoadingSet::Load), ) ; } diff --git a/crates/blenvy/src/save_load/old/loading.rs b/crates/blenvy/src/save_load/old/loading.rs index 9cc7fd8..f9f87ae 100644 --- a/crates/blenvy/src/save_load/old/loading.rs +++ b/crates/blenvy/src/save_load/old/loading.rs @@ -5,7 +5,7 @@ use std::path::Path; use crate::{DynamicEntitiesRoot, SaveLoadConfig, StaticEntitiesRoot, StaticEntitiesStorage}; #[derive(Event)] -pub struct LoadRequest { +pub struct LoadingRequest { pub path: String, } @@ -26,7 +26,7 @@ pub(crate) struct CleanupScene; /// helper system that "converts" loadRequest events to `LoadRequested` resources pub(crate) fn mark_load_requested( - mut load_requests: EventReader, + mut load_requests: EventReader, mut commands: Commands, ) { let mut save_path: String = "".into(); diff --git a/crates/blenvy/src/save_load/old/mod_old.rs b/crates/blenvy/src/save_load/old/mod_old.rs index fb9e2a0..f59111c 100644 --- a/crates/blenvy/src/save_load/old/mod_old.rs +++ b/crates/blenvy/src/save_load/old/mod_old.rs @@ -41,8 +41,8 @@ impl Plugin for SaveLoadPlugin { .register_type::() .register_type::() .register_type::() - .add_event::() - .add_event::() + .add_event::() + .add_event::() .add_event::() .add_event::() .configure_sets( diff --git a/crates/blenvy/src/save_load/old/saving.rs b/crates/blenvy/src/save_load/old/saving.rs index 2c2812d..3156c9b 100644 --- a/crates/blenvy/src/save_load/old/saving.rs +++ b/crates/blenvy/src/save_load/old/saving.rs @@ -9,14 +9,14 @@ use std::path::Path; use crate::{DynamicEntitiesRoot, SaveLoadConfig, StaticEntitiesRoot}; #[derive(Event, Debug)] -pub struct SaveRequest { +pub struct SavingRequest { pub path: String, } #[derive(Event)] pub struct SavingFinished; -pub fn should_save(save_requests: EventReader) -> bool { +pub fn should_save(save_requests: EventReader) -> bool { !save_requests.is_empty() } @@ -77,7 +77,7 @@ pub(crate) fn save_game(world: &mut World) { info!("saving"); let mut save_path: String = "".into(); - let mut events = world.resource_mut::>(); + let mut events = world.resource_mut::>(); for event in events.get_reader().read(&events) { info!("SAVE EVENT !! {:?}", event); diff --git a/crates/blenvy/src/save_load/saving.rs b/crates/blenvy/src/save_load/saving.rs index b94ba43..9971786 100644 --- a/crates/blenvy/src/save_load/saving.rs +++ b/crates/blenvy/src/save_load/saving.rs @@ -11,14 +11,38 @@ use crate::{BlenvyConfig, BlueprintInfo, Dynamic, FromBlueprint, RootEntity, Spa use super::{DynamicEntitiesRoot, OriginalParent, StaticEntitiesRoot}; #[derive(Event, Debug)] -pub struct SaveRequest { +pub struct SavingRequest { pub path: String, } #[derive(Event)] pub struct SaveFinished; // TODO: merge the the events above -pub fn should_save(save_requests: EventReader) -> bool { - !save_requests.is_empty() + +/// resource that keeps track of the current save request +#[derive(Resource, Default)] +pub struct SavingRequested { + pub path: String, +} + + +pub fn process_save_requests( + mut saving_requests: EventReader, + mut commands: Commands +) { + let mut save_path: String = "".into(); + for saving_request in saving_requests.read() { + if !saving_request.path.is_empty() { + save_path.clone_from(&saving_request.path); + } + } + if !save_path.is_empty() { + commands.insert_resource(SavingRequested { path: save_path }); + } +} + + +pub fn should_save(saving_requests: Option>) -> bool { + return resource_exists::(saving_requests) } @@ -31,12 +55,12 @@ pub(crate) fn prepare_save_game( mut commands: Commands, ) { - for entity in saveables.iter() { + for entity in saveables.iter() { // FIXME : not sure about this one commands.entity(entity).insert(SpawnBlueprint); } for (entity, parent, children) in dynamic_entities.iter() { - println!("prepare save game"); + println!("prepare save game for entity"); let parent = parent.get(); if root_entities.contains(parent) { commands.entity(entity).insert(RootEntity); @@ -66,7 +90,7 @@ pub(crate) fn save_game(world: &mut World) { info!("saving"); let mut save_path: String = "".into(); - let mut events = world.resource_mut::>(); + let mut events = world.resource_mut::>(); for event in events.get_reader().read(&events) { info!("SAVE EVENT !! {:?}", event); @@ -75,14 +99,14 @@ pub(crate) fn save_game(world: &mut World) { events.clear(); let saveable_entities: Vec = world - // .query_filtered::, Without, Without)>() .query_filtered::, Without)>() + // .query_filtered::, Without, Without)>() .iter(world) .collect(); let saveable_root_entities: Vec = world - .query_filtered::, With)>() - //.query_filtered::, Without, With)>() + // .query_filtered::, With)>() + .query_filtered::, Without, With)>() .iter(world) .collect(); @@ -97,7 +121,7 @@ pub(crate) fn save_game(world: &mut World) { let filter = config .save_component_filter .clone() - .allow::() + //.allow::() // TODO: add back .allow::() .allow::() .allow::() @@ -115,7 +139,6 @@ pub(crate) fn save_game(world: &mut World) { let filter_resources = config.clone() .save_resource_filter .deny::>() - .clone(); //.allow::(); @@ -150,22 +173,37 @@ pub(crate) fn save_game(world: &mut World) { .serialize(&world.resource::().read()) .expect("filtered scene should serialize correctly"); - let save_path = Path::new("assets") + let save_path_assets = Path::new("assets") //.join(&config.save_path) .join(Path::new(save_path.as_str())); // Path::new(&save_load_config.save_path).join(Path::new(save_path.as_str())); - info!("saving game to {:?}", save_path); + info!("saving game to {:?}", save_path_assets); // world.send_event(SavingFinished); + let bla = save_path_assets.clone().to_string_lossy().into_owned(); #[cfg(not(target_arch = "wasm32"))] IoTaskPool::get() .spawn(async move { // Write the scene RON data to file - File::create(save_path) + File::create(save_path_assets) .and_then(|mut file| file.write(serialized_scene.as_bytes())) .expect("Error while writing save to file"); }) .detach(); + + + let static_world_path = "levels/world.glb"; + let fake_foo = format!("(dynamic: {bla}, static: {static_world_path})"); + let real_save_path = format!("{bla}.save.ron"); + #[cfg(not(target_arch = "wasm32"))] + IoTaskPool::get() + .spawn(async move { + // Write the scene RON data to file + File::create(real_save_path) + .and_then(|mut file| file.write(fake_foo.as_bytes())) + .expect("Error while writing scene to file"); + }) + .detach(); } pub(crate) fn cleanup_save( @@ -178,4 +216,7 @@ pub(crate) fn cleanup_save( } // commands.remove_resource::(); saving_finished.send(SaveFinished); + + commands.remove_resource::(); + } \ No newline at end of file diff --git a/examples/save_load/Cargo.toml b/examples/save_load/Cargo.toml index 55570e6..e2a8f19 100644 --- a/examples/save_load/Cargo.toml +++ b/examples/save_load/Cargo.toml @@ -10,4 +10,9 @@ blenvy = { path = "../../crates/blenvy" } serde_json = "1.0.108" serde = "1.0.193" -rand = "0.8.5" \ No newline at end of file +rand = "0.8.5" + +bevy-inspector-egui = { version = "0.25.1"} + +[dev-dependencies] +bevy-inspector-egui = { version = "0.25.1"} \ No newline at end of file diff --git a/examples/save_load/art/save_load.blend b/examples/save_load/art/save_load.blend index bf68026337c98e2a999eee6a1d55737fb9f676c5..a66270577db105a371bb1a8b9412323f4e1b5327 100644 GIT binary patch delta 125122 zcmc${d3;sX)i-|6%}ux&fFJ}yNWx(>KnMXLGG<^V0tN&`K)4Pl&NwR$iKvJ;1&(qM z6^=tKQimvgyw+Nbwzbq+jn-Nms#k5Twbr7wKGxTI-?i3W-*fLhBz>OW@BO3UbJ=I_ zv(|U7wf5S3uf5OIab4}FH`lfnMShw+^4qQbSLSS9xw`kGmp;DX`K)87Oqr78UwwUj za?YGN@|!(-c9MV7r%z8#m@pw(Q&W@i8$W)0@~ESZlCoK|W(h6xPMkP#-%XLntz)N6 zo0jBXU0q$031-Zgk(@bmrT{iHG$hB49hD*qwtV$`)& z05j;Z#~z!UKYxC5(V|7krluy5oF!#VYHMqg3_=n~o{zbF^5n_MlTJEGXeUjYB${&> zYr~pyT2)mgDQn4fYI%Wgf}Tb$22@{ja(2ILJo z4hH>qDXXwx!2;j-UD2|bq`uR$`yl7x{9Zlk>yp#wOiMP*6f--!^9MOi-3uHq-*(nh z`b=qobI6W5E%}jc1qD*{ZC=!Qsb`^+$T#^zJ#0B{&o9{4Jt~KEDtlgSU2=}otH%H; z>EpC?FLo*m3XkLF=t?w{vnt0NbIkup$Nt8uJl1nG)zLj~daY4qdad)f{4$cY&}kdo zM+9P3AZJJKQX^!Uk-HV!#A!(YrSCB-NYC)Eu(7Ah5AIB!i*x-p? z1x^PUx-Gx38%r>=w%&O!f0$$UCX@CmbgJn*HG+|)M?r6PFYXU)C^qWUsZ*U-)|5H1 zsNId-m1Q}$_avvOKjHR@beleF8e7L%L+x&KBJ1QwoftJv;Q*$IZX+=sCb3YZNehJJ z5E-d0Kaw+x3^cdSS>1iGQ`p_uv7Jyp9U65i3k&;Et^wZiEMB~r9Hzl{m^Hme5Ms(zJMyyGlV{GQp@%$~eJ3HFYAQF7eYi7rcG>T=LYr@bGC9<^_{E0Z{6x%(IGrG_3z(5IjLe~a!l128D!b1*+!hwc;_4& zo#Z#&-};RvSu45byoQ;z6ck`t?n_>w$UIzk=D_-CRZD$WEq zN7sR?r;BHts3319$->S zcXBgwa?jxrv?Gr?p1Sw$p45|Q-!Pp=ARgL{7q#V8IPE>zeG9qo zrj2#4_8O>ef!+o;VdEA%hp1~*7DW3E89th(wJ|a`ksFICq;aBTifF2Fevr3-RIhaE z^P?n%8I|kFmmkY7+g4_Vx>$aJ^qrpF$q!`MGgaF8Q5ybex+fobHg6Ka7=uvt0|pH_ zQd$Co4EqKjn*nB8mZUUf8ed@1hl(4&{r0oHb*H zb6)q+PDlUj?D_`s4DkwTLJ^c_6mbn1VraB0hz=Y!Vw~@+Jhbqz!ov*z=FXj)F)#eB zM}Mcj_fTnJ#$nf(F`K&3T+=#~AHsnWkC-!P?mu_^`sB6OU!OeVj5Ct+=FCpcojof# zox0;=d4sa+N%48kJxBI)+NeDXOKBEShcjuZP5 zT)ld=1U)F@l&4`HFlk0}&dV>7K0&SK^)D9To4Qx#v*qE}J$v`34j&o9%5S*hisZ)Y zt`ou6ty`CzN70}BNP$^1XHd}5KW8@alFn866)TdboN`KX>C&Zs8K0jwZyqG)S%|7DBRiAmGB#np zHM2?+4?g+Xs~f13%$81qu|}GJHC(xBRq~pR8$}z|ihrUNi8GIWb5*-JG_rGK$UNM9 zn3Sg1)jM_l%eEEM@J20O-Luju9NecT4=g1mCCTX%t2saJCX6 ztz~e!ru#tWP+=(zPL(u>R65=fsd>Bq{{v0xlYQ%E90a-QwNiU)rjsxTe9 zK9mugMVzTUi^*o(V}_D5v+9x;Z@3_N&2`i|>Tl4A)2{S7hICyt zi}am2)9IPNNJa`1g!LiQ4W%D-?22f&;lqb>#};i^a&BE7X`l&9%s-Amag3C`fM+k( zhMh1;;m%7#i^b0d52GN|-zYj;5rn-VtIChXRK-*>G^`-|wnbZG`&+#C~Kei!$Z2xI&Z?W~1 zWGw}@e>-9l8H~mw3NQ}I>VyJ}g5py!XOA37@l4t}PiG0iWKZLE3=S$?sn3H7)5AM= z=Z&R-yqeVSW8AWonShp|bu?cT4061F6J=Cs%Zr?XC}H&I(X#f1x=2|C9-evB;E^3+3{qAd$4J>1 zbrujee%9`<<0y4OGI@LHPzo<;Z9*eXOVLmoXQR!_moM+q2G?!6A$jdpS0_)PxFJ(_ z)8r_V=ApVzqEYYcbI(a$bjc;j^Jp&Q-`cfnlPg!QNH)@R!Zu=irTv`u%6RcQl*0I- z9DDSHU3krF2B*$FpJ&1oPdxE3&kr_z&;BDEuMdr|6a&~rbDLMMS>q3-XlG8h+gMG67hE7)4fE#CmSF|@lAkyOC??_HW<9TxhVrV(q=mFj-){5ZWn1j<9_}BekJLE>yLabya1ISB zb!hP*{eUMT_&rkgd!CTE53pbJ(gr_{V_62|k*1G&M<0E3a^e)TzHc5hmZB>PR!hhh z!z-wMn$`P8o7bIrrf-XzZn-tNeaFtjY!I}|Ew{Bw9K!(w|Jc88y5*MS?c3et&b#kU z-g(#E$sIfIl04gF^Ol>ES2Z^$&pG$J$r~TZsoXwg_8>7c{h%=*ffJgo&i>^r^h*C%v*QPD+9?^J-a)9Ej-d`A#QufP$$;EPxGahT}JJ8CuzfNhu`789MlH+)@`>_ zpS_xR?@W64-JkryBabE@-?uOM7 zG|V~F*B05P(Q44^M=e$xJ*A?eLbPJvWDR*dvu*qT>Bk`s#n{QEu@!77=dtc%$(p=! z;MOkP)~~c#qCZ**tzNw*dBf%#(@X->?CjFbxl!3oxx1}B?KE=byQopWCuaEJlTRk& zKl+iFXZOALlZ)R?UB5MX#g$jn?#OX|_rA2Kzs#~MRyze7c6otQ-=9n}y|Npdgl2hX z&Gf3gNfVP3CLhfcw3D1tZ*ArjU0`24Yb_n88$U@ zEMI;?@){a}QY}tuQ7fhLcZpYAbnzw0xipi4m-`R*^xgN~m;B!M_aq*_9_O^;;eU{+*xcw@`wiK)q;Lwj-j29EmZq1&m(ugPkwjr+9d-5 z8-}NRZqxJDUyxj|aG`T-_o690te$_tg+jA~rit5Wdfal;Ey)vBo{(%j{wx`WIRxQB z2|IOIPQNm5*c?8`3!)e;+SkzZ%g3DZZah!nY!ME{I{WcrmqQ(j)SWSN*JiQXpEqb4 zxjStpRu*m>Pow6*!hD`(*v7mAn=B|Bb2ZICtd>#p{^Y&)KOlMMjysY!(M*5sb=M~^ z-*9E}-1F8`^{buT#YIkAb+jKZ8s^VmKvgawwVI@zc|o8XM?H1>8nYFb%NE9%#uM{7 zayfyWZtbO76Vp9`d=}(gZwq@<_w- zar0cW@j4klsiCQREg}D9y#_UNq{V9hUbt{wZ0`R*KQ`&gl`CZyRAp@`8ct~bHd1c;+ zW^N3gO!%r0r#x)(rKkVxk0)IAQ|9MY39n8@jT$9Gdc)CUWM#nzvP~4Bpl&(#)X~_bIjuI}F=}2SBzL z+lh}^p8w4c_T!X)Y{&oMSD!(^4Z*P*8+6E!A;}RVMo1&D_b!-aF4eIiSvcNUpt#<7 zC1=#=N=*5M;5x*>xe8dIFMnci#ifV8s(M=qkM zaR*IlyF4-^^*5da*pM6#UAEzh&Bf+|6ltq0in}fz!_soo za+7oX!ZZEUnz1s|vwO1Uqbf%wM;$dbdGxr^PTlN51DKvM8H<~TP0G!|Zt-5vBI!0A zV`=k$5?v;kM0DTYT7fJP(1ib8b7$}+)H|J)WVYp58W4DbV+jg z@h4Cn&dWy+r>(2VK!l83EvvHYWu`rPMfu^)xMxEzF-ms z8qKP08(A>$SeiIEZe~q*q;B2jBwIFKD{GHAv*$XyCzg>a(Ie+9nw+eiyDWM7v>C~{ z_0z?2Jd&|m{NqW7qfBa@BUv1dyU;0Fh4Evn#5dU&*`KIGJIAgXA-=|H^4gJGWg?lQ zmh$XtuhdZ8lPDsYOg=Wgpf`6YR$JpgG2wY*M>~g(qUdE>X}>FIO(CfjO$@$&hv6h=TeI>2b~|Zkl1khDp;@R#r-1 zm^P_K`Ve#*K^|B!W;FMkI@XQ*6Jv0*%vyeN^2941OwMRpE6vK2EZdCh;gm;yPPxhH zoU?m4544535_w73V2vB%G&Rt!7sY7axPpGnc^A!H+=n>Uzxa|%Y3E~}^H}AGF~?J^ zHfh=A$%V0+7XYu+xi7Iq?075{{|JXQJd%eY?ms*-utwYxGwW+bLvFzlqek+N zv>S0058vFceC-yWmRz*%rsRx;C;ICm-eKlCxh`rc=Qg^C(=mnm(Gk(?xil2cavnc= zlv6#Bu6s2^op;93nJU`ftBLfyoJIlGiUZqI*PiAyPZ>L4%7T-Ubz}z&qS%)qeM|k$Q?7nx{;25>qNDR_^1pmFDKrrK0J) z3qHNhd8}ZV(=jRoRUnEvOBZOvrBV1cN0!E zz?B`mS{lr1Cp!zHHGV9dSY6E-{9E}fT-*Bk~2&~(D8F;qGIxc$eBrD5%ulSH^B zu?xjm-0s|nOP13xbkaI8G%GS}*uHTmpAweahMYT39njaF_rkzOFAat4LzPEx>Yc^; zeJ`GRR3uvZ*BBQyyYJ^0R67&SIPQq7kR9T`pIf2O+=dZj9=&vH!(cadbi`hm*qtQ+ zU8PyVNNktv9?Ph6`~6cY)?zfih~lSVavAW**f=bw@wp-?ad zWb~Az;9T~|U{>w3~11S&r?2w z=Pvw7xMUg1K$B3Kn5MuEh5E=L3b}PPKp#`f8VjK`6av4}H-`Ywq5uE}W6*v806q9SlplhC&kooK{D!_c{wB64Q#kE(8$zX6ioxh$#So!I`rUc8c-u-QXR`Le>?jt*3rG@8*6coJ-1yb zdd~d;s@U_~x2B5eZtN%Fh-16iQMLDAo}rH1c12+=S{1E~O3?c75>LG))9svvSBx6{ zC)2j|zcg*zq;(**r*oTW=_A`;FQ*d=O*DEzM&K47k zEVz25`{mzq=9k;IneiX#A=SvFR8^Hz-`qX=oBbl4z?NO%zq7y;2xMNl+vV1{VtY+UJnJ)j#IO{Q%UUDH+-&7>k4Pcp^7 z%MeYhrW|TDuYrR_5e*mt(NINDG(-^Eo>yJB(w#Y_Tcw1OwI-~fSX66EsC-D_G)V0m zG{TZ}YePwH@tYZHZf}1?+$;L_ z`I0i}W+s(#_uS*@9?Y5>7WPOeok?A9XMTyBSQLroXn_#EL4=-b08N@ks0BiJ$>!$h z;EV?yowCL z&e^)st?<}pN2$#;U9Yev6`Qr+ZjsI2%@9p&rYsmw)`)0ZZthAnR23A>9+@H9RnAH` z@i5y=@sYNxXeJe#t-rl{^t}wh#AX4(P8Pv--rAL5s30hqH!4H0Tkcrt?)VYgY`oe` z)50>-m?mYx+(cG>L2mJe5(#nAXD(%d&DI(}Ydt2a7^XRg`xBSaL$u=-hC)r0F;kxV zT}RevBsLN;Z$?N(a7}<_(@Rc_)b&An`PBSe>W8APEB` z3C+hOb@uKg0RtrVP8CqgQvx=LI!Kl)wmd2rS(+dD>+=|xVT>yX{0yHT<1VP1ipk*O|p-)>HdkO$x zRNNH+=pn!%<%b|pAl8KdLZ7}gt{-SD0AQG~D*(_#fL7&)AP~GOex`5cRRjPM3IJeR zP49J~0qDVBZ5st32rQWBf}iM{Wm^vbEeZf&RNNH+=)vEi{1C*`5!co(1?PkhblA;C zVgT5KOdh}xpeq2-gMYp9Ll6ia>q3C_&B_3P!ofxW0DIa5T>*d|{4wQ+AP~GO{$?-$ zpiKb)>{~#GoS+Fo5B`u&X2697g5!xc0rfv+06>%G0SqU^Kot}K^x*d}n`#Ot?3|zK z2Lk{w9RnDWcMcE=fgb!25V&wcG$qcn1)gf)oX-2$dq`*=gkZF_8^ts=@=AO z-@e8N_E}|G1PDlKp!StK_=J^Xq;RVagkN%Y?WwJWR?xEjMk6h>hjxB@!Sh91r{tk2 zWmP8L^E9;^RloU}`e`wQv*mQW{KfE(tui@I>E;VAJnp-H$SRHB8n#?3Tk3Gjo3q}| z7SDITYtA}rsdj=JbeoM=^89Pna&FSrwEQNbz6ykAHTX))yk^Ze~M&c{w;N?|kS$F|FI*x(ZV^^;_GNt}ubVO?0;+hVMZR`Aq^ zY*<+}u#L9P-p8hteXw4tu#qlQbMKs{TXx2swAeRyE1%xCxQ(nWhbe2@+xS!{WDCo_ zkxx8fm7~mOzg=mBm-qBGy4C;4Ds|d6k95m_8~&u+RtleEyK)G6fMfrvtWQhLd7plV z(hJVMopJJKE%Hf3MG{n?_nrA8BGDp{n5G~SVNI*mYl}GV{P@*uk86=mSNL8y*JSs7 z@yx!gY_X?%>#wp_W=ku&tNUl$ZjYC;R_wd(xzFlb&xcq?Ixqe1p=`M{$Oc~F zta_!o7S@1u%xZ~-arJNvx3CgsJ~N6sFTOIRYy)rlk&H+qs#{*Bb+i~F+c|tXKC+ud z=8@wx^F$Rwc=k2EMh>GzKD(e(t-@*?#(N>F*p0mvj_!NrbsBh;0vx`L1Zm$Vzujj= zRpd_1Ai_hK&|D{X` ze1^WtAVAK}_|APVz2Dy|(_)`Yl%>`ZcIV6=-L>zY4~wlbEe08^YYTg-QJu5@_-6J4 znInK?-SShi%J=R0=#H#xF>hzX!1v;79uH58xQ9BjasJ}%Aj8;x*&z3GD5nOS2YG1Hoxo6+a5N0=_XPIPDn+Y+^8z$LI zKoR&oB{4X>nJ^%Tl28)EDtigbPzD(L9$khjE$lijr+0`~v^=fZl!6X?G37IO?k?J= zScWptcuE6af|0**IqNd6QG*VA3FV7P${P&JPy`Ztmx`^VfDVP;kV9W=r2}6~^9Iiu z`FGmh2#|Q1H&xIE!+^2?MMCq2)7klVk}p7FtAlu2o|2ERuB4e&=^!8I44#wsWl1x9 z3{mc(lZ~%|)P}DFT98e^;ScD+zy4ao4_r_A?0_kizc~a30K~2{004$dndX96X&V+w z5B@gI0~Zx{&QD<(7y!_6vk?G-Km)IH4MLy?e~0n|7Z&W4pXv{R0RZ+bMgRaq@=gJW zAN1f~ul&Hp*kBwg(}K<1hF}0dy8-|hO%QZ9_yFj^UwEtffa0LyPWYR}iNFAWm;wM8 z8bA=}00BS`{x;_ z1pu(E&WD~Kv;gSAZ|jr+T$nz{-wX}F002|~U`QSWV1B-x0&^4M6Z=*(R{;l27jWio z6nXMki`DM1vN?t?p{ZS>^Lja_sSsC-F=5-Kd^&BhEBUl2McApY2%lN(Y7rnHsX|R2 z93HT*`@dW($A}^;-mOhJe7UvIZP}1DVw$Q5l|#1~(P0XxinjCA3q5H|TKP^cx3AKW z6{+29LfFBarnJ>!h-%AeUHZy#N>g7A;qjNg+pQc^nfvIk!*Auxm6^f4_2uxH%gk{o zbVFeE+oZDxH!-h%k^j%Feqmu)JfRkcvtgWwX*Y$}C$h!#v`Cm-?pJ^5wn|V6aQN*gNVH0L!peorT`m)< zYhe+HcjqvRmMvNa z8c*}!MJtWVX$bRgEk6Y?Oh<)|LS;u(zgNPzIY0-#g!08Cbw45OW|V;jSl~r|T+XR-h#&-KxKoIbIT?oMR%{+Plpj80? zjEcJg06q8<$`3(c!9*7V5Ph@krU0ONyU_r^Fkx2!pa*}8@tPB8HuXzB+6u@*@RG;cbpa*}u@i06WkWrcGtJ=5|zC zL(A=XhS5*o(dea}@5f9nVYC>*iTy5<$$~9jP{mP@6r@E#!cUeG#`xqh9N}mgKp?CE zi|38CdRyIRn4rv?$tg$LTjc(5xB3Yy(%06rzt**mp^AUfW*uXd2}dY|b3VH8#9w|d zYdS5WL|s`7x(jQp+FBS6hKxDJ9xyOk0xp&58t#iV6i41~;_aBG_VeaeR{KDv3AGs7 z+dt#e@e7XTcw3IstoMRK2v59m5?fEpe13r^3kxsD+okcEDRhyvOizH&H-rGhKbgvb zq{^BWZf|WWbg!(lyjqw5CaJ&Om;|Qs&^wS~ypg=SqMl6hnO>|w`l9NyjIWQTyh@89 zsr?d@$;FEJpazSsR!BjbU0zlkVT`{uot6&ewify*P39u3qIGt;LMeQX#mXT_on5X_ z0-s@tG6+z-aW1!ymiaWIE47dC2G)%6XBxTFC<$2nmJ+Bmmh0wQZ)Wewyl^2|xo{D0 zUtrOd3$Zm{xft(OkI3uk-m}Om)=QaWgNx!-i>>XETC^rw*S^EFE?OOqZfmP1w3SV( zyW!($g&Esm)JJMBS97$;efxS#LtY3v$mqhGX2GWARwUkjqE%#-DG6A7qYG60i`Bdwg=WLeaK@s3>AsO$q{V0jTTZ)lJIJc| zvQw-zR+$u}JcQNYKU)}iV{AbDucy-XLbg=I`(kfrf5?kG8eXQm9WRGRER}3(XDpxC z`B$jrY^k=iJnxM0`Tr01g-rc_xi7@sxy~9{3me1cB!K*(V%?1ZN8aL$M>GW9a4@{=C-#egz&^Sp2eL_%Y1%;rzSBti_c*i zEd!0Ojqu7H1@YSRXqGBcnFkRCyRa>?^R`3g-34yJ1=iT2Ta7e8wcADV#TT&Ta-1gl z^D4RU#7ADlQfZmb|1+gAINw~%G+G84UvlA%zj!IpRH=c>v|ob8Lj$Osw!w1G|9SXv zchv^VqrgMr8NT)0t+|5sWG?%Z_GDt}iQXU0?nIjo6Nx@%s0nHRYxyY;(pwu!-QibS zJ+u4%k*CSYS6U!>AJtNAOmDBc60(=S08$5R>W1|e%wp!9t+7$ME8T&J! z17A$}44#{JHOsAKpz$;hUSNkptL2c#6Pu1e2R=DT{~0`Y17SC#rLh8N>Y**J#HMYC zC!hz{!Q&I?!S5+Qa6Pnf=lsnfFaY3?0st5e5i}$O06qBYdm06RYiq@w^V1p%3;?Ju zGynjG=84WV2!S5_>w6h~;G*JA`T4>v7y!_&006eN;$U;b0-y(f;Sojv;GzjS|7o$L9QgG3Se`wm2X&vHMf+s@4D#H6etDKzbk*!B z>*8Tzvh4!3w zF-gsG?0Nj*>x>+OzV1Yhb}|KUe#K8)_sfYcxtK8Ay_>AYoQglZL=VBc-)yoLHywP? z#5vp(<>_}77nXuijm0$A^2&@*%aK3Bxv1tJOdk2Xd-o02kJjFyx-D0mUbIwf>+LYQ zCE7Dx13+G*3BJ4qCPg{Yb?wFwo1a62RBTQZ8$;9{%=?Vm2BfBEwNnn^_0YV1Du^bK+Whf&^f@4emX=eFNyjj!3UCuJqZ1O_l;I}Il4ik>`y9{X@h zJhJw|@I#Eh^LDG8!J^i{tqr4Umha6(1OgE4yA2|0imnyJF9>m1#fkhRJiY0KB)R9i zWb!r+`sl~$pXiYP3fz!j8f?`7Mxv{(4Gx{J1x zZ4!VMJxhS^yN`gQAAU-0Xw=zgfY;wdz{U4ll{Gsa z%LE1xfD;Og3Zv%=@P_*d_~YmK)e8pr^c1i)SQ_B*Oke;3xP6zA7!^j(7vRMYu*4@7 z(VZFwczz1lJ@5cYT)Zz67(f8_b{k++7`;@0M}Cih*PWaK9-9X2ea{*_;fI;HzyWTH zXK+zp)H{cJeE31aotx${ebaC+dyq~1WF|0x035s50Hea_RU+_P47^!}5@U(~=WN-Vb3(slr5)H|%|txZw)qC2dnn&r=C0)Y`g?cX!9 zpaKQ@<_?x6>dxP8Et>FLCInaj;XP;|0Id+OZ5N1aw%Z5nI0N0eF15wM=QH8J4!D-@ z8#q*xQcWcK)+McW{45g#Jiv(UF&MyBjEy@|B0X$G`g#Y6wETrkIIsh*{viX0Y7}n8 zodQ?H8lJ3!=@>d@&luxAJ|}-lP4R(DWFP_A-fNIiqau&o!pH?~%NDEH`PuKr*Btz1 zCJy+36Z(O{0lwmdZ%QdV*FEVjYJ0nW5>C(}f6E@YwW)i}^0zYq z0RX`EeQI_ER=^9Kl#sWk3Hh;OjUN5`Oh`Zg()*!-G*$8Y+xoioJFTfYw%dI3V`bIB zcQaAI1(cTmGAIV!pcLQ5C{cIST~<@ojzlH^7yuCZkpVEk2H?QmR!=v1mo=JE#@}sK z&yGE5sO+aqYV=S2zx;#DT0oCl>f_AE?#J(sa;XB5u;3n&u=o#|yoNRu0x#+`n7)LC zZreRpC5DAxnsGY1%OacoF%u8~0EF14A_I8YE+f%1yVz!b$^?Lo0FY3d8Cx2FrriP{ zW7Hi+n5TC0r19rWEbs!W{b{wRVyb7I{E%_gA3j9$Sn*#nF~9>1@5crM*orZEufe!^ zFJT<~G!p|nz-W2KU;tY&j`%^!!zb|6(A&N82iC-z9iL^wfgNzMpBOk)qi~-XICtv9 z9CRGY!~hR4>h~KAU@OM+52r**8cR=nglB^b3AcRxlF{dXn=SO8&I=>Lob zuRFLcC6Qxnw4=?c9A5m-6dXUlg7q-2!`t(DUCh_$8|hlDWKtLDv1m3-e38D^;!FM6 z!*n$b6bJP^jUjZpTyBuZwb3fP!17)oF)FQW0S8 z&H4_&8#(12p{T6zc)O^4$H0~nrpF&Q$wcxdVFdbnF4s1r|7xbL}oQxCD3Qu{UkDn%(ezYt(|@XO0*+0zKA*poP%|AD92Aw+It)NUveCbp%l~Qiuk*Bho zp0((a+2^fk*%t;7lmiGbhb_o*-Px`Ene}Y;dhji-Ie4!bE-G#^0~2_V?va5CIT}vz zGEei$QnzEhl^xY4NxLIo`ZV8qvcfI+g+-6X%f;KnpZ$iT;35UCwqSNKj^S?jg*B@A z^-PDbztsDykVe(Sa%DIrF^;~LH;j`8`ubSB(UBdP|NM<~#eo&=JcH{FJz%|G)KiD{ z^=4zdSW@wmb=MgSMys=EyOsT9^KZ*&Y85|O*Zc6HU3Tpi+^?)al@KA^Z+>aLUDQLX zY(2-!CXz~(A8*##B!O-91Dkx;+*5e?yH=%2t-`OehgK<~nA?T;wHB`U+1W2yld^5u zXs6axPgM>dp->S7Ifbybsnl(GE8N39`DLqj_MiZWGWj4!D2RZ&XTD;+J*>NGzREny zT&!vAXBu%z%J%KCS>5+zN!j=xFZ16zyL`yu#&4$<2M+ek8_(x`*PXwmUA$GVTGctl z9WU_ZmTj+EiL1^3RTYxg|7LjIp+V5o*8OcB$r>Fqha(w z*q!{ERi67c9rNETr{P~CqVI%fXYtRqo+CjHZR#Fz+g`IumvNb)<9RSb|L9VOmaz{< z3)EUuHSE!}{^uI*zi86Lk1rEHYJY}PGS$KZ>p2>t%VigyW-d=WY$y&s@VLTJFNv zt=h#qzD?P`ooEbaYBd}Bh0zW*5J|@0vU#(PKWgThrX_1mIq%$y)?Rke8n@w#NR6y3 zSG$YevHFEWVfWroa?7_i^{H9@U1n`ShujIR4N{n@+~;36D~vwB<<(`inM8S9X(s~k z0K@yGkr>#DLGC9zt)KqZs-Dz-z|bHyG^zg&j?JtCbiZ<~SF?_EANVa@y4v{$T{oc( zho8McLhU#zlL10Ns1`VhDyTv={!W)pzvK1ggiH+Z00ZIyJ38bS^T1-!Es-(KQedj z(4qVlzGUt-=W17AY4UXy+lBE7ySzZlAx%pLibRgz<@;5NQxmFF1E+;h1+ri+ia ztl>FE0QYI8F`(|dbUYkQ3Gb+XN!?xri4GU<_~vb^%&mLd8a?Q;j;zr<8nKJ?R2R98 zj@d;xecXNSVEE{ogA-FO&`!m`MLlpG)E_OG#a>ADG?pD4Y1Y16#S9v37vs{!p#SF??B%3)h@;#)TK2aqj7BF1mdETGr~wUR>2K(uT)1{`;#t z`aY{}`0}Z#YMQ7RgY!%3$W1axyU)L4Egou)Lm`|q19*yO-bHKAp~-Nn*$XWEy%iY( z60k_s^dF#>oOho4{-T0OZhP-&)U7_p$~neNWB#q=k zdc~^Z?OPlAxv~6k)Vkg6RTrh>O|(aO_PbVL_8mlYhkMPt)}q2Y#MPN4I+!Dbtqr}q zzpO4IDaR9gjZSUv(ffo$dRE7{KfK2iM?tT%$hchdm4qZInPN&+ac#=JGHt6q(9h^Y z1A$E6snEp)Kl9(G;3uD_RX($L)l;4cmiJUVPk{k=Q|a7^AIJr9ltka;01!E<k zJ(WM24o}ZEd3u7BcF*O7TtX#xwYx1JSe4BeH&)gC!;@2}PV zqCM|f&i{I7(S(V=KBlht(-Jw)W&HPxH|IP@w>;EcNc=w_o`2C7->A6dBf_$XzlM02 zj&XlZSjyk>ZQ-Bme|G=D_WM5gyq?IL>-rpVLEY!mfBfu+vx}Z3;%8fGHrDkje6;SW z=kn@Eh`JAl9y?*m$cp+8KP_Pp5sHD|-#n**glPEVKfkH%u)5W)_^#*CFZTM)_)XX6 z?w`9SIc;8{6L0Pvo)yWl<$dSoiQ)Z!p@mEJKlz15I^%eMHZw|fk-5LD zwZBOd>Wy9p`>c60^0Xpl!p)EN$IP65LuziB6s7J*jcMN0XC4(s8DKo6F>vOMMgf?F z<_)WPQW#}`u~ijMX!-5P1In}rBr(k!R`=a=`9;hD8d$`@xi5DDW7>rRZDDnLJR2@) zh5>QAT8kPKv@kfNMmbN}6_f!z_}BL}4FOzREzku&y{$(X0MM>^0LK)-=!NP{%)kPG z9{h#DPV5;1Oos- z0AMtM-H8SGmPzz_>~FQdk{Q&1Kd6ZPaYVLj>BXq@j*4Rp6H>camyo5L^0L;v#Zrqg zW!WWsI!-S|rThNnIBlCrSZSCOo;cmJNcZ$>8Tg^A;(YTDde$e$$Y7ocy!vaaZkj3t z1Z7c9r%m3$I2?N{0)=&~o74&A6fgU<_ zwaljxbC8*YH(rv@I9di8nBNxOlyGiGH@Z)vwR`y2+4O-f?Vu8`N!BfYFWl(b2eKx{ zhxQDQ&B~UR==>#$8gR&0O!O5c{lY8U^~KToRrV()&`A8nq%9?8us&2~(w0}vs8RnL z6L6%xK@qI}EG|&#VMnw)rtqNgG;er0?if%OAW3N6u$niNpbRj!O6v(N#~lO8v*d|{IC!Nf#99-b1c&G>Qpl#VE%}` zX7T`n05NESHZ^^fU(&w4JUpyyzF|vfYA@!ggPea^<`kmE7%uH4eA>JPq3y#gdZ1eh z(&iB1CmdmnpK0@$t7QQ3MHSvSy|`|ll`V2)zO%0Im*I+9=m&kxNXUjT3ItsShBJ0> zCl3oxDO>h}=;mo^FIQbxr|X*6$CN@!dj;oRdd>36__X2S7(KxqAXsJc1}^^ek*ung z`5;mSnZtm|Y>AgG7sRVahP%@$Hxt&kjzGm%j3U^mN}hJjE%i2Pe%*3)E$jk20S5N- z)F048eE*Pg_lYX9Q*~dtg~CSKVzxEyn>kH|s9NmnxRFoCSB&8hRgTl#;W~v7p49Xj z?-(2IL&1ff_MtW@xxl2z@zV9ZIrgVKQHm^wN@OnSHR$3MQ2Vz$ETa z0-s@vG6+!owHj_vE%Rx_7Sy1^8^3QN(`XrJV0v44;}=XOnryMD+oOBdxL)=zQy1u& zHta6yo^@pW_Nn0!BeLa-VkS)ZYAuBcZAVj>5EC`2)>b27qTCGpp=B1Cp2}Z0ogwxn zr*wrS^`d34Vz%@IDl<$lWvT6ngjQ#G-S7TP6SEcp#{R1bSPZKP6Ho@4n9>+H_uNki zMvFk=Y2L7!Fac$tNhnQBQukegSsH+`KT~P694#;|XK@xE^8{#93OYc?l+RS*zPOHG z+pJ}v@iY%!f|0**ITz7lBZUn*@FkQlCaF9548lekXzahK+)8VZL!q(Z-g4;6t#sgv zY2M(udl?&Lpz)LjbpSgQGCOv_1|9ek$`_N=Ejg3r)-uq*55b$l-X;q$V1o{Ppfh;x z7Q$|ZFJnfm9;m*p#KyyDTPe`CTnC4Bpa*}8@&ngaKCg5B<`5VF(4hbT24kXgfDq`x zU)W?iC2%2t9cW~u0B;c~0{~*02QVt`9Dpnn;BV7BaAW_@0=z{81_%&ZWHbOU0AihL zKmbY){wB=>7YcO7FIz-l0Dz|e0EXsX7XpAD{D+huxbUG)_{|m(7ywYe*jNC-kh~KB zaYE38zg78x8`I%4ahL-7Trd~_kWc^sqX`ZN(C31c9{knE83llA#$Xx&wI^%m3eCg| zoxuQr76pJHo;uNC0NANjdhmB>9=H%Z$nU?<84LihmuNRqAeb-~)IbFQJ^0rvKX4&{ zm&xBOlLHSVU;se70st5l2LOD2(1X8lsZjv9;7?=-K>ZIR85jT%Qvd*?4Ko2!{GbPa zoALt}qp_VX0QY|g00sacyZ|r&ymWvxe$e~;>Se$Mf4TyVOv3{3>IQL)AH@FF#5IcJ z&jB&*Mjle>UgjllU#}0-OWqdh>Hz7jgG``wAE&8MR*Mn2*&d%Z%bW2RglTyr1!?iD z@ROjz=rlf18o&C&Fuj3H%K-#|4PboS#k7@{V}$BtjT2Hep>{&^FbBp@zYn4>iu&%j z%P4j~;RUnC(bRrG6@JiHxc;iFygsHBV%l<6cVFc=rK+!jAer}azr2BT&6X@ zF!Ne&IZoYsj6K*UE$2q&Jy_)bb9=C`FYMj^hPs*BJvh|B-xJx!;Ll$jo?PCfu{TnC zk6L`MZ}E<654X6Sji1@fizPYk#NvV!pMDKFO)lWO>3g}3%8j~}*M@sdQ<sSRj?nDLQiGOoFFMR~w ze8Nmzfx6#x_w~);isLs2T;_-59{g)fbD4U2K^5}sGJKx@xV_N`(}I=jbP1v z@#j9~sDx z59DhD`MH7o;y`{?dY*1fw@*tipu88z?+xUC7|1^{CsW}4f%69f`Pb6&&EyRBJ81=+ z|0s~Jo{?F>UmnPxoXVRU^UqEdNE=@g$QRDc6rd!K9~#J41@aRE`RRV1 z^(T$z`voSyERgpC`MrVs4+HuAf&76${x#$&st^I*L4oE!3gqi&Wm=#ykY5tWuMXtb z1@aeYo}(HO;K~5Ora<1FohiV`Kz@86UmM8J4dfS_JlAgoSQQ{REs*yD`MrVs4+HuA zf&76${x!)<{n`Wpf{z0EmOwY#63E{k$jioKD8w5SVqwkq$;kH#g^tW92n7bv;ei1Z z&kc>}gzJAbpqek86So3*^1-rH-n@=3EiX3!rRA5J$&gD#FWHFm&(rI}R%H@+@*R7h zAmqvCsrhOsmq-QWf&8G%yf-*Ke+KpDq3H!Qg$&Eg+ec>Ry^74dJu)+o z&(`|_mHw5VhDn<|b+Qy4Smg9s&U{ve=favmQyw<;b^b_Ls-C`{e7-@d5z}}BSyH!Y zB7IQy)AxJu=Sb(P(K70?0*{}OjWX(@e8z0f_Z{+|J8oO}O#0Ai)O}!Ecv7~|NNsdO zV+wO<$PQWV`EP~GSb);b1uzx5i=FVO%3bL_B^0vv1oF?A{Ls+QkmWpgMen|u_C*vS zk_&WQc;FYs9y6i&*`^^r%cnJ5J6(gK@)W#;7w>yh!r6g7%^F3xKH0s zajy6C!7@Z5wGR!Iy!{oYsil+_`%&T-d^&#e9ULXfaVko*zf=g}iBEQU6J5)Eet{=# zgxBoehQwipUzvu`{r18!Y;6r z*+-{GKGZ8VJ0nx%=R}-CNF??A9^x8H9pM? z)1@XUO*7cH3MSm~r|*?JGqli$`c8=qWM_9~D22}vV%f-Gg4Ed+5+(2%!pa~(@sZ!> zhSM^iMieGc;f;T@hiSA7G^U-1MtD;dyM--$)9??%uV$Z`dDn$x&AXqyhr{&lXEAeU zH(acU_jx=_U#~?QqD@gJ+B$|d)fAf(X0hjf@L$xXb>@EJgr;_msvpg4Q!R#eww#V{ zd6HdUj#DiODGXHnoH@e~?qZEdaXHmuG5);;iJ8v0~TGgq4?KSNiW4lSdrO$l9ndE3l-@Q`8@uCT;i z>fh3}%R8LnE?8y4R=>TKnbWT`<(5fN>M~PI^QJz%3pPOGY2Lt@yI=z(3C$Zgy$d!# zW2-6#j;}KfDAOVc9Mimk(@%H?XkZb*p>@XPoSt!=33R{)ovFjz8Vjppv#kDjV_neN zs)CURrK!z2(1X8K`GIRxr9P%Q0D--QwmX|cU;scu0RW7OjnH6E2>^QVS1&gT02dW^ z&QB347y!_s004#tUgsKwKo9;7=`h<_W`#7Ro-elW@SU-=%_i{X##nI|S8j||&$%IZ zW2}~QL&}Y@n*Yyj%EGd~rBz9|6kIXr(}`>`Io}vN*sbUY_b+=!BQd0X)ZT+L?XAVW zz5DX%_@f;>Ys+!U-gdD<2v2;|YZ8BHp$|}^M8cd3YH;()C*`(M_#CCmAxHrZxkE(> ze1>vm5TN*1zvI|S%X}JJX@pnrjMXxqMod92D7@~%pJnZgSHBac&yVW~5c-ZL04WL6 zZjW7;3e--?%8PI=PIt%d%gPq}cNU^8k3afh*okDz3fe>;8$PD!qxurQCD!4Qfv#$A z*Hnk7P|OU@3GIRQ2PXPRyVnJ*n08|Vl^%o8EwKs@8c*|v*W3~tAW3N6u<9+b0UG;u zBdvimx5R1@YKm#z!09cq0UA&922O5?T^b-sXdZBAqF@XHI#h4pp%MzeyYRfM0ZX+A zBr(l{70~o12aDIAJXqLN2s-e2%4e!@_y2`%89^Cn5=s-(6xc(p%v)VR2R>Wfz~H%6 zpAt68Km%6+Zwfmgw_<@0bOz7eMcB=;z>L@i_fuly1k`o38GymI;j74?_h;0V#%+OX zTAys#IX{IZ$^d{S%>x(}dz}M>Ko5RT`GJdyJLjkR!2p0m3IJeekmy1H(1X8zm9YSD zVZl!MIV=MM09q9Qz>vIC0OAKd_!G(xTwD9DaVa#Q32Y@S0|Nl6Pc#|;*jCLu1CU#i zlpg#ong_0@0tEe)e8_}lU;sde0zi*8(53(YMiXG{2?_vu@MHP{E_^7!pSm3d3_gI?0ANTS0Py#;Fi#?$YX5y^Xbu59 z_>!bi8kxj9O=#{l878FmPz^3BI8DW_T8yy49?qvVG?(MFSV~xF02Q9J&|J%b0fQ=5 z&Q~0o8#&_p|2v##)j}g^=)G%%h33#K1`W~eByVE#lQcF*I#Ttk%+ybdA)76yH8z*y zlzzV4!lSXdz?;}y9M;6<>bo}tV{Sji^Q2psniP*DkERBRFzm{4nEz`)&em~Qo~lMTH`9(<3?1#$_;mb@2DYOdr`d6xLI_X% z(HU$bE%W)$R2qYG^(>~*GN0ybr4iov!Z}Q%Wj>9FN$nxL@$z|0qh+9hIc?#Mf7ZzD z0lkaNPISlotX|nG_2r z$@07|`jIA#2iu==DxJICj^y<*r4Zi!fb;RIm$9McIL*+1Py|7WFIz67ix&C-A1RSA z2L^=l--c<;uM|GV$I2l{0S*~Ll)z{BL>UCg*%==YfB!_@%F=S5PBf*)5`O2*AKm5L z^I^C6#27!NrRPBFH=1CihNbN%XT6zyc4|TYUO3le1+hN^5enfn~vp_RY@9TwH?=e4sN`xckq`DrrXRAnx?EwLohOM}DTF zqZ|uh(1ZVw@&ngcjKa*$`I|#v06_go#!Uc>ioMPOLZAnKtMUUE6?e{03s5isAfW&N zh6af)1OPqwt4}rx02dbQl%E&CU;sdi0st72cM3rKpa*}4@&ngafA=&^Z$eoBg8=~c zDMkYT+p2l23k!fA{Ogq;xDWuYohE=;0D}Pl?Fs;32+#?DEPz1|{z4sUfD6shAyNY9 z0vHScz*q%fXnr_=Spb6`{HOr95d1KH|2u6uC?fnwXdXbYfTvB6K$A$D^6G6$*&;Kp zCN#A_)0yN8PE(6FEymDrun6gp$DPuST;+e@w?SMtp3XlOl^Ow5W*Ax>RO4fw9p6mPKks$5G_%BMXNUvGPQa$ zGMfj2mDvXiv9RR4Qb_Le3n!y1irv1d0)ZPCS zHQE7a9 zuMv*c@SkVfj4x)C7sE(4{>CpjP!@{^1Lb&+m$Lp6$(H*|TF>-*$)4YK*F>-(;q4}7k8Y2g2Y_*+%lNh;7i+pJ`Z{Xb8*D2P8$wA{c zwbCL#IIEm*zLLFFxyYkU?XZ#Y8z`6>{r06_KWMgsub>hPYX!8Qav_*;}8g4ilRtP2YeeX~qQ0O(Kv07C%y zc2EG&gWtw@p*RqrD}H-jv(Xp;>lFaN&>X!aC;;fej{ysUK=ZEn+ncpQ0H6W@L-Ni5 zhr!`EL zw z7}^3foH*yB3lD#0XgWQBDjJ&i{(bO%R&6Z|1_RcAY)sLjhK1qKk_k0jLJVqx@G~_C zM_Q`ZE6=o^7DIbmPHPY@$0_UivI~y};R0`ha2cFU5U%6&4Z$E>%l#l+^Z&UZ9F~Qp z&16mkyt*tpd$7;h*+$#XKBjo?kOtvMJL+WsvESh|70+q0Z|c|hbbR}tIi8c_l&S64 z6+(F8=l(_FIW6=7-cTZ84n$`r2p1t!LAa6G1mVi;gB?^bsU!d3~woe0L6QJ z&LNtX`7~ky>TkjufAwTS@m zezg17bFBRMpB$6ljZqgMqe7f%f;} zYaS0zi}X5<-d5gPLSh^;m#}`$A4{lq->iu&={4Avdf%aY=VLqgN)3GH_ z_L_;26+L^z?$V1mcXR6QniDxWr|k@$I^%RBeTC&#ZI6uH+EnPSn-}qNqI38|EL$5& z-I0xvx~)ywbUS}H_u|G#kvn==v^QOL91?GDjEt~~&eE}7)7T7ID}Q%PWL$Rn*AnZ) zDkkvUOj#qQd+zc1XZA?wMI~>i$aVgIM@rnpqDZtaPVfWxq*_P`zFQR8Qf`jT%Tf6p z{tS=%;NnPQPN68r-{~kkE>f&nx9Yga6k`|n+~Xqm^{_uxNBE3WUUQ6F5~&8ePy@fj*YT^bx-?f)UcJx3ym=Ar$UsxJhZ1t%AiTMVJea|3bc84Dy8BA~b zVjy?*uE@&l@wN1+l9aWp@|KX?o|L-fUgY#_k-_~ex7$?r$rB>wIk73F1(xc5_MC09c2pKt8a)5FWEu7aJ}6+zuCqG zH>`@>We!6joFZ!Z1Iq<&$Jp+5?x%l=%y+9-Mk4C6?(?5TYH~dBIrqEIA}7~`&NNYA z{aGdj5XxKhSt+FLTmDIJKy-Jljyzqnr=?w9jnBGPGoxaCONVT+Ce8CH{xgm4-nu3- zcsS01)&s4k=0j|T7Uw{FNNIp!%Qw>8)t?hC&Vd$s0mGKhr5ReB1FeygzHI{;Cyfo8s_Ye3f%8)S=fA++jV-wZWAp45d#}>kKvNlt@#NO+@^ozjsOLg!F%%r6%^k)2`+@QZm&< zxAxS?G2O!h%$+usGK+0Lm1nWUZZnH{p3D~CT}ZQ7%h}xJQ{xZKVo|sK;>ezyiPQNE zW-+(*8|!%2zBF=Uc8>-glpnn`a#ztg8u%lfCG*$n%Xt2J>MxlqF}4lQUq%6*ze?Tj zF3(@s!@I|bWs7+3%fAlmB!&~Y#3lV?m&m>PYMR7ia-5pP3^O;W(8wg#D#MvSiJ7c> zYjcF|%1~1Pnyt%!2G;$qKEE-?{=&>^CH$V|NXZ*4g8s2C2Ptnz+;dwZ?+mE4E6zRX zoVAnf!80$XgELN9v+j(w7o2p#DeEqGTU#PUHHQ^foqqPogGU_BcgDFFo^k5hH5XoV z(nV*SBD_W5%{=vHOXL!{Tk${^$s$c13jJ6oiqIA2n~hD7M`7iz9_@{q;EoZp&NUa^f#u8>zK=6z(@+LE?RAr}Hd56(^9Sh!hd=QdAOe6saPL zvQvJPo_ecAOYu@esbXrarPNZi)>3Ni*jj3-rPNz3wfNubU2DzkbCUd@-}ii9o@cV= ztn==7zkBVq_c{BVnKO69hSh4zp4LO6JXRzv!`cQT@aKJqvbL(v$NBA!JM57cXvzGd z;&>H1=*T;!RhS;NH4vL8k7n`Y5i6cNiiPrEf!(h$4l7E1b134{L(#`jRJ6(};CMiN~Z(e8digCvi=NL|2bFfHY0K)^jVFCVZ>{Sv zTSZc9ar%P&hJsiq4a_a3-X!T>)F7BF{a{&qYz)NpcRT1Z2VFinp$&b@Q#8WSO$FU> zz+n!qjg4;CW>7fXrg+j!PoC1@$>T&kc@T>yPi*nzK`Wj-(M6w)qJfJbCzyCr{5n;ZR5!^Y&?0ci6;+a@#L{1o;-xd zlZWeg@{AnMdC&@etXH4zDbLfOQ)}lqJFAqwDC-AP+YcYd|?i86N)F5Bb~9) z7bzdbZ76sfJ>=>@4`p?XRKAQ3sV9?JnC;E1FUFb@-uT|u zW$fj384d}wE}Lm)FN+l?(l{z>FRYK1^V)>nX5uBW+8Uko!z;56IT+*)N{yijO8+SK zC83oWW6c|v#6~BW&m`>nYoKydV`yzA2bNh6#ZHd%AqjKOi{ZHk4lK(|>XBHiO^<67 zBs#X~@y?T{{dn@&AWt5m<;kO_bUr{Z3v4+#Q`;|{S|{6cVDFtWy2wX}?MUdN?(FLK zXza>@67jvGsZdAVU~YXXcF75N8;R&HU$&XX9DXWxei-6S;6uH~EDN8u5OHN#WSiN{ zzNcg7mH8ozH&JNdH#48H81-d%1jA*`cEb4LQ;c`I@W5|If1h~7rx;(hxvbeh81*T} zn6l8n=CAV+8>;^EaJ+r$TqW?rY;f_!g%#U1Hait81-d% z1jA*`#BIbQKE-$q!UMnAyv@oHmqL8m=Avfs4|+np4$38)eSn(P1QAz;MYfsE9PS0; z-6AZ2nuXgfi?}i@vh6cuUoQ~vR$&3u%>1Ec5m$yqwta?d{~-k?gz;_@8u-oV=P1D9 z%kaoHmo*!nvsHy4-t9sIzsY~zLd2C}k!_zL%bzDTA&hs2(7A85Y_0 z8FILr0u#b`cM1*sX5o)4jkq#2vdu-!zFr{SYGDD?%zV+Zh%3V)+df0K_X6?0CMxhdw$G3aKc*&yFy3841HZ|Ci84=o86Mf@vS#^9wyF@syIW}BHwOqJt_+K8 z`wVINNl%EkMpytfy9gq#42x|044L?HPl$JqumEZ{6GU7Y7TNY0GWe%GA>LYH0o1G} zh`2H=vh6eEa4!(=USR>$EZk{X#Fb%@ZJ#0gc2X~eFy4Ja1HYO1GwLPrWq4$p%bM*! zvsHy4-a4Uy-;Ca6A>zug$hOar4ZT3T`-KHilmBxPBfbocZ2OE^P8dIg@g5K!_{{ZCn#}|eSB6EleTEF)-4o(< z3JaiSH9^FcVUca0A%}Z`cwZM5K<%%~TNZI;SY+F0$i7}6-UeX-)XdytS;UoLk!_zL z+k1g{|067bn$fRPXNxaGBilY>HoR(U3PHS$LIc0af6YR~m0^)>pCQY8fq35#7C_Ab zf`}`_BHKPgnts(2;%yQZK+P_Kh%3V)+de}kzTOk!eN$KfHJe|jz=$tHBilY>2LGBy zK?vjd!UMlqO&IlMcm%^`&0+9}Pch!Nga>}J@D1V-pJII3_8GH}FzQo`_n`0qYi9n2 zc*Lg|U$(id*-jYsDaLz9cz`vd_Y#lz6ywV_mo*y*qdvuW4+{^lCjYm@BR<9Wvdv}9 za>A%jG2SD>1FSg!9`Py0mu)U zyzdDQ{AM#@)TbCP-fvmNm0^)>pCKFeQ)ogM z?-`+i-{k*=LLUvz#z~2;+TUc;Gh&z$3m4k8E>U)ATO!gfQN-!UMnAMHuyE zcm%^`&BVVFkN6bhbqNprW;0>brx?CSV=vY)X7B;xk#dUB%T`?0thShedT&ne<;y)f zdz*j5P=4R@KEIa9-sk^9yoe;4sqfiKb1A-L_4Z%lV@=uLV<*O)?cML$Pe`O4$KtV=z#xGtkOrXYX7V9%l`E;mH3 z600GQ?ew&3?dNLj#W=D4OxmUo7>rJ&zJ)t_yXVG69&=#Sz{bX#_`Vif`dG<%wU4b1 zeh5M9)0_Iiz>D)@u*!3MdHk9wVdDGV?hI~{1_%o6*-hCKCOffkg>L$)&or=Ayy zJeF&(*5Nj!IWjC>V^059>|!(H!`#;Rp(!+I8y}k6mD-+jd%P?C-`K0slK08WpBm$j z9MQHZpPh3_9D`0Sz|UG~Z!^MS4xSmG7DqAM+KWS@dlLr^v!;K1OdLN=!9qUhAHR5g zG_N)OA=S`zB$_x7@AC8GTchRvg~5*iaDzG;ypKcTP}Hm_i1!dTF5$Df`XZ|ibQ9kT;hUq(ca_~k_a*FO@bPEX9vlB${H5@11vm_DlTtaexWvXFfTEj3jKb|v zpynPILg5w;ql)gfpG8BX%$lP^Fa*khq0MH+u@?4|urfFd*bowy7J!j72Zo3lXmerE z=D-k8*5<;X&4D4_tnKBnHaIvFaVMTKagEtlXtOY%x~XeRMf{z3*S=HYzl@d?aK~lt zUI9VL)|5CD8VcjYV~}kq$e+>+D4=FL3UI@h6jYl7r^W5BdJncTid4qaIVHs*0oZ2` zZdO3!k|@dL50TojI8Hof#i{W#IG(s&=hlySI`!i-30(h!lWhH?PPX+QLv=cn!i;Hg zJ1GnZDFMoqPq#|e_E5qeo)%D$2c9bhedb8P56-ZZrq5X^3(mAs1|k$?GvhWCr6B>> zXNqpH0@6JMu!s8s1r2V^{WP2naBwzw#BbiZ&}M^ozO8#O>RvNH{*QRqPcDtW6fGGN zQUC;ZM#a_P&R`EKKtaxifC9<}N5N<)m~~Zrg8AjV_=RTgCG)KN2A8#h#6#t^x^EIpDI;u09l(r6!n&d`-eT8qA182vNN0^aBzm;H;h==N2{!`Rh?GYa)hVs)x^yS zQ+-de)KpxY%r$>#%R6%FMSUE?ZVKrH1hncVg9LDN^T4zEM(tzvH%yHe~bv8%=2 zC3X#2`ixxadHdY`ic@mpaZvI+?n*?Ci9|Zaphlj@T^KUKfk6<@<39`c3mklmfnGkw z1Yi^w2ZrXbHWvnM4h*ejZ7vMj92kPZ+IEGt!NJ-PE7lf(kv0d0P_i}`25k((xzl+R zamv6oW@nd8zO}U7W#>mbHvhbZ#^!z8H<=?A5Ii=!d*l{-cy>TRo~B&|XttvOA624R zvc~-FnfS$~<0UKOe#qGJeVV4%hXi0B&rx?hZ|A7uYr-RuJ*)zyc_jWk991}YB(_l{ z=B<5J#X~=`D!Tt1@uZOIA%#6WDWD)v+5sulbB+{WrPP_Z zyW=Cq}tKir1pF~SGh2#Lr;ra9p8=kE_G_i-ngVH>OyPA+Dj;773 zX^m+dX7wDRZAz2t5?yv4m~2n+Lo$HiG>I$=cMyA60Sa=OxC)Raj)G@YfjyM{#U9E! zrdSytLdKeRDNQ~O3BW!UFgqlmDh>zNk8+$KuY?l>4o;9As2?X*w|;2PCc0C${!dUp z!eC}E$~%##>h=$EYE0>;@wZD3hcp4tn*5L^yS8vdp&+M9Koq5lBWh<>)Wm3_X?=&) z^eHsimCuHpa&Jx_2aF>jVJO50j6*$yv4^9Df}Ag|Fysph+dbAUdQh*~QJ8pqdNKdV zoOg`a0b&P=EfqUh>=3bKVm-3KV*)76n$E-}91Q*Z7JYb=MPQ|X8qJCg7WRv9&%(hI zDg>Fu8^bV)wF84*o={yjwA_KAIXv0BFr>2sLu+}m-yPNl2Wvwxc(M<`NSgygtXP{1 zgEj|-P_i}`25k((G2yjrRxS4u_VIY%v}rYrx}mFnD5X{E;y%)91ov6ySb;)j#~8b$ zyEZ%rG{VDKg>pOwe;JMj9A-^n!d`ttz2?YRn^q$wJw}NgEq1Kfa+K_L{TXlM`xT@DI?;tY+3g~7qX5J%3?0F0C|3_0~?Hm9~X z*qrLvVRLE~cz0Z$_@A6poBBwp)r4^_9ifa_vCfXx9x1ifNhy@$iOSW5ScopVI)iFW z{n<97?&6xfHDcF_y-)1@V%Ll96uUv}MzX<-0wt$_D*~Zr5y&Xi$P-mRBFW}JHFAO@ z4LzKm0Te|V4u(N4&jl_F4R>H@4bKHG4ALAJ8p~PGKPas#4hL6?SeP~ILn%el926pD zR&)kYQ0AZzN3(cC5Cvh3LPG7&Ce-1%HlezIZxd=0B(7+rgu0}Ugz^dFBoxZoE z5J8a^5wsjajWS2MIK%zyk3V1kmP>v@fw|cbMseYnXZ_l!aB+tHg z_OWzA8Ow=y+gJo&&b~MCWc1X_`bh8XA&Dr->D|#oBYRjQ3Yxj^hkB3BsaPUT>`<+_ z&e-gJj%)IEi0u~pqS%+jzASd9*j-{@AsftYQ1V2WLwnucgoAq%HS!<`z^FGJ7zD{6 zaB&E`gM(mBH5Z0db6{u>r&?}U92_hT&E-@Jz(||}+es8W3|ttrIWPo^wYe~8b6|)i zYs(93gM$|_XP{E#ckSlHMW$nX@`8J3CpF70G>@;Y%Vw}dAUk@jU{!_=zBe+1N&HqcYS#H zv4?e_AP+xR2V(8$m;)V)f1FqoJ#4OCm(vn|gKMYj_ojP)|5(?oU5TGZOZJ9@0LDU= z^bo=x7J`DNXpH^x2bkq~4K&6a9rIL&y#TPs_R^B3Y&`a%oV_?mr{Qz^m;>Gn=|dr& z1G;?K|aLgy8>yVheOW8QL%aJO*;#`#dUdUv40f%j@bQT-xYg6?0aGlk`2xR zpyUzcs#sH*kkg^LSLcjH0D1hlAoM9q#i zQ8>OW0t^>1HvGe$G_Aef-jH0jE~hyjIfGg~_YjS`n!P?Y36PxTPW9u|s% ze9g%fx_h>U-Yz%C#8ItzBRA*q>A75!moK(JY?0WM*m+`G#I}iDKsK1=pro&&H6^yX zVr@3bx6s&awj^`L$5AmK84JT{00*ZYbn%ff0HZu`V35rj>cTc%r0qw#qfwloE(&9Z z$!2XxjFq6%ZQG)-GB`~AMnxe(UDV=BwZ`&I3c@{G7liy_sxn_uxSi~xAd6AR^2uMcP7#D z*d2*{*?b`uJ=PSD$r&1l3eKcJBPf%k5wy^NNIA!Hap*G#hemKNxiEB^14A2mwmTFK z9UPqI2mw#T0T_vMV2BW>xeJ3f2ZjK$HWvnM4h->SZT}2wgTs_vWoKgQ1-St~F{jBa zDk#XD%yiJct}UnM*h%(Q?zK#IVINPjzS~Q<56>RXE)?XGs(=h?JIg@&kI3qH@GPt2 z#LJWC(nFzSL2*0nc5iLW%CWaLR)$0Y#kV#N^$^7#zO{jZJoCGv5NQ#$DiE8d3#_KI zhh}55imL7^yD*0?ThHrbNUjd)Lm|GtxI8=}8{y%Yp&ZZmt~~TG%fsRZ)ta|bcEZ1l zYx35JT`TrJvG5Iw}O~t$%FR?Z(IgdSd9Ikuy$g$>?`8lV? zQ9sZ7?}w8P4jvGY$D=g>qoi95QHbaMbhz6R?BPs9L7w|R495fxIfF*UH2DuUvpaI`o&LV$&4*$?7W;|V!(u-b zdqiwxx@`@8ahq%~-#}?*-C|ELDsFT}M`qp^w<)^Ko?xKjOm-HV`){+yiw?IO%|vOWuqg_uoO^*LQ~z?4j||Zs!Li*%p?evH&z(`TxOZI?dY4i7+!;{#q}WH{Aj83l zhZu3<1z;r1fgyyPcrFae92g?Z(p(s%F%0wWRA|E~_P}*E^DZ4(;4ZOa)KC10Fyn9U z7wdZQ>p6Bsnc!~B@j<|ZepaG3Jo;UfYH@?k05 zg_*-;fyV0nc-N$-bAA*pDGI3pg2S|=hZ^>9m{5?9Pp%sDv7^S%s;U2hJ!edq=5evP zddw_#!*pRz$uS`{*w3-)?xBV~92*qm!;z~7spP2HoK>^swVZ*b;N_e%qB#Lc12jZq z6Q=&boFS(Ed-3wFieKc|%Qgc;@_^-F72h20I`(j|P>^%#U*VjBgD)mM6Oh*w%?&6k zg);siN%L=W><38(hx7o!dQv^~u!r@aAg5A552cc$XGc~~+aGM_SB{Hapy}kXqSNiEKv%yH za@IvlhJ_RX!4ZnA2=^F!SP=?xLb-~NP>!P4vWnjL#6~C?h|mb=;g3w;{uvhDEqxpw zM}~x=C?6hYhlEze;b5I8$C>p>IJ4lOqvM!3s-=VD*mVcrE?77Fp@HjWuZ@`};<*=3 zAH`LBqs5LDTQ0Uj>^QO2Vr#|LkqsUwLCFWOfGWx_R)ys-YLumpi$lLVI4I(KDlQD2 z;lLo6&z}Arjs+Zi5JP+TAQpg;I0uI2@o;~R^+JGY#5RI`1E?N$y+P-KC$;|zL#cm=SOfyh&UbrF2Zq*i&VCx!1_x_HFgP;;Fw*A05G&T^!l2E8A(X7mg+Uv`kZ1d|d3Mown`dJ` z%U(6#O1&W|7OSTe^S;zaiao_0m`O1d<*DsZXlk<`(06hS1$l1!Z#Xt^7_2c-FMS>4 z@%CpVSDqESP3(5D&xze3wp;9rVqan_-|2|-`6Upkr^lB-I!f%9KmuB+gIFtOJP6|s za$)Eo2L|2TK`sm(cXN(4YcGlx^T)dveJ_5Z zIq?zuf%qrp=MI{_i=}w4h}|uAkJ#75zAp9+v3tetBO9C$LCJmNszl$gN@O8wYt0!k~>|J6i2cDAL2yz7>`RhuQKaMd8|a z07c3ewdo2)VS((TAdFFKu2d8*e!D2>5)^$UZYG3b!S}|sHUp0eWZ;|7YVY&fbK&Bf zbM3kCTjX(W`2fM^!fShE8hbd?P>^T62g4D7gVzcdWc94M)#@n@=t-lbT`Smy-Whl1 z+J)X9LwbPVGvRa(J?vpUD9CGtfF6pqqi1eb&zbjFJx2%hyu*6v8yH<*U7ve`y#;ke zA0u>sNGOW(Cqg>HBeVh@)`@aFLS3EcZP7_*!l;&Rw9Yc=9Q*lVjK@ni+VS`^EKphV%fzdc0f0lP-H$4+`>S5?2pm@90^X)l>TytEVKOr&RUW zgXfZi6raH%JwVW?9BA+br6oN?v4=&WG!MzP8hfEDqz_0wn0EJ&#vYc2f_yLyNTcj>q>au?SDV1J+UHdG>(iE$ZWdwIU=GMfrdgxh>qk?BV`JK~BAZP)a=( ziq$mg}s)hiCrUhE!p6q36wmqyGoF0tORF8sFCM& z7lw{^U=YOf`sQ#4z`^r6^zytOfKl@u7@EV{To|-DFtnDnxiDyRUd0s0z(~i*N1F3c&?WIFgI^Olv*?GT;mfX)hl{pvz z!Kptxlu=c2I5?qDjt8bI2QhHuT$+{h@_AOykbs=^v^O|mWWO_R2CTHdB0`_9Fsa?K zSl4Oa&KVdj=?v)w1>c)^z6qO5KJ%k=|B8!4NR0BdOA4Dj=yoHK+tlIBNUN(IbSLj8~ zvKr|Yw%C~1gxFlM`C<#i7Lg5(RZw!yxl)jGECpi~HS&0HVaNps20=U?z8mfVICwlj zFOP=+jN0$O&>Yt0!l2E8p|z~dg+ZGGLois|masNBSQ}!++5#}r=D-k2*5<;XjbRw8 zem2*3tgyLO7Ra??>JJQ#bbB7%9_4<@j8yFB%x}CsJomFlZjVwy9;&Vyguqd=IjiQn zuUR!G2Gk75sKJAXaBLrbA068VhI9eRr)%~L({<+1|JaX-tnHzYJv^C!g2(3f!qJC= z$L2Fxh2@?0%xL4v>?P?^QXwPrs&CTB^cVLrG6#nQqbQHebPt*AVVNk%BQqeAdS7JP ziwp%)Z*Qx<^^e$rI)v-@%EWqNhlw2_cBI%*Vn>S|OEx%ALCFc{Dnr7tG7MDI$b-R! zArl-J1o2=vL?L&tNWj5^0eX2b1Yi^n2ZrXbHWvnM4h*ejZ7vMj92kPZ+Wr~V1_x_H ztXNwBM%o-0Ldn`(7_>1A19e9>@fLU4p)oWtG|H(z=%8vZKo8lG_p@k81@}~Dr~<(U z)rvd9LzO+Iew}?N5S8PR>dHY39639)az?&nSu_?EB$ffP+7hi+auGJ$a8$ujQ(|IJh2yuy-4gFu}xwxB^%5%P;zp(YS0O+2AzN!xf4DL zcLE&T2@u4c5P(r9I56ntymes+fdfNxSepxjHV1~*vbK-I+TdVq2nK5lz(|_|L#$Yv z3xhTXhETFL7Y1z%L%O}0O}9t;KIk}fS`+r%yqyHM;Rv5Unn5xbOZ zFwH>8!4IgQ;Ij&R^@9p>>|GRM&nSHN11QWJE()P%6u$cb6y~!}!tI8`6g_CaAp#WU zvjB>8G3v-eio$&6qM(aW2Om)sbh#+#ViblFqQvR?@31g9I9(A$j#vOj${25$v4$WcVN)V>FUDJatDUyur?P4Z4L~rWo`cnYlFk!J~FkPr3FwVjZwId3=|U9ML`*( za32{cB&>^qFh(K8Isn5xsgYA`ij54U*go1TDfY{=D8KZ*f)LA+hg^{ZQ=3Vm}dkSnQ`_kB|+f7$`aN0TC2= z5plP@vq%LwCtMUF&nVn~1PYONQHVUFaQ_h~Okw{GHyaLv`;S0j3Jah}7o%|hF{{f( zK^LR&q57;Y7X@96!iVa!x{ic(!NH>lG30;+U?hxTNUzmkLwdEPYNUz9@Ye;LQzwHlYQjESHnlhVt6>aP>v@sS0_TlI&ngVYR!Q~HoIb6la~;i zD>h$jf!HFk#bS>UJAiC3yFkg4gewA(XAzjdP$N$gpM^sY2ZtVlIP?J+h2DWdFDI)D zL(3f)n#0;$7_>Psw3fA{sZZUtH5{xB!C-9x7-@50h!tydVbJEl5K7kO!k~>|NV5C0 zN%m;FO|nseBpXQmq32;MaUOPkA4yiqU6?r!Ls6c?Qa!SaJ)C7I$aC1+;po62=V7SW zjK0gJ*3{fiy#n9DEms;5#q~;^4b5 z1mA%{FDJ$y!%c^S69dg*Z2=f*b6{vKYja`H=D-jP*5<;X&4D3StnE)>ZE&zQgp#!d zV5E&n0Tgutqwtw@pm6Tvq7VT_p-MD{mANn|V;HWTfDDJ=KZk|E zVT$P5Nmf_@MZy?`YbRM@E(*dJg=;53;ncuIK^LQtX^&+yZR8G{X`=&~HkC;9r0gY} zlzpX-Ogn?1&QTLZInyGm!iP=vaHgRkPiXtYp@D->%201M)7JmoCfb=?r#D0FOtEK+ zoh8;6`=Ho|#Xd?lm}sEn+z6CWKFQ@Ha!Xbcz zCl54-wFO|L&4Hn{tj&c%n*&2ISepxjHV1}Sv9@=^+TdVq2qkL^z(^azkZw<9)2;3I zHr>Vq((N(o4@tM9-oZ)QjeVrsX70kw#D=1rZnHz_RuzYXvkm2VUUPLKIII&VX{eU3 znyr1+!nq}< zsQfJ;C)-et=eECvg9C@0tfAiQYQS#;`u`i3=DR!6GSH$iXn-=>=vcY@< zCHF!=5A_1;LB63z?gbZyUT|O##J%9c&
dO1Vh3kLxX&JZ+*wFO|L&4Hn{tj&c% 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 OcVSo4-9;aN`2PW6Z+2n; delta 126639 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
    Qf(aju8H6IQZMrG_+NL~LINZ4 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 GAN~)rV+lF{ diff --git a/examples/save_load/assets/.save.ron b/examples/save_load/assets/.save.ron new file mode 100644 index 0000000..950b750 --- /dev/null +++ b/examples/save_load/assets/.save.ron @@ -0,0 +1 @@ +(dynamic: assets/, static: levels/world.glb) \ No newline at end of file diff --git a/examples/save_load/assets/blueprints/Dynamic_hierarchy.glb b/examples/save_load/assets/blueprints/Dynamic_hierarchy.glb new file mode 100644 index 0000000000000000000000000000000000000000..f9dc7f135ba75bee767ad8c7507f244622002fb4 GIT binary patch literal 7092 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 literal 0 HcmV?d00001 diff --git a/examples/save_load/assets/blueprints/Dynamic_inside_static.meta.ron b/examples/save_load/assets/blueprints/Dynamic_inside_static.meta.ron new file mode 100644 index 0000000..e660f80 --- /dev/null +++ b/examples/save_load/assets/blueprints/Dynamic_inside_static.meta.ron @@ -0,0 +1,7 @@ +( + assets: + [ + ("Mover", File ( path: "blueprints/Mover.glb" )), + ("Material.001", File ( path: "materials/Material.001.glb" )), + ] +) \ No newline at end of file diff --git a/examples/save_load/assets/blueprints/Mover.glb b/examples/save_load/assets/blueprints/Mover.glb index c0c4122b5758c0da1d91a8127f67cce62f1b634c..c0169f0d4beaafac07e7aa03a8f27156324329b6 100644 GIT binary patch delta 133 zcmZ3`!StYmi8nnb#Epr8fgz!Vf#JwTUS7tD^JN2*a!OMRiZb&`imj}26H8KyG81!v zOkXI|GcPT_I7Z1zAx23fS|cwpHxd>lqjrg7`WL1&JjYAi2rjjIx|S5zSc5 S7^T|HIgDD&n`f|e)B^x#YbwwH delta 95 zcmaFR!L*=*i8nnb#Epr8fkB~#fuUt1FE68^Z(>PmQD$O}XI@%r(%!~?~ud{U40{}J492o!r diff --git a/examples/save_load/assets/blueprints/Pillar.glb b/examples/save_load/assets/blueprints/Pillar.glb index 389fa88cd17e91ecb2c3ea213979d0b4adf6fb7f..6135058c6312af74b5d25139ee4085ef13578671 100644 GIT binary patch delta 167 zcmeyvw}+oMJtxGCiGhJ(4?6=x#6;eU^+~B^mGQ~>xdr)osd**EN>)nMF-l1}sd;6U zR#r(lrKtr)nLu$XtK7tr)S}G993ayd%Jj@j%P)>mvQmgq(umf`OUz9LGGk(tf=hsg rffzap1&JjY5J9+peXz7%dQK8h3A>VJtY(Z-?PeuL4(81|ECI{_*xxs% delta 102 zcmdnP|A&t^JtxGCiGhKkhMj>yVj}NF7vIE^)S}G99M8P8{9+|5C5>o}yu{p8D}@-P v;FA2j)EFflg@VMA43I!BRBf?7SV}KFCn-irGgfnR3L^(Iqr&EFmOy3zM7|#k diff --git a/examples/save_load/assets/levels/World.glb b/examples/save_load/assets/levels/World.glb index c7bfe669d030f2f421cc865883754abbb99b94d2..67d84ca3f76b73ea09d341f9817c298be66dfd7c 100644 GIT binary patch delta 561 zcma)%y-EW?6h_xgL_tg^K}fL-2oc6*e(ucNNi9Bsosqb%F*iDlnQ=g#Y2jan}~J@GxyyQq2I>+W;y!*9@_If!n$t)NYg z$L^KHoqp2IqAc!@i-}*yKQ!#6mu+&mBA5*F$qfEpw&jY`8AMRG0LJro-PcJ zL4(;=;_{D)$v-Le4CJJ4}L$4g%#%H(N4}K*Gf}*)|_YL|@p8)^> delta 133 zcmaDLvqzjSJtxGCiGhJ(4>tpY2=_+5OH7kLGOI9}P8MUixVeO_pE*$1LeJF1!o`*jk-xrR0pvoRp%}JSD4W106#hBOPNMlgYtc*EZ{N&taN;hIa}8 D*^(nC diff --git a/examples/save_load/assets/levels/World.meta.ron b/examples/save_load/assets/levels/World.meta.ron index f8e8da4..d8c30be 100644 --- a/examples/save_load/assets/levels/World.meta.ron +++ b/examples/save_load/assets/levels/World.meta.ron @@ -5,5 +5,9 @@ ("Stone", File ( path: "materials/Stone.glb" )), ("Mover", File ( path: "blueprints/Mover.glb" )), ("Material.001", File ( path: "materials/Material.001.glb" )), + ("Dynamic_hierarchy", File ( path: "blueprints/Dynamic_hierarchy.glb" )), + ("Dynamic_inside_static", File ( path: "blueprints/Dynamic_inside_static.glb" )), + ("Mover", File ( path: "blueprints/Mover.glb" )), + ("Material.001", File ( path: "materials/Material.001.glb" )), ] ) \ No newline at end of file diff --git a/examples/save_load/assets/levels/World_dynamic.glb b/examples/save_load/assets/levels/World_dynamic.glb index 350ac4bd651c31398e1fed68de0043fe20b2e4f2..e52b007865797dd621234fb5cb98bd16f0d0e860 100644 GIT binary patch delta 493 zcmZ{gy-EW?6oq$%G!_91u}QH^r7#XN_s-u97J?#{7Ir3tbzPE$bpyL;QY?9hVCy^B z`v5kAjql^EBt?i$HJm%&Ip@xM@9VHXE$?p*qA0rSMbSm?t^X1acyd~$&-pMJvFl~H z71?A~EYR88@ePnt!#D6$Sd-om?+v-mZJ^+$Yrw4Lun zuJ+VTBx^bA%Cg~pSH@XA?}FzQ8$L*(q;Zm*Rp^z{1jMC~=uv}I&U&e(HLlYLJZWnr zk#VTdaJdrX2?I|Wkfhcy=B&xmG6V-_gQOjjk=}y$IspGmo)j1#TwJhN)M?d}+luEP zj0*=5!BBW)xDr6*AOQ+(z@hcPK?GQZxw4_NL>jkz{T+V}xC)k=-?*BWWuE=+-j3TO F`2in3jj#X! delta 64 zcmcb>wTG22JtxGCiGhJ(50F^Fw2^NrLWiD z^#|ZD_z-3{-rSm|vE<#^xty6fJ9gJUKHLI;e>(u5VgO$o_1cg)VMqlj3`v&;lskfP zQXt=YoCPe5cQGV>;M1T@dA$6-9=}K@tc0B<2DzX-^jLt-R>CABgM=;ukb)UWAt{^= zN#OKRN1DyPBPjPAKWt9?3=*(5l}_f_=xlZxl0FT43MPuJMv=|WOoZ`<;Oqw_GGq#= zGPT*D<|mG)Y-mlt4ovCtT;6>Js)yb%E_F9;RfiYPeaItYG!r>wChxh$0*z zxYrs8c^s1O^+x%)T(2qiYW1UPu|f(-yc#cPd#?1cW~`ypNHOoYXbKsZcY!nvIvvVS zJo;0ixU7H90vd?p%X7R)J85MM;<7=2BV(l{+An#93DcfXWoFa1Y3Ixga)JZsl?Yk&1e!qrOBO7UA%&{3uiDe8!sfa(Ao(+cY|hZOtdPv$Bu5)G0Zi zlQyCj=IYL*b2vZ0@rQCyuEF0wm2vcbxI>n9?Q@$vp2N6J))>;hO4d5LuamWX-9C=$ z(KzzFEbFt}Z^-!Djh?HI6XEK5ao2XaPkokr7krlDHQq{}bvR2loqGXC`z-AXKG&0z zu45&R_PK$x1^3|zY~lM5cHj~0Db2xCd|G LF~o3qR6@gq(Q}v~)BFEVzmJ+*KZwgfusgL|r z)gORA;Uk!Jyh)s%g^YV5 z;-o~r_jnXWajuIYxxGFM+l=SRAM3euQ#W+WAsRVnJPx7|oeiCmu|{Ga0Z56aQcOxG zBNBQ8)RAU$;0eY9uOBxjei{j*Hj_^DbbLBHjmUt-y#ywWt)`JpCFqpqiHw0da=p=h4P$Oq8US-1T_XGbh8g_dji?NOoX?Zc*kNOcm@ce{^6RNwI z%dn|qIi_hFZc(E;HQk~~spFW2NzG!xMV)Qhw(As_0DH&8j2^Tj0SU5W#sG;t9cn)=}P`FM}xB{WT7~^IK%t2kQ0sg(J;ix zF-(c}OWveTEjoD|)1sD3ZOPYtbds(Bhw0?QvVeOl5k@2xlH)J?1)R!kCwW=)>P}XL zBW*Xs3sWKr$VnRB*x#+}9wtLNV{)F^gw@uCU=MZvgGX8$k=koJJxV+Bp$}ab* z&w_8pXCYqUE%jN2vtU!XGdRj;VbAznPfn_ir8vsx2F@BhglDjZ?_=16C$NL-4!nl9 l@E*2t-G&$N9A3gYuIrfS5xjvdT({r>yo0B(f$Ijmg8yyH7x(}G literal 0 HcmV?d00001 diff --git a/examples/save_load/assets/materials/Stone.glb b/examples/save_load/assets/materials/Stone.glb new file mode 100644 index 0000000000000000000000000000000000000000..702d12eb258384ad4071170ced3bdde1b9275bc5 GIT binary patch literal 1752 zcma)6+iuf95FOf5t_2DdUZZ_BVSRTZA=Fk>3gm*CsxK9a9A}eSa_nloDO6FUKJrsl ze*oV39A+JFZcWo#^6u>HnKL_Q$L>W(2WtTEZxg`U0QlN$)Q7}RQzl4xNO~-0+!qNa zW%BKmCvlP%dKgmJi&)%YyiobrD4bhGqiDNCBj=2#VG<+QC{i-gNE#pkDbw6aN%>?* zV!w|*(rWd6!FcFLX={wrNSt(-1koR(AJf&4^jUhE(d4nUJhIgk2_}%>30an-lMLDs zYla=xA!We_4B5tM#}OJiYx5cteiVhlVKV5Q#w^9mL(=wBwx2`^Kk$RB@Dp0}D5WLS zbtyGm-Jy;~i<* zV4ax&6P4yGZPla@cz7Q6LlK_mSYHSpwg*Bkhva*sSvjgS>X~5m#$j!@O3FIkMi_U( zKw^xkTnHLvV*3GZr3shvqY8s=m+|9}{mfW`q<@A&$KvSX4DZg?4M!tEGKjHD3`?^8 zlDAf*HYz0_*RrYYWlG)4Cv^(3aZWxgBe}N|X+(BHa{OiA#15RVM3;wNUCF9&lmFzd^ylC#QYsy06jO@PAE|xW$*mh+dGpSA4nd36@5@ycrSRVFI;Wz$7_9}Jw`=@%9zn|`~<-Wq) zW?#*4+-55dxxdU-J~^+l)&8paDnF0nk?TcUt>t{f#$RpzTz(!Km)G;N+L!YLvw)q$ zEW|6mrI=Mb3wtW}9FM{*%yXFQ@k*UzDUZV3;8}x*@C?@QeGHrM1a@%Tf!FXB-orMI h+wcOO!%JAlaUByqf;X^*;}$%CckmQ8aNK}b@E^Ru5-9)x literal 0 HcmV?d00001 diff --git a/examples/save_load/assets/registry.json b/examples/save_load/assets/registry.json index f4d15a3..037310d 100644 --- a/examples/save_load/assets/registry.json +++ b/examples/save_load/assets/registry.json @@ -3609,6 +3609,30 @@ "type": "object", "typeInfo": "Value" }, + "bevy_egui::EguiSettings": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_egui::EguiSettings", + "properties": { + "default_open_url_target": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "scale_factor": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "scale_factor" + ], + "short_name": "EguiSettings", + "type": "object", + "typeInfo": "Struct" + }, "bevy_gizmos::aabb::AabbGizmoConfigGroup": { "additionalProperties": false, "isComponent": false, @@ -12947,6 +12971,14 @@ "type": "object", "typeInfo": "Value" }, + "core::ops::Range": { + "isComponent": false, + "isResource": false, + "long_name": "core::ops::Range", + "short_name": "Range", + "type": "object", + "typeInfo": "Value" + }, "core::option::Option<(u8, u8)>": { "isComponent": false, "isResource": false, @@ -13661,6 +13693,295 @@ "type": "object", "typeInfo": "Struct" }, + "glam::BVec2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::BVec2", + "properties": { + "x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "y": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "x", + "y" + ], + "short_name": "BVec2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::BVec3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::BVec3", + "properties": { + "x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "y": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "z": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "BVec3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::BVec3A": { + "isComponent": false, + "isResource": false, + "long_name": "glam::BVec3A", + "short_name": "BVec3A", + "type": "object", + "typeInfo": "Value" + }, + "glam::BVec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::BVec4", + "properties": { + "w": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "y": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "z": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "BVec4", + "type": "object", + "typeInfo": "Struct" + }, + "glam::BVec4A": { + "isComponent": false, + "isResource": false, + "long_name": "glam::BVec4A", + "short_name": "BVec4A", + "type": "object", + "typeInfo": "Value" + }, + "glam::DAffine2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DAffine2", + "properties": { + "matrix2": { + "type": { + "$ref": "#/$defs/glam::DMat2" + } + }, + "translation": { + "type": { + "$ref": "#/$defs/glam::DVec2" + } + } + }, + "required": [ + "matrix2", + "translation" + ], + "short_name": "DAffine2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DAffine3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DAffine3", + "properties": { + "matrix3": { + "type": { + "$ref": "#/$defs/glam::DMat3" + } + }, + "translation": { + "type": { + "$ref": "#/$defs/glam::DVec3" + } + } + }, + "required": [ + "matrix3", + "translation" + ], + "short_name": "DAffine3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DMat2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DMat2", + "properties": { + "x_axis": { + "type": { + "$ref": "#/$defs/glam::DVec2" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::DVec2" + } + } + }, + "required": [ + "x_axis", + "y_axis" + ], + "short_name": "DMat2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DMat3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DMat3", + "properties": { + "x_axis": { + "type": { + "$ref": "#/$defs/glam::DVec3" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::DVec3" + } + }, + "z_axis": { + "type": { + "$ref": "#/$defs/glam::DVec3" + } + } + }, + "required": [ + "x_axis", + "y_axis", + "z_axis" + ], + "short_name": "DMat3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DMat4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DMat4", + "properties": { + "w_axis": { + "type": { + "$ref": "#/$defs/glam::DVec4" + } + }, + "x_axis": { + "type": { + "$ref": "#/$defs/glam::DVec4" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::DVec4" + } + }, + "z_axis": { + "type": { + "$ref": "#/$defs/glam::DVec4" + } + } + }, + "required": [ + "x_axis", + "y_axis", + "z_axis", + "w_axis" + ], + "short_name": "DMat4", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DQuat": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DQuat", + "properties": { + "w": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "x": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f64" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "DQuat", + "type": "object", + "typeInfo": "Struct" + }, "glam::DVec2": { "additionalProperties": false, "isComponent": false, @@ -13686,6 +14007,74 @@ "type": "object", "typeInfo": "Struct" }, + "glam::DVec3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DVec3", + "properties": { + "x": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f64" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "DVec3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DVec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DVec4", + "properties": { + "w": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "x": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f64" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "DVec4", + "type": "object", + "typeInfo": "Struct" + }, "glam::IVec2": { "additionalProperties": false, "isComponent": false, @@ -13711,6 +14100,74 @@ "type": "object", "typeInfo": "Struct" }, + "glam::IVec3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::IVec3", + "properties": { + "x": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/i32" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "IVec3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::IVec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::IVec4", + "properties": { + "w": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "x": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/i32" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "IVec4", + "type": "object", + "typeInfo": "Struct" + }, "glam::Mat2": { "additionalProperties": false, "isComponent": false, @@ -13736,6 +14193,37 @@ "type": "object", "typeInfo": "Struct" }, + "glam::Mat3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::Mat3", + "properties": { + "x_axis": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "z_axis": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + }, + "required": [ + "x_axis", + "y_axis", + "z_axis" + ], + "short_name": "Mat3", + "type": "object", + "typeInfo": "Struct" + }, "glam::Mat3A": { "additionalProperties": false, "isComponent": false, @@ -13897,6 +14385,43 @@ "type": "object", "typeInfo": "Struct" }, + "glam::UVec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::UVec4", + "properties": { + "w": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "x": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/u32" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "UVec4", + "type": "object", + "typeInfo": "Struct" + }, "glam::Vec2": { "additionalProperties": false, "isComponent": false, diff --git a/examples/save_load/assets/scenes/save.scn.ron b/examples/save_load/assets/scenes/save.scn.ron index 3f0b257..b50b1c5 100644 --- a/examples/save_load/assets/scenes/save.scn.ron +++ b/examples/save_load/assets/scenes/save.scn.ron @@ -8,22 +8,22 @@ ), delta: ( secs: 0, - nanos: 19854342, + nanos: 20094396, ), - delta_seconds: 0.019854343, - delta_seconds_f64: 0.019854342, + delta_seconds: 0.020094397, + delta_seconds_f64: 0.020094396, elapsed: ( - secs: 0, - nanos: 579651002, + secs: 1, + nanos: 493224348, ), - elapsed_seconds: 0.579651, - elapsed_seconds_f64: 0.579651002, + elapsed_seconds: 1.4932244, + elapsed_seconds_f64: 1.493224348, elapsed_wrapped: ( - secs: 0, - nanos: 579651002, + secs: 1, + nanos: 493224348, ), - elapsed_seconds_wrapped: 0.579651, - elapsed_seconds_wrapped_f64: 0.579651002, + elapsed_seconds_wrapped: 1.4932244, + elapsed_seconds_wrapped_f64: 1.493224348, ), "bevy_time::time::Time": ( context: ( @@ -41,22 +41,22 @@ ), delta: ( secs: 0, - nanos: 19854342, + nanos: 20094396, ), - delta_seconds: 0.019854343, - delta_seconds_f64: 0.019854342, + delta_seconds: 0.020094397, + delta_seconds_f64: 0.020094396, elapsed: ( - secs: 0, - nanos: 579651002, + secs: 1, + nanos: 493224348, ), - elapsed_seconds: 0.579651, - elapsed_seconds_f64: 0.579651002, + elapsed_seconds: 1.4932244, + elapsed_seconds_f64: 1.493224348, elapsed_wrapped: ( - secs: 0, - nanos: 579651002, + secs: 1, + nanos: 493224348, ), - elapsed_seconds_wrapped: 0.579651, - elapsed_seconds_wrapped_f64: 0.579651002, + elapsed_seconds_wrapped: 1.4932244, + elapsed_seconds_wrapped_f64: 1.493224348, ), "bevy_time::time::Time": ( context: ( @@ -66,7 +66,7 @@ ), overstep: ( secs: 0, - nanos: 1526002, + nanos: 8849348, ), ), wrap_period: ( @@ -80,17 +80,17 @@ delta_seconds: 0.015625, delta_seconds_f64: 0.015625, elapsed: ( - secs: 0, - nanos: 578125000, + secs: 1, + nanos: 484375000, ), - elapsed_seconds: 0.578125, - elapsed_seconds_f64: 0.578125, + elapsed_seconds: 1.484375, + elapsed_seconds_f64: 1.484375, elapsed_wrapped: ( - secs: 0, - nanos: 578125000, + secs: 1, + nanos: 484375000, ), - elapsed_seconds_wrapped: 0.578125, - elapsed_seconds_wrapped_f64: 0.578125, + elapsed_seconds_wrapped: 1.484375, + elapsed_seconds_wrapped_f64: 1.484375, ), "bevy_render::camera::clear_color::ClearColor": (Srgba(( red: 0.16862746, @@ -125,16 +125,68 @@ "bevy_gizmos::config::GizmoConfigStore": (), }, entities: { - 4294967309: ( + 4294967311: ( components: { - "blenvy::blueprints::spawn_from_blueprints::BlueprintInfo": ( - name: "Mover", - path: "blueprints/Mover.glb", - ), - "blenvy::blueprints::spawn_from_blueprints::SpawnBlueprint": (), "bevy_transform::components::transform::Transform": ( translation: ( - x: 0.19871584, + x: -2.217765, + y: 1.2997229, + z: 2.3971958, + ), + rotation: ( + x: 0.10570976, + y: 0.038342018, + z: 0.09289465, + w: 0.9893058, + ), + scale: ( + x: 0.53947395, + y: 0.53947395, + z: 0.5394739, + ), + ), + "bevy_transform::components::global_transform::GlobalTransform": (( + matrix3: ( + x_axis: ( + x: 0.5285771, + y: 0.10352973, + z: -0.030331498, + ), + y_axis: ( + x: -0.094783515, + y: 0.5181065, + z: 0.11667855, + ), + z_axis: ( + x: 0.051521756, + y: -0.10899262, + z: 0.5258309, + ), + ), + translation: ( + x: -2.2227652, + y: 1.2997229, + z: 2.3971958, + ), + )), + "blenvy::blueprints::spawn_from_blueprints::BlueprintInfo": ( + name: "Dynamic_hierarchy", + path: "blueprints/Dynamic_hierarchy.glb", + ), + "bevy_core::name::Name": ( + hash: 1803003925387469959, + name: "Dynamic_hierarchy", + ), + "blenvy::save_load::Dynamic": (), + "blenvy::blueprints::spawn_from_blueprints::SpawnBlueprint": (), + "bevy_render::view::visibility::InheritedVisibility": (true), + }, + ), + 4294967312: ( + components: { + "bevy_transform::components::transform::Transform": ( + translation: ( + x: 0.2887157, y: 1.19514, z: -0.7909124, ), @@ -169,17 +221,78 @@ ), ), translation: ( - x: 0.18871583, + x: 0.2837157, y: 1.19514, z: -0.7909124, ), )), - "bevy_hierarchy::components::parent::Parent": (21474836492), + "blenvy::blueprints::spawn_from_blueprints::BlueprintInfo": ( + name: "Mover", + path: "blueprints/Mover.glb", + ), "bevy_core::name::Name": ( - hash: 10742641839607126956, + hash: 3988719516189002069, name: "Mover", ), "blenvy::save_load::Dynamic": (), + "blenvy::blueprints::spawn_from_blueprints::SpawnBlueprint": (), + "bevy_render::view::visibility::InheritedVisibility": (true), + }, + ), + 21474836498: ( + components: { + "bevy_transform::components::transform::Transform": ( + translation: ( + x: 1.6942285, + y: 0.50783855, + z: -2.0131574, + ), + rotation: ( + x: 0.0, + y: 0.0, + z: 0.0, + w: 1.0, + ), + scale: ( + x: 1.0, + y: 1.0, + z: 1.0, + ), + ), + "bevy_transform::components::global_transform::GlobalTransform": (( + matrix3: ( + x_axis: ( + x: 0.6095814, + y: 0.1066819, + z: -0.10043551, + ), + y_axis: ( + x: -0.08811652, + y: 0.6102711, + z: 0.113412924, + ), + z_axis: ( + x: 0.11706323, + y: -0.096156046, + z: 0.60836506, + ), + ), + translation: ( + x: -1.6649909, + y: 1.184185, + z: 2.0619445, + ), + )), + "blenvy::blueprints::spawn_from_blueprints::BlueprintInfo": ( + name: "Mover", + path: "blueprints/Mover.glb", + ), + "bevy_core::name::Name": ( + hash: 14976337147749212273, + name: "Mover.001", + ), + "blenvy::save_load::Dynamic": (), + "blenvy::blueprints::spawn_from_blueprints::SpawnBlueprint": (), "bevy_render::view::visibility::InheritedVisibility": (true), }, ), diff --git a/examples/save_load/assets/scenes/save.scn.ron.save.ron b/examples/save_load/assets/scenes/save.scn.ron.save.ron new file mode 100644 index 0000000..3636658 --- /dev/null +++ b/examples/save_load/assets/scenes/save.scn.ron.save.ron @@ -0,0 +1 @@ +(dynamic: assets/scenes/save.scn.ron, static: levels/world.glb) \ No newline at end of file diff --git a/examples/save_load/src/game/mod.rs b/examples/save_load/src/game/mod.rs index e9cdf01..55cad51 100644 --- a/examples/save_load/src/game/mod.rs +++ b/examples/save_load/src/game/mod.rs @@ -12,10 +12,10 @@ pub mod in_game_saving; pub use in_game_saving::*; use bevy::prelude::*; -use blenvy::{LoadRequest, LoadingFinished, SaveRequest, SavingFinished}; +use blenvy::{LoadRequest, LoadingFinished, SavingRequest, SavingFinished}; pub fn request_save( - mut save_requests: EventWriter, + mut save_requests: EventWriter, keycode: Res>, current_state: Res>, @@ -26,7 +26,7 @@ pub fn request_save( && (current_state.get() != &GameState::InSaving) { next_game_state.set(GameState::InSaving); - save_requests.send(SaveRequest { + save_requests.send(SavingRequest { path: "save.scn.ron".into(), }); } diff --git a/examples/save_load/src/main.rs b/examples/save_load/src/main.rs index 3b5db72..48918a8 100644 --- a/examples/save_load/src/main.rs +++ b/examples/save_load/src/main.rs @@ -1,7 +1,7 @@ use std::any::TypeId; use bevy::{prelude::*, utils::hashbrown::HashSet}; -use blenvy::{AddToGameWorld, BlenvyPlugin, BluePrintBundle, BlueprintInfo, Dynamic, DynamicBlueprintInstance, GameWorldTag, HideUntilReady, SaveRequest, SpawnBlueprint}; +use blenvy::{AddToGameWorld, BlenvyPlugin, BlueprintInfo, BlueprintWorld, Dynamic, DynamicBlueprintInstance, GameWorldTag, HideUntilReady, LoadingRequest, SavingRequest, SpawnBlueprint}; use rand::Rng; // mod game; @@ -9,11 +9,13 @@ use rand::Rng; mod component_examples; use component_examples::*; +use bevy_inspector_egui::quick::WorldInspectorPlugin; fn main() { App::new() .add_plugins(( DefaultPlugins.set(AssetPlugin::default()), + WorldInspectorPlugin::new(), BlenvyPlugin { save_component_filter: SceneFilter::Allowlist(HashSet::from([ TypeId::of::(), @@ -49,19 +51,10 @@ fn setup_game( mut commands: Commands, ) { - // here we spawn our game world/level, which is also a blueprint ! + + // would be nice: contains both static & dynamic stuff commands.spawn(( - BlueprintInfo::from_path("levels/World.glb"), // all we need is a Blueprint info... - SpawnBlueprint, // and spawnblueprint to tell blenvy to spawn the blueprint now - HideUntilReady, // only reveal the level once it is ready - GameWorldTag, - )); - - // here we spawn our game world/level, which is also a blueprint ! - commands.spawn(( - BlueprintInfo::from_path("levels/World_dynamic.glb"), // all we need is a Blueprint info... - SpawnBlueprint, // and spawnblueprint to tell blenvy to spawn the blueprint now - HideUntilReady, // only reveal the level once it is ready + BlueprintWorld::from_path("levels/World.glb"), // will take care of loading both static & dynamic data )); } @@ -97,47 +90,30 @@ fn move_movers( mut movers: Query<(&mut Transform), With> ) { for mut transform in movers.iter_mut(){ - println!("moving dynamic entity"); - transform.translation.x += 0.01; + // println!("moving dynamic entity"); + transform.translation.x += 0.005; } } fn save_game( keycode: Res>, - mut save_requests: EventWriter, + mut save_requests: EventWriter, ) { if keycode.just_pressed(KeyCode::KeyS) { - save_requests.send(SaveRequest { + save_requests.send(SavingRequest { path: "scenes/save.scn.ron".into(), }); } } -/* -pub fn request_save( - mut save_requests: EventWriter, - keycode: Res>, - - current_state: Res>, - mut next_game_state: ResMut>, -) { - if keycode.just_pressed(KeyCode::KeyS) - && (current_state.get() != &GameState::InLoading) - && (current_state.get() != &GameState::InSaving) - { - next_game_state.set(GameState::InSaving); - save_requests.send(SaveRequest { - path: "save.scn.ron".into(), - }); - } -}*/ - - fn load_game( keycode: Res>, + mut load_requests: EventWriter, ) { if keycode.just_pressed(KeyCode::KeyL) { - + load_requests.send(LoadingRequest { + path: "scenes/save.scn.ron".into(), + }); } } diff --git a/testing/bevy_example/Cargo.toml b/testing/bevy_example/Cargo.toml index 90b258c..9614ad8 100644 --- a/testing/bevy_example/Cargo.toml +++ b/testing/bevy_example/Cargo.toml @@ -9,4 +9,7 @@ bevy = { version = "0.14", features = ["dynamic_linking"] } blenvy = { path = "../../crates/blenvy" } #bevy_editor_pls = { version = "0.8" } rand = "0.8.5" -json-writer ="0.3" \ No newline at end of file +json-writer ="0.3" + +[dev-dependencies] +bevy-inspector-egui = { version = "0.25.1"} \ No newline at end of file