diff --git a/LICENSE b/LICENSE
index f7c4a82e..6f4c393f 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-AMS: Python Software for Dispatch Modeling and Co-Simulation with Dynanic
+AMS: Python Software for Scheduling Modeling and Co-Simulation with Dynanic
Copyright (c) 2023-2024 Jinning Wang
@@ -649,7 +649,7 @@ to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
- AMS, a python software for dispatch modeling and co-simulation with dynanic
+ AMS, a python software for scheduling modeling and co-simulation with dynanic
Copyright (C) 2023 Jinning Wang
This program is free software: you can redistribute it and/or modify
diff --git a/README.md b/README.md
index 5040b831..40445326 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# LTB AMS
-Python Software for Power System Dispatch Modeling and Co-Simulation with Dynanic, serving as the market simulator for the [CURENT Largescale Testbed][LTB Repository].
+Python Software for Power System Scheduling Modeling and Co-Simulation with Dynanic, serving as the market simulator for the [CURENT Largescale Testbed][LTB Repository].
[![License: GPL-3.0](https://img.shields.io/badge/License-GPL--3.0-blue.svg)](https://github.com/CURENT/ams/blob/master/LICENSE)
![platforms](https://anaconda.org/conda-forge/ltbams/badges/platforms.svg)
@@ -31,7 +31,7 @@ Python Software for Power System Dispatch Modeling and Co-Simulation with Dynani
With the built-in interface with dynamic simulation engine, ANDES, AMS enables Dynamics Interfaced Stability Constrained Production Cost and Market Operation Modeling.
-AMS produces credible dispatch results and competitive performance.
+AMS produces credible scheduling results and competitive performance.
The following results show the comparison of DCOPF between AMS and other tools.
| Cost [\$] | AMS | MATPOWER | pandapower |
@@ -79,7 +79,7 @@ pip install git+https://github.com/CURENT/ams.git
```
# Sponsors and Contributors
-AMS is the dispatch simulation engine for the CURENT Largescale Testbed (LTB).
+AMS is the scheduling simulation engine for the CURENT Largescale Testbed (LTB).
More information about CURENT LTB can be found at the [LTB Repository][LTB Repository].
This work was supported in part by the Engineering Research Center Program of the National Science Foundation and the Department of Energy
diff --git a/ams/__init__.py b/ams/__init__.py
index 4963ace1..1b86b2ba 100644
--- a/ams/__init__.py
+++ b/ams/__init__.py
@@ -9,6 +9,7 @@
from ams import opt # NOQA
from ams import pypower # NOQA
from ams import report # NOQA
+from ams import extension # NOQA
from ams.main import config_logger, load, run # NOQA
from ams.utils.paths import get_case # NOQA
@@ -16,4 +17,4 @@
__author__ = 'Jining Wang'
-__all__ = ['io', 'utils', 'models', 'system']
+__all__ = ['io', 'utils', 'models', 'system', 'extension']
diff --git a/ams/cases/5bus/pjm5bus_uced_ev.xlsx b/ams/cases/5bus/pjm5bus_uced_ev.xlsx
new file mode 100644
index 00000000..57355608
Binary files /dev/null and b/ams/cases/5bus/pjm5bus_uced_ev.xlsx differ
diff --git a/ams/core/matprocessor.py b/ams/core/matprocessor.py
index 5a23ba8f..c0615a1f 100644
--- a/ams/core/matprocessor.py
+++ b/ams/core/matprocessor.py
@@ -392,7 +392,7 @@ def _calc_b(self):
return b
- def build_ptdf(self):
+ def build_ptdf(self, dtype='float64', no_store=False):
"""
Build the DC PTDF matrix and store it in the MParam `PTDF`.
@@ -404,6 +404,15 @@ def build_ptdf(self):
Note that there is discrepency between the PTDF-based line flow and
DCOPF calcualted line flow. The gap is ignorable for small cases.
+ Try to use 'float32' for dtype if memory is a concern.
+
+ Parameters
+ ----------
+ dtype : str, optional
+ Data type of the PTDF matrix. Default is 'float64'.
+ no_store : bool, optional
+ If True, the PTDF will not be stored into `MatProcessor.PTDF._v`.
+
Returns
-------
PTDF : np.ndarray
@@ -411,10 +420,6 @@ def build_ptdf(self):
"""
system = self.system
- # common variables
- nb = system.Bus.n
- nl = system.Line.n
-
# use first slack bus as reference slack bus
slack = system.Slack.bus.v[0]
@@ -428,19 +433,22 @@ def build_ptdf(self):
if not self.initialized:
logger.debug("System matrices are not built. Building now.")
self.build()
+
# use dense representation
- Bbus, Bf = self.Bbus.v, self.Bf.v
+ Bbus = self.Bbus._v.todense().astype(dtype)
+ Bf = self.Bf._v.todense().astype(dtype)
# initialize PTDF matrix
- H = np.zeros((nl, nb))
+ H = np.zeros((system.Line.n, system.Bus.n), dtype=dtype)
# calculate PTDF
H[:, noslack] = np.linalg.solve(Bbus[np.ix_(noslack, noref)].T, Bf[:, noref].T).T
- # store PTDF
- self.PTDF._v = H
- return self.PTDF._v
+ if not no_store:
+ self.PTDF._v = H
+
+ return H
- def build_lodf(self):
+ def build_lodf(self, dtype='float64', no_store=False):
"""
Build the DC LODF matrix and store it in the MParam `LODF`.
@@ -449,70 +457,83 @@ def build_lodf(self):
It requires DC PTDF and Cft.
+ Try to use 'float32' for dtype if memory is a concern.
+
+ Parameters
+ ----------
+ dtype : str, optional
+ Data type of the LODF matrix. Default is 'float64'.
+ no_store : bool, optional
+ If True, the LODF will not be stored into `MatProcessor.LODF._v`.
+
Returns
-------
LODF : np.ndarray
Line outage distribution factor.
"""
- system = self.system
-
- # common variables
- nl = system.Line.n
+ nl = self.system.Line.n
# build PTDF if not built
if self.PTDF._v is None:
- self.build_ptdf()
+ ptdf = self.build_ptdf(dtype=dtype, no_store=True)
+ else:
+ ptdf = self.PTDF._v
- H = self.PTDF._v * self.Cft._v
+ H = ptdf * self.Cft._v
h = np.diag(H, 0)
LODF = safe_div(H, np.ones((nl, nl)) - np.ones((nl, 1)) * h.T)
LODF = LODF - np.diag(np.diag(LODF)) - np.eye(nl, nl)
- self.LODF._v = LODF
- return self.LODF._v
+ if not no_store:
+ self.LODF._v = LODF.astype(dtype)
+ return LODF.astype(dtype)
- def build_otdf(self, line=None):
+ def build_otdf(self, line=None, dtype='float64'):
"""
- Build the DC OTDF matrix.
+ Build the DC OTDF matrix for line outage:
+ :math:`OTDF_k = PTDF + LODF[:, k] @ PTDF[k, ]`,
+ where k is the outage line locations.
- `OTDF_k[m, n]` means the PTDF[m, n] with line `k` outage.
+ OTDF_k[m, n] means the increased line flow on line `m` when there is
+ 1 p.u. line flow decrease on line `k` due to line `k` outage.
- It requires ... ...
+ Note that the OTDF is not stored in the MatProcessor.
+
+ Try to use 'float32' for dtype if memory is a concern.
Parameters
----------
- line : int, str, optional
- Outage line idx to build the OTDF. If not provided, use the
- first line `System.Line.idx.v[0]`.
+ line : int, str, list, optional
+ Lines index for which the OTDF is calculated. It takes both single
+ or multiple line indices.
+ If not given, the first line is used by default.
+ dtype : str, optional
+ Data type of the OTDF matrix. Default is 'float64'.
Returns
-------
OTDF : np.ndarray
Line outage distribution factor.
"""
- system = self.system
-
- if line is None:
- line = system.Line.idx.v[0]
- elif isinstance(line, list):
- logger.warning("Multiple line is given, only the first one is used.")
- line = line[0]
- line_uid = system.Line.idx2uid(line)
+ if self.PTDF._v is None:
+ ptdf = self.build_ptdf(dtype=dtype, no_store=True)
+ else:
+ ptdf = self.PTDF._v
- # build LODF if not built
if self.LODF._v is None:
- self.build_lodf()
+ lodf = self.build_lodf(dtype=dtype, no_store=True)
+ else:
+ lodf = self.LODF._v
- # common variables
- nb = system.Bus.n
- nl = system.Line.n
-
- # initialize OTDF matrix
- OTDF = np.zeros((nl, nb))
-
- line_lodf = self.LODF._v[:, line_uid] # LODF for the outage line
- line_ptdf = self.PTDF._v[line_uid, :] # PTDF for the outage line
- OTDF += self.PTDF._v # Add PTDF to OTDF
- OTDF += line_lodf[:, np.newaxis] * line_ptdf # Add LODF * PTDF for the outage line
+ if line is None:
+ luid = [0]
+ elif isinstance(line, (int, str)):
+ try:
+ luid = [self.system.Line.idx2uid(line)]
+ except ValueError:
+ raise ValueError(f"Line {line} not found.")
+ elif isinstance(line, list):
+ luid = self.system.Line.idx2uid(line)
- return OTDF
+ otdf = ptdf + lodf[:, luid] @ ptdf[luid, :]
+ return otdf.astype(dtype)
diff --git a/ams/core/model.py b/ams/core/model.py
index ae84161c..34fbabb3 100644
--- a/ams/core/model.py
+++ b/ams/core/model.py
@@ -20,7 +20,7 @@
class Model:
"""
- Base class for power system dispatch models.
+ Base class for power system scheduling models.
This class is revised from ``andes.core.model.Model``.
"""
diff --git a/ams/core/service.py b/ams/core/service.py
index 9d521959..84d1ed26 100644
--- a/ams/core/service.py
+++ b/ams/core/service.py
@@ -497,7 +497,7 @@ def v(self):
n_gen = self.u.n
n_ts = self.u.horizon.n
tout = np.zeros((n_gen, n_ts))
- t = self.rtn.config.t # dispatch interval
+ t = self.rtn.config.t # scheduling interval
# minimum online/offline duration
td = np.ceil(self.u2.v/t).astype(int)
diff --git a/ams/extension/Aest.csv b/ams/extension/Aest.csv
new file mode 100644
index 00000000..631e76c4
--- /dev/null
+++ b/ams/extension/Aest.csv
@@ -0,0 +1,61 @@
+0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59
+0.9977394571642406,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.00267143071811397,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.002260542835759344,0.9972672030417218,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.002732796958278168,0.9974826003257812,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0025173996742188657,0.9976863037970977,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0023136962029023708,0.9975757388592076,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.00242426114079244,0.9973343488194973,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0026656511805026656,0.9976184880532707,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.002381511946729338,0.9974686365662612,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.002531363433738776,0.9976974362499141,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0023025637500859166,0.9975485574203281,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0024514425796718837,0.9976955962048853,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.002304403795114664,0.9974319727891157,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.002568027210884354,0.9972283619268147,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.002771638073185279,0.9977216631858743,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.002278336814125688,0.9976822180470931,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0020895155484539343,0.9959586575310649,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0017187318546045755,0.9844379995755818,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.00028294546226214896,0.597911227154047,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.00022826640445295079,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0023226106143305076,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.015279054962156044,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.402088772845953,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.9973285692818861,0.0027869086751464915,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.9972130913248535,0.0024304421953785325,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.9975695578046214,0.002310274906093142,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.9976897250939069,0.002172548640950128,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.9978274513590498,0.0025492433786367475,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.9974507566213633,0.0023824337243357257,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.9976175662756642,0.0027599819346637005,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.9972400180653364,0.002353140341967158,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.9976468596580328,0.0022985457277991425,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.9977014542722008,0.0027143180275955667,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.9972856819724044,0.002443195699975568,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.9975568043000245,0.0026113202428188695,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.9973886797571812,0.0024691358024691358,0.0,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.9975308641975309,0.002517750138476258,0.0,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.9974822498615238,0.0024533065916945724,0.0,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.9975466934083054,0.002348322233841525,0.0,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.9976516777661585,0.00244655018166548,0.0,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.9975534498183345,0.0027135288797002196,0.0
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.9972864711202998,0.004130741238566699
+0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.9958692587614333
diff --git a/ams/extension/__init__.py b/ams/extension/__init__.py
new file mode 100644
index 00000000..8d37ca39
--- /dev/null
+++ b/ams/extension/__init__.py
@@ -0,0 +1,5 @@
+"""
+Extension module.
+"""
+
+from ams.extension import eva # NOQA
diff --git a/ams/extension/eva.py b/ams/extension/eva.py
new file mode 100644
index 00000000..5a6ac20c
--- /dev/null
+++ b/ams/extension/eva.py
@@ -0,0 +1,401 @@
+"""
+EV Aggregator module.
+
+EVD is the generated datasets, and EVA is the aggregator model.
+
+Reference:
+[1] J. Wang et al., "Electric Vehicles Charging Time Constrained Deliverable Provision of Secondary
+Frequency Regulation," in IEEE Transactions on Smart Grid, doi: 10.1109/TSG.2024.3356948.
+[2] M. Wang, Y. Mu, Q. Shi, H. Jia and F. Li, "Electric Vehicle Aggregator Modeling and Control for
+Frequency Regulation Considering Progressive State Recovery," in IEEE Transactions on Smart Grid,
+vol. 11, no. 5, pp. 4176-4189, Sept. 2020, doi: 10.1109/TSG.2020.2981843.
+"""
+
+import logging
+import itertools
+from collections import OrderedDict
+
+import scipy.stats as stats
+
+from andes.core import Config
+from andes.core.param import NumParam
+from andes.core.model import ModelData
+from andes.shared import np, pd
+from andes.utils.misc import elapsed
+
+from ams.core.model import Model
+from ams.utils.paths import ams_root
+
+logger = logging.getLogger(__name__)
+
+
+# NOTE: following definition comes from ref[2], except `tt` that is assumed by ref[1]
+# normal distribution parameters
+ndist = {'soci': {'mu': 0.3, 'var': 0.05, 'lb': 0.2, 'ub': 0.4},
+ 'socd': {'mu': 0.8, 'var': 0.03, 'lb': 0.7, 'ub': 0.9},
+ 'ts1': {'mu': -6.5, 'var': 3.4, 'lb': 0.0, 'ub': 5.5},
+ 'ts2': {'mu': 17.5, 'var': 3.4, 'lb': 5.5, 'ub': 24.0},
+ 'tf1': {'mu': 8.9, 'var': 3.4, 'lb': 0.0, 'ub': 20.9},
+ 'tf2': {'mu': 32.9, 'var': 3.4, 'lb': 20.9, 'ub': 24.0},
+ 'tt': {'mu': 0.5, 'var': 0.02, 'lb': 0, 'ub': 1}}
+# uniform distribution parameters
+udist = {'Pc': {'lb': 5.0, 'ub': 7.0},
+ 'Pd': {'lb': 5.0, 'ub': 7.0},
+ 'nc': {'lb': 0.88, 'ub': 0.95},
+ 'nd': {'lb': 0.88, 'ub': 0.95},
+ 'Q': {'lb': 20.0, 'ub': 30.0}}
+
+
+class EVD(ModelData, Model):
+ """
+ In the EVD, each single EV is recorded as a device with its own parameters.
+ The parameters are generated from given statistical distributions.
+ """
+
+ def __init__(self, N=10000, Ns=20, Tagc=4, SOCf=0.2, r=0.5,
+ t=18, seed=None, name='EVA', A_csv=None):
+ """
+ Initialize the EV aggregation model.
+
+ Parameters
+ ----------
+ N : int, optional
+ Number of related EVs, default is 10000.
+ Ns : int, optional
+ Number of SOC intervals, default is 20.
+ Tagc : int, optional
+ AGC time intervals in seconds, default is 4.
+ SOCf : float, optional
+ Force charge SOC level between 0 and 1, default is 0.2.
+ r : float, optional
+ Ratio of time range 1 to time range 2 between 0 and 1, default is 0.5.
+ seed : int or None, optional
+ Seed for random number generator, default is None.
+ t : int, optional
+ Current time in 24 hours, default is 18.
+ name : str, optional
+ Name of the EVA, default is 'EVA'.
+ A_csv : str, optional
+ Path to the CSV file containing the state space matrix A, default is None.
+ """
+ # inherit attributes and methods from ANDES `ModelData` and AMS `Model`
+ ModelData.__init__(self)
+ Model.__init__(self, system=None, config=None)
+
+ self.evdname = name
+
+ # internal flags
+ self.is_setup = False # if EVA has been setup
+
+ self.t = np.array(t, dtype=float) # time in 24 hours
+ self.eva = None # EV Aggregator
+ self.A_csv = A_csv # path to the A matrix
+
+ # manually set config as EVA is not processed by the system
+ self.config = Config(self.__class__.__name__)
+ self.config.add(OrderedDict((('n', int(N)),
+ ('ns', Ns),
+ ('tagc', Tagc),
+ ('socf', SOCf),
+ ('r', r),
+ ('socl', 0),
+ ('socu', 1),
+ ('tf', self.t),
+ ('prumax', 0),
+ ('prdmax', 0),
+ ('seed', seed),
+ )))
+ self.config.add_extra("_help",
+ n="Number of related EVs",
+ ns="SOC intervals",
+ tagc="AGC time intervals in seconds",
+ socf="Force charge SOC level",
+ r="ratio of time range 1 to time range 2",
+ socl="lowest SOC limit",
+ socu="highest SOC limit",
+ tf="EVA running end time in 24 hours",
+ prumax="maximum power of regulation up, in MW",
+ prdmax="maximum power of regulation down, in MW",
+ seed='seed (or None) for random number generator',
+ )
+ self.config.add_extra("_tex",
+ n='N_{ev}',
+ ns='N_s',
+ tagc='T_{agc}',
+ socf='SOC_f',
+ r='r',
+ socl='SOC_{l}',
+ socu='SOC_{u}',
+ tf='T_f',
+ prumax='P_{ru,max}',
+ prdmax='P_{rd,max}',
+ seed='seed',
+ )
+ self.config.add_extra("_alt",
+ n='int',
+ ns="int",
+ tagc="float",
+ socf="float",
+ r="float",
+ socl="float",
+ socu="float",
+ tf="float",
+ prumax="float",
+ prdmax="float",
+ seed='int or None',
+ )
+
+ unit = self.config.socu / self.config.ns
+ self.soc_intv = OrderedDict({
+ i: (np.around(i * unit, 2), np.around((i + 1) * unit, 2))
+ for i in range(self.config.ns)
+ })
+
+ # NOTE: the parameters and variables are declared here and populated in `setup()`
+ # param `idx`, `name`, and `u` are already included in `ModelData`
+ # variables here are actually declared as parameters for memory saving
+ # because ams.core.var.Var has more overhead
+
+ # --- parameters ---
+ self.namax = NumParam(default=0,
+ info='maximum number of action')
+ self.ts = NumParam(default=0, vrange=(0, 24),
+ info='arrive time, in 24 hours')
+ self.tf = NumParam(default=0, vrange=(0, 24),
+ info='departure time, in 24 hours')
+ self.tt = NumParam(default=0,
+ info='Tolerance of increased charging time, in hours')
+ self.soci = NumParam(default=0,
+ info='initial SOC')
+ self.socd = NumParam(default=0,
+ info='demand SOC')
+ self.Pc = NumParam(default=0,
+ info='rated charging power, in kW')
+ self.Pd = NumParam(default=0,
+ info='rated discharging power, in kW')
+ self.nc = NumParam(default=0,
+ info='charging efficiency',
+ vrange=(0, 1))
+ self.nd = NumParam(default=0,
+ info='discharging efficiency',
+ vrange=(0, 1))
+ self.Q = NumParam(default=0,
+ info='rated capacity, in kWh')
+
+ # --- variables ---
+ self.soc0 = NumParam(default=0,
+ info='previous SOC')
+ self.u0 = NumParam(default=0,
+ info='previous online status')
+ self.na0 = NumParam(default=0,
+ info='previous action number')
+ self.soc = NumParam(default=0,
+ info='SOC')
+ self.na = NumParam(default=0,
+ info='action number')
+
+ def setup(self, ndist=ndist, udist=udist):
+ """
+ Setup the EV aggregation model.
+
+ Parameters
+ ----------
+ ndist : dict, optional
+ Normal distribution parameters, default by built-in `ndist`.
+ udist : dict, optional
+ Uniform distribution parameters, default by built-in `udist`.
+
+ Returns
+ -------
+ is_setup : bool
+ If the setup is successful.
+ """
+ if self.is_setup:
+ logger.warning(f'{self.evdname} aggregator has been setup, setup twice is not allowed.')
+ return False
+
+ t0, _ = elapsed()
+
+ # manually set attributes as EVA is not processed by the system
+ self.n = self.config.n
+ self.idx.v = ['SEV_' + str(i+1) for i in range(self.config.n)]
+ self.name.v = ['SEV ' + str(i+1) for i in range(self.config.n)]
+ self.u.v = np.array(self.u.v, dtype=int)
+ self.uid = {self.idx.v[i]: i for i in range(self.config.n)}
+
+ # --- populate parameters' value ---
+ # set `soci`, `socd`, `tt`
+ self.soci.v = build_truncnorm(ndist['soci']['mu'], ndist['soci']['var'],
+ ndist['soci']['lb'], ndist['soci']['ub'],
+ self.config.n, self.config.seed)
+ self.socd.v = build_truncnorm(ndist['socd']['mu'], ndist['socd']['var'],
+ ndist['socd']['lb'], ndist['socd']['ub'],
+ self.config.n, self.config.seed)
+ self.tt.v = build_truncnorm(ndist['tt']['mu'], ndist['tt']['var'],
+ ndist['tt']['lb'], ndist['tt']['ub'],
+ self.config.n, self.config.seed)
+ # set `ts`, `tf`
+ tdf = pd.DataFrame({
+ col: build_truncnorm(ndist[col]['mu'], ndist[col]['var'],
+ ndist[col]['lb'], ndist[col]['ub'],
+ self.config.n, self.config.seed)
+ for col in ['ts1', 'ts2', 'tf1', 'tf2']
+ })
+
+ nev_t1 = int(self.config.n * self.config.r) # number of EVs in time range 1
+ tp1 = tdf[['ts1', 'tf1']].sample(n=nev_t1, random_state=self.config.seed)
+ tp2 = tdf[['ts2', 'tf2']].sample(n=self.config.n-nev_t1, random_state=self.config.seed)
+ tp = pd.concat([tp1, tp2], axis=0).reset_index(drop=True).fillna(0)
+ tp['ts'] = tp['ts1'] + tp['ts2']
+ tp['tf'] = tp['tf1'] + tp['tf2']
+ # Swap ts and tf if ts > tf
+ check = tp['ts'] > tp['tf']
+ tp.loc[check, ['ts', 'tf']] = tp.loc[check, ['tf', 'ts']].values
+
+ self.ts.v = tp['ts'].values
+ self.tf.v = tp['tf'].values
+
+ # set `Pc`, `Pd`, `nc`, `nd`, `Q`
+ # NOTE: here it assumes (1) Pc == Pd, (2) nc == nd given by ref[2]
+ if self.config.seed is not None:
+ np.random.seed(self.config.seed)
+ self.Pc.v = np.random.uniform(udist['Pc']['lb'], udist['Pc']['ub'], self.config.n)
+ self.Pd.v = self.Pc.v
+ self.nc.v = np.random.uniform(udist['nc']['lb'], udist['nc']['ub'], self.config.n)
+ self.nd.v = self.nc.v
+ self.Q.v = np.random.uniform(udist['Q']['lb'], udist['Q']['ub'], self.config.n)
+
+ # --- adjust variables given current time ---
+ self.g_u() # update online status
+ # adjust SOC considering random behavior
+ # NOTE: here we ignore the AGC participation before the current time `self.t`
+
+ # stayed time for the EVs arrived before t, reset negative time to 0
+ tc = np.maximum(self.t - self.ts.v, 0)
+ self.soc.v = self.soci.v + tc * self.Pc.v * self.nc.v / self.Q.v # charge them
+
+ tr = (self.socd.v - self.soci.v) * self.Q.v / self.Pc.v / self.nc.v # time needed to charge to socd
+
+ # ratio of stay/required time, stay less than required time reset to 1
+ kt = np.maximum(tc / tr, 1)
+ socp = self.socd.v + np.log(kt) * (1 - self.socd.v) # log scale higher than socd
+ mask = kt > 1
+ self.soc.v[mask] = socp[mask] # Update soc
+
+ # clip soc to min/max
+ self.soc.v = np.clip(self.soc.v, self.config.socl, self.config.socu)
+
+ self.soc0.v = self.soc.v.copy()
+ self.u0.v = self.u.v.copy()
+
+ self.evd = EVA(evd=self, A_csv=self.A_csv)
+
+ self.is_setup = True
+
+ _, s = elapsed(t0)
+ msg = f'{self.evdname} aggregator setup in {s}, and the current time is {self.t} H.\n'
+ msg += f'It has {self.config.n} EVs in total and {self.u.v.sum()} EVs online.'
+ logger.info(msg)
+
+ return self.is_setup
+
+ def g_u(self):
+ """
+ Update online status of EVs based on current time.
+ """
+ self.u.v = ((self.ts.v <= self.t) & (self.t <= self.tf.v)).astype(int)
+
+ return True
+
+
+class EVA:
+ """
+ State space modeling based EV aggregation model.
+ """
+
+ def __init__(self, evd, A_csv=None):
+ """
+ Parameters
+ ----------
+ EVD : ams.extension.eva.EVD
+ EV Aggregator model.
+ A_csv : str, optional
+ Path to the CSV file containing the state space matrix A, default is None.
+ """
+ self.parent = evd
+
+ # states of EV, intersection of charging status and SOC intervals
+ # C: charging, I: idle, D: discharging
+ states = list(itertools.product(['C', 'I', 'D'], self.parent.soc_intv.keys()))
+ self.state = OrderedDict(((''.join(str(i) for i in s), 0.0) for s in states))
+
+ # NOTE: 3*ns comes from the intersection of charging status and SOC intervals
+ ns = self.parent.config.ns
+ # NOTE: x, A will be updated in `setup()`
+ self.x = np.zeros(3*ns)
+
+ # A matrix
+ default_A_csv = ams_root() + '/extension/Aest.csv'
+ if A_csv:
+ try:
+ self.A = pd.read_csv(A_csv).values
+ logger.debug(f'Loaded A matrix from {A_csv}.')
+ except FileNotFoundError:
+ self.A = pd.read_csv(default_A_csv).values
+ logger.debug(f'File {A_csv} not found, using default A matrix.')
+ else:
+ self.A = pd.read_csv(default_A_csv).values
+ logger.debug('No A matrix provided, using default A matrix.')
+
+ mate = np.eye(ns)
+ mat0 = np.zeros((ns, ns))
+ self.B = np.vstack((-mate, mate, mat0))
+ self.C = np.vstack((mat0, -mate, mate))
+
+ # SSM variables
+ kde = stats.gaussian_kde(self.parent.Pc.v)
+ step = 0.01
+ Pl_values = np.arange(self.parent.Pc.v.min(), self.parent.Pc.v.max(), step)
+ self.Pave = 1e-3 * np.sum([Pl * kde.integrate_box(Pl, Pl + step) for Pl in Pl_values]) # kw to MW
+
+ # NOTE: D, Da, Db, Dc, Dd will be scaled by Pave later in `setup()`
+ vec1 = np.ones((1, ns))
+ vec0 = np.zeros((1, ns))
+ self.D = self.Pave * np.hstack((-vec1, vec0, vec0))
+ self.Da = self.Pave * np.hstack((vec0, vec0, vec1))
+ self.Db = self.Pave * np.hstack((vec1, vec1, vec1))
+ self.Db[0, ns] = 0 # low charged EVs don't DC
+ self.Dc = self.Pave * np.hstack((-vec1, vec0, vec0))
+ self.Dd = self.Pave * np.hstack((-vec1, -vec1, -vec1))
+ self.Dd[0, 2*ns-1] = 0 # overcharged EVs don't C
+
+
+def build_truncnorm(mu, var, lb, ub, n, seed):
+ """
+ Helper function to generate truncated normal distribution
+ using scipy.stats.
+
+ Parameters
+ ----------
+ mu : float
+ Mean of the normal distribution.
+ var : float
+ Variance of the normal distribution.
+ lb : float
+ Lower bound of the truncated distribution.
+ ub : float
+ Upper bound of the truncated distribution.
+ n : int
+ Number of samples to generate.
+ seed : int
+ Random seed to use.
+
+ Returns
+ -------
+ samples : ndarray
+ Generated samples.
+ """
+ a = (lb - mu) / var
+ b = (ub - mu) / var
+ distribution = stats.truncnorm(a, b, loc=mu, scale=var)
+ return distribution.rvs(n, random_state=seed)
diff --git a/ams/interop/andes.py b/ams/interop/andes.py
index bcf15c50..2d0f99cd 100644
--- a/ams/interop/andes.py
+++ b/ams/interop/andes.py
@@ -516,7 +516,7 @@ def _sync_check(self, amsys, adsys):
def send(self, adsys=None, routine=None):
"""
- Send results of the recent sovled AMS dispatch (``sp.recent``) to the
+ Send results of the recent sovled AMS routine (``sp.recent``) to the
target ANDES system.
Note that converged AC conversion DOES NOT guarantee successful dynamic
diff --git a/ams/io/matpower.py b/ams/io/matpower.py
index 7dc392dd..6307cfcb 100644
--- a/ams/io/matpower.py
+++ b/ams/io/matpower.py
@@ -80,7 +80,8 @@ def mpc2system(mpc: dict, system) -> bool:
vmax = data[11]
vmin = data[12]
- system.add('Bus', idx=idx, name='Bus ' + str(idx), Vn=baseKV,
+ system.add('Bus', idx=idx, name='Bus ' + str(idx),
+ type=ty, Vn=baseKV,
v0=vmag, a0=vang,
vmax=vmax, vmin=vmin,
area=area, zone=zone)
@@ -200,28 +201,35 @@ def mpc2system(mpc: dict, system) -> bool:
if ('bus_name' in mpc) and (len(mpc['bus_name']) == len(system.Bus.name.v)):
system.Bus.name.v[:] = mpc['bus_name']
- gcost_idx = 0
- gen_idx = np.arange(mpc['gen'].shape[0]) + 1
- for data, gen in zip(mpc['gencost'], gen_idx):
- # NOTE: only type 2 costs are supported for now
- # type startup shutdown n c2 c1 c0
- # 0 1 2 3 4 5 6
- if data[0] != 2:
- raise ValueError('Only MODEL 2 costs are supported')
- gcost_idx += 1
- gctype = int(data[0])
- startup = data[1]
- shutdown = data[2]
- c2 = data[4] * base_mva ** 2
- c1 = data[5] * base_mva
- c0 = data[6]
- system.add('GCost', gen=int(gen),
- u=1, type=gctype,
- idx=gcost_idx,
- name=f'GCost {gcost_idx}',
- csu=startup, csd=shutdown,
- c2=c2, c1=c1, c0=c0
- )
+ # --- gencost ---
+ if 'gencost' in mpc:
+ gcost_idx = 0
+ gen_idx = np.arange(mpc['gen'].shape[0]) + 1
+ mpc_cost = np.zeros((mpc['gen'].shape[0], 7))
+ if mpc['gencost'].shape[1] < 7:
+ mpc_cost[:, :mpc['gencost'].shape[1]] = mpc['gencost']
+ else:
+ mpc_cost = mpc['gencost']
+ for data, gen in zip(mpc_cost, gen_idx):
+ # NOTE: only type 2 costs are supported for now
+ # type startup shutdown n c2 c1 c0
+ # 0 1 2 3 4 5 6
+ if data[0] != 2:
+ raise ValueError('Only MODEL 2 costs are supported')
+ gcost_idx += 1
+ gctype = int(data[0])
+ startup = data[1]
+ shutdown = data[2]
+ c2 = data[4] * base_mva ** 2
+ c1 = data[5] * base_mva
+ c0 = data[6]
+ system.add('GCost', gen=int(gen),
+ u=1, type=gctype,
+ idx=gcost_idx,
+ name=f'GCost {gcost_idx}',
+ csu=startup, csd=shutdown,
+ c2=c2, c1=c1, c0=c0
+ )
# --- region ---
zone_id = np.unique(system.Bus.zone.v).astype(int)
diff --git a/ams/models/__init__.py b/ams/models/__init__.py
index 31727bc7..4d938067 100644
--- a/ams/models/__init__.py
+++ b/ams/models/__init__.py
@@ -1,5 +1,5 @@
"""
-The package for models used in dispatch modeling.
+The package for models used in scheduling modeling.
The file_classes includes the list of file classes and their corresponding classes.
"""
@@ -11,7 +11,7 @@
('static', ['PQ', 'Slack', 'PV']),
('shunt', ['Shunt']),
('line', ['Line']),
- ('distributed', ['PVD1', 'ESD1']),
+ ('distributed', ['PVD1', 'ESD1', 'EV1', 'EV2']),
('renewable', ['REGCA1', 'REGCV1', 'REGCV2']),
('area', ['Area']),
('region', ['Region']),
diff --git a/ams/models/bus.py b/ams/models/bus.py
index a462a8dc..a9428cf5 100644
--- a/ams/models/bus.py
+++ b/ams/models/bus.py
@@ -2,6 +2,7 @@
import numpy as np
+from andes.core.param import NumParam
from andes.models.bus import BusData
from ams.core.var import Algeb
@@ -25,6 +26,12 @@ def __init__(self, system, config):
# so we need to change the model name of IdxParam self.zone
self.zone.model = 'Region'
+ self.type = NumParam(name='type',
+ info='bus type, 1=PQ, 2=PV, 3=ref, 4=isolated (place holder)',
+ default=1,
+ vtype=int,
+ )
+
self.a = Algeb(name='a',
tex_name=r'\theta',
info='voltage angle',
diff --git a/ams/models/distributed/__init__.py b/ams/models/distributed/__init__.py
index e07807ce..1b4c8735 100644
--- a/ams/models/distributed/__init__.py
+++ b/ams/models/distributed/__init__.py
@@ -1,2 +1,3 @@
from ams.models.distributed.pvd1 import PVD1 # NOQA
from ams.models.distributed.esd1 import ESD1 # NOQA
+from ams.models.distributed.ev import EV1, EV2 # NOQA
diff --git a/ams/models/distributed/esd1.py b/ams/models/distributed/esd1.py
index 7ad133d2..9b94b2fc 100644
--- a/ams/models/distributed/esd1.py
+++ b/ams/models/distributed/esd1.py
@@ -48,7 +48,7 @@ def __init__(self):
class ESD1(ESD1Data, Model):
"""
Distributed energy storage model, revised from ANDES ``ESD1`` model for
- dispatch.
+ scheduling.
Following parameters are omitted from the original dynamic model:
``fn``, ``busf``, ``xc``, ``pqflag``, ``igreg``, ``v0``, ``v1``,
diff --git a/ams/models/distributed/ev.py b/ams/models/distributed/ev.py
new file mode 100644
index 00000000..1d594eed
--- /dev/null
+++ b/ams/models/distributed/ev.py
@@ -0,0 +1,60 @@
+"""
+EV model.
+"""
+
+from andes.core.param import NumParam, IdxParam
+from andes.core.model import ModelData
+
+from ams.core.model import Model
+
+
+class EV1(ModelData, Model):
+ """
+ Aggregated EV model for scheduling at transmission level.
+
+ For co-simulation with ADNES, it is expected to be used in
+ conjunction with the dynamic models `EV1` or `EV2`.
+
+ Reference:
+
+ [1] J. Wang et al., "Electric Vehicles Charging Time Constrained Deliverable Provision of Secondary
+ Frequency Regulation," in IEEE Transactions on Smart Grid, doi: 10.1109/TSG.2024.3356948.
+ """
+
+ def __init__(self, system, config):
+ ModelData.__init__(self)
+ Model.__init__(self, system, config)
+ self.group = 'DG'
+
+ self.bus = IdxParam(model='Bus',
+ info="interface bus idx",
+ mandatory=True,
+ )
+ self.gen = IdxParam(info="static generator index",
+ mandatory=True,
+ )
+ self.Sn = NumParam(default=100.0, tex_name='S_n',
+ info='device MVA rating',
+ unit='MVA',
+ )
+ self.gammap = NumParam(default=1.0,
+ info="P ratio of linked static gen",
+ tex_name=r'\gamma_P'
+ )
+ self.gammaq = NumParam(default=1.0,
+ info="Q ratio of linked static gen",
+ tex_name=r'\gamma_Q'
+ )
+ self.N = NumParam(default=10000,
+ info="number of related EVs",
+ tex_name='N'
+ )
+
+
+class EV2(EV1):
+ """
+ EV aggregation model at transmission level, identical to :ref:`EV1`.
+ """
+
+ def __init__(self, system=None, config=None) -> None:
+ EV1.__init__(self, system, config)
diff --git a/ams/models/distributed/pvd1.py b/ams/models/distributed/pvd1.py
index 2178dd18..527b8801 100644
--- a/ams/models/distributed/pvd1.py
+++ b/ams/models/distributed/pvd1.py
@@ -44,7 +44,7 @@ def __init__(self):
class PVD1(PVD1Data, Model):
"""
Distributed PV model, revised from ANDES ``PVD1`` model for
- dispatch.
+ scheduling.
Following parameters are omitted from the original dynamic model:
``fn``, ``busf``, ``xc``, ``pqflag``, ``igreg``, ``v0``, ``v1``,
diff --git a/ams/models/group.py b/ams/models/group.py
index 2d565c3a..15fb217e 100644
--- a/ams/models/group.py
+++ b/ams/models/group.py
@@ -126,7 +126,7 @@ class VSG(GroupBase):
"""
Renewable generator with virtual synchronous generator (VSG) control group.
- Note that this is a group separate from ``RenGen`` for VSG dispatch study.
+ Note that this is a group separate from ``RenGen`` for VSG scheduling study.
"""
def __init__(self):
diff --git a/ams/models/renewable/regc.py b/ams/models/renewable/regc.py
index 9bf414cc..e9e7941a 100644
--- a/ams/models/renewable/regc.py
+++ b/ams/models/renewable/regc.py
@@ -1,5 +1,5 @@
"""
-RenGen dispatch model.
+RenGen scheduling model.
"""
from andes.core.param import NumParam, IdxParam, ExtParam
@@ -9,7 +9,7 @@
class REGCData(ModelData):
"""
- Data container for RenGen dispatch model.
+ Data container for RenGen scheduling model.
"""
def __init__(self):
@@ -37,7 +37,7 @@ def __init__(self):
class REGCA1(REGCData, Model):
"""
- Renewable generator dispatch model.
+ Renewable generator scheduling model.
Reference:
@@ -104,7 +104,7 @@ def __init__(self, system=None, config=None) -> None:
class REGCV2(REGCV1):
"""
- Voltage-controlled VSC.
+ Voltage-controlled VSC, identical to :ref:`REGCV1`.
Reference:
diff --git a/ams/models/static/gen.py b/ams/models/static/gen.py
index 1f740c2a..dabe42fc 100644
--- a/ams/models/static/gen.py
+++ b/ams/models/static/gen.py
@@ -118,7 +118,7 @@ def __init__(self, system=None, config=None):
info='Retrieved zone idx', vtype=str, default=None,
)
- self.ud = Algeb(info='connection status decision',
+ self.ud = Algeb(info='commitment decision',
unit='bool',
tex_name=r'u_d',
name='ud',
diff --git a/ams/models/timeslot.py b/ams/models/timeslot.py
index d8fb81c3..a0f3b451 100644
--- a/ams/models/timeslot.py
+++ b/ams/models/timeslot.py
@@ -1,5 +1,5 @@
"""
-Model for rolling horizon used in dispatch.
+Model for rolling horizon used in scheduling.
"""
from andes.core import ModelData, NumParam
diff --git a/ams/pypower/routines/pflow.py b/ams/pypower/routines/pflow.py
index 87698bbf..d18db2cb 100644
--- a/ams/pypower/routines/pflow.py
+++ b/ams/pypower/routines/pflow.py
@@ -52,10 +52,8 @@ def runpf(casedata, ppopt):
-------
results : dict or None
Solved power flow results. None if the power flow did not converge.
- success : bool
- True if the algorithm successfully found a solution, False otherwise.
- et : float
- Elapsed time in seconds for running the power flow.
+ sstats : dict
+ Solver statistics.
Notes
-----
@@ -303,7 +301,7 @@ def runpf(casedata, ppopt):
IDX.branch.PT,
IDX.branch.QT])] = 0
- return results, success, sstats
+ return results, sstats
def dcpf(B, Pbus, Va0, ref, pv, pq):
diff --git a/ams/routines/__init__.py b/ams/routines/__init__.py
index a6a02904..c3dd4b06 100644
--- a/ams/routines/__init__.py
+++ b/ams/routines/__init__.py
@@ -1,5 +1,5 @@
"""
-Dispatch routines.
+Scheduling routines.
"""
from collections import OrderedDict
diff --git a/ams/routines/acopf.py b/ams/routines/acopf.py
index f72fabfe..3f46f6d7 100644
--- a/ams/routines/acopf.py
+++ b/ams/routines/acopf.py
@@ -91,8 +91,7 @@ def solve(self, method=None, **kwargs):
ppc = system2ppc(self.system)
ppopt = ppoption()
res, sstats = runopf(casedata=ppc, ppopt=ppopt, **kwargs)
- self.converged = res['success']
- return res, self.converged, sstats
+ return res, sstats
def run(self, force_init=False, no_code=True,
method=None, **kwargs):
diff --git a/ams/routines/dcpf.py b/ams/routines/dcpf.py
index 08d610c5..ff0e89de 100644
--- a/ams/routines/dcpf.py
+++ b/ams/routines/dcpf.py
@@ -124,9 +124,8 @@ def solve(self, method=None):
ppc = system2ppc(self.system)
ppopt = ppoption(PF_DC=True)
- res, success, sstats = runpf(casedata=ppc, ppopt=ppopt)
- self.converged = bool(success)
- return res, self.converged, sstats
+ res, sstats = runpf(casedata=ppc, ppopt=ppopt)
+ return res, sstats
def run(self, force_init=False, no_code=True,
method=None, **kwargs):
@@ -155,8 +154,9 @@ def run(self, force_init=False, no_code=True,
if not self.initialized:
self.init(force=force_init, no_code=no_code)
t0, _ = elapsed()
- res, success, sstats = self.solve(method=method)
- self.exit_code = 0 if success else 1
+ res, sstats = self.solve(method=method)
+ self.converged = res['success']
+ self.exit_code = 0 if res['success'] else 1
_, s = elapsed(t0)
self.exec_time = float(s.split(' ')[0])
n_iter = int(sstats['num_iters'])
@@ -165,7 +165,11 @@ def run(self, force_init=False, no_code=True,
msg = f"<{self.class_name}> solved in {s}, converged in "
msg += n_iter_str + f"with {sstats['solver_name']}."
logger.info(msg)
- self.unpack(res)
+ try:
+ self.unpack(res)
+ except Exception:
+ logger.warning(f"Failed to unpack results from {self.class_name}.")
+ return False
return True
else:
msg = f"{self.class_name} failed in "
diff --git a/ams/routines/ed.py b/ams/routines/ed.py
index 56144e80..02f17c1a 100644
--- a/ams/routines/ed.py
+++ b/ams/routines/ed.py
@@ -44,7 +44,7 @@ def __init__(self) -> None:
name='dsr', tex_name=r'd_{s,r,z}',
info='zonal spinning reserve requirement',)
- # NOTE: define e_str in dispatch model
+ # NOTE: define e_str in the scheduling model
self.prsb = Constraint(info='spinning reserve balance',
name='prsb', is_eq=True,)
self.rsr = Constraint(info='spinning reserve requirement',
@@ -53,7 +53,7 @@ def __init__(self) -> None:
class MPBase:
"""
- Base class for multi-period dispatch.
+ Base class for multi-period scheduling.
"""
def __init__(self) -> None:
@@ -220,13 +220,13 @@ def __init__(self, system, config):
def dc2ac(self, **kwargs):
"""
AC conversion ``dc2ac`` is not implemented yet for
- multi-period dispatch.
+ multi-period scheduling.
"""
return NotImplementedError
def unpack(self, **kwargs):
"""
- Multi-period dispatch will not unpack results from
+ Multi-period scheduling will not unpack results from
solver into devices.
# TODO: unpack first period results, and allow input
@@ -247,7 +247,7 @@ def __init__(self, system, config):
ED.__init__(self, system, config)
DGBase.__init__(self)
- self.config.t = 1 # dispatch interval in hour
+ self.config.t = 1 # scheduling interval in hour
self.info = 'Economic dispatch with distributed generation'
self.type = 'DCED'
@@ -258,7 +258,7 @@ def __init__(self, system, config):
class ESD1MPBase(ESD1Base):
"""
- Extended base class for energy storage in multi-period dispatch.
+ Extended base class for energy storage in multi-period scheduling.
"""
def __init__(self):
@@ -301,7 +301,7 @@ def __init__(self, system, config):
ED.__init__(self, system, config)
ESD1MPBase.__init__(self)
- self.config.t = 1 # dispatch interval in hour
+ self.config.t = 1 # scheduling interval in hour
self.info = 'Economic dispatch with energy storage'
self.type = 'DCED'
diff --git a/ams/routines/pflow.py b/ams/routines/pflow.py
index 88e7e7f0..057b8c92 100644
--- a/ams/routines/pflow.py
+++ b/ams/routines/pflow.py
@@ -75,8 +75,8 @@ def solve(self, method="newton"):
raise ValueError(msg)
ppopt = ppoption(PF_ALG=alg, ENFORCE_Q_LIMS=self.config.qlim)
- res, success, sstats = runpf(casedata=ppc, ppopt=ppopt)
- return res, success, sstats
+ res, sstats = runpf(casedata=ppc, ppopt=ppopt)
+ return res, sstats
def run(self, force_init=False, no_code=True, method="newton", **kwargs):
"""
diff --git a/ams/routines/routine.py b/ams/routines/routine.py
index e8a27919..d09895ef 100644
--- a/ams/routines/routine.py
+++ b/ams/routines/routine.py
@@ -356,7 +356,7 @@ def run(self, force_init=False, no_code=True, **kwargs):
def export_csv(self, path=None):
"""
- Export dispatch results to a csv file.
+ Export scheduling results to a csv file.
For multi-period routines, the column "Time" is the time index of
``timeslot.v``, which usually comes from ``EDTSlot`` or ``UCTSlot``.
The rest columns are the variables registered in ``vars``.
diff --git a/ams/routines/rted.py b/ams/routines/rted.py
index 23b56839..0b156388 100644
--- a/ams/routines/rted.py
+++ b/ams/routines/rted.py
@@ -92,7 +92,7 @@ def __init__(self):
self.prd = Var(info='RegDn reserve',
unit='p.u.', name='prd', tex_name=r'p_{r,d}',
model='StaticGen', nonneg=True,)
- # NOTE: define e_str in dispatch routine
+ # NOTE: define e_str in scheduling routine
self.rbu = Constraint(name='rbu', is_eq=True,
info='RegUp reserve balance',)
self.rbd = Constraint(name='rbd', is_eq=True,
diff --git a/ams/routines/uc.py b/ams/routines/uc.py
index f21e521e..ba5735d4 100644
--- a/ams/routines/uc.py
+++ b/ams/routines/uc.py
@@ -315,13 +315,13 @@ def init(self, force=False, no_code=True, **kwargs):
def dc2ac(self, **kwargs):
"""
AC conversion ``dc2ac`` is not implemented yet for
- multi-period dispatch.
+ multi-period scheduling.
"""
return NotImplementedError
def unpack(self, **kwargs):
"""
- Multi-period dispatch will not unpack results from
+ Multi-period scheduling will not unpack results from
solver into devices.
# TODO: unpack first period results, and allow input
diff --git a/ams/system.py b/ams/system.py
index 3b679408..4682f97c 100644
--- a/ams/system.py
+++ b/ams/system.py
@@ -45,7 +45,7 @@ def disable_methods(methods):
class System(andes_System):
"""
A subclass of ``andes.system.System``, this class encapsulates data, models,
- and routines for dispatch modeling and analysis in power systems.
+ and routines for scheduling modeling and analysis in power systems.
Some methods inherited from the parent class are intentionally disabled.
Parameters
@@ -434,6 +434,13 @@ def setup(self):
self.Line.a1a = self.Bus.get(src='a', attr='a', idx=self.Line.bus1.v)
self.Line.a2a = self.Bus.get(src='a', attr='a', idx=self.Line.bus2.v)
+ # assign bus type as placeholder; 1=PQ, 2=PV, 3=ref, 4=isolated
+ if self.Bus.type.v.sum() == self.Bus.n: # if all type are PQ
+ self.Bus.set(src='type', attr='v', idx=self.PV.bus.v,
+ value=np.ones(self.PV.n))
+ self.Bus.set(src='type', attr='v', idx=self.Slack.bus.v,
+ value=np.ones(self.Slack.n))
+
_, s = elapsed(t0)
logger.info('System set up in %s.', s)
diff --git a/docs/source/conf.py b/docs/source/conf.py
index 0175b388..43a15ada 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -155,7 +155,7 @@
# dir menu entry, description, category)
texinfo_documents = [
(master_doc, 'ams', 'AMS Manual',
- author, 'ams', 'Python Software for Dispatch Modeling and Co-Simulation with Dynanic',
+ author, 'ams', 'Python Software for Scheduling Modeling and Co-Simulation with Dynanic',
'Miscellaneous'),
]
diff --git a/docs/source/getting_started/formats/pypower.rst b/docs/source/getting_started/formats/pypower.rst
index 78ccda05..98d1e277 100644
--- a/docs/source/getting_started/formats/pypower.rst
+++ b/docs/source/getting_started/formats/pypower.rst
@@ -4,7 +4,7 @@ PYPOWER
--------
AMS includes `PYPOWER cases `_
-in version 2 for dispatch modeling and analysis. PYPOWER cases follow the same format as MATPOWER.
+in version 2 for scheduling modeling and analysis. PYPOWER cases follow the same format as MATPOWER.
The PYPOWER case is defined as a Python dictionary that includes ``bus``, ``gen``, ``branch``,
``areas``, and ``gencost``.
diff --git a/docs/source/getting_started/index.rst b/docs/source/getting_started/index.rst
index 5e5d8e11..25a8f4bf 100644
--- a/docs/source/getting_started/index.rst
+++ b/docs/source/getting_started/index.rst
@@ -7,7 +7,7 @@
- Python Library for Flexible Dispatch Modeling and Dispatch-Dynamic Co-Simulation
+ Python Library for Flexible Scheduling Modeling and Co-Simulation with Dynamics
.. _getting-started:
diff --git a/docs/source/getting_started/overview.rst b/docs/source/getting_started/overview.rst
index 84f7d398..2e3e05df 100644
--- a/docs/source/getting_started/overview.rst
+++ b/docs/source/getting_started/overview.rst
@@ -4,7 +4,7 @@
Package Overview
================
-AMS is an open-source packages for flexible dispatch modeling and co-simulation with
+AMS is an open-source packages for flexible scheduling modeling and co-simulation with
the in-house dynanic simulation engine `ANDES `_.
AMS is currently under active development. To get involved,
diff --git a/docs/source/index.rst b/docs/source/index.rst
index 8d9b7102..6c0c5987 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -15,10 +15,10 @@ AMS documentation
.. _`ANDES Repository`: https://github.com/CURENT/andes
.. _`LTB Repository`: https://github.com/CURENT/
-LTB AMS is an open-source packages for dispatch modeling, serving as the market
+LTB AMS is an open-source packages for scheduling modeling, serving as the market
simulator for the CURENT Large scale Testbed (LTB).
-AMS enables **flexible** dispatch modeling and **interoprability** with the in-house
+AMS enables **flexible** scheduling modeling and **interoprability** with the in-house
dynamic simulator ANDES.
.. panels::
@@ -44,7 +44,7 @@ dynamic simulator ANDES.
Examples
^^^^^^^^
- The examples of using AMS for power system dispatch study.
+ The examples of using AMS for power system scheduling study.
+++
@@ -58,7 +58,7 @@ dynamic simulator ANDES.
Model development guide
^^^^^^^^^^^^^^^^^^^^^^^
- New dispatch modeling in AMS.
+ New scheduling modeling in AMS.
+++
diff --git a/docs/source/modeling/example.rst b/docs/source/modeling/example.rst
index d5de81c7..a774da7c 100644
--- a/docs/source/modeling/example.rst
+++ b/docs/source/modeling/example.rst
@@ -1,7 +1,7 @@
Examples
========
-One example is provided to demonstrate descriptive dispatch modeling.
+One example is provided to demonstrate descriptive scheduling modeling.
DCOPF
----------
diff --git a/docs/source/modeling/routine.rst b/docs/source/modeling/routine.rst
index 0f11bd6a..7fcb736e 100644
--- a/docs/source/modeling/routine.rst
+++ b/docs/source/modeling/routine.rst
@@ -1,7 +1,7 @@
Routine
===========
-Routine refers to dispatch-level model, and it includes two sectinos, namely,
+Routine refers to scheduling-level model, and it includes two sectinos, namely,
Data Section and Model Section.
Data Section
@@ -50,7 +50,7 @@ Model Section
Descriptive Formulation
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Dispatch routine is the descriptive model of the optimization problem.
+Scheduling routine is the descriptive model of the optimization problem.
Further, to facilitate the routine definition, AMS developed a class
:py:mod:`ams.core.param.RParam` to pass the model data to multiple routine modeling.
@@ -93,7 +93,7 @@ In AMS, the built-in interface with ANDES is implemented in :py:mod:`ams.interop
File Format Converter
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Power flow data is the bridge between dispatch study and dynamic study,
+Power flow data is the bridge between scheduling study and dynamics study,
where it defines grid topology and power flow.
An AMS case can be converted to an ANDES case, with the option to supply additional dynamic
data.
@@ -105,8 +105,8 @@ data.
Data Exchange in Simulation
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-To achieve dispatch-dynamic cosimulation, it requires bi-directional data exchange between
-dispatch and dynamic study.
+To achieve scheduling-dynamics cosimulation, it requires bi-directional data exchange between
+scheduling and dynamics study.
From the perspective of AMS, two functions, ``send`` and ``receive``, are developed.
The maping relationship for a specific routine is defined in the routine class as ``map1`` and
``map2``.
diff --git a/docs/source/release-notes.rst b/docs/source/release-notes.rst
index dc24316e..a4f49bdc 100644
--- a/docs/source/release-notes.rst
+++ b/docs/source/release-notes.rst
@@ -9,7 +9,22 @@ The APIs before v3.0.0 are in beta and may change without prior notice.
Pre-v1.0.0
==========
-v0.9.6 (2024-xx-xx)
+v0.9.7 (2024-05-24)
+-------------------
+
+This patch release add the Roadmap section in the release notes, to list out some potential features.
+It also drafts the EV Aggregation model based on the state space modelg, but the finish date remains unknown.
+
+References:
+
+[1] J. Wang et al., "Electric Vehicles Charging Time Constrained Deliverable Provision of Secondary
+Frequency Regulation," in IEEE Transactions on Smart Grid, doi: 10.1109/TSG.2024.3356948.
+
+- Fix OTDF calculation
+- Add parameter `dtype='float64'` and `no_store=False` in `MatProcessor` PTDF, LODF, and OTDF calculation, to save memory
+- Add placeholder parameter `Bus.type`
+
+v0.9.6 (2024-04-21)
-------------------
This patch release refactor and improve `MatProcessor`, where it support PTDF, LODF,
@@ -28,6 +43,9 @@ Outage Distribution Factors".
- Refactor `MatProcessor` to separate matrix building
- Add Var `plf` in `DCPF`, `PFlow`, and `ACOPF` to store the line flow
- Add `build_ptdf`, `build_lodf`, and `build_otdf`
+- Fix ``Routine.get()`` to support pd.Series type idx input
+- Reserve `exec_time` after ``dc2ac()``
+- Adjust kloss to fix ex2
v0.9.5 (2024-03-25)
-------------------
@@ -223,4 +241,43 @@ v0.5 (2023-02-17)
v0.4 (2023-01)
-------------------
-This release outlines the package.
\ No newline at end of file
+This release outlines the package.
+
+Roadmap
+=======
+
+This section lists out some potential features that may be added in the future.
+Note that the proposed features are not guaranteed to be implemented and subject to change.
+
+Electric Vehicle for Grid Service
+------------------------------------------
+
+A charging-time-constrained EV aggregation based on the state-space model
+
+References:
+
+[1] J. Wang et al., "Electric Vehicles Charging Time Constrained Deliverable Provision of Secondary
+Frequency Regulation," in IEEE Transactions on Smart Grid, doi: 10.1109/TSG.2024.3356948.
+
+[2] M. Wang et al., "State Space Model of Aggregated Electric Vehicles for Frequency Regulation," in
+IEEE Transactions on Smart Grid, vol. 11, no. 2, pp. 981-994, March 2020, doi: 10.1109/TSG.2019.2929052.
+
+Distribution OPF
+--------------------------
+
+- Distribution networks OPF and its LMP
+- DG siting and sizing considering energy equity
+
+References:
+
+[1] H. Yuan, F. Li, Y. Wei and J. Zhu, "Novel Linearized Power Flow and Linearized OPF Models for
+Active Distribution Networks With Application in Distribution LMP," in IEEE Transactions on Smart Grid,
+vol. 9, no. 1, pp. 438-448, Jan. 2018, doi: 10.1109/TSG.2016.2594814.
+
+[2] C. Li, F. Li, S. Jiang, X. Wang and J. Wang, "Siting and Sizing of DG Units Considering Energy
+Equity: Model, Solution, and Guidelines," in IEEE Transactions on Smart Grid, doi: 10.1109/TSG.2024.3350914.
+
+Planning
+--------------------------
+
+- Transmission expansion planning
diff --git a/examples/demonstration/demo_AGC.ipynb b/examples/demonstration/demo_AGC.ipynb
index d72656ef..08d80642 100644
--- a/examples/demonstration/demo_AGC.ipynb
+++ b/examples/demonstration/demo_AGC.ipynb
@@ -84,9 +84,9 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Last run time: 2024-04-21 16:53:49\n",
- "andes:1.9.1.post46+g65e10e02\n",
- "ams:0.9.5.post60.dev0+gc5f79b1\n"
+ "Last run time: 2024-04-21 17:31:10\n",
+ "andes:1.9.1\n",
+ "ams:0.9.6\n"
]
}
],
@@ -199,12 +199,21 @@
"execution_count": 10,
"metadata": {},
"outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Generating code for 2 models on 8 processes.\n"
+ ]
+ },
{
"name": "stderr",
"output_type": "stream",
"text": [
"Following PFlow models in addfile will be overwritten: , , , , , , \n",
- "AMS system 0x108668a30 is linked to the ANDES system 0x15387a460.\n"
+ "/Users/jinningwang/Documents/work/mambaforge/envs/amsre/lib/python3.9/site-packages/ams/interop/andes.py:933: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n",
+ " ssa_key0 = ssa_key0.fillna(value=False)\n",
+ "AMS system 0x1440dab80 is linked to the ANDES system 0x106363c10.\n"
]
}
],
@@ -313,7 +322,7 @@
{
"data": {
"text/plain": [
- ""
+ ""
]
},
"execution_count": 12,
@@ -322,7 +331,7 @@
},
{
"data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeMAAAE6CAYAAAAlRjrfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAACG/ElEQVR4nO2dd3hUxfrHP7ubZNM7qYQQaoBQQw0dKdJEEMVGE/mJKAgoCoKIWBDvlQtXBMVLUS4KKjauEYnSpfcSOoFASAgppJfN7vn9sdmT3ewmJCGw2Tif59mHPXPmzJl3T9jvzsw776uQJElCIBAIBAKB1VBauwMCgUAgEPzdEWIsEAgEAoGVEWIsEAgEAoGVEWIsEAgEAoGVEWIsEAgEAoGVEWIsEAgEAoGVEWIsEAgEAoGVEWIsEAgEAoGVEWIsEAgEAoGVEWIsENQQ1q5di0Kh4PDhw9buClevXkWhULB27doK1b9y5Qovv/wyTZo0wcnJCWdnZ1q0aMHcuXNJSEi4v50VCGoBdtbugEAgsG3+97//8eSTT+Lr68vLL79M27ZtUSgUnDp1itWrV/Prr79y7Ngxa3dTIKjRCDEWCARVJi4ujieffJImTZqwfft2PDw85HN9+vRh6tSp/Pjjj9VyL41Gg0KhwM5OfG0Jah9imlogsDH27NnDQw89hJubG87OzkRFRfHrr7+a1Ll9+zaTJ0+mefPmuLq64ufnR58+fdi9e7dZezdv3uSJJ57Azc0NDw8PRo0aRVJSUoX6snjxYnJycli+fLmJEBtQKBSMGDFCPq5fvz7jxo0zq9erVy969eolH+/YsQOFQsG6det49dVXCQ4ORq1Wc+bMGRQKBatWrTJr47fffkOhUPDLL7/IZRcvXuTpp5/Gz88PtVpNs2bN+PTTTytkm0DwIBFiLBDYEDt37qRPnz5kZGSwatUqvvnmG9zc3Bg6dCgbN26U66WlpQHw9ttv8+uvv7JmzRoaNGhAr1692LFjh1wvLy+Pvn37snXrVhYuXMh3331HQEAAo0aNqlB/tm7dir+/P507d65WOw3Mnj2b+Ph4PvvsMzZv3kxISAht27ZlzZo1ZnXXrl2Ln58fgwYNAiA2NpYOHTpw+vRpPv74Y/73v/8xePBgpk6dyjvvvHNf+isQVBlJIBDUCNasWSMB0qFDh8qs07lzZ8nPz0/KysqSy4qKiqSIiAipbt26kk6ns3hdUVGRpNFopIceekgaPny4XL5ixQoJkH7++WeT+hMnTpQAac2aNeX22dHRUercuXMFrNMTGhoqjR071qy8Z8+eUs+ePeXj7du3S4DUo0cPs7r//ve/JUA6f/68XJaWliap1Wrp1VdflcsGDBgg1a1bV8rIyDC5/uWXX5YcHR2ltLS0CvdbILjfiJGxQGAj5OTkcODAAUaOHImrq6tcrlKpGD16NDdu3OD8+fNy+WeffUa7du1wdHTEzs4Oe3t7/vzzT86ePSvX2b59O25ubjzyyCMm93r66afvv0EV4LHHHjMre+aZZ1Cr1Sae3t988w0FBQWMHz8egPz8fP7880+GDx+Os7MzRUVF8mvQoEHk5+ezf//+B2WGQHBXhBgLBDZCeno6kiQRGBhodi4oKAiA1NRUQL+W++KLL9KpUyc2bdrE/v37OXToEA8//DB5eXnydampqfj7+5u1FxAQUKE+1atXj7i4uKqYUyEs2ert7c0jjzzCV199hVarBfRT1B07dqRFixaA3q6ioiI++eQT7O3tTV6GaeyUlJT71m+BoLIIt0SBwEbw8vJCqVSSmJhodu7mzZsA+Pr6AvDf//6XXr16sWLFCpN6WVlZJsc+Pj4cPHjQrL2KOnANGDCATz75hP3791do3djR0ZGCggKz8pSUFLnvxigUCovtjB8/nu+++46YmBjq1avHoUOHTGz18vKSZwxeeukli22EhYXdtb8CwYNCjIwFAhvBxcWFTp068cMPP5iMbnU6Hf/973+pW7cuTZo0AfQiplarTa4/efIk+/btMynr3bs3WVlZJh7IAF9//XWF+jR9+nRcXFyYPHkyGRkZZuclSTLZ2lS/fn1OnjxpUufChQsm0+sVoX///gQHB7NmzRrWrFmDo6MjTz31lHze2dmZ3r17c+zYMVq1akX79u3NXj4+PpW6p0BwPxEjY4GghrFt2zauXr1qVj5o0CAWLlxIv3796N27N6+99hoODg4sX76c06dP880338gjySFDhvDuu+/y9ttv07NnT86fP8+CBQsICwujqKhIbnPMmDH861//YsyYMbz//vs0btyY6Ohofv/99wr1NSwsjA0bNjBq1CjatGkjB/0AvTfz6tWrkSSJ4cOHAzB69GieffZZJk+ezGOPPca1a9f46KOPqFOnTqU+I5VKxZgxY1i8eDHu7u6MGDHCbGvV0qVL6datG927d+fFF1+kfv36ZGVlcenSJTZv3sy2bdsqdU+B4L5iZQcygUBQjMGbuqxXXFycJEmStHv3bqlPnz6Si4uL5OTkJHXu3FnavHmzSVsFBQXSa6+9JgUHB0uOjo5Su3btpJ9++kkaO3asFBoaalL3xo0b0mOPPSa5urpKbm5u0mOPPSbt3bu3Qt7UBi5fvixNnjxZatSokaRWqyUnJyepefPm0owZM+R+S5Ik6XQ66aOPPpIaNGggOTo6Su3bt5e2bdtWpjf1d999V+Y9L1y4IH82MTExFuvExcVJzz33nBQcHCzZ29tLderUkaKioqT33nuvQnYJBA8KhSRJkpV+BwgEAoFAIECsGQsEAoFAYHWEGAsEAoFAYGWEGAsEAoFAYGWEGAsEAoFAYGWEGAsEAoFAYGWEGAsEAoFAYGVE0I8qotPpuHnzJm5ubmWG7BMIBAJB7UeSJLKysggKCkKprOIY18r7nKVPP/1Uql+/vqRWq6V27dpJu3btKrf+f//7X6lVq1aSk5OTFBAQII0bN05KSUkxqfP9999LzZo1kxwcHKRmzZpJP/zwg1k7N27ckJ555hnJ29tbcnJyklq3bi0dPny4wv2+fv16uQEaxEu8xEu8xOvv9bp+/XqFNaQ0Vh0Zb9y4kWnTprF8+XK6du3K559/zsCBA4mNjaVevXpm9ffs2SOH7xs6dCgJCQlMmjSJ559/Xo5/u2/fPkaNGsW7777L8OHD+fHHH3niiSfYs2cPnTp1AvTZb7p27Urv3r357bff8PPz4/Lly3h6ela4725ubgDExcXh7e197x9GDUGj0bB161b69++Pvb29tbtTbQi7bIfaaBMIu2yNytiVmZlJSEiIrAtVwapivHjxYiZMmMDzzz8PwJIlS/j9999ZsWIFCxcuNKu/f/9+6tevz9SpUwF9XNwXXniBjz76SK6zZMkS+vXrx+zZswGYPXs2O3fuZMmSJXzzzTcALFq0iJCQENasWSNfV79+/Ur13TA17ebmhru7e6WurcloNBqcnZ1xd3evdf+xhF22QW20CYRdtkZV7LqXJUuriXFhYSFHjhxh1qxZJuX9+/dn7969Fq+Jiopizpw5REdHM3DgQJKTk/n+++8ZPHiwXGffvn1Mnz7d5LoBAwawZMkS+fiXX35hwIABPP744+zcuZPg4GAmT57MxIkTy+xvQUGBSeq3zMxMQP/ANBpNhe2u6RhsqU02gbDLlqiNNoGwy9aojF3VYbvVxDglJQWtVmuW2Nzf37/MXKpRUVGsX7+eUaNGkZ+fT1FREY888giffPKJXCcpKemubV65coUVK1YwY8YM3nzzTQ4ePMjUqVNRq9WMGTPG4r0XLlzIO++8Y1a+fft2nJ2dK2y3rRATE2PtLtwXhF22Q220CYRdtkZF7MrNzb3n+1jdm7r0sF6SpDKH+rGxsUydOpV58+YxYMAAEhMTmTlzJpMmTWLVqlUVblOn09G+fXs++OADANq2bcuZM2dYsWJFmWI8e/ZsZsyYIR8b1gh69+5dq/KiajQaYmJi6NevX62bchJ22Qa10SYQdtkalbHLMFN6L1hNjH19fVGpVGaj4OTkZLORrYGFCxfStWtXZs6cCUCrVq1wcXGhe/fuvPfeewQGBhIQEHDXNgMDA2nevLlJnWbNmrFp06Yy+6tWq82StQPY29uX+aAkSaKoqAitVltmuzUNrVaLnZ0dWq226i76NZC/o10qlQo7Ozub3XpX3v8tW0bYZVtUxK7qsNtqYuzg4EBkZCQxMTFy4nHQTwkMGzbM4jW5ubnY2Zl2WaVSAXrhA+jSpQsxMTEm68Zbt24lKipKPu7atSvnz583aefChQuEhobem1FGFBYWkpiYWC3TFw8SSZIICAjg+vXrNvslbom/q13Ozs4EBgbi4OBghd4JBIKKYtVp6hkzZjB69Gjat29Ply5dWLlyJfHx8UyaNAnQTw0nJCTw1VdfATB06FAmTpzIihUr5GnqadOm0bFjR4KCggB45ZVX6NGjB4sWLWLYsGH8/PPP/PHHH+zZs0e+7/Tp04mKiuKDDz7giSee4ODBg6xcuZKVK1dWi106nY64uDhUKhVBQUE4ODjYjADodDqys7NxdXWtVSPIv5tdkiRRWFjI7du3iYuLo3HjxrXKboGgtmFVMR41ahSpqaksWLCAxMREIiIiiI6OlkeoiYmJxMfHy/XHjRtHVlYWy5Yt49VXX8XT05M+ffqwaNEiuU5UVBQbNmxg7ty5vPXWWzRs2JCNGzfKe4wBOnTowI8//sjs2bNZsGABYWFhLFmyhGeeeaZa7CosLESn0xESEmJzzl06nY7CwkIcHR1r1Zf339EuJycn7O3tuXbtmlxHIKjp7L+SyrJtl5gzuBnNAmvPttG7YXUHrsmTJzN58mSL59auXWtWNmXKFKZMmVJumyNHjmTkyJHl1hkyZAhDhgypcD+rQm360hfYJuJvUFBT0Wh12KvM/z7f/V8sZ25mMnDpbq5+ONjClbUT8T9VIBAIBPeVrHyN7NcD+tFvs7e28EH0WbO6V27nyO/TcwofSP9qAkKMBQKBQHDf2HomiVbvbGXez2fksjV/xVGkk1i56wpppQQ30KNkOSUlu4C/C0KMBVbn6tWrKBQKjh8/bu2uAHDu3Dk6d+6Mo6Mjbdq0sVhW2T6PGzeORx999L71WSCoiRyMS+P/1h1BkmDd/mtyeXpOScSqD38zHR3fzioR4PTc2hXVqzyEGAtMGD9+fLU5slU3ly5dYvz48dStWxe1Wk1YWBhPPfUUhw8frtb7vP3227i4uHD+/Hn+/PNPi2UhISGy02FFWLp0qUUfiHth/vz5tGvXrlrbFAiqk9V74kyONVodAMlZ+XLZZaNp6XyNlqyCIvk4PVdMUwsENYrDhw8TGRnJhQsX+Pzzz4mNjeXHH38kPDycV199tVrvdfnyZbp160ZoaKgcXa10mUqlIiAgwGzfe1l4eHhUKiuYQFAbyNOYBjx6Yd0RtDqJW5klo9+8wpI6xqNigDtCjAXVjSRJ5BYWPfCXsdNEdbBz5046duyIWq0mMDCQWbNmUVRU8kt2y5YtdOvWDU9PT3x8fBgyZAiXL182aePgwYO0bdsWR0dH2rdvz7Fjx+762Y0bN47GjRuze/duBg8eTMOGDWnTpg1vv/02P//8s1z31KlT9OnTBycnJ3x8fPi///s/srOzTdpbs2YNzZo1w9HRkfDwcJYvXy6fUygUHDlyhAULFqBQKJg/f77FMkvT1GfOnGHw4MG4u7vj5uZG9+7dZdtLT1NLksRHH31EgwYNcHJyonXr1nz//ffy+R07dqBQKPjzzz9p3749zs7OREVFycFq1q5dyzvvvMOJEyfw8vJCpVJV+8hbILhXcguLTI63nUtm65kkE5G+lVkySr5dao347zRNbfWtTX8X8jRams/7/YHfN3bBAJwdqucxJyQkMGjQIMaNG8dXX33FuXPnmDhxIo6OjsyfPx+AnJwcZsyYQcuWLcnJyWHevHkMHz6c48ePo1QqycnJYciQIfTp04f//ve/xMXF8corr5R73+PHj3PmzBm+/vpri1t1DCPO3NxcHn74YTp37syhQ4dITk7m+eef5+WXX2b16tUAfPHFF7zzzjssW7aMtm3bcuzYMSZOnIiLiwtjx44lMTGRvn378vDDD/Paa6/h6urKpEmTzMpSUlLMPpsePXrQq1cvtm3bhru7O3/99ZfJDxVj5s6dyw8//MCKFSto3Lgxu3bt4tlnn6VOnTr07NlTrjdnzhw+/vhj6tSpw6RJk3juuef466+/GDVqFKdPn2bLli1s2rQJNzc3vLy8KvooBYIHQla++d//8et3TI7TcgvR6iRUSgWnbmSYnPs7TVMLMRZUmOXLlxMSEsKyZctQKBSEh4dz8+ZN3njjDebNm4dSqeSxxx4zuWbVqlX4+fkRGxtLREQE69evR6vVsnr1apydnWnRogU3btzgxRdfLPO+Fy9eBCA8PLzc/q1fv568vDy++uorXFxcAFi2bBlDhw5l4cKFODk58f777/Pxxx8zYsQIQJ8TOzY2ls8//5yxY8fKU8+urq4EBAQA4OrqalZWWow//fRTPDw82LBhgxyntkmTJhb7mZOTw+LFi9m2bRtdunQBoEGDBuzZs4fPP//cRIzff/99+XjWrFkMHjyY/Px8nJyc5H75+/vj7u4u9hQLahyWxDg2UZ9UIczXhbiUHCRJPx3t46rmamqOSd3U7ELe+uk0GXkaWgS580T7ELxcamdoVyHGDwgnexWxCwZY5b7VxdmzZ+nSpYtJaM+uXbuSnZ3NjRs3qFevHpcvX+att95i//79pKSkoNPpHTbi4+OJiIjg7NmztG7d2iQymUGQysIw1X63kKKGtg1CbOifTqfj/Pnz1K1bl+vXrzNhwgST3NVFRUV4eHhU/IOwwPHjx+nevXuFAsbHxsaSn59Pv379TMoLCwtp27atSVmrVq3k94GBgYA+8Um9evXuqb8CwYMgK18/zfxCjwZ8vusKAGcTswAI8nQkPi0XrU7iaPwd+jX3JyVbPxJu7OfKxeRsziVlcjpBL96/nLhJWm4hswc2s4Il9x8hxg8IhUJRbdPF1sJSesvSQjl06FBCQkL44osvCAoKQqfTERERQWFhoUn9ymAYYZ49e1bealTR/hlQKBTyD4MvvvjCJDwqlCQcqSpOTk4Vrmvox6+//kpwcLDJudKZwYzF3WCb4XqBoCYjSRLZxZ7R47uGcTMjn80nbsp7h4M9najv48zl2zkcjEvVi3GxA1eTADcuJmdz8VYpf4+/rtZaMRbzWoIK07x5c/bu3WsiqHv37sXNzY3g4GBSU1M5e/Ysc+fO5aGHHqJZs2akp6ebtXHixAny8vLksv3795d73zZt2tC8eXM+/vhji0J0584due3jx4+Tk1My1fXXX3+hVCpp0qQJfn5+BAcHc+XKFRo1amTyCgsLq8pHItOqVSt2796NRnN3h5PmzZujVquJj48360dISEiF7+ng4GBT6TkFfy9yCrXoir8qPJ3t6d7I1+R8XS9nnmiv/3s/m5hFYZFOduBqXhyTuqDI9P97YZEOjVZHcmZ+rfO0tu2hmuC+kJmZKTtcGfD29mby5MksWbKEKVOm8PLLL3P+/HnefvttZsyYgVKpxMvLCx8fH1auXElgYCDx8fHMmjXLpO2nn36aOXPmMGHCBObOncvVq1f55z//WW5/FAoFa9asoW/fvvTo0YM333yT8PBwsrOz2bx5M1u3bmXnzp0888wzvP3224wdO5b58+dz+/ZtpkyZwujRo/H39yczM5N58+Yxbdo03N3dGThwIAUFBRw+fJj09HRmzJhR5c/s5Zdf5pNPPuHJJ59k9uzZeHh4sH//fjp27EjTpk1N6rq5ufHaa68xffp0dDod3bp1IzMzk7179+Lq6srYsWMrdM/69esTFxfHqVOnaNq0KR4eHhZzbgsE95XUSzRI3oLywDUwmmHS5mmYoLqIUqlAfSiONreymaC6Lp/vmXocXzc1yao4iIOPF6yjp1aipwoGZZ8hTXXN0t34cF60/P7/ejTA390R3IOh+TCwMDN2KTmbet7OONjV7LGnEGOBGXv27CEyMtKkbOzYsaxdu5bo6GhmzpxJ69at8fb2lkUV9EkJNmzYwNSpU4mIiKBp06b8+9//plevXnI7rq6ubN68mUmTJtG2bVuaN2/OokWLzBy/StOxY0cOHz7M+++/z8SJE0lJSSEwMJCoqCiWLFkC6HP3/v7777zyyit06NABZ2dnHnvsMRYvXiy38/zzz+Pq6so//vEPXn/9dVxcXGjZsiXTpk27p8/Mx8eHbdu2MXPmTHr27IlKpaJNmzZ07drVYv13330XPz8/Fi5cyJUrV/D09KRdu3a8+eabFb7nY489xqZNmxg6dCgZGRmsWbOGcePG3ZMdAkFlUf08iZaJxyHBtNwDeMuwyrIVmhgfA8Tq/zEpM+jlkVLlZbHP6P1zW6Ge6fLTvsupPPWFfuYtbuGgMpexdl+8TYiXM/V9XSyefxAopOreiPo3ITMzEw8PD1JSUuTAEAby8/OJi4sjLCzM5tLW6XQ6MjMza5137t/VLlv8W9RoNERHRzNo0KAKOcTZCrXVLulfESgyrqNr8BBKFx9OJWRw6XY2Tf3dOH8rCxcHO/o39ye7oIiYs7cAcFApGdxS75D44/EEszaHtQmmsEjLb6eT7nr/HsqT+CiyYNR/odlQk3NPrdzPviupAGx/rRdhFsT2xPU7DPv0LwCTLFGVeV4GPcjIyMDdvWppH8XIWCAQCARVR6f3W9D2mo0ipD1DZxdPI9/Q/xPh507/x7pTlFvI9JMxADwbWY/Bj7YE4Kr7BZb+edGkyeGPDcYRmH7s17vefqPDAnwU50Br7q9x+Fqa/P7K7WyLYnwqwXRvc75Gi2M17kKpKLVniCAQCASCB4IkSey/kkrCnTyQip0IFSqzDEwAbmr9qNLdsWR06WhXInYN6pgKpIdT5WYNiqTitnSme5qLtDo02pKJX0t9A0zWkh9ZtoeIt3/n0+2XKtWH6kCIsUAgEAgqxa6LKTy5cj8v/vcISMUez0oVq/+KM6trEFelsmS9NsAoTWK3Rr44O5SI87whzeX30VO7M71vEza92IVT8/uz6cUo+dzkXg0BKKL42lIj4/i0XJPjssTYzqhfJ29kUKST+Mfv5y3WvZ+IaWqBQCAQVIq9l/UR6E7eyEDy0qIANDoFn26/bFa3kZ+r/H7ekObsvHCbkZF15TIfVzXRU7tTpJOQJInG/m7yueZB7jQPKlmDre/jbHLd79N6cP3TfwCQlZdHyZVwLbViYpxbWDO2B4qRsUAgEAgqRYGmZP+vTqufHr50O89i3RZGYvpctzC+fK4jns6mIS3r+7rQyM/VRIgt4W0UCtPDyR5/dzVFxWPKXWdvmtT9bKfpD4PUnEKOXEvn0NU0k/LSySwM6HQSh24r6L14N/sup5bbr+pAiLFAIBAIKsWN9BLhlYoD8ZwsDnNZ2kmqV1O/aruvQqFg6kON6RTmzeCWgXg42cvT1Ml3SqJ1SZLEgTi96BpmoW9l5vPYir08/tk+0nMKef7Lw4xY/heXk3PM7gP6BBa/XVdyIz1P3h5lCUmSiIm9u9f33RDT1AKBQCAwQ6uTmPDlIfI1Wr58riPqYqergiItfxRvUQKQir2p41LyAQXdG/sSl6IXuGaB7jg5VK9n8ox+pglYWtXzhQSwV5RMNxtiXAPMHBDOoi3nOJeUJZedTcyUbTgaf8fifZ7+zyHuGM1sp+UU4u5ox4kbd2gb4oVSqWDXhdtM33ic22mW26gMYmQsEAgEAjMu3Mpix/nb7L+SxpGrJWFtfzhaal9wsRin5un/bWI01eyqvv9bhOwd9FPX2qISBy5DqExPZ3taBuuTwNzOKsmVfP5WFqWp5+1schyXmotWKnHuOpuYSdt3Y3hsxT4+KnbwWrTlHKllrEVXFjEyFggEAoEZ14zSGcYmZhJVHFv6bHEKRBlJCwqDGNsR7FWSNOVB7NdV2unFuEnBGTj4BQAOqTmMVsXhbedAWNxZRquumFzjfeYQo1WmcfNDVc5cU5k6fRmzfd0fPFqkAxXk7AF8IuiSGks7lY6+bbzpdY92CDEWWJ2rV68SFhbGsWPHys3KJBAIHhxXjbyRb97Jl98nZ+pHmG8Pbc7HWy+gQr9mnJZTBKjxdSmJj662u/9irFLrvbW7aA9D9GEAQoF37YFCYG/xe2NuwrDSZVnA3bY4G5+PhrkKfVnmuXsPZCnEWGDC+PHjSUlJYfPmzdbuikW+/vprRo8ezcSJE/nss8+s3R2BwKbIyNOw/VwyD0cE3HXUarw1yJD2ECAxUy/MgR5OtKrrgSpBL0SpeXqvZG/XEo/nhnXuf6zn3Nbj+O74BdztCuUgH65qO7ILiqjjqqZtPS+2VsDBKtDDkcSM/LvWM9Cqrgcnb2SgALo29QE2VNECPUKMBTbF6tWref3111mxYgWLFy/G2dn57hdVEY1GU6tiCAsEc386zeYTN3nxVkPeeDi83LrG09SpOSVifLtYjP3d1bSp6y4niCjQ6tdXvZztWTCsBb+eTGRy70bVbIE5av/GzCyaBMY7lIqXj4eEBNLpqXbkHr7O69+fLLMNT2d71o7qyMvFMaqf6liPbw7Gl3/j4vgmHk727B7RGcbfmxgLB64HhSRBYc6Df1VzHpCdO3fSsWNH1Go1gYGBzJo1i6Kikv8FW7ZsoVu3bnh6euLj48OQIUO4fNl0v9/Bgwdp27Ytjo6OtG/fnmPHjlXo3levXmXv3r3MmjWL8PBwvv/+e0CfLKFu3bpmI+WjR4+iUCi4ckW/XpSRkcELL7yAn58f7u7u9OnThxMnTsj158+fT5s2bVi9ejUNGjRArVYjSVKFbNq7dy9t2rSRbfrpp59QKBQcP35crhMbG8ugQYNwdXXF39+f0aNHk5KSUiHbBYKqcDurAI22ZE/w5hP6vbhr/7p612tNRsZZeiclSZJkT+U6bmrC/Ut+DGuL5cTJXsWYLvXZ+EKXSoe2rArO5XhrG+7/RPsQLr0/kEfbBJmcf6ZTPX6f1oNDc/rSuq4HAyMCGN42mFCj4CITuoaWe39P5+qx0epivHz5cjmjTGRkJLt37y63/vr162ndujXOzs4EBgYyfvx4UlNNN2Rv2rRJTuDevHlzfvzxxzLbW7hwIQqF4p5T6N0VTS58EPTgX5qyHRIqS0JCAoMGDaJDhw6cOHGCFStWsGrVKt577z25Tk5ODjNmzODQoUP8+eefKJVKhg8fjq54L2JOTg5DhgyhadOmHDlyhPnz5/Paa69V6P6rV69m8ODBeHh48Oyzz7Jq1SpAn7rxySefZP369Sb1v/76a7p06UKDBg2QJIlRo0aRlJREdHQ0R44coV27djz00EOkpZUEAbh06RLffvstmzZtkoX0bjZlZWUxdOhQWrZsydGjR3n33Xd54403TPqSmJhIz549adOmDYcPH2bLli3cunWLJ554onIPQSCoIEeupdPh/T+Y+o3+x65OV/LD3F5lOZWggXyNlpsZJXuJU3MKGL3qAM3mbaGwWNx9XdXU9ShZH5aK5aSsNIX3C2eHsid4/dxKwm7aqZTU8ymZNj80py/vD29J0wA37FVKFAoFK56N5F+j2pgEF2nq72YiuOEBpoFJPKvpB4dVxXjjxo1MmzaNOXPmcOzYMbp3787AgQOJj7c8PbBnzx7GjBnDhAkTOHPmDN999x2HDh3i+eefl+vs27ePUaNGMXr0aE6cOMHo0aN54oknOHDggFl7hw4dYuXKlbRq1eq+2VibWL58OSEhISxbtozw8HAeffRR3nnnHT7++GNZmB577DFGjBhB48aNadOmDatWreLUqVPExuqTl65fvx6tVsvq1atp0aIFQ4YMYebMmXe9t06nY+3atTz77LMAPPnkk+zbt49Ll/QB3Z955hn++usvrl27JtffsGGDXH/79u3Exsby7bff0r59exo3bsw///lPPD095RE2QGFhIevWraNt27a0atUKhUJRIZsUCgVffPEFzZs3Z+DAgWY2rVixgnbt2vHBBx8QHh5O27ZtWb16Ndu3b+fChQv38lgEAjRaHf/8/TwxsSX7f78+oP8eNaQhNKQSBNPkCJa4lpprMqmWkl3I7osp5BdH3vJwssfRXkWwZ4loaVFW2yixMqiUChztLdvTLtTT5HhgRABO9iqGtg6ijpva4jUAPkZi7O5kR76mZA/zxv/rYlI3yNOJ6sCqa8aLFy9mwoQJspguWbKE33//nRUrVrBw4UKz+vv376d+/fpMnToVgLCwMF544QU++ugjuc6SJUvo168fs2fPBmD27Nns3LmTJUuW8M0338j1srOzeeaZZ/jiiy9MRnb3DXtnePPm3evdj/tWE2fPnqVLly4mv3y7du1KdnY2N27coF69ely+fJm33nqL/fv3k5KSIot0fHw8ERERnD17Vp7ZMNClSxeze5Vm69at5OTkMHDgQAB8fX3p378/q1ev5oMPPqBt27aEh4fzzTffMGvWLHbu3ElycrI88jx69Cg5OTnUqVPHpN28vDyTKefQ0FCzOnez6fz587Rq1cokX3DHjh1N2jhy5Ajbt2/H1dWV0ly+fJkmTZqYlQsEFWXDoessK840ZMjJm55bsv+1oEjL+DWH5OOMPA2SJJU5ijXsw20d4snJG3fMVrsC3PV/63WMxHdk+xAm9om4d2OqgKvannxNgVl5pzDTXPPNAt05NLcvzndxXjMeGbs72tO/eQC/nLhJYz9XPEr94AgPqFr+4tJYTYwLCws5cuQIs2bNMinv378/e/futXhNVFQUc+bMITo6moEDB5KcnMz333/P4MElCaH37dvH9OnTTa4bMGAAS5YsMSl76aWXGDx4MH379q2QGBcUFFBQUPKwMzP1e+00Gg0ajWm2EI1G/4eu0+nkL24A7KrnF1SlkKQqrRsb+m+M4di4XKvVmtQfOnQodevW5fPPPycoKAidTkerVq3Iz883+TyM2zAuK31PA6tWrSItLc1ExHU6HceOHeOdd95BpVLx9NNP8/XXX/P666+zfv16+vfvj7e3NzqdDq1WS0BAANu2bTP7AvL09ESn0yFJEi4uLmZ9qIhNCoXC4udiOK/VahkyZAgffvihmW2BgYFl2n03pOJna+l5Ge4vSRIajQaV6sHnaK0Khv9Ppf9f2TrVbVeRVsephExa1/Xg0q2Svb+FhYXEJmax7VyyXHY9NRuM/uw1Won07DzcHM1Hst8dSWDpNr2w1/V05MR183v7uTno7SgqlKdXZw1ogr2jvVWem6taRUq2adn3L3RCIWnRaEwTQaiVoNUWoS0nP4S7umSk7WwHk3uG4eygZEznenrHTpVC9twe3NKvWmy2mhinpKSg1Wrx9/c3Kff39ycpybIbelRUFOvXr2fUqFHk5+dTVFTEI488wieffCLXSUpKumubGzZs4OjRoxw6dIiKsnDhQt555x2z8u3bt5t59NrZ2REQEEB2djaFhdUTneVBYfijysoyj1DTsGFDNm/eTEZGhixo27Ztw83NDTc3N65evcrZs2f55z//SYcOHQD9jyPQj0AzMzMJCwtj3bp13Lp1Cycn/Y+THTt2APq1WcOPHGPS0tL45ZdfWLVqFeHhJR6gOp2OQYMGsWnTJh5++GGGDh3KW2+9xa5du/j+++/5+OOP5fbCw8O5desWBQUF1KtXz+wemZmZFBQUoNVqTfqQlpZ2V5tCQ0NZv349t2/fRq3WT33t2bPHxKYWLVqwefNmvL29sbMz/W9X+p5VwdLzAv0Xc15eHrt27TJxtLMFYmJirN2F+8K92nU0RUGRBNtvKrmZq2CG+w7q5t5gTvGf1ZWVX5Gao2COXYn63vl6HW+pIN9IkRNWf4VTKQXIKYKc20qeB7CDkHiJNnbmo+ewVIlrKyVUkoaw4rI//tyGpLDOD76kOyoMvzYcVXqRjDv2FwllO1CXiz6Rk/7DOXt0H8520MUOLh6+ykWgT4CS3xOUPNlAy5n9O8jNvXffHKtvbSo9Silv6iQ2NpapU6cyb948BgwYQGJiIjNnzmTSpEmyM8/d2rx+/TqvvPIKW7duNZlWvBuzZ89mxowZ8nFmZiYhISH07t0bHx/TqZD8/HyuX7+Oq6trpe5RE7C3tyczM5PLly+bfI7e3t5MmzaNzz77jLlz5/LSSy9x/vx5Fi1axPTp0/H09MTd3R0fHx++/vprGjVqRHx8PG+//TYATk5OuLu789xzz/H+++8zY8YM5syZw9WrV1m+fDkALi4uuLubT/msWbMGHx8fxowZg1JpujY0ZMgQNmzYwBNPPEHLli2Jiopi2rRpaLVannzySVnwhw4dSocOHRgzZgwLFy6kadOm3Lx5k99++41hw4bRvn171Go1KpXKpA+urq4VtmnmzJm88cYbxMfHyza5urri7u7O9OnTWbduHZMmTeK1117D19eXS5cusXHjRlauXFnlUaskSWRlZeHm5mbx/01+fj5OTk706NHDZv4WNRoNMTEx9OvXr1ZtLasOu/IKtbzy7p/ycRApTC1cafpNngLhwEPGZRnQXoFpPdMAVDKtjesUYFkl8opfxRQp1fTtN0AOTfmgeevYNvKLs0f99koPdJJkFt6ysng1vsWxY0cZNtD8eQ1CPzNhp9J/H93rj2mwohj7+vqiUqnMRsHJyclmI1sDCxcupGvXrrJzTKtWrXBxcaF79+689957BAYGEhAQUG6bR44cITk5mcjISPm8Vqtl165dLFu2jIKCAotfjGq1Wh71GGNvb2/2oLRaLQqFAqVSaSYetsCePXto3769SdnYsWNZu3Yt0dHRzJw5k7Zt2+Lt7c2ECRN46623ZFs3bNjA1KlTadWqFU2bNuXf//43vXr1ks+7u7uzefNmJk2aRGRkJM2bN2fRokU89thjZX5ea9asYfjw4WYjSoCRI0cyatQobt++jb+/P8888wwvvfQSY8aMwcXFNODAt99+y0cffcTzzz/P7du3CQgIoEePHgQGBqJUKmUxM+5DRWzy9PRk8+bNvPjii7Rr146WLVsyb948nn76aZydnVEqldStW5e//vqLN954g4EDB1JQUEBoaCgPP/wwdnZ2VfZANUxNG/7eSmOwy9LfaU3HFvtcEe7FrsRM0+lQd4V+RJYrqflS2x+Ax9rV5ci1dK4a7RM2xsvFgfScQpoFunMuMRPDIlavpn7ka7TsN3L0eijcHzdHO/ZdSaVNiCeO9ipyC4toVKfE90Gr03Ew2ZEODg5We15PdazH57uu8GzneoT5Vc8abs9wf3KuSGU+L+Oi6rBbIUnVvBG1EnTq1InIyEh5FAHQvHlzhg0bZtGB67HHHsPOzo6NGzfKZfv27SMqKoqEhASCgoIYNWoUWVlZREdHy3UGDhyIp6cn33zzDVlZWbLHrYHx48cTHh7OG2+8QURExRwQMjMz8fDwICUlxeLIOC4uTt6yZUvodDoyMzNxd3e3yR8SZfGg7Vq/fj3jx48nIyNDHp3fD+5mly3+LWo0GqKjoxk0aFCtEmNju7Qoef37k9T3dTHLQmTMtdQcgj2d5BHY0fh0Riwv8amJUFzhf+q53JS8iSpYBsDa8R1Yvv0yB6+m0TrEkxPX78j1XdV2dKjvxfbzt83u9e6jEVxLyeE/e+LksvXPd6JrcUzqithlreeVla9h/5U0ujf2rbZ42JWxy6AHGRkZFmf3KoJVp6lnzJjB6NGjad++PV26dGHlypXEx8czadIkQD81nJCQwFdffQXopxonTpzIihUr5GnqadOm0bFjR4KC9Ju5X3nlFXr06MGiRYsYNmwYP//8M3/88Ye8hufm5mYmuC4uLvj4+FRYiAWC0nz11Vc0aNCA4OBgTpw4wRtvvMETTzxxX4VYYLv8djqRX4oDcPxfjwa4qs2/irecTmTSf48yMrIu/3y8NQApWaYew/bovZCKJBUd6ntx6Go6d3I1sid1ZD0vEzH2cLJHVcaP0duZ+SRlmoaD9Ctn+09Nws3Rnn7NLc+o2gpWHfqMGjWKJUuWsGDBAtq0acOuXbuIjo4mNFQf8SQxMdFkz/G4ceNYvHgxy5YtIyIigscff5ymTZvyww8/yHWioqLYsGEDa9asoVWrVqxdu5aNGzfSqVOnB26f4O9DUlISzz77LM2aNWP69Ok8/vjjrFy50trdEtRQrqaUOPyUlZj+33/qPZq/P3JDLjOk66vn7czcwc1QGcQYlRzg4k5uIXfy9NPZpffZNvZ3LXMt9WxSFv87mWhSVt5eXEH1YnUHrsmTJzN58mSL59auXWtWNmXKFKZMmVJumyNHjmTkyJEV7oPBm1cgqCqvv/46r7/+urW7IbARjNdzD1xJY3jbuibnJUkitnSqQkpGxl0a+PB89wbcOuECKaBQ2csBN9JzNXI+33b1vPjXqNZM36gP+/rJU21RKRWs/ks/Fd0pzJs+4X4s/O2cScAQgN5N6zyQcJYCPVYXY4FAIPg7cPBqGvuTFQwCzieVbEUzjgFtwHg0DHDhVhZN/N1ILhZjn+LMSE+3D4YtEORdErIx4U6evAfW09me4W3r8mibYBMnwa8ndmL3xRSm9W3MgStplObCewPvGqVLUL2IT/s+YkXfOIEAEH+D94uMPA2/nLhpkoThbjyz6jDfXFax62IK54zEOD4tl4IiLZPXH2HTkRsUFGmZWSrD0CPL9pCVr5FFvEGxN3OYt16U1Wo1Xs7691du66NfONgpcSp2ZirtrR/V0Jc3Hg5HbaciwMPUse/xyLpCiK2AGBnfBwyed7m5ucKBR2BVDMEIapNXck1g/i9n+PFYAk91DGHhCMux7SVJ4tvD1/Fzd6RtiKdc/tcl08Q2tzLz+e1UEtHFr1e/O0Fp8jU6zidlcaU4zJScrEBbvNVJaS+HcDwafwcAXxeHCm2ZKy3G7mJq2ioIMb4PqFQqPD09SU7Wh6NzdnZ+4JlMqopOp6OwsJD8/Pxat7Xp72SXJEnk5uaSnJyMp6enzYTCtBV+PKZP4vvNwetlivHha+m8sekUAN9NKom/fi1N/wPJ28WBtJxCinQS0zYev+s9E+7kkZmnD2zhZYidrCsWY5U9LYM9TOr7uFbM+cpNbYeLg4ocfdgpsU5sJYQY3ycCAgIAZEG2FSRJIi8vDycnJ5v5AVER/q52eXp6yn+LgvtEyiXIMw9nlXnxFm0Veo/o5DNFtFXonabsEuNpqyigvrMLaVIhmXmW4xo7O6jILSwJoKyLL6SF7hoowDPVG7Ls4HZxxi+lHY38TJOQGCc7KA+FQkGAhyOXb+udytwdhSxYA/Gp3ycUCgWBgYH4+VVPEPEHhUajYdeuXfTo0aNWTW3+He2yt7cXI+L7TF/lEVj2tMVzDwEPGQanh2Cw4X0BoAYMy8blDWCNzx2F4YbjdaXqqexRKBSsGd9Bzs5kcPKqCIEeTiViLEbGVkGI8X1GpVLZ1BeiSqWiqKgIR0fHWiVawi5BdVFk5LTVUKEP3CHZu6Bw8eV6eh6SJKG2V2GnVJBToJ9WdlbbkVtgmqjDRW1HoVaHpkjfnoOdksKish3CnBxU5BVqUSoV1DXOoauyh7ajAUzK/d0rHnHNeN3Yq4IjakH1IsRYIBAIKkFKdkkmNhV68dxc1Ik//OfxS1JxzvJCaFfPU3am6hjkzcGrpluI/q9zA3aevy3nDj4/72FGrtjHqYQMAAZGBNC7qR+vb9J7Vod7u3EuKYtgTyf+mtbHYt/qepUE9GgWWPGwjAFGwh1QCREXVB9CjAUCgaAS3DIKGaksFuMcjSSHtzRgEGKAxMw8SlPHVY1EydYztZ2KzVO6cTurgF9O3OSxdsF4OjuQW1jE/M2x8nao8qaRnRxU9G/uT3xaLn2b+VXYpno+JSJe38elnJqC+4UQY4FAIKgEpmKsF1PdXUI2JGXkm5W1CHLnSooXF25lm5TXcVMzoVuYfOzmaCq+bhbiWBuzckz7cs9bYmirIDLzNEQ19MXJwXaW1WoTQowFAoGgEtwyStagUuhHxjrK99A3RMQypnMDH1oEeeCqtjMLh2lM6ZGw233wdnZyUPF89wbV3q6g4tSeDZcCgUDwAEi2ME2tNfoqXTk60uwaA2qVXpS/n9QFpVKBh7M9cwY3p3lQ2eu7LqVGqq5i61GtRDxVgUAgqAA7zifzrz8umpQZHLiMp6kDPcqOuvd/4VqmPlm5vL/aUiFNLaVbFNg+4qkKBAJBBRhXvH/XGEsjYw8ne4vblJwdVAQ5m25vqggd6nubHIuRce1ETFMLBALBXbC0/7eul5M8MvZwLonO4eFkzz9GtqKulxP9jRLeP9WhLs5V0FFHexWfG019382BS2CbCDEWCAQAJGbkodOJLE+WKJ28wdFeyYu9GspiXGT0VermaMewNsHseaMPL/RsKJdP7B5GVTGOFy2mqWsnQowFAgH/O3mTLgu3yUnnBaZsLrWH+OEWAYyMrEuPxj4A5BpFvFUqSzyrI0O9+H1aD07M64/PPUS2cjfa3uTqKCKt1UaEGAsEAl7++hgA7/161so9qTlodRIZZSRxUCoUqO1UNPLVO2v1CvdHoYAXephvD2oa4IaH870JqLtTyWjY20WIcW1EzHcIBALcHO3Iyq+8c1FtZtrG42w5ncjW6T3NzhUY4lPr9FmVGvl7sG/WQ/hWIjlDZfBzcyTE2wlNkURkPe+7XyCwOYQYCwQC6ripZTHOK9TWyihMkiRVOH2mJEny1PRnOy6bnX+6Y73iisUpDhUqk2QL1Y2DnZI/Z/SiSKfD2UF8bddGxDS1QPCAWPtXHMt3XLJ2NyyiMhKpGd8et15H7hPv/i+WsNnRdP1wG1duZ9+1/u3skihbV1P1qQWdHVSceWcAv73Sna6NfPUndcUjZOX9/yp1sFMKIa7FCDEWCB4ASRn5zN8cy0dbzpOYYZ40wNoYJ7H/7XSSFXtSOQqKtEjS3T3AV+3RO6Yl3Mnjw9/O8fuZJP67/xoA0acSmbD2EDfSc+X6l4ziRR+I02db8nJ2wEVtZ5oNyWhkLBDcC+JnlkDwADCkyQNIzMgvN0qTNcgptL314qSMfIYu20PzQHe+fK5jmfXScwpNjq+k5PDCuiMAdArzZtqG4xRqdaTlFvLj5K5otDqWW5iaDjXKbCQjGUbGQowF94YYGQsEDwBjr9wRy/dy807NGh3nGCW+V9vpvxYSM/LIMxox1zS+P3Kd21kF7LxwG43WPCgHwJbTSbR9N8ak7FJyyaj3yLV0CouvPZuYCcD6/dfYcynFrC1fV7VZmcGBC4X4KhXcG2JkLBA8APJLidqX+64ye2AzK/XGlMIinUlWoYIiHYeupvH4Z/sAOPDmQ/jXsITzey+n8M+tF3ha9Scz7TaiWqSAUs5ZGq2OKI2Wk8UaaqdUoNUZZxAGhy1KBqlLhFxaaMfjhVpGqM2nvl3i7GBhKQcwTfHUtpimFtwjQowFggdAnsZUjK+m5Fisp9HqsFMqKuz1W1GW/nGR7AINbw5qZta28ajYwHeHr8vvNxy8zit9G1drf+6V177VR8QaotyHlyIbCs3r2AP2xqZKYJbpUAeOxmUF4IKFemDxHoBeiAMiKtZxgaAMrC7Gy5cv5x//+AeJiYm0aNGCJUuW0L179zLrr1+/no8++oiLFy/i4eHBww8/zD//+U98fHzkOps2beKtt97i8uXLNGzYkPfff5/hw4fL5xcuXMgPP/zAuXPncHJyIioqikWLFtG0adP7aqvg70tpMVYpzb/tM/I09P/XTvzcHPn5pa4mkZwqw4xvj3MpOZtvX+iCo72K62m5/OuPCwCMjapPXS/TtU/DerHaTonaTklmfhE5BSX9jUu5u/fxg6agOFa0IZ/w1Y7zqd/pEfn8r6cS+ej38ybXvNCjATfv5LH5ZGKZ7S4Z1Yafj91k+4VkALZO6yFP25eJoye4+JRfRyC4C1Zd6Ni4cSPTpk1jzpw5HDt2jO7duzNw4EDi4+Mt1t+zZw9jxoxhwoQJnDlzhu+++45Dhw7x/PPPy3X27dvHqFGjGD16NCdOnGD06NE88cQTHDhwQK6zc+dOXnrpJfbv309MTAxFRUX079+fnBzLoxWB4F7JLyXGlpLN772Uwq3MAk4lZJBQxTVlnU7ih6MJnLyRwY7zt4GSrTkAt7MKzK4xCK+r2k5OZH8treSazScTuZNb1rDwwfDjsRtsP58sH3sXh5Y0xIb+96Fs8Gkov84X1uGaFMA1KYCO7dpzTQqgZ5fO+NZrJpdbeg3fkMTa80quSQG88Gg/1P6NTdq1+BJCLKgGrCrGixcvZsKECTz//PM0a9aMJUuWEBISwooVKyzW379/P/Xr12fq1KmEhYXRrVs3XnjhBQ4fPizXWbJkCf369WP27NmEh4cze/ZsHnroIZYsWSLX2bJlC+PGjaNFixa0bt2aNWvWEB8fz5EjR+63yYK/KaVHxqnZpqK4+cRNXlx/VD7OzLcchvFuGEfRSiv2Ik4xupdFMS4eGTurVXIM5GspJdt8tDqJ/VfSqtSf6uB0QgbTN55g/JpDcvYkg9OVQYwzCySTHwzX0/U/ZmYOaMo/Hm/N1Q8HE+zpRPMgD7P2B7cMZFDLALPyIM+atU4uqN1YbZq6sLCQI0eOMGvWLJPy/v37s3fvXovXREVFMWfOHKKjoxk4cCDJycl8//33DB48WK6zb98+pk+fbnLdgAEDTMS4NBkZGQB4e5cdZq6goICCgpIvssxMveelRqNBo6naF2dNxGBLbbIJrG9XbrG4ejnbk56rISW7wKQvU745ZlL/Tk4+Go2FrTTFpGYX4OFkj1TszWtoKzMvX66Tkau/x1d7r8pltzLy+OFIPEv+vMSnT7UhPMCNjBz937WLvQo3R70jUlbxOrKq2Onp0q1MNE0fzAiw9LO6mJQhn7uQeIemAW5kFGdmcHVQQhHoUHD6RjqdwvT/h2/e0f+Y8HdzMPmcWwS4mN1vZLsgLiZnE33KdH+1u1pZrX8v1v4bvF8Iu6rHdquJcUpKClqtFn9/f5Nyf39/kpIsBx2Iiopi/fr1jBo1ivz8fIqKinjkkUf45JNP5DpJSUmValOSJGbMmEG3bt2IiCjbCWPhwoW88847ZuXbt2/H2bnsL01bJSYm5u6VbJAHaVdCDqy+oKJngI4bOQpASROXAg7kKrl1J5fo6Gij2qb/FXf8dYCUWMvBLM5nKPgsVkn3AIkRYfqRocGu5LyStg6fOod/RizHrpe0vffoKX67oRfcoZ/uY1wTbfH0mIqC3CxyCyWMJ8zqOuu4lq1g9/HzOKWcxfcBDhYNNv2ZoAD0ff75jz208JLIzFcBCtxVhcVirOTn7QdIPav/zK4l6c9fiT1OdILpD51RDRTsTFTSwkvCw0Ei4/wB/IA23kqOp5XYfvzAX1y/D/aK/1u2RUXsys3NvWudu2F1B67Snp3lxY+NjY1l6tSpzJs3jwEDBpCYmMjMmTOZNGkSq1atqlKbL7/8MidPnmTPnj3l9nP27NnMmDFDPs7MzCQkJITevXubOI/ZOhqNhpiYGPr164e9fe3JDmMNu57/6igp+SlsuqpicMsAuJ1Ep5aNObDtMgU6Bb37DsDJQUVqTiHs22FybXhEGwa1DjQpKyzSkZWvYe3Xx9GRwc4kBSv+7yETu87czITj+wHwCgihZef6sP8vuQ2voFC4cUM+XntBxfyhzeDCWeoF1CHUx5lT+0t8NqKahXDt0A0O3FZy4LaSpU+0sjilW52Uflb7fomFeH2fvziv4tS8h9Dt/xMAH3cXuA1alNRr2JRBPfVZk+af2A5oGNynG0383UzaH1TGfQcPht6Ld3OjeIp7+OD+1Zo7WPzfsi0qY5dhpvResJoY+/r6olKpzEasycnJZiNbAwsXLqRr167MnDkTgFatWuHi4kL37t157733CAwMJCAgoMJtTpkyhV9++YVdu3ZRt27dcvurVqtRq803/dvb29eqP0ADwq5757qRE1ZhscNWgIczDnZKCot0ZBTocHdxpPOHW82uzSuSzPr54teH2XXxtrxuCsh1DHYVSSU/Ou/kFXEn3zQYRlqO+Tam+Zv1aRPruDvS1DjUI9AhzIdvDpWI9yvfnqR7U3/ZgQr0a8qWvMPvFYNNNzNM17nj0kqm4lUK/eeqRSl/ZkVaHenF09j+ni6Vet5FRo51ni6O1b7FDMT/LVujInZVh91WE2MHBwciIyOJiYkx2XYUExPDsGHDLF6Tm5uLnZ1pl1Uq/fSVIT5tly5diImJMVk33rp1K1FRUfKxJElMmTKFH3/8kR07dhAWFlZtdgkEBpRGX+QGb2pnBxW+Lg7czMgnNafQJNNPy2APAj0c2Rp7i2wLe3//OHurVImE4sZBAtMPojhbBCoVzomZDFTqk1E0SHPB4fxpBiqvlFxyFgaW4bbZMe8KbXO9GKi8IJcNsSvggPMZE4ey79ed5/+660eg3xy+wYq4QFZPHkAjP9dKZUaqKAnpplOA8Wn6Y2cHFYriNXMdSvkzMziuKRX6eNKVYXCrQFbtiWNQy4D7IsQCQVlYdZp6xowZjB49mvbt29OlSxdWrlxJfHw8kyZNAvRTwwkJCXz11VcADB06lIkTJ7JixQp5mnratGl07NiRoKAgAF555RV69OjBokWLGDZsGD///DN//PGHyTT0Sy+9xNdff83PP/+Mm5ubPJL28PDAyalmxQwW2CaXkrNMvJgNQuFor8LXTa0X4+wCkzCZ/xrVRk5ekF2B3MLtFBex+3I+HQGu6suaAysM+pMB7DM6vhtX9C+T+j/AIgDjsiTgO/3bp4AQbQv+FRPGwJYBzPnxNJ8+3Y5ujX0reNPykSSJxAz9SNjgTJacqf9cXdV2cqIGnaSQP+OUbL0Ye7uoKz1in9qnMfV9nHk4IvDulQWCasSqYjxq1ChSU1NZsGABiYmJREREEB0dTWhoKACJiYkme47HjRtHVlYWy5Yt49VXX8XT05M+ffqwaNEiuU5UVBQbNmxg7ty5vPXWWzRs2JCNGzfSqVMnuY5h61SvXr1M+rNmzRrGjRt3/wwW/C24kZ7LoH/vMZlOvlUsKE4OKnyKp3hTsgu4Uzyd6u5oRyM/V3mNsvTWpiILsZfrK/Q/IjMkF85JIQD4uDjo16DRh38M9HDkenoermoV2QXlx5mOrOeJSqng4NV0AEK9nQkoDoMpIcnldkoFkfW8oCALbp0iSJFKTmERL3+td5R6/qtDnHt3YIU+q7uRkaeRM0o1rOPChVvZJGcZiXHxyFiLUv4BY/gR5OtauVExgIezPaO71K+GngsElcPqDlyTJ09m8uTJFs+tXbvWrGzKlClMmTKl3DZHjhzJyJEjyzxfkZRrAkFlyC0sYvrG47Sq60kjP1cTIQa4WSzGjnZKOeFASnYhGXl64fQsnk71dNavPWXkacgr1LL+wDVCfVzoUN/L7J6uCv2a9G5dBC9rXgEg2NmJhMKSteqWPh6cKsxgdLtQ1hWPui0xom0wnUa1AeDrDcc4fv0OP03sCsU/HBRAZuwtJn51GJVSwf7HH8LnzimUqx7CQVGEzui/VL7GctKGqmAIfuLr6iBPOSdn6T9LF7UdFP9I0aGU90un5hjE2EJiB4GghmJ1MRYIbBZNPlzZDpo8dp9Jwu5sIrFnIbJLKIOVloUv8EY6XQvukKu8hV/8ZRwK3RisvEI9lTOcTifiThqDldeon+jKa/N/AOAYEDG4GYOVZ7G3U7DkiTbM2nSKyKKLAGRLJUsrtzLzTe53KkG/R7dTA28TMW7i70p9Hxe2xurXoQ2RtwCWPtnW4tpvzyZ1UCj0Dlsd3v+D5oqrRKvBDi06XdV+4OYWFnHhVjZtQjwtnr9evD4c7OmkF18jG90c7SBbL8bGI+Ozifp0lT5VGBkLBNZCiLFAUFV2/QN2/xOAAcAAw3f/Eehclg5sg3rAow5AnP71qQOQBXwPnSm+NgPTddqY4nro630Ihq23ZFISyKKoDFHs1siXGf2asDhG75xVUKTD161k5OjmaPpVYMl5ycFOSYC7o7yGqyn++rCnyKLDWUWY+9NpfjiawD9GtuLx9iFm588n6eNiN/Z3k53gEoq3Hnk5O0BmyTT1mRsZbDpyg5W79A5rNS1ntEBQHkKMBYKqklWccMCrPmdy3MnM0wuSp4s9d3IsR+RpX9+LO3kaLt3KxtXRDh8XB66l5uLr6kBjfzcy8zWcSTDfsxjk6cjNO/k4OShpE+LFiRt3yC3QUi/Al403epXbTRcHFR5O9kx9qDFf7btKSnYhEUEe+BptTzKEwbwb9bydjcRY/2vAHi3Hr9+R6xjr+OXb2ey7nMpTHeuZOVOduZnBD0cTAPjn1vMWxdiQpKJhHVeuFcfYNuwD9nS2lx24pOI0S69+d0K+tns1OZEJBA8CIcYCQVWR9FOkUvsJPBXTlEyNXoxDlE5c11hO9HBh7EAy0nJ4avEu0MCT4SFsSLrOmPBQFgyLIDk5S3+uFP3r+LP19i3aBHjy07iuvLtiL4evpTO2bj0uXzdPrDKlTyM+2abf4lTXy1ke6X76dDv+dzKR1/o35ecTCXL90iPjsjBehy0yGhkbozJS4/FrDhGflsvcn06z6LGWjOpQTz731k+n5fdlBde4eSe/2AYnOa62YfTv5exg4sBVmq6NhBgLbAerJooQCGyaYjH+z56rZBptRbqephfiNweFE+JdMlUa6qMP+NHIz426Xvpyw4jSs3jNtiynoyvF+Y8NomnYn/zlPssZzp7rWrJ33sulZNTbqYEP7z4agYezPT4uJffycKrYyNhYtAulMsTYaARs2BMM8MamUyaObUfj78jvXcsYmRscuII8nXBVq0zOebk4yCNjb1fTKel/jWp9V1sEgpqEEGOBoKoUe+UnZZpnQgLwdHLAQVXyX+x/U7rJ74M99eJxLknvbOQhe1NbXmy+lKyfrjVsi2phIfuQgQ71vWSv7PKo71sSU93PvWKex892DpXfFxVPU9spdCgoEVnDwNh4D7UBg6cz6LcqGUjPMU/RqNVJJBU7awV7OuFcavTcPNAddPr7vvWIPq58mxBPDs/ty/C25UfUEwhqGmKaWiCoKpJhW43lwBLuTvZ8NLI1L60/yuxB4bgZjf6Mw0mCPpuTgW6NfNlzKQWA4W2D+fFYyXSyT/HIuXR6v0k9wvhsV5y+josahULBGw+HszjmPFMfamyxf+EBJaEvw3xdy7e1mIhgD76Z2JmnvthP0yAvKM6sOEh5UBZntKCN1ZCWmssA5TmT6zWns8Fb/yMgMvckjZR6wXbMUcFZ/Q8ORZGWwDtHyDpeQF9iUaoU1EnQEn4nhQHKkpmATgVa0OrFvXmQFyfnt8ZNbSciZwlsEiHGAkFVkUr2uFqijpuayFAv9r/5kNm50iPXIM+SadZ3hrXg463nmdAtjNjELBMxNtQrPZ3dyK9ETJ0d9KI4qWcDJvVsUKY4qZQK/prVh7xCrdmPg/Lo0tCH7a/1wl2lgaX6sk8d/m1a6VsIAz4v3axRApyPwNRjfKP+HzvQRxWLM7r+W+gF9DKu/62xMQ4VdkITCGoiQowFgqpiNDLuGObNosda0fufO+TT9bzLTq1Zejo62EiMG9ZxZfkzkQAk3DHdNzy0OJNT6T20/m5q7JQKinQSTQL0WYoqMkI0vm9lCPMtnmLu9SaFF/4gr3jb0YVbWeVe18DXFR8XByTg8LU0k3NtQzyxUyrRSRLp6Wng4MqV1Bzc1HaEB7hTUKTlVEImEhKR9bxKYn8HtQEPMS0tsG2EGAsEVURTpMUe/baaz56NxNvFAX93Nbcy7x6O0dPIYUqhAH93y4lzjR2m2tbzxM9NX8/Y+Qr0I+11Ezrx+5kknjLyWL7v9HoDh15vyAPcx2f9Wm71+ZHNGdc1jMxcDY8v0GerMsSc3jWiN/V8nNFqNOyJjuaGWzP+sfUijzYPYsmTbVEDqvh0vJwdUPq6lHsfgcDWEGIsEFSRK7czaQp4u6rlNV+NUQq+8kamxtmEfF3VONhZnup2M3JaMl7jLT2t7OlsT8sQN7o0rFm5td3Udswd0ow3Np0CSjIqZRXo14oNgUTi03K5mZGHk4OKT7ddICdJgatCX9f4h0rbeuZhQQWC2oDwphYIKolWJzF61QGuFm836ts8UBbeUR30gSuGtQkqtw0PozXjgDJGxYCJ05efUcSs0gE0Kpsq8EHxXLcwRnWoJzuRpeXqBdYQscvd0Y4m/vr17pW7rtDh/T9Yuy+e7+JURnGpRYxpQe1HiLFAUEmu3M5m98UUlOhHwc0CS7YZTe/bhI8ea8VbQ5qX24axeBqLbGlcjaapy9t+pC5jZG1tDH02bMn6sTjiVlbxvmxXtR2N/PRr3NvOJZtcuzVWf1ynnM9HIKgt1Mz/wQJBDcYQCcqwt9berkQwHeyUPNEh5K6juUCPktFweXWN14w9nUxHv3/M6AFAQ7eak4Vs1sBwk2PDGnfj4tFvkU4it7CIzOI9yG6O9iae4JYQYiz4OyDEWCCoJIbpU8PImCrsaw0wEmOJssXU1aFEjI2jeQE08nNj+4zuvNCs/DzFD5IXejSgT7iffGwY9Xdp4IOfm5qCIh0nb2TIP2jquKkJ8y3b69xQRyCo7dyzA9eNGzdQKBQEBwdXR38EghrP+9FnAWMxrvxvWnujyFzlRdNSKhWsm9CRS8nZtAw2r1fXy4mTKgsXWgmFQkGoj3lkL4VCQX1fF5KzCkjJLpA9zv3c1AQYZVdS2ykJ9XbmQnHEMYA6Ys1Y8DegSiNjnU7HggUL8PDwIDQ0lHr16uHp6cm7776LTld9icUFgpqGRqvjTq5+irWRX/H2miqIMejDYz7fLYzHIsvfI9u9cR3Gdw2zychSxlPwhq1eqdmFJGfp90/7uakJdHfErtgh7euJnQkv3idtoKJxswUCW6ZKI+M5c+awatUqPvzwQ7p27YokSfz111/Mnz+f/Px83n///erup0BQI7h5pyQbU7CHGlKpshhHBHsQYWG0a+tkGyXNMJ4BMOyNTs0uINkwTe3uiFKp4NIHg0quUUj8clKfnjKqoQ9Kpe39CBEIKkuVxPjLL7/kP//5D4888ohc1rp1a4KDg5k8ebIQY0Gt5WyiPsJUmK8LCskwCyTEwpiHmvnx3ZEbZlu2vIo9qlNzCmUxtuRJ3izQjX90LKJHn754uVYtQphAYGtUSYzT0tIIDw83Kw8PDyctLc3CFQKB7bH9fDLbzyUzZ3Az1Hb6hdmfiuNEezjZy+Ewq+LAVZsZ0CKAteM7mK2FG6abM/I0JBdnYyor8piDSh/YxL6GbtkSCKqbKv2lt27dmmXLlpmVL1u2jNatRR5RQe1g/JpDfLXvGl/uvSqXGWIwt6rrIadQrOo0dW1FoVDQq6mfmRe0sRjfLmdkLBD8HanSyPijjz5i8ODB/PHHH3Tp0gWFQsHevXu5fv060dHR1d1HgcCqnE8q8ew15OPt3dQP9gkxrgwGMb6WmkuRTv/ZiehaAoGeKn2L9OzZkwsXLjB8+HDu3LlDWloaI0aM4Pz583Tv3r26+ygQPHAkqWTvb76mZB9varY+nKOPq4PRNLUQ44rgXhzAJD4tF9BPQ5cVk1sg+LtR5X3GQUFBwlFLYDOk5RSy6ISKK06Xmd7f3N+hNHlGApxVHEdZkiQjMVaLNeNK4lEqh7OYohYISqiwGJ88eZKIiAiUSiUnT54st26rVq3uuWMCQXWh1Un0WbybnEIFS7dd5qU+Te46IjNkFwJkZ6PM/CIKtXoB9nERI+PK4u5YSozLSZAhEPzdqLAYt2nThqSkJPz8/GjTpg0KhcJkKs+AQqFAq6054fkEgv+dvElOYcnf5Ff7rvJ89wblXpOeo5HfX0nJobBIR2q2fr3YVW2Ho71KiHElKR28Q4yMBYISKizGcXFx1KlTR34vENgC11JzeGXDcZOyNX/dXYwNqf4ACot0XEvN4U5xcgOf4khSQowrh7ODadzO0iNlgeDvTIW/RUJDQ+VwfNeuXSM4OJjQ0FCTV3BwMNeuXatUB5YvX05YWBiOjo5ERkaye/fucuuvX7+e1q1b4+zsTGBgIOPHjyc1NdWkzqZNm2jevDlqtZrmzZvz448/3vN9BbaHJEn0/McOs/KEO3kkZ+bT/aNtfFAcZ7o0hlGwgUvJ2SQXx1M2pAOUtzaJoB8VonQ4T1d1DQqqLRBYmSr9pO/du7fF4B4ZGRn07t27wu1s3LiRadOmMWfOHI4dO0b37t0ZOHAg8fHxFuvv2bOHMWPGMGHCBM6cOcN3333HoUOHeP755+U6+/btY9SoUYwePZoTJ04wevRonnjiCQ4cOFDl+wpsE+N1X4DBISVT1b+dTuJ6Wh4rd10ht7Co9KV8d/iGyfHey6nsvKDPr1vPuzgRghgZV5oeTfSza3Xc1IyJqm/dzggENYgqeVNLkmQxaH1qaiouLi4Vbmfx4sVMmDBBFtMlS5bw+++/s2LFChYuXGhWf//+/dSvX5+pU6cCEBYWxgsvvMBHH30k11myZAn9+vVj9uzZAMyePZudO3eyZMkSvvnmmyrdF6CgoICCgpLRUmZmJgAajQaNRmPxGlvEYEttsOnq7Sz5/Yg2gXRxuM7OZBXZBVquppTsHd57MZmexSIB+q1M+67oZ1taBbtzMiGTvZdT5DXPrg290Wg02Ol0KIAinQ7JSp+XrT2vFU+1JrugCO/i2QVL/bY1myqKsMu2qIxd1WF7pcR4xIgRgH66ady4cajVJQ4YWq2WkydPEhUVVaG2CgsLOXLkCLNmzTIp79+/P3v37rV4TVRUFHPmzCE6OpqBAweSnJzM999/z+DBg+U6+/btY/r06SbXDRgwgCVLllT5vgALFy7knXfeMSvfvn07zs7l52O1RWJiYqzdhSqRXgBLT6to5yvh6ygBKsLcJHo6XQfAUVFENgoOxMZhmBha/fsRci6VZBu7kQOG/xqDfNM4mWDHjbRssuwBFMSfO070zeP0yszAAzh48BC3z+VhTWz1eZVHbbQJhF22RkXsys3Nvef7VEqMPTz0sWYlScLNzQ0np5Ig7g4ODnTu3JmJEydWqK2UlBS0Wi3+/v4m5f7+/iQlJVm8JioqivXr1zNq1Cjy8/MpKirikUce4ZNPPpHrJCUlldtmVe4L+hH2jBkz5OPMzExCQkLo3bs3Pj4+FbLZFtBoNMTExNCvXz/s7Wu4g03iCZSXtpoU7budxmhtOtzSH09VQVN3V/o51+Hy5cu86uxEoqYAD60dfVX66Wn3XDsGu4aiUEC+RsefV5OZqsoh0EPNcN9gclVX9I1pABU86xmCj4sDSqVegDt27oxUv8eDstoEm3peFaQ22gTCLlujMnYZZkrvhUqJ8Zo1awCoX78+r732WqWmpMui9HR3WVPgALGxsUydOpV58+YxYMAAEhMTmTlzJpMmTWLVqlWVarMy9wVQq9UmMwEG7O3ta9UfoAGbsOvnFyD1kklRN6Bb6W6nAn9BM/Qv7NELq6FeEVDsv+cCPGKok6u/bkbp9o6YHto5eYCVPyubeF6VpDbaBMIuW6MidlWH3VVaM3777bfv+ca+vr6oVCqz0WhycrLZqNXAwoUL6dq1KzNnzgT0wUVcXFzo3r077733HoGBgQQEBJTbZlXuK6ih5N3R/9v8UXDyAuBMYibH4++YVOsY5k0DX2fi4+O5pXPj8u0cs6Y6N/CmYR1Xvj9yg4Ii/ZR16xAPIoI8iD6dKO87VijgyY71SjwfvUIhqF312yYQCP5WVDkc5vfff8+3335LfHw8hYWmXqtHjx696/UODg5ERkYSExPD8OHD5fKYmBiGDRtm8Zrc3Fzs7Ey7rFLpt0cYApB06dKFmJgYk3XjrVu3ymvZVbmvoKZSvLWo1yzwawZA9O/n+PTKZZNa3/bpgq6uGyejo7nqHM6//iwZTTvZq/ShLy/AWJ9QtjgkcStf76i3tFMbItoEs6foFF8f0Hva+7mpeXpo3wdgm0Ag+DtRpT0Z//73vxk/fjx+fn4cO3aMjh074uPjw5UrVxg4cGCF25kxYwb/+c9/WL16NWfPnmX69OnEx8czadIkQL9OO2bMGLn+0KFD+eGHH1ixYgVXrlzhr7/+YurUqXTs2JGgoCAAXnnlFbZu3cqiRYs4d+4cixYt4o8//mDatGkVvq/ARrCwzzcr33ybUkSwu/w+zNfU2a5BnZKlli/3XeNWZonHfIsg/XUPtwiQy/zcRdQogUBQ/VRpZLx8+XJWrlzJU089xZdffsnrr79OgwYNmDdvnsX9x2UxatQoUlNTWbBgAYmJiURERBAdHU1oaCgAiYmJJnt/x40bR1ZWFsuWLePVV1/F09OTPn36sGjRIrlOVFQUGzZsYO7cubz11ls0bNiQjRs30qlTpwrfV2ArGFIY6sX40NU0vtqnDzrTxN+VC7f025ecHezkrQcN65j6OTSo48qZm+bOF1P6NKKRnxsA9X1KrnFT1741MYFAYH2qJMbx8fHytK+TkxNZWfr9nKNHj6Zz584sW7aswm1NnjyZyZMnWzy3du1as7IpU6YwZcqUctscOXIkI0eOrPJ9BTZCqZHx45/tk0+N7lKf+NQcOjcw9XRvVMeV7o192X0xRT62xJgu9eX3QZ4lCQ0GtQywUFsgEAjujSqJcUBAAKmpqXIYzP3799O6dWvi4uIsJo8QCO4PpiNjY7ydHRjd2XymQ6lU8OX4jrz8zVEUKGgd4mFWx89NTR2jJAZ2KiVvD23O6YRMRnWoV33dFwgEgmKqJMZ9+vRh8+bNtGvXjgkTJjB9+nS+//57Dh8+LAcGEQjuO/LvPgVHrpkuj7g5lv2nrVQqWP5MJAAXbmWZnf/l5W5mZeO7hlW5mwKBQHA3qiTGK1euRKfTb/+YNGkS3t7e7Nmzh6FDh5p4KAsE9xe9GhfqJB5bsc/kTHlibExdLycUCqMZbyDAQ+TZFQgED5YqeVMrlUqTLUZPPPEEb775JhcvXqRJkybV1jmBoFyKFfR6unkoOrcKpudzdrBjzbgO8rS0cYxqgUAgeFBUSozv3LnDM888Q506dQgKCuLf//43Op2OefPm0bBhQ/bv38/q1avvV18FglLoxfhOnvl2Jv9KbEHq1dSP7a/14sMRLVn+jAjgIRAIHjyVmqZ+88032bVrF2PHjmXLli1Mnz6dLVu2kJ+fT3R0ND179rxf/RQIzCkeGedrSpI8PB5Zl45h3hUeGRtwVdvxZEfhnCUQCKxDpcT4119/Zc2aNfTt25fJkyfTqFEjmjRpImdEEggeLHoxztPo/+3cwJt/PN7amh0SCASCKlGpaeqbN2/SvHlzABo0aICjo6OcE1ggeOCUGhk7O1Q5uqtAIBBYlUqJsU6nM8lOoVKpqiVzk0BQFaTikXGuRguAk4PKmt0RCASCKlOpoYQkSYwbN05OJZifn8+kSZPMBPmHH36ovh4KBBaQJAlNkRYHIC5V703tIsRYIBDYKJUS47Fjx5ocP/vss9XaGYGgopy/lUWYJIECDlxJB1zENLVAILBZKvXttWbNmvvVD4GgUpxPyqJh8TT1zYx89GIsRsYCgcA2qVLQD4HA2ly5nYOiWIyl4kQR7k4io5JAILBNhBgLbJLkrHxZjHXFYlzREJgCgUBQ0xBiLLBJ0nIKKcnVpH+ntJC9SSAQCGwBIcYCmyQ9R4NSUTJN7eygolsjXyv3SiAQCKqGmNcT2CRpuYXy+z2z+lDg4IOHs1gzFggEtokQY4FNkpZdIL93tLfDUQixQCCwYcQ0tcDmKNLqSM8tMCoRa8UCgcC2EWIssDm2nEkylV/huCUQCGwcIcYCm+NgXJq8rUkgEAhqA0KMBTaHfluTkRiLkbFAILBxhBgLbI6s/KJSq8RCjAUCgW0jxFhQ4zl1I4PTCRnycVa+RoyMBQJBrUJsbRLUaPI1WoYu2wPA6XcG4Kq2Kx4ZG68ZCzEWCAS2jRgZC2o0N+/kye/PJWYC+mlqE8TIWCAQ2DhWF+Ply5cTFhaGo6MjkZGR7N69u8y648aNQ6FQmL1atGgh19FoNCxYsICGDRvi6OhI69at2bJli0k7RUVFzJ07l7CwMJycnGjQoAELFixAp9PdNzsFVSMxI19+H5+WC1iYphYjY4FAYONYVYw3btzItGnTmDNnDseOHaN79+4MHDiQ+Ph4i/WXLl1KYmKi/Lp+/Tre3t48/vjjcp25c+fy+eef88knnxAbG8ukSZMYPnw4x44dk+ssWrSIzz77jGXLlnH27Fk++ugj/vGPf/DJJ5/cd5sFlcN4ZJyQnodGqyOnUCvWjAUCQa3CqmK8ePFiJkyYwPPPP0+zZs1YsmQJISEhrFixwmJ9Dw8PAgIC5Nfhw4dJT09n/Pjxcp1169bx5ptvMmjQIBo0aMCLL77IgAED+Pjjj+U6+/btY9iwYQwePJj69eszcuRI+vfvz+HDh++7zYLKkWQ0Mr6RnidPUQtvaoFAUJuwmgNXYWEhR44cYdasWSbl/fv3Z+/evRVqY9WqVfTt25fQ0FC5rKCgAEdHR5N6Tk5O7NmzRz7u1q0bn332GRcuXKBJkyacOHGCPXv2sGTJkjLvVVBQQEFBSQjGzEz9+qVGo0Gj0VSov7aAwZaaYtON9Fz5/fX0HFKz9Mcu6pLfkZqiIlCU39+aZld1URvtqo02gbDL1qiMXdVhu9XEOCUlBa1Wi7+/v0m5v78/SUlJd70+MTGR3377ja+//tqkfMCAASxevJgePXrQsGFD/vzzT37++We0Wq1c54033iAjI4Pw8HBUKhVarZb333+fp556qsz7LVy4kHfeecesfPv27Tg7O9+1v7ZGTEyMtbsAwImLSgwTOBcSUtkcsxOww4mSP/4tv/+OTulQofZqil3VTW20qzbaBMIuW6MiduXm5t61zt2w+tYmRan1PkmSzMossXbtWjw9PXn00UdNypcuXcrEiRMJDw9HoVDQsGFDxo8fz5o1a+Q6Gzdu5L///S9ff/01LVq04Pjx40ybNo2goCDGjh1r8X6zZ89mxowZ8nFmZiYhISH07t0bHx+fSlhcs9FoNMTExNCvXz/s7a2fCWlR7C5AP1Wdkq8g3a0BEE+Yvxck6+s8/PBAsFOX205Ns6u6qI121UabQNhla1TGLsNM6b1gNTH29fVFpVKZjYKTk5PNRsulkSSJ1atXM3r0aBwcTEdEderU4aeffiI/P5/U1FSCgoKYNWsWYWFhcp2ZM2cya9YsnnzySQBatmzJtWvXWLhwYZlirFarUavNv/Dt7e1r1R+ggZpgV05BETeN1owB1u3XO/cFeahlMba3dwC7ivW1Jth1P6iNdtVGm0DYZWtUxK7qsNtqDlwODg5ERkaaTQHExMQQFRVV7rU7d+7k0qVLTJgwocw6jo6OBAcHU1RUxKZNmxg2bJh8Ljc3F6XS1HSVSiW2NtUwLiVnA+Dt4sDozqEm59rU8yo5EN7UAoHAxrHqNPWMGTMYPXo07du3p0uXLqxcuZL4+HgmTZoE6KeGExIS+Oqrr0yuW7VqFZ06dSIiIsKszQMHDpCQkECbNm1ISEhg/vz56HQ6Xn/9dbnO0KFDef/996lXrx4tWrTg2LFjLF68mOeee+7+GiyoFIeupgHQqq4HozqEsG7/NQDUdkoGtwyAPw01hRgLBALbxqpiPGrUKFJTU1mwYAGJiYlEREQQHR0te0cnJiaa7TnOyMhg06ZNLF261GKb+fn5zJ07lytXruDq6sqgQYNYt24dnp6ecp1PPvmEt956i8mTJ5OcnExQUBAvvPAC8+bNu2+2CirPtVS9U0REkAc+riXLEWG+Lrg6qEoqipGxQCCwcazuwDV58mQmT55s8dzatWvNyjw8PMr1XOvZsyexsbHl3tPNzY0lS5aUu5VJYH2y8vUe0+5Odng5l4ixu5M9SCICl0AgqD1YPRymQFAWhgAfbo72ONqXjIRdHFQgInAJBIJahBBjQY2lRIz1Ezg+LvrRcRN/N9ORsRBjgUBg4wgxFliNA1dSGbP6IOeTsiyezyooGRkDzH+kBQNa+DO5VyNMRsYCgUBg41h9zVjw9+XDLec4Fn+H+NQcdszsbXbesGZsGBkPbR3E0NZBxScNYixGxQKBwPYRI2OB1TgWfweAq6mWHfIM09TujhZ+M0rFe8LFFLVAIKgFCDEWlItGq2PmdydY8seFB3pfSZLILjVNXapG8b9CjAUCge0jxFhQLofi0vjuyA2W/HGRjLy7ZyaRpKqt5RqmpA3kFmrR6vRtuVkcGRffRyH+hAUCge0jvskE5WIcG/rE9Tvl1l29J442C2I4nZBx13ZLi/aBK2nEpeSw8VA8Wp0kT1GrlAqcjLY1GbWg/0dMUwsEglqAEGNBuSSk58nv/zx7q8x6yZn5LPhfLBl5GhZtOXfXdv84m2xynJpTwPSNx3lj0ymW/nnRxHnLYhYvSUxTCwSC2oPwphaUS2pOgfz+y33XmP9IixJxzL4NGfpwpbuOJNBKcRWApto0SCj/T+vgnrO0UqTJx6pELbobV2mlgBunb1HgUZ9WissEOjhCwhHzBrKLxVyMjAUCQS1AiLGgXDJLrROnZBdSx02tF+J/tQCtXqxHAiMNGSZvAl+U3+4cAOOMlEeNrs8AouEXNfpUxuW1JdaMBQJBLUCIsaBcMovXbg1cTM7Si/Gda3ohVqjAPZgbd0q2JznZq/BxMc/9bExydj6FRTrslEqKdDpcHOzIKSwyq3fXtiKGV84ggUAgqIEIMRaUS+mRcXxqLh3r69h+OoF+AF6hJI3dR7eFcj5Detevw5rxHcttd8ySXZxLyqJ7Y192X0zh0WZB/HT8plm9joHefDupS3WYIhAIBDUWMccnMOF2VgGn0xSyt3NmsSNVoIcjAGm5hfxwNIH/7LwIgEZSsvdyikkbOQXau97H4C1d18sZ0E9/W2L2oPAqWCEQCAS2hRgZ/424nVXAz8cTOBqfTpsQT/6vR0OzOo8s30dKtorIc7d5uFUwmXl60Qz1cSYxI5+07EL+PJuMo0JfnlukZMa3J0zayCksIjkrn/QcDU0D3Cz2xSDydb2cALh5J8+szuCWgbSt51V1gwUCgcBGECPjvxHzN5/hvV/PEn0qiQ+iz3ErM9/k/OXb2fIIde8VvaezQTTDfF0B/cg4zNcFO/ThKJNzStZ5DVmV4lNz6fHRdh5euovraSVryRdvZfHWT6e5lZlPTnF0LX93/Yg7qVRfABr5ud670QKBQGADCDH+m3Ant5BfTyaalMWnmcaE/t+JkvM5hUXkFWrJLdRPOYf56qeT03IKycjToEJfbqTFTOvXBNBnW8rX6JAk073J49YcYt3+a7z89VGKg2vh7653zjLcp45bibOW2l78eQoEgr8H4tuulhKfmktusXdySnYBXRZuM6uTmGE6Gk3KLJkq3nT0Jh9En5WP63m7AJCeU0hGrgb7YjEuKl7pqOOmpkdjX7N7zN8cC4BWJ5FQPBV96Go6oN8ibCy+oB9dd6zvjVIBfcL9KmGxQCAQ2C5izbgWcj4piwFLdgHwx4wenE7IJE9j7lSVWGqd9nqa6fG6/dfk9wbRTM0pxNlBhW+xGGuLf8/lFhTh7GD5z0mSJL45GG9W7upgh6va9Bq1vYq1z3XgVmYBYb4u5dopEAgEtQUxMq6FRJ8qmW7uu3hXmUGqjEfGl5Kz2XPJ1Cvay1mfLWl422B5PTi9eJrarliMNZI+brS3q4OZsBrIyNPw+a7LZuUuanMxliQJZwc7IcQCgeBvhRDjWkjpLEdZpQJ3jO0SCugdtgystCCW6bl6562RkXXxctaLcU6hlttZBbIYa9GL8dIn2+LkYCmhA9y8k0+rup5m5Rl5GlxKifHbQ5uXaZdAIBDUVoQY/w0oLcYdw3yAku1EhUU6vj18Qz4f4GSaUcnT2R4XdYnQ6iRQKfTe1PX93Dk+rx/tircg+bqaR8s6Gp9Odr55dK08jRZ7VcmfoEIBkaHelbJNIBAIagNizdhWuRMPMfMgP9PsVN/UHBrbl3hK1z3qRHP7kvXg9oe8+NI+HbssBazzJSk9ly/tcwBoUMeFpPRscu1L5rYb/u6DnZ2SL+1vy2WBilQAQut4QvGoGWB6v8bM+fG0SX/m/mR6XBbOFlMlCgQCQe1HiLGtcuo7OPOjxVP1gfrGupYJDY2Pr0NPw/FlqAfUMxynQQiAcf1iP66elrTSLcD03j4la731vJ3Ntk8NbhnI1tgkVEoFC0e0NDnnXMaas0AgENR2xLefrVJUHD4yrAe0fhqAY9fTWbfvWpmXDG0dRO+mfkhIvFocNatfc39iYvV7gbs3rsPQVgF8HnOSy5n6kbGTg4r3H9WL5oxvj8tt/fPx1ijt1dC4v8k96hs5Xn0+OpKBS3ebnJ8zuBmfPtPOYv8cxb5igUDwN0WIsa0i6ddsqRMObZ4CYPiGX4HQMi/pENYS2tRDAfywwQOAH04DNAVg8fjBaDQacs6488Md/TC4rpMTtOmjr7vBHQAHlZLFbQdavEeQhyNPdawHSIQHuFHfx5mrqSWj44DiiFvGNPF35cKtbPo286+g8QKBQFC7sPpQZPny5YSFheHo6EhkZCS7d+8us+64ceNQKBRmrxYtWsh1NBoNCxYsoGHDhjg6OtK6dWu2bNli1lZCQgLPPvssPj4+ODs706ZNG44csZDEvqYiFe8bLs7nq9NJ5VTW4+FkL78f06Vs0W7sXtKW0sK+qNLe2sYoFPrp54UjWqFQKEwEdvfrvVEqzdv7z5gOzBvSnDcHNburDQKBQFAbsaoYb9y4kWnTpjFnzhyOHTtG9+7dGThwIPHx5gEiAJYuXUpiYqL8un79Ot7e3jz++ONynblz5/L555/zySefEBsby6RJkxg+fDjHjh2T66Snp9O1a1fs7e357bffiI2N5eOPP8bT0/N+m1x9GEbGxWKcmmOe9ahvM9MIVsaezr2a1jE599HIVvJ7Y7001uIpfRoBmK31lse0fk0I83WhfaiXnBSiNPV8nHmuW5iJZ7VAIBD8nbDqNPXixYuZMGECzz//PABLlizh999/Z8WKFSxcuNCsvoeHBx4eHvLxTz/9RHp6OuPHj5fL1q1bx5w5cxg0aBAAL774Ir///jsff/wx//3vfwFYtGgRISEhrFmzRr6ufv3698PE+0cpMb6ammNWJSLYgz/OJsvHPq4lXs/+RtPFLYLceaJ9iMXbGI+Mp/dtwtOd6hHoYVlULeGqtuPPGT1RKPSjZoFAIBCYYzUxLiws5MiRI8yaNcukvH///uzdu7dCbaxatYq+ffsSGloy5VpQUICjo+m6pJOTE3v27JGPf/nlFwYMGMDjjz/Ozp07CQ4OZvLkyUycOLHMexUUFFBQUCAfZ2bqtxRpNBo0Gk2F+ludKLVFqACtBDqNhu8Pm88mhHqVfA7ODiqC3Ozlvvo4lzz6paNayeWlbWnq72pS5utsZxV775Wy7LN1aqNdtdEmEHbZGpWxqzpst5oYp6SkoNVq8fc3ddrx9/cnKSnprtcnJiby22+/8fXXX5uUDxgwgMWLF9OjRw8aNmzIn3/+yc8//4xWWxKb+cqVK6xYsYIZM2bw5ptvcvDgQaZOnYparWbMmDEW77dw4ULeeecds/Lt27fj7OxcEZOrlRY3LtEIuHIljtiCaLafVgElI88BdXXExR7D8Ijntylg6+8la+eSBE08lGh0Ck7t28GZUoPWieFa9iQpiHJMIDo64f4b9ICIiYmxdhfuC7XRrtpoEwi7bI2K2JWbm3vXOnfD6t7UpacuJUmq0HTm2rVr8fT05NFHHzUpX7p0KRMnTiQ8PByFQkHDhg0ZP368yZS0Tqejffv2fPDBBwC0bduWM2fOsGLFijLFePbs2cyYMUM+zszMJCQkhN69e+Pj41NRc6sN5da/4DY0aNSYej0Hsvj8X5Cfy7rx7fFxcaCRnwtancTpohOEeDsxfFC4WRuDBukdtYw/b41GQ0xMDNOf6Mvr9vZm19gqBrv69euHvbCrRlMbbQJhl61RGbsMM6X3gtXE2NfXF5VKZTYKTk5ONhstl0aSJFavXs3o0aNxcHAwOVenTh1++ukn8vPzSU1NJSgoiFmzZhEWFibXCQwMpHlz0xjIzZo1Y9OmTWXeU61Wo1abh3q0t7e3zh9gsX5eTs1jwPwYpGIH6Lo+riZJFlaP71il5q1m131G2GU71EabQNhla1TEruqw22ruqw4ODkRGRppNAcTExBAVFVXutTt37uTSpUtMmDChzDqOjo4EBwdTVFTEpk2bGDZsmHyua9eunD9/3qT+hQsXTNaeazzFDly/nbktCzGAr6tDGRcIBAKBoKZi1WnqGTNmMHr0aNq3b0+XLl1YuXIl8fHxTJo0CdBPDSckJPDVV1+ZXLdq1So6depERESEWZsHDhwgISGBNm3akJCQwPz589HpdLz++utynenTpxMVFcUHH3zAE088wcGDB1m5ciUrV66stA0V2d9riW3nbuHv7kiLII+7V7ZEsRjrpJIpZkd7ZZlpDAUCgUBQc7HqN/eoUaNITU1lwYIFJCYmEhERQXR0tDxCTUxMNNtznJGRwaZNm1i6dKnFNvPz85k7dy5XrlzB1dWVQYMGsW7dOpM9xB06dODHH39k9uzZLFiwgLCwMJYsWcIzzzxTaRu+O3qDyQN8K3XNwbg0nlt7GICrHw6u9D0BOeiHzshpy9dVLbYPCQQCgQ1i9WHU5MmTmTx5ssVza9euNSvz8PAo13OtZ8+exMbG3vW+Q4YMYciQIRXuZ1l8tjOOyQPaVOqai8lZ8vvCIh0OdlVYLTCMjI1WGhr5uVa+HYFAIBBYHRHy6B65k2eep/du2BmFuErOyq/ajS2I8agyAncIBAKBoGZj9ZHx35Gs/BIBv5VZQF2vKuxTLvba0qHgyQ4hdGnow8CWgdXVRYFAIBA8QIQYW4HMvJJoLRl55jGlK4SuZM346U71aFXXsxp6JhAIBAJrIKapq4GcgspNVWcajYwzjaa5s/I1ZOSZhlW7mpLDx1vPk55TyJbTiWw5XbwvW56mVuDlLLYzCQQCgS0jRsbVQFJmPg3rVNx5ynhknJmvf6/TSQz6925Ssgo58lZfnB30j+a5tYe4kpLDJ9suydfseaM3gTotKkBCiYdz7dtoLxAIBH8nxMi4GkjKqJwTlvHIOCNXL8YZeRqup+WRp9Fy8kaGfP5Kink2priUHAo1+jYkhRI3sbdYIBAIbBohxtVAYrEYp2QXcDoh4y61S0bDxu9TsksyQl28lWV2jTFL/7hIYZFejB0d7MTeYoFAILBxxJCqGkjKyEOj1fHwkl2kZBeybkJHujeuww9Hb2CnUvJI6yCT+sbT1F/sjmP1X1fRGkXyOnOzJOi4vUqBRmsa5evwtXSu+2fjATg6iClqgUAgsHXEyLgaSMzI53ZWASnZes/oPRdTSM8pZMa3J5j6zTGup5kGKTHe2gSYCDHApeRs+b3BOeuxdnX5+PHWcvmdbP1o3LEWBmYXCASCvxtCjKuB9Qfi2Xnhtnx8KiGDc0klU83GI12tTiLhTl657SUarUEbvKun9W3MY5F15YxMecVrxo5qIcYCgUBg64hp6nvkB4d5uDqo4H+wxbDD6Dp4f+/AFgf9SNl/ixp2OaCTJPIKtWxx0ItxkKcjN++YO38p8kBa7oYkSfyszAYHCPraFZQKfqSQJIcC6ir04i+mqQUCgcD2EWJ8jzRRJuCutOBAlQd+hnmHbP1LCbgC4YbyTHAva24iWZ+yWK6bov/HE/A0ukbrXu9eui8QCASCGoAQ43vkPyEfcOhG2YkrALo19GFYm2Bmbjopl41oG8Rj7ery7v/OopV0vD2kBSqlgrFrDlKolVg6qg2Hrqbx3wPxtAp2Z/bAZgBcSM7m7V/OAJAiedDHI/L+GScQCASCB4IQ43tEE9SFffFJ8vHsgeEs/O2cSZ19FyE8qi37ikNYAjzZuA3KhsG8/Uovk7oXnYu4mZFPnFske3U32adzo33jRtCgKQBOnrns05XUX9a2bvUbJRAIBIIHinDgukeCvRzl9x891oqJ3RvgaG/+sf7rjwsmx33C/Sy2d7PYeWvUyv1sO5cMQJCnk3ze11Utv28R5E7TALeqd14gEAgENQIhxvdIwzou8vsuDX1QKhX4uZUIdESwOwCnE0o8qn1cHHBztOx4pTbKbWzwqjYWYycHlfxexPoQCASC2oEQ43ukib8bHz/emhXPtCPEW58KsWWwh3w+IsjD7JrPRpe9zrtuQiezMmPBFwgEAkHtQ6wZVwOPRZqu277cpxHX0nJ4uXcjzieVBPBwsFNy/t2Hyw1f2aG+l8lxsKeTWb5jJ3sVeRotD4X7V0PvBQKBQGBthBjfB5oFuvO/Kd0ByMy/LpfXcVXfNY506fNjuoSa1fnf1G78dCyBST0bVkNvBQKBQGBtxDT1fSbY2PnKTV1OzRKiGvrI7/3cza9pWMeVV/s3NVk/FggEAoHtIsT4PtPEv8Tb2aWC4rl2fEf5vUopHpFAIBDUdsQ3/X2mjtFoOE+jLadmCQ52Soa1CSLA3ZGeTercr64JBAKBoIYg1owfAE91rMc3B+N5rX/TCl+z9Mm2aHUSKkuhNgUCgUBQqxBi/ACY/0hzJvVsQKhP5bYoCSEWCASCvwdimvoBoLZTVVqIBQKBQPD3QYixQCAQCARWRoixQCAQCARWxupivHz5csLCwnB0dCQyMpLdu3eXWXfcuHEoFAqzV4sWLeQ6Go2GBQsW0LBhQxwdHWndujVbtmwps82FCxeiUCiYNm1adZolEAgEAkGFsaoYb9y4kWnTpjFnzhyOHTtG9+7dGThwIPHx8RbrL126lMTERPl1/fp1vL29efzxx+U6c+fO5fPPP+eTTz4hNjaWSZMmMXz4cI4dO2bW3qFDh1i5ciWtWrW6bzYKBAKBQHA3rCrGixcvZsKECTz//PM0a9aMJUuWEBISwooVKyzW9/DwICAgQH4dPnyY9PR0xo8fL9dZt24db775JoMGDaJBgwa8+OKLDBgwgI8//tikrezsbJ555hm++OILvLy8St9KIBAIBIIHhtW2NhUWFnLkyBFmzZplUt6/f3/27t1boTZWrVpF3759CQ0tid9cUFCAo6OjST0nJyf27NljUvbSSy8xePBg+vbty3vvvXfXexUUFFBQUCAfZ2bqUyJqNBo0Gk2F+msLGGypTTaBsMuWqI02gbDL1qiMXdVhu9XEOCUlBa1Wi7+/aeYhf39/kpKS7np9YmIiv/32G19//bVJ+YABA1i8eDE9evSgYcOG/Pnnn/z8889otSXRrzZs2MDRo0c5dOhQhfu7cOFC3nnnHbPy7du34+zsbOEK2yYmJsbaXbgvCLtsh9poEwi7bI2K2JWbm3vP97F60I/SWYokSbprZiOAtWvX4unpyaOPPmpSvnTpUiZOnEh4eDgKhYKGDRsyfvx41qxZA8D169d55ZVX2Lp1q9kIujxmz57NjBkz5OOMjAzq1atH+/bt8fb2rnA7NR2NRsP27dvp3bs39vb21u5OtSHssh1qo00g7LI1KmNXVlYWoNevqmI1Mfb19UWlUpmNgpOTk81Gy6WRJInVq1czevRoHBwcTM7VqVOHn376ifz8fFJTUwkKCmLWrFmEhYUBcOTIEZKTk4mMjJSv0Wq17Nq1i2XLllFQUIBKZZ7QQa1Wo1aXxJlOSUkBoEmTJpUzXCAQCAS1kqysLDw8PKp0rdXE2MHBgcjISGJiYhg+fLhcHhMTw7Bhw8q9dufOnVy6dIkJEyaUWcfR0ZHg4GA0Gg2bNm3iiSeeAOChhx7i1KlTJnXHjx9PeHg4b7zxhkUhtoRhNBwfH1/lD78mkpmZSUhICNevX8fd3d3a3ak2hF22Q220CYRdtkZl7JIkiaysLIKCgqp8P6tOU8+YMYPRo0fTvn17unTpwsqVK4mPj2fSpEmAfmo4ISGBr776yuS6VatW0alTJyIiIszaPHDgAAkJCbRp04aEhATmz5+PTqfj9ddfB8DNzc3sOhcXF3x8fCy2VxbK4tSGHh4eteoP0IC7u7uwy4aojXbVRptA2GVrVNSuex2UWVWMR40aRWpqKgsWLCAxMZGIiAiio6Nl7+jExESzPccZGRls2rSJpUuXWmwzPz+fuXPncuXKFVxdXRk0aBDr1q3D09PzfpsjEAgEAkGVUEj3suL8NyYzMxMPDw8yMjJq1a9BYZdtURvtqo02gbDL1njQdlk9HKatolarefvtt02cumoDwi7bojbaVRttAmGXrfGg7RIjY4FAIBAIrIwYGQsEAoFAYGWEGAsEAoFAYGWEGAsEAoFAYGWEGAsEAoFAYGWEGFeR5cuXExYWhqOjI5GRkezevdvaXSqT+fPno1AoTF4BAQHyeUmSmD9/PkFBQTg5OdGrVy/OnDlj0kZBQQFTpkzB19cXFxcXHnnkEW7cuPFA7di1axdDhw4lKCgIhULBTz/9ZHK+uuxIT09n9OjReHh44OHhwejRo7lz545VbBo3bpzZs+vcuXONtgn0iVU6dOiAm5sbfn5+PProo5w/f96kji0+r4rYZWvPbMWKFbRq1UoObtGlSxd+++03+bwtPqeK2FXjnpMkqDQbNmyQ7O3tpS+++EKKjY2VXnnlFcnFxUW6du2atbtmkbfffltq0aKFlJiYKL+Sk5Pl8x9++KHk5uYmbdq0STp16pQ0atQoKTAwUMrMzJTrTJo0SQoODpZiYmKko0ePSr1795Zat24tFRUVPTA7oqOjpTlz5kibNm2SAOnHH380OV9ddjz88MNSRESEtHfvXmnv3r1SRESENGTIEKvYNHbsWOnhhx82eXapqakmdWqaTZIkSQMGDJDWrFkjnT59Wjp+/Lg0ePBgqV69elJ2drZcxxafV0XssrVn9ssvv0i//vqrdP78een8+fPSm2++Kdnb20unT5+WJMk2n1NF7Kppz0mIcRXo2LGjNGnSJJOy8PBwadasWVbqUfm8/fbbUuvWrS2e0+l0UkBAgPThhx/KZfn5+ZKHh4f02WefSZIkSXfu3JHs7e2lDRs2yHUSEhIkpVIpbdmy5b72vSxKC1d12REbGysB0v79++U6+/btkwDp3LlzD9QmSdJ/YQwbNqzMa2q6TQaSk5MlQNq5c6ckSbXjeVmyS5JqxzPz8vKS/vOf/9Sa52TAYJck1bznJKapK0lhYSFHjhyhf//+JuX9+/dn7969VurV3bl48SJBQUGEhYXx5JNPcuXKFQDi4uJISkoysUetVtOzZ0/ZniNHjqDRaEzqBAUFERERUWNsri479u3bh4eHB506dZLrdO7cGQ8PD6vZumPHDvz8/GjSpAkTJ04kOTlZPmcrNmVkZAAlCVZqy/MqbZcBW31mWq2WDRs2kJOTQ5cuXWrNcyptl4Ga9Jysns/Y1khJSUGr1ZqlefT39zdLB1lT6NSpE1999RVNmjTh1q1bvPfee0RFRXHmzBm5z5bsuXbtGgBJSUk4ODjg5eVlVqem2FxddiQlJeHn52fWvp+fn1VsHThwII8//jihoaHExcXx1ltv0adPH44cOYJarbYJmyRJYsaMGXTr1k1OxlIbnpclu8A2n9mpU6fo0qUL+fn5uLq68uOPP9K8eXNZUGz1OZVlF9S85yTEuIooFAqTY0mSzMpqCgMHDpTft2zZki5dutCwYUO+/PJL2WGhKvbURJurww5L9a1l66hRo+T3ERERtG/fntDQUH799VdGjBhR5nU1yaaXX36ZkydPsmfPHrNztvy8yrLLFp9Z06ZNOX78OHfu3GHTpk2MHTuWnTt3ltkXW3lOZdnVvHnzGvecxDR1JfH19UWlUpn96klOTjb79VhTcXFxoWXLlly8eFH2qi7PnoCAAAoLC0lPTy+zjrWpLjsCAgK4deuWWfu3b9+uEbYGBgYSGhrKxYsXgZpv05QpU/jll1/Yvn07devWlctt/XmVZZclbOGZOTg40KhRI9q3b8/ChQtp3bo1S5cutfnnVJZdlrD2cxJiXEkcHByIjIwkJibGpDwmJoaoqCgr9apyFBQUcPbsWQIDAwkLCyMgIMDEnsLCQnbu3CnbExkZib29vUmdxMRETp8+XWNsri47unTpQkZGBgcPHpTrHDhwgIyMjBpha2pqKtevXycwMBCouTZJksTLL7/MDz/8wLZt2wgLCzM5b6vP6252WcJWnpkxkiRRUFBgs8+pLAx2WcLqz6lS7l4CSZJKtjatWrVKio2NlaZNmya5uLhIV69etXbXLPLqq69KO3bskK5cuSLt379fGjJkiOTm5ib398MPP5Q8PDykH374QTp16pT01FNPWdy6ULduXemPP/6Qjh49KvXp0+eBb23KysqSjh07Jh07dkwCpMWLF0vHjh2Tt5RVlx0PP/yw1KpVK2nfvn3Svn37pJYtW963LRjl2ZSVlSW9+uqr0t69e6W4uDhp+/btUpcuXaTg4OAabZMkSdKLL74oeXh4SDt27DDZOpKbmyvXscXndTe7bPGZzZ49W9q1a5cUFxcnnTx5UnrzzTclpVIpbd26VZIk23xOd7OrJj4nIcZV5NNPP5VCQ0MlBwcHqV27diZbG2oahn2B9vb2UlBQkDRixAjpzJkz8nmdTie9/fbbUkBAgKRWq6UePXpIp06dMmkjLy9PevnllyVvb2/JyclJGjJkiBQfH/9A7di+fbsEmL3Gjh1brXakpqZKzzzzjOTm5ia5ublJzzzzjJSenv7AbcrNzZX69+8v1alTR7K3t5fq1asnjR071qy/Nc0mSZIs2gRIa9askevY4vO6m122+Myee+45+busTp060kMPPSQLsSTZ5nO6m1018TmJFIoCgUAgEFgZsWYsEAgEAoGVEWIsEAgEAoGVEWIsEAgEAoGVEWIsEAgEAoGVEWIsEAgEAoGVEWIsEAgEAoGVEWIsEAgEAoGVEWIsEAgEAoGVEWIsEPwNmT9/Pm3atHng992xYwcKhQKFQsGjjz5aoWvmz58vX7NkyZL72j+BwFoIMRYIahkG4SrrNW7cOF577TX+/PNPq/Xx/PnzrF27tkJ1X3vtNRITE++aHUkgsGVEPmOBoJaRmJgov9+4cSPz5s3j/PnzcpmTkxOurq64urpao3uAPvm6p6dnheoa+qpSqe5vpwQCKyJGxgJBLSMgIEB+eXh4oFAozMpKT1OPGzeORx99lA8++AB/f388PT155513KCoqYubMmXh7e1O3bl1Wr15tcq+EhARGjRqFl5cXPj4+DBs2jKtXr1a6z99//z0tW7bEyckJHx8f+vbtS05Ozj1+EgKB7SDEWCAQALBt2zZu3rzJrl27WLx4MfPnz2fIkCF4eXlx4MABJk2axKRJk7h+/ToAubm59O7dG1dXV3bt2sWePXtwdXXl4YcfprCwsML3TUxM5KmnnuK5557j7Nmz7NixgxEjRiBy2Aj+TggxFggEAHh7e/Pvf/+bpk2b8txzz9G0aVNyc3N58803ady4MbNnz8bBwYG//voLgA0bNqBUKvnPf/5Dy5YtadasGWvWrCE+Pp4dO3ZU+L6JiYkUFRUxYsQI6tevT8uWLZk8ebJVp9EFggeNWDMWCAQAtGjRAqWy5Pe5v78/ERER8rFKpcLHx4fk5GQAjhw5wqVLl3BzczNpJz8/n8uXL1f4vq1bt+ahhx6iZcuWDBgwgP79+zNy5Ei8vLzu0SKBwHYQYiwQCACwt7c3OVYoFBbLdDodADqdjsjISNavX2/WVp06dSp8X5VKRUxMDHv37mXr1q188sknzJkzhwMHDhAWFlYFSwQC20NMUwsEgirRrl07Ll68iJ+fH40aNTJ5eXh4VKothUJB165deeeddzh27BgODg78+OOP96nnAkHNQ4ixQCCoEs888wy+vr4MGzaM3bt3ExcXx86dO3nllVe4ceNGhds5cOAAH3zwAYcPHyY+Pp4ffviB27dv06xZs/vYe4GgZiGmqQUCQZVwdnZm165dvPHGG4wYMYKsrCyCg4N56KGHcHd3r3A77u7u7Nq1iyVLlpCZmUloaCgff/wxAwcOvI+9FwhqFgpJ7B8QCAQPiB07dtC7d2/S09MrHPTDQP369Zk2bRrTpk27L30TCKyJmKYWCAQPnLp16/LUU09VqO4HH3yAq6sr8fHx97lXAoH1ECNjgUDwwMjLyyMhIQHQh7kMCAi46zVpaWmkpaUBei/tyjqHCQS2gBBjgUAgEAisjJimFggEAoHAyggxFggEAoHAyggxFggEAoHAyggxFggEAoHAyggxFggEAoHAyggxFggEAoHAyggxFggEAoHAyggxFggEAoHAyvw/0lX14utiiR8AAAAASUVORK5CYII=",
+ "image/png": "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",
"text/plain": [
"