From 0460c10bd67b08d97b2cee22a4a8585d788c854b Mon Sep 17 00:00:00 2001 From: dominiquef Date: Mon, 23 Feb 2026 15:33:35 -0800 Subject: [PATCH 01/16] Move images, combine basic usage and methodology sections. Begin adding Sweep docs --- .../images}/index.png | Bin .../methodology}/analyst_geophysics_menu.png | Bin .../images}/methodology/copy_options.png | Bin .../data/simpeg_group_creation.png | Bin .../data/simpeg_group_edit_options.png | Bin .../methodology/data/simpeg_group_options.png | Bin .../methodology/data/simulation_options.png | Bin .../images}/methodology/make_plate_images.pub | Bin .../images}/methodology/mesh/mesh_options.png | Bin .../images}/methodology/mesh/refinement.png | Bin .../methodology/model/basement_options.png | Bin .../methodology/model/n_plates_options.png | Bin .../model/overburden_and_basement.png | Bin .../methodology/model/overburden_options.png | Bin .../methodology/model/plate_location.png | Bin .../model/plate_location_options.png | Bin .../methodology/model/plate_options.png | Bin .../methodology/model/plate_orientation.png | Bin .../model/plate_orientation_options.png | Bin .../model/plate_resistivity_option.png | Bin .../images}/methodology/model/plate_size.png | Bin .../methodology/model/plate_size_options.png | Bin .../methodology/model/three_plates.png | Bin .../images}/methodology/results.png | Bin .../images}/methodology/sweep_option.png | Bin .../images}/methodology/uijson.png | Bin .../images/sweep/sweep_uijson.png | Bin 0 -> 26466 bytes docs/plate-simulation/index.rst | 15 +- docs/plate-simulation/methodology.rst | 274 ----------------- docs/plate-simulation/sweep.rst | 17 ++ docs/plate-simulation/usage.rst | 285 ++++++++++++++++-- 31 files changed, 294 insertions(+), 297 deletions(-) rename docs/{images/plate-simulation => plate-simulation/images}/index.png (100%) rename docs/{images/plate-simulation/basic_usage => plate-simulation/images/methodology}/analyst_geophysics_menu.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/copy_options.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/data/simpeg_group_creation.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/data/simpeg_group_edit_options.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/data/simpeg_group_options.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/data/simulation_options.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/make_plate_images.pub (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/mesh/mesh_options.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/mesh/refinement.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/model/basement_options.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/model/n_plates_options.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/model/overburden_and_basement.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/model/overburden_options.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/model/plate_location.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/model/plate_location_options.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/model/plate_options.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/model/plate_orientation.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/model/plate_orientation_options.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/model/plate_resistivity_option.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/model/plate_size.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/model/plate_size_options.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/model/three_plates.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/results.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/sweep_option.png (100%) rename docs/{images/plate-simulation => plate-simulation/images}/methodology/uijson.png (100%) create mode 100644 docs/plate-simulation/images/sweep/sweep_uijson.png delete mode 100644 docs/plate-simulation/methodology.rst create mode 100644 docs/plate-simulation/sweep.rst diff --git a/docs/images/plate-simulation/index.png b/docs/plate-simulation/images/index.png similarity index 100% rename from docs/images/plate-simulation/index.png rename to docs/plate-simulation/images/index.png diff --git a/docs/images/plate-simulation/basic_usage/analyst_geophysics_menu.png b/docs/plate-simulation/images/methodology/analyst_geophysics_menu.png similarity index 100% rename from docs/images/plate-simulation/basic_usage/analyst_geophysics_menu.png rename to docs/plate-simulation/images/methodology/analyst_geophysics_menu.png diff --git a/docs/images/plate-simulation/methodology/copy_options.png b/docs/plate-simulation/images/methodology/copy_options.png similarity index 100% rename from docs/images/plate-simulation/methodology/copy_options.png rename to docs/plate-simulation/images/methodology/copy_options.png diff --git a/docs/images/plate-simulation/methodology/data/simpeg_group_creation.png b/docs/plate-simulation/images/methodology/data/simpeg_group_creation.png similarity index 100% rename from docs/images/plate-simulation/methodology/data/simpeg_group_creation.png rename to docs/plate-simulation/images/methodology/data/simpeg_group_creation.png diff --git a/docs/images/plate-simulation/methodology/data/simpeg_group_edit_options.png b/docs/plate-simulation/images/methodology/data/simpeg_group_edit_options.png similarity index 100% rename from docs/images/plate-simulation/methodology/data/simpeg_group_edit_options.png rename to docs/plate-simulation/images/methodology/data/simpeg_group_edit_options.png diff --git a/docs/images/plate-simulation/methodology/data/simpeg_group_options.png b/docs/plate-simulation/images/methodology/data/simpeg_group_options.png similarity index 100% rename from docs/images/plate-simulation/methodology/data/simpeg_group_options.png rename to docs/plate-simulation/images/methodology/data/simpeg_group_options.png diff --git a/docs/images/plate-simulation/methodology/data/simulation_options.png b/docs/plate-simulation/images/methodology/data/simulation_options.png similarity index 100% rename from docs/images/plate-simulation/methodology/data/simulation_options.png rename to docs/plate-simulation/images/methodology/data/simulation_options.png diff --git a/docs/images/plate-simulation/methodology/make_plate_images.pub b/docs/plate-simulation/images/methodology/make_plate_images.pub similarity index 100% rename from docs/images/plate-simulation/methodology/make_plate_images.pub rename to docs/plate-simulation/images/methodology/make_plate_images.pub diff --git a/docs/images/plate-simulation/methodology/mesh/mesh_options.png b/docs/plate-simulation/images/methodology/mesh/mesh_options.png similarity index 100% rename from docs/images/plate-simulation/methodology/mesh/mesh_options.png rename to docs/plate-simulation/images/methodology/mesh/mesh_options.png diff --git a/docs/images/plate-simulation/methodology/mesh/refinement.png b/docs/plate-simulation/images/methodology/mesh/refinement.png similarity index 100% rename from docs/images/plate-simulation/methodology/mesh/refinement.png rename to docs/plate-simulation/images/methodology/mesh/refinement.png diff --git a/docs/images/plate-simulation/methodology/model/basement_options.png b/docs/plate-simulation/images/methodology/model/basement_options.png similarity index 100% rename from docs/images/plate-simulation/methodology/model/basement_options.png rename to docs/plate-simulation/images/methodology/model/basement_options.png diff --git a/docs/images/plate-simulation/methodology/model/n_plates_options.png b/docs/plate-simulation/images/methodology/model/n_plates_options.png similarity index 100% rename from docs/images/plate-simulation/methodology/model/n_plates_options.png rename to docs/plate-simulation/images/methodology/model/n_plates_options.png diff --git a/docs/images/plate-simulation/methodology/model/overburden_and_basement.png b/docs/plate-simulation/images/methodology/model/overburden_and_basement.png similarity index 100% rename from docs/images/plate-simulation/methodology/model/overburden_and_basement.png rename to docs/plate-simulation/images/methodology/model/overburden_and_basement.png diff --git a/docs/images/plate-simulation/methodology/model/overburden_options.png b/docs/plate-simulation/images/methodology/model/overburden_options.png similarity index 100% rename from docs/images/plate-simulation/methodology/model/overburden_options.png rename to docs/plate-simulation/images/methodology/model/overburden_options.png diff --git a/docs/images/plate-simulation/methodology/model/plate_location.png b/docs/plate-simulation/images/methodology/model/plate_location.png similarity index 100% rename from docs/images/plate-simulation/methodology/model/plate_location.png rename to docs/plate-simulation/images/methodology/model/plate_location.png diff --git a/docs/images/plate-simulation/methodology/model/plate_location_options.png b/docs/plate-simulation/images/methodology/model/plate_location_options.png similarity index 100% rename from docs/images/plate-simulation/methodology/model/plate_location_options.png rename to docs/plate-simulation/images/methodology/model/plate_location_options.png diff --git a/docs/images/plate-simulation/methodology/model/plate_options.png b/docs/plate-simulation/images/methodology/model/plate_options.png similarity index 100% rename from docs/images/plate-simulation/methodology/model/plate_options.png rename to docs/plate-simulation/images/methodology/model/plate_options.png diff --git a/docs/images/plate-simulation/methodology/model/plate_orientation.png b/docs/plate-simulation/images/methodology/model/plate_orientation.png similarity index 100% rename from docs/images/plate-simulation/methodology/model/plate_orientation.png rename to docs/plate-simulation/images/methodology/model/plate_orientation.png diff --git a/docs/images/plate-simulation/methodology/model/plate_orientation_options.png b/docs/plate-simulation/images/methodology/model/plate_orientation_options.png similarity index 100% rename from docs/images/plate-simulation/methodology/model/plate_orientation_options.png rename to docs/plate-simulation/images/methodology/model/plate_orientation_options.png diff --git a/docs/images/plate-simulation/methodology/model/plate_resistivity_option.png b/docs/plate-simulation/images/methodology/model/plate_resistivity_option.png similarity index 100% rename from docs/images/plate-simulation/methodology/model/plate_resistivity_option.png rename to docs/plate-simulation/images/methodology/model/plate_resistivity_option.png diff --git a/docs/images/plate-simulation/methodology/model/plate_size.png b/docs/plate-simulation/images/methodology/model/plate_size.png similarity index 100% rename from docs/images/plate-simulation/methodology/model/plate_size.png rename to docs/plate-simulation/images/methodology/model/plate_size.png diff --git a/docs/images/plate-simulation/methodology/model/plate_size_options.png b/docs/plate-simulation/images/methodology/model/plate_size_options.png similarity index 100% rename from docs/images/plate-simulation/methodology/model/plate_size_options.png rename to docs/plate-simulation/images/methodology/model/plate_size_options.png diff --git a/docs/images/plate-simulation/methodology/model/three_plates.png b/docs/plate-simulation/images/methodology/model/three_plates.png similarity index 100% rename from docs/images/plate-simulation/methodology/model/three_plates.png rename to docs/plate-simulation/images/methodology/model/three_plates.png diff --git a/docs/images/plate-simulation/methodology/results.png b/docs/plate-simulation/images/methodology/results.png similarity index 100% rename from docs/images/plate-simulation/methodology/results.png rename to docs/plate-simulation/images/methodology/results.png diff --git a/docs/images/plate-simulation/methodology/sweep_option.png b/docs/plate-simulation/images/methodology/sweep_option.png similarity index 100% rename from docs/images/plate-simulation/methodology/sweep_option.png rename to docs/plate-simulation/images/methodology/sweep_option.png diff --git a/docs/images/plate-simulation/methodology/uijson.png b/docs/plate-simulation/images/methodology/uijson.png similarity index 100% rename from docs/images/plate-simulation/methodology/uijson.png rename to docs/plate-simulation/images/methodology/uijson.png diff --git a/docs/plate-simulation/images/sweep/sweep_uijson.png b/docs/plate-simulation/images/sweep/sweep_uijson.png new file mode 100644 index 0000000000000000000000000000000000000000..c9c0a0210c6cfc7cb212093f6373a881b43573d2 GIT binary patch literal 26466 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 @@ -15,7 +11,14 @@ simulate data over the parameterized model. The mesh, model and simulation details are parameterized in a ui.json file that can be rendered in `Geoscience ANALYST Pro `_. -See: +.. figure:: /images/plate-simulation/index.png + :align: center + :width: 100% + +Two other applications are also available to assist users in finding the best plate parameters to match observed data. The sweep application allows users to run a batch of simulations over a range of plate parameters, while the matching application uses an optimization algorithm to find the best fit between simulated and observed data. + +Content: - :ref:`Basic Usage ` -- :ref:`Methodology ` +- :ref:`Sweep (batch) simulations ` +- :ref:`Plate Matching ` diff --git a/docs/plate-simulation/methodology.rst b/docs/plate-simulation/methodology.rst deleted file mode 100644 index 87bbeeea5..000000000 --- a/docs/plate-simulation/methodology.rst +++ /dev/null @@ -1,274 +0,0 @@ -.. _plate_simulation_methodology: - -Plate Simulation: Methodology -============================= - -In order to simulate geophysical data from a physical property model, we -need three things: a computational mesh, a discretization of the model -within that mesh and a means to simulate the data. Plate simulation -relies on `discretize `_ for -octree mesh creation, and `SimPEG `_ for finite -volume based forward modeling. Plate simulation includes a module for -generating a simple two-layer model with embedded plate anomalies within -octree meshes. In this section, we will discuss all three of these -components, their interface exposed by the ui.json file, and the storage -of results. - -.. figure:: /images/plate-simulation/methodology/uijson.png - :align: center - :width: 80% - - *Merged images of both tabs of the ui.json rendered interface.* - -.. contents:: - -.. toctree:: - :maxdepth: 3 - -Octree Mesh ------------ - -In order to accurately simulate our earth model, we need a mesh -that is refined in key areas, while being coarse enough elsewhere to -efficiently simulate data. The plate simulation package includes -refinements at the earth-air interface, the transmitter and receiver -sites and on the surface of plates. - -.. figure:: /images/plate-simulation/methodology/mesh/refinement.png - :align: center - :width: 100% - - *Octree mesh refinement for earth-air interface, receiver sites, - and within the mesh.* - -The meshing can be controlled by options exposed in the ui.json. -Those options are significantly reduced compared with the octree creation from -`grid-app `_ -since we have tailored many of the parameters to suit the needs of plate simulation. - -.. figure:: /images/plate-simulation/methodology/mesh/mesh_options.png - :align: center - - *Octree mesh parameters exposed in the ui.json.* - -Geological Model ----------------- - -The plate simulation package includes a module for generating -plate(s) embedded in a two-layer Earth model within octree meshes. -There are many permutations of this simple geological scenario -leading to a complex interface. To simplify things, we have -broken the discussion into two sub-sections: background -(basement and overburden) and plates. - -Background -~~~~~~~~~~ - -All model values within plate-simulation are to be provided in -ohm-metres. The basement resistivity is actually closer to a -halfspace in the sense that it fills the model anywhere outside -of the overburden and plate. So the basement resistivity should -be chosen as an effective resistivity for the whole geological -section. This should be quite reasonable for most applications -where the differences in resistivity between layers is much smaller -than the difference between overburden and any anomalous bodies -(plates). - -.. figure:: /images/plate-simulation/methodology/model/basement_options.png - :align: center - - *Basement resistivity option.* - -The overburden is discretized by the resistivity and thickness -of the layer. The thickness is referenced to the earth-air -interface and extends into the earth by the amount specified -in the thickness parameter. - -.. figure:: /images/plate-simulation/methodology/model/overburden_options.png - :align: center - - *Overburden resistivity and thickness options.* - -.. figure:: /images/plate-simulation/methodology/model/overburden_and_basement.png - :align: center - :width: 100% - - *Model section highlighting the overburden and basement boundary.* - -Plates -~~~~~~ - -In this section we will discuss the various plate options available -through the ui.json and their impact on the resulting discretized -model. - -.. figure:: /images/plate-simulation/methodology/model/plate_options.png - :align: center - - *Plate options available in the ui.json.* - -The first set of options allows the user to specify the number of -plates and their spacing. - -.. figure:: /images/plate-simulation/methodology/model/n_plates_options.png - :align: center - - *Number of plates and spacing options.* - -For all choices of ``n>1``, the plates will be evenly spaced at the requested -spacing and will share the same resistivity, size and orientation. - -.. figure:: /images/plate-simulation/methodology/model/three_plates.png - :align: center - :width: 100% - - *Model created by choosing three plates spaced at 200m.* - -The plate resistivity is expected to be entered in ohm-metres. - -.. figure:: /images/plate-simulation/methodology/model/plate_resistivity_option.png - :align: center - - *Plate resistivity option.* - -The size of the plate is given as a 'thickness', 'strike length', and -'dip length'. - -.. figure:: /images/plate-simulation/methodology/model/plate_size_options.png - :align: center - - *Plate size options.* - -The image below shows a dipping plate with annotations showing the size -parameters for that particular plate. - -.. figure:: /images/plate-simulation/methodology/model/plate_size.png - :align: center - :width: 100% - - *A dipping plate striking northeast with annotations for its thickness, - strike length and dip length.* - -The orientation of the plate is provided in terms of a dip and dip direction. -The dip is defined as the angle between the horizontal projection of the plate -normal and the plate tangent sharing the same origin. The dip direction is -measured between the horizontal projection of the plate normal and the North -arrow. See the image below for a visual representation of these angles. - -.. figure:: /images/plate-simulation/methodology/model/plate_orientation.png - :align: center - :width: 100% - - *Plate orientation options. Plate orientation is given as a dip and dip direction. - The dip (b) is defined as the angle between the horizontal the projection of the - plate normal (n\') and the plate tangent sharing the same origin (t). The dip - direction (a) is the angle measured between the horizontal projection of the plate - normal (n\') and due north (N).* - -The location of the plate can be provided in both relative and absolute terms. -The position parameters are given as an easting, northing, and elevation. If the -relative locations checkbox is chosen, then the easting and northing will be -relative to the center of the survey and the elevation will be relative to one of -the available references. The elevation may either be referenced to the earth-air -interface or the overburden provided by the ``Depth reference`` dropdown. Either of -these choice can be relative to the minimum, maximum, or mean of the points making -up the reference surface as given by the ``Reference type`` dropdown. In all of these -cases the distance provided will act as a depth below the reference to the *top of -plate* in the *z negative down* convention. If the relative locations checkbox is not -chosen, then the easting, northing, and elevation is simply the location of the -center of the plate. - -.. figure:: /images/plate-simulation/methodology/model/plate_location_options.png - :align: center - - *Plate location options in relative mode. Notice the* ``Elevation`` *is given as - negative to ensure the top of the plate is below the selected min of the - overburden.* - -.. figure:: /images/plate-simulation/methodology/model/plate_location.png - :align: center - :width: 100% - - *Example of a relative elevation referenced 100m below the minimum of the - overburden layer.* - -Data Simulation ---------------- - -.. _simpeg_group_options: - -The simulation parameters control the forward modeling of the plate model -discretized within the octree mesh. Rather than exposing the parameters within -the plate simulation interface all over again, we simply allow the user to -select an existing forward modelling SimPEG group. It is expected that the -user will have already edited those options and provided at least a topography -and survey object as well as selected one or more components to simulate. The -user may also provide a name to the new SimPEG group that will be used to store -the results. - - -.. figure:: /images/plate-simulation/methodology/data/simpeg_group_options.png - :align: center - - *Selecting the initialized forward modelling SimPEG group and naming the - group that will store the plate simulation results.* - -The required SimPEG group can be created within Geoscience ANALYST through the -``Geophysics`` menu under ``SimPEG Python Interface`` entry. - -.. figure:: /images/plate-simulation/methodology/data/simpeg_group_creation.png - :align: center - :width: 100% - - *Creating a SimPEG group to be selected within the plate simulation interface.* - -Once created, the options can be edited by right-clicking the group and choosing -the 'Edit Options' entry. - -.. figure:: /images/plate-simulation/methodology/data/simpeg_group_edit_options.png - :align: center - - *Editing the SimPEG group options.* - -Since plate-simulation will create its own mesh and model, the mesh and -conductivity selections can be ignored. Selecting a value will not conflict -with the plate-simulation objects and will simply be ignored. In contrast, the -survey, topography and at least one component must be selected to run the simulation. - -.. figure:: /images/plate-simulation/methodology/data/simulation_options.png - :align: center - :width: 80% - - *Simulation options with annotations for required and not required components.* - -Results -------- - -The results of the simulation are stored in the SimPEG group named in the -:ref:`simpeg group option ` section. - -.. figure:: /images/plate-simulation/methodology/results.png - :align: center - - *Results group containing a survey object with all the simulated data channels - stored in property groups, and an octree mesh containing the model parameterized - in the interface.* - -To iterate on the design of experiment, simply copy the options, edit, and -run again. - -.. figure:: /images/plate-simulation/methodology/copy_options.png - :align: center - - *Copying the options to run a new simulation.* - -If the user wishes to sweep one or more of the input parameters to run a large number of -simulations, they can use the ``generate sweep file`` option to write a file used -by the `param-sweeps `_ package to do just -that. It is beyond the scope of this document to discuss the use of that package; -refer to its README for further details. - -.. figure:: /images/plate-simulation/methodology/sweep_option.png - :align: center - - *Generating a sweep file to run multiple simulations.* diff --git a/docs/plate-simulation/sweep.rst b/docs/plate-simulation/sweep.rst new file mode 100644 index 000000000..b00e40b85 --- /dev/null +++ b/docs/plate-simulation/sweep.rst @@ -0,0 +1,17 @@ +.. _plate_simulation_batch: + +Sweep (batch) Simulations +========================= + +The Plate Sweep module provides a user interface for generating and running multiple simulations by sweeping one or more of the input parameters. The user can select which parameters to sweep and the range of values for each parameter. The results of each simulation are stored in a ``*.geoh5`` file named with a unique identifier. + +.. figure:: /plate-simulation/images/sweep/sweep_uijson.png + :align: center + :width: 80% + + *Rendered user-interface in Geoscience ANALYST.* + +.. contents:: + +.. toctree:: + :maxdepth: 3 diff --git a/docs/plate-simulation/usage.rst b/docs/plate-simulation/usage.rst index f940b6ca8..7891edfaf 100644 --- a/docs/plate-simulation/usage.rst +++ b/docs/plate-simulation/usage.rst @@ -1,30 +1,281 @@ .. _plate_simulation_usage: -Plate Simulation: Basic usage -============================= +Basic Usage +----------- -The main entry points to the various modules is the `plate_simulation.ui.json `_ -file. The ``ui.json`` has the dual purpose of (1) rendering a user-interface from -Geoscience ANALYST and (2) storing the input parameters chosen by the user for the -program to run. To learn more about the ui.json interface visit the -`UIJson documentation `_ page. +Simulating geophysical data from a physical property model requires three things: +a computational mesh, a discretization of the model within that mesh, and a means +to simulate the data. Plate simulation relies on `discretize `_ +for octree mesh creation and `SimPEG `_ for finite volume +based forward modeling. Plate simulation includes a module for generating a simple +two-layer model with embedded plate anomalies within octree meshes. This section +discusses all three of these components, their interface exposed by the ui.json file, +and the storage of results. +.. figure:: /plate-simulation/images/methodology/uijson.png + :align: center + :width: 80% -User-interface --------------- + *Merged images of both tabs of the ui.json rendered interface.* -The user-interface is accessible from Geoscience ANALYST Pro Geophysics menu. +.. contents:: -.. figure:: /images/plate-simulation/basic_usage/analyst_geophysics_menu.png - :align: center - :width: 800 +.. toctree:: + :maxdepth: 3 + + +Octree Mesh +----------- + +To accurately simulate the earth model, the mesh must be refined in key areas +while remaining coarse enough elsewhere to efficiently simulate data. Plate +simulation includes refinements at the earth-air interface, the transmitter and +receiver sites, and on the surface of plates. + +.. figure:: /plate-simulation/images/methodology/mesh/refinement.png + :align: center + :width: 100% + + *Octree mesh refinement for earth-air interface, receiver sites, + and within the mesh.* + +The meshing is controlled by options exposed in the ui.json. These options are +significantly reduced compared with octree creation from `grid-app `_, +as many parameters have been tailored to suit the needs of plate simulation. + +.. figure:: /plate-simulation/images/methodology/mesh/mesh_options.png + :align: center + + *Octree mesh parameters exposed in the ui.json.* + +Geological Model +---------------- + +Plate simulation includes a module for generating plates embedded in a two-layer +Earth model within octree meshes. Many permutations of this simple geological +scenario result in a complex interface. To simplify this, the discussion is +organized into two sub-sections: background (basement and overburden) and plates. + +Background +~~~~~~~~~~ + +All model values within plate-simulation must be provided in ohm-metres. The +basement resistivity is actually closer to a halfspace in the sense that it +fills the model anywhere outside of the overburden and plate. Therefore, the +basement resistivity should be chosen as an effective resistivity for the whole +geological section. This approach is quite reasonable for most applications +where the differences in resistivity between layers are much smaller than the +difference between overburden and any anomalous bodies (plates). + +.. figure:: /plate-simulation/images/methodology/model/basement_options.png + :align: center + + *Basement resistivity option.* + +The overburden is discretized by the resistivity and thickness of the layer. +The thickness is referenced to the earth-air interface and extends into the +earth by the amount specified in the thickness parameter. + +.. figure:: /plate-simulation/images/methodology/model/overburden_options.png + :align: center + + *Overburden resistivity and thickness options.* + +.. figure:: /plate-simulation/images/methodology/model/overburden_and_basement.png + :align: center + :width: 100% + + *Model section highlighting the overburden and basement boundary.* + +Plates +~~~~~~ + +This section discusses the various plate options available through the ui.json +and their impact on the resulting discretized model. + +.. figure:: /plate-simulation/images/methodology/model/plate_options.png + :align: center + + *Plate options available in the ui.json.* + +The first set of options allows the user to specify the number of plates and +their spacing. + +.. figure:: /plate-simulation/images/methodology/model/n_plates_options.png + :align: center + + *Number of plates and spacing options.* + +For all choices of ``n>1``, the plates are evenly spaced at the requested spacing +and share the same resistivity, size, and orientation. + +.. figure:: /plate-simulation/images/methodology/model/three_plates.png + :align: center + :width: 100% + + *Model created by choosing three plates spaced at 200m.* + +The plate resistivity must be entered in ohm-metres. + +.. figure:: /plate-simulation/images/methodology/model/plate_resistivity_option.png + :align: center + + *Plate resistivity option.* + +The size of the plate is defined by three parameters: thickness, strike length, +and dip length. + +.. figure:: /plate-simulation/images/methodology/model/plate_size_options.png + :align: center + + *Plate size options.* + +The image below shows a dipping plate with annotations indicating the size +parameters for that particular plate. + +.. figure:: /plate-simulation/images/methodology/model/plate_size.png + :align: center + :width: 100% + *A dipping plate striking northeast with annotations for its thickness, + strike length and dip length.* -From command line ------------------ +The plate orientation is defined in terms of dip and dip direction. The dip +is the angle between the horizontal projection of the plate normal and the +plate tangent sharing the same origin. The dip direction is measured between +the horizontal projection of the plate normal and the North arrow. The image +below provides a visual representation of these angles. + +.. figure:: /plate-simulation/images/methodology/model/plate_orientation.png + :align: center + :width: 100% + + *Plate orientation options. Plate orientation is given as a dip and dip direction. + The dip (b) is defined as the angle between the horizontal the projection of the + plate normal (n\') and the plate tangent sharing the same origin (t). The dip + direction (a) is the angle measured between the horizontal projection of the plate + normal (n\') and due north (N).* + +The plate location can be specified in both relative and absolute terms. The position +parameters are given as easting, northing, and elevation. If the relative locations +checkbox is selected, the easting and northing are relative to the center of the +survey and the elevation is relative to one of the available references. The elevation +may be referenced to either the earth-air interface or the overburden via the +``Depth reference`` dropdown. Either choice can be relative to the minimum, maximum, +or mean of the points making up the reference surface as given by the ``Reference type`` +dropdown. In all these cases, the distance provided acts as a depth below the reference +to the *top of plate* in the *z negative down* convention. If the relative locations +checkbox is not selected, the easting, northing, and elevation specify the center +location of the plate. + +.. figure:: /plate-simulation/images/methodology/model/plate_location_options.png + :align: center + + *Plate location options in relative mode. Notice the* ``Elevation`` *is given as + negative to ensure the top of the plate is below the selected min of the + overburden.* + +.. figure:: /plate-simulation/images/methodology/model/plate_location.png + :align: center + :width: 100% + + *Example of a relative elevation referenced 100m below the minimum of the + overburden layer.* + +Data Simulation +--------------- + +.. _simpeg_group_options: + +The simulation parameters control the forward modeling of the plate model +discretized within the octree mesh. Rather than exposing parameters within +the plate simulation interface, the application allows the user to select an +existing forward modelling SimPEG group. The user must ensure that the SimPEG +group has been previously edited with appropriate options, includes at least a +topography and survey object, and has selected one or more components to simulate. +The user may also provide a name for the new SimPEG group to store the results. + +.. figure:: /plate-simulation/images/methodology/data/simpeg_group_options.png + :align: center + + *Selecting the initialized forward modelling SimPEG group and naming the + group that will store the plate simulation results.* + +Create the required SimPEG group within Geoscience ANALYST through the +``Geophysics`` menu under ``SimPEG Python Interface`` entry. + +.. figure:: /plate-simulation/images/methodology/data/simpeg_group_creation.png + :align: center + :width: 100% + + *Creating a SimPEG group to be selected within the plate simulation interface.* + +Edit the options by right-clicking the group and selecting 'Edit Options'. + +.. figure:: /plate-simulation/images/methodology/data/simpeg_group_edit_options.png + :align: center + + *Editing the SimPEG group options.* + +Since plate-simulation creates its own mesh and model, the mesh and conductivity +selections can be ignored. Selecting a value does not conflict with the +plate-simulation objects and is simply ignored. In contrast, the survey, topography, +and at least one component must be selected to run the simulation. + +.. figure:: /plate-simulation/images/methodology/data/simulation_options.png + :align: center + :width: 80% + + *Simulation options with annotations for required and not required components.* + +Results +------- + +The results of the simulation are stored in the SimPEG group named in the +:ref:`simpeg group option ` section. + +.. figure:: /plate-simulation/images/methodology/results.png + :align: center + + *Results group containing a survey object with all the simulated data channels + stored in property groups, and an octree mesh containing the model parameterized + in the interface.* + +To iterate on the design of experiment, copy the options, edit them, and run again. + +.. figure:: /plate-simulation/images/methodology/copy_options.png + :align: center + + *Copying the options to run a new simulation.* + +To sweep one or more input parameters and run multiple simulations, use the +``generate sweep file`` option to create a file for the `param-sweeps `_ +package. See the param-sweeps README for further details on using that package. + +.. figure:: /plate-simulation/images/methodology/sweep_option.png + :align: center + + *Generating a sweep file to run multiple simulations.* + + +Running the application +----------------------- + +The main entry point to the various modules is the `plate_simulation.ui.json `_ +file. The ``ui.json`` serves a dual purpose: (1) rendering a user-interface in +Geoscience ANALYST and (2) storing the input parameters chosen by the user for the +program to run. See the `UIJson documentation `_ +for more information about the ui.json interface. + +Access the user-interface from the Geoscience ANALYST Pro Geophysics menu. + +.. figure:: /plate-simulation/images/methodology/analyst_geophysics_menu.png + :align: center + :width: 800 -The application can also be run from the command line if all required fields in the ui.json are provided. -This is useful for more advanced users wanting to automate the mesh creation process or re-run an existing mesh with different parameters. +The application can also be run from the command line if all required fields in +the ui.json are provided. This approach is useful for advanced users who want to +automate the mesh creation process or re-run an existing mesh with different parameters. To run the application from the command line, use the following command in a Conda Prompt: From b43c8667128ba05bc13d34d24e3492dd5202bf56 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Tue, 24 Feb 2026 12:47:01 -0800 Subject: [PATCH 02/16] Edit more docs --- docs/_toc.yml | 8 +- docs/conf.py | 1 + .../analyst_geophysics_menu.png | Bin docs/intro.md | 33 ++++- .../images/sweep/sweep_uijson.png | Bin 26466 -> 24724 bytes docs/plate-simulation/index.rst | 24 ---- docs/plate-simulation/match.rst | 30 +++++ .../{usage.rst => simulation.rst} | 124 ++++++++---------- docs/plate-simulation/sweep.rst | 31 ++++- 9 files changed, 145 insertions(+), 106 deletions(-) rename docs/{plate-simulation/images/methodology => images}/analyst_geophysics_menu.png (100%) delete mode 100644 docs/plate-simulation/index.rst create mode 100644 docs/plate-simulation/match.rst rename docs/plate-simulation/{usage.rst => simulation.rst} (80%) diff --git a/docs/_toc.yml b/docs/_toc.yml index 5686cb83f..14070c931 100644 --- a/docs/_toc.yml +++ b/docs/_toc.yml @@ -34,10 +34,8 @@ chapters: - file: case_studies/Forrestania/python_code/unconstrained_gravity_inv_training - file: case_studies/Forrestania/python_code/unconstrained_magnetics_inv_training - file: case_studies/Forrestania/python_code/joint_grav_mag -- file: plate-simulation/index +- file: plate-simulation/simulation sections: - - file: plate-simulation/usage - title: Basic Usage - - file: plate-simulation/methodology - title: Methodology + - file: plate-simulation/sweep + - file: plate-simulation/match - file: THIRD_PARTY_SOFTWARE diff --git a/docs/conf.py b/docs/conf.py index 2f18464f2..ed45e1180 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -42,6 +42,7 @@ exclude_patterns = [] todo_include_todos = True + # -- Options for auto-doc ---------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html#module-sphinx.ext.autodoc diff --git a/docs/plate-simulation/images/methodology/analyst_geophysics_menu.png b/docs/images/analyst_geophysics_menu.png similarity index 100% rename from docs/plate-simulation/images/methodology/analyst_geophysics_menu.png rename to docs/images/analyst_geophysics_menu.png diff --git a/docs/intro.md b/docs/intro.md index 83659657f..2407d34ea 100644 --- a/docs/intro.md +++ b/docs/intro.md @@ -1,16 +1,45 @@ # About -This document contains training material for geophysical inversions using [SimPEG](https://simpeg.xyz/) and [Geoscience ANALYST](https://www.mirageoscience.com/mining-industry-software/geoscience-analyst/). +This document contains training material for geophysical forward modeling and inversions using [SimPEG](https://simpeg.xyz/) and [Geoscience ANALYST](https://www.mirageoscience.com/mining-industry-software/geoscience-analyst/). ```{image} ./images/ore_body.png :width: 500px ``` -# Table of content + +# Table of contents ```{tableofcontents} ``` +# Running the applications + +The main entry point to the various modules are the [*.ui.json](https://github.com/MiraGeoscience/simpeg-drivers/blob/develop/simpeg_drivers-assets/uijson) +files. The ``ui.json`` serves a dual purpose: + +(1) rendering a user-interface in Geoscience ANALYST + +(2) storing the input parameters chosen by the user for the program to run. See the [UIJson documentation](https://mirageoscience-geoh5py.readthedocs-hosted.com/en/latest/content/uijson_format/usage.html) +for more information about the ui.json interface. + +The various user-interfaces can be accessed from the Geoscience ANALYST Pro Geophysics menu. + +```{image} ./images/analyst_geophysics_menu.png +:width: 500px +``` + +The application can also be run from command line if all required fields in +the ui.json are provided. This approach is useful for advanced users who want to +automate the mesh creation process or re-run an existing mesh with different parameters. + +To run any of the applications, assuming a valid Conda environment, use the following command: + +``conda activate simpeg-drivers`` + +``python -m simpeg-drivers.driver [YOUR.ui.json]`` + +where ``[YOUR.ui.json]`` is the path to the input ui.json file on disk. + # References diff --git a/docs/plate-simulation/images/sweep/sweep_uijson.png b/docs/plate-simulation/images/sweep/sweep_uijson.png index c9c0a0210c6cfc7cb212093f6373a881b43573d2..6a3bff5268e5d9b64716188af8d91b1f8e803cd4 100644 GIT binary patch literal 24724 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 Z7%8mq=p8ZA2EQZ#Gte>8F4D4z_zw>K)Y1R| literal 26466 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 -and `SimPEG `_ projects to create a refined octree mesh and -simulate data over the parameterized model. The mesh, model and simulation -details are parameterized in a ui.json file that can be rendered in -`Geoscience ANALYST Pro `_. - -.. figure:: /images/plate-simulation/index.png - :align: center - :width: 100% - -Two other applications are also available to assist users in finding the best plate parameters to match observed data. The sweep application allows users to run a batch of simulations over a range of plate parameters, while the matching application uses an optimization algorithm to find the best fit between simulated and observed data. - -Content: - -- :ref:`Basic Usage ` -- :ref:`Sweep (batch) simulations ` -- :ref:`Plate Matching ` diff --git a/docs/plate-simulation/match.rst b/docs/plate-simulation/match.rst new file mode 100644 index 000000000..cde3eb136 --- /dev/null +++ b/docs/plate-simulation/match.rst @@ -0,0 +1,30 @@ +.. _plate_simulation_match: + +Plate Matching +============== + +The Plate Matching module provides a user interface for querying a database of plate simulations to find the simulation that best matches a set of user-defined criteria. + +Interface +--------- + +.. figure:: /plate-simulation/images/sweep/sweep_uijson.png + :align: center + :width: 80% + + *Rendered user-interface in Geoscience ANALYST.* + +Inputs +^^^^^^ + +- **A** + +Methodology +----------- + +Something + + +Tutorial +-------- +To be added. diff --git a/docs/plate-simulation/usage.rst b/docs/plate-simulation/simulation.rst similarity index 80% rename from docs/plate-simulation/usage.rst rename to docs/plate-simulation/simulation.rst index 7891edfaf..6e7b6d783 100644 --- a/docs/plate-simulation/usage.rst +++ b/docs/plate-simulation/simulation.rst @@ -1,13 +1,27 @@ -.. _plate_simulation_usage: +.. _plate_simulation_index: -Basic Usage ------------ +Plate Simulation +================ + +The plate-simulation application is a tool for simulating geophysical data over +a simple two-layer earth model with plate(s). It relies on the +`discretize `_ +and `SimPEG `_ projects to create a refined octree mesh and +simulate data over the parameterized model. The mesh, model and simulation +details are parameterized in a ui.json file that can be rendered in +`Geoscience ANALYST Pro `_. + +.. figure:: /plate-simulation/images/index.png + :align: center + :width: 50% + + +Interface +========= Simulating geophysical data from a physical property model requires three things: a computational mesh, a discretization of the model within that mesh, and a means -to simulate the data. Plate simulation relies on `discretize `_ -for octree mesh creation and `SimPEG `_ for finite volume -based forward modeling. Plate simulation includes a module for generating a simple +to simulate the data. Plate simulation includes a module for generating a simple two-layer model with embedded plate anomalies within octree meshes. This section discusses all three of these components, their interface exposed by the ui.json file, and the storage of results. @@ -18,35 +32,6 @@ and the storage of results. *Merged images of both tabs of the ui.json rendered interface.* -.. contents:: - -.. toctree:: - :maxdepth: 3 - - -Octree Mesh ------------ - -To accurately simulate the earth model, the mesh must be refined in key areas -while remaining coarse enough elsewhere to efficiently simulate data. Plate -simulation includes refinements at the earth-air interface, the transmitter and -receiver sites, and on the surface of plates. - -.. figure:: /plate-simulation/images/methodology/mesh/refinement.png - :align: center - :width: 100% - - *Octree mesh refinement for earth-air interface, receiver sites, - and within the mesh.* - -The meshing is controlled by options exposed in the ui.json. These options are -significantly reduced compared with octree creation from `grid-app `_, -as many parameters have been tailored to suit the needs of plate simulation. - -.. figure:: /plate-simulation/images/methodology/mesh/mesh_options.png - :align: center - - *Octree mesh parameters exposed in the ui.json.* Geological Model ---------------- @@ -55,12 +40,12 @@ Plate simulation includes a module for generating plates embedded in a two-layer Earth model within octree meshes. Many permutations of this simple geological scenario result in a complex interface. To simplify this, the discussion is organized into two sub-sections: background (basement and overburden) and plates. +All model values within plate-simulation must be provided in SI units that varies depending on the chosen forward simulation (g/cc, SI or Ohm.m) Background ~~~~~~~~~~ -All model values within plate-simulation must be provided in ohm-metres. The -basement resistivity is actually closer to a halfspace in the sense that it +The basement resistivity is actually closer to a halfspace in the sense that it fills the model anywhere outside of the overburden and plate. Therefore, the basement resistivity should be chosen as an effective resistivity for the whole geological section. This approach is quite reasonable for most applications @@ -115,7 +100,7 @@ and share the same resistivity, size, and orientation. *Model created by choosing three plates spaced at 200m.* -The plate resistivity must be entered in ohm-metres. +The plate resistivity must be entered in SI units (g/cc, SI or Ohm.m). .. figure:: /plate-simulation/images/methodology/model/plate_resistivity_option.png :align: center @@ -228,6 +213,30 @@ and at least one component must be selected to run the simulation. *Simulation options with annotations for required and not required components.* +Octree Mesh +----------- + +To accurately simulate the earth model, the mesh must be refined in key areas +while remaining coarse enough elsewhere to efficiently simulate data. Plate +simulation includes refinements at the earth-air interface, the transmitter and +receiver sites, and on the surface of plates. + +.. figure:: /plate-simulation/images/methodology/mesh/refinement.png + :align: center + :width: 100% + + *Octree mesh refinement for earth-air interface, receiver sites, + and within the mesh.* + +The meshing is controlled by options exposed in the ui.json. These options are +significantly reduced compared with octree creation from `grid-app `_, +as many parameters have been tailored to suit the needs of plate simulation. + +.. figure:: /plate-simulation/images/methodology/mesh/mesh_options.png + :align: center + + *Octree mesh parameters exposed in the ui.json.* + Results ------- @@ -248,39 +257,16 @@ To iterate on the design of experiment, copy the options, edit them, and run aga *Copying the options to run a new simulation.* -To sweep one or more input parameters and run multiple simulations, use the -``generate sweep file`` option to create a file for the `param-sweeps `_ -package. See the param-sweeps README for further details on using that package. - -.. figure:: /plate-simulation/images/methodology/sweep_option.png - :align: center - - *Generating a sweep file to run multiple simulations.* - - -Running the application ------------------------ -The main entry point to the various modules is the `plate_simulation.ui.json `_ -file. The ``ui.json`` serves a dual purpose: (1) rendering a user-interface in -Geoscience ANALYST and (2) storing the input parameters chosen by the user for the -program to run. See the `UIJson documentation `_ -for more information about the ui.json interface. +Advanced Applications +--------------------- -Access the user-interface from the Geoscience ANALYST Pro Geophysics menu. +Two other applications are available to assist users in finding the best plate parameters to match observed data. +The sweep application allows users to run a batch of simulations over a range of plate parameters, while the matching application uses an optimization algorithm to find the best fit between simulated and observed data. -.. figure:: /plate-simulation/images/methodology/analyst_geophysics_menu.png - :align: center - :width: 800 -The application can also be run from the command line if all required fields in -the ui.json are provided. This approach is useful for advanced users who want to -automate the mesh creation process or re-run an existing mesh with different parameters. - -To run the application from the command line, use the following command in a Conda Prompt: - -``conda activate plate-simulation`` - -``python -m plate-simulation.driver input_file.json`` +.. toctree:: + :maxdepth: 1 -where ``input_file.json`` is the path to the input file on disk. + sweep + match diff --git a/docs/plate-simulation/sweep.rst b/docs/plate-simulation/sweep.rst index b00e40b85..e73d44c1e 100644 --- a/docs/plate-simulation/sweep.rst +++ b/docs/plate-simulation/sweep.rst @@ -1,9 +1,14 @@ .. _plate_simulation_batch: -Sweep (batch) Simulations -========================= +Batch Simulations +================= -The Plate Sweep module provides a user interface for generating and running multiple simulations by sweeping one or more of the input parameters. The user can select which parameters to sweep and the range of values for each parameter. The results of each simulation are stored in a ``*.geoh5`` file named with a unique identifier. +The Plate Sweep module provides a user interface for generating and running a batch of simulations by sweeping one or more of the input parameters. The user can select which parameters to sweep and the range of values for each parameter. The results of each simulation are stored in a ``*.geoh5`` file named with a unique identifier. + + + +Interface +--------- .. figure:: /plate-simulation/images/sweep/sweep_uijson.png :align: center @@ -11,7 +16,21 @@ The Plate Sweep module provides a user interface for generating and running mult *Rendered user-interface in Geoscience ANALYST.* -.. contents:: +Inputs +^^^^^^ + +- **Plate simulation**: A Plate Simulation group that contains the input parameters for a single plate simulation, as well as the connection to a SimPEG Forward group. Parameters that are not included in the sweep will be taken from this group and used for all simulations. +- **Output directory**: A directory where the results of each simulation will be stored. Each simulation will be saved in a separate ``*.geoh5`` file named with a unique identifier. The directory is created if it does not exist, otherwise simulations are appended to it. +- **Generate summary file**: A boolean option to generate a summary file in the output directory. The summary file is a ``*.xls`` file that contains the input parameters and results of each simulation, allowing users to easily sort over the range of simulation parameters. +- **Sweep block**: For each the following parameters, users can choose a **starting**, **ending** and **step** value to sweep over a range of values. The application will generate a simulation for each value in the range, while keeping all other parameters constant. + - **Background**: Over-writing the + +Methodology +----------- + +Something + -.. toctree:: - :maxdepth: 3 +Tutorial +-------- +To be added. From 2a3a88aeb45e3e6d0da4c4aa3ecf3b520e9e80df Mon Sep 17 00:00:00 2001 From: dominiquef Date: Tue, 24 Feb 2026 16:30:42 -0800 Subject: [PATCH 03/16] Re-lock --- .../py-3.12-linux-64-dev.conda.lock.yml | 10 +- environments/py-3.12-linux-64.conda.lock.yml | 6 +- .../py-3.12-win-64-dev.conda.lock.yml | 10 +- environments/py-3.12-win-64.conda.lock.yml | 6 +- .../py-3.13-linux-64-dev.conda.lock.yml | 10 +- environments/py-3.13-linux-64.conda.lock.yml | 6 +- .../py-3.13-win-64-dev.conda.lock.yml | 10 +- environments/py-3.13-win-64.conda.lock.yml | 6 +- .../py-3.14-linux-64-dev.conda.lock.yml | 10 +- environments/py-3.14-linux-64.conda.lock.yml | 6 +- .../py-3.14-win-64-dev.conda.lock.yml | 10 +- environments/py-3.14-win-64.conda.lock.yml | 6 +- py-3.12.conda-lock.yml | 206 +++++------ py-3.13.conda-lock.yml | 346 +++++++++--------- py-3.14.conda-lock.yml | 346 +++++++++--------- 15 files changed, 497 insertions(+), 497 deletions(-) diff --git a/environments/py-3.12-linux-64-dev.conda.lock.yml b/environments/py-3.12-linux-64-dev.conda.lock.yml index 050d82869..458cf8d57 100644 --- a/environments/py-3.12-linux-64-dev.conda.lock.yml +++ b/environments/py-3.12-linux-64-dev.conda.lock.yml @@ -98,7 +98,7 @@ dependencies: - jupyter_events=0.12.0=pyhe01879c_0 - jupyter_server=2.17.0=pyhcf101f3_0 - jupyter_server_terminals=0.5.4=pyhcf101f3_0 - - jupyterlab=4.5.4=pyhd8ed1ab_0 + - jupyterlab=4.5.5=pyhd8ed1ab_0 - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 - jupyterlab_server=2.28.0=pyhcf101f3_0 - jupyterlab_widgets=1.1.11=pyhd8ed1ab_0 @@ -177,7 +177,7 @@ dependencies: - ncurses=6.5=h2d0b736_3 - nest-asyncio=1.6.0=pyhd8ed1ab_1 - nodejs=22.6.0=hc19f0b3_1 - - notebook=7.5.3=pyhcf101f3_0 + - notebook=7.5.4=pyhcf101f3_0 - notebook-shim=0.2.4=pyhd8ed1ab_1 - numcodecs=0.15.1=py312hf79963d_1 - numpy=2.4.2=py312h33ff503_1 @@ -234,7 +234,7 @@ dependencies: - rpds-py=0.30.0=py312h868fb18_0 - rtree=1.4.1=pyh11ca60a_0 - scikit-learn=1.8.0=np2py312h3226591_1 - - scipy=1.17.0=py312h54fa4ab_1 + - scipy=1.17.1=py312h54fa4ab_0 - send2trash=2.1.0=pyha191276_1 - setuptools=82.0.0=pyh332efcf_0 - six=1.17.0=pyhe01879c_1 @@ -291,9 +291,9 @@ dependencies: - zstd=1.5.7=hb78ec9c_6 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@fb86adf72fb82ea23c8904a39585982ca8793c52 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@cdbbb07e623a260f0834df7261e06daa254e6b79 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.12-linux-64.conda.lock.yml b/environments/py-3.12-linux-64.conda.lock.yml index b1ce4e5ef..daa2b57af 100644 --- a/environments/py-3.12-linux-64.conda.lock.yml +++ b/environments/py-3.12-linux-64.conda.lock.yml @@ -127,7 +127,7 @@ dependencies: - readline=8.3=h853b02a_0 - rtree=1.4.1=pyh11ca60a_0 - scikit-learn=1.8.0=np2py312h3226591_1 - - scipy=1.17.0=py312h54fa4ab_1 + - scipy=1.17.1=py312h54fa4ab_0 - setuptools=82.0.0=pyh332efcf_0 - six=1.17.0=pyhe01879c_1 - sortedcontainers=2.4.0=pyhd8ed1ab_1 @@ -158,9 +158,9 @@ dependencies: - zstd=1.5.7=hb78ec9c_6 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@fb86adf72fb82ea23c8904a39585982ca8793c52 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@cdbbb07e623a260f0834df7261e06daa254e6b79 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.12-win-64-dev.conda.lock.yml b/environments/py-3.12-win-64-dev.conda.lock.yml index e2773f2a2..780b9338e 100644 --- a/environments/py-3.12-win-64-dev.conda.lock.yml +++ b/environments/py-3.12-win-64-dev.conda.lock.yml @@ -97,7 +97,7 @@ dependencies: - jupyter_events=0.12.0=pyhe01879c_0 - jupyter_server=2.17.0=pyhcf101f3_0 - jupyter_server_terminals=0.5.4=pyhcf101f3_0 - - jupyterlab=4.5.4=pyhd8ed1ab_0 + - jupyterlab=4.5.5=pyhd8ed1ab_0 - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 - jupyterlab_server=2.28.0=pyhcf101f3_0 - jupyterlab_widgets=1.1.11=pyhd8ed1ab_0 @@ -160,7 +160,7 @@ dependencies: - nbformat=5.10.4=pyhd8ed1ab_1 - nest-asyncio=1.6.0=pyhd8ed1ab_1 - nodejs=25.6.1=he453025_0 - - notebook=7.5.3=pyhcf101f3_0 + - notebook=7.5.4=pyhcf101f3_0 - notebook-shim=0.2.4=pyhd8ed1ab_1 - numcodecs=0.15.1=py312hc128f0a_1 - numpy=2.4.2=py312ha72d056_1 @@ -216,7 +216,7 @@ dependencies: - rpds-py=0.30.0=py312hdabe01f_0 - rtree=1.4.1=pyh11ca60a_0 - scikit-learn=1.8.0=np2py312hea30aaf_1 - - scipy=1.17.0=py312h9b3c559_1 + - scipy=1.17.1=py312h9b3c559_0 - send2trash=2.1.0=pyh6dadd2b_1 - setuptools=82.0.0=pyh332efcf_0 - six=1.17.0=pyhe01879c_1 @@ -278,9 +278,9 @@ dependencies: - zstd=1.5.7=h534d264_6 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@fb86adf72fb82ea23c8904a39585982ca8793c52 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@cdbbb07e623a260f0834df7261e06daa254e6b79 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.12-win-64.conda.lock.yml b/environments/py-3.12-win-64.conda.lock.yml index 4d2866c30..8e95c507b 100644 --- a/environments/py-3.12-win-64.conda.lock.yml +++ b/environments/py-3.12-win-64.conda.lock.yml @@ -111,7 +111,7 @@ dependencies: - qhull=2020.2=hc790b64_5 - rtree=1.4.1=pyh11ca60a_0 - scikit-learn=1.8.0=np2py312hea30aaf_1 - - scipy=1.17.0=py312h9b3c559_1 + - scipy=1.17.1=py312h9b3c559_0 - setuptools=82.0.0=pyh332efcf_0 - six=1.17.0=pyhe01879c_1 - sortedcontainers=2.4.0=pyhd8ed1ab_1 @@ -147,9 +147,9 @@ dependencies: - zstd=1.5.7=h534d264_6 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@fb86adf72fb82ea23c8904a39585982ca8793c52 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@cdbbb07e623a260f0834df7261e06daa254e6b79 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.13-linux-64-dev.conda.lock.yml b/environments/py-3.13-linux-64-dev.conda.lock.yml index bbfbfb2b6..98e24089c 100644 --- a/environments/py-3.13-linux-64-dev.conda.lock.yml +++ b/environments/py-3.13-linux-64-dev.conda.lock.yml @@ -98,7 +98,7 @@ dependencies: - jupyter_events=0.12.0=pyhe01879c_0 - jupyter_server=2.17.0=pyhcf101f3_0 - jupyter_server_terminals=0.5.4=pyhcf101f3_0 - - jupyterlab=4.5.4=pyhd8ed1ab_0 + - jupyterlab=4.5.5=pyhd8ed1ab_0 - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 - jupyterlab_server=2.28.0=pyhcf101f3_0 - jupyterlab_widgets=1.1.11=pyhd8ed1ab_0 @@ -176,7 +176,7 @@ dependencies: - ncurses=6.5=h2d0b736_3 - nest-asyncio=1.6.0=pyhd8ed1ab_1 - nodejs=22.6.0=hc19f0b3_1 - - notebook=7.5.3=pyhcf101f3_0 + - notebook=7.5.4=pyhcf101f3_0 - notebook-shim=0.2.4=pyhd8ed1ab_1 - numcodecs=0.15.1=py313h08cd8bf_1 - numpy=2.4.2=py313hf6604e3_1 @@ -233,7 +233,7 @@ dependencies: - rpds-py=0.30.0=py313h843e2db_0 - rtree=1.4.1=pyh11ca60a_0 - scikit-learn=1.8.0=np2py313h16d504d_1 - - scipy=1.17.0=py313h4b8bb8b_1 + - scipy=1.17.1=py313h4b8bb8b_0 - send2trash=2.1.0=pyha191276_1 - setuptools=82.0.0=pyh332efcf_0 - six=1.17.0=pyhe01879c_1 @@ -288,9 +288,9 @@ dependencies: - zstd=1.5.7=hb78ec9c_6 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@fb86adf72fb82ea23c8904a39585982ca8793c52 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@cdbbb07e623a260f0834df7261e06daa254e6b79 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.13-linux-64.conda.lock.yml b/environments/py-3.13-linux-64.conda.lock.yml index e2e3dfa8c..aada879ef 100644 --- a/environments/py-3.13-linux-64.conda.lock.yml +++ b/environments/py-3.13-linux-64.conda.lock.yml @@ -126,7 +126,7 @@ dependencies: - readline=8.3=h853b02a_0 - rtree=1.4.1=pyh11ca60a_0 - scikit-learn=1.8.0=np2py313h16d504d_1 - - scipy=1.17.0=py313h4b8bb8b_1 + - scipy=1.17.1=py313h4b8bb8b_0 - setuptools=82.0.0=pyh332efcf_0 - six=1.17.0=pyhe01879c_1 - sortedcontainers=2.4.0=pyhd8ed1ab_1 @@ -155,9 +155,9 @@ dependencies: - zstd=1.5.7=hb78ec9c_6 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@fb86adf72fb82ea23c8904a39585982ca8793c52 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@cdbbb07e623a260f0834df7261e06daa254e6b79 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.13-win-64-dev.conda.lock.yml b/environments/py-3.13-win-64-dev.conda.lock.yml index a50269bdb..81c46e348 100644 --- a/environments/py-3.13-win-64-dev.conda.lock.yml +++ b/environments/py-3.13-win-64-dev.conda.lock.yml @@ -97,7 +97,7 @@ dependencies: - jupyter_events=0.12.0=pyhe01879c_0 - jupyter_server=2.17.0=pyhcf101f3_0 - jupyter_server_terminals=0.5.4=pyhcf101f3_0 - - jupyterlab=4.5.4=pyhd8ed1ab_0 + - jupyterlab=4.5.5=pyhd8ed1ab_0 - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 - jupyterlab_server=2.28.0=pyhcf101f3_0 - jupyterlab_widgets=1.1.11=pyhd8ed1ab_0 @@ -161,7 +161,7 @@ dependencies: - nbformat=5.10.4=pyhd8ed1ab_1 - nest-asyncio=1.6.0=pyhd8ed1ab_1 - nodejs=25.6.1=he453025_0 - - notebook=7.5.3=pyhcf101f3_0 + - notebook=7.5.4=pyhcf101f3_0 - notebook-shim=0.2.4=pyhd8ed1ab_1 - numcodecs=0.15.1=py313hc90dcd4_1 - numpy=2.4.2=py313hce7ae62_1 @@ -217,7 +217,7 @@ dependencies: - rpds-py=0.30.0=py313hfbe8231_0 - rtree=1.4.1=pyh11ca60a_0 - scikit-learn=1.8.0=np2py313h4ce4a18_1 - - scipy=1.17.0=py313he51e9a2_1 + - scipy=1.17.1=py313he51e9a2_0 - send2trash=2.1.0=pyh6dadd2b_1 - setuptools=82.0.0=pyh332efcf_0 - six=1.17.0=pyhe01879c_1 @@ -277,9 +277,9 @@ dependencies: - zstd=1.5.7=h534d264_6 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@fb86adf72fb82ea23c8904a39585982ca8793c52 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@cdbbb07e623a260f0834df7261e06daa254e6b79 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.13-win-64.conda.lock.yml b/environments/py-3.13-win-64.conda.lock.yml index 7385d9a17..4130ca9d5 100644 --- a/environments/py-3.13-win-64.conda.lock.yml +++ b/environments/py-3.13-win-64.conda.lock.yml @@ -112,7 +112,7 @@ dependencies: - qhull=2020.2=hc790b64_5 - rtree=1.4.1=pyh11ca60a_0 - scikit-learn=1.8.0=np2py313h4ce4a18_1 - - scipy=1.17.0=py313he51e9a2_1 + - scipy=1.17.1=py313he51e9a2_0 - setuptools=82.0.0=pyh332efcf_0 - six=1.17.0=pyhe01879c_1 - sortedcontainers=2.4.0=pyhd8ed1ab_1 @@ -146,9 +146,9 @@ dependencies: - zstd=1.5.7=h534d264_6 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@fb86adf72fb82ea23c8904a39585982ca8793c52 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@cdbbb07e623a260f0834df7261e06daa254e6b79 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.14-linux-64-dev.conda.lock.yml b/environments/py-3.14-linux-64-dev.conda.lock.yml index 1290be754..0cca742c7 100644 --- a/environments/py-3.14-linux-64-dev.conda.lock.yml +++ b/environments/py-3.14-linux-64-dev.conda.lock.yml @@ -98,7 +98,7 @@ dependencies: - jupyter_events=0.12.0=pyhe01879c_0 - jupyter_server=2.17.0=pyhcf101f3_0 - jupyter_server_terminals=0.5.4=pyhcf101f3_0 - - jupyterlab=4.5.4=pyhd8ed1ab_0 + - jupyterlab=4.5.5=pyhd8ed1ab_0 - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 - jupyterlab_server=2.28.0=pyhcf101f3_0 - jupyterlab_widgets=1.1.11=pyhd8ed1ab_0 @@ -176,7 +176,7 @@ dependencies: - ncurses=6.5=h2d0b736_3 - nest-asyncio=1.6.0=pyhd8ed1ab_1 - nodejs=22.6.0=hc19f0b3_1 - - notebook=7.5.3=pyhcf101f3_0 + - notebook=7.5.4=pyhcf101f3_0 - notebook-shim=0.2.4=pyhd8ed1ab_1 - numcodecs=0.15.1=py314ha0b5721_1 - numpy=2.4.2=py314h2b28147_1 @@ -233,7 +233,7 @@ dependencies: - rpds-py=0.30.0=py314h2e6c369_0 - rtree=1.4.1=pyh11ca60a_0 - scikit-learn=1.8.0=np2py314hf09ca88_1 - - scipy=1.17.0=py314hf07bd8e_1 + - scipy=1.17.1=py314hf07bd8e_0 - send2trash=2.1.0=pyha191276_1 - setuptools=82.0.0=pyh332efcf_0 - six=1.17.0=pyhe01879c_1 @@ -289,9 +289,9 @@ dependencies: - zstd=1.5.7=hb78ec9c_6 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@fb86adf72fb82ea23c8904a39585982ca8793c52 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@cdbbb07e623a260f0834df7261e06daa254e6b79 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.14-linux-64.conda.lock.yml b/environments/py-3.14-linux-64.conda.lock.yml index e66d34306..c64a38f2e 100644 --- a/environments/py-3.14-linux-64.conda.lock.yml +++ b/environments/py-3.14-linux-64.conda.lock.yml @@ -126,7 +126,7 @@ dependencies: - readline=8.3=h853b02a_0 - rtree=1.4.1=pyh11ca60a_0 - scikit-learn=1.8.0=np2py314hf09ca88_1 - - scipy=1.17.0=py314hf07bd8e_1 + - scipy=1.17.1=py314hf07bd8e_0 - setuptools=82.0.0=pyh332efcf_0 - six=1.17.0=pyhe01879c_1 - sortedcontainers=2.4.0=pyhd8ed1ab_1 @@ -156,9 +156,9 @@ dependencies: - zstd=1.5.7=hb78ec9c_6 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@fb86adf72fb82ea23c8904a39585982ca8793c52 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@cdbbb07e623a260f0834df7261e06daa254e6b79 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.14-win-64-dev.conda.lock.yml b/environments/py-3.14-win-64-dev.conda.lock.yml index 13b53dbe1..751a9f80a 100644 --- a/environments/py-3.14-win-64-dev.conda.lock.yml +++ b/environments/py-3.14-win-64-dev.conda.lock.yml @@ -97,7 +97,7 @@ dependencies: - jupyter_events=0.12.0=pyhe01879c_0 - jupyter_server=2.17.0=pyhcf101f3_0 - jupyter_server_terminals=0.5.4=pyhcf101f3_0 - - jupyterlab=4.5.4=pyhd8ed1ab_0 + - jupyterlab=4.5.5=pyhd8ed1ab_0 - jupyterlab_pygments=0.3.0=pyhd8ed1ab_2 - jupyterlab_server=2.28.0=pyhcf101f3_0 - jupyterlab_widgets=1.1.11=pyhd8ed1ab_0 @@ -161,7 +161,7 @@ dependencies: - nbformat=5.10.4=pyhd8ed1ab_1 - nest-asyncio=1.6.0=pyhd8ed1ab_1 - nodejs=25.6.1=he453025_0 - - notebook=7.5.3=pyhcf101f3_0 + - notebook=7.5.4=pyhcf101f3_0 - notebook-shim=0.2.4=pyhd8ed1ab_1 - numcodecs=0.15.1=py314hd8fd7ce_1 - numpy=2.4.2=py314h06c3c77_1 @@ -217,7 +217,7 @@ dependencies: - rpds-py=0.30.0=py314h9f07db2_0 - rtree=1.4.1=pyh11ca60a_0 - scikit-learn=1.8.0=np2py314h1b5b07a_1 - - scipy=1.17.0=py314h221f224_1 + - scipy=1.17.1=py314h221f224_0 - send2trash=2.1.0=pyh6dadd2b_1 - setuptools=82.0.0=pyh332efcf_0 - six=1.17.0=pyhe01879c_1 @@ -278,9 +278,9 @@ dependencies: - zstd=1.5.7=h534d264_6 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@fb86adf72fb82ea23c8904a39585982ca8793c52 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@cdbbb07e623a260f0834df7261e06daa254e6b79 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 variables: KMP_WARNINGS: 0 diff --git a/environments/py-3.14-win-64.conda.lock.yml b/environments/py-3.14-win-64.conda.lock.yml index 92ff45224..7933c4835 100644 --- a/environments/py-3.14-win-64.conda.lock.yml +++ b/environments/py-3.14-win-64.conda.lock.yml @@ -112,7 +112,7 @@ dependencies: - qhull=2020.2=hc790b64_5 - rtree=1.4.1=pyh11ca60a_0 - scikit-learn=1.8.0=np2py314h1b5b07a_1 - - scipy=1.17.0=py314h221f224_1 + - scipy=1.17.1=py314h221f224_0 - setuptools=82.0.0=pyh332efcf_0 - six=1.17.0=pyhe01879c_1 - sortedcontainers=2.4.0=pyhd8ed1ab_1 @@ -147,9 +147,9 @@ dependencies: - zstd=1.5.7=h534d264_6 - pip: - geoapps-utils @ git+https://github.com/MiraGeoscience/geoapps-utils.git@fb86adf72fb82ea23c8904a39585982ca8793c52 - - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + - geoh5py @ git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d - grid-apps @ git+https://github.com/MiraGeoscience/grid-apps.git@cdbbb07e623a260f0834df7261e06daa254e6b79 - - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + - mira-simpeg @ git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 variables: KMP_WARNINGS: 0 diff --git a/py-3.12.conda-lock.yml b/py-3.12.conda-lock.yml index c8ac8f548..5ff6a6d73 100644 --- a/py-3.12.conda-lock.yml +++ b/py-3.12.conda-lock.yml @@ -152,7 +152,7 @@ package: dependencies: exceptiongroup: '>=1.0.2' idna: '>=2.8' - python: '' + python: '>=3.10' typing_extensions: '>=4.5' url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda hash: @@ -240,7 +240,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' python-dateutil: '>=2.7.0' python-tzdata: '' url: https://repo.prefix.dev/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda @@ -341,7 +341,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' typing_extensions: '>=4.0.0' url: https://repo.prefix.dev/conda-forge/noarch/async-lru-2.2.0-pyhcf101f3_0.conda hash: @@ -366,7 +366,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda hash: md5: 537296d57ea995666c68c821b00e360b @@ -391,7 +391,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' pytz: '>=2015.7' url: https://repo.prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_0.conda hash: @@ -478,7 +478,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' webencodings: '' url: https://repo.prefix.dev/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda hash: @@ -864,7 +864,7 @@ package: dependencies: __win: '' colorama: '' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/click-8.3.1-pyha7b4d00_1.conda hash: md5: 6cd3ccc98bacfcc92b2bd7f236f01a7e @@ -888,7 +888,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda hash: md5: 61b8078a0905b12529abc622406cb62c @@ -936,7 +936,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda hash: md5: 2da13f2b299d8e1995bafbbe9689a2f7 @@ -1053,7 +1053,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda hash: md5: 4c2a8fef270f6c69591889b93f9f55c1 @@ -1256,7 +1256,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/dill-0.4.1-pyhcf101f3_0.conda hash: md5: 080a808fce955026bf82107d955d32da @@ -1624,7 +1624,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda hash: @@ -1653,7 +1653,7 @@ package: dependencies: hpack: '>=4.1,<5' hyperframe: '>=6.1,<7' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda hash: md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 @@ -1785,7 +1785,7 @@ package: certifi: '' h11: '>=0.16' h2: '>=3,<5' - python: '' + python: '>=3.9' sniffio: 1.* url: https://repo.prefix.dev/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda hash: @@ -1943,7 +1943,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.9' zipp: '>=3.20' url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda hash: @@ -2041,7 +2041,7 @@ package: nest-asyncio: '>=1.4' packaging: '>=22' psutil: '>=5.7' - python: '' + python: '>=3.10' pyzmq: '>=25' tornado: '>=6.4.1' traitlets: '>=5.4.0' @@ -2087,7 +2087,7 @@ package: matplotlib-inline: '>=0.1.5' prompt-toolkit: '>=3.0.41,<3.1.0' pygments: '>=2.11.0' - python: '' + python: '>=3.11' stack_data: '>=0.6.0' traitlets: '>=5.13.0' typing_extensions: '>=4.6' @@ -2280,7 +2280,7 @@ package: platform: win-64 dependencies: markupsafe: '>=2.0' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda hash: md5: 04558c96691bed63104678757beb4f8d @@ -2354,7 +2354,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda hash: md5: cd2214824e36b0180141d422aba01938 @@ -2384,7 +2384,7 @@ package: dependencies: attrs: '>=22.2.0' jsonschema-specifications: '>=2023.3.6' - python: '' + python: '>=3.10' referencing: '>=0.28.4' rpds-py: '>=0.25.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda @@ -2411,7 +2411,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' referencing: '>=0.31.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda hash: @@ -2488,7 +2488,7 @@ package: jupyter_server: '' nodejs: '>=20' platformdirs: '>=4.2.2' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-book-2.1.2-pyhcf101f3_0.conda hash: md5: e1b35482145a0ad4ff458d5803ebb158 @@ -2516,7 +2516,7 @@ package: dependencies: importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.3.0-pyhcf101f3_0.conda hash: md5: 62b7c96c6cd77f8173cc5cada6a9acaa @@ -2546,7 +2546,7 @@ package: platform: win-64 dependencies: jupyter_core: '>=5.1' - python: '' + python: '>=3.10' python-dateutil: '>=2.8.2' pyzmq: '>=25.0' tornado: '>=6.4.1' @@ -2579,7 +2579,7 @@ package: dependencies: __win: '' platformdirs: '>=2.5' - python: '' + python: '>=3.10' pywin32: '' traitlets: '>=5.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda @@ -2615,7 +2615,7 @@ package: dependencies: jsonschema-with-format-nongpl: '>=4.18.0' packaging: '' - python: '' + python: '>=3.9' python-json-logger: '>=2.0.4' pyyaml: '>=5.3' referencing: '' @@ -2675,7 +2675,7 @@ package: overrides: '>=5.0' packaging: '>=22.0' prometheus_client: '>=0.9' - python: '' + python: '>=3.10' pyzmq: '>=24' send2trash: '>=1.8.2' terminado: '>=0.8.3' @@ -2706,7 +2706,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' terminado: '>=0.8.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda hash: @@ -2715,7 +2715,7 @@ package: category: dev optional: true - name: jupyterlab - version: 4.5.4 + version: 4.5.5 manager: conda platform: linux-64 dependencies: @@ -2734,14 +2734,14 @@ package: tomli: '>=1.2.2' tornado: '>=6.2.0' traitlets: '' - url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.5.4-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.5.5-pyhd8ed1ab_0.conda hash: - md5: b555f252a0796e00ce9d8ec318196da7 - sha256: 393286d44caf54ff321306be88d3f5b926b0a7b87cc34ae10dd94da71a572008 + md5: c4b96d937d1b03203c00fed92e713cd1 + sha256: 53705b629a27cc91600f99b70c39181bbc428cdbc70f22aa40cea21e9fa6d560 category: dev optional: true - name: jupyterlab - version: 4.5.4 + version: 4.5.5 manager: conda platform: win-64 dependencies: @@ -2760,10 +2760,10 @@ package: tomli: '>=1.2.2' tornado: '>=6.2.0' traitlets: '' - url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.5.4-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.5.5-pyhd8ed1ab_0.conda hash: - md5: b555f252a0796e00ce9d8ec318196da7 - sha256: 393286d44caf54ff321306be88d3f5b926b0a7b87cc34ae10dd94da71a572008 + md5: c4b96d937d1b03203c00fed92e713cd1 + sha256: 53705b629a27cc91600f99b70c39181bbc428cdbc70f22aa40cea21e9fa6d560 category: dev optional: true - name: jupyterlab_pygments @@ -2822,7 +2822,7 @@ package: jsonschema: '>=4.18' jupyter_server: '>=1.21,<3' packaging: '>=21.3' - python: '' + python: '>=3.10' requests: '>=2.31' url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda hash: @@ -4424,7 +4424,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda hash: @@ -4674,7 +4674,7 @@ package: packaging: '' pandocfilters: '>=1.4.1' pygments: '>=2.4.1' - python: '' + python: '>=3.10' traitlets: '>=5.1' url: https://repo.prefix.dev/conda-forge/noarch/nbconvert-core-7.16.6-pyhcf101f3_1.conda hash: @@ -4808,39 +4808,39 @@ package: category: dev optional: true - name: notebook - version: 7.5.3 + version: 7.5.4 manager: conda platform: linux-64 dependencies: importlib_resources: '>=5.0' jupyter_server: '>=2.4.0,<3' - jupyterlab: '>=4.5.3,<4.6' + jupyterlab: '>=4.5.5,<4.6' jupyterlab_server: '>=2.28.0,<3' notebook-shim: '>=0.2,<0.3' python: '' tornado: '>=6.2.0' - url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.5.3-pyhcf101f3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.5.4-pyhcf101f3_0.conda hash: - md5: 94a5f0cee51b6b0ffdcad0af6db0af18 - sha256: 014cf291843861b20cf84a89e8450f0dd13ad1e6d2ab30c56ae43b81f2dca233 + md5: ad642622e20bd5dbe4157d35ddf1db47 + sha256: c25d4c77747af7598c843b626c051e93ea3d8d0a7782bae1c48ba8f4dd1961d4 category: dev optional: true - name: notebook - version: 7.5.3 + version: 7.5.4 manager: conda platform: win-64 dependencies: importlib_resources: '>=5.0' jupyter_server: '>=2.4.0,<3' - jupyterlab: '>=4.5.3,<4.6' + jupyterlab: '>=4.5.5,<4.6' jupyterlab_server: '>=2.28.0,<3' notebook-shim: '>=0.2,<0.3' - python: '' + python: '>=3.10' tornado: '>=6.2.0' - url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.5.3-pyhcf101f3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.5.4-pyhcf101f3_0.conda hash: - md5: 94a5f0cee51b6b0ffdcad0af6db0af18 - sha256: 014cf291843861b20cf84a89e8450f0dd13ad1e6d2ab30c56ae43b81f2dca233 + md5: ad642622e20bd5dbe4157d35ddf1db47 + sha256: c25d4c77747af7598c843b626c051e93ea3d8d0a7782bae1c48ba8f4dd1961d4 category: dev optional: true - name: notebook-shim @@ -5053,7 +5053,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.8' url: https://repo.prefix.dev/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda hash: md5: b76541e68fea4d511b1ac46a28dcd2c6 @@ -5160,7 +5160,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda hash: md5: 97c1ce2fffa1209e7afb432810ec6e12 @@ -5304,7 +5304,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda hash: md5: 4fefefb892ce9cc1539405bec2f1a6cd @@ -5328,7 +5328,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda hash: md5: d7585b6550ad04c8c5e21097ada2888e @@ -5496,7 +5496,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda hash: md5: 12c566707c80111f9799308d9e265aef @@ -5527,7 +5527,7 @@ package: dependencies: annotated-types: '>=0.6.0' pydantic-core: 2.41.5 - python: '' + python: '>=3.10' typing-extensions: '>=4.6.1' typing-inspection: '>=0.4.2' typing_extensions: '>=4.14.1' @@ -5662,7 +5662,7 @@ package: isort: '>=5,!=5.13,<9' mccabe: '>=0.6,<0.8' platformdirs: '>=2.2' - python: '' + python: '>=3.10' tomli: '>=1.1' tomlkit: '>=0.10.1' url: https://repo.prefix.dev/conda-forge/noarch/pylint-4.0.5-pyhcf101f3_0.conda @@ -5720,7 +5720,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda hash: md5: 3687cc0b82a8b4c17e1f0eb7e47163d5 @@ -5784,7 +5784,7 @@ package: packaging: '>=22' pluggy: '>=1.5,<2' pygments: '>=2.7.2' - python: '' + python: '>=3.10' tomli: '>=1' url: https://repo.prefix.dev/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda hash: @@ -5815,7 +5815,7 @@ package: coverage: '>=7.10.6' pluggy: '>=1.2' pytest: '>=7' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda hash: md5: 6891acad5e136cb62a8c2ed2679d6528 @@ -5893,7 +5893,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.9' six: '>=1.5' url: https://repo.prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda hash: @@ -5918,7 +5918,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda hash: md5: 23029aae904a2ba587daba708208012f @@ -6277,7 +6277,7 @@ package: platform: win-64 dependencies: attrs: '>=22.2.0' - python: '' + python: '>=3.10' rpds-py: '>=0.7.0' typing_extensions: '>=4.4.0' url: https://repo.prefix.dev/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda @@ -6310,7 +6310,7 @@ package: certifi: '>=2017.4.17' charset-normalizer: '>=2,<4' idna: '>=2.5,<4' - python: '' + python: '>=3.10' urllib3: '>=1.21.1,<3' url: https://repo.prefix.dev/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda hash: @@ -6387,7 +6387,7 @@ package: platform: win-64 dependencies: lark: '>=1.2.2' - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda hash: md5: 7234f99325263a5af6d4cd195035e8f2 @@ -6493,7 +6493,7 @@ package: category: main optional: false - name: scipy - version: 1.17.0 + version: 1.17.1 manager: conda platform: linux-64 dependencies: @@ -6508,14 +6508,14 @@ package: numpy: '>=1.25.2' python: '>=3.12,<3.13.0a0' python_abi: 3.12.* - url: https://repo.prefix.dev/conda-forge/linux-64/scipy-1.17.0-py312h54fa4ab_1.conda + url: https://repo.prefix.dev/conda-forge/linux-64/scipy-1.17.1-py312h54fa4ab_0.conda hash: - md5: 828eb07c4c87c38ed8c6560c25893280 - sha256: 5b296faf6f5ff90d9ea3f6b16ff38fe2b8fe81c7c45b5e3a78b48887cca881d1 + md5: 3e38daeb1fb05a95656ff5af089d2e4c + sha256: e3ad577361d67f6c078a6a7a3898bf0617b937d44dc4ccd57aa3336f2b5778dd category: main optional: false - name: scipy - version: 1.17.0 + version: 1.17.1 manager: conda platform: win-64 dependencies: @@ -6528,10 +6528,10 @@ package: ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/scipy-1.17.0-py312h9b3c559_1.conda + url: https://repo.prefix.dev/conda-forge/win-64/scipy-1.17.1-py312h9b3c559_0.conda hash: - md5: da72702707bdb757ad57637815f165b1 - sha256: 0f90709b8b8ffa3f3f8a3e023154be77e3fe7dbeda3de3d62479c862111761f2 + md5: bf4d70d225c530053128bae8d2531516 + sha256: bdb2437aa5db3a00c5e69808f9d1a695bbe74b4758ffdf2e79777c8e11680443 category: main optional: false - name: send2trash @@ -6553,7 +6553,7 @@ package: platform: win-64 dependencies: __win: '' - python: '' + python: '>=3.10' pywin32: '' url: https://repo.prefix.dev/conda-forge/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda hash: @@ -6602,7 +6602,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda hash: md5: 3339e3b65d58accf4ca4fb8748ab16b3 @@ -6994,7 +6994,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda hash: md5: f88bb644823094f436792f80fba3207e @@ -7022,7 +7022,7 @@ package: platform: win-64 dependencies: __win: '' - python: '' + python: '>=3.10' pywinpty: '>=1.1.0' tornado: '>=6.1.0' url: https://repo.prefix.dev/conda-forge/noarch/terminado-0.18.1-pyh6dadd2b_1.conda @@ -7126,7 +7126,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda hash: md5: 72e780e9aa2d0a3295f59b1874e3768b @@ -7232,7 +7232,7 @@ package: dependencies: __win: '' colorama: '' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/tqdm-4.67.3-pyha7b4d00_0.conda hash: md5: af77160f8428924c17db94e04aa69409 @@ -7356,7 +7356,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda hash: md5: 0caa1af407ecff61170c9437a808404d @@ -7957,7 +7957,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda hash: md5: 30cd29cb87d819caead4d55184c1d115 @@ -8039,7 +8039,7 @@ package: manager: pip platform: linux-64 dependencies: - geoh5py: 0.13.0a3.dev5+9e0a86e5 + geoh5py: 0.12.1rc2.dev221+e83842e8 matplotlib: '>=3.10.0,<3.11.0' numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' @@ -8057,7 +8057,7 @@ package: manager: pip platform: win-64 dependencies: - geoh5py: 0.13.0a3.dev5+9e0a86e5 + geoh5py: 0.12.1rc2.dev221+e83842e8 matplotlib: '>=3.10.0,<3.11.0' numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' @@ -8071,7 +8071,7 @@ package: category: main optional: false - name: geoh5py - version: 0.13.0a3.dev5+9e0a86e5 + version: 0.12.1rc2.dev221+e83842e8 manager: pip platform: linux-64 dependencies: @@ -8079,16 +8079,16 @@ package: numpy: '>=2.4.0,<2.5.0' pillow: '>=12.1.0,<12.2.0' pydantic: '>=2.12.0,<2.13.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + url: git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d hash: - sha256: 9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + sha256: e83842e8acc2dd8e4c4353587b5314bb03714d9d source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + url: git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d category: main optional: false - name: geoh5py - version: 0.13.0a3.dev5+9e0a86e5 + version: 0.12.1rc2.dev221+e83842e8 manager: pip platform: win-64 dependencies: @@ -8096,12 +8096,12 @@ package: numpy: '>=2.4.0,<2.5.0' pillow: '>=12.1.0,<12.2.0' pydantic: '>=2.12.0,<2.13.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + url: git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d hash: - sha256: 9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + sha256: e83842e8acc2dd8e4c4353587b5314bb03714d9d source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + url: git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d category: main optional: false - name: grid-apps @@ -8111,7 +8111,7 @@ package: dependencies: discretize: '>=0.12.0,<0.13.0' geoapps-utils: 0.7.0a2 - geoh5py: 0.13.0a3.dev5+9e0a86e5 + geoh5py: 0.12.1rc2.dev221+e83842e8 numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' @@ -8130,7 +8130,7 @@ package: dependencies: discretize: '>=0.12.0,<0.13.0' geoapps-utils: 0.7.0a2 - geoh5py: 0.13.0a3.dev5+9e0a86e5 + geoh5py: 0.12.1rc2.dev221+e83842e8 numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' @@ -8143,46 +8143,46 @@ package: category: main optional: false - name: mira-simpeg - version: 0.25.0.1a1 + version: 0.25.0.1a2.dev6+g7297f79aa manager: pip platform: linux-64 dependencies: discretize: '>=0.11' geoana: '>=0.7.0' - geoh5py: '>=0.13.0a2,<0.14.0' + geoh5py: '>=0.12.0' libdlf: '*' matplotlib: '*' numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' typing-extensions: '*' - url: git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + url: git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 hash: - sha256: 5944609b7decc673b510b7052eff0e6ecc46d1ff + sha256: 7297f79aacb30d6149ac535da0ecd148efdb60d0 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + url: git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 category: main optional: false - name: mira-simpeg - version: 0.25.0.1a1 + version: 0.25.0.1a2.dev6+g7297f79aa manager: pip platform: win-64 dependencies: discretize: '>=0.11' geoana: '>=0.7.0' - geoh5py: '>=0.13.0a2,<0.14.0' + geoh5py: '>=0.12.0' libdlf: '*' matplotlib: '*' numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' typing-extensions: '*' - url: git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + url: git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 hash: - sha256: 5944609b7decc673b510b7052eff0e6ecc46d1ff + sha256: 7297f79aacb30d6149ac535da0ecd148efdb60d0 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + url: git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 category: main optional: false diff --git a/py-3.13.conda-lock.yml b/py-3.13.conda-lock.yml index cc79bdc24..ba9262219 100644 --- a/py-3.13.conda-lock.yml +++ b/py-3.13.conda-lock.yml @@ -137,7 +137,7 @@ package: dependencies: exceptiongroup: '>=1.0.2' idna: '>=2.8' - python: '' + python: '>=3.10' typing_extensions: '>=4.5' url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda hash: @@ -152,7 +152,7 @@ package: dependencies: exceptiongroup: '>=1.0.2' idna: '>=2.8' - python: '' + python: '>=3.10' typing_extensions: '>=4.5' url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda hash: @@ -226,7 +226,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' python-dateutil: '>=2.7.0' python-tzdata: '' url: https://repo.prefix.dev/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda @@ -240,7 +240,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' python-dateutil: '>=2.7.0' python-tzdata: '' url: https://repo.prefix.dev/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda @@ -328,7 +328,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' typing_extensions: '>=4.0.0' url: https://repo.prefix.dev/conda-forge/noarch/async-lru-2.2.0-pyhcf101f3_0.conda hash: @@ -341,7 +341,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' typing_extensions: '>=4.0.0' url: https://repo.prefix.dev/conda-forge/noarch/async-lru-2.2.0-pyhcf101f3_0.conda hash: @@ -354,7 +354,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda hash: md5: 537296d57ea995666c68c821b00e360b @@ -366,7 +366,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda hash: md5: 537296d57ea995666c68c821b00e360b @@ -378,7 +378,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' pytz: '>=2015.7' url: https://repo.prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_0.conda hash: @@ -391,7 +391,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' pytz: '>=2015.7' url: https://repo.prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_0.conda hash: @@ -465,7 +465,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' webencodings: '' url: https://repo.prefix.dev/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda hash: @@ -478,7 +478,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' webencodings: '' url: https://repo.prefix.dev/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda hash: @@ -850,7 +850,7 @@ package: platform: linux-64 dependencies: __unix: '' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda hash: md5: ea8a6c3256897cc31263de9f455e25d9 @@ -864,7 +864,7 @@ package: dependencies: __win: '' colorama: '' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/click-8.3.1-pyha7b4d00_1.conda hash: md5: 6cd3ccc98bacfcc92b2bd7f236f01a7e @@ -876,7 +876,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda hash: md5: 61b8078a0905b12529abc622406cb62c @@ -888,7 +888,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda hash: md5: 61b8078a0905b12529abc622406cb62c @@ -924,7 +924,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda hash: md5: 2da13f2b299d8e1995bafbbe9689a2f7 @@ -936,7 +936,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda hash: md5: 2da13f2b299d8e1995bafbbe9689a2f7 @@ -1041,7 +1041,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda hash: md5: 4c2a8fef270f6c69591889b93f9f55c1 @@ -1053,7 +1053,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda hash: md5: 4c2a8fef270f6c69591889b93f9f55c1 @@ -1244,7 +1244,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/dill-0.4.1-pyhcf101f3_0.conda hash: md5: 080a808fce955026bf82107d955d32da @@ -1256,7 +1256,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/dill-0.4.1-pyhcf101f3_0.conda hash: md5: 080a808fce955026bf82107d955d32da @@ -1271,7 +1271,7 @@ package: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.23,<3' + numpy: '>=1.22.4' python: '' python_abi: 3.13.* scipy: '>=1.12' @@ -1286,7 +1286,7 @@ package: manager: conda platform: win-64 dependencies: - numpy: '>=1.23,<3' + numpy: '>=1.22.4' python: '' python_abi: 3.13.* scipy: '>=1.12' @@ -1575,7 +1575,7 @@ package: libdlf: '' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.23,<3' + numpy: '>=1.22' python: '' python_abi: 3.13.* scipy: '>=1.12' @@ -1591,7 +1591,7 @@ package: platform: win-64 dependencies: libdlf: '' - numpy: '>=1.23,<3' + numpy: '>=1.22' python: '' python_abi: 3.13.* scipy: '>=1.12' @@ -1609,7 +1609,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda hash: @@ -1622,7 +1622,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda hash: @@ -1637,7 +1637,7 @@ package: dependencies: hpack: '>=4.1,<5' hyperframe: '>=6.1,<7' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda hash: md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 @@ -1651,7 +1651,7 @@ package: dependencies: hpack: '>=4.1,<5' hyperframe: '>=6.1,<7' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda hash: md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 @@ -1766,7 +1766,7 @@ package: certifi: '' h11: '>=0.16' h2: '>=3,<5' - python: '' + python: '>=3.9' sniffio: 1.* url: https://repo.prefix.dev/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda hash: @@ -1783,7 +1783,7 @@ package: certifi: '' h11: '>=0.16' h2: '>=3,<5' - python: '' + python: '>=3.9' sniffio: 1.* url: https://repo.prefix.dev/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda hash: @@ -1928,7 +1928,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.9' zipp: '>=3.20' url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda hash: @@ -1941,7 +1941,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.9' zipp: '>=3.20' url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda hash: @@ -2014,7 +2014,7 @@ package: nest-asyncio: '>=1.4' packaging: '>=22' psutil: '>=5.7' - python: '' + python: '>=3.10' pyzmq: '>=25' tornado: '>=6.4.1' traitlets: '>=5.4.0' @@ -2039,7 +2039,7 @@ package: nest-asyncio: '>=1.4' packaging: '>=22' psutil: '>=5.7' - python: '' + python: '>=3.10' pyzmq: '>=25' tornado: '>=6.4.1' traitlets: '>=5.4.0' @@ -2062,7 +2062,7 @@ package: pexpect: '>4.3' prompt-toolkit: '>=3.0.41,<3.1.0' pygments: '>=2.11.0' - python: '' + python: '>=3.11' stack_data: '>=0.6.0' traitlets: '>=5.13.0' typing_extensions: '>=4.6' @@ -2085,7 +2085,7 @@ package: matplotlib-inline: '>=0.1.5' prompt-toolkit: '>=3.0.41,<3.1.0' pygments: '>=2.11.0' - python: '' + python: '>=3.11' stack_data: '>=0.6.0' traitlets: '>=5.13.0' typing_extensions: '>=4.6' @@ -2265,7 +2265,7 @@ package: platform: linux-64 dependencies: markupsafe: '>=2.0' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda hash: md5: 04558c96691bed63104678757beb4f8d @@ -2278,7 +2278,7 @@ package: platform: win-64 dependencies: markupsafe: '>=2.0' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda hash: md5: 04558c96691bed63104678757beb4f8d @@ -2340,7 +2340,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda hash: md5: cd2214824e36b0180141d422aba01938 @@ -2352,7 +2352,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda hash: md5: cd2214824e36b0180141d422aba01938 @@ -2366,7 +2366,7 @@ package: dependencies: attrs: '>=22.2.0' jsonschema-specifications: '>=2023.3.6' - python: '' + python: '>=3.10' referencing: '>=0.28.4' rpds-py: '>=0.25.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda @@ -2382,7 +2382,7 @@ package: dependencies: attrs: '>=22.2.0' jsonschema-specifications: '>=2023.3.6' - python: '' + python: '>=3.10' referencing: '>=0.28.4' rpds-py: '>=0.25.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda @@ -2396,7 +2396,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' referencing: '>=0.31.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda hash: @@ -2409,7 +2409,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' referencing: '>=0.31.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda hash: @@ -2469,7 +2469,7 @@ package: jupyter_server: '' nodejs: '>=20' platformdirs: '>=4.2.2' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-book-2.1.2-pyhcf101f3_0.conda hash: md5: e1b35482145a0ad4ff458d5803ebb158 @@ -2486,7 +2486,7 @@ package: jupyter_server: '' nodejs: '>=20' platformdirs: '>=4.2.2' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-book-2.1.2-pyhcf101f3_0.conda hash: md5: e1b35482145a0ad4ff458d5803ebb158 @@ -2500,7 +2500,7 @@ package: dependencies: importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.3.0-pyhcf101f3_0.conda hash: md5: 62b7c96c6cd77f8173cc5cada6a9acaa @@ -2514,7 +2514,7 @@ package: dependencies: importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.3.0-pyhcf101f3_0.conda hash: md5: 62b7c96c6cd77f8173cc5cada6a9acaa @@ -2527,7 +2527,7 @@ package: platform: linux-64 dependencies: jupyter_core: '>=5.1' - python: '' + python: '>=3.10' python-dateutil: '>=2.8.2' pyzmq: '>=25.0' tornado: '>=6.4.1' @@ -2544,7 +2544,7 @@ package: platform: win-64 dependencies: jupyter_core: '>=5.1' - python: '' + python: '>=3.10' python-dateutil: '>=2.8.2' pyzmq: '>=25.0' tornado: '>=6.4.1' @@ -2577,7 +2577,7 @@ package: dependencies: __win: '' platformdirs: '>=2.5' - python: '' + python: '>=3.10' pywin32: '' traitlets: '>=5.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda @@ -2593,7 +2593,7 @@ package: dependencies: jsonschema-with-format-nongpl: '>=4.18.0' packaging: '' - python: '' + python: '>=3.9' python-json-logger: '>=2.0.4' pyyaml: '>=5.3' referencing: '' @@ -2613,7 +2613,7 @@ package: dependencies: jsonschema-with-format-nongpl: '>=4.18.0' packaging: '' - python: '' + python: '>=3.9' python-json-logger: '>=2.0.4' pyyaml: '>=5.3' referencing: '' @@ -2643,7 +2643,7 @@ package: overrides: '>=5.0' packaging: '>=22.0' prometheus_client: '>=0.9' - python: '' + python: '>=3.10' pyzmq: '>=24' send2trash: '>=1.8.2' terminado: '>=0.8.3' @@ -2673,7 +2673,7 @@ package: overrides: '>=5.0' packaging: '>=22.0' prometheus_client: '>=0.9' - python: '' + python: '>=3.10' pyzmq: '>=24' send2trash: '>=1.8.2' terminado: '>=0.8.3' @@ -2691,7 +2691,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' terminado: '>=0.8.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda hash: @@ -2704,7 +2704,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' terminado: '>=0.8.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda hash: @@ -2713,7 +2713,7 @@ package: category: dev optional: true - name: jupyterlab - version: 4.5.4 + version: 4.5.5 manager: conda platform: linux-64 dependencies: @@ -2732,14 +2732,14 @@ package: tomli: '>=1.2.2' tornado: '>=6.2.0' traitlets: '' - url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.5.4-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.5.5-pyhd8ed1ab_0.conda hash: - md5: b555f252a0796e00ce9d8ec318196da7 - sha256: 393286d44caf54ff321306be88d3f5b926b0a7b87cc34ae10dd94da71a572008 + md5: c4b96d937d1b03203c00fed92e713cd1 + sha256: 53705b629a27cc91600f99b70c39181bbc428cdbc70f22aa40cea21e9fa6d560 category: dev optional: true - name: jupyterlab - version: 4.5.4 + version: 4.5.5 manager: conda platform: win-64 dependencies: @@ -2758,10 +2758,10 @@ package: tomli: '>=1.2.2' tornado: '>=6.2.0' traitlets: '' - url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.5.4-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.5.5-pyhd8ed1ab_0.conda hash: - md5: b555f252a0796e00ce9d8ec318196da7 - sha256: 393286d44caf54ff321306be88d3f5b926b0a7b87cc34ae10dd94da71a572008 + md5: c4b96d937d1b03203c00fed92e713cd1 + sha256: 53705b629a27cc91600f99b70c39181bbc428cdbc70f22aa40cea21e9fa6d560 category: dev optional: true - name: jupyterlab_pygments @@ -2801,7 +2801,7 @@ package: jsonschema: '>=4.18' jupyter_server: '>=1.21,<3' packaging: '>=21.3' - python: '' + python: '>=3.10' requests: '>=2.31' url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda hash: @@ -2820,7 +2820,7 @@ package: jsonschema: '>=4.18' jupyter_server: '>=1.21,<3' packaging: '>=21.3' - python: '' + python: '>=3.10' requests: '>=2.31' url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda hash: @@ -4248,7 +4248,7 @@ package: libfreetype6: '>=2.14.1' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.23,<3' + numpy: '>=1.23' packaging: '>=20.0' pillow: '>=8' pyparsing: '>=2.3.1' @@ -4275,7 +4275,7 @@ package: kiwisolver: '>=1.3.1' libfreetype: '>=2.14.1' libfreetype6: '>=2.14.1' - numpy: '>=1.23,<3' + numpy: '>=1.23' packaging: '>=20.0' pillow: '>=8' pyparsing: '>=2.3.1' @@ -4411,7 +4411,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda hash: @@ -4424,7 +4424,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda hash: @@ -4438,7 +4438,7 @@ package: platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' - _openmp_mutex: '>=4.5' + _openmp_mutex: '*' libgcc: '>=14' libstdcxx: '>=14' llvm-openmp: '>=21.1.8' @@ -4520,7 +4520,7 @@ package: libgfortran: '' libgfortran5: '>=14.3.0' liblapack: '>=3.9.0,<4.0a0' - libscotch: '*' + libscotch: '>=7.0.11,<7.0.12.0a0' metis: '>=5.1.0,<5.1.1.0a0' mumps-include: ==5.8.2 url: https://repo.prefix.dev/conda-forge/linux-64/mumps-seq-5.8.2-hc1b3267_2.conda @@ -4647,7 +4647,7 @@ package: packaging: '' pandocfilters: '>=1.4.1' pygments: '>=2.4.1' - python: '' + python: '>=3.10' traitlets: '>=5.1' url: https://repo.prefix.dev/conda-forge/noarch/nbconvert-core-7.16.6-pyhcf101f3_1.conda hash: @@ -4674,7 +4674,7 @@ package: packaging: '' pandocfilters: '>=1.4.1' pygments: '>=2.4.1' - python: '' + python: '>=3.10' traitlets: '>=5.1' url: https://repo.prefix.dev/conda-forge/noarch/nbconvert-core-7.16.6-pyhcf101f3_1.conda hash: @@ -4808,39 +4808,39 @@ package: category: dev optional: true - name: notebook - version: 7.5.3 + version: 7.5.4 manager: conda platform: linux-64 dependencies: importlib_resources: '>=5.0' jupyter_server: '>=2.4.0,<3' - jupyterlab: '>=4.5.3,<4.6' + jupyterlab: '>=4.5.5,<4.6' jupyterlab_server: '>=2.28.0,<3' notebook-shim: '>=0.2,<0.3' - python: '' + python: '>=3.10' tornado: '>=6.2.0' - url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.5.3-pyhcf101f3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.5.4-pyhcf101f3_0.conda hash: - md5: 94a5f0cee51b6b0ffdcad0af6db0af18 - sha256: 014cf291843861b20cf84a89e8450f0dd13ad1e6d2ab30c56ae43b81f2dca233 + md5: ad642622e20bd5dbe4157d35ddf1db47 + sha256: c25d4c77747af7598c843b626c051e93ea3d8d0a7782bae1c48ba8f4dd1961d4 category: dev optional: true - name: notebook - version: 7.5.3 + version: 7.5.4 manager: conda platform: win-64 dependencies: importlib_resources: '>=5.0' jupyter_server: '>=2.4.0,<3' - jupyterlab: '>=4.5.3,<4.6' + jupyterlab: '>=4.5.5,<4.6' jupyterlab_server: '>=2.28.0,<3' notebook-shim: '>=0.2,<0.3' - python: '' + python: '>=3.10' tornado: '>=6.2.0' - url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.5.3-pyhcf101f3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.5.4-pyhcf101f3_0.conda hash: - md5: 94a5f0cee51b6b0ffdcad0af6db0af18 - sha256: 014cf291843861b20cf84a89e8450f0dd13ad1e6d2ab30c56ae43b81f2dca233 + md5: ad642622e20bd5dbe4157d35ddf1db47 + sha256: c25d4c77747af7598c843b626c051e93ea3d8d0a7782bae1c48ba8f4dd1961d4 category: dev optional: true - name: notebook-shim @@ -5041,7 +5041,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.8' url: https://repo.prefix.dev/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda hash: md5: b76541e68fea4d511b1ac46a28dcd2c6 @@ -5053,7 +5053,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.8' url: https://repo.prefix.dev/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda hash: md5: b76541e68fea4d511b1ac46a28dcd2c6 @@ -5068,7 +5068,7 @@ package: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.23,<3' + numpy: '>=1.26.0' python: '' python-dateutil: '>=2.8.2' python_abi: 3.13.* @@ -5083,7 +5083,7 @@ package: manager: conda platform: win-64 dependencies: - numpy: '>=1.23,<3' + numpy: '>=1.26.0' python: '' python-dateutil: '>=2.8.2' python-tzdata: '' @@ -5148,7 +5148,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda hash: md5: 97c1ce2fffa1209e7afb432810ec6e12 @@ -5160,7 +5160,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda hash: md5: 97c1ce2fffa1209e7afb432810ec6e12 @@ -5288,7 +5288,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda hash: md5: 4fefefb892ce9cc1539405bec2f1a6cd @@ -5300,7 +5300,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda hash: md5: 4fefefb892ce9cc1539405bec2f1a6cd @@ -5312,7 +5312,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda hash: md5: d7585b6550ad04c8c5e21097ada2888e @@ -5324,7 +5324,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda hash: md5: d7585b6550ad04c8c5e21097ada2888e @@ -5480,7 +5480,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda hash: md5: 12c566707c80111f9799308d9e265aef @@ -5492,7 +5492,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda hash: md5: 12c566707c80111f9799308d9e265aef @@ -5506,7 +5506,7 @@ package: dependencies: annotated-types: '>=0.6.0' pydantic-core: 2.41.5 - python: '' + python: '>=3.10' typing-extensions: '>=4.6.1' typing-inspection: '>=0.4.2' typing_extensions: '>=4.14.1' @@ -5523,7 +5523,7 @@ package: dependencies: annotated-types: '>=0.6.0' pydantic-core: 2.41.5 - python: '' + python: '>=3.10' typing-extensions: '>=4.6.1' typing-inspection: '>=0.4.2' typing_extensions: '>=4.14.1' @@ -5574,7 +5574,7 @@ package: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' mkl: '>=2025.3.0,<2026.0a0' - numpy: '>=1.23,<3' + numpy: '>=1.22.4' python: '' python_abi: 3.13.* scipy: '>=1.12' @@ -5590,7 +5590,7 @@ package: platform: win-64 dependencies: mkl: '>=2025.3.0,<2026.0a0' - numpy: '>=1.23,<3' + numpy: '>=1.22.4' python: '' python_abi: 3.13.* scipy: '>=1.12' @@ -5638,7 +5638,7 @@ package: isort: '>=5,!=5.13,<9' mccabe: '>=0.6,<0.8' platformdirs: '>=2.2' - python: '' + python: '>=3.10' tomli: '>=1.1' tomlkit: '>=0.10.1' url: https://repo.prefix.dev/conda-forge/noarch/pylint-4.0.5-pyhcf101f3_0.conda @@ -5658,7 +5658,7 @@ package: isort: '>=5,!=5.13,<9' mccabe: '>=0.6,<0.8' platformdirs: '>=2.2' - python: '' + python: '>=3.10' tomli: '>=1.1' tomlkit: '>=0.10.1' url: https://repo.prefix.dev/conda-forge/noarch/pylint-4.0.5-pyhcf101f3_0.conda @@ -5704,7 +5704,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda hash: md5: 3687cc0b82a8b4c17e1f0eb7e47163d5 @@ -5716,7 +5716,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda hash: md5: 3687cc0b82a8b4c17e1f0eb7e47163d5 @@ -5761,7 +5761,7 @@ package: packaging: '>=22' pluggy: '>=1.5,<2' pygments: '>=2.7.2' - python: '' + python: '>=3.10' tomli: '>=1' url: https://repo.prefix.dev/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda hash: @@ -5780,7 +5780,7 @@ package: packaging: '>=22' pluggy: '>=1.5,<2' pygments: '>=2.7.2' - python: '' + python: '>=3.10' tomli: '>=1' url: https://repo.prefix.dev/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda hash: @@ -5796,7 +5796,7 @@ package: coverage: '>=7.10.6' pluggy: '>=1.2' pytest: '>=7' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda hash: md5: 6891acad5e136cb62a8c2ed2679d6528 @@ -5811,7 +5811,7 @@ package: coverage: '>=7.10.6' pluggy: '>=1.2' pytest: '>=7' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda hash: md5: 6891acad5e136cb62a8c2ed2679d6528 @@ -5878,7 +5878,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.9' six: '>=1.5' url: https://repo.prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda hash: @@ -5891,7 +5891,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.9' six: '>=1.5' url: https://repo.prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda hash: @@ -5904,7 +5904,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda hash: md5: 23029aae904a2ba587daba708208012f @@ -5916,7 +5916,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda hash: md5: 23029aae904a2ba587daba708208012f @@ -6260,7 +6260,7 @@ package: platform: linux-64 dependencies: attrs: '>=22.2.0' - python: '' + python: '>=3.10' rpds-py: '>=0.7.0' typing_extensions: '>=4.4.0' url: https://repo.prefix.dev/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda @@ -6275,7 +6275,7 @@ package: platform: win-64 dependencies: attrs: '>=22.2.0' - python: '' + python: '>=3.10' rpds-py: '>=0.7.0' typing_extensions: '>=4.4.0' url: https://repo.prefix.dev/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda @@ -6292,7 +6292,7 @@ package: certifi: '>=2017.4.17' charset-normalizer: '>=2,<4' idna: '>=2.5,<4' - python: '' + python: '>=3.10' urllib3: '>=1.21.1,<3' url: https://repo.prefix.dev/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda hash: @@ -6308,7 +6308,7 @@ package: certifi: '>=2017.4.17' charset-normalizer: '>=2,<4' idna: '>=2.5,<4' - python: '' + python: '>=3.10' urllib3: '>=1.21.1,<3' url: https://repo.prefix.dev/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda hash: @@ -6372,7 +6372,7 @@ package: platform: linux-64 dependencies: lark: '>=1.2.2' - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda hash: md5: 7234f99325263a5af6d4cd195035e8f2 @@ -6385,7 +6385,7 @@ package: platform: win-64 dependencies: lark: '>=1.2.2' - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda hash: md5: 7234f99325263a5af6d4cd195035e8f2 @@ -6459,7 +6459,7 @@ package: joblib: '>=1.3.0' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.23,<3' + numpy: '>=1.24.1' python: '' python_abi: 3.13.* scipy: '>=1.10.0' @@ -6476,7 +6476,7 @@ package: platform: win-64 dependencies: joblib: '>=1.3.0' - numpy: '>=1.23,<3' + numpy: '>=1.24.1' python: '' python_abi: 3.13.* scipy: '>=1.10.0' @@ -6491,7 +6491,7 @@ package: category: main optional: false - name: scipy - version: 1.17.0 + version: 1.17.1 manager: conda platform: linux-64 dependencies: @@ -6503,33 +6503,33 @@ package: libgfortran5: '>=14.3.0' liblapack: '>=3.9.0,<4.0a0' libstdcxx: '>=14' - numpy: '>=1.25.2' + numpy: <2.7 python: '>=3.13,<3.14.0a0' python_abi: 3.13.* - url: https://repo.prefix.dev/conda-forge/linux-64/scipy-1.17.0-py313h4b8bb8b_1.conda + url: https://repo.prefix.dev/conda-forge/linux-64/scipy-1.17.1-py313h4b8bb8b_0.conda hash: - md5: 2b18fe5b4b2d1611ddf8c2f080a46563 - sha256: e812ebe8115f8daf005f5788ed8f05a0fdabe47eeb4c30bf0a190f2d1d1da0b6 + md5: ec81bc03787968decae6765c7f61b7cf + sha256: fdd92a119a2a5f89d6e549a326adcb008f5046ea5034a9af409e97b7e20e6f06 category: main optional: false - name: scipy - version: 1.17.0 + version: 1.17.1 manager: conda platform: win-64 dependencies: libblas: '>=3.9.0,<4.0a0' libcblas: '>=3.9.0,<4.0a0' liblapack: '>=3.9.0,<4.0a0' - numpy: '>=1.25.2' + numpy: <2.7 python: '>=3.13,<3.14.0a0' python_abi: 3.13.* ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/scipy-1.17.0-py313he51e9a2_1.conda + url: https://repo.prefix.dev/conda-forge/win-64/scipy-1.17.1-py313he51e9a2_0.conda hash: - md5: b54fb98c96446df58e04957b6c98520e - sha256: 9da71fa94c2de66f5d1eb7d926f655efadf8c4e0a6b6e934a45adaeea0905e9b + md5: f64c65352c68208b19838b537b39b02b + sha256: 41da17a6edd558f2a6abb1111b57780b1562ae57d50bb81698cff176b40250e4 category: main optional: false - name: send2trash @@ -6538,7 +6538,7 @@ package: platform: linux-64 dependencies: __linux: '' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/send2trash-2.1.0-pyha191276_1.conda hash: md5: 28eb91468df04f655a57bcfbb35fc5c5 @@ -6551,7 +6551,7 @@ package: platform: win-64 dependencies: __win: '' - python: '' + python: '>=3.10' pywin32: '' url: https://repo.prefix.dev/conda-forge/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda hash: @@ -6588,7 +6588,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda hash: md5: 3339e3b65d58accf4ca4fb8748ab16b3 @@ -6600,7 +6600,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda hash: md5: 3339e3b65d58accf4ca4fb8748ab16b3 @@ -6980,7 +6980,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda hash: md5: f88bb644823094f436792f80fba3207e @@ -6992,7 +6992,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda hash: md5: f88bb644823094f436792f80fba3207e @@ -7006,7 +7006,7 @@ package: dependencies: __unix: '' ptyprocess: '' - python: '' + python: '>=3.10' tornado: '>=6.1.0' url: https://repo.prefix.dev/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda hash: @@ -7020,7 +7020,7 @@ package: platform: win-64 dependencies: __win: '' - python: '' + python: '>=3.10' pywinpty: '>=1.1.0' tornado: '>=6.1.0' url: https://repo.prefix.dev/conda-forge/noarch/terminado-0.18.1-pyh6dadd2b_1.conda @@ -7112,7 +7112,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda hash: md5: 72e780e9aa2d0a3295f59b1874e3768b @@ -7124,7 +7124,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda hash: md5: 72e780e9aa2d0a3295f59b1874e3768b @@ -7216,7 +7216,7 @@ package: platform: linux-64 dependencies: __unix: '' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda hash: md5: e5ce43272193b38c2e9037446c1d9206 @@ -7230,7 +7230,7 @@ package: dependencies: __win: '' colorama: '' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/tqdm-4.67.3-pyha7b4d00_0.conda hash: md5: af77160f8428924c17db94e04aa69409 @@ -7342,7 +7342,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda hash: md5: 0caa1af407ecff61170c9437a808404d @@ -7354,7 +7354,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda hash: md5: 0caa1af407ecff61170c9437a808404d @@ -7886,7 +7886,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda hash: md5: 30cd29cb87d819caead4d55184c1d115 @@ -7898,7 +7898,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda hash: md5: 30cd29cb87d819caead4d55184c1d115 @@ -7980,7 +7980,7 @@ package: manager: pip platform: linux-64 dependencies: - geoh5py: 0.13.0a3.dev5+9e0a86e5 + geoh5py: 0.12.1rc2.dev221+e83842e8 matplotlib: '>=3.10.0,<3.11.0' numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' @@ -7998,7 +7998,7 @@ package: manager: pip platform: win-64 dependencies: - geoh5py: 0.13.0a3.dev5+9e0a86e5 + geoh5py: 0.12.1rc2.dev221+e83842e8 matplotlib: '>=3.10.0,<3.11.0' numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' @@ -8012,7 +8012,7 @@ package: category: main optional: false - name: geoh5py - version: 0.13.0a3.dev5+9e0a86e5 + version: 0.12.1rc2.dev221+e83842e8 manager: pip platform: linux-64 dependencies: @@ -8020,16 +8020,16 @@ package: numpy: '>=2.4.0,<2.5.0' pillow: '>=12.1.0,<12.2.0' pydantic: '>=2.12.0,<2.13.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + url: git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d hash: - sha256: 9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + sha256: e83842e8acc2dd8e4c4353587b5314bb03714d9d source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + url: git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d category: main optional: false - name: geoh5py - version: 0.13.0a3.dev5+9e0a86e5 + version: 0.12.1rc2.dev221+e83842e8 manager: pip platform: win-64 dependencies: @@ -8037,12 +8037,12 @@ package: numpy: '>=2.4.0,<2.5.0' pillow: '>=12.1.0,<12.2.0' pydantic: '>=2.12.0,<2.13.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + url: git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d hash: - sha256: 9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + sha256: e83842e8acc2dd8e4c4353587b5314bb03714d9d source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + url: git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d category: main optional: false - name: grid-apps @@ -8052,7 +8052,7 @@ package: dependencies: discretize: '>=0.12.0,<0.13.0' geoapps-utils: 0.7.0a2 - geoh5py: 0.13.0a3.dev5+9e0a86e5 + geoh5py: 0.12.1rc2.dev221+e83842e8 numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' @@ -8071,7 +8071,7 @@ package: dependencies: discretize: '>=0.12.0,<0.13.0' geoapps-utils: 0.7.0a2 - geoh5py: 0.13.0a3.dev5+9e0a86e5 + geoh5py: 0.12.1rc2.dev221+e83842e8 numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' @@ -8084,44 +8084,44 @@ package: category: main optional: false - name: mira-simpeg - version: 0.25.0.1a1 + version: 0.25.0.1a2.dev6+g7297f79aa manager: pip platform: linux-64 dependencies: discretize: '>=0.11' geoana: '>=0.7.0' - geoh5py: '>=0.13.0a2,<0.14.0' + geoh5py: '>=0.12.0' libdlf: '*' matplotlib: '*' numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + url: git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 hash: - sha256: 5944609b7decc673b510b7052eff0e6ecc46d1ff + sha256: 7297f79aacb30d6149ac535da0ecd148efdb60d0 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + url: git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 category: main optional: false - name: mira-simpeg - version: 0.25.0.1a1 + version: 0.25.0.1a2.dev6+g7297f79aa manager: pip platform: win-64 dependencies: discretize: '>=0.11' geoana: '>=0.7.0' - geoh5py: '>=0.13.0a2,<0.14.0' + geoh5py: '>=0.12.0' libdlf: '*' matplotlib: '*' numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + url: git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 hash: - sha256: 5944609b7decc673b510b7052eff0e6ecc46d1ff + sha256: 7297f79aacb30d6149ac535da0ecd148efdb60d0 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + url: git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 category: main optional: false diff --git a/py-3.14.conda-lock.yml b/py-3.14.conda-lock.yml index 296d2355a..ebba89efd 100644 --- a/py-3.14.conda-lock.yml +++ b/py-3.14.conda-lock.yml @@ -137,7 +137,7 @@ package: dependencies: exceptiongroup: '>=1.0.2' idna: '>=2.8' - python: '' + python: '>=3.10' typing_extensions: '>=4.5' url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda hash: @@ -152,7 +152,7 @@ package: dependencies: exceptiongroup: '>=1.0.2' idna: '>=2.8' - python: '' + python: '>=3.10' typing_extensions: '>=4.5' url: https://repo.prefix.dev/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda hash: @@ -226,7 +226,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' python-dateutil: '>=2.7.0' python-tzdata: '' url: https://repo.prefix.dev/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda @@ -240,7 +240,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' python-dateutil: '>=2.7.0' python-tzdata: '' url: https://repo.prefix.dev/conda-forge/noarch/arrow-1.4.0-pyhcf101f3_0.conda @@ -328,7 +328,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' typing_extensions: '>=4.0.0' url: https://repo.prefix.dev/conda-forge/noarch/async-lru-2.2.0-pyhcf101f3_0.conda hash: @@ -341,7 +341,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' typing_extensions: '>=4.0.0' url: https://repo.prefix.dev/conda-forge/noarch/async-lru-2.2.0-pyhcf101f3_0.conda hash: @@ -354,7 +354,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda hash: md5: 537296d57ea995666c68c821b00e360b @@ -366,7 +366,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda hash: md5: 537296d57ea995666c68c821b00e360b @@ -378,7 +378,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' pytz: '>=2015.7' url: https://repo.prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_0.conda hash: @@ -391,7 +391,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' pytz: '>=2015.7' url: https://repo.prefix.dev/conda-forge/noarch/babel-2.18.0-pyhcf101f3_0.conda hash: @@ -456,7 +456,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' webencodings: '' url: https://repo.prefix.dev/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda hash: @@ -469,7 +469,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' webencodings: '' url: https://repo.prefix.dev/conda-forge/noarch/bleach-6.3.0-pyhcf101f3_1.conda hash: @@ -841,7 +841,7 @@ package: platform: linux-64 dependencies: __unix: '' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda hash: md5: ea8a6c3256897cc31263de9f455e25d9 @@ -855,7 +855,7 @@ package: dependencies: __win: '' colorama: '' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/click-8.3.1-pyha7b4d00_1.conda hash: md5: 6cd3ccc98bacfcc92b2bd7f236f01a7e @@ -867,7 +867,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda hash: md5: 61b8078a0905b12529abc622406cb62c @@ -879,7 +879,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda hash: md5: 61b8078a0905b12529abc622406cb62c @@ -915,7 +915,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda hash: md5: 2da13f2b299d8e1995bafbbe9689a2f7 @@ -927,7 +927,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda hash: md5: 2da13f2b299d8e1995bafbbe9689a2f7 @@ -1032,7 +1032,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda hash: md5: 4c2a8fef270f6c69591889b93f9f55c1 @@ -1044,7 +1044,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda hash: md5: 4c2a8fef270f6c69591889b93f9f55c1 @@ -1235,7 +1235,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/dill-0.4.1-pyhcf101f3_0.conda hash: md5: 080a808fce955026bf82107d955d32da @@ -1247,7 +1247,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/dill-0.4.1-pyhcf101f3_0.conda hash: md5: 080a808fce955026bf82107d955d32da @@ -1262,7 +1262,7 @@ package: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.23,<3' + numpy: '>=1.22.4' python: '' python_abi: 3.14.* scipy: '>=1.12' @@ -1277,7 +1277,7 @@ package: manager: conda platform: win-64 dependencies: - numpy: '>=1.23,<3' + numpy: '>=1.22.4' python: '' python_abi: 3.14.* scipy: '>=1.12' @@ -1561,7 +1561,7 @@ package: libdlf: '' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.23,<3' + numpy: '>=1.22' python: '' python_abi: 3.14.* scipy: '>=1.12' @@ -1577,7 +1577,7 @@ package: platform: win-64 dependencies: libdlf: '' - numpy: '>=1.23,<3' + numpy: '>=1.22' python: '' python_abi: 3.14.* scipy: '>=1.12' @@ -1595,7 +1595,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda hash: @@ -1608,7 +1608,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda hash: @@ -1623,7 +1623,7 @@ package: dependencies: hpack: '>=4.1,<5' hyperframe: '>=6.1,<7' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda hash: md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 @@ -1637,7 +1637,7 @@ package: dependencies: hpack: '>=4.1,<5' hyperframe: '>=6.1,<7' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda hash: md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 @@ -1752,7 +1752,7 @@ package: certifi: '' h11: '>=0.16' h2: '>=3,<5' - python: '' + python: '>=3.9' sniffio: 1.* url: https://repo.prefix.dev/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda hash: @@ -1769,7 +1769,7 @@ package: certifi: '' h11: '>=0.16' h2: '>=3,<5' - python: '' + python: '>=3.9' sniffio: 1.* url: https://repo.prefix.dev/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda hash: @@ -1914,7 +1914,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.9' zipp: '>=3.20' url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda hash: @@ -1927,7 +1927,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.9' zipp: '>=3.20' url: https://repo.prefix.dev/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda hash: @@ -2000,7 +2000,7 @@ package: nest-asyncio: '>=1.4' packaging: '>=22' psutil: '>=5.7' - python: '' + python: '>=3.10' pyzmq: '>=25' tornado: '>=6.4.1' traitlets: '>=5.4.0' @@ -2025,7 +2025,7 @@ package: nest-asyncio: '>=1.4' packaging: '>=22' psutil: '>=5.7' - python: '' + python: '>=3.10' pyzmq: '>=25' tornado: '>=6.4.1' traitlets: '>=5.4.0' @@ -2048,7 +2048,7 @@ package: pexpect: '>4.3' prompt-toolkit: '>=3.0.41,<3.1.0' pygments: '>=2.11.0' - python: '' + python: '>=3.11' stack_data: '>=0.6.0' traitlets: '>=5.13.0' typing_extensions: '>=4.6' @@ -2071,7 +2071,7 @@ package: matplotlib-inline: '>=0.1.5' prompt-toolkit: '>=3.0.41,<3.1.0' pygments: '>=2.11.0' - python: '' + python: '>=3.11' stack_data: '>=0.6.0' traitlets: '>=5.13.0' typing_extensions: '>=4.6' @@ -2251,7 +2251,7 @@ package: platform: linux-64 dependencies: markupsafe: '>=2.0' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda hash: md5: 04558c96691bed63104678757beb4f8d @@ -2264,7 +2264,7 @@ package: platform: win-64 dependencies: markupsafe: '>=2.0' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda hash: md5: 04558c96691bed63104678757beb4f8d @@ -2326,7 +2326,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda hash: md5: cd2214824e36b0180141d422aba01938 @@ -2338,7 +2338,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/jsonpointer-3.0.0-pyhcf101f3_3.conda hash: md5: cd2214824e36b0180141d422aba01938 @@ -2352,7 +2352,7 @@ package: dependencies: attrs: '>=22.2.0' jsonschema-specifications: '>=2023.3.6' - python: '' + python: '>=3.10' referencing: '>=0.28.4' rpds-py: '>=0.25.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda @@ -2368,7 +2368,7 @@ package: dependencies: attrs: '>=22.2.0' jsonschema-specifications: '>=2023.3.6' - python: '' + python: '>=3.10' referencing: '>=0.28.4' rpds-py: '>=0.25.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda @@ -2382,7 +2382,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' referencing: '>=0.31.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda hash: @@ -2395,7 +2395,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' referencing: '>=0.31.0' url: https://repo.prefix.dev/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda hash: @@ -2455,7 +2455,7 @@ package: jupyter_server: '' nodejs: '>=20' platformdirs: '>=4.2.2' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-book-2.1.2-pyhcf101f3_0.conda hash: md5: e1b35482145a0ad4ff458d5803ebb158 @@ -2472,7 +2472,7 @@ package: jupyter_server: '' nodejs: '>=20' platformdirs: '>=4.2.2' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-book-2.1.2-pyhcf101f3_0.conda hash: md5: e1b35482145a0ad4ff458d5803ebb158 @@ -2486,7 +2486,7 @@ package: dependencies: importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.3.0-pyhcf101f3_0.conda hash: md5: 62b7c96c6cd77f8173cc5cada6a9acaa @@ -2500,7 +2500,7 @@ package: dependencies: importlib-metadata: '>=4.8.3' jupyter_server: '>=1.1.2' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/jupyter-lsp-2.3.0-pyhcf101f3_0.conda hash: md5: 62b7c96c6cd77f8173cc5cada6a9acaa @@ -2513,7 +2513,7 @@ package: platform: linux-64 dependencies: jupyter_core: '>=5.1' - python: '' + python: '>=3.10' python-dateutil: '>=2.8.2' pyzmq: '>=25.0' tornado: '>=6.4.1' @@ -2530,7 +2530,7 @@ package: platform: win-64 dependencies: jupyter_core: '>=5.1' - python: '' + python: '>=3.10' python-dateutil: '>=2.8.2' pyzmq: '>=25.0' tornado: '>=6.4.1' @@ -2563,7 +2563,7 @@ package: dependencies: __win: '' platformdirs: '>=2.5' - python: '' + python: '>=3.10' pywin32: '' traitlets: '>=5.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda @@ -2579,7 +2579,7 @@ package: dependencies: jsonschema-with-format-nongpl: '>=4.18.0' packaging: '' - python: '' + python: '>=3.9' python-json-logger: '>=2.0.4' pyyaml: '>=5.3' referencing: '' @@ -2599,7 +2599,7 @@ package: dependencies: jsonschema-with-format-nongpl: '>=4.18.0' packaging: '' - python: '' + python: '>=3.9' python-json-logger: '>=2.0.4' pyyaml: '>=5.3' referencing: '' @@ -2629,7 +2629,7 @@ package: overrides: '>=5.0' packaging: '>=22.0' prometheus_client: '>=0.9' - python: '' + python: '>=3.10' pyzmq: '>=24' send2trash: '>=1.8.2' terminado: '>=0.8.3' @@ -2659,7 +2659,7 @@ package: overrides: '>=5.0' packaging: '>=22.0' prometheus_client: '>=0.9' - python: '' + python: '>=3.10' pyzmq: '>=24' send2trash: '>=1.8.2' terminado: '>=0.8.3' @@ -2677,7 +2677,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' terminado: '>=0.8.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda hash: @@ -2690,7 +2690,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' terminado: '>=0.8.3' url: https://repo.prefix.dev/conda-forge/noarch/jupyter_server_terminals-0.5.4-pyhcf101f3_0.conda hash: @@ -2699,7 +2699,7 @@ package: category: dev optional: true - name: jupyterlab - version: 4.5.4 + version: 4.5.5 manager: conda platform: linux-64 dependencies: @@ -2718,14 +2718,14 @@ package: tomli: '>=1.2.2' tornado: '>=6.2.0' traitlets: '' - url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.5.4-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.5.5-pyhd8ed1ab_0.conda hash: - md5: b555f252a0796e00ce9d8ec318196da7 - sha256: 393286d44caf54ff321306be88d3f5b926b0a7b87cc34ae10dd94da71a572008 + md5: c4b96d937d1b03203c00fed92e713cd1 + sha256: 53705b629a27cc91600f99b70c39181bbc428cdbc70f22aa40cea21e9fa6d560 category: dev optional: true - name: jupyterlab - version: 4.5.4 + version: 4.5.5 manager: conda platform: win-64 dependencies: @@ -2744,10 +2744,10 @@ package: tomli: '>=1.2.2' tornado: '>=6.2.0' traitlets: '' - url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.5.4-pyhd8ed1ab_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab-4.5.5-pyhd8ed1ab_0.conda hash: - md5: b555f252a0796e00ce9d8ec318196da7 - sha256: 393286d44caf54ff321306be88d3f5b926b0a7b87cc34ae10dd94da71a572008 + md5: c4b96d937d1b03203c00fed92e713cd1 + sha256: 53705b629a27cc91600f99b70c39181bbc428cdbc70f22aa40cea21e9fa6d560 category: dev optional: true - name: jupyterlab_pygments @@ -2787,7 +2787,7 @@ package: jsonschema: '>=4.18' jupyter_server: '>=1.21,<3' packaging: '>=21.3' - python: '' + python: '>=3.10' requests: '>=2.31' url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda hash: @@ -2806,7 +2806,7 @@ package: jsonschema: '>=4.18' jupyter_server: '>=1.21,<3' packaging: '>=21.3' - python: '' + python: '>=3.10' requests: '>=2.31' url: https://repo.prefix.dev/conda-forge/noarch/jupyterlab_server-2.28.0-pyhcf101f3_0.conda hash: @@ -4227,7 +4227,7 @@ package: libfreetype6: '>=2.14.1' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.23,<3' + numpy: '>=1.23' packaging: '>=20.0' pillow: '>=8' pyparsing: '>=2.3.1' @@ -4254,7 +4254,7 @@ package: kiwisolver: '>=1.3.1' libfreetype: '>=2.14.1' libfreetype6: '>=2.14.1' - numpy: '>=1.23,<3' + numpy: '>=1.23' packaging: '>=20.0' pillow: '>=8' pyparsing: '>=2.3.1' @@ -4390,7 +4390,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda hash: @@ -4403,7 +4403,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' typing_extensions: '' url: https://repo.prefix.dev/conda-forge/noarch/mistune-3.2.0-pyhcf101f3_0.conda hash: @@ -4417,7 +4417,7 @@ package: platform: linux-64 dependencies: __glibc: '>=2.17,<3.0.a0' - _openmp_mutex: '>=4.5' + _openmp_mutex: '*' libgcc: '>=14' libstdcxx: '>=14' llvm-openmp: '>=21.1.8' @@ -4499,7 +4499,7 @@ package: libgfortran: '' libgfortran5: '>=14.3.0' liblapack: '>=3.9.0,<4.0a0' - libscotch: '*' + libscotch: '>=7.0.11,<7.0.12.0a0' metis: '>=5.1.0,<5.1.1.0a0' mumps-include: ==5.8.2 url: https://repo.prefix.dev/conda-forge/linux-64/mumps-seq-5.8.2-hc1b3267_2.conda @@ -4626,7 +4626,7 @@ package: packaging: '' pandocfilters: '>=1.4.1' pygments: '>=2.4.1' - python: '' + python: '>=3.10' traitlets: '>=5.1' url: https://repo.prefix.dev/conda-forge/noarch/nbconvert-core-7.16.6-pyhcf101f3_1.conda hash: @@ -4653,7 +4653,7 @@ package: packaging: '' pandocfilters: '>=1.4.1' pygments: '>=2.4.1' - python: '' + python: '>=3.10' traitlets: '>=5.1' url: https://repo.prefix.dev/conda-forge/noarch/nbconvert-core-7.16.6-pyhcf101f3_1.conda hash: @@ -4787,39 +4787,39 @@ package: category: dev optional: true - name: notebook - version: 7.5.3 + version: 7.5.4 manager: conda platform: linux-64 dependencies: importlib_resources: '>=5.0' jupyter_server: '>=2.4.0,<3' - jupyterlab: '>=4.5.3,<4.6' + jupyterlab: '>=4.5.5,<4.6' jupyterlab_server: '>=2.28.0,<3' notebook-shim: '>=0.2,<0.3' - python: '' + python: '>=3.10' tornado: '>=6.2.0' - url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.5.3-pyhcf101f3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.5.4-pyhcf101f3_0.conda hash: - md5: 94a5f0cee51b6b0ffdcad0af6db0af18 - sha256: 014cf291843861b20cf84a89e8450f0dd13ad1e6d2ab30c56ae43b81f2dca233 + md5: ad642622e20bd5dbe4157d35ddf1db47 + sha256: c25d4c77747af7598c843b626c051e93ea3d8d0a7782bae1c48ba8f4dd1961d4 category: dev optional: true - name: notebook - version: 7.5.3 + version: 7.5.4 manager: conda platform: win-64 dependencies: importlib_resources: '>=5.0' jupyter_server: '>=2.4.0,<3' - jupyterlab: '>=4.5.3,<4.6' + jupyterlab: '>=4.5.5,<4.6' jupyterlab_server: '>=2.28.0,<3' notebook-shim: '>=0.2,<0.3' - python: '' + python: '>=3.10' tornado: '>=6.2.0' - url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.5.3-pyhcf101f3_0.conda + url: https://repo.prefix.dev/conda-forge/noarch/notebook-7.5.4-pyhcf101f3_0.conda hash: - md5: 94a5f0cee51b6b0ffdcad0af6db0af18 - sha256: 014cf291843861b20cf84a89e8450f0dd13ad1e6d2ab30c56ae43b81f2dca233 + md5: ad642622e20bd5dbe4157d35ddf1db47 + sha256: c25d4c77747af7598c843b626c051e93ea3d8d0a7782bae1c48ba8f4dd1961d4 category: dev optional: true - name: notebook-shim @@ -5020,7 +5020,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.8' url: https://repo.prefix.dev/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda hash: md5: b76541e68fea4d511b1ac46a28dcd2c6 @@ -5032,7 +5032,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.8' url: https://repo.prefix.dev/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda hash: md5: b76541e68fea4d511b1ac46a28dcd2c6 @@ -5047,7 +5047,7 @@ package: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.23,<3' + numpy: '>=1.26.0' python: '' python-dateutil: '>=2.8.2' python_abi: 3.14.* @@ -5062,7 +5062,7 @@ package: manager: conda platform: win-64 dependencies: - numpy: '>=1.23,<3' + numpy: '>=1.26.0' python: '' python-dateutil: '>=2.8.2' python-tzdata: '' @@ -5127,7 +5127,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda hash: md5: 97c1ce2fffa1209e7afb432810ec6e12 @@ -5139,7 +5139,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda hash: md5: 97c1ce2fffa1209e7afb432810ec6e12 @@ -5267,7 +5267,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda hash: md5: 4fefefb892ce9cc1539405bec2f1a6cd @@ -5279,7 +5279,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda hash: md5: 4fefefb892ce9cc1539405bec2f1a6cd @@ -5291,7 +5291,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda hash: md5: d7585b6550ad04c8c5e21097ada2888e @@ -5303,7 +5303,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda hash: md5: d7585b6550ad04c8c5e21097ada2888e @@ -5459,7 +5459,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda hash: md5: 12c566707c80111f9799308d9e265aef @@ -5471,7 +5471,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda hash: md5: 12c566707c80111f9799308d9e265aef @@ -5485,7 +5485,7 @@ package: dependencies: annotated-types: '>=0.6.0' pydantic-core: 2.41.5 - python: '' + python: '>=3.10' typing-extensions: '>=4.6.1' typing-inspection: '>=0.4.2' typing_extensions: '>=4.14.1' @@ -5502,7 +5502,7 @@ package: dependencies: annotated-types: '>=0.6.0' pydantic-core: 2.41.5 - python: '' + python: '>=3.10' typing-extensions: '>=4.6.1' typing-inspection: '>=0.4.2' typing_extensions: '>=4.14.1' @@ -5553,7 +5553,7 @@ package: __glibc: '>=2.17,<3.0.a0' libgcc: '>=14' mkl: '>=2025.3.0,<2026.0a0' - numpy: '>=1.23,<3' + numpy: '>=1.22.4' python: '' python_abi: 3.14.* scipy: '>=1.12' @@ -5569,7 +5569,7 @@ package: platform: win-64 dependencies: mkl: '>=2025.3.0,<2026.0a0' - numpy: '>=1.23,<3' + numpy: '>=1.22.4' python: '' python_abi: 3.14.* scipy: '>=1.12' @@ -5617,7 +5617,7 @@ package: isort: '>=5,!=5.13,<9' mccabe: '>=0.6,<0.8' platformdirs: '>=2.2' - python: '' + python: '>=3.10' tomli: '>=1.1' tomlkit: '>=0.10.1' url: https://repo.prefix.dev/conda-forge/noarch/pylint-4.0.5-pyhcf101f3_0.conda @@ -5637,7 +5637,7 @@ package: isort: '>=5,!=5.13,<9' mccabe: '>=0.6,<0.8' platformdirs: '>=2.2' - python: '' + python: '>=3.10' tomli: '>=1.1' tomlkit: '>=0.10.1' url: https://repo.prefix.dev/conda-forge/noarch/pylint-4.0.5-pyhcf101f3_0.conda @@ -5683,7 +5683,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda hash: md5: 3687cc0b82a8b4c17e1f0eb7e47163d5 @@ -5695,7 +5695,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda hash: md5: 3687cc0b82a8b4c17e1f0eb7e47163d5 @@ -5740,7 +5740,7 @@ package: packaging: '>=22' pluggy: '>=1.5,<2' pygments: '>=2.7.2' - python: '' + python: '>=3.10' tomli: '>=1' url: https://repo.prefix.dev/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda hash: @@ -5759,7 +5759,7 @@ package: packaging: '>=22' pluggy: '>=1.5,<2' pygments: '>=2.7.2' - python: '' + python: '>=3.10' tomli: '>=1' url: https://repo.prefix.dev/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda hash: @@ -5775,7 +5775,7 @@ package: coverage: '>=7.10.6' pluggy: '>=1.2' pytest: '>=7' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda hash: md5: 6891acad5e136cb62a8c2ed2679d6528 @@ -5790,7 +5790,7 @@ package: coverage: '>=7.10.6' pluggy: '>=1.2' pytest: '>=7' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda hash: md5: 6891acad5e136cb62a8c2ed2679d6528 @@ -5859,7 +5859,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.9' six: '>=1.5' url: https://repo.prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda hash: @@ -5872,7 +5872,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.9' six: '>=1.5' url: https://repo.prefix.dev/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda hash: @@ -5885,7 +5885,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda hash: md5: 23029aae904a2ba587daba708208012f @@ -5897,7 +5897,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda hash: md5: 23029aae904a2ba587daba708208012f @@ -6241,7 +6241,7 @@ package: platform: linux-64 dependencies: attrs: '>=22.2.0' - python: '' + python: '>=3.10' rpds-py: '>=0.7.0' typing_extensions: '>=4.4.0' url: https://repo.prefix.dev/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda @@ -6256,7 +6256,7 @@ package: platform: win-64 dependencies: attrs: '>=22.2.0' - python: '' + python: '>=3.10' rpds-py: '>=0.7.0' typing_extensions: '>=4.4.0' url: https://repo.prefix.dev/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda @@ -6273,7 +6273,7 @@ package: certifi: '>=2017.4.17' charset-normalizer: '>=2,<4' idna: '>=2.5,<4' - python: '' + python: '>=3.10' urllib3: '>=1.21.1,<3' url: https://repo.prefix.dev/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda hash: @@ -6289,7 +6289,7 @@ package: certifi: '>=2017.4.17' charset-normalizer: '>=2,<4' idna: '>=2.5,<4' - python: '' + python: '>=3.10' urllib3: '>=1.21.1,<3' url: https://repo.prefix.dev/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda hash: @@ -6353,7 +6353,7 @@ package: platform: linux-64 dependencies: lark: '>=1.2.2' - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda hash: md5: 7234f99325263a5af6d4cd195035e8f2 @@ -6366,7 +6366,7 @@ package: platform: win-64 dependencies: lark: '>=1.2.2' - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/rfc3987-syntax-1.1.0-pyhe01879c_1.conda hash: md5: 7234f99325263a5af6d4cd195035e8f2 @@ -6440,7 +6440,7 @@ package: joblib: '>=1.3.0' libgcc: '>=14' libstdcxx: '>=14' - numpy: '>=1.23,<3' + numpy: '>=1.24.1' python: '' python_abi: 3.14.* scipy: '>=1.10.0' @@ -6457,7 +6457,7 @@ package: platform: win-64 dependencies: joblib: '>=1.3.0' - numpy: '>=1.23,<3' + numpy: '>=1.24.1' python: '' python_abi: 3.14.* scipy: '>=1.10.0' @@ -6472,7 +6472,7 @@ package: category: main optional: false - name: scipy - version: 1.17.0 + version: 1.17.1 manager: conda platform: linux-64 dependencies: @@ -6484,33 +6484,33 @@ package: libgfortran5: '>=14.3.0' liblapack: '>=3.9.0,<4.0a0' libstdcxx: '>=14' - numpy: '>=1.25.2' + numpy: <2.7 python: '>=3.14,<3.15.0a0' python_abi: 3.14.* - url: https://repo.prefix.dev/conda-forge/linux-64/scipy-1.17.0-py314hf07bd8e_1.conda + url: https://repo.prefix.dev/conda-forge/linux-64/scipy-1.17.1-py314hf07bd8e_0.conda hash: - md5: c7df812186fb1290bc00d9b7b5a50b18 - sha256: a95de421c586de901402107fbeb7524efaee5bb55c1aba2e1334f8b8ebc89093 + md5: d0510124f87c75403090e220db1e9d41 + sha256: 1ae427836d7979779c9005388a05993a3addabcc66c4422694639a4272d7d972 category: main optional: false - name: scipy - version: 1.17.0 + version: 1.17.1 manager: conda platform: win-64 dependencies: libblas: '>=3.9.0,<4.0a0' libcblas: '>=3.9.0,<4.0a0' liblapack: '>=3.9.0,<4.0a0' - numpy: '>=1.25.2' + numpy: <2.7 python: '>=3.14,<3.15.0a0' python_abi: 3.14.* ucrt: '>=10.0.20348.0' vc: '>=14.3,<15' vc14_runtime: '>=14.44.35208' - url: https://repo.prefix.dev/conda-forge/win-64/scipy-1.17.0-py314h221f224_1.conda + url: https://repo.prefix.dev/conda-forge/win-64/scipy-1.17.1-py314h221f224_0.conda hash: - md5: 0f9edd5793da94f7ec58690abe25c8a2 - sha256: 3e206736e3afce07be3f2f714518c0eff211f49e603b6aadb468e9d96ef4c420 + md5: cfcd38938ee0137f4bf0ca824dfb0887 + sha256: d9a7b6d3a306195eef4db814614a74746aae4b63e570f6db15769bd28d19a957 category: main optional: false - name: send2trash @@ -6519,7 +6519,7 @@ package: platform: linux-64 dependencies: __linux: '' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/send2trash-2.1.0-pyha191276_1.conda hash: md5: 28eb91468df04f655a57bcfbb35fc5c5 @@ -6532,7 +6532,7 @@ package: platform: win-64 dependencies: __win: '' - python: '' + python: '>=3.10' pywin32: '' url: https://repo.prefix.dev/conda-forge/noarch/send2trash-2.1.0-pyh6dadd2b_1.conda hash: @@ -6569,7 +6569,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda hash: md5: 3339e3b65d58accf4ca4fb8748ab16b3 @@ -6581,7 +6581,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.9' url: https://repo.prefix.dev/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda hash: md5: 3339e3b65d58accf4ca4fb8748ab16b3 @@ -6961,7 +6961,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda hash: md5: f88bb644823094f436792f80fba3207e @@ -6973,7 +6973,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/tblib-3.2.2-pyhcf101f3_0.conda hash: md5: f88bb644823094f436792f80fba3207e @@ -6987,7 +6987,7 @@ package: dependencies: __unix: '' ptyprocess: '' - python: '' + python: '>=3.10' tornado: '>=6.1.0' url: https://repo.prefix.dev/conda-forge/noarch/terminado-0.18.1-pyhc90fa1f_1.conda hash: @@ -7001,7 +7001,7 @@ package: platform: win-64 dependencies: __win: '' - python: '' + python: '>=3.10' pywinpty: '>=1.1.0' tornado: '>=6.1.0' url: https://repo.prefix.dev/conda-forge/noarch/terminado-0.18.1-pyh6dadd2b_1.conda @@ -7093,7 +7093,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda hash: md5: 72e780e9aa2d0a3295f59b1874e3768b @@ -7105,7 +7105,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda hash: md5: 72e780e9aa2d0a3295f59b1874e3768b @@ -7197,7 +7197,7 @@ package: platform: linux-64 dependencies: __unix: '' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda hash: md5: e5ce43272193b38c2e9037446c1d9206 @@ -7211,7 +7211,7 @@ package: dependencies: __win: '' colorama: '' - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/tqdm-4.67.3-pyha7b4d00_0.conda hash: md5: af77160f8428924c17db94e04aa69409 @@ -7323,7 +7323,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda hash: md5: 0caa1af407ecff61170c9437a808404d @@ -7335,7 +7335,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda hash: md5: 0caa1af407ecff61170c9437a808404d @@ -7898,7 +7898,7 @@ package: manager: conda platform: linux-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda hash: md5: 30cd29cb87d819caead4d55184c1d115 @@ -7910,7 +7910,7 @@ package: manager: conda platform: win-64 dependencies: - python: '' + python: '>=3.10' url: https://repo.prefix.dev/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda hash: md5: 30cd29cb87d819caead4d55184c1d115 @@ -7992,7 +7992,7 @@ package: manager: pip platform: linux-64 dependencies: - geoh5py: 0.13.0a3.dev5+9e0a86e5 + geoh5py: 0.12.1rc2.dev221+e83842e8 matplotlib: '>=3.10.0,<3.11.0' numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' @@ -8010,7 +8010,7 @@ package: manager: pip platform: win-64 dependencies: - geoh5py: 0.13.0a3.dev5+9e0a86e5 + geoh5py: 0.12.1rc2.dev221+e83842e8 matplotlib: '>=3.10.0,<3.11.0' numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' @@ -8024,7 +8024,7 @@ package: category: main optional: false - name: geoh5py - version: 0.13.0a3.dev5+9e0a86e5 + version: 0.12.1rc2.dev221+e83842e8 manager: pip platform: linux-64 dependencies: @@ -8032,16 +8032,16 @@ package: numpy: '>=2.4.0,<2.5.0' pillow: '>=12.1.0,<12.2.0' pydantic: '>=2.12.0,<2.13.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + url: git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d hash: - sha256: 9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + sha256: e83842e8acc2dd8e4c4353587b5314bb03714d9d source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + url: git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d category: main optional: false - name: geoh5py - version: 0.13.0a3.dev5+9e0a86e5 + version: 0.12.1rc2.dev221+e83842e8 manager: pip platform: win-64 dependencies: @@ -8049,12 +8049,12 @@ package: numpy: '>=2.4.0,<2.5.0' pillow: '>=12.1.0,<12.2.0' pydantic: '>=2.12.0,<2.13.0' - url: git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + url: git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d hash: - sha256: 9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + sha256: e83842e8acc2dd8e4c4353587b5314bb03714d9d source: type: url - url: git+https://github.com/MiraGeoscience/geoh5py.git@9e0a86e5afadfe9c55e9811317827a4f6c2c70c4 + url: git+https://github.com/MiraGeoscience/geoh5py.git@e83842e8acc2dd8e4c4353587b5314bb03714d9d category: main optional: false - name: grid-apps @@ -8064,7 +8064,7 @@ package: dependencies: discretize: '>=0.12.0,<0.13.0' geoapps-utils: 0.7.0a2 - geoh5py: 0.13.0a3.dev5+9e0a86e5 + geoh5py: 0.12.1rc2.dev221+e83842e8 numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' @@ -8083,7 +8083,7 @@ package: dependencies: discretize: '>=0.12.0,<0.13.0' geoapps-utils: 0.7.0a2 - geoh5py: 0.13.0a3.dev5+9e0a86e5 + geoh5py: 0.12.1rc2.dev221+e83842e8 numpy: '>=2.4.2,<2.5.0' pydantic: '>=2.12.0,<2.13.0' scipy: '>=1.17.0,<1.18.0' @@ -8096,44 +8096,44 @@ package: category: main optional: false - name: mira-simpeg - version: 0.25.0.1a1 + version: 0.25.0.1a2.dev6+g7297f79aa manager: pip platform: linux-64 dependencies: discretize: '>=0.11' geoana: '>=0.7.0' - geoh5py: '>=0.13.0a2,<0.14.0' + geoh5py: '>=0.12.0' libdlf: '*' matplotlib: '*' numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + url: git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 hash: - sha256: 5944609b7decc673b510b7052eff0e6ecc46d1ff + sha256: 7297f79aacb30d6149ac535da0ecd148efdb60d0 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + url: git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 category: main optional: false - name: mira-simpeg - version: 0.25.0.1a1 + version: 0.25.0.1a2.dev6+g7297f79aa manager: pip platform: win-64 dependencies: discretize: '>=0.11' geoana: '>=0.7.0' - geoh5py: '>=0.13.0a2,<0.14.0' + geoh5py: '>=0.12.0' libdlf: '*' matplotlib: '*' numpy: '>=1.22' pymatsolver: '>=0.3' scipy: '>=1.8' - url: git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + url: git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 hash: - sha256: 5944609b7decc673b510b7052eff0e6ecc46d1ff + sha256: 7297f79aacb30d6149ac535da0ecd148efdb60d0 source: type: url - url: git+https://github.com/MiraGeoscience/simpeg.git@5944609b7decc673b510b7052eff0e6ecc46d1ff + url: git+https://github.com/MiraGeoscience/simpeg.git@7297f79aacb30d6149ac535da0ecd148efdb60d0 category: main optional: false From cd78b97d69501ccc7601035f8cfbd0c7e66634dc Mon Sep 17 00:00:00 2001 From: dominiquef Date: Wed, 25 Feb 2026 07:46:23 -0800 Subject: [PATCH 04/16] Re-adjust target --- tests/run_tests/driver_airborne_tem_1d_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/run_tests/driver_airborne_tem_1d_test.py b/tests/run_tests/driver_airborne_tem_1d_test.py index b36be0d96..a4c1878b4 100644 --- a/tests/run_tests/driver_airborne_tem_1d_test.py +++ b/tests/run_tests/driver_airborne_tem_1d_test.py @@ -38,7 +38,7 @@ # To test the full run and validate the inversion. # Move this file out of the test directory and run. -target_run = {"data_norm": 6.413150962712146e-10, "phi_d": 24, "phi_m": 205000} +target_run = {"data_norm": 6.413150955633971e-10, "phi_d": 42.3, "phi_m": 116000} def test_airborne_tem_1d_fwr_run( From 8fe3e8948635f361e47fb8d2bcda42b4b5bcacc7 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Wed, 25 Feb 2026 10:43:53 -0800 Subject: [PATCH 05/16] change test to use xls on disk --- tests/plate_simulation/runtest/sweep_test.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/tests/plate_simulation/runtest/sweep_test.py b/tests/plate_simulation/runtest/sweep_test.py index 2a765c781..9977c378c 100644 --- a/tests/plate_simulation/runtest/sweep_test.py +++ b/tests/plate_simulation/runtest/sweep_test.py @@ -7,7 +7,6 @@ # (see LICENSE file at the root of this source code package). ' # ' # ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -from io import BytesIO from geoh5py import Workspace from geoh5py.groups import SimPEGGroup @@ -105,10 +104,6 @@ def test_sweep(tmp_path): n = len(list(workdir.glob("*.geoh5"))) assert n == 6 - # Check that the summary file was created and has the expected number of rows - with Workspace(tmp_path / "test.geoh5") as ws: - file_data = ws.get_entity("summary.xlsx")[0] - blob = BytesIO(file_data.file_bytes) - xls = read_excel(blob) + xls = read_excel(tmp_path / "summary.xlsx") assert len(xls) == 6 From 13310e5ce562c5affb1a145ddf046edd07087e61 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Wed, 25 Feb 2026 15:39:30 -0800 Subject: [PATCH 06/16] Begin section on parallelization --- docs/_toc.yml | 1 + .../images/distributed_parallelization.svg | 1 + docs/fundamentals/parallelization.rst | 49 ++++++++++++++++++ .../plate-simulation/images/sweep/landing.png | Bin 0 -> 330552 bytes docs/plate-simulation/simulation.rst | 2 +- docs/plate-simulation/sweep.rst | 22 +++++--- 6 files changed, 67 insertions(+), 8 deletions(-) create mode 100644 docs/fundamentals/images/distributed_parallelization.svg create mode 100644 docs/fundamentals/parallelization.rst create mode 100644 docs/plate-simulation/images/sweep/landing.png diff --git a/docs/_toc.yml b/docs/_toc.yml index 14070c931..1809f5bec 100644 --- a/docs/_toc.yml +++ b/docs/_toc.yml @@ -16,6 +16,7 @@ chapters: - file: fundamentals/joint_inversion - file: fundamentals/depth_of_investigation - file: fundamentals/optimization + - file: fundamentals/parallelization - file: tutorials/introduction sections: - file: tutorials/background diff --git a/docs/fundamentals/images/distributed_parallelization.svg b/docs/fundamentals/images/distributed_parallelization.svg new file mode 100644 index 000000000..934325900 --- /dev/null +++ b/docs/fundamentals/images/distributed_parallelization.svg @@ -0,0 +1 @@ + diff --git a/docs/fundamentals/parallelization.rst b/docs/fundamentals/parallelization.rst new file mode 100644 index 000000000..34548e288 --- /dev/null +++ b/docs/fundamentals/parallelization.rst @@ -0,0 +1,49 @@ +.. _parallelization: + +Parallelization +=============== + +For a given inversion routine, the problem can be decomposed into a series of sub-problems, or tiles, each assigned a mesh and a survey. During the inverse process, predicted data and derivatives are continuously requested from the sub-problems. These operations are parallelized within each sub-problem, as well as externally such that sub-problems can be computed concurrently. + + +.. figure:: ./images/distributed_parallelization.svg + :align: center + :width: 80% + + Schematic representation of the computing elements of a tiled inversion. Each tile is assigned a mesh and a survey, with array operations parallelized by dask bookending a direct solvers. The tiles can be distributed across multiple workers, each with a limited number of threads to optimize performance. Only 1-dimensional arrays are returned to the main process. + +This following sections describe the different level of parallelization used by the inversion routines and how to optimize resources. + + +Direct Solvers +-------------- + +The direct solvers are used for all methods evaluated by partial differential (PDE) equations, such as electromagnetics and electric methods. The `Pardiso `_ and `Mumps `_ solvers are parallelized using OpenMP. Note that the current implementation of the solvers are not thread-safe, and can therefore not be shared within parallel processes. + +The number of threads used by the solvers can be set by running the command + +.. code-block:: + + set OMP_NUM_THREADS=X + +before launching the python program. Alternatively, setting ``OMP_NUM_THREADS`` as a local environment variable will set it permanently. The default value is the number of threads available on the machine. + +Dask +---- + +Most operations related to generating arrays are handled by the `dask `_ library. A mixture of dask.arrays and dask.delayed calls are used to parallelize the computations across multiple threads. If a direct solver is involved, the dask operations are bookending the solver to avoid thread-safety issues. Otherwise, the dask operations are performed in parallel across the available threads. + + +Dask.distributed +---------------- + +For large systems, such as High-Performance Computing (HPC) clusters, the ``dask.distributed`` library can be used to distribute the computation from tiles across multiple ``workers``. It has been found that the performance of direct solvers tend to saturate on large numbers of threads. By spawning multiple processes, each with a limited number of threads, the performance can be improved by running multiple tiles in parallel. The number of workers and threads per worker can be set with the following parameters added to the ui.json file: + +.. code-block:: + + { + ... + "n_workers": X, + "n_threads": Y, + "performance_report": true + } diff --git a/docs/plate-simulation/images/sweep/landing.png b/docs/plate-simulation/images/sweep/landing.png new file mode 100644 index 0000000000000000000000000000000000000000..59874636c22094dd0e1652999c9c595a1360218f GIT binary patch literal 330552 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%0D8&o+_8VtX4km4>$D?Nz>Z0FOfa@@q{u; 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

j#n4fPHXT=`_1lGI z_8%I;if-~krt(2Av!B7rIdlJd?nFQ&xH>V`Xqo~IC~al6VonhB0BfnbmWy*uSb24!aTeBB)(i{NG$=U+7{KepO=`b>-;u_KJV%K)+dRu zDTvbWT!FDRqp=%A6H?vuZnWwdKBr$0SIXVy0elLO+)pdbRYD*QJr2K>-qs)b5ullw z-(yZ&@NuDhr0wv5V8LG7%~k>t1gKw4K&(7Uuv(b<6Pkg7z8jVVqJPesQlkL+mC$y|xkK%l;g_4y=!*nNrsUSaiUM2)sIm?%XG^ zQZlLhWN3%gHH|oc^^XWv(C*)UuP~jJcnnw#7eGyY4F%XG;B{7_X8VHXU{*_CwgYgN zZ#-=td9_P2$JF}$U1t00%V_X*`HibG_w|KQQ0Yxm=uvtpWGVG5P>&P*qQ$S!-< z9lvz*Y%0dPvk%~tLmh?6RH$eznz7Xl?ixxcM=IYD8_t)gw%}B@U8O9sG3+tgjm@2D z2wl)T5MVg7TBE03xnyMa^Kg0)#y=mTDEo%Vj4#0at;8^xJ0Q#3dsB#ujx#yL%A$>S z(UD6o3DWR%zy>(UrW)KFFOQfq1A+bzpf{TWY}4Vkk>U@0=?7YO0Km*=Kv!5v;6^;= z#p1}wO927nJ5rCs1bYcA3xHu?P}O}D=8F}Hi3hT;0mEy{5b@8hx(~p=HlWhY&L73b z4QSe9JFdqIdb-!Dm6<*scSmQYjZfGBX1Ny*%jR&sJ10H=7Uh$ zaG~?s#Jgbjl?Apl;#ZVbqhw-(t)(v~J}oRg`m~P9kz3eKMCha?`o^u(*e5HJv0E=m zpQGz_pqAdgB9pm^b%E5+Pc6yqGmyw5Pf5kZA97$x9Wx(G0NqgjuL312HG!LZf(X!1 zp?=W;YGV4b!DFdJ z7lvxeTY`r3SnmOr2Fl4WU?Gi72Rnprx5SLWDdQFYDnL($|1nn)R_^_dfi(`y(ol^6 zfCYhao}3uK$^uL@6bBcr>*VVtZ_z(|A!j|vc1dDNYhoS5VR@7pd13XljAmtxJo>wv zF6~XE7#yAKu_Jw&s=ar}NUSX)^ z&87bu>IG1hYDDBYD)}6&?ZD9Fa;D8`^=rF%NNxfcJS`E1en(%R6cNpB)u1os2w4*U zuzJ@uPMDTD5ztZ8H>tV9IAC%We>Y5VgwtT(Q1-m;4B~(9g^?wg zgz3fevyY8k$EC_ivPoK4(FF}xr+KOA#a9)K(4VJSW9k5C!pQ?l6D8l&qBQ~e3)y+* zK}tNxaxs4VOr{z-%h^4>MK|oyv-?m-aSpg_VHY&RMgPpV(ykqTrBStW^g&Q7Pc7By z8Qs~L;ZjZ`>C`z#2;UKA2=6`-B|qJ@%j~;oDRZWSHibGrNyuVy#kb>tM=&Y(eRKi${gVc{%QwOO_pz1wm*cYYLlhS_ zyCM%ZZfQnkW`1d<%kaP*WwTB{u4ilaDVRL&{G+DhQHZ*}`^-#NoDnDX&3iE9KIxZc zOc`tRCWkK^3xbn3{^Q_>Uk#b!Bs2X9vMN&?Z5rpy@O&Y0_bKj2_m5GOo02 z?e71%7Q{6`mWvXWzPx5gq*{Uwnzc1Z;v$cuX_DV{A^j&XUw@Od;+BklHyEoFz5>uv#5BPtVY+jtKV6sOT*xhoHl{KqWDbPl$} ztrR8#OrM^17wE4CMD{jtpps;AEAtV39NB9(zvbKSEd0uoQ{8X zHjAz~*;XUJSPhcFRp7B*zI7R|bYr$YvQTC;(<$^`g$&SMl`tk@JARU4Y;2!tarqjM zPs|A!>q*~P(HOYN3HzVFx~(M3nKtfkU~5gxlOz~-|0mun@$EK3pSqj4E7Kt%_K5M} zmp(WW+S-J1m6GI!pOkskDO65zg95U~Nf;22W#>(nCz1NhJF~>QJ;`t7{df$kKVu?R zDuL(Lo{^CxCzbQe>sE?|tH}ZT{tXrtu%rHY;nWn~@)-YI*nD>|OR1X8@FBKMdla1X zLR$ZxzT&zuZ|jSre6*bD%w(d<@X%7Fjo{Mrshx3}=%sofz)X_Iw#&VT&$ZtXh zm)e{T>|2Yomy>q8QJuM)clh^D<2G@AP1~jFfHv(ft*1sN{+JDiSA{-y@dotn-Zj zu=)=}BK1|s*h?bI=b|hXLi0B)U%x7pSDkjM0AinIh=bvZ{l;o(zKAkoT}xEyxjt>z z@_J3;;feaA%U}O(#w&b&<7OY?9-zVsl=Ir` zDS@*UO}qm^?y>L4A2h? z;zvE}x2yrm-}%c7%a({Gx)zWBSqNi>j>D65oLQrn?ZUy!&~( z9}WdOI8|i^q<7Gc+9M0Ze?y|)PwLGmM-?iWBY2ZriaD!0H0CsV$6j&5$}$9hQvb}h zuZ9$;JV|rC>-UWoz2y+G(`AUsc1_=aTYt!yE^ivI`ZRNGvuc&9G6kX5i zcLgsa@G79zw_c7r?Rz+}CE)|?cx)b1{OIyH{*Lt^4PN_(dWF$Ucrq{hR=`8Jwcs~% zuBnKRPE4f@IT;)rodcp$$t^0eIkUq7Aaf}|%7GVLU(4}sQO~*W{JiXu z_sYz5M68L8*+X_7b0$ln%7v{U#%PE{aed~nm4<5kctkZlH;L`iPkh-+a~DjBu!5}r zaZLe!8WVGtMH5|7Qgjzd2F>`pcivEk?&;*Y-i%9DuN%Sax3dCrGE=3sDQVs1oZy3R z4&3yMGR|h)x*Gs?Frv8R?=X)OXFq~~?FLSt6CCL$4LNM$*IP6vmwkV$t$yhKwh9vFhA>D; zL^mryM1!1@lYiTtSuAfcEF|~E>OAh&^utA?>dWM56QH*Qb8;@fIy+(lelatb<|WK` zf`oIK+#V#<_;3KL$(P)t?C*%_zbm`9Bv8#BzsT=6PLkwvyKjr$mY^(~W(sN}MHydf zj;dQQf#waua`8j@!CK_0*MBN<^=P@$H8zws2n{R>nbu`#LYWZ-v|B!wy}{C)TbKuy z{gg*>G5msQ*e7ICI2pV!S9KXt6={ZryQh=t!F(4!@9*1i#`FMLj&A?Oc|Saeb#S6o z&VdFdUL$V+Orm;eF5-SXpS?=F2VxCVgZucg)Bx`DDR993TX=W%4zXbh;wjJ)rncv> zT=Hp`)1|*2-4S&B{Ahn)%hx(C2-I9j28NK;jtwpQ$%_uWp0sz^mz(oFTj44rn}yF| z!gTyQ(TGb=Htaxcqi1?tB|7f=YD<-A(GF?1rb~#NXHs~~o$#TB@3_AVJ2&DCZlU5j zv_g$2zRRK^z3_9^|F*^Z7W8^pI^XbT%5e-U@c^<^6|T@XZwB!z~KOQR<+y!qhx zp)A#vT3I3+M5g5L*FN!iG(#d17r}cTQr>oYO6dGGKKKoB5dpRQD^-le#m~@!0?V#a zDw8bV9EjjK&!~>vO=@KyYh1?o(~6IJn)BQ1ya55*@|{U?K-REazx^R4w;dX7s%vIq z*jZ0-?kZkQ174mSnRlK|6B>{+LqE7~BdAMrsBqT9^ZI1bnf)!R)=G<@DdvuVDN5eenwF{-iuhT3G?Yp9H-UC%rTO^dA66y1k|G1w12L|Q>!B(23LAK`LL#}L zV%P&T(`ytMk419m$I}IC5;>_f3k)m!^I%t|fF_gF$fM3OqMW4nrO(I}9D+eR5A@nd z)`Jq-M|ZMta5bt)i#1>;8ail`S3e*@W*#bwN2hFe<<|?jBwpv$hL~+JHLN zJ#(0D2!-vuA5?eVw`2kpvIqJdE&q4i-e2%p=u_C7#ziQ^G0=yElW}yV)0KY?Seuu4 z$9#*u#VCTCo$F1>VFX&I^CuqOP_A?rJL=UGS;(@cS-0qIYH_+BDjhxVY5)S6WU&}a z#kcDzK+=Po+I@J~rFryZG-Z0@v=u2%4<6oi2mL?OJH>uL_qx}a1&B9gguA>MFHVLc zFhcga`3KNYZnrG?ll$kzQ{69=H)-nO%NnW8B2{T&bsFIaZ~5%MJ$)oVZ{*(|K@RKs z=N&ppx7u^H=VNRxCpee6X**iC#_O0g-*r-eazk8`m+^Wsy_SoOZuEkb`+X(172)VE zi{C%(KNS2z{|TsJ`S>#*md8cspPlE`tpyTur)gg0bQ05t0Qf|+Nr zg`NErwd#n6GvPrNkqvxjyt^=?KQqAu*&u4w9ExYJy>uk54N9eH+g+DEqdhFy`y-@! zuMBz(l$`U+OJW1^6Yow;7Su6Ip9MFj)$J-iXSAdXkd|>T!@Tvzg@;qMtWDx?lF?;s z#1~N+c87H$#6iN!wjeLJKdm75QOKV`1MMcKe_ixHZGeF9;a!lJ>#xUB-`DcbuQ3#a zfAMM?n*Umdhf!B+A6&klk)v_20gM8P35Ve`A^D2iaN^gw?F2^x>qevGGOLp0P)u+^ z*QByiQh@cms@o~|+TXAj@c8eu$uBf&xFY@ZJc;td`tED;Bz|cJ-;QtRMg$0KVKo8v zAAa#0tP*`W`#gL4nUncdxf<-VR_KzjV%QM~*^ERkgtq)Lg?wQQ3Ua-cwT?=&i0JzIeha^Xd{-#QW zL4RlR=N%XBGkv!~zJid4{@lwx1PvzIC^L&=_uQnUB=i>{k2)OLQq}SQR&;VEf^5xH zMWWRPZjUMxxvUm~dC245E3wlqAG|#-5Hk?QKInoTWA_k|uOECo;^;6nloUC0JN>A( zKE&#Dn%13X45ByM6=U1=-c9(b7oi=mvF4|jO~SKA!MJG91D0qYbkve!(ie6Rvo6>@ zgZyWf#{Ugb5oXPe{`LMXbLuWAG*^*XJQV#rj3T%smTgMF;n%X6Ff1U#wV;YtKTyN9sTB%c_`-;s9JYJ*I8j<9w|3^o-3er5fT;XV zPaM!^th%Os2b4tv=Ykf&MapCpkJ)46Z1c(Gl6yImeLy*@X*7dR)2g1(;_AAd1eo%e zG8_3VXXtuf-_A;4Dmn_^L!f!kJS{HrR0|cpv64F!bJypM%q|#FJrAU%*Nm<5!2tYc z&fjfPtuh}a7j)h=@+@`6@#(Gi6|$NuvyRMEo)6bLs}Yr04RK3z8U^6SU>i=7_eqW` z-I%i6i=Upi{l5+*fbjxOyn?^o1Z_O`*><>({C->(74c6~U#jv~+sp@DG+i|Ih5+|5 zzUg(@4l>vtFIXm!1DJ~k8@a$+Gx1q;WG4KsNX~)~GAjA45E-61Q6Y>F3?VaAh}QV= z?eK!=YW!7s%d72ofoU%Vi+WCtqTbgtIBKSz$sC9O3Q8KiF?6iVgpU}3io+FNxqlM_ zl8om*`+mpXe)kVa1?-y{;g}Xful}&SD**f z`Vb_^F=R6U6(etx*bmw%L!}=)!%|X6q*anns8>+oW<;7;Fb!gLz4qybSh`lV}JsY|jn-puqFL8<$4q{VU4Fu7N`nfUX z#Fo9N%d94Z3Rv;Jd=&(HDodN)H=D0d0j87%3g8;!x$O;HPXaAO3RLbG*5R36(0ibo z>Iqj0A;;aM6~(O2V?9sF&V_Pu5f2~08%eXe(j~V)+;_9OZdS@>Cd@YH4ji&z2dbay zUNNx2604G;*A4~G7I`y#r)-INBWeZOyN<>a|;Yf^0%FE;B$|Pj^6+GNsY}Uh340XJG zK#^JBl^bR7@9JCel6`2umYC4j(biuGX0yOf%w|^kvs!WM{7Si89W-laFht6;9Jl#S z%>m;@tZ@S0kEYSyvL;yvG4>Pr;jtlW3flpVww_U(@uHi6)Q?Yv-uG(li)@ZgifLa- zi_>?hWFJwlQnIbH6?9nb(II*NvP|K!v^c$!{E;18K(T9dC-N4-rr-8}Q--tOS*PI& zo&@=hqnKhaCdu}9elRESJh9955v$u}Z>>Hr1QSo(<0`-+YFm_D8zZbBL{#~5CI30= z$%aBJsm z&+=Ocdst2Mr?#fc|8;d~(tuL{go?XoqW@}W0d_>R)!Bbvg> zk;z4&QO{!V9miph!uV!T5@X?%Ex=)60Vq$q@MB66=R1`Ym23-OfDeULYm5LqZUi%Q>HQRCtGBYadd5BB4l(O!8 z;NMqFdskFO%$BZc>{Re z5#();#agjgaGpOT)uJeG$iaBKT>cbi@ey!6TCuh&S)5zTJKd|-{u7(Sg?<80@h1po z)85?ETy^_5sK&?f9>0)RCLuSbNXeNgov_i}So;I+-*fDB7T1?N{E!M038g+ zs=u^i*nVa2AF5@_TRh&@fga27#)6ssBl9?8h2WKF9u7;<6?I^>))V?}Gt{Ci&mhC9 zhIHMV-QXd$X01gbd_`;hF-*>|5>Ab&iU(7};Ycsklo!UAFYnx8lA*4b?jfKdzp%OI zP0v@a;CE3W@Z!vEL*!$nm0^p`YcN@)W?msiZM2G3D&O0s@f8L)?^zF_t$g+*7I;-* z?E1bG>rg+KEp4CKnL&5b zA81?JqU|fkZzXsiDEDHtur6LQsGHCFDbIJ01it?Rq@#u<_9p_gziw-&YmW zUZ_Izplc;>*0?-a7{Zk-o+clb&!kDuH27-BI(M>2LdN`+bBn@r`Wl014K&gs>?m6K zD2?m^klubUOJqd?x%_TbYqFf(Gi3@E{p2H5pF4G9h~eAy*fJKuPq!AHC{fX>Z?d%G ztX~cw&m84#FXVi>0(~v(hpXUYwHrZu$T4}7RYqZs&b^jMq}S<%ZTH*SM^rjxFhL#? z)YM`)5?Q73%gp-nUCdq$+C_(;?D`W3xOm>Lw0P^D)v9vw(OUKNWr+|hQobF!w|>@m z-x92iquq#pduz$2+_wYs0|xPJFPXC`J(B-FeEoG$n`_iH4%cyaDHM0NK#^j_U7J$e zf=g*}T8bpN6TG-<0|kn-cyae)!KJv{?}qc7=RMENH{bn7CS;h&l}q-uWv#Ut#KKUT zPFcM7-cq;aH=RCctBDORr;gl5b^>gW(Ead!Zf3DDx~ndVTL_Ef_4kh`)f32z7ry)7 zE8nKPgzk2H=fXCf2)^Y0D|xhcOzOAaUJEjqp|+hK`0I#VsyOi!wJY*C^EB|jKGx{_ z>v&my-B2?S?0hZPjN-kUeN&gLrk|)L|F8K_5fIzSF_8Aq;@tuJrtLFUvt~-w@lYE* zkHyl`2q%!BZIVh>o6n{qn&QixRA|fD7%U``rT)#vGK$bO#kA?wLd6q<7<2LV+j0Ww z;9+0CPNg!pWiDa*utVx$T0Mp^SiEz|ioF1k+x&OC`QB|e9@i65JFkAnxjhQOnt5KF zJqpeAhJE&Oyp<9PU@q4h@{=*-hI4qJhiYtom^9(61zb2W@@_5u+T=x@{U#D%t8AA)4 zml)yUL{Zm#((LQom+hp*lxA4cm^6~!H5V(_hJZW?`MptSIzwOR_-1?|15f(4Cabo) zzAJZ|x0PdwrI9=x{(TNw=c_U}8Pm~$_1$c4JE^cEzfgl=M~nr>omv4=*i3zWO~HMd zj$H`J)ui%W@B-RZrhWnTIWpDnOy>;m<&Tdy=ouHrgSb2dJFfnCe3k2TzOI0Y_`$SO}Mj)@>`8n@=vMmFHu;u2(uE@rpY zPr_J+8kuqGtUuLk+oz_9VO9xm&UG@{=rGT_zHLZ#a|si`<_BS?b=wvwO zVz#}d@9OSnM{kOG-v?)x1Ma1SIOR7ez55w+mB(9aa_!IftTLztze6kcHmCvX#~Cv9 zrSHxszt^vmeJUZeY-&Sl2^6y*f6D?^5AfX|8{^ zZ;7O4;Q*hZ347CELbgyl#uv*F2OB#}n>7>Qer)7tba>5Q8k*F+_w@ASw&*4lFnBA- zDc2Lkux_;F169kuQ$%D`hJOv}ySs&{&%Pevap4$AP~mv*p*FewZmspblG_)1@besW zdu3$OKTj>GezA9qY>aGzJtDo;C?|i=e|w>ORpL|4f7?1?6jnwg(Q0M+7qHIaD2uJK zcSqXWHjgG~QtZJ+{amdQ;_TdLJ|u%<8XB7TaLfNSu2y*MT5x%1`#ZM1Zv(w;e;tj& zEcAmje4bs1>%CuGy4&b2`A)mhMC-gOfo?z(3Q>QHfxEBlb)1DAb^tP<+mn?xaOmbw z0IV9^8jMrC7;?FY;|Hy&5d>5)emPSDubG9vx00|;e{H?O)k3b|uia^OWVr)UKSesShfcI@_qyRh)1T1wKaS3-7yMc z!NN8<@r-??iW>1*=JHd1^yN^luqqxm9+t?)R|98wVkQ`mz^_5yu!jhSt2Z~|dLO?# zSHea^A~={vJG*&w$?zql0ZV8xBXJ)u5uL`m7m+#l(Roa+^0j|iB{<*!&p6#HczQg= zD*0v0V+fJ11QLJ1V_~w3U11fHP`&Ysu}Abb5mh;-y&E%Sl%-lwSgZxMD}SoA7~+w% zqG{SIH8RC+y`RgQgyWD=+B)u#N!uk&D%%$BUJ1SgrUAN)cAxDCsxZa0TGfgt3dooP zL12L2*)zp;h0VlP1^^apxc?ogF8;&s@0&L)OaPR8yzE`^KV1e2$j4N;+yrLPbxw@` z#0bzR=_C{}Hw-zH*O<3B@y}^O`sIWmW@#6b%_e*a#=z{g7g{UH)dO z-#e6?{|!&F>bd#9PI7lws6Im z_`s3CWmFc_bJ9wEgKKYZZ*61a4`@76%6VbE5XCV>@%PqftGj2G{k<=x>coazRo2kP zg4@b-Evi2;3qnk4iR{uklGWWm!jZ+uZx3>U2wba$$pafn5?H+$cik;gVPXWhtTCab zva8m0ZEyM{-VR8ovmhHZJ+Ab{ie-)-eTF3ZvbTZ=7F7etaY?^?Vlk`RU94Q2y-PNJ zAv80nW^IS-vvhRE!L?SccjUj{M*0=#0Zr|r0Ujn+*S}#k;Cvrj-QHZ=iD*=8-0AHy zKNn2XuKStysfzL0G)a~9vw~AJk=g@8!Vbgr}Yx zTWT^%!AM~6K_!>xXTi$k=x?9l=q%=i`@hMg)7)xBS-o?|7=}=~4wF{-9heC%U2aeq z7q^Fb->fNWl)nRCxy5ssYzDj!FWU1`lo@?+m!tUKr>e~|cGI-soi*la=KKMNwtjkLUJ zHcS9d?d=4jNtI0x`?!~K_z{h8(Lh;X>!;L5F>^u$KA&o+k=`A~&-RhWJ)@^&T(b6q zp*hdk7!F61P_zp@>#zaz0Km=tH#0y>8&ZJ9v{^?l_@;ujjs{*E-sUfF2eBJY)HeIA zB-CZE6I5W5YG?svMK0@Q8JBo6Lm0jWmIerq;KY#CFlb@49Zr7U2pBQXP@^&-Ee=F{ zB8=w?vOd#{klSKwwF{QPc^z%1CWc1mDHlvDPTkMRK_Kxup-gu^kC-{)oa1qci7Vn{ zw8sq>4~yf!O2q;pwN%lykt3DupL5JV2iZK=SaE!{YA9Lz*gn0LQpYhQr5JNa6iF#Y z7;p@=C~;?2;3&~xfD1COVz}hjRfH=KaW6xVAxcqc8p(ZxVUZzX{?=uqTrmx85mC+ zB=zjhZ+i*vc)I?J12~%=sqEDdLNV$)n?6*5maH^Nr;wa%Vmh15qt6lJV8gf)tKSj) zv8}P8t{WFiy2iOX4YI=TtI`T;>>?3Tdj*$C9T5M?L{cbize8V`f4ad(AFfx-9&ZDC z5AXb~(Rww_&GAAb5z98$WR*xISi6Ad*~(Nn!}Rvhn}^{{s6|;^fNiaOr<;q_lhsT*k`o1Kba$M$DkWE?x?`%P@dJ)X08%Fi;C}rVpzhQcC9icPOril#KPF8vj zlY}WJcS$0?CRx%XIB^AVk&r#TTb17Z|^T!$! zsn2qhOkU%Yla>OPkJ5eeKAfr4CCgd_jmS+g<85eDnZe&svkl25ukB}h)_rcu|0?Qi zZ4fwWp2axk-5dS6!S6U^w3r~kL|XO5fW0#F!%OdJgYo?f(UUhio)(0a-bMf*p|FYi zLO)(e?<^P8p)^eQn>T_djsjR*d&L`Zpu6HfKEz!z7%**Yw)4RP8qQOC{o+|7?n1AQ zXTEwqiE{KzVZ#*CX^pZ^%`_Aq>VyWA=#qw$;55Fr7KE)3O)0AIL=G!2y>cW}7)y=P z?DrTuRcKP}5e249IIg-;FGzSi28KmE(H{5(=N=Et0RN$ zN;4HP!BpJK$~^Z_TMAg?V#@^805Ck>+vzv^-oN-Af5hFOP_;lAPsqt9Wnr# zJwDU%s*4TD;Ecoz*URHM3^^JO_-vZ}+etG;U0JS|F*_`m6E##09{Ol#BF@$NP!@@( zLx9snM4AlMW!Hxd?NERbfuMdGOlPjS~KKQv-Lz`1*K()XUj6R1EbAc z+inq841sZO;3Q&s8YEnKB`E|DwtiiCe;56;Y|sNf!4ITgo>GJegslGA>vy9VZ{9DB z)S+E0ETvktUb-6>axArEY7A>TbLB5|`F<80VQBVf0k;!x!OWR_KaHc^DGW``oetg`=(`cyH;v z`6D#T6E^WiGAo*JerE}^fAZjTBROyw6<&s)D1vEy#deh0650ARX7u4jybT$^{M_Kv zv2YpR(IT+u0H2+7qVFb=c?Qnz%(GhW;C?6Y!oYJ~Cn@$_;q5(Vy2@y5)VF({%y>iVIMelMgCcD(1^uGw};Pr^a#`RIdPYP`i9<@%5YlnO% zVnbryL9nd`?$#8DdG43S0F`O3>nmJg@DQh61n@iqJFT|T@aujO2nsC)GR-S zpm8n0HEA*nrC=1TG?i1o+9){s@KQlhDGZ}@CM%gt_6AKSdr@pX^+9`LduoB@l`STl z`YdET;}>f|E|J1`;ni-2@J`v7jv_1P=2MwfH^4xkuX^xLGvttF{{}Id2?Kkd6=!*ZR*7<;YyH)9>hpeQl^pq z5+tToA-P&F<++j~i;Y$seGdqx=|F9NH%s>aouwgM^^AR!msPA*%ITGbIq4ub6V`JF z3&tJEE~fbLWGhL&2Se@kWQ?^3v%j&mp7CfjOtI2%N~c67v9dJ zLkh=Ph(0D$7+Y7h}b2hT2 zeN3A)V-#!qWKARosA9WB^rfo+N45Gyk+fJX_bK8H!jlilKCN#Sf7-oA_4}xS&W|NR zFpXHAWw(|-J~!h)(Y=^WDdFXg+f zbk73Fa_iQ^(9=23^K6%}ws~{Xz=cXey}B!%;Set7T>SER4Q#gtVvTiVxW<-3M=Nf( z3#rsFO;Ze7A5#!QG?QXZEDQFBnkmCONgZcV2xJI0 zq8Hj~;JT#)nNQn{g-2oED1)LHIG!^2ik{U{N+(hB5(b!D7g7~=NXeri8})8HNNf7? zdO0|<%ZtmhMvxt3N4)kYd%b6uLb!?2Aq~t;x&xchN4#M=ihN=8v{~fK{|~yWoo^s? zIS;inYpXp2*dl?I3#62k0bBKVklcNskvsD0Z~&(>e{5vr3(#AmU{Rl|@hFBoCe{1k z_gv>zsvBK8rvIVCuM?Gt%y$J_;BUAY9Uu22Uk#Gdse)xdfVfMZt&Vg3??gw#CB9~sP#eISZ_`0u!g=i5-`Q}Hj zTwVDd`~I#>dfhiW5130kY-=(n+sO98N_XaUU_ z^3E8g@))FNew|Q5)-cJ8k6(<+2kG!lcp5cf+F63$N$PA2%GDjA-$z?qTIV#`Tw1uE zO-H;p8HAU*c$&rS5nM5oC{Yxof>)hexjZLb81Z%mP>r%_F7(|3E`|xCI;^V)Hy=;4 zgOhY=Qmxw`iLG@T@j?qHYACf*6ub8olYHXDv^d0XGN}ZBp+361hTcAgsTedCZphg2 zf1dw@&!6(7xd@B-?RSUv29Lv*y5a7b_c87xr9kbUj$B$AC(Y?{=LMe?>8r97tAq`AdM~i&d?Cd!wZ-J@OmJckeNxy82Cus=sUH#uIL# z6v8QX&3~{U#|0Y6s@oC*#W=q*Jpa%-HZ!RL2#Hr`FFz3q4Wc7HeLnk$$wE`XV5hvY>fFfZ=x=L_ zHqCj>K;qsG@T>lLiYUsQFw47lr3^AF#_*XG*yUBO40C7vTx30B97Jbw?5uGC)}+nw z@XyRKS+0_5&lW;W(1`~J7Sj-vdwC)xSOKA`Z$e2d6buvnERyTFZq_Y4yl1;&#M@8j z{X~s$$WS45f$rl`LqnAb^^zZm);qj=`>?2dnb#vs+c9;Rw70jGi%yK%&|$T4()Re) z7V^(e(~JO;Gvs%!bS#r&+Z({-LLibo_{Oc%vigW+o7twe&@{K~(}vjap6lcUhRF}@ zrdQv$nnI_H&`de30d?~=ce!Aj?aWbGYEHJdiot;1y z@s&hc(3_IDqeuLZpqypgPviCPib3;`hd8U z$n<*h{kxaMrSSuwKNx&hApP+nTIA*3m2>xuMRg0JnG=0asih3DA$u4CXK{8il?-#~ z&}F*TEupF;u(|#*d0}16DDqpgI513^NYd56d(g?0lFOyV*(7(rO)yf_uv;k7Y7US*Q%>VexLjstD^U5`#*pcgVd zGo0K1PMB~hH@QyJfrZ?`jLj2Qc6D!tVlivvim1}}X0m6OTPMpohz{9~c?KRaUeL6% zxgue35~D8LBD$6L3Dci=tg%w?hdvw|#O$H-;Z);PG-41%dtCHB2C%c}|K!R3**Ef0 zxm?E9=6^KQCEkaV)ak*VlcwazwDi5bEpw}%sjFd?D9depbr5bRke7~9#h(fqzA%C4 zbEc8H1ECU^j8hgB?OShVX4^}ym1l7|*DMp3?qp-I<<~SmL}FRaFZjO}n0-kET*ts; zg6nt$k%v(SxUTI*;j00;w_~n&Uj5O{Ip&4&&4DNNGUpu(k&0z^q$mKQ@joXQI3G0j zLtV7H5q3zs{euuSkoz^gkKn{PJG%2x)b03H}7f_Hc*?>4DM)sk6$g2)1QQc*oc9;lw>+D%uR zTQ<7C3Bi9?22_jrF@dtmD}#v}613P_Pc7B(ctwVdS+_qGudm~QUCRtRvx0&0$hE@m zwy^d3ZQME|rRlqB-W?&syv<2dTUtqe)#P8GG#+c>w>ApoyP05{;8bVV1a}QACaSvE zp{Nb+@G&D&&@hNeq&f@(y^7KWDet@4ut}q>xV7Pt6r)G3e#JJp)#hFV{u~oi%z@Mr zNMHZ9?&i{aq-Z#;ZE|rRf+lsb{cCFp~)80RXJLD#t3ebPJ%%eDhkgJX+?}dIQiFBB> z<$4m~bXK0FmHC?Jc1X}9HrP*|C%iToA&2kkgWwWl;tM-95*hwJ$S5E$vIBcE{HjERKmQCxwQ^azVit zaRfVM)pf76U_k_OMQ$&SOh|3a4O4<$n&z~Vf&VulRqz+96YFXbT+_hQLZiWybzYD(6w~ZB#N>1Kq5jyY)ji z7mP+jgYLLQG~vR0dXuoYsxjErc~&kaax|X9%c+G+N;g@bBEK)|spzmbIGi}@lr^`n zdI*-D*uH{vVJV#9Fjb93R{<8kHS|A=uRRfTbK>KjEo)ZQ%ybg=6Ksx2`~qS~lc9~i z``R|SYBOu@IWdJI;^nBKIBH?^-iHRKqVXrgqZb02lN#6*yX0Aw3dfM&;q)D?RZ0SR zr)j9M)?%14Tpl@7Smy*V&}gt3QYZj*ZDoJrgsHD8mj0K) zG#-WeMx8PA^k%9-55!~@C=VKjpgjn zM{jMfoG6Prriy}VeYTj_0uNVJn^qh`3bX23HsK~bEMJUuZ?o-kYCWmm>oEs&2kR3g zkXnv(n2RhGjx7?Kb#A(@*^9%L6vOunW!~^)S+z=B_XMFaC6(^3*m{`lbp2T4ep$Am`3Xh839fCGxA35?4k5{k_$Ennn&XqSPb_st)*(T zfn^b2A9VxwSaFQ)kwx_@bTl(|h!RLp3j(x%iM-Q~dzhk14xMJkXDSI0Ko@_yHNzU+XNvYhEjvO9qys@Bi#3J}r zrr;}UCUl9!JTxgAkVXJhN z^0JsL2Xd|e$j!Ty5}KeHI(i6gKoqJ*)*U21K@+fvRMu?N2;m9BmzKxPC?&i*D(xeF z_-X)$bO>nSLZJ!`>H>sq&b99&w=B~5y5~ATD?b^(@^@yVR?4Jbh&Alb?iQNgGmr|_ zW~fmalugnyyg?&3M!qPj#ix)=9-q7?QPV!{w3GwV)C?B>HGQ+R84VMc2TOtUw!+L> zqtatN>Wsse!4lM$zM;ad@j^P9@hsG(j=xE55U~MZVPkzoRBOqfgfT)|^Nwvh^=dH2o?z)m*p6+%6qFYW2KOc&ow2ioLZu|iqtftto{Nn*=*u>X` z8zsGAiKt^~rL1N^yb9y5b{6pEEX%<>K#-9*M_&*-XzFOrsgf0{EI%EdTd1+Z?PDMk z?#^5e2*TvBf-=S=5TqzB`?%kRMz#s&>bEmArhX^VN)z?aXKWta%(@O@Llq_vC{Ml2 zKTu^ybP!~Yqcs(fxjp1CD;QEenkHSu4$B>)3J;rSBkcs;uL0Udi#eD{iw8&x;N8vt zP?To{QiD?T=vkg>S_p9bfc!wFhYZ_I?J4Qa09QsQm!MeS^(DYD{U>0621#~MTxoNg z3BhQVM)1Keg7hdNx_C$PafaxU$Ru>>Ue1&rEM}HdzczJDD5f^c8TVN8Y<1P7J9zNm z_DDfSQX3XNNuSw3An&o!$27hhk$~E<>AD_6u7>!@t#K0l@vXGGo{)j!TP;*;;phy6>T+7X1IT%a zT-6lxOTY3^$`(Z-IhTFt>ZaHr^yy`dK;)CkTDsb+by4#C1{Enm(}>qu4IA;{&Gm*` zU2j;Zo3!<+N|`$Cby!<@$=a}nU58dSh2KaSDl(0Nb4e4k=wk}uz)yK_m-?`luj3q? z6@4V;lf9Rce~JXeZ%JP|JOX!81&>#Dnk*L#S=%fbQU0?;%#97FvpYbWEx}y-aZ=U; z@sb}^j8RL;fZJOg54my%HxfhJa;id8*g5qen*;7ZUxBQ(FK`yR5U)wuwk>}r#Q71l z4UHIjLQAz#kX=Pt&rC2fMWbR?bZCWokQ7i%L9Q3)6U^0TE5pa4tOehEu`2<7S4ebH zxPs*sXM+F$A|xX%E-zBGiuq!@O`GLBfiSO4zB?31ky@?m0x_M-eR(V>?#v9EgcA$~ ztF!)=xH2C2AI~{g=W6F@$%>L{#V}aHaI=Z|V?S-zWyN1sd3_Ar*a{$1|Lr$lo_^r& zi`D^$7ESvw+=@BUQ&SgkDc_%;6OT;N(ue41B*3XU={n|XGaO`HAKYFTVdl^^%+gsQ2 zX6t{jA2CF}bd8Vrup<{l4h$mab7=%^<-;jFR!g3EP{V$pmr2$qxKD9Sv5jVY&}>3i zE{vXl{>Y?=?Kz}>#>T}q&!s1aDxj#GP`TKKMe)6NI=bi?*lR0_ z$JQ_bRCFPRL)i8o{JcS*CC_e(J&wK1`Z26pL~ZOV&_?XK>4zP9g;@yOa^g&U;J(>O ztA|FAYK53*>*wn+M+U4wK|f0K#Cb{%unSHL@5E?rMBmv~Q~)%EUzJW+_-{q-@P|Mn z82?K}yE|VD$Rz0ocMs*B0MuqEb_%%;W*Q*a^J)1~R zJa&>6wbOn8OfeZd5eV*5?9*^m4R0$N@6fdO+pT`E6D$&^S+%kl^8J~g4E8!lo24|aXVGJ z-pFL)z4gH0qk3AN_w$Lb=gHUt$%+%3p)UV3rRrng`u8m9em5Qhm=D|mvC+!+8=3;M z>Z1}ua2LV629|ri&e(uX#FCEXcxJvq@JSHlp|FEeXijp@!=;ZLWn~6Kv+ZR|eU|AX zlvwL;#574wHkEe+G_(FRVLb-FUJ$UHoXj75L=N~z$YpDgGrOC(iH28v3|bx`j;$0M zuliO%D@Z$Sgj$mYW7o+aTUt*`ljG@l+4Vsc(YP`N2$n+s+_H85BvazC2-X}uk}F#gA>f?>MJZwqKvRh-^o%odz&5YgD4Ws77tc#v~&~9 z%+A{41NBF8B~&bsE)ovO69}$FGj~BwA<^H!2MBhfh!qUVl{4bh4UpM4J?;5XX)!@8+PM22#Qg!qGm`2xAaH-* z5II;D(5>TkpD`6MsLcci7xk=(p9*_#C>afttKBWp-P@MC&sgr8+l zhhPOh#GA^di z&wVj!zOZe0zs+zIw*9LMSgx!6PGkUq>QA5vLWR`;6|iRAu^$b-tcG&7$oBOC!NP0T zLxHGtoMGp1YDeI`tp1;|&$i-c&lg@&AKCt>xS;LPce@gJKGcbPZ}26wtggf8l>Ghs z(i0=2fU$QMBibTm`$!<4c8M<@l#fjQT1M7KQhGujAW|lIC@`@=E}$x~gBVe5?T%;5 z?TG!lXui@N4+1_JrMb6eSSHpEjU*Gv+zm_QbcDkU`QG&ksm9(3ts=Ds7nFemsh(B* zfe;&IJE1p+{rOdWk!J?VtZW{vZl=4UAw?b%33-ccXxO`fxr$WOVX$XPCcVeh9Rc3SC5|%H3`gXE zktt20b6-^&0AErD3I zv2ZU>e%H$-wohq48e@wS&-z$))T#IInK#Wm0d-v@2<|%#0j*W_40>N|fd0<9@>uPg zHn{Ga_KNI^rn+~tfc^#`2SuyM#DYBs=SKjZxZM6hF&9#A;2J&hdXdM@*Pai%!TD7h z)z8ko>tB+X*w{-`ep5ky#6MmV&jqY?>F%4NkVN9V#kt##Y z@e5km{38fXhw_Wq{_xr$Sx!NN!#rt1imGA4i-R% zNq|CG0Vb-tviziq^BYO2Be;>9n)zLF=BHd&nkj4iH2xuctYjAe9 zB#*~*6g4ajM11XY?Y>%VwP&#FI>}dy;*)*BUFAlf{M<)*@aN-Z*c$Blk1T_;Coz_( z`$B3m&hur@)fQmQ!mYsWBlG*h6xWg2E_8!Y<1E$Tr}&yW3Xud;_%5W9Vst-`jG zzy&#ILH*c&>#`WU}v`OEKXYT4iEJViZ)0M;x%-;X))#F@n|T zLL=LXmbzE(->Tdd5NOEm8|F!`-h;%3e5&`a)DI1!%f^R@bCFP*s=Pu&?|TX6Tprk# zDbKFG6~l1dq|}&zB|pqMV74kbnADtZigRTs*L}Sl_TEwgrgR?mi^lkkkVh*K&wDl? zw$!~#b!xJMT?8CXGqmx=HOyD-dVl`mr9xe^qKEZW~xN{%!jO; zdukYNCe@Hs0%;ZH#w37S((>%dA!4D#tL*2;cBVRQp8VgEBL$2*j<_nSSIuQ2H-|54 z7kb|eopbnosRK4a`gI~k4)_7wZT0C;tnxDyp0i2xTxaX2R1}nL3k#3oUZ-CI1+W=* z*toZPG4|4K!+_q=#|wWxIr(TetG?XfpZzdnFEI8$rvhQ>_%m^&R-I$C5o1DYE73CB zXXe1rx)*NX>g5J0eta;Z8e*I@h~Llnx5h!4^JIw5S@=tZ!Slo=QQ1~lwiTgbU zK`JcxmC95Ed(MURBe(9HjaH3m?@j$`#;>E#ROprzNYy()L$+F+$#42X=Z$;}ujA`| zqwuY84>}Sz-35>tN*0@N7c&nc;Y7}+b6b#hD;3Z_MepjJC~cPKC{QpiRAYMhN!GS8 za_S92&@)8AubBiR!?21tbTDE|5KT=)BR#Ilx|CNpRj2^V)HfD-3Qqk$$LYu5!x&$3& zG3yA}(!x*7k=qqQ@h~^KA*F^U}1h6%U(X zyK^PXgwYvY8k|RL1!~iRa8k5VF6r5G##NUDihN19!7XT7Nxb1eLOpcb#0a3aOWRw0&e{$xl8JXEsah`C?bqAPF zrn#CdVL+J&uP!Xy8A? zr=0k;P$?NkB}5Lic+_`q0nn8EEXfT>a{k-3U>^6BQ%OFVaLdb+9S|~%Z?r-u-S2j1 zzL}bUQTf4xFbW~;U>s^)CDy+v5@!zq;Q@a@gANq&xYK!XbTlXJv0-*f_SMl4A;!`Q z>wROOEYD*k*4+H{!JyxPc7&-Fg=fO`+ZHT_5iBkF>JE*KFORs&9oq#}uk=Z!!(#_W zzpgyCNjsJOVJa8)x^f|~riLef4wJ-Xcs{ye;zl=4?7|FDn;dHxV5{U6P4B%Ov41^6 zM`MBGlIujw7syokK>l6s&Absv>2TnwTDe<_%U-hbtDhaq_L$It#-XF zv|<7A6#nr-v=`+3tOIB*GK7>f+it5QU8nxJ=o8H2vMdjAxVP8j0p(?#LPBND z>@@7<+1+wH5}32rL{BPRn3JEXQz$K0&L!1Vwkjvhkm|X%)HMfzpFcTve?eMsvx=*V zPa!A@)*)5@$hH0ExAh|FFsgl&NmJXFe7Bx(&k4ukBmh6w!M;mj6)XYrP&|hv-?(?; zw8GRlAolj{qlH>LZcEzi>2;)uO-RjDi7oF`!E1iR1@&*~d$(F9j(xuGaM1!{R}m0u z4wj018eL2Gt`z(Z>NH%!C+9V6O(CFr-e6E0STV}am{}<^6B$E7t~MGCvwLjk99y-! z(xGNNP(+pTJ^{~%ZG8bCO?3CTarXG^0?>))!0#Zg=8{p`#KM6H#ng-! z^OYyEe+a{9W@!bR;C-WJ`D*dhkh3JpkhFtLibhBrYXU1pEesJyTG7a<6+|(&GQY0d zk@R;S<;rcj!HKx($Pm}43j|zYJB2i{7|+cK z4Jf*V{kP4Fva95c63|RudnVzXbkZam)hO zv$g35kxhQz&d}ZZ7U+HBx}%$yv$4h=u`H7jP(aYCGeH71r4esFr(O0c5QTk+u z)O@9zauW47B%hp^b6t10>o=ht(p=R|`$1PvZ4iM2VoTsxCZo#n!&cBDf4Y9^NrlQ{ zGm8nV&M*=kPfk415c2rTE5bON_<{>fESZeK?13%4bs7mu$~=T{L1$|tMb;1-4RsSD zk|*Pmhoj^vyBqKA@HN5PN)E%O?mkM#+HrvYn)ZKgQY2MfLB&||lBDw0*!ws|hT5`F zphXezCQdPT?|9em*2}=@*VFFa-~YdF(!0bJph*NY_b$(a78rAIaDWbb`GAg|?gAF^ zYx910MUDV8f(H+f9pSBut-)h4A(wZRIsk$RfGz=oZea7X@-MCroUW*go&ay#U3m-x z{t;a&61u19nr=uqcV{&WNh?il;W~(cZBR-2`hHic9n)!R00p)Rh961Zu@|A40K|*as`Fd`xZ?gNDY=3UVrLafKx|`jILa$eTuT@E`|F{nO zVTXdw6Mfdc+W~GlY0YVaV!3O1_@3X5V;`HdbAXA@?gxJneX&!S?+k6;gSEL4`{P<4 zZ6hxOyr}c^=9JtJ!qkli1Gy_zV=`8om!#Zdw5xQrz5CXetKMxf6E#+aN^z#Cnx@ny z1IzpSIL8G*Z3@2vkRO7RzqYfh&I8>UH)xR&;38CR(7(~R*YX)lVOL?gP)n&|c03w9 zI2CDo8<9Y<6c`*hZ5|av;9I$OTb3C-TJV{B9Q4|*M%{I;?rH*?A)|VuE#X^-W(V8& zdsAD`et+q1xJ0C=)Bu}?bU39_nLs7ePSX3{+j2pf|pP zCJaSICN`Ywez#?Gf`B&R^tHj69gpuILj||2m<8Wb4yW1dUrucypo_i{a*;m(V4mEz zu#YfMVGrR^RJekk*%9AGAR(QR6aPXd0eqs?Yddx&g&G!5yO5xg8P4(GoVbia4~(NgunSpIl(!3M}JBFu4z_|D;L!*nz( z7UiK?H*AowMV;OT?5_e0vd%OmXseY(=ZExa<|d?cH*)Nnw79W)kHF&Q$#geJ*PJ-r z{HL0Ooy)!yPc5)dEixD`Q2|uQlmC?2hoXA?)L!0pWv=a3w*Z5bj?{g4`0N|r8Z?c` zS{#`V~;Yhaugk!7(YLsrG$`($SK zlrS9|v@IlHCIx%}v~ykwf6IBKqD$wR$C-DUdD~T7;R)PhI@+^++wlBU(t$v@)AzZ3 zHI=bXEO<}xJ41*f_HuBKD=>LTWR~reOA~mT-QrQm4DcPp4 z=?F@&Hr{smpXf9hpPmO?%-isG_I20sgq3H%Igr0-30MjxrB|0U<1=hxmP8^1@hm|I ze!r~BT*d5DMu>qUl`f4(__%6@)-%!{-9o&1a1VjCCoj8v`w?t<}8? zMEMxhDtamv=g^ojrz8PUGLFIwZ(MTIqiZYbxC(K;$q$x(@3jua&P_IJ5{(Qdv-+)0 z@ZVVh3grE3#W?h7s=5wa2-@pX0H_OLV0@)tP-whl`dK*A-Y>0%L)wsjQ4&f$oo`Gk z6Lx?1zwfkG^<<@`u$^b`C6;F%me`@x*z0C3hb{ zIxCYKrV%G0 zb1Dt15b)1!{jd5N(GDa4k%`cF9qcU{IYaE3`bz)aTMYANzr4HY*SAdy`!2G?Q zC(tZj_Ge%@QX!3Q4W4vZac+4N7c{022#g`S7649;i$W#izpq8JawNke@X+)k2Rx_h zhwfUbqP?FA_-xDua*Kq~PTjCV1 zS?Q`etJortE+LHh^+#m_^0fxh?8q?DGGqeT1{nL(%(L!?eWn2>A!kgTr{c;owkx@WY zKB#N$*Vt~wqA=D4P@>diDaT7=fw-W`?uE$)eHX{SAER5B8xJz5b9QB>#`%7)>0JBn-d`=<+LW#v}PW@JSDHo>iQ(v+@Q3a@nt>|#)S5{-F z>=6!+0s-1+Uc&r8JMcg8v}%cKmQr2ce6%sqi1~w{q=0hFUC4iFtbEEd4N>bt=YWGS zttBN~Mo7^5=#?&UBzHUeqOBO=nHMt$dPiAxuD%-}Q+9R|3@hf?d7!kLd4n@RIm0vk zA@M96E27hiDa124eD68R>0$7*nFTpMPN6TBFCVv^pa9Kse)3zd3Rz;y%KGKIS^pcJ zFw6=g&0)V8pE!@eZ<+!L82f5?XZisKjFW?o-y<;KHqxZYXVM%9gqN@|dpNSVtwbY= zjOf@~HC_+yWcWH&@%56jCbg{ce-{8{P7dDw$2GPJ5&AVC0`=3Z_y1oANAee_G(O6$ zU}Y2ez*64lH0dnWXK%MN_v7M7VJfrkJkxU2;_36J-uSIfO>Kfe>vVQ6<8ZK5F{ZhS zGx_2t%aF~9%4AVIdILk)P_9x&g?yF|CZ^@?ag$ZP1L1RI+~R?Tn}%QOh#S-Ekhc7*(xMMYfRoi^0+J2h$$Wn&?ev#CGp5Nvk(3 zzrSY$2#6!JPY9>b%%Zcm!UwC8R^;~N#gwS?tDuoFD$1)U0!NZXs9VpesTUvy*;K1v zy3x114^{*whV*qk93@C78+~CKYFde!6ptCN0TD{*fM<`j373Am(Mxiw+$F97wuhT} zdZGeceC$pVc@@HI>JMndU5)@kQSv%ym++jr8Fv_fY*|+(t zfBh43&k_j}P?Tj6jB^H3>Ln2FzzxJjV(aDA@D%F4u8BFU8`u77+FTf5L_Oc$s6KB; z*ryh*Ac1};Ya+`UyGiuI%*$iMfY39n5@aYZ!5^z)wS<&vJxxK>KEeIfo&nvRiY72* z%7grf&8I}}(--sZqRc()PDEvXl*^2Rh?hoHvy%QE7EX!FC<<_iyjlwfKr6jg#>4|( zKWAEfo{1DXQ5F%6iyYMX?UVP()zCdyE)zy5I1SHV}3 z;eVpyh|8!0ZHi)~_$#^f9O6JA#{e%;Y=E%Oy2os$I*lou!3CO0eOM9I61OP#2U6=E zuL~{ts|z;ftn_Tn^)*rQcaqq+gYK~6qR#@;dHtt{DssPA97MnSP0v{_UEbaaKg^Yp51dTzb(AAm* z>1yZz{zx4VARGs*eAUAL)6JK?91tFmrY0iv@c3-_k2gX;!H*3RA4P$JXS=NiwVXdCg{IgQ!Dl>= zL!36JM>886XyST%=d}{I6bUU(%UjdwAC^(_`hde})%(01ocTeUxu#z}TK zy|^sB_l{Ksk@Z~LyeXUc1|{S?-`M(J_39iNg0nSj?=R{$@)QvP213m=1>;@>Bbh)y zgA(L1cMJVlgmy`EXJliNK;C3t`Qb%TIYLVbJWitO0Fl(&WW8-O)D);mN12>x8I(Do|Kxf#+Irk5~_6hAJ!c<<`wPTp!;Jq%j@Sk`W{` zcc)cGYPM~;t=&+qs3^S#c6A1777Nl+4bQOwY{KlX=3F}hP(dm%6Jr}}M zu2n3QNtKod%ZQY`3I2T8f6uY^HlYzp!eB7BQGsvEP>P-KjD>Ubx7FZD!$#<^DzGp< z+T`Fy-lciKKyW0(zhsfGiyBjD39W7uv`6$Paz5`oHq+Pz(MK<2&#?)@b4}Y>8qW#rF9=)N>UzPtY5z`*S+86?s5>JnkB2yc$BykM7@kn;*FAc z0SxXx@n?5HbI;_(Koe_2tQ&JU*c0jo=cL(dhom~!JEYp~uat~MN2RB}_k6%Ck@Tqm ziAHC~2JPR+q{K}~D-s+$qfT^|z{|0HSU8pEddfw}OZp^`t4yam2xW@^*K_s!>bB+h zfG^F4QtwkZ^N&(n$~y}--{EiBc$oRtTtR>|`L9ZsTO3P=nCR0$ z4Z4rpS3QG^=j-kb>+cK}a|?^5hcg5eP!Mp8j)Thl%D8^DgBe>uiS%cBP$}9)`}rM? za=g@DucjG>ZVa2VY{-S4F4>l_!bp$M&1=*SqgmxW`$?m5vqrlwXWJj2ye|?$4_p;J z?MR2ix-}mSQjeqePy24@PdbYHTZ5dTAFbQHksK6)S4}4ZISd+!G@zTV7Rl}^_0Q2y z7^4}_j=GO+w8B@iK3i$9DQ^v-6wn~%6$1XIE!m;eCZdfld6?7SgfybtK!rufeH#(X z&F1)GZjsuNLu-*)xlRM>;ZGXPqZVeb+#X-PH$%M{_3|NTd2{<<(cxjPsxD@OOR(l< z)4Ig$lF#KZgvSG;?^P%J-mcdh4xdOo&A#-N-jN(`oIudHR^1J*Oi>)4C{|Pi^Y883 z@NbXLF1S{41*lB>d^`H;TsG17wVTiXF*m$fJh>Ph{hMmLI8N(ZJBaFHmmbareUcqo zp1~K$1U?P9uU~xfMLNx7tRyyn;;Hm)KNP4i4L*BW@gX4IU-5f9!MG{d)`Rr69t591 zbM-`8zh7OR=XNfAdY(D%%R6ifVD{aYxtmA^Z3tYO?kfB~p%Ln6BCUriLF-m+YA$K+ zCYoG9vUo+6=H-_&Iy7#_M^6ZCwI}0YTpO>92>SH9I)v|Bdm9oDEBiWw;W3fws#wy#?hn3%YuG4+MwjcYj`CV{3XNLI%4jbkrF1b5bly#3uu zsP|gBJC{HR|y)4D_mDO~dhVF?m=2>-{!Wn_t{R$B0$|^ zWt5(DZ?CzSanOS@qM}hXL>R*ro1rU%la+hQ*J8Yr`iCLq`gf%HVddK4o z`K3cHgqE8HEFYKusH|Cs+txD!5vXRO?cY>-4dd+r>vPb*NVG>1z2N39SB(vm!d2X# zz!QYapKF8vkRaiV!0v#M=`~(>%-*GZft_QvGulOMxp{$2iJaFwdzt+$;x*S#=)>-F z&}Th|#rbv5u@1l68*TA-RWrc}e)48vx?QIn*K&Y0PSe~94}P+NBhFGy+9Dq~%{&>BX8*PLF zWtWiq6N!_K8@8&BT_LEa&r4eW-F9mxP&Z<(!TyWj#r^1JTHvF@tUx7nA$>J{6Ho@1 z*?qguX$FEDJ=51$ytud^Q?jMw%sr+=MLO5bSOY_QF?d%t}O4WcK0VbgDM0!KWbzoq5e|BIaEf-Wvk{N@yu zwT6Jj=s{GMJ=9<}51oFP(cURVz?t`k$ZC*_J@N76i;Dq+mSts(G6QHs)>kaPkeYos zGvHnDN%%h7WJB|O;5`9JGYR}oDfd$gt)`RQyHAx`KWTS+kYu#M-b8CCDqQmX}f;=_ihYBl{IQ1wktXwhr?WFy%{JGXICmT>WZ)Cbe;7ot7)F?q}v?-l- zKOt{L8{|kNgJY*eX3wWg;e;_Q7%*r_;tlfnEt%UjCz!7&PSa-eUDkCm2&=F!CYa| zIYv*PZ2Lz>91WjOUeFZV>$YZ%@Wxf@Dfcb`0$fmYBM+`@e5je(E)+KmDbSrc6QrG8`*9e3k-SwiA#Zv zJK3ntl>S&#%K6+g{_@>7DW|a!f7=Nkh`IQ8H4THqs2%Wpvlwkk-`g8WFkWRK#I*az zZ1@v09?OqGse?A2U>R)7haOEPgv{7^l;U)roau(teGhhHtLOc{nai_}AX}3YGrsEczrEaUPxToj-!40xwKP6$W&E<9D~SM|3uF3ig9@U}&4SZ<}}+c6W4XX^2#WKuHHd+UxQRSNr2QVUdHk-c+J&Q^ zuf6>p+6LaS!WMg^6{)a=tmE zNPwdY;ML@MxFayh`D3dlCvF+TDpuq_o109`{8?+W-OP5lfUxsYK0WH6F1fN&OJ#*8 zt!?fBHKus5bex5Ss_b94IdA4>ekx4dmf1!kgis8miFOhP9$Z22stZuS9){5CP}i6? zi{HB(*ZCjg`hD*z2Vp19PZ{pJT?H>z7#8!1WC8D^Dd@QkjK{;G!JB`#63+@GCg^`# zP9szz<5Iy0a4YPSXm8IRFQe5_1d7JF_`At}2+0a2wQ$p|f@Yz(;cv5^Ul4$b$f|E| z?$7N*3h!2t6x7jqcZ;n-J>)-jnO~Z`m87kvTESPR{K(9@UQKo-fp@Ky86)IBaG4*e zt5rvsbshP}v6%HhNp_95lfY&^=z;k=sF86z@2!u6lgrSQ+kx*TbbDu{Y5Hexz?r|f zht-t-az7lqy~U?zex;9JU34?bU#gIIOycB{(oSpK)0Sxm$@P0#PH`~>h4Zh?iE>qB zmrTB~OCOsfNVa!v%0+b!c3VnRWDl7(OA-9_P`pSx#X3@9V#r{@*KA2iQR!0JD3bPA z82~T5{T3$A`Od>nGE7xhc2`@2kvH|BnIpv~yOBfsdm-2audRNysFA@%yvbr*YIDjf zLeo)c_?Di5SLy5&G3uHb{IQ|c_2UTdKRqpqkkGm5JAO&BZxVlT0w7)iNlK>e>H)B{ zo?a)8HYi{(JogqgqsqG68I$LIBi&XXJSIUet`nt{^M}#VP;VM-Mdg4fZI=n0(?onA z(lVIH4L(e+$yEjSFg_Ra)gpWhBZaoxfnN^CM>JjH?zi7@q~P46Oiz||x-n)^L?9>X z{yh6CDI#cJnp|C%c*kFAGU_`dZ_wQl+i{I#e0_?bTPewn#)KD&3*=hg;4N}0o#)2; zxAK2}0|$L_*B=5pLh%$)SM9xj@aPMdk0S4riu7KSi#}s{dU>ikc!x$>wHMHx5QdWp zGq+2#pNqNInJ^$mL#NS4&#UBEy@9IpUU+3}+&GpTmWts+ETl9{9r(m#s8%$$* z)8V}(7^dQZ{d3m{6t~O=jhR_K^FeJ=Sff{VQEnYAnZjj%!rN(xrVQ-FZL!IsM^ENY z#++q?l6_miMa6~3{``>yAyiU|BM>VS{wL`cMZ+w503kKe7Z~>pZ5!;npv_>(4k?X| zGfNKUp*?uyEcS-3qvVFK0ycPVy7kER2XE^%kr~B9>+X|w2i*w5K!Zu^ww3m|a(WM( zQ)Me*N6Br-_C~E0^?Jd%(2MPR=Zb0d%W9adR(-b?m!-va@JHuIl8|=~L2dPOPC{rr z1kfkf{0jJ%Xq!L%0N(u1?YM?)(wZmJX0jc>qKPAoBmu>I7 zCAq5UK6xFAT**@7B$UV3Wm~GCCHEKUY?xu`8#wPd*UJk$@w@n!Kc767w!>RKrw}^s zZ}RWYrg(z?Ji~i>O{@bOIoKQYQZ~8d9Ni6E?D{uHDd3m)dJeh$NB-NX{e5e|HTJ`h zeXj``&b`Q*Z5{}0>o&L*Nf%-Z(gXcUeW1b%Is{?ikEI!qIMZ_iiU z=x#*G&tk?gpG8^c8V$x{Qkv1C9VPx^JwrC|p?fKXp{`90yDvtDV>&%CM=RAbhoR_< z`R0PWl*FmYfo0wGa)L4|5=Op$d>=8eBH2_43?l0L7nFHtZ2sfKITgeY!<;5J5-K~g zW?JiAOVj)$#qu}U4**LzKvspwux~HjWCyL07)7Ft`tqnWc<&ciUxG$`cGz@Bwlm#V zI)FS5IG8!$POrb8&v**+$wJUq~3l62G~CJNM>he zpVkEnLGWnC6Xpj^yV|L-<{uGz&xLxh`;F%D?QQk@wKdCjl^$wY_Z%wk0!;TsB3IXs zlOKMt3V9R4u-qHlZ!Td@!agsn9ub^!1L|u^4MvH9$7L)&2NeQNi`OG z!!N(9$h7G^>I3cc9e1Q2nxqiqr5Y`=IdP9}5_|I2cME5lSaXaLU`kKY!Fuad5Z3}B zXB~5F*$V{Q4XY`5_#yP@o^Ndrw!?bxNOC%lL>*@Jx9-zB%}LJ8*0-!qy3{&tSp=mp zI~HI&$ zN9K(ggV5(y==|cL%|R}vzD*n*FRSFZRG(Oz$}1AS5MZ#e+7iIq^;^YhZIwp?aazQi z*zG7;jVDahl53ff&}~RyA7Y|~hXALD;(=ie3<}HN(7(CB!+6~bVMJ#LlAXUK1q=-! z(ybw)p*Fh`XWgj_WLG3_jp=0d#+yf9n@HbuAj)sB!G|mO$QpeZ?A!D=MzLFrjmXi_ z-4vst3~B+{Nn_XYr;oB0?t9>_ABrk5#tobnIbr(qA0*-0z>B+Kfj4J}Z<_I-QzxGD z>@9@4u|3fXmw$B5F1F2emOZ61c!Y4TdHBwB$j*w@2TqTZN91}#t$Do6DrZDY>M9EU zDvT;9lZ+l~)q;mMQF^B|x5e|p@)71#V1?*IyC%nWiW9V8qyR*$5OcD9VoNkY(!d6} zm^VJkF=%W7UA5`r29$;{J}IX&eQY!DpwRiTkB&P9$=Cfst@y)v<|e%-5yEr<>8B9-f@m@+P<&Dsg3yf`8Yxd z6l!Zf^c-jYs1(Mv6E#sdk?U=}`VO6>y73@DQ^Bh|byX%mG6aYC<*T6sIEsi`BLH)& zhDP-dwwJxKop5Z5bT=ksIqZ>s{Exn^*!g_K(y<8>0x2sFH+O98K| zuX=i!&l#$@H8`0J`Ym_>pTZ&iP)co<=g{2RPat&IjU)#AFX3IPQ>fg}F?|Mb0RT`W z?mR?#(wz985+kwXiOD>~P2Z4I=%$Uw`&VPr`k`o?`g_ zu9iI$k{Zom9xFO(d@$Mq${j`w2^G%FtMb2|=ly%}T=}{yScOjL&S)iL9ZR3;kWS~B zruGj)moT4I=$cu>n{L4Y0DwrysOJQz0+x}ZuRbSXjy&N=ge*+Fck{0L!c<(f9OfAF zMx*&tID*MLW9G7Nd~q*$R$p=wC_D-|JeckH!n`IN>&RJ!h3#alSo8mng`Y?M+_V-O z7QU|=zjz4Wxg(eK9Rhe<=O@jlPRW5_dk14sWx-JbQ!O!15>fPV{UWLX^kKF!L&m(d zb)@xnB^-#=%+=unI*ds-%t{Fq6>l*MGdjJl&Yz@Eg=MVTZC3DE^?*j_5TmXI*Bqg$ zm`J!osy4(xzhQuNqVJ!UbgSqP=SH+pRM?5FPfP?sh?Ga(@ zL^L5rwNk2iA>ZMqM6Y_CrBaaZnXli8O*@N7-DKKi>jsv-OYU3AAklAd(~^R#)U7SJ zk)t)maD}ZO^J(BnIhO#aQCh@ ztdBk$#-^O#74nVLDtX^z&6zqcb#PIcWp);?@l>AccF$@qV+f$!Jsm))}&dDnZW8EJV# z=PNR~MrpSu7d9E;e~xASbN8A3raySIn=_wSDZ8iyq9(nx=t&538TQ5XLZCChq@e2y zCiDAfNFiPDbQdsqTxB=D5g12D$K_@wly{!Jnc0UoH9*hLT71rp-MlRZ$uv@GQS4A^ z?u-v%9t*c@+3Ozub|{9(D^1l-a(y{VSGa$7U{hL>;pX$0z{FHiUX~$P0un{iuI8r= z>s1rkc&FWS`kg86x<3Oa65+{HaN^I~+c7%W9i$r?eU}YNgJ?@T2unlk+jbu2epl;< zG~B+Y9Om^~Wv6yKDr0^?ni-NpoV(lzLfPtcOj3RxIB_SjH;Vatq95OrkpO@~k;A8& zbhHrZuUQ^a4?q;yx80kCBYt}o_E`1$DoVoK?fXEG`QfH@iL97ucM2cc1t0Q4NDkWNjcuPCwFIEX#OenD@hDm#`aZRIcb*Wv7>@@jiVN} zup~0|^#UuvL;|#DuxpYW{CZz;Qu;^pd-`QR1{s^}5cM8)HqFYk{E-QrEpzQ3(K?-A2s|4U-cJU>^f`+kze_XqK|@(Uy1U4@W^bJ?m44jx40o^Qm+s%#7@`$q z`mebys6JPcob+l;x}-S_$vo=%KQ28+G#$l7k-|726~w}k`}N#`xK+g&`Yqmy+KKf< zosnO6j*VM*QgHgelh`UUz*V=RHyT*CV0%+Yg!c8Q73|uAOaqi@+tft*1-m5>p2mv_ zOGB#2*@K|OY{phA)w3%xHSN``%Bxk3z1zDKJU-EN6GXYH_{12L@Byg7OZpP8Qh!yp z@<;hdLbN8ve;8gprM;isZE(h8+z+i^vptP|o}Y79y4FUX2HW(kP!PqAaNh!!aIq{2 zYy0_jRU(=gaHDnX8mZFK(mW*7Yk-m@Hm!Bd?B21$m`0ak`rvPK{Gr&?h{E2T;NFT? zb9TOaqC4S|;A?zov0nRRhaG1c`!?;5Wik@>rfJsk#jyA3lvA z^B4CfP91h4A>D;6RdImTV`rJg@l?o5Ehj55K(evKX-oGz_ZWa;j{8dh&qyJJa@|Yb zh|{o7VJ}YB*X5&APvr(m+=0bP@p=D8h%skdfD7f7W&Rlx4QK`q8aL&DY<5=GRN#$p zvOgG3^-qae)-YqU1w&+Lou?AqDRV6{PY_w=c}lIsIKuPOv=y5e4V5oFQCPJ}o7I|$ zdh;}Suua|kdqAY?tFV9iaTc{NYkrP>QD?X7r>Y&r&{5iOF4@V%7*&Mj{8lXsQmqyg z>u-tRX?&+ade`^+eS+eI278W7Md@63Z(N|v;*fL;yU1fGj!%6i5rn+)?cJ8Yx+obR zdat80Eb0;vb0%{TDod)Ifj&-$n>kkP8PPF3&CI}h`31iu`t!**OSO5rZ2S&OQ+_TU zUL;J@MNWxdj+u`M!_OzzUf( zzhWN)2F_03miF0{rgOGFasfcM_0GUozbFrux{!#TcfFph0O{2- zDk9&5OB555lS?+fOPJr^w@{s)*ROKj=+v3NflulpGGd@wl?nMEE+)fs800kbZg~5| z!md(;XHl7XEosVeWDS>XFBdjN!Zvu7Z;OtO#S!bJ`J3)-=-t~;lJB;#j*d?&W>kD} z@h93Npd?AuG7mT5O;~~_M6#6@S>$QuCaqu0fu2W8k#bJ&oy$$jeB5Nq=8xoyoE^T^ zAE%j?f30~-#CYHyExy4T1R>VoXp|S;GSS+9q>u&J`q@9?R6^r#>4ip6(BGqzd(O9P=0C4H_{E3> zYVM3gkKDffd%nr#^h(E*{?|?hHmDNLns83PDtu0bp=l}Zt4FdK&e5v_>ZxR_^wZde zRS-c{`wMUVD#&|kdOD}F5_P$`h-sVQzmVhgF04~y)D`UU9C`hE-E~3R!fu6@K9GQ0 zBK7W=bJ7vZH9g)YNH4d*ezU(9(wy6^M?koa5sf$@@v7@2dcrDO{DyIWNcuD+hNR%Z zDz5(xZk!yJV81L|QBI)SrJxs4&LaIm66k8ZwLq6$<1$FkTm6$@(&C2pM!TDR`NnLm zT|CENm{ndkx@;*nVj_l%*c>%7v&%MrCC}$$q(GS2ijh4rg<~hrv%&`W01DodK zdSwSd=lsWo0Pg82`mObyF&%sxf8TxBj8M7l3(;%nopC)pLNp2bW0zh=f)|qb9p;Ov zRt-3cG$hAChc@+Od%;H+7k}&Dln8&8E0TYRyfY+GU8tu0?cs1dbJk%-FKRHShTSiW z<^|E(p5AH&n-~3XG*NawgyrmDFE@z6i*p+3PkDi8O-2b>YmW1L$3(t3rGU6aO^7{C zf1(C=*XMaS^FQhq&IT1q_xmQrxII_{J(3YBS990}2QDBuYgo^WkJf6rrX*HU90+Bh z*np$9@CmR~z*lXt(zO7US{N#I8{;t9y~KnSuS3R!!S6l~li9sVI=v^jO#gTEorQ(= z*|uj@eV{kZC@aJ|Zs1iMoVhO_Rp8gLX##dX-g&|uo!9*X-K+{}K`Qmpy(VVIu#$$3S?{n&rzdIKsO!Xql#uYJt!D1Gy9&WkA zqJ(4K`~6{dAHF-ek*CC@a5GYPXWz03W$cpYA=TiG*sVL;nX7`yXeCEn99QC zUjxrWH;{|!O}l3>QpF?xDWsgfP9ZPSf6O6iZHP21O|>zGmGkh|Dzi?mE`a3!4Y(zP z*smV>|6V!qV-2I6bKvaJ9Pb9Sx?DtR8=g>FpD{JeCS+cR!i$t$wl9D!JbopJFMs592(6 zzvV_w`G9qxPnpG+F)Sd6V4s7gkZT_h=UYrQO<7LO8LhnytkOB3*j&svUm>J6lKZsE z=i)^#s^!3(WzU&E>?*VdRgC&9*ezyk*W0!iG}P>@WeK$r4~rnlKx{uJ4+5`OgQTdT zv3vi2#qn)#&gVg8(I}izF!W^v%~$XjGU?zDwxZ-W1Rcij+xXZ@U8$zAZK9pr- zdD?-61B)1e1b%iX?W%zqx*mZvGev4%C(}6AABPDQD$ZyB&YMO^OYm+?%?r?{(BDpa zE~x(ud*f;I(6haT92YgCn14p8>Q_tXN?C@MQYd#Vit-7!zLg=?h+IiFa%*cnD8a4- zFQ(8~16R>9TY&D~ZwBN*r)crkQG1*txqg5i*o2~h5MEa{-5mk~%-uA}i{I(;tYiX9 zZ-y@S;R$xi&D5t8xh#h-fz(%sp9#3^68=Zi|7X;Drmy48QGJ-x@5#?djQ#%I_E2Xh zMi|q*6%$UteN9?~E(g=AddbXmM^`*>BVO9{z;A@NBtBs!Yu-3EV6@b3M167-Z}@tu z{#qrmmLHrr`Vz08x#UXZn$reyg zbd;|4cHN26*%B%Atl~0p?<)2+F|Amevh!>Of7GQE0b4Pq&}F-h%RKpIO}7$BFJz9K zi3S^UvQZp2OfKCXfFn1lOr!wFcx4{|-Y7e{1|ArrXglZ`k};UZVa;Or7lsMxr((?9 zE(uJ%;H9Mk8fbral}anzUhOD%4Q&Ac8$zC7nut>Xm z#y78?k;UN|!dzRId#M??(BbnBPo9**d68uFG}AeQLh#mta`cOFzL-P&#dR9S3PEV* z{v`v|w%Ar*pLSb!Sa9u*z(S?IX&WTD@xnr8unU(O`AeZJqq zk!?Au5=l0-I#}7euU|RR&C9|hOk66OtVSntdavmJ-=R|&!&bhrG4JdUIg9P3T$p^o zaN<0QYYGcd3U>{{Bq|(B^P6k>(XJ&ae@}~md5hw7n3Oh8)p&Qecd84P#R*BBLXWC4 zxS65=Gfz5rc2evA^AvGg8J1>AqJc^#Nmb8fqQ+bSKq0`MtN)9mW7DzxleCr%nAq34 zaw;mAE8eF9KsNo}ZN&epm-WKSs=Sd8xlVrJT*xe6eF8}_@1$?|+da%*(Rqr&S9hXs z7kS~m!<%PTkcNc%FjdD_FCm` zGYqt!eqvTm=3<>FyfURH%guRU=*!-88LrpW9vLh^_kEi)4rd(8lR&#Vm_~Yjyp^~; zSw08q{G74;&qD06>pJ#e&$-U(u>#pbd-aEv%^P9#m21nKJa8mVpR;^Vc$jov?}Sc! zM!I&aT01xiHRa{F1pAEv$Se)h>+Mi$Hcx%hob+<7Br^K47Bk{=;vmrg=|X#F5om06 zOP1NjLC&8_G5X(vPc5OtB6(lFe;JP0?$iTjrx}B~bfN~0h!;E0!Sik~{UlLkt$KbF zcUYBQu>1%0s1;H5km{z%_;bje@)qQ+lgZ^y5_uI`1GXcF`1!vXbdsVip;wfWPWEaM z)A=G*l&Y!<$EWfe3i^zCOpeuDCj##;5&8L?G>|{AcueTBtEmZmA>fiD4n>%DDGBNt z?Mk3xQ))TNch!BE?%>}2{YLW^^vL+xTr0?Kxhcn>9kjR7%IA*sbIkAc8@D+lIG58E z0pAPF|0xMxZZ@-_zW|LL22>O$YZ5r`#!O)~`EXj_-?)=j=D6ay3*h5d@nry+r;vvO z5=RY`{(tIxHZ!ugmffJ)v8MZX$+EMi0kNSx%33HmHkHA4-w((tCRvpOY0Mam7x>HD zZ;xEb?mZ2J1|(nZjIdHm?Y)hCkhAD{VQ9{R8~s1Z_&q6UPxVt|>agn4H}OjP z{Y+*a>)MEGIoJB^cNM9N-rrt|Iv#4ggOShlbu1X(4^6VvR_@_$`lrjpoq2An)Tjb5 zpyCL?r|vY9-!!>>r;_xbF^R{IFiDN_VJxKNdgp)!rSz+j+q;8LpOzAp4vK^mi$skH zigMf9h_A)dm;Y84ejz}?EPOXfvnLo!h_%pe zX3*k$|LN1gp`rpa99y#=AyVe1(=uLr;*;sRxa=ZEVq z2@>CKz5gNjG1^x=FjXWN2(YtEO(>t(;kTVq-50lxnnwj8`-SO0J26!poF?VCj8=Vb z&L3*CeshzG?bzn0bYX>#p%lt>mm1zT5|Gx=O3JT?itN_ffxctT%0F7f*R`B0`;xm| z9MCW&*X5Z&KvUL=WG!fy8t)X)x=5+P50(z^lnxkSO^Vi%?F-Xc=*-i&kfyQhMBWE&2|is!XjO(5R7wQyDWj1 zlzp$`b0ED~>N2Imb8UyApV&Um!ldAMSr^jCNbbkE+-{6x@szmn_WkPr8ehRNQoqRi# zn<4YC_d0sKq_Mggc^OwmedZ;M(?Dpg#-ioqEAoPoH9vU1E#;xR4A1qx=GZGSerLzb zre>IP&S{XbQRZU+>QIu7U8rsS{0G27EK&W>2N5RdL{eBNTI;6S)KTQeIPCMH+62ye z*|!d8$T}kC)$vt?H*!7w5GF5u3gxoMKak}d`nomB>Tad>Duu2o$c^&F#tZg_-qJ5g za9!q>6{*i#B^JTI{PC8&-7^?=Pkdx7x)zl%#F1|X}Gv! zn;VG;Xd+le5#4glc>QzK(0MAOLG<^%_qe@R9L)f)dTbuBhB8N?8elVE%5yGAL;5& z{s^*8G92)n#$Q1um1QFd+D zpokzyNK1*7bji@5AR(=#*f;lJA^@g!&S}#54zCDeU+MM3=i?$Ww-RHp~DeT{W+GK=Lo80Hi zSy?-jnqsXXdK4N?UiG_Ln7~=ZGF?@wGwtE{Vyhl5V?xlntePY90T?6(;jy(?Wn8`C z@Hbh)n9nrZy7~-V))6F7===00HAk^K(Lgqn;@cC?I4B;5s#{(bBp z`ZkQ`OXc}0aIIQ78JTd;C(yKS5rSk?6G;5(>SIw;@PXxUl)cX=0XNMiD#MQ-g^%n z7A4_ITvi{x=^z%{C*W1HSM@#*NnzUKA01Y#Uu+zcyjb%6DYveJm{gyL)G#(P1+a`J7B23!i(so@)Ft_%7rQL|-6XLM;n_~Z!KMJ3)g&Ln# z&GM06VdAeJr)LP#8X908ILi=%2aP4eYI7rY#w#xo-(Wu@*c07uP@S?O2!hEX^)M@1 zzWr*0Md7LCD)bRW^t`JHv!iL}kb%|W@y&&vzT8%X!R!|u4E=RK>l)Hh>>Iy>7QG0! zE7m=#|AZ~@2i}0Dj9-Q6xb@@#;52+!uL^VEhrQP*-4nhn-yl$MZMoMd$m#YT>sXR8 zr{I~BittMsw*G!Nck|{@d!g>5!E$*6g$3_}fgf-@_3+dCQiCu`sn^mg90bW5x`MqH z{+6AsjINH4Nz0!Cw8$MbS$L_fP+I2mgad5?@;akLUjohw)Uk%>Nq!tYmq*Gv6%6Op z%Pt@$_~6tGftl+jr+DG~8>HuqaLMm|G8{tk0YNlUxFg{*bJg zyVNR?#Xuw6O>o8ubDUclC8KkG7X9dJ0HtK8w2ESCwNo7{y4+5ETqefhiBNgLBE?gF zct#OSv`BbqwX@JZZ7GM%c$jbaoUX$GHh4BFzparUK`}QRyW0?u;|Px;@pJbk!i`8z znnJoYAzJv*sE9m~Fc++gh%4IQa`~JhIpA(Zd0KXdcIrXj$4v@-%=FIZY!z!!z7F#z}x!nH&j ztZ!^uyBntCh3y;JDZ9qx5di5C4IxvZ{}j2PN0P5m^C&blbPx{I*~xR~Q54(nDhMM) zy1ek#nUY6x=i4IgVK~P%I0s&)<6ZhciwnfQ^xdDR7v@MAIwPw;|5CppK9rc3gtGpN znY!VJ#3JWn8H{9ds<0^=j35e6z1QeCj^c!!tpJ%ykf`doEb_I4^9y*C(bTFmPWSkz zH&(z}j%VhN4&Tc&w{@jZPDkr3$4=&fgy|xoDm?+k%KKRXqh%R#Vt@B}RE7ob< zKTNru0T6+E^w~-FYI23v{~aEPUZxeQm29w!)0wmnnX%9g#bjjqvbY;PQFBAbNwyu6jlAEsN&B^X2HPA5%%w+85#HceuVhb!SA~WzMa{bzf-Cx+eTV;N+sCbxs%=lMopsvyML5 ze7CwcXSpbH`IhpEdh%dtbNFH?=G#$M`WVz4t!4e!Q8ugmx{o_hj%wum(CC76e{k+| z_zkk_5#4^5^Y%-aDF}|#*EP_s8i$>-=Kp*^#EAhqAr_f0-T0>acT?ct;dJKZu3N~>-20sop<$x8&@kncyc-Q zOWRA~M2L@uiREQU5beL)Axr4?e3Z^FdCxaBb@9#f23jl6T$#7`;NPn6+*Bu+5Ef*X z^{InSD)rO9YA|EVd@*JnS;YgRn!%xd<3DRN8WJ#rHDge`tXNMDtNXG%)$ygB?7SJ3ix;6$;Tyb1 zze1N>@YHlHzj@F7R6xUNCAu0^@x_4Wz^qY?bDzTTdqdG_wbjx-fZUFq#BrN`W1(3H zp%8k!HC|NZOPi-$&;q4r_B(3zR|nn1yp~V=9+LVc08)C>?e!i409%%#RWzFcnky_y zL6`(M!HSx1tRI8su2y-7VP>(TpL*kcKa_o1NOsw62DZ*_I>rp?vj4?^{bnlC27T$O z5)SC64*LYK=dO1hYGl@z^TAs6aSfY?tkv^(X26wsS@KpAq`A1zzc;`)hB7~&EJsx| z@-+On?-~6ph6@Z3tDfu;T7+h$*m0oKcH5@jWq_fpxYUrhh7y4BlX=}B$Lx_Yy}P`( zEf(zY>Z)!^Pl2Pxmr%P)vmoKbel?ox(hB21qU1B35#7sef}hnTM;;XA2`-CoQVGLt z^h$;$rHA`hyD%0c2m>Bxtt9xIg@|dqdOjBP#v(y6U*r4rs`ql@*T<&}2d?LRXoGo4 z`#j2|I9Qv%4(%MR>Go=-=8@Jg0j%mtIo7{PB24Rd?LZr0%(_?9D)uqg@n9O>$Hcd^ zVB0+B_ad}ANXN&=%Ak=ZgftJW7}*@nD*?HJ;PufklILA4-k+=A0Z$3(?tQE_AnE4w zpKPJ^=jXeKgKjoGfDIrPa(@0jSVW$80R{TW0lj>!CJK+6!xVTSxDIt^i$qOEJDD;u zi}iR40^4?a); z;uImI=GD#9K;R44$e+Ub*&gG6(l^nB$Q5R~N3%X9a^neS;zYgyG#Hlc^nWC7&fPZP zc2|j;*e3aLo~MCZ?ufvXK~X&O>GOe%ku1Dmg5=_RcB_Xc!Nlgm(kkBsgvYSg9KK7*!7kq?4#M;KyFX#;xzTEL-G3ugLCN7<|pVk4# zJ;oa8Upg!=VD)-^`CmBz{Epp3%RlM|@bLV2?t@4y*iuApmOoM~m}vsCX)c_3g${$L zjOtkl5wOKd;x|O~j{I?Vn>GVk0ub<~f{Pq9J%L_yVOaJ?3?Hez$MrK(iN$RjcCxtO zXsIu7i6H*^ntfgJdL25Vn14WIpI#zoQ&2*ZJ7bW$bd%dhN5L5Rkv+i&de|>` z7}6m6ngU$NSP>6l$Xvk%{Oin5yJW2r|;ubkjBIZo{c2RKFov0-vr6-~fk( zW-S~lK9J{u>>uf;jz78I`Qh4hi)X`v2V{eB0J9C>{#-pU)6U9{<$>P}$Q#MY z*ge-Z0mwwLgwM30unDz!i0Pu)cSS=8G_YfApPRp&CVRVP7BI5fW-=G zOn?!BY!HXp1iR~L-P{Vmg#SA>QLMP8-|Ga4N?u2!a_QA9dnvne0*+3T5(%}j)Q6Ej z)<$;hMZbz1=F&P+TKnQ}_P@B;SPSx{FK2IQi@cGr!T$WPtiR*rfvk~)P;%un8m@HF z#I>x>SflN@wS6^B55s9;7%vRf!Zblfknu-IAYSOfs$Qksi{32~rIsh~awH#7x6CU= z8Qpvh-A=w6wW|9plir(41eGcTvw3LH5Wbf9|DdVPnyT9Z+m(hKrzZehQiJs_((jeh zie6|*D|0v4+!A746Ve_`q<4FLT2&KN`v12G=$tXoU*aqRuplM_<*o2{{$HneLRS(3 z7ZL_zKoA0E*}J-GHc^aRw_D2;b5~gN@QJW_qMrin=HV~t7dfP**61YCze19tzZlFS z@it6egGx$4bI1l)_G1qJl1MG)!+KV zfAco`tM|MP=k4~4i%gT9bzIqF6f z=^;nG&h(87>ursIcv>e*=P&FyXeEwkZqm-oxi-C1C3@>qj4dmcu};J+l^)Oi${R}F z!J|0LNM&d<;KFpF25N;5uib|qlXDrrV;KS9W8B_gWRJU#BQS7j=}<*q9=Y%xd^^ch zeX)(#yvV5)T#=a5k7w;MKg?oU>`q{p7CA#;m(a4#(OW$+A?|9{1JvEeQZ`<8lO}gs zHXXi-ZgZN~r#$`gWZ@8S?sBAj-FrS#O-Yc6xKleo_Y9?G2*BdJiYH4~JoSouC+2kO zteA>t&sHYPXWp8L=%70*sD=n@ee@B=(-fU6Y78I`(*$4c6xU&zo;SBwO%pmZQE)ZO z15iq#0$OG(*sfXt)Bp8F8{{_p8UK?H^W(%#mrh({-$%p?Bh{oyxbOXrHFNJ!3{2JI z9JRN)$bF)zB2pKAo=)1>C=;^Y!Zxa8m|5(Lz%CBkdh(UX`)5wH+Q zSf}n^SJWX=mCqFG;Q-wUJ%agxZF_?AnuEy%I8~nzH zMuUH%<1|6W1wPY%T1PlOeSQqNmfdq^R5RfxM86s;4parDvcfw;Wl8( z|K64r7MlLN>8!0CC7zWIQR*m8k%87uI+c?CfR)R3a+K9@sg@hj{Z33z8Sc} z`eKno0{$@L#v#s!^>mb~@r6p?#LIvbRH_Ai3Qc(rEXmnpFT=Y(EfnU|tCY4Q9EA7I zk>^VS)9c-Cf0Oqka0G99-MrPuUC&Pp9f_0A#$GP_anJ((>@f44vyZJ*j9z5<-X1qJ z50Q}suXlh?)UXZmFr`G&s=tU~exT~OvB8>!0_g3w6kdP{o0UK`G9&D94tK}#jA6Tl zxUfHyV`fDG%{{o#Nb#YY>*?7-|26a~v5j^c(VC;tqDxrif}uC!n8U+gFG?a3blm02 zG6tG+lIy|fO(!dx8Y|*2)M)ucg^t9R;3gJG2{ilnI>Rqqrw_~cCM7Kk0H!AjE z$gNiz4L&8a{E1xY@kUJz40=Va&eoD658lj{_d2}HmE$>d6NPWy_iVaaVViK6bKBu1 zgIeExp%9VaZ$uFt2SPu$>O@Jl!&^J``>$BqVx(!Gyz9Oqv5i1ydR}sURI1a(jr{dX z%_C&&ru8-^T6WRmM>+la6D123o>on+ajHR*O^ACUXg}XLG^|gCCs$VeG0Y}+S`&Sw z^FaQEmo%@gbH@5|h}-qk;768cJ0APG$-G-H_ISVjG@eT zZLPz|d%+M2B_iz+MU=R84#G9FUasDS~q`Lp8rKn98NC zeVp5f@MGJaFX=9E3GE)j`%?~_T9voPS=b~@Ihd>{VmsA+d->#NC_NtLrizNJ7UC5A zZISp$Ls(O!k4Rw=2R1_eyUdVpP`ZCR^X{$ig`2jnQ8Svw;U4C2%9gEqsXn?N7P(31 zf)v0R+nWF7A^bI=TGn%M`eJeP%t%%ka$q1~k`d>cy&?0}J(s&|{D`FyOpUO!b8P=j zfn6rP?cQ(?0CB9z@*tnGu+dm_@tiFEYOYeXC z^sQ~0+ozwcs)Jp7kFhE_KFPmec*gGpNU75tACYksZ-?ict&rGn>k-bf(Kbh+x4mNf zJii|4gKOsgrc5B(3$jkGc<%1yk^~(&U)O8djX+Cj!%T5%Nagv4J?9phl=Um)~o(%Jh*%>;}^2lPaBeO z94Zu;c@XDeT%O{4b#lapdambq30Hw%yWiTZ8gbs|`bK$JSJvr#{f@dn?#Q4hk4ISN zk3)yfAE%|nFTQ*!=er_HaeEYEs}__GA}M7W`n6mclbe=FUm;KT14cbRF8CS@wnV0Z zb?*(!#=L6fv0&5Jb<+BIiI*I=MoIb4LH5wht>TqZ}!H)|jn9&ZSH2;k@wT~mj zZCMziFDs}kCh7l#w+LjykZjAVlk{Zt~>URayQXM-4J2+c=lqh}hGl^!(-U>|_s*o58bdhwu~E z8$CY}_dTusPK=xP7M)9z7-0^4zv>~H@_rLha(-2jPP4d{O`j(w2HQC*VfMMJ1H9n-912bor-H5bw<22`dj;>KJ3r&&IS zf53ll`GQg`Hu(XQ=WXM6zf^)Q0pyP^dr)f0YVDHLi*$p5O24w^oID$CUc`0mP^5F< zR%FSieZk|mV0!5m-|aP!IiKPp{ktm1qUdl?l2RwHpt2=f_?Th$5lU(lq@Xn4iY@XA z0PU+~{+r>+ht)R7TiCgfBfS7dc{45LMvLUYl+^RbytAnkDUe#`>y0l;h(b!!lWdL_ z3@j8;g9(j}Tk8lrA?rBXf}*t90>}B;F~26% zMmFJOK(m-QTjd?BS+4SSLaB_as`wR^kQo=AJ;>q3t9zNw(e$~~nCY>)k80=Hd7bDN z8xI!^Sa0R^^j7gz+;C!c5HXV__OYbvADj$-hnvXFKCCMSEk(i6JF|&+4{ZxgC=+A` z(!~5U1+edv@;SSYkB{K%TKTEE{_v-{a{ZlCO+&C42aIUt46$eR7d8JYS{~)I^X zfm9|@<#W!uI6{Qc>m2bIR0dYb-V!{OP)YgOR&&-@T0*UT&2vpX30nGdatZ6Z;no4N z4nzDsX*`IMwWIVH!SaB4wt+IH9|L(s`@YLR!uuvOtZEXYZ;4$_uJtij5%J_J}(O(^zF=m?@ng4nK(xdc%|j?D@$U$ zt9#0*wTENd#s|?p2_l%1%ur*Q9%M+J*CZP{fN{czn+;YB(`=&LfeDMe)qAkyGXNj4xPX*eaRhWaKZPdu3!Q# z3^q+c{Lv-oa)Hfx037wtK@GgFG2VO!1{JHDbe;`Efi)(mO^m*^jD8-p7>^ZNo|Akz z7cRK-ODd5H=cy0JXI33AS*XerSqe-8bzfdSvxjV9owX88&k2W5#-q zd~v-yO$621o^uIU8!Jgo8MS41J@m=uh&CiKvKcob?lAJFd^JZqtfAvJ(|GT`hA2=? zqWif!6#6p20W8(=UKZ!tP$33n8oC$O?<$QDTwxnYX+SYM>#x{$Vx)id z?AVzN26nx@!>QbZli$yjB7FBHd4%27iyvOEnvs(7?laf`{Onvz-aA*Sk4B<0OhzU5 z4^^I>yeR)cy=$X4gfMOj=rQo4jUY?~arN|7UP=20#cGUi1{ zJC-d$(}y6L$n`Y*0F;+x$E@jYl{UW-sLdM+Pn%c`zHTF8deU{+9wbvvVFKtC5jDKQ z9cL6^ku2_?gv+GPDqveuuKItdj6GZklV~y^SOG+^H!q?_dvCqD-k){~BPdKO-os~x zLmL(FKFKGBnP$Nb(EjVe{~FN5b}>dQa@@xWB^C-ja>OnQk@6E>iEoJa{bW5-W`Oe$ z)$J&oKbbO+-J_`D5rRkRlV;{okTm;%u8i7Py~@s-`~Fg9r)aoEr?w4^@Kk50g7xDc z{e`A=e336mi}H`iKJvimP2Yv~ecoK)z<7SJ-5ELaSxdd~JGF+{Jl4UOC$oqlZ}=-S zK+fq>YtN}vs6enZH?UG|yQv2zE`5|S5s_AZF9;dX$9oL?8;h}d=t>xSF^1Vw8UVpU z$SUH@-gkZQBH!f}Z}+#37MVkvwl)C6ZEhYZW54s~tZO#1`;nLOKrI=3J6^9El@4yn z*47&>75~~=)SgwVtlMqW5$+zk8oOICTsAd&aX0+*U}PztwlePtjY!=QBR$92>An8e zCbsH14XXcWZ$WO`r!R;h@mW;q{p-3$&H7$Ny5KVD)NHh`Y5gqg%p{(rEK0wSqRMdi zojM2?LX)QM9BJ%`l%D0$$r2E?yOJF7MfKQbtZQZ=iJKycgzHXSe4u2?+u-O8s4VDw ze`tMZzB7P;C^hg; znZ%stT6IKJiPubDmX%2Zkw9H41yg@Q@ax#13tT44h(_P=E+L1=$AeRKe|&1=@LFy> z%wNo+tg9n&>*m&0VTU<}gpC8ZBX#lOQyxlpX5T{e+ilXI&5}J-6C28gOsuC>6C5Yd zYC(^iH4i#!=)(Nh|B>*T4i%_YrB*fSN%OcI;_eYLtd21P`6ZH>o%hnK_I$9Oi~Q9B zo6V*g{WYd5VsAWejvyR`-%qLx(FqNDck~Wyvz;^_&Ck}-=}K0N6j;_z@5YvB%#Fa! z7Hy;}>@?b^x2qF3yN>Pb394>OV55tj9UqPed2U?EpZ_^_U~ejMjP>p59X6G@lBKj3 z`Yk?&{**;ackN+Ux~cX1s(c)Ti*b%fCsE?`h%o2<+&ZNQ_cvOiJZoZilk&_pgtN*P zFW1y&_5=(6LC3j#Y7^|&Z8F?$6gR4Q2^Oh$1Mr{xt&Smejapt;WL^noKT{`r6GSZQ zqwGq#H?}Ppa?i@wmq!Lu+6^T4yh=ngJ^dT6&%aN!;jr-Ykyj7n$M={kwo|MX90k2O zNh-xBDj@zGmr>kyLdikWud5~dfuE?>9;J+QvtAX5{DgEa4e$~i^XvrG;C;#pmVbIt z$b&$rYU-4EdYn9DXy_>veROF)54&xghlN@IH2F6J)k-sxjxd81q5seM@C&*RzDCdN zA>f>Nid=_U6#Q12R$oz^-o)t(^Nfq{J^fIT?nt5wtW6{&efAorH^pdAU}&GerW8*+ zXs5?b(R$V#%=BY!qh#^H&fsm_c&4u}eGXrHM_}J)f~YUTV}-oo^?Y%3T|1L%=}Rld z%UxlHa-7MJeo+rP#?lh!e9D+Z7-Q#%qGhT!F&A!?`N+=anwM}0d6)<{pUcehfLIj1 ziJPKQ_R@8g%t$9GZ%WcuZ2k1Hd-vXNm$eQQWlO<_sk>R^7p{x$9zPsq;~yY!9bP^7 z2Pb!36tTnb^3=Myv8Y~L5Ls$xI#nP{RBGK$pwnCK0q9T&+UbUj1VJ%}4Qti^sGcNw zWy*xNUQ>_kSbx`x$aDVt<-xXo$d5cRplDHR*IV9db>sx$=qM9$DtM89Mo{Vnnv8|tX?KTD-PJ06rr%6^ZsJMsx9ok0&urAPS+L5 zgMwe#7kCsR^MbZFPfu9YBI_Ci9=12zU(;?)NuRWp;x; z+W(r`FR@uoLl--jM>YwMoVN(8)${Z-&7V=(RH>#`Np_7qv)l!Zomf zVOh0rWDP5a_;}-6jNh@``Hc5o_b9b6eCQ1ztOHt;B=ky|0QVg?NtP+qPZ#U9?fIt`XKD`_WOA1ff0rmbZM#fiGMyT|Qv6k`#VS+IQNyI@4t zm+vS~Z0wa8H*}-So#p1*a&+-5A{v#vSVfS(MCjhh2$uK!#i`fD(t?^1bO)HtjJ9Tg z_Q@Nb1~OUt$5prtSx81NeTSI{KMaU|)n7n|C!7yd?ozUxNrj|dGBBBu=B3Hasndy? zKA2lGOS{+ks`E{+@CL_^@D&^3XaSl>hF=xUT(%`Y7d%{6mH!=_JJWf|Tl)xS$MS>~0|_gYiJ-z*XP1U-GD$ZFQUl_M9j;>|q!K?U8TibBX_R!cY?lO;jB6 zY%QODXNaNBhrRQ+=KKAy6Wh26V2!4C0On+`19Yl~dUT4WMoH_3w$|5NB`SDi~d~PXtZ#`ER$? zfvyRfsDJZS^gj}-s9~lNav%fj^DZ@-==3|r=a3S4_cSf)?$oeLL@eBRE68>rE@lf6Xv1P;biiY;l7dNN8-!D8WS zpD;wMr}DF%ZI|*&jMeerdDj&++d5ni=M3wG7hJs@?FG+nByFM)N&c&uMbF$ClKM~m z_t2@&N?w)h(GH1V7GkkU#xln`n6OWaNW7|wG_~X+Yy934DkJYe6NuBh?hiSf4iElA+cYA#w);1GuDv5pSSA+&p0wy?l);D8eq%C^ zl3Aw4;xtXA?8s09L|oV!f3u_a&6q9jD@@u|`)7l&ta^BQTR`#|l7NNGFa`3DdFySeY0ow?Te&L?ihvI%JUeJ6B6 z!l?PmwYi9=FLs`Pm==sb?Bgm zT!XW-aOG<)m5X@J*+Y_0>5H@TDC(t2YTVhkZj0*7u&}+rHm4jW2_`{*u0_uNG&n0! zRy#SymneZVS(}9PCY8KP=K`4PVa8A@5pZ*AKL699|DU+IWIO#j=gkXK`@r{2<)x-IWqqM~khl^4tdZvQ{{)qc4`eB2E&qsrpH-{EcnYeo6vv9*QmEO_eZ1g|9+r%wLc)^Cs z@=CE%1oQNrlyXr(>!fn(J@QYokzY+WTJS`wc0NrzlTE|ux+N(atc=yy7U2mpcKe;< z@GZkidJ-XK!BqF!EeXq|;*zsbxox~1vCb;Vo?`@xNJltV0s*y;&{E@5(w){{^9`MX zd{a!3-bOmE0c#4REc9jAxDC(vnwLYP@&3|=lH!M=$NwaLyzsWEVYS7r*Lw6c<4U8y ztV~v=E6Tn`0~HBSgG~<${%I)(6R~w5-zU>PBrpJIWk@(T#s)yX9-?9r{{(I6r~Cav zV0TW6n|B}=|8*hz9QMrWPHcmI*CPm`r%&?|hu6-|PJ^*6n5{7YV7-XIJb0<_8Ng0- zfG%PvB+p#;?}q&Ck;Dk9UD$*Jy`=P^wXfEnTKh}vTTeh1fF!+Hqa@1U?JR-*A;;$t zr)j#^OBsjpwO-w*(vn9Ghpos}^j@L`l<&xn;J{4#8eMESBjdse z>az|v4QJ=X;}9CMU;2sa1AgA4xhUs|bKB4KtlrdL!&YPNICL@AJCy4Dk#p#@q4}F+ zot6CX{YV^}nyu({k3Cm9>bni?l6#@zr;49n$+9=R()jwI1gcqh z-LG6U9)V*(duuz?{+b1o^sRg0+TGWx_9VWux%=95N|>ES3+hPKUibR+9!X zI@=Q^695=lBk((jfN3A-*Da+5vqs)_Lc!2$fKExR$Godw2vA`evE$MnCJS%w)cCPT!B_wOtSYlId_WRW>``^+GX$bHQxL= zv9u(Z|HW&PqnC-Uq;l-7FJ*m7U@*RG_4xB_xsH%kmZ8eMs1XE5rJHuA7g4;C_C8(XkHWzA+ej8`GZc+yJ28a-AqPw$|J<5xgU1OKd;vSBg&2xpS zeC?OY(x+9Uy{dX0v*ajWvkGJxo2pKqWW%|z`9-*qd9VeF_RnHfWAzLUoGJ&E=6b>` zu54Yk(sPRvP)`&1)FOJC$+`RCm*N*gSgWeb=K0~h3n(6F6p26m&V-zTv#qGDwe$tA zYdf^X-f@4O_I(^`GCcB3tKeYdnOwK=)&pjcaZ~yIi$$V7E8Q_mi8g)B{T??qyPLMq z;Ms9C&XE88LLlD_WY8ZSW=D-5D2xGe0|Y>X=+?WnTdWpa;2U{?o#z0b2o9PZco!%K z?IxH6`DZnaEeGnu$M~~7cTT1%Osx>@M0x|?UrxB4&RR{wtDLS?iZnwJOPvn+?GIB; zR(s;S?_vw$c%wdSVaQH=dJi+f^QAYc6+;&|cFW%k*{YYFA~zhGt_X292^^I6H1S}| z(f2Aki*13iyjD-mo38EakH^#n^W|y)wRImrR4r?|Ijt67vC=wSAvzJjgzjD#hF$J8 zHNCqwAC7=PZI-(=Yq|jc7t3XcCC|5l-xJ5>?_a^?YR6f*x&2%%fBw=qq$FV1m)Ltn zw>m)j_Mr5qLFwnhl(j0Wh^I)i-5pVa(r^1`DuYy>&l9Plz;{X{>pi;FZc$k<%(lsM| z?c`zzO@#5`mY&T%Gl8{)|A~tW3+Y<;+BwTjwPxb|L9<=7&up;OEKh|e)*6wqd1vJ! z(Vys`gg7d70_1KNM_@k^{m~gVAOZt;nql@c z2)aLa`R5b@PVPd8(fx)!H|(aH^7^i;A-$`6vn4HDHo`%z#-PR zyzsd`CZ#Y?&jpYfq@NIs6-WtT4`<1>0w89w^RbDBE25ou^GA9y05W{5I4(bS$yi6^ zyec>_lU4@L-NNH?x*E|zT4FNF2ti!uZf{PVRP&6t#%*mr0j?MCMn+UMGg^X>MZ+D1-k1`#`Lt%-uHkc``~9%VF4HBVc>hbsk1 z&qONxaCj*b#bC0sh%ad+m8Q^3cXjjfsM^*H<`qm`GPV)&Q~Wy!;+^BvZv;QDVYLI; z*6zX$4k=L^jkQ&Dw-1?0aNugswpij_(uIuBnTXR2( zUO^&7*p1!w%+htoRI3#js3&lmI%oR}u{;(O3h(fyE`)|6m+;b+onW*;f=i(Bq@qX% zY+Fb2?24k-8%z`D7CC`m$AhqC`He;050_d(`_~sLB+q0a7u|57lX)Glft(L@_AEF1 z{vz}FWqk)n!fqGyxp{>xBRTJc8b1E|txpw!Pq=S*9UFIs`GOB@trjC9tQIcZ=&&qd zO}@GNyO8qrd$d1n-mLihl4$%BR=Q=n2<0cjZhdWxZOXpHyb+#r7D#5>Mr(1*aBvYH^$66H2|a9Jhn*cE;i{rgv&o8~U~vF@iAeUILZRX=|xLx0ibE!0Cgd(U(1!Ho(E35b|E-QbD1V zZ!J;paQO5ZFtPlA{6=5n-1(YrZ#;M9Jj#VjO=Dx@YL%%mfc{?CC2{EaIV5}^%~O#S z@du=>Fb7Pe`Nd$iKDUPe_vElw)ZWjxMh1DCF<2+@#W8FN3-~vP-38nXTyH~T18$93 zHEU1W5l(4wo6;!TbEQEf5beAcn02K4tZO3x@a2TC$6|WqSz*TRl6_Q69@j zH}|js0m*re04!yS?yUiiQvke94h8`IAB$Gsp=_jjGdIsH zz8x^i?-aup(hpC-$p&l-5adK+kgso# zFW$x6rL^f-#SdN)$5V6?^2Im%p_rh!GHjC?-<8wyQAZNd5~Y+7o^D2}m-PsKX=N*` zlJTlT8*V{nO4{VCT-s~0q#Yhrc1$y~z`gIJ*1O&Y(wl09a5;a@L(4Mx(*fu~3VFolHcv22ADLO94q!ptE_W|0~01%OyUMbhxNK8Cy;qd9qKc8YuL z;t60;+(k-u-emaW78S+F%W*{IOAk1JYrFF8hy5b`v{WzE*{c&f$;LlNhsZJ@ z!SQ_^MW-`aYQTH&i@F3Hz6J6{n85B&t4?zNy1hnHDC~jpCKRv|?Z!T+HaK&KiQG6Q zTDG98R+tc&*CQnU{xX%K4v?|1d)&D8B=BHEzniBK@eo)HeS9_=q?`hZBlwOl22q-V zeo0zG;r5{NUc>~#cx&luiSm}%FwqJXgjrvp3Jp_RjO{zcsYk6|C#HsE_W zf;)lqQK}TY!@m}|+S3g7DVbS(wt=weOhYe-$jv}}blk{{*#|I>#Ry3XM39R6ah{gW z`aml5R#*E|!U29C1-uy~q@E-JA|aQP@)E!g0xb2>@=;ThYQX&B0CB$_EQLDT(z*>w z595E(N$x-fy)i#OROrN!JoUnb2*U*r0(PnZ%Lrm|K?nC5mV%B)rwx)S&oHeDlW2#` z6hIiz1Le#~gYDUZzusu>d+4n}qHXD^sh{=V*#HYi-EF)yS4aVlD@!iH4?1lS%h3NM zK*t3vZ|iuW{%kRL0%Y#R;P{KaOX0wHK$YrA9mad-Z!iOy;5~6wY@s6@pw;Uo!&-yF zGv~^MG!Nu9QIP;f(xZ7GRSZfUmcXjEj-gDM9S6?^1&<3nz_c}SU18E{W-6-p64cAmD5C?hZ%N%IpK+x+C9))pusqVk8hGiTech1dp~S@t~gsJOjPMP*NT&1(ECW zasR`kVFkUJYO7dbH+~0npOcHpd}4Esw`{kMQa(OZma{;NhIi+SRKAe0eXMRpK5}$; zN#uWOSd-rs{K!#jYB{1lKy-!cK?OX7V%V6qDpa=;Ubh*1G%7U_EoC;1C3X=vqa1|q zLTuPk$S*oa`bjf?qOHPCcx;@4dy5ASk3ei&mBfb~m`&-cjj9Myx%Y3N2zcaP2AYKT zQpz%WN}NSxgu|_iD!q>y=i8lW4mh}Do@(LkNM}we9c2GV``LDRWsjUYVF#*_RNlWu z-+%-tB7oo!dFI>Km9U8^FQ&rkJ0ScCLFB`|T>PAZbPf>Ff~MUscl?1O{(P|3)ziJk zuJhSF_ZVhi>wv6*4R{&t)nR==$+?AA2am&kTNPq;5NTL`9wlVcgjfmcmtGjGKXc#b zv4eli8x7*><85U<346@_V5u{_v)<`&AX|Yl(e(!% zfQ$G2V?c%q=U*~H3p)LTs9%hxbC)K;+UNTeKe65S?_OTSipCjqe}lY{#9EQ4Bnd#SddhC=>}?_ zXOZ1l2HkHN$0%%Dt z@A`M|eIP^VtTO9(v5{@HnUkFcNpww?(L;op%ZB1k3YYIdLkYN@S73S58!atLjp!vn zNvslgQ4l)D593`#Q{NtJ@&JpC=H@ymK(}cOL^^NC^=<|01iiQqOdn*D^Dr=ToeuHYUvU##?br7wXa@f{KGJT z;ShtxC?xdlXZc~9x2fh>=kO%&$_+B9>Cl|_!XkP(Sgb@zJmhn26XjWORIAE_@U5;j zLm_+Dbf3o_V`9d=>x@O@a~E>4q;scHp>cE_%Sw@fp>5;3HV?5W2qk`=I=*C8s{qY< zwuyK>lEGnd`(n5H#MSj;G#I;r}{b*EO3Ozx-3>?J}Ym48(Q%1bU#{w3N^8S?^y zVmkd2zkr;aT&#ctE1-K;%_~3j8hG;oKn(f>4`pY7(f!f7<3Mn;k#f^jCK*O%JPiU> zdBg8E;HF76kUv9f)dWEtIDwHvl|0CZK*oy-m5L&lll_)Up**NnN(;cT{p@bGpgs_} zJrv;G>Bg?V|NLrABwRcgY`31OfMPA=AVMfbC=S>9 zJFm_U;a1%sQr7p^rGgs_{#rTgHq5iJT|rFD+rdot{LI~2__U@UfG}aEvV*^%O^2s* z9&?%{`k=*H4P@rFS!~@8qEaUMH$V|!Xt86x;7ha!6r>G5yvOxh0J`X%fCRmG&M>Mu z7~#=p>@l@F*Cb*O%5~5KBZG2LDD4D?J$<3K4d~UC>-vCI`=h9+6Y6gP#cFME>nBW$ z8juAw{XS#3bwULUl%vko3h5RRRjwpi6GF`+6P z;zv1`?1&eeOA~4ru&I8fZKy{fA)1M-k6|X}4hnoOb9wTOtMBEVPz5;2+|`HSFmw0H zuJkVLF$LE#gU1ro|BtG(0IIU<-adjzDF{eNs-P$xa_BBa1ZgBCq`MnIIz>RbmG16_ z1JcqRhwhS&Z{Ix6`@Qdf=FE8Jj04>J>{x5V2SMRkHDN$gg9iLc@ZA zJE(1vn1|*dW>BSZK=kY_HhyMUfN{)VqO=+QIwciHhRJ3FcgMWyWQCW}0M`c%4wU4I zvi=@VN0q$UI;2Le*9|Y?sT7>(=iU&rse9YsV@aB)*TU}FLLowl8e;VT+_d*BqU=s| z3mpvHUoQs_>!G}P#qXa27jkMYVG^*Ynz9+!_R|JQu{w4Py9psS&lWSI13EOHZY~;c zT0#F+6=BPH9{L2MOL!(&z+b7`h{?pGLL& zB?N#JN*7Sc2?`H}z}W^(X{P!kJn$3!WYfi=oc$EUpZ*{#!M@lk4GUops*VJCqS7UQ z{cghrv)Sb9-O)GxOHdVV0r<>3N;l|F0tVv^OB%&XlO~1j;NY!)aQ?#vT7jUHWC_ZB zh$=)VRqW#B)vm{?TrIQnkzpOkd{i1-xuD^BlxGR$l64>wbOheJMIdrQso^|k@;Ji+ zN_1m((c^U>QO`crxQ7Jl5FJpsd3p1F)deWe`P2*_>%v3Zp%n|IX`IWE@=(1BKvhsc z&6nT(w3V`=i(&f!{fEcb4BUiPg4Z7=*!=O-5>BoLJ!(FP61>F@>qa)rR;^znXw0GHf1R#ahxC+!{1qEF&5n&k=ZS$ig+8OLjbXdZxtsC(9o_?UZtm8< z)EC0+zC@Hw^}N30k4qEZEcrLKT&lj)?BLZ(*l@9Z$$fSNzyUDjf3MhxHS+fWV|3E5 z5QM0Xd(CK&jC`jA+6it$obFf)T1eIpVox-I^T9Anu$K@{LUb8W^P@k-x=`H%L*Lj+ z&s#~rG3%IK9|Z?z+TKQP;pCK+;2gy=uoU433fKPm-%pP&*1_y;gTl)oWRUxt5d8!w z8xuSE0pVBYd?$b2F=>NCznS+QHktqVxwBL(E9!t43aA&AMqgUIn?&&aNrF2yd!Zg* zHQ5Z0jUhk*woIA*F^@exBr87JnVD*M0i_THjn~e#hGn2a$U`Gf4;6wZszKcq9*Tz4 zcs^3N)iMXNr@dUQD@+h2(5DpE9fJ42R~kU{0R;+ml&bGs>M}+?&CWe|@W97HtaQ%( zVgWS%m-#3|GXhL}7K>Tli!*+32(dWqsJpPI0}{oguBy?TA1I^%K`B z-e768HBdrzXb2kf_tD*_Q0`Wz)?WuuCs6RRP4KoO`0-cZzBDkK1Ju*(&`d=_f+9UA z@PN1$AdEl*%laLwAB0~3-%HANBlw>wNagv&?8c9vsu!?=A_EHSY4XpYa0Vq;+lueS zL&*Z14p+3}%_@qO8M&6eiPX6{Z{}A*+UrGss?a^_b|}W^1H}#K)Kw`n#6|j4SbyB| z6^Gw2C`AkC6H{J_8FHnIhqQnyPzaPXfou#NN@$?G5GuxjBfH0*ju(T_Cq1Z%m%8F5 z+3`LWX2M3fl$fAtF8b~VJ;aPW>Pza`wsy=%K$l5TDIl$gO8i2O-SEW_e7PvDd%hnY zDp9AoAkkcr82vbz;0LqXnH@Iw3%8@d_v0)B@WIKvN*5(F_SfV*I%qcOapq{su&3{N zG9!VX%ZXw;X*bT#_xSJr41cl_RiGflu<{I7l2*@Jf*UkE{-l+2mtdOUDzvT>xxw&_ zLLSRDi!XG!rT7o8M#x_fO9nWJTmIpPVtNQo0_M*78i5R?Vh6i41^7tB^1?T?4Wj-) zIbUXyGp#h=Uxh7D=Y*WG^6GnGQ=dR&QF?sRc;n`JF*PS%X`R{LSI2RkK-7WsC6+p#%#Bt0R8D;M{LmW_oCPZ3%>)Dio&2D0Om|P zNPy+1DwWFqnoQz_@*S(ttCnRgj`-dOc#$XI@t0lt40GGjLW>;w&C%-C7!br__WeU|bm$%l6uZ7a>UpR* z23;T}xSy{>z?hVvor)QIwaYaLfflGx21fahChBt8kaQ~|Odu4fxply?4IMXaB^OX6 z4kxp@5B&hC1Ww$_X=|+OgXqS+BA6~X0R)%qjb9y4nlM2*U#sr}lp`~nS@#RG-J5-v ztztCj>Y`Q#+Af)mhqGG5MnR0!3=J#D{_#N>P6%Xl(3*cGpYaJ?EVDujcqMhI5{>drz`@Lbo@N`f>{*VRrWzPaoW80BxoOA^n zBM+Am}~oj&4E#Tg@37_%lJctIR70S~WV;|CcZ%w%<3@6rF*C;yTg zmD7j_$Akk4jFx>9vi^qb>sp4T2i5I1QMNXyQcmnk3T(QPdh4Tcth6!c@ zld%(FjOQr|a{WjjHtszU!I=5--AM_{>sQ`g(tAVpBuG!>eR&>4WD`dorKPEnDX}b6 zKM>F+aldX&J;~6C6BX>DctHD|W}|;FzdH-Jm*OS&>h}^Vv)!urq~`>Pm3*DZs4{WV!F0dboUn(0vE(+dMx?^xIKBTqK=-s_pkmsfgh9< z8;Qby2khsqooGm<4~1U1EwWr&?#KMTB?i6;L%=KhN1#h_Zo2ZD2nBFCt_m?5ACy+d z`L=OL=NA?f4y+73W7maaN*l^zhL~7zyEJ1Q5pZ(TCFX+)zGE^#WmSQ?e%&@GWo;=G z`n=-21MKL}wE;#AU>ScgoT>vjqo&I?`{=u@=g@@!xb1-oDpt`00UrUh1-dsj%~%sz zQ_0h;=dRL-tn&pooZ?Ug4b&w@F0NJ}dJ)(uzCyL{lXJ{?91skfHqL!y{gx{cBPL+i zAh^EqF%gYfIp1>iF6+jL#$<|D#n%{OT)xAbtQR-a-f<=mDQ#J7^Z@7AgTy#bijR|W zu-^TsD$cNm*_@;=Qy#5YNPsl!aC1x|WOwnZBH*bRPezj6%1Xr3AtGFsh=B_7p(U6* zE6&UcLM>j%ZntXu1BZ->0q&Ijhl-)jn3b#fyNg5ayXdmda@ZAHPyU>~Ngfto;P0m- zKnbJ#r8daRuSvQ4H{~IVZiSD@v{IX*u;!QJWgpH(S*!A2Z6)nxqjWVQi^R?4BZ6W_CjlsVjDSY>>Cyjd+@A&{9T5}XCi zh04rENkjMX@-ln`Aj+zm_rj`DduSZ0zD~UauAW*8-T%_5g9HVthe4q5P=y*VugmF( zenn*sACT@+8YH__B;eyt27~65-yEbFI@`5;U5boH1k#ev?aJ|NMlf~*@s}`(Uaq6Q zbMx_g(pS!gpIhjqqgbK2k=$>%tz-Q8G=W_7q~MQG8*j25Y4YHkGKzSu2@!Ie8F;N1 zT4S7qbe=;y{v-^sKc);9U42;G<(j;FRCs3g%XiFjm$O;Xwo2pV1H0k>5zn|pUK{+Ws zYg2s|X)NErBB__>MpT zvmZ0_rKX0voL&8^FUFAPI{pXcu`d(D%F1EcAxI?u;KS{JbSnM}27QCOaeBk~TNDzh zx$|tpvesBvYMS&BWvP$+L^9isyo`;P)?|$c`O`uti$h3Vrp<UL#2=<1D@}?;sr{PSZy*JnyQ$&oaU8+ZKA__T*?Z+al%&tO3_0WEqy)}Y+x8@=(PFZweQO^ZRUR+( zB~DpQU;7l*XL}`_k}1a#+U4+>@r6|M0eMEz;nOg19Yp6m%| zYKt{Aj`MBBNzORRcyWsXk12TQWKYd#4EoQ8q7oUO>!vBB8KQ8vsSo>vdurINLkn|l-vwQN0 zo>TVmRsPHN^DHk^5|PQ+xJ-Fl{=+4L49?`taAAxQOH{&97@=7NSw&V0A$trW6E+e; zC=YrrudFJU+rCAkt2BBV=Q7E>&#VNrG$HnNzdrT%7k4|`WK`Q;r& zb-ohQ(eW)lxR4zpBP}UjD|+Y2utgB}w4v2!10{0HU{3-Y@zLGnK#*0daiO&pPxNZm zB`jh!cT4F}edq%oeds9$#BZC-$wOQF2`^9W0Y`6#h`9n_`Uhs3`k} zy64Iy|2?RMHezbAfW8D(qkd-^_ud3uvg7`!(K{++kBkdBt$T7(spq7<9j8>xbo8vn zkMqq#(@@su&QTkIojjLPbB>Mb&tGTvdGsA0<79@i~ggQo}fRq0s{7Y`_I4W<@{fvfnkNRZSPR{{M(q^LRHp-YxtI#CDNzk z_Yo{|TBx6am?$9g^A@YE7X8P^)ydfDBmc#v+>XVUwUQ?qaUl$W*1b5LDMS*wSHdi^ zmUsap-!+nHZq)0h(r$W2=;byq!iyCLh1;TEC6fq%?=^yII4}PyqcB3fZW1j$mN;?f z=qXPIwGwaZq&fA>=tVC5_pyqPJHz8JCZ{r8o{_Sd@Ifo;MggL<@ak7YrDo!DN>wLb z#o02w%>*e`#3T}*ZFsj$b%jiWnnZFY(te^u3WqsRXeae}JQ?pC%& zE(Lh>FxEoJvDf>oKSS&@{^UWl!h+jwuz`h`nUn%OIc1JJ??QQyzdAe)bjy?hj<_hy z+RrjJb5k6Zxl_NLN`8L!l}5umJVIh^e}h?@J1px#tM6`Td-o5Nb0wbSjk#n$uy%$c z0qOqMm=|nE+<});2(8D05513nE+-4rq`kZF+h(pU%zDI2i?#TTN9)H>LBP=RrAnjm z2QDv<*~MDY)^mTItJqm0KA!%<)otY7h{B1hw1%D@*~;xx{Q}00tcrZ@kEFAg_+l@q zm0cMpGpa*)U@!*5r|>?)49AOn8z=bS+J3dl^ZrpTzWAP~4XfnQ@9i|aqn#OHQ^{|r zyCWh>X=zujDJ(Ld{XEpWMmbs2r931pOX5LY4JapbmSV(TY^cKgsbR%ckdeh$Ls)j> z57iYje*JF{{pFPD1Aj4b!7tMs;Mr4X=I+^D0FSKSpqmNYNtA7CMS^QP zNNBI#_Zd_YZf_7!g@%CgG84t2ul;B9v@#zl%v5l$!A+Jn3aKu{sq&gkrvA>nJQ^aw zg4}y!wtgGuW=md&|1dVp=*XqjRcm0^UnPDDxCT@}ZMo2W1u5VjB+F%cgPSqSe;`+> z^7|k}a#cVgNendt^u|}5Q zeUPKTM~nRCBf>vFEXsji zvO(u{<{x50nb6{R?A{$~&pIUq<--vwMPrGM&`IuDN~Ru@Il648@#}j-{S&m_!HK$R z?^i=6j2RgxQxWO>fn3roi?o6owgqNbJUnY3r)}HFlj2YV%V%D_-QnQm6BvC&hRf50 zx;7XPbn=sbF7zU{1M!T-s?oxcL7@Hx>_y$xe!ynz%{LJsuOWg2Ov(N{&%`<{FHb|% zq3(643)g2Ms4)THc7~h~R(OvR zZTU|f?mS;%OTLNGw>`fSY-G|gGk*s}I|?#@HNm~@@a^`f5dQHQA}dspeePzcyqiM! zXnB=V$k1hN_ngw>lEq@Bcanb_kR_dyu1~xI zwO3(VQ4Df(PZz2m{%)ME?5MceJUu;=AVER80ZRFPrN}*|ll+p=E1In>m%rE)7x9hG z=O{GS0&=EzYANBDlQT-^sS)vFJz7-IO0JZUHQo8=zELEckneaa}lO3w4w!;yF; z$;CSm(s3BgAzVi(jWE$UqXG? z*465E%@{~-wU3;!Q>4sw)2_G~MJDpm|L`LrUB?=%VzN3H07Ukailoq5Jj{^ZPQvhK zJ1s1NEnO&XJSTN;R?Hu@UVLPb@BdAz_67Fz$S%zZLn#ewpI168@^c>f;w+lJeKzNb z;W3SG@AvSlkd(`7mWA-)Ox68~>~&(9jJV>f@A!LpF&K8%t+Jwfuj2Ij6F*AGoi8B&w@&)LwF_3lol27!o@}++q=~~5#G92 z>-)7H%pmORGkkhX$MY#I&)V~#z{18eSqk5?)esJ}uXQ+{gB-l3x=FFFQkJ|(pKdmH zE5Yvt7@d*3St{g}yD~e!v>kWQZp3whRa>G9>fs%iyFOa-Ie+QIH4p{9$h(0r^(h|# zV3~kva19COyEgEdyVxV)gPd0kzKLo_Bu>e1op)GGMH?c-8Npxu2Ncy1a{z6s^CKq7k7~q~)83ub{07)+upuZQ z#V}%9O(!2rdriGdVq57hwf(9q+d_h{K@|;&j>S5sh_SJ+nEC=q)h*GL|@*T>))M!jRe^PpuLgs|b?x-f|qySdXqu&G}o*omwn#g)K}HKJOfJ zW4jeRldn9uQ<4yq)*XbJX84Ag!Vhg=s%jh!d9Ht$#j3{R!oXRb3btP8s|-6CQk#w$ zljMszJKG*Nv!AXSsW{{9aqJjn38;>_&XBOa|2@8gB-t$EsI6GaM6xoB+JNj@^MmSV z+xu7yf7oz#BeX-1lcQg5U8diB`*IriC}AzrRy}XtyIp~nTiXU(RcSt{Z0=(*Q@&tl zfY`%b-=KRY&)lX(u+Q8*Ixok+A@9@w6vQEY{$Jz*v+X{I`0su@L`TCmK5&dwaW{l5LB+b3{)4PG;sPO`s?QxT622D4={rl(8n79~teH7Lj*1lC@;7 zFuAl1xn9e*C5W!`EHF>6aC||yY>q$nbo>ubuh?IbZ}jxc7h9&3nwImyDV?GM`#PBB zJU(Yeo@kX3W<$?voMw!s=&t=kC@Vsi3G57KoaOmh{eJ86#M7R|l^XHOP!;0vDLv&z z=_b`#>A{HlUBoXYH{LIr&rjw~;Sk5d)OhpQPALb6>E(je^loKj*UDQ8w{U~KRg&|! z-I$&d<>Qv>ond0!{MHR)xa+OQRMMdWF`Ck*k^dQ&TXEXin?bNkSD;J1J*$=m6++M( zo@&wz%@~;=;Vf}5V_Kr5r5eYhq@lYf&=xxUe|Kkq6X}vP?$RJi)YD&>CQQs4ImR1S zl)My1&Noy`G_kCxOz0$JQ}kEbiXci&z9M@y{t>Sq(~9o2S+#+n3jT*NZ5JsvJveJorN34_BNZqS4GXDScik-ayOkmG6Wflr`eQL zxtnXX5bH5^WMp1{+I(46JucF8^l&lVkI!Mw^kKmAsZD?|wt3#KI2IXJ-QN8Udgi25uoo&{6C z69)|4BU(F?lG|bwoTpXphaCDITNbxhNba4c#qXHC*E)I1?|hoiex;am`?W^)@aCUt*)u&M1eb`r;_e zmhqb5%bJVu=2pGV1#Wz3p>>V{!D2_qoSffI?dIwwV@H{8%~&#gvO1h|xriG#Am}1$ zrB;W<*FQ|Uzb@#n!LNGDOk(-uYJbhF@w>CDJOT}Z%@}oE#!NvhXy4*qcfhXP>m=M0 zD%p}~CVvO~%~#PBS?j#?!)()SkstK@@a6V&FY6HNx&<>Fgr`L?27WB+rMewXyBbSV zQ;^Ac_dU4TvN?4?0?f+0WkQ2pzyW2e>OThvSR}UC(&y*pIcwBZVlSSTmnjQ#D1Aaw z3{Eo}XFvH4Y;pso{mCCC7#^t_XScasKcfS(PT6*^!?%QZ<8sKlqKj|t9_FTD^=GS= zrBLbQnv0ggUXjU?+ufyO>^h9S{<%hFnj7PI2Ys;j!mmw*hc$y_tnA9_s`yR(#a0B5 zu(@dt(TIY3dbI>cXxM~+!NnR`Qje~x@G_Zg4`wDI{!eZezSFf|=TFh4PcX0;BD)Zm zi9zKGY%6c!jwMD;<^rRA`8vVoJ|e#mHd=LWD8~j5+XLX%RBf1VoJ9a>%pGOYOod8B^F2?!%h$Pyc~EbBQ>Xt}UvEf>zI9reD?Z4eVVn+FWa z-HLE`nw|3A+S28$(z8*mP0zCYtcXu1`F+G%6Z?KLGtn8_+?B2396`m#7@%uosT+g4 zKE0@$bD6OnmfH~+YywZOAW`f0GPD<+V$vGA`m6pPZ*vf_h7Ehcb`idZvcy>YPw&IjsVe?!~y>b`+npbvQ87lr&`i<=wqU~z|4p%d(GIc ztVNljyk~@j`!_FGRNQF)aLxaJhydP{;TQYVSq_c~k#{{2yC;V}AE5fVnw2K|#jeRG zx>;N)T6xwFXUQDA?|#A$^oD}kimtkP_?=?y?)Z$9ZxC>2xxyOzBFg@b)BgH1Jgz?- z*9DB3n@~^|h>54{jADS|gLZHwxxJdo)+}&Ac1_+i zb;Q&Bp?BL(N`2#)8(8+7MthtQF*W|ru|S?2(cu2zdUwWb#7tQ7g9p*a-$&c_HPt-d zVy0H~&S5Wq;e9f%K+I@L%ngYYlGjd^K9nt||AnVzxUwoVtl}v(U?5mEExE>^hJIZy z7b!|LatEuPWhO3Xfs(0UaB5Q2)Y*m9nJ1nX$d4JEvB=mOx^42=+FHX?Ucn?Mc`)+MLY6*|*DSu?36GI+c_+f&`9~Qabx@+xG;v z+{08nuK5H5+JxtXm>^)v`{KRl z>6(Z%0M_a>qAp?7#M6}#$EAS*IJok zXenpDblVc!zOJcn(6-@&Zq3Q$AIBY(O#@2wsH?NRlPb#HRdbXaT9~%`MXZ6aV9q=> zu1vp&xN6Sh!#!dENpE>|>Q$oCPF-wzW|b7>!q0j1If?9C5tw1vN