From 3f05935e52b9752716a6cdc1596922345bcfa0a1 Mon Sep 17 00:00:00 2001 From: kurethedead Date: Thu, 4 Mar 2021 21:28:25 -0800 Subject: [PATCH] Added F3D/skeleton/animation importing for OOT. --- __init__.py | 34 +- fast64_internal/f3d/f3d_enums.py | 2 + fast64_internal/f3d/f3d_gbi.py | 221 ++- fast64_internal/f3d/f3d_material.py | 92 +- fast64_internal/f3d/f3d_material_nodes.py | 18 +- fast64_internal/f3d/f3d_material_presets.py | 4 +- fast64_internal/f3d/f3d_parser.py | 1651 ++++++++++++++++- fast64_internal/f3d/f3d_writer.py | 115 +- fast64_internal/oot/README.md | 24 +- fast64_internal/oot/c_writer/__init__.py | 1 - .../oot/c_writer/oot_collision_c.py | 151 -- fast64_internal/oot/c_writer/oot_level_c.py | 2 +- fast64_internal/oot/oot_anim.py | 189 +- fast64_internal/oot/oot_collision.py | 323 ++-- fast64_internal/oot/oot_f3d_writer.py | 638 ++++--- fast64_internal/oot/oot_level_classes.py | 2 +- fast64_internal/oot/oot_level_writer.py | 101 +- fast64_internal/oot/oot_skeleton.py | 527 +++++- fast64_internal/oot/oot_utility.py | 26 +- fast64_internal/sm64/sm64_geolayout_parser.py | 4 +- fast64_internal/sm64/sm64_geolayout_writer.py | 2 +- fast64_internal/utility.py | 83 +- images/oot_imported_gerudo_solid.png | Bin 0 -> 149589 bytes images/oot_imported_gerudo_textured.png | Bin 0 -> 301940 bytes 24 files changed, 3394 insertions(+), 816 deletions(-) delete mode 100644 fast64_internal/oot/c_writer/oot_collision_c.py create mode 100644 images/oot_imported_gerudo_solid.png create mode 100644 images/oot_imported_gerudo_textured.png diff --git a/__init__.py b/__init__.py index e6e1e6d..5049411 100644 --- a/__init__.py +++ b/__init__.py @@ -40,9 +40,7 @@ class ArmatureApplyWithMesh(bpy.types.Operator): # Can also be called from operator search menu (Spacebar) def execute(self, context): try: - if context.mode != 'OBJECT' and context.mode != 'POSE': - raise PluginError("Operator can only be used in object or pose mode.") - elif context.mode == 'POSE': + if context.mode != 'OBJECT': bpy.ops.object.mode_set(mode = "OBJECT") if len(context.selected_objects) == 0: @@ -72,7 +70,11 @@ class ArmatureApplyWithMesh(bpy.types.Operator): context.view_layer.objects.active = armatureObj bpy.ops.object.mode_set(mode = "POSE") bpy.ops.pose.armature_apply() + if context.mode != 'OBJECT': + bpy.ops.object.mode_set(mode = "OBJECT") except Exception as e: + if context.mode != 'OBJECT': + bpy.ops.object.mode_set(mode = "OBJECT") raisePluginError(self, e) return {"CANCELLED"} @@ -125,9 +127,7 @@ class CreateMetarig(bpy.types.Operator): # Can also be called from operator search menu (Spacebar) def execute(self, context): try: - if context.mode != 'OBJECT' and context.mode != 'POSE': - raise PluginError("Operator can only be used in object or pose mode.") - elif context.mode == 'POSE': + if context.mode != 'OBJECT': bpy.ops.object.mode_set(mode = "OBJECT") if len(context.selected_objects) == 0: @@ -231,6 +231,23 @@ class Fast64_GlobalSettingsPanel(bpy.types.Panel): prop_split(col, context.scene, 'gameEditorMode', "Game") col.prop(context.scene, 'exportHiddenGeometry') col.prop(context.scene, 'fullTraceback') + +class Fast64_GlobalToolsPanel(bpy.types.Panel): + bl_idname = "FAST64_PT_global_tools" + bl_label = "Fast64 Tools" + bl_space_type = 'VIEW_3D' + bl_region_type = 'UI' + bl_category = 'Fast64' + + @classmethod + def poll(cls, context): + return True + + # called every frame + def draw(self, context): + col = self.layout.column() + col.operator(ArmatureApplyWithMesh.bl_idname) + #col.operator(CreateMetarig.bl_idname) #def updateGameEditor(scene, context): @@ -260,6 +277,7 @@ classes = ( F3D_GlobalSettingsPanel, Fast64_GlobalSettingsPanel, SM64_ArmatureToolsPanel, + Fast64_GlobalToolsPanel, ) # called on add-on enabling @@ -278,6 +296,7 @@ def register(): register_class(cls) f3d_writer_register() + f3d_parser_register() # ROM @@ -293,10 +312,12 @@ def register(): name = 'Save Textures As PNGs (Breaks CI Textures)') bpy.types.Scene.generateF3DNodeGraph = bpy.props.BoolProperty(name = "Generate F3D Node Graph", default = True) bpy.types.Scene.exportHiddenGeometry = bpy.props.BoolProperty(name = "Export Hidden Geometry", default = True) + bpy.types.Scene.blenderF3DScale = bpy.props.FloatProperty(name = "F3D Blender Scale", default = 100) # called on add-on disabling def unregister(): f3d_writer_unregister() + f3d_parser_unregister() sm64_unregister(True) oot_unregister(True) mat_unregister() @@ -311,6 +332,7 @@ def unregister(): del bpy.types.Scene.gameEditorMode del bpy.types.Scene.generateF3DNodeGraph del bpy.types.Scene.exportHiddenGeometry + del bpy.types.Scene.blenderF3DScale for cls in classes: unregister_class(cls) diff --git a/fast64_internal/f3d/f3d_enums.py b/fast64_internal/f3d/f3d_enums.py index bcf34cd..e5934ad 100644 --- a/fast64_internal/f3d/f3d_enums.py +++ b/fast64_internal/f3d/f3d_enums.py @@ -294,6 +294,7 @@ enumRenderModesCycle1 = [ ('G_RM_ZB_XLU_SURF', "Transparent (No AA)", 'G_RM_ZB_XLU_SURF'), ('G_RM_ZB_XLU_DECAL', "Transparent Decal (No AA)", 'G_RM_ZB_XLU_DECAL'), ('G_RM_OPA_SURF', "Opaque (No AA, No ZBuf)", 'G_RM_OPA_SURF'), + ('G_RM_ZB_CLD_SURF', "Cloud (No AA)", 'G_RM_ZB_CLD_SURF'), ] enumRenderModesCycle2 = [ @@ -312,6 +313,7 @@ enumRenderModesCycle2 = [ ('G_RM_ZB_OPA_DECAL2', "Opaque Decal (No AA)", 'G_RM_ZB_OPA_DECAL2'), ('G_RM_ZB_XLU_SURF2', "Transparent (No AA)", 'G_RM_ZB_XLU_SURF2'), ('G_RM_ZB_XLU_DECAL2', "Transparent Decal (No AA)", 'G_RM_ZB_XLU_DECAL2'), + ('G_RM_ZB_CLD_SURF2', "Cloud (No AA)", 'G_RM_ZB_CLD_SURF2'), ] enumTexFormat = [ diff --git a/fast64_internal/f3d/f3d_gbi.py b/fast64_internal/f3d/f3d_gbi.py index 970bbd2..8108b79 100644 --- a/fast64_internal/f3d/f3d_gbi.py +++ b/fast64_internal/f3d/f3d_gbi.py @@ -475,81 +475,103 @@ class F3D: self.G_ACMUX_0 = 7 # typical CC cycle 1 modes - self.G_CC_PRIMITIVE = '0', '0', '0', 'PRIMITIVE', '0', '0', '0', 'PRIMITIVE' - self.G_CC_SHADE = '0', '0', '0', 'SHADE', '0', '0', '0', 'SHADE' - self.G_CC_MODULATEI = 'TEXEL0', '0', 'SHADE', '0', '0', '0', '0', 'SHADE' - self.G_CC_MODULATEIA = 'TEXEL0', '0', 'SHADE', '0', 'TEXEL0', '0', 'SHADE', '0' - self.G_CC_MODULATEIDECALA = 'TEXEL0', '0', 'SHADE', '0', '0', '0', '0', 'TEXEL0' - self.G_CC_MODULATERGB = self.G_CC_MODULATEI - self.G_CC_MODULATERGBA = self.G_CC_MODULATEIA - self.G_CC_MODULATERGBDECALA = self.G_CC_MODULATEIDECALA - self.G_CC_MODULATEI_PRIM = 'TEXEL0', '0', 'PRIMITIVE', '0', '0', '0', '0', 'PRIMITIVE' - self.G_CC_MODULATEIA_PRIM = 'TEXEL0', '0', 'PRIMITIVE', '0', 'TEXEL0', '0', 'PRIMITIVE', '0' - self.G_CC_MODULATEIDECALA_PRIM = 'TEXEL0', '0', 'PRIMITIVE', '0', '0', '0', '0', 'TEXEL0' - self.G_CC_MODULATERGB_PRIM = self.G_CC_MODULATEI_PRIM - self.G_CC_MODULATERGBA_PRIM = self.G_CC_MODULATEIA_PRIM - self.G_CC_MODULATERGBDECALA_PRIM = self.G_CC_MODULATEIDECALA_PRIM - self.G_CC_DECALRGB = '0', '0', '0', 'TEXEL0', '0', '0', '0', 'SHADE' - self.G_CC_DECALRGBA = '0', '0', '0', 'TEXEL0', '0', '0', '0', 'TEXEL0' - self.G_CC_BLENDI = 'ENVIRONMENT', 'SHADE', 'TEXEL0', 'SHADE', '0', '0', '0', 'SHADE' - self.G_CC_BLENDIA = 'ENVIRONMENT', 'SHADE', 'TEXEL0', 'SHADE', 'TEXEL0', '0', 'SHADE', '0' - self.G_CC_BLENDIDECALA = 'ENVIRONMENT', 'SHADE', 'TEXEL0', 'SHADE', '0', '0', '0', 'TEXEL0' - self.G_CC_BLENDRGBA = 'TEXEL0', 'SHADE', 'TEXEL0_ALPHA', 'SHADE', '0', '0', '0', 'SHADE' - self.G_CC_BLENDRGBDECALA = 'TEXEL0', 'SHADE', 'TEXEL0_ALPHA', 'SHADE', '0', '0', '0', 'TEXEL0' - self.G_CC_ADDRGB = '1', '0', 'TEXEL0', 'SHADE', '0', '0', '0', 'SHADE' - self.G_CC_ADDRGBDECALA = '1', '0', 'TEXEL0', 'SHADE', '0', '0', '0', 'TEXEL0' - self.G_CC_REFLECTRGB = 'ENVIRONMENT', '0', 'TEXEL0', 'SHADE', '0', '0', '0', 'SHADE' - self.G_CC_REFLECTRGBDECALA = 'ENVIRONMENT', '0', 'TEXEL0', 'SHADE', '0', '0', '0', 'TEXEL0' - self.G_CC_HILITERGB = 'PRIMITIVE', 'SHADE', 'TEXEL0', 'SHADE', '0', '0', '0', 'SHADE' - self.G_CC_HILITERGBA = 'PRIMITIVE', 'SHADE', 'TEXEL0', 'SHADE', 'PRIMITIVE', 'SHADE', 'TEXEL0', 'SHADE' - self.G_CC_HILITERGBDECALA = 'PRIMITIVE', 'SHADE', 'TEXEL0', 'SHADE', '0', '0', '0', 'TEXEL0' - self.G_CC_SHADEDECALA = '0', '0', '0', 'SHADE', '0', '0', '0', 'TEXEL0' - self.G_CC_BLENDPE = 'PRIMITIVE', 'ENVIRONMENT', 'TEXEL0', 'ENVIRONMENT', 'TEXEL0', '0', 'SHADE', '0' - self.G_CC_BLENDPEDECALA = 'PRIMITIVE', 'ENVIRONMENT', 'TEXEL0', 'ENVIRONMENT', '0', '0', '0', 'TEXEL0' + self.G_CC_PRIMITIVE = '0', '0', '0', 'PRIMITIVE', '0', '0', '0', 'PRIMITIVE' + self.G_CC_SHADE = '0', '0', '0', 'SHADE', '0', '0', '0', 'SHADE' - # oddball 'modes' - self._G_CC_BLENDPE = 'ENVIRONMENT', 'PRIMITIVE', 'TEXEL0', 'PRIMITIVE', 'TEXEL0', '0', 'SHADE', '0' - self._G_CC_BLENDPEDECALA = 'ENVIRONMENT', 'PRIMITIVE', 'TEXEL0', 'PRIMITIVE', '0', '0', '0', 'TEXEL0' - self._G_CC_TWOCOLORTEX = 'PRIMITIVE', 'SHADE', 'TEXEL0', 'SHADE', '0', '0', '0', 'SHADE' - # used for 1-cycle sparse 'mip-maps', primitive color has color of lowest 'LOD' - self._G_CC_SPARSEST = 'PRIMITIVE', 'TEXEL0', 'LOD_FRACTION', 'TEXEL0', 'PRIMITIVE', 'TEXEL0', 'LOD_FRACTION', 'TEXEL0' - self.G_CC_TEMPLERP = 'TEXEL1', 'TEXEL0', 'PRIM_LOD_FRAC', 'TEXEL0', 'TEXEL1', 'TEXEL0', 'PRIM_LOD_FRAC', 'TEXEL0' + self.G_CC_MODULATEI = 'TEXEL0', '0', 'SHADE', '0', '0', '0', '0', 'SHADE' + self.G_CC_MODULATEIDECALA = 'TEXEL0', '0', 'SHADE', '0', '0', '0', '0', 'TEXEL0' + self.G_CC_MODULATEIFADE = 'TEXEL0', '0', 'SHADE', '0', '0', '0', '0', 'ENVIRONMENT' - # typical CC cycle 1 'modes', usually followed by other cycle 2 'modes' - self.G_CC_TRILERP = 'TEXEL1', 'TEXEL0', 'LOD_FRACTION', 'TEXEL0', 'TEXEL1', 'TEXEL0', 'LOD_FRACTION', 'TEXEL0' - self.G_CC_INTERFERENCE = 'TEXEL0', '0', 'TEXEL1', '0', 'TEXEL0', '0', 'TEXEL1', '0' + self.G_CC_MODULATERGB = self.G_CC_MODULATEI + self.G_CC_MODULATERGBDECALA = self.G_CC_MODULATEIDECALA + self.G_CC_MODULATERGBFADE = self.G_CC_MODULATEIFADE - # One-cycle color convert 'operation' - self.G_CC_1CYUV2RGB = 'TEXEL0', 'K4', 'K5', 'TEXEL0', '0', '0', '0', 'SHADE' + self.G_CC_MODULATEIA = 'TEXEL0', '0', 'SHADE', '0', 'TEXEL0', '0', 'SHADE', '0' + self.G_CC_MODULATEIFADEA = 'TEXEL0', '0', 'SHADE', '0', 'TEXEL0', '0', 'ENVIRONMENT', '0' - ''' - * NOTE: YUV2RGB expects TF step1 color conversion to occur in 2nd clock. - * 'Therefore', CC looks for step1 results in TEXEL1 - ''' - self.G_CC_YUV2RGB = 'TEXEL1', 'K4', 'K5', 'TEXEL1', '0', '0', '0', 0 + self.G_CC_MODULATEFADE = 'TEXEL0', '0', 'SHADE', '0', 'ENVIRONMENT', '0', 'TEXEL0', '0' - # typical CC cycle 2 modes - self.G_CC_PASS2 = '0', '0', '0', 'COMBINED', '0', '0', '0', 'COMBINED' - self.G_CC_MODULATEI2 = 'COMBINED', '0', 'SHADE', '0', '0', '0', '0', 'SHADE' - self.G_CC_MODULATEIA2 = 'COMBINED', '0', 'SHADE', '0', 'COMBINED', '0', 'SHADE', '0' - self.G_CC_MODULATERGB2 = self.G_CC_MODULATEI2 - self.G_CC_MODULATERGBA2 = self.G_CC_MODULATEIA2 - self.G_CC_MODULATEI_PRIM2 = 'COMBINED', '0', 'PRIMITIVE', '0', '0', '0', '0', 'PRIMITIVE' - self.G_CC_MODULATEIA_PRIM2 = 'COMBINED', '0', 'PRIMITIVE', '0', 'COMBINED', '0', 'PRIMITIVE', '0' - self.G_CC_MODULATERGB_PRIM2 = self.G_CC_MODULATEI_PRIM2 - self.G_CC_MODULATERGBA_PRIM2 = self.G_CC_MODULATEIA_PRIM2 - self.G_CC_DECALRGB2 = '0', '0', '0', 'COMBINED', '0', '0', '0', 'SHADE' - ''' - * ? - self.G_CC_DECALRGBA2 = 'COMBINED', 'SHADE', 'COMBINED_ALPHA', 'SHADE', '0', '0', '0', 'SHADE' - ''' - self.G_CC_BLENDI2 = 'ENVIRONMENT', 'SHADE', 'COMBINED', 'SHADE', '0', '0', '0', 'SHADE' - self.G_CC_BLENDIA2 = 'ENVIRONMENT', 'SHADE', 'COMBINED', 'SHADE', 'COMBINED', '0', 'SHADE', '0' - self.G_CC_CHROMA_KEY2 = 'TEXEL0', 'CENTER', 'SCALE', '0', '0', '0', '0', '0' - self.G_CC_HILITERGB2 = 'ENVIRONMENT', 'COMBINED', 'TEXEL0', 'COMBINED', '0', '0', '0', 'SHADE' - self.G_CC_HILITERGBA2 = 'ENVIRONMENT', 'COMBINED', 'TEXEL0', 'COMBINED', 'ENVIRONMENT', 'COMBINED', 'TEXEL0', 'COMBINED' - self.G_CC_HILITERGBDECALA2 = 'ENVIRONMENT', 'COMBINED', 'TEXEL0', 'COMBINED', '0', '0', '0', 'TEXEL0' - self.G_CC_HILITERGBPASSA2 = 'ENVIRONMENT', 'COMBINED', 'TEXEL0', 'COMBINED', '0', '0', '0', 'COMBINED' + self.G_CC_MODULATERGBA = self.G_CC_MODULATEIA + self.G_CC_MODULATERGBFADEA = self.G_CC_MODULATEIFADEA + + self.G_CC_MODULATEI_PRIM = 'TEXEL0', '0', 'PRIMITIVE', '0', '0', '0', '0', 'PRIMITIVE' + self.G_CC_MODULATEIA_PRIM = 'TEXEL0', '0', 'PRIMITIVE', '0', 'TEXEL0', '0', 'PRIMITIVE', '0' + self.G_CC_MODULATEIDECALA_PRIM = 'TEXEL0', '0', 'PRIMITIVE', '0', '0', '0', '0', 'TEXEL0' + + self.G_CC_MODULATERGB_PRIM = self.G_CC_MODULATEI_PRIM + self.G_CC_MODULATERGBA_PRIM = self.G_CC_MODULATEIA_PRIM + self.G_CC_MODULATERGBDECALA_PRIM = self.G_CC_MODULATEIDECALA_PRIM + + self.G_CC_FADE = 'SHADE', '0', 'ENVIRONMENT', '0', 'SHADE', '0', 'ENVIRONMENT', '0' + self.G_CC_FADEA = 'TEXEL0', '0', 'ENVIRONMENT', '0', 'TEXEL0', '0', 'ENVIRONMENT', '0' + + self.G_CC_DECALRGB = '0', '0', '0', 'TEXEL0', '0', '0', '0', 'SHADE' + self.G_CC_DECALRGBA = '0', '0', '0', 'TEXEL0', '0', '0', '0', 'TEXEL0' + self.G_CC_DECALFADE = '0', '0', '0', 'TEXEL0', '0', '0', '0', 'ENVIRONMENT' + + self.G_CC_DECALFADEA = '0', '0', '0', 'TEXEL0', 'TEXEL0', '0', 'ENVIRONMENT', '0' + + self.G_CC_BLENDI = 'ENVIRONMENT', 'SHADE', 'TEXEL0', 'SHADE', '0', '0', '0', 'SHADE' + self.G_CC_BLENDIA = 'ENVIRONMENT', 'SHADE', 'TEXEL0', 'SHADE', 'TEXEL0', '0', 'SHADE', '0' + self.G_CC_BLENDIDECALA = 'ENVIRONMENT', 'SHADE', 'TEXEL0', 'SHADE', '0', '0', '0', 'TEXEL0' + + self.G_CC_BLENDRGBA = 'TEXEL0', 'SHADE', 'TEXEL0_ALPHA', 'SHADE', '0', '0', '0', 'SHADE' + self.G_CC_BLENDRGBDECALA = 'TEXEL0', 'SHADE', 'TEXEL0_ALPHA', 'SHADE', '0', '0', '0', 'TEXEL0' + self.G_CC_BLENDRGBFADEA = 'TEXEL0', 'SHADE', 'TEXEL0_ALPHA', 'SHADE', '0', '0', '0', 'ENVIRONMENT' + + self.G_CC_ADDRGB = 'TEXEL0', '0', 'TEXEL0', 'SHADE', '0', '0', '0', 'SHADE' + self.G_CC_ADDRGBDECALA = 'TEXEL0', '0', 'TEXEL0', 'SHADE', '0', '0', '0', 'TEXEL0' + self.G_CC_ADDRGBFADE = 'TEXEL0', '0', 'TEXEL0', 'SHADE', '0', '0', '0', 'ENVIRONMENT' + + self.G_CC_REFLECTRGB = 'ENVIRONMENT', '0', 'TEXEL0', 'SHADE', '0', '0', '0', 'SHADE' + self.G_CC_REFLECTRGBDECALA = 'ENVIRONMENT', '0', 'TEXEL0', 'SHADE', '0', '0', '0', 'TEXEL0' + + self.G_CC_HILITERGB = 'PRIMITIVE', 'SHADE', 'TEXEL0', 'SHADE', '0', '0', '0', 'SHADE' + self.G_CC_HILITERGBA = 'PRIMITIVE', 'SHADE', 'TEXEL0', 'SHADE', 'PRIMITIVE', 'SHADE', 'TEXEL0', 'SHADE' + self.G_CC_HILITERGBDECALA = 'PRIMITIVE', 'SHADE', 'TEXEL0', 'SHADE', '0', '0', '0', 'TEXEL0' + + self.G_CC_SHADEDECALA = '0', '0', '0', 'SHADE', '0', '0', '0', 'TEXEL0' + self.G_CC_SHADEFADEA = '0', '0', '0', 'SHADE', '0', '0', '0', 'ENVIRONMENT' + + self.G_CC_BLENDPE = 'PRIMITIVE', 'ENVIRONMENT', 'TEXEL0', 'ENVIRONMENT', 'TEXEL0', '0', 'SHADE', '0' + self.G_CC_BLENDPEDECALA = 'PRIMITIVE', 'ENVIRONMENT', 'TEXEL0', 'ENVIRONMENT', '0', '0', '0', 'TEXEL0' + + # oddball modes + self._G_CC_BLENDPE = 'ENVIRONMENT', 'PRIMITIVE', 'TEXEL0', 'PRIMITIVE', 'TEXEL0', '0', 'SHADE', '0' + self._G_CC_BLENDPEDECALA = 'ENVIRONMENT', 'PRIMITIVE', 'TEXEL0', 'PRIMITIVE', '0', '0', '0', 'TEXEL0' + self._G_CC_TWOCOLORTEX = 'PRIMITIVE', 'SHADE', 'TEXEL0', 'SHADE', '0', '0', '0', 'SHADE' + + # used for 1-cycle sparse mip-maps, primitive color has color of lowest LOD + self._G_CC_SPARSEST = 'PRIMITIVE', 'TEXEL0', 'LOD_FRACTION', 'TEXEL0', 'PRIMITIVE', 'TEXEL0', 'LOD_FRACTION', 'TEXEL0' + self.G_CC_TEMPLERP = 'TEXEL1', 'TEXEL0', 'PRIM_LOD_FRAC', 'TEXEL0', 'TEXEL1', 'TEXEL0', 'PRIM_LOD_FRAC', 'TEXEL0' + + # typical CC cycle 1 modes, usually followed by other cycle 2 modes + self.G_CC_TRILERP = 'TEXEL1', 'TEXEL0', 'LOD_FRACTION', 'TEXEL0', 'TEXEL1', 'TEXEL0', 'LOD_FRACTION', 'TEXEL0' + self.G_CC_INTERFERENCE = 'TEXEL0', '0', 'TEXEL1', '0', 'TEXEL0', '0', 'TEXEL1', '0' + + self.G_CC_1CYUV2RGB = 'TEXEL0', 'K4', 'K5', 'TEXEL0', '0', '0', '0', 'SHADE' + self.G_CC_YUV2RGB = 'TEXEL1', 'K4', 'K5', 'TEXEL1', '0', '0', '0', '0' + + #typical CC cycle 2 modes + self.G_CC_PASS2 = '0', '0', '0', 'COMBINED', '0', '0', '0', 'COMBINED' + self.G_CC_MODULATEI2 = 'COMBINED', '0', 'SHADE', '0', '0', '0', '0', 'SHADE' + self.G_CC_MODULATEIA2 = 'COMBINED', '0', 'SHADE', '0', 'COMBINED', '0', 'SHADE', '0' + self.G_CC_MODULATERGB2 = self.G_CC_MODULATEI2 + self.G_CC_MODULATERGBA2 = self.G_CC_MODULATEIA2 + self.G_CC_MODULATEI_PRIM2 = 'COMBINED', '0', 'PRIMITIVE', '0', '0', '0', '0', 'PRIMITIVE' + self.G_CC_MODULATEIA_PRIM2 = 'COMBINED', '0', 'PRIMITIVE', '0', 'COMBINED', '0', 'PRIMITIVE', '0' + self.G_CC_MODULATERGB_PRIM2 = self.G_CC_MODULATEI_PRIM2 + self.G_CC_MODULATERGBA_PRIM2 = self.G_CC_MODULATEIA_PRIM2 + self.G_CC_DECALRGB2 = '0', '0', '0', 'COMBINED', '0', '0', '0', 'SHADE' + + self.G_CC_DECALRGBA2 = 'COMBINED', 'SHADE', 'COMBINED_ALPHA', 'SHADE', '0', '0', '0', 'SHADE' + self.G_CC_BLENDI2 = 'ENVIRONMENT', 'SHADE', 'COMBINED', 'SHADE', '0', '0', '0', 'SHADE' + self.G_CC_BLENDIA2 = 'ENVIRONMENT', 'SHADE', 'COMBINED', 'SHADE', 'COMBINED', '0', 'SHADE', '0' + self.G_CC_CHROMA_KEY2 = 'TEXEL0', 'CENTER', 'SCALE', '0', '0', '0', '0', '0' + self.G_CC_HILITERGB2 = 'ENVIRONMENT', 'COMBINED', 'TEXEL0', 'COMBINED', '0', '0', '0', 'SHADE' + self.G_CC_HILITERGBA2 = 'ENVIRONMENT', 'COMBINED', 'TEXEL0', 'COMBINED', 'ENVIRONMENT', 'COMBINED', 'TEXEL0', 'COMBINED' + self.G_CC_HILITERGBDECALA2 = 'ENVIRONMENT', 'COMBINED', 'TEXEL0', 'COMBINED', '0', '0', '0', 'TEXEL0' + self.G_CC_HILITERGBPASSA2 = 'ENVIRONMENT', 'COMBINED', 'TEXEL0', 'COMBINED', '0', '0', '0', 'COMBINED' # G_SETOTHERMODE_L sft: shift count @@ -676,6 +698,41 @@ class F3D: self.G_BL_1 = G_BL_1 = 2 self.G_BL_0 = G_BL_0 = 3 + self.cvgDstDict = { + CVG_DST_CLAMP : "CVG_DST_CLAMP", + CVG_DST_WRAP : "CVG_DST_WRAP", + CVG_DST_FULL : "CVG_DST_FULL", + CVG_DST_SAVE : "CVG_DST_SAVE", + } + + self.zmodeDict = { + ZMODE_OPA : "ZMODE_OPA", + ZMODE_INTER : "ZMODE_INTER", + ZMODE_XLU : "ZMODE_XLU", + ZMODE_DEC : "ZMODE_DEC", + } + + self.blendColorDict = { + G_BL_CLR_IN : "G_BL_CLR_IN", + G_BL_CLR_MEM : "G_BL_CLR_MEM", + G_BL_CLR_BL : "G_BL_CLR_BL", + G_BL_CLR_FOG : "G_BL_CLR_FOG", + } + + self.blendAlphaDict = { + G_BL_A_IN : 'G_BL_A_IN', + G_BL_A_FOG : 'G_BL_A_FOG', + G_BL_A_SHADE : 'G_BL_A_SHADE', + G_BL_0 : 'G_BL_0', + } + + self.blendMixDict = { + G_BL_1MA : 'G_BL_1MA', + G_BL_A_MEM : 'G_BL_A_MEM', + G_BL_1 : 'G_BL_1', + G_BL_0 : 'G_BL_0', + } + def GBL_c1(m1a, m1b, m2a, m2b): return (m1a) << 30 | (m1b) << 26 | (m2a) << 22 | (m2b) << 18 def GBL_c2(m1a, m1b, m2a, m2b): @@ -1039,7 +1096,7 @@ class F3D: self.G_RM_OPA_CI2 = RM_OPA_CI(2) - self.G_RM_FOG_SHADE_A = GBL_c1(G_BL_CLR_FOG, G_BL_A_SHADE, G_BL_CLR_IN, G_BL_1MA) + self.G_RM_FOG_SHADE_A = GBL_c1(G_BL_CLR_FOG, G_BL_A_SHADE, G_BL_CLR_IN, G_BL_1MA) self.G_RM_FOG_PRIM_A = GBL_c1(G_BL_CLR_FOG, G_BL_A_FOG, G_BL_CLR_IN, G_BL_1MA) self.G_RM_PASS = GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) @@ -1285,6 +1342,11 @@ class F3D: 'NUMLIGHTS_7' : 7, } + def GBL_c1(self, m1a, m1b, m2a, m2b): + return (m1a) << 30 | (m1b) << 26 | (m2a) << 22 | (m2b) << 18 + def GBL_c2(self, m1a, m1b, m2a, m2b): + return (m1a) << 28 | (m1b) << 24 | (m2a) << 20 | (m2b) << 16 + # macros for command parsing def GDMACMD(self, x): return (x) def GIMMCMD(self, x): return (self.G_IMMFIRST-(x)) @@ -1749,11 +1811,24 @@ class FModel: fMaterial.usedLights.append(key) self.lights[key] = value - def addMesh(self, name, namePrefix, drawLayer, isSkinned): + def addMesh(self, name, namePrefix, drawLayer, isSkinned, contextObj): meshName = getFMeshName(name, namePrefix, drawLayer, isSkinned) checkUniqueBoneNames(self, meshName, name) self.meshes[meshName] = FMesh(meshName, self.DLFormat) + + self.onAddMesh(self.meshes[meshName], contextObj) + return self.meshes[meshName] + + def onAddMesh(self, fMesh, contextObj): + return + + def endDraw(self, fMesh, contextObj): + self.onEndDraw(fMesh, contextObj) + fMesh.draw.commands.append(SPEndDisplayList()) + + def onEndDraw(self, fMesh, contextObj): + return def getTextureAndHandleShared(self, imageKey): # Check if texture is in self @@ -2022,7 +2097,7 @@ class FModel: oldpath = image.filepath try: image.filepath = \ - os.path.join(dirpath, imageFileName) + bpy.path.abspath(os.path.join(dirpath, imageFileName)) image.save() texturesSaved += 1 if not isPacked: diff --git a/fast64_internal/f3d/f3d_material.py b/fast64_internal/f3d/f3d_material.py index 24e76a8..bd70b3a 100644 --- a/fast64_internal/f3d/f3d_material.py +++ b/fast64_internal/f3d/f3d_material.py @@ -85,11 +85,11 @@ drawLayerOOTtoSM64 = { "Overlay" : '1', } -drawLayerOOTAlpha = { - "Opaque" : "CLIP", - "Transparent" : "BLEND", - "Overlay" : 'CLIP', -} +#drawLayerOOTAlpha = { +# "Opaque" : "OPAQUE", +# "Transparent" : "BLEND", +# "Overlay" : 'CLIP', +#} drawLayerSM64Alpha = { '0' : "CLIP", @@ -166,7 +166,17 @@ def update_blend_method(material, context): if material.mat_ver > 3: drawLayer = material.f3d_mat.draw_layer if context.scene.gameEditorMode == "OOT": - material.blend_method = drawLayerOOTAlpha[drawLayer.oot] + if drawLayer.oot == "Opaque" or drawLayer.oot == "Overlay": + f3dMat = material.f3d_mat + if not f3dMat.rdp_settings.rendermode_advanced_enabled and\ + "TEX_EDGE" not in f3dMat.rdp_settings.rendermode_preset_cycle_1 and\ + ("TEX_EDGE" not in f3dMat.rdp_settings.rendermode_preset_cycle_2 or\ + f3dMat.rdp_settings.g_mdsft_cycletype != 'G_CYC_2CYCLE'): + material.blend_method = "OPAQUE" + else: + material.blend_method = "CLIP" + else: + material.blend_method = "BLEND" elif context.scene.gameEditorMode == "SM64": material.blend_method = drawLayerSM64Alpha[drawLayer.sm64] @@ -442,7 +452,7 @@ class F3DPanel(bpy.types.Panel): inputGroup.prop(textureProp, 'menu', text = name + ' Properties', icon = 'TRIA_DOWN' if textureProp.menu else 'TRIA_RIGHT') if textureProp.menu: - + tex = textureProp.tex prop_input_name = inputGroup.column() prop_input = inputGroup.column() @@ -453,13 +463,22 @@ class F3DPanel(bpy.types.Panel): #prop_input.template_image(textureProp, 'tex', # nodes[name].image_user) texIndex = name[-1] - prop_input.template_ID(textureProp, 'tex', new='image.new', open='image.open', - unlink='image.tex' + texIndex + "_unlink") - prop_input.enabled = textureProp.tex_set - tex = textureProp.tex - if tex is not None: - prop_input.label(text = "Size: " + str(tex.size[0]) + " x " + str(tex.size[1])) + prop_input.prop(textureProp, "use_tex_reference") + if textureProp.use_tex_reference: + prop_split(prop_input, textureProp, "tex_reference", "Texture Reference") + prop_split(prop_input, textureProp, "tex_reference_size", "Texture Size") + if textureProp.tex_format[:2] == 'CI': + prop_split(prop_input, textureProp, "pal_reference", "Palette Reference") + prop_split(prop_input, textureProp, "pal_reference_size", "Palette Size") + + else: + prop_input.template_ID(textureProp, 'tex', new='image.new', open='image.open', + unlink='image.tex' + texIndex + "_unlink") + prop_input.enabled = textureProp.tex_set + + if tex is not None: + prop_input.label(text = "Size: " + str(tex.size[0]) + " x " + str(tex.size[1])) if material.mat_ver > 3 and material.f3d_mat.use_large_textures: prop_input.label(text = "Large texture mode enabled.") @@ -1165,7 +1184,7 @@ def update_node_values_without_preset(self, context): update_node_values_of_material(material, context) material.f3d_update_flag = False else: - print('No material in context.') + #print('No material in context.') pass def update_node_values_directly(material, context): @@ -1491,9 +1510,10 @@ def update_tex_values_field_v3(self, texProperty, tex_size, (texProperty.T.high + 1) / tex_size[1], 0) # Clamp + isTexGen = self.f3d_mat.rdp_settings.g_tex_gen or self.f3d_mat.rdp_settings.g_tex_gen_linear nodes['Get UV ' + str(texIndex) + ' F3D v3'].inputs[5].default_value = ( - 1 if texProperty.S.clamp else 0, - 1 if texProperty.T.clamp else 0, 0) + 1 if texProperty.S.clamp and not isTexGen else 0, + 1 if texProperty.T.clamp and not isTexGen else 0, 0) # Normalized Mask nodes['Get UV ' + str(texIndex) + ' F3D v3'].inputs[6].default_value = ( @@ -1525,8 +1545,11 @@ def update_tex_values_index(self, context, texProperty, texNodeName, nodes = self.node_tree.nodes nodes[texNodeName].image = texProperty.tex - if nodes[texNodeName].image is not None: - tex_size = nodes[texNodeName].image.size + if nodes[texNodeName].image is not None or texProperty.use_tex_reference: + if nodes[texNodeName].image is not None: + tex_size = nodes[texNodeName].image.size + else: + tex_size = texProperty.tex_reference_size if tex_size[0] > 0 and tex_size[1] > 0: if self.mat_ver == 1: tex_x = nodes[uvNodeName].node_tree.nodes[\ @@ -1750,14 +1773,15 @@ def hasNodeGraph(material): def createF3DMat(obj, preset = 'Shaded Solid', index = None): material = bpy.data.materials.new('f3d_material') - if index is None: - obj.data.materials.append(material) - if bpy.context.object is not None: - bpy.context.object.active_material_index = len(obj.material_slots) - 1 - else: - obj.material_slots[index].material = material - if bpy.context.object is not None: - bpy.context.object.active_material_index = index + if obj is not None: + if index is None: + obj.data.materials.append(material) + if bpy.context.object is not None: + bpy.context.object.active_material_index = len(obj.material_slots) - 1 + else: + obj.material_slots[index].material = material + if bpy.context.object is not None: + bpy.context.object.active_material_index = index material.is_f3d = True material.mat_ver = 4 @@ -2001,6 +2025,12 @@ class TextureProperty(bpy.types.PropertyGroup): S : bpy.props.PointerProperty(type = TextureFieldProperty) T : bpy.props.PointerProperty(type = TextureFieldProperty) + use_tex_reference: bpy.props.BoolProperty(name = "Use Texture Reference", default = False, update = update_tex_values) + tex_reference: bpy.props.StringProperty(name = "Texture Reference", default = '0x08000000') + tex_reference_size: bpy.props.IntVectorProperty(name = "Texture Reference Size", min = 1, size = 2, default = (32,32), update = update_tex_values) + pal_reference: bpy.props.StringProperty(name = "Palette Reference", default = '0x08000000') + pal_reference_size : bpy.props.IntProperty(name = "Texture Reference Size", min = 1, default = 16) + menu : bpy.props.BoolProperty() tex_set : bpy.props.BoolProperty(default = True, update = update_node_values) autoprop : bpy.props.BoolProperty(name = 'Autoprop', update = update_tex_values, default = True) @@ -2383,6 +2413,11 @@ class AddPresetF3D(AddPresetBase, Operator): "f3d_mat.tex0.tex", "f3d_mat.tex0.tex_format", "f3d_mat.tex0.ci_format", + "f3d_mat.tex0.use_tex_reference", + "f3d_mat.tex0.tex_reference", + "f3d_mat.tex0.tex_reference_size", + "f3d_mat.tex0.pal_reference", + "f3d_mat.tex0.pal_reference_size", "f3d_mat.tex0.S", "f3d_mat.tex0.T", "f3d_mat.tex0.menu", @@ -2391,6 +2426,11 @@ class AddPresetF3D(AddPresetBase, Operator): "f3d_mat.tex1.tex", "f3d_mat.tex1.tex_format", "f3d_mat.tex1.ci_format", + "f3d_mat.tex1.use_tex_reference", + "f3d_mat.tex1.tex_reference", + "f3d_mat.tex1.tex_reference_size", + "f3d_mat.tex1.pal_reference", + "f3d_mat.tex1.pal_reference_size", "f3d_mat.tex1.S", "f3d_mat.tex1.T", "f3d_mat.tex1.menu", diff --git a/fast64_internal/f3d/f3d_material_nodes.py b/fast64_internal/f3d/f3d_material_nodes.py index e417167..5d46b39 100644 --- a/fast64_internal/f3d/f3d_material_nodes.py +++ b/fast64_internal/f3d/f3d_material_nodes.py @@ -1156,7 +1156,7 @@ class GetAlphaFromColor(ShaderNode): # Copy function to initialize a copied node from an existing one. def copy(self, node): - print("Copying from node ", node) + pass #print("Copying from node ", node) # Free function to clean up on removal. def free(self): @@ -1214,7 +1214,7 @@ class F3DNodeA(ShaderNode): # Copy function to initialize a copied node from an existing one. def copy(self, node): - print("Copying from node ", node) + pass #print("Copying from node ", node) # Free function to clean up on removal. def free(self): @@ -1257,7 +1257,7 @@ class F3DNodeB(ShaderNode): # Copy function to initialize a copied node from an existing one. def copy(self, node): - print("Copying from node ", node) + pass #print("Copying from node ", node) # Free function to clean up on removal. def free(self): @@ -1300,7 +1300,7 @@ class F3DNodeC(ShaderNode): # Copy function to initialize a copied node from an existing one. def copy(self, node): - print("Copying from node ", node) + pass #print("Copying from node ", node) # Free function to clean up on removal. def free(self): @@ -1343,7 +1343,7 @@ class F3DNodeD(ShaderNode): # Copy function to initialize a copied node from an existing one. def copy(self, node): - print("Copying from node ", node) + pass #print("Copying from node ", node) # Free function to clean up on removal. def free(self): @@ -1387,7 +1387,7 @@ class F3DNodeA_alpha(ShaderNode): # Copy function to initialize a copied node from an existing one. def copy(self, node): - print("Copying from node ", node) + pass #print("Copying from node ", node) # Free function to clean up on removal. def free(self): @@ -1430,7 +1430,7 @@ class F3DNodeB_alpha(ShaderNode): # Copy function to initialize a copied node from an existing one. def copy(self, node): - print("Copying from node ", node) + pass #print("Copying from node ", node) # Free function to clean up on removal. def free(self): @@ -1473,7 +1473,7 @@ class F3DNodeC_alpha(ShaderNode): # Copy function to initialize a copied node from an existing one. def copy(self, node): - print("Copying from node ", node) + pass #print("Copying from node ", node) # Free function to clean up on removal. def free(self): @@ -1516,7 +1516,7 @@ class F3DNodeD_alpha(ShaderNode): # Copy function to initialize a copied node from an existing one. def copy(self, node): - print("Copying from node ", node) + pass #print("Copying from node ", node) # Free function to clean up on removal. def free(self): diff --git a/fast64_internal/f3d/f3d_material_presets.py b/fast64_internal/f3d/f3d_material_presets.py index f862e7b..2991dc5 100644 --- a/fast64_internal/f3d/f3d_material_presets.py +++ b/fast64_internal/f3d/f3d_material_presets.py @@ -508,7 +508,7 @@ f3d_mat.set_combiner = True f3d_mat.use_default_lighting = True f3d_mat.blend_color = (0.0, 0.0, 0.0, 1.0) f3d_mat.prim_color = (1.0, 1.0, 1.0, 1.0) -f3d_mat.env_color = (0.0, 0.6405822038650513, 0.06569604575634003, 1.0) +f3d_mat.env_color = (1.0, 1.0, 1.0, 1.0) f3d_mat.key_center = (0.5, 0.5, 0.5, 1.0) f3d_mat.key_scale = (0.0, 0.0, 0.0) f3d_mat.key_width = (0.0, 0.0, 0.0) @@ -626,7 +626,7 @@ f3d_mat.set_combiner = True f3d_mat.use_default_lighting = True f3d_mat.blend_color = (0.0, 0.0, 0.0, 1.0) f3d_mat.prim_color = (1.0, 1.0, 1.0, 0.5) -f3d_mat.env_color = (0.0, 0.6405822038650513, 0.06569604575634003, 1.0) +f3d_mat.env_color = (1.0, 1.0, 1.0, 1.0) f3d_mat.key_center = (0.5, 0.5, 0.5, 1.0) f3d_mat.key_scale = (0.0, 0.0, 0.0) f3d_mat.key_width = (0.0, 0.0, 0.0) diff --git a/fast64_internal/f3d/f3d_parser.py b/fast64_internal/f3d/f3d_parser.py index 2f0afe5..6b3895a 100644 --- a/fast64_internal/f3d/f3d_parser.py +++ b/fast64_internal/f3d/f3d_parser.py @@ -1,7 +1,10 @@ -import bmesh, bpy, mathutils, pprint +import bmesh, bpy, mathutils, pprint, re, math, traceback +from bpy.utils import register_class, unregister_class from .f3d_gbi import * -from .f3d_material import createF3DMat, update_preset_manual +from .f3d_material import createF3DMat, update_preset_manual, update_node_values_directly, all_combiner_uses, ootEnumDrawLayers +from .f3d_writer import BufferVertex from ..utility import * +import ast, operator colorCombinationCommands = [ 0x03, #load lighting data @@ -71,7 +74,7 @@ def F3DtoBlenderObject(romfile, startAddress, scene, bMesh = bmesh.new() bMesh.from_mesh(mesh) - parseF3D(romfile, startAddress, scene, bMesh, obj, \ + parseF3DBinary(romfile, startAddress, scene, bMesh, obj, \ transformMatrix, newname, segmentData, \ [None] * 16 * 16) @@ -89,16 +92,11 @@ def F3DtoBlenderObject(romfile, startAddress, scene, return obj -def getOrMakeVertexGroup(obj, groupName): - for group in obj.vertex_groups: - if group.name == groupName: - return group - return obj.vertex_groups.new(name = groupName) def cmdToPositiveInt(cmd): return cmd if cmd >= 0 else 256 + cmd -def parseF3D(romfile, startAddress, scene, +def parseF3DBinary(romfile, startAddress, scene, bMesh, obj, transformMatrix, groupName, segmentData, vertexBuffer): f3d = F3D('F3D', False) currentAddress = startAddress @@ -348,4 +346,1637 @@ def createNewTextureMaterial(romfile, textureStart, textureSize, texelCount, col for n in range(0, dataLength, texelSize): oldPixel = textureData[n : n + texelSize] newImg.pixels[n : n+4] = read16bitRGBA( - int.from_bytes(oldPixel, 'big')) \ No newline at end of file + int.from_bytes(oldPixel, 'big')) + +binOps = { + ast.Add: operator.add, + ast.Sub: operator.sub, + ast.Mult: operator.mul, + ast.Div: operator.truediv, + ast.Mod: operator.mod, + ast.LShift: operator.lshift, + ast.RShift: operator.rshift, + ast.RShift: operator.rshift, + ast.BitOr: operator.or_, + ast.BitAnd: operator.and_, + ast.BitXor: operator.xor, +} + +def math_eval (s, f3d): + if isinstance(s, int): + return s + + s = s.strip() + node = ast.parse(s, mode='eval') + + def _eval(node): + if isinstance(node, ast.Expression): + return _eval(node.body) + elif isinstance(node, ast.Str): + return node.s + elif isinstance(node, ast.Name): + if hasattr(f3d, node.id): + return getattr(f3d, node.id) + else: + return node.id + elif isinstance(node, ast.Num): + return node.n + elif isinstance(node, ast.UnaryOp): + if isinstance(node.op, ast.USub): + return -1 * _eval(node.operand) + elif isinstance(node.op, ast.Invert): + return ~ _eval(node.operand) + else: + raise Exception('Unsupported type {}'.format(node.op)) + elif isinstance(node, ast.BinOp): + return binOps[type(node.op)](_eval(node.left), _eval(node.right)) + elif isinstance(node, ast.Call): + args = list(map(_eval, node.args)) + funcName = _eval(node.func) + return funcName(*args) + else: + raise Exception('Unsupported type {}'.format(node)) + + return _eval(node.body) + +def bytesToNormal(normal): + return [int.from_bytes([value], 'big', signed = True) / 128 if value > 0 else + value / 128 for value in normal] + +def getTileFormat(value, f3d): + data = math_eval(value, f3d) + return ["G_IM_FMT_RGBA", "G_IM_FMT_YUV", "G_IM_FMT_CI", "G_IM_FMT_IA", "G_IM_FMT_I"][data] + +def getTileSize(value, f3d): + data = math_eval(value, f3d) + return ["G_IM_SIZ_4b", "G_IM_SIZ_8b", "G_IM_SIZ_16b", "G_IM_SIZ_32b", "G_IM_SIZ_32b", "G_IM_SIZ_DD"][data] + +def getTileClampMirror(value, f3d): + data = math_eval(value, f3d) + return [(data & f3d.G_TX_CLAMP) != 0, (data & f3d.G_TX_MIRROR) != 0] + +def getTileMask(value, f3d): + data = math_eval(value, f3d) + return data + +def getTileShift(value, f3d): + data = math_eval(value, f3d) + return data + +def renderModeMask(rendermode, cycle, blendOnly): + nonBlend = (((1 << 13) - 1) << 3) if not blendOnly else 0 + if cycle == 1: + return rendermode & (3 << 30 | 3 << 26 | 3 << 22 | 3 << 18 | nonBlend) + else: + return rendermode & (3 << 28 | 3 << 24 | 3 << 20 | 3 << 16 | nonBlend) + +def convertF3DUV(value, maxSize): + try: + valueBytes = int.to_bytes(value, 2, 'big', signed = True) + except OverflowError: + valueBytes = int.to_bytes(valule, 2, 'big', signed = False) + + return ((int.from_bytes(valueBytes, 'big', signed = True) / 32) + 0.5) / (maxSize if maxSize > 0 else 1) + +class F3DParsedCommands: + def __init__(self, name, commands, index): + self.name = name + self.commands = commands + self.index = index + + def currentCommand(self): + return self.commands[self.index] + +class F3DContext: + def __init__(self, f3d, basePath, materialContext): + self.f3d = f3d + self.vertexBuffer = [None] * f3d.vert_load_size + self.basePath = basePath + self.materialContext = materialContext + + self.clearMaterial() + mat = self.mat() + mat.set_combiner = False + + self.materials = [] # saved materials + self.triMatIndices = [] # material indices per triangle + self.materialChanged = True + self.lastMaterialIndex = None + + self.vertexData = {} # c name : parsed data + self.textureData = {} # c name : blender texture + + self.tlutAppliedTextures = [] # c name + self.currentTextureName = None + + # This macro has all the tile setting properties, so we reuse it + self.tileSettings = [DPSetTile( + "G_IM_FMT_RGBA", "G_IM_SIZ_16b", 5, 0, i, 0, + [False, False], 0, 0, + [False, False], 0, 0) for i in range(8)] + self.tileSizes = [DPSetTileSize(i, 0, 0, 32, 32) for i in range(8)] + + # When a tile is loaded, store dict of tmem : texture + self.tmemDict = {} + + # This should be modified before parsing f3d + self.matrixData = {} # bone name : matrix + self.currentTransformName = None + self.limbToBoneName = {} # limb name (c variable) : bone name (blender vertex group) + + # data for Mesh.from_pydata, list of BufferVertex tuples + # use BufferVertex to also form uvs / normals / colors + self.verts = [] + self.limbGroups = {} # dict of groupName : vertex indices + + self.lights = Lights("lights_context") + self.lights.l = [ + Light([0,0,0],[0x28, 0x28, 0x28]), + Light([0,0,0],[0x28, 0x28, 0x28]), + Light([0,0,0],[0x28, 0x28, 0x28]), + Light([0,0,0],[0x28, 0x28, 0x28]), + Light([0,0,0],[0x28, 0x28, 0x28]), + Light([0,0,0],[0x28, 0x28, 0x28]), + Light([0,0,0],[0x28, 0x28, 0x28]),] + self.lights.a = Ambient([0,0,0]) + self.numLights = 0 + self.lightData = {} # (color, normal) : list of blender light objects + + # MAKE SURE TO CALL THIS BETWEEN parseF3D() CALLS + def clearMaterial(self): + mat = self.mat() + + mat.rdp_settings.sets_rendermode = False + mat.set_prim = False + mat.set_lights = False + mat.set_env = False + mat.set_blend = False + mat.set_key = False + mat.set_k0_5 = False + + mat.prim_color = [1,1,1,1] + mat.env_color = [1,1,1,1] + mat.blend_color = [1,1,1,1] + for i in range(1, 8): + setattr(mat, "f3d_light" + str(i), None) + mat.tex0.tex = None + mat.tex1.tex = None + mat.tex0.tex_set = False + mat.tex1.tex_set = False + + mat.tex0.tex_format = "RGBA16" + mat.tex1.tex_format = "RGBA16" + + self.tmemDict = {} + + self.tileSettings = [DPSetTile( + "G_IM_FMT_RGBA", "G_IM_SIZ_16b", 5, 0, i, 0, + [False, False], 0, 0, + [False, False], 0, 0) for i in range(8)] + + self.tileSizes = [DPSetTileSize(i, 0, 0, 32, 32) for i in range(8)] + + self.lights = Lights("lights_context") + self.lights.l = [ + Light([0,0,0],[0x28, 0x28, 0x28]), + Light([0,0,0],[0x28, 0x28, 0x28]), + Light([0,0,0],[0x28, 0x28, 0x28]), + Light([0,0,0],[0x28, 0x28, 0x28]), + Light([0,0,0],[0x28, 0x28, 0x28]), + Light([0,0,0],[0x28, 0x28, 0x28]), + Light([0,0,0],[0x28, 0x28, 0x28]),] + self.lights.a = Ambient([0,0,0]) + self.numLights = 0 + + mat.presetName = "Custom" + + def mat(self): + return self.materialContext.f3d_mat + + def vertexFormatPatterns(self, data): + # position, uv, color/normal + return [ + # decomp format + "\{\s*\{\s*" +\ + "\{([^,\}]*),([^,\}]*),([^,\}]*)\}\s*," + "[^,\}]*,\s*" +\ + "\{([^,\}]*),([^,\}]*)\}\s*,\s*" +\ + "\{([^,\}]*),([^,\}]*),([^,\}]*),([^,\}]*)\}\s*" +\ + "\}\s*\}", + + # nusys format + "\{\s*" +\ + "([^,\}]*),([^,\}]*),([^,\}]*)," + "[^,\}]*," +\ + "([^,\}]*),([^,\}]*)," +\ + "([^,\}]*),([^,\}]*),([^,\}]*),([^,\}]*)\s*" +\ + "\}", + ] + + # For game specific instance, override this to be able to identify which verts belong to which bone. + def setCurrentTransform(self, name): + self.currentTransformName = name + + def getTransformedVertex(self, index): + bufferVert = self.vertexBuffer[index] + + # NOTE: The groupIndex here does NOT correspond to a vertex group, but to the name of the limb (c variable) + matrixName = bufferVert.groupIndex + if matrixName in self.matrixData: + transform = self.matrixData[matrixName] + else: + print(self.matrixData) + raise PluginError("Transform matrix not specified for " + matrixName) + + mat = self.mat() + f3dVert = bufferVert.f3dVert + position = transform @ mathutils.Vector(f3dVert[0]) + if mat.tex0.tex is not None: + uv = [convertF3DUV(f3dVert[1][i], mat.tex0.tex.size[i]) for i in range(2)] + #uv = [1 - (f3dVert[1][i] / (self.materialContext.f3d_mat.tex0.tex.size[i] * 32)) for i in range(2)] + #uv = [((f3dVert[1][i] / 32) + 0.5) / mat.tex0.tex.size[i] for i in range(2)] + else: + uv = [convertF3DUV(f3dVert[1][i], 32) for i in range(2)] + #uv = [1 - (f3dVert[1][i] / (32 * 32)) for i in range(2)] + #uv = [((f3dVert[1][i] / 32) + 0.5) / 32 for i in range(2)] + uv[1] = 1 - uv[1] + + color = [value / 256 if value > 0 else + int.from_bytes(value.to_bytes(1, 'big', signed = True), 'big', signed = False) / 256 + for value in f3dVert[2]] + + normal = bytesToNormal(f3dVert[2][:3]) + [0] + normal = (transform.inverted().transposed() @ mathutils.Vector(normal)).normalized()[:3] + + # This is not usual format of f3dVert, but we need separate color/normal data. + # NOTE: The groupIndex here does NOT correspond to a vertex group, but to the name of the limb (c variable) + return BufferVertex([position, uv, color, normal], bufferVert.groupIndex, bufferVert.materialIndex) + + def addVertices(self, num, start, vertexDataName, vertexDataOffset): + vertexData = self.vertexData[vertexDataName] + + # TODO: material index not important? + count = math_eval(num, self.f3d) + start = math_eval(start, self.f3d) + + if start + count > len (self.vertexBuffer): + raise PluginError("Vertex buffer of size " + len(self.vertexBuffer) + " too small, attempting load into " +\ + str(start) + ", " + str(start + count)) + for i in range(count): + self.vertexBuffer[start + i] = \ + BufferVertex(vertexData[vertexDataOffset + i], self.currentTransformName, 0) + + def addTriangle(self, indices, dlData): + if self.materialChanged: + mat = self.mat() + region = None + + tileSettings = self.tileSettings[0] + tileSizeSettings = self.tileSizes[0] + if tileSettings.tmem in self.tmemDict: + textureName = self.tmemDict[tileSettings.tmem] + self.loadTexture(dlData, textureName, region, tileSettings, False) + self.applyTileToMaterial(0, tileSettings, tileSizeSettings) + + tileSettings = self.tileSettings[1] + tileSizeSettings = self.tileSizes[1] + if tileSettings.tmem in self.tmemDict: + textureName = self.tmemDict[tileSettings.tmem] + self.loadTexture(dlData, textureName, region, tileSettings, False) + self.applyTileToMaterial(1, tileSettings, tileSizeSettings) + + self.applyLights() + + self.lastMaterialIndex = self.getMaterialIndex() + self.materialChanged = False + + verts = [self.getTransformedVertex(math_eval(index, self.f3d)) for index in indices] + #if verts[0].groupIndex != verts[1].groupIndex or\ + # verts[0].groupIndex != verts[2].groupIndex or\ + # verts[2].groupIndex != verts[1].groupIndex: + # return + for i in range(len(verts)): + vert = verts[i] + + # NOTE: The groupIndex here does NOT correspond to a vertex group, but to the name of the limb (c variable) + if vert.groupIndex not in self.limbGroups: + self.limbGroups[vert.groupIndex] = [] + self.limbGroups[vert.groupIndex].append(len(self.verts) + i) + self.verts.extend([vert.f3dVert for vert in verts]) + + for i in range(int(len(indices) / 3)): + self.triMatIndices.append(self.lastMaterialIndex) + + def getMaterialIndex(self): + # We do this for now to update tile settings for S and T. + # Right now we don't handle those, so we need the auto-calculator to set it correctly. + overrideContext = bpy.context.copy() + overrideContext["material"] = self.materialContext + bpy.ops.material.update_f3d_nodes(overrideContext) + + for material in self.materials: + if propertyGroupEquals(self.materialContext.f3d_mat, material.f3d_mat): + return self.materials.index(material) + + self.addMaterial() + return len(self.materials) - 1 + + def getImageName(self, image): + for name, otherImage in self.textureData.items(): + if image == otherImage: + return name + return None + + def applyTLUTToIndex(self, index): + mat = self.mat() + texProp = getattr(mat, "tex" + str(index)) + combinerUses = all_combiner_uses(mat) + if combinerUses["Texture " + str(index)] and \ + (texProp.tex is not None or texProp.use_tex_reference) and \ + texProp.tex_set and texProp.tex_format[:2] == "CI" and\ + (texProp.tex not in self.tlutAppliedTextures or texProp.use_tex_reference): + + # Only handles TLUT at 256 + tlutName = self.tmemDict[256] + if 256 in self.tmemDict and tlutName is not None: + tlut = self.textureData[tlutName] + if isinstance(tlut, F3DTextureReference) or texProp.use_tex_reference: + if not texProp.use_tex_reference: + texProp.use_tex_reference = True + imageName = self.getImageName(texProp.tex) + if imageName is not None: + texProp.tex_reference = imageName + else: + print("Cannot find name of texture " + str(texProp.tex)) + + if isinstance(tlut, F3DTextureReference): + texProp.pal_reference = tlut.name + texProp.pal_reference_size = tlut.width + else: + texProp.pal_reference = tlutName + texProp.pal_reference_size = min(tlut.size[0] * tlut.size[1], 256) + + else: + self.applyTLUT(texProp.tex, tlut) + self.tlutAppliedTextures.append(texProp.tex) + else: + print("Ignoring TLUT.") + + def postMaterialChanged(self): + return + + def addMaterial(self): + mat = self.mat() + combinerUses = all_combiner_uses(self.mat()) + self.applyTLUTToIndex(0) + self.applyTLUTToIndex(1) + + material = self.materialContext.copy() + overrideContext = bpy.context.copy() + overrideContext["material"] = material + bpy.ops.material.update_f3d_nodes(overrideContext) + self.materials.append(material) + self.materialChanged = False + + self.postMaterialChanged() + + def getSizeMacro(self, size, suffix): + if hasattr(self.f3d, size): + return getattr(self.f3d, size + suffix) + else: + return getattr(self.f3d, self.f3d.IM_SIZ[size] + suffix) + + def getImagePathFromInclude(self, path): + if self.basePath is None: + raise PluginError("Cannot load texture from " + path + " without any provided base path.") + + imagePath = path[:-5] + 'png' + return os.path.join(self.basePath, imagePath) + + def setGeoFlags(self, command, value): + mat = self.mat() + bitFlags = math_eval(command.params[0], self.f3d) + + if bitFlags & self.f3d.G_ZBUFFER: + mat.rdp_settings.g_zbuffer = value + if bitFlags & self.f3d.G_SHADE: + mat.rdp_settings.g_shade = value + if bitFlags & self.f3d.G_CULL_FRONT: + mat.rdp_settings.g_cull_front = value + if bitFlags & self.f3d.G_CULL_BACK: + mat.rdp_settings.g_cull_back = value + if bitFlags & self.f3d.G_FOG: + mat.rdp_settings.g_fog = value + if bitFlags & self.f3d.G_LIGHTING: + mat.rdp_settings.g_lighting = value + if bitFlags & self.f3d.G_TEXTURE_GEN: + mat.rdp_settings.g_tex_gen = value + if bitFlags & self.f3d.G_TEXTURE_GEN_LINEAR: + mat.rdp_settings.g_tex_gen_linear = value + if bitFlags & self.f3d.G_SHADING_SMOOTH: + mat.rdp_settings.g_shade_smooth = value + if bitFlags & self.f3d.G_CLIPPING: + mat.rdp_settings.g_clipping = value + + def loadGeoFlags(self, command): + bitFlags = math_eval(command.params[0], self.f3d) + + mat.rdp_settings.g_zbuffer = bitFlags & self.f3d.G_ZBUFFER != 0 + mat.rdp_settings.g_shade = bitFlags & self.f3d.G_SHADE != 0 + mat.rdp_settings.g_cull_front = bitFlags & self.f3d.G_CULL_FRONT != 0 + mat.rdp_settings.g_cull_back = bitFlags & self.f3d.G_CULL_BACK != 0 + mat.rdp_settings.g_fog = bitFlags & self.f3d.G_FOG != 0 + mat.rdp_settings.g_lighting = bitFlags & self.f3d.G_LIGHTING != 0 + mat.rdp_settings.g_tex_gen = bitFlags & self.f3d.G_TEXTURE_GEN != 0 + mat.rdp_settings.g_tex_gen_linear = bitFlags & self.f3d.G_TEXTURE_GEN_LINEAR != 0 + mat.rdp_settings.g_shade_smooth = bitFlags & self.f3d.G_SHADING_SMOOTH != 0 + mat.rdp_settings.g_clipping = bitFlags & self.f3d.G_CLIPPING != 0 + + def setCombineLerp(self, lerp0, lerp1): + mat = self.mat() + + if len(lerp0) < 8 or len(lerp1) < 8: + print("Incorrect combiner param count: " + str(lerp0) + " " + str(lerp1)) + return + + lerp0 = [value.strip() for value in lerp0] + lerp1 = [value.strip() for value in lerp1] + + # Padding since index can go up to 31 + combinerAList = ['COMBINED', 'TEXEL0', 'TEXEL1', 'PRIMITIVE', 'SHADE', 'ENVIRONMENT', '1', 'NOISE'] + ['0'] * 24 + combinerBList = ['COMBINED', 'TEXEL0', 'TEXEL1', 'PRIMITIVE', 'SHADE', 'ENVIRONMENT', 'CENTER', 'K4'] + ['0'] * 24 + combinerCList = ['COMBINED', 'TEXEL0', 'TEXEL1', 'PRIMITIVE', 'SHADE', 'ENVIRONMENT', 'SCALE', + 'COMBINED_ALPHA', 'TEXEL0_ALPHA', 'TEXEL1_ALPHA', 'PRIMITIVE_ALPHA', 'SHADE_ALPHA', 'ENV_ALPHA', + 'LOD_FRACTION', 'PRIM_LOD_FRAC', 'K5'] + ['0'] * 16 + combinerDList = ['COMBINED', 'TEXEL0', 'TEXEL1', 'PRIMITIVE', 'SHADE', 'ENVIRONMENT', '1', '0'] + ['0'] * 24 + + combinerAAlphaList = ['COMBINED', 'TEXEL0', 'TEXEL1', 'PRIMITIVE', 'SHADE', 'ENVIRONMENT', '1', '0'] + combinerBAlphaList = ['COMBINED', 'TEXEL0', 'TEXEL1', 'PRIMITIVE', 'SHADE', 'ENVIRONMENT', '1', '0'] + combinerCAlphaList = ['LOD_FRACTION', 'TEXEL0', 'TEXEL1', 'PRIMITIVE', 'SHADE', 'ENVIRONMENT', 'PRIM_LOD_FRAC', '0'] + combinerDAlphaList = ['COMBINED', 'TEXEL0', 'TEXEL1', 'PRIMITIVE', 'SHADE', 'ENVIRONMENT', '1', '0'] + + for i in range(0,4): + lerp0[i] = math_eval("G_CCMUX_" + lerp0[i], self.f3d) + lerp1[i] = math_eval("G_CCMUX_" + lerp1[i], self.f3d) + + for i in range(4,8): + lerp0[i] = math_eval("G_ACMUX_" + lerp0[i], self.f3d) + lerp1[i] = math_eval("G_ACMUX_" + lerp1[i], self.f3d) + + + mat.set_combiner = True + mat.combiner1.A = combinerAList[lerp0[0]] + mat.combiner1.B = combinerBList[lerp0[1]] + mat.combiner1.C = combinerCList[lerp0[2]] + mat.combiner1.D = combinerDList[lerp0[3]] + mat.combiner1.A_alpha = combinerAAlphaList[lerp0[4]] + mat.combiner1.B_alpha = combinerBAlphaList[lerp0[5]] + mat.combiner1.C_alpha = combinerCAlphaList[lerp0[6]] + mat.combiner1.D_alpha = combinerDAlphaList[lerp0[7]] + + mat.combiner2.A = combinerAList[lerp1[0]] + mat.combiner2.B = combinerBList[lerp1[1]] + mat.combiner2.C = combinerCList[lerp1[2]] + mat.combiner2.D = combinerDList[lerp1[3]] + mat.combiner2.A_alpha = combinerAAlphaList[lerp1[4]] + mat.combiner2.B_alpha = combinerBAlphaList[lerp1[5]] + mat.combiner2.C_alpha = combinerCAlphaList[lerp1[6]] + mat.combiner2.D_alpha = combinerDAlphaList[lerp1[7]] + + def setCombineMode(self, command): + if not hasattr(self.f3d, command.params[0]) or\ + not hasattr(self.f3d, command.params[1]): + print("Unhandled combiner mode: " + command.params[0] + ", " + command.params[1]) + return + lerp0 = getattr(self.f3d, command.params[0]) + lerp1 = getattr(self.f3d, command.params[1]) + + self.setCombineLerp(lerp0, lerp1) + + def setTLUTMode(self, index, value): + mat = self.mat() + texProp = getattr(mat, "tex" + str(index)) + bitData = math_eval(value, self.f3d) + if value == self.f3d.G_TT_NONE: + if texProp.tex_format[:2] == 'CI': + texProp.tex_format = 'RGBA16' + elif value == self.f3d.G_TT_IA16: + texProp.ci_format = "IA16" + else: + texProp.ci_format = "RGBA16" + + def setOtherModeFlags(self, command): + mat = self.mat() + mode = math_eval(command.params[0], self.f3d) + if mode == self.f3d.G_SETOTHERMODE_H: + self.setOtherModeFlagsH(command) + else: + self.setOtherModeFlagsL(command) + + def setOtherModeFlagsH(self, command): + + otherModeH = { + "G_MDSFT_ALPHADITHER" : ["G_AD_PATTERN", "G_AD_NOTPATTERN", "G_AD_NOISE", "G_AD_DISABLE"], + "G_MDSFT_RGBDITHER" : ["G_CD_MAGICSQ", "G_CD_BAYER", "NOISE"], + "G_MDSFT_COMBKEY" : ["G_CK_NONE", "G_CK_KEY"], + "G_MDSFT_TEXTCONV" : ["G_TC_CONV", "G_TC_CONV", "G_TC_CONV", "G_TC_CONV", "G_TC_CONV", "G_TC_FILTCONV", "G_TC_FILT"], + "G_MDSFT_TEXTFILT" : ["G_TF_POINT", "G_TF_POINT", "G_TF_BILERP", "G_TF_AVERAGE"], + "G_MDSFT_TEXTLOD" : ["G_TL_TILE", "G_TL_LOD"], + "G_MDSFT_TEXTDETAIL" : ["G_TD_CLAMP", "G_TD_SHARPEN", "G_TD_DETAIL"], + "G_MDSFT_TEXTPERSP" : ["G_TP_NONE", "G_TP_PERSP"], + "G_MDSFT_CYCLETYPE" : ["G_CYC_1CYCLE", "G_CYC_2CYCLE", "G_CYC_COPY", "G_CYC_FILL"], + "G_MDSFT_COLORDITHER" : ["G_CD_MAGICSQ", "G_CD_BAYER", "G_CD_NOISE"], + "G_MDSFT_PIPELINE" : ["G_PM_NPRIMITIVE", "G_PM_1PRIMITIVE"], + } + mat = self.mat() + flags = math_eval(command.params[3], self.f3d) + shift = math_eval(command.params[1], self.f3d) + mask = math_eval(command.params[2], self.f3d) + + for field, fieldData in otherModeH.items(): + fieldShift = getattr(self.f3d, field) + if fieldShift >= shift and fieldShift < shift + mask: + setattr(mat.rdp_settings, field.lower(), fieldData[(flags >> fieldShift) & \ + ((1 << int(ceil(math.log(len(fieldData), 2)))) - 1)]) + + + # This only handles commonly used render mode presets (with macros), + # and no render modes at all with raw bit data. + def setOtherModeFlagsL(self, command): + otherModeL = { + "G_MDSFT_ALPHACOMPARE" : ["G_AC_NONE", "G_AC_THRESHOLD", "G_AC_THRESHOLD", "G_AC_DITHER"], + "G_MDSFT_ZSRCSEL" : ["G_ZS_PIXEL", "G_ZS_PRIM"], + } + + mat = self.mat() + flags = math_eval(command.params[3], self.f3d) + shift = math_eval(command.params[1], self.f3d) + mask = math_eval(command.params[2], self.f3d) + + for field, fieldData in otherModeL.items(): + fieldShift = getattr(self.f3d, field) + if fieldShift >= shift and fieldShift < shift + mask: + setattr(mat.rdp_settings, field.lower(), fieldData[(flags >> fieldShift) & \ + ((1 << int(ceil(math.log(len(fieldData), 2)))) - 1)]) + + if self.f3d.G_MDSFT_RENDERMODE >= shift and self.f3d.G_MDSFT_RENDERMODE < shift + mask: + self.setRenderMode(flags) + + def setRenderMode(self, flags): + mat = self.mat() + rendermode1 = renderModeMask(flags, 1, False) + rendermode2 = renderModeMask(flags, 2, False) + + blend1 = renderModeMask(flags, 1, True) + + rendermodeName1 = None + rendermodeName2 = None + + #print("Render mode: " + hex(rendermode1) + ", " + hex(rendermode2)) + for name, value in vars(self.f3d).items(): + if name[:5] == "G_RM_": + #print(name + " " + hex(value)) + + if name in ["G_RM_FOG_SHADE_A", "G_RM_FOG_PRIM_A", "G_RM_PASS"]: + if blend1 == value: + rendermodeName1 = name + else: + if rendermode1 == value: + rendermodeName1 = name + if rendermode2 == value: + rendermodeName2 = name + if rendermodeName1 is not None and rendermodeName2 is not None: + break + + mat.rdp_settings.sets_rendermode = True + if rendermodeName1 is not None and rendermodeName2 is not None: + mat.rdp_settings.rendermode_advanced_enabled = False + mat.rdp_settings.rendermode_preset_cycle_1 = rendermodeName1 + mat.rdp_settings.rendermode_preset_cycle_2 = rendermodeName2 + else: + mat.rdp_settings.rendermode_advanced_enabled = True + + mat.rdp_settings.aa_en = rendermode1 & self.f3d.AA_EN != 0 + mat.rdp_settings.z_cmp = rendermode1 & self.f3d.Z_CMP != 0 + mat.rdp_settings.z_upd = rendermode1 & self.f3d.Z_UPD != 0 + mat.rdp_settings.im_rd = rendermode1 & self.f3d.IM_RD != 0 + mat.rdp_settings.clr_on_cvg = rendermode1 & self.f3d.CLR_ON_CVG != 0 + mat.rdp_settings.cvg_dst = self.f3d.cvgDstDict[rendermode1 & self.f3d.CVG_DST_SAVE] + mat.rdp_settings.zmode = self.f3d.zmodeDict[rendermode1 & self.f3d.ZMODE_DEC] + mat.rdp_settings.cvg_x_alpha = rendermode1 & self.f3d.CVG_X_ALPHA != 0 + mat.rdp_settings.alpha_cvg_sel = rendermode1 & self.f3d.ALPHA_CVG_SEL != 0 + mat.rdp_settings.force_bl = rendermode1 & self.f3d.FORCE_BL != 0 + + mat.rdp_settings.blend_p1 = self.f3d.blendColorDict[rendermode1 >> 30 & 3] + mat.rdp_settings.blend_a1 = self.f3d.blendAlphaDict[rendermode1 >> 26 & 3] + mat.rdp_settings.blend_m1 = self.f3d.blendColorDict[rendermode1 >> 22 & 3] + mat.rdp_settings.blend_b1 = self.f3d.blendMixDict[rendermode1 >> 18 & 3] + + mat.rdp_settings.blend_p2 = self.f3d.blendColorDict[rendermode2 >> 28 & 3] + mat.rdp_settings.blend_a2 = self.f3d.blendAlphaDict[rendermode2 >> 24 & 3] + mat.rdp_settings.blend_m2 = self.f3d.blendColorDict[rendermode2 >> 20 & 3] + mat.rdp_settings.blend_b2 = self.f3d.blendMixDict[rendermode2 >> 16 & 3] + + def gammaInverseParam(self, color): + return [gammaInverseValue(math_eval(value, self.f3d) / 255) for value in color[:3]] + [math_eval(color[3], self.f3d) / 255] + + def getLightIndex(self, lightIndexString): + return math_eval(lightIndexString, self.f3d) if "LIGHT_" not in lightIndexString else int(lightIndexString[-1:]) + + def getLightCount(self, lightCountString): + return math_eval(lightCountString, self.f3d) if "NUMLIGHTS_" not in lightCountString else int(lightCountString[-1:]) + + def getLightObj(self, light): + lightKey = (tuple(light.color), tuple(light.normal)) + if lightKey not in self.lightData: + lightName = "Light" + bLight = bpy.data.lights.new(lightName, "SUN") + lightObj = bpy.data.objects.new(lightName, bLight) + + lightObj.rotation_euler = (mathutils.Euler((0, 0, math.pi)).to_quaternion() @ \ + (mathutils.Euler((math.pi / 2, 0, 0)).to_quaternion() @ \ + mathutils.Vector(light.normal)).rotation_difference(mathutils.Vector((0,0,1)))).to_euler() + #lightObj.rotation_euler[0] *= 1 + bLight.color = light.color + + bpy.context.scene.collection.objects.link(lightObj) + self.lightData[lightKey] = lightObj + return self.lightData[lightKey] + + def applyLights(self): + mat = self.mat() + allCombinerUses = all_combiner_uses(mat) + if allCombinerUses["Shade"] and mat.rdp_settings.g_lighting and mat.set_lights: + mat.use_default_lighting = False + mat.ambient_light_color = self.lights.a.color + ([1] if len(self.lights.a.color) == 3 else []) + + for i in range(self.numLights): + lightObj = self.getLightObj(self.lights.l[i]) + setattr(mat, "f3d_light" + str(i + 1), lightObj.data) + + def setLightColor(self, data, command): + self.mat().set_lights = True + lightIndex = self.getLightIndex(command.params[0]) + colorData = math_eval(command.params[1], self.f3d) + color = [((colorData >> 24) & 0xFF) / 0xFF, ((colorData >> 16) & 0xFF) / 0xFF, ((colorData >> 8) & 0xFF) / 0xFF] + + if lightIndex != self.numLights + 1: + self.lights.l[lightIndex - 1].color = color + else: + self.lights.a.color = color + + # This is an assumption. + if self.numLights < lightIndex - 1: + self.numLights = lightIndex - 1 + + # Assumes that any SPLight references a Lights0-9n struct instead of specific Light structs. + def setLight(self, data, command): + mat = self.mat() + mat.set_lights = True + + lightReference = command.params[0] + lightIndex = self.getLightIndex(command.params[1]) + + match = re.search("([A-Za-z0-9\_]*)\.(l(\[([0-9])\])?)?(a)?", lightReference) + if match is None: + print("Could not handle parsing of light reference: " + lightReference + ". Currently only handling Lights0-9n structs (not Light)") + return + + lightsName = match.group(1) + lights = self.createLights(data, lightsName) + + if match.group(2) is not None: + if match.group(3) is not None: + lightIndex = math_eval(match.group(4), self.f3d) + else: + lightIndex = 0 + + # This is done as an assumption, to handle models that have numLights set beforehand + if self.numLights < lightIndex + 1: + self.numLights = lightIndex + 1 + self.lights.l[lightIndex] = lights.l[lightIndex] + else: + self.lights.a = lights.a + + def setLights(self, data, command): + mat = self.mat() + self.mat().set_lights = True + + numLights = self.getLightCount(command.name[13]) + self.numLights = numLights + + lightsName = command.params[0] + self.lights = self.createLights(data, lightsName) + + def createLights(self, data, lightsName): + numLights, lightValues = parseLightsData(data, lightsName, self) + ambientColor = gammaInverse([value / 255 for value in lightValues[0:3]]) + + lightList = [] + + for i in range(numLights): + color = gammaInverse([value / 255 for value in lightValues[3 + 6*i : 3 + 6*i + 3]]) + direction = bytesToNormal(lightValues[3 + 6*i + 3 : 3 + 6*i + 6]) + lightList.append(Light(color, direction)) + + while len(lightList) < 7: + lightList.append(Light([0,0,0],[0x28, 0x28, 0x28])) + + # normally a and l are Ambient and Light objects, + # but here they will be a color and blender light object array. + lights = Lights(lightsName) + lights.a = Ambient(ambientColor) + lights.l = lightList + + return lights + + def getTileIndex(self, value): + if value == "G_TX_RENDERTILE": + return self.f3d.G_TX_RENDERTILE + elif value == "G_TX_LOADTILE": + return self.f3d.G_TX_LOADTILE + else: + return math_eval(value, self.f3d) + + def getTileSettings(self, value): + return self.tileSettings[self.getTileIndex(value)] + + def getTileSizeSettings(self, value): + return self.tileSizes[self.getTileIndex(value)] + + def setTileSize(self, params): + mat = self.mat() + tileSizeSettings = self.getTileSizeSettings(params[0]) + tileSettings = self.getTileSettings(params[0]) + + dimensions = [0,0,0,0] + for i in range(1,5): + #match = None + #if not isinstance(params[i], int): + # match = re.search("\(([0-9]+)\s*\-\s*1\s*\)\s*<<\s*G\_TEXTURE\_IMAGE\_FRAC", params[i]) + #if match is not None: + # dimensions[i - 1] = (math_eval(match.group(1), self.f3d) - 1) << self.f3d.G_TEXTURE_IMAGE_FRAC + #else: + # dimensions[i - 1] = math_eval(params[i], self.f3d) + dimensions[i - 1] = math_eval(params[i], self.f3d) + + tileSizeSettings.uls = dimensions[0] + tileSizeSettings.ult = dimensions[1] + tileSizeSettings.lrs = dimensions[2] + tileSizeSettings.lrt = dimensions[3] + + def setTile(self, params, dlData): + tileIndex = self.getTileIndex(params[4]) + tileSettings = self.getTileSettings(params[4]) + tileSettings.fmt = getTileFormat(params[0], self.f3d) + tileSettings.siz = getTileSize(params[1], self.f3d) + tileSettings.line = math_eval(params[2], self.f3d) + tileSettings.tmem = math_eval(params[3], self.f3d) + tileSettings.palette = math_eval(params[5], self.f3d) + tileSettings.cmt = getTileClampMirror(params[6], self.f3d) + tileSettings.maskt = getTileMask(params[7], self.f3d) + tileSettings.shifts = getTileShift(params[8], self.f3d) + tileSettings.cms = getTileClampMirror(params[9], self.f3d) + tileSettings.masks = getTileMask(params[10], self.f3d) + tileSettings.shifts = getTileShift(params[11], self.f3d) + + tileSizeSettings = self.getTileSizeSettings(params[4]) + + def loadTile(self, params): + tileSettings = self.getTileSettings(params[0]) + # TODO: Region parsing too hard? + #region = [ + # math_eval(params[1], self.f3d) / 4, + # math_eval(params[2], self.f3d) / 4, + # math_eval(params[3], self.f3d) / 4, + # math_eval(params[4], self.f3d) / 4 + #] + region = None + + # Defer texture parsing until next set tile. + self.tmemDict[tileSettings.tmem] = self.currentTextureName + self.materialChanged = True + + def loadMultiBlock(self, params, dlData, is4bit): + width = math_eval(params[5], self.f3d) + height = math_eval(params[6], self.f3d) + siz = params[4] + line = ((width * self.getSizeMacro(siz, "_LINE_BYTES")) + 7) >> 3 if not is4bit else\ + ((width >> 1) + 7) >> 3 + tmem = params[1] + tile = params[2] + loadBlockSiz = self.getSizeMacro(siz, "_LOAD_BLOCK") if not is4bit else self.f3d.G_IM_SIZ_16b + self.currentTextureName = params[0] + self.setTile([params[3], loadBlockSiz, 0, tmem, "G_TX_LOADTILE", 0, + params[9], params[11], params[13], params[8], params[10], params[12], + ], dlData) + # TODO: Region is ignored for now + self.loadTile(["G_TX_LOADTILE", 0, 0, 0, 0]) + self.setTile([params[3], params[4], line, tmem, tile, 0, + params[9], params[11], params[13], params[8], params[10], params[12], + ], dlData) + self.setTileSize([tile, 0, 0, + (width - 1) << self.f3d.G_TEXTURE_IMAGE_FRAC, + (height - 1) << self.f3d.G_TEXTURE_IMAGE_FRAC]) + + def loadTLUTPal(self, name, dlData, count): + # TODO: Doesn't handle loading palettes into not tmem 256 + self.currentTextureName = name + self.setTile([0,0,0, 256, "G_TX_LOADTILE", 0,0,0,0,0,0,0], dlData) + self.loadTLUT(["G_TX_LOADTILE", count], dlData) + + def applyTileToMaterial(self, index, tileSettings, tileSizeSettings): + mat = self.mat() + + texProp = getattr(mat, "tex" + str(index)) + + name = self.tmemDict[tileSettings.tmem] + image = self.textureData[name] + if isinstance(image, F3DTextureReference): + texProp.tex = None + texProp.use_tex_reference = True + texProp.tex_reference = name + size = texProp.tex_reference_size + else: + texProp.tex = image + texProp.use_tex_reference = False + size = texProp.tex.size + texProp.tex_set = True + + # TODO: Handle low/high for image files? + if texProp.use_tex_reference: + #texProp.autoprop = False + #texProp.S.low = round(tileSizeSettings.uls / (2 ** self.f3d.G_TEXTURE_IMAGE_FRAC), 3) + #texProp.T.low = round(tileSizeSettings.ult / (2 ** self.f3d.G_TEXTURE_IMAGE_FRAC), 3) + #texProp.S.high = round(tileSizeSettings.lrs / (2 ** self.f3d.G_TEXTURE_IMAGE_FRAC), 3) + #texProp.T.high = round(tileSizeSettings.lrt / (2 ** self.f3d.G_TEXTURE_IMAGE_FRAC), 3) + + # WARNING: Inferring texture size from tile size. + texProp.tex_reference_size = [ + int(round(tileSizeSettings.lrs / (2 ** self.f3d.G_TEXTURE_IMAGE_FRAC) + 1)), + int(round(tileSizeSettings.lrt / (2 ** self.f3d.G_TEXTURE_IMAGE_FRAC) + 1))] + + #if texProp.S.low == 0 and texProp.T.low == 0 and \ + # texProp.S.high == size[0] - 1 and \ + # (texProp.use_tex_reference or texProp.T.high == size[1] - 1): + # texProp.autoProp = True + #else: + # print(str(texProp.S.low) + " " + str(texProp.T.low) + " " + str(texProp.S.high) + " " + str(texProp.T.high)) + # print(str(size[0]-1) + " " + str(size[1]-1)) + + texProp.tex_format = tileSettings.fmt[8:].replace("_", "") + tileSettings.siz[8:-1].replace("_", "") + + texProp.S.clamp = tileSettings.cms[0] + texProp.S.mirror = tileSettings.cms[1] + + texProp.T.clamp = tileSettings.cmt[0] + texProp.T.mirror = tileSettings.cmt[1] + + # TODO: Handle S and T properties + + # Override this to handle game specific references. + def handleTextureName(self, textureName): + return textureName + + def loadTexture(self, data, name, region, tileSettings, isLUT): + textureName = self.handleTextureName(name) + + if textureName in self.textureData: + return self.textureData[textureName] + + # region ignored? + if isLUT: + siz = "G_IM_SIZ_16b" + width = 16 + else: + siz = tileSettings.siz + if siz == "G_IM_SIZ_4b": + width = (tileSettings.line * 8) * 2 + else: + width = int(ceil((tileSettings.line * 8) / self.f3d.G_IM_SIZ_VARS[siz + '_LINE_BYTES'])) + + # TODO: Textures are sometimes loaded in with different dimensions than for rendering. + # This means width is incorrect? + image = parseTextureData(data, textureName, self, tileSettings.fmt, siz, width, self.basePath, isLUT, self.f3d) + + self.textureData[textureName] = image + return self.textureData[textureName] + + def loadTLUT(self, params, dlData): + tileSettings = self.getTileSettings(params[0]) + name = self.currentTextureName + textureName = self.handleTextureName(name) + self.tmemDict[tileSettings.tmem] = textureName + + tlut = self.loadTexture(dlData, textureName, [0,0, 16, 16], tileSettings, True) + self.materialChanged = True + + def applyTLUT(self, image, tlut): + for i in range(int(len(image.pixels) / 4)): + lutIndex = int(round(image.pixels[4*i] * 255)) + newValues = tlut.pixels[4 * lutIndex : 4 * (lutIndex + 1)] + if len(newValues) < 4: + print("Invalid lutIndex " + str(lutIndex)) + else: + image.pixels[4*i : 4*(i+1)] = newValues + + def processCommands(self, dlData, dlName, dlCommands): + callStack = [F3DParsedCommands(dlName, dlCommands, 0)] + while len(callStack) > 0: + currentCommandList = callStack[-1] + command = currentCommandList.currentCommand() + + if currentCommandList.index >= len(currentCommandList.commands): + raise PluginError("Cannot handle unterminated static display lists: " + currentCommandList.name) + elif len(callStack) > 2**16: + raise PluginError("DL call stack larger than 2**16, assuming infinite loop: " + currentCommandList.name) + + #print(command.name + " " + str(command.params)) + if command.name == 'gsSPVertex': + vertexDataName, vertexDataOffset = getVertexDataStart(command.params[0], self.f3d) + parseVertexData(dlData, vertexDataName, self) + self.addVertices(command.params[1], command.params[2], vertexDataName, vertexDataOffset) + elif command.name == 'gsSPMatrix': + self.setCurrentTransform(command.params[0]) + elif command.name == 'gsSPPopMatrix': + print("gsSPPopMatrix not handled.") + elif command.name == 'gsSP1Triangle': + self.addTriangle(command.params[0:3], dlData) + elif command.name == 'gsSP2Triangles': + self.addTriangle(command.params[0:3] + command.params[4:7], dlData) + elif command.name == 'gsSPDisplayList' or command.name[:10] == 'gsSPBranch': + newDLName = self.processDLName(command.params[0]) + if newDLName is not None: + newDLCommands = parseDLData(dlData, newDLName) + # Use -1 index so that it will be incremented to 0 at end of loop + parsedCommands = F3DParsedCommands(newDLName, newDLCommands, -1) + if command.name == 'gsSPDisplayList': + callStack.append(parsedCommands) + elif command.name[:10] == 'gsSPBranch': # TODO: Handle BranchZ? + callStack = callStack[:-1] + callStack.append(parsedCommands) + elif command.name == 'gsSPEndDisplayList': + callStack = callStack[:-1] + + # Material Specific Commands + prevMaterialChangedStatus = self.materialChanged + self.materialChanged = True + + # Should we parse commands into f3d_gbi classes? + # No, because some parsing involves reading C files, which is separate. + + # Assumes macros use variable names instead of values + mat = self.mat() + try: + if command.name == 'gsSPClipRatio': + mat.clip_ratio = math_eval(command.params[0], self.f3d) + elif command.name == 'gsSPNumLights': + self.numLights = self.getLightCount(command.name[1]) + elif command.name == 'gsSPLight': + self.setLight(dlData, command) + elif command.name == 'gsSPLightColor': + self.setLightColor(dlData, command) + elif command.name[:13] == 'gsSPSetLights': + self.setLights(dlData, command) + elif command.name == 'gsSPFogFactor': + pass + elif command.name == 'gsSPFogPosition': + mat.fog_position = [math_eval(command.params[0], self.f3d), math_eval(command.params[1], self.f3d)] + mat.set_fog = True + elif command.name == 'gsSPTexture' or command.name == 'gsSPTextureL': + mat.tex_scale = [math_eval(command.params[0], self.f3d) / (2**16), math_eval(command.params[1], self.f3d) / (2**16)] + elif command.name == 'gsSPSetGeometryMode': + self.setGeoFlags(command, True) + elif command.name == 'gsSPClearGeometryMode': + self.setGeoFlags(command, False) + elif command.name == 'gsSPLoadGeometryMode': + self.loadGeoFlags(command) + elif command.name == 'gsSPSetOtherMode': + self.setOtherModeFlags(command) + elif command.name == 'gsDPPipelineMode': + mat.rdp_settings.g_mdsft_pipeline = command.params[0] + elif command.name == 'gsDPSetCycleType': + mat.rdp_settings.g_mdsft_cycletype = command.params[0] + elif command.name == 'gsDPSetTexturePersp': + mat.rdp_settings.g_mdsft_textpersp = command.params[0] + elif command.name == 'gsDPSetTextureDetail': + mat.rdp_settings.g_mdsft_textdetail = command.params[0] + elif command.name == 'gsDPSetTextureLOD': + mat.rdp_settings.g_mdsft_textlod = command.params[0] + elif command.name == 'gsDPSetTextureLUT': + self.setTLUTMode(0, command.params[0]) + self.setTLUTMode(1, command.params[0]) + elif command.name == 'gsDPSetTextureFilter': + mat.rdp_settings.g_mdsft_text_filt = command.params[0] + elif command.name == 'gsDPSetTextureConvert': + mat.rdp_settings.g_mdsft_textconv = command.params[0] + elif command.name == 'gsDPSetCombineKey': + mat.rdp_settings.g_mdsft_combkey = command.params[0] + elif command.name == 'gsDPSetColorDither': + mat.rdp_settings.g_mdsft_color_dither = command.params[0] + elif command.name == 'gsDPSetAlphaDither': + mat.rdp_settings.g_mdsft_alpha_dither = command.params[0] + elif command.name == 'gsDPSetAlphaCompare': + mat.rdp_settings.g_mdsft_alpha_compare = command.params[0] + elif command.name == 'gsDPSetDepthSource': + mat.rdp_settings.g_mdsft_zsrcsel = command.params[0] + elif command.name == 'gsDPSetRenderMode': + flags = math_eval(command.params[0] + " | " + command.params[1], self.f3d) + self.setRenderMode(flags) + elif command.name == 'gsDPSetTextureImage': + # Are other params necessary? + # The params are set in SetTile commands. + self.currentTextureName = command.params[3] + elif command.name == 'gsDPSetCombineMode': + self.setCombineMode(command) + elif command.name == 'gsDPSetCombineLERP': + self.setCombineLerp(command.params[0:8], command.params[8:16]) + elif command.name == 'gsDPSetEnvColor': + mat.env_color = self.gammaInverseParam(command.params) + mat.set_env = True + elif command.name == 'gsDPSetBlendColor': + mat.blend_color = self.gammaInverseParam(command.params) + mat.set_blend = True + elif command.name == 'gsDPSetFogColor': + mat.fog_color = self.gammaInverseParam(command.params) + mat.set_fog = True + elif command.name == 'gsDPSetFillColor': + pass + elif command.name == 'gsDPSetPrimDepth': + pass + elif command.name == 'gsDPSetPrimColor': + mat.prim_lod_min = math_eval(command.params[0], self.f3d) / 255 + mat.prim_lod_frac = math_eval(command.params[1], self.f3d) / 255 + mat.prim_color = self.gammaInverseParam(command.params[2:6]) + mat.set_prim = True + elif command.name == 'gsDPSetOtherMode': + print("gsDPSetOtherMode not handled.") + elif command.name == 'DPSetConvert': + mat.set_k0_5 = True + for i in range(6): + setattr(mat, 'k' + str(i), gammaInverseValue(math_eval(command.params[i], self.f3d) / 255)) + elif command.name == 'DPSetKeyR': + mat.set_key = True + elif command.name == 'DPSetKeyGB': + mat.set_key = True + else: + self.materialChanged = prevMaterialChangedStatus + + # Texture Commands + # Assume file texture load + # SetTextureImage -> Load command -> Set Tile (0 or 1) + + if command.name == 'gsDPSetTileSize': + self.setTileSize(command.params) + elif command.name == 'gsDPLoadTile': + self.loadTile(command.params) + elif command.name == 'gsDPSetTile': + self.setTile(command.params, dlData) + elif command.name == 'gsDPLoadBlock': + self.loadTile(command.params) + elif command.name == 'gsDPLoadTLUTCmd': + self.loadTLUT(command.params, dlData) + + # This all ignores S/T high/low values + # This is pretty bad/confusing + elif command.name[:len("gsDPLoadTextureBlock")] == 'gsDPLoadTextureBlock': + is4bit = '4b' in command.name + if is4bit: + self.loadMultiBlock([command.params[0]] + [0, "G_TX_RENDERTILE"] + \ + [command.params[1], "G_IM_SIZ_4b"] + command.params[2:], dlData, True) + else: + self.loadMultiBlock([command.params[0]] + [0, "G_TX_RENDERTILE"] + \ + command.params[1:], dlData, False) + elif command.name[:len("gsDPLoadMultiBlock")] == 'gsDPLoadMultiBlock': + is4bit = '4b' in command.name + if is4bit: + self.loadMultiBlock(command.params[:4] + ["G_IM_SIZ_4b"] + command.params[4:], dlData, True) + else: + self.loadMultiBlock(command.params, dlData, False) + elif command.name[:len("gsDPLoadTextureTile")] == 'gsDPLoadTextureTile': + is4bit = '4b' in command.name + if is4bit: + self.loadMultiBlock([command.params[0]] + [0, "G_TX_RENDERTILE"] +\ + [command.params[1], "G_IM_SIZ_4b"] + command.params[2:4] + \ + command.params[9:], '4b', dlData, True) + else: + self.loadMultiBlock([command.params[0]] + [0, "G_TX_RENDERTILE"] +\ + command.params[1:5] + command.params[9:], '4b', dlData, False) + elif command.name[:len("gsDPLoadMultiTile")] == 'gsDPLoadMultiTile': + is4bit = '4b' in command.name + if is4bit: + self.loadMultiBlock(command.params[:4] + ["G_IM_SIZ_4b"] + command.params[4:6] +\ + command.params[10:], dlData, True) + else: + self.loadMultiBlock(command.params[:7] + command.params[11:], dlData, False) + + # TODO: Only handles palettes at tmem = 256 + elif command.name == "gsDPLoadTLUT_pal16": + self.loadTLUTPal(command.params[1], dlData, 15) + elif command.name == "gsDPLoadTLUT_pal256": + self.loadTLUTPal(command.params[0], dlData, 255) + else: + pass + + except TypeError as e: + print(traceback.format_exc()) + #raise Exception(e) + #print(e) + + # Don't use currentCommandList because some commands may change that + if len(callStack) > 0: + callStack[-1].index += 1 + + # override this to handle game specific DL calls. + # return None to indicate DL call should be skipped. + def processDLName(self, name): + return name + + def createMesh(self, obj, removeDoubles, importNormals): + mesh = obj.data + if len(self.verts) % 3 != 0: + print(len(self.verts)) + raise PluginError("Number of verts in mesh not divisible by 3, currently " + str(len(self.verts))) + + triangleCount = int(len(self.verts) / 3) + verts = [f3dVert[0] for f3dVert in self.verts] + faces = [[3 * i + j for j in range(3)] for i in range(triangleCount)] + print("Vertices: " + str(len(self.verts)) + ", Triangles: " + str(triangleCount)) + + mesh.from_pydata(vertices = verts, edges = [], faces = faces) + uv_layer = mesh.uv_layers.new().data + #if self.materialContext.f3d_mat.rdp_settings.g_lighting: + color_layer = mesh.vertex_colors.new(name = "Col").data + alpha_layer = mesh.vertex_colors.new(name = "Alpha").data + #else: + + if importNormals: + mesh.use_auto_smooth = True + mesh.normals_split_custom_set([f3dVert[3] for f3dVert in self.verts]) + + for groupName, indices in self.limbGroups.items(): + group = obj.vertex_groups.new(name = self.limbToBoneName[groupName]) + group.add(indices, 1, "REPLACE") + + for i in range(len(mesh.polygons)): + mesh.polygons[i].material_index = self.triMatIndices[i] + + for i in range(len(mesh.loops)): + # This should be okay, since we aren't trying to optimize vertices + # There will be one loop for every vertex + uv_layer[i].uv = self.verts[i][1] + + #if self.materialContext.f3d_mat.rdp_settings.g_lighting: + color_layer[i].color = self.verts[i][2] + alpha_layer[i].color = [self.verts[i][2][3]] * 3 + [1] + + if bpy.context.mode != "OBJECT": + bpy.ops.object.mode_set(mode = "OBJECT") + bpy.ops.object.select_all(action = "DESELECT") + obj.select_set(True) + bpy.context.view_layer.objects.active = obj + + for material in self.materials: + obj.data.materials.append(material) + if not importNormals: + bpy.ops.object.shade_smooth() + if removeDoubles: + bpy.ops.object.mode_set(mode = "EDIT") + bpy.ops.mesh.select_all(action = "SELECT") + bpy.ops.mesh.remove_doubles() + bpy.ops.object.mode_set(mode = "OBJECT") + + bpy.data.materials.remove(self.materialContext) + + obj.location = bpy.context.scene.cursor.location + + i = 0 + for key, lightObj in self.lightData.items(): + lightObj.location = bpy.context.scene.cursor.location + mathutils.Vector((i,0,0)) + i += 1 + + +class ParsedMacro: + def __init__(self, name, params): + self.name = name + self.params = params + +# Static DLs only + +# limbName = c variable name (for parsing text) +# boneName = blender bone name (for assigning vertex groups) +# we distinguish these because there is no guarantee of bone order in blender, +# so we usually rely on alphabetical naming. +# This means changing the c variable names. +def parseF3D(dlData, dlName, obj, transformMatrix, limbName, boneName, drawLayerPropName, drawLayer, f3dContext): + + f3dContext.matrixData[limbName] = transformMatrix + f3dContext.setCurrentTransform(limbName) + f3dContext.limbToBoneName[limbName] = boneName + setattr(f3dContext.mat().draw_layer, drawLayerPropName, drawLayer) + + #vertexGroup = getOrMakeVertexGroup(obj, boneName) + #groupIndex = vertexGroup.index + + dlCommands = parseDLData(dlData, dlName) + f3dContext.processCommands(dlData, dlName, dlCommands) + +def parseDLData(dlData, dlName): + matchResult = re.search("Gfx\s*" + re.escape(dlName) + "\s*\[\s*\]\s*=\s*\{([^\}]*)\}", dlData) + if matchResult is None: + raise PluginError("Cannot find display list named " + dlName) + + dlCommandData = matchResult.group(1) + + # recursive regex not available in re + #dlCommands = [(match.group(1), [param.strip() for param in match.group(2).split(",")]) for match in \ + # re.findall('(gs[A-Za-z0-9\_]*)\(((?>[^()]|(?R))*)\)', dlCommandData, re.DOTALL)] + + dlCommands = parseMacroList(dlCommandData) + return dlCommands + + +def getVertexDataStart(vertexDataParam, f3d): + matchResult = re.search("\&?([A-Za-z0-9\_]*)\s*(\[([^\]]*)\])?\s*(\+(.*))?", vertexDataParam) + if matchResult is None: + raise PluginError("SPVertex param " + vertexDataParam + " is malformed.") + + offset = 0 + if matchResult.group(3): + offset += math_eval(matchResult.group(3), f3d) + if matchResult.group(5): + offset += math_eval(matchResult.group(5), f3d) + + return matchResult.group(1), offset + +def parseVertexData(dlData, vertexDataName, f3dContext): + if vertexDataName in f3dContext.vertexData: + return f3dContext.vertexData[vertexDataName] + + matchResult = re.search("Vtx\s*" + re.escape(vertexDataName) + "\s*\[\s*[0-9x]*\s*\]\s*=\s*\{([^;]*);", dlData, re.DOTALL) + if matchResult is None: + raise PluginError("Cannot find vertex list named " + vertexDataName) + data = matchResult.group(1) + + f3d = f3dContext.f3d + patterns = f3dContext.vertexFormatPatterns(data) + vertexData = [] + for pattern in patterns: + vertexData = [( + [math_eval(match.group(1), f3d), math_eval(match.group(2), f3d), math_eval(match.group(3), f3d)], + [math_eval(match.group(4), f3d), math_eval(match.group(5), f3d)], + [math_eval(match.group(6), f3d), math_eval(match.group(7), f3d), math_eval(match.group(8), f3d), math_eval(match.group(9), f3d)]) + for match in re.finditer(pattern, data, re.DOTALL)] + if len(vertexData) > 0: + break + f3dContext.vertexData[vertexDataName] = vertexData + + return f3dContext.vertexData[vertexDataName] + +def parseLightsData(lightsData, lightsName, f3dContext): + #if lightsName in f3dContext.lightData: + # return f3dContext.lightData[lightsName] + + matchResult = re.search("Lights([0-9n])\s*" + re.escape(lightsName) + "\s*=\s*gdSPDefLights[0-9]\s*\(([^\)]*)\)\s*;\s*", lightsData, re.DOTALL) + if matchResult is None: + raise PluginError("Cannot find lights data named " + lightsName) + data = matchResult.group(2) + + values = [math_eval(value.strip(), f3dContext.f3d) for value in data.split(',')] + if values[-1] == "": + values = values[:-1] + + lightCount = matchResult.group(1) + if lightCount == "n": + lightCount = "7" + return int(lightCount), values + + #return f3dContext.lightData[lightsName] + +def RGBA16toRGBA32(value): + return [((value >> 11) & 31) / 31, ((value >> 6) & 31) / 31, ((value >> 1) & 31) / 31, value & 1] + +def IA16toRGBA32(value): + return [((value >> 8) & 255) / 255, ((value >> 8) & 255) / 255, ((value >> 8) & 255) / 255, (value & 255) / 255] + +def IA8toRGBA32(value): + return [((value >> 4) & 15) / 15, ((value >> 4) & 15) / 15, ((value >> 4) & 15) / 15, (value & 15) / 15] + +def IA4toRGBA32(value): + return [((value >> 1) & 7) / 7, ((value >> 1) & 7) / 7, ((value >> 1) & 7) / 7, value & 1] + +def I8toRGBA32(value): + return [value / 255, value / 255, value / 255, 1] + +def I4toRGBA32(value): + return [value / 15, value / 15, value / 15, 1] + +def CI8toRGBA32(value): + return [value / 255, value / 255, value / 255, 1] + +def CI4toRGBA32(value): + return [value / 255, value / 255, value / 255, 1] + +class F3DTextureReference: + def __init__(self, name, width): + self.name = name + self.width = width + +def parseTextureData(dlData, textureName, f3dContext, imageFormat, imageSize, width, basePath, isLUT, f3d): + + matchResult = re.search("([A-Za-z0-9\_]+)\s*" + re.escape(textureName) + "\s*\[\s*[0-9x]*\s*\]\s*=\s*\{([^\}]*)\s\}\s*;\s*", dlData, re.DOTALL) + if matchResult is None: + print("Cannot find texture named " + textureName) + return F3DTextureReference(textureName, width) + data = matchResult.group(2) + valueSize = matchResult.group(1) + + pathMatch = re.search("\#include\s*\"([^\"]*)\"", data, re.DOTALL) + if pathMatch is not None: + path = pathMatch.group(1) + originalImage = bpy.data.images.load(f3dContext.getImagePathFromInclude(path)) + image = originalImage.copy() + image.pack() + image.filepath = "" + bpy.data.images.remove(originalImage) + + # Blender UV origin is bottom right, while N64 is top right, so we must flip LUT since we read it as data + if isLUT: + flippedValues = image.pixels[:] + width, height = image.size + for j in range(height): + image.pixels[width * j * 4 : width * (j+1) * 4] = flippedValues[width * (height - (j+1)) * 4 : width * (height - j) * 4] + else: + values = [value.strip() for value in data.split(',') if value.strip() != ""] + newValues = [] + for value in values: + intValue = math_eval(value, f3d) + if valueSize == 'u8' or valueSize == 's8' or valueSize == 'char' or valueSize == "Texture": + size = 1 + elif valueSize == 'u16' or valueSize == "s16" or valueSize == "short": + size = 2 + elif valueSize == 'u32' or valueSize == 's32' or valueSize == 'int': + size = 4 + else: + size = 8 + newValues.extend(int.to_bytes(intValue, size, 'big')[:]) + values = newValues + + if width == 0: + width = 16 + height = int(ceil(len(values) / (width * int(imageSize[9:-1]) / 8))) + #print("Texture: " + str(len(values)) + ", width = " + str(width) + ", height = " + str(height)) + image = bpy.data.images.new(textureName, width, height, alpha = True) + if imageFormat == "G_IM_FMT_RGBA": + if imageSize == 'G_IM_SIZ_16b': + for i in range(int(len(values) / 2)): + image.pixels[4*i:4 * (i+1)] = RGBA16toRGBA32(int.from_bytes(values[2*i:2*(i+1)], 'big')) + elif imageSize == 'G_IM_SIZ_32b': + image.pixels[:] = values + else: + print("Unhandled size for RGBA: " + str(imageSize)) + elif imageFormat == "G_IM_FMT_IA": + if imageSize == 'G_IM_SIZ_4b': + for i in range(len(values)): + image.pixels[8*i : 8*i+4] = IA4toRGBA32((values[i] >> 4) & 15) + image.pixels[8*i+4 : 8*i+8] = IA4toRGBA32(values[i] & 15) + elif imageSize == "G_IM_SIZ_8b": + for i in range(len(values)): + image.pixels[4*i:4 * (i+1)] = IA8toRGBA32(values[i]) + elif imageSize == "G_IM_SIZ_16b": + for i in range(int(len(values) / 2)): + image.pixels[4*i:4 * (i+1)] = IA16toRGBA32(int.from_bytes(values[2*i:2*(i+1)], 'big')) + else: + print("Unhandled size for IA: " + str(imageSize)) + elif imageFormat == "G_IM_FMT_I": + if imageSize == 'G_IM_SIZ_4b': + for i in range(len(values)): + image.pixels[8*i : 8*i+4] = I4toRGBA32((values[i] >> 4) & 15) + image.pixels[8*i+4 : 8*i+8] = I4toRGBA32(values[i] & 15) + elif imageSize == "G_IM_SIZ_8b": + for i in range(len(values)): + image.pixels[4*i:4 * (i+1)] = I8toRGBA32(values[i]) + else: + print("Unhandled size for I: " + str(imageSize)) + elif imageFormat == "G_IM_FMT_CI": + if imageSize == 'G_IM_SIZ_4b': + for i in range(len(values)): + image.pixels[8*i : 8*i+4] = CI4toRGBA32((values[i] >> 4) & 15) + image.pixels[8*i+4 : 8*i+8] = CI4toRGBA32(values[i] & 15) + elif imageSize == "G_IM_SIZ_8b": + for i in range(len(values)): + image.pixels[4*i:4 * (i+1)] = CI8toRGBA32(values[i]) + else: + print("Unhandled size for CI: " + str(imageSize)) + + # Blender UV origin is bottom right, while N64 is top right, so we must flip non LUT + if not isLUT: + flippedValues = image.pixels[:] + for j in range(height): + image.pixels[width * j * 4 : width * (j+1) * 4] = flippedValues[width * (height - (j+1)) * 4 : width * (height - j) * 4] + + return image + +def parseMacroList(data): + end = 0 + start = 0 + isCommand = True + commands = [] + parenthesesCount = 0 + + command = None + params = None + while end < len(data) - 1: + end += 1 + if data[end] == '(': + parenthesesCount += 1 + elif data[end] == ')': + parenthesesCount -= 1 + + if isCommand and parenthesesCount > 0: + command = data[start:end].strip() + if command[0] == ',': + command = command[1:].strip() + isCommand = False + start = end + 1 + + elif not isCommand and parenthesesCount == 0: + params = parseMacroArgs(data[start:end]) + commands.append(ParsedMacro(command, params)) + isCommand = True + start = end + 1 + + return commands + +def parseMacroArgs(data): + end = 0 + start = 0 + params = [] + parenthesesCount = 0 + + while end < len(data) - 1: + end += 1 + if data[end] == '(': + parenthesesCount += 1 + elif data[end] == ')': + parenthesesCount -= 1 + + if (data[end] == ',' or end == len(data) -1) and parenthesesCount == 0: + if end == len(data)-1: + end += 1 + param = data[start:end].strip() + params.append(param) + start = end + 1 + + return params + +def getImportData(filepaths): + data = '' + for path in filepaths: + if os.path.exists(path): + data += readFile(path) + + return data + +def importMeshC(filepaths, name, scale, removeDoubles, importNormals, drawLayer, f3dContext): + data = getImportData(filepaths) + + # Create new skinned mesh + mesh = bpy.data.meshes.new(name + '_mesh') + obj = bpy.data.objects.new(name + '_mesh', mesh) + bpy.context.scene.collection.objects.link(obj) + + f3dContext.mat().draw_layer.oot = drawLayer + transformMatrix = mathutils.Matrix.Scale(1 / scale, 4) + + parseF3D(data, name, obj, transformMatrix, + name, name, "oot", drawLayer, f3dContext) + + f3dContext.clearMaterial() + f3dContext.createMesh(obj, removeDoubles, importNormals) + + applyRotation([obj], math.radians(-90), 'X') + +class F3D_ImportDL(bpy.types.Operator): + # set bl_ properties + bl_idname = 'object.f3d_import_dl' + bl_label = "Import DL" + bl_options = {'REGISTER', 'UNDO', 'PRESET'} + + # Called on demand (i.e. button press, menu item) + # Can also be called from operator search menu (Spacebar) + def execute(self, context): + obj = None + if context.mode != 'OBJECT': + bpy.ops.object.mode_set(mode = "OBJECT") + + try: + name = context.scene.DLImportName + importPath = bpy.path.abspath(context.scene.DLImportPath) + basePath = bpy.path.abspath(context.scene.DLImportBasePath) + scaleValue = bpy.context.scene.blenderF3DScale + + removeDoubles = context.scene.DLRemoveDoubles + importNormals = context.scene.DLImportNormals + drawLayer = context.scene.DLImportDrawLayer + f3dType = context.scene.f3d_type + isHWv1 = context.scene.isHWv1 + + importPaths = [importPath] + + importMeshC(importPaths, name, scaleValue, removeDoubles, importNormals, drawLayer, + F3DContext(F3D(f3dType, isHWv1), basePath, createF3DMat(None))) + + self.report({'INFO'}, 'Success!') + return {'FINISHED'} + + except Exception as e: + if context.mode != 'OBJECT': + bpy.ops.object.mode_set(mode = 'OBJECT') + raisePluginError(self, e) + return {'CANCELLED'} # must return a set + + +class F3D_UL_ImportDLPathList(bpy.types.UIList): + def draw_item(self, context, layout, data, item, icon, active_data, active_propname): + scene = data + fileProperty = item + # draw_item must handle the three layout types... Usually 'DEFAULT' and 'COMPACT' can share the same code. + if self.layout_type in {'DEFAULT', 'COMPACT'}: + # You should always start your row layout by a label (icon + text), or a non-embossed text field, + # this will also make the row easily selectable in the list! The later also enables ctrl-click rename. + # We use icon_value of label, as our given icon is an integer value, not an enum ID. + # Note "data" names should never be translated! + if ma: + layout.prop(fileProperty, "Path", text="", emboss=False, icon_value=icon) + else: + layout.label(text="", translate=False, icon_value=icon) + # 'GRID' layout type should be as compact as possible (typically a single icon!). + elif self.layout_type in {'GRID'}: + layout.alignment = 'CENTER' + layout.label(text="", icon_value=icon) + +class F3D_ImportDLPanel(bpy.types.Panel): + bl_idname = "F3D_PT_import_dl" + bl_label = "F3D Importer" + bl_space_type = 'VIEW_3D' + bl_region_type = 'UI' + bl_category = 'Fast64' + + @classmethod + def poll(cls, context): + return True + + # called every frame + def draw(self, context): + col = self.layout.column() + + col.operator(F3D_ImportDL.bl_idname) + prop_split(col, context.scene, "DLImportName", "Name") + prop_split(col, context.scene, "DLImportPath", "File") + prop_split(col, context.scene, "DLImportBasePath", "Base Path") + prop_split(col, context.scene, "blenderF3DScale", "Scale") + prop_split(col, context.scene, "DLImportDrawLayer", "Draw Layer") + col.prop(context.scene, "DLRemoveDoubles") + col.prop(context.scene, "DLImportNormals") + + box = col.box().column() + box.label(text = "All data must be contained within file.") + box.label(text = "The only exception are pngs converted to inc.c.") + + #col.template_list('F3D_UL_ImportDLPathList', '', context.scene, + # 'DLImportOtherFiles', context.scene, 'DLImportOtherFilesIndex') + +class ImportFileProperty (bpy.types.PropertyGroup): + path : bpy.props.StringProperty(name = "Path", subtype = "FILE_PATH") + +f3d_parser_classes = ( + F3D_ImportDL, + F3D_ImportDLPanel, + ImportFileProperty, + F3D_UL_ImportDLPathList, +) + +def f3d_parser_register(): + for cls in f3d_parser_classes: + register_class(cls) + + bpy.types.Scene.DLImportName = bpy.props.StringProperty(name = "Name") + bpy.types.Scene.DLImportPath = bpy.props.StringProperty(name = 'Directory', subtype = 'FILE_PATH') + bpy.types.Scene.DLImportBasePath = bpy.props.StringProperty(name = 'Directory', subtype = 'FILE_PATH') + bpy.types.Scene.DLRemoveDoubles = bpy.props.BoolProperty(name = "Remove Doubles", default = True) + bpy.types.Scene.DLImportNormals = bpy.props.BoolProperty(name = "Import Normals", default = True) + bpy.types.Scene.DLImportDrawLayer = bpy.props.EnumProperty(name = "Draw Layer", items = ootEnumDrawLayers) + bpy.types.Scene.DLImportOtherFiles = bpy.props.CollectionProperty(type = ImportFileProperty) + bpy.types.Scene.DLImportOtherFilesIndex = bpy.props.IntProperty() + +def f3d_parser_unregister(): + for cls in reversed(f3d_parser_classes): + unregister_class(cls) + + del bpy.types.Scene.DLImportName + del bpy.types.Scene.DLImportPath + del bpy.types.Scene.DLRemoveDoubles + del bpy.types.Scene.DLImportNormals + del bpy.types.Scene.DLImportDrawLayer + del bpy.types.Scene.DLImportBasePath + del bpy.types.Scene.DLImportOtherFiles + del bpy.types.Scene.DLImportOtherFilesIndex \ No newline at end of file diff --git a/fast64_internal/f3d/f3d_writer.py b/fast64_internal/f3d/f3d_writer.py index 9438e5f..8b79deb 100644 --- a/fast64_internal/f3d/f3d_writer.py +++ b/fast64_internal/f3d/f3d_writer.py @@ -153,6 +153,8 @@ def fixLargeUVs(obj): 2 if f3dMat.tex0.T.mirror or f3dMat.tex1.T.mirror else 1] size = texSizeDict[material] + if size[0] == 0 or size[1] == 0: + continue cellSize = [1024 / size[0], 1024 / size[1]] minUV, maxUV = findUVBounds(polygon, uv_data) uvOffset = [0,0] @@ -390,7 +392,7 @@ def saveStaticModel(triConverterInfo, fModel, obj, transformMatrix, ownerName, c drawLayerName = None if drawLayer not in fMeshes: - fMesh = fModel.addMesh(obj.original_name, ownerName, drawLayerName, False) + fMesh = fModel.addMesh(obj.original_name, ownerName, drawLayerName, False, obj) fMeshes[drawLayer] = fMesh if obj.use_f3d_culling and (fModel.f3d.F3DEX_GBI or fModel.f3d.F3DEX_GBI_2): @@ -409,9 +411,10 @@ def saveStaticModel(triConverterInfo, fModel, obj, transformMatrix, ownerName, c for drawLayer, fMesh in fMeshes.items(): if revertMatAtEnd: + fModel.onEndDraw(fMesh, obj) revertMatAndEndDraw(fMesh.draw, []) else: - fMesh.draw.commands.append(SPEndDisplayList()) + fModel.endDraw(fMesh, obj) return fMeshes def addCullCommand(obj, fMesh, transformMatrix, matWriteMethod): @@ -1106,13 +1109,19 @@ def getTexDimensions(material): texDimensions1 = None useDict = all_combiner_uses(f3dMat) if useDict['Texture 0'] and f3dMat.tex0.tex_set: - if f3dMat.tex0.tex is None: - raise PluginError('In material \"' + material.name + '\", a texture has not been set.') - texDimensions0 = f3dMat.tex0.tex.size[0], f3dMat.tex0.tex.size[1] + if f3dMat.tex0.use_tex_reference: + texDimensions0 = f3dMat.tex0.tex_reference_size + else: + if f3dMat.tex0.tex is None: + raise PluginError('In material \"' + material.name + '\", a texture has not been set.') + texDimensions0 = f3dMat.tex0.tex.size[0], f3dMat.tex0.tex.size[1] if useDict['Texture 1'] and f3dMat.tex1.tex_set: - if f3dMat.tex1.tex is None: - raise PluginError('In material \"' + material.name + '\", a texture has not been set.') - texDimensions1 = f3dMat.tex1.tex.size[0], f3dMat.tex1.tex.size[1] + if f3dMat.tex1.use_tex_reference: + texDimensions1 = f3dMat.tex1.tex_reference_size + else: + if f3dMat.tex1.tex is None: + raise PluginError('In material \"' + material.name + '\", a texture has not been set.') + texDimensions1 = f3dMat.tex1.tex.size[0], f3dMat.tex1.tex.size[1] if texDimensions0 is not None and texDimensions1 is not None: texDimensions = texDimensions0 if f3dMat.uv_basis == 'TEXEL0' \ @@ -1243,7 +1252,7 @@ def saveOrGetF3DMaterial(material, fModel, obj, drawLayer, convertTextureData): nextTmem = 0 loadTextures = not (material.mat_ver > 3 and f3dMat.use_large_textures) if useDict['Texture 0'] and f3dMat.tex0.tex_set: - if f3dMat.tex0.tex is None: + if f3dMat.tex0.tex is None and not f3dMat.tex0.use_tex_reference: raise PluginError('In material \"' + material.name + '\", a texture has not been set.') fMaterial.useLargeTextures = not loadTextures @@ -1253,7 +1262,7 @@ def saveOrGetF3DMaterial(material, fModel, obj, drawLayer, convertTextureData): fMaterial, fMaterial.material, fMaterial.revert, f3dMat.tex0, 0, nextTmem, None, convertTextureData, None, loadTextures, True) if useDict['Texture 1'] and f3dMat.tex1.tex_set: - if f3dMat.tex1.tex is None: + if f3dMat.tex1.tex is None and not f3dMat.tex1.use_tex_reference: raise PluginError('In material \"' + material.name + '\", a texture has not been set.') fMaterial.useLargeTextures = not loadTextures @@ -1377,18 +1386,27 @@ def saveOrGetF3DMaterial(material, fModel, obj, drawLayer, convertTextureData): def saveTextureIndex(propName, fModel, fMaterial, loadTexGfx, revertTexGfx, texProp, index, tmem, overrideName, convertTextureData, tileSettingsOverride, loadTextures, loadPalettes): tex = texProp.tex - if tex is None: - raise PluginError('In ' + propName + ", no texture is selected.") - elif len(tex.pixels) == 0: - raise PluginError("Could not load missing texture: " + tex.name + ". Make sure this texture has not been deleted or moved on disk.") + + if tex is not None and (tex.size[0] == 0 or tex.size[1] == 0): + raise PluginError("Image " + tex.name + " has either a 0 width or height; image may have been removed from original location.") + + if not texProp.use_tex_reference: + if tex is None: + raise PluginError('In ' + propName + ", no texture is selected.") + elif len(tex.pixels) == 0: + raise PluginError("Could not load missing texture: " + tex.name + ". Make sure this texture has not been deleted or moved on disk.") texFormat = texProp.tex_format isCITexture = texFormat[:2] == 'CI' palFormat = texProp.ci_format if isCITexture else '' - if tex.filepath == "": - name = tex.name + + if not texProp.use_tex_reference: + if tex.filepath == "": + name = tex.name + else: + name = tex.filepath else: - name = tex.filepath + name = texProp.tex_reference texName = fModel.name + '_' + \ (getNameFromPath(name, True) + '_' + texFormat.lower() if overrideName is None else overrideName) @@ -1399,8 +1417,10 @@ def saveTextureIndex(propName, fModel, fMaterial, loadTexGfx, revertTexGfx, texP setTLUTMode = False else: tileSettings = None - width = tex.size[0] - height = tex.size[1] + if texProp.use_tex_reference: + width, height = texProp.tex_reference_size + else: + width, height = tex.size setTLUTMode = fModel.matWriteMethod == GfxMatWriteMethod.WriteAll nextTmem = tmem + getTmemWordUsage(texFormat, width, height) @@ -1409,7 +1429,7 @@ def saveTextureIndex(propName, fModel, fMaterial, loadTexGfx, revertTexGfx, texP if nextTmem > (512 if texFormat[:2] != 'CI' else 256): raise PluginError("Error in \"" + propName + "\": Textures are too big. Max TMEM size is 4k " + \ "bytes, ex. 2 32x32 RGBA 16 bit textures.\nNote that texture width will be internally padded to 64 bit boundaries.") - if tex.size[0] > 1024 or tex.size[1] > 1024: + if width > 1024 or height > 1024: raise PluginError("Error in \"" + propName + "\": Any side of an image cannot be greater " +\ "than 1024.") @@ -1445,14 +1465,22 @@ def saveTextureIndex(propName, fModel, fMaterial, loadTexGfx, revertTexGfx, texP convertTextureData = convertTextureData and not (fMaterial.useLargeTextures and fMaterial.saveLargeTextures[index]) if isCITexture: - fImage, fPalette = saveOrGetPaletteDefinition( - fMaterial, fModel, tex, texName, texFormat, palFormat, convertTextureData) + if texProp.use_tex_reference: + fImage = FImage(texProp.tex_reference, None, None, width, height, None, False) + fPalette = FImage(texProp.pal_reference, None, None, 1, texProp.pal_reference_size, None, False) + else: + fImage, fPalette = saveOrGetPaletteDefinition( + fMaterial, fModel, tex, texName, texFormat, palFormat, convertTextureData) + if loadPalettes: savePaletteLoading(loadTexGfx, revertTexGfx, fPalette, palFormat, 0, fPalette.height, fModel.f3d, fModel.matWriteMethod) else: - fImage = saveOrGetTextureDefinition(fMaterial, fModel, tex, texName, - texFormat, convertTextureData) + if texProp.use_tex_reference: + fImage = FImage(texProp.tex_reference, None, None, width, height, None, False) + else: + fImage = saveOrGetTextureDefinition(fMaterial, fModel, tex, texName, + texFormat, convertTextureData) if setTLUTMode and not isCITexture: loadTexGfx.commands.append(DPSetTextureLUT('G_TT_NONE')) @@ -1716,7 +1744,7 @@ def saveOrGetTextureDefinition(fMaterial, fModel, image, imageName, texFormat, c ((((int(round(image.pixels[(j * image.size[0] + i) * image.channels + 0] * 0x1F)) & 0x1F) << 3) | ((int(round(image.pixels[(j * image.size[0] + i) * image.channels + 1] * 0x1F)) & 0x1F) >> 2)), - (((int(round(image.pixels[(j * image.size[0] + i) * image.channels + 1] * 0x1F)) & 0x02) << 6) | \ + (((int(round(image.pixels[(j * image.size[0] + i) * image.channels + 1] * 0x1F)) & 0x03) << 6) | \ ((int(round(image.pixels[(j * image.size[0] + i) * image.channels + 2] * 0x1F)) & 0x1F) << 1) | \ (1 if image.pixels[(j * image.size[0] + i) * image.channels + 3] > 0.5 else 0))) @@ -2092,7 +2120,10 @@ def saveOtherModeLDefinitionAll(fMaterial, settings, defaults, defaultRenderMode flagList, blendList = getRenderModeFlagList(settings, fMaterial) cmd.flagList.extend(flagList) if blendList is not None: - cmd.flagList.extend(blendList) + cmd.flagList.extend([ + "GBL_c1(" + blendList[0] + ", " + blendList[1] + ", " + blendList[2] + ", " + blendList[3] + ")", + "GBL_c2(" + blendList[4] + ", " + blendList[5] + ", " + blendList[6] + ", " + blendList[7] + ")", + ]) else: cmd.flagList.extend(defaultRenderMode) @@ -2128,9 +2159,11 @@ def getRenderModeFlagList(settings, fMaterial): settings.rendermode_preset_cycle_1, settings.rendermode_preset_cycle_2] else: + cycle2 = settings.rendermode_preset_cycle_1 + '2' + if cycle2 not in [value[0] for value in enumRenderModesCycle2]: + cycle2 = "G_RM_NOOP" flagList = [ - settings.rendermode_preset_cycle_1, - settings.rendermode_preset_cycle_1 + '2'] + settings.rendermode_preset_cycle_1, cycle2] else: if settings.g_mdsft_cycletype == 'G_CYC_2CYCLE': blendList = \ @@ -2233,6 +2266,27 @@ def exportF3DtoC(dirPath, obj, DLFormat, transformMatrix, writeCData(staticData, os.path.join(modelDirPath, 'header.h'), os.path.join(modelDirPath, 'model.inc.c')) +def removeDL(sourcePath, headerPath, DLName): + DLDataC = readFile(sourcePath) + originalDataC = DLDataC + + DLDataH = readFile(headerPath) + originalDataH = DLDataH + + matchResult = re.search("Gfx\s*" + re.escape(DLName) + "\s*\[\s*[0-9x]*\s*\]\s*=\s*\{([^}]*)}\s*;\s*", DLDataC, re.DOTALL) + if matchResult is not None: + DLDataC = DLDataC[:matchResult.start(0)] + DLDataC[matchResult.end(0):] + + headerMatch = getDeclaration(DLDataH, DLName) + if headerMatch is not None: + DLDataH = DLDataH[:headerMatch.start(0)] + DLDataH[headerMatch.end(0):] + + if DLDataC != originalDataC: + writeFile(sourcePath, DLDataC) + + if DLDataH != originalDataH: + writeFile(headerPath, DLDataH) + class F3D_ExportDL(bpy.types.Operator): # set bl_ properties bl_idname = 'object.f3d_export_dl' @@ -2252,7 +2306,7 @@ class F3D_ExportDL(bpy.types.Operator): if not isinstance(obj.data, bpy.types.Mesh): raise PluginError("Object is not a mesh.") - scaleValue = bpy.context.scene.blenderToSM64Scale + scaleValue = bpy.context.scene.blenderF3DScale finalTransform = mathutils.Matrix.Diagonal(mathutils.Vector(( scaleValue, scaleValue, scaleValue))).to_4x4() @@ -2305,8 +2359,9 @@ class F3D_ExportDLPanel(bpy.types.Panel): col = self.layout.column() col.operator(F3D_ExportDL.bl_idname) - col.prop(context.scene, 'DLExportPath') prop_split(col, context.scene, 'DLName', 'Name') + prop_split(col, context.scene, 'DLExportPath', "Export Path") + prop_split(col, context.scene, "blenderF3DScale", "Scale") prop_split(col, context.scene, 'matWriteMethod', "Material Write Method") col.prop(context.scene, 'DLExportisStatic') diff --git a/fast64_internal/oot/README.md b/fast64_internal/oot/README.md index c9343cd..7ca5e09 100644 --- a/fast64_internal/oot/README.md +++ b/fast64_internal/oot/README.md @@ -44,4 +44,26 @@ Additionally, for functions like Gfx_TexScroll(), the x,y inputs are pre-shifted Collision properties are found underneath the material properties. Water boxes and collision properties will have references the properties "Camera", "Lighting", and "Exit", which reference the indices of the scene cameras, scene light list, and scene exit list respectively. If you want separate visual/collision geometry, you can set per mesh object "Ignore Collision" or "Ignore Render" in object inspector window. ### Skeletons And Animations -To export a skeletal mesh, select an armature and then click "Export" for the armature exporter. The root bone of the armature must be named "root". To export an animation, the process is the same. The active animation on the armature will be exported. \ No newline at end of file +For bones, there are 3 bone types: Default, Custom DL, and Ignore. This can be set in the bone properties window. +Default is a regular deformation bone. Ignore will not be handled by the exporter/importer. Custom DL lets you define the name of a DL that you want a bone to draw instead of drawing geometry from the armature. There is also an option for billboarding the specific geometry associated with the bone. + +The armature properties window also has the option to set a LOD armature. This armature must have the same bone structure as your current armature. + +To export a skeletal mesh, select an armature and then click "Export" for the armature exporter. Make sure there is only one bone without a parent (the root bone), as the exporter will choose the first parentless bone as the start bone of the armature. + +To import a skeletal mesh, just click "Import" for the armature importer. You may encounter a couple issues: + +![](https://bitbucket.org/kurethedead/fast64/raw/master/images/oot_imported_gerudo_textured.png) +![](https://bitbucket.org/kurethedead/fast64/raw/master/images/oot_imported_gerudo_solid.png) + + +1. Eye/face textures are black: Texture pointers which are set dynamically will not be imported. Instead, the name of the pointer will be used instead of the actual data. +2. Certain colors are white/different: Some graphical effects are achieved through dynamic Gfx commands, such as tinting white textures. These effects will not be imported. +3. Strange imported normals: Due to the behaviour of rotating vertices on a skinned triangle that differs between Blender and the N64, normals may look strange. Note that these normals will look correct if re exported back into the game (assuming the rest pose is not changed). + +Note that rest pose rotations are zeroed out on export, so you can modify the rest pose of imported armature while still preserving its structure. You can do this by using the "Apply As Rest Pose" operator under the Fast64 tab. Note that imported animations however still require the imported rest pose to work correctly. + +There may also be an issue where some meshes import completely black due to the assumption that the F3D cycle mode is set to 2-Cycle, when it should really be 1-Cycle. Try changing the cycle type to 1-Cycle in cases where a dynamic texture pointer is not expected. + +To import an animation, select the armature the animation belongs to then click "Import" on the animation importer. +To export an animation, select an armature and click "Export", which will export the active animation of the armature. \ No newline at end of file diff --git a/fast64_internal/oot/c_writer/__init__.py b/fast64_internal/oot/c_writer/__init__.py index 0247aac..ac12af2 100644 --- a/fast64_internal/oot/c_writer/__init__.py +++ b/fast64_internal/oot/c_writer/__init__.py @@ -1,4 +1,3 @@ -from .oot_collision_c import * from .oot_level_c import * from .oot_dma_manager_c import * from .oot_scene_id_c import * diff --git a/fast64_internal/oot/c_writer/oot_collision_c.py b/fast64_internal/oot/c_writer/oot_collision_c.py deleted file mode 100644 index e19def3..0000000 --- a/fast64_internal/oot/c_writer/oot_collision_c.py +++ /dev/null @@ -1,151 +0,0 @@ -from ..oot_collision import * - -def ootCollisionVertexToC(vertex): - return "{ " + str(vertex.position[0]) + ", " +\ - str(vertex.position[1]) + ", " +\ - str(vertex.position[2]) + " },\n" - -def ootCollisionPolygonToC(polygon, ignoreCamera, ignoreActor, ignoreProjectile, enableConveyor, polygonTypeIndex): - return "{ " + format(polygonTypeIndex, "#06x") + ', ' +\ - format(polygon.convertShort02(ignoreCamera, ignoreActor, ignoreProjectile), "#06x") + ', ' +\ - format(polygon.convertShort04(enableConveyor), "#06x") + ', ' +\ - format(polygon.convertShort06(), "#06x") + ', ' +\ - format(polygon.normal[0], "#06x") + ', ' +\ - format(polygon.normal[1], "#06x") + ', ' +\ - format(polygon.normal[2], "#06x") + ', ' +\ - format(polygon.distance, "#06x") + ' },\n' - -def ootPolygonTypeToC(polygonType): - return " " + format(polygonType.convertHigh(), "#010x") + ', ' +\ - format(polygonType.convertLow(), "#010x") + ',\n' - -def ootWaterBoxToC(waterBox): - return "{ " + str(waterBox.low[0]) + ", " +\ - str(waterBox.height) + ", " +\ - str(waterBox.low[1]) + ", " +\ - str(waterBox.high[0] - waterBox.low[0]) + ", " +\ - str(waterBox.high[1] - waterBox.low[1]) + ", " +\ - format(waterBox.propertyData(), "#010x") + ' },\n' - -def ootCameraDataToC(camData): - posC = CData() - camC = CData() - if len(camData.camPosDict) > 0: - - camDataName = "CamData " + camData.camDataName() + "[" + str(len(camData.camPosDict)) + "]" - - camC.source = camDataName + ' = {\n' - camC.header = "extern " + camDataName + ';\n' - - camPosIndex = 0 - for i in range(len(camData.camPosDict)): - camC.source += '\t' + ootCameraEntryToC(camData.camPosDict[i], camData, camPosIndex) - if camData.camPosDict[i].hasPositionData: - posC.source += ootCameraPosToC(camData.camPosDict[i]) - camPosIndex += 3 - posC.source += '};\n\n' - camC.source += '};\n\n' - - posDataName = "Vec3s " + camData.camPositionsName() + '[' + str(camPosIndex) + ']' - posC.header = "extern " + posDataName + ';\n' - posC.source = posDataName + " = {\n" + posC.source - - posC.append(camC) - return posC - -def ootCameraPosToC(camPos): - return "\t{ " +\ - str(camPos.position[0]) + ', ' +\ - str(camPos.position[1]) + ', ' +\ - str(camPos.position[2]) + ' },\n\t{ ' +\ - str(camPos.rotation[0]) + ', ' +\ - str(camPos.rotation[1]) + ', ' +\ - str(camPos.rotation[2]) + ' },\n\t{ ' +\ - str(camPos.fov) + ', ' +\ - str(camPos.jfifID) + ', ' +\ - str(camPos.unknown) + ' },\n' - -def ootCameraEntryToC(camPos, camData, camPosIndex): - return "{ " +\ - str(camPos.camSType) + ', ' +\ - ('3' if camPos.hasPositionData else '0') + ', ' +\ - (("&" + camData.camPositionsName() + '[' + str(camPosIndex) + ']') - if camPos.hasPositionData else "0") + ' },\n' - -def ootCollisionToC(collision): - data = CData() - - data.append(ootCameraDataToC(collision.cameraData)) - - if len(collision.polygonGroups) > 0: - data.header += "extern u32 " + collision.polygonTypesName() + "[];\n" - data.header += "extern CollisionPoly " + collision.polygonsName() + "[];\n" - polygonTypeC = "u32 " + collision.polygonTypesName() + "[] = {\n" - polygonC = "CollisionPoly " + collision.polygonsName() + "[] = {\n" - polygonIndex = 0 - for polygonType, polygons in collision.polygonGroups.items(): - polygonTypeC += '\t' + ootPolygonTypeToC(polygonType) - for polygon in polygons: - polygonC += '\t' + ootCollisionPolygonToC(polygon, - polygonType.ignoreCameraCollision, - polygonType.ignoreActorCollision, - polygonType.ignoreProjectileCollision, - polygonType.enableConveyor, - polygonIndex) - polygonIndex += 1 - polygonTypeC += '};\n\n' - polygonC += '};\n\n' - - data.source += polygonTypeC + polygonC - polygonTypesName = collision.polygonTypesName() - polygonsName = collision.polygonsName() - else: - polygonTypesName = '0' - polygonsName = '0' - - if len(collision.vertices) > 0: - data.header += "extern Vec3s " + collision.verticesName() + "[" + str(len(collision.vertices)) + "];\n" - data.source += "Vec3s " + collision.verticesName() + "[" + str(len(collision.vertices)) + "] = {\n" - for vertex in collision.vertices: - data.source += '\t' + ootCollisionVertexToC(vertex) - data.source += '};\n\n' - collisionVerticesName = collision.verticesName() - else: - collisionVerticesName = '0' - - if len(collision.waterBoxes) > 0: - data.header += "extern WaterBox " + collision.waterBoxesName() + "[];\n" - data.source += "WaterBox " + collision.waterBoxesName() + "[] = {\n" - for waterBox in collision.waterBoxes: - data.source += '\t' + ootWaterBoxToC(waterBox) - data.source += '};\n\n' - waterBoxesName = collision.waterBoxesName() - else: - waterBoxesName = '0' - - if len(collision.cameraData.camPosDict) > 0: - camDataName = "&" + collision.camDataName() - else: - camDataName = '0' - - data.header += "extern CollisionHeader " + collision.headerName() + ';\n' - data.source += "CollisionHeader " + collision.headerName() + ' = { ' - - if len(collision.bounds) == 2: - for bound in range(2): # min, max bound - for field in range(3): # x, y, z - data.source += str(collision.bounds[bound][field]) + ', ' - else: - data.source += '0, 0, 0, 0, 0, 0, ' - - data.source += \ - str(len(collision.vertices)) + ', ' +\ - collisionVerticesName + ', ' +\ - str(collision.polygonCount()) + ", " +\ - polygonsName + ', ' +\ - polygonTypesName + ', ' +\ - camDataName + ', ' +\ - str(len(collision.waterBoxes)) + ", " +\ - waterBoxesName + ' };\n\n' - - return data diff --git a/fast64_internal/oot/c_writer/oot_level_c.py b/fast64_internal/oot/c_writer/oot_level_c.py index fbe450e..a712f0c 100644 --- a/fast64_internal/oot/c_writer/oot_level_c.py +++ b/fast64_internal/oot/c_writer/oot_level_c.py @@ -1,7 +1,7 @@ import math from ..oot_f3d_writer import * from ..oot_level_writer import * -from .oot_collision_c import * +from ..oot_collision import * def cmdName(name, header, index): return name + "_header" + format(header, '02') + "_cmd" + format(index, '02') diff --git a/fast64_internal/oot/oot_anim.py b/fast64_internal/oot/oot_anim.py index af125f6..5ab22cb 100644 --- a/fast64_internal/oot/oot_anim.py +++ b/fast64_internal/oot/oot_anim.py @@ -1,4 +1,4 @@ -import shutil, copy, math, mathutils, bpy, os +import shutil, copy, math, mathutils, bpy, os, re from bpy.utils import register_class, unregister_class from .oot_constants import * @@ -178,6 +178,96 @@ def exportAnimationC(armatureObj, exportPath, isCustomExport, folderName, skelet if not isCustomExport: addIncludeFiles(folderName, path, ootAnim.name) +def getNextBone(boneStack, armatureObj): + if len(boneStack) == 0: + raise PluginError("More bones in animation than on armature.") + bone = armatureObj.data.bones[boneStack[0]] + boneStack = boneStack[1:] + boneStack = getSortedChildren(armatureObj, bone) + boneStack + return bone, boneStack + +def ootImportAnimationC(armatureObj, filepath, animName, actorScale): + animData = readFile(filepath) + + matchResult = re.search(re.escape(animName) + "\s*=\s*\{\s*\{\s*([^,\s]*)\s*\}*\s*,\s*([^,\s]*)\s*,\s*([^,\s]*)\s*,\s*([^,\s]*)\s*\}\s*;", animData) + if matchResult is None: + raise PluginError("Cannot find animation named " + animName + " in " + filepath) + frameCount = hexOrDecInt(matchResult.group(1).strip()) + frameDataName = matchResult.group(2).strip() + jointIndicesName = matchResult.group(3).strip() + staticIndexMax = hexOrDecInt(matchResult.group(4).strip()) + + frameData = getFrameData(filepath, animData, frameDataName) + jointIndices = getJointIndices(filepath, animData, jointIndicesName) + + #print(frameDataName + " " + jointIndicesName) + #print(str(frameData) + "\n" + str(jointIndices)) + + bpy.context.scene.frame_end = frameCount + anim = bpy.data.actions.new(animName) + + startBoneName = getStartBone(armatureObj) + boneStack = [startBoneName] + + isRootTranslation = True + # boneFrameData = [[x keyframes], [y keyframes], [z keyframes]] + # len(armatureFrameData) should be = number of bones + # property index = 0,1,2 (aka x,y,z) + for jointIndex in jointIndices: + if isRootTranslation: + for propertyIndex in range(3): + fcurve = anim.fcurves.new( + data_path = 'pose.bones["' + startBoneName + '"].location', + index = propertyIndex, + action_group = startBoneName) + if jointIndex[propertyIndex] < staticIndexMax: + value = frameData[jointIndex[propertyIndex]] / actorScale + fcurve.keyframe_points.insert(0, value) + else: + for frame in range(frameCount): + value = frameData[jointIndex[propertyIndex] + frame] / actorScale + fcurve.keyframe_points.insert(frame, value) + isRootTranslation = False + else: + # WARNING: This assumes the order bones are processed are in alphabetical order. + # If this changes in the future, then this won't work. + bone, boneStack = getNextBone(boneStack, armatureObj) + for propertyIndex in range(3): + fcurve = anim.fcurves.new( + data_path = 'pose.bones["' + bone.name + '"].rotation_euler', + index = propertyIndex, + action_group = bone.name) + if jointIndex[propertyIndex] < staticIndexMax: + value = math.radians(frameData[jointIndex[propertyIndex]] * 360 / (2**16)) + fcurve.keyframe_points.insert(0, value) + else: + for frame in range(frameCount): + value = math.radians(frameData[jointIndex[propertyIndex] + frame] * 360 / (2**16)) + fcurve.keyframe_points.insert(frame, value) + + if armatureObj.animation_data is None: + armatureObj.animation_data_create() + armatureObj.animation_data.action = anim + +def getFrameData(filepath, animData, frameDataName): + matchResult = re.search(re.escape(frameDataName) + "\s*\[\s*[0-9]*\s*\]\s*=\s*\{([^\}]*)\}", animData, re.DOTALL) + if matchResult is None: + raise PluginError("Cannot find animation frame data named " + frameDataName + " in " + filepath) + data = matchResult.group(1) + frameData = [int.from_bytes([int(value.strip()[2:4], 16), int(value.strip()[4:6], 16)], + 'big', signed = True) for value in data.split(",") if value.strip() != ""] + + return frameData + +def getJointIndices(filepath, animData, jointIndicesName): + matchResult = re.search(re.escape(jointIndicesName) + "\s*\[\s*[0-9]*\s*\]\s*=\s*\{([^;]*);", animData, re.DOTALL) + if matchResult is None: + raise PluginError("Cannot find animation joint indices data named " + jointIndicesName + " in " + filepath) + data = matchResult.group(1) + jointIndicesData = [[hexOrDecInt(match.group(i)) for i in range(1,4)] for match in re.finditer("\{([^,\}]*),([^,\}]*),([^,\}]*)\}", data, re.DOTALL)] + + return jointIndicesData + class OOT_ExportAnim(bpy.types.Operator): bl_idname = 'object.oot_export_anim' bl_label = "Export Animation" @@ -201,10 +291,52 @@ class OOT_ExportAnim(bpy.types.Operator): try: isCustomExport = context.scene.ootAnimIsCustomExport - exportPath = context.scene.ootAnimCustomPath - folderName = context.scene.ootAnimFolderName - skeletonName = context.scene.ootAnimName - exportAnimationC(armatureObj, exportPath, isCustomExport, folderName, skeletonName) + exportPath = bpy.path.abspath(context.scene.ootAnimExportCustomPath) + folderName = context.scene.ootAnimExportFolderName + skeletonName = context.scene.ootAnimSkeletonName + + path = ootGetObjectPath(isCustomExport, exportPath, folderName) + + exportAnimationC(armatureObj, path, isCustomExport, folderName, skeletonName) + self.report({'INFO'}, 'Success!') + + except Exception as e: + raisePluginError(self, e) + return {'CANCELLED'} # must return a set + + return {'FINISHED'} # must return a set + +class OOT_ImportAnim(bpy.types.Operator): + bl_idname = 'object.oot_import_anim' + bl_label = "Import Animation" + bl_options = {'REGISTER', 'UNDO', 'PRESET'} + + # Called on demand (i.e. button press, menu item) + # Can also be called from operator search menu (Spacebar) + def execute(self, context): + try: + if len(context.selected_objects) == 0 or not \ + isinstance(context.selected_objects[0].data, bpy.types.Armature): + raise PluginError("Armature not selected.") + if len(context.selected_objects) > 1 : + raise PluginError("Multiple objects selected, make sure to select only one.") + armatureObj = context.selected_objects[0] + if context.mode != 'OBJECT': + bpy.ops.object.mode_set(mode = "OBJECT") + except Exception as e: + raisePluginError(self, e) + return {"CANCELLED"} + + try: + isCustomImport = context.scene.ootAnimIsCustomImport + folderName = context.scene.ootAnimImportFolderName + importPath = bpy.path.abspath(context.scene.ootAnimImportCustomPath) + animName = context.scene.ootAnimName + actorScale = context.scene.ootActorBlenderScale + + path = ootGetObjectPath(isCustomImport, importPath, folderName) + + ootImportAnimationC(armatureObj, path, animName, actorScale) self.report({'INFO'}, 'Success!') except Exception as e: @@ -227,18 +359,30 @@ class OOT_ExportAnimPanel(bpy.types.Panel): # called every frame def draw(self, context): col = self.layout.column() + col.operator(OOT_ExportAnim.bl_idname) - - col.prop(context.scene, 'ootAnimIsCustomExport') - prop_split(col, context.scene, 'ootAnimName', 'Skeleton') + prop_split(col, context.scene, 'ootAnimSkeletonName', 'Skeleton Name') if context.scene.ootAnimIsCustomExport: - col.prop(context.scene, 'ootAnimCustomPath') + prop_split(col, context.scene, 'ootAnimExportCustomPath', "Folder") else: - prop_split(col, context.scene, 'ootAnimFolderName', 'Object') - + prop_split(col, context.scene, 'ootAnimExportFolderName', 'Object') + col.prop(context.scene, 'ootAnimIsCustomExport') + + + col.operator(OOT_ImportAnim.bl_idname) + prop_split(col, context.scene, 'ootAnimName', 'Anim Name') + + if context.scene.ootAnimIsCustomImport: + prop_split(col, context.scene, 'ootAnimImportCustomPath', "File") + else: + prop_split(col, context.scene, 'ootAnimImportFolderName', 'Object') + col.prop(context.scene, 'ootAnimIsCustomImport') + + oot_anim_classes = ( OOT_ExportAnim, + OOT_ImportAnim, ) oot_anim_panels = ( @@ -255,17 +399,30 @@ def oot_anim_panel_unregister(): def oot_anim_register(): bpy.types.Scene.ootAnimIsCustomExport = bpy.props.BoolProperty(name = "Use Custom Path") - bpy.types.Scene.ootAnimCustomPath = bpy.props.StringProperty( + bpy.types.Scene.ootAnimExportCustomPath = bpy.props.StringProperty( name ='Folder', subtype = 'FILE_PATH') - bpy.types.Scene.ootAnimFolderName = bpy.props.StringProperty(name = "Animation Folder", default = "gameplay_keep") - bpy.types.Scene.ootAnimName = bpy.props.StringProperty(name = "Skeleton Name", default = "skeleton") + bpy.types.Scene.ootAnimExportFolderName = bpy.props.StringProperty(name = "Animation Folder", default = "object_geldb") + + bpy.types.Scene.ootAnimIsCustomImport = bpy.props.BoolProperty(name = "Use Custom Path") + bpy.types.Scene.ootAnimImportCustomPath = bpy.props.StringProperty( + name ='Folder', subtype = 'FILE_PATH') + bpy.types.Scene.ootAnimImportFolderName = bpy.props.StringProperty(name = "Animation Folder", default = "object_geldb") + + bpy.types.Scene.ootAnimSkeletonName = bpy.props.StringProperty(name = "Skeleton Name", default = "gGerudoRedSkel") + bpy.types.Scene.ootAnimName = bpy.props.StringProperty(name = "Anim Name", default = "gGerudoRedSpinAttackAnim") for cls in oot_anim_classes: register_class(cls) def oot_anim_unregister(): del bpy.types.Scene.ootAnimIsCustomExport - del bpy.types.Scene.ootAnimCustomPath - del bpy.types.Scene.ootAnimFolderName + del bpy.types.Scene.ootAnimExportCustomPath + del bpy.types.Scene.ootAnimExportFolderName + + del bpy.types.Scene.ootAnimIsCustomImport + del bpy.types.Scene.ootAnimImportCustomPath + del bpy.types.Scene.ootAnimImportFolderName + + del bpy.types.Scene.ootAnimSkeletonName del bpy.types.Scene.ootAnimName for cls in reversed(oot_anim_classes): unregister_class(cls) \ No newline at end of file diff --git a/fast64_internal/oot/oot_collision.py b/fast64_internal/oot/oot_collision.py index 1ef6ad4..b2b3786 100644 --- a/fast64_internal/oot/oot_collision.py +++ b/fast64_internal/oot/oot_collision.py @@ -466,14 +466,14 @@ class OOT_CollisionPanel(bpy.types.Panel): box.prop(collisionProp, "conveyorKeepMomentum", text = "Keep Momentum") # water boxes handled by level writer -def exportCollisionCommon(collision, sceneObj, allObjs, transformMatrix, includeChildren, name): +def exportCollisionCommon(collision, obj, transformMatrix, includeChildren, name): bpy.ops.object.select_all(action = 'DESELECT') - sceneObj.select_set(True) + obj.select_set(True) # dict of collisionType : faces collisionDict = {} - addCollisionTriangles(sceneObj, collisionDict, includeChildren, transformMatrix, collision.bounds) + addCollisionTriangles(obj, collisionDict, includeChildren, transformMatrix, collision.bounds) for material, faces in collisionDict.items(): polygonType = getPolygonType(material.ootCollisionProperty) collision.polygonGroups[polygonType] = [] @@ -488,6 +488,30 @@ def exportCollisionCommon(collision, sceneObj, allObjs, transformMatrix, include indices.append(index) collision.polygonGroups[polygonType].append(OOTCollisionPolygon(indices, normal, distance)) +def exportCollisionToC(obj, transformMatrix, includeChildren, name, isCustomExport, folderName, + exportPath): + collision = OOTCollision(name) + collision.cameraData = OOTCameraData(name) + exportCollisionCommon(collision, obj, transformMatrix, includeChildren, name) + collisionC = ootCollisionToC(collision) + + data = CData() + data.source += '#include "ultra64.h"\n#include "z64.h"\n#include "macros.h"\n' + if not isCustomExport: + data.source += '#include "' + folderName + '.h"\n\n' + else: + data.source += '\n' + + data.append(collisionC) + + path = ootGetPath(exportPath, isCustomExport, 'assets/objects/', folderName, False, False) + writeCData(data, + os.path.join(path, name + '.h'), + os.path.join(path, name + '.c')) + + if not isCustomExport: + addIncludeFiles(folderName, path, name) + def updateBounds(position, bounds): if len(bounds) == 0: bounds.append([position[0], position[1], position[2]]) @@ -561,6 +585,160 @@ def collisionVertIndex(vert, vertArray): return i return None + + + +def ootCollisionVertexToC(vertex): + return "{ " + str(vertex.position[0]) + ", " +\ + str(vertex.position[1]) + ", " +\ + str(vertex.position[2]) + " },\n" + +def ootCollisionPolygonToC(polygon, ignoreCamera, ignoreActor, ignoreProjectile, enableConveyor, polygonTypeIndex): + return "{ " + format(polygonTypeIndex, "#06x") + ', ' +\ + format(polygon.convertShort02(ignoreCamera, ignoreActor, ignoreProjectile), "#06x") + ', ' +\ + format(polygon.convertShort04(enableConveyor), "#06x") + ', ' +\ + format(polygon.convertShort06(), "#06x") + ', ' +\ + format(polygon.normal[0], "#06x") + ', ' +\ + format(polygon.normal[1], "#06x") + ', ' +\ + format(polygon.normal[2], "#06x") + ', ' +\ + format(polygon.distance, "#06x") + ' },\n' + +def ootPolygonTypeToC(polygonType): + return " " + format(polygonType.convertHigh(), "#010x") + ', ' +\ + format(polygonType.convertLow(), "#010x") + ',\n' + +def ootWaterBoxToC(waterBox): + return "{ " + str(waterBox.low[0]) + ", " +\ + str(waterBox.height) + ", " +\ + str(waterBox.low[1]) + ", " +\ + str(waterBox.high[0] - waterBox.low[0]) + ", " +\ + str(waterBox.high[1] - waterBox.low[1]) + ", " +\ + format(waterBox.propertyData(), "#010x") + ' },\n' + +def ootCameraDataToC(camData): + posC = CData() + camC = CData() + if len(camData.camPosDict) > 0: + + camDataName = "CamData " + camData.camDataName() + "[" + str(len(camData.camPosDict)) + "]" + + camC.source = camDataName + ' = {\n' + camC.header = "extern " + camDataName + ';\n' + + camPosIndex = 0 + for i in range(len(camData.camPosDict)): + camC.source += '\t' + ootCameraEntryToC(camData.camPosDict[i], camData, camPosIndex) + if camData.camPosDict[i].hasPositionData: + posC.source += ootCameraPosToC(camData.camPosDict[i]) + camPosIndex += 3 + posC.source += '};\n\n' + camC.source += '};\n\n' + + posDataName = "Vec3s " + camData.camPositionsName() + '[' + str(camPosIndex) + ']' + posC.header = "extern " + posDataName + ';\n' + posC.source = posDataName + " = {\n" + posC.source + + posC.append(camC) + return posC + +def ootCameraPosToC(camPos): + return "\t{ " +\ + str(camPos.position[0]) + ', ' +\ + str(camPos.position[1]) + ', ' +\ + str(camPos.position[2]) + ' },\n\t{ ' +\ + str(camPos.rotation[0]) + ', ' +\ + str(camPos.rotation[1]) + ', ' +\ + str(camPos.rotation[2]) + ' },\n\t{ ' +\ + str(camPos.fov) + ', ' +\ + str(camPos.jfifID) + ', ' +\ + str(camPos.unknown) + ' },\n' + +def ootCameraEntryToC(camPos, camData, camPosIndex): + return "{ " +\ + str(camPos.camSType) + ', ' +\ + ('3' if camPos.hasPositionData else '0') + ', ' +\ + (("&" + camData.camPositionsName() + '[' + str(camPosIndex) + ']') + if camPos.hasPositionData else "0") + ' },\n' + +def ootCollisionToC(collision): + data = CData() + + data.append(ootCameraDataToC(collision.cameraData)) + + if len(collision.polygonGroups) > 0: + data.header += "extern u32 " + collision.polygonTypesName() + "[];\n" + data.header += "extern CollisionPoly " + collision.polygonsName() + "[];\n" + polygonTypeC = "u32 " + collision.polygonTypesName() + "[] = {\n" + polygonC = "CollisionPoly " + collision.polygonsName() + "[] = {\n" + polygonIndex = 0 + for polygonType, polygons in collision.polygonGroups.items(): + polygonTypeC += '\t' + ootPolygonTypeToC(polygonType) + for polygon in polygons: + polygonC += '\t' + ootCollisionPolygonToC(polygon, + polygonType.ignoreCameraCollision, + polygonType.ignoreActorCollision, + polygonType.ignoreProjectileCollision, + polygonType.enableConveyor, + polygonIndex) + polygonIndex += 1 + polygonTypeC += '};\n\n' + polygonC += '};\n\n' + + data.source += polygonTypeC + polygonC + polygonTypesName = collision.polygonTypesName() + polygonsName = collision.polygonsName() + else: + polygonTypesName = '0' + polygonsName = '0' + + if len(collision.vertices) > 0: + data.header += "extern Vec3s " + collision.verticesName() + "[" + str(len(collision.vertices)) + "];\n" + data.source += "Vec3s " + collision.verticesName() + "[" + str(len(collision.vertices)) + "] = {\n" + for vertex in collision.vertices: + data.source += '\t' + ootCollisionVertexToC(vertex) + data.source += '};\n\n' + collisionVerticesName = collision.verticesName() + else: + collisionVerticesName = '0' + + if len(collision.waterBoxes) > 0: + data.header += "extern WaterBox " + collision.waterBoxesName() + "[];\n" + data.source += "WaterBox " + collision.waterBoxesName() + "[] = {\n" + for waterBox in collision.waterBoxes: + data.source += '\t' + ootWaterBoxToC(waterBox) + data.source += '};\n\n' + waterBoxesName = collision.waterBoxesName() + else: + waterBoxesName = '0' + + if len(collision.cameraData.camPosDict) > 0: + camDataName = "&" + collision.camDataName() + else: + camDataName = '0' + + data.header += "extern CollisionHeader " + collision.headerName() + ';\n' + data.source += "CollisionHeader " + collision.headerName() + ' = { ' + + if len(collision.bounds) == 2: + for bound in range(2): # min, max bound + for field in range(3): # x, y, z + data.source += str(collision.bounds[bound][field]) + ', ' + else: + data.source += '0, 0, 0, 0, 0, 0, ' + + data.source += \ + str(len(collision.vertices)) + ', ' +\ + collisionVerticesName + ', ' +\ + str(collision.polygonCount()) + ", " +\ + polygonsName + ', ' +\ + polygonTypesName + ', ' +\ + camDataName + ', ' +\ + str(len(collision.waterBoxes)) + ", " +\ + waterBoxesName + ' };\n\n' + + return data + + class OOT_ExportCollision(bpy.types.Operator): # set bl_ properties bl_idname = 'object.oot_export_collision' @@ -568,109 +746,38 @@ class OOT_ExportCollision(bpy.types.Operator): bl_options = {'REGISTER', 'UNDO', 'PRESET'} def execute(self, context): - romfileOutput = None - tempROM = None - try: - obj = None - if context.mode != 'OBJECT': - raise PluginError("Operator can only be used in object mode.") - if len(context.selected_objects) == 0: - raise PluginError("Object not selected.") - obj = context.active_object - #if type(obj.data) is not bpy.types.Mesh: - # raise PluginError("Mesh not selected.") - - #T, R, S = obj.matrix_world.decompose() - #objTransform = R.to_matrix().to_4x4() @ \ - # mathutils.Matrix.Diagonal(S).to_4x4() - #finalTransform = (blenderToSM64Rotation * \ - # (bpy.context.scene.blenderToSM64Scale)).to_4x4() - #finalTransform = mathutils.Matrix.Identity(4) + obj = None + if context.mode != 'OBJECT': + bpy.ops.object.mode_set(mode = "OBJECT") + if len(context.selected_objects) == 0: + raise PluginError("No object selected.") + obj = context.active_object + if type(obj.data) is not bpy.types.Mesh: + raise PluginError("No mesh object selected.") - scaleValue = bpy.context.scene.blenderToSM64Scale + finalTransform = mathutils.Matrix.Scale(context.scene.ootActorBlenderScale, 4) + + try: + scaleValue = bpy.context.scene.ootBlenderScale finalTransform = mathutils.Matrix.Diagonal(mathutils.Vector(( scaleValue, scaleValue, scaleValue))).to_4x4() - except Exception as e: - raisePluginError(self, e) - return {"CANCELLED"} - - try: - applyRotation([obj], math.radians(90), 'X') - if context.scene.colExportType == 'C': - exportPath, levelName = getPathAndLevel(context.scene.colCustomExport, - context.scene.colExportPath, context.scene.colLevelName, - context.scene.colLevelOption) - if not context.scene.colCustomExport: - applyBasicTweaks(exportPath) - exportCollisionC(obj, finalTransform, - exportPath, False, - context.scene.colIncludeChildren, - bpy.context.scene.colName, context.scene.colCustomExport, context.scene.colExportRooms, - context.scene.colExportHeaderType, context.scene.colGroupName, levelName) - self.report({'INFO'}, 'Success!') - elif context.scene.colExportType == 'Insertable Binary': - exportCollisionInsertableBinary(obj, finalTransform, - bpy.path.abspath(context.scene.colInsertableBinaryPath), - False, context.scene.colIncludeChildren) - self.report({'INFO'}, 'Success! Collision at ' + \ - context.scene.colInsertableBinaryPath) - else: - tempROM = tempName(context.scene.outputRom) - checkExpanded(bpy.path.abspath(context.scene.exportRom)) - romfileExport = \ - open(bpy.path.abspath(context.scene.exportRom), 'rb') - shutil.copy(bpy.path.abspath(context.scene.exportRom), - bpy.path.abspath(tempROM)) - romfileExport.close() - romfileOutput = open(bpy.path.abspath(tempROM), 'rb+') - levelParsed = parseLevelAtPointer(romfileOutput, - level_pointers[context.scene.colExportLevel]) - segmentData = levelParsed.segmentData + includeChildren = context.scene.ootColIncludeChildren + name = context.scene.ootColName + isCustomExport = context.scene.ootColCustomExport + folderName = context.scene.ootColFolder + exportPath = bpy.path.abspath(context.scene.ootColExportPath) - if context.scene.extendBank4: - ExtendBank0x04(romfileOutput, segmentData, - defaultExtendSegment4) + filepath = ootGetObjectPath(isCustomExport, exportPath, folderName) + exportCollisionToC(obj, finalTransform, includeChildren, name, isCustomExport, folderName, + filepath) - addrRange = \ - exportCollisionBinary(obj, finalTransform, romfileOutput, - int(context.scene.colStartAddr, 16), - int(context.scene.colEndAddr, 16), - False, context.scene.colIncludeChildren) - - segAddress = encodeSegmentedAddr(addrRange[0], segmentData) - if context.scene.set_addr_0x2A: - romfileOutput.seek(int(context.scene.addr_0x2A, 16) + 4) - romfileOutput.write(segAddress) - segPointer = bytesToHex(segAddress) - - romfileOutput.close() - - if os.path.exists(bpy.path.abspath(context.scene.outputRom)): - os.remove(bpy.path.abspath(context.scene.outputRom)) - os.rename(bpy.path.abspath(tempROM), - bpy.path.abspath(context.scene.outputRom)) - - self.report({'INFO'}, 'Success! Collision at (' + \ - hex(addrRange[0]) + ', ' + hex(addrRange[1]) + \ - ') (Seg. ' + segPointer + ').') - - applyRotation([obj], math.radians(-90), 'X') - return {'FINISHED'} # must return a set + self.report({'INFO'}, 'Success!') + return {'FINISHED'} except Exception as e: if context.mode != 'OBJECT': bpy.ops.object.mode_set(mode = 'OBJECT') - - applyRotation([obj], math.radians(-90), 'X') - - if context.scene.colExportType == 'Binary': - if romfileOutput is not None: - romfileOutput.close() - if tempROM is not None and os.path.exists(bpy.path.abspath(tempROM)): - os.remove(bpy.path.abspath(tempROM)) - obj.select_set(True) - context.view_layer.objects.active = obj raisePluginError(self, e) return {'CANCELLED'} # must return a set @@ -688,18 +795,15 @@ class OOT_ExportCollisionPanel(bpy.types.Panel): # called every frame def draw(self, context): col = self.layout.column() - propsColE = col.operator(OOT_ExportCollision.bl_idname) + col.operator(OOT_ExportCollision.bl_idname) - col.prop(context.scene, 'colIncludeChildren') - col.prop(context.scene, 'colCustomExport') - if context.scene.colCustomExport: - col.prop(context.scene, 'colExportPath') - prop_split(col, context.scene, 'colName', 'Name') - customExportWarning(col) + prop_split(col, context.scene, 'ootColName', 'Name') + if context.scene.ootColCustomExport: + prop_split(col, context.scene, 'ootColExportPath', "Custom Folder") else: - prop_split(col, context.scene, 'colExportLevel', 'Level') - if context.scene.colExportLevel == 'Custom': - prop_split(col, context.scene, 'colLevelName', 'Level Name') + prop_split(col, context.scene, 'ootColFolder', 'Object') + col.prop(context.scene, 'ootColCustomExport') + col.prop(context.scene, 'ootColIncludeChildren') oot_col_classes = ( @@ -713,7 +817,7 @@ oot_col_classes = ( oot_col_panel_classes = ( OOT_CollisionPanel, OOT_CameraPosPanel, - #OOT_ExportCollisionPanel, + OOT_ExportCollisionPanel, ) def oot_col_panel_register(): @@ -736,11 +840,13 @@ def oot_col_register(): bpy.types.Scene.ootColIncludeChildren = bpy.props.BoolProperty( name = 'Include child objects', default = True) bpy.types.Scene.ootColName = bpy.props.StringProperty( - name = 'Name', default = 'link') + name = 'Name', default = 'collision') bpy.types.Scene.ootColLevelName = bpy.props.StringProperty( name = 'Name', default = 'SCENE_YDAN') bpy.types.Scene.ootColCustomExport = bpy.props.BoolProperty( name = 'Custom Export Path') + bpy.types.Scene.ootColFolder = bpy.props.StringProperty( + name = 'Object Name', default = "gameplay_keep") bpy.types.Object.ootCameraPositionProperty = bpy.props.PointerProperty(type = OOTCameraPositionProperty) bpy.types.Material.ootCollisionProperty = bpy.props.PointerProperty(type = OOTMaterialCollisionProperty) @@ -753,6 +859,7 @@ def oot_col_unregister(): del bpy.types.Scene.ootColLevelName del bpy.types.Scene.ootColIncludeChildren del bpy.types.Scene.ootColCustomExport + del bpy.types.Scene.ootColFolder for cls in reversed(oot_col_classes): unregister_class(cls) diff --git a/fast64_internal/oot/oot_f3d_writer.py b/fast64_internal/oot/oot_f3d_writer.py index 994251d..029e2b8 100644 --- a/fast64_internal/oot/oot_f3d_writer.py +++ b/fast64_internal/oot/oot_f3d_writer.py @@ -1,4 +1,4 @@ -import shutil, copy, bpy +import shutil, copy, bpy, os from ..f3d.f3d_writer import * from ..f3d.f3d_material import * @@ -6,18 +6,24 @@ from bpy.utils import register_class, unregister_class from .oot_constants import * from .oot_utility import * from .oot_scene_room import * +from ..f3d.f3d_parser import * class OOTModel(FModel): - def __init__(self, f3dType, isHWv1, name, DLFormat): + def __init__(self, f3dType, isHWv1, name, DLFormat, drawLayerOverride): + self.drawLayerOverride = drawLayerOverride FModel.__init__(self, f3dType, isHWv1, name, DLFormat, GfxMatWriteMethod.WriteAll) def getDrawLayerV3(self, obj): return obj.ootDrawLayer def getRenderMode(self, drawLayer): + if self.drawLayerOverride: + drawLayerUsed = self.drawLayerOverride + else: + drawLayerUsed = drawLayer defaultRenderModes = bpy.context.scene.world.ootDefaultRenderModes - cycle1 = getattr(defaultRenderModes, drawLayer.lower() + "Cycle1") - cycle2 = getattr(defaultRenderModes, drawLayer.lower() + "Cycle2") + cycle1 = getattr(defaultRenderModes, drawLayerUsed.lower() + "Cycle1") + cycle2 = getattr(defaultRenderModes, drawLayerUsed.lower() + "Cycle2") return [cycle1, cycle2] def getTextureSuffixFromFormat(self, texFmt): @@ -34,6 +40,11 @@ class OOTModel(FModel): GfxList("0x" + format(i,'X') + '000000', GfxListTag.Material, DLFormat.Static))) return + def onAddMesh(self, fMesh, contextObj): + if contextObj is not None and hasattr(contextObj, 'ootDynamicTransform'): + if contextObj.ootDynamicTransform.billboard: + fMesh.draw.commands.append(SPMatrix("0x01000000", "G_MTX_MODELVIEW | G_MTX_NOPUSH | G_MTX_MUL")) + class OOTDynamicMaterialDrawLayer: def __init__(self, opaque, transparent): self.opaque = opaque @@ -89,6 +100,176 @@ class OOTVertexGroupInfo(VertexGroupInfo): self.vertexGroupToMatrixIndex = {} VertexGroupInfo.__init__(self) +#class OOTBox: +# def __init__(self): +# self.minBounds = [-2**8, -2**8] +# self.maxBounds = [2**8 - 1, 2**8 - 1] + + +class OOTObjectCategorizer: + def __init__(self): + self.sceneObj = None + self.roomObjs = [] + self.actors = [] + self.transitionActors = [] + self.meshes = [] + self.entrances = [] + self.waterBoxes = [] + + def sortObjects(self, allObjs): + for obj in allObjs: + if obj.data is None: + if obj.ootEmptyType == "Actor": + self.actors.append(obj) + elif obj.ootEmptyType == "Transition Actor": + self.transitionActors.append(obj) + elif obj.ootEmptyType == "Entrance": + self.entrances.append(obj) + elif obj.ootEmptyType == "Water Box": + self.waterBoxes.append(obj) + elif obj.ootEmptyType == "Room": + self.roomObjs.append(obj) + elif obj.ootEmptyType == "Scene": + self.sceneObj = obj + elif isinstance(obj.data, bpy.types.Mesh): + self.meshes.append(obj) + +# This also sets all origins relative to the scene object. +def ootDuplicateHierarchy(obj, ignoreAttr, includeEmpties, objectCategorizer): + # Duplicate objects to apply scale / modifiers / linked data + bpy.ops.object.select_all(action = 'DESELECT') + ootSelectMeshChildrenOnly(obj, includeEmpties) + obj.select_set(True) + bpy.context.view_layer.objects.active = obj + bpy.ops.object.duplicate() + try: + tempObj = bpy.context.view_layer.objects.active + allObjs = bpy.context.selected_objects + bpy.ops.object.make_single_user(obdata = True) + + objectCategorizer.sortObjects(allObjs) + meshObjs = objectCategorizer.meshes + bpy.ops.object.select_all(action = 'DESELECT') + for selectedObj in meshObjs: + selectedObj.select_set(True) + bpy.ops.object.transform_apply(location = False, + rotation = True, scale = True, properties = False) + + for selectedObj in meshObjs: + bpy.ops.object.select_all(action = 'DESELECT') + selectedObj.select_set(True) + bpy.context.view_layer.objects.active = selectedObj + for modifier in selectedObj.modifiers: + attemptModifierApply(modifier) + for selectedObj in meshObjs: + setOrigin(obj, selectedObj) + if ignoreAttr is not None: + for selectedObj in meshObjs: + if getattr(selectedObj, ignoreAttr): + for child in selectedObj.children: + bpy.ops.object.select_all(action = 'DESELECT') + child.select_set(True) + bpy.ops.object.parent_clear(type='CLEAR_KEEP_TRANSFORM') + selectedObj.parent.select_set(True) + bpy.ops.object.parent_set(keep_transform = True) + selectedObj.parent = None + applyRotation([tempObj], math.radians(90), 'X') + return tempObj, allObjs + except Exception as e: + cleanupDuplicatedObjects(allObjs) + obj.select_set(True) + bpy.context.view_layer.objects.active = obj + raise Exception(str(e)) + +def ootSelectMeshChildrenOnly(obj, includeEmpties): + isMesh = isinstance(obj.data, bpy.types.Mesh) + isEmpty = (obj.data is None or \ + isinstance(obj.data, bpy.types.Camera) or\ + isinstance(obj.data, bpy.types.Curve)) and includeEmpties + if (isMesh or isEmpty): + obj.select_set(True) + obj.original_name = obj.name + for child in obj.children: + ootSelectMeshChildrenOnly(child, includeEmpties) + +def ootCleanupScene(originalSceneObj, allObjs): + cleanupDuplicatedObjects(allObjs) + originalSceneObj.select_set(True) + bpy.context.view_layer.objects.active = originalSceneObj + +class OOTF3DContext(F3DContext): + def __init__(self, f3d, limbList, basePath): + self.limbList = limbList + self.dlList = [] # in the order they are rendered + self.isBillboard = False + materialContext = createF3DMat(None, preset = 'oot_shaded_solid') + #materialContext.f3d_mat.rdp_settings.g_mdsft_cycletype = "G_CYC_1CYCLE" + F3DContext.__init__(self, f3d, basePath, materialContext) + + def getLimbName(self, index): + return self.limbList[index] + + def getBoneName(self, index): + return "bone" + format(index, "03") + "_" + self.getLimbName(index) + + def vertexFormatPatterns(self, data): + # position, uv, color/normal + if "VTX" in data: + return ["VTX\s*\(([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*)\)"] + else: + return F3DContext.vertexFormatPatterns(self, data) + + # For game specific instance, override this to be able to identify which verts belong to which bone. + def setCurrentTransform(self, name): + if name[:4].lower() == "0x0d": + self.currentTransformName = self.getLimbName(self.dlList[int(int(name[4:], 16) / MTX_SIZE)].limbIndex) + else: + try: + pointer = hexOrDecInt(name) + except: + self.currentTransformName = name + else: + if pointer >> 24 == 0x01: + self.isBillboard = True + else: + print("Unhandled matrix: " + name) + + def processDLName(self, name): + # Commands loaded to 0x0C are material related only. + try: + pointer = hexOrDecInt(name) + except: + return name + else: + segment = pointer >> 24 + print("POINTER") + if segment >= 0x08 and segment <= 0x0D: + print("SETTING " + str(segment)) + setattr(self.materialContext.ootMaterial.opaque, "segment" + format(segment, "1X"), True) + setattr(self.materialContext.ootMaterial.transparent, "segment" + format(segment, "1X"), True) + return None + return name + + def processTextureName(self, textureName): + try: + pointer = hexOrDecInt(textureName) + except: + return textureName + else: + return textureName + #if (pointer >> 24) == 0x08: + # print("Unhandled OOT pointer: " + textureName) + + def clearMaterial(self): + self.isBillboard = False + clearOOTMaterialDrawLayerProperty(self.materialContext.ootMaterial.opaque) + clearOOTMaterialDrawLayerProperty(self.materialContext.ootMaterial.transparent) + F3DContext.clearMaterial(self) + + def postMaterialChanged(self): + clearOOTMaterialDrawLayerProperty(self.materialContext.ootMaterial.opaque) + clearOOTMaterialDrawLayerProperty(self.materialContext.ootMaterial.transparent) + # returns: # mesh, # anySkinnedFaces (to determine if skeleton should be flex) @@ -164,8 +345,8 @@ def ootProcessVertexGroup(fModel, meshObj, vertexGroup, convertTransformMatrix, # This doesn't handle case where vertices belong to a limb, but not triangles. # Therefore we create a dummy DL if anyConnectedToUnhandledBone: - fMesh = fModel.addMesh(vertexGroup, namePrefix, drawLayerOverride, False) - fMesh.draw.commands.append(SPEndDisplayList()) + fMesh = fModel.addMesh(vertexGroup, namePrefix, drawLayerOverride, False, bone) + fModel.endDraw(fMesh, bone) meshInfo.vertexGroupInfo.vertexGroupToMatrixIndex[currentGroupIndex] = nextDLIndex return fMesh, False else: @@ -189,7 +370,7 @@ def ootProcessVertexGroup(fModel, meshObj, vertexGroup, convertTransformMatrix, drawLayer = drawLayerOverride if drawLayerKey not in fMeshes: - fMesh = fModel.addMesh(vertexGroup, namePrefix, drawLayer, False) + fMesh = fModel.addMesh(vertexGroup, namePrefix, drawLayer, False, bone) fMeshes[drawLayerKey] = fMesh checkForF3dMaterialInFaces(meshObj, material) @@ -214,7 +395,7 @@ def ootProcessVertexGroup(fModel, meshObj, vertexGroup, convertTransformMatrix, if drawLayerKey not in fMeshes: # technically skinned, but for oot we don't have separate skinned/unskinned meshes. - fMesh = fModel.addMesh(vertexGroup, namePrefix, drawLayer, False) + fMesh = fModel.addMesh(vertexGroup, namePrefix, drawLayer, False, bone) fMeshes[drawLayerKey] = fMesh checkForF3dMaterialInFaces(meshObj, material) @@ -228,7 +409,7 @@ def ootProcessVertexGroup(fModel, meshObj, vertexGroup, convertTransformMatrix, meshObj, drawLayer, convertTextureData, currentGroupIndex, triConverterInfo, None, None) for drawLayer, fMesh in fMeshes.items(): - fMesh.draw.commands.append(SPEndDisplayList()) + fModel.endDraw(fMesh, bone) return fMeshes[drawLayerKey], len(skinnedFaces) > 0 @@ -237,6 +418,54 @@ ootEnumObjectMenu = [ ("Room", "Parent Room Settings", "Room"), ] +def ootConvertMeshToC(originalObj, finalTransform, f3dType, isHWv1, name, folderName, DLFormat, saveTextures, + exportPath, isCustomExport, drawLayer, removeVanillaData): + name = toAlnum(name) + + try: + obj, allObjs = ootDuplicateHierarchy(originalObj, None, False, OOTObjectCategorizer()) + + fModel = OOTModel(f3dType, isHWv1, name, DLFormat, drawLayer) + triConverterInfo = TriangleConverterInfo(obj, None, fModel.f3d, finalTransform, getInfoDict(obj)) + fMeshes = saveStaticModel(triConverterInfo, fModel, obj, finalTransform, fModel.name, + not saveTextures, False, 'oot') + + # Since we provide a draw layer override, there should only be one fMesh. + for drawLayer, fMesh in fMeshes.items(): + fMesh.draw.name = name + + ootCleanupScene(originalObj, allObjs) + + except Exception as e: + ootCleanupScene(originalObj, allObjs) + raise Exception(str(e)) + + data = CData() + data.source += '#include "ultra64.h"\n#include "global.h"\n' + if not isCustomExport: + data.source += '#include "' + folderName + '.h"\n\n' + else: + data.source += '\n' + + exportData = fModel.to_c( + TextureExportSettings(False, saveTextures, "test"), OOTGfxFormatter(ScrollMethod.Vertex)) + + data.append(exportData.all()) + + path = ootGetPath(exportPath, isCustomExport, 'assets/objects/', folderName, False, False) + writeCData(data, + os.path.join(path, name + '.h'), + os.path.join(path, name + '.c')) + + if not isCustomExport: + addIncludeFiles(folderName, path, name) + if removeVanillaData: + headerPath = os.path.join(path, folderName + '.h') + sourcePath = os.path.join(path, folderName + '.c') + removeDL(sourcePath, headerPath, name) + + + class OOT_DisplayListPanel(bpy.types.Panel): bl_label = "Display List Inspector" bl_idname = "OBJECT_PT_OOT_DL_Inspector" @@ -259,165 +488,97 @@ class OOT_DisplayListPanel(bpy.types.Panel): box.prop(obj, "ignore_render") box.prop(obj, "ignore_collision") + # Doesn't work since all static meshes are pre-transformed + #box.prop(obj.ootDynamicTransform, "billboard") + #drawParentSceneRoom(box, obj) -def ootExportF3DtoC(basePath, obj, DLFormat, transformMatrix, - f3dType, isHWv1, texDir, savePNG, texSeparate, includeChildren, name, levelName, groupName, customExport, headerType): - dirPath, texDir = getExportDir(customExport, basePath, headerType, - levelName, texDir, name) - - fModel = OOTModel(f3dType, isHWv1, name, DLFormat, 0) - fMesh = exportF3DCommon(obj, fModel, transformMatrix, - includeChildren, name, DLFormat, not savePNG) - - modelDirPath = os.path.join(dirPath, toAlnum(name)) - - if not os.path.exists(modelDirPath): - os.mkdir(modelDirPath) - - if headerType == 'Actor': - scrollName = 'actor_dl_' + name - elif headerType == 'Level': - scrollName = levelName + '_level_dl_' + name - - gfxFormatter = SM64GfxFormatter(ScrollMethod.Vertex) - exportData = fModel.to_c( - TextureExportSettings(texSeparate, savePNG, texDir), gfxFormatter) - staticData = exportData.staticData - dynamicData = exportData.dynamicData - texC = exportData.textureData - - scrollData, hasScrolling = fModel.to_c_vertex_scroll(scrollName, gfxFormatter) - scroll_data = scrollData.source - cDefineScroll = scrollData.header - - modifyTexScrollFiles(basePath, modelDirPath, cDefineScroll, scroll_data, hasScrolling) - - if DLFormat == DLFormat.Static: - staticData.append(dynamicData) - else: - geoString = writeMaterialFiles(basePath, modelDirPath, - '#include "actors/' + toAlnum(name) + '/header.h"', - '#include "actors/' + toAlnum(name) + '/material.inc.h"', - dynamicData.header, dynamicData.source, '', customExport) - - #fModel.save_textures(modelDirPath, not savePNG) - - #fModel.freePalettes() - - if texSeparate: - texCFile = open(os.path.join(modelDirPath, 'texture.inc.c'), 'w', newline='\n') - texCFile.write(texC.source) - texCFile.close() - - modelPath = os.path.join(modelDirPath, 'model.inc.c') - outFile = open(modelPath, 'w', newline='\n') - outFile.write(staticData.source) - outFile.close() - - headerPath = os.path.join(modelDirPath, 'header.h') - cDefFile = open(headerPath, 'w', newline='\n') - cDefFile.write(staticData.header) - cDefFile.close() - - if not customExport: - if headerType == 'Actor': - # Write to group files - if groupName == '' or groupName is None: - raise PluginError("Actor header type chosen but group name not provided.") - - groupPathC = os.path.join(dirPath, groupName + ".c") - groupPathH = os.path.join(dirPath, groupName + ".h") - - writeIfNotFound(groupPathC, '\n#include "' + toAlnum(name) + '/model.inc.c"', '') - writeIfNotFound(groupPathH, '\n#include "' + toAlnum(name) + '/header.h"', '\n#endif') - - if DLFormat != DLFormat.Static: # Change this - writeMaterialHeaders(basePath, - '#include "actors/' + toAlnum(name) + '/material.inc.c"', - '#include "actors/' + toAlnum(name) + '/material.inc.h"') - - texscrollIncludeC = '#include "actors/' + name + '/texscroll.inc.c"' - texscrollIncludeH = '#include "actors/' + name + '/texscroll.inc.h"' - texscrollGroup = groupName - texscrollGroupInclude = '#include "actors/' + groupName + '.h"' - - elif headerType == 'Level': - groupPathC = os.path.join(dirPath, "leveldata.c") - groupPathH = os.path.join(dirPath, "header.h") - - writeIfNotFound(groupPathC, '\n#include "levels/' + levelName + '/' + \ - toAlnum(name) + '/model.inc.c"', '') - writeIfNotFound(groupPathH, '\n#include "levels/' + levelName + '/' + \ - toAlnum(name) + '/header.h"', '\n#endif') - - if DLFormat != DLFormat.Static: # Change this - writeMaterialHeaders(basePath, - '#include "levels/' + levelName + '/' + toAlnum(name) + '/material.inc.c"', - '#include "levels/' + levelName + '/' + toAlnum(name) + '/material.inc.h"') - - texscrollIncludeC = '#include "levels/' + levelName + '/' + name + '/texscroll.inc.c"' - texscrollIncludeH = '#include "levels/' + levelName + '/' + name + '/texscroll.inc.h"' - texscrollGroup = levelName - texscrollGroupInclude = '#include "levels/' + levelName + '/header.h"' - - modifyTexScrollHeadersGroup(basePath, texscrollIncludeC, texscrollIncludeH, - texscrollGroup, cDefineScroll, texscrollGroupInclude, hasScrolling) - - if bpy.context.mode != 'OBJECT': - bpy.ops.object.mode_set(mode = 'OBJECT') - -class OOT_ExportDL(bpy.types.Operator): +class OOT_ImportDL(bpy.types.Operator): # set bl_ properties - bl_idname = 'object.oot_export_dl' - bl_label = "Export Display List" + bl_idname = 'object.oot_import_dl' + bl_label = "Import DL" bl_options = {'REGISTER', 'UNDO', 'PRESET'} + # Called on demand (i.e. button press, menu item) + # Can also be called from operator search menu (Spacebar) def execute(self, context): + obj = None + if context.mode != 'OBJECT': + bpy.ops.object.mode_set(mode = "OBJECT") + try: - if context.mode != 'OBJECT': - raise PluginError("Operator can only be used in object mode.") - allObjs = context.selected_objects - if len(allObjs) == 0: - raise PluginError("No objects selected.") - obj = context.selected_objects[0] - if not isinstance(obj.data, bpy.types.Mesh): - raise PluginError("Object is not a mesh.") + name = context.scene.ootDLImportName + folderName = context.scene.ootDLImportFolderName + importPath = bpy.path.abspath(context.scene.ootDLImportCustomPath) + isCustomImport = context.scene.ootDLImportUseCustomPath + scale = context.scene.ootActorBlenderScale + basePath = bpy.path.abspath(context.scene.ootDecompPath) + removeDoubles = context.scene.ootDLRemoveDoubles + importNormals = context.scene.ootDLImportNormals + drawLayer = bpy.context.scene.ootDLImportDrawLayer - scaleValue = bpy.context.scene.ootBlenderScale - finalTransform = mathutils.Matrix.Diagonal(mathutils.Vector(( - scaleValue, scaleValue, scaleValue))).to_4x4() + filepaths = [ootGetObjectPath(isCustomImport, importPath, folderName)] + if not isCustomImport: + filepaths.append(os.path.join(bpy.context.scene.ootDecompPath, "assets/objects/gameplay_keep/gameplay_keep.c")) - except Exception as e: - raisePluginError(self, e) - return {"CANCELLED"} - - try: - applyRotation([obj], math.radians(90), 'X') + importMeshC(filepaths, name, scale, removeDoubles, importNormals, drawLayer, + OOTF3DContext(F3D("F3DEX2/LX2", False), [name], basePath)) - exportPath, levelName = getPathAndLevel(context.scene.ootDLCustomExport, - context.scene.ootExportPath, context.scene.ootDLLevelName, - context.scene.ootDLLevelOption) - #if not context.scene.ootDLCustomExport: - # applyBasicTweaks(exportPath) - ootExportF3DtoC(exportPath, obj, - DLFormat.Static if context.scene.ootDLExportisStatic else DLFormat.Dynamic, finalTransform, - context.scene.f3d_type, context.scene.isHWv1, - bpy.context.scene.ootDLTexDir, - bpy.context.scene.ootDLSaveTextures or bpy.context.scene.ignoreTextureRestrictions, - bpy.context.scene.ootDLSeparateTextureDef, - bpy.context.scene.ootDLincludeChildren, bpy.context.scene.ootDLName, levelName, context.scene.ootDLGroupName, - context.scene.ootDLCustomExport, - context.scene.ootDLExportHeaderType) - self.report({'INFO'}, 'Success!') - - applyRotation([obj], math.radians(-90), 'X') - return {'FINISHED'} # must return a set + self.report({'INFO'}, 'Success!') + return {'FINISHED'} + + except Exception as e: + if context.mode != 'OBJECT': + bpy.ops.object.mode_set(mode = 'OBJECT') + raisePluginError(self, e) + return {'CANCELLED'} # must return a set + +class OOT_ExportDL(bpy.types.Operator): + # set bl_ properties + bl_idname = 'object.oot_export_dl' + bl_label = "Export DL" + bl_options = {'REGISTER', 'UNDO', 'PRESET'} + + # Called on demand (i.e. button press, menu item) + # Can also be called from operator search menu (Spacebar) + def execute(self, context): + obj = None + if context.mode != 'OBJECT': + bpy.ops.object.mode_set(mode = "OBJECT") + if len(context.selected_objects) == 0: + raise PluginError("Mesh not selected.") + obj = context.active_object + if type(obj.data) is not bpy.types.Mesh: + raise PluginError("Mesh not selected.") + + finalTransform = mathutils.Matrix.Scale(context.scene.ootActorBlenderScale, 4) + + try: + #exportPath, levelName = getPathAndLevel(context.scene.geoCustomExport, + # context.scene.geoExportPath, context.scene.geoLevelName, + # context.scene.geoLevelOption) + + saveTextures = bpy.context.scene.saveTextures or bpy.context.scene.ignoreTextureRestrictions + isHWv1 = context.scene.isHWv1 + f3dType = context.scene.f3d_type + + name = context.scene.ootDLExportName + folderName = context.scene.ootDLExportFolderName + exportPath = bpy.path.abspath(context.scene.ootDLExportCustomPath) + isCustomExport = context.scene.ootDLExportUseCustomPath + drawLayer = context.scene.ootDLExportDrawLayer + removeVanillaData = context.scene.ootDLRemoveVanillaData + + ootConvertMeshToC(obj, finalTransform, + f3dType, isHWv1, name, folderName, DLFormat.Static, saveTextures, + exportPath, isCustomExport, drawLayer, removeVanillaData) + + self.report({'INFO'}, 'Success!') + return {'FINISHED'} except Exception as e: if context.mode != 'OBJECT': bpy.ops.object.mode_set(mode = 'OBJECT') - applyRotation([obj], math.radians(-90), 'X') raisePluginError(self, e) return {'CANCELLED'} # must return a set @@ -435,41 +596,29 @@ class OOT_ExportDLPanel(bpy.types.Panel): # called every frame def draw(self, context): col = self.layout.column() - propsDLE = col.operator(OOT_ExportDL.bl_idname) - - col.prop(context.scene, 'ootDLExportisStatic') + col.operator(OOT_ExportDL.bl_idname) - col.prop(context.scene, 'ootDLCustomExport') - if context.scene.ootDLCustomExport: - col.prop(context.scene, 'ootDLExportPath') - prop_split(col, context.scene, 'ootDLName', 'Name') - if not bpy.context.scene.ignoreTextureRestrictions: - col.prop(context.scene, 'saveTextures') - if context.scene.saveTextures: - prop_split(col, context.scene, 'ootDLTexDir', - 'Texture Include Path') - col.prop(context.scene, 'ootDLSeparateTextureDef') - customExportWarning(col) - else: - prop_split(col, context.scene, 'ootDLExportHeaderType', 'Export Type') - prop_split(col, context.scene, 'ootDLName', 'Name') - if context.scene.ootDLExportHeaderType == 'Actor': - prop_split(col, context.scene, 'ootDLGroupName', 'Group Name') - elif context.scene.ootDLExportHeaderType == 'Level': - prop_split(col, context.scene, 'ootDLLevelOption', 'Level') - if context.scene.ootDLLevelOption == 'custom': - prop_split(col, context.scene, 'ootDLLevelName', 'Level Name') - if not bpy.context.scene.ignoreTextureRestrictions: - col.prop(context.scene, 'saveTextures') - if context.scene.saveTextures: - col.prop(context.scene, 'ootDLSeparateTextureDef') - - #decompFolderMessage(col) - #writeBox = makeWriteInfoBox(col) - #writeBoxExportType(writeBox, context.scene.ootDLExportHeaderType, - # context.scene.ootDLName, context.scene.ootDLLevelName, context.scene.ootDLLevelOption) - - col.prop(context.scene, 'ootDLincludeChildren') + prop_split(col, context.scene, 'ootDLExportName', "DL") + if context.scene.ootDLExportUseCustomPath: + prop_split(col, context.scene, 'ootDLExportCustomPath', "Folder") + else: + prop_split(col, context.scene, 'ootDLExportFolderName', "Object") + prop_split(col, context.scene, "ootDLExportDrawLayer", "Export Draw Layer") + col.prop(context.scene, "ootDLExportUseCustomPath") + col.prop(context.scene, "ootDLRemoveVanillaData") + + col.operator(OOT_ImportDL.bl_idname) + + prop_split(col, context.scene, 'ootDLImportName', "DL") + if context.scene.ootDLImportUseCustomPath: + prop_split(col, context.scene, 'ootDLImportCustomPath', "File") + else: + prop_split(col, context.scene, 'ootDLImportFolderName', "Object") + prop_split(col, context.scene, "ootDLImportDrawLayer", "Import Draw Layer") + + col.prop(context.scene, "ootDLImportUseCustomPath") + col.prop(context.scene, "ootDLRemoveDoubles") + col.prop(context.scene, "ootDLImportNormals") class OOTDefaultRenderModesProperty(bpy.types.PropertyGroup): expandTab : bpy.props.BoolProperty() @@ -524,7 +673,16 @@ class OOT_MaterialPanel(bpy.types.Panel): layout = self.layout mat = context.material col = layout.column() - drawOOTMaterialProperty(col.box().column(), mat.ootMaterial, mat.f3d_mat.draw_layer.oot) + + if hasattr(context, "object") and context.object is not None and \ + context.object.parent is not None and isinstance(context.object.parent.data, bpy.types.Armature): + drawLayer = context.object.parent.ootDrawLayer + if drawLayer != mat.f3d_mat.draw_layer.oot: + col.label(text = "Draw layer is being overriden by skeleton.", icon = "ERROR") + else: + drawLayer = mat.f3d_mat.draw_layer.oot + + drawOOTMaterialProperty(col.box().column(), mat.ootMaterial, drawLayer) def drawOOTMaterialDrawLayerProperty(layout, matDrawLayerProp, suffix): #layout.box().row().label(text = title) @@ -536,6 +694,11 @@ def drawOOTMaterialDrawLayerProperty(layout, matDrawLayerProp, suffix): name = "Segment " + format(i, 'X') + " " + suffix col.prop(matDrawLayerProp, "segment" + format(i, 'X'), text = name) +def clearOOTMaterialDrawLayerProperty(matDrawLayerProp): + for i in range(0x08, 0x0E): + setattr(matDrawLayerProp, "segment" + format(i, 'X'), False) + + drawLayerSuffix = { "Opaque" : "OPA", "Transparent" : 'XLU', @@ -543,6 +706,8 @@ drawLayerSuffix = { } def drawOOTMaterialProperty(layout, matProp, drawLayer): + if drawLayer == "Overlay": + return suffix = "(" + drawLayerSuffix[drawLayer] + ")" layout.box().column().label(text = "OOT Dynamic Material Properties " + suffix) layout.label(text = "See gSPSegment calls in z_scene_table.c.") @@ -562,11 +727,16 @@ class OOTDynamicMaterialProperty(bpy.types.PropertyGroup): opaque : bpy.props.PointerProperty(type = OOTDynamicMaterialDrawLayerProperty) transparent : bpy.props.PointerProperty(type = OOTDynamicMaterialDrawLayerProperty) +class OOTDynamicTransformProperty(bpy.types.PropertyGroup): + billboard : bpy.props.BoolProperty(name = "Billboard") + oot_dl_writer_classes = ( OOTDefaultRenderModesProperty, OOTDynamicMaterialDrawLayerProperty, OOTDynamicMaterialProperty, - #OOT_ExportDL, + OOTDynamicTransformProperty, + OOT_ExportDL, + OOT_ImportDL, ) oot_dl_writer_panel_classes = ( @@ -574,6 +744,7 @@ oot_dl_writer_panel_classes = ( OOT_DisplayListPanel, OOT_DrawLayersPanel, OOT_MaterialPanel, + OOT_ExportDLPanel, ) def oot_dl_writer_panel_register(): @@ -589,34 +760,36 @@ def oot_dl_writer_register(): register_class(cls) bpy.types.Object.ootDrawLayer = bpy.props.EnumProperty(items = ootEnumDrawLayers, default = 'Opaque') + + # Doesn't work since all static meshes are pre-transformed + #bpy.types.Object.ootDynamicTransform = bpy.props.PointerProperty(type = OOTDynamicTransformProperty) bpy.types.World.ootDefaultRenderModes = bpy.props.PointerProperty(type = OOTDefaultRenderModesProperty) - bpy.types.Scene.ootLevelDLExport = bpy.props.EnumProperty(items = ootEnumSceneID, - name = 'Level', default = 'SCENE_YDAN') - bpy.types.Scene.ootDLExportPath = bpy.props.StringProperty( - name = 'Directory', subtype = 'FILE_PATH') - bpy.types.Scene.ootDLExportisStatic = bpy.props.BoolProperty( - name = 'Static DL', default = True) - bpy.types.Scene.ootDLDefinePath = bpy.props.StringProperty( - name = 'Definitions Filepath', subtype = 'FILE_PATH') - bpy.types.Scene.ootDLTexDir = bpy.props.StringProperty( - name ='Include Path', default = 'levels/bob') - bpy.types.Scene.ootDLSeparateTextureDef = bpy.props.BoolProperty( - name = 'Save texture.inc.c separately') - bpy.types.Scene.ootDLincludeChildren = bpy.props.BoolProperty( - name = 'Include Children') - bpy.types.Scene.ootDLName = bpy.props.StringProperty( - name = 'Name', default = 'mario') - bpy.types.Scene.ootDLCustomExport = bpy.props.BoolProperty( - name = 'Custom Export Path') - bpy.types.Scene.ootDLExportHeaderType = bpy.props.EnumProperty( - items = enumExportHeaderType, name = 'Header Export', default = 'Actor') - bpy.types.Scene.ootDLGroupName = bpy.props.StringProperty(name = 'Group Name', - default = 'group0') - bpy.types.Scene.ootDLLevelName = bpy.props.StringProperty(name = 'Level', - default = 'bob') - bpy.types.Scene.ootDLLevelOption = bpy.props.EnumProperty( - items = ootEnumSceneID, name = 'Level', default = 'SCENE_YDAN') + bpy.types.Scene.ootDLExportName = bpy.props.StringProperty( + name = "DL Name", default = "gBoulderFragmentsDL") + bpy.types.Scene.ootDLExportFolderName = bpy.props.StringProperty( + name = "DL Folder", default = "gameplay_keep") + bpy.types.Scene.ootDLExportCustomPath = bpy.props.StringProperty( + name ='Custom DL Path', subtype = 'FILE_PATH') + bpy.types.Scene.ootDLExportUseCustomPath = bpy.props.BoolProperty( + name = "Use Custom Path") + bpy.types.Scene.ootDLRemoveVanillaData = bpy.props.BoolProperty( + name = "Replace Vanilla DLs") + + bpy.types.Scene.ootDLImportName = bpy.props.StringProperty( + name = "DL Name", default = "gBoulderFragmentsDL") + bpy.types.Scene.ootDLImportFolderName = bpy.props.StringProperty( + name = "DL Folder", default = "gameplay_keep") + bpy.types.Scene.ootDLImportCustomPath = bpy.props.StringProperty( + name ='Custom DL Path', subtype = 'FILE_PATH') + bpy.types.Scene.ootDLImportUseCustomPath = bpy.props.BoolProperty( + name = "Use Custom Path") + + bpy.types.Scene.ootDLRemoveDoubles = bpy.props.BoolProperty(name = "Remove Doubles", default = True) + bpy.types.Scene.ootDLImportNormals = bpy.props.BoolProperty(name = "Import Normals", default = True) + bpy.types.Scene.ootDLImportDrawLayer = bpy.props.EnumProperty(name = "Draw Layer", items = ootEnumDrawLayers) + + bpy.types.Scene.ootDLExportDrawLayer = bpy.props.EnumProperty(name = "Draw Layer", items = ootEnumDrawLayers) bpy.types.Material.ootMaterial = bpy.props.PointerProperty(type = OOTDynamicMaterialProperty) bpy.types.Object.ootObjectMenu = bpy.props.EnumProperty(items = ootEnumObjectMenu) @@ -625,17 +798,22 @@ def oot_dl_writer_unregister(): for cls in reversed(oot_dl_writer_classes): unregister_class(cls) - del bpy.types.Scene.ootLevelDLExport - del bpy.types.Scene.ootDLExportPath - del bpy.types.Scene.ootDLExportisStatic - del bpy.types.Scene.ootDLDefinePath - del bpy.types.Scene.ootDLTexDir - del bpy.types.Scene.ootDLSeparateTextureDef - del bpy.types.Scene.ootDLincludeChildren - del bpy.types.Scene.ootDLName - del bpy.types.Scene.ootDLCustomExport - del bpy.types.Scene.ootDLExportHeaderType - del bpy.types.Scene.ootDLGroupName - del bpy.types.Scene.ootDLLevelName - del bpy.types.Scene.ootDLLevelOption - del bpy.types.Material.ootMaterial \ No newline at end of file + del bpy.types.Scene.ootDLExportName + del bpy.types.Scene.ootDLExportFolderName + del bpy.types.Scene.ootDLExportCustomPath + del bpy.types.Scene.ootDLExportUseCustomPath + del bpy.types.Scene.ootDLRemoveVanillaData + + del bpy.types.Scene.ootDLImportName + del bpy.types.Scene.ootDLImportFolderName + del bpy.types.Scene.ootDLImportCustomPath + del bpy.types.Scene.ootDLImportUseCustomPath + + del bpy.types.Scene.ootDLRemoveDoubles + del bpy.types.Scene.ootDLImportNormals + del bpy.types.Scene.ootDLImportDrawLayer + + del bpy.types.Scene.ootDLExportDrawLayer + + del bpy.types.Material.ootMaterial + del bpy.types.Object.ootObjectMenu \ No newline at end of file diff --git a/fast64_internal/oot/oot_level_classes.py b/fast64_internal/oot/oot_level_classes.py index 435cb51..33d642d 100644 --- a/fast64_internal/oot/oot_level_classes.py +++ b/fast64_internal/oot/oot_level_classes.py @@ -167,7 +167,7 @@ class OOTScene: def addRoom(self, roomIndex, roomName, meshType): roomModel = self.model.addSubModel( - OOTModel(self.model.f3d.F3D_VER, self.model.f3d._HW_VERSION_1, roomName + '_dl', self.model.DLFormat)) + OOTModel(self.model.f3d.F3D_VER, self.model.f3d._HW_VERSION_1, roomName + '_dl', self.model.DLFormat, None)) room = OOTRoom(roomIndex, roomName, roomModel, meshType) if roomIndex in self.rooms: raise PluginError("Repeat room index " + str(roomIndex) + " for " + str(roomName)) diff --git a/fast64_internal/oot/oot_level_writer.py b/fast64_internal/oot/oot_level_writer.py index 3e7ea77..55b47c5 100644 --- a/fast64_internal/oot/oot_level_writer.py +++ b/fast64_internal/oot/oot_level_writer.py @@ -17,103 +17,6 @@ from io import BytesIO import bpy, bmesh, os, math, re, shutil, mathutils -#class OOTBox: -# def __init__(self): -# self.minBounds = [-2**8, -2**8] -# self.maxBounds = [2**8 - 1, 2**8 - 1] - - -class OOTObjectCategorizer: - def __init__(self): - self.sceneObj = None - self.roomObjs = [] - self.actors = [] - self.transitionActors = [] - self.meshes = [] - self.entrances = [] - self.waterBoxes = [] - - def sortObjects(self, allObjs): - for obj in allObjs: - if obj.data is None: - if obj.ootEmptyType == "Actor": - self.actors.append(obj) - elif obj.ootEmptyType == "Transition Actor": - self.transitionActors.append(obj) - elif obj.ootEmptyType == "Entrance": - self.entrances.append(obj) - elif obj.ootEmptyType == "Water Box": - self.waterBoxes.append(obj) - elif obj.ootEmptyType == "Room": - self.roomObjs.append(obj) - elif obj.ootEmptyType == "Scene": - self.sceneObj = obj - elif isinstance(obj.data, bpy.types.Mesh): - self.meshes.append(obj) - -# This also sets all origins relative to the scene object. -def ootDuplicateHierarchy(obj, ignoreAttr, includeEmpties, objectCategorizer): - # Duplicate objects to apply scale / modifiers / linked data - bpy.ops.object.select_all(action = 'DESELECT') - ootSelectMeshChildrenOnly(obj, includeEmpties) - obj.select_set(True) - bpy.context.view_layer.objects.active = obj - bpy.ops.object.duplicate() - try: - tempObj = bpy.context.view_layer.objects.active - allObjs = bpy.context.selected_objects - bpy.ops.object.make_single_user(obdata = True) - - objectCategorizer.sortObjects(allObjs) - meshObjs = objectCategorizer.meshes - bpy.ops.object.select_all(action = 'DESELECT') - for selectedObj in meshObjs: - selectedObj.select_set(True) - bpy.ops.object.transform_apply(location = False, - rotation = True, scale = True, properties = False) - - for selectedObj in meshObjs: - bpy.ops.object.select_all(action = 'DESELECT') - selectedObj.select_set(True) - bpy.context.view_layer.objects.active = selectedObj - for modifier in selectedObj.modifiers: - attemptModifierApply(modifier) - for selectedObj in meshObjs: - setOrigin(obj, selectedObj) - if ignoreAttr is not None: - for selectedObj in meshObjs: - if getattr(selectedObj, ignoreAttr): - for child in selectedObj.children: - bpy.ops.object.select_all(action = 'DESELECT') - child.select_set(True) - bpy.ops.object.parent_clear(type='CLEAR_KEEP_TRANSFORM') - selectedObj.parent.select_set(True) - bpy.ops.object.parent_set(keep_transform = True) - selectedObj.parent = None - applyRotation([tempObj], math.radians(90), 'X') - return tempObj, allObjs - except Exception as e: - cleanupDuplicatedObjects(allObjs) - obj.select_set(True) - bpy.context.view_layer.objects.active = obj - raise Exception(str(e)) - -def ootSelectMeshChildrenOnly(obj, includeEmpties): - isMesh = isinstance(obj.data, bpy.types.Mesh) - isEmpty = (obj.data is None or \ - isinstance(obj.data, bpy.types.Camera) or\ - isinstance(obj.data, bpy.types.Curve)) and includeEmpties - if (isMesh or isEmpty): - obj.select_set(True) - obj.original_name = obj.name - for child in obj.children: - ootSelectMeshChildrenOnly(child, includeEmpties) - -def ootCleanupScene(originalSceneObj, allObjs): - cleanupDuplicatedObjects(allObjs) - originalSceneObj.select_set(True) - bpy.context.view_layer.objects.active = originalSceneObj - def sceneNameFromID(sceneID): if sceneID in ootSceneIDToName: return ootSceneIDToName[sceneID] @@ -339,7 +242,7 @@ def ootConvertScene(originalSceneObj, transformMatrix, raise PluginError("The scene has no child empties with the 'Room' empty type.") try: - scene = OOTScene(sceneName, OOTModel(f3dType, isHWv1, sceneName + '_dl', DLFormat)) + scene = OOTScene(sceneName, OOTModel(f3dType, isHWv1, sceneName + '_dl', DLFormat, None)) readSceneData(scene, sceneObj.ootSceneHeader, sceneObj.ootAlternateSceneHeaders) processedRooms = set() @@ -372,7 +275,7 @@ def ootConvertScene(originalSceneObj, transformMatrix, scene.pathList.append(ootConvertPath(sceneName, len(scene.pathList), obj, relativeTransform)) scene.validateIndices() - exportCollisionCommon(scene.collision, sceneObj, allObjs, transformMatrix, True, sceneName) + exportCollisionCommon(scene.collision, sceneObj, transformMatrix, True, sceneName) ootCleanupScene(originalSceneObj, allObjs) diff --git a/fast64_internal/oot/oot_skeleton.py b/fast64_internal/oot/oot_skeleton.py index c30d59b..0218d0f 100644 --- a/fast64_internal/oot/oot_skeleton.py +++ b/fast64_internal/oot/oot_skeleton.py @@ -1,5 +1,6 @@ -import shutil, copy, mathutils, bpy, math, os +import shutil, copy, mathutils, bpy, math, os, re +from ..f3d.f3d_parser import * from ..f3d.f3d_writer import * from ..f3d.f3d_material import TextureProperty, tmemUsageUI from bpy.utils import register_class, unregister_class @@ -8,11 +9,18 @@ from .oot_utility import * from .oot_f3d_writer import * from ..utility import * +ootEnumBoneType = [ + ("Default", "Default", "Default"), + ("Custom DL", "Custom DL", "Custom DL"), + ("Ignore", "Ignore", "Ignore"), +] + class OOTSkeleton(): def __init__(self, name): - self.name = name + "Skel" + self.name = name self.segmentID = None self.limbRoot = None + self.hasLOD = False def createLimbList(self): if self.limbRoot is None: @@ -56,7 +64,7 @@ class OOTSkeleton(): data.source += "void* " + self.limbsName() + "[" + str(self.getNumLimbs()) + "] = {\n" for limb in limbList: - limbData.source += limb.toC() + limbData.source += limb.toC(self.hasLOD) data.source += '\t&' + limb.name() + ',\n' limbData.source += '\n' data.source += "};\n\n" @@ -88,17 +96,31 @@ class OOTLimb(): self.children = [] self.inverseRotation = None - def toC(self): - return "StandardLimb " + self.name() + " = { " +\ + def toC(self, isLOD): + if not isLOD: + data = "StandardLimb " + else: + data = "LodLimb " + + data += self.name() + " = { " +\ "{ " + str(int(round(self.translation[0]))) + ", " + \ str(int(round(self.translation[1]))) + ", " + \ str(int(round(self.translation[2]))) + " }, " + \ str(self.firstChildIndex) + ", " +\ - str(self.nextSiblingIndex) + ", " + \ - (self.DL.name if self.DL is not None else "NULL") + " };\n" + str(self.nextSiblingIndex) + ", " + + if not isLOD: + data += (self.DL.name if self.DL is not None else "NULL") + else: + data += "{ " + (self.DL.name if self.DL is not None else "NULL") + ", " +\ + (self.lodDL.name if self.lodDL is not None else "NULL") + " }" + + data += " };\n" + + return data def name(self): - return self.skeletonName + "Limb_" + str(self.index) + return self.skeletonName + "Limb_" + format(self.index, '03') def getNumLimbs(self): numLimbs = 1 @@ -108,9 +130,7 @@ class OOTLimb(): def getNumDLs(self): numDLs = 0 - if self.DL is not None: - numDLs += 1 - if self.lodDL is not None: + if self.DL is not None or self.lodDL is not None: numDLs += 1 for child in self.children: @@ -156,6 +176,7 @@ def setBoneNonRotated(armatureObj, boneName, restPoseRotations): poseBone.constraints.remove(poseBone.constraints[0]) rotation = bone.matrix_local.inverted().decompose()[1] + armatureObj.pose.bones[boneName].rotation_mode = "QUATERNION" armatureObj.pose.bones[boneName].rotation_quaternion = rotation restPoseRotations[boneName] = rotation @@ -259,9 +280,8 @@ def ootConvertArmatureToSkeletonWithoutMesh(originalArmatureObj, convertTransfor None, name, False, True, "Opaque") return skeleton, restPoseRotations -def ootConvertArmatureToSkeletonWithMesh(originalArmatureObj, convertTransformMatrix, - f3dType, isHWv1, name, DLFormat, convertTextureData, drawLayer): - fModel = OOTModel(f3dType, isHWv1, name, DLFormat) +def ootConvertArmatureToSkeletonWithMesh(originalArmatureObj, convertTransformMatrix, fModel, name, convertTextureData, drawLayer): + skeleton, fModel, restPoseRotations = ootConvertArmatureToSkeleton(originalArmatureObj, convertTransformMatrix, fModel, name, convertTextureData, False, drawLayer) return skeleton, fModel @@ -328,6 +348,13 @@ def ootProcessBone(fModel, boneName, parentLimb, nextIndex, meshObj, armatureObj convertTransformMatrix, armatureObj, namePrefix, meshInfo, drawLayer, convertTextureData) + if bone.ootBoneType == "Custom DL": + if mesh is not None: + raise PluginError(bone.name + " is set to use a custom DL but still has geometry assigned to it. Remove this geometry from this bone.") + else: + # Dummy data, only used so that name is set correctly + mesh = FMesh(bone.ootCustomDLName, DLFormat.Static) + DL = None if mesh is not None: if not bone.use_deform: @@ -353,14 +380,40 @@ def ootProcessBone(fModel, boneName, parentLimb, nextIndex, meshObj, armatureObj return nextIndex def ootConvertArmatureToC(originalArmatureObj, convertTransformMatrix, - f3dType, isHWv1, skeletonName, folderName, DLFormat, savePNG, exportPath, isCustomExport, drawLayer): + f3dType, isHWv1, skeletonName, folderName, DLFormat, savePNG, exportPath, isCustomExport, drawLayer, removeVanillaData): skeletonName = toAlnum(skeletonName) + fModel = OOTModel(f3dType, isHWv1, skeletonName, DLFormat, drawLayer) skeleton, fModel = ootConvertArmatureToSkeletonWithMesh(originalArmatureObj, convertTransformMatrix, - f3dType, isHWv1, skeletonName, DLFormat, not savePNG, drawLayer) + fModel, skeletonName, not savePNG, drawLayer) + + if originalArmatureObj.ootFarLOD is not None: + lodSkeleton, fModel = ootConvertArmatureToSkeletonWithMesh(originalArmatureObj.ootFarLOD, convertTransformMatrix, + fModel, skeletonName + "_lod", not savePNG, drawLayer) + else: + lodSkeleton = None + + if lodSkeleton is not None: + skeleton.hasLOD = True + limbList = skeleton.createLimbList() + lodLimbList = lodSkeleton.createLimbList() + + if len(limbList) != len(lodLimbList): + raise PluginError(originalArmatureObj.name + " cannot use " + originalArmatureObj.ootFarLOD.name + \ + "as LOD because they do not have the same bone structure.") + + for i in range(len(limbList)): + limbList[i].lodDL = lodLimbList[i].DL + limbList[i].isFlex |= lodLimbList[i].isFlex + data = CData() - data.source += '#include "ultra64.h"\n#include "global.h"\n\n' + data.source += '#include "ultra64.h"\n#include "global.h"\n' + if not isCustomExport: + data.source += '#include "' + folderName + '.h"\n\n' + else: + data.source += '\n' + exportData = fModel.to_c( TextureExportSettings(False, savePNG, "test"), OOTGfxFormatter(ScrollMethod.Vertex)) skeletonC = skeleton.toC() @@ -375,6 +428,295 @@ def ootConvertArmatureToC(originalArmatureObj, convertTransformMatrix, if not isCustomExport: addIncludeFiles(folderName, path, skeletonName) + if removeVanillaData: + ootRemoveSkeleton(path, folderName, skeletonName) + +class OOTDLEntry: + def __init__(self, dlName, limbIndex): + self.dlName = dlName + self.limbIndex = limbIndex + +def ootGetSkeleton(skeletonData, skeletonName, continueOnError): + # TODO: Does this handle non flex skeleton? + matchResult = re.search("(Flex)?SkeletonHeader\s*" + re.escape(skeletonName) + \ + "\s*=\s*\{\s*([^,\s]*)\s*,\s*([^,\s]*)\s*(,\s*([^,\s]*))?\s*\}\s*;\s*", skeletonData) + if matchResult is None: + if continueOnError: + return None + else: + raise PluginError("Cannot find skeleton named " + skeletonName) + return matchResult + +def ootGetLimbs(skeletonData, limbsName, continueOnError): + matchResult = re.search("(static\s*)?void\s*\*\s*" + re.escape(limbsName) + \ + "\s*\[\s*[0-9]*\s*\]\s*=\s*\{([^\}]*)\}\s*;\s*", skeletonData, re.DOTALL) + if matchResult is None: + if continueOnError: + return None + else: + raise PluginError("Cannot find skeleton limbs named " + limbsName) + return matchResult + +def ootGetLimb(skeletonData, limbName, continueOnError): + matchResult = re.search("([A-Za-z0-9\_]*)Limb\s*" + re.escape(limbName), skeletonData) + + if matchResult is None: + if continueOnError: + return None + else: + raise PluginError("Cannot find skeleton limb named " + limbName) + + limbType = matchResult.group(1) + if limbType == "Lod": + dlRegex = "\{\s*([^,\s]*)\s*,\s*([^,\s]*)\s*\}" + else: + dlRegex = "([^,\s]*)" + + matchResult = re.search("[A-Za-z0-9\_]*Limb\s*" + re.escape(limbName) + \ + "\s*=\s*\{\s*\{\s*([^,\s]*)\s*,\s*([^,\s]*)\s*,\s*([^,\s]*)\s*\},\s*([^, ]*)\s*,\s*([^, ]*)\s*,\s*" +\ + dlRegex + "\s*\}\s*;\s*", skeletonData, re.DOTALL) + + if matchResult is None: + if continueOnError: + return None + else: + raise PluginError("Cannot handle skeleton limb named " + limbName + " of type " + limbType) + return matchResult + +def ootImportSkeletonC(filepaths, skeletonName, actorScale, removeDoubles, importNormals, basePath, drawLayer): + skeletonData = getImportData(filepaths) + + matchResult = ootGetSkeleton(skeletonData, skeletonName, False) + limbsName = matchResult.group(2) + + matchResult = ootGetLimbs(skeletonData, limbsName, False) + limbsData = matchResult.group(2) + limbList = [entry.strip()[1:] for entry in limbsData.split(',')] + + #print(limbList) + isLOD, armatureObj = ootBuildSkeleton(skeletonName, skeletonData, limbList, + actorScale, removeDoubles, importNormals, False, basePath, drawLayer) + if isLOD: + isLOD, LODArmatureObj = ootBuildSkeleton(skeletonName, skeletonData, limbList, + actorScale, removeDoubles, importNormals, True, basePath, drawLayer) + armatureObj.ootFarLOD = LODArmatureObj + + +def ootBuildSkeleton(skeletonName, skeletonData, limbList, actorScale, removeDoubles, + importNormals, useFarLOD, basePath, drawLayer): + lodString = "_lod" if useFarLOD else "" + + # Create new skinned mesh + mesh = bpy.data.meshes.new(skeletonName + '_mesh' + lodString) + obj = bpy.data.objects.new(skeletonName + '_mesh' + lodString, mesh) + bpy.context.scene.collection.objects.link(obj) + + # Create new armature + armature = bpy.data.armatures.new(skeletonName + lodString) + armatureObj = bpy.data.objects.new(skeletonName + lodString, armature) + armatureObj.show_in_front = True + armatureObj.ootDrawLayer = drawLayer + #armature.show_names = True + + bpy.context.scene.collection.objects.link(armatureObj) + bpy.context.view_layer.objects.active = armatureObj + #bpy.ops.object.mode_set(mode = 'EDIT') + + f3dContext = OOTF3DContext(F3D("F3DEX2/LX2", False), limbList, basePath) + f3dContext.mat().draw_layer.oot = armatureObj.ootDrawLayer + transformMatrix = mathutils.Matrix.Scale(1 / actorScale, 4) + isLOD = ootAddLimbRecursively(0, skeletonData, obj, armatureObj, transformMatrix, None, f3dContext, useFarLOD) + for dlEntry in f3dContext.dlList: + limbName = f3dContext.getLimbName(dlEntry.limbIndex) + boneName = f3dContext.getBoneName(dlEntry.limbIndex) + parseF3D(skeletonData, dlEntry.dlName, obj, f3dContext.matrixData[limbName], + limbName, boneName, "oot", drawLayer, f3dContext) + if f3dContext.isBillboard: + armatureObj.data.bones[boneName].ootDynamicTransform.billboard = True + f3dContext.clearMaterial() # THIS IS IMPORTANT + f3dContext.createMesh(obj, removeDoubles, importNormals) + armatureObj.location = bpy.context.scene.cursor.location + + # Set bone rotation mode. + bpy.ops.object.select_all(action = "DESELECT") + armatureObj.select_set(True) + bpy.context.view_layer.objects.active = armatureObj + bpy.ops.object.mode_set(mode = 'POSE') + for bone in armatureObj.pose.bones: + bone.rotation_mode = 'XYZ' + + # Apply mesh to armature. + if bpy.context.mode != 'OBJECT': + bpy.ops.object.mode_set(mode = 'OBJECT') + bpy.ops.object.select_all(action = 'DESELECT') + obj.select_set(True) + armatureObj.select_set(True) + bpy.context.view_layer.objects.active = armatureObj + bpy.ops.object.parent_set(type = "ARMATURE") + + applyRotation([armatureObj], math.radians(-90), 'X') + + return isLOD, armatureObj + +def ootAddBone(armatureObj, boneName, parentBoneName, currentTransform, loadDL): + if bpy.context.mode != 'OBJECT': + bpy.ops.object.mode_set(mode="OBJECT") + bpy.ops.object.select_all(action = 'DESELECT') + bpy.context.view_layer.objects.active = armatureObj + bpy.ops.object.mode_set(mode="EDIT") + bone = armatureObj.data.edit_bones.new(boneName) + bone.use_connect = False + if parentBoneName is not None: + bone.parent = armatureObj.data.edit_bones[parentBoneName] + bone.head = currentTransform @ mathutils.Vector((0,0,0)) + bone.tail = bone.head + (currentTransform.to_quaternion() @ \ + mathutils.Vector((0,0.3,0))) + + # Connect bone to parent if it is possible without changing parent direction. + + if parentBoneName is not None: + nodeOffsetVector = mathutils.Vector(bone.head - bone.parent.head) + # set fallback to nonzero to avoid creating zero length bones + if(nodeOffsetVector.angle(bone.parent.tail - bone.parent.head, 1) \ + < 0.0001 and loadDL): + for child in bone.parent.children: + if child != bone: + child.use_connect = False + bone.parent.tail = bone.head + bone.use_connect = True + elif bone.head == bone.parent.head and bone.tail == bone.parent.tail: + bone.tail += currentTransform.to_quaternion() @ mathutils.Vector((0,0.2,0)) + + if bpy.context.mode != 'OBJECT': + bpy.ops.object.mode_set(mode="OBJECT") + +def ootAddLimbRecursively(limbIndex, skeletonData, obj, armatureObj, parentTransform, parentBoneName, f3dContext, useFarLOD): + + limbName = f3dContext.getLimbName(limbIndex) + boneName = f3dContext.getBoneName(limbIndex) + matchResult = ootGetLimb(skeletonData, limbName, False) + + isLOD = matchResult.lastindex > 6 + + if isLOD and useFarLOD: + dlName = matchResult.group(7) + else: + dlName = matchResult.group(6) + + # Animations override the root translation, so we just ignore importing them as well. + if limbIndex == 0: + translation = [0,0,0] + else: + translation = [int(matchResult.group(1)), int(matchResult.group(2)), int(matchResult.group(3))] + nextChildIndex = int(matchResult.group(4)) + nextSiblingIndex = int(matchResult.group(5)) + + #str(limbIndex) + " " + str(translation) + " " + str(nextChildIndex) + " " + \ + # str(nextSiblingIndex) + " " + str(dlName)) + + currentTransform = parentTransform @ mathutils.Matrix.Translation(mathutils.Vector(translation)) + f3dContext.matrixData[limbName] = currentTransform + loadDL = dlName != "NULL" + + ootAddBone(armatureObj, boneName, parentBoneName, currentTransform, loadDL) + + # DLs can access bone transforms not yet processed. + # Therefore were delay F3D parsing until after skeleton is processed. + if loadDL: + f3dContext.dlList.append(OOTDLEntry(dlName, limbIndex)) + #parseF3D(skeletonData, dlName, obj, transformMatrix, boneName, f3dContext) + + if nextChildIndex != 255: + isLOD |= ootAddLimbRecursively(nextChildIndex, skeletonData, obj, armatureObj, currentTransform, boneName, f3dContext, useFarLOD) + + if nextSiblingIndex != 255: + isLOD |= ootAddLimbRecursively(nextSiblingIndex, skeletonData, obj, armatureObj, parentTransform, parentBoneName, f3dContext, useFarLOD) + + return isLOD + +def ootRemoveSkeleton(filepath, objectName, skeletonName): + headerPath = os.path.join(filepath, objectName + '.h') + sourcePath = os.path.join(filepath, objectName + '.c') + + skeletonDataC = readFile(sourcePath) + originalDataC = skeletonDataC + + skeletonDataH = readFile(headerPath) + originalDataH = skeletonDataH + + matchResult = ootGetSkeleton(skeletonDataC, skeletonName, True) + if matchResult is None: + return + skeletonDataC = skeletonDataC[:matchResult.start(0)] + skeletonDataC[matchResult.end(0):] + limbsName = matchResult.group(2) + + headerMatch = getDeclaration(skeletonDataH, skeletonName) + if headerMatch is not None: + skeletonDataH = skeletonDataH[:headerMatch.start(0)] + skeletonDataH[headerMatch.end(0):] + + matchResult = ootGetLimbs(skeletonDataC, limbsName, True) + if matchResult is None: + return + skeletonDataC = skeletonDataC[:matchResult.start(0)] + skeletonDataC[matchResult.end(0):] + limbsData = matchResult.group(2) + limbList = [entry.strip()[1:] for entry in limbsData.split(',')] + + headerMatch = getDeclaration(skeletonDataH, limbsName) + if headerMatch is not None: + skeletonDataH = skeletonDataH[:headerMatch.start(0)] + skeletonDataH[headerMatch.end(0):] + + for limb in limbList: + matchResult = ootGetLimb(skeletonDataC, limb, True) + if matchResult is not None: + skeletonDataC = skeletonDataC[:matchResult.start(0)] + skeletonDataC[matchResult.end(0):] + headerMatch = getDeclaration(skeletonDataH, limb) + if headerMatch is not None: + skeletonDataH = skeletonDataH[:headerMatch.start(0)] + skeletonDataH[headerMatch.end(0):] + + if skeletonDataC != originalDataC: + writeFile(sourcePath, skeletonDataC) + + if skeletonDataH != originalDataH: + writeFile(headerPath, skeletonDataH) + +class OOT_ImportSkeleton(bpy.types.Operator): + # set bl_ properties + bl_idname = 'object.oot_import_skeleton' + bl_label = "Import Skeleton" + bl_options = {'REGISTER', 'UNDO', 'PRESET'} + + # Called on demand (i.e. button press, menu item) + # Can also be called from operator search menu (Spacebar) + def execute(self, context): + armatureObj = None + if context.mode != 'OBJECT': + bpy.ops.object.mode_set(mode = "OBJECT") + + try: + importPath = bpy.path.abspath(context.scene.ootSkeletonImportCustomPath) + isCustomImport = context.scene.ootSkeletonImportUseCustomPath + folderName = context.scene.ootSkeletonImportFolderName + skeletonName = context.scene.ootSkeletonImportName + scale = context.scene.ootActorBlenderScale + removeDoubles = context.scene.ootActorRemoveDoubles + importNormals = context.scene.ootActorImportNormals + decompPath = bpy.path.abspath(bpy.context.scene.ootDecompPath) + drawLayer = bpy.context.scene.ootActorImportDrawLayer + + filepaths = [ootGetObjectPath(isCustomImport, importPath, folderName)] + if not isCustomImport: + filepaths.append(os.path.join(bpy.context.scene.ootDecompPath, "assets/objects/gameplay_keep/gameplay_keep.c")) + + ootImportSkeletonC(filepaths, skeletonName, scale, removeDoubles, importNormals, decompPath, drawLayer) + + self.report({'INFO'}, 'Success!') + return {'FINISHED'} + + except Exception as e: + if context.mode != 'OBJECT': + bpy.ops.object.mode_set(mode = 'OBJECT') + raisePluginError(self, e) + return {'CANCELLED'} # must return a set class OOT_ExportSkeleton(bpy.types.Operator): # set bl_ properties @@ -410,15 +752,16 @@ class OOT_ExportSkeleton(bpy.types.Operator): saveTextures = bpy.context.scene.saveTextures or bpy.context.scene.ignoreTextureRestrictions isHWv1 = context.scene.isHWv1 f3dType = context.scene.f3d_type - skeletonName = context.scene.ootSkeletonName - folderName = context.scene.ootSkeletonFolderName - exportPath = context.scene.ootSkeletonCustomPath - isCustomExport = context.scene.ootSkeletonUseCustomPath - drawLayer = context.scene.ootSkeletonDrawLayer + skeletonName = context.scene.ootSkeletonExportName + folderName = context.scene.ootSkeletonExportFolderName + exportPath = bpy.path.abspath(context.scene.ootSkeletonExportCustomPath) + isCustomExport = context.scene.ootSkeletonExportUseCustomPath + drawLayer = armatureObj.ootDrawLayer + removeVanillaData = context.scene.ootSkeletonRemoveVanillaData ootConvertArmatureToC(armatureObj, finalTransform, f3dType, isHWv1, skeletonName, folderName, DLFormat.Static, saveTextures, - exportPath, isCustomExport, drawLayer) + exportPath, isCustomExport, drawLayer, removeVanillaData) self.report({'INFO'}, 'Success!') return {'FINISHED'} @@ -445,20 +788,88 @@ class OOT_ExportSkeletonPanel(bpy.types.Panel): col = self.layout.column() col.operator(OOT_ExportSkeleton.bl_idname) - col.prop(context.scene, "ootSkeletonUseCustomPath") - prop_split(col, context.scene, 'ootSkeletonName', "Skeleton") - if context.scene.ootSkeletonUseCustomPath: - prop_split(col, context.scene, 'ootSkeletonCustomPath', "Folder") + prop_split(col, context.scene, 'ootSkeletonExportName', "Skeleton") + if context.scene.ootSkeletonExportUseCustomPath: + prop_split(col, context.scene, 'ootSkeletonExportCustomPath', "Folder") else: - prop_split(col, context.scene, 'ootSkeletonFolderName', "Object") - prop_split(col, context.scene, "ootSkeletonDrawLayer", "Draw Layer") + prop_split(col, context.scene, 'ootSkeletonExportFolderName', "Object") + col.prop(context.scene, "ootSkeletonExportUseCustomPath") + + col.operator(OOT_ImportSkeleton.bl_idname) + + prop_split(col, context.scene, 'ootSkeletonImportName', "Skeleton") + if context.scene.ootSkeletonImportUseCustomPath: + prop_split(col, context.scene, 'ootSkeletonImportCustomPath', "File") + else: + prop_split(col, context.scene, 'ootSkeletonImportFolderName', "Object") + prop_split(col, context.scene, "ootActorImportDrawLayer", "Import Draw Layer") + + col.prop(context.scene, "ootSkeletonImportUseCustomPath") + col.prop(context.scene, "ootActorRemoveDoubles") + col.prop(context.scene, "ootActorImportNormals") + col.prop(context.scene, "ootSkeletonRemoveVanillaData") + + +class OOT_SkeletonPanel(bpy.types.Panel): + bl_idname = "OOT_PT_skeleton" + bl_label = "OOT Skeleton Properties" + bl_space_type = 'PROPERTIES' + bl_region_type = 'WINDOW' + bl_context = "object" + bl_options = {'HIDE_HEADER'} + + @classmethod + def poll(cls, context): + return context.scene.gameEditorMode == "OOT" and \ + hasattr(context, "object") and context.object is not None and isinstance(context.object.data, bpy.types.Armature) + + # called every frame + def draw(self, context): + col = self.layout.box().column() + col.box().label(text = "OOT Skeleton Inspector") + prop_split(col, context.object, "ootDrawLayer", "Draw Layer") + prop_split(col, context.object, "ootFarLOD", "LOD Skeleton") + if context.object.ootFarLOD is not None: + col.label(text = "Make sure LOD has same bone structure.", icon = "ERROR") + +class OOT_BonePanel(bpy.types.Panel): + bl_idname = "OOT_PT_bone" + bl_label = "OOT Bone Properties" + bl_space_type = 'PROPERTIES' + bl_region_type = 'WINDOW' + bl_context = "bone" + bl_options = {'HIDE_HEADER'} + + @classmethod + def poll(cls, context): + return context.scene.gameEditorMode == "OOT" and context.bone is not None + + # called every frame + def draw(self, context): + col = self.layout.box().column() + col.box().label(text = "OOT Bone Inspector") + prop_split(col, context.bone, "ootBoneType", "Bone Type") + if context.bone.ootBoneType == "Custom DL": + prop_split(col, context.bone, "ootCustomDLName", "DL Name") + if context.bone.ootBoneType == "Custom DL" or\ + context.bone.ootBoneType == "Ignore": + col.label(text = "Make sure no geometry is skinned to this bone.", icon = "ERROR") + + if context.bone.ootBoneType != "Ignore": + col.prop(context.bone.ootDynamicTransform, 'billboard') + +def pollArmature(self, obj): + return isinstance(obj.data, bpy.types.Armature) oot_skeleton_classes = ( OOT_ExportSkeleton, + OOT_ImportSkeleton, ) oot_skeleton_panels = ( OOT_ExportSkeletonPanel, + OOT_SkeletonPanel, + OOT_BonePanel, ) def oot_skeleton_panel_register(): @@ -470,25 +881,59 @@ def oot_skeleton_panel_unregister(): unregister_class(cls) def oot_skeleton_register(): - bpy.types.Scene.ootSkeletonName = bpy.props.StringProperty( - name = "Skeleton Name", default = "skeleton") - bpy.types.Scene.ootSkeletonFolderName = bpy.props.StringProperty( - name = "Skeleton Folder", default = "gameplay_keep") - bpy.types.Scene.ootSkeletonCustomPath = bpy.props.StringProperty( + bpy.types.Scene.ootSkeletonExportName = bpy.props.StringProperty( + name = "Skeleton Name", default = "gGerudoRedSkel") + bpy.types.Scene.ootSkeletonExportFolderName = bpy.props.StringProperty( + name = "Skeleton Folder", default = "object_geldb") + bpy.types.Scene.ootSkeletonExportCustomPath = bpy.props.StringProperty( name ='Custom Skeleton Path', subtype = 'FILE_PATH') - bpy.types.Scene.ootSkeletonUseCustomPath = bpy.props.BoolProperty( + bpy.types.Scene.ootSkeletonExportUseCustomPath = bpy.props.BoolProperty( name = "Use Custom Path") - bpy.types.Scene.ootSkeletonDrawLayer = bpy.props.EnumProperty(items = ootEnumDrawLayers) + + bpy.types.Scene.ootSkeletonImportName = bpy.props.StringProperty( + name = "Skeleton Name", default = "gGerudoRedSkel") + bpy.types.Scene.ootSkeletonImportFolderName = bpy.props.StringProperty( + name = "Skeleton Folder", default = "object_geldb") + bpy.types.Scene.ootSkeletonImportCustomPath = bpy.props.StringProperty( + name ='Custom Skeleton Path', subtype = 'FILE_PATH') + bpy.types.Scene.ootSkeletonImportUseCustomPath = bpy.props.BoolProperty( + name = "Use Custom Path") + + bpy.types.Scene.ootActorRemoveDoubles = bpy.props.BoolProperty(name = "Remove Doubles On Import", default = True) + bpy.types.Scene.ootActorImportNormals = bpy.props.BoolProperty(name = "Import Normals", default = True) + bpy.types.Scene.ootSkeletonRemoveVanillaData = bpy.props.BoolProperty(name = "Replace Vanilla Headers On Export", default = True) + bpy.types.Scene.ootActorImportDrawLayer = bpy.props.EnumProperty(name = "Import Draw Layer", items = ootEnumDrawLayers) + + bpy.types.Object.ootFarLOD = bpy.props.PointerProperty(type = bpy.types.Object, poll = pollArmature) + + bpy.types.Bone.ootBoneType = bpy.props.EnumProperty(name = 'Bone Type', items = ootEnumBoneType) + bpy.types.Bone.ootDynamicTransform = bpy.props.PointerProperty(type = OOTDynamicTransformProperty) + bpy.types.Bone.ootCustomDLName = bpy.props.StringProperty(name = 'Custom DL', default = "gEmptyDL") for cls in oot_skeleton_classes: register_class(cls) def oot_skeleton_unregister(): - del bpy.types.Scene.ootSkeletonCustomPath - del bpy.types.Scene.ootSkeletonFolderName - del bpy.types.Scene.ootSkeletonUseCustomPath - del bpy.types.Scene.ootSkeletonName - del bpy.types.Scene.ootSkeletonDrawLayer + del bpy.types.Scene.ootSkeletonExportName + del bpy.types.Scene.ootSkeletonExportFolderName + del bpy.types.Scene.ootSkeletonExportCustomPath + del bpy.types.Scene.ootSkeletonExportUseCustomPath + + del bpy.types.Scene.ootSkeletonImportName + del bpy.types.Scene.ootSkeletonImportFolderName + del bpy.types.Scene.ootSkeletonImportCustomPath + del bpy.types.Scene.ootSkeletonImportUseCustomPath + + del bpy.types.Scene.ootActorRemoveDoubles + del bpy.types.Scene.ootActorImportNormals + del bpy.types.Scene.ootSkeletonRemoveVanillaData + del bpy.types.Scene.ootActorImportDrawLayer + + del bpy.types.Object.ootFarLOD + + del bpy.types.Bone.ootBoneType + del bpy.types.Bone.ootDynamicTransform + del bpy.types.Bone.ootCustomDLName for cls in reversed(oot_skeleton_classes): unregister_class(cls) \ No newline at end of file diff --git a/fast64_internal/oot/oot_utility.py b/fast64_internal/oot/oot_utility.py index 991f188..94ea10c 100644 --- a/fast64_internal/oot/oot_utility.py +++ b/fast64_internal/oot/oot_utility.py @@ -1,5 +1,5 @@ from ..utility import * -import bpy, math, mathutils, os +import bpy, math, mathutils, os, re from bpy.utils import register_class, unregister_class ootSceneDungeons = [ @@ -190,6 +190,15 @@ def checkEmptyName(name): if name == "": raise PluginError("No name entered for the exporter.") +def ootGetObjectPath(isCustomExport, exportPath, folderName): + if isCustomExport: + filepath = exportPath + else: + filepath = os.path.join(ootGetPath(exportPath, isCustomExport, 'assets/objects/', + folderName, False, False), folderName + '.c') + return filepath + + def ootGetPath(exportPath, isCustomExport, subPath, folderName, makeIfNotExists, useFolderForCustom): if isCustomExport: path = bpy.path.abspath(os.path.join(exportPath, (folderName if useFolderForCustom else ''))) @@ -207,14 +216,21 @@ def ootGetPath(exportPath, isCustomExport, subPath, folderName, makeIfNotExists, return path def getSortedChildren(armatureObj, bone): - return sorted([child.name for child in bone.children]) + return sorted([child.name for child in bone.children if child.ootBoneType != "Ignore"], key = lambda childName : childName.lower()) def getStartBone(armatureObj): - return 'root' + startBoneNames = [bone.name for bone in armatureObj.data.bones if \ + bone.parent is None and bone.ootBoneType != "Ignore"] + if len(startBoneNames) == 0: + raise PluginError(armatureObj.name + " does not have any root bones that are not of the \"Ignore\" type.") + startBoneName = startBoneNames[0] + return startBoneName + #return 'root' def checkForStartBone(armatureObj): - if "root" not in armatureObj.data.bones: - raise PluginError("Skeleton must have a bone named 'root' where the skeleton starts from.") + pass + #if "root" not in armatureObj.data.bones: + # raise PluginError("Skeleton must have a bone named 'root' where the skeleton starts from.") class BoxEmpty: def __init__(self, position, scale, emptyScale): diff --git a/fast64_internal/sm64/sm64_geolayout_parser.py b/fast64_internal/sm64/sm64_geolayout_parser.py index 463b77e..421e029 100644 --- a/fast64_internal/sm64/sm64_geolayout_parser.py +++ b/fast64_internal/sm64/sm64_geolayout_parser.py @@ -660,7 +660,7 @@ def parseDLWithOffset(romfile, currentAddress, displayListStartAddress = decodeSegmentedAddr(segmentedAddr, segmentData = segmentData) #print(displayListStartAddress) - parseF3D(romfile, displayListStartAddress, bpy.context.scene, + parseF3DBinary(romfile, displayListStartAddress, bpy.context.scene, bMesh, obj, finalTransform, boneName, segmentData, vertexBuffer) # Handle child objects @@ -721,7 +721,7 @@ def handleNodeCommon(romfile, armatureObj, parentBoneName, finalTransform, hasMeshData = int.from_bytes(segmentedAddr, 'big') != 0 if hasMeshData: startAddress = decodeSegmentedAddr(segmentedAddr, segmentData) - parseF3D(romfile, startAddress, bpy.context.scene, bMesh, obj, + parseF3DBinary(romfile, startAddress, bpy.context.scene, bMesh, obj, finalTransform, boneName, segmentData, vertexBuffer) elif armatureObj is not None: armatureObj.data.bones[boneName].use_deform = False diff --git a/fast64_internal/sm64/sm64_geolayout_writer.py b/fast64_internal/sm64/sm64_geolayout_writer.py index e56131d..1598442 100644 --- a/fast64_internal/sm64/sm64_geolayout_writer.py +++ b/fast64_internal/sm64/sm64_geolayout_writer.py @@ -1664,7 +1664,7 @@ def saveModelGivenVertexGroup(fModel, obj, vertexGroup, # Save unskinned mesh for drawLayer, materialFaces in groupFaces.items(): if drawLayer not in fMeshes: - fMesh = fModel.addMesh(vertexGroup, namePrefix, drawLayer, False) + fMesh = fModel.addMesh(vertexGroup, namePrefix, drawLayer, False, None) fMeshes[drawLayer] = fMesh for material_index, bFaces in materialFaces.items(): diff --git a/fast64_internal/utility.py b/fast64_internal/utility.py index d9c8a90..5467922 100644 --- a/fast64_internal/utility.py +++ b/fast64_internal/utility.py @@ -36,6 +36,31 @@ enumCompressionFormat = [ ('yay0', 'YAY0', 'YAY0'), ] +def getDeclaration(data, name): + matchResult = re.search("extern\s*[A-Za-z0-9\_]*\s*" + re.escape(name) + \ + "\s*(\[[^;\]]*\])?;\s*", data, re.DOTALL) + return matchResult + +def hexOrDecInt(value): + if isinstance(value, int): + return value + elif "<<" in value: + i = value.index("<<") + return hexOrDecInt(value[:i]) << hexOrDecInt(value[i + 2:]) + elif ">>" in value: + i = value.index(">>") + return hexOrDecInt(value[:i]) >> hexOrDecInt(value[i + 2:]) + elif 'x' in value: + return int(value, 16) + else: + return int(value) + +def getOrMakeVertexGroup(obj, groupName): + for group in obj.vertex_groups: + if group.name == groupName: + return group + return obj.vertex_groups.new(name = groupName) + def unhideAllAndGetHiddenList(scene): hiddenObjs = [] for obj in scene.objects: @@ -133,6 +158,58 @@ def copyPropertyGroup(oldProp, newProp): else: setattr(newProp, sub_value_attr, sub_value) +def propertyCollectionEquals(oldProp, newProp): + if len(oldProp) != len(newProp): + print("Unequal size: " + str(oldProp) + " " + str(len(oldProp)) + ", " + str(newProp) + str(len(newProp))) + return False + + equivalent = True + for i in range(len(oldProp)): + item = oldProp[i] + newItem = newProp[i] + if isinstance(item, bpy.types.PropertyGroup): + equivalent &= propertyGroupEquals(item, newItem) + elif type(item).__name__ == "bpy_prop_collection_idprop": + equivalent &= propertyCollectionEquals(item, newItem) + else: + try: + iterator = iter(item) + except TypeError: + isEquivalent = newItem == item + else: + isEquivalent = tuple([i for i in newItem]) == tuple([ i for i in item]) + if not isEquivalent: + pass #print("Not equivalent: " + str(item) + " " + str(newItem)) + equivalent &= isEquivalent + + return equivalent + +def propertyGroupEquals(oldProp, newProp): + equivalent = True + for sub_value_attr in oldProp.bl_rna.properties.keys(): + if sub_value_attr == "rna_type": + continue + sub_value = getattr(oldProp, sub_value_attr) + if isinstance(sub_value, bpy.types.PropertyGroup): + equivalent &= propertyGroupEquals(sub_value, getattr(newProp, sub_value_attr)) + elif type(sub_value).__name__ == "bpy_prop_collection_idprop": + newCollection = getattr(newProp, sub_value_attr) + copyPropertyCollection(sub_value, newCollection) + else: + newValue = getattr(newProp, sub_value_attr) + try: + iterator = iter(newValue) + except TypeError: + isEquivalent = newValue == sub_value + else: + isEquivalent = tuple([i for i in newValue]) == tuple([i for i in sub_value]) + + if not isEquivalent: + pass #print("Not equivalent: " + str(sub_value) + " " + str(newValue) + " " + str(sub_value_attr)) + equivalent &= isEquivalent + + return equivalent + def writeCData(data, headerPath, sourcePath): sourceFile = open(sourcePath, 'w', newline = '\n', encoding = 'utf-8') sourceFile.write(data.source) @@ -285,9 +362,9 @@ def writeMaterialBase(baseDir): matCFile = open(matCPath, 'w', newline = '\n') matCFile.write( '#include "types.h"\n' +\ - '#include "rendering_graph_node.h"\n' +\ - '#include "object_fields.h"\n' +\ - '#include "materials.h"') + '#include "rendering_graph_node.h"\n' +\ + '#include "object_fields.h"\n' +\ + '#include "materials.h"') # Write global texture load function here # Write material.inc.c diff --git a/images/oot_imported_gerudo_solid.png b/images/oot_imported_gerudo_solid.png new file mode 100644 index 0000000000000000000000000000000000000000..6683c64befd33a6de96b8066a5fb1ab363c17923 GIT binary patch literal 149589 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 z�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%0Axs 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 literal 0 HcmV?d00001

HU{OMo^$;&R)t=fiwDPc!)(;%1}Ab^j%_nVciBKD|a}ot&H?$)|0Or_no1jxY&Il zU1-alR7BQp16_$5xwBD2!1n*$4?KS4d;GzP&rRuwWTr#!P188iH`l5@r2LJn7q5O& zy?7HvoW*zSRZX1LeAcpLLoQQ;*SAg%XTz{9=iE__$uB4OrS2)Q?REy*zxvkcq~X3( zKOZ^}BeC69@|Iob5?p#816{hOWdIU%YW!S7+E%8W;%`sEV3fqe4m zj7{S0epi1*sEJ;&-^ZfLtq^B05w|FZJVLiA0$sR1+`NqzBJ?$IAk6Zkgm#~3ahvt}a$yBJLv178JVUOY2zY?JKNl{=s-R0?pXNmW>#uVk* z$;n<=AK8VQHAQ0ncUpc`8vlUSfFFK-`n~*fHGVI)Hq=Ot?lkI(n91|kJ$wFx7|K%R zp3+E?t`=p$i00t-8)&fq^!=4}p)$EF&4S$^L#4mAG-EXDoiY>vL=D6MsT1;n^Phkn zOypmZnQ2{U!$&3QM$AUUbCYt|u`-~*ObAZkU?meVW{!)n2hsU7En72dVdMPeKJ24!wNiAs-f4Yh_$y@@suk)7|Vjc#V{ zqBeQ={rsP%F7_}w^FZOyyke~5*er6+KxTO_f;(1GZuF8cq~Rzf&d*$Z{mD<&HH(uL zUH+X2>!v$q@_y9KcwKN@6W(q3l?x3yCBlzUk*vRw^0~umcRJm~Jntp~$9|G_<65}q3dEFl1(N&&Z^m$RvBKCqQt7){2_PA%fpBn#t5T| zqlYa=KoSTZnb9J~Bm{VSq23!wKMi z>?ZBtZ6t3J7Wds%lgR2f?l$@?LhU*$SRhv5I@gLK&ZUKJ^S&dLk9adFK+$atRI8{+ ztqK~M39%dw)-k$9DeWWjJSHDm81@us= z-n_>_N*v4Q0#1JJMA`i{n{LtBq4;TwWH-FV1fnXy-%TCk^N~5W@JL#1V=WR&BX8la#2N>T}skJ2lL-`bMyvO^4o_ ze6Yl)okZRndRC3CK09`sOVU$>nzi8aoXL_OGtjS0BjlAvh<$m_Y{8H5+na^7T#&Sv8N?m^;r<@BGV0?+XI&vizLK6cigykh6u{AfK9 z(?MvZsqc48G2Q7Q>Y)%-pQjQC|Xl}eFv*$A@K9~@5l z`!~I&@PE%MY9xWgOTx5INZ-*R&MzrTFc@$F_!^Zt+5lD5x(F>vjLe2MGTBWtIUxAK z0F@N|fvR*Nd z{l?Es#-{pvI!*`*TX8gePmJO)9J6GF=sOoe*-zGi?yJHB$pdw84qC46-^9u6L}cp@ zfcjbE8{2!UbESDy2kNnoVqGZJmjU9wnnb%fON$z8M8f&5pfk#xp^87e>PTa`!=yc5 zgkR&GigLjl{tN{(fm~B*t5-+!$EWRpS||TW6-rM3c=jq>BP{1SLS^Q6H7!3qzR_zo zj*yb%|2=f2h6SM|%kQho0wR75e5norW8fng*bt6U)OylQ1YSw>>q)Vw$VAa%Hu2jBv6`Eye$a$EX}x;sz7BXtW2*~$@F81q7<2$K3~q)OzF6C7NW zLhi}HZs38Go@x_#YbVh@3N7SZP@!U@oPfI(aJwM#?E9@yNBD@J zX2g-GrR2Nv&d@2eB?sL+)ga!KK^n)S6Dv(xvV3DC(`(YeRzZ5pwsG_IvCOz->nD?flvVJ~N!v4oFWGY@!Na-2%e!Es$%J_M~ zn8JeB+}5|fk`wQ)q^s-4K)$_JJ?|`$w4dt8Yx{;69+V3p4Md{3AY9%3+8op)ELFF~ zHLaPb&VS48s$wDcJOYY-Dx2RSVS-_G?9F&dMvxVT%bN}DUMn%ANeeg&|8oDFo^rBK zp&$UliXMp;$%EQIBg6EQO3@2)HV^)`QLS=Y5LO?qDWshxg*Y*lwD|vOVV-nt)}rSd zkEkN-J(U=kEYnNF+54$A(R+S-&46c1RPbmXK}$#bT4_P3(7iCWA+%t_(d=#$@f`o*{B;u#$ry0_JU@1JB;@v z+e{QH+|dn#4wP{pT4>Qzh)6FDubai0sn|xZ8K163sA_1$16w=iOf#Y3!wd4MPn{3* zp`5EH z=`$yK+6u0KBN?UqY2zC1|L3bZ;THN8)rbjQtU2;6x3X-v7EuX_1Zp$jtg$H4#R)`l zL((d_b6KJ#VJ}JYl78zD_m7;n) z`EjS10wrob0E@mVGNxTsOrQ5 z{6&dYlBwoj&^R!F5}rM4;riVCAxhC?JwiT4J&tEucK0oYdZlo6sphvs)59IhO;Fgv zM2XJOX71j@&&Y1Q>=pI#!CGRhhQAmX7ax^%Hr@D)BY7>xZEzN`)RGjPyce^_7N9mM z1LwJbnVJEq=Kg2Wtg-$4rZvrlZ5t5{l2T(GFSIRs^K@ESD3#1XIZD|;=5QxHNY!Ee z{7;XZ>+v?EbIs^&!ylVb=Gvq?8*bxZKE_I%g1$g)kO^ZqFgGKW#MMa)MazCK8n|Ca z{_rAo(R=5K=YGw^ryQA?lv`ra^L}N5X3uaAB<>x4xZ#Lv(I@)Rk{;h4z4M_wq9^9L zwrs5K>9E=JV9Gio^|QD>bd~_OJVXDVfjES+tRF<#*3C|4Bu`h`u~**`dd;p*N3-Nk zanMVf==18HQpkz^8=iE|t;eQ=+6p~4w9geQ#N$+_YZ~{QBY`=FvFk@vN{}~jt_u@# zL0ajIg`a5kV=kwjpRTpo_%EiV4Ou!WmTPEU$x(Ljnb4-(LdCFsYKYWw!(GS4Z z#gp{-^&1gyR&ePXLIr3y8AKiI0}xxqdJrznIXH=AR|lK%I)-_fAQKKWIdt+f1u_1^ z!_T~1;gT8;h`zevDrRs$FX#obHzCTB7~klB+`Sh!@y{i!>F{6ybCCQ#3?mp$u=!m; z#h{YKJ*L+U(6|Kl!^agah%)5jKIVtjK-tLE^2HLl;KYzSw>Uj!XxL@$2YyEmaB;K9 zkFG%3YJ##kbRWfAoi89ybbQKqx;`;A1a_g8p=UFP7cC}@u$;REjxP1#f=+*Ler~1yvoDPQ+#mb*@O6*wHghOz>} z%Q12uTgN-z2UwKxE73yhz4P<)*~|EGY1z|qqta$SCv~yWd8h#eh|gSIHy0;q z(jJRF9Q74*{Zy>%S_q{9!a~GjXGtEF)VZr6`~TL&m|IVRew%T6m@iKJxzbTJFWJ|- zOCD#)WGIBpZ@|zuiJvRGZw1Xgm_=Rw2lS@LM#_M??gdzRdLNidFZj2u{Rv8>t5Mro zXm8SXS*9^IPCMMQ4z5QHGSa>0E*PfGP*8XAc~D(2;W4+Rd>nE;4=gY^!jiAiD$CHi zwYXtHp0KMf&fgbvgk2haulr!>pO}XN&3&)!LDG*^ofLdqfZZ@iT?W11pOV&G>(t+7 z$klHUoBM)DM18E5f!ge_7p_;eYX9721S@Lb`YC6FS3hT6J&je%_mLjBnW_*-u!Zyr zpx20J6zYDMd%&aJLnJNC>cusapZN(Q*nX8Wp)6THd9eRFsCE4_E9#WYkQ{nXDf=F% z5&5|R!+@{-R}I}*#oR~ckcr%ee3Oqas2~cLVmZZ%RljlFd0)J$Cu`SDdloPDWaFD4 z$tkHKA4Rwwbqpfo3t_t|fy^eU7;HjsiFkf)K<%I;S!E|f2T7=O0Q=3OpsV*5CLs7xKOGG%`LQeD zmu^LJGaE|Ec;UDk5t1s8O zK6e6&fD_v*-EO!fw+XmDmJY)ykh6%lhrXYRc+!yzCVV08y`xi2Q8fy^MO3wJ`d6;A zh*aeB2blUtR)t467SZsV%Ffc!TZEhFChu>IRz0->uZNX;^Q36N`jd-&zgOon=t1-^ z*I(Q0Jg><5Dh!!Cu+I`#5F;^kc$uWv;Q(Dd`)y6zR`^jNevNVrFA;ynLE>u92I>Bo z2!}EhtuA#=vGSyVi3RQddb;DBAXYHfg^9ayTJDe+0JsDr^3-OWHjWGAN}!5YdQ&D6 zQULG#`szkVq7y;vqz|D4x7aLF`Ejp_;=2A%c6 zi2m50e3+ct4QsOs;df_=hI@Te*L5Xsm_VvW6}(YEcJOqUAMrA0^8~7IF{Q48-&XqP z9cJSsZ~)b@p2T7EZ_OUIaeU%}faUdo=ZR5|acffj7PR_^SVCtrh8#?%tI2=4{Nc=E z(I?SVt6i93#9*t;ds?T4elx-K$y`C1J1o&kCZ82JGMa zq(8zzz(~kX%&A_$R{;RezzMqq_5R)4kCGo#rzDQU2-w1L5p{rDQEA(O)##9BKj=BN z{owlP;TF>gCd`W$q)O?CsaeCCdYD^J%#QVZz)&IO@k*zk!PJ>CKFz%X?5zfj?XX|q z+5m`>TC33yWZKcipa$DdZv7!v;)shACkVg;7~`OF3N#W(-1#elZxk4YOS4m=WoI9pcj`nZ*H2M3v_K8*coqJmU~yJ3wd~UnQtx0+xEt$ z=~sWPk)qm}kCDFl&P7?!a596DDcbU>m8^AEedld^<~|uyzj>bAMoh2whTGhOZ7ilq zaJbY380GQ4Byrz)D(2pUf)+X5vg+Mmul!|Ssb4+a+LSueYL}~usU(ZU6a<(4$#04X z{@Jd$G(2{tntAd-Rm$+Gr^S=XG3ci2|80m0Wc+I!v;Uscf<3lYZ_Q)YF!nvWcfml$ zXMm4w&WI2@xaJl4ZW@a$Q#WI$1EffW55_0}&t?9lHA}gRxIb;n*YhqD_w=?XTD0t) zsYqdA*po0ivqRh~??2qlg&HDb_M~EH3g2GyTbINlecpVdmx*sIP}b(Xkk*wRsRs_lo?npX@|YsR$#&6`){iK=@sU^G)RWVZs9MZ7YmcPnlBmbH;mf80%g5g$ z-=#$5)tz82rXuxb8aAIyKj+fuuk)}LJ_%}}5t=$!S$$CfT_|PfOT3=d_u^vegG_(N zS(+_M-2e5PArfRr^A1tcY#M`W zpX+M_+t>&3RS{D0UtjL!;mM$01SMQDaN&|O?++JvuRjJ+pPBj+In>6KIQF_w3BWg4 zzgf;xXlEoajrYA-!7RlEcC&0q8_!R9|9qd>&yYfGygE3%#Vh@kK^{kpn7+U^ws8#YKG)zNi=u+uyAks?rT0ljDzL(K1m0wpFR^j7 zHn*r(ctPea$Q-a=w1gn6v`3=_#(SFT7~jK^@y}|=7&#ysP*7K3McF=q z?g@C`tfZ*VMh1z8*043&yy-3pH(0luKJat3k0sM2s8O33u8jl;hZGYkxAY531cG(^ zwRIXX!94%}>Mh4gB!6ucFvHiF6Y}Qne7syYM`_&es!N%VSm}Vq?IPlm_(3nt#v3@@ zT^^ieE@4;mfzDx7^&~{9WaeYz!|U+k{)m7U1>zM>V2~c>mH z+PL4I`^jS*?@E$DC?!S@bghT>AZ6rB^)9p!^6!rq`mNPQe9@sR?nY&I&>D0w@ObGt z!jKwRPfnpKr)!j&MX4PgaKtfp6A`q*g4$SwLnPZ?qxHIq+St$bZqgMsx~S&2;Ljwj zM6+3T&v*Du>by#xpHWX7+{D+Cj_xxAH|%vjgac-yR74<1IdKFLRj2zskt<2~^Po{V<41?BI4T4Zse_C@(>+RA_jrnW0oR#RXL`N zatwnmL;JP2TQur;DxU5XSm_e2)CeFL5Z=tSF>>%u>J}V z&lsqgzOGWc1*%o^joh--i6wWF?hsyJA)`zQoT@V9$RYA0aiDTsMtC#85;zuyVGlts z`Y3l3K{@gJ>$FeRKXR_9(1sMWh_8Udt0(33WZOl23;y61S@+e)8t~X`iV%jnI>keQ zYL#Ww%S9c;8gcR5Wu@xD(DGAdYL3nG(3sj7_z@yd+M+SQ7>n{+8lJ2FHTnvOfn?K| z_I;z2{gtt$WLaKvaB)-M%Y5x6ddC%{7hgeRN@d1MUuSz6DGD@PbQ8gxZd7g3l|{-& z>geoE<9UhPQCg3$^;KNz%W<8=BUo5*W^)N?9~{PyM#YiVX(qe|28GlPWTL<=BzUGX zo@+K>K05tsDGA-F3He-;mlInbr1r0Q&`D>+ISASS0FUn^_*bW-#r_`UMX3B zUEXS|KjPf;k67-hq`ss#Id8EW?07F7%-NxM*;%mn{`%nBrzAh?fO`A&iZ$p32yXra zFm+Rb!zcg4?4g3u2zpSm69e9NgS*PDHfB7URxeoCCoZFxR&Z4)m+F0vVy3heThN1XB?~`KO-Aw=nRu(?`_D7XGlR1 zBZLpc#&}bS`V`3N2J(CyR^C%q+B|sPz(ORvWifO>y)}b3Bb+BJ$9sRUHCar(d1-fV zfEh_#So3HScH@iig@|dzX$w=Q+R2sRjC-ICyIh`aW4-4Y|7V9PE%~nqfacUKhlNa}d7<(hfQ)*0h-SKO zBul)2yzWtfPsTkqVAz6uM0i6*&^*2#S{oAG%uweJ_k@R3#>b`MkydXR{ z?_g2K{qGnxbg)NS&(#*zBLh2MuT28pdB$-4^Hk%|J>#^52Q1RFOdc*&hg83T zP@3(w+hO_XlE@Cb>%7WCe+7Vjwm18@Q&|0VSE+WYL{D|z5?<)mjXp;ZU$i-g6cBQ= zmrerWg9(A{Y4EcGr;I7)VDD((X-f4U63FD|c6kg7j21V8H0{1v3liSN4wBwwY*WC=W%NbZ`V z?7t2&a&>HoxHx`^cvSINne{dMeXCxg?>GO^<~RhApJVse;dloS-+l)JiBN#Xw2(2# z7V_$SUc^->(aIiG2-hip2x(*W?_cc85qd|h&%-fJ=9JF-t1|ENi3nNpkg~Pc9HU!y z9Zw|4`-C44q{!x4G~P3%k)2gb%4)g&qU_*rjS4&vA&0tLam&3(BJO=)A74-NU(*iF z%R^cIZ&GKMFSIZIySC-%(%ts?`+3OnMDa^gTc?BvNgs{kC{i6+N?OZ%h&D-%q$YOy zk=rw2`?xet!xP8UrDh!2m_T`7tnb>N6le5FuPi(sAR0_7R8F^MiCmrKPdrLA?qaHD;(dNt`qmLWa zEV86_z+M-3*BnQ*LV|ZB<*RZ_<`vxpG_jNpbukS19n_BZRSfBkGxxPmZ*-4D+b{J~wszD-BW>~_C$45Ze%0$cr>^SH}I1@f59pTex14N_Z zLj_6PdL&SxPA>Z6b;#{#=`Cy(1LQ@_v~M@h;w@6we*)@Rl@MUVJZ|7jn#Qq`%KXZW zZKX|uyp!iGRVGpO=RL;g8Om;>kr})ccyDW0@=*3rLH|z_YpfG#Kapc|2G{{@%t0-1 zdSVwjm#bosK0c|hxRX~BW>g_f;utXfZgLx2ntBSuqINP}bTmC=e6Bc`{=i~Ck@W4b zq7M$l0$(*QEJv=|YVXn4T^hfup17hsUw;hUo2aiVODM~prb~PtNB-}QCOn+3JLq#u zOU%aJ%Hpo%Q5tF~DbiCCOibdy{lD(XX)a#n(fNAqu828V%txZyoGHc+fe=%hnXiaE z#eWTFSXJ1QRX4!PXF|*I`q0{LiBs?vcUJ*R0<>YB*q6=D^_KogQrU{cDMp zbmdQ+#ewu2Y%WV=itN`kA?l#6*0Gxb3TqYv!5P+U@8ISTy&h;4Xs$Ok0-T&J9 zFA-y@a%n08SVji66A@7;q^q)(KMI^A57h5viFalbL5yh(W$+9YlZJ4lRSm{X;V&zmIYzw?JoJG#mf|mip>UVOEQx?OYP!Wc9GIB z0qBagK(_rWrCDNMP&*LlMiF;VxpKg5T%XL~X+4e>0WFMA?*ap~pAScKltpq^)ajHg zU$ZbfGUA;ecbvdknv8u3ZpIM=JZX?j?;@f%tJ2O-c>vTeFG37A6#+}v#SnO7e^Nnu z1Id^Wf&jSvTjQQDi_~3f5TU>w_U}|vtYqDwELj0%t;OJf^+Gb__aCI-{^D!26vq2* z$cVq#2~9gcv`=L$lg7R_d~!d+=1AkuB;Fh#D4Q=#HZi~U)$;IVMB+fl%G3~5giR&# zs=>^2b#E3Gv3>8!+{6S!`-w=MyWg!eV7KdjX24%k;uG3z@tKRB{s5){&RK-1G1X#l%e3=9plG-0tz#x>K&aOl6TuC zJJ$zP(MqU<$Igps}XwHm-eO>PrgDMS;vB=UN6&q;4jYP?mub z)`v8>aa`=tp6}{FivMbVir*sZ591f{B0VmG7QyLC=A7YD6PhdsU%x0`%L}vMt(RZk zHaa~^JbFVWqQ10=Q71?9Xb!$6Wn%snC8|BZDgvUWg1bvTHz(POK0sOzz&?}vO(Rm3 zSS@;|c@`b4Cv0|x+I(wH$O)SxSHj!uwc$?GYO zP0$MOtpliJ18?mtdeQ>2>*c+C4c*47|{_+)wvR!wP!Mx2JSgbMFrVAZhKJ7QJF? z%^Q;s`;b>M(Wg^hdbfp6w<$a9{%go2D1igtmYfuxlxJFZ6<^*sUNXs4GEtma6$s@W zoOxeMp~&%N#+5Vz}vtDtfSD>!6fkU;XCAeuP-+%a;`%J~umC>3g< zoJ4m?IzvGi25KpBiym?=fsp0MJYp=w{YQ&>%}3LjZ{G&OSk_dUpSTe@#sh4{2%_(A zC0GNr=+RDD0itnhpI)i?&Z*dUsIIFJli0=!lg$Cj(nhR*ONDd>3eETVv;v-a>jEF4< zawV!>&=5GN39!T|#OLM`ponQL{#L2eS~;ZD{1M6pyMX1%h4GSG$D=Fw2j)@a?FKO5 z2cX4*MY&gMbe^kVMPjAv;+Xr?&%5N!#D{w?zn|B%s_w@NqE`nu_jpHg9w1GVvX%ah zO69MfM_xI;)Jwt@5T_~hY~33lcbub}uuNqY#gOG1rZZ0YHJ2<)oBr&)HurdMHy&B~ zPM_iknyERW+%n%qnE%;5e;jt)sWM~O6B2ST3p?2wnesl)k?~&od*)3jRP!FHbMcm0 zm~>{~QUu`~NxV3oApHBXDOJA3CD2^L&#NlNmwKOCSt_w+#4!0zEvqqhZmg;Z0o%wr zoP%v0w^h!rA{rM4FhC_k#)ca(u5IqlQ2jjdDPUm&IT^|<_{+L1XS8QKx0F{d5PHPj z7&j8(K+F-w1*@uLumof}?FK(*!i3HpBj+ruP(H}6w&GHpKj7*61d?V*Bn2(INQu8B ztucP!LAq7P&5kc2s>3lX+){3?ERn&8tlW$d5yvRuVCnY+dg)AXg++FQEf30B1*!9@)Z7{0+ob@s6tEXisf-7Ez5 z8$;Y^Eq1Y;O{ftvdM)O`3q>507f?m8tpL*s-k31Bfezhc5PnXEa5K>fuJP=uY(En% z*lh+DgnbMK=36`lJYe0mp)-oU4@m4g_mu4Z4{8x+P2#c+&76TvJOMbPvQb}~+}@U@ zUIb=M!^m>Uec89E_$2zPId6bxGz0^pE+IVPV8zD!0>T73fY0f?F@7mCy|3Pg zAxMk|_EJ?!$lKruPw9Ev{G0~bs&VeYit=}w3kNqsa%(zYYJ*Gi%fsLD|E>3=Qtn8# z9qD4b+4?JYxXY|VBh2TC{!ftQ;uyOv7DX9*&`oWxHTaxJ#N_4J>lHb$$jf-(siglm zH0IxK52d1mlwo;zz!pGt%CVsKc7xMksvkxc2XYvtAnsh%NJ*?Dj5`A~n!&JS`N^@( zDUZ{+73Km%s&Fk0NOvu%;P}{g3@?a&Y!-UCUgSwi+@0NJS?gHxMmF>gF+A)P!y(^H z{jVS$L^KL*h{v%2crDsE*DpEGsh0mNj0Qt&6T2No$4kT@3S=;9ol zXszG_N~wKgCM7*XL$dGW&F4aHoTiq51ZQ-sn6j8N0T|J*#L%;eCepr|bqAS(yk344 zjpQ3}??FIZ_`9y;?10J7QfI0D-r~eJk2%yOtwmzVIr>8DNp<>i*X`m61H1KG_pwnO z7t9uZMrC^bVh=y-T78r?TbS%M6$R2@HpxYq;oN)_^1vD?0;W`sJYEa?IF*B`_z!AZ zp#m{dboJLhSw@sb78gsfs%d{wE>&v4lr{eb1o)yw1Fd{!P3lOtd&nwiCs#$XoTZ&D z?OWq>#fxjsw<=dhyHXnwSSq*mUMh*_EKh>q-Ngn-Q#Efln!1u7s8JR0V27&JwHvkHzOe$^j zfKOdBvV}NyQ#2jYq#3u3blhr*$X)&tf1Vkg(UE%mVP50x@@0p{AYfNJc`-8UACmY+ z#INv;yvwsUk`b-uAN|)Jk4aE1Cm;89LJIlvHSN6J{9g1>Z>a9zN(jpz35Z8 zg{dGFEiCvjFz5#;jBU*?pU(@FvLI=T6**yCgL|2kA9b>&gX<$g)r1WTob1{a?i$}#W$MT;J}IBrbL}d+%sakN$$IB^ zwGS^WP>`yp=oxZgmRQFyccc=9crGi-1R4Z5z z{zjmEObU%Za+(Oyl2+^?T*}tIb%2(=oJ8{)>oPTWH#a`!TXOyi=(B8|+;T zw1Lox3AYXL#E25GrwgIt50W*TsWBo40dMzij*}RrkU!q87(}SwecXsC`@Dj(n?kUO zhC7pd=h%(PD-W#p99b3;`%oUW{_|x<9?N_2&`ciV&q`W=+Cn((V(j9>3H<%+)#dx` zKyitma;}&bGkqT+X5hnC_A8nK%`7Eu!bxRsTy@jlLcf*eHl$2h5cF9Eo+(x@s8wli zY#gBCLhfA7pbJdBAv6PGo<2?xE;xmbZ;kv@WnCCn#(^ErX~Uk}F9?cM`GqFLn1VD8 zx_wo9iPZ0aM-7iMNZZ|hb1rGqUJ$1-OJsCgjJ$;^H$PcNUX8|N|C^K!B93h)c8ZxN z%lh{_SXOqJ!l`($^;l?@_*+t@D(+9+wmn*Gu2fF11X9tgsxruP>Va+`8B&_b1(g0D z{m(Tp{Di~XZ^#7NjepMw(eVE~z99BChe-5Rnuo(2(>!9c1%1kCb#LFC;{n23(^(gP zcYaob@hMzA?Or;z9*lI2lK<@CSUHVv8?_05vtmi$35$=b>9{yLsCl z4lu4p(7|rCx6h}q@ok7(J7#?b@sq=*#zTiH~&4m;AEFO+wpwrK8xg zLAt(jYvhh+AYP@1i(`!KoZVS!nfhz@9&?O>u;T?jq^?L^QxX1hm1ZdHhIx-U3u|MH z)*-HdHsn_#Cs#_F>XBC z#8Lrzp9q3lVi_F~U?&geB+w7YuxR$AqfVCEz{fF${lfOFcfgBFVz0IIo6e494ZQL_ z13T!clm*Ut*2xH4g_|!oN7akgO95o+UO23mQ-zOO05Ug~-Y62Jqn~>}P|iB@5bW`1TyhG5MWQ^fgq1C)QBWX`$KFNF_otJX$bF!^7^TvQ%E}8$x@i8dEMN?A zm$e2HTvF-49pd0IJ90b4oTw4wI$HW9Hur};RNuEqBPFmmVW@K(V9YJ@9a=8~phe1u1dJvH zW@8xY_EAs*nn8Ewc3q62GV{Ok(-D%yfcy6Xd%!!oK1NceJP8H^v z60qdf09#I$-Y<0x5v8`Oh>T&PByP}T^E7$2H55_qTUDIK-SJ-=;Do8-9>j@QODE|@<&~Twk9y0N#|4pL5~Z*T2>G~odSS~zJ`{Z z2hG2VnYHY7d*fD}Fhr-amW0!q)ha6smf*v^>TW3kVCa`|5`Tdq`#blX=R7fIcr!N_GzEN1WnTP93ZGfyp3AF^P!nR3@nYx! zvb7LeZ13n`;3?{lI84?5vEM`L%S{2U1~>MG8T6O16g2Lpy&NV@IGGnj8fbQ3vBCaT z)U*di?%-np%njjyvhM9sx~nt0aZjy;KbOCOb7iTgg6vPI%fGYX*~aTYQd-n8ETaC& z`XgVe0RtxWiN~dgYt#5Chp>}fXQKQc-rC-+5`trFh>WcVIUvbT_@t`J`64ld#d2H57jMW+(o!FiLEc z8Uqqgk;HPvU?wGfSe-`XM z><1i7`0)Z+h>|IUh%$PTHlGTf|KY~p&NX93t6#^n@Gmo;;9ns(byI=pW7F`FhXVGl zY7{6Zy#%{B+O_CI={fHYfjZFq@q8`ooEUSj>M=$>7B85KPr8he7wn@Lo3p)7M=#wo z=+5rSmC=5n;^OAf71J~SBaGFf#Zj~U3R|Pk7pzv`1uZVcsA))>NK=}~)`PmzO zoTraIQsWJY2M_##L8djAr}wG|l^j7Cko)-F0rnhirS##6P@&a8V5bvA3YGUQ)i3by za;BXXdQx$bAQtm?6E;L=K?&e*K3|^u=yE2B#o!15_w+*roOmzcy^_*j!ME$5Q+r{GR;mLRfrlv|p%;IG6jKvjr^kn% zhZEaDzxe*{aNE{wvg*c?2wc?9y2nMB|Z2l$VtdO2DhAwOPZZ91e?#P(?9$XzKiV;KC4obWgq@P5x zeRVl4PVvO3>derD+EBVtdz4O&bkR&7E)7$)dIwO`{h`u`Z`kf(yoirD^wkow0$gvTI4dvG+2S2Y}A|2S;e z>fyTbc}G|-5$vUS8#z}#^77+}_KdI64 zQ2EtB{8^zDniJfC+?ZX0y;(Z#op8YW8J7<@e$wS6rLXmZjAu_Gv4I>D(-1LK!M{D9 znr}(Xg*4~2A1`M~PZT$(FqKlL*;S>*%ztFJuPhhmmgMzrHI8|!E*k+78=2>6CfyG@ zIyy6(mmks1DZ}}0t$UKA6gC7D%REhz_apvhIUuD|^~9lhfZtqm_Uutj_}hta zv6wB!>hQ#Nn-F@jr1FiE2j6Kt6O~wIg+iN~SS>KgZ9r2T7Bp3`#!>Zi!{zSZP0RZj zCj5hnY^6v#_n2qwQbac_5rza`gSG;FeO7Ui~e5c45~` zw`{`oD%C3vm{Fc+M0NNKzt%2jxjKhK9Y!9>o(RNX(7xZ4(P$$KrDd!|8kKLj)1vh5 zA{@xU($yi=+LQ)lKLLvq?$nH8Q#u0K1h(rtB9c$?Sa+doY2i18!ATY>x6SQAmD9I9 zrSUHW$pE*j+(w<3n+FF6W^z``>O#&%O8l7;*1hT$FJkQM*?&&rFtruOGDed7oF#D_ zke#>JIqwGmDD1DA&R0jq-P|I?@HLK1TE@k-KVXynjOl$o6WWZ5uYSRN4(eyMN#*bY zIrDa$623mVXN2GFtHZgpVpDlz-Px>2ypzP9hqmkt(m6Y8DvlnaPHp>I=%;VPJ$eoG zSznn5-`O~ZHB8{J{#8E?7wZO27Pop7`|YD#cW{Q6%79SpYhG&|GcW~YEs=^LmUx6{ zkY|D_Gh7GHIdCf@x#vH=oFCnMZm2@63F!IM6BnSjdYkMBskH#}#k#CJ)L2)l^Y@`#_+j zwfRFaO9CsXA0_F*jq{6-(PD)<$ml!J63EWe6?q|V;>Xse2u>H;CY*A$C4ffwOZSM@ zcm7x$CKo2=AI=wIwl|q>EOxh4$EE=b6C;mhzQ0wR{q;IY29x!#R7VTpP}j!eQK#(H>g9 zA?Z6nTdKe|NXz1oeq-1W{va^kbMG+#NYwlzBIzh@du*C`gKZ$UN-B^u*`WXL;>h#t zwo2f8oA*Q1jnn$>S4aizj1|q5}0(_GQX~PkmEYTGJMP#a$oso(M z_06C<7*SZcNBkP5Li-E-IR`scXa@y`Z-qTurw*wVm;Vdl+DVu27HF&H(x!cp5?D_! z@l{w={>Krn|kiJM9UY3wU=^W%3zPr@DObiYNW_9t;{ zrJtB~eEu549z38FviRVHOG-UDODs!aHR959F}}}0SVeqkqA&#)v3yl?p6Eirb!V}7 zCK-gWtn`>aesL`Ed=^o^hM1*mq?h4~OY%+-8y%AArHlKIEwha0Ft12^@i@J4IcD;dN8}_Ukm8D&y54|J`8G7_n7j2$_7plJR^7c!}bX2(|pc zUy7aZ2aIy=JH!$}vX`PvhyAgPoBeUPF=_)sOsYam4~_egLbGJvo_Z_M@Z}?eaxKE*6MA}$hz2MO2a2zmgk~myh#(kC3QWV2`70v!e3oV z5-kCY!}HE5TG75MXiIJl3Rg)+VxDf+>CA0;TF`c7x;o00shp1++u9lb0m=pdsDwg| z%Hj1J6yNcz9`rfy$0A@?)nV9kd98&H+yR93l&3BCY`l2{H{#y!Y$AG8mHl`Lm%jK+f)Fx;sBsECvH z>Nk-1_F>%$P4p*+xTl_>aO6W(B9?$YtB1`QUJiXvJeu&a&%=Pk5i)8nN+li2;KbY` z*vMl;Hw!aPf+YhijNPw;pj5vYKiJt;L&0Zrjh%?|z%#jX24JbzRR19r4|%?fgPzVR zV0_9Fw@ANeNo=hsiC0q-UP6*D*CRKyP+yGQFFn=p`hta!IPR960v5?|bV8{LyXQGHLQvw6!0O-g-meRi`7(1=vF})3eoGX7(I`_qJ1R zg@2~pI5bv;$6>2ev(^04g7#|PPfl;zv%g=BhD9Dy?$uOK+P?hC-%5eLKIs-@n%gX?Mk(MHlW{p5YE6fv&SuU<{ za7HItCtDUcE3LKAsb2I^t&^!HZ1Gd0OfX`RKeHiR@QepMUIbj0jvuKfp{9Pq-ld-d zz_Vv$@dm%52!6Xat`T3bdBZMS7cF-$X0DkFavFDUwjbf`tb7bz;E45w8=-|G_qjqE zq>Epm7XkP?JsO9J*8qpyXE2H5cZ!ir%x={k%PPfO7;&VN+)x@8?N1VD;9A(7r6W>3 z*@GeHqM2Y)&p}dq70|FfvmyDK%FF*D6)0|_BPjqHN1?u&J1ca`#o%YmbBhVc3AbP< z$liX1_t$BJFvYbilJ`f6A5hvFUo+7XNZGwMq>Qvpd$iwAY;x}S70#>QN=^*}@d4r8 zAut1shz260^|iI(ZzSGpTPk2%=zU^_CuG`flttN+xA6n`18;~z&Y$$z=a)u=Hn>kr z2axADXd|;3d@?4Ffq3SxZ*>I%MqUy&-iQ=}k(DmT&nCx^bD_?3A;mUDof|GE*FTdh zT?$k9**d8$B}mk83%(l~J(G{z_n-8}c=w8+e?5Tq@B=(RG3cR5socV0!Vd={C^p8v zslFi`aG7%oS((OXvN2?DD>RHUr8`k=rgXVbw~p449=X+8}N4d4;ZV03S)TRy-KrTDJPNMri%nC}4|po6wq2nPxEM^?2`HoHB>QHcjTdhw)v9px@!f&4rD za>PJt98UeP`v9ukit*ymS>rJ;Ei|s&>M1TY{%Zmh%%mF%Zb(*!_Peox(krZvlIs1* zsuTdjDc-i0*$UGM=e>QAqPG2SUt8?I71dJqKR!%1pV=%Cncv9DBfa~xoBh?j=!&RQ z*fE#b?iB&z7T+9uwbp!;13e=2G?3yxvqELL-av zk|MoQgrgGQF?fw&?d5L7`QNj@wqrltkMwpgDFX#t$m}Vm1-9htSM1x=6*F8&dPZ;$ z)t9I7edM7Z=!C8!exvrDo6^Ba3>#Z|?s$%g8Wi+(*k~_eZ4eq{a0qWCoB+Gm^Wp+v zaRN=eDcus2fO%(zjkqHgKy^U{QM~l>x%45s8Q;F+I29-?eqT3Wmpu>#;yayh->7~+HwO#9IpwO_z#pbJ(YJn2Y2I29VCSRT29m8On_i8 zgqLoK>XG5^(N7{$EJO~Wi5x^i1}vtBw7Q>tn2FU7+9jM8lf&&FtM2x7ebvWVw%&W< za|>Q^D>o;yz+;;c3Crfj%EJgJVb$sN+1j`4n3!Ct5}HvhM*2i2jIxqgw|d`@URz*U z*WT=ZTKC=fWK9Q}c(#~w-1||Siuav^-+M_eXL{jCz=~q=Mz^`JM5JGj%A?)B$-~f* zU$0UE z+4U*EzmpW-2ka7NeNRNTJJRr637gA*uXR#o;QR<<9X*vCfPztE%o8^I>?H&2q= z*$5^z1r0yT_xxX$&j)0TmJi9C5J4i64Rv)i0v^jouM>hcjlxyIN-lbF6>Rm`j)E5R;V(JhV+ zG&`jC>%SIY45}EEX zMV@Dz@trSEPilLwpIfotEQO?>HaR*NEl;O&Ex%uPJwf*IuN)@u0zMBPl9_%4A)3d{ z_i`^Ebi+s@^zKF#VO6#j3y%g50uOw1Z&7V`T8-g-xPa^~0vJ5m&uFE{_xZT`_W2B} zj7JD$t2YS6;oV6bq|au^4Lk55ETXY$! z@q=_TX`EzIGnLmKNuA0&CNYvCspya-U`XyjJCahpMKUBK?+sbf%%{Sm;+S~%s+q^< z6_5^SUYG2Vz3x2`i)fl~PTN**6;_#&1vqqJAV(hU8v4)D#`#c`jiIRF^uPbsYUR$f z9-{K7mj-8`*1QU9s9G1Bf`^||^-(%%Z$!#{S7$qG%pD`2;7w6)b8TWgXtK96jP1Mt zSOJ)lx8k+mHF>dC7#7>;%~9rHsRUa+A{taD9M>Dp_#&``Uong?fD&g@zHRBfr+~ti zf<0qT!%ulwQvbl!s~A-z-&sy)>HjSMEoHyd^D9x@n!m7KEXE6yDca!f1$#-a6!PAq z_aN0`*m>W0ITx7abWYsy2!mJ`Hcxjv%d6j9f8}Cw1JIsPXeH<2oJkMpiJs}BOpbCm z@M+*cmEbVNGyh=W_o1>qMr@@Pc_#q4y|ThUe+)(<$pzQcu)ck58oIO2mq|1JRDp^AW1)O@~B@klD`RRd1>)`#I7tXp3H25?PnVv-=#}zPf-CSH@ProVNH^F1id-J!T zV^Sn~DXNiTzqlb2RSy6EDMYl(c)_Z+d+(|d(o1a%bp1P|_a4R4^Iz?{uydJtXtK7M zyqox)%|%9`oPTB!T2A~fzlB0>PCiil_wL^sRKW$Qi^4sIlJM*Sf56jkov@&65dYly z)0!CvTRtn_um3=>RVPG(>M8X|@=-lQZP9+akk{Naw|zPN+qC+z94cHpcnf)LS>b;- zA=S9D7i=sT3HLBs*#;WcgI+hJ6Cs3}`l6*Z=fNTbZBJH?1;-Lc481szX7{{c1C$p}UO{6Mpr{6{zC zdNJkR;JnWlNrAgglmfQ$tzu`gO2LL_(s2Ig-A?XJo92C+Nuu0FW`6w~<~OW;Lu=26-}d?7bB>r9 z0EAUkWQ@CEdOx^Ik665`OG2xp@!9_eJD->1_QF*-xv?#M<9`awkQ}Q>`c|!icmV*Z zT_}|YJ~Q}_+cn~uMjh<4h@Gvsp(ef^2hgV~I%rbnh^4Nk@EP7Dkr{*??!p^_R$Hf* z)`2kjE%}aBf&Z8fhkjPa+>{u7`)QE2G!C~Q1lTnm`=~y?R=$zwX@X!9fnDymsA5LK z6OuNLp<4DeLhU5?!QvM@4A1;h@LrQ7Q}N~1?s4sS+n!oEKAtwqA`dQk@O|5Qw3w+rq)np;c43nMbL8#JxfA#}h*(lih zjIb8VID6$9&TM z2d9wA`S|7{32ifx-~ReTXuWnu!R}`-SQ?SF19(KXx>Jp4W00_@69~{erSu%^oFhiT z(}5^gENCMvMbuSon1gYUtD{zMD5no>Qfp>^@col6a+duEKURG&-M^$jjhm385rU4G zwPzadh7aaR%ui&iJ)#~U^EF=*uZyBYKnAM!WMEoguj;A_L!EJz{;mqax`@X;Eb3>a?nWe-#8F4mEycf z_jICuE5Ha^|1JL+(GW?Mu^Cmg>v>gf1p(YTd#GX+NrPQl&|x=ZD>&_iJD#}zwI;aj zf0SNft+Fo~0gp1RIR;!duUx3j2hLKQ3~^;C*yfxY;=wVYT12f}v$g z4;5Y>PX=&0C1e4iH1t}TAW4Jol?D8NSOnJS##;*|02}Sm3o54*M3*K&Syi_@IDVv3 znA&C8DJF}e@bS=j*xG_UZ4AUJy7&0|I!ltkJvG#z;mumbd_Kpgd9n~oK4f+0w>B`4 z9HXW?-ClxS^)SwC`m<6rcKtId{5K0}Kf0iQV`(mYLyUQ~Ew*c}h&EgT@E*swo{V*J zUhRA^x!P|K&-$96-7OkGWaU@FAe+ais80|DVpz=R0$hZN*R3HAw&lQ^KHLvj=Qgra zTADf9w&b0DrsDf7^HyA8B1lOBciAnMzSaxYmVVm1IM(`!%^|Hj`UV#$rh-p}tk3l1 zDEBy>tw2w3<qgT|ySb8GXDw3W zVh)muc0Xam&-Es6qZMPW`c5CeQ=9!r`A)%0D%#Wh=W36gh$upao@7Ix*Aq`JTNq`ZypZrahSoaURe+{zc0lPe zw#PZD9AIK9tY!?7Pb8{oNa{P`>^ipN>#W9*Z;t8Xv4dlcp~V?%78sT7-F>e^1dAIv1q3NX!A%PW+E8) z<(%_w^NQ+-FWMR>RF#wB1xY;T42QKfSs^yR-a8&4x$Vbt`u-FEve81#+x$Y!ffr}D zs*Ktyk}F*|(?JvesuZA?_y*Xda6$i6oVUKPl<+HT4C{V$o!}Uj9{&ru@%KY_VZ4;B z*_s|@UjfDrgM<&=aoT5mKv|bUU{%bH%vFY{86cK@li|28ZKHWV4<$yi@e&REw(L33& z&W{km@BU&`jLavKtsF2*!&lUgQxqdIu=LI8bEAZyRr}e?Y`C_*hS09}U146_F`ua1 zS2>YS5KItH=&}%}dC+2N4D&&~fUzeN>VYAv^M0s(lc;B-rSZ2R0eho3>={FnTL*T$yZm=ItXe$-AxhLc4suXeXI*!o=O*{n=;i)N z-yLk3nPF``OSbikjE(GROd)*;(7j`?(6$@X{938;VlCw&UafB!Sy$bKnzlXgnHd`e z_-L9e`gHBHj4`Bqc;-5Aqtr5-QgAgMd%{=cY_I*+x1itr zASHk>H|W&)!rR1ID(B*MO~;pq{RugQ?87c9f)28Im6}Sey_icc&1c$~0cwc*Ht~pA zwvngL1m14>yT#}0;zW^~z|*_(D!{w-pAZ=a+lFBG_4sfwLfU>n(vQqm(a18Ub21Nb z>!0m38%zangyj?82UKL3uqt1P=tQkdzKv*W5)fPu7bKA*L$ix0^Wq`s+DmJ}&v|Td z9aNu#(@#F8ahNwV7}opzKH-NcyOEL%PWSD75qA*-F02Etx2I+;wkTo>diAf5=W1al z_oR;Z)k*vniT8Uyt8#zWwMR{F=d|fQF>Oh4w5Q25cx``5g9C49MS}xykvD?VWUw0m z=cSo3hG2=1N~5;IZX$4!@Ky*pOD)wqMdL>6oE?B{JnIOyV?|S+jvNdMKLGqkxQXU= zHpkYkE2rgckukdksT5iKSz?O?%Cx6~!9p_x>WASWw5Qoi#?~b6UwDLbfPAR0%{{=E zgQmHvlDQjLga|Hmk_B2bQL^HCJfOvIZFjr40lLe7f4bYt^oFUlKuoeY0tY5MU7?}1 zjyIaCqu^iN{#PxMfgCfu<%&v~WJ*T2i}l50!pKtw3^tr#>37QEtP8Qrj#ZQRYsiaO z)|mRQmbHSlX3eBqu&^V!>$#?sJ?$zRj*`dpK3YQY^(w!#^@Rocq2i!$9*|H^6BbAX zn>u0JlNR8Z#QdzrBVDl6Y{>)E(4YOL@82grBR+go2Cw$N?X|kv^?$c=k@f6Sue~!r zm0oU^E6B?;!T%m(bprZ#72ADcIj-MwdhF~8$V2z3M?dWY9?ob1!PnbLPeAPo+$1YP zKHE|>rftNlkXG!|H`HfXLIgfz0p(yp(_$P>(6Dl)jwE$8>XB7Zki`9_&HmM+oNyew za7CiWj#K9*jPg8~Q^~lIjm?i;xV>P&p{ol(c0=nRnBPI?Cl4{iR*c1gvG+8lJZ^Rnw>uNyOR~#e1BKrQOnsJ zHHUL3i;!}*3*6YoYF0S26-Ig{JA*Sw2C`V|?jsC*6Yac5VF{f?DYi^EkZV@moCfEibfUi_c?%F%qEj9`t(zOa@`TwfRVN?tUwsph|x)d@gT z6M8CW3hYA+u9c}fb-KXM=_Zlo^MvD^yVV9l&wKzkMP3ipGzVNmtPMaG3oK%b?3`snDOb*Q4U*X;56-S~Wnchx|ZD}(8Va{1VwK1I@Gkf5J+sb-o;w_X@f^KClm~|wqenz+$ zL&}^xPAfh7e$&WE{YGLKZ>x`P9M6sb5`Lq!s^5V0*Y_{+3<&5v?_pRHUknOhUfmBYlC8gpIlPoAuIkP>pI#? zzWcrR{l;o5D1JATOtX=%-H=uh5;6l$S=%+yFh!kEVut+7Uu$10wpSrYQOp8hcwHhk z%jgna&;!;CF8!i*!pNwIdxyR@jnwI-uLr=K@ASO|6vu;OQSUMN07($V3UXgvtX(HE zOmFT9=mQL8{&V~SlsCB;UnnQ9q=Hn0zQ7vcY(_DVeZ;?9o;yg`2ohk%tjG%9PedFp zTQVO#_oQBAwSTKy+C#fAWilOhSN9EP`*`NW;6*I`s@~~mxMR*gXH21GrY4KV z4`-|K;V13+RQSGA)3mSu{eA9KWD#-jQ&F=j|1O^q$L`&ac5xaWGQ1c?NyY@+nK_9w zJkt4b#7)e@{job=d7~r`G*QSt*>mh+B+vI#69`xJE6AaYUJBX9KNE~RirI6?iygX} z9*l6I#{65wbZJ2wrwJ+P9$M@%?)*E^`FOkMhA)SBYONOv{>@|4OTyU3s^ z7I0~2pdFZiHUE&D_9Td5di|BdT!J1U1^u8?a#ozaIBy8O3we%JGBGOed&2k5sGo1mgZyLeP=uXXZErguL_?y&qz41CFFAX8lJy6ooIT)%k}1);5eJQ!x80~`gjWU zT=LsVn zY5}hhC9?U3FzhT9gsEX8v4Qs6YZ7nxZbC4N@BpONp`?)c%7&Pvhw1VpnYTMWx*$D* z{xki23s)d0jwQp_Eqa0>pn`)n;~+|$$4JJU2Svf_xm1%uDBt%n3kK7p3OKsfl7%}? z0CY0sz7?pv+lbA0b)s~eIg9^;lCk+b@(I)X_NovQ`nOX@eg+Rb>xwNv<|++huZTAZ zOZ61f#-R>QPPzQ1O=qR=B^Y-I@NXxuR%m@*9p9i2bH3mR9-VyCcI{V81+7M=D~jQk z2QTarspozUy|bi`=>zpaG*qY}W zLOxD0%VYfcbA2HGWhmM7)aF1TG5;d9FivEQm;c`fsEX^vKWV2Oqur`u2zgCOWc33+ zT$S`C1`8l#IZ{P2TSmsihwp?C;*$YiJmL^5WqiPh8&IJ3gMs3%P@8V@X;+x6F%r|e~Pc=%bpaA7!+@YcPw_iugO&RMEhzbQ9A^3vD*#ylk& zZmHEL_}R@G)FyU@^<32YNmJas0OJ;|6(UOeV9A^e%*p$b0>$G zWdaXHe}L1=n*7J*)?XzMXU`bq;mPqzBquk|)a0|>W>IYI)pA#dWpW5^6`H31BQ-jC z<^*LMVvOWDamd%KQxvltp;8JYO#Pfh8Hm?h54PZY?kpQ%gte9AY=2j7K(h3Mahzl9 zoss$UJk5?UQJUyw7%*&8au992&F)~;i$$5e65dZ`SFRa0a+=3bK1^KX>savz|jUf>{l3@7Pko*)W zc}qOhaW4q+mU1^Tt(aKmyH=$N;|}SJ4WNB%)}bPc?+{dAt_Uq2(&^yMB==IW0xk*#2?Kc*bK-&vS1r z&xU}YjH!;CKrp{qeL|{$DbH*}Z8TNSyP?A6K~3M|#fI;5YXjK6GEE}{pPHY17eJR% zqZdQ?-+T?kyYd35+?g}OI^`qwt-IfL%Gun?ops~{)m+aHoE;yYrkS12lo<{v#yD(r zfV}xY8L-8Y4Fqe2fIU+eLPM=YvsLhKeRC#w`EB<5tgJS_lw(}%AA|g{yEbNRHD7JU zwGL`ofI!^K!oAV}q zuGd}kIPJWvWsXsypDddHtSFO5k}1)%`C-eKp9CY#MS};Qb7muj%e|Du#=w3+8xh}! zNF~g;I%-Jg&34>EVC-B*D@K2gvFSk~5M00=5ro#;W5o}sGbRTd|3Dads?ls!8B;H+ zfbp^rjzPs&h=f#je0_W#+Ko#&xsJz`cHvxn;BVa^qtKdKE#=0wSiFpj&z%#9nyTPV z&!VUqSB}8j(dRdR(3Gwd=Bwf#c{tK}aR;}Fx9HOHrl%Jl-M%R;YCgF< zSrZ)S0Fos1q;-}-Jabr%qFOVJ6WXib=rWIFZXA6T8Q->M4%dtoRs(fOehyF>~+xS(CP(9kHx;GiT?5=2jUZPlcj+VU-ww043 zNCzT>r7K5`JA$i z@l8(Jn@cgrPKP)1PFx(#oHIUoeR-^+|3H+GKb@SMib|vOYHk*J z-o2)EnXguoe@onpfZ?-Hi#hh!5lzCNdh(uzGF~rI- zxy!1dY{vbvupl<01Sro@VU+L(HVF9w{y}Qc<)rmZ0u4fez8JFmYN;t8uyH|^_c-u%(8czIfi{{6Nm(4N4nnIw2U<+$S(X22 z`B5*JXL)l|e(7@86*wyIeEU8(kUnZBn~D1Y%l&%iV_{D-j$o4%3zi;+1P6Q4HRdhD zyg~4?FG82C8n@DZ%lJgWN5?HSHxB&7VX%uKhNJ4^yT4gJmR09C(Hi2lo3(b3*kGc) zC`LIR9_A?K;CFxyDOK**&*^<~*Hs-uHc-~mJUY-t9J_2TIGrjv#ON}DBr-p+56nbC zkmiw4N_k8q1Ho=Lv(ut zzu|<@YwKS5!WBwsbUq$jkrtvS`)~c5iN>_Klc(h`Vr*T z*=u@Is8eIyE4kYvX`{YcbUVy1JZb4YbS}l%H**46jV0MamVsr(Z1zixXv3^>FQ?8n ztXdlniO|F4igLf!KMM|xuwQ8<5r)u|hQKdGrfF_$oGYn!32yF0~N=qGa3xSWQCi#ogUBR@Q$ zD}~=O8Ks`(Q5LPXjCV5&TAx@*u^RXy^FjRCutnUr-52H1ppC+`zB8HcHJ-3&x}BO2 zHMB2#y65XY`ih>An<`3w7@2Q_^{;f($48pp{OK9l&lf5DQBrruRbk21{pqOfT24yg zHcP=Mr>Fk)c9AdgOf(!pkmAN%x#=J-(WLWs*ZQPtg?tU!$JS^tnT@dP8Cp6``0IxA zyX6>Xvu_ZIsOCBf6#|(-P=EY-aN)gE#JHFWNeBxG&6t2G1F2D zZpp(?{Z(VM!135XcqD_LqG2yi#dSZXZ>`rdwVxlll8Bq}z9D`th87XEz$rd%?0;wO zMB{jMGU-(d2M15AF0`ostQdJCePOCFQes)~e$4hFItZVNxN3-Nx9EZSC*|yns)DZe z_n}9RO`vROwP+tBs7-*?bDJY8K6p$^AYg?jh^en z%WYmH6_uow%BQU^zTq) zv}Eu>mNXS8i}MyEDMO1dj*bqMkNRFPX4*&|C(w%_y6v9-j2_Y$q*8lbFO$$SHl)Y? zSc;2=5mVVg7<^VD3Q<9$pz>J?C_^x&>=C4i>;Xnz#m2@BR@q-~L#*~yT?7aH_a>42 z=GaCo;G<_BZrUqxP#J(@ctHiEkqhmWd);`i<@N}m1P1OJRONkAPjQ)J^@TXY8yx1i z^bxKsMm}PD(X<~YHRp8bc5)}Lc{ZAOnN-uWfZN=K#a+C6lzH-YvGq{i7+rZjvqR=H* zQ_CuDGg@j0_p7~fHA>mb7Q;%jA&POcp-iuXCh6Rug{OB0Kc6bZcDnn~1xgFO>i^kv z@@bew0N5u)r+WpPkoJS@5c%4`KAA>*rl$(0t7E7>1b{tSzbk~$H$9els z{995=F0bDWap}(GCz-TcTeS!rI&0SW#-`iuNE*d3QJgte7qjV)wMyx`whAb0&@QUl zze6#7sl*C0@`xvzoK!@U79$}Ircm}75I8tq*@!qJRP+f8M#zX!Q2=MfwnSMk$!`o;Lnq-lh?+&S#d^Y@ka#2|rnngTNl;40@YnUf%wixYRRU9QkD#fk&@iDzQGyMzd;)m3eS{*H%H~pB zn)oOCuak2>e0>7l^u9ZExECkM?|^SFKdl6O6SL|OtG2`?qejbLo519=#{iw1hblgZ zNna80c0>VVq;5gT9S4spE_0l|&~Rmiaowzv50r=YO?FvPw^256a-7s4>8zt={hbb% z*xyVC@{3c(v`A?I$lwL>RuLybR4{q>)AW^Ab{|e>UOU__>MHNXj8u_j@U`to+SC(+ zRh_k@wRVrk{Kl=l3rT%$`s}3biYN)Qv1qGk>L)%lnwiHf<<7Z5x;Z$WExKs-qM(-S zlAFE`Bu{&D1*ccM@T%bDL{V2qnXE))VrzkaENi5>oc$4r$_7>~LIE37)qY90boi5k zrT_lpJ6fCXU&B2a4wUD2KSUjnwS6$_XB7-jq>FULpW8lV;?F(JPy)x7#soddNNpeR zlE1jHHI!IXGBTT@N^!HoE`7}!1YUi}cfD@jO+B!|Hc#fIDh*8z!xC_2UgJ+yhSW)F zMpR=pLm^+A^Z&^G3`5MyZHPinNm-V6BhI4OQKo7H7!4IJ^p>Mcuz9ZiR~_^ZDIr;A z#vX~9HttUH);jMJ#rc#5cioT0{D)=}mFM-kRA^F6w>*Lg6l8Wh#Eygy%~cmFO7gS7 zWYWkm($}_B&eFgMJ;V%=_VO6TZG;e#N<;O9mTkCOEuK@EjarqTTY2f#MUOfno`G^- z4IrW4Rs8pLL>w&-x(UeP7Mw(n_)B%hJKimr}tw+a@)@onI@bDy2%y!Ebdsz_oA z%h*n(emllL_Io zLj)(w$ zEvxEc#iO-}2ROj5dg2GZBSbkp`TWeMmEK@hI5}1NH;x~mgsFu;oc?f)V5uORh^fG0 zY814o3}Y?SWaX>eJD`)QRw{e_Ka#G3E$a5^?gGma3oIb8lz@nIcb6ccNOvtO9fG8k z%aQ^j(h5j7Qqs**5`uKM64D|azQ5=Heuev*xo76gnRB{`F;RDnEk2OzuKtJ5cwvJS z1oZD!Lg4s*#1R4wI%CW(p{BC%WvWp3ECs(H(3$}_ER_!umP$v^Kq?dzQR46ee6J6np+dS_D&8TlDhku|G-Ju={ah;V+8e)gv2 zM{N+@ziw3ORp|~*xmbMjgMj|x!BezeKhBGgS9mWJ`0!qRguG(wD2kK4WvE-%eH<)w zW`c5(MhCE25zmyZ?k1m{x_=ikTr7Z%kAD<)*o@r?N&XSLQ{_0KVXfC&2#wg%Kd#fi z&COuXE(6`Iay*&p+o{(UHueAkLWXwB0Xwc+lo(ORKZ4ch(j%rZT)$Z+>~lLY*= zFR-;|obZEMxEmKv7*$O;hlt=QjeX z0?OB7Gh=40;-;Mxr99G4U#ngfR1o_PvdKy=gY?UmuEpB%P-h40K!_tPInX&_#5x^v zxW)KTpg6>KGs26*lh__>blm(d`+G(Ia-9BU8?QXrrm;X-^ycS;kei^EvM58Wy2ZUA z3{U>@WK+~tn|jT!mOd-M}gEgH^y-bp9T~4lFRo#*yWTVjaHYYQoPx};K4T) z-=aq0vBy0V&xZ~@&{D;wvxO!M*s4{!|Iihj)u#l~fZ%HzaCnzila0O`=CtA1 z$OoUPch3z?8B}RhYu}1ZN}qdztc!w|Qx>_U$SU4KwWvPPO=-yd%8dQAbAalg6H) z{<=f&$zc^Ap#?}!`scddEk@R9q-Z{y$HJq}LUrtAi zu6tXfXt7O6RZ4!hn;@(+3Vz^lm|tH{$~nsdmDmmoQOt54?>tGM>^By?t96kp-s)rEuWs7qk z0u3-`ieCQ+Y}j?}2Z=+MTTo0jaFZef{PGAu3rQ@gZw;MY@$WoV&T=+8_D^Nq1$Z9_I6^D6Ot_JrNe3nh2-rBp=ga=K^X+LITV+0Y8pC*HfO?VVtbY;F;2Gf301`^;TE(BFpDxcGcwewP4i>h=0yHfL+tMcn*pRfhihiDC+{lO{Q?f8=sRA#y z$ts4`_zZyvvtH7MChe;dw<)Iby=o(m`+SabG$?Kn4X3n{ZsgB(#VIKOzgyAdL^qvs=-8kSJG--mHr>EG(v>fP!?j2+@k2&B;(3_M%gQ@C8UO1U6F_US^C_@rMrA$o`;t+Wj$ViO2X00#oDO!@4+1 zv`Q8yRjDsHSxI+L?cWvO{@3b&OA|fIxRge;&Mb$Q*n~lB&~-xmR{Xat{I_DPY!GjB z&Z5c7!;dSO`;4c&*kYeqFrdum_j85?X`gMPtMZBegjL+{o#*bNrdab;Gb7` zU@^619)`!5;(+`|uDkn*HoR`~7ZPv!%`T-|vdcMyq#!`+I_l9)gmlYOV#z2CdzU=` zY@u=1dSg-tJR;oH0nhf>U@xy~-a-3xuA_H`*U3T>L4eYxD2zb97v85qo9qMEc`N%+ z9o6{T={uKK;-*p8G?i>Ex?CILxiz2(fgVsAWpo#>E(JJ3eKXqc7|FwM8#kS)v2?Mv z?BvppTtCWf^yA;%>#@H2c+`IBhvsnznxQ8NrKo+vBgOoj1k(h1K~uosYes`_nx-Tc z<_a=*j*6u|{|ZVw}w_)Q1Yh zP8Uo3ZR`RO0dzZ>qcXk*)LV#t9Gm+^xe>M@49^V`2ybH#h*3ghHX;<{<3z}(zm1tY z0*COgw%Z22*S&xE=V_`J zAMlP(pcvL%iU5_U>`5o-^&0;^kYou)nSfotN9AG)@zmvjtoCmL!6*B^53PxbkJ+<=Rr^Hx`1;C9kxviA zw3KQ3k=gmGYDIw3)%CZ9e^abfO}#4V-%7JTHN&AsaVqYnRE z7zF!8%ockdSGMw}+*N-#Tzf5`htF9_fhST{hHv9Ou^UefIVTC*&GI!9LF`&#pYf9` z3Lq|55Z#Ech)P5eBCA;;rP>kmH4vV%E}77B*vCOVSh-mLQLeQzI#^2EAn7{c{aSOg z^=aLQO@fU*Ylc}gmx)9tQ;9l2e~Z^m1|%(guDhPRKlb%xXK(s1*XOB!e?tr4dK$B2 zpq~42z$1zW@YmcF{C+vj(L~TiXqryC2W<6(x_f(zw!PU9AuN)wiDlt&YcM5z*h%Cj zS~3J=P$O0wcFlwDh`3dn$gDD#TKWoP9Wwf>e2{^yAjdmJ_AKCFf$sUdIxV zF0l)yrY`uta)ft%PHcE=n~m|^&)Hw_eM@w(rUmTj6w<%n!;X;1)@@66Nl6+Dn0=d9 zXLwI`{zCNga0zOwB5v@7>Te0$)~diYVq7!?`{C+V>^y`ii#IPO=(O60u0)JW#z_hq z^_r*SnhpOLYDJAeWg)Kn5dWSBt(ib=f=ROBxPs63eiw{GUZpiuZU`GcWM_%B&a$#7 z&p*ugsBYEKCKa}>eOMqzR#{y&wVT@(IPI>e;(~PRynfCFdw8SM)q}g>WRjJ3A9ViqzWT?d2h>MTCxZR^5hX-#t?)P zqJwxC*LL4q#h&n+E+`K-9ApTLE9}o8sQ4|jTwVR6k)_F%4n6&&=`U@yRYC6X;M|T+ zU>R5KYvX~pEHn;ZxH_N9F#Vg^+V$LjydJRP{QXr4%J>nQb^8jmSI(#3@#c-MWLblg z|3-XSm5Ay28v$myEUKQD19wN)R(C>eqXH39!Os+K5{3zlt2RUt-9$F|JjiMoeCUBm z%od)R3bH~#7fK1AetVmELParb*OAW1Ef?jqGIMPNv_& za8)+x@S_mr$el7@{vxXke)V_NKY}xSMkfy5dY3P+o;|~kg##g~OrNjz z1fIn9VGNiwX2Yxes43wiLyVauSo(&>t1)-=GCDD^sdo2FosYpphM^_l%r(7r?XXW( z?OXZ|`}9_Rm$DqPxTJBi(G-EGB8{4+80NN+;6Fz)ZncecaSsYSn+hxjb@A4}iIN!H z>`j%uA~EQg#_PmEb`YsPsex;it_B=5MOv<%H-5{qFmP`iBsCC-_LQK?Fv%US#E8FK zmf|1)I3tdKV~E)V8>;J5>ytAHR4F1F+aX_XpI*IIC4!-P|F-8neT3uYjx`XfkxHjf z)uztQT)h5%W;xIAKI#qIym|>;_&mMA#q%_8Ex}GSmX*W;OqFpIYa4%(lB~#fJey!8&Vafz&DNihW7bq8O~5sjGV|HA^oma(?p77RS3I=z7pj8IQo0Z zs%x#|1odwYIM8mLEB~W z-_E-pL=>_qzNpiaMewVGaDS8re^rs&61tu{q78J7CxKm>QuMILkgT6CkAeg@Nn`gP zMhOn&MN?CMPn!kX=ol(WnlOb~HNTb(+OqVm&0{nJcur3;$0A&YRnxqgj6H5| zBuLk39y$=?irWQ#xqh9k+@_T&C3^7&Z_Nd4GLM|3V${^spxz?L<O+#N-|7M)IRe*V(qK-@b*^URxN5+ ztMKyaaw;mIUyJcy{FI<|dP#7kjXVyLt$?YgY4OC=AkxAQZ?|1b0Ub0TvAfO2gyan z>!kXw&U)3Wfly&Tup!_*IsaX9+O$+?kxVWaqv*}O?9Iw z2^%*qy$)N(Hwi+Nt1fdaE7w}Wh<10`5|R|zJf1-HRupB_H&BQj)r&Lk{oU6cP%3IAy%scisu;5)Z!kr4;xn|(K1uX>Rltz zaurff5q@7oVA@Y;p+6C=*GPpE)|D1V)A}AWjU9*+CN9nieDw5UY*|p|iC#}cZZOoj z{V>Y~dVAm)6N^#Y)9GP}vhsq+F5l*2F1Qo0c<{)nI={H6X#d7RQwcvvj3ZCJ;20{Q ze^w>i5Y`hFPbx$UT1$0Xh9`Yx$n0jUeZi(xmGEEJWu==qE$mP)=;w31CDTb9#d^bN z{(+Px$@W1WNmzlK7ii4|dR1gNM28Encg*r2$UDHXaTVzBpFE;Vt*8}JGs0*}i3(^+ z$(5}{G<_{5)V3VeKB&x24xk$RRa@JUAT@0`b~8ff zRlf@{T=>|wO4pMM!7W<6dS9n2YSnp^5_^e(8hXRpb;NfzDjwJPDa(RYEztOZhFsH7*pL}Rk zIu3jT@we8#4$6omTh_cbfINM2tEPltW~3&d`58Bjp1Db`TKMf5DG}!6$6dDey*z>z zE1{!4k*rVB%@&kN>c8JJhu>Z9Y>31FA2PKhtR9e z2m5*u-A-KkTz&1=YVOgtg!~l?2zAnA>-S(|@fM$|L1uSUs54)E^%l z1uz9Nm(D_McmO`Lpo|H1Puik9ZKqG?JxhW$9;<)8Or*f}a3NJ>5PbLP)58KTTX{cz z{xh;;d({tdW)}et+SCU-w9vI{COCm+9Zz^wsWtu!Edu(B(q9lH{!u)O%jT>L+()s} zL$n-hDxot_$nAJc+L-?f1SOtRg32w9yFUj|Am2JAS~r(HLHp`-~{YIx+FrInMj0a)km`dIZMdc8bJ$ zv-5&mEz|i_qweoLD#@eHtPc6`dT>n?ZZMNj1<^13ZT~{A%gqoCN0$cE&z+X4Hvi-)&(rJc%A&(^tyGL$4l3@2w6+%Ld*%am8@yb62P{2 z0lX_FiZNnFI=g>>#H{$GxYp69Mt>&y#=Ro^?zY#gNf8%*Vy%fm92CROYeNKsrM&4I zx+BT#5s&O~r>kb|j~(xVxeZ)KJ-PptM_Ng4kW}+L2-CvI^;r~(=jIdDeyKy zjvPq+X(hZ<`j_pt3gxGT6AFQEK+nNkT0FWc1B%~6o(m~(=lMM`@;wH)96y;@f0eizi1Jc%Ks7$P_8u_vIwg4~ zS8tszU6*c)zdz>s2&F|6Nc1TLN|LTOa`_1K{X4qJFHoK(v!3xVFH+=?e`Fu-ZVo_6 ztI1zeitkaCJE|l52@LHe_1%5X>6}~#0oGxmdoC1JVq$$|o?d0s^gi(rmF!6|9NKhO z=hSGVUKzGL6Lagi{qm5Di6QE>c_i~4R#=xF)a##(2Co7!)DFDVl`cb%Vw+q}x&R-|f=^yr*rxeud{PG~HMy6B>*j~)y$YjEVhOY5tJUxmVJ<(|Zk(-#Pp@;Sf!~#qH`9$v;?`zI zgo3`1SEfNuW0?8w5$-JNax&w`gY7_c+4xm#Mz8U5V&l$kBR_3()3_xlQghk3xj^;2 z1?{oMA+i6$GsCR%Qt;RGK_?1Keh4t}mhGy2sda>VxkThHLd=GLL6O8P2O};`)#{e1 z*Trq*V;?R+dfo4IAq`s_qU1qnvj29;u4C@;e1a1;Fq(`fd>7e&)cWB<1~vDpE~m|^ z{+7?J>^oz5FMOadN@o&krt>XM;g<}W25jc8IrOpT<@U!O{GKjzur&w{!Wm(~$K#0- zJVwQC_$KA|o+UOuxjZy_?w0d%MLZ^0Zk4*Pd+l>QJO%gWnG=PE!NDB;J~UEA>Y%fW zHt?T|zix3DG1?t8TTO^;*r)Ml3{9%xAZ8=a{`Ji071)%ObSkD!k85+CUL3h}}HliR~v_PRgg^pOZdnjT@4i z6x*g3_b2S!o^`1%*z&x&%lTA~%BlKpH#eSoUzTQy|2^ehz6TIC$fq4bdg35cUOTT!SJIf@VCmPG0l#4V^yZlpGQjl zqF)4Fv~O5{2P)yC{~oEu5WhrS7WOf7Em(lmH40NxYhGa169(VBPW@s!JsWn!Nfwr; zn+KOI1+cATGm@_tieefP=M{`W1ojAJT19h$P1D-y=#<0a_}iZcp|%u%>yn_c-wntC4{0i&I%0V zY%j^rXaI&O_tG}@|Bwu1cL>hFJJ+ybVxBJwtI2NyPll1t0jy`m? zfvGYF8}|up;`0oGZSasR2INz9@z}7S|9?=@o~TbFr0c@xa;vdjAc;%d^dG5ws)(?4`EvhyZtX z6&>sY{~ISit50;x5ngP=ZO0(q;nW{+Jg5N4_Kv>JoIU9A*BFmvIpqJjlTEpR~P|tpe$%J*U$0buU|7n<@{c}vt#HXL%>lij3F0< z_f4H@Ithq0`7z1$00=TUJC(=1 zWAy%M5!vBK-CF%e3J6K8m7H8m3a{DyLSQR=dV=%jc_R}~q!>V7(Rty8g!_1|8;2i# zL09#x;PLI`(@je-w2*9Cg2jTff+5%VVul}90^CW<)+oo(=!f_w`Oy|z?trRO>`DRU(T3$lKTp^MsQkL~ zqLsR{6f;&rz6UZQGfY==bmtcG3bPiaZhou}$)iM2@$^dKP_+)0tlDa(>P^T*@C}3f z1OS-UrY^AqOMWgl6BgZH)5KWE>y6=iw9Q__c32kvIqsbe?(<69>#(4e7iQEaZNzmC zqh1c-uS1!J@s4ewHVh%rzfHff1z%1X^)iwWpgIuD_}LQ*44)Jprpi80P^5jzA@uam z^Mee{6{%lZ-{?xYREf6waRGr#%2S!=UQLtvyk;l>ajjxvxVIDkUn#)F238VXE1rV&{+!5 zd+1Ts{rp%Kt9UW?ai=_D7c=4!La)E{Fho$FH-7DvPqygju`vS{{St4L15V7nC_)v; zV#6X zN*yWX=f}k*cQ=R*#y)4Wm+mzFsUr)Xxz2LV$#X^Z7rAP-O&g`$j0GY^-YuqQc?%F+#%I1?a`bkd2WN&?wb?UHWu=b6@@`Og<~ zlau%EGDq{}9lP!8mjXAm`?C%OiQO2p+RqU~h5}KenV!s>9&sv?>nic0YYKb1X{!;y z5=ua|fHz-6k+a*I1isNEk&4)fLkpdyAwPwzjXdx*K~T>MfauVQoz(S(0%PLh{MkdY zwtrWQsoqfByYSo9zDmh_$#S+6&Lycxc-ghI#3#y$k~b!G6;L!$d{LXv{+c;sbd3c4 z+ZZE&S%nj%Ym#hbRorXJf5L$Eao^3)VCWIJ;g^huN~aZ|zhSb`-^6fj#nfZwO?Tql zA6Ez|&y}pvmPgnVG6*)}Bf``X&P5(}|FRs{eeCoIHvDsgNziNaSnD&eLan}^T0aa|GOa{?`d94Kgni3akPVBpw;Kmz3a@&%% zBzG_WAYdt<3 zWNh_OngW*3nsFXbu_OWAN`~U?bDE+b4NPgz4zr{m#P_UHAT%T2 zqIvK;AN@0&_y?&ZWC8f)i|G%;L=nWH_cIrYFdrVi4?&yD!idVXbHegM>4Xg2Y4ne3 zsA|Iuj&j2@1qrS()#HzBouvTXMw?nr%gRIhYxuJLgJ&0cj*k1EGSVjI@4aECc|I`X zB>k?Teh{**XQFshjOU8egJ$m}Iv36+zObo8DD;s>p@r|rX6ioorG&kL4d0jO&W;8% zcH+5rt_R%RP?z#l+8D^_=^sbJ)*IZ)HC>C0$fm1beb!o$UQp|3(|_(f^My<=F<<}J z8RHnxt{js^dpT&Q#KhLaeZ2FY;9*?^2~OG&6k!0zuG|R`(5=hNSrJja{Wg`@2W+~Y zu)Oc9?u?$!W-bpUBuP08lSzRhThVG%Ip}X)W|})2F?u`u*Jnh`nY#~3QGyZqIAY%) zpJFdAiI7c(IGwZH>cEwR#4BagDl54hfPY@qav^l0-N{&9-!Id@XY~C3WR)pbU5~*L zHco{Fc->v#pmIE705a)N&%OL4BqxZkq$e8u@2x{4yU*}dQhEKZ_F;}IyE)~I(FDX# zaM}JL4@nQHL}4+MyB*#mQ(sL$1GlPSzQc48_^*&HetCZ#-*eEvUwQvM*tL|dEM_twZ zPn&hYRJFP+u^~C3)RgpeYV5Mk?IF_BPy;O#N7j<%2%`sn&~cZtP%%T)9FAYEVy_Yh zJIRlC|3*1iA|Y5JD`M-#=S*P+5KRGUGJh|xr#Qy1ONrWdsFUgdSSW>4{T|q-?csqnWa9hVs4j*^q^S>&2dtqGVraz3tN_cik;~quX(^I;uplW#CFA~ zRvHC75Z0CmKAO4kkhz_ru}IW`STXhe>7Rd>TkN=OGKW*+GyHoL2Jf65oDz5q9M40A zF*SHtdyJC_DRz$ZWfeR^`n4LIFGczjOYGGc$0y7;PY=yJ4WxToXelxYPBK-+Z^3Dg zrdBqFhHF_5fXhOa**B^s6rx?9k$m0$Z>vN$I#MJb@b|?J5BQk9H4j`=!SGw53BlnB zI1FqBare^D9XA)4rltM4z4(Dhl~cNSbwNm9Ko>t7Lw0=KXmOmJAzF~(Q^xDk?+A|wK2i( z^L~GAfwL;NG*7C%<>n-yaamvs<&5 zs5{RHic~SR%2qS&{g<}Xn?({~&z2l4Gk%h+fhwvV22Mo~V~YTEjn7BhX%^36|D5U> z(Ug1EiMHFa#*E{W8G~)(`&F#A1dp#yS@m`rQk{Cf_$qsvWDZ4}H@#x}Vg*2yNu{xe zP}CY3IY<$Wpb8N<8w4ZU$v(o*^4SF+#^59C^$CR0o{ASRW`^RmfX5_x0tugsleD`P z^J|NdW`pB~KXAg%Rrnl}$W#Y8v}z_mUj&nLMGRry`TurYAh&yCTFqES3S3C%WOByW zhq1Wd`q0EN)+BnT=|Cyc5t!!mI92;EV}Ihu5N#T8oV^gzKYAD0M5zGS<6hgY?#;J7 z(Ipm$hg*l>Fy>+w=1U5iL;(%7w+?fU{4J8=?oA%uZ&o|vR4TrFOR%5>TM_@#RxTaT zc=$bAVc0VSw|a<8wKD~afGU9ewfo8AgS6v1_v%2{#z%c`)YSk;D)#z(ctq>Yi>JpTs;*(+wrd-|mvGs$4~42oiEwa3uw!c^uN5Rf zj(A9UG*V@S(oXrKHt~AvBI?1s_|YrOemTR;H^kJ_TI+!Bx^dOipH@ zH9uR3!!BFcS$I5)qG^WT;bUQgI*|hDlbiTq$_-vbQNoh~%EpsNt2nifSTd@9P~95W z!AKVb$3lL5%#cK&+)X;|grWP9+v=8=pGnYh16Zha8qREUj;lrjNgoy+Z(Ytx&{xCd zXO)csTNh!judZLSO>4@^E<7gx_iO)T$E?VHa4vrif4|N_YJlc9^)oD3K@GR(p-YT& zV`^1xK-QNfB0=bS0wOAhU}@RGj;|Vn5PU!|i{Vm5k~J1re|z7Jh!!D^S5D4wM2ntz zHJo7Rxg;)|1p5`imD|4)n%GK$*Y5Dq-pAtCd zkSa(7)RpUm3(zy~;dke^8KqeimZT|K}vA^>;-c_(E@KCDM;XX4D)8P*>dJYw1G|C z)%!^&J@_0m_W6=wp?S9KK!}i$j%Gh+s>rQ0Z#2OVc`S&}c#n?`c7N}bBQ_}e*(b~l zb_P6afg)3;0H87IU!6phnGB)yWm>xt^BuWq8S+QiezRIc{6Siu3v>=k25bU?Wv+>E2 zJLYGgLhLMgK3_zsu{A@6$w=vJmxOMgqX6lp zjCB>;Ev;cGaM3%an>PY(d+PKin$9n8@B)MWDPMPgMJ~v< zKiLC&R6TJ~jD<8e7J)YusJPL4!N+Wdy>f^a1wQCccF4Dn_=j_UcP1d6qB0%(z?W^E ze_-D*x(600v%UxKV#xdNw-BJdn1?sT*p+9uah;tOcS9Lz(+-xV1u_5mRi8qqOZ>(ld3~-7PHmsA!4?_EZyf5;E0zmo6dvHiR~6-=v{a@ zknPS?HdmkJynm(7vVZZ52yi;z_N+U%wtQ345qEby8H*S7tSUvP2XUQ72}0@gHXD@- zkXlTdSo0{FlgG1iJaNZQ14{c@1UWm#x%ArP-v1aprr({RWmYXrv95e`WTeqv%*EV` zP#S_2N+pT?qX)Byt)(w9Ww?dR*)*K^z7;; z+D#bU_qgsdewN#-oBcI+1N$WxZSc)T8$2Qa6M;z}q&OCpD2#h?b#v2SyZ>IU z5N{kzx5*#-uEtN)+45SLEQz3XX{oHZtSsj9@&eD%?a0TSzf;hnaVyx&c{GA+=U;G~J2V%Bl ztNqUz&&$Ns0(7CU=D!w!fa_OSppdMd-zC!!-WMvCYs5x_|b!8=(v;aBBCymy_i z{pcTXy?)(g3LFX4z-f8m?cA6u9wB_PHRFN79HrU3u*`x`<4JdrjfbXle2PxD?^`;b z*WHd_Q$Bl%?`$Ll(y3n4ojm(L>qAi(<^KD>xn5O8oKKDxP$p-39Z!gZJcFh=L`yVs z?~Qr%y5bsn!D}kvs?cB=V`S+kgYIZ?Lh}+A+iY$pn(Jom77+hr1^PVxt&>=^I6!0z z^=18H#soe5^J{2_7#t`sW1+MnC;KjVm^g+NI_O~X2J%HpTg#a=RpYq;omeqcQdi%x7O-6WKp(KP+Dn&ytg~eAbb^j4RE=wh&al7^&Gd z<@P>J@#amY2`}pYhCHq8e)w_drz^xBjXmB=6#*Zxxf8nPlXU1TmmPFfM*nC?3&Lsu zEK{HE0j!<-__n>w!z=yC&! z_ODi!5;m7|lLyogvNlMg*|wtiT6AHs?N@DnQNp|-z>}*7kfD0nE7O|&#KZ#!Ui>E$UV+=QRU1l&-~BAY zX6qZO>QKvk6+tryZfbmIa8FSSTOtcd-z>i&Li!W|d6~2NK2#8w8;rtp2Y-W;QW)_1 zu;GpfG#2U^2#|gd;6n8Ctp6i8*js52?W#7y!`b9D%EyJbKiia1m^B#ECCK{ls)ZKb z=L-hNP!Q#dS9^y_%&~M+EKy$`hyh|3<;(yp2eu9qb(u(Br>gzqq3%3#l&zQKRW+*) zk|+KMI$|hu8OLY5Pk%s2^W*9O*Zc3UlYZONZ7Ck}v4dH`atg4G0)l&x{qq%$#p@gO zgBzp#YNkNI8O`3-08g9*KSN>WU|(q;2Z&DS*-5Db)BbWxf5;4;(QB&1`KL#G2YdNN z=flLSW)z*`|Dv{#8T6l&=KJXI*lXdn<*|yhlkW@( z%#1{E$CMBtMlpgI6ZqF~=4tCM5>bh6j+Jy;_zu6^)eoiJIl9>_YGsfx3K#Nw8Tk4n+=dyk??_AG!GCt_jUgM2RqXk~*&)?g zXb!2zBTK&*5Vb(FLk*QIng!t$e`UUl325%2OaX6z>;w^6iWRQSLaHKlp=mM2q&cv7h_&u)9cWWs5n3;70FdV) z{Q(V?5CMFxSJ`vPuJhLP+_5X1q^1#WiQ6&+;>0UHBmY4DQMcA0j zluC;3dyGORhp8$8%+@EDn@loZ#)h)GLJ3Am$hmLrmZ@5`-o&B4dX}rMRzFmEdB4A! z2fDL^s&M4@Q(F#kv6;bk!L#>92ZY(f8cpdrt$_h--sNBZ#{y~>>=>X{KsfKe;iWy0 zT#fOm+Rr0i%Ry@|=vP*HDtLN+y?NT+Z@pqKV+!jjGK@0fd5M5(5224G(+@Vz;;06- zIKL7mWnR;jN;D7wo^7Hb0;}(uoMsMW0a+w0BhW8k1c4TB=6d+L_S*YXG5_zj1E+)!{dH=8mu|Yq+%&jYPLEP0-3R}hu z`15cud8n*dDgOr-^U*gjF*N1sNN#fZYTw-b6&`(CW@<6!;4Z>UM@Yg7Z@=X;Aw)vF zR#)HEtSe^z0DP?lU(AgEo+>LqM-)?#Oooip6kd{*XUiLZ@RFJ65(C^5Psnz4~49Ykipn83-d1J}4Yn6ehK1FwA*H zG(pwnt{pK%_hAaDkUAi(+G$vfNrZ1o9)v4EI&S8j|Nh>6`7J<61h}9G3H?cW?5k)( zam=VR``>A|gp?v@fi@IZkP%DW8Lo^lXk7m<@+636bwzKqqs`_^koeVe^k)#j8$#Wg zcc)QP3KuKIK~>uhF61_qDf*#UIMWZB+Wno~d#dW+S;~DS{ys&sXey7`R$jtg1r<)< z2@f{Jso{&^zN!)7p(81K7$Q&^4F_%yI2(_zFC#Wo0b#Z$yE8BIE2u00vOUZ9bm7!b z7jize4a9x`bj!24zwJ;2!EZg;6dQ*=8N#{HBAh%t+PZpl9pc+nmu+ah(3&4X?OK{k z)k2a)mOQX>@#bV4*ei=ykFbCK7E#~dIPLR1F6c(C#0_dM2w!Q_7h3xCy9fjvl+m1A;#PuCBDzWH!kq_0xlqnDy57>m}6&CVsBSBZszc?4H_UP zsj$NsW}YnPd={YOR!PKu4FweOJWG-36)$jW6Zjl?7m;z|`l)}t9l1?l6+fMPB=8Xx zAN2<=9HI4x-n~Lw(Vw;Cn|=(xquqygyM}5-lSYrc)ryWI4u=_u+!K}p(;e@H;j`sxfYv=%zu+t{?Rd8?}<)f67eicW?6hem@o@UjOGeL-Cdp97|sHHpmFiT~QcZoUhGUXV^Pk)h7quu4ygd!P=2Edev+NhD_{!Nv9-$&7#3ExJDGsB?>bM&| zibn~IKy2RA^~sQlX3%9*ZNj!*spDct*n*bS(DiV=WEZ2=i`edh1aSTPgR*>nId_Ez z1l3ICCF;g(PFwl}L%~NI&o$^k81N5wV@{SFdJ@bt|DQ2Hf~FbCHO@)d9Bjg?)eGDpK_$sDVP%hJj1{x%L!o>{_a zt$gbG3;6?2L3aH;D%5Br%0iTPp-Wp1p>QdXZLSs5V5sYyI%M!U?9VsE{4`&yi&f|0 zWwBXX1jI)U7*jo|L;Ub>`=zB{3oSouq3t7B{);s}M?wORgHRz>AQYOP=c)^izqguz zUz|{}U0*M@5gnJCONG^51K402LNo+WK2Kbv5pS6UJPubvI?Td41?*u>)=eQWLfq4J z=UyB^$xJ#`h35d-(RiDI+)BU?%QGDxJC69E+3YYj){R7TBECuKY%@1dh8=oee)3d# zp0grj+9!V5)f0Slk|2Km02h%-8GyZD(oI~AR*lD{qaumuQ_KTljY*KtK>^@d+|GB) z?Lq9W%QeZ<<(8VjBD-KZ#n36Ocjetm$A^yY);SWKHNyyZdgaDC$NQqAxUuxWnzNFB z)AxtmLFBTqwB*$z>EF0YE#$=Ew5i&Oy64|ooC-x_6Q#iN*T}7RLAvrFXe~jkNw|$X^(nr& zb`tTrt~U(i#Q79Wc0y}DK1+`u_Cegm;D|6{XXCxRmTz^b+`vp1n19;RmSAWs+)f?= ze0H>q3KI1%8AIKXk>a2TO9GngFjfLHVTHI52~t#e73Lxb47DkWV1*Yo=XZm?d}GTr zX~ez8vSanxb`$PTz_sY``SFGDMerqHp%(1qE6z0^JylYFydND+)O(tHW1auV!kg=2 z%7`({Do|ajTJxE|IgrC}lJG$;YHUB39LvVb74 zbcrCH(%m54NJ{sT2DQ|J5-Kec(%l`B(nu`bOLs{M0^jpqA3tC(=9x2R&N*|3_4i7~ zN2vd>sf=g$LGEsN|yqLhZ~x( zn=8VPO4$EU*w`^THROA-a|w#|?48C;B^Xfo@*Fk#r`4MjtPF=&5j+EHgyh|Yf14|- zIy>)i!UGuqwKWT%^#E|3RN)wk$EDO*mNkc_qSc8!EgRjSdfUcPUUg@2@s^B!i^2ZmX+_M4Ve_I`Xg%rU4jG#E;?=W z{jPJi6ZYla&ntL;Uff=gY=7HXJ0^{OT(%@ z#HpqF40sixLH3l&*jD zB1PlSTH3cf=+GQbU;Ekm4>+#btjp)*p$Gn}Z;P{v%|k0LF?#aUr7Z?l*_Mk~g-4`7 z*^ATTFss;Gzuy-Za$`&Fw$hT+z#r3i$rsb;K>=XlnBnR~(<$;#0d^T4voSctv`8PA zDx%i{^=@xurlP(NIc^VUR5d+~9tyj=SE?-=hFfUD&9H+F2%{-Gi$o<7B9s33sxvSw zQiR0NsfZwn;Z=q#uJLPvbH{)Y^9zJGSIs&{I!B+?_FVvLgeSMKJ$s$ zHh?DFJX8V44Qw+!*aqu;-ie;(dzp1~{q#adK`Mh2SI4?M4{@8lv9xc7Js zRLzlTCAOswSloMfcx!oou`gsinC~x^2#R+;bz-&B1KR4KIoTUB&ou@%b-jdfD@Piz zb$K#NgjhEa15=Ze2grnEu0kv~u$iq7G?7eE$wnFq>dWN43X_%+j+GLTn7qq)&c(mU zAk0&mttgB3M8N`MNF|!erFm#K8sxNKA@%TE_IUM(pnJAELy47WwB1wcBv-Wcl5zq8w<1e`*++$aK88KCo9jQkcO=l7 z-(HeQA4A66ef6Z|5s+fR4@cW{$PBaytq~N$i_IfevPs`olEHAyCJfJ2|A5p?$*i;g zEoR!{Ls|cAz!5T3Lu@gA$ndXg!s`}lP>m>kwuSkU&FTe1sF@vt*NTA6#*#8$SiF%S zxPt$=eyTwu{$gHEtKpPeHP_L@Lhp$2&&HcqPSKwt@3w1X*m41pMA?IvuEauZ<&9c7 zg9nI#&>f<68t1vDyn0w<9(x4$-i1C3ZoLahx3x2}_gl@Io}kktm^8Fv zH)S_z*0OMRH9(z#U{-L*fQe0A-5|$voDJVvF!brZ6>g+xw~E$6HNg8^Q3EvYvst23 zRBU}Pm~tINan-ex3s_BX1$a?$QY~#mceKyBg2CQNvqq{;8c&JwvfCQXuF@joOUrnx zNK1%t6ZZXXAlGlpnyYKkgpa)MkJkmC;EgRe858>M?HxhXRF1!bxDs0xR^0hT)UP5) zyG%ry);<$Ap|I>^Y#WSqP&fX1$T(L<1!B?+ zS;OOMjuh2Rs!+uRa=g>UMu?J0#$eECLJNI>K_ZX->3`BN#7eAz``|I;R)1Eak|J}q z&Nzc30oWSQyolo+U0r(tMOlK-h@NRd@$k{y9t^;woF{J8gAh`V=hq*Kn{ zIv}avUY`91R5^T5LSoO&CbYZYfNWZ3>urwy5I`|?6cK!d9sZu|*>sI|QO_ps^=0ct zUJ{4VL{3C>&cH4Mn@iBfA#pd@7!9La*mpJ>KXZwQjxxb)%P*z03`+rI_px((bqiNH zh=AKYRkHxt+W@MCQmDJDL?#gor5ZjjN>?wK2G1}_t}ao648 zhy%hSmj1Jw8-JheeA6rg5hoUhDqn?y$c4%Si4iZNqW#{<6XNbbEVJHQnc+sA>+}G^ z_Dy--N8s=J`SOvh+~G%{i7rG)2-s>sK`=zcC@&r2B>hzi zIaps9ebLGTDeDmBLvRc$M+iY{#VZpY;`{C+sUxXx}v zOx2`&zFh~Fyhx!59+m55mw_HTHx+*^3IAywg=f$+#vUbb=nPtukIxKe;H8hU26+PW zd~}9YIa-sjngCerJlW^otOU&JP7$1_duNeemhuSkwqi9nY`a)Z#enLXSSeDg+t8?C z5G{22B)^^gwkuF??@`oV~+$lyLDde&dX=W!VEnmM8J35 z{gcstpn-P~vzgQbSQ-gtB#mY+!)VoxUAuRo_=|AQDJFd1bQP@X&Q-(VH=ur|+}dI* z>?(sUO3)~tH9b6VJ2NZ1I#i^QYP9S{dFJ>yOL^qIgN6bBT{q`UA0#}XN`sJK_1Qi( zgGkj{&*bD@(&EcMzk!}3$x%Ah2oC2)-Cea3tO>6s-&-5K;8-BKl1udnFfQ6i9e&dH z1fim3+Uoa{W(hv9JOA&SApeK<#8LvLTnt(ZaIv&y1pb^O%KhQ&op|)QpVbLznh)LD*`sC z)0X8RPw)MrxZ+;ph_f_Z+R~~hiZPBGhwg)#p4>Ol?tOD({t$_5(~2*Bee@!UGLQAI zO#0D9UL6yys_?}r+MFrPuNk3?0>s#sZchVDIkm)Rs3~t!-8fDZ*G0L}nME|D;6<`o zfzCunP@aMqw^-;R5upAPeNTLd)^RxsP(yfz+Ig2IL4t&CGR)c5Z;l<^K{C)%de>hY zN-lAyaT%>)7td&xP{;(T_h00&`a=QHFu|Z9i*ehpacv{Bmg7dq=Q^uGpR6J0F2!~x z5MOs|wp_Rh$nKxQF~3(T>zDyu;N-*l>vTv#CF(t>sq$n`&V%htp#&aTed%!-K-;WhPEU3`sIBGX5NivHOO4biS6K2>r*PK-|%u>L3#>d0#cW z%+=iy8&*KQfG(01Xhm;z&Ubwajl#g)@Wzb-_TE`!nuV)A?{|Au0lQsdmEc`>^m9M{QLhRN3&TS<2HK6J}OGwa*9lgj#nAcCF~P%U`KEAr(t#u)5QeB3*b?tjV7 zW3`&&l~(tjsz`U$d%CdXj*U?AhVADF?nkbq8k+E|CBA0*LxH;B_I>g(E~Q|~PeLOZ zEaTJYOhx z5v3lM&<59e{=b|YEiIcu+QT5u&YjS@OkWfP1?H7cMD5Cn{@ml$^pMNvl$1|3ICX0r z4D#GQi?~KG5H61o*5%19kMp6P|HhdO_-)<;xN#LTXc_=ORidb)cHUZ37dDou zjOlX}bcVROxqC7L*sn7rqW6Z*fYwnfmm;om^SfVgUl6a^7)-I_yq5W-TZO_E)p z?2$Vfhcz`QO~K`uef`;RVr(?YZ1S$FT`KGWz2~IYB0V;Idh8nunk8HD3oM1FL(0QT zPvYc(tTCf;N3cy23wCmHq7?l1$?2+g{_oh;R$cR0KD!3c0+qAik1jMvUmY%UI2(l4 zYS&>96JAB2y?J+ApphYGmoHFUUv9uumYvQhRRy_b8w*Um2CWoYS;7Nl>G~~TY1CpP zkWt(|UEvE8G`^+Drbp_(fq`T-h;77Gh>)fCY!t@aNj$d-M4fBzS3B%WNn$(C2(i84 zQ>^Y?iH2MjR!wnYCG-ZVXtRk)+YaUhB7lGC@QjK0>p1SfhimndL9Kt~Ni|CVgidmg zBx6VO8SyqkM%JSY4(qAc#xWG;mUN0#*Xr(qR1fUlP&JC}M*qmS47=ZPA|DG>HzCV? z5QKmF!NoNVK1J^vAe2STv8i+I}eSVNHvccarnfGy7OI76)hXy>%jICQ)V}qV(?@8 zi;JFGvKr@KgG{iWsB!FNA|>m%x5j9}Um5>xFP=p4Bfe7!mk$15?T zwr#e;sAG|~+{*8=ru-HEyNDbu$GN{wwEy7bnnLRdx|Gh~O6n?37=HK7xQ0@y(PMq; zr0|oKL~wt$vAO)0(zXIq-5)JPVr)IG6@TjeDr&B%FJjN|mjVc~=)t;|4|6AfCqtZX zQ`9Gm9L|;Y_m;_tM*loL>Ri>%&d<-kXdVknRx8lRFW7!=+UlNh$g&}NEq(I?gmX^c zut7|LQD2I4)4x34C?+h}LCC%s{6@Em$aQHP0|Vm%3CKBT%SU2%+Dt++3PNea$8d=I z0_Xv-7x^)OSET}?^(5{HTsZv|7*JLD;er=8^NOpc(RgQYLc;H|zN?MV?&pbXWyIfG zN!FqLP%Ku%d?Sm6(G64YI7MPChmqCmm8QBg#P85Et1z@3^kTsl;aD~DKlB-CswiR(ScqI;)72yqqNAAZ zyNS$TAe78Nh~6JAzj0>dM$G%sp(n4S@TF3ALI@)c!Iloz(Q%oFH>wf*7C3PAfGj!j zySu!}AAEHxfD4YNF3Hph#j3xh3<1Nz6NL5YIWm4!EldwO2~NQ^N!|gdBd+Vw5e=#iAWOfz&N3u?qm9H)< zqw`c+VjFmre+A5{3fe7AQNx?RMA7^1Rq&&Hnt{9ReeC__C4rrS)$o%zn@uyji%7wf zs8Pv;%&&(9#cDdR8BM%Vwag++Xyv{I?TSN;`qJb6qK zv_!D2TY;P`wYIPF+4K`qg~~8qJJqteSk};Q_bGtrmG8TcpWais)03Sw5X5R3;TICJXAw zyZUy(4(bU1K`4clmw^hXtSv}jsIZyls<2~y6%imcn_l--AWwWPN-0lT742)TEM`NV zB3ARzFv#xlAliDDbeDR+S{38i_VL9?j()x!w}?x>CUzlsG(Lw`7DgU)vb+1mKbo)X zn%<_lrY649K;4|9)z*^o*dEhZ7ERv3CYX|aj?M_$oNX?qYvJw)Sk?&p5VWYC%hnTn z&#Gcn$;@G(1|YOXUHDdqSm5xm0Z0G5Y`v~7S;7`pfP*Z9chG(+gl3(RCTI|cC9f>U zI?hBpkkF$O;n8+U9=P}OdhaJuJEt?$NzGK8>I>kb`r;1Iuv!Y3r`R?i95Q6mdUt;t z3rvQqqhkm|Yd~wZ+B3hGeRD#iljvh)agE=c&Z`n*=&^RnO_iTWK6i7a#t#FvWDu+x z1H<)Nnzg2SFBM>nL(vQu|4QL1U_WyD5G?XaH)#}@WJ=E~NwO_`B}tD6d=q1Gh_g7m z@nB?RG@11*JlSBRJZ-V0u)2D zGA3x53DEYvGPY{(U+)`_hyZEg^{L4~&;9?C$>tEy=M?}=lbZiGgIsRz-v5Na_w(-- zjy9J6JA_BH#wO%c;AigPHWa6g88igf!$_43q zykD`JBd_4o|3<;F?+>x8wwUj_mE$~jRycaal6fq<)ZSSLjRB=>B5B<7bp zqsM*A_w>|+V7(;l5=V}!h(?dX461bBT_sOud5Fh+i$P9K;4C~TF)@nK4(}5cS(Dl5 z86!5jnw6<=-LNQ~rtk$|gLe9xqLUYF)mDiP%=BFdj?1(3*CJ3j0R-e-&(iJHb5%!D+2Oj2<2+YXUz_G07mf9LKJ+Y2PCbv3FX_0;~zahv(# zA|kLH**q@l`js#}<6|y(6%eGw8wkY@dK|V~%i@;dm}JRVqS#hi$BqxQc8`Hsrg~fi zS(sm4pZxGWm>F)bnu&FPgBvMp(iH?_jC}bc*2-|1{S{8G`x(v8xDsj*HR(~k*r0_v z`Bi>{Y1*oZJgrOVGb}(>j{&{)&gxrweE`=s`(0T{$)})`>!7i_IoP*66T*=%f!3BV z@+;rhiwnPw4*h>pF-UrEzglSWBt2UBsq7V|la6uhYD9MMOx2)Fe6r*X*&u{A%pJ)e zLKVgXW?c1N->$Gji@7!g6&9n=azk059Q49Iro72TKqsxL5lU?e_EnizBanI3Acm&( zjN!G>#Vv%|P77o0W^Q(xiPp&SS2m<_5SZ15^s@X`n`_QnB{D}w#rs8wkF*2xC%`JK z@8b!0b*OZhxy^K018{dsHnUDFSNKG76`nw>DPD)>25%TpUMA1|=_A+YzjjMnu4Q&m zaP-~G=kIO&CVMU%H|*`aAL36o|HpRn{1JFEGY#e3?0WN1E}HfClFiUsKNbDj%%bpG z#KAk+j3pvXDr5@C1#adY=Ba{l70N8^lf$0elzlFd9>PeDo{C0Mf+FsWXwFVJB?AX( zNeR2pgUsIXl5gMeLcxHj4AD!dy1Jo#dQKjOPYy`bM^T#B+%VR-%RKSk3OM^rwAxK` zq<%QUZ5${vp%LusI=W3z3IM+_hv+7`w!_*SBbO=q)Evg>Qc8d~pGM$!xScTVUxa7P zS#VtDtcsg$XE0dbP`icnD|@X%PV6Y0ZcYAwljg-j$<{|m&2{`X7y`(o?CU>4!C$gp;o;EZ0R#1K5qy$(u)d~p%Iw}J+gZ&WN zj3=(k;}n<{J!^daD*~luRZdVv?U;H{vb7*xswb)Mf1HNrpobM?+ zW*_(qj~hq6Wi?5Vmr-t$OO>18%iM&JOU$T!Ut+9x` zykot=jbh7J3X=`0uR9^?!ALVZJsC{x88bW4ZqI~a110U$YpRVYB{1-VK9{?n*hE}b zgNj*x+U_CC?z&D1)3+`NNg$_XgNhG`=e6< zQrbP0$ODfOsvs@Uzx?af!nZ$*)#fNh2}b31>h8K>lBnk=bJgl*NRfeTn=W+2U%#g& zX4JHf(ln%Li}F6>sO{}g*vE)Rt)0s~ap_1UIHjWO2{b^huN;Ir8i#x@WL(B`(u($n z4&9j<0H_)rnPxL&K0@5+{WI4(hO%O{$F)s#po9if0W<5V?2n7mi$T0n0(6o1E7dj* zoWfARgo7<|6~bjut<(c?`$1j%%X?$Hf&zoL<1I;Nvp(kS#pc`6E!ahe4g9Vbu zIvJw?o-?ZwWcp5QfR(#`cKgOe{Lt^ea~|6g$vqGR1FaQi#ygv6_lU^uMWk3J1KJ1H zMV3wZYjN1&I-|O!4qXwnTi{kynF?NOZG=tjZ$tniy3mcw59l`8(JVN zFFoil>?2L-4Q)dg`7Tu5z6(U`_+`%cka}bAFi->I*tor8z`$L$;t#ozj6&&$K_?vo zr%tgEgR8cnvIR%kIfF;;H#^k{BJ&#i)t;=Gnn1JkV@%M1Kbv2*ex6=M{Q6($gyI1}Jr{`@>CUsdL23^84 zK|nEQ6{ZFAm}>okd8`1t>*0#^VQnhb=>@yHK(0c?saZrOy^{LlW68s<(@LgR7n!?E zV5;)V1xGkz-wc$aUG^Q-k6hnd@C!q?xIHziu3^}o@~uA4M!Z#&)x71IwS}-zp!U%K zltHw-K8WDFi^4whyVG$RdAEsPJSUu#9SR~0tESV&CE|y2Xm?S?umIGjn4=*^*|{{$ z79avnXu0z}mIcD30`uY?cDBAmsFLhP1$lnF@e_Yf1BocXe<>w+ISPBB=qF6nCP1tm+s!Pmdp#X zeOJRmnMDIu2u-Aa9~g|9i)#_&?qy61Yf_s@WwuyeZ0`x+rQZR(*%HzUTPS$eDG-o)mL_8k#n0qJ;o9C4&JNyuCaKq zGf|DOZ}Ik{Ue=qH1AJz4LbEe-mr$gfT zUq%PrISSn$>$2S6>N4N&BLi+*`~4<_E7E^dN(Tu9UVap~I2QPf{5~el(ofSq00-VM z^#z#ngharQPjOLw^0}(8^0mQ)a-sUOs&$M^$AGMJQ@$g55CoOG zXL#e!RAL)IAIsmkYH~eJ*2GMCDP;)RVIMmw%8v7$_TqnI3{B{ ztl8%OK2LMfT9#;e@5iyc+yoyLY?w4BSS9^;U11Wd|5{vqloSD`UbLxRLM^&`i+0UG zGIYpFWrTfjQU8|5-=jh8El7pmYJdR?MP3Y%;!rnUa-`OilLUf3q+UEeq|b}}26Qyv z8vKsIRfE+GZ2L+g7tQuCdZe;4Up-LhVl+1CVy27z7Uc-J{~~@)L|>8*(3J`Rh)NDU zWF-GHeWu1^KrtfdZS$ufZzsb0t3MLACnGQ(9;>fX~pi@zd zHFcsTd97uCj-T(HSuGRR{OxbU{UnK|lnZ_4c9UxvBR8K)N zJ}B{GxE0-XzQ;)Y-Olaq3EH>^8+3tAVFrDlmc{{%ub&R9r}A@Y=#-=rFbq*q%6&|a zRf>eRc41e6$_gUx(t_wk=%}(<@6maR@EGwWe$>Nx?j)d>HA>8KzsFpEvDiOkteP@W zNnf6CDQ(zq$b;>Bzu3>dn{d80dMSao+6FlS3Av&nuDVxqt6{_T3;lIkxmtTW8JNeX zshjML%|Mrb8Y+fRvk2CEQ4XZ&WBeCACNXAq@QcZgztk=3^De&|SOd0($Zj`XEJ@*a zbUeS(npVpQ%!ZX68pktY-EzDh1C&VvcV3a1OU@_`8HgS#CC-XBMlmWtK|mf zjl^_sc*#KoWNrS}D_ z+`-SA=gbR!pRI6M>0VlJ{W%fuSEcXlxi;h|qCx$G?)VJzUQ6GdEe5xgCEx8_9+~4y zqvkO(;wSk8Z0B>-Y8CuXx#0W$oJLmUoe-=ef6m|gbL6m96Qfxbf2!?%v*DYM9cRH3 zLHUJ486`fiOZ7YcY~e7=+umO6)fLqyymVXP^zUz9vcj~@W{Z4;A^0{Ch;OsKT!dC_ z!6cm&be_Zwm)W)0HW9>rUB+iUw~^#A5mx3!R<4j3s_=4ar0!*yDi>tnR^p!}t6WCv z(WdKkd0^Js%cdZ!-G4WG{-b%2mAZT1>inY$5U0KWhADZ|JNk=ZRa9JH0#H0chXxD? z@uOUu=JOTTRQdzFlByfQvo$At(7qe`$1{3=dc80(wf`UhZ>}|I_M4fWOulXQsmlK5 z{(V`g5Mx*FOzy87nmpc^)`h?bkM91J8P@OZ_NcLh0GbIT1XAmCxi3^_R~nty(A*`g z?tV&3^5iHQ5l83%bKjLCbbykBY6lN492}2Zr2gwIx~3z!>-dv(x;|QQy5gY{B@>0{ zNQoN?NZm*V#MZh`h3T@=aVy>Qv`f?sRdPI@B6%*vR8i}!6_Usjf8-|@$T{WEu*>E@ z+s)@3iD$JgS}%ku)98RwF;O72tfjS8pu(W&9X=jR z>+PsY3x<4l0Z5kyw~yRf`8LDDj<5Y`y0!Q7^X=*!by(fznsl5sPS)|HnT2mg#ZBgy znca84il#G$I%I=Jjj)K`@+P-rN0P+U`;S?;f0nGX*@41&pTB$sGhE)sbPREMUQB0ovbUU!2&z;IQM?|iqzZ7nt#A)=yvaVX+jzJSLNe{|J3ujw)f!6 zYmY)niL=EeE4+c01NV7w9Q`OrxDKaN-cMc`#R=_n{bPDhX$n+P!9W$2VuW>m9i`6; z8hPp3Wvq$C`d<+(0B<~*6Y?VN%S(1aA1QD@6Mm4!+f*IyudB@NkfCjCXi&?V$V%wU z5EMEj6XvSOPBzFFbm+aj$nvrR$9P0bj*h%{p0JtTTOC33Pn zaM&H%md^V$cArTTUsd{bI&DNM|i zY*HB|@N4dZDLQOp1Jc1=#$mqluR$20-%cYG$AR1!@ZWXXYt*brkjYF< zCW1|{PA;roQI^J6KYl;*P4IJrvRlu0=*ZYwC`0OfQzl2|gH=|4o}4p=TMKhN64aM} zlP%XCE;_Wc0N-KBk3C4HBQWUN{Z9moM;q;bn=Z83sT&s{Q>bI~;(vtJwq#Rw8e&Pu z7lhiN>d8aAjSXP9D2cG@Ke}Civ2Cyb#UwRdCg2?jfxgmi!+Lq?mZIDDy5VAz$U375 zr2opW*RZjdSG-vh{r#KN1}BoHg$Boi>`>Cm>7ep^?7$CocjtMrarZa<(gk{DR)Ep# zWZxfCAOj{>XSEjRrCY3=EA!#b8vS!IZFfj3vMaJL+SyLZk1q{)?WWjOtQJvK4<9;o`mg`2U(Fr+JpCZ$6xP^WyYHxIj!|A& zkt;OGvHRWfj!N=wL}1Qz%OtW)-@7SilXz76P{nGgRB9ttSjUosErjj)lf5!+o3xol5$SsARzrQyk z5wYJL0dHHMjEoBq$14%ue{qi*Plc>PVz46EGgKKq$Gtd2N^p=j<<4K9uH4YHu#LBe zjR`;L>#cX>TCy)apmH+0mnbf8`*+TQJ|Y@?YNGQq%Km}p@!E2-yX8a4bsHUm2@2=Q z$qW44>Yc=~_r11oJUaFyOR=_{`cl9KTcy|+}5xxU0X z-YJ*-PZNEi%9}Wu^rt~IdO6{lhT*j}z%-*@U4<9GizCRb* zqy`N8@{xrAh6MM_4dt$sM6+YDDk=6k>;Wr#^U+^$v8tN4tExmQ>YzVZ%mBd*ZxfnqBh)Drs~+8o##8^)Ma zZKgwr`G%2X0n1wPuA|kdwJEDneNg-GvHL#8EmX*5M(4U@dTP4fYg0F|uS5gAxye4H z^xD9DXamyJOpql#9}GY=B$wRJRnMuHdWZL^9ADp?i7k!4ddurGhB=x()Q#y(q|bouxD9nW?^Tj(aDbSPVzsOHlpk@7RjPv ze|Hwo;$>fzTwK@O#Y)oL#Wwm?0}BkV1qO8sI9FXlS{x1d+=o>Uhh4^eARJj^!cO-` z3PlmyM~dSex}6}UJh7!Q06>^;z|rc|`-$7M!Ds#%P&CP5!C6Dnv;M-txG!MYAI|3L z*Bhq&v;7Bo4F+e2B%w~gy}Hy~q9x4ipm1pnvP6{)#3#1*=L$JRS z=HX7R{K5=wbU(_b6?b*#9n$af296d>m$8)a1@jD0dlQT+5?^&ukfV8zd=gFhKeX##Al;zrLJ>tL+HdOWXU@ z%TMA&jQ*}4^WSRz2-V3Usc?LCqg%i~0+Cw(4e7JK*9Mxwz;+e)-E|D8JzDx}ETYrv zD)-%gga=xfHp`xGajlwupjk;$zMzBKT?Oj_`-KW3zidq>f6JX6K^tB4)2-`S_&Fc_ z7ry2<@t2apOsQBE$HD9>&!^4T5O;a(CII_gIpLabQf}63*{o%vC7H72tx&@R-$NE1 z3|{LEa0g1z@>EQ2BZF@ujk%oY!>c0!ql+)``Y|>H<;`YWru)W58XSIniJy5BDF=+k zG;=*NGL^KBo%2}KQ--V||6fdEJoO=Z4Kg=7GBqv{?woC3xy4Cn6%gkNYH)YV!XMp2 z5Rz3Lqq#iwLGS!_*CBhWvm0c=<5uIf#ctZQ|JLb8kobalQF(o=X<8a9qgj!L0t0IZ zSa|;#EOHD+?09YmR4L%|HyPin?l>W5*a2QBu8)}K^N{-OmM(y|mTgQj z0G~0&`ST3cpXv17Ox;NvM%F0sN|;ywT6M|`WlE??7LP$lbpa2%Wo%83wvO_`hG+W) zUwAxn-LHRNeVRl7!ua*U6seNRF~S!C4C0dR)N0cy+q|aPMfvc6)OJGX754d=SD2PE zu$Yl2=&2z>?}U9YhqGI1#u+Hq z5b*|$yLj$+S2zXT`A_>YYC@6DCxMceUtK7l3~RS&xAjva$3|(RlR0=@njjIP?cQUM z3(FJsB>DT4KMEZmep9{BYtAs3U-@|#%AfS2xeJi2l8VHjT6fp>QCsXHk%isJsuBxy@ zaCd@%4-N8aci4#&qSnBTj1Z;EWWUeJ&6R&jq4_GFKdBY4^W4N<{W|jBEcGl9)d`^m zL4QOu9ES0Xgw#Mmh%Mc&=CJBAd`(OnKKK(z23cn#A6x^UWJr4fou=iHx`4jxzD;!U zzRmR;wx#Sn_mAXla_4nE@TK_oekF5_SWr`Du%_I*R7iqtbx6#ton8~r6f_}TUShq= z=7~u*!l-!D6f-+5L^3)M!C_)P4EQ>fQgZKPr)P-Il$DjmJnVjc7y#b4zUMt#7Ko_0 zFw`Zz4jCQoUB6ZMHq>7A$}W*Q;6Sx0XQR0b7kGdh9fKT&@o2Un_wcxTJb1Xz`}Kakp6eBFZfXc-;9pC3`@JVI* z#whTE!tbu3?xphYd>g0TN@sO+kz2_25 z_-{}xyq7!gtJx0C)!E68W4loPd5Z#7=1HYMV|^96Ee&QK|3M_OtKih z9^Ny;$(}c*7ux%Bj*3_J$2&QE9(J=cy94fV_M3DouH{F!?K%zu>`01ed0S;GlLJDX z4V@olpZ)O^4ALRjRx@ z)4IEfca(Zg{d}Y*54tKy6U-z$Z6kBugP-+72<)qoy{-T?!3YA1D7qGzx;5}z0J|z} zcIIg!QrvVnBqm6+Y|~t!dDgyp*rm;4f8cBpo638+4q4^tw){EL0t}(W62^*LebPjI zI^CQiS`EuJW{W*HNA6Nd>hlHeD-S2Luj*n2yKa-2$G!kv{gQmMDYMC{rb8aAam+x%swB2*cCV53o- zdxV(nse{>@I5^Er@VUEVaUJI~I6my6uRro!xuQY6LQUPP0hYp&$-6o#?~Z6b0=}P; z6rM9nF-~NdFXt4kK2AqKST`q=&m)jNG3ASEN@g9t{%W4?i)c2>`?D`uZgm{YsMxpQ zu6l)XKt_G~wk-W>_*W-!6-;M}HH!!B=grxN8|o4D>L1lIy*#(l(T(e2dp+8J*ltu~ z9o3Z+*;hoFk$5<2Qm> zdk&OD*CdNBW;mk?)I~q4O^9hGgEVvHZok#}VT9%oGv?z{?bD*AZ_;yI>Pj_Bq~c)I zTx}&R%^x2RmY68>)l?PK<3h<$?4kRtE`bNm=eaeu*5P65X?LdRAr%c$cLedE0$hOSkX45U+j}&__8B7_Ujlt#V1(#5-JC5ei;GDyo;y{HAk4@H zWASUihfR0>9kk$-FKYOahmE~0d=82|2~hJy7&HsBbVd3`9ysxkF6oQ{7EYx<`s6KF_XvL$cpxn7oyApFtsAx5=*b)892t% z9gD{W=fn_eckv)Zg={U|!HtMbCd!`3ewUU#>dY-Ynf$Ss`aWc!`gelT-?`XxTP(idlE zZ$g-vfDKIIR;7J2CWEp3Gz07!#Z6@zaYZP#hW^-b?)zD|05>(t?MclXx0E~5zWV{{ zSakVV*5naT_&Xk(qnbIKvun}sJeN-h6T2%ev!|ZHV17n|l*4~eKW1z3PDqiQx>}^3 z6tfXE+FLwa`HNJ?`$MhoOFb}0~0?a)@s=ssoC4` zS66DA?X=k4K7V=;0WL&_0b_Yf7o;!>WHXfI-w%VwEckwhe` z&Qz>q4&V%AT2j`(gc8xc_p(mfH%VPxxRMm$I_mkMHMdD!(%F7nYso<#1L}O!6Y*0= zG@^C)oF4nBJ)U^M^;1IsleA#TV_o*b510Bqj1qFxAQHq_Oox?oo1L1T&c(9v5j4Vmff*(DPvdZR*dY8%fBoF2f3k-Urtx4(T_UrIIQ zd;b^~Fu2j2bG5;STn9n zJ4x{VeJGCT(vospjWPc0#5tXF_A~;x5x75z!f2caWXEafCQ};_57d@dT zPJ28zb@EJO|Dq6hP7CGHvQI+Q$A{%}I1wG)Xw9J))-oxb0WeN8Rg@;sB;*yXif~EE zpsq5rbM+lb_fQ@PrzuxfVT0pV{fRGdx+S2qNXH~#;(DWzTh*HUqkCjeZc`;i{CYY% zO*Rf6jNK+7Ql@wy)%)brH7dmSES6jATZ{x3#M#x|`;v5D2DtN7jh0*Ee@CV*%mqIC zPNBWEG*9KjCt&KRpb$Ay6@NqdmHRu#SziDvsIT4jBP*8Tof*;l(81WEt?_0#1b~+0 zvGxZuf|=iAS5|1+tPJ$d1m`Q6y(+dkf);r?8$TJbriuT2C~uxH%?zRTjGAy1&1uLg zVBP;n*;%}t`cgbDjVoLDKRH`N*X>Uxm@5Quu#xhrNSBKceB@q&KH>#CeY*R>{{82i z7#(5wQP+;M4B`x31(j1NM#{9{YVm8K^4skHzmTM6ODGaNaNOp*W?>K+OzAm`mieiG zg7K2Vos?yo3w&pGSK?&FGn$SNDeskKacdh*rb-cL%54%+sdUjf(QG|(NwQ*_tm9>N zwq}vFw>D6>mjQIv&;Z&l=}FEN#cvP7Tffo%NMyZ}+uk>r06H#>yeJA`4pLjupoOR^ z=C*hKmij2Nf8+XiiOwuMmwY;Pv`?+RCh2}L(c@}8cNz*a4GkWuB9mJu9trs*Li2I! z>G{CSE*&DDsW2_)9g5OTD2t3(B)`sQ81&C-Fvz_L|ME@LZ_++#il>oeZxKePbTS%c z453Kcn5lt!w-@A}^SKK@q}EINMSUz#sZ*d%urzF{rF*f4HevNjAb1@H5b{mTbcdS} z*yOVl9@L{+**E|eoz&PLsE_lx1D}!!Go0PktSJ>q$?=QroGjP30Pv6Za^h&tmZ`7+ z3X>#dB@$QRIlyL(CC;3n9h)r=W-2^~#xZ?o9^jIW%sNaC4Loa~9NABsQ3V6X&jMs% z<~eR}ywJ0c_5&*TnDzbdThab_irFSdRFsue+9d~{R@^c!R|*S<{Vq<1c-< zyz=!g{gYJ$gWPwCSt%x-A3kEj#U8Ib@>A11gcTu1e4;anE*hZhw+e$f#WwMQMxy7v z)zo(jE`TG(ma%Q7M)*jGXZEZd`lj(lZoSlNe4$b<*pK&`qRuhS*`c6uSmWR-4`nRT+wq;MPKwQ~A`$>>nb2q<`#TM0GsPKxE;v=V_6 zpySBZXRNA%fx=OBw*!2%I(fasTSG4L>Sb@tIk5R7J9jlWP%zT~WY70*<^!@Lqz)FI zGJSv|O11ZIW}DV7(heMw%Ve1v1rYapA{^9|D}*qNyje}A0duFK|4MOKbGtg&o*xba z+s`>8np2A!nk`8+W@oi#=gPY)AfaNrc=Fvo#!|d5@EcMQsxw|{9%pFvmayosE%~Kj zS}A6_1Imx@L?n)1>0>6^Zl9M@*?l*nTqc@1e#e{LeYg{!F5;&woUt|54Uh&!^dD%s z4k1&FTma0eOtIi(C^lwoT9K~d1V!}o3CN=aroD2x=a$o6M?9u3pBiq@_;GgNhZd#g z!lD6K0riF_n3e;?^yK}<4(6r)CC2dh30*PjTxh|`WwUFdrcv-@H5U0!aeUz4|8z^W zY`tDtT<5&HFL#FkeaHo&EsGEbh{B6L3Rs}1t@(KY@cVO_j ztxT*BYypgxNBJ>Hz1)f8%?-hPoL|Pc&sKFM2Ir~fetTgCMXXsoZ9nH|A4PwkJy0$u zz1dBSFS}5e#Q`LLP3?+xO3cxg0<2|i>mNbUl01)#u0JzRG zWyu9xMW{zLz$qgAp3K!#v`kep$A-L-pZ+hrYDq5n!F-Pry4*A>*OA5y)m_>#=!LY z-4ZqBv@r*r=T)PB9kqeBEuQN7yLCyE8mpCewXQE%kLCkD$qNe3!t$Zw*Zx$VqWO3y z<@a3?=r^C$)H!H|ve2wiD=RZxMU>l|Q}rzHM`dP{E2J}Y=I7;=I5UqSaH6}Z4EB(g zxK6dU{z|D@N`Q4iP5vzJp=T3O@H zt#S<4r&9TImLjIWqT3%wMcLvW4x&n=#mxC?zVOeONsjY$B8=jWhGMsx#ht`e(GYkwAUoSi?XTPcK+N?3b^O+wpvu026&7dA4dLL z{UrgRN#};k89O?>*`1n|F#TigEbrKvXu(sYIC2xLBGl){M*X@kLDN{?IPlM0rIMh&ZK9rT;)eJAx2@u&XNoc(c2bZ*z5d%_|@>p?C zj;bPR>Dfnhx4rK=6(L6vFdBGIH!VL4VXK}9B6n5{5c?6-UH&#(qqtP(l{aD-ewG9B zFXZsyR5o7lzDkcrC{TiA0z6l)JO-$A9RewyNU%Wwh+4Knt@+$JnS7AT0DxP7p>7{{ z1=#s{n#}U3e-x4*AQ5Zv&hCrTnJkIYs%YWOHSka4c+J0I_O1Son#47ZO4T4w{6^i4 zgY(E^mTPmBREczJf7jy0Y`dO1G40rbo~S7&~>a#Dbm<4c}xBbNAx{JSP>*S?Ns{}jIl*J%&q z`D>&xUl_=tF8VbgO>`vf4m~{tM9%@zWC>665PQ+eBJU8aP+Ad7g2QnnZ6l6-F{Wq+Y5Z(!oT9?~%qv4>9ivM&k`>ogPl&D{3`f|tXofkPVA37_^0=*OY&M`Pa^t%Dl)-R zr17riwkYHlJ3=Jxvl_heQJHM9052oqG)O&v08f`FAF;XK6mz0f3Q(E{*3EdY!j;Tj zNy*%T>^su3SwNR~OafrN{5GSWb+G;5$4sY{nUnJTm>4c+PRFr;+ zLLj1CkZ-S!G8;6WXB}BVM|yU3iWQ4>5*#H`4qpk4!{3JSdfG);<9lywR}{nxV)WmJ zN41)Sl(2(J?n7v#AV@0vFzS6sKych-sX?wjywOld`$98nW<1-!J?tQ=uRkMh!ncAd z9=zjOa4=#3p?>`+<;jOArW^G|G6(2r$E1L<ods ziN7|gjMj=6|N zr}F(xj?12y0KX%UiBHp)*mZtUZqE zb3a2jqRriwNwMSdf+w3*K6%f>sM|=qXFfs2SKe)H%9(=6qDq9(&_{81R|I!Id_5F! z%a*vKw)d5}xau09*~+&@w9-=(#K_S`kr_tiV)B($3?+B&Wlvkjzdl^uT^AGdt+*5) zHgnJDUWI-FPap?%c~-S&iSQ7zxpRg`5jH`#K@U{6}c}UdH=S}eLV6%j2@WD5XLZt0@erc@K zlT$oprhJ>#J2_vi>6+(FRCw~&m9W6db!OjGcWEKhD0~93VO6)X@x+}6j0pIOA&4WVPOO=*GqdYsDvEcU}=KQ}n zE59w3e--q;4GD%gK64cQ@cfkhv9tC~MNI#Y#*&pHNsh9`-?%fJ_krpwZ&?>Ytk8$M z)qXJ?QomB@fJUY)J1jpi66`r!&(f^WaIRh(yv=^1I)g(B8qU6v4Bj3^Z&x=JOy%*$ z?tLwU{o?m%?+bS``JIJw^HdXdA7Fjgtz{Zl_E~qXFy^Axu+rV`o8YQ&ofp8Hs-z7Rwq`+zJ*H zuf*;i*<2pG+hKP{IE?4antZGMy8ghAxHO$Os~4(E4OE(AI$-SzgY2d5e1e521D6aw zBBC>zou|_eI0aJyT<4Myz3F_jTHD>9L1G$i`D^U1=>d+g)St zsC>BWu{k1duP*pg0ZxYIx1OSN<>;)68v190WMCaVY=T9M%3cc*EJwNCEHGa}SO~K? zaRETpa<4IW-{u6i?ppUUNy;ria|El*9g&JgQn*Fu}MQbKi zADs=ItMTEtMEkOkR`FvoZlWspgu1+LiwenwV6HsIWu~`K--r~YKK=RRYxO0G9ex)l z^NyKYu8D&z1scBj*1b#U$IUwTq2^A~5pCoKv9O&@r?K9if2{jb+)LFsOY@aG$>{gF zJfXlezbct$6vv(#!a8?w^HYu(@4;UCLy*#m<>QwPOdOZX>%wD2f|_-oskUo{#jjtt zEPd}QCGHYZE9zFy8Q#f23Q{EmA;9?$w3oCdP%V8}#wPGr{;Eh^#mXBeQUlQQTX23p z?dPaRq4N9F*+*nYQrmQ$!XfzOBr@;8bJhq#LqC0XQQ^g#EXMZ9k}?tTwUwdR z&m@3to~T}#%9brBWriqM9@-%MK(Lm*fWd<)yVloPc4u_yFMc;s1yfi&brB-PbpIaK zrIf`CQVPvS?#0e;s3;zM0@4At9N@fIhr<1F`3oTsZU+K(NQ z!}DU!Wa>fcYksiNcJaHK?n9dTNimiT;c@#U%Rsifwy&N-PCghXF+=D?=}sOQ-x$*& zea=WXW%3S$DRqxsx~*;qt$!6PO2em;%r!q`SkjhyH$ahLOZhY$ zm!8;=JgbT*?V(wk`%f2ul^@PF;c=M6%K8&eWdG`QF*39~mGg3S za2`X{JJbaV$+&#FNmpHK-&4xJ${4w}<*Qt=4e~hu{i3M#Hcv3UNFrr^c5#+sK9^Zb z;r>OWk5WzRXAVNpvCcCWl!qHfx*24lq2)*kS|mM@2lMTD(^0&P3@Z@3*{%dh6CBE>1iC3w?!`rqGxID^l`rqb}htTbBgN^Je zY5Ef1q&3#R(0RKQk;KJCFpmDPL5!Zi!rUhVp*zP!rQ8*xer!ya`!>c`Ig;D$*Zk*K zHe7r2+QfMUeKxu$Pc9`!*64VH8{#Mu8dPK+vlhnW$>00-W4?>jsjCtj#`7yaNp+YK z^`^ChvHUpfCM}EX-YB~bw6eG$h{v_C^&9gvnSs06#AS7RxZHxKsb+vk!Df4EF*z*PMOaf<;AndoUHiVzbk=9s zGIf`tSg%)MFo54DWaY6~)By35-U;QvJ~;qc)cg-+`F1I_Zw?0!RPPs9v%WV4&Scm} z(8DJ0fxR^VhQ^1HV8NaPTYTG^G{Sqevxe8e`x`B{5A-v~surW5U|&=7>nMt20lA=J z)S?gO)j?9uyS=Fuvmh054adONb@moOu0KjN^8oOj+f+6#vcFoo5;nvbAzcK3xH`H- z*SX3^BKcDd6tuD%9aHz_vl~BARk^FPe)}YyEQw%yr-%uVghZ|0b5CoG=xn_jV6?rY zMs?5VNwI;WE%@cu7MozHp<`N<-gD`@p`skmjHD`|faIr>3}Xzp$WfoZIk3GW^Nu>FT7;MnGxW}5_A~BPM0+9M}6~IoJdE}cAr};eK}U{W&o+uAVN$E zB5TSjFK?S3t0xM<6x;2*e?AM<0Gg9EFoTv>KpC}%QPVH$_`*|Wec_MRs3Zib2gaXr zMbtNJjy)~c1khDA&NLDj#z;oQHSr1yIIAJaA2yijOA43%JdjuxN|?mqiv~a+DD9Dc z9)GGkr9`hiil|2c`oGmd?#C|Rl!DeHFUqsRVz12ggCMk0tU+&uS=79DFR@7P@p6-e zj5Zb`>qANv@P?|&nZBt=SkTX@TyU=e2;e&rWq=nxbR~-1(NB}%6xGGmKwz3K*8w~~ z=QGEbEhv(~xd-Xluf^%)s=T4>`Wnz^RvCPCM%l#vw&M~Fgzl>m6LKxxX^z+tavwLZ)H|Bo}sW zlw4cj-zLg%>ImKk;zdpDbg%G=OSuLE_Zyc%9MC2~g{CxqnWg+l1-IYE=H9#Ts1wbm z*0XNXm6O6-n)b_z+O`$YTeB&osGI5nzyk}2%Be`R;jgMIqhGYz^`tukU;U^CcV+dM zvq~YMFx%C9So@yPV0$uo4^8w9A2{g;k*{*BO#))=8?R8F3BgWI#91w#b{W*xGm0BR zl(WF{%M90*{(9UEKRN?kCeOs`<-|qKIskv+QnwOkn+(zxV=EiGCNL_ct*;F+hc)aJ z8->wk)!%5F+=MQ4-g8gt0j^m5J3ZTlIdh-mPNgoQNIU0?rf zUvL4V>#^$Y?yPWvtr8N3TxH4)WMpPlJm#aYyHjD`CYc-wA7Li*W63|0`Qvun^v-7< ziTFkesJQy^9dyIV2Ku5CBC#k#X(oCr{XacW}mAal`8wIYmaCfha8VMA%ZvZ z!$^{853Hgrdu|PmN$Y)alz2JTyUz|{|CSNQGA_~`vDD72Z^WuEvt`T}nYSJ1X%~6o zAPup-@}zHpX`TXaPNkxkERY!S`bc>2D2?lFL9P!rg{Wm z3`+NO1CpikN6(z&ec(7pefAO9ldF#h61F?TRbeMVEr=iDBxcn|;lK@BW0vmRzY9Ra zi*gXgPo&}j7dF4E2g{dR%@(tevKr})dj$Mfpe}0VYkNLYi@xpkfDVdHwMd38p3R2H z`=D+>I42w*hkza{kJw)5P&`&IVe_(%vFvhue?99%Pn*UqHhVk6=lhf50-cZ2<_)Ix9?^ZIzJ`-SZ>?`-z%!hm$Qz3 zC>a03PM4FOYR0Z{vOw{oQg}z+MMgjACdK@Jq=B@P!~UI(NN)I245Nb4?3|MhIY~9U z_yf&sR~(l6u6G&=w4vk;HGS+NH1A>o8x8upa4Dg06J+Pw`k4tiKNn`fJwGdF3~ph+ zENU>98)s4xyY&tF=dza}iT=w>+mII&rfnI&6-eR<`pYLPt=lch;M36!_QN195Q%1I zR|Px4)u9fiT(ZUA$*<^dN!MUWl)QBqL7;i2u6B5A)$Q%KA2szl{GC z!xV=L0MS}foiBKrvyZ0hhhnFBGK-uV&N-fGyqv@lH|k@K&ImIV4S?&AALcZjPt{!^ z__vImcG@n|q+bvG;zT0XTh{SbW31q}{@n+?zXiNybx(czC6Y|uBUz%xKC6hcwj>W= ztW#2pEVl5`1?pX5!9yctsA(GDIqoL9rx0xfS5y!aLJjX2s&h`bDgCV$Z-Ik{An*G* zMQmy{waU%F0cbsbpx^Nuv2fNeQ0NYVxod=*OW5LTm5gfs6R|T)e%_}bO5zl@si8B5 zaP-l*%{?H!`1O&dxn)pmK21#Qqw>o*2b9j+R;@o%@stoS|3)G8q*LqLFxHjsES_HR z`9cz7n*VN?;vYYcKIg7hWG|XZs}x9g1l2~kqX+tW+M!hQQ+}8?J9EMHtwY*SRBO+` zkk`_3gvrWK(~THLee;JWPqce08Zxm0c1z1~OxPo(`O!3il&R4laa$Rxm1&E12PoVT z0vql9KBeH9RASTShs+F`FC2kpWKhYE~I>C{Nl%~s`dPg zImxU)G5d!egENdZ-bz~ZhaTf=6o^LFXEji6Z{<}_(cPfctQIvVr!V}*Ai!6EwG74X zqf1h??TvzMV^=%Q3Dy5x?SczP`tSKdfx+LU-6ksv@B2AK?tP;)#<-3&x^?1|g`fV% z`_?LrtG@|?>)h{S^h%LFo|1QM!!e$U@hqdF+7cgtEQ}?4D^;(Zy&1>+<$&= z%-abHNnjHcH$>ZBg-9_?q;pvtazWw4WcjP-{K+@mq>OeP^rhZmywr2IuYv`xhui>|hJ&CNx zA!Y2Wr>n!Ic`aLXW+9WqeA|rGWwLRfFL>Y>aEYPbIY7#6sD0Kf?90Ev1LzdRG)kf0 zLupeQgK2GiT3Pgk!_(|)`u>+9!LHAV8UK*7}Y5HK*W*#h7dX<+y5SL5z6}xJir3!$KtY3TSNVEBD3Nl9`6L z-t7{1{ZV-_uFH!Z{umG%Mb|xi(fm0_)A(!5#tDSza(DdJQw->&W=e;p;h&@>c^KhnSQhP9P@<1ULPN zwft*!L|>v(#5qiE@*tGh;$oKwOCjxU@D@&VMriHgDob+6DQwGM{d zzeDLQep<9erd6sZ{@Py=5dB~i1{&H1JA-}m-o?)})UCdsUjj6=MD2J7O^ut!+l zz29!s2^PV1jXH_cD)vG{S<9e&%Z;O0@*vSTVc~R?bfq4{q2iPQ3PO8Jf5)GfH!nWG zQZ?7>1ZBF1zC51hnb@rk2 zaGPU6dYVm4uVZVOYC-p~*7fYKea5VNdCHNC4!x=1e7F7%eGw(h!y9v7^w_AFW{T*J znJOuv}dyIGcUh0&}a`F3$SES8Y^cmPuv`uFb?<-dqqKyAt_0<_lS@6TEB#8 zfG-{n=!hLM$w#k0v(Z`B4YGL4Iy?Hjbp7?gFs$t}+sRe4!9cU1_bY|u2PUd8)K15% zA03P#8gIP6ZYou-M^CBOVm!~565SC50K2-fm9w)3a=Ef-&oe?Urweu!Fh>2RaUNU| zK{MEGwX|10KleszRK4*UMtHTQrqTyXz**T=^FDwAz=>n7vy+QHMwOYRD3&8X=#;F+ zJH|T!$XzIn;<@Q|tE{Pi&h!{(H7r@K#k6cu_l(7^X(B#i1EHddTGDU3BFgaHOSdUi zpF%0WFXCogx?J4-7hDAf0Zms0o${i&HYD1`@t>g`MND1bX3XnPCc_zl%Yj}viLLZf+ z>b+!;b2HNJo6hiOwpDJXX=3c%l)G$K%G-)Ozm7AGO*zMMT659aqjm)=Vma9xE zDE{Io&k%^8)?8*H#df&RfH*)DuLxGJ*oIR3yl?6ZSm>#ek4G$`9R@(29jA(BX8;Gg zKgo6<>tP0MuB<%7MM{wBQfcxe<+Y(0*C54X3~hvfPmy{3J2a6Lv#l+WPW zz>}fNriE;gB2EX6YsIR_jCD3$D1pOlX@U^u}}O znI`29|I$|^2elMUabe&$>M?UOi%6|`(_~dt(>qot{;@O*Olk73HBA%c|Mbj~ubFM8 zFNBM?+C|Z<;p(I}zA}fk)q|5aUm0~J}anML9KBRPdCLt0Y z4L9I>n04cERJh*9o)-@eQTG8`L_$! zrGGAicC^x#qZPHkf!BQ0oolJ~O`j?ezJv9q7p=e3p5@Herx10^8x0`{Y~6OzKq}Llpd;)0 zP$OS8dZffg<)4y!vJrPq_lSe`T$T8{v$H;Atu6kA5$;LJ;!YR~b z?Wm>-zI0K@TW&a%MEh_@=jG1Bd8%-0CdDsYMvRmj{0?xru81(6ovIz-q~DjF-q&%x zdnG8gNKH?*17C`d`_HZ3$)9#8xp0er2^DFw+p6g4^d*`at}#A(Gr(M{L)1E^q#X6h z{Z$vuxRSwJhlp5l>&xa&+cE51b0?4>>o)pGCZJMz#?1Xhh6+Nn*BYo+10~4s&;EMv zUq45WGichsN)7zvqRrDUw_urK?GAGM=KkX|=g%{fkv|&CZONgJHYX`{ERDAR&D5_er(=NtUA9$QhHNWqDSp6hjbKTU^Ai+~~oF`rQ8z zh(ZTL`W!3!T$KKkG_|V~0M=r{qzf}rahSOlrg6~X%d8{(@E7WtGKi!vZ>}o_9y&M- zJe~7B)(Tn~!LHQq&WG2PPsbgr)DW!aeH&NS^OG{TK1)6Yx47@Q3OyCd`*Q9jtR ziwPCM6hMDMT{L(wmS}LwGT~Bg0P)?0;Nwu0SFI6Yv0Q7V4|1d4KB zXZPObYp@E(2Jihbq+J^usMJ{2Gap=^Jan~Ak=-RtHxU!@J;2J#D9$vrxnOE2N7*rf z=MS|~QWKN>n>tpDtGDG1zz6h=B<&w|DIMR&RTu2_z`<9qga1T0|txr}{gd zOf%%36ED5h{avxvDnD|- zV0Wz+_DiPVY8_vdG#CI|lRuJ{y{`v*o}FiUk=g+&xp%}TCve(lR^7qC z#76ro@#^Ez&m0OY`nOo5-$zs6HU1%>5D{(C(v7UD%Gf6Zd3Jd4_L-hN%UkkoHk$yMYmA(z_h|0rBhmsexI7JFLydW%faLP z??KyA;cG=#lsQGl_1_l2MCbrZ*<6o%#o(2G+hwKI70qru_^DUCd#^1E#WC~m%cukp zMc2w$npm-rnbLko7M*_}o)ES!q+gsO0ij|S<*Q#_w~P7h4Q~u|$X;jLYog>}64kY4 zG8x9rr-kz>7j)YtMkE>aGEnyzua8oOAJ~|ynHm?=uU};q_D9Y&(d7R$@==jmiqfa) z{QKU8zWE?Sb~$Gq!+z!7_|MI)j%X`ninBdhz%W&?XFpx6DrDF0{G>;_6Re@J_bxGE ze=ivvwD~o0za8HabDaMdlCtxM(tzbT_o&D^RQd2q=f_DAwE&5?Vmms&dQ;_3XY#T! z=K@J{q2Oy?-?niI7Mon7lSK1q?7T^DY-e@cB z_y*%dDPhb}Vo&uU&GsuG=thFel#hvN4ow1^ZYwTEgPbgqS&WUpb}|i2R%P40`yhNJ z$P}uv`W-Ks_7}LjxuR@xrj)40$XJ#ivYNO4lNz@+3Ow`=Gz+ZgOBj#KD$`B+I@vI? znn8g+{+_I+vg+@w-5n9O^Q%aMk?krx%|*K4*@0X-8?}VnSo*^r1WCd!?%!F@Tgu${ z)%uM}3~*S{lmZ4WSF0*xq6|goBc4I1YUb(Pn&#&y@~y=?Xt*iThBVR~dQEg!=~Je~ zuHUsemI7VJVsMo4mv*Y4Ci@ETotbsbt{`5EbK4tl;hO^Q)G?K4w)>^l;TfOr7dAEv z@YZ>?Z3iw!Yd8I2SRgNjHXSe1o?Q6h39*YUjEf5+F|p;JJJXNR^v{F*DHcLd6wIOZ zmqcQ}w~g&(vE`i5ynKNk6m68#@Dq9b7?WbTDRFDD``53_D2_h;%lkhsU(}f{^}e_W zA{}z>58g0a;?(}if4q3i@3E*JSlpJc;^=Oj{~q=;Tjre;u(6WI5^NvZ!=G~fi?w{|U{HR9{^IO~TMxS#t|{;Hcx^0~R=A-s`kQ=Hy~ey> zt8jP-WD39Q6tuEE@3%QQ%ZmN(o?==iYlTF^W>5Xq!tt``f$@LCdn$7)5wtv$%v;rh zyBs@^(__weW+4c&!qXvf^OikbXVLyn(~&#>TRV}k(+_NeFs;JGNlaP2B{IQ zeEwm(J!Wl&EBbm=E50NUA+B_^&vE^042S{+CT^H&!voKK+ts-mnkuz zMJ?8+(ym9>$?I7d>L{<1d{CdmqLZvR-(a@K4`ZZ!Qo}3mIryIYzomtKBMFuB^9el~ zvpv7t4D{veVJGKOAk0Tf7JF~JVN|nwR21{<=<8R};RyM*SwCG-+q$^O3x7Tp8Jnc& z#4JZ+JE4Bw9Pd9LIG4|W-O+r^AMU0huB$1~_Ipg6Ss;kkkXb8COmI4B_xWD~rgFqO=6T3>m!I{yvdZN`upAmnPK@fR!Dr2!PoGAd6ILwOBONK-&k6>} zo2)J^YqvK^8^Bge_`f~N(nYI}*@`&Yrv^_~bhhTs{%n z5|jEav|*Djk+y59!fDY?C6472sp{+FE6nCjfk`~g|2;u&n7&>_wMv3tO40q?QN7nd zS@QCO5r>q4@N;>BDC=AQK&`IN)b;M#H)zAw+4nkixs{D7f%>520QvV|e~Pw^AYwND z_?j?VI-n~l-$fF+c4UW2WmM-i7SHKoE zdBzaIx!!7MoVn9b++A3A31uP`rWMjsBcXflayy*2J^SOfX*ySYn)T}^vYm=&#$5W= zP*!b8xngG1S~-Uo`^XW7+^-M0ue)#kXK5P=gV=w4(gI4o*pX;D8#$YL{`1lT`V2gW zo{z4t|10Y~wC3kMg!A*B{jk1NIQzYgvE@M+i@izkc3(mr zPa)r6p?ntgL-=>@@FQ~2jMyLK zQ$WCdv436CBJv84ozN;D*UeQE!w=cI&lZNdBD>Irv^yaWidKkkGYytwfpsDf; z98hn8BuEhuX=+B20ov}N#gpk|k)zEEkSwtq5lQ_Iz-sf?NC?LDlax@LqUw;<81Jb z4!6N%rqjc)Vf%}bQEb$&OuQQtnB-oTbVkOcFc3%!c+mw}d zd}gp*^zq_KCnNW->$MB_yGZIsdCml4CUm2=MC_tAeJdg!%eS?MZT@K2S>Etn*ZMWt8Uao5W<#Z8Z+?@a@_iVf+p~vWhUH7j+AqZ`H)GKz{A1D7K={&>P zeE&XNyQn>D#Vj3!s!c-G=#Nre)QVBG_NYB#kJ_|oDOyEU?b;(YwbkAuh@EJRgh-yd z|L27l-f$e;x$f)we9zB$IfYq0)xM|vaNS0M5xo@I2lod1nES2eU_*sa+T~bXY!Cp6 zPHy#__VlTRaXI)HyNo-g`PIpk2!e{G7dK`7Ud~8wh-|*=3^vNtE5M*3S+hV910|$4JcB1&Y*43l=54xCa?%Nq6&j(s5 z<5Pq+Qp~-jSnUS?lu|3}$!H`JxaIzeEcRDabmQjl>QC@PE97 zPAqwJ!o4ybYu%eceXRmD#k9%o1n%&AD%AV%N`hC#m3Xq;eI1)nUN_fY1)`J@y_+-UQHO^C&X&z|E3I35eurGJ-Y}-ou5B4s zRit;U&bdr_!>7Y@(6`>t-5QQi+K4ye*TMtne<`K}3A6MK4H@x48)y;mU7?`8Ufvc| zBm^ElB6M)((K+yN2v8+hA+1X`s38AvSI$ma~rIPz4h&J^Lgm<2BVyd-St`aDFD8!%O+((aOcQaemgLr_U zJ1-j`fpC{Mk6tc+1h_rI0M-@>A-uX2)Gpm&{MfD0;wZK*dX?2q^y)h0GXxPgkY&esmtduQ0Kzsj#j(ro-rSnL56P%BTrj5Se^BV6{xmTk_c zWIp~cKU#HJQ_v{o^{`GFk7w(Eb%qu#-rkh%VHR@?rAGMSnC-RPmDSvJlkjcR5ER9f zPWTON?;hPy%>~fLGmSC1>)!yBcF0CTUXaC94Af0obNSk_41C-Ersq$nIx>J9dqpadkOU> zaoRZkVjVB>5k;cXr5iqCr0vt((i9c786ZqIHw6A;mIkNBrYdrG{T7*7oncxD-*a7z z(gU|DqWqEZW_cSxW38ShZIq*aQTnRF&+?j*WFfmPGpU5zA^bBzu*GxlI})JC z{D7b_^S#mMmVKRm3FhXfZ)UTS9c-1$UH+L>+I#PGD%xBqX7EyO?c4>3Tk%-&5FkYz zo?=FHx2Vy~*L&~1cu=tOg(@02S!mL;O~}sC2)6XYS z_cUz6Q2dy#q#MzWGEKF#A}VIm|1n&47b)vAy)Z(WhKtHI88AyLe_uN+RgZkov5}!I zP8VG=^pKUR>s4}jK|mA0T$}Gd=y>*AplEML>NC%=pSavcYm_cy+L*~`ev{G)Ebf!kvxRzahMb%w^`0v-6j~zk;>j!Klu5ihFhDgP2B)8>`m0=3~4;~T~=Vb>W3 zYx$0V$s=T_?hQa#&!bBx&hLr3Dot0gY_K5=fFmUbQ2f*g0x1^lO_)0Y3_wK-(5eJj zDbYL*8u|R&%I+9tfK_QZ?vwfqgewejBi(v8H+e`>a&{@qbz=2N7|AoyKpI&haO`%#vAH z9D_IaTm}o3$|sqsLb8cT3^qQi!8cT^kgpzBrdP8 zzG20nt;?Pumzg3V*kLqWO6DglC^s~@Ek46(9ZlIW)N3>3D$#K*F8m|pZAmUiVN>5ld8E1o#0F$0>3s^UepuKUfA6Zq+lRNd~!np(9Lh^99N| z9!tLBQwEGf5hH+AXLK53VXy!}Y{(g+Bz0^u3cfU+F_r1GxKlm3Jt7js_AunqlOc}W z@m2BmNS;>5Hr}Zkzfc-aEN@ry2BKoe_lHEbrO5`S#}=BRSLHKOB=X-{u-ISF%Pc$(oqKV3 zeYKI^|JSf^%md#z&FYE-N-Em-CyTcqCr%cbev@aFpA^(07n3uIVm~lW1JNvLg@>Ig zjo;sty)C_HCMdfO)Pn={Ws0w-<_9t>-Ux4R{jc#R^pgB$$naY|nH$-3RbD-J@4Red ze=fvLn6JFtN$F7bfsTUkp(H3W4@6()kB(n=vr z0+(}C4Wut1q&Tz@KB6QvhKh%{?JKdr@^Z9=ytXvCKAbxFw-(^CI{h-T>6;QN_UCXx zC$AAe1y!`xF1SU|tZVv1>Cf3GBfV7CGGWOgb&tGNzbAkz){wZMwuYV{MToo7&C;g_ z^{T_QG5}3U|IRE)P@*U}4fQrj5mT7Jui|5)%<9!jU5-*OGu8E5u5HI&^HbEIBnRTh zOHJB+mAl@(@|5!#2c|%0)BhpWCobwi=t4CF0TiiDs>*`he7%bT>E3Y(O;`SrRLL=c z#Z{G^aL=UzEk{x5+QJS7mIh<_3I4M?XRN=T6!e45Y>d=}ZNdXNb=mof@Am0F<`Xh< ze_hF=6L8!8J((sf)j&mieKOyBE!OYr|^b ztk$kZ5xJr4i1VKf?P(8SrAY|;Z)glMe4L8NJ~c*QJ6eT5)eWu-di9}s&VQ=+$A%{` z_tTNH(snv%w0mQCZ#*q4hCweM;yr_~*|4r^4n3oZ+1S%IGUw(EPXb09+5-;3Djwp; zml}5eV#l@mtOFM^kGk}@R`G$HtC!+!p}`d)EPW6>oi<}|dSr+2gWlK86QTj@E?EyP zBj+Z2L>WUOpVo{{z+dI?;Er!aAuyD70^FX&n zyzTh!jOSY*<6SRids0@gU>d;70;nuiOF)>oM75Qo-`zNxkaH6sUY|gp1$lu;=_K&K z$L1NzWiiHF^)wC&RB)#Ic8)T59+5q1Luu|(h6yy{B;%=2scM&j9mCSRZIk}yi-|GuZ<|p_k z+fO;h`PHU+x~Nry+Sjd8v^0e5m9Z0QRNb2{VoR7Sa_yI*edeRfNo~qE_8D;x$Z1|5-qbzgdpw{?Jtq)Oe#>|x zfImkfMcJaYCpO)x!FJ8K((&X!_DtiitqxZ-QRwz1=(&)kKT@s*OH}dOJTb^ONHhYaw^jYn9TNxQL0im->c~xJ%H|yG&T{^<>ET#6CWM!W_Wa?*(mA z0d?KFghz5fr5SNDcNa^R$?`hSKrTpT0pmVc*)2)}tZmJNql6O+%7 zg-j+a72d@n+?)@l54gk36_wG*y_V>cm=9CHCXd;`#2lDng#o3}*@S&Zs%+C0w_Jkc z6WP2b+PFn8!Q0%5iAPR3{;$_?0QWwldky1$|NJxkPFx%a@D29NKp+LK4Ez%wu#eJt z!%mbRYErT`aY5^6J+)=Q%AC(afciPN1uSX&;JKp58;T^$sRUc&y7djMM_IGeq5Y3* z%|Za^<@nE+N=nU_gf98|-KO@%Bmx)1h?sRP^`Xnhp8teBQgKyOC6bORwpP4p~# z#Q}>!;lCuZUcw@;A1ZA>iVr^qLg@RemH==u*)JYA_&PgMgH>YBF=cTQ*zf#eGGIPV z6Wo4b6T0?yCsQL%ag|z4^4g#Ec7~ho1z_?ptxx~}I#YTTL|7H)WHmRS)X-+1J;(h{ zTUcD+%KTE^Ms~S3vsR?y+SQCkpk9daDTVO4A`GaYTiq zfdW`hu0mUEL0%9oTOXI;-I4Xx?5u~A$jPA(qI3d9(U)gHw$P*h4wOj{S`#^k^W8{b zS&#gs&TPHf_2!FoeE%fc!w>E4hdrpr;M@d$=Yp(Jj~?H`OREgI0jw1MP7vTi!oE>4 z27s~8gB7-{Gphee4>(m1-U)eBuw5BY@Isv61wBBc=fBkQJlnF=y(j_U1839E%{O_E zLd6_UcQv=I%lu#SVAu-cN4%zqYoyrA;0NHvf+===^4yD9??d zF>*vnsfrjIr!xA{)Pd*0!YjdrI~D4?3v-Z6M0U$i_4i!L%{#apaae?Oxoh z!JE3rSjTWvR>~7yXOoETB70E*q4_mDNXkBt zu|Wo9O*Zw9Y3q+A=RyHFCWpCYepDD6)lMV5`3$l&(`x*ymV|_qwgr~Qx%D+o2yQjl z?~n<+?!tQ2tqm(La4}rrajC_NY5fc&PURJ=B^Pa>nIN-JCd(~xA*ps;6+->hzEiBB z)P3P6aUVCB?Vql63=M&4lhbtlD2weuU!sYbk+3n+##v-CZP%+kOG*|po_)hten{PJ z%f6$_!G~ESIz-?pEgCNbIXIikxIN|p;BC>}cRCy9|B27;xIt2yoUfZ@f~7D$C<@r; zH0r5hB?w$9@&o-3vj|&jk9hp#2Oxx|A1V4-CpKDg0+`=)^#@*?Vej2D*0h0?pT5Bj z;BnI^B+b-XJb(|K(#EyrpURx>tL$%aV{TCa#DzZ%(8viFYIU@}q4o>V*VUgE$FRQg z3kzhz(Y^!mD_>@4m#9bpjpfg~4N1d&87&57qcr?A`24I|F}K0jv82NIrYe%7<0@@I z<~N4+_n z4~BKkL|td+8`k5YqH$5r;BvHdtW=*xulQ|;_FRdlWMwPo3e%#{jOKc;n4%J#>*XGB zSNMQ}HbS%@^#L<}aqt`Nl12EM;`3D@%G}Vbe;Heow&UMQ+nu{P&3;OpTO41$)X;NT z1d9or_l#oxI8`WGW9SN*NXKN09uL7Ge$ROiTYbm`h$G~xCm8aUvluGHmJ7ZF0sP$? zF_|_2KY5P&<-euX3x7C=6smr6mo*q(yg#ee5VvpkP(oFm;Sw9UBr0I=cmQnmAJ}bZ zot>Wg@a3vMU5vzKpFm#L^7mdG+F-}z$dION6ehvz*L*HGWY3$`Y=L0xgm$2W$V5?J(z*;)-$(lzCk3u89|-s zUCI{)xA`%b&$qB#fLHCJy|WfA;48RRNd^Huyfso1jj9kE>r4*c=L#&=D4|F&hUh@76xpK3a`C4W)r?`xt)tI>?n-;FkNBXaL|FYHLQ zih*RB^pa2BH=W(;o-r2Dj&*a<4hrP8QBh`wBKYHm%S7ou>9S8gwS{Tk7nG!HsBf1e zh+eg)E|nHZXXgKrVyff2NYTA1mN8UF4Owt%XHaJ1sO0`WsyQG8W#FV?&$G5p`S?l^ z2{?uV{Jv|b+gXBNMiJIof8M#JZRDaR4{KmsAsw~ix_B#W&>feDYIF$rX?=s=Q(38f zC{3m-f!@4rhrZ!54ZNC)CQuPEvr4m<=UndV?K3hV)y%1Jkfs{MJ06Ua?$u)(`6<0O zd4qXh3C@nCY&5d6P!ZL10oN>itb3%i_UbZOh&n4&!y}=+iwT{Qh2tn(+`}l^KN(HG zy3_j<(ZHH~xyAAm#G{NP{PvatU|HprmXo=AcicLvDiuW%L}UQ3WKHcT*TkydV}S1m zgCgDWFaaaLP%jbzBgzS2%r{R96fAY0mBZ@?fSU@eQyy9jgD?jq0jZ zB4)fE;W3O7YO2rTDO5XBc)FK12dh-vgig6~VhTRQ%QV?j6`8PK zV;2UtkD_!>_DWa|!1r59ugHX4-Ua${Cm!#4X0I+C=rsCs4Qw~=vtIEn=EZ+R(GvC} zjIX*eH*l>*>iW?lKO#UdC=>-zPYj#x}tidckSA>SEDRS z@O`C!<&V=h3!NFz?8#29dVGF0XJ>7Y3+i1=$8>=$kA^BBYSZwbKaKHtYku*ojHP?{ zxjkePuBLw>hJLL z1@pqW;!?HuZOF1$cbUQJ8r4i-%F90zXj8>jN1?+l?v~8}rgcAj`mxA|My|C3wR8t( zodxTVR;YEGd6t|1AojyVWe#5O`$)v4WNdQ`^^t7^{xf-D*8c6TS*yZ8+COo_-il3M zIAcnLAnFX*<)WZ{DYNLM($TK4@F>L>Rg?vfZc8uK@*I&ln#a5Yc9|PZ!lLKj$M-k5 zI5(|79sU7Q4b|#8a+aoo;NQN;)umcf=MIYmk!l>FZ?@oJBUSf@MVPj!~HV)hn*#JG#66=}T+E%g&=uj2LGPZ7Ahi9$9(3qYax#uGhv;tlr1f(PI)5P~ir$y%%?6u?pI6%%7gcMDzJbluH)4WY@ou${UU^OC1DPL3J!I0QS*? zABzVb6z|2psgUfub!<3=^cA!XllZla;`%SPfMNXQ!ucK1L*zsM;UkSc(a{|_UIqKn zJ+mp29zbM3^5AWJRhz!7m69IB;f*uo!$s{3v7)dBo;bmnm#bG zG)*MuuEa`IL^k+H#znYxOYOHqukUt~#%Inx9)T_bk7iH`);@t^_R;^zOlV&GJP%%=f_iW0BX`3WHctw_GbbtT0C_87Wx`c38Wi-#}$z&z$kuPbbXMZRn z5|+a3*S!YaZ{;JsITOQ)+n%Lga?^$vKUA;u^UK*c`@VSPOVX~O#)n1q^;Pngi}`xY z#suQNui@x*)H_H_xbtVnq*J_NP}nCPZVWM3WCPVuCUUjyAdW=$AIzejk%pS)h}q(b zoEyYH4>0x)vRIlxzVmf?I^)glyb0Ql-e_ZPIKLx-SGIy}+Vw#&Y*KjiTOr&2Nh_6`ka4x$@;1zr5 zHp67~iKjs~kmZJQy!4-^2}m_9#rfxvnl4d_WA9_sJ`7ehyURdc`b#lxrAi2fNx!IJ zeX1IllJ~kHgJ&R2xch>R`9N5s9m}w5Y?G7cFlG|kugyvkSwjCwCio%m4d1e!$;3VB z;4b9{6$d)|)l#B9b?cyOa)E|pH9hcrZTzI*%H>leteLMwn3d`mS{DD_6HI2PzVV#) zqmF2wUmTzj3{q=5Lk1rG z*{iVjbLOk^3uo?2we7>~$Ai~@?3MQxwN2rcyun z1&0?WcefkfJoU=?bg4ue8yE+_{v|5KaB~MIdaGoav*lEuB81qlIs1KtEx3HU1t2-5 zLGK;hBg&HVdf2weIVekv-C~}$N&l6{h5y{M3(Fq_t~dzEHOE}B5h ztf1AT$PbOif?)j0MQiaFe{&$|NGK;YG0_DO2LnQmDVfhu+mW!8o?_cKf%K61Kyurs zi-FR6-5Te=||^wLvJpCa4;OLzwE`u%QG@nvSr_~G3Ix9{GALj2{soySv= z*)t-Z79bmAAE6MV+pK21DSSVBK`Ok};u|C_1a@wn6tq+5jDISs|D=aL)zn++N$IHO z4@a$l-@;(yA=TN~m1Mw!X_fZpW{8?xk4>4@oQ`0;y8C_gIEvHYdDCe4#6;?n021ml zxBdsNwZ8GkVrKokxh*e7m*1+ zq1uNd<7ctdw2@40k!uw2uvAR~^Eaw2#j4QA`=+AZH%2vV&Iff3^5S3px)!G^!aB|< ziZn~nKNM!cP!NVUd@=A4=~xnei)VkXhUN@@#z?pb=6bwukn^cAiLyh>;PH^?EnTZS zH>@!XqPDjm`fVT&GV9krr0dW`uv72NSD9!s&4X@-)w_!FmLZ&+|Ea zOEe4!tnuEN%&cFP`U6kJ2UGr4`7HRlyxj02xJoc7Y7+oK4kMB)Tz)S+Yro$w5JQSM zG*`Ne<*BS}3JUoRS4S|+bRa$u4{-IbNND z+DRwyi>Zq0zAZH5Tw;$T6(@ev>1o(#9fTjdiHCMC)F9FcecY!caU$3EpOX&tE?8w( zz(?m>8-4?a8KQTyePu(PZWI!+xZ_U)1cN|tWYuya=VdLXoQ?Lc$>y;vQ-kr^Vc;mA zY2||b0t)c-2LTY|>vAcTJY~wJgfdM)EedGE`9@Y6JSd_UZpkdak3lk&x>wp$oxZr! zbJ!U*`zRck9dj5)($q!u`q-}9TjP76^{eC)vqBCGhrnB3pUH(Em}hT*@gR3 zlo`g2$ui;D-@B}ot&u*gR8yi?Gg2FHcjM?;`HcP((K|YHio*TwVp<>IrG3If1w4s`Q`c@#eNz0zOXhDiGU)h1_nWkkokl2O+U+m%`^5^ zn~rsoj=td!-tudtG(~})8F>8y1J|@@sPZylV?NmR%b=Vhg5Guoa?#2H66T$AIZ;=C zc{dj#)6wZZS`>Aqi%9AwId3Wa0)CgJR4z^o>Tv(-hS%H~X~QFj+fXU2U6Z!jF|31) z!wzsosDJw8SYk z9&`4x?&}*YkKaApQ0*>mTaCW8n9|eDb(18KG>D5x zIQau1B&Vk8mlgAtKYfN~c$T~mjyN+!%g+2>NL98&_^bHjHQXt-*$W;|Q5J2@@oV8P z(QAhY(2Z?=O9&NDn!Egf7R8x>XjrTMjsvvz)M4hM>x6|P=}2ev)14DqW*WGj@8{0V zl@$TEkp*-J$Rn#b84TAEK-44fhOt~eIgPn1rO1N8->+2Xm>|Us7Z!>wFhVficQe=l zgl4;V#cPfr4*Qe7K@65W#3SPi)UwvngT`WsxW6tsGvE2#h2HlW)1dQzJEtl|CjS59OGKAg6m zvTH{>1n2~R#e1es__z2e=$kT~>MCYZk%He} zB;wGeZ{_sfD)h9l85xd&l1>mK`{U*w%+dAWHzFRB>xnYNxewl!2&VLAsSdqnpEVe@ zKAkNAUTzw{5yOzhBPlLa$rJax;^{e+e)6{%N$#g2D66e1DZ)jVthgann7Apvw-n#$ ze#Rs{|^(N9Nr?~>ms)y0BfilQrllr%Uhkkqd-UCth2ttJ# zAIR@37u@gy`YKyXV+?4OodsdeQt7MTZ)%Iq5dZ6vXse74tM6hca)XMYvnvGqy%Xec zDqg{aOHw_b?O!YvNJP!!!)QnT!*X(>6yftmGhPwsKUTw`tGGc@_}S))eG?Y%*Y7{9 zd9BmVqy2*4$N4%bc6VbX=Iq1Xrq^x+pB;BgUQiA+SrHQ!#fGLwr-MgQR^~c$ZI^Q? zV3x%R4wmO*!;*kV$75aaLeUPWelk5!Zgtf7-_CL|FeMj==)@-)@FN#B-UIS?Itj`} zF0kuB$zX4$!Yk*_+#0sAyWpXR8{t8bJ5wt5p*O zgp@1Ikx;z<)e1DKApwiNbm`%?Gz+VGBzkSct^Ii9hW=8Mz(jpn*Rh3W?2=q;_d&4k z(qi04i{Y%+A7mwiyD1I7$f^dX1wH+57gcPxPjXmfwYAV2v2uc39NQ6tgpWaE3{{6> zxI4JB)*Y4H(fCneMxq5`g@j-wS?6=X(MO(V8GW<3#w-CM{n=skxJYC~f)~au+JNap z4g=0WW8}7Lf+w&IP^BJWIB>e|fkDtU@|5G{j|r`~k(+je#`eT0B1xvfBM*;5Yc}_Hk4!VBuP{nr1;loivbCZ ze@gZ<;s!0BfWi6(PX9cZ-t~zM4^Vzjn++CC{p__Gz@#gI(finN7HTX>STCvHa_+i+ z`fwF#Vp6`*HDK1(KEGab_20EM6+|G00Hh8B6@nv$cu!V$vxw5R5ItsSt0O__;F1D3jt;oMs78bh8V_{Wpwd)_t=?Epo ziDU1e-u3Hw-ygy?)>lDqf2~)jEY!#&5ky>H`Go<5bOt{++*yuZaLw*QmcI~y4~GyB z(befC)klcS1$}7?rcoKI6VUPaQgmatrinQk(Tv4yi`2sjYv`}yY>oa*A|hS^#>5K5 zd8zEKKBS%-*@w{nx=POt`E^D7RI>eODKeS!m6EwOBnPG9XQ5C`3SMbb@;zOAz1!>! zaaG;;iU6Ti;KihXQMH!>ux?UgQ}Z8C@Y&U)-CgXtP0~8d7%^bnKptPLjN+Fzx)4>67amRhPS%15z4A-D zNPe2e^vmp_4UI-i_W|w~3@jx0vH$M{VzciuEjx|t>?6qW1@_F2WF3BQ)r+Xtor>M9 zA#Al&ytGbHqKQa4$RYVtpF+jck2m0bGvrE^=1>w-HA1PdC9j%fn!inAp8=52HQT|9 zo*8budoH4eSm7kofuaFXT&&q1ujB^Z9b^mQ^vJJ(2erkKf~WQhV@i+DY>z}xslU`X zmucg!S&SKnnbo>m(dlSEDK7?`Adq2T7*?-P1d4qhGSf*D^QVNp0+XTy>WF}7Z@8u;>U7T&qHC_Gfrp*=*h1sNZ8>gBzZmSalDpv-rEzjA zM|5R;y->08Ty_69EHaoKI%cuE#h$?M+}1OY?S?O_E2#7M0Fa^BG9Rf-3;XMUpZNNu zN^iFheLm1#o==)hJjg1FhW|ZxO<0!}+n>HP|N18Idrn@yhvr#FejZ?#}E|$M26cg#X zXc1|WU_IVJRN}ga9fval|Lk}l6LZ-2x4F=uj&yoS*s~xmbv&j=Q_6(2aB9ytcS&{T zS*!^Hw-e7eS65Z&-8Uo=imSFtI;tg17n@&ue3?DJAn6SrU&lABfNMzPfgW_MG(keu zeVXvM5j;Lp+sI(~zQ_4zac4TPNxTS(4!C_mG3uHqI>Hg2A+^3e?-I+ zrOf?Cv3@0#ptSZ58a5X}A)fB~vVe`|qgZ0G!R0t@wDn1O)NxvG0~_69ykPRPkOL&} z9p2gOZ-xj2bkDFsqiz@w71YS=ooVCIS}Fi%W%w0u*^+Vx&QT*E!9yOY>iI18(0 z4~);W`c+D4+iJ(XU>g@1n*oZltct$x>5aZ*^L9W61Jp%v}8K)OnN0 zk0XF{ToNFUT|H9v%X{Jdi^E4$FX35z@D?R5uySfGs{>{!n^-yQ%W(b;6(5E9Y=feY zdxs@f8IpuZ=IiQ^KZ397HQ@S}ONyf>v%Tu*iT(&Z%pr(VvE^iuJczJPzVF`w20s36 zT=)}ya`~>&eY||ERGyqn21_^rE@AS-T|+dY6@dd; zYV`B&u;^=F+`GQ@#5NZct|Zqx?QJHzzD3<5?v6}^wZ%hvg}-y>ohUdc3Kc*+`B#Id zg+~sPA&0=yInhD@51?{)ZV{=Efwql4g+YLLHYb))+&}FVm zXn}31RuAx`n1_tGy`o&sv3;bfWXx1o?~qsbV*!+X1`#s)J3k#IN{XP#ZEr(90luFQMsZLH0zFV1n$?&5+cphJex~<>t~KlgRL+ zQbfc72a{IcM)U~&1Kf$07 z3)qU~<9J~rvZX#>r1}0#XL}o^CI3a?EiMK|08%x+S2a{GT z3f?^U-p1IlqTjPGr%p=pI?Ug(h099jb`oXla@s~3ENM8hy%;c1ESW z!goP?huo7vQI;v!pK(d)(-fXVi)hlZkJnj zSL{95{lqzBKJnlU#gmyb4T70u?7m~)#)$=Y^A{Qsh2zHMZ~#W15EcHa;4N&>Db(Y| z>?)?=j^!B&DHV{-d|_>Gc5~_ThINt0^(Te#OU;a|E%(0`vsQVZWNoXohHEH%I~OHn zCmj#L6;$&fbu8{&BSU=_vCk4ZxSm|njE3NZzYwiRV7cGh*n7mr_4E6i-Er?|kC&oa zE2ZD^dn#ZJFXoR9_BdCIS1dwx;O>mMExu&AgfB3@ZTcrb|Erm^B=ZZpeRTV|mHW$J zmgiiqfgXRjq!u1;Yoiks71VFpgJVxy#`?zO)vv9{yqXQJX1IY=Tv9tR8X&3RNk^>z zCC#A+`=aVcPv+6ZN5BK2ZPJAS2L@ou}zP_8gNM3=pgWZ)|*UVS0qYBR@ zJ4eVaF1trpF9$+?wHLg1!S@5HpQ&L91Re22;iq7O3AQe8BRYa zQ&Yk%Yf&oww3+?pq1b94PkpA4j7dB$LoU{0ENQl9i5uiRn41r5V`1LK4s)YQVLM&$ zP9?#pGUyW`>}_7Iq+5&_u4~s~9bEfsHMgkf=OyXA;+W%Q-svrmuYn5Rr7k{uYYtfq zns2R~o~~9)qE<&rIai5plI^2DlI>l_7d>POr|Zx$pY!^$z9$Np^Md3BLtaDZ>N{}L z-*NIz%beq=K}$?GG_Rpma5rA8i}B_Viu>-!to>H_?=RyXSDzw&lAaE+k*@pVKPo#kH&wI2y4u6z5Fk?W zaqR>6u^Y=^49#aJESB-(FAlM=I^ zwpTcAamf@0GX61qGz26TFl3HJZ3<9d(&Jm&%LcsCe39rMU#JWY>N*KLomHwp0|FSO zY~pP+a?C3?6%pwnmA->mOi0fyK9~MJk0w1R;GT@G_!fPcA*8=tM>esj*Pg7o>$uYh$jK|CwzQxLB>;yrnmgCeX^E6)_f)!=Pg;TW4$#` zJ!EbXKR4(k9cUy5T-sn|F9?#A98A3fG?eD>w`iOb>kwnWOJSCDK?pe_b$u z(yTc{nt;oCFYU~my~x@EJID#{Y=ur<@ewOVBEonjE+e_10;nh1TC}Hw{bxDNmB!)5 z$I<3NP(w{?aBSV$AB0AEGO;`$+dKvb*Y;g~J~=C&DxE_AjmTtKoFszI=G1FTzF^oe zNOYG6U1l#J1^do4mGgox@HP5M+GGCbHaY=vM&-6Y0}pVd9^VGj*o%N($f(;$Uwj42 zX_p%J3-cXMFQQkGxCrnZP+r2WpF;~r{TGnJts7kl&mz0q`tnN$AY(D$Vg~M*!g(2z#YaFdcMJ^# zb3zia*G~ELRwFcbmMMVeU_G>loaweZQzvpXWV;Mj8~}a03|z~%p>zVE%%A78nA&E8 z2Hp_-f<|5pB{d+51$R_iaG8m<>sK2A67 zr#Xtmxu+#H(qb5Y7&q#$h@bypUYL#D26Vv`OR>O}m*#)8zUB|(*)FHDoXZDt-OtGj zdpbyF0gOWy&@)jCEr>F>gJTw&aWMvZ9L?dUO;Rq$lkQIwZ)qvdy;t>U?p`PNx(}=W@kX_4}yMfY*|F zGQZQ-;Z{EO6382_1@avq*BOV}fp@vH_`Qq_B~*}9j*L*Mb+Eh}(svQ-G_#HEe&8P^8XPjtDQL9+@g{;er zN2b?Mv!xQ~3JZEu(T3mNtL~z%S@=&z) ztvQq(9IgMB0Lw9eSnH;7Ov!h-@xxf?xvq^cNmcZA=4dHOaM~w8)okVSEVV^)x~B&3AVi!H6K?({m;*; z`b75EFZ_Av0;^t?V;$-)UnU8Oyv{S>qrBvTzh9HyZ~QX)JR0)ieDUJvg;O$xSI_7U z^v3q301uDn{XbJqTi9)EDoG_k^%Jz(kZp1nn?pU)d{9ct3Oa@#b!=@x;}yq1trdjq zy}ekK!yo3rW5D9`{|mxjSCR8sUMo zO(hzrdQSN*q3QRAi5~xR6auS3OyCdqS1t?&kGn>aALcH(DVuWU7U)&|X^OxH_zScvXQ zl99NA50{wsE1xb*tBT}7E3JDk_!NV#>Ll@x^qxfN!xxEJ@y)Fh*4vjE$!bJ`64F&^ z<9|NQ#vK2h7uHz8d8u>sR5+BB~(IMq#K5z zyFoe!7`nUTJ-_E&YyN;)>zs4P-k*J43K!Cs0#>L;DdZT)cYGE38A46VE(ZiB%%bR! z$DKn0I`<{Ni%-|->-L#f&4oAVop>QVhs|RT_BXmR=d$bRcK!*+EFt@A2_qWo=(aQ~ zh0mXWEid5Ab!(LX?(=(i&(iiK!F-2}xvcD2OF*mNIK(l40{-%D?u(z@ZR2O8y{8=O zc;~N1`)}x7J1)v@Khcd9*>6$p5H7g2Zu$^&b8bNh)I4P*%R2CbZiULghaOO>cF5OC z`%C5Gk%?fRxvssBIA6>G49d~d-a49(Vctr-bI#>8Pk(wNEf6XU))}-n>h~OR3x+&= zz0^U0huQ|R3d6!8^(z(2+|Y{b^(Afg_)F}AEB`VTSJF6j>}2M zT&>7S0-3;lH-%d3_zlygG%P`IQ+`Rmw9H<4*2!n^ii5BX?{rhqF9xnEKfO$Eyv1Q!s_lepjWGt;;)`+z z;=8Ve>UX$qDShboI2n48?Li88A!xXH2V504-}a9@7)?Zszm({m7V7xrjK7 zgH`Rm_YbF;H`$@ZpCOV|X%7pP?*6MZwdL!y_2PK_03rf|!>5aC>L}+8VyDfJbXt8> z8YZ%2Ziv70Dkb;4%PS?V*6@rpSq>klXOVX@j3^n&4BxX?B{d$&`SUS& z5$2yK?OR6*Rmj)-2iF`>HB|@7ax8d@K5`2Hr1vdLoRR8_}H?=;MwRc&mN*#hs)0 z#pu}E_c6BWB85mV%`vJO&W4yn+!^Pzd@k|dhE;$Cy*|zWcCyt-OOaD}y*2B;U9xq^1D-aGBnkVbj|H zN0I2T%fDe$Cx(eY6fZ$ekCs-oy*Vje_#A>7V3;@k<)*XIKa1deuV#_rvwb^nrOzV$ zW(oj&$(+i;$G7n4)rsW=N2Z{GT)xw%8doFde5mZ{pEfvQ4RUFcAz+&$HG`#6?^FOG z&X`1FqsR}kSiu!DDhZ{GCRm@$7nbREI@JR4@%jmdYAq zm>2>06cYY7Rg<&_hl0_t8dtYos@O~zaAt6@cYFXLy;dddQ6W_?uk1X9+8sLa;QQ+$ z+7I`-cEjD&lTN*xUei}^Pf26uU_gpf>^UYO{5#{1HgD_v@tj(%FuhFY6YO~x!XJ$G zPb+sRZ=1;J!QPAkPxF;$J-S+JZS?R6GJJ;rOo=Z?a{-s&rRQE|iY05m`TqKVeMl>#uk z$U(zrun-$l>EHXAEsl==H)hF@$sd|ZVNfypU?JzK3b*|f(#>_3It)5<9mIy|w-KM{ zSM)e_1r2=^Gpr_No+%ZWOjO46d}UGYqf)1XfY%|PEm}vW^2l=sGUoMy2w9PcsQxHg z^;4^Z7s5(t(3f>d0TiQgJ9!dU%Ssh8pswRbksW8q*4hH4SwMk(jrv068>!iM)Byu8 zfg<+tRE<_!~TO6S3TzM=H> zyCJ4Wgl1s(SRj9!+1HOBn^PA0*Co@B>g#ulTGknYPT8PukJtygm#&I)#DAZ0q%N5n z0%Tz8`MH4YuimoHRGs%PzGnYbPB>pXPyd=jeH3YM&S}RJ^*`WTcH6=?ZvTSU;5BCs z8dN(xu+6#%7meHVJUCkmOJ8G4kP6;04IsLax&05Ay(c(prH5cNF8jQ3dKt@VdQSUQ z^LQ7H;#F^p%-Ob2#~z27rHH(_XIycR}>m~X*d zzwKk%aeLD@3A9FD3q*D=ZJks_bu3}qVP<%-W|0`fegBHu=G>ZV9SGJwhjhHCKCgOC z^Ph&9-Y^-QR$Jh^7p@-{9%YU`yHP#I-HM?KXFeKL6ds|PfS|VYd`0(=hoN@&i2y4( zJWRO2K`w^$V;{k2l4BSh7)bfZb_ZNg-)Fn~f=HY2;a+QqLlWadn==}ZfOBCMm9jzS z9m(yH_MEX)Ip`OA2K+gq*LJtJr!Ucg{Z1QUSyP9N?HEgPbAr!DA#FL~2cOm$sjk*n zDWl*@R|C%MJBedB9by|{ zas(FJz$;euWapm|bbr%YBp+-CEfg=t6s%@^GK$axqN(pW>`se$ZTmJqnq;uN=U2_^ zz@vkd(kFqIh?W+=d4rpOB@SF*ZG-^=vgDo_O0aHZ(zQkAA#bm$-J`M}NMO=5bT6Js z(Qk;qp$)xX#Uu8boOxEu030-+Eo^$i(RuWd%jHc}w2^AlvR)%?V;XPg3X9!!LmI7! zRLehQ$nUmN|NJRez?*^pn~ZO(f0|drdl_w9jkd}0!}nVCq-d+Rr>JPUw=;H~`Pg(A z&E+!cIk%zjvGXz&LEmHIb=XzGHQw*l<}Vp=n(ya=;1NZrZ9K1?51)m^DKxbf)4^XE z$Ix9qI4}E%S2W$dTD}=pK3mI|?LUG);8(QlDLE{*;axfMu;<2rT}SuUe=)dr;N{Q` zL!+^866s~)-Lh4O;wb4YW#S>S#$IfDjBgWD zpjI+_Fbd!{jC>Sb-7)Qb9GsjYP`tlP z_>z0mLke`a1AUhh)Ybh?V z4RSVY$LE_PU5~5z=$+8hd7QT;rd@}tjMe>}p369X5ZSKdVs}i&Ss*GXEW`9#L%mXr zKzEDOo~sL0_#c9ztWzv1xccBhAYh8&wbxZkDnWIOA<>dSjG{6YG1+j^065gPlSw_j zvP01XNy$jfC9jsY-;c``R!Pk4Pe!>Tjt2-3uG7qu6+2yt>G~hk1f&gu2a2fWg_-6& z7z2E8nC8AR_*$~*%n38r*JDR%Tt(u|GAUWG{xgj_!wRC zy8|7NUUF}}ZBGS=Zx8uD%m}Z+f|)Y)4MN>hOiW zndf^MH8qg75&TgbA$RmAMG#)PVoK`$?|V@2lH7N@Zd#IXUs&ufdE4JChbKva`m_I`jBhCI zU@89AeM@+DDy!Z>w}Go`7^5UYcNHw&W~_Iue<2h)ZY+*JGUaL47IzUa7~p0?JO>;8 zV=C_K9UuL)+l&rT=DM191ON=fwLam8Y$0gvJ;MEIQvzogau>n3BF6|&cA(^{{+%?{ zW6q?thq!-*V5mJKq@>%%UIrmB)9u!`sabPXupy~paBz?Ml}5&IEE6T1=kUU4?2F%< zSN?ld_NP9!ayPUE^pQdb;pG2H$^S`XoDf>gAg3dgIWDG%j~aR!Fr%Z!i>Mbxb0i=F z_85i8jxTwQBqyomJ^d`G*V}xZj9mgw{X0V=WCPHik^nSGeT4_1 zxjydDQlg$}8O;;jZd%`(66ZYb8|vM2InR55gi#grTMe)Rrg@!I!rfDF65@g0?6S?P zCZI`+lC)_8hWyM+gV&?GP@WC_+b$_LUQZ@+X>u2cvp&}{mB&Tn0S+SPy}kfZzB7xoWi+(tEHl& zVyUu!6yA*Te;9yX=YTl4%!}XSb{Kp;Ow_cG?Lo%16ua;BYkmot_yiSNm+>xo(?GKE z_H$xW2!f1OIso^7pqXR;T}ESf#MOMj!q)Cm6CTeB%C50!=x90^SOA^hJ(%(RrKYKd z))4PZ%J2+=*d)$wkJ136H5{Hk2QWi|fBVR^^$4>K%qC_`Gh?3r4<0oeaD)?b z+C5|tf4u}u_wNbHHEfn^HKmd0DeZ`FrGLL0V?|16xj>a%ipf8~Jm34URx2#je;@2{ zbdx#a7bkOXl?3Z($%Ro&v#jLnBD$ zs`riMaa4p~0xO}Go$F}{jbSA4df5)O+INn=VPIqgEFRefx5v-yZGO)8@6>%IMVuS6 zaAdNtMjK55HnzTUMa>N^{>Ix$Y+9fi>pde+%Sc=J7?p}6px$L>MJ2q?LfNNE8vAjI zE)eueX*SK=+nz`B*rA8t9OB1Zq{7~FKWxG$muDrg!8QKQYRe~MAm105*f6*gq%AWE zd$PxNt>SqiEL@Lwi}gyggtj0j1=%U8QmUU5A{VkP;_xq|CJbg<%<1yKTZ%EA3g#fj zn52;aqU^5*dHyGrasx3iJN5z^Fi*WTGkubPMyLObL>x||k>LVKmWAR!Z7xJAa-Zlf zcM{D*-^Gw`EW5V{RR%tRSaAR4t-&gJJ8(+Jdp(%x8Y_rnr?<=lJ(05ia(8-_a%m4* zW?k;s9Ui}Z*=B_1!=rg9Od`3Q=fh4OcQL$AlXBK4ZL&LnZ8UbUL^U>rUktKYb-?I- zlYf)t;=S>s_-p`?u+a&ACQXoiqJg}$`Bh~dKhHU@gxCLS%(Xuv{AswP-CRUuj}D!f zhsU26NtFHl)3NbS2V(h7hP=`=Y-5J&4EbnS75c|rzw#R!w~4&PYX=oGnUc-_`30*W zMtu~3x9yi*d_!-sxxa;d+a{3Oxtm=_L}kTPUbIbb^EhxvmL6E+PWW^qcWTBXqI?f` zu)f~M>&~s$7Mc!Mp90oHUR<43{gZ_rPxZBnhug)prUW+EEQ+P`dN5?M?Ry1ATU0FI zfk6Yk8Tb2rP*tHkSLjF|F(tn77Nd8zZsWyv0ZA~QQ2no*EY3TmCylbsebrggM5#j9z%9JVKv!~MKXVy zmUT?pn)ZU=VYy+DbUl~rZvg^jplVZ4h)GgDy-Q+|W$n~#`5kaamb$|70sKEFe`}D7 zISCVmFjIgLU!JHJ5Jc)Bi&Jp~3c{$W9yT~k{w(YgYN}Qr)>NF|1c1C28l5t^urIyl z8m{&XwD-9z5ozf;IVa)7ZFi&XEbmV#G)W&>*V#br;VB*t#4L6?M};b$>5MagjE*k- z1G;5gub8$`EL%*>=~LQgkINhL3*Z91xmfBt)#%)xbpxT%dc5WU6a)nLuOuS9R{dz` zA&*E({e7oHMwKmC;a>0?=0oVwXJhw^Mwi|zee#$&g#GX z1b5c&3_ev+gS;_ABNQ;<20u>174=fL^Z%5MXvA&|f}~WVI!V$l=j$NO^ej$*+sMHb zfYvN!!~u3PG4cjjLBj~-;B;YwqxP z;D@gHFtD&BH#Pu{B;yH4(6#+7gc^DX88XTqJ!sNoJqd|Jb9JBTe({4VDv1iDq6Tj* z-Lq8c(%EEsjt6anR{LK0?prpVugx0(@bs2~vnko^fH@$Qn3!z|bP!rYT-orOM1j37 zdt8d={T$B~POt-@fkdXe>Fl4}LX#*G-nip#@gC$Glp)8vT6GjUC^-pd(2p71CebA`I9Uvo;A%p)3vz_Zq|PCSNqhpQ z-Ui}t>O8m>TRBQ{xr&-Z11;lq6B~a6d0_-0z(+hNXxUDaf?kX(TPd)<7Wt6GZ`&~) z78kiZ9X6k;q2gHj)&j(nN0H1<`Iq&*c6ij7Tdc;VXjTx#Kbe5RD~HpG{ygj9sy|KhQ6bJ1 zygfd{`nk=my^>gCUdE7qV7%Y5=t8a}yfSms|B=CFrW7V0RZo zrmM~1+j01x3Qa>;c}WhK&E6hP#h#xP057K#1Xlq4rpk)iEu;2P`$%wqIbF}x^KUm9 zfSk(!JmX-_vjsVUqxQ37Fd|jU;`p8V`CAsCn5QC3$Z=7DW?JtO=||xGEVq2c!f(J2 ztM=(RI=YB78RbNb9P(u;Dl|x~ zK!tl0_kCMZkK(g@fj5<{9~SX4j;?;Be?6;rUJ3b)lWBq^-$K-ZNLjauv`LfSl*Hq1 z-o;sMuAJ2TWc-P~-rCtdvDBxJ!Nr(--znBo^T@p8_8-xYC}Pr`Aqaa-T5jVS)R^e# zsy}t4JKGew`L#F)?wBa>v#Pc#%hv)%#ej+KtouCEu)RTe?Dh8W!_ap0roE(y_2uG#G=47EA2{uJ8eeb&eIetV^5HDU zk?nfE5xy$d(WyH?y=B1vNk0!K=0ts!{P8%;72?4XG&tb!)gY)-8Vh(m$O(W(8z<0;JyWsSc4K-%iii+LJ=qteD&~I5P_Gf=-cyZ|QXu zp3RT!ASzyW^zRj(v7&!(hFktYUA2%?NOU^R~Q;tyoui3(u`f zU4CaOB1MHv4t>nXlgMYm-;fedYMCfG#uWDLM)@cc&cK)Q|Ny6E2&>qZd zdhGTn73vGQ8^$>u*r+szrp2QPpO$#Cpnjb#>iv%{#amyA)`0;G407-iqmus0MF_f^ z<9#0I>sLp(6{w}_#Co@qvITWmFis8(C_88n742W}D{X`b4Cciu8rJ#N`_-_@8rZ>p z#EU-_kz5+710B%VA^I|dX!jR4Bw#PAEYjCK)fs+-l>PbR(oL|8=CDJW`5fTh-trc} z4G-U2q>*el3Y%>(iWVwjr=Za?;O<5rCzR6r9n=ZLf)FC8i9^)CchH0`OhA?x?pNK^r&dX zLE@g0V^?xClR`1oyTPkeU=`^?t(0#n;%UWR|Eb5qYp>`=BAjNlpUECsR>}BYJ5+(L z{(qnzI+}17qNDcbXIyx7Rez_xlEW`MP3^zU7WO&c*!1xHuVTau+eW1IBqpn<-z;%r zv3ygxEI=uU*E033bzGM;2EXIl9l43=YhJSHvtn8A0#fIa7U}+XPHv zzb(JBu>6c6%!Rup2Pm-pr^2APcN00iZC=+x$-MF|!|c7106CU`e6-@)`jEBQ2@Ti{ z_<#taxwup*FD=;L@|`Eo8N*=IH~#G-^8e?$0e2>W`IX&m)1r+fH1k~s*uvcBh-9gY zV(P25IDOX;AYXAk$wUDR&^XLnrUJ9=8SL{&_Vgn`F+R}{)%I? z*lptRr7Sl%oosoHi6WYNJqv zl>6(3+24HBe(11E=7}9v_aibZF?tHkU!vAJEM4HN_|=C*XX%bn>0_kHbntGGueuP$ zhM7HCHq~xt77I4-2n6Gy_3~y)fM!nSsL=p>1p&Yf3D1PKSE_6r2d$C993;hPME2z;ypq747Iuz|sFyrGSnEOF?^~3Z~J0 zE(b_-081JU{doGE4BpXHX4QxDi|P=w;oW%%!x9!J7vMUOspfIJ8-G3KLl5u2T9C=9 zEW5^H`Ml1>cK4=7j&R}LV;|wT0HtdW^jgNFQ&-Y#@B5+qRDl-2kPL91UWF2{k86Rx z-|(KsWOQA3151A-0)Zj7FTQjRjol6mG?6v6O+#ztcOigDJ!fNCLMZ zy)A6mCnfpc-c+Wn?@x7}1s`)=&{o+^qY_m9qh+9F7T{OQ$b)?UC)P_G1|)v7arY+fTwBYCC|s2xwt}O>O5@eS-i_W! z*u-V<>*vE9fF`1w(+xF`_2YUT}e;F`$y6hi7Zvy;h z;JC39ZNGHy0BBBR1`nq7l`N9&4B~G+xFdHi?3XasMS>BdPB7@52m@M{k9Mp(xqfg3c2*3=SW);nFv#ftksJ3E*`12!Ld zrHgk3K`QGMQCHsH!eQPF{k6{1Rv@}3;EN2`i`fbD&i9Z@pZ zn1bD1GYfuOl))WPkm2q>lOQHqp1}KH;bubix^h?1%7&zS=|>FbyO zOW&oe9-Hs-tN8nl2lfYtc7;T~L&=AK#xlR=PVW|WxE@TkXy`EPdP;J$zwmXcQ>-jF zJLaKh#v`pPMfdMTV@SAuhzA+7Dl+3>E2bl>iqIA_^fiH{6jgN#CIGLgs5hdphssNpK9}d-nN#a6R*~ zQt$8G0Q+y8yu9NL+VGjA-D3`u+-c7_t9P_wXH2LUd%M?+4(%v7ygDy6gUOuGy%m)O zTSbxOB8_1%?;BcYjWbh{7q7((NTB&MtLAKZhpjMHNVpX334151Fa*I(2uN+}tEsC! zS+MUx{QdzbMGeykD;uB%?bL6=f_)pN@`#VxazcGBE!4HKNbw=tRRmVm)Rz)szjq8H z)b+R-b4U8T>&-GZ!(1J8eEqOzU_23j`xcEjM2e#tbIKl@A6kJv74lK#bcua0Lj&AG zeipNsxS??D7m9k?D@yRwcWPp(t|Tnp{?_7RFos74uv_+ak80dHuDVIRi+e!~r>(gXqqG~< zU{>lpcLTs^mn*@{5pX;((MLp%#)7#K2F!77?)R!x7(|j{0jfgR0BiRd!Pv&~K7L`& z{!%@&vRYJxbRp%=R>ZFZf%-Ol5|odTi42kdvIHu%GnQw+O+FjK7M6le0KeH7Z7W*a z2}{FCi(L-iD^w%R-{QnL=dQlpeRyJ%ItV?q9&h%b<4qgrFcEw)xTg=DWp<9i_r0Wr z2TUhqI^%}aB9r=N(osXjBc17=YTQ>Zv?8xEIS*x$WC~H{`g-&v&?3LT358B$(%bpo z6mosW1$Ft2F8rQ`MkWBWrnn`jsDj$_08BzKH3XqGHW}5)JP)SX4+A z^|N-e%~%Dc7Wi%4-R{zKcpW+7}ot6?LM1 zyPu5SgN1;U-QDnw*$(3gN_folTW?lX>^@oFK+b z$x~Xf<55bD942BH+S71%*HaE&GCy^7G_gTkZ24Ci=g5v+%Wbr|$ytY3%;uEB_+IJt zr5om4A9&l22a(oQS$nMBH{GnYfm_$NNl*7tr3KCs0v}TjG%}*cHcnkQ-w+8%GoGd7 zW3f>hFr4~Pn)9; z(#?MQVPO{U5OXUGSm%oaxY38sEL-AIaulNYwDiX@B`%@|_Wj zcolNG>gSC4Z8b8Rv^7a9}SGTWBNz`dDl&K zOnu6UcM?SL7n=7-W6iAIpKbC2HOaR& zCiM@x>uXT!Mu)o@@CHz&CoHvM_>mrj4WCVn!-I zTo4O%jW=ebBm|MA3jHabJfRHEW)egZzJyxMD@7CYXVS$y8{e06lI%7{_hUZEIQ%C; zLHfH~93$)Q>~hhS(q65@Hjbd1^^EebR=1fuIsWK{?8z!b3FWStmF*xr1s1QdQk0Y# zxAX7qxl`iZ!x!fI8mEw1?>%AXDOD%N_0J03(tY2~Gy~c$XagJP+)xhimiKjN{={vn zOJX&`fQXy>Yd%X8(du$1G12)t(=)i?qD4uPXE`3~O2XJdX1T|({n*=WAwCeD{k&Vs zSFTi%lh|qU?YxqHi^;;|?r7v& zuP6dX;Sw=jlWzo{XC?K8Am5S#z#{W9#T833`Rny#=qpNTKN~wQnS~E*gb{YuBKI|U zS+(fld;5^kiq#1FfBZtS^vtCL|2dS)(VtA1x$~#s>2X(#jQlRWm5TlMZ3GA7VfSIP z6PAA8^a)VU3<+L3m-P%x%~1N+ph_>5PBfQOD;RUh?pq*Q2Mo25UQT?t{{TKFcSl^f`ZCMZoL1jAye@t!w1CBJ zGfVXQxetib$MC4}zp{;?aRk$2r__ebpvKI24QawUUTu@EwAy;nMA*o%&Uv_z(pDA} z>Zgt*yW*m(i9a+veDVc>oUr>AdsYbi&c0+K4JL z1yhgB+}?7SO2yP3*Cxcs$VgJubf+NPavYJeB4IV4>6mdT@4mBPtR(3pSt^jK0u}<@aaBiHHE^#f59825;j&|C|6p@ zj@S65YHu*E^FO@v5RN2Dw=q@*UH&#a*HGL}!rTO0c?#LABwPh9Sw2Q-YGvChiFf+x z>9%VvswnSia{V4{5lcdUmNjGKz2qsOQ(c4XJ!>CS(O2!u`q2f^w#$&Q?%KrDP8NUy zgqa!%Xf-V*bKQECOGL~V9DUrSXroR4`^2gsd7L(~cj8bAmyhL5RmFe)Ms|}Qf2pB3 zBj4L2Ce-eJS>dAF?{T&=A(?n`P^u(!vHQ>YZ$;UH@D%)fkR{T|b6*x-$I2*#yy#lT zi|;NN2TkIkQ5t2$Rxi8YPQHb=mt?EUQz;EJogt|>e&pD#Q0v8%eM$=GW)$>kwK9~T z-jz=Dq2#&Fb^eO)#LL}NxKC=##ne4Pc;ZmLnT79YnXSOgj?gIG$ zPu;{G#&BioKag20ZZ?4YQ2;EfgF(W&j(By&-QM^#ZV~Trgwvz3OnHUzvd0a<)MW9Qg!;pFaJTasiT(8 z%y-pryB%e|Hj9zvh)kP3-KrzCw*^7K#L2b2PK8md&QmHXaho0{2SUZe2{yCqU&a0V z$Bw^=;ZjVdO3=p`|BTH2)J(bZAvBj~Yu8jij5qtAvznrx9I9by@}#)v+$X8|rSE&0 z?BZR@TInqR$O1T_Zh4bw^dSxRLLRaUk-5bO0?<}UlwY8U=3L^Z0}y}1YZ}Wq8R|#o zOg8;%r<|zHFf>ZFJb0LTU))dJ%kv<$cUY9FMQ|D6V09Hv37aJI^(iVJ#yyynasG{K z&`4KY9y_jRpJjnacC03?FU59#AQe?89@%`mS&dwkT!2>cl=v^rZcycch^hVZrN~$x z&2HwTU%fz8eX3{N&MutzL}j9HjedY~WMoW9p}Vz6ql<^l2QQ^@54m2r>Z-F^-!Em( z(Sdq&FjK>l!AG<;N|^1yl;03fG^=b_r@KhFx?BUO^;vpnrDT?y@Mo4SUB>#21Q{`t zU<~~-n5A<%Hiq5pneQ~n*_>opVqP91$vOww;CL4!)1bU@?>Hc;Sb5c39{;TBFY#n( zs_zc{?lZW;XGLGbXYx{#i{0w+Za$^Am^wU9Rs=PKNS9xw@3$-jTY~vf%fKNHr+e?# zg;q7TCux&ClgZMBk(pY*CeKw`68#7VdzVuPtr5q+NeyKlPY~^>O}oxoaZO&8y6tae zSNL|3Dh}S3-<=VmI=v2pjD}LP8(^>SHfz-WbS-3}k+y2{z3X5U#CR;|mAfB{_*o+` zq6MHH#qY_j@&nCzzucbY8q^gkZfJ-4~vA(BtRO@)_!!3b> zm~76&Z8bXJKUXBe=l+{>dss6KPui~2Q#b(LWfq%Z)i|1+nb|%n)ckbM#|**i4^W5%|exeze6QwTqM6lK=*@-vQ z3&VK43L~EpS~$vVc-SUMQxmG;YhQ0a)SYq5jo{j(t)Wr{D_CL17o69U<+%z-W2aB$ zxiF4L*nbjeQrcd7?OM)3)FfZD_IVk1Sp~PZx$6Vuy?z)EVqDh6kAS%0hVuXl1J5u1 zc*a|H`#D!VO?|BB$+0+`OshMgyY2oN51n(Kw#VG%J(1E*q51Bh-R0=85+6Oi33<$t z_jWHTv z+(%IDWPJgl$uPD6j1$9)ywHqW6t~;+%kGj+!n5bhnBQJ*gTA}vAWM%WgDgJtWh1{l zdUZQD5uMfTJ@p#_wUfe}SUH**zErk#9Sclft~>#W6#7}xD5JutU8bqY_Hy!k$st#> zAO1;s6w7tt>F|HLacmd7sskhprcx?pv82ICx@Z)uu|c!J$zrYDU}# zFE*Xm_YHGdVvO%&Se(W1Dq)-IBa#%RPp50r32q{<&8@!M5FCrWL5G3NyJ(kR^~R08 zUp}Vl9yQ7$dHUIQ<>wN^YUBM&uhA7DTo*r_ZX>cLi1#>`KZvQQ-c8n37)h9!fZsdV z{zpRKic!gnkIi`)j@Vb(j za0|n8nFAzvKP%-)OHzkONy=TB%WL^V-&pb+{Mv`Fs=VIngF)&xdpEGDLW80Wc4)&J zE?t%@)aB>gd}YUlEe;p355cQqdk+)vtkBs7?;meGv3{9$r{VOtI_!&-hfe>5@>B{J z@qz|H@m?%-&_k75ep&jku&|2p_NptJ;V&wVRgNrmW96?@Y!Hsr+sBQ3z{ebZv4Q6R z+g!fK=}}$f8BY{1Z`|@Y>{a!y-|^)?TJbOyPid?W=f_)?nD7J+edQ~UVIbEv_4GF+ zE<0l@o*1|Rb?z?{<6}IiwX5GKIL=3qDwWsD6Ja9jtpvxs>fikjbmZNjab@;nc&1M( z&#gn)nXGSIB&1N;Fe8|YEWsX>*RK`V7%JHq-ndjS;Fo)Z`DCFte3dtP^&>Rc+gLTh zZI;SdCAOnCgUU88D_(bD@V2Rl_*b7s5QOJ$G1=X((#di8cRhO0IkiqDs054DIZGO+ zk+Wv<(_!~pRa(5qGfM8*e6AI^1JmfF9~>SZ!I8%r^-Y5~WL(KEl03-iwx_M5 zwdgRkI&mCnkD0NMD{Unfr({)IwowL?(VO=zxeE)F3{RuqT{0QFC#o6fS70iM>Rs9z zoKU-eu9lz4sn7&5+;7*I1Q^DZAUuHMudO`s2lBGx<#s&i1^L9WQsyM+FosadN+RI4F2tF*DV-Yh7&q;>p42j$ZSuVTc{@lPEYV)VaIZ z(#BZqx;U9*Ag;SP&)YbUYt=p#tLY1G&OGA!U09Q*ekISB_qJzY8#*H%nIr05 z09l;m4O+w84QI&YeBJA`D>E~D%TmzTG^>L|h&!J3ZXVYo?>)ZHe@9&FM%ZV&y!oZi zP$67yp1$484=;m>?lrE=!n995u1(4ODEg(k6T|&Xa|ORGU1iV*%uad2UO}PGg-9*w zv0ZC<$d~1neV9}YoqxqVJ}a#oAL81C@APdjT{`AO5m66dfQVg7rO-qN*l~qe%_+dzGpsPTVcbu9$}Rtp zNo!o8)`#Xx-#Dm(OMW{c_j#S^M|{Qo2aj>KqieNTC+?29izjZTXaIG(i3a3jB!J`GDVx6Zc*FKIHAHE~fIV5lrjrKORHyTr4Rn2|}> zX4wwyu7SJpkioViHP$vcuVFNbO-t6of7v|zZ!jG2o5t8U&JU4jLb>~c8K)okMTUuV3?i?iDeN#N3lga8>%D9bApq2K2mi4fVq-`rTzR)pSj9WL(ZN@-h?T6u?d zEFo`0d~JMLc#Fa($-Mv8X8-n+BX{B(>2mppD=+3Wk@{4x2sIopLV`FJy8D?Gh+&7g zC%Xv8RNmh)8syqmf|PF-Id>Ym38{!=+Shztk)1M(s27NK6SBjP|9LN)8h+!IF$!w@ zp_DQSitPCq0DYa~F4yNQ7C;UCnd0i`hyy6hUkJT(quZD#Y8TuArqSL>212 ztb+N@<{cCCb5Z`wO&sNlcIRFu*jI+oK$+JEv)HnqGRwE zXAhkhmM5bp(IHa)=cL%q!x8oAxrcgip0EFpr1Ora`hWlbyXcf0 z6bi?YP0F60aN3D)kgBBCrBF9^0RsSUFmZ0dpb$rV%A4Dv@YSy`V+GT|$5Z^@7=Z_wqmUMOAjBNq+bU=6{(% zVsUQJjPMj@m{fLe-INojYUY1_D~q`1RY|$;9n7cI^ZGzYd+}m^{Gy69i;dA6r#wkU z{u{EA3c`!ZbId)<_scbg%+zU)JRm*gCMdL_xMf=VP$qZ0JMP(3!od0(kIeXW&hU%|NhrV5P*>8d;pwy3lS* z4Q~Q)Blyw4b%bqw3dG75&FpoSEw022>g{{1(G_ZR4?zg2I4%3^=FvoP!-@m-+`y^t zbGrN*bd2Vc41}(|&v?VxroG}`CZq%#w$SwaqnG`XAoWtV>GKlR3i>BZ9qzQ{PWqPU zRt8V(j6Y3UrlQ2Xh{1cX;jc^3xDFYR%VWNXB=c2{i}IJ6Rzvl2obA!AN;jj)%J|Qi zsROwK_o)ppOPaFATzrQg)*1FRGYrjO(eNlcDq{m|Er1>}&Pj-Oj%|375lXMAg6GGJ zzi!99xdP=k+0k^9s!PZYzqAyL8%wKlpN(1d@Zq5yq3n=aKvaxM7I9Tpd^FP`6tr^d zgz*$2jlV3odkl)uj9pufiro8k1=DGlJO5s;A%io*OZxJU^%NMlD%X$BYWBSC7PJ?r zQi9xOA9y?3wY5bz;^2}U?8KyP=u_=A8+46SvLqLO@niP)g>$#zz3`dmw^Q~pnuGQH z(dDkK!f7ZGrO8I(7lPKRqb@HfW5wYp_9CY0PS^M^{e+B;f>%xzHLDAz4`G#Qb(taC zVg2mjp-|O_G$DSEMa5H78With`?dK%@j&Wh1Rc@ezn5^9{&$T^39OGf9J+X~A{>hN=Gh|W{p+t~r`sPYlMa)#lCO5@?K~JQh zDjUX${OX4e8+A>~H0m49UxYFOBy>(07UD z^LK{QDKb8q65!@J-KsnH4&iMfz(N;Do~lVvKqp?qKdmI9>JctX=Qh z7dst;b9&oPJ|kd9k^@)(eIgjbZkQ?bB4XH;YtE3pLcc&Ae#_>7gZ;fj+I;&phPoL+ z-9MLw#3X!NSWa|D9_J>G#4fDmodww479VLHOnUTF0^6NF;kNdE#{m{y*}MMmkMj1N z*kW~JM@(Y(9@qV0ZupJ%fa~m{@g&^QmD%@s)bQK; zB@usaDIPb`w)j5EP55){)}Zz3uGqwNiiU2B=X0#>CdNg!QcO&p374p@Qkb8RpzW;q zM}IEmjKW^GZH4~$GhN1aAYfOXo#4Sg^=vj{q=~GHU3NYXkC!@X`Ec#{_?V?j?a<*N zd1}5S-It3KnB4tF9`=NMn#HF1D$s67jE8_RN>#t{BLNl)0cABS1~#iR&zTiVeHE)3 z)g%M0lFry(Aee5L zB=@k_vW&BW!81Oif-f6S+wN64-@4vEnhc1}6e+*WP zTO2Ya#F;{Ls!FxyUH8Grfl%~!J805PqT;p@enENbotV^BVHQ4Ay8=!9W~$F;5w028 zM~5*6B(-O^PoDD;rY@BBKrwqiLXRF{C`Q_BoRRMk*1~Ciat_flKjsG9d0p+fEld_g zp!g|=s|BSx;$d^+eIC^>4DU{v~i{V4JQaM8Pm_2vHU)xI<5z+F9TjX=Zn+wg#39ov z;=Lr317Gvu>6e507urX^1muG1nnXR}7WJf(-FJY@z85!RKVqF_v9P7VUV+sXPCq|b zU#rmdF_c?&idOQ^B(*8;KTY-F+4F6LT^N%t@QFwu=}P~{R#@tkTseA5#@h(+1JXcS z41Z}sZb&XYT?*_6eYHM%8heT_F_7$QT{-NQZ&vAa8D28quu zC%=9oT!`Jz>~Y;+-Ff;7>P6{on?Jd;KO8z}bwfLwMe-4Q{LfG62Vx6X(%eniwLPz^@*IShn@;Mta1qA)m7*Q3y~AuF! zQ!UotgS<6ESkv1PCrLF)|P49hK@JQ$@B^BnF#WuWWbY=~oPsJP1p(A7&DDU@I^MsXY zxe(&wX}@pd!u1f0C(P^ba{INs1qV%w@;)oyVjF40%diF>Z#2tZXwKg3=`Sj*;H7V` zSqpa2&I44$6VBLpLSnhdpC1Y5QNylQIZ3=H%0C#~8aggZt#stYaGyOmAPqca_g7}S zr?)31uQ~xAuJ(3f0HF(g(p7@CkMbYBG;O!PuL#PPk*ck`CVcZ7=q#ss(H@>CD1ele zr%lT|*PZR~!W*M)`~kSDegdNXy&4RiTAK$D>xVr}%NP#~vwX$!Ox{6iy^pbk z9%pwkHm&$uqZ?utB`pEyJOLbft^^9%_}545d(NLB3*RZD^_854RFCS_hBIoo)vLqz z@S$YyUJ#+?d-K#_XZ`2Iuk)(MZdl3|>4*mB-xcaDv16*GqMpJ)GYG|)oE?y|3nUK5 zQY5!^Hw|XQs9k-EPVT;PvkXk#ml0RT*|&wv$DfyGX1~=BAATQx67E3!cMvtrbZC3~2tqN7fsMwX3!uI4r9U;e)2h zGME2M(EMG(2mB5leolNNsYq8QR}9FF%f2?xJOiqTY}+Ny4J(!|rg^Vy zrJ~(ghHWw5>CrN{ zwp0JUs?9{bv-T3kSb#`o-${Sb8ZP8Ksh8X*XhPFq*TeEKzrL^BXwi80z`% zqar}(@%xtDWz*W8mEGEkU5*0bC)k|m*=cr+adw(AOUm`A8jy*4HHZHk&?6)(lUv-;Tp%+0v{!#u z>og{THO(h0H>RbVe)tCGqH=^&vdZBjQ`$-YXa@s$bPsf2e6YKE@;Oy$d3$v8vx1~z z1w#fpqN3ux`|Q4F9=z-zj>E1&RM|sJMBU+q{M#N_PaW|UC-T0eBH3Lmv+jkWgq$MM zpH9M-I$g^wkFAg($OPDADst%&VhwE2sZ6wm=|A*6Hr}R525=%~I{;~ZH0y=@IHoR3 zkKBi6s8eBQslU-s+evC&i|};9`1Lg&{q8PYD+v2b&E2LzkC-$aSz2o@J5h)<1s-ZLq-X_x1ZarSX!#lb2Y=U`|v3TIf(L z|5U1a)PH5>Igwyx^GvXIH3TR|&lSBV+5eobg23|09Ig~T^tGhybhaeA4sa zLDXXT(E9iaeS6Bj4xVQZ6%JY+v3T5&#Ts3Hrl0V?YgCUgGy-avIx!AJVbIkJYkKUe z9k*E0PA?bEcz^XsyS^kbRqYtM^l6^HHNl_K16$nmv7e zH7d&F(Ju?mHf<%DaH}nVr?BK4tR5xfMLZQP>Q|Zp!A3Orf`7%2{hq< z!}L9_0IlUkP21cd?Rhym>%TwE%^p>i!xbu4eP=@hXxcrq@3Gho-f7)LT+PX9cfb1c zd@zQ0D$D%v2G}ETCU+DlKAs;wWx{O&-8|tEiGIQuxtmU|E{dR4L?Q6#@|bJ#R+Z6x zZq+BTmHSFPS9Zk0>)P0BN7Db?fE*UxHXt=(GWPy8h##u2bu`r`xyZxv|FvE!%S+w?PNnTC=-=;`+1Wd8#!@lP5f40zg zt6~-FID$Hj(x6(T6OWIgI7Q#*7Efo=;VK&JRiZVoc+hT?xaCVh>vRpgW2LI=pRadF z2#!30#^@nJC&>u#-hu)A@tTl~)Q&&n32?w~b~?P8nVFzD=bD05jeiroxGThVdvyA| zHf3H}VyD@2BBj+oTVGvQmmE3T`pwtQ3r^N0P$nE16l^4`-|Nkm-@4)zxEClS0jO-> zoDDVH1-zHQ-j1B5P9}a!o_I6yYttuJXs6tJVUNDlHD#M>xa*(iAn)p=M1FIl+!cmP z0AJbYG)bxEvdd^IJFSW_&Ktfn86huCd`v z`ihY73ugTU?Dv{xHps)~1<&e#oxX$kcneq-^3%~{w=p7&)k3mA1Wm7nZ+VqF}l zfQt~nbwq|*uck?|@D2BEGWJAT=O2#QGAEIm*r#<054E%k#qKeC9(RltDR#@w-8Muq zYC&`uHL3lwnD52&f&G};UwpdKy3Gi$z}1yJzZalDwv~d<$`{72p4VIkt)3o)pV>@r z2-SUO02DIYZg~QOF)#>tDlz+)FDBxlZ!%8@QoXp>B$mG1Aliu^xVvJP1*s*& za87E**gRg$+nSxhJ zvrajZ-LPfuvt49jN2*}o(5TdW|CJsbjcpc8`NRy9CNdw9Jg&Ag!g(wyV4LOtd-6() z;=EnfZ99|hlFIAgDyJ%WQXM+p^T6JpuASTz3mo6H;#fHWZ;Y2^w1M}MDsF6Fsp2GF=eHq_;sxTk)XZ%2z*7=D0BHfQqX8B{5DOS=Ym_uuFKq3pt*-&^zUv*tvNMZzsIGW#^)2J-+J%{WnK7N ztXP-ApR1JC25q?~&&oB-+hEHYZz}ztb}-OBjB(}H)svU4`Apgdeb)@>yBBWDb1XFA zxUigpvFtgyF^Ns)(|r3TukJMtyOwUR3IQEY^}^Vu(B427eo})vJLjG%1?SBVLvkf# z)7bj8QU$hDX5znZ)){R`uN{sz~rf>p3?tw@mnFk5aykO?GD$y$qB5WznPG!(j67MaVh&Nn+!dYgh%29@T0 zFIyu=T9Mq)XB=&8syQvCb~K!W_%MpDD>l~mv%M??KPK5UN(R0bhrU&X!cYL0p6je> z{UgC|RILSvG+GdkJYtQ;044#SZj|$}_fx2brA`^7*OP?cO_*bTe)PB2N$MEucm?-j z{Eh5b@R!2H#>qm-*zVaij&Y^ntBl%)-6Uo1-zh%hX*VOb9nWPLGml3va)e*s@RQt< zf~?*5QRa`X++RYK^MEdoIH7_}xSDMXYGA2sytcwWoQc0wGg+`s2p&f5sDdPL*Q1Un zwM7pA`~egpJ8#F!-##Vj{WVBAl{?8RME-t06ClCV4kNb{dC+H_$>r0DdWIBlh1Rq9v%9Yg1dqU~|DKeqra>HQRj8DLr&CMasZY!xGntZ(ID zYHC@X5nu=>r*JJ%!sPIdfoOom7~afq)Zo1y=S4RGiBIy)qr`Ra^oeAXRS>~%#La(Q zV7s__9V6l}*@Mrf#E%5iE`qn8zBT_vtUQn>EKfU{e4$7UX&xFW+d@cz&o-j=zb2zuYqpFsKz?@A*~9q~pOIek_6#S( zJugKoN^NG-C~f?gVy5%SXmq@szTq?3?s4Uyo5ajadwX^HlUsw@W)7^C!#7ZK`b1{i zH?gDyRBfmBJiE=~+@6HC33K8i1>2U7Bg5)ooZUBFmSiB2sRHT`&AMw2eC7MimAxqWRfk|gNAt#Z)>~X`B#rsyi7t?ne;1b;RfFLKB zQ8^!Q!TFnPZ7Obo>v}hNdMoa27-Jw|p~tP^x)KfBNTFmhfNviP zQ1D+Dtnwvd$)9(HM)8sVEER0D0TRaPUG8p+hEB=aHrU;3|NRzZ$qzRf1A3y-85k!b zw=TrlHZviJ0+%GK;n!PB(vub3v zf%etQ^CjJ?($mo^Mb*uAK$G5ztylkz+#tR=R{P*ab07#Wle3nD(^%P&mUFzHJs9kD z+?VK8-!4$b47JX6G0D8`OuA>-`X56F(oOQ72F(hv=5Os9J}W&g7m_-B^5h01MYmg9 zHfy^-@qXW;2DHquor+*>$yFJEi|k%x$f*ay2Eh*El&3-q+2fJ`=YOssV-1Kp0kKhxRO^r>>8n z`q>iG0%X<9gcr3u`6>qnd`7|6rRwLd5QcfF5rWON(*F$%zjr0SHO=g%QfKXL5N3Qp&Q4#;_ z>^4-axwtARAQL1heNrP6WDlHon%RL?CZuA3Gy7?hO(RuKUo@a%SWyDY2`F}@Q{(?6 z75OauXps7*vz){^*3d9R_ON(t+A#U|IC`hE6bYA@B8DksY~jGvoW*dr?KaG`WD`MRTT*k8w7l zp{8pdH#ELuMRLmQh%wZ14`w9}l6kgzUw5u|iCUMGV?tat{!MJGJ|~ z6Nmz9D%y}w@h6!GMoZWKeu^X%A9ev7GS`5+|Ias9Yf+=N^bLe{5$SVrYfN^e6Tn#N zn4LG#EFzxKGOl(w`f1Q6esyQ+h;m3iLM!i3yYm!epj7gaHIEENgcmyYkQs%Y^n3IY zKWQzL2J8bO%ZrvY~>N~TzMjgYDRqYV{Rub=8Ok$oN8>_#5l#$R7M z{04|iz`B$y^ZFG0s2KmW4`6_Jc!~G+3e9N@2Se7HI6W+_vekk&>HvV-+2*-dvSk@C zPW>zD7L(U*BYEIuQut9_+voDGgjnAxwcv@9WZ!n2xkjDOT|t5FYLcqvQYS|iUYtS5 zg%QTftI2#=SiM^Z%y;#O_2-xaFf7{Mappq02m8^Bi*u$x34bYm(cNEu!GH6bxb=_D zIJv2c^S-YgmO!VkyVfN3hZ?#*xG85a1C*f;>&=swd&x~!Uo4SJiL&X1uk;$77z5X@ z{uQ#(^m{5WFJ!}YxThO6oIjohjXj6^jC0+iiJ_J#b(`eQm~YLO;>hE3Z{jjO6*n|h zUlhK%Iv>N#-O`KgVnfLOHWglI`^9HHWgay`|7+(SLxb|j&UKEMZJ-7}Gi0n(d7QWx zfAxcs>MRaEU-&^4n-#_{NOpDWCsh{+oL%EyV2^7*(^-=yK9`6ii9sR_`B$yjJus{ddGQ zj1}j!ZF`qH?N{27B&>{NquP&Y;P31vhl~eQGWj(X4^MC@+SZcG9Yql;a5E*fgeMnDF)J)fqMk=GXuE>1X(6I4IO_@2f$EAk?5(`_e%3t z^e@8;aQ7tRnJ1t-PIx0buCA53>n~5*%XEYL#!{QeWOKlL(PQZ&GAK#_(uuol(QN$4 zfjwGiG?0P9>1sPFSgI$H=o9dQ7xdyufx9Uv@R`ZkYF<`lliPn=g?E=&hLz8`^~~C& zj(|B!W;6bSpXnWn_ubC2PnTeI%9n-BR`Q*lM8rMCyVt*8f;I4P1yM^J2b)--FO^xS zIk($Z25!J=KK`dFC%82A5%$vN8kUtWupAux(SEww;!#}&m>dXz zOa|Jes_O||tp@InfDh`4u;IJr{XFcSrjk9Yw(9xA1723`LnM47k7xKr4C^%igZ$wv zQ!oZAtBOzGJr!|&@f<)HO(!hO3lT4vrLfc6N3_~fJMf|%3! zdzWc^W(;Z0tT3DDxa=XIj)wgVH%AJFNC0E8?CV?oSYUPdl`VHZlMltLF=j4GtMg~0 z%=j7O1T<};RbBeR^eQvn(kzr^bI%8J|5l>+oxGQH;$C9ijRu{tCPmKEj3TGGa9QZv z+^`V@yQM;Up|cHLqIgdmWy4>ZQ7RFBBrXP_vaK$CWtJ8IY)W9BGK1OVL{8D8eXyWE zCbH(+0FSwyR)DILAF*iPvAI}flNIgVBLMX@?2O&lfih;t-3P8EqueO($M}*#xhzO* z&g(K*4m7s>X>5ZQXn`m9mD=%Lk;gFGH?I@r(p?P-e{&44CDLoZT9&OX(#%&<=!GXO zNaJ3!AZRB|hmk#TB#y5Hy4<*C1o$_yYk|4BD{SMJ?w7D13MoVI!pt8Cj}aWPA2(j% z)p~Gf{XzizCbLlXuKQORX8j-wpoQ`t0n!Cn1|e_RI^yUCaTPQBt=Yfog;#Z%dvmmy z#AY3A+*ku`ojIgPp7AzpHxNEn+u7*D?gcW8R|8b6ZH!-+(?9ol1DYcMvRuJoV1YPI=1o?6ZVozmwgemJUDy*s z=*&pzg4#3L#2dm6!nl~+0*&GJq-TlQi6&C{Ff)AUXdErnh5tH7T>MMD(38gMCRR3? z!fFX#=ns$EJX>Z*9`6CeRFFojX6DA(ZpR7b^a2#l4#=B!x#8jyUnAr z*ww=!XC4YDdp24vfb)fd{H)Vec4}Pw<2PwCZrb6ZzM??fr0nxb_^=)}u~@6i3(~%c zUq%>e0P_;vMAfRNwPdighoyxAkU10ua7NM1RC-zk&%73}gq$V7I(+Sbq>jB+^PHZ1 z{(j0(`m%AJlLd%o!uC1QYjb1=9I~pReHgm;pHPhx5I~vpnzy>@aqZ~MgB+WA-z&&U zh9ws&yUK*GPl311Bn*dMg4e0nSAUNnH?GetswJNjKhc+XkIa@FECTnGJc07c&MvC5 zIDmazYc)^#`j1OKYdT44Rzfx$-BDld+2eAV*RK)u@Kc6)>a*+@y1}rn z&_17Qem~2M@gdRRwi*QM?H7}9d@j|$?NP#@#tygxH-NY`N_9BIBevcdb)*E~Ty5;4 z(RbrM)O5rQn(*(4;WE*BSMi^&#@tQa6~sjt-7j5I3y`+VOyhNTbIR&{fTK|xE9XeG!;I{tsmdPgwUWI@qLI#dA$&)>{wp1 zYe3(1l$7p(b1yt|zK9ERg$n;bnY-`Ty#SI% z03o1DDH*BeoSwY&%w3k`I+Hgw=~yp4Za&)hrdrh5b``L?y?o2Ynqp_3TROEijZW3t z{+I!R4+px!0=?!}oo#`h9c}3je4F4MO4Pm6M5P!m_-beZiICfkWa?tLm`#%dm$ZT$ zUof~#d116Kc>29s9B3Cl39%bS1e7rWG^AI#9t)=qC8K`V*c&F{I&)s905g6Z`BSiw zef&vS9W(Las#Bs#yH5n@o2@Ouh=!Y~sJqu>*Xe1v%ua4lD(LW20L+LcfF2jMmmTM` zwJQqESKnPe(}&dVp>RW$!9Ex_dGYrWq+$bS81Z&|C4f+si_mpvF3(Fh zZ=37~&armP@4Z27-HGe&OfPPDaFhbV*iIkOao`KTZO5(z9EtL=mfrn}zk5fr*${-!FAz4!{R*vhrBcx5_qbTLwI9oZrag$wxO_nx#c1 z#NrFL__bGGP@DHhoo#_$N)aH^qy5T1uL}xD?4{BJxsb5QYeQY_}Ep8Z|Rc%?F|G5R6ZhNQsEpwDU4R^6}+$L9H1Imfk`&Gd60&a$L z#Z;MUU{?J6{nPBXPou5nK<;y^xca+bcd=NV`i4G-PSsS;_#3JoklhpI4&Lnbxhnz6 zOlu!*9~99^R8!@?#>y6b{}LU{I4$}--c?N)je2e&|C{Xu)$pbgU#6VJ7N7QQ^^Q%H zT?y$}l%eQ{Z0PS__mf<&H8XQ3*67OatadLLKgQR*{=hGDk+2`wG?VP7xxcg9zV~aW z@jWe=uys2f{6nIU1l69M+u+}8uVA6gD6G3gxX>& z*Elxt-+E%icPrw(d#-HhCw7D-xI%lAx+z7s@rHTZ!uKvB3tZ-(Na5ae0JTNPQ6f0n z#zG2VxQGh0;cY1%{B6P;?CrY_RF63R$cRol{~(w2P49wDYe)~#pxo(Sdc^bCx5mYS zJEsFkr}R*?oSj#SUI@wiwyzsML(HH^wP{4PD_Y1A+CB~xWqD>Y5XhlJtVH#2^`wl< zADA*HGLZbXnyvV0I{9y&x3bl6Z*r_BE(8A?wnM?2<^UtwTw(uDRYFW%?gT}XxO|NKfL7c7loCr4Ws zA>&C;O6J!*h`&nj9^aI{TmiU_e17>V+<3?iKoYI0#iL z+r^I}%Y7W3E+l%2wOX`@k?L<SGaQD9lHg+KP`^g$(iyGFt*w*g=NT^?UAq^A~V$7?Wc>Dl; zGf|?ibDgWRq4E0{`TRmf4gx|*JPi)a(4i_2_RG&qP}!iiu<6_2Qtg5o$=Sct;Tqh) zUIxeiNzpjbn@D~vqiuHYlWgMSzR!6_N-biw^}RlL_^B$l-phpCun(|4Tro_Y=H8t2 zk+jlRi&w2yLJ}S#zBd(ej)P-qfaXPxp=oFL+o%S9!hCsbr!rRV81_-Nk2GP>*>IvE zR@wY@emZg7?ro$|J96FwEo4bWI3bTPTjV`>*Ft&Zm6tb-x?=SE{SeHFH-r||>X?F3 z`A{|DmtqQ#^X3MC5O;X!>%v;8Vi(hnmPWaHfhb<0r0VYhFi8b2ecEFtrIpF(9huVAkCU;P0z#mhjVsf6Q|yM% zru}ES%DrGV&j`!^7KBXA7q1Y*u$jJ`f9v@ky-FPk00cVM>0W!lY|-Q21R&unMRad~ zd!j-PUgk4m05EQJ7DV;cPo~t12gSToD6%_K%VfZ}S9}FoaQhEZJA-$Q`uaQzDebtU z=?IAzgfFFb7WKQ9?Y>sC*qU8Z2l0));a>Cze4q~>ZP52&9pUDv03bHvdfBVl#5>j! ziQ0$#7>umTqVe+v^hJ9sLsndb65);PLhVEMBV4>SnWJkQC9U6v+Dd~Xa4GCw{hdSal@m<67AZvQ1W}1r9Vhu{ zvOajU)Tv0|*8LR~a5CN6VpNFRW0)~8JTZvC^r!0`c#i}GXzjY9myY_u))r=od%!Yp z4+}=aN(q#H-^AQ08$2g~_)UubPgDv5>R-OH>ewxb2i6tD8$HcCVEXPFoIeSFADc_( zlP7ee;;tT<_Q7KI@@;Et(}ZRORE4hwl?*x>Ol$Kg!q4itNw+MeF;iFU6@n#V+(%I1 z`kj87)eUFX42G2=Jj+Y{(R}y`+we5bt7laPRY8ILxJa?iKR*cjT)lH`XSd`H|Goeu z+PA>S*12*BBvmZ+9s;?v=j8<+!l!f~FUy%sz~~ZNHEvr5Dm$RdSL)ePKT)uU;byPi zrYTmW!z~{AyVcH?H)HER0qvi!VV8V`nTU@n#G-zE+J5A+$rwJe-$$7YZIIjF7y^xE z%h%PtP4gWY9rapREN*yNGx()NEsN%h`VMz=$NZ&Ou*%{5PUB~K7SG^k;_TSfnO|Vs z=iCt4(y72tDZT@4>;{sa0EJ-)aCGcKeoeAW3cYE-Qja)!NYQbYL&)^br!#hIK{Tpx zJch77Od)A1fA~}-rZ)G>5p3G!0D~Toh2pRa)LcCKsFmw-|kqI#OM>X^#HrwWM#;wsV+9 z9j_peCw|r8SEn&TrTKCn3Co|lP<2E$B+sTi_WkGGkK*u(5eUE%CYT;dIQVB9t_qau zDNsxm@X>%96M+@x3NLc-CuBBdcL9`y7u%E5M)dAawirT05|B;_i4S84V=*B!JzFe% zQ&o#yG#$H5vF0KL<^CW{C;iOa0C_>^tb(j;4v`~nl&H*2 znldiN0TOw-{wZ*rUGiw3#JUjyxCpdb676h>bw!fay+vV)!XWKm!L%)Zxg)k0+Xyz7 zf{gimQYz=Gs>IrHE61<~KKkyl6?lZ~AWs&WO`nVcZ6F^KWY`!*`!EzsSfe6$&}z~A z(Gr~UcqnKi)pe+%!VQYp5MAelPnWD)4^3lk)f*)R$HH z?ulIsaLCNfoPdc3iqe-o3==)yW$gz^_HQFj&oMU76(!(=C8WT<#zcPK zS@XaD{_g8OP=8_%#8NclmWp4^kOmw4(X@nSCzxL_d(2?1#av8?CwUX!f0?F?p+v%j z`t_zefvrgB(N;$NcR^VFv!9}(?$6XrY7WVmx)3n37x@_yLC zKcCU`apgbnT$Y6D#iA(CaV{yE(gF>id+>`h`z=c4X{cCRKfh)0%XH?%d!KYEYLw4V zinmnFYOwWBU|aPK;^1@z62ZIDrF&jY}5;c5?X~=z>%wt)PE_s5w$%Cow89M+)h_6vf#-{-=L4 z?c`%~NthX>)u8=l-fy8Q-;xTks!ya}A2B1+9)QyykT_?n$Rez8bFs!E);uRS9LUJB zF0lHd4k!TUg+50-GaeRopo5`WZg zqB{F3j<#h*4dn2;Uo#gcHy@H#CLw*%1I&I->jaMe%2y_FM|Vm+Ld842>48weJ(Y{W z2ojUsC|Wja?<8_$ zaPPYc!@knlv>WlGYR&gototNE9EI}Q#OmA~r*dj3TbT%&7Y zz6}hu!ei;(AL5Z(XKJ~}X$_CIgbJT~v8?fSKi2)e<+M{pz6OL9p8ttX7_DHE&I8&On?xhRwv5^g?*3a57iq=Gq9<H6wM-sH2&A?2=%^PT`;)h4x!U>$TK+s%LAV+=PggIbFU3-v=sIY^LySmZ5A?4tDdZ1^_`3JP&T=i zICr*qL3yW@=5<_L_#hSilVk7I@3Tixbbm!x%z>P1eppMr{0+19jXzfzex2zo(HF;# z8_{e>!6#s!WSL^j5cw7G8~0>;e4W3x=5of^-kG4?x$#PY;g`)NDN6r^?2E|r|2of~ z0D*?vbGGaXw2UyJLdmTApwOYdz(DRMN}kfNBlxz0zEA{~^hh2@d*||+FX$`3)E2+V zHI{Hv?IX+$t)++Rq7>wVCB9D!GHgd@k(*D+FsqE$+~oe3viu!z{A)IjUy!i)L9>Pa zy(YsjZ@Oz;NS33~|K@JO8Y`0f!(LVMXJ4f5cZq2tp#N)W>4C2X3{JB`-)4qoJVh{P z+?X%r<5r2k+DYj*$9wg*HLgOb7L2*tk&E&F;~2LigtElT__(@AS0*ngJ~mTc_p3e^ zL%rW5z8NB#WxsvTWVFad$AAF)YlnLwH*Bj7fV~ns(!jE*h7};E@Gt2Cur8y55_$ul zS7fOf=y+$Fy*g+nY0VSw!FdHZe-M>N9AID-$&liN>6qsb#9{+a0roiv_lL3e5-Hil zSkIwj`>E%Y<>u3@crz8)>y|L3rPWYynA6oWp#|XKt-Hk2?fHjOSBR%wsP)w=hPGR{ zZ@FJ`TXUy?=+kfKhcx7%PUerEJOHS-Qlzz6BxD{!eLJapNC|+P?o28-$&AEwHE8eL zm8SDx6?nO;f=1KGCZy(}U)EjxZ*ytCB-!jJ*id=`;=+gj}nxU-A{Mn?V zwRJ{p2=RoQZ-9s4XZv?DyS&-CY=a+m&US48>*GS-4++1}yGsloPJM9M+H@B#N+J@~Dtr64sxJvbBWj9}gwH)awGw2_?k4^H zp&J3*xTHVI(zn+a)(q*22X7`eBLrS(>vyNDJ%W~=;Z_0~YSY0NagiqOdp<5s`8Ati z4B;|`t=cMk^5h?a4M!e=>41DF!1;MI6)!_ik&tMMD%M1Rn0K6)!BCwm-8W9WCf^>N zCbSz#IUMoILoZ7&p$cFeF?%d{qzn|B6xjz+hTXP`HbkEi@rABzJT?och-F>GNPQ=$Sal&iJ=;p@e#-+v3Z6Kvn~#NQ0ihJwfdX#xHP1RL&#A;D)_YL3YX;Z9&zl-wp8Xg!$W=~wqBf=>1>AmZB^RJkIZ zf$BSvWh4$cCYP0t8_^zxU!={iN;EZ)xGhom* zV(#?#SkSh^;&%9zs)Xl?NZSvvI!Z1(;%K;`M8g%E(qNk`xBGc>&PwBt4ZF^4ht{j! zPIl-WaV;;e${K!>t7mesThvUiHg%#LGo5FImn9ON7` z$KHIeKEL1p-TLReT-Wt{J|2(z129PQ|7YUT^QZ;0z#b~Bf7+w7i4YKVF_4iPfQXnw z3)i`D>z9FJ`s|2uFRNDatEqJD;_e&L{3~NZ)yS}9DLQQwq^%dHDyb5N*13g$grKeD z_@|@bV>JzQ8}`4j22FuHoz>O_rS^5NfiDrj}7-wg9WX7k!GZ|mg zFkk_fkR&S(`ED&7t%@*_D6x7l_t>Hq?c>VMln^-f)D;{2F)^~$MvM&Al~Eb*WoFO5 z+jdR3J|VBHse16}xW@qP;O6H!Xb+5ej>N^>FJG*65kn>;lBgbA&s`e}p$&avl5~c? z@iwHl2f#?D+rhEmwA`V2sSRY2&}t}8!@8EFbD}kJ#i*{Myi$em$)x5t08su=ehC)H zooN+dRRho%PF6Iotyql|%)r=A8t}lowK2^I5;CvxB4js8q@5i2PBH;&@YS1rXh~&^ zj-9={o7aW(EFb$p+c67iTt0EIS(|rtpBy3A=G71iu!i>uu68TB{F3qM>R@e*8-cgB z*kAVa(1V!V)*~H9YU}&ABLB5Fy%exgWlspKfS)u%d!J5ftI>F2^wRG zvOQF+c~0Pr5}Hnf5K#KJlaXVq2pkyxBD@tMy>c*55q5Rc7u=980}>h59QH1=C3`~l z4)s>F20rzjGg9Qcd!Qpak~nTHQ^E9K^-#dfbB2gqS@uxduG*U&c!t!d$;9{8j*nFL z0f0(6A8BSI>P@u#Xb(iDc&4%A0mN7ZigD(UWX$5@#m`hGMqExP7$MHjFBn=2Mt4?~ zb7%C#bas4rRN0UB6BX?pUvw4?MUmy_@!sh@)T&wboyplBeZdwpb6rf8iGJxx&W4=m z+g{aR^ppg1uA&$fhHl%+oS@KD70GmB#vOWAj~{H$XhMSI4DAzdDQU*V#l`(faX0GJ zYo8Lnk1S&%?@USXjKr>k-5;=QFzdlCeX9?21BZ%i8z7Zcw~WkOQ!AK!G$ZI3)IB+2 zJvOmCmNfK=BgK!3dxHTaGKz)fMtJZJm!lhG!9P}W0i;sa^g6-4QR2LCHrxG;W>zuC z!Ya+#%ItS=19;6;H5c3|e}=ztL+NyG=YeTUQ*@KV#2CkJc~tS=-?--DhT^C{WXpEI zmYs=PJz{AsjFER zXT0}#QDAOsBg1ymLEh#2XH+Jc;XPt|%jvct*6YD0Y9LoeT8Wlob;zj^e!1B5$Jbb`08?f!KEa z>FrjV1^IfrZx7G+WT_OM2esJ0vYve!9D&euvN+cA*_@|gfqO%V!qxbQQpJu*xfjPZ z+=|`2!bhW=r1gyS9`ry%5uF16*VFmiMh?BL#kbiV297Z*vn^G_lv7%?>T*o+B`cOY zI4$*kjFuR8>QY{vIM;oclsYEMLL_xYm?^li(we38hn!RTtns|1DtXqe0*1$||1XbW zRDDmV=jZ)fO8n+VjuTzFTfl4A?PUWkXD{CU*5fW#FbN&2JZI_m_1a~9WV_O`)ABhm zO4^&eI1yHp5&8KA@Q5@=NjurD{uUY=-C7xa0m&Qv4i25rp?)wWo_tCrH-7vm^J|Y! znU4s7z;g2 zuY;C_V`rR*H{-K*OX7p}9iD&M8{-a(YT2&2# zE4R90Xc-?Zm+T*pFOM?s=W|{cE_%{A`ebootfJ$<*_ffxC?zt&2B;Qyo9Ei^`rNn` z9@A!pr%DY%M{M=0>yJhAIYnOVs1Or1ihF0SxKhi3h3|YxFX?yGzat~Z1o70&6GtnP zPal{mwFki+UkSjZDGqNEJKz;pRy*V#)2GssI>^YL0Z@(BHY;-@g7-n!0=1ju_4^i{WO5QGa66Y zM0%b+>09WCijp}fD3&?41VZv#bPoNp7dF&G$S7~4!Pij8JLy(Vg(!LE?pGXFY5g+V z^_5z#0{`{VYe=U&o?FH~;oPZ(7rkl8eT*c0lip9>S*W1EBvw@1^&Q->Yi4nL_$Tm8 z8+PIr-J=vQTDJb^AnfPkVU(4uoW3iwVVZ&MltuAqzwC6_9}umwbNgjGc2vFz){kyF zNhTS^e<67lDz7b>fhG5m$!O4T7yt}m>nb~{Gv*|xTa-ql^;l68*R^Ldnf)q>fiqf;LDe9%sOTw$-j!iYX&tPn`;;vjg2>`UiesUP;4hW zdoIEn@`JNWJ3G9nR-KN0k1qd-7u{xV(?d6$gq>l0K#UY>fi(0`W|zg3Iyon#zB>v++ZkAqz3nJ&V1yq6v~7IHAG zThe%=E&BTiW*>9*im;(CWGLUhFgJ59rz7^kP*tm1T&;%IO1 zR#ly5ZZPo$3)~MXtWZPlZy?8*t!NsOxp6Wx-q0+^m_Z>QRg;d-;>lCapOe}hKeoID zaH2VAZ6@z-qs_J=2rRz;d1e6O^Y>bl^zi6VDlsk5vp(g}u2kdh+d*v=6gzCk6&4vF zjG2y>m-16pu*#7v@mcpW1l1>lInlK&jqlsqd3D=Hbu*g)sS@%v z?%%|K_zI`)UUg5v!JUHWdkkD)VkmxKQ<<{()h&zsXCR&Rp8Qc|#=u<;H_Pi+&7bq` zygN~UD#v&*(i$gjzrXX!0x|6b1MglC($h93-r;t%kj{*303^c&yYIzOmu6oc48^OR zH~O@C@QXc7xb+rff4Zzb>8QLML_X5;yeUdg%X#O>!{8}vpnmclI4%k|bBx2?CPcB>1iJhwDWN$?Waug54uR%Lelsv_HP-%#KL~{lG8B|HnU zU4Mny3FH0l`vN*M@hnLA{O0@V?2_h2eW@pQwtpnqru|xSQrsadY>=`7xuTtink72@or-Cw z|KseKr|t|~*H0=a&iEGxj9@22w?!VQnK}7TUnH_pC%fKJh-a5`4*v-L+$$(UFHqBssHtt#jS;5Km-;}T+2@@VDkh=D|=ppo4(BD)BU;}`72@6}Cg z82iFn$Tfg|zInDoV7|+*-4RYOofm$h7!YK7PR2;1zL20lvM|gJ%Lt0?1!J6;lmWp# zNR;A4Aj}PTnGJ7Hh;t2?09?9P2-NPUic*8WUkuKh>a1udwHL*X%iRe6b;~!5+|o~H zG)eoUm_*igj&R#;&pG#J&4%MyuSf%Dsn4^g0j;gA8njOa{hv5s2mp)AIw}b)#gcaR zmO4oeq?NYjB#)styGS}M1fZ%B?cCbBfn${Plj+iHeonM((&zLSszhK(*P1CV4kT#X z0d1;IxnH)%JrvLn2OyGY4$dlv@4<8Ai7+tV46m{vXE2AjwTq?V0G=mKfh!J?^M457 zsbEP^9LCJ*ld(nFIN^4bb*62+U+e~iGD#Unvz3>5UabGt=k~E_$}gGi*6mL>i$nTG zKs7~ar^n5?#Z>3JT~sQDDtA{j+Xjr-qQ`H|efgOlSlh)HY?G466z#~?=ahA&|7f#E zrm6Y@D(h}@H_+`hgNW}RN~An5u&4ywn_qA!0de)Y1{8@@4mJC7o9z@p90cEogDVZ2G6V!(@tk9$#@i_OF+=ziduq`s4k@k&Oh+hzGu__ zXFQbt-l6*?+Hdkh%@g$y&Y!98&GcFeq_&o$6u#QgbjkD|TTGScxL8qpUQjCg&h|v< z2et6Yp`Z_GSEtf#&&Q(W_(w*#Ke4(kmQKUq2*+zcOE>(qe5L)wH;sYdv$vsEYL1=>%_X^r>8qkx}i z0n1ct<7&LpAVWRf+0OZ>4p2*R5Cow26u1Q*z4ELQ-JEt2YCNzKJ_`GHN~9pJ$-il? zXE?YLg|W>o^yoEAvDVT0vj?ejWTp5y-V7rLkPch7>4=Js>!Hc^!27D^$g!Q4AV2%k z)7&{hTx8Sid~w0%%TL;e#u}Fh|EXC#qt2DR{_D=%qp0*yKD~SnE<2dwYaRCyKBLpW zs;)*d3smlBU-xufg?@EBVr2??DR$XMGdH7j2I*W73@QEQNj1!!Q~IGa0NKUTE+co# zJKPs)iEh?Al7G5=0Y|Rb@Sbc1+$dikf=j)Zio6f{=U60- z;r;hdBB<&XQ40A0z%rkyLDDTrdJ%GBOh)0K<0^gSwflHDLq^#i%uj5w5Yc{(?hG?0 zJ+?C5^D>I(E8_CoCqoA(la9{wJ2q=dKG5{+slbk3ikSTqN9Vu&!oURfY^tuD>e$^c zq@qt!JB3{8Dwu|*Lo1$cYMgr>s<@w7Wn zYvGg)D^T^i)#CiH7Q|5V+jo$ajC32co}l0B`$^$aJwHI>3=Ba#QdUj7r^W;5K{7f2nItpTUtL@%os&zJ%P>rOh>j?8(&0-2KkU_D&CfTtPS2 zfVft4#oqu6KeM5MDzE)s7}V$17Nxfr>w|EA_n=>a70?PZAK%OVO8;%4(ADno&+49~ zQdCfi(w)WC+_kd$n6z`^!Fir#=dUVO3jei=AzH|SX)uc5K z7ahV!dwP}joG|K{&(X@%CDhP(u`MWQsm`T4RdUJ1`K*$YmR;%i zg5pV=a2YYkbYbf3Ypt^=+4MRebjiMTiIh<5>A=IBB-z;I%{f zZ>Wfg_d(5B*yGLlE-EQqOp4f`C>*!nYL=jE)gr2}({Mt&_~Qjvj_6a9=<8yTqdAQu zM>Q8+F7qL;s)p=;?Kb)#n80XfFJbpmFBvmng9AM&fa;_@4FKHs8BwE@pG3W+GyPZ* z)9q3^#8+<+2=crNo2iM(N=UhIjk_)vIxPVM3a{=HwB>D7J|a+Q$!?`ve$DoniS7(U zuZS(JXSMR*mr&?l9~;U15oRyoSIhTn3I^q`C);gT8?{ayyFoDnV7|WM178?7 zfzN+L=i*a?<^nHP`jW&T42c%CqRd>o%h96H!pP3PU01i+5ASlndDh7ms7Mb%gFI2m zWV5t=&zxq&cW2o6S$%c+>lu3Jj!M z2vi`q(nMYI40CA@c#73LJgA3pq4B*e{l^|7&;MZOXP-Ye_!WRXe)!PfHUrzwCVGTj zVZC!2QReCN3kaa*n80rIcymC(K2RU0Ow?xiqMal2)VLE83RVnupAj?dQe!Uh=pNg# z%CzK{(p{K=`lqx z-1L(@8S%?jgn%bnEKIvfU*i~gwu&z+zBrt!GRK^C(-*Mr6GwPK?*r&yD*dOByYaaJ z8sIMtlVn-{rtbu9z$A!v{N@TdZm@MJ`@siEC#oSkzumPny7eBu3!n;*mY>mbxgX`F zq~8o@Pqvhu+=9HR6P1+>Z}EL2BEiqd1>#A;B}+XPn`l+}zY@F_wP_F&SY`ck_-HTG z^*`R6m{FKzhgq!0C6drZ*ph*CuihVwdq6?2S6OM!#m3O1SL7n%nUG`d&YM$wpIVyk z-QtQeY)AETFog}YFGGLbMm|+r|Jh|(#)mhggis$vt2il_>d{5C=z7!ses4+F^@$F^ zwKEdv4;x7K(bvQa%NEBANGql@&2k$JA-l}_$nDVQ21;@?rNy2XW={|GW%k?1Wtuid zt?PH>TxW9n`V$}Le}&|=6^hDk(O|K-1eMz8$SKD*Gxk3fZvrz{bNjHX`>xkA5Gbh-2LwCR}wLba($5`)TjM(Va=d)NfEp_%}Zt& z$wV)qqF&`Z)4HpPJrk{((}-CKl(|8HfV>@EmNKG+R74~b4-mR80HBzc_}NZ) zRaOdiML4QkBMS*EjINsX6?^!N^Ro?J2SL($XmyDwQTfwemMBYof5?8*8NH+L(PhPx z6$EB~6E)Vj@KvLf^Ek0|@m7x%u-!AG3MulaA)qhAr1Qo9%KF+Wfc$h#zRK4QdC??w zqmAGtI#zoZ7Sl(qYWxc7BA(AFbi%3i=0N2`u+rO7LcWYRb%TA4$l!EH%X*>c)Q1py zm|3Saz6snFmm-Hrc`>Je6&|I+OO5sYw15nt5ce#&u;`_n-x3Y(TzsrZ+7oiNQt2-` zEtKhRt;8s*x@+4?Rj}qo_o(x~)peW}r9aAW0QcgFl!||H zwwdIGeR990!PlEL;NfT&`?7nQc50#?*bjT()jQ_|owb@fjcffB^Y2pHU zl+ZS|8w{FD?ozC1*h^&4NNU|*)zN9sVrN@k^DU`NL020H6h0#HKdMCJk1DoxflUy|zF1?;uO-iZekyBl;yu1{mLmm&Wo(zY{Q| zL5uUpN8*Tx&GD`OM>bddJ` zeN&|M$&V|@Mc0QO|vr+u?(U zRlmo!Bmd(faz7FLF4$v#FUm0+oKtrwTU?yYhy-G%tgxnZCcz$Fe5Jkq_cVuF3)W;; zxvZ+DBMr@eCuIo3%&SQaEby=4Qn9cr2}82L@eE#*o(PjI@FX>S-1Sc})hzV-)m=BN zod%En9&BTWPfB)UedAo60Z<6{33m3L>leXmVuGAF(rS7RipR1CMh0SH8sTsEnfJI^xhJegeI8V8ZEZ_yf3ctW^~*L$=4+mNOhuEm7oW&~_nvo?_;c*M z@QM%AMv!Dd*QYn|XzF7BB_+raI#`TITnrhZibBc0t7FwxcXRnjOJ1Cp%`26&OEWwC zSH!|*XVkK1653YWIXtp`ec!YNzbA=%e(=bR3>zu><-Nz>X%AG##~{ekq-)5GVZysJ zUAC@+*U1n#41W+Aqvl=m1NhNN`3~hWBf!;kl0LF-y>(fdTrdA8j#w?5ZA}2pQ);eFvMx`aHcYj1js; zR>}+4nb;dMn?t{4vr|6Dn;I-ny)auyUq~=7 zI$QDRAOt(8=|j{j{}aR8)6hepb`?yrI&CAgNDKZv{etQ`hXn}8+GzVU0lAEr(x>3L zerk-1>pnx%p3xXj`+5=*X-Ql4rgQz>+qGWx*T_}5cG!iO-p0{WQPJeo*HGv?Of?TA z@NO=Tnl5}*I=QHsZ4i+>>&eRQwIoo&LZ+KlCT%4Jl z#p$NTKe>bn9asi4k{y2!+>%Do^x4LmtW0$tl_^Gq@z~U^S(>>*r1bXHagCU{ueUTj z&kxBk-?^Bx?S5jv{t8)2O^#BTp?=Chgpz~AHn2vBc11r#d5KLh4-Wi}Rnz~xiNh=C zKGJWL81s06&5QVH@@;z@5_EVbPKEW{-mq z{!)$H!irlBnQtNSN*4RrVo8D9yht?h=YQwxlrz)Hr|?eR3Js_~ zVvXun%OebREQ(ro_TWY|yWEPr`Q~q>hId|fV(^=xUk$|gFBTHi=c5Yp&G!qM+7c@` zm+BJVwKS$enGH4a@!DdSvY&co{4_Z^+3t%L#ix=-hlL3(5PtKLrg4tWD~k_hHeE#t z+;zeaEK|mV(VIi3t6~Rx6imgr*TtS-YU5|*`k+&}8>{|bsT}BU2eE(IdFdb&-gT2? z^UkW~?P0xB&XaSaDU=kdcV@Y8tsAEo2G{T>V}^T<-*olRKUG zDhgg)4Kf&zKLwLX*yC(`U$#$Zn*_;}i@bk&D9S{PJkvO{)_Ijj$i$(8{-^KO@8q$w zsS0au@}~yR!@{wKDfK?^5xeQPvrPvS^2b}(#`bpHiwqiA(8OPvp1y}{Qx@AZRQ^h_ z_OI9-FvTUDlOT4lZ401>>4@brBnWipcz zDy`46Fc>aS_x7_&ID|CdUH6tfThxhxop99uEHQi!}J6`1ql58gA zxcFSW9q1@{vigmz@Jg&m#U)K~@i+~OoJo>J@*S(9p0{9q=l=;QM$vPu$J~bH;N+*ZRJ{8B5iYG_>nEl_V z1LyN6GH!b}g{rD^5}p3GGO;MSLuXG86ij@NwTq@I*`AB9K6`2uT!fMTwD{+?AgH*j zdj7>&hGKg}psm%7zs$4kvA|>{tWc`Bqx^YKndP!Y?+vwO^FkOWQ#DpOnfXe-G%<>d9=W!(Ui+TEKD%{am}s_Y!T!37L;lCT%Y7v}t?8Qc z{f4(2}vmQqk4#3Tjz{v_5JcY`$WAm9!07-iW=&w{6M1H!7iaILS{w8r56wh^sbp&O4Bri3|@xe`~H z+3VGz>u7OBn0oXMs2Lscx{?5hdozMbZo&-?d1wdNFHqPB!h8rE_RVj5ppT9viDM9o z22o!r+$iIj$*RnCw)0CSUuWWM#ww{&5!J8nn0TH($L!5adY%S(kZ`>0^XVH+Eq}B9 zT+b5DPI{hfZmpJ@{Ys+#lCE^k>(*k|Phn-N7Yu{qgK_am;lUp)+dp%2ipsI3zPfz( zOR4hmn(TkQw#vWX@(c^SR@CqIaw?Uj+Md^M2#6uQ=!dj3s1tp-7 z{ZE2UtXYlMrH5`QG6j{i8dMTH^BRQ6L1Aq_T#23BN8}lOHiAyhoT_dNdUI33&yPpB z=-dzfou(kkh8ucL3Qn+mj3_n2qMtZEw4YP`!WV&^pAeC+a)BwnS+B8Hki2EQ-VI$Vgk>un(0Hf` zC#V1?V>cwwF_C)5!@~8?)e_^0XkkUai%}J6JgFCjF%pY4(Qv$KG++mcg!0E{OheDB z%ZFcIJqmZ(d|pRut9Sj`ix&g|u@6o4!Gzt}uwZ6Km-1owuSpr{87HZR?sVN1vP2WJ zC~e*!W=GCJHiep*v>%4tqW=|^OoHfW1iCPNtaunefgYVXhWzbmF9&5==mkq=!^etr zpI#)DH$+Kq0+)|r-JG9WwQOhL1oILA#uRP;cU~vRyt$*c)2NgL&UzgZB1^Tw**|%?Ie;J%0Dl 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 z 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