From 228de6a6360dcfc0c5fd552eaa38ab634dcef78b Mon Sep 17 00:00:00 2001 From: cailean Date: Mon, 22 Jul 2024 15:15:33 +0100 Subject: [PATCH] init commit --- MeshRenderingPipeline.py | 259 ++++++++++++++++++++++++++++++++ application.py | 127 ++++++++++++++++ configs/instant-mesh-large.yaml | 2 +- examples/tayq.jpg | Bin 0 -> 80496 bytes src/utils/mesh_util.py | 19 +++ 5 files changed, 406 insertions(+), 1 deletion(-) create mode 100644 MeshRenderingPipeline.py create mode 100644 application.py create mode 100644 examples/tayq.jpg diff --git a/MeshRenderingPipeline.py b/MeshRenderingPipeline.py new file mode 100644 index 0000000..40e65d1 --- /dev/null +++ b/MeshRenderingPipeline.py @@ -0,0 +1,259 @@ +import os +import numpy as np +import torch +import rembg +from PIL import Image +from torchvision.transforms import v2 +from tqdm import tqdm +from huggingface_hub import hf_hub_download +from pytorch_lightning import seed_everything +from omegaconf import OmegaConf +from einops import rearrange +from diffusers import DiffusionPipeline, EulerAncestralDiscreteScheduler +import subprocess + + +from src.utils.train_util import instantiate_from_config +from src.utils.camera_util import ( + FOV_to_intrinsics, + get_zero123plus_input_cameras, + get_circular_camera_poses, +) +from src.utils.mesh_util import save_obj, save_obj_with_mtl, save_gltf +from src.utils.infer_util import remove_background, resize_foreground, save_video + + +class MeshRenderingPipeline: + def __init__(self, config_file, input_path, output_path='outputs/', diffusion_steps=75, + seed=42, scale=1.0, distance=4.5, view=6, no_rembg=False, export_texmap=False, + save_video=False, gltf=False, remove=False, gltf_path='C:/Users/caile/Desktop/'): + self.config_file = config_file + self.input_path = input_path + self.output_path = output_path + self.diffusion_steps = diffusion_steps + self.seed = seed + self.scale = scale + self.distance = distance + self.view = view + self.no_rembg = no_rembg + self.export_texmap = export_texmap + self.save_video = save_video + self.gltf = gltf + self.remove = remove + self.gltf_path = gltf_path + + # Parse configuration and setup + self._parse_config() + self._setup() + + def _parse_config(self): + # Parse configuration file + self.config = OmegaConf.load(self.config_file) + self.config_name = os.path.basename(self.config_file).replace('.yaml', '') + self.model_config = self.config.model_config + self.infer_config = self.config.infer_config + self.IS_FLEXICUBES = True if self.config_name.startswith('instant-mesh') else False + + def _setup(self): + # Seed for reproducibility + seed_everything(self.seed) + + # Device setup + self.device = torch.device('cuda') + + # Load diffusion model + print('Loading diffusion model ...') + self.pipeline = DiffusionPipeline.from_pretrained( + "sudo-ai/zero123plus-v1.2", + custom_pipeline="zero123plus", + torch_dtype=torch.float16, + ) + self.pipeline.scheduler = EulerAncestralDiscreteScheduler.from_config( + self.pipeline.scheduler.config, timestep_spacing='trailing' + ) + + # Load custom white-background UNet + print('Loading custom white-background unet ...') + if os.path.exists(self.infer_config.unet_path): + unet_ckpt_path = self.infer_config.unet_path + else: + unet_ckpt_path = hf_hub_download(repo_id="TencentARC/InstantMesh", filename="diffusion_pytorch_model.bin", + repo_type="model") + state_dict = torch.load(unet_ckpt_path, map_location='cpu') + self.pipeline.unet.load_state_dict(state_dict, strict=True) + + self.pipeline = self.pipeline.to(self.device) + + # Load reconstruction model + print('Loading reconstruction model ...') + self.model = instantiate_from_config(self.model_config) + if os.path.exists(self.infer_config.model_path): + model_ckpt_path = self.infer_config.model_path + else: + model_ckpt_path = hf_hub_download(repo_id="TencentARC/InstantMesh", + filename=f"{self.config_name.replace('-', '_')}.ckpt", repo_type="model") + state_dict = torch.load(model_ckpt_path, map_location='cpu')['state_dict'] + state_dict = {k[14:]: v for k, v in state_dict.items() if k.startswith('lrm_generator.')} + self.model.load_state_dict(state_dict, strict=True) + + self.model = self.model.to(self.device) + if self.IS_FLEXICUBES: + self.model.init_flexicubes_geometry(self.device, fovy=30.0) + self.model = self.model.eval() + + # Make output directories + self.image_path = os.path.join(self.output_path, self.config_name, 'images') + self.mesh_path = os.path.join(self.output_path, self.config_name, 'meshes') + self.video_path = os.path.join(self.output_path, self.config_name, 'videos') + os.makedirs(self.image_path, exist_ok=True) + os.makedirs(self.mesh_path, exist_ok=True) + os.makedirs(self.video_path, exist_ok=True) + + def process_image(self, image_file, idx, total_num_files, rembg_session): + if rembg_session == None: + rembg_session = None if self.no_rembg else rembg.new_session() + + name = os.path.basename(image_file).split('.')[0] + print(f'[{idx + 1}/{total_num_files}] Creating novel viewpoints of {name} ...') + + # Remove background optionally + input_image = Image.open(image_file) + if not self.no_rembg: + input_image = remove_background(input_image, rembg_session) + input_image = resize_foreground(input_image, 0.85) + + # Sampling + output_image = self.pipeline( + input_image, + num_inference_steps=self.diffusion_steps, + ).images[0] + + img_path = os.path.join(self.image_path, f'{name}.png') + output_image.save(img_path) + print(f"Image of viewpoints saved to {os.path.join(self.image_path, f'{name}.png')}") + + images = np.asarray(output_image, dtype=np.float32) / 255.0 + images = torch.from_numpy(images).permute(2, 0, 1).contiguous().float() # (3, 960, 640) + images = rearrange(images, 'c (n h) (m w) -> (n m) c h w', n=3, m=2) # (6, 3, 320, 320) + + input_cameras = get_zero123plus_input_cameras(batch_size=1, radius=4.0 * self.scale).to(self.device) + chunk_size = 20 if self.IS_FLEXICUBES else 1 + print(f'Creating {name} ...') + images = images.unsqueeze(0).to(self.device) + images = v2.functional.resize(images, 320, interpolation=3, antialias=True).clamp(0, 1) + + if self.view == 4: + indices = torch.tensor([0, 2, 4, 5]).long().to(self.device) + images = images[:, indices] + input_cameras = input_cameras[:, indices] + + with torch.no_grad(): + # Get triplane + planes = self.model.forward_planes(images, input_cameras) + + # Get mesh + mesh_path_idx = os.path.join(self.mesh_path, f'{name}.obj') + mtl_path_idx = os.path.join(self.mesh_path, f'{name}.mtl') + texmap_path_idx = os.path.join(self.mesh_path, f'{name}.png') + + mesh_out = self.model.extract_mesh( + planes, + use_texture_map=self.export_texmap, + **self.infer_config, + ) + + + if self.export_texmap: + vertices, faces, uvs, mesh_tex_idx, tex_map = mesh_out + save_obj_with_mtl( + vertices.data.cpu().numpy(), + uvs.data.cpu().numpy(), + faces.data.cpu().numpy(), + mesh_tex_idx.data.cpu().numpy(), + tex_map.permute(1, 2, 0).data.cpu().numpy(), + mesh_path_idx, + ) + else: + vertices, faces, vertex_colors = mesh_out + save_obj(vertices, faces, vertex_colors, mesh_path_idx) + + print(f"Mesh saved to {mesh_path_idx}") + + # Get video + if self.save_video: + video_path_idx = os.path.join(self.video_path, f'{name}.mp4') + render_size = self.infer_config.render_resolution + render_cameras = self._get_render_cameras() + + frames = self._render_frames( + planes, + render_cameras=render_cameras, + render_size=render_size, + chunk_size=chunk_size, + ) + + save_video( + frames, + video_path_idx, + fps=30, + ) + print(f"Video saved to {video_path_idx}") + + if self.gltf: + output_path = os.path.join(self.gltf_path, f'{name}.gltf') + command = f' obj2gltf -i {mesh_path_idx} -o {output_path}' + process = subprocess.run(command, shell=True, capture_output=True, text=True) + # Check if the process was successful + if process.returncode == 0: + print(f'Successfully converted {mesh_path_idx} to {output_path}') + else: + print(f'Error converting {mesh_path_idx}: {process.stderr}') + + if self.remove: + print(f'Removing files (mtl, obj, diffusion, texmap) for {name}') + os.remove(mesh_path_idx) + os.remove(mtl_path_idx) + os.remove(img_path) + os.remove(texmap_path_idx) + pass + + def run_pipeline_sequence(self, stop_event): + # Process input files + if os.path.isdir(self.input_path): + input_files = [ + os.path.join(self.input_path, file) + for file in os.listdir(self.input_path) + if file.endswith('.png') or file.endswith('.jpg') or file.endswith('.webp') + ] + else: + input_files = [self.input_path] + print(f'\nTotal number of input images: {len(input_files)}') + + rembg_session = None if self.no_rembg else rembg.new_session() + + for idx, image_file in enumerate(input_files): + if stop_event.is_set(): # Check if stop event is set + print("\nStopping pipeline sequence.") + break + self.process_image(image_file, idx, len(input_files), rembg_session) + + def _render_frames(self, planes, render_cameras, render_size=512, chunk_size=1): + # Render frames from triplanes + frames = [] + for i in tqdm(range(0, render_cameras.shape[1], chunk_size)): + if self.IS_FLEXICUBES: + frame = self.model.forward_geometry( + planes, + render_cameras[:, i:i + chunk_size], + render_size=render_size, + )['img'] + else: + frame = self.model.forward_synthesizer( + planes, + render_cameras[:, i:i + chunk_size], + render_size=render_size, + )['images_rgb'] + frames.append(frame) + + frames = torch.cat(frames, dim=1)[0] # we suppose batch size is always 1 + return frames diff --git a/application.py b/application.py new file mode 100644 index 0000000..52686f1 --- /dev/null +++ b/application.py @@ -0,0 +1,127 @@ +import argparse +from MeshRenderingPipeline import MeshRenderingPipeline +from watchdog.observers import Observer +from watchdog.events import FileSystemEventHandler +import threading +import time +import random + +class ImageHandler(FileSystemEventHandler): + def __init__(self, mesh_pipeline): + self.mesh_pipeline = mesh_pipeline + + def on_created(self, event): + if event.is_directory: + return + if event.src_path.endswith(('.png', '.jpg', '.webp')): + print(f"New image detected: {event.src_path}") + self.mesh_pipeline.process_image(event.src_path, 0, 1, None) + +class App: + def __init__(self, args): + self.args = args + self.running = False + self.stop_event = threading.Event() + self.thread = None + self.input_thread = None + self.observer = None + self.mesh_pipeline = MeshRenderingPipeline( + args.config, + args.input_path, + args.output_path, + args.diffusion_steps, + args.seed, + args.scale, + args.distance, + args.view, + args.no_rembg, + args.export_texmap, + args.save_video, + args.gltf, + args.remove, + args.gltf_path + ) + + def start_generation(self): + self.running = True + self.stop_event.clear() + self.thread = threading.Thread(target=self._generate_objects) + self.thread.start() + + def stop_generation(self): + self.stop_event.set() + self.running = False + if self.thread: + self.thread.join() + self.stop_observer() + + def monitor_new_images(self): + event_handler = ImageHandler(self.mesh_pipeline) + self.observer = Observer() + self.observer.schedule(event_handler, self.args.input_path, recursive=False) + self.observer.start() + print("\nWaiting for new image..") + while not self.stop_event.is_set(): + time.sleep(1) + self.stop_observer() # Ensure the observer is stopped on interruption + + + def stop_observer(self): + if self.observer: + self.observer.stop() + self.observer.join() + self.observer = None + + def _generate_objects(self): + while not self.stop_event.is_set(): + self.run_pipeline() + time.sleep(1) + + + def run_pipeline(self): + self.mesh_pipeline.run_pipeline_sequence(self.stop_event) + self.monitor_new_images() + + def run(self): + self.input_thread = threading.Thread(target=self._handle_input) + self.input_thread.start() + self.input_thread.join() + + def _handle_input(self): + while True: + command = input("\nEnter a command, : ") + if command.lower() == 'exit': + print("Exiting the program.") + self.stop_generation() + break + elif command.lower() == 'start': + if not self.running: + print("\nStarting continuous generation.") + self.start_generation() + else: + print("\nGeneration already running.") + elif command.lower() == 'stop': + print("\nStopping continuous generation.") + self.stop_generation() + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('config', type=str, help='Path to config file.') + parser.add_argument('input_path', type=str, help='Path to input image or directory.') + parser.add_argument('--output_path', type=str, default='outputs/', help='Output directory.') + parser.add_argument('--diffusion_steps', type=int, default=75, help='Denoising Sampling steps.') + parser.add_argument('--seed', type=int, default=42, help='Random seed for sampling.') + parser.add_argument('--scale', type=float, default=1.0, help='Scale of generated object.') + parser.add_argument('--distance', type=float, default=4.5, help='Render distance.') + parser.add_argument('--view', type=int, default=6, choices=[4, 6], help='Number of input views.') + parser.add_argument('--no_rembg', action='store_true', help='Do not remove input background.') + parser.add_argument('--export_texmap', action='store_true', help='Export a mesh with texture map.') + parser.add_argument('--save_video', action='store_true', help='Save a circular-view video.') + parser.add_argument('--gltf', action='store_true', help='Export a gtlf file.') + parser.add_argument('--remove', action='store_true', help='Removes obj, mtl, texmap, nv files.') + parser.add_argument('--gltf_path', type=str, default='C:/Users/caile/Desktop/InstantMesh/ex', help='Output directory.') + args = parser.parse_args() + + app = App(args) + app.run() \ No newline at end of file diff --git a/configs/instant-mesh-large.yaml b/configs/instant-mesh-large.yaml index e296bc8..066240d 100644 --- a/configs/instant-mesh-large.yaml +++ b/configs/instant-mesh-large.yaml @@ -18,5 +18,5 @@ model_config: infer_config: unet_path: ckpts/diffusion_pytorch_model.bin model_path: ckpts/instant_mesh_large.ckpt - texture_resolution: 1024 + texture_resolution: 512 render_resolution: 512 \ No newline at end of file diff --git a/examples/tayq.jpg b/examples/tayq.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5909390613582bc048c92aacdf1424545a635dab GIT binary patch literal 80496 zcmd42byQqWvnV=vfCNHK^T?QX45ZpZsu7eZYAwX~o4ud;P!r&gr z<@cTQ&UtsOyWTtBTJMjy_nKL~yLVT0S65fnuB!gK_;&;FQbj>o0f2&n0#JIo0e_bP zvH(nU3``7kOiT<+EG*1tI4^NlXa2XZzuy4_&(PjH-6*sGR00$< z0+hc$08{`J008T0wEumfpgj#2>lrHcQ?toS016r!>QfCC`g7c;>ZdpVc_P4kh4uE` zYiTVrLR#0)iO+as@@sphi0HKIh)HyGfuG#mlaf;k=y~}CWx>Jq)0-!Jdgi^S42(?j z79j$19$yOkwk)5(Q$B%1!T8^>W1u|2e?tG%Dop@DML|PF#lXhIK>d#~{?kZ+@%Gg_ z%ztnb(P}>-&#&DiBDlo(fLHrOTwq?mQ-*mTlW_Zc#ifoUIH`%fFuBsA}2*a z0FaYIA$W=Y|HmRL;FdWjI`d|RAHn$+Nd7|Fvv~%`J0c32fBG$9&B9UK=X@trdw81c z{m72q>ZM{Kb}2tz!S5AMEOmXl6+B3f_`}G}gM7JdSy@5J90?hM$ArF`1FYyd;eVk2 zz_CnD1I}U2vpnFt0YR6W*69GGxF?Tq-;-< zo_NgZH^w7&@8z^C-KK61&Nx$6cS3iNsCox6qMDq4`$(;_h2*rms^`{TE?4#U+M?xI z*#;m7+`h8(PDIL25K-F9SJ`L3fQ~G12OTi@W#>=IZiXD`7!Ejk4;RG2RN$l*o~r}J zM=yjXdB@PdZ(7UK{^WK|HxLrarc!3M579I?(9lfh4A>P(kG*bg5WeF}Y-xU8by+8J z*X~xTADX#I+?coZIcMY!p83Lox7mg8=rTHj3T2SXb|)X^U8Cw*lw|AZp_@tn`>Jze zKb;2;OO7SXp}}Z^lM9~fpET|0rKw^*D*WyXrB|@Auvhv0F=3^E(8r`rDlkMVyYh=r zgU{xobeMJNH(Y#TzEz|iPvYD-KHl3i?G{16D}S@Zl{!Yd(RcR7i0|KhNovRMWe9ux z<*fsX>g$MA8Aj5CRy@PSHwz^w@8<@f)j8#iqv~SX1IN%kF(DdnDNVVNFu$J!^3PLQ zF1ZKrZP^_Mql2V0zGiuE`t9VN1%dXltlMeY_S1^68NR z(c_@9Qd=Zv0$=xhkYEDZWZBSnU96}SZD1RYJ#a)l=~;H0coFqqfIj*enZypM01x}? z_rHc6lbWX-ohwQ>CLIPZgx>_e8%6g@wJq2p&Z}|ZgWK1~G_*+A3WR^WTfD;SnkBWG zk}o6sA#QMYEN_(_F{J#$HrV#%85aSD!v~>xLIuhSC@!!)sEd)OkJE>r8vHBMv14gG`wjPT;<xIzI9XSi zS`o|dciGO$)$FN&Nj*PVJ1#tQARNk5y~@v^oVCKq$Wd6II2Z42`^e4oOS;!#?3M`i zDy|6M)_`FkBi-Inj_d8Tc&o7M8_||Cah_V);v)@v!S^V7lc$MS6DWVad1jp*j&6i{ ztAD?P+f2}iaY(qKT-VT~l-A~|!UkL)`8xyH)car!e~9F|!i3)>wwSL?FVT9P#`|XK zTZh3(56bdWgYN2uTkXRSTHNs-1%2^eJF9!-1#?c@!40-2Rwpy^to!K8UVS)v_pUl^ zUuK|vFI|`0dTHE#VkBwXo}*cj(%JUyERqyuuq7w&=4F-MjM^u{bYE{Tw57&l8$7dz zSCGz9oiEGJyN!y_2VIN2sXRyUByb{rsSD7*djvHf(dpvKZ*Iu)`&Ha#6*A;{HVP1y!kp6X3GwRxkXW zcB)6Ll@QD^tCpE#7kkbZu41YWF<8c#p*t<2SRvdn_IDu5`;n z_f+Gy^78E|UwhrF+DR8G4J>wiyA~slhZi2`L~hfwvXoVLyOG@Z_0ahKpkKbH}a5gEBGmyM?XF~oLiKlPz)yf^kRadyBv7&W34iPz=W zKt?BcXX^9bd=BJDlfuw}0$kA&Q0!M$JP5Q0l*h3YeH(qWV{TmPM;U>Rwer%uMPVhS zjZ2tJLJktY-BdEsJzl3{@5ILK$(dt$#pzXFWc&qqrr%kLGX}2iK4uu1>Y7H*`S+DQ zT>b^b&%$RG&7s*-ZMK5#2?;?;gBsZ`r3V)khbs#>olDg9s^a?o+bfOTMU(d(-7}I= z;YG6nH<@>RH?Wk20(~Tv=5fuRfRce^g$#zowFE2(RY(g2k}COIW}8M}@_ETSghkph z)kZM)HyY*Ahf~4JPz<2rab$NT%P#*xe2a%azMI%OKlt60+*ei+mPWbc$ zY1;jXD2Oy0*TP(S`HlAk?|8>N#vzcVi}CSW=^aq>IHSAL%}3pr4oUeJ@DGqo9C0q! zNryeY-_{nNCS;d3k96Z^h_o=FzD6Mww@3SF`!uNE;#JEY&IK>y{^-oGcKb~}n0FI> zVC9m7t+4zB1a4jm_`hhYx-WA|Nq(}U$E{3ueB2}g-pV(4q(ucm$XHqW!u)0YdT1`U zaONH}fcJZWzf5jQ?=1C?pD0}A=A-4yAhD@=zm8wlQgOsy7Nid{I$#iDvf+4hL&N?@ zJk+-V3Tb$y4V0m+Hd`HTSC*jb@QDx8%e)w=S=adsFgWg)0?r0&7ELCv!$ouFbDq}e zLyOMi-L=2^@Dp1DPiORy7s`~XmS{q|SJtKak%tdNkEzNp6Tebba_r#-DtCv==UJ9Q z^**ytcc5hn?`--yny9)q6@0{c8%Z@RR@zB$jRU)0Xh%3BpdxldbcwCz##q)Y&O(!5 z%~Rb`)3p(Me-oi2&|~Bu_=y1@=pgWA z$@0;~J>Fj6mmip)@GgzSjIe0&<6FTlmE{BCjDFOG4U$p5j;7K?I>DGIuS8+tx@TGb zuLggLw7~1G{WY>ej~&eoUjR)+sm0an+9}%7vTniDmwQ(8{eJfQ9VQg&??w$6|11U` zTnu5sTfffF5pT>+1m0Kw(G?e|jFBk!!WTBVDZf=WKS}Efp4X(Z?n8KBc<`>WPn0H= zTVHYX{fI+p*--+VBN@!*(hy$yJW!>qk+gQ#)o>E?uW->G^haD}Uw`Z4w)iKOslh8R zg~0bGc_R+gz9e3j`)Ei+LJk;o>&k1qW)CH3mRPD9h+g-1%<77@83&1Rb7Q&OtJIV< zO=+o9Se7_jqkszoWq$h5(BkZ#n&|O1Rp(jv>IX0*?wb7&Z6Qag>rqb|gJIpJT=Fl# z5_y+RVxsw)E0uRfYGRE<;N!_ppO@UOYoc9qrnlP_FpHGat5<_*!y1A8LO#tWdm`t! z8R9$@xi{*HYJo9cTREA)$v=#K)APZW3>sq+f!`kLu++3ZWuHZ;sx;d5L}@bH^A z7BnvdmE4Yd0Pd_|Py+Vxojs-bBL~==%bT-3pOBot0BU(K*uH!z30@wgNh?>qe_4ZH zUIu9vDKGSN)3o`Ws>!N2#e9ba3bz}Ts41HvN&;$)>?^B3k4<>=sJ0Re5;;5AT#rNg zorWTzZw+N`tBzg6q-3Fkelv0A;%jT+u=|s6Xo+Rd%lHRNOzSVA+8t zh8`t2mKOW;2q6c-;qQ0fUetE{SjyS&JwpeQ_F!FnxZ|7*j9(ZA@|+vMnAdQLl8l<#mWJ*$94DT_H4XB0Z=%(Vjk^XKy#!OkN&*{F<$s@SjbQ`wv8) zCy2`0!yNSEunN)oN5(uie5xh!e&vc_n<9Qb^9-T1S3FdEEAA2>FeWrAO2M9O1#atT zblrp(ZMo~bH~-=b-S`5Djk$lMlSZmp)VAuI1T4OskbS<}8_{&r$53r;y>V4ZGwscV zbFlkl;)&$t6u7jajI3X7Tilhd^}&7=!I->1&K93Jxs~$-OCR|{^Y|~|*QH3Xb=075 z&63_E9%wM){OpEVXTFX2t3A0Iy6;MT^O%oM;6ZE5Jdo0=JV24|JZ|^0My9L2t*$8W z`e~2;!}$RlllOlCcMlp#8Oc9qQ8YV`25we&pV?F58twbM zo&$Tq<{$r*J+`h#1-!3%xYc>EezW`2=hVt`Xwh&>$gC-P2xj~kLM`6STZ9Rjh^ zBnR40wTR}-i%q1iRF3=qCB`uW*KhpQ&mD6blgY{9*y|d{@0ARU0Vfh1=Lo{KQAht0 zEgfl!o#=csjQ+y!H}U)hog($uyPB8PPpYp%(tq|Z!05PNeM*KN$>{1WOaXv z9LcegQ5@P`J-my#r6JhxEyp#P@ZL{a@-9gyh0iPre?L1Ne7C>Vpa=s#-j_Z$u1EQL z{HIVWe^P&R$miXi|C;3t$f=5-xMP@_XOG$xzJPbH18L^lPc>O;(Vn^a)O@Sjj)CE^z%XU;*L0KcjXKGZtc> zgKw|4CD6VIiC^C7>{GKWey96xA}GjUAx1n$am-M~tK0e87~g8{5L zI;Ii#A(H=MOu>`}e%CoPQt%22doCL6pu>MtZ&piDd%nx&d%6?0^V0sf4Zhlwfg$-H z21ek28yNpNrD8sMo@s;t|B}0N?6#Lih>&E|(sscP5`TrsnxL{*c^7N}DeTKp+MC&H z>**xk?F{G=Gw2zyhssXdmvb5$8X}J@vJKv4n!W z0@QGEuD8;@Y$K&=QOseb1YgLWMTE*cO(yco)7<|*@$(JOYI_13&K|$Sc=hynVemH3 z3>;6}NNR6IW7I+Vkx}a^tJAY8i-QSF8Q0HK;TK~BJ(M4J`14z@Ft|#XBB{-14*O>d zsaGV2zD7j7KmQr=-^BiZE>cIw-h?P07{PBbxheGDQlGaUo5UeQ-MT3c{V5`@Q86jR zTvf!*R%j}j9~6X3a>1gUUsgQy>%#p4)X8rFrr+{(-~Nh>vq25hLODp?DP_*r{YF5b zmHI5A^gYHe%JhUzwnTfegeV57d>0(nXaB5zM1=0Y{!xRY-YQ7TE0<+A{K>)&3=b~w zFs>2zj0ZHA*UYfiwNSJL5~T5orRpwC)L zfMnS|-4EKztO4`OuQNzJobvD==SxBj-d^l()43N)>-m4A!(2_HuOx>bi^t`SXxq&e zGcu?-^o6YAJe?zZ#_x$k?Tu0bUoHN+=t?j^KtPidNC?j-S`Igd|CrnV#p?eD>N7LL z7DLIJyEOE8^-JxY&II30DJ~7>&IAUw;8(eW6i|Cw_{{~xv1OJ>DRlJ2SwB#=f2DcO ze!v+wpR2D-*Lx@Le|02NEO!Os(tg;XrCogcUmNTHfbD-Dj=rd0QR$d(+JYVyOPQL* zZR3-q%xhz?%}r?}O&YbT98d$|$K(R`_WuG{=iB3n7}YO4Yk;LX{`Y=(0c<^NOSk18 z-1ak$W@!jt(?&#vef$R_D>nhb(_*uYM3pJv1V^$yLuF>tC@(fn+LI^bDfrKw!b~79 zkK;-Wl<&-+bHF2`oDdHx%dQy0meQRA)IMtm<)bne*qR{Iy_U{;@N#qj;=vC zkqUp(AYH0QB$BAoMl8!SajRp}*=#ttTp0D*CSqpchZR^>wm$2LRhc^~Gkzm9QoS`^ z{YVC7knov?ze`I{jMyW@*@5@&j z`ct!@U)DvHG5tEY(e!3-jwC2kT~3p--6?NguagZri4H%D!kJ;zB9xP9eHKyv#7J*y zpp0X`9?P3RQVjKKqB5dih1(G{Mz!~Pzi$N=?~U$Lk$QLE8g%3WV|>~XgZOQ^*OF?VPHtBMPa5nI^?t26%2MNvHNSP*aWzFd1v^hxI#-vlMX%wDSwvD{6{^ z7HQb0`GnF5ep=^ItD2nhlG&3jTge?|~LAA?e5b|Y5QI-{rC4-)@_V1ha!1|U7-fV?|YiAUDBEcdR zx5jvi;TdAhP~%AQ`uS_~?bEQO%ae8uMi|Y0IMczjt3S7+ zxH@gDd7t+7uqJC4W&6M4}}e>Gr$E;fdlGKW>l4nm!REL4!s8Eo(WBCYQsK}nbFmH zYI{K;{#Z`e1HiDp3J7B$&oZSy=z2&taIcL<%>^2~{94^1Gxs8sCa`fZ!>}JOyFm+O z@qI6TbY{yRm967DTa}b78^!1!i7;3{mv~l%W`WbInDhbs5Tkw8gByP%DTedhotf0R zF<2D0K<|7!DpZ#r)w}KO)3__$>7cZuF#TSlOOs-V$zilryq=FUqc0NBE_uS2O6%4wc2m0Flo?L2AT=Z-hb2{7~UBwxjC ztnZ^k^4(4wsxp6*)feL&rIe;AaJ^*fB>LSFrW+GKjfM_MO#o}b@&BY08}T73mC4*6 zOwTo-sW`Em$id&ddPfl1uhO;$GI2!BYC{$lKU>ai@NkfOoW6VUI$GbavhjgN#YIl< z!iQ@Jm3u$qE?JRev7=9DG8f2%y)2cJVSsgz3xw07>L7ipnxJPCAc`L{bR|B0z`6}iE0~OZ-Q%8+@MKJ|Cn!@P2hF9#F^BJr2wqxv@6 zR+iP^O7_3d8J1qw=>v>4jnTG%>o)nyFm(G-#W}7+6+sV|%$<9v|KjdyTFinH$dH7B zOr94lgUWBMqV1y-9in%l>`0H<#tgb|0c+7UsX6N-K5ZPcwgF|`0H$5n8ZVQ>7mRMk zV&5U zFTJ=$;>az!$%8T;pWOKYW|R5 zFKUTx%bg)===XKf;Nk0abx&-&6u=yfRJ+Yl!h>wDQ><$gW=(USI~-u$Ag4W;{qKAb zpmyY#f8FUMLVZbTTjgjqTERI>;n_qU?(irr>^v*;El1VXFW)9qpgk^+4+W?)2vJqG zy-%xlF?gSz_PNK8yJFdXwN~-ak5)2ml)VqCKct_*LpMS1iu;d_v+o zaU4kTOFCxTGDr&P6sIwZPy6mF6u(->gM(UhYT_a%rQFcclW#oKyNyrkO0WZLVDh3V zt-7{Oq@vz0u6-Zs!So3jGvwI1v4i$ zd&(c_nJwtpVIjtZc}R5qBreP<;`jcRwR97tp)iKn zD7KJLCFwd`$_FEu7cIWrO?*U5{$NK6`K8LaP=lnI+NtzFkg}vFJU^a|;o&TMK2fr!0sSJ?R9|-pip1WTR1Y%8h-$;NnTL zDTO)PJe|Ds-W%pu1-@Ju@?=T;5>){W^CD5zGapMcH5U)5mXr;@HQB+g)4YCD{UFHY zx9~_dIoa$^DXp$UfcQ)sfiD!)Vyz(=SsQU3@hw#=w`dy5WZJpho{F?2vZ{uuLIWwb ziWLLDDDRj3&bJp0s?NJiRXNfQJCdO5E98Q?Gy{Q0C~$SQnY;E z`n=U`>9*};@S4@V^dMd&w=E+#VV@SY$Ha8O_Zf79Q?h>kJ@sDKHiE;0#9HsDC8}3Y zfQAbt&Tg_m9kXz=QRC~M8lv)DDy>r6jAcVnO;_IdNhii;u*zhedONDS3ZzrPhV5{3W#GN3nw86#Yb7j3!eL*7BsP(C zZ#-1F*>1r4#61Mxq=>luVcp_1*)3#Xn$Y-Y(sfi0UVjZ{|B;mrK0Oylq)oy&7s8Ou z???Ik1wV)V(PYT7QKg#i2bWupgehgRn>%EK5_~Nnx{R<=CJjFxW0R#F=LrF*V`bU$ zu*X;B&bmJz;%%YL3Wse7sr6wOUOF->qYeN3PZ!W%e7f9+bLd|H+Es8p z#6!`N+dRG$Y1&)es1=z9@k@U}C9@Un0(MmG1}7SYj$;eCHj{aEq>W1b1z^+Nln?({ z6>;`#^U?{68Y%&ZuZ~HIN@{n)g=cejYV>^sRTg`8Fje|hDi2mz`k?H^dhSkz+L?U{ zM7C3UPy^`FMfWn<1B<$BiT9ZB5uMeg{gSuicb`omBI0;8EY9vm+9M>kf+x{`Ah6&H z-H28XfJv7cyssMckugkKE#|08n@k=xi8%cMdePP6S{SxU|9QIi1BX~$lj3);kEnZR zd%~Naq8(fn9>nYHd{xMpLs;_yi*!VuF}V9(#hX;!$>t`_4ueSt3bh0;ST7Mv1Hfkg z+fm5X(cOMW1nZj`Ryz6(JbO&+^tJJ$Gsil!X3?Fh+aKD!nn9OY0YcQf9lZlL5DVfL zH1^GDVNXWx^lj(L>Sb=3#b@`li@P>Err=**-A-L)pn4(G;yT)hXkp_2`pW(vr0TtX z7V(1U>}wIKDv=H4q&>DI76<7@o8<0Wb+`>eBuKc=VCu{a z=8?q59d?hy%Z6R`t3so*a5%F@x~~XM`KVa`Vqy%n9gx5H0&kswVdrCqSEy&5ai(|u zw7&ebOX| zo$WLtfTQf$>P_4lZwz)?Kqd!AW0jXdr@iyUY+?&+9qw=A?3)9?bQrOdV%5PJpZm~R z?d+bt%{UvRprC7OM`KzmacIl{y?3w8*>cugV6t^)RkjxEz-}Pm2}=?xu(8nk#)qp&<5o6FF=e{X=A5u z{Iv#!juxW`ADKwIdHATYXCK!rRKQ}3}jMA5x4M3RU!fWC+yiG`8 z$oH#9gy}enuQh?MtzvRo=*0dkkT2cnl>e%BEGliBR9Id9K)(op04DT59omD~p`NRb zW}>zq9b_e>-5)rMVKRh|!*QHzl;+fZ7!~DD98;#9`?Kux%1MV3Z)#t))sA7MP)}uc zQDs4i0LeJry-;Qr>K69?4uB1GXv(m*3}f{m8o4xwlG~N^^Jg!`m7Qk!p5AOrYK_3N z45w)7)rIbuiyinAJJiuu&%N-rcii;(@Q9v5h9jS%Kx&EE%Mk6ouisCH5F~{cp5#D~ zAVnNC$9c{%etv})E202#9#UO(Ii>$|W?sA9UtG>HP0+g`CKRbyPQ_#^;4kRZOhV$z z#}Umm#JaR7vxO*SO?tnZ9{Q+f2g?}ZM<7**VTDngKWI8@>nRzOPlPNHE5Ou}bSp z{8r#CST@g|q)@g_-ad|>RFKB+Yjr7-!7<@PSVv?Lql4evNIJQpqDf$>3htF7c=c{?&{l;xym%mMSY&r*_G+9{riZw+0_elg-lH!rgKGF zy!(6tucN@HYY)Coj-FPF>hsekgB|fBmmx{ij+qZrX^Dm!6urhBV%Y5z zEfXB0r-ZXj``vh%v(DkZGb{QfCB<`bj%?)L&CGLtinQnQw{u=@1;;6Wan4bQX=1)@ z9sJG-o=r_ny)G}WNO6iQ(6^}l9$T1)w)*AZ!dj%Rd~I>ZlZrf6rJ1wdJIc8IA+(Wz zIu9kJtoBxcFM1`U<63U?2 zyL>u(?jewoJq~M%mcU95Uu=r5U1=@ocTJn|D5?6AJtayXkZ?@%ygDqeMb=R9g&G%L zoL)HJEhpQDI`>~5Q@dOld#j8y*%UclxVC;H)3AX*F+@&D`GuXTMB~mH0sSa*O>y7~ zhZYT~Nq)1ARWd~a&)+XgkIAD%tlGU@#8=YZsPKTq=AEggFGthFT2%IwcAFOzE|1VKfY!%C_6HM0!I%@_wKdKu&K5s82WiQsK}1 z(j6%R>#Hj$<3{GIn3o63cT}ImyUBALcWxin8{0o=N;>AbCKliZ>e_<76_)s+CyDr`l)mo_&Q#RaxMbfl& zqTMFOYD@YIIE|;0rlIo9VH7KAonA`xEl>)r5KQ$mhQ+M~1IH)GlW;BFb#B&>N13$K zku1!5KvAZuUV0&E!fDpAG`#WSC0zKPSdfp(g#=7ot{C}RpxIdKU2EQ%F0brD(hw}9 zhQT?9x+69A)oeu?cEMA%{6bQ1BokF%+ z+J2)0l3>whRpY+j+3MCSO=tuYbEy5i! z*PO!g~l{I)?VYgO70U<)dmiKDCP73Qx1!(B?;Z8zpARB-y%u^ zVK#LvTcUgNb1iCej4^RYoX8A%X4SaoGmoTL;;FM!##|*!=cNNMm60GpxdX*n1BHS# z|GJr>eH?4v7nhdny=bpHkiFf_(W*Bcr z*t~mm+}RX+etzC%U<^AU0zJWvYTRdVZrJXHEW6Cy^O7brL)>U|56-<_V}-%y8pi7! zf8nZ!-g2eiZ8(#%qD>mKJVOi5%_dzvCD1X3E+z_MvtAqefgl;3C1nZ~w${(u$bE)~ zV{gxKhRYk)ccUF*{5W4X7EdWRXDZ!CjWd?R!g%Rtehdxj3vZwt8=Zgn1s5u1%&VJ# zM`cKxmspR-cx_zg?0!G|3$Up$5?49e^ALfwRvEE=@tTy_)@UJaX>=bJN7aG0g622i>?t{J{_$R^$NsD|5cEIXHM0Q|7a_N(_UK6 z7c*D>wbz>JOdP^2SbTSy;7T7o=!^S^S@W`HX9=lGsh;UfT&^xL* zM<*{rq+GMib61)lBnlhsC_Jd9eJLE}lAew!@Vx-{P)0Bf1=slci{5D$bNYwl&fvmR z%rvs}KCM06{^lqsV0pGG@cSC$1Ch8z%wGUjL1NW|FlNtXjhmgF${RK6SPd-XJN{e) zT;h&Xa_F0*q&EHAR{@PQngtDS&P}WR2>P|M$4C2d)E^%P6dB?Y2mQCS*c2rOcpGSF zk+9WJvpL_cb-TO^R_W*O>-VH_WsUITumUrT;1AW+f-lCRWS?8N!ZNNaWqj6oqjR>l zw^TCnH9{-BISND9)IbN?$vT~Bf&Fe*>23BGspQpZO?gK#O5}Ej$Tz(1u~%waN=@N-92bjeFLDm#`u{Z!00^Xs~LEX#gtwiVJIL+F;c{ZgwHe8@{F!4?J4a<%EL(Ru6~uD5lcbMX`xG`h zLF)v?WWpEX;>ZkGbiB8CWSu@)U+NZU)0^&jG04)L?6xbL?UFQEG-$q(Z@6ItS_%wP z{uGZYnc-C0EB{5i_WPD|Up1Ff$j}43MX7)PGw2_QoHU7_)TH|)pVzanqxi?1yn$`r zX^L7nO}cX58dS9^&CdrHo&+?%Uyelix|rR{Mrz^vI+Zb2{cq`*4VFJPFx;OS5~xSK zcPX!gM5+5y15B}>jh`Hits9B-sGHTxK3Ajah{c0yT(>XpRD1AG^$o+ogDwW+c$I}6 zGV2PZ7S?F)8gHwq<#nf3G1S4f=1@T;X@)8nCbTkBAJb4nV9Kw3aabm>xg4QVJOCbt zF2}A&RLs8&0M$#;x6SaHZ`lkwlOAA2hl_cKP6+sb96M^~zP(-&YCP@ifFrYdj&Zxm z=jDkhg62c38oNSf;9X^xBsg!WbXsws;H4pdSYhX{(w`z)S2q4Rn}Qg_)%M@Nw0!e= zVlz#_n0zT?E%BzNdGGu;k-q+f4 zh7#friF;;ET~# z?%1hDGbJuQl4cY8Lh5DE016_A8*nlhTuEZ2_pYSeO3GMP(dIX*9|~L0T%*ces--@K zC+(-u_U0(}>tXB45{twxoYJ#}=fc%gGSf!oi_7ZBf;1jAS^Rj(0$+@uUKF8q zCcLz0qS{RDL9A%Jl8qSV*mqEi_L?fWz$72Zcgxt#qgSK~i3u>M~YMgH}| zo83V_dDw-CPe81e7i^Xn%%bdNo04XLQNI6QCFV=MX;`6UD{bS;xC?i{B&#KZBZo|)R& zSCkG~YYJP)AyEpcbZ-nw^k+O%EWcZh?bT_OMSlD;YpYPHV=wd$5rrtz+_wVPZ@HD3 z&}Gjim5i;tB24FKiil&1@ub$pi8NKoH-CeS7Td(w{@I9~m$4Yu;7Eo{aKAaH!T2n! zfSrr}JB^80nIZ(bxuVDo^nnV#+=|0%38t1!stIE-`td|xI2vE#lhL_A6uX_o5!Ivaunwcc zibJY4@-VFCAJ(N3AJ2eGMtj!`3c+pa;K=x7wRvT@Zexf<2wS}1_O&3j_4j+-)Jmc` z$@-cfIp*7Ioe&4Z7_m&!R9V+%d85A0u4XCS3KMwRrpB=Cu0@RZ$^!oqy7#WJ?0`s> zAlXzpSpL3R0bd_x=I}*msBd>%r&&`D52ByzHi0ON(=&Tel-;O2Yp!>tj9Q2JXseR3 zv`WiMzn}{g5O;o6{eG61J8oBHKd90-T5HPCmWE$9KhK?N=Nce7e4?)qs~UMyoHm*^ z%6?wOx~_vRP^w|a$%Es91;!U_U-_vg%l!PKy$=9D-5+a<>tQ^j?B6k9UYVWw=JTrU zme@&P91_--pnsPkd})XzH0zVW7ZZC3lqTL~qE(w9WnJdWsms>lMA@sF^x;%_&m&-= zXMNXW!I0Tw(4V^Y&Crt03wedHVACCqQMGB&H2EZl|FNC-B0+Ya5HJ{;U8p&ES@^IK z;?tQShnlI%j1GyZs)j2gGw>Zeq9e7gK#V=OM5267i@bM=S0>*)N0Rf&1yX#Ws}J$8 zbe!J4<$T6q0qA^w1DpcaL?=+^nFgqdUR-x#3dIpNeufMv9-V z0p8^)a}`sQBB14CLk;tV+PPEiu*aQ9eo%ZvSyC9gHjNv;LZU`Anag4$u+Bb5dV6tf5{H7<=rom^O=*+{3ady>jisXnaIQEFDpmX#&yvH#yl%|V7!p{*?MGMsBtYQP&45-BMiSRHw1bv;HEo=`$RXeeAX;0f~NM@^HQU` zvucoJ8NV-+amqH>tUkNs=TDI%+EZHM(~Ps?KkXoHttP|6DrK7|FjI%6kPpKeCGn5j z?0lU3gv$Q(Fq|2dcpCUYXng~jHfo`qLaNTCd`4+AhSG*)%XF&BJy(=OKbNmA^+tDt z#{(l2eVVlvxZRHm@#q$PL#LMQ`RoQmw2B8GRc#@VhZ1ZV*EM`hSadAZ*Xq0ij32VN zdCh7x!E3vRYWV&T|I}dnn!Twe*cUH2AMi^{00>r-t5fw-|7 z;Mm*)+xSz8pSjx{;p)mZ^;1#yCPe(~bcJtX_*iWj*EFVrzUj}IGmCiY-nCqxCtqDb zp4S$#IBV@(v*!t-fLIxZ#b$4FgGzJ96=ovqW7r92EXpW+$`^Rk-7YaOiBEYr`tgD!vH?RyY;bO2Wi>_fvoE@m**Sa*) ziR^UN9Y7SG=|R8VRmPP|luzl*r6nmq?;?7Qzmxi zdLvEkvacbKmf)tVvNV{qv_P2w?JVbjB- zE+;l|mM3gViQe>nP#=Fvgn6Y# zWj_7|IQ%cpzA~!Kw#%Bf52b~+JQZBhmg3gpPFso>_XMZ7LvTq8#jOM@8e9^B2Deh& zHMm4eU!r21 zmrG#Lw$jiHF9Yz;Buy;=le);qT+U$G%ua$cq@p+A$Hf_Y-@zBz4BHSKs#Z662dRL_@{*@2!ht zC{HWTi|1Y-%t9O&cYj*X+fW1JkSS@2mz_Wt&)<&q?3GOE+06z;R`aroAk|)vKLk0} zLg$`73C~{^7J71oTkD?(-=$VI^d_~L_a;9#Mg$y+m3Ps)1E(D{IfSgi4z^z%V+{B9 z6gw-%&wLnVk`R?=uA@W1?WWJ~YM+sOr95JAehDB97SPPBZ=d)>a3f%b)QW1$QkZ<^ zKX90_=h=mtRJF1l_pr66TS!#YcN-1O$#7r))|DwF?i-#^Vh6qgsp6D!kZzjeJ0{8N zsqTv7-_}PgX+KP8+cZgvbA~tV`<~)`YieWU?#e{&n5H%84lY_e!f2cGVt+Pmj_Spw#yyyL{om)qWxILOVy!abW01XbAPa>pVRt4)Sq#t4ifQ9 za;fd2q=eX3$*9k<{m3DGNbn#AtTPb%N&2<(tN*oqf_T)3HQafVTqMo)xjdjF^AEu~ zsO%J2uuh{gvsrIlK1ki^XB-r;ZV?}5@XVLu1Qs@U$Lp0hF`;XPc>W;B_#o6f8x@O( zC56OhveF!G8aWR@uYIL{Y8?n>=YDt9p>{vfT^nE|H@srr)zg5XIYJJ-h6j)e0sgMk^*=;i$RH(yaI{4U)i={n|^i@hch)4I2cl7HUnv z1gk>s)rmXYIna;ycGYA0igpuGxTX8-15;$8Qu|v{Jj2ke5JZl?Dl*ki&KVVdYNILA zYkL{HzS7Vlg;M5Nc2U0n!vJ-$q#_lLfI{;O88F-3 zzpZy1SfFcUoP+xQZ0WbX)4* zm*Pje7e_m34#g61G17zY-TV|8aBuv}FN$oH==Zigr5w&H-YKu7OLlPfE4A0c>uv4E zTs?QDS0IE*shs@JAv|-iQ4gNNHSy$)`ab%w-<%2?dIv^DIXbG2HdZxK(n>1*l|DB{ z19J8H%emi>ZKS>vlD1CBNAC2=n} zvf30_X@G`NuJ9qToS8oaA6qoHXHvQ(GKLKvQMRU1x;ACpF?p0Q8@&TnmKQtHynL%7 z{rP}MI*+ZQ@R*^gYHVvOj7wYCjaI^)ACpM}&HcEAhgXRiEw!@`?4qk%Uc3QFy{@=Mzw5t$C%4xORsn+)^u6 zix*yr=7o@7gJ;bvxa~IvH)r5DMkDT|gmv zlajeuTX2fmFHQqGUU*J^#&p2tJ>E1^-E?Qao)=dApHUkBHlY2R-S9?2 zx`6(RArut;E1T;VLZnT0L>#W6sDK73Bi8vLw>Q!B6H#s3By@5ck7)$7L>f|D_iQ(u zG2SsQN2DC3ifK^siWyJKfW}hk4`xh1@JeUtCe6(N=mI?d)yN}Pb4`YyIwBS)+E>o~ z?0Ik3$XTDBCL1X)m>6tf?OXx^qC;1!M_{|KUA3oKYqj-)BI)vE!?21Vnar z3HAA)nU%JO8hDl_oNF9VtIjg@t*8RHBEJkTO>xy&4)v<*bpa zA0Hv2sshIJk#mB8fDPh?xS7%6)f&os?3@MCCj(O9O&$DcXZA-7ZglELGirH`91LLV zbn}7|K}uFf=Lt3U{YPK2cHf0O@AL3HI|jicl&3eH&c@#D0~9nGZ*9NBZS#Hv=*y5I z0*6aRN0M0CPdXk|N`ikg@$U_3d>b%p7(Ur%Wwux1HvB`tYub6X(FiQ%sANqkN79%P z5EKD4#@AK*xOoROdIa!1hTvP3BAB~2L(%?Qkg;pV2d_&cQ8N2r;dmM7rRS3;skEuf zyFeq=#dTz%&*Cd*56Dv0wm#gJBza`h`>)f7Y*hmJ&CJLTUWwItM{-B{UIZe1o`lhg zTq^uZ8ahLVKvB?<$)v56cfCjgeULBoXh*k z+}gg(9t9tK-40T*^I46wCt4gwjJD=t6-pT>P@wf%&1UsU%GM3%Q;rM~iGf;%d##2Z z8e{EKMN{25jxQ%7+2qZw_aCk}>WzVOA|1>dxtr?4*X*@OC8E?_>HQ-!=>HH@+07(k z*kQBpzC=Np?PI^=8Ps+#Xky547MYS*-ehi}FGe>U6Rj+Ek4T!W%V%Y>SA| z{i#{6(Qh}3429v-A^fs0^mX=QQs$~|izC>}=J|NVbBzT`A~*b?aNez5+A z+p;5RgG!y$<~en(x4Wx2jOgh(n^RpK!_20NkX0ZaGB;!& zl=1k-^{amR#1m^dsO8M2?Ypk?K+}RP$X-ZC!FdE^Op6{(1MB9>=$H@2yAmHN-2aFg zjSfFn5PAK|fy(`#9VM5JEdK{s2mZdgDEsbul7hvFF86aGze_`5u0+pYCHHuKNsf8N ztok7&@@WI=ev#h_t%Yu5KKeRY(rIcmQ`D83rEH{;*Bax^Rwa28H=;E*?#=nM>iUPh z7BO0X2>R%73yAkvBqMk%Aw6m^VI;s$o=8B@0 z2u-$iR!_6(_-$(e)_Lrf>vj^Wj#h*^buX;;ivm{We0@nhL3iOLLad8?rH`VbxLjl2 zQ@otz;+@6pzVv{534cFwy747-nI^a0b;$XK8Z0hKkLt8e+ktVM|H!j1d2ut@f7IlY zbIS1rJF1tDyDtk;;E$62g_fUE>$x{IS-T|D575O7k)$}dV`sdRm%#R^70#B{&uiXY z>=QL|1+9E8E#G9)2(0$`z8n47<6VyXV!5?(YIq5^eoe zK1tNrr_n&^Qfce@h+Uje{#_9(IjDWt6DOify2}eL*lwiXBC^LPg(6-B5Z`Zz1w+l-z3z6tBjWLb{0pm4!)7kr`}>wapp3&f&_LVKtA8}ern=aDY%n2 z!VK&CB1u`nBvJW{{U9k{bKTzIZ~X=v;u)e0XCZ|lvpPVrpRK~LmGyE@QHE4FegBc4 z=<(jGFEP$p2#7?lQVA&4qS#H_CJSxE7V^3nEd_5=qs^=2&@#iHqMpDnwM7v8s#w&T z$}CThstCeBPRIKP((RQgGYbz|XrnM!>-bcYr+9?1i05ZE{fQ0@{?PP~$>fF457bsn zT%#x-N$x(hLgU~uiIoS(y>F^#`ux>tW+-qB?h@cKMUq#en@6_f$y6m#sfy%2g1ill zct`oaW&rOzCH+K1Z3{P(E#3!XHYeo#I@)iso#c+4-bOMj(s(2Biwcu{;~Vn7>#&ID zR%dh)zV73gg{1DV%|^0a&1$rB?6<>Vt)>zx!ZM)%2@->jX4wxP8(#q=m2ipo#l_9=h^v5@J4kHHfmdYE3r+i>>mQ_#ejyT zr~61*)8^Zoh_1=&1iU$is>Y!VT-!7aQ!14|B?H>bX@GaP95{yS8>Gjpel+WuL4~QQ zM^%{33d#}&PsvjgRd7SaxU9v1;rfCwufh}MNFy0!LxMF&K~$d@OjwaoQ)fhf`3Xmr z{u_7a-sFpGvVi>gLK}lXyE^`Y&FbXUJz#Gn%!Jpucy{<$W5u5kj7A;$UIIx2^899g z(o1(uQH1hEVU=A#2ujJQdp*}=zQB)FnT|D+EqDv?;WKC@1asQ#^!#4mD0kYkm>`S_wfOkzOZ(_A>lNSSOLTI!5=gsvv zlyiYxDK#K`8JCQV5kzUjy1_#Qbb3QryR}k&trWanxGhdTqHt;6X{axy+q#0Gf6sPh_!O7CC}*C^Sd=ofmLLHZrju#s72f1%zuoJo`@$(Pl(z3r1fAhR zOM7ggBIEfkp!jOLd)Qws;WJ%QnMqZk?OjwCHWUMn>cC_QJzl8@ zOJe8om5kmTOdPi!VK=;4|7BvLT%bqD6PxD5wE?BJ%T&GXAsHpHyt%$$;pcn0>u!u7 zQ+F1u3fE@(1zQRIsJ1|oS{EmyBIU&@Cuvk0Gjjnq;RM(reskQ(dO4-W?RgBfPl-%a ziCHEh<+W>h2mB{gTfT57>6JHPXSb@vVegYhV@x@S5W0OsWptbVhag~!mfEv*YP3E` z!8r~(&$W1WF8jVRS=SNcq~u!fAA+6zn-|?XIv*iD35)pnXC~R>fsfDLC@yG>@g0G9 z1Nox;uHc!Z>MSJk$Ie@)9898|J;*-<%-Wb+DSUyc{z9t&%js=5q@lvV#txV<>3EVlL*7DHzdsn!q=&smpTQr-$mQa~w8QIxfuj#qt_e+ws61$q zO>!k;0K~pFu;dg{nwKFUydR*Aa%22XXpGng@{`kJKG^beuJnnkcvp=h@{|S5npCnz zlV;mIK)VUg-k$gbcit$I3;ovc4DaEk3D-31&{kmYSZZg+YCS^ONVo1Ps`9?d3=|*w z8FzZOspr@AC6T=!3ihbw02GTtZYIg*0__CcVhe`6Ib)rc28;8p!S6=Uqz?)R{t$Q) z1}~uIH@a82s(axkSB{aplDkh7;0G}Drw(sFRuY%Wp-HFe zCM@lGH@OFTSCy92{vN&c7|AxTp+aJJ=6>x1ur%A_SMXq#8Y=xJb*xfu`#ia~XL61u zaOA?n#4?K4==QbBLPdwgh|`rsY(?AE3unRWZ-zQ*N~Wv;@rAzVmE49koXJzNjk5o> zs1~2^Tnlx8u4y+;5G0gzp@s zZ7_e)8X6ajt$&{D5n z3pc>L1go(K#8G*iSxXXjP91$_hO&B;PqgpAW@|qDA$Zhq%?AtcpHCsZFkhU`{X-Ch zzs$q6aDyGU?w!)v%K!Yx0irr-#V`R);XZ3u^IT1LL*#uM$t<>}sE2Z2UoxmlLJ5G; zhFzxpAu!XXiQ-8YaY-5M7%9vv9|tA@mT;r_x>UXLq#t?|$LE@8X0+_H(i573x@am^ ze3SSRZFxSbcT^m{Ym#o?Wi4=g4&0l3PGOI9$Sd}#B}ByWHS#%p%<{?alQPH-zDiV zKy<^izccDj5>@t7&o@r7DbcO`UpESdzfnWXOQkbXq128#+A501wbaSWkqT#&bHAyT zdHWw7>%R*smryx(?4eb!A`*S7O*ASB+ls8Y{^hI9cBTJHsaLp{4bEIX?K3?i{Pk*y z=;<2dL^lJz!j(K)BQU$4FjN2sn`+mT`+T#0^X2b%b0s=gEj=~tN}$UR9G%e`bD}Cg zA-Tii+q%95dW-FS~C=>PU@BK%C@`~lj47HP4)J~41 z0Njj9tJK-{fBw~VN!q|=z86&|_IIFs4qeW=!7uvx>ecm>ewy=B)J;p)82;xW(EMxx{wan79Ys3N2{DPRl5fiuI_mtF0GZFO7eZuk zjwJT^qlrr+yTYiQ;cyNwXZGCNIp)7mNgp%$c9mv(Ug(ua>#>N)x zT%T>xIsIm5N?Aps?$<_<9X0He%rYZJRd|T#2E@8{Z%0=-_sisCbN!jyrXXZfoEhz} zA7733H^uvmw1p({KaPCM_~0&1w~3@CFW+9p9Q)r#?w*;4HbvKGt&);jW!h<;n|2Cj zz8Li<&iPlUJozV7YG)q?ja|~mgwezE2YYF4hrcfw(!n-H{U3P#`-T$@;$zb_T|0#w z$(_SyqZb~5N+9F<3mh~42=EAY7T$SkF3P$$%JcS~tV@TAa+csmwE7Gn582s&Le}6mL#5TZ`l-c{64#mDf5l_Vwb*~fBWI|yJ+s0OF!Bs-)Z+BYU()W3I46?X zM?!Y{9AomNua-faY*4*EHaOEk^v0w<3fXqaa2kLn7Z)@rWFuisVfa=+iqEb5%|p*> zlr|Rn^6G7b={I=v9XPim*LC^b^D3<#i%i31CRQu+^CB?)`}c1#nfmF96s~$6zCC@M zTGOE37n5m=4QA+6Io*?;``H%KZ(<{x^9y5ihG0xVkv0wjTO-N2dt5{&w+gI+H8iBd*shUGB1@66VGw&dvs$`B4u_B_03zq;IHDoCfdX z*dz(*mGN5xq1H^AIh?9Pw-Zz9M8dc4gsTmd&`vY>0)2j$EXPnd zQh&6v+T(_=yc|JQ17yhh|cX{U{(((=I4oj4MZ5WWTJuM#zOl$-d= zlCdNab>3MGxqh!*A$|Q1wCUq`CE?S;uA$E-62a(|8iZn9!M@Q)qU=rE&$T0V_?r59 z+wCYOZp0DcbGCW*=(OhBAA&$7KaNj0+-{!nrfSDLz6}##Zyp(UJ z6!tr0=8fW9b!kt|4R#E|3)`_l&kB>F{Qq0h%sVppbSpETuEX}zQq{&iNhB7D#r#bM zc*Yf|a&UGE91D?>+mPKje~i59*75mnP}TeOX;0pe#8OpAulkx^fjzm^P^okA6VJmh z{x#d=B{CC9bP&*|Q~5sxT<`XTueNb_@~o|oJmdrclKdfiM|#>dKSZk8EPSVQ@00VE zyT_Ytr0ov$xzUpnVDi=4QA+`2S`C#a-R&*BVrc*D9D8x&cQIuX~CYl4tHF~7otsXWw%3!v2}vk$b< zMvv8c2;E_jyI?G_G4N=sCjRkAhmH3|TghZ>h%eoM?gfz>MFu%=mUW)-r5kOs@MXxo z>s)ptqV2~8>R54R-m)2+q#cM0)xn@!_nVyj06 zE+w`Lwp+tJ}c6ykM$Dns0r|#EWxwRk$vpWGU~k25YXv-K4fEi#r!J zM047?lL901o~~1pg4`ve^|K=3*(!|~$K0j(*oeJ{KQsrz${i1~h4tmd(uI$-Tf7Z_ z)=o3}n`gqRBcBgd#=*vy{MjAn-ei|eBM?4J(kjY5Ho1=}dsL;jf$Yn@9xBW8uk@!){%V4*A2J_5Qf{AA2v+~LSc#Fux5HZBw=Z}5-GVsl>E#z% zN*+Y>LrKWYfB$nt(`WJ>Vs5N!hgF#nPH$Aqe_5tswMyMe6T5B-~iCK!IO0+N)-S%VecSxd#RJ(g=Zz{WY zxcIkZuylM_tZrKg-(#M#8pP_A((!t~kJ#k9a~A{NU+JoDf}};$+PKl`uUE8dr%w0A zozH3jcTq-9IRaXXximTc`Usejx(RUwc%E|$qLJyWhwjMaom;~3xm9-7W>6P;rbW^# zihUv?q8fds+dYWwZqWtQ=>_y&=*VCfUQMkU5B7dzZ;JXWfkHtz#gJu>pE}(jPp`SV zC3dp)1Pn=q1ov6?dmY{^aIWMDC)42=X|&dN!0lB0L3#c zfO|cv4l1%vcPMhr3X4s8NHaw6=vEQfTWnpu)-wp5)~^3fMu~AZ1=9*nRLuGj(|{SH z{}5nv0N!7hN}6yaA=h7w!l%e_9O~*l4Mzrge+c%+%mj-CtbXgJJ=L9y zcm3E&m0IJ}eQaQP6oUEP5OcLDxj;C0RTMaktR$`DcB6k<~#LDQRk_ zCHmYnu9dV?y;Vuv+)td2{X>Qq%?o>GD%WVDiOT&M6(b0t)NKWKhv}8E8BiAjle$`V zPple$XKgR8=AJ<`&O^aRIrW~Is|!*kW#fV7{8H;>yvf(c??%}n%j5W9-RQqAVVU-H zIT1d3bw!iD7a+uvs>ETwTWB_jF{Ax9Zh=8~yR$fgo@1DMgTrygo7OT4P?^Sa> zgSLsJ_&pnEZR`xZ@XyCgiM~IM`elY|CP}*(F}PF=FB=W~X|HMDy|-{vd#ek=e4g(( zYLy1>06zB?wr30ePz3totA}|mb*brn8jJEn`C4M1AYo~O*gJMxPTS1wEncs}Bys_F-^9Rv zCAf_LI7__tdk+v1BTIA=7<6z)`nzM?vc`8M2xnt(s^v$EpGRI)K5>Zp1@In;`aBu$ zQ>LV2v^f%LrwaD6CPtXrfi7OX7+612Zdh8}sSrJ3X8_DWaMJi@6;h}eO3s?@;3-Qp zIxdMH^f|a`WIvRzPmHTA$r3?_1)zV!SnsB)dk?j%b1gR`v*78n)1eq#9U z?AxKfMT`9J9O!9A#E4?(VB;&vHoleH!p6gjU;L6!u!{=!u!X-$@?Cw-B7cY@doiF) z`+d1F?aH(=f=M3=StsBXcM5d|>l{GslOMUN*BWVxN)vC9NkBL*OS*T_Mg-ZYGMGv2r zI&d#u=YhOk{1}f#>>TjJb>h|Pz>H`!d=%v*`j#ht@+qz?szpPk!^-BTN4pG9g@R(^ zIdS*4t^A^rG#LYri=3GNW)W?z4>}x=Qr@|d_o1o%9j9)NQ0?0i)LR_Chhn$r&|%?< z9Tdl~cXl+81qHBwRKeWB5Hf z`t=NQ&jM?;b`lzB06aAx3JJ6%OCZE%N)+6z|l&G)em?Zm8DfqQnPS ztN7x0WiUp*CS5L%Fp1&u>R|M^NOpazL|U%7Y*tuj?8|%;hywN(fD*Tc&e@mGG85HHSYTI@|%Of0ZKw)yQ4QfSNBbf5DQ({r2whv-= z-FE`K%%)H+&nN+%*R@W6dB359pb0t6inMAo7$c2?8^>0q6`n=EiDKD2YaoILcQ}+Vawj%KD8@EUKu6nHCff&MHvB#l9(l)UfS)lW^ z1l;Fw{L!^A@RYWS8=(+Hf!9EQH)V=bl1n75#eE@{n#_L)7NjrWsg{JN;}k&F^{S6l zw1-VyqpL!9er23Cy48?v@s(tzpv5clJ=#0Px_hYa%<(Q%1{-`zF*fM8U`kO@m^y}z zRJs#mCMvaaoOF9e$44;M4|IxDo+dFbxYAeF({%mqCOy{x<{RQG%h)ZZ@t;d5X6lCu zW0INKIdXkkOrMW8W{j4Yo1F z96Lt4N(Itzd8(F&LgrefSQ|FWLN~gMgL$i6j*LF5oux{AwO+)c&_qNrM9V%`Ks zo5#z4bK@Qx6z^m)PZtv;pbn(|lFtv#NapT4@|&VxFZP7AgV2y?#^!#$6|>vh%r*7(-cMr7ov)9piQ|FfXHs_nlL z_|OE9$k1m6#q7Psnt9h&8*XfB-!(^q$xFE$8C8L)UaTBHuoi=te1_>CifxgO?ypPp zx$gZTc*Yxh`ixxfC@9Oi2&F$I;bWkDB-Uhcn`iTcR-4B1>B+5()0k%W{01QL>1j#u zDw5q|IA10Pn2|3SxXW0utM4Iab?mo!Vi;mj?-6gF;YfcQ?ZGa(^nD;OOaT8|D$0Bm zpO8Nwmuj1VNlgl{_WZI3-8nzHo_r;JFdlIzTWM3aZHLe>C{OC%F&TrhJPBvd6MOOh zHvs-0tE2)pO5??uO-iy0J83lJ+IBg)i1rNFw8JhxtK-}|bfULRuJP-aA?0(%=75fh zYDl!suh9pYFEn3aqYfR&CgqOM)p#@Ug!EM_Fkx2S1uXz!t8LL`>pJAtjlZxOSE=S+ z15@5HEhZ1Kc!lkcGRzQ(3CObz$lh0KINgV0he&wW@)5TAJ=0{Sf&knLlfSu&yh~C@QcUmh`&Mn@Vv9|Jg zP~JDeVCKBfo`_vN;S`oq8X2OQt4Zorz}Lo1^omDdhRtQ-s~546xN@6O>K}W>PX#yH zhdZ{Y#ouIgEco^nPufuW&c3^iXdjsAdWH}HuN65koAZXP6*MZlJX?XvzV}T;Lavj2 z;6J>psx0XJmWx}j=Cl!&8stFk>K>v}dA`Wjy_pq>^%37k)&8HC&BJ--D^#8qdEl#2 z05uXNEZZx)6L;lg&)On!6G|Q5gy(eRccn#r-;Ig{MhnTPHLH_jBty@}o?CiT)v2 z8!)zFbf58w_Yuy33a0uO$9VVntCL%fN%X+CQn$zCSlQ$NAG$c0yJ=(20?^da4^b1S zlHj{~{Ey9GPq#*9Q|jI8sSRH`ZOEktJ|2xhyQchR8adPN`t3;m7 zv)TZPOw~lQ=+$mV2DG+qS>E(o_Au}PagHU_?np1nkmqM5n||AuFB$p?4nvI6AlkS- zya`DWlfD}jb?;4W+MPqTsAcnHs{(Z!cGMz-(NBD8X0JZl-QNYSBKydPqCwQ+n#>aqxqRX;cn9_if8rqLodSUUd}cj$aINw2Nh z2Lg#}DMl1z$SNH9%&o?qm5QSs==5q9kHl?r$itK-Y^{p9^;qF}iL;?`*inm}61NkU znnz2%07|i&oX@+oCoOf@AtvBnhWiq4(jangZ3rjd3@ME{RcNmbmAqK?z*!SrmsRY? zeYij7+X?CFy2>-vm-<5>K@qd@1JXcJFk$ zBdo7&>HF>-0ca$htBoK`4ZE7`KUI$HxfJPugseqd7RFSLOq@MAQW-BFh+r=HYb(_; zn7C}mFyw<*NVJj4N&8%^1)vfm#9(}o@G*)bxM0AY@bH9dO{bl429>EiDl-X8&@ z1YPmE`iNY{w>A+RUw1hW-!Zpk^#wX8-e3x*njhqocW!~}k0o&i)ew=0)89wCcz#Dj zvUzObisG*w2VeIK-W;6T(}zNOhAWaCL&}G{yVMe=LsxkXyNO+={fgP1mpJQv!|s*^ ze%FD^f+PM)$-0s;Ij@+in;3=(dY0?R&z+5lY!w}k)8bcU1@cvYA1iv+3<^_X8T|3q zt33mQ4&Cqd&yGmJA5{Xs>BC%T0MEGbe_Q z$o%WvW=pOFi2#UnNq!+<)BFo;#7WZShbHOUkH;6gft%JPEVa#JwOb2}0m4MGDAARC zc8TbslL2PSqCp>^T$W(?XCH)UR(qCc#j<+u#{A3sYXWCoF3Fi##vFmtBC{siiBK;V^Y@H#lWXHnp@_s3 z_jy@ck04FU>sAm?iHO@Tqutz-lb`tMTI`vyXKyD{z?N7D1H^gMS?xC{@Ed0K1MY;A z0pehVUsTwSGmXYDJnyd~*ZRaPKal9x**BZ(;Q>0Ls~=4i(hKwxzK5d}ZG_wJcEidw z?Np}<4qSZAIWx_G*8h=SWV;~$nO@$4Wcc$l{*{f!ZvK^x0P7w2Y?S``CVA73)C(zv zJ3ST#H91PgDOFB38qhBe=bPY;o7ZzFw4Jo4IQ2y{!I}K0qVNpgG%pC4u+#cr1(C5j z?QQEezBQPF5lGswrGKXr0V7+@A2dOYpa2Bt>lo~ec%SZs(0~TRkQbv-Ua24`KewqC zGX`Ir#y4^i!jC};8|Y#5jtb%`fyxeCp}WZZpR8%%S9&gYA(U9RrE`eE)Um4l&KY8& zJQM!ca=mWG1PGKMb^x0Zmtl>s*t?4 zqH9Io+XGTWpWs8(6J}iZtttVWPXSnc_lF>`tJMrrW7sfsfiOD5p9!9Iy5(1ndyk+v znxth$WM4rATdB-~WgcL?xV*=dYYViL70uwt!r6Lz)~Dl60-|Zx4_-EAC`{-LXqq4K zQ9b19(wwRnD(0ZI&DhC?k=^MIaEt?r}E5;eWXv*vN`sa#8PoS%Q zDJ$o@c~B+|%?rv5MU`L63+wABxMo37Z`=*1Ien7hUY_lPvAA9kmCkeIV!1zOO0}Rp z;hw~7AL_CcKnw70bv$8$F0)I73OoK}humb^-9OA+E6sPnHYj#{`QpYwn?ck7tFyMv zNp&e#ox3k6+yK}m89AxHaWc4xCeqLQ4ySBxpMndp*lFkrH}j-blCUo+g`9n8pR&od zz$z;Gv34~;WJtr9Zxh1x0aIh*eOWjqZ_gPp#X4(pHGG#9#$5VEn0H^|lnSncwc@L5 z3Y#a7(bI@JqsZXwQF5;CGL5|ix2td%FD2gV6Z+>w0nFIV+r>A&{~3@WAUTrT7U+es z-q(5oj5$+lzctaJIUm&!p=N_Tj!g=Xt(pyQ)}NjMBB)~0{|da$^R#I20*XWgB=!Mf zH?=FEIlnVzQ`iGrqsE~!8+*^jXfd#N0hRPG#{@*+Uet3$Z+$L2p|+_DydIS$2-eJIum zHNtcr-i(r-o0uCh868QV-}*w}+U)Jz$IG5LYtrkyg-zNd#PKT;t3!y>4djijcfJLF zkN`5gx(Eh?R4Gg~#8-<&shC17{H^<3ed8cI)UeBbN%(r9rR7HY4hXWAh0h>pz#!g4 z&oW?y)5BfM?-J|5`^}=2r#q;V{3BjU-VbWJ#yFYp4UBM+|CZNRnY_%X8)b9sN#w$pY_Onn476i^0E_+!IpB3XI^cV0{XA+WuaF|Xo}A`Zm3$CRY|9RN0fDX{M0*4 zK)g4KwojZe%T@Ha$z}WGD<1t5U^bvsjmgF&!=86nO|L)= znZ(Nl*rLM9m5tXg`ow?pV8bm0Q`6bspTz}Drm5XbKH2}iit7a({?aeC&EucxZIxT_ zLxMTG5)V|yiMN`CG{gPr^xq5dGz*0^t?uc!$i0Cowx*wdGR9~__o0_*EeT{xg+Z8U zi67~22CJ7&RdNqjx{q8y4`Z&l820p_lfHj>L7uR*Uh(vf+;U$cL+fq0`BrX73DK;l z9tkG%%*PKxD^l+KANbZgcdKN3d9-U})XQ!#6J;^3`qg#&K*e=#wQw3T39ov+Hw;t5 z5~ro$LxoSxffSq{6Gd^L6teE@?92-9-?R27MMmp4ysxq!4pCFR{D`jd?4OYTeO!!P%5HW7iY@}CGW)BN575h(HE%a+{Ie#46SDuJTq4AwHP&{d&6dlF|P-}&(c zM4u~lwdJy^4#I_J{!^@j`4cm65IpP}opb*;?D{9s`7zuiZy7xDLj05HWVwdbo9nAH zpd4p$-BYPC6tsTZ#r&tX;8Kzjm-nA6QX)o{yIeybIZk{W79;-`~;Cm@S*XhycxwVsilmE)`>c2iukalli}XtWYPscX5w^sCww zOHr3W!%&76J=(3_c%aO8f?&ANop1}B6Pkl*fZy6%t299c3hn5Lb4=~^-WspIv7>)j z#(I6%?%{W#UO%|#i`#DkOhivr%7J@(&|shq9`EEQRPx1;r``5mma&Nz(;;a(MH4E* zq1MT}wr*}_3`hqHaj9$=$4lWVaDeCG3Xqn9>M&ZoW=5Wf^8{uVjx~zAojfWf*)8^| zQT%B1>E_&CqV!x*=biKV3a7c6gROwX_a3Sz>)j2ma!0L(ARk*ckAuP_j)F`292s~* zLySMw1fP13+V2N>$?He*W^))kWz>pxMJ6%7AG17HsRN56Zu&JKR}cOWIMwa_;?3M@ znegi?9%=Bi!cFF+92uaFwaB)CIU%JwY z1ib2Ik3VH_c7T+X6jeczLrL)!))rjQkZnsav%v@^#YGtLm3FmB2r9qhmC+(^pHe{j zDGjnLd8#lv_o!Zd6sP^=xQoj5wbR@ZZ&cepNXB-(YPeUNhnD>5aY(=+r^`a_DOHbj zRZS0FMF=P$N+lbc8|Ne zQ#kTk7&%$U^+J$_<6uNvLxtV2%P#u;YEPS3K*B`k{4Q%=HAVl-sAXFW@FsF`tp_Lj zFBn7I;rSI0WB#?fXI2cw$#qoV#MpF&A#aK`LIM9|gF(Rg2akFBwI-DfEAWibHhYT> zzU%2*U?R>7hvv2^F0{nJcGas1=Zz21;^FeMmjyoL)0ZrfYFHTNEe?^0Ooyd-l-o-} zVYf+|e+Yy_PHD4GV=gVg2J~L=TN&mq*l~gZY|i9Xy1tgvkV{{vx(eg`RU~-{ub4i$ z_#0J94;j?*xcUiEm z_nX}G6Ayf{auCUAeR;ZN^W_o!hxQl*@xU7&!zJzCt7H$ye6_P1`E%74UOoPC?p}PS zb6WC z@=(uJ1+C^-Pzqnbvlkh;ZEb0+SU3lL)W+%NKbOem&twAO0<8SXPd{SlbxBNO54}94 zF@f60;FWdM>bv0zg@TJmg7+lOISY=WN}pP9n?I01o!Q+9XO6OViJ9xD&;Y* zfeO@lnfDboY|+xdU^chb^-rmV7@Vpy2X$LtVDk zD>1;oqIA0;x7Il6+wobB2C@MmaVd$1Q$NQ3n`QBT{PF?)DZVp@{JBx_f#rsV_#y>q zE0`JshRq+zwE}y!nR*Ud*{7C~W_s59m;*dF$M|31 zNobY2OZg9hWXS37%{@^_Dk$k__13A59_s)31oyr1AL88m@~2KuHX7C^s8a(g`rLMl zfvjt1a8Bacy5Rz%w=*m=i)M@4fWj&}9La1DB1HT6<FYjrfN=Bb&}OZ>#^lOt#P&1c_R-I2m39izG)PFRWPbDLpgIU5<0{}339eHy|8 z(LCG;>5cXEofYQWnWXDal7~pdwJ(qeuX(P8D8a&e_yEt5GtK*q&57apiQ1pc@0*U& z-f6u@1pgi*x6a%~Ub!oBbxVYFR6-*@6qeXw!WBrWn6ms*E@iL^XPs}}2@gmVQ4ziT z0cZN&^~&*^-Xa|y$ub>EDbG_2bm=G?dmXycT?la)9+O%cyrkpNQ8II8J5Wy&@Y<-f zrcvk%jN=rg2xFM12^LMz9_IwLi)1`nTyx5wO}+NSp6k*%5k6Cx&8 zN%csm!fJ0u-hyAU{-Sn+a$vDvXu8wrq=87U$HK15m_S~`GB59)-J=UQf;BH{e~0pA zhH?o&u@7&?53gS}((cyNzq-`>dzLcEHIV4*khJ0>BsY!9yZK?bW)^k1v&BGS7O=O` zc5I{JTqJdEpm)r7X#Zcp2W0ez0LI>RECiV+Oz=%kZ|?Dk+mg@?!$kyixcwoxJZ^;W zhTIN=W?l#}x6Q%&OBEefJw$4ru5(Dg`pH^ixrA%Db}LJotCz^6$!2diUbS6wS^)@icGk0!qS`w^1z-45yn?B*;u!U?@Wc#n9@VKK6C?m6%RWvz99zx9@37Qca%L%SpP(FO$eE%A09=d{Ez*2oQyr=OlZ# z5P!{Hf1uQAFU{w=S*B$5k%*r%J@z1&%hFw@Mc(Au7szU!U=bp5CC)=f;`})Nk9k8s zYM{?W$PvRq?x{75$d3UhG1=H3$+5MUY^R{@o08q~xoWP2e>EA5-PE0Py;Jk-zeJ#n zOr$?Tr-iz z77e#5=m2eO1pa2DFb`+fH&vX9h+~))m8>z~wy6QCbDfzPJ-}qM$7$a#b3p&VoTSE8@ z#I3N<)o9bkv^{1;?)-UqO&BG?dKVAx2ix+DI`674DaD#Hy4pulz`cR6TGfgh-C#V# zt4~jL6`uJ%LetBlo;Z?5Hid5YoSbyNV14_4J&yX{rdVHzlmiMdM#ad*pK{h&8eEk( zL)dSjUzRNn^$hW(hd*7mC&DMi?~+FLI4m0@m^i;{P_G}%Ou~HDm#YTsBOBM}^naO( zTwVvw|J`~s{bUK|oI+C2sH4|HBSdGyidTxWX+~0z9%SP=5YM7$X*J9u7;?D9$0qoN;ETxiHLY0z^5Dbue{hfr z*cKU@rM@=piobnrr2CC4P~eYQaCdvu!tKEA81~>IJAAXd0VJ{`^<02JM*t>P0eWZW zAT_pTpW*3<2U^1>^D)Ro1AF5rWks8kk`T^#apkega_ftWYAji1<{upIW4)=rj+Oeo z&p2xrh^$i*zovRR^c@{*Up5s8ykSh^eJ16q=t=arQ*TG*WlP30Jsth=9r_yvd_ib! zvLY11*&veUjFyC&HX%THqm1wJbK@YgGABJJZ?dDaFH~IXH3vje)+In*F%aeK1=s=gnMQKXW@e1&|N#)8K!-fWPz98a9wZ+f%G~i{!(^CPy+l> zc<5#AAyi|cG)f-^A8S!4@$sFg;KF;eiuFaE#CmO7+nhxcoHbYYf@l@1J zPqp}1v-_CMycck3U#xeU!V>OWUIZ`pVg;b1@7eD{K{WS=Z*D(W9P{Pg`p^CAW_kbW z{x4_3vs)@!>4X2=uirxy3rbdJ$Zg6CVV|@8ZHrT?E2ARYz{+g9K3|%Iztm_q} zrN1=);Lxm4SIpb{DY`Z_)n6DX@V$plT&K&i8t>7nRqu?n*xI~VX}?;=$%kk?ZY#L; zBvUS4l*QuUuG+u0$f@aE)DiVP_e<(oGG|cHALiV_SQvEehb?v62Lc#J6&P$Osv23p zFe}XMmH&M;bJ0qr0*dmJD$N4$FcbT`y&ji4&$?flw)mH8qu)>^F6$Ix`TdCk6=Q*# zy(;?dNcRb)-(9*?!+YwBOO&jZf z(=Co&*J=+%r$D3#cSA9ZAC14`La9l=7!WG+4^AfRAZVRz55Gb>Rl6%zK?~+-rZAoO z$|_uW-O}b~AD@eKDt{yWiB2hJ^N8!%&Twojy(cw$UXnR#Qp>|#^tkc2zvfnB@k8>_ zkS4OQzeXW#FX4WW&%aDx_rbFIlYCt6XaW_$<5BP@C%L>`-DNw|H*o$ZgP#2t`9+>b zkIHW#-V4rP28Fr%DhR=rq*nCYWekhsq(Lkd;%q&W+nK*{LcHLNtCse7{xss3uKhjx z9*GbgG1UXa_m)=rVt$-p%5&Gbjk@mmIBL~Yq}k41N#PNg&~YSk`-uz;edD%<)_ z>-lsOu3N!;aZmI5$l~uYumy=AA3P6M@|eWug z@07yc&fok}r%(DIk`|p6ExREnD$Ja~>yp;8ZZ}#7m0)j;*&Ogs@$6ocwna3RZs$Z1 zN*{I(90c%9H-%wD$CPaHWG!^StjyYRz89-5H^ZFv``|}3e%@ct9A+&phJfG@1-)dd{z2)=VM!!zOAR;Y%DG13Za$K_A{d|H#dIIQ`2xJ1LB?z;O@V zDQj$Oinn6^_7>MT#p6vsVtLNt7VhgpqM#gG++EHR9fhunr?OoEXYn=cc?@KobY8ZP zE_{9ZVn>VW|N6`N!T+(@`$^QL;(QpiE_R&{O4FrOTfjXjOGQ8M%fn`EGR+F*-m_!l zp+hYDtqRo<8hRnX^J0yIaAOhVUx-KItd_ZK-D-7F?g`e7Cx*y&qAN@ksc0OvRsXsM`1CH>CM1An(_bCzBC635LFMA{gJvJH8XR4-G5WIiWegDJ|US|H{+TSu+w5Px&ut-Zc>Ni6>+~(S_Hy+Tn|Ym`*ahJTyxVrZ;`Ib!#s)EYobVy{h++eaZ*^FM7?dJQn5!?_>^l| zX;jn?DW&(%GV$udPkVy_W@;+=Ko{71uise=yW#o4B|TwXX$03BZPN5clmk(|r9~b9 zK^0>7#+LHtYExl5 z)=Z{Xj5s$bH3-2GS@Ld#Jyu;}ue?*G0w-!;tysVl^!OE=>ZHd{vQi@SoSPd>-$dsx zg?8B8xTCY?dt)ro&xV>+KFM@+ulf zD|Ei>HIT~cAaiA3O%)DFY|4M^rt0vtDL8?nEq#U5S8qtR zf@Ed)s=gI+P!0XuUmVX@1Z@1BE#Jtg+MRDbAEu7>R4{bqk`lXtUqGX_Jx7h9Gn#hg zH2|@vLfe&u;kRxztqK(`6nikUXDE~gu)t<520-w@^pD$`@DH3{hwQ6no*cb;ZcDet zcRbn}!S$wv2b>`=>e`OYoYaJoUH6+A1t#2*LP_5tTed-NEYWIT3O-iQguH8Sx5^{8 z%LLYp&z)n`URpc3O)3t=4dvq^Bnk0;$CSSt1eUcdzJgy|#iRg8(LHzD9b{A^!%5#3 zq~kS_?ZqGmhI*v&@Ld=K{dSAsm&RcU68nCx+3IL-vRXjr>l+}4IcjVirz42xP2&P` z`Oz!uf`a0xqcSGuUGvj$RKikF$a?YzK?ss*LUzD3wt_c;Z9q%3evLY$ryWw%Hm#Hw}HP{`MWMn^^X%Aaq(AHq^ z?KuHu<>!vPAWSekLi(Ca0CKMKhT7uKwrDO{Y@4IL-Lteilu=Rz+U9L4&;X5G%R+?D zHp7NkC@AfDXQZQvcKFUy1n-kSHlo%ZM69HOLR)V&sF<;YioeN3)(&yc7F{k%5TfVF z(@jQS1ik()toSjycgWfC5S-CNq?2D8Xiq9V_gBjeu#t#4?Km%rR8rNqcLOA ze&&LkIH3U@$m30wxbkJ;i011qv4Yq9p;&a890v2pml8nf;%s6wzT;e31_(Wv7NPe$ zcC!p5fi>l34aX6ZW0%ym*6Hyyxh+zdF-&g<7x!$PlKb}D+SI)$YcSr&AV?a<^v07W z>LP32P#vZYd6Y%h7S`))uAV&YIwF^^@E87>)? zW~CDtIq`!H%#$pIY(J)Dy(kym#YRLX1^B3qP5+P0_yonBH_YZKmN6=Dcd!_ zq(NUnP2pKlNixQoUMl&6Co%ySb6x601iF0dUenP^=fP3^rL!B4GRjr5>oek+Fj_^;F z6Ea^eN&|J4;R}52*(2OD`zW%QDlQ?`@4DZ7KfKhAujV!;WxOS>XI%R8_$-&;%~WSz z351hvLQ3+qRK{=Yx7^a^^k3Gx3=1+ixn#3VBLCw3OxCg$5ni*K*O=alGk8)*qJgAv zF<m0v_)F$X{~rahAK_DP%}zhWa?SmyJpfHeE49dNO zW|A+>vt?3vSmCTU#uV#MH)(T9!baEy?yNHu#dzgT3hqMbO-kTieQ490xz&Xa)@60X zxX`zFiQvT{qgoO0Zgx@@BrGGHW7?}NfRPEY$jU;1KESy zHQ9s|S03^8z7HMUu(kDT(;&|&r2k<;r|a2(R8vs|)fU90eH{zU7GCe;0T4c_kV*rn z1C8Jq{r8 zYP0CBrlrCz9>u~}qH)VCcn@G}0E2_n3}rWT$g+~w{0$GcZ9MBR9saNOJi*D06t(iJ zSoj%rnP=0kt`fNDV4lZ}<7K3JrzD1N>$SV|G%MoDzXTa};~!hcosKz39?>#UCW^6^ zWT^Tr;d91)nb%OT4@b|t&UoE0v`VH_p^SJ*gx+pH#g(a41VN!Z?qZYq_)^+BapGo0 z<%f>Lu81TZ*YwQ2+l#od--VN)xld^y&0fvPP!^|lm}Ctfx|&iDsOZr!sdX8+U8B3E z=SxcOjEvq6n00lU;&^S_Wxocku8uj%@tE4SfSAv&>m|!eManI2c&%n}Zbn*NVl`CY zwTR4Ut@*RR`aCL5PN|OQ)U?Lf9vmR}YajD{*5CtVp)0M7fV9`LHwapY@o!X%)A&>V zVy?iG3sY6>st;FF(&QI;?e~Got;R)aWu1%gxyOe54%~vP%oBBCdK>zRdEXyl#;9f!KiHdeDZ?3ODgn^@R%xK@!1H2IIeSpQSK0+={YcRYZra!;w!s}xQVKA14q_Ef)>pzqf(9cqCzuF zHSQLB8MH#RhDQ>PbyF@$;^PmVW{K+Y|vi`%*6#LQC#gkxNH5BYNb`x4q z4z~7)nI9zW-ynqicEnuBG8FHNhRMdJ4t^8i5}9Mpk5~L5X(#b8Zu8q7&yUsc3{OOO zfmRu!c)V=?ZNCGkpKYIndAyY0n|ptze`#IU03d3n3siEt%xtz#Y1e<9V~TNH>& zIF*_+cGMF|3)Ij5=+BWhI5o&X-}`=kYdSzNCuE(iIM7)ITH3YIm_HLd7nTZYy17Nv zlorI!=GDb3hKv0jeS03syky=%S&`(S9!&8*`!qj4eduB{|A51I2Lq5wixkMQRx2z; z1Uq2QqQtepFI3(t+x!yR@h{$Ad8#Jc8J|>~@un*c5T-&$W0U{E`SwKIm8;@+{Lw(^ zisyu$e7;LE+IU&R>@}QpNUxcW)Orha_WilLzCg0s5;q3S)Ru*+s+|zSi~HI;&9=A~ zR@mqNe!nK2xrA_fdyr`lQz3fTTs4oKt~t5Q@@n}+WmWg|4oN`Fa7y)R&RDuBj^~Vp-}D=3 zhS4r|W?I&p{9H9It542cdN$kQc4@LlVqM4$E9KKiw<^7twsac5ca$4i$=YtgYLx8v zTLBo&rkjEd)#QUIh3cRnDg_Y`4vxfdFKHmDqI=CzQdm`88&khq#?;yFvLxtk2wHNd z6S%K{{(0xx?GqiEIUn0MaP$&YAE<%D^HMu+Z_1P>jH*nh!a(C#j??v!HCD8kd$CNE z6}m1H>*PU6@pP+pwjVvw=S`vY98S-my$@v-Dym!5b(y&EG5r+pEa0-;5J=u|##rqp z8*Lhpk8qzlrchOSwsS^#TrK8Jf&$04Kle}lyMk#=U80}O1HKh{%Nd*jRr`K3T@K$x z&vQ5YE^tvjtle}$xCgv86t$(H;@7{^(k(i_V5=zR5=Ja9e*Rv(k|7v+~5PqUt52#Nlm}Nmd}>NX)V>T8D~b()a#_z zlsRY9S(b!BB%Yv@n*%p4WNEKA(-ZtP_)VlSUWk6Lg+wkeARlb$zh5{K?HhkY{>S*t zVKkY$4ZpM5U;W&1TBmrsjVr{JvfSgw-_+FJJ{)aYXE=9*i;@oP{uIr%X8U{bd~vNz z(iOWL?!;&>zRH?t1ZW*+cqErR-ZWA*zHe^ZS+n1Pr3`T*%EMDr!c{iifDCJTVMqxL z8;9b+ehd>bPOxiD4ydFfTfAqSM%DBapdhhb9uR6)5_Frd>Y|f5=MgT808vc%x z0=V?~=-3FNvr3!y@fgWq;xwe^!B6IFzTvVrY#kaI045zgGWn)`tA*B#em;sUQ2$SW zlvuG5+$XGWfe0CGKRYtV4g0}e+c?k$?ysAu&GmjS^O_tQSuXEwKX>oua0C`RtGz%q|XnwfDc;3NbLw(4%w@3T%#VRERF9Ay3*x~O#d5);w8QbGQ zeP^UD9xe8DJ4D`;${n0sr(^QYgPX>iBHr4!&+c<=@^vKQ_^qW#omS@RKp*c4#G0CF>dE zxc(2X_|l9%6%q2qd|6rk{7%WFSQS_n{-R!RB!_0Iv{Ao2OKEv=zjwo#l=!0->W(e2 zWzSKvq#!j<;^Mbhvtwe!qpF{+o>Z}M?OzyB#mK~314kG-sy|a!c1?6-KuqF z(2btS;6$t#AZoW~;I-$cf^3&TR1lUmSGmXAloaWQV~nVyHX>mcY>PA68Z1cvf+J?l z=iqXPt*2@)zLrld2(?ZtiT$i74ap%;d-T1FVxs@IzdT{-MH$Duu_F&$9jw2^y>PX_ z*wK4oRp1>S!yC@ey>DV2Nbfi8YR?FJHQ!=m!+3eJRZ(2=OHprIYv?ogGHS3ZUqU~g z

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 literal 0 HcmV?d00001 diff --git a/src/utils/mesh_util.py b/src/utils/mesh_util.py index 0ec4663..1ce3d15 100644 --- a/src/utils/mesh_util.py +++ b/src/utils/mesh_util.py @@ -39,9 +39,28 @@ def save_glb(pointnp_px3, facenp_fx3, colornp_px3, fpath): ) mesh.export(fpath, 'glb') +def save_gltf(pointnp_px3, facenp_fx3, colornp_px3, fpath): + # Transform the points and faces to match the desired coordinate system + pointnp_px3 = pointnp_px3 @ np.array([[1, 0, 0], [0, 1, 0], [0, 0, -1]]) + facenp_fx3 = facenp_fx3[:, [2, 1, 0]] + + # Create a Trimesh object + mesh = trimesh.Trimesh( + vertices=pointnp_px3, + faces=facenp_fx3, + vertex_colors=colornp_px3, + ) + + # Export the mesh to a GLTF file + # mesh.export(fpath, 'gltf') + trimesh_scene = trimesh.Scene(geometry=mesh) + with open(fpath, 'wb') as f: + f.write(trimesh.exchange.gltf.export_glb(trimesh_scene, include_normals=True)) def save_obj_with_mtl(pointnp_px3, tcoords_px2, facenp_fx3, facetex_fx3, texmap_hxwx3, fname): import os + + fol, na = os.path.split(fname) na, _ = os.path.splitext(na)